Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
spo_samoe.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
2 Мб
Скачать
☆
  1. Четыре метода управления виртуальной памятью. Области применения каждого метода. Понятие региона виртуального адресного пространства (вап). Свойства региона вап.

4 способа:

  1. Резервирование регионов в ВАП и передачи им физической памяти (применяют, когда требуется зарезервировать область памяти более 1 страницы, т.е. более 4 к);

  2. Использование куч (Heap) (применяют, когда приложение использует большое количество мелких участков, размер которых меньше 1 страницы);

  3. Файлы, проецируемые в память (с памятью которых объекты, которые расположены на диске могут быть перемещены в оперативную память без операций ввода/вывода);

  4. AWE (Address Windowing Extensions) ОП>ВАП

Регион – совокупность смежных страниц виртуальной памяти, которая обладает свойствами:

  • статус (state)

  • заряд (reserved)

  • распределение (commit)

  • тип - type – image

- mapped

- private

  • атрибуты защиты PAGE_READWRITE - допускается чтение и запись;

PAGE_NOACCESS – отладка;

PAGE_GUARD - индикатор, который показывает, вышел ли массив за пределы;

PAGE_READONLY - допускается только чтение;

PAGE_COPYORWRITE - допускается только копирование и запись;

PAGE_EXECUTE - код, который может использовать.

Функции, определяющие свойства ВАП:

  1. GetSystemInfo (); (гранулярность – величина, которая определяет адрес, по которому могут размещаться регионы(64к));

  2. GlobalMemoryStatus();

  3. VirtualQuerty ();

VirtualOuertyEx – заглянуть к соседу

  1. Резервирование регионов в адресном пространстве и передача физической памяти региону. Используемые функции Win32 и их параметры.

Вначале все виртуальное адресное пространство процесса свободно. Оно начинает заполняться по мере выполнения программы. Чтобы воспользоваться какой-либо частью этого пространства, в нем нужно создать регион, зарезервировав определенный диапазон адресов. Такая схема позволяет поддерживать разреженные адресные пространства.

Для создания региона явным образом обычно используется функция VirtualAlloc (вызов ряда Win32 функций, таких, как CreateFileMapping или CreateHeap, также имеет следствием создание региона). В процессе создания региона выделяют два этапа: резервирование региона и передачу ему физической памяти (commit). Оба этапа выполняются в результате вызова VirtualAlloc и могут быть объединены. В итоге каждая виртуальная страница может оказаться в одном из трех состояний: свободная (free), зарезервированная (reserve) и переданная (committed)

Резервирование региона - быстрая операция, а в последующей передаче памяти не всегда возникает необходимость; таким образом, двухэтапный процесс выделения позволяет повысить эффективность системы управления памятью.

Резервирование региона предполагает выравнивание начала региона с учетом гранулярности памяти (обычно это 64 Кб). Кроме того, размер региона должен быть кратен объему страницы (4Кб для x86 процессора. Узнать размер страницы можно при помощи функции GetSystemInfo ). В случае успешного резервирования происходит коррекция дерева VAD.

Для создаваемого региона можно указать конкретный диапазон виртуальных адресов. Если этого не делать, то система просматривает виртуальное адресное пространство процесса, пытаясь найти непрерывную незарезервированную область нужного размера.

Чтобы использовать зарезервированный регион, ему нужно передать, то есть реально выделить, физическую память (физическую или внешнюю по усмотрению ОС). Нет необходимости передавать физическую память всему региону целиком. Более того, это рекомендуется делать поэтапно, по мере необходимости. Так обеспечивается экономия физической памяти. Например, сложные приложения, работающие с большими массивами данных, используют следующую стратегию. Вначале физическая память не передается. Как только происходит обращение к виртуальному адресу, под который не выделена память, она тут же выделяется. Как правило, подобные ситуации обрабатываются при помощи структурной обработки исключений.

адр=null (опер.сист. сама ищет, куда поставить участок памяти)

Вид операций:

_mem_reserve \

_mem_commit \

_mem_TOP_Down

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]