Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 6004.doc
Скачиваний:
21
Добавлен:
30.04.2022
Размер:
1.29 Mб
Скачать

2.6.5.Сплошная модель памяти flat

Сплошная модель памяти FLAT реализует виртуальную концепцию адресации в ОС Windows 9х и Windows NT/2000. В соответствии с этой моделью каждому процессу выделяется виртуальное адресное пространство протяженностью 4Гб (рис. 13).

Рис. 13. Схема распределения адресного пространства (FLAT)

Из них 2Гб зарезервировано за ОС, а за пользовательским процессом закреплено пространство протяженностью 2Гб - 128 Кб, расположенное в области младших адресов. Блоки по 64 Кб используются для контроля за правильностью указателей. Физически виртуальное адресное пространство реализуется в виде файлов подкачки страниц, которые размещаются на внешних накопителях. Всего может быть создано до 16 файлов подкачки.

В виртуальном адресном пространстве располагается программный код, данные, стандартный пул, динамические пулы и стек. Во всех случаях выделение памяти процессу приводит к операциям с виртуальными страницами из его адресного пространства.

2.6.6.Функции для доступа к виртуальной памяти

У процесса есть две возможности заказать себе страницу виртуальной памяти:

1) резервировать диапазон адресов в виртуальном адресном пространстве;

2) получить в пользование страницу виртуальной памяти.

Оба способа реализуются одной и той же функцией:

LPVOID VirtualAlloc(LPVOID lpvAddress,

DWORD cbSize,

DWORD fdwAllocationType,

DWORD fdwProtect);

первый параметр - адрес области, резервируемой и/или передаваемой в пользование. При резервировании это значение должно быть равно нулю (NULL);

второй параметр - размер области в байтах;

третий параметр - способ получения

MEM_RESERVE - зарезервировать

MEM_COMMIT - выделить с обнулением

MEM_TOP_DOWN - выделить в пространстве верхних адресов (под стек);

четвертый параметр - флаги доступа

PAGE_READWRITE - разрешает чтение и запись

PAGE_READONLY - разрешает только чтение

PAGE_EXECUTE - выполнение

PAGE_EXECUTE_READ - разрешает выполнение и чтение блока

PAGE_EXECUTE_READWRITE - полный доступ

PAGE_NOACCEESS - нет доступа, можно определить только состояние блока

PAGE_GUARD - сигнализация доступа к странице

PAGE_NOCACНE - отмена копирования страницы для этого блока

При резервировании адрес округляется до ближайшей границы блока размером 64К, во всех остальных случаях - до 4К. Память выделяется целыми страницами. Зарезервированная область должна быть обязательно в последующем назначена для использования.

2.6.6.1Освобождение виртуальной памяти

BOOL VirtualFree (LPVOID lpvAddress,

DWORD cbSize,

DWORD fdwFreeType);

Функции передаются адрес и размер освобождаемой области.

Третий параметр может иметь значения:

MEM_RELEASE - освободить

MEM_DECOMMIT - вернуть в зарезервированное состояние.

2.6.6.2Фиксирование страниц основной памяти

Эта функция позволяет закрепить за объектом данных необходимое множество страниц физической памяти. В результате вызова функции будет зафиксировано столько страниц, сколько нужно для размещения объекта, адрес и размер которого передаются в качестве параметров:

BOOL VirtualLock (LPVOID lpvAddress, DWORD cbSize);

Расфиксирование страниц выполняется следующей функцией:

BOOL VirtualUnlock (LPVOID lpvAddress, DWORD cbSize);

Страницы возвращаются ОС и могут быть переданы другому процессу.

По умолчанию процесс не может зафиксировать более 30 страниц основной памяти. Установка числа страниц, доступных для фиксирования, выполняется функцией:

BOOL SetProcessWorkingSetSize (НANDLE НProcess,

DWORD dwMinSize,

DWORD dwMaxSize);

позволяет для процесса (1 параметр) установить минимальное и максимальное число страниц основной памяти. Текущее число страниц может быть получено следующим образом:

BOOL GetProcessWorkingSetSize (НANDLE НProcess,

LPDWORD lpdwMinSize,

LPDWORD lpdwMaxSize);

задаются указатели, по которым функция вернет минимальное и максимальное количество страниц.