Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
26
Добавлен:
02.05.2014
Размер:
285.18 Кб
Скачать

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);

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

Тип объекта

Раздел

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

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

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

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

Сервисы

Создать

Открыть

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

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

Выводы по разделу 5

В качестве выводов перечислим рассмотренные в данном разделе вопросы.

5.1. Классификация способов организации памяти

5.2. Управление физической памятью

5.2.1. Однозадачные системы

5.2.1.1. Простые и оверлейные программы

5.2.1.2. Сегментация памяти

5.2.1.3. Блочная организация памяти

5.2.1.4. Стратегии управления памятью (введение)

5.2.2. Многозадачные системы

5.2.2.1. Фиксированные разделы и неперемещаемые программы

5.2.2.2. Фиксированные разделы и перемещаемые программы

5.2.2.3. Переменные разделы

5.2.2.4. Свопинг

5.3. Управление виртуальной памятью

5.3.1. Общая характеристика виртуальной памяти

5.3.1.1. Иерархия видов памяти

5.3.1.2. Особенности виртуальной памяти

5.3.1.3. Механизм отображения виртуальных адресов

5.3.2. Страничная организация виртуальной памяти

5.3.2.1. Одноуровневая страничная организация

5.3.2.2. Двухуровневая страничная организация

5.3.2.3. Совместное использование страниц процессами

5.3.3. Сегментная организация виртуальной памяти

5.3.3.1. Одноуровневая сегментная организация

5.3.3.2. Комбинированная сегментно-страничная организация совместно с таблицей процессов

5.3.4. Стратегии управления виртуальной памятью (продолжение)

5.3.4.1. Главные задачи управления виртуальной памятью

5.3.4.2. Стратегии решения второй главной задачи

5.3.4.3. Стратегии выталкивания с постоянным распределением памяти

5.3.4.4. Стратегии выталкивания с переменным распределением памяти

5.4. Управление памятью в современных ОС

5.4.1. Архитектуры управления памятью

5.4.2. Защита памяти

5.4.3. Программные интерфейсы распределения памяти

5.4.3.1. Типы программных интерфейсов

5.4.3.2. Переносимые интерфейсы

5.4.3.3. Специфические интерфейсы

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

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

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

Соседние файлы в папке Шпоры по СПО