Основы программирования в Win32API. Марапулец Ю.В. - 51 стр.

UptoLike

Составители: 

(LPVOID lpvAddress, // начало блокируемой области
DWORD dwSize, // размер блокируемой области);
BOOL VirtualUnlock
(LPVOID lpvAddress, // начало области, с которой снимается
// блокировка
DWORD dwSize, // размер области, с которой снимается
// блокировка);…
В системе отсутствует счетчик, определяющий, сколько раз блокирова-
лась виртуальная память. Необязательно, чтобы каждой функции VirtualLock()
соответствовала функция VirtualUnlock(). Например, можно заблокировать три
последовательные страницы с помощью трех различных функций, а затем от-
менить их блокировку с помощью одной функции. Все три страницы предва-
рительно должны быть заблокированы. Однако диапазон, заданный функцией
VirtualUnlock(), может не совпадать с диапазоном, заданным функцией Vir-
tualLock().
Перед блокировкой память должна быть закреплена. По завершении про-
цесса операционная система автоматически отменяет блокировку всех стра-
ниц, которые остались заблокированными. Функция VirtualFree() освобождает
все страницы, даже заблокированные.
3.3.2. Файлы, проецируемые в память
Как и виртуальная память, проецируемые файлы позволяют резервиро-
вать регион адресного пространства и передавать ему физическую память.
Различие между этими механизмами состоит в том, что в последнем случае
физическая память не выделяется из системного страничного файла, а берется
из файла, уже находящегося на диске. Как только файл спроецирован в память,
к нему можно обращаться так, как будто он в нее целиком загружен.
Данный механизм может использоваться в следующих случаях [2]:
для запуска исполняемых файлов (EXE) и динамически связываемых
библиотек (DLL);
для работы с файлами;
для одновременного использования одной области данных двумя про-
цессами.
Рассмотрим подробнее каждый из вышеперечисленных механизмов.
Запуск исполняемых файлов и библиотек. Ранее рассматривалась функция
CreateProcess() для запуска процессов. При использовании данной функции
применяется VMM для выполнения следующих действий:
создание адресного пространства процесса (размером 4 Gb);
резервирование в адресном пространстве процесса региона размером,
достаточным для размещения исполняемого файла. Начальный адрес региона оп-
ределяется в заголовке EXE-модуля. Обычно он равен 0 × 00 400 000, но может
51
   (LPVOID lpvAddress,            // начало блокируемой области
   DWORD dwSize,               // размер блокируемой области);
BOOL VirtualUnlock
   (LPVOID lpvAddress,            // начало области, с которой снимается
                                  // блокировка
    DWORD dwSize,             // размер области, с которой снимается
                                  // блокировка);…

     В системе отсутствует счетчик, определяющий, сколько раз блокирова-
лась виртуальная память. Необязательно, чтобы каждой функции VirtualLock()
соответствовала функция VirtualUnlock(). Например, можно заблокировать три
последовательные страницы с помощью трех различных функций, а затем от-
менить их блокировку с помощью одной функции. Все три страницы предва-
рительно должны быть заблокированы. Однако диапазон, заданный функцией
VirtualUnlock(), может не совпадать с диапазоном, заданным функцией Vir-
tualLock().
     Перед блокировкой память должна быть закреплена. По завершении про-
цесса операционная система автоматически отменяет блокировку всех стра-
ниц, которые остались заблокированными. Функция VirtualFree() освобождает
все страницы, даже заблокированные.


                  3.3.2. Файлы, проецируемые в память

     Как и виртуальная память, проецируемые файлы позволяют резервиро-
вать регион адресного пространства и передавать ему физическую память.
Различие между этими механизмами состоит в том, что в последнем случае
физическая память не выделяется из системного страничного файла, а берется
из файла, уже находящегося на диске. Как только файл спроецирован в память,
к нему можно обращаться так, как будто он в нее целиком загружен.
     Данный механизм может использоваться в следующих случаях [2]:
     – для запуска исполняемых файлов (EXE) и динамически связываемых
библиотек (DLL);
     – для работы с файлами;
     – для одновременного использования одной области данных двумя про-
цессами.
      Рассмотрим подробнее каждый из вышеперечисленных механизмов.
     Запуск исполняемых файлов и библиотек. Ранее рассматривалась функция
CreateProcess() для запуска процессов. При использовании данной функции
применяется VMM для выполнения следующих действий:
     – создание адресного пространства процесса (размером 4 Gb);
     – резервирование в адресном пространстве процесса региона размером,
достаточным для размещения исполняемого файла. Начальный адрес региона оп-
ределяется в заголовке EXE-модуля. Обычно он равен 0 × 00 400 000, но может

                                    51