Составители:
В остальных полях описывается меньшая подгруппа страниц: указываются ее раз-
мер, текущее состояние и флаги защиты. В последнем поле всегда возвращается значе-
ние MEM_PRIVATE, которое свидетельствует о том, что другие процессы не могут со-
вместно использовать заданный блок памяти. Наличие данного поля указывает, что
впоследствии Microsoft может рассмотреть вопрос о применении других механизмов для
совместного использования памяти различными процессами.
Хотя функции GlobalMemoryStatus и GetSystemInfo не входят в набор команд,
предназначенных для работы с виртуальной памятью, они возвращают полезную ин-
формацию о памяти. Функция GlobalMemoryStatus определяет размер и свободный объ-
ем физической памяти, страничного файла и текущего адресного пространства. Функция
GetSystemInfo наряду с другой информацией возвращает размер системной физической
страницы, а также младший и старший виртуальные адреса, доступные для процессов и
DLL-файлов. Обычно эти значения составляют 4 Кб, 0x00010000 и 0x7FFEFFFF соот-
ветственно.
Выделенные страницы можно заблокировать в памяти, т.е. запретить их вытесне-
ние в файл подкачки. Для этих целей служит пара функций VirtualLock и VirtualUnlock.
Заблокированная страница не может быть перекачана на диск при выполнении програм-
мы. Однако если ваша программа в данный момент не выполняется, на диск могут быть
перекачаны все страницы, включая заблокированные. В сущности, блокировка выступа-
ет гарантией того, что страница будет постоянной и неотъемлемой частью рабочего на-
бора программы. При перегрузке операционной системы менеджер рабочих наборов
может ограничить количество страниц, блокируемых одним процессом. Максимальное
количество блокируемых страниц для любого процесса колеблется от 30 до 40 и зависит
от объема системной памяти и рабочего набора приложения.
Блокировка страниц является нежелательной, поскольку она препятствует работе
менеджера виртуальной памяти и затрудняет организацию физической памяти. Как пра-
вило, все страницы блокируются только драйверами устройств и другими компонентами
системного уровня. Программы, которые должны очень быстро реагировать на систем-
ные сигналы, блокируют только часть страниц, чтобы реакция на неожиданный систем-
ный сигнал не задерживалась из-за медленного выполнения операций чтения с диска.
BOOL VirtualLock( LPVOID lpvAddress, // начало блокируемой области
DWORD dwSize ); // размер блокируемой области
BOOL VirtualUnlock( LPVOID lpvAddress, // начало области, с которой снимается
// блокировка
DWORD dwSize ); // размер области, с которой снимается
// блокировка
В системе отсутствует счетчик, определяющий, сколько раз блокировалась вирту-
альная память. Не обязательно, чтобы каждой функции VirtualLock соответствовала
функция VirtualUnlock. Например, можно заблокировать три последовательные страни-
цы с помощью трех различных функций, а затем отменить их блокировку с помощью
одной функции. Все три страницы предварительно должны быть заблокированы, Однако
диапазон, заданный функцией VirtualUnlock, может не совпадать с диапазоном, задан-
ным функцией VirtualLock.
Перед блокировкой память должна быть закреплена. По завершении процесса опе-
рационная система автоматически отменяет блокировку всех страниц, которые остались
заблокированными. Функция VirtualFree освобождает все страницы, даже заблокиро-
ванные.
115
В остальных полях описывается меньшая подгруппа страниц: указываются ее раз-
мер, текущее состояние и флаги защиты. В последнем поле всегда возвращается значе-
ние MEM_PRIVATE, которое свидетельствует о том, что другие процессы не могут со-
вместно использовать заданный блок памяти. Наличие данного поля указывает, что
впоследствии Microsoft может рассмотреть вопрос о применении других механизмов для
совместного использования памяти различными процессами.
Хотя функции GlobalMemoryStatus и GetSystemInfo не входят в набор команд,
предназначенных для работы с виртуальной памятью, они возвращают полезную ин-
формацию о памяти. Функция GlobalMemoryStatus определяет размер и свободный объ-
ем физической памяти, страничного файла и текущего адресного пространства. Функция
GetSystemInfo наряду с другой информацией возвращает размер системной физической
страницы, а также младший и старший виртуальные адреса, доступные для процессов и
DLL-файлов. Обычно эти значения составляют 4 Кб, 0x00010000 и 0x7FFEFFFF соот-
ветственно.
Выделенные страницы можно заблокировать в памяти, т.е. запретить их вытесне-
ние в файл подкачки. Для этих целей служит пара функций VirtualLock и VirtualUnlock.
Заблокированная страница не может быть перекачана на диск при выполнении програм-
мы. Однако если ваша программа в данный момент не выполняется, на диск могут быть
перекачаны все страницы, включая заблокированные. В сущности, блокировка выступа-
ет гарантией того, что страница будет постоянной и неотъемлемой частью рабочего на-
бора программы. При перегрузке операционной системы менеджер рабочих наборов
может ограничить количество страниц, блокируемых одним процессом. Максимальное
количество блокируемых страниц для любого процесса колеблется от 30 до 40 и зависит
от объема системной памяти и рабочего набора приложения.
Блокировка страниц является нежелательной, поскольку она препятствует работе
менеджера виртуальной памяти и затрудняет организацию физической памяти. Как пра-
вило, все страницы блокируются только драйверами устройств и другими компонентами
системного уровня. Программы, которые должны очень быстро реагировать на систем-
ные сигналы, блокируют только часть страниц, чтобы реакция на неожиданный систем-
ный сигнал не задерживалась из-за медленного выполнения операций чтения с диска.
BOOL VirtualLock( LPVOID lpvAddress, // начало блокируемой области
DWORD dwSize ); // размер блокируемой области
BOOL VirtualUnlock( LPVOID lpvAddress, // начало области, с которой снимается
// блокировка
DWORD dwSize ); // размер области, с которой снимается
// блокировка
В системе отсутствует счетчик, определяющий, сколько раз блокировалась вирту-
альная память. Не обязательно, чтобы каждой функции VirtualLock соответствовала
функция VirtualUnlock. Например, можно заблокировать три последовательные страни-
цы с помощью трех различных функций, а затем отменить их блокировку с помощью
одной функции. Все три страницы предварительно должны быть заблокированы, Однако
диапазон, заданный функцией VirtualUnlock, может не совпадать с диапазоном, задан-
ным функцией VirtualLock.
Перед блокировкой память должна быть закреплена. По завершении процесса опе-
рационная система автоматически отменяет блокировку всех страниц, которые остались
заблокированными. Функция VirtualFree освобождает все страницы, даже заблокиро-
ванные.
115
Страницы
- « первая
- ‹ предыдущая
- …
- 111
- 112
- 113
- 114
- 115
- …
- следующая ›
- последняя »
