5. Файлы, проецируемые в память.
Как и виртуальная память, проецирование файлов в память позволяет резервировать регион адресного пространства и передавать ему физическую память, но физическая память берётся не из страничного файла, а из файла, уже находящегося на диске или из вновь создаваемого файла.
Когда файл спроецирован в память к нему можно обращаться как к ячейкам памяти, не ипользуя операции файлового ввода/вывода. Этот механизм применяется для:
Загрузки и исполнения ехе и dll файлов. Это позволяет экономить на размере страничного файла и на времени, необходимом ОС для подготовки приложения к исполнению.
Для доступа к файлу данных, размещённых на диске. Это позволяет обойтись без операций файлового ввода вывода и без предварительной буферизации его содержимого.
Для совместного доступа к данным, принадлежащим нескольким процессам.
Рассмотрим механизм проецирования файлов.
1.Создать или открыть объект ядра файл, идентифицирующий файл на диске. Этот файл будет использоваться для проецирования в память. ОС должна хранить данные о рабочих ресурсах. Kernel32 создаёт системную кучу. В этой куче создаются структуры, описывающие все ресурсы системы.
CreateFile(…). Используется как для создания новых, так и для открытия существующих файлов. Результатом работы является дескриптор файла.
таблица дескрипторов база данных файла
0 Виртуальный адрес объекта
.
.
.
5
указатель на объект ядра
Чтобы получить реальный адрес, надо побитно обработать виртуальный адрес с помощью оператора XOR.
В результате выполнения первого пункта мы будем знать куда обращаться.
2. Создание объекта ядра проецируемый файл, чтобы сообщить системе размер файла и способ доступа к нему.
C reateFile(…)
CreateFileMapping(…) – создания объекта ядра проецируемый файл. Результатом выполнения является дескриптор объекта ядра проецируемый файл.
3.Выделение региона адресного пространства процесса и проецирование на этот регион файла. Другими словами выделение физической памяти региону.
MapViewOfFile(…). Входными данными для этой функции является дескриптор объекта ядра проецируемый файл, полученный в пункте 2. Результатом выполнения этой функции является витуальный адрес региона.
4.p^[0]:=’a’;
Работа с проецируемым файлом. Когда работа с ним закончена, то необходимо выполнить следующие действия.
5.Сообщить системе об отмене проецирования на адресное пространство процесса объекта ядра проецируемый файл. Выполняется это с помощью функции UnMapViewOfFile(…). Результатом является адрес региона адресного пространства, на который спроецирован файл, то есть адрес, полученный в пункте 3.
6.Закрыть объект ядра файл проецируемый в память.
CloseHandle(…). Параметром является дескриптор в пункте 2.
7.Закрыть объект ядра файл.
CloseHandle(…).
В случае, если не выпонены 6 и 7 в системной куче kernel32 будет содержаться информация о несуществующих объектах.
Проецирование в память exe и dll файлов.
Чтобы запустить ехе файл CreateProcess(…), где имя файла – это один из параметров.
Отыскивается ехе файл, вызванный функцией.
Создаётся объект ядра процесс.
Создаётся адресное пространство нового процесса размером 4Гб.
Выполнение проецируемого файла на адресное пространство процесса. В самом ехе файле указы-вается регион адресного пространства, в которое спроецирован файл.
Отмечается, что физическая память, связанная с выделенным регионом – это файл на диске, а не страничный файл.
Спроецировав ехе файл ОС читает несколько первых страниц в файл, чтобы получить список dll, необходимых данному ехе файлу. Затем ОС с помощью функции LoadLibrary(…) поочерёдно загружает указанные dll в адресное пространство процесса. Точно также выделяется регион в адресном пространстве и на него проецируется dll. Начальный адрес региона адресного простраства, на который желательно спроецировать dll указывается компоновщиком при создании dll. У всех системных dll (kernel32.dll и user32.dll).
После увязки ехе и dll файлов с адресным пространством процесса начинает выполняться стартовый код ехе файла. Подкачку страниц берёт на себя ОС.
- Средства аппаратной поддержки управления памятью в микропроцессорах Intel.
- 0000 Смещение
- Стек потока под управлением Windows nt (2000).
- Кучи. Кучи в Windows nt (2000).
- 5. Файлы, проецируемые в память.
- 6.Объекты ядра. Процессы, потоки и модули в Win32.
- Структура modref.
- Основные функции для работы с потоками.
- 7. Распределение времени между потоками. Классы приоритета. Уровни приоритета. Относительный уровень приоритета потока.
- Классы и уровни приоритета.
- Функции Win32 связанные с планированием.
- 8. Учет квантов времени в Windows. Управление величиной кванта. Сценарии планирования процессорного времени.
- Сценарий планирования.
- Поток простоя.
- 9. Динамическое повышение приоритета потока.
- 10 Синхронизация потоков.
- 11. Динамически подключаемые библиотеки (dll). Явная и неявная загрузка dll.
- 12. Обработка сообщения в ос Window.
- 13. Системная очередь аппаратного ввода сообщений.
- 14. Работа с окнами в ос Windows. Классы окон. Z-порядок окон. Описание окон в ос Windows.
- 15. Существующие форматы исполняемых файлов. Формат pe-файла.
- Особенности ре формата:
- Заголовок ре файла.
- Основные секции исполняемого файла.
- Прикладная программа
- 16. Методы отслеживания изменений файловой системы
- 17. Файловая система fat. Структура системной области и области данных в fat.
- Загрузочный сектор.
- 18. Файловая система ntfs. Структура главной файловой таблицы (mft). Атрибуты файла ntfs. Резидентные и нерезидентные атрибуты.
- Особенности ntfs.
- Структура ntfs на диске.
- Атрибуты файла.
- 19. Структура больших файлов и каталогов в ntfs. Индексация файлов в ntfs.
- 20. Восстанавливаемость ntfs. Протоколирование транзакций. Журнал транзакций. Восстановление данных в ntfs.
- Журнал транзакций.
- Восстановление данных в ntfs.