Скачиваний:
15
Добавлен:
01.05.2014
Размер:
224.26 Кб
Скачать

5.4.4. Совместное использование памяти

5.4.4.1. Способы совместного использования памяти

Разделяемая память имеет очень большое значение для многозадачных ОС, т.к. задачи должны иметь возможность обмениваться информацией друг с другом.

В основном совместное использование памяти обеспечивается следующими средствами:

  1. файлами, отображаемыми в памяти и обеспечивающими следующие механизмы:

    1. открытие дескриптора файла;

    2. свободные чтение и запись, как если бы это был блок памяти.

  1. специальными API, управляющие страницами, обозначенными как разделяемые, доступ к которым процессы получают через механизмы имен.

  1. механизмами экспорта/импорта на этапах компиляции и загрузки. На этапе компиляции и компоновки программа определяет статическую область памяти как допустимую для экспорта. Другие программы во время компиляции и компоновки могут импортировать данные из этой области.

NetWare.

В NetWare 3.1 вся память является разделяемой и отображаемой. NetWare 4.0 реализует совместное использование переменных через механизм импорта/экспорта.

В одном модуле переменная описана и имеет атрибут "export", в другом модуле переменная используется и имеет атрибут "extern". Связи устанавливаются на этапах компиляции, компоновки и загрузки.

UnixWare.

Ранее упоминавшаяся функция mmap создает разделяемый файл, отображаемый в памяти, если функции передан флаг MAP_SHARED.

  1. shmget - задание сегмента разделяемой памяти.

  2. shmat - подключает сегмент разделяемой памяти к вызывающему процессу.

  3. shmdt - отключает процесс от разделяемой области памяти.

Windows NT.

Разделяемая память реализуется с помощью отображенных в памяти файлов, именованных или неименованных.

  1. CreateFileMapping - создание объекта отображения файла.

  2. OpenFileMapping - открытие и получение доступа к созданному объекту отображения файла.

  3. UnmapViewOfFile - отменяет отображение файла.

OS/2.

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

  1. DosAllocSharedMem - выделяет область разделяемой памяти, которая может быть именованной или неименованной.

  2. DosGetSharedMem - получение доступа к разделяемому блоку памяти.

5.4.4.2. Пример реализации разделяемой памяти в Win32.

Разделяемой называется память, видимая более, чем одному процессу, или присутствующая в виртуальном адресном пространстве более чем одного процесса.

Для реализации разделяемой памяти используются примитивы Win32 и объект "раздел", который иначе называется файлом, отображаемым в память, (file mapping object).

Объект "раздел" может быть связан с файлом на диске, а может, и нет.

Для создания объекта "раздел" используется Win32 вызов:

hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, // Current file handle.

NULL, // Default security.

PAGE_READWRITE, // Read/write permission.

0, // Max. object size.

100, // Size of hFile.

"MyFileMappingObject"); // Name of mapping object.

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

"MyFileMappingObject" – именование позволяет осуществить доступ к объекту из другого процесса.

Другой процесс должен открыть объект:

hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, // Read/write permission.

FALSE, // Do not inherit the name

"MyFileMappingObject"); // of the mapping object.

Затем каждый процесс должен отобразить этот объект на свою область виртуальной памяти.

lpMapAddress = (LPINT)MapViewOfFile(hMapFile, // Handle to mapping object.

FILE_MAP_ALL_ACCESS,// Read/write permission

0, // Max. object size.

0, // Size of hFile.

0); // Map entire file.

Затем один процесс может что-то писать в указанную память, например,

*lpMapAddress = 57;

А другой процесс может читать данные:

INT i = *lpMapAddress;// i будет равно 57

По окончании работы процессы должны закрыть отображение и закрыть объект:

UnmapViewOfFile(lpMapAddress);

CloseHandle(hMapFile);

Поскольку "раздел" – это объект, то его структура полностью соответствует понятию объекта:

Тип объекта

Раздел

Атрибуты объекта

Максимальный размер

Атрибуты защиты

Файл – страничный/проецируемый

Сервисы

Создать

Открыть

Спроецировать/отменить проецирование

Структурная схема разделяемой памяти на основе "файла, отображаемого в память"

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