Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СПО (Корнилов) / Лекции / вар2 / Операционные системы (Корнилов)

.pdf
Скачиваний:
55
Добавлен:
17.04.2013
Размер:
2.11 Mб
Скачать

СПО Лекция 1 [23.12.04]

91

Преимущества

-Обмен производится страницами по 4К

-Запись (чтение) данных файла выполняется как операции с обычной памятью

-Имеется возможность отображать части файла в адресное пространство, что важно при работе с большими файлами

Последовательность действий при отображении файла

Открыть файл

OFSTRUCT of;

HANDLE hf = OpenFile(filename, &of, OF_READWRITE);

Создать объект - отображение

HANDLE hmf = CreateFileMapping(hf, secur_attr, PAGE_READWRITE, size_high, size_low, object_name);

Параметры:

HANDLE отображаемого файла,

атрибуты защиты (обычно NULL), атрибуты доступа,

64–х разрядный размер в байтах (0 – означает, что отображается весь файл), имя объекта

Выполнить отображение

char* virt_addr = (char*)MapViewOfFile(hmf,

FILE_MAP_ALL_ACCESS,

ofs_high, ofs_low,

size);

Параметры:

HANDLE объекта – «отображение файла», атрибуты доступа,

СПО Лекция 1 [23.12.04]

92

64–х разрядное смещение в файле до начала отображаемого участка, размер (0 – означает, что отображается весь файл, тогда смещение игнорируется)

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

NT использует вариацию CreateFileMapping с параметром hf = 0xffffffff для создания разделяемой секции в страничном файле. В этом случае обязательно следует указывать размеры отображаемого участка. Данные в отображаемой секции ни чем не отличаются от обычной виртуальной памяти процесса, но секция – объект ядра, который может иметь имя, и, следовательно, доступен для других процессов.

Соседние файлы в папке вар2