Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
os_a_win.doc
Скачиваний:
30
Добавлен:
17.11.2019
Размер:
715.26 Кб
Скачать

Проекции файлов и разделяемая память

Поскольку объект ядра проекция имеет имя, то доступ к нему могут получить все процессы системы (с учетом прав доступа). Поэтому механизм проецирования файлов позволяет нам создавать области памяти, разделяемые между различными процессами. Это один из способов межпроцессной связи в Windows, который позволяет с максимальной скоростью обмениваться большими объемами данных.

Для получения общего доступа к памяти необходимо, чтобы один процесс сначала создал объект проекция файла обычным способом. Другие процессы, зная имя этого объекта, могут получить к нему доступ, используя функции CreateFileMapping или OpenFileMapping. Доступ к проекции также может быть получен другими процессами с помощью механизмов наследования или копирования дескрипторов.

Если после этого процессы отобразят один и тот же регион файла в память с помощью MapViewOfFile, то Windows обеспечит совпадение данных в адресных пространствах всех процессов, используя одни и те же страницы физической памяти и дисковое пространство для отображения виртуальных страниц разных процессов. Таким образом, данные, записанные одним из процессов, смогут быть прочитаны любым другим.

Если объект проекция файла используется только для организации разделяемой памяти, то нет необходимости создавать для его организации отдельный файл на диске. Windows позволяет выделить с этой целью место в файле подкачки. Чтобы воспользоваться этой возможностью необходимо при вызове функции CreateFileMapping указать в параметре hFile значение INVALID_HANDLE_VALUE. При этом также необходимо указать ненулевое значение размера проекции в параметрах dwMaximumSizeHigh и dwMaximumSizeLow. В этом случае Windows создаст объект проекция файла заданного размера, но он будет сопоставлен не с обычным файлом на диске, а с регионом в файле подкачки. Дальнейшая работа с такой проекцией ничем не отличается от работы с обычными проекциями.

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

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