Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Файлы проецируемые в память (ФПВП)



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

Когда файл спроецирован в память к нему можно обращаться как к ячейкам памяти, не используя операции файлового ввода/вывода. Этот механизм применяется для:

1. Загрузки и исполнения ехе и dll файлов. Это позволяет экономить на размере страничного файла и на времени, необходимом ОС для подготовки приложения к исполнению.

2. Для доступа к файлу данных, размещённых на диске. Это позволяет обойтись без операций файлового ввода вывода и без предварительной буферизации его содержимого.

3. Для совместного доступа к данным, принадлежащим нескольким процессам.

Рассмотрим механизм проецирования файлов.

1) Создать или открыть объект ядра файл, идентифицирующий файл на диске. Этот файл будет использоваться для проецирования в память. ОС должна хранить данные о рабочих ресурсах. Kernel32 создаёт системную кучу. В этой куче создаются структуры, описывающие все ресурсы системы.

CreateFile(…). Используется как для создания новых, так и для открытия существующих файлов. Результатом работы является дескриптор файла.

таблица дескрипторов база данных файла

  Виртуальный адрес объекта
0

.

.

.


указатель на объект ядра

Чтобы получить реальный адрес, надо побитно обработать виртуальный адрес с помощью оператора XOR. В результате выполнения первого пункта мы будем знать куда обращаться.

2) Создание объекта ядра проецируемый файл, чтобы сообщить системе размер файла и способ доступа к нему.

CreateFile(…)

CreateFileMapping(…) – создания объекта ядра проецируемый файл. Результатом выполнения является дескриптор объекта ядра проецируемый файл.

3) Выделение региона адресного пространства процесса и проецирование на этот регион файла. Другими словами выделение физической памяти региону.

MapViewOfFile(…). Входными данными для этой функции является дескриптор объекта ядра проецируемый файл, полученный в пункте 2. Результатом выполнения этой функции является витуальный адрес региона.

4) p^[0]:=’a’;

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

5) Сообщить системе об отмене проецирования на адресное пространство процесса объекта ядра проецируемый файл. Выполняется это с помощью функции UnMapViewOfFile(…). Результатом является адрес региона адресного пространства, на который спроецирован файл, то есть адрес, полученный в пункте 3.

6) Закрыть объект ядра файл проецируемый в память.

CloseHandle(…). Параметром является дескриптор в пункте 2.

7) Закрыть объект ядра файл.

CloseHandle(…).

В случае, если не выпонены 6 и 7 в системной куче kernel32 будет содержаться информация о несуществующих объектах.





Дата публикования: 2014-11-03; Прочитано: 400 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...