
- •Средства аппаратной поддержки управления памятью в микропроцессорах 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.
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 файлов с адресным пространством процесса начинает выполняться стартовый код ехе файла. Подкачку страниц берёт на себя ОС.