Составители:
Рубрика:
(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
Страницы
- « первая
- ‹ предыдущая
- …
- 49
- 50
- 51
- 52
- 53
- …
- следующая ›
- последняя »
