Как называются программы с автоматической загрузкой в память
Всем процессам в операционной системе Windows предоставляется важнейший ресурс – виртуальная память ( virtual memory ). Все данные, с которыми процессы непосредственно работают, хранятся именно в виртуальной памяти.
Название "виртуальная" произошло из-за того что процессу неизвестно реальное (физическое) расположение памяти – она может находиться как в оперативной памяти ( ОЗУ ), так и на диске. Операционная система предоставляет процессу виртуальное адресное пространство (ВАП, virtual address space ) определенного размера и процесс может работать с ячейками памяти по любым виртуальным адресам этого пространства, не "задумываясь" о том, где реально хранятся данные.
Размер виртуальной памяти теоретически ограничивается разрядностью операционной системы. На практике в конкретной реализации операционной системы устанавливаются ограничения ниже теоретического предела. Например, для 32-разрядных систем ( x86 ), которые используют для адресации 32 разрядные регистры и переменные, теоретический максимум составляет 4 ГБ (2 32 байт = 4 294 967 296 байт = 4 ГБ). Однако для процессов доступна только половина этой памяти – 2 ГБ, другая половина отдается системным компонентам. В 64 разрядных системах (x64) теоретический предел равен 16 экзабайт (2 64 байт = 16 777 216 ТБ = 16 ЭБ). При этом процессам выделяется 8 ТБ, ещё столько же отдается системе, остальное адресное пространство в нынешних версиях Windows не используется.
Введение виртуальной памяти, во-первых, позволяет прикладным программистам не заниматься сложными вопросами реального размещения данных в памяти, во-вторых, дает возможность операционной системе запускать несколько процессов одновременно, поскольку вместо дорогого ограниченного ресурса – оперативной памяти, используется дешевая и большая по емкости внешняя память .
Реализация виртуальной памяти в Windows
Схема реализации виртуальной памяти в 32-разрядной операционной системе Windows представлена на рис.11.1. Как уже отмечалось, процессу предоставляется виртуальное адресное пространство размером 4 ГБ, из которых 2 ГБ, расположенных по младшим адресам (0000 0000 – 7FFF FFFF), процесс может использовать по своему усмотрению (пользовательское ВАП), а оставшиеся два гигабайта (8000 0000 – FFFF FFFF) выделяются под системные структуры данных и компоненты (системное ВАП) 1 Специальный ключ /3GB в файле boot.ini увеличивает пользовательское ВАП до 3 ГБ, соответственно, уменьшая системное ВАП до 1 ГБ. Начиная с Windows Vista вместо файла boot.ini используется утилита BCDEDIT. Чтобы увеличить пользовательское ВАП, нужно выполнить следующую команду: bcdedit /Set IncreaseUserVa 3072. При этом, чтобы приложение могло использовать увеличенное ВАП, оно должно компилироваться с ключом /LARGEADDRESSAWARE. . Отметим, что каждый процесс имеет свое собственное пользовательское ВАП, а системное ВАП для всех процессов одно и то же.
Рис. 11.1. Реализация виртуальной памяти в 32-разрядных Windows
Виртуальная память делится на блоки одинакового размера – виртуальные страницы. В Windows страницы бывают большие ( x86 – 4 МБ, x64 – 2 МБ) и малые (4 КБ). Физическая память ( ОЗУ ) также делится на страницы точно такого же размера, как и виртуальная память . Общее количество малых виртуальных страниц процесса в 32 разрядных системах равно 1 048 576 (4 ГБ / 4 КБ = 1 048 576).
Обычно процессы задействуют не весь объем виртуальной памяти, а только небольшую его часть. Соответственно, не имеет смысла (и, часто, возможности) выделять страницу в физической памяти для каждой виртуальной страницы всех процессов. Вместо этого в ОЗУ (говорят, "резидентно") находится ограниченное количество страниц, которые непосредственно необходимы процессу. Такое подмножество виртуальных страниц процесса, расположенных в физической памяти, называется рабочим набором процесса (working set ).
Те виртуальные страницы, которые пока не требуются процессу, операционная система может выгрузить на диск , в специальный файл , называемый файлом подкачки (page file).
Каким образом процесс узнает, где в данный момент находится требуемая страница? Для этого служат специальные структуры данных – таблицы страниц ( page table ).
Структура виртуального адресного пространства
Рассмотрим, из каких элементов состоит виртуальное адресное пространство процесса в 32 разрядных Windows (рис.11.2).
В пользовательском ВАП располагаются исполняемый образ процесса, динамически подключаемые библиотеки ( DLL , dynamic-link library ), куча процесса и стеки потоков.
При запуске программы создается процесс (см. лекцию 6 "Процессы и потоки"), при этом в память загружаются код и данные программы (исполняемый образ, executable image ), а также необходимые программе динамически подключаемые библиотеки ( DLL ). Формируется куча ( heap ) – область, в которой процесс может выделять память динамическим структурам данных (т. е. структурам, размер которых заранее неизвестен, а определяется в ходе выполнения программы). По умолчанию размер кучи составляет 1 МБ, но при компиляции приложения или в ходе выполнения процесса может быть изменен. Кроме того, каждому потоку предоставляется стек (stack) для хранения локальных переменных и параметров функций, также по умолчанию размером 1 МБ.
Рис. 11.2. Структура виртуального адресного пространства
В системном ВАП расположены:
- образы ядра (ntoskrnl.exe), исполнительной системы, HAL (hal.dll), драйверов устройств, требуемых при загрузке системы;
- таблицы страниц процесса;
- системный кэш;
- пул подкачиваемой памяти (paged pool) – системная куча подкачиваемой памяти;
- пул подкачиваемой памяти (nonpaged pool) – системная куча неподкачиваемой памяти;
- другие элементы (см. [5]).
Переменные, в которых хранятся границы разделов в системном ВАП, приведены в [5, стр. 442]. Вычисляются эти переменные в функции MmInitSystem ( файл base\ntos\mm\mminit.c, строка 373), отвечающей за инициализацию подсистемы памяти. В файле base\ntos\mm\i386\mi386.h приведена структура ВАП и определены константы , связанные с управлением памятью (например, стартовый адрес системного кэша MM_SYSTEM_CACHE_START , строка 199).
Выделение памяти процессам
1. WinAPI функция VirtualAlloc позволяет резервировать и передавать виртуальную память процессу. При резервировании запрошенный диапазон виртуального адресного пространства закрепляется за процессом (при условии наличия достаточного количества свободных страниц в пользовательском ВАП), соответствующие виртуальные страницы становятся зарезервированными ( reserved ), но доступа к этой памяти у процесса нет – при попытке чтения или записи возникнет исключение . Чтобы получить доступ , процесс должен передать память зарезервированным страницам, которые в этом случае становятся переданными ( commit ).
Отметим, что резервируются участки виртуальной памяти по адресам, кратным значению константы гранулярности выделения памяти MM_ALLOCATION_GRANULARITY ( файл base\ntos\inc\mm.h, строка 54). Это значение равно 64 КБ. Кроме того, размер резервируемой области должен быть кратен размеру страницы (4 КБ).
WinAPI функция VirtualAlloc для выделения памяти использует функцию ядра NtAllocateVirtualMemory ( файл base\ntos\mm\allocvm.c, строка 173).
2. Для более гибкого распределения памяти существует куча процесса, которая управляется диспетчером кучи ( heap manager ). Кучу используют WinAPI функция HeapAlloc , а также оператор языка C malloc и оператор C++ new . Диспетчер кучи предоставляет возможность процессу выделять память с гранулярностью 8 байтов (в 32-разрядных системах), а для обслуживания этих запросов использует те же функции ядра, что и VirtualAlloc.
Дескрипторы виртуальных адресов
Для хранения информации о зарезервированных страницах памяти используются дескрипторы виртуальных адресов ( Virtual Address Descriptors, VAD ). Каждый дескриптор содержит данные об одной зарезервированной области памяти и описывается структурой MMVAD ( файл base\ntos\mm\mi.h, строка 3976).
Границы области определяются двумя полями – StartingVpn (начальный VPN ) и EndingVpn (конечный VPN ). VPN ( Virtual Page Number) – это номер виртуальной страницы; страницы просто нумеруются, начиная с нулевой. Если размер страницы 4 КБ (212 байт ), то VPN получается из виртуального адреса начала страницы отбрасыванием младших 12 бит (или 3 шестнадцатеричных цифр). Например, если виртуальная страница начинается с адреса 0x340000, то VPN такой страницы равен 0x340.
Дескрипторы виртуальных адресов для каждого процесса организованы в сбалансированное двоичное АВЛ дерево 3 АВЛ дерево – структура данных для организации эффективного поиска; двоичное дерево, сбалансированное по высоте. Названо в честь разработчиков – советских ученых Г. М. Адельсон Вельского и Е. М. Ландиса. ( AVL tree ). Для этого в структуре MMVAD имеются поля указатели на левого и правого потомков: LeftChild и RightChild .
Для хранения информации о состоянии области памяти, за которую отвечает дескриптор , в структуре MMVAD содержится поле флагов VadFlags.
Виртуальная память является подкачкой (дополнением) оперативной памяти. Она присутствует практически во всех операционных системах.
При запуске ресурсоемких программ у нас постоянно возникает потребность в виртуальной памяти. По этому сегодня мы рассмотрим подробный обзор «что это такое?» и как мы можем ее изменить в лучшую сторону.
Что такое виртуальная память?
Виртуальная память (Virtual Memory, ВП) — это метод управления памятью компьютера, использующий для работы файл подкачки (swap file). При недостатке существующего объема ОЗУ, позволяет запускать на ПК более ресурсозатратные программы. В таком случае данные приложения автоматически перемещаются между основной памятью и вторичным хранилищем.
Виртуальная память так же обладает рядом достоинств:
- Работает полностью в автоматическом режиме и не требует от пользователя постоянного управления основным пространством.
- Значительно повышает безопасность использования программного обеспечения (снижает вероятность вылетов, критического завершения работы, потери данных).
- Позволяет запускать и использовать на ПК больше памяти, чем это доступно физически.
За счет ее использования компьютер способен изолировать запущенные процессы друг от друга и рационально распределять RAM.
Она расходуется только для хранения активно используемых областей. Виртуальная память может включать важные для пользователя пароли, логины и другую информацию. Эта возможность используется сотрудниками спецслужб и хакерами для получения доступа к остальным компонентам компьютера. Сделать это можно как аппаратно, так и системно.Как узнать объем файла подкачки (swap file)
Файл подкачки хранится на винчестере компьютера. Если для работы устройства используется несколько жестких дисков, то он будет расположен на самом быстром из них. Определить объем ВП можно с использованием стандартных средств Windows или специального софта.
Размер свапа подкачки можно узнать через штатную утилиту «Системный монитор».
Для этого:
- Откройте меню «Пуск» и начните вводить название приложения для мониторинга.
- Появится новое окно. Здесь вы найдете основную информации о свапе, пиковые значения подсчета обмена страниц, процент использования системой и размер.
При определении размера ВП система исходит не из объема ОЗУ, а из задач, которые выполняются на устройстве. Поэтому для определения размера необходимо запустить приложения и компоненты, которые обычно используются компьютером и посмотреть пиковое значение свапинга в течение этого сеанса. Он и будет определять величину файла подкачки.
Узнать объем ВП и другие параметры системы можно используя специальную утилиту Vmmap.exe. Она доступна для бесплатной загрузки на официальном сайте Microsoft и не требует установки. Поставляется в виде исполняемого файла, полностью на английском языке.Dump File и его типы
Swap используется не только для расширения физической памяти, но и для создания аварийных дампов при возникновении «внештатных» аварийных ситуаций.
Как это работает:
- Во время первоначального запуска системы, Windows создает и сохраняет на жестком диске специальную карту секторов, которые занимает на HDD свап.
- Если происходит сбой, то операционная система изучает созданную карту на наличие неисправностей. В идеале она должна быть целостной. Если это так, то данные переписываются на винчестер и в свап по созданной карте секторов.
- При следующем перезапуске компьютера SMSS анализирует ВП и проверяет его на наличие дампов, если он есть, то данные копируются из файла подкачки в специальный dump file. Дополнительно обновляется системный журнал. Поэтому открыв его можно узнать, была ли проведена эта операция.
Таким образом при автоматическом выборе размера свапа, Windows руководствуется настройками для создания аварийного дампа.
Загрузка и восстановление
Дампы можно разделить на 4 типа:
В него записывается все содержимое RAM на момент незапланированного завершения работы. С учетом этой информации файл подкачки должен иметь размер равный физической памяти компьютера +1 МБ (используется для создания записи в системном журнале).
Выбирается системой автоматически только в том случае, если общий объем физической памяти 4 ГБ и менее.В него записывается только информация и память, выделенная для ядра операционной системы. Он занимает сравнительно меньше места и его объема достаточно, чтобы Windows могла определить причины аварийного завершения работы.
Выбирается по умолчанию, если размер RAM превышает 4 ГБ. При выборе дампа памяти ядра важно следить, чтобы минимальный размер для файла подкачки составлял хотя бы ⅓ от общего объема физической.Записывает только самую необходимую информацию для выявления причин аварийного сбоя. Здесь находится стоп-код и описание самой ошибки, дополнительно указываются загруженные на устройство драйвера и перечень запущенных процессов.
Необходимый размер файла подкачки для него —не менее 2 Мб.Доступен только для операционных систем семейства Windows начиная от восьмерки и выше, либо Server 2012. Представляет собой аналог дампа ядра, но с тем отличием, что система может постоянно менять размер файла подкачки, позволяя ей выбирать оптимальный для работы вариант.
Размер свапа будет напрямую зависит от объема RAM и выбранного типа дампа. Дополнительно стоит учитывать и версию операционной системы. Это касается серверных и обычных сборок.Как изменить Dump File
Перед тем, как менять размер виртуальной памяти, необходимо правильно определить и выбрать тип дампа. Сделать это можно используя штатные инструменты Windows. Для этого выполните следующие действия:
- Правой кнопкой мыши кликните по значку «Мой компьютер» и выберите меню «Свойства» . Найдите пункт «Дополнительные параметры» . Откроются свойства системы.
- Попасть в них можно и другим способом. Откройте диалоговое меню: «Выполнить» и в нем наберите:
- На вкладке «Дополнительно» найдите категорию, которая посвящена загрузке и восстановлению системы. После чего нажмите на кнопку «Параметры» .
- В блоке «Отказ системы» найдите графу запись отладочной информации и выберите подходящий тип дампа. Для Windows 10 по умолчанию используется Автоматический.
Загрузка и восстановление
- По желанию дамп можно отключить. Для этого в выпадающем списке выберите «Нет» . После этого система не будет делать резервные копии.
Нажмите «Ок» , как только внесете все необходимые изменения, чтобы они вступили в силу. Как только тип дампа будет выбран, можно приступать к изменению объема виртуальной памяти.
Как изменить объем виртуальной памяти через быстродействие
Запустите системную утилиту «Выполнить» одновременным нажатием клавиш Windows+R или откройте ее через Пуск. После этого:
и нажмите «Ок» .
- Перейдите на вкладку «Дополнительно» и найдите здесь категорию «Быстродействие» .
- Кликните по серой кнопке «Параметры» . Откроется новое окно. Здесь перейдите на вкладку «Дополнительно» .
- В нижней части экрана будет указан объем виртуальной памяти. Нажмите «Изменить» , чтобы ввести другой параметр и увеличить, либо уменьшить размер файла подкачки.
По умолчанию система определяет размер полностью в автоматическом режиме. Это наиболее оптимальная опция для Windows. При изменении объема свапа вручную важно, чтобы новый размер виртуальной памяти был не менее существующего, в противном случае возможны сбои в работе ПК.
После увеличение размера свапа перезагрузка не требуется. Если же он был наоборот уменьшен, то устройство необходимо обязательно перезапустить.Как добавить виртуальную память на Windows
Как правило, среднестатистическому пользователю достаточно того объема ВП, которая выделяется устройством автоматически. Если на ПК мало физической RAM, то увеличить ее объем можно за счет свапа.
Для этого:
- Правой кнопкой мыши кликните по значку «Мой компьютер» и в выпадающем списке выберите графу «Свойства» .
- Откроется окно для работы с параметрами. В левой части экрана найдите надпись «Дополнительный параметры системы» .
- Здесь найдите «Быстродействие» и через меню «Параметры» откройте дополнительные свойства. На отразившейся вкладке выберите «Изменить» напротив «Виртуальная память» .
- Уберите галочку напротив графы «Автоматически выбирать объем файла подкачки» . После этого станут доступны остальные пункты.
- Выберите диск, на котором много свободного места и чьи ресурсы будут использоваться для создания файла подкачки.
- Отметьте пункт «Указать размер» , после чего добавьте значение в пустое поле. При этом число в поле «Максимальный» должно быть в 1,5 раза, чем в поле «Исходный» .
Как только закончите работу, подтвердите действия нажатием кнопки «Ок» . Все изменения автоматически вступят в силу.
В некоторых случаях увеличение Virtual Memory помогает повысить скорость работы ПК, увеличить общее быстродействие.Рекомендации по использованию виртуальной памяти
Если вы не знаете, какой оптимальный объем для свапа выбрать и на что это будет влиять, то далее мы предлагаем ознакомиться вам с небольшими советами, которые помогут увеличить быстродействие ПК.
Итак, рассмотрим ряд советов:
- Если на устройстве используется несколько HDD или SSD, то для свапа указывайте тот диск, который не являетсясистемным. Здесь не должна быть установлена операционная система. В итоге это значительно повысит общую скорость работы.
- Создавать можно несколько файлов подкачки. Если вы используете дамп, то хотя бы один свап должен находиться на системном диске. Для всех остальных случаев делать это не обязательно.
- Если у вас несколько винчестеров с разными физическими параметрами, то выбирать следует тот, который отличается лучшими показателями скорости работы. Узнать это можно из технических характеристик HDD.
- Если жесткий диск разбит на несколько разделов, то для файла подкачки следует выбирать тот, который является основным (первым). К этому участку есть мгновенный доступ, что серьезно влияет на скорость работы.
- Не бойтесь указать слишком большой размер для файла подкачки. Если физический размер HDD позволяет это сделать, то выделите ВП от 4 объемов от существующей RAM. Слишком низкий показатель может привести к появлению ошибок, критическому завершению работы некоторых приложений (с потерей данных).
- Старайтесь ограничивать минимальный объем swap файла. Это позволит избежать его постоянной фрагментации. Если вы используете компьютер для работы с ресурсозатратным ПО или он работает в качестве сервера для хранения баз данных, то размер файла подкачки должен составлять 2-3 полных объема ОЗУ. Во всех остальных случаях он должен быть равен RAM или быть больше в 1,5 раза.
После манипуляций с настройками компьютера и изменением размера ВП лучше перезагрузить компьютер (хотя это не всегда обязательно) и запустить специальную утилиту для дефрагментации. Это поможет переместить его ближе к началу раздела, чтобы система получала к нему моментальный доступ.
Так же подробно про ВП можно посмотреть в видеоролике ниже:
Виртуальная память или файл подкачки
В видео рассматривается оптимальный размер файла подкачки
Сегодня мы ответили на вопрос «Виртуальная память, что это? И для чего она нужна?». Она помогает значительно повысить быстродействие системы и используется для хранения информации при сбоях. По умолчанию объем файла подкачки регулируется Windows полностью в автоматическом режиме.
Если пользователь хочет указать его самостоятельно, то для этого необходимо учесть выбранный тип дампа (либо отключить его). Объем виртуальной памяти зависит от дампа и общего объема RAM.
Понравилась статья? Подпишитесь на канал, чтобы быть в курсе самых интересных материалов
Всем процессам в операционной системе Windows предоставляется важнейший ресурс – виртуальная память ( virtual memory ). Все данные, с которыми процессы непосредственно работают, хранятся именно в виртуальной памяти.
Название "виртуальная" произошло из-за того что процессу неизвестно реальное (физическое) расположение памяти – она может находиться как в оперативной памяти ( ОЗУ ), так и на диске. Операционная система предоставляет процессу виртуальное адресное пространство (ВАП, virtual address space ) определенного размера и процесс может работать с ячейками памяти по любым виртуальным адресам этого пространства, не "задумываясь" о том, где реально хранятся данные.
Размер виртуальной памяти теоретически ограничивается разрядностью операционной системы. На практике в конкретной реализации операционной системы устанавливаются ограничения ниже теоретического предела. Например, для 32-разрядных систем ( x86 ), которые используют для адресации 32 разрядные регистры и переменные, теоретический максимум составляет 4 ГБ (2 32 байт = 4 294 967 296 байт = 4 ГБ). Однако для процессов доступна только половина этой памяти – 2 ГБ, другая половина отдается системным компонентам. В 64 разрядных системах (x64) теоретический предел равен 16 экзабайт (2 64 байт = 16 777 216 ТБ = 16 ЭБ). При этом процессам выделяется 8 ТБ, ещё столько же отдается системе, остальное адресное пространство в нынешних версиях Windows не используется.
Введение виртуальной памяти, во-первых, позволяет прикладным программистам не заниматься сложными вопросами реального размещения данных в памяти, во-вторых, дает возможность операционной системе запускать несколько процессов одновременно, поскольку вместо дорогого ограниченного ресурса – оперативной памяти, используется дешевая и большая по емкости внешняя память .
Реализация виртуальной памяти в Windows
Схема реализации виртуальной памяти в 32-разрядной операционной системе Windows представлена на рис.11.1. Как уже отмечалось, процессу предоставляется виртуальное адресное пространство размером 4 ГБ, из которых 2 ГБ, расположенных по младшим адресам (0000 0000 – 7FFF FFFF), процесс может использовать по своему усмотрению (пользовательское ВАП), а оставшиеся два гигабайта (8000 0000 – FFFF FFFF) выделяются под системные структуры данных и компоненты (системное ВАП) 1 Специальный ключ /3GB в файле boot.ini увеличивает пользовательское ВАП до 3 ГБ, соответственно, уменьшая системное ВАП до 1 ГБ. Начиная с Windows Vista вместо файла boot.ini используется утилита BCDEDIT. Чтобы увеличить пользовательское ВАП, нужно выполнить следующую команду: bcdedit /Set IncreaseUserVa 3072. При этом, чтобы приложение могло использовать увеличенное ВАП, оно должно компилироваться с ключом /LARGEADDRESSAWARE. . Отметим, что каждый процесс имеет свое собственное пользовательское ВАП, а системное ВАП для всех процессов одно и то же.
Рис. 11.1. Реализация виртуальной памяти в 32-разрядных Windows
Виртуальная память делится на блоки одинакового размера – виртуальные страницы. В Windows страницы бывают большие ( x86 – 4 МБ, x64 – 2 МБ) и малые (4 КБ). Физическая память ( ОЗУ ) также делится на страницы точно такого же размера, как и виртуальная память . Общее количество малых виртуальных страниц процесса в 32 разрядных системах равно 1 048 576 (4 ГБ / 4 КБ = 1 048 576).
Обычно процессы задействуют не весь объем виртуальной памяти, а только небольшую его часть. Соответственно, не имеет смысла (и, часто, возможности) выделять страницу в физической памяти для каждой виртуальной страницы всех процессов. Вместо этого в ОЗУ (говорят, "резидентно") находится ограниченное количество страниц, которые непосредственно необходимы процессу. Такое подмножество виртуальных страниц процесса, расположенных в физической памяти, называется рабочим набором процесса (working set ).
Те виртуальные страницы, которые пока не требуются процессу, операционная система может выгрузить на диск , в специальный файл , называемый файлом подкачки (page file).
Каким образом процесс узнает, где в данный момент находится требуемая страница? Для этого служат специальные структуры данных – таблицы страниц ( page table ).
Структура виртуального адресного пространства
Рассмотрим, из каких элементов состоит виртуальное адресное пространство процесса в 32 разрядных Windows (рис.11.2).
В пользовательском ВАП располагаются исполняемый образ процесса, динамически подключаемые библиотеки ( DLL , dynamic-link library ), куча процесса и стеки потоков.
При запуске программы создается процесс (см. лекцию 6 "Процессы и потоки"), при этом в память загружаются код и данные программы (исполняемый образ, executable image ), а также необходимые программе динамически подключаемые библиотеки ( DLL ). Формируется куча ( heap ) – область, в которой процесс может выделять память динамическим структурам данных (т. е. структурам, размер которых заранее неизвестен, а определяется в ходе выполнения программы). По умолчанию размер кучи составляет 1 МБ, но при компиляции приложения или в ходе выполнения процесса может быть изменен. Кроме того, каждому потоку предоставляется стек (stack) для хранения локальных переменных и параметров функций, также по умолчанию размером 1 МБ.
Рис. 11.2. Структура виртуального адресного пространства
В системном ВАП расположены:
- образы ядра (ntoskrnl.exe), исполнительной системы, HAL (hal.dll), драйверов устройств, требуемых при загрузке системы;
- таблицы страниц процесса;
- системный кэш;
- пул подкачиваемой памяти (paged pool) – системная куча подкачиваемой памяти;
- пул подкачиваемой памяти (nonpaged pool) – системная куча неподкачиваемой памяти;
- другие элементы (см. [5]).
Переменные, в которых хранятся границы разделов в системном ВАП, приведены в [5, стр. 442]. Вычисляются эти переменные в функции MmInitSystem ( файл base\ntos\mm\mminit.c, строка 373), отвечающей за инициализацию подсистемы памяти. В файле base\ntos\mm\i386\mi386.h приведена структура ВАП и определены константы , связанные с управлением памятью (например, стартовый адрес системного кэша MM_SYSTEM_CACHE_START , строка 199).
Выделение памяти процессам
1. WinAPI функция VirtualAlloc позволяет резервировать и передавать виртуальную память процессу. При резервировании запрошенный диапазон виртуального адресного пространства закрепляется за процессом (при условии наличия достаточного количества свободных страниц в пользовательском ВАП), соответствующие виртуальные страницы становятся зарезервированными ( reserved ), но доступа к этой памяти у процесса нет – при попытке чтения или записи возникнет исключение . Чтобы получить доступ , процесс должен передать память зарезервированным страницам, которые в этом случае становятся переданными ( commit ).
Отметим, что резервируются участки виртуальной памяти по адресам, кратным значению константы гранулярности выделения памяти MM_ALLOCATION_GRANULARITY ( файл base\ntos\inc\mm.h, строка 54). Это значение равно 64 КБ. Кроме того, размер резервируемой области должен быть кратен размеру страницы (4 КБ).
WinAPI функция VirtualAlloc для выделения памяти использует функцию ядра NtAllocateVirtualMemory ( файл base\ntos\mm\allocvm.c, строка 173).
2. Для более гибкого распределения памяти существует куча процесса, которая управляется диспетчером кучи ( heap manager ). Кучу используют WinAPI функция HeapAlloc , а также оператор языка C malloc и оператор C++ new . Диспетчер кучи предоставляет возможность процессу выделять память с гранулярностью 8 байтов (в 32-разрядных системах), а для обслуживания этих запросов использует те же функции ядра, что и VirtualAlloc.
Дескрипторы виртуальных адресов
Для хранения информации о зарезервированных страницах памяти используются дескрипторы виртуальных адресов ( Virtual Address Descriptors, VAD ). Каждый дескриптор содержит данные об одной зарезервированной области памяти и описывается структурой MMVAD ( файл base\ntos\mm\mi.h, строка 3976).
Границы области определяются двумя полями – StartingVpn (начальный VPN ) и EndingVpn (конечный VPN ). VPN ( Virtual Page Number) – это номер виртуальной страницы; страницы просто нумеруются, начиная с нулевой. Если размер страницы 4 КБ (212 байт ), то VPN получается из виртуального адреса начала страницы отбрасыванием младших 12 бит (или 3 шестнадцатеричных цифр). Например, если виртуальная страница начинается с адреса 0x340000, то VPN такой страницы равен 0x340.
Дескрипторы виртуальных адресов для каждого процесса организованы в сбалансированное двоичное АВЛ дерево 3 АВЛ дерево – структура данных для организации эффективного поиска; двоичное дерево, сбалансированное по высоте. Названо в честь разработчиков – советских ученых Г. М. Адельсон Вельского и Е. М. Ландиса. ( AVL tree ). Для этого в структуре MMVAD имеются поля указатели на левого и правого потомков: LeftChild и RightChild .
Для хранения информации о состоянии области памяти, за которую отвечает дескриптор , в структуре MMVAD содержится поле флагов VadFlags.
Бесплатный кросс‑платформенный загрузчик с современным дизайном и русифицированным интерфейсом. Free Download Manager умеет скачивать не только обычные файлы, но и торренты, видео и музыку. При этом можно просматривать медиафайлы ещё в процессе загрузки и преобразовывать их в другие форматы по её окончании.
Программа поддерживает разделение файлов на части для ускорения загрузки, возобновление прерванных передач, а также интеграцию в браузер, планирование действий и гибкую настройку использования трафика.
2. uGet
- Поддерживаемые платформы: Windows, Linux, Android.
- Цена: бесплатно.
Ещё одно кросс‑платформенное приложение с открытым исходным кодом, которое встраивается во все популярные браузеры, поддерживает многопоточное скачивание и умеет подхватывать ссылки из буфера обмена. Кроме того, в uGet есть планировщик, автоматические действия по окончании загрузки, разделение файлов на категории и пакетный режим.
3. Ninja Download Manager
- Поддерживаемые платформы: Windows, macOS, Linux.
- Цена: 19 долларов.
Удобный менеджер загрузок с лаконичным интерфейсом и массой полезных функций. Как и аналоги, он ускоряет скачивание за счёт разделения файла на фрагменты и одновременной работы с несколькими сегментами.
В Ninja Download Manager много настроек по части планирования, очереди передачи контента и управления трафиком. Также есть проверка целостности файлов по окончании загрузки и предварительный просмотр, благодаря которому можно ознакомиться с видео уже через несколько секунд после начала скачивания.
4. Persepolis
- Поддерживаемые платформы: Windows, macOS, Linux.
- Цена: бесплатно.
Минималистичный загрузчик, в основе которого лежит известная консольная программа для скачивания Aria2. Несмотря на аскетичный внешний вид, Persepolis не уступает в возможностях конкурентам. Здесь есть многопоточное скачивание, планировщик и настраиваемая очередь, а также интеграция с браузерами, поддержка загрузки видео с YouTube, Vimeo и других платформ.
5. Download Master
Один из самых известных и старых менеджеров загрузок для Windows, который до сих пор развивается и регулярно обновляется. Download Master умеет скачивать данные с обычных сайтов, FTP, файлообменников и практически с любых видеосервисов, в числе которых YouTube.
Из ключевых особенностей можно выделить возможность просмотра файлов внутри архивов и их выборочной загрузки, умное управление скоростью, а также интеграцию с буфером обмена и браузерами, автоматическое назначение категорий и настраиваемые сценарии после выполнения всех заданий.
6. EagleGet
Сбалансированное приложение с поддержкой тем оформления и гибко настраиваемыми уведомлениями. EagleGet разделяет файлы для ускорения скачивания, умеет подхватывать ссылки из браузера, а также позволяет назначать приоритеты, управлять использованием канала и добавлять задачи в очередь загрузки. Кроме того, в программе есть встроенное средство проверки вредоносного ПО и целостности данных.
7. Folx
- Поддерживаемая платформа: macOS.
- Цена: бесплатно / 20 долларов.
Универсальный инструмент для скачивания любых данных, который несмотря на обманчиво простой интерфейс имеет множество функций. Folx интегрируется в браузеры и распознаёт ссылки из буфера обмена, позволяя сохранять файлы, видео с YouTube и торренты. Последние можно искать прямо внутри приложения.
Программа разбивает загрузки на несколько потоков, повышая скорость. Кроме того, Folx умеет автоматически сортировать файлы в зависимости от типа и присваивать им теги. Также есть поддержка прокси, загрузка по расписанию и встроенный менеджер паролей для сайтов.
Читайте также: