
- •2. Теневая память
- •6.Недостатки ms-dos и пути их преодоления
- •7.Структура conventional памяти
- •9. Обработчики 09h и 16h клавиатуры
- •10. Extended память
- •Expanded память
- •Upper память
- •14.Структура данных на магнитных дисках
- •15. Клавиатура. Scan-код
- •16. Распределение памяти в реальном режиме
- •Адресация озу при использовании сегментации в защищённом режиме
- •19. Hma память
- •Механизм страничной адресации
- •23.Тест клавиатуры
- •24. Прерывания bios
- •Преобразование логического адреса в физический при включённой страничной адресации
- •26. Исключения и их обработка
- •27. Управление клавиатурой
- •28. Приоритет обработки прерываний
- •Привилегии и защита программ
- •30.Механизм виртуальной памяти
- •31.Дескрипторы сегментных регистров
- •32.Кэш память
- •33.Таблицы локальных и глобальных дескрипторов
- •34.Cga, vga адаптеры
- •Характеристики vga адаптеров
- •35.Таблица дескрипторов idt
- •37.Шлюзы и их применение
- •38.Понятие дескриптора
- •39. Адаптер дисплея
- •40.Функции dos и bios для клавиатуры
- •41 Пять компонентов защиты
- •42.Виртуальный 8086
- •43.Классы приоритетов
- •44.Многозадачный режим. Статические и динамические наборы
- •45.Шлюз задач
- •46. Библиотеки dll
- •Явная компоновка
- •47.Виртуальная память процессора
- •48.Адресное пространство w9х
- •49.Адресное пространство nt
- •51. Файл подкачки страниц
- •52. Два процесса – один ехе файл.
- •53. Физическая память и страничный файл
- •Физическая память в страничном файле не хранится
- •54. Алгоритм загрузки программ
- •56. Переданная и зарезервированная память
- •57.Разделы ехе файла
- •58. Проецируемые в память файлы
- •59.Механизмы работы с файлами больших размеров
- •60. Различия в обработке прерываний и исключений
57.Разделы ехе файла
Любой образ ЕХЕ- или DLL-файласостоит из группыразделов(sections). По соглашению имя каждого стандартного раздела начинается с точки. С каждым разделом связана комбинация следующих атрибутов:
READ– разрешает чтение из раздела.WRITE– разрешает запись в раздел.EXECUTE– содержимое раздела можно исполнять.SHARED– раздел доступен нескольким экземплярам приложения.
Имя раздела
|
Описание
|
.text
|
Код приложения или DLL.
|
.bss
|
Неинициализированные данные.
|
.rdata
|
Неизменяемые данные периода выполнения.
|
.rsrc
|
Ресурсы.
|
.edata
|
Таблица экспортируемых имен.
|
.data
|
Инициализированные данные.
|
.xdata
|
Таблица для обработки исключений.
|
.idata
|
Таблица импортируемых имен.
|
.CRT
|
Неизменяемые данные стандартной библиотеки С.
|
.reloc
|
Настроечная информация — таблица переадресации (fixup table).
|
.debug
|
Отладочная информация.
|
.tls
|
Локальная память потока.
|
58. Проецируемые в память файлы
Как и виртуальная память, проецируемые файлы позволяют резервировать регион адресного пространства и передавать ему физическую память. Различие между этими механизмами состоит в том, что в последнем случае физическая память не выделяется из страничного файла, а берется из файла, уже находящегося на диске. Как только файл спроеци рован в память, к нему можно обращаться так, будто он целиком в нее загружен.
Проецируемые файлы применяются для:
• загрузки и выполнения ЕХЕ и DLL файлов. Это позволяет существенно экономить как на размере страничного файла, так и на времени, необходимом для подготовки приложения к выполнению;
• доступа к файлу данных, размещенному на диске. Это позволяет обойтись без операций файлового ввода/вывода и буферизации его содержимого;
• разделения данных между несколькими процессами, выполняемыми на одной машине.
1. Отыскивает ЕХЕ-файл, указанный при вызове CreateProcess. Если файл не найден, новый процесс не создается, а функция возвращает NULL.
2. Создает новый объект ядра “процесс”.
3. Создает адресное пространство нового процесса (размером 4 Гб).
Резервирует регион адресного пространства — такой, чтобы в него поместился заданный ЕХЕ-файл. Желательное расположение этого региона указывается внутри самого ЕХЕ-файла. По умолчанию базовый адрес ЕХЕ-файла — 0x00400000.
Отмечает, что физическая память, увязанная с зарезервированным регионом, — ЕХЕ-файл на диске, а не страничный файл.
Спроецировав ЕХЕ-файл на адресное пространство процесса, система обращается к разделу ЕХЕ-файла со списком DLL-модулей, содержащих необходимые программе функции. После этого система поочередно загружает DLL-модули. Всякий раз, когда для загрузки DLL вызывается LoadLibrary, система выполняет действия, аналогичные описанным выше в пп. 4 и 5:
1. Резервирует регион адресного пространства — такой, чтобы в него мог поместиться заданный DLL-файл. Желательное расположение этого региона указывается внутри самого DLL-файла. По умолчанию DLL-модулям присваивается базовый адрес 0x10000000.
2. Если зарезервировать регион по желательному для DLL базовому адресу не удается (либо он слишком мал, либо занят каким-то еще ЕХЕ- или DLL-файлом), система пытается найти другой регион. Но такая ситуация весьма неприятна. Во-первых, если в DLL нет настроечной информации, загрузка может вообще не получиться. Во-вторых, системе приходится выполнять модификацию адресов (relocation) внутри DLL. В Windows 95 эта операция осуществляется по мере подкачки страниц в оперативную память. Но в Windows NT на это уходит дополнительная физическая память, выделяемая из страничного файла, да и загрузка такого DLL-модуля займет больше времени.
3. Отмечает, что физическая память, связанная с зарезервированным регионом, — DLL-файл на диске, а не страничный файл. Если Windows NT пришлось выполнять модификацию адресов из-за того, что DLL не удалось загрузить по желательному базовому адресу, она запоминает, что часть физической памяти для DLL связана со страничным файлом.
После увязки ЕХЕ- и DLL-файлов с адресным пространством процесса начинает исполняться стартовый код ЕХЕ-файла