- •Раздел 4. Управление памятью в операционных системах
- •4.1. Классификация способов организации памяти
- •4.2. Управление физической памятью
- •4.2.1. Однозадачные системы
- •4.2.1.1. Простые и оверлейные системы
- •4.2.1.2. Сегментация памяти
- •4.2.2.1. Фиксированные разделы (неперемещаемые программы)
- •4.2.1.3. Блочная организация памяти
- •4.2.1.4. Стратегии управления памятью (введение)
- •4.2.2. Многозадачные системы
- •4.2.2.2. Фиксированные разделы (перемещаемые программы)
- •4.2.2.3. Переменные разделы
- •4.2.2.4. Свопинг
- •4.3.1. Общая характеристика виртуальной памяти
- •4.3.1.1. Определения виртуальной памяти и иерархия видов памяти
- •4.3.1.2. Особенности виртуальной памяти
- •4.3.1.3. Механизм отображения виртуальных адресов в физические
- •4.3.2. Страничная организация виртуальной памяти
- •4.3.2.1. Одноуровневая страничная организация
- •4.3.2.2. Двухуровневая страничная организация
- •4.3.2.3. Совместное использование страниц процессами
- •4.3.3. Сегментная организация виртуальной памяти
- •4.3.3.1. Одноуровневая сегментная организация
- •4.3.3.2. Комбинированная сегментно-страничная организация (вместе с таблицей процессов)
- •4.3.4. Стратегии управления виртуальной памятью
- •4.3.4.1. Главные задачи управления виртуальной памятью
- •4.3.4.2. Стратегии решения второй главной задачи
- •4. Выталкивание дольше всех не использовавшейся страницы
- •4.3.4.4. Стратегии выталкивания с переменным распределением
- •4.4. Управление памятью в современных ос
- •4.4.1. Архитектура управления памятью
- •4.4.2. Защита памяти
- •4.4.4. Совместное использование памяти
- •4.4.4.1. Способы совместного использования памяти
- •4.4.4.2. Пример реализации разделяемой памяти в Win32
- •Закрытие объекта:
4.4. Управление памятью в современных ос
4.4.1. Архитектура управления памятью
Базовые принципы управления памятью, изложенные выше, широко используются во всех современных ОС. Но в каждой из систем существуют нюансы их использования.
Так из трех существующих моделей памяти:
модели сегментированной памяти;
модели памяти со сплошной адресацией;
модели памяти со страничной организацией,
Модель сегментированной памяти практически не используется из-за больших дополнительных издержек, состоящих в проверках сегмента на длину в процессе выполнения программы.
С появлением 32-х разрядных систем широко стала использоваться сплошная адресация. Диапазон адресов 4 гигабайта достаточен для большинства сегодняшних приложений.
При сплошной адресации все сегментные регистры устанавливаются в один и тот же сегмент, и для адресации используется только смещение.
Фрагментация, имеющая место при сплошной адресации, устраняется использованием страничной организации.
Кроме того, страничная организация позволяет ограничить доступ процессов к чужой памяти.
4.4.2. Защита памяти
ОС должна обеспечивать защиту памяти, предотвращая случайную или преднамеренную порчу пользовательскими процессами данных в адресном пространстве системы или других процессов.
Для этого используются следующие основные способы:
Вопрос (
Доступ ко всем системным структурам данных и пулам памяти производится из режима ядра, так что у пользовательских потоков нет к ним доступа.
У каждого процесса имеется индивидуальное закрытое адресное пространство, защищенное от доступа других процессов.
Аппаратные средства защиты памяти на уровне архитектуры процессора
Разделяемые объекты имеют атрибуты контроля доступа, проверяемые при попытках процессов обратиться к этим объектам.
)Вопрос
Вопрос (
На уровне архитектуры существуют три метода защиты памяти (вспомним причины возникновения аппаратных исключений):
проверка типа;
проверка границ;
проверка уровня полномочий.
)Вопрос
Вопрос (
Проверка типа обеспечивает выполнение только допустимых операций с памятью. Например, сегменты кода доступны только для чтения. Проверки выполняются процессором при выполнении каждой инструкции.
)Вопрос
Вопрос (
Проверка границ обеспечивают проверку того, чтобы величина смещения не превосходила размера самого сегмента.
)Вопрос
Вопрос (
Проверка уровня полномочий обеспечивает разделение программ на пользовательские программы и системные программы.
)Вопрос
Например, 4 уровня полномочий допускается в архитектуре Intel (два бита). Уровень 0 - самый высокий уровень защиты, уровень 3 - самый низкий.
Unix предусматривает собственную защиту памяти и использует уровни 0 и 3 защиты процессора Intel.
ОС семейства Windows обеспечивает множество методов защиты памяти. Каждый процесс поддерживает собственное пространство виртуальных адресов и не может обращаться к адресам других процессов.
Кроме того, используется уровни 0 и 3 защиты процессора Intel для выполнения программ ядра и пользователя.
Кроме того, используется защита на уровне страниц.
4.4.3. Распределение памяти
4.4.3.1. Типы программных интерфейсов для распределения памяти
Вопрос (
Для работы с памятью обычно предоставляется два набора программных интерфейсов:
переносимые интерфейсы, удовлетворяющие стандартам ANSI;
специфические для ОС интерфейсы.
)Вопрос
4.4.3.2. Переносимые интерфейсы
Вопрос (
К переносимым интерфейсам относят четыре функции управления памятью:
выделить память заданного размера; malloc()
выделить память под массив элементов calloc();
перераспределить память realloc();
освободить память free().
)Вопрос
4.4.3.3. Специфические интерфейсы
Специфические интерфейсы сильно привязаны к соответствующей ОС, поэтому сильно различаются между собой.
Вопрос (
Специфические интерфейсы дают следующие преимущества:
позволяют использовать средства распределения памяти, соответствующие архитектуре ОС;
предоставляют большие возможности управления памятью на нижнем уровне;
используют конкретные схемы управления памятью;
оптимизируют производительность.
)Вопрос
Unix обеспечивает очень широкий набор средств и полную управляемость памятью. В основном объекты памяти представляются в виде именованных или неименованных файлов, доступ к которым может быть произведен средствами файловой системы.
mmap - для виртуального объекта памяти задает отображение в адресном пространстве процесса;
munmap - отменяет отображение.
ОС семейства Windows к стандартным средствам управления памятью добавляет следующие интерфейсы:
функции Win32;
функции виртуальной памяти;
функции динамической памяти.
Win32 - это семейство интерфейсов, пригодных для программирования в любой Windows-среде.
Примеры функций Win32:
GlobalAlloc - выделяет в памяти заданное число байтов. Тип выделяемого блока задается атрибутом: FIXED - неперемещаемый, MOVEABLE - перемещаемый, DISCARDABLE - выгружаемый.
GlobalLock - блокирует блок, который становится неперемещаемым и невыгружаемым.
GlobalUnlock - разблокирует блок;
GlobalReAlloc - изменяет размер блока в сторону уменьшения или увеличения.
GlobalFree - освобождает блок.
Функции виртуальной памяти позволяют разработчику использовать все возможности Windows по управлению памятью.
VirtualAlloc - выделение памяти в пространстве виртуальных адресов.
VirtualFree - освобождает память, выделенную с помощью предыдущей функцией.
VirtualLock - физическая блокировка страниц в памяти;
VirtualUnlock - разблокировка памяти;
VirtualProtect - устанавливает атрибуты блока памяти, возможные значения атрибутов - PAGE_NOACCESS, PAGE_READONLY, PAGE_READWRITE.
Функции динамической памяти используются для вторичного распределения собственной памяти.
HeapCreate - используется для создания в виртуальном адресном пространстве процесса динамически распределяемой области.
HeapAlloc - выделяет память из области, созданной предыдущей функцией.
HeapReAlloc - перераспределяет память в локальной динамической области.
HeapFree - освобождает память;
HeapDestroy - уничтожает объект динамически распределенной области.
