Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpora_1-10_bez_vosmogo1.docx
Скачиваний:
3
Добавлен:
16.04.2019
Размер:
108.79 Кб
Скачать

19. Механизмы работы с памятью. Отображение файлов на память.

Механизмы работы с памятью:

  1. Виртуальная память (используется для работы с большими объемами памяти);

  2. Отображение файлов на память (используется для быстрой работы с файлом, если необходимо его записиобрабатывать в произвольном порядке, для создания разделяемой памяти между процессами)№

  3. «Кучи» (используются для выделения небольших обьемов памяти в приложении).

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

Когда нужно использовать:

  1. Загрузка и выполнение исполняемых файлов – время уменьшается за счет того, что не требуется копирование исполняемого файла в память.

  2. Доступ к файлу как к обычной памяти – время уменьшается, так как ОС выполняет управление памятью в наиболее эффективном режиме.

  3. Разделение данных между несколькими процессами.

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

Общий набор функций по работе с отображаемыми файлами:

Сначала файл открывается с помощью CreateFile(), и если открытие прошло успешно, то идентификатором файла можно воспользоваться для создания отображенного файла CreateFileMapping(), после которой мы получим идентификатор отраженного файла, на основе которого мы можем проецировать файл в память с помощью функции MapViewOfFile(). Эта функция даст нам указатель LPVOID, который используется для последующих операций, в том числе и по отмене проецированного файла UnmapViewOfFile() или принудительной записи на диск FlushViewOfFile(). В том случае, если с отображенным файлом будут работать несколько приложений одно приложение создает файл проецированный на память CreateFileMaping(), а остальные открывают эту проекцию OpenFileMapping().

HANDLE CreateFile

(

LPCTSTR lpFileName,

DWORD dwDesiredAccess,

DWORD dwShareMode,

LPSECURITY_ATTRIBUTES lpSecurityAttributes,

DWORD dwCreationDistribution,

DWORD dwFlagsAndAttributes,

HANDLE hTemplateFile

);

lpFileName – имя файла.

dwDesiredAccess – атрибут доступа к файлу. Принимает значения:

0 – получить атрибут;

GENERIC_READ – чтение;

GENERIC_WRITE – запись;

GENERIC_READ|GENETIC_WRITE – чтение и запись.

dwShareMode – режим совместного использования файла. Принимает значения:

0 – совместный доступ запрещен; FILE_SHARE_READ; FILE_SHARE_WRITE; FILE_SHARE_READ|FILE_SHARE_WRITE.

lpSecurityAttributes – атрибут защиты.

dwCreationDistribution – способ открытия файла. Атрибуты:

CREATE_NEW – создать новый файл, если такой файл уже существует, то функция вернет ошибку;

CREATE_ALWAYS – создать новый файл, если он уже существует – стереть;

OPEN_EXISTING – открыть уже существующий файл, если файла нету – ошибка;

OPEN_ALWAYS – открыть уже существующий файл, если такого файла не найдено – то создать его.

dwFlagsAndAttriutes – атрибут создаваемого файла (скрытый, системный и т.д.). Если указать 0 или FILE_ATTRIBUTE_NORMAL, то будет открыт обычный файл.

hTemplateFile – файл шаблона, равен 0.

CreateFileMapping(

hFile: THandle; //дескриптор файла

IpFileMapping-Attributes: PSecurityAttributes; //указатель на структуру, в котором указывается, может ли создаваемый объект порождать дочерние объекты (обычно не может = 0)

flProtect, //определяет тип защиты.

dwMaximumSize-High, dwMaximumSizeLow: DWord; // старшие и младшие 32 разряда размера файла

IpName: PChar; // имя объекта отображения или null

): THandle;

Атрибуты flProtect:

PAGE_READONLY – созданное файловое отображение доступно только для чтения.

PAGE_READWRITE – доступно для чтения и записи.

PAGE_WRITECOPY: разрешается копирование при записи

Также в комбинацию могут включаться следующие константы:

SEC_COMMIT: для страниц секции выделяется физическое место в памяти или файле подкачки

SEC_IMAGE: файл является исполняемым

SEC_RESERVE: для страниц секции резервируется виртуальная память без фактического выделения.

LPVOID MapViewOfFile(

HANDLE hFileMappingObject, // дескриптор объекта

DWORD dwDesiredAccess, // режим доступа

DWORD dwFileOffsetHigh, // старшее DWORD смещения

DWORD dwFileOffsetLow, // младшее DWORD смещения

SIZE_T dwNumberOfBytesToMap // число отображаемых байтов

);

Атрибуты dwDesiredAccess:

FILE_MAP_WRITE - доступ к операциям чтения-записи.

FILE_MAP_READ - доступ только для чтения.

FILE_MAP_ALL_ACCESS - то же самое, что и FILE_MAP_WRITE.

FILE_MAP_COPY - копирование при доступе для записи.

FILE_MAP_EXECUTE - доступ к исполнению кода (программы).

BOOL UnmapViewOfFile(

LPCVOID lpBaseAddress // начальный адрес отображаемого представления файла, отображение которого должно быть прекращено

);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]