Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по ОС мои.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
2.82 Mб
Скачать

Проецирование в память exe и dll файлов.

Чтобы запустить ехе файл CreateProcess(…), где имя файла – это один из параметров.

  1. Отыскивается ехе файл, вызванный функцией.

  2. Создаётся объект ядра процесс.

  3. Создаётся адресное пространство нового процесса размером 4Гб.

  4. Выполнение проецируемого файла на адресное пространство процесса. В самом ехе файле указы-вается регион адресного пространства, в которое спроецирован файл.

  5. Отмечается, что физическая память, связанная с выделенным регионом – это файл на диске, а не страничный файл.

  6. Спроецировав ехе файл ОС читает несколько первых страниц в файл, чтобы получить список dll, необходимых данному ехе файлу. Затем ОС с помощью функции LoadLibrary(…) поочерёдно загружает указанные dll в адресное пространство процесса. Точно также выделяется регион в адресном пространстве и на него проецируется dll. Начальный адрес региона адресного простраства, на который желательно спроецировать dll указывается компоновщиком при создании dll. У всех системных dll (kernel32.dll и user32.dll).

  7. После увязки ехе и dll файлов с адресным пространством процесса начинает выполняться стартовый код ехе файла. Подкачку страниц берёт на себя ОС.

Совместное использование статических данных несколькими экземплярами exe и dll модулей.

Например, имеется ехе файл, который состоит из

ехе файл виртуальная память ВАП

страница кода 2

страница кода 1

страница данных 2

страница кода 3

страница данных 1

страница кода 1

страница кода 2

страница кода 3

страница данных 1

страница данных 2

раздел кода

3 страницы

раздел данных

2 страницы

рис. 1.

Допустим загружен второй экземпляр этого же процесса. Информация о предоставляемой файлом страницы виртуальной памяти хранится в структурах, которые называются модули. Допустим процесс 1 изменяет данные на странице данных 2. Windows NT, Windows 2000 выделяет дополнительные страницы из страничного файла по мере необходимости, благодаря тому, что Windows NT, 2000 имеют такой атрибут страницы, как PAGE_WRITECOPY. В Windows 95, 98 такого атрибута нет. Поэтому Windows 95, 98 резервирует в страничный файл количество страниц, необходимых для размещения блока глобальных переменных, то есть реально используются, если программа изменяет глобальные переменные.

Иерархия функций работы с памятью.

Можно выделить 4 уровня функций работы с памятью, причём функции последнего уровня зависят от функций предыдущего уровня.

  1. Функции управления памятью на уровне системных сервисов – 0 кольцо. В Windows 95, 98 это VMM.vxd, в Windows NT, 2000 – это ntoskrnl.exe. Эти функции предназначены для выделения небольших областей памяти и манипулирования страницами этих областей, то есть единица выделения – это страница. Прикладные программы не имеют право вызывать эти функции.

  2. VirtualXXX. Это функции управления виртуальной памятью, поддерживаемые kernel32. Эти функции поддерживает ядро. По функциональным возможностям аналогичны функциям 1 уровня. Эти функции могут использоваться приложениями пользователей.

  3. Функции для работы с кучей. Функции Win32API, поддерживается kernel32, позволяют выделять в память из кучи минимальный блок - 4 байта. По смыслу совпадают с функциями языков програм-мирования.

HeapXXX, new, malloc. Примыкают функции LocalHeap и GlobalHeap (устаревшие – используются для совместности и выполняют одинаковые действия).

  1. Функции для работы с памятью конкретных языков программирования.

New, malloc.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]