Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС СФМЭИ.doc
Скачиваний:
22
Добавлен:
17.09.2019
Размер:
1.37 Mб
Скачать

Контрольные вопросы

  1. Объясните различие между такими параметрами, как «Регион адресного пространства», «Блок в регионе адресного пространства» и «страница виртуального адресного пространства»?

  2. Объясните алгоритм преобразования виртуального адреса в физический?

  3. Как подсчитать количество регионов в адресном пространстве процесса?

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

4. Лабораторная работа № 4

ФАЙЛЫ, ПРОЕЦИРУЕМЫЕ В ПАМЯТЬ

4.1. Цель работы

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

Механизм проецирования в память позволяет резервировать регион адресного пространства и передавать ему физическую память. Причем физическая память в этом случае берется из файла, уже находящегося на диске. Данный метод позволяет обойтись без операций файлового ввода-вывода и предварительной буферизации содержимого файла. Проецируемые файлы применяются для загрузки EXE- и DLL-файлов, а также для разделения данных между несколькими процессами, выполняемыми на одной машине.

4. 2. Теоретическое введение

Механизм проецирования в память состоит из следующих этапов:

  • Создание или открытие объекта ядра «файла», который будет использоваться как проецируемый в память

  • Создание объекта ядра «файл, проецируемый в память».

  • Проецирование файловых данных на адресное пространство процесса.

  • Работа с данными, содержащимися в фале, спроецированном в память.

  • Отмена проецирования на адресное пространство процесса объекта ядра «файл, проецируемый в память».

  • Закрытие объект ядра «файл, проецируемый в память».

  • Закрытие объект ядра «файл».

4.2.1 Создание или открытие объекта ядра «файла»

Для создания или открытия объекта ядра «файл» используется функция:

function CreateFile (lpFileName: PChar; dwDesiredAccess: DWORD; dwShareMode: DWORD; lpSecurityAttributes: PSecurityAttributes;

dwCreationDisposition: DWORD; dwFlagsAndAttributes: DWORD;

hTemplateFile: THandle) : THandle;

где

lpFileName – определяет имя создаваемого или открываемого файла.

dwDesiredAccess - указывает способ доступа к содержимому файла. Возможные значения параметра fdwAccess приведены в таблице 4.1.

dwShareMode - указывает тип совместного доступа к данному файлу. Возможные значения параметра fdwShareMode приведены в таблице 4.2.

Таблица 4.1 Возможные значения параметра dwDesiredAccess

Значение параметра

dwDesiredAccess

Описание

0

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

GENERIC_READ

Чтение файла разрешено

GENERIC_WRITE

Запись в файл разрешена

GENERIC_READ or

GENERIC_WRITE

Разрешено чтение файла и запись в файл

lpSecurityAttributes – указывает на структуру SECURITY_ATTRIBUTES, которая содержит информацию о защите объекта ядра «файл».Если защиты не нужно, в этот параметр заносится nil.

dwCreationDisposition – указывает флаги для тонкой настройки функции CreateFile. Возможные значения параметра dwCreationDisposition приведены в таблице 4.3.

Таблица 4.2 Возможные значения параметра fdwShareMode

Значение параметра

fdwShareMode

Описание

0

Запрещены любые попытки повторного открытия файла

FILE_SHARE_READ

Посторонний процесс может открыть данный файл только для чтения

FILE_SHARE_WRITE

Посторонний процесс может открыть данный файл только для записи

FILE_SHARE_READ or

FILE_SHARE_WRITE

Посторонний процесс может открыть данный файл без ограничений

Таблица 4.3 Возможные значения параметра dwCreationDisposition

Значение параметра

dwCreationDisposition

Описание

CREATE_NEW

Функция создает новый файл, но сообщает об ошибке, если файл с таким именем уже существует

CREATE_ALWAYS

Функция создает файл независимо от того, существует ли уже файл с таким именем. Если файл существует, то замещается новым

OPEN_EXISTING

Функция открывает существующий файл и сообщает об ошибке, если файла с таким именем нет.

OPEN_ALWAYS

Функция открывает файл, если он существует, и создает новый, если такого нет

TRUNCATE_EXISTING

Функция открывает файл и урезает его до нулевой длины, но сообщает об ошибке, если указанного файла нет. Если указан данный флаг, то параметр fdwAccess должен иметь значение GENERIC_WRITE

dwFlagsAndAttributes – указывает атрибуты создаваемого файла. Если функция открывает уже существующий файл, то информация об атрибутах игнорируется. Возможные значения параметра dwFlagsAndAttributes приведены в таблице 4.4. Перечисленные в таблице 4.4. флаги можно объединять с помощью функции or.

Таблица 4.4 Возможные значения параметра dwFlagsAndAttributes

Значение параметра

dwFlagsAndAttributes

Описание

FILE_ATTRIBUTE_ARCHIVE

Файл является архивным. Данный атрибут используют для того, чтобы пометить файлы для резервного копирования. При создании нового файла атрибут FILE_ATTRIBUTE_ARCHIVE устанавливается автоматически

FILE_ATTRIBUTE_HIDDEN

Файл является скрытым

FILE_ATTRIBUTE_NORMAL

У файла нет атрибутов. Данный атрибут допустим только, если используется один.

FILE_ATTRIBUTE_READONLY

Файл только для чтения

FILE_ATTRIBUTE_SYSTEM

Файл является частью операционной системы и используется только ею.

hTemplateFile – задает либо дескриптор открытого файла, либо равен 0. В первом случае функция игнорирует параметр dwFlagsAndAttributes и использует флаги и атрибуты, связанные с файлом, который определяется параметром hTemplateFile. Чтобы такая схема сработала, файл, заданный параметром hTemplateFile, нужно открыть с флагом GENERIC_READ. Если функция CreateFile открывает существующий файл, этот параметр игнорируется.

При успешном создании или открытии файла, функция CreateFile возвращает его дескриптор. В случае ошибки функция CreateFile возвращает INVALID_HANDLE_VALUE (-1).

С помощью функции CreateFile операционная система узнает, на каком диске находится физическая память для проекции файла.