- •Концепция программы управляемой событиями.
- •Кодировки символов. Unicode.
- •Создание и завершение процессов.
- •Базовый приоритет процесса. Установка базового приоритета.
- •Многопоточность. Достоинства и недостатки.
- •Создание потоков.
- •Динамический приоритет потока. Установка приоритета.
- •Управление потоками: приостановка, возобновление, завершение.
- •11 Потоки и процессы как синхронизационные объекты.
- •Использование виртуальной памяти в приложениях
- •Виртуальное адресное пространство процесса
- •Как адресное пространство разбивается на разделы
- •Раздел для выявления нулевых указателей (Windows 2000 и Windows 98)
- •Раздел для совместимости с программами dos и 16-разрядной Windows (только Windows 98)
- •Раздел для кода и данных пользовательского режима (Windows 2000 и Windows 98)
- •Увеличение раздела для кода и данных пользовательского режима до 3 Гб на процессорах х86 (только Windows 2000)
- •Закрытый раздел размером 64 Кб (только Windows 2000)
- •Раздел для общих mmf (только Windows 98)
- •Раздел для кода и данных режима ядра (Windows2000 и Windows98)
- •20) Передача физической памяти страницам региона.
- •21) Проецируемые в память файлы (концепция).
- •22) Создание проекции файла
- •23) Отображение проекции в память процесса.
23) Отображение проекции в память процесса.
Когда объект “проекция файла” создан, нужно, чтобы система, зарезервировав регион адресного пространства под данные файла, передала их как физическую память, отображенную на регион. Это делает функция MapViewOfFile:
PVOID MapViewOfFile(
HANDLE hFileMappingObJect,
DWORD dwDesiredAccess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
SIZE_T dwNumberOfBytesToMap);
Параметр hFileMappingObject идентифицирует описатель объекта “проекция файла”, возвращаемый предшествующим вызовом либо CreateFileMapping, либо OpenFile-Mapping. Параметр dwDesiredAccess идентифицирует вид доступа к данным.
Проецируя на адресное пространство процесса представление файла, нужно сделать две вещи. Во-первых, сообщить системе, какой байт файла данных считать в представлении первым. Для этого предназначены параметры dwFileOffsetHigh и dwFileOffsetLow. Поскольку Windows поддерживает файлы длиной до 16 экзабайтов, приходится определять смещение в файле как 64-разрядное число: старшие 32 бита передаются в параметре dwFileOffsetHigh, а младшие 32 бита — в параметре dwFileOffsetLow. Заметьте, что смещение в файле должно быть кратно гранулярности выделения памяти в данной системе. (В настоящее время во всех реализациях Windows она составляет 64 Кб.)
Во-вторых, от Вас потребуется указать размер представления, т. е. сколько байтов файла данных должно быть спроецировано на адресное пространство. Размер указывается в параметре dwNumberOfBytesToMap. Если этот параметр равен 0, система попытается спроецировать представление, начиная с указанного смещения и до конца файла.
В Windows 98, если MapViewOfFile не найдет регион, достаточно большой для размещения всего объекта “проекция файла”, возвращается NULL — независимо от того, какой размер представления был запрошен. В Windows 2000 функция MapViewQ/File ищет регион, достаточно большой для размещения запрошенного представления, не обращая внимания на размер самого объекта “проекция файла”.
