СПО (Корнилов) / Лекции / вар2 / Операционные системы (Корнилов)
.pdf
СПО Лекция 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 для создания разделяемой секции в страничном файле. В этом случае обязательно следует указывать размеры отображаемого участка. Данные в отображаемой секции ни чем не отличаются от обычной виртуальной памяти процесса, но секция – объект ядра, который может иметь имя, и, следовательно, доступен для других процессов.
