Составители:
Рубрика:
быть изменен при построении файла параметром /BASE компоновщика;
– отображение исполняемого файла на зарезервированное адресное про-
странство; тем самым VMM распределяет физические страницы не из файла
подкачки, а непосредственно из EXE-модуля;
– отображение на адресное пространство процесса необходимых ему ди-
намически связываемых библиотек. Информация о необходимых библиотеках
находится в заголовке EXE-модуля. Желательное расположение региона адре-
сов описано внутри библиотеки: Visual C++, например, устанавливает по умол-
чанию адрес 0 × 10 000 000. Этот адрес может также изменяться параметром
/BASE компоновщика. Если при загрузке выясняется, что данный регион занят,
то система попытается переместить библиотеку в другой регион адресов на ос-
нове настроечной информации, содержащейся в DLL-модуле. Однако эта опе-
рация снижает эффективность системы, и кроме того, если настроечная инфор-
мация удалена при компоновке библиотеки параметром /FIXED, то загрузка
становится вообще невозможной.
При одновременном запуске нескольких приложений Win32 отображает
один и тот же исполняемый файл и библиотеки на адресные пространства
различных процессов. При этом возникает проблема независимого исполь-
зования процессами статических переменных и областей данных. Кроме то-
го, изменение данных исполняющейся программой не должно приводить к
изменению EXE-файла. Win32 откладывает решение этой проблемы на мак-
симально возможный срок (Lazy Evaluation). При этом используется класси-
ческий механизм отложенного копирования (copy-on-write – копирование
при попытке записи). Все страницы адресного пространства процесса полу-
чают атрибут защиты PAGE_WRITECOPY. При попытке записи в такую
страницу возникает исключение нарушения защиты и VMM копирует стра-
ницу для обратившегося процесса. В дальнейшем эта страница будет выгру-
жаться в файл подкачки. После копирования происходит рестарт команды,
вызвавшей исключение.
Работа с файлами данных, проецируемых в память. Проецирование фай-
ла данных в адресное пространство процесса предоставляет мощный механизм
работы с файлами. Спроецировав файл на адресное пространство процесса,
программа получает возможность работать с ним, как с массивом. Проециро-
вание файла в память выполняется в три этапа:
1. Создается объект ядра «файл». В прежней терминологии это операция
открытия файла. Для создания объекта «файл» используется функция
CreateFile, аналогичная функции open() из CRT-библиотеки.
2. С помощью функции CreateFileMapping создается объект ядра «про-
ецируемый файл». При этом используется описатель файла (handle), возвра-
щенный функцией CreateFile. Теперь файл готов к проецированию.
3. Производится отображение объекта «проецируемый файл» или его
части на адресное пространство процесса. Для этого применяется функция
MapViewOfFile.
Для открепления файла от адресного пространства процесса используется
52
быть изменен при построении файла параметром /BASE компоновщика;
– отображение исполняемого файла на зарезервированное адресное про-
странство; тем самым VMM распределяет физические страницы не из файла
подкачки, а непосредственно из EXE-модуля;
– отображение на адресное пространство процесса необходимых ему ди-
намически связываемых библиотек. Информация о необходимых библиотеках
находится в заголовке EXE-модуля. Желательное расположение региона адре-
сов описано внутри библиотеки: Visual C++, например, устанавливает по умол-
чанию адрес 0 × 10 000 000. Этот адрес может также изменяться параметром
/BASE компоновщика. Если при загрузке выясняется, что данный регион занят,
то система попытается переместить библиотеку в другой регион адресов на ос-
нове настроечной информации, содержащейся в DLL-модуле. Однако эта опе-
рация снижает эффективность системы, и кроме того, если настроечная инфор-
мация удалена при компоновке библиотеки параметром /FIXED, то загрузка
становится вообще невозможной.
При одновременном запуске нескольких приложений Win32 отображает
один и тот же исполняемый файл и библиотеки на адресные пространства
различных процессов. При этом возникает проблема независимого исполь-
зования процессами статических переменных и областей данных. Кроме то-
го, изменение данных исполняющейся программой не должно приводить к
изменению EXE-файла. Win32 откладывает решение этой проблемы на мак-
симально возможный срок (Lazy Evaluation). При этом используется класси-
ческий механизм отложенного копирования (copy-on-write – копирование
при попытке записи). Все страницы адресного пространства процесса полу-
чают атрибут защиты PAGE_WRITECOPY. При попытке записи в такую
страницу возникает исключение нарушения защиты и VMM копирует стра-
ницу для обратившегося процесса. В дальнейшем эта страница будет выгру-
жаться в файл подкачки. После копирования происходит рестарт команды,
вызвавшей исключение.
Работа с файлами данных, проецируемых в память. Проецирование фай-
ла данных в адресное пространство процесса предоставляет мощный механизм
работы с файлами. Спроецировав файл на адресное пространство процесса,
программа получает возможность работать с ним, как с массивом. Проециро-
вание файла в память выполняется в три этапа:
1. Создается объект ядра «файл». В прежней терминологии это операция
открытия файла. Для создания объекта «файл» используется функция
CreateFile, аналогичная функции open() из CRT-библиотеки.
2. С помощью функции CreateFileMapping создается объект ядра «про-
ецируемый файл». При этом используется описатель файла (handle), возвра-
щенный функцией CreateFile. Теперь файл готов к проецированию.
3. Производится отображение объекта «проецируемый файл» или его
части на адресное пространство процесса. Для этого применяется функция
MapViewOfFile.
Для открепления файла от адресного пространства процесса используется
52
Страницы
- « первая
- ‹ предыдущая
- …
- 50
- 51
- 52
- 53
- 54
- …
- следующая ›
- последняя »
