
- •Раздел 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. Стратегии выталкивания с постоянным распределением
- •1. Выталкивание случайной страницы.
- •2. Выталкивание первой пришедшей страницы.
- •3. Выталкивание реже всего используемой страницы.
- •4. Выталкивание дольше всех не использовавшейся страницы.
- •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.
- •Выводы по разделу 5
5.4.4. Совместное использование памяти
5.4.4.1. Способы совместного использования памяти
Разделяемая память имеет очень большое значение для многозадачных ОС, т.к. задачи должны иметь возможность обмениваться информацией друг с другом.
В основном совместное использование памяти обеспечивается следующими средствами:
файлами, отображаемыми в памяти и обеспечивающими следующие механизмы:
открытие дескриптора файла;
свободные чтение и запись, как если бы это был блок памяти.
специальными API, управляющие страницами, обозначенными как разделяемые, доступ к которым процессы получают через механизмы имен.
механизмами экспорта/импорта на этапах компиляции и загрузки. На этапе компиляции и компоновки программа определяет статическую область памяти как допустимую для экспорта. Другие программы во время компиляции и компоновки могут импортировать данные из этой области.
NetWare.
В NetWare 3.1 вся память является разделяемой и отображаемой. NetWare 4.0 реализует совместное использование переменных через механизм импорта/экспорта.
В одном модуле переменная описана и имеет атрибут "export", в другом модуле переменная используется и имеет атрибут "extern". Связи устанавливаются на этапах компиляции, компоновки и загрузки.
UnixWare.
Ранее упоминавшаяся функция mmap создает разделяемый файл, отображаемый в памяти, если функции передан флаг MAP_SHARED.
shmget - задание сегмента разделяемой памяти.
shmat - подключает сегмент разделяемой памяти к вызывающему процессу.
shmdt - отключает процесс от разделяемой области памяти.
Windows NT.
Разделяемая память реализуется с помощью отображенных в памяти файлов, именованных или неименованных.
CreateFileMapping - создание объекта отображения файла.
OpenFileMapping - открытие и получение доступа к созданному объекту отображения файла.
UnmapViewOfFile - отменяет отображение файла.
OS/2.
Имеет очень удобный интерфейс для работы с разделяемой памятью, которая отображается в собственное пространство памяти процесса.
DosAllocSharedMem - выделяет область разделяемой памяти, которая может быть именованной или неименованной.
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);
Поскольку "раздел" – это объект, то его структура полностью соответствует понятию объекта:
Тип объекта |
Раздел |
Атрибуты объекта |
Максимальный размер Атрибуты защиты Файл – страничный/проецируемый |
Сервисы |
Создать Открыть Спроецировать/отменить проецирование |
Структурная схема разделяемой памяти на основе "файла, отображаемого в память"