Программное обеспечение САПР. Операционные системы. Майстренко Н.В - 33 стр.

UptoLike

Лабораторная работа 6
МЕЖПРОЦЕССНОЕ ВЗАИМОДЕЙСТВИЕ
Цель работы: изучение механизмов межпроцессного взаимодействия (InterProcess Communication) в Windows NT; полу-
чение практических навыков по использованию Win32 API для программирования механизмов IPC.
ОСНОВНЫЕ ПОЛОЖЕНИЯ
Отображение файлов (file mapping)
Механизм отображения файлов позволяет процессу трактовать содержимое файла как блок памяти в адресном про-
странстве этого процесса. Процесс может использовать обычные операции с указателями для того, чтобы считывать и изме-
нять содержимое файла. Когда два или более процесса получают доступ к одинаковым отображениям файлов, то каждый
процесс получает указатель на память в собственном адресном пространстве, которое он может использовать для модифи-
цирования содержимого файла (рис. 5). Отсюда следует, что процессы также должны использовать объект синхронизации,
например семафор, чтобы предотвратить разрушение данных в многозадачной среде.
Рис. 5. Работа с файловым отображением
Программист может использовать специальный вид отображения файла для обеспечения именованной разделенной па-
мяти между процессами. Если при создании объекта-отображения файла указывается файл подкачки системы (swapping file),
то отображение файла создается как блок совместно используемой памяти. Другие процессы также могут получить доступ к
этому блоку, открыв такое же отображение файла.
Отображение файлов вполне эффективно, и, кроме того, предоставляет поддерживаемые операционной системой атрибу-
ты безопасности для того, чтобы помочь предотвратить несанкционированный доступ к данным.
Механизм отображения файлов может быть использован процессами, работающими только на локальном компьютере;
он не используется для передачи данных по сети.
Рассмотрим последовательно все операции, необходимые для создания отображения файлов, чтения/записи отображе-
ний и корректного завершения работы.
1. Создание именованной совместно используемой памяти. Первый процесс вызывает функцию CreateFileMapping для
того, чтобы создать объект-отображение файла с именем MyFileMappingObject. Используя флаг PAGE_READWRITE, про-
цесс назначает права на чтение и запись данных при работе с файловым отображением.
Функция CreateFileMapping создает или открывает именованный или неименованный объект-отображение файла (под-
робно рассмотрена в лабораторной работе 2).
Затем процесс использует дескриптор hMapFile при вызове функции MapViewOfFile, чтобы создать представление со-
держимого файла в адресном пространстве процесса. Функция возвращает указатель на представление файла в памяти.
Второй процесс вызывает функцию OpenFileMapping с именем MyFileMappingObject, чтобы использовать тот же объ-
ект-отображение файла, что и первый процесс. Также как и первый процесс, второй использует функцию MapViewOfFile для
сопоставления области памяти процесса отображаемому файлу.
2. Чтение/запись отображенных данных. Для чтения из представления файла в памяти разыменуем указатель, получен-
ный с помощью функции MapViewOfFile:
DWORD dwLength;
dwLength = *((LPDWORD) lpMapAddress);
Тот же указатель используется и для записи данных в отображенный файл:
*((LPDWORD) lpMapAddress) = dwLength;