Составители:
4.4.2. API-функции для обеспечения проецирования файлов
Как и виртуальная память, проецируемые файлы позволяют резервировать регион
адресного пространства и передавать ему физическую память. Различие между этими
механизмами состоит в том, что в последнем случае физическая память не выделяется из
системного страничного файла, а берется из файла, уже находящегося на диске. Как
только файл спроецирован в память, к нему можно обращаться так, как будто он в нее
целиком загружен.
Данный механизм может использоваться в следующих случаях [9, 12]:
• Для запуска исполняемых файлов (EXE) и динамически связываемых библиотек
(DLL).
• Для работы с файлами
• Для одновременного использования одной области данных двумя процессами.
Рассмотрим подробнее каждый из вышеперечисленных механизмов.
Запуск исполняемых файлов и библиотек. Ранее рассматривалась функция
CreateProcess для запуска процессов. При использовании данной функции VMM приме-
няется для выполнения следующих действий:
- Создание адресного пространства процесса (размером 4Gb);
- Резервирование в адресном пространстве процесса региона размером, достаточным
для размещения исполняемого файла. Начальный адрес региона определяется в заго-
ловке EXE-модуля. Обычно он равен 0x00400000, но может быть изменен при по-
строении файла параметром /BASE компоновщика.
- Отображение исполняемого файла на зарезервированное адресное пространство. Тем
самым VMM распределяет физические страницы не из файла подкачки, а непосред-
ственно из EXE-модуля.
- Отображение на адресное пространство процесса необходимых ему динамически
связываемых библиотек. Информация о необходимых библиотеках находится в заго-
ловке EXE-модуля. Желательное расположение региона адресов описано внутри
библиотеки. Visual C++, например, устанавливает по умолчанию адрес 0x10000000.
Этот адрес может так же изменяться параметром /BASE компоновщика. Если при за-
грузке выясняется, что данный регион занят, то система попытается переместить
библиотеку в другой регион адресов, на основе настроечной информации, содержа-
щейся в DLL-модуле. Однако эта операция снижает эффективность системы и, кроме
того, если настроечная информация удалена при компоновке библиотеки парамет-
ром /FIXED, то загрузка становится вообще невозможной.
При одновременном запуске нескольких приложений Win32 отображает один и тот
же исполняемый файл и библиотеки на адресные пространства различных процессов.
При этом возникает проблема независимого использования процессами статических пе-
ременных и областей данных. Кроме того, изменение данных исполняющейся програм-
мой не должно приводить к изменению EXE-файла. Win32 откладывает решение этой
проблемы на максимально возможный срок (Lazy Evaluation). При этом используется
классический механизм отложенного копирования (copy-on-write - копирование при по-
пытке записи). Все страницы адресного пространства процесса получают атрибут защи-
ты PAGE_WRITECOPY. При попытке записи в такую страницу возникает исключение
нарушения защиты и VMM копирует страницу для обратившегося процесса. В дальней-
шем эта страница будет выгружаться в файл подкачки. После копирования происходит
рестарт команды, вызвавшей исключение.
Работа с файлами данных, проецируемых в память. Проецирование файла дан-
ных в адресное пространство процесса предоставляет мощный механизм работы с фай-
лами. Спроецировав файл на адресное пространство процесса, программа получает воз-
можность работать ним, как с массивом.
116
4.4.2. API-функции для обеспечения проецирования файлов
Как и виртуальная память, проецируемые файлы позволяют резервировать регион
адресного пространства и передавать ему физическую память. Различие между этими
механизмами состоит в том, что в последнем случае физическая память не выделяется из
системного страничного файла, а берется из файла, уже находящегося на диске. Как
только файл спроецирован в память, к нему можно обращаться так, как будто он в нее
целиком загружен.
Данный механизм может использоваться в следующих случаях [9, 12]:
• Для запуска исполняемых файлов (EXE) и динамически связываемых библиотек
(DLL).
• Для работы с файлами
• Для одновременного использования одной области данных двумя процессами.
Рассмотрим подробнее каждый из вышеперечисленных механизмов.
Запуск исполняемых файлов и библиотек. Ранее рассматривалась функция
CreateProcess для запуска процессов. При использовании данной функции VMM приме-
няется для выполнения следующих действий:
- Создание адресного пространства процесса (размером 4Gb);
- Резервирование в адресном пространстве процесса региона размером, достаточным
для размещения исполняемого файла. Начальный адрес региона определяется в заго-
ловке EXE-модуля. Обычно он равен 0x00400000, но может быть изменен при по-
строении файла параметром /BASE компоновщика.
- Отображение исполняемого файла на зарезервированное адресное пространство. Тем
самым VMM распределяет физические страницы не из файла подкачки, а непосред-
ственно из EXE-модуля.
- Отображение на адресное пространство процесса необходимых ему динамически
связываемых библиотек. Информация о необходимых библиотеках находится в заго-
ловке EXE-модуля. Желательное расположение региона адресов описано внутри
библиотеки. Visual C++, например, устанавливает по умолчанию адрес 0x10000000.
Этот адрес может так же изменяться параметром /BASE компоновщика. Если при за-
грузке выясняется, что данный регион занят, то система попытается переместить
библиотеку в другой регион адресов, на основе настроечной информации, содержа-
щейся в DLL-модуле. Однако эта операция снижает эффективность системы и, кроме
того, если настроечная информация удалена при компоновке библиотеки парамет-
ром /FIXED, то загрузка становится вообще невозможной.
При одновременном запуске нескольких приложений Win32 отображает один и тот
же исполняемый файл и библиотеки на адресные пространства различных процессов.
При этом возникает проблема независимого использования процессами статических пе-
ременных и областей данных. Кроме того, изменение данных исполняющейся програм-
мой не должно приводить к изменению EXE-файла. Win32 откладывает решение этой
проблемы на максимально возможный срок (Lazy Evaluation). При этом используется
классический механизм отложенного копирования (copy-on-write - копирование при по-
пытке записи). Все страницы адресного пространства процесса получают атрибут защи-
ты PAGE_WRITECOPY. При попытке записи в такую страницу возникает исключение
нарушения защиты и VMM копирует страницу для обратившегося процесса. В дальней-
шем эта страница будет выгружаться в файл подкачки. После копирования происходит
рестарт команды, вызвавшей исключение.
Работа с файлами данных, проецируемых в память. Проецирование файла дан-
ных в адресное пространство процесса предоставляет мощный механизм работы с фай-
лами. Спроецировав файл на адресное пространство процесса, программа получает воз-
можность работать ним, как с массивом.
116
Страницы
- « первая
- ‹ предыдущая
- …
- 112
- 113
- 114
- 115
- 116
- …
- следующая ›
- последняя »
