Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
!1-25.doc
Скачиваний:
7
Добавлен:
28.10.2018
Размер:
2.62 Mб
Скачать

15.1 Архитектура памяти в Win32. Виртуальное адресное пространство. Регионы в адресном пространстве. Передача региону физической памяти.

Архитектура памяти в Win32. ВWin32 виртуальное адресное пространство каждого процесса составляет 4Г. Каждому процессу отводится закрытое адресное пространство. Когда в процессе выполняется какой-либо поток, то он получает доступ только к той памяти, которая принадлежит его процессу. В разных реализациях Win32 разбиение 4-хГБайтного адресного пространства процесса на разделы осуществляется по разному.

Адресное пространство, выделяемое процессу практически все свободно (незарезервировано), поэтому, чтобы воспользоваться какой-нибудь его частью, нужно выделить в нем определенные регионы, вызвав Win32 функцию VirtualAlloc. Операция выделения региона называется резервированием (reserving). Освобождение региона осуществляется вызовом функции VirtualFree. Чтобы практически использовать зарезервированный регион адресного пространства, нужно выделить физ память и отобразить ее на этот регион. Такая операция называется передачей физической памяти. Чтобы предать физическую память региону, нужно использовать все ту же функцию VirtualAlloc.

В Win32 имеются 3 механизма управления памятью:

  1. виртуальная память для операций с большими массивами объектов;

  2. проецируемые в память файлы;

  3. кучи для работы с множеством малых объектов (динамическая память).

Для резервирования региона в адресном пространстве используется функция:

LPVOID VirtualAlloc( LPVOID lpAddress,                      DWORD dwSize,                      DWORD flAllocationType,                      DWORD flProtect  );

lpAddress - содержит адрес, указывающий, где именно система должна зарезервировать участок адресного пространства. Обычно предается NULL. dwSize - размер региона в байтах. flAllocationType - сообщает системе, что необходимо сделать: зарезервировать регион (MEM_RESERVE) или передать физическую память (MEM_COMMIT). flProtect - параметры защиты, передаваемые региону.

Память

Каждому процессу в Win32 доступно линейное 4-гигабайтное (2^32 = 4 294 967 296) виртуальное адресное пространство. Обычно верхняя половина этого пространства резервируется за операционной системой, а вторая половина доступна процессу.

Виртуальное адресное пространство процесса доступно всем потокам этого процесса. Иными словами, все потоки одного процесса выполняются в едином адресном пространстве.

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

Виртуальная память может вовсе не соответствовать структуре физической памяти. Диспетчер памяти транслирует виртуальные адреса на физические, по которым реально хранятся данные. Поскольку далеко не всякий компьютер в состоянии выделить по 4 Гбайт физической памяти на каждый процесс, используется механизм подкачки (swapping). Когда оперативной памяти не хватает, операционная система перемещает часть содержимого памяти на диск, в файл (swap file или page file), освобождая, таким образом, физическую память для других процессов. Когда поток обращается к странице виртуальной памяти, записанной на диск, диспетчер виртуальной памяти загружает эту информацию с диска обратно в память.