- •Глава 3. Управление памятью и передача данных.
- •§0. Вступление
- •§1. Адресное пространство Регионы в адресном пространстве
- •Передача региону физической памяти
- •Функция резервирования и фиксации страниц виртуальной памяти
- •Функция возврата (освобождение) физической памяти
- •Функция получения информации о текущей системе
- •Функция получения информации о текущем использовании системой физической и виртуальной памяти
- •§2. Непрерывное распределение виртуальной памяти
- •Распределение по разделам
- •Распределение по страницам
- •Распределение по сегментам
- •Выделение памяти под новый раздел
- •1. Выделение первой подходящей области.
- •2. Выделение самой подходящей области.
- •§3. Дискретное распределение виртуальной памяти.
- •Распределение по сегментам
- •Распределение по страницам
- •Странично-сегментное распределение
- •§4. Прием задач с помощью прерываний
- •§5. Проблемы межзадачного взаимодействия
- •2. Необходимо упорядочить доступ нескольких задач к общему ресурсу.
- •4. Необходима синхронизация задачи по времени.
- •1. «Гонки».
- •2. «Тупики» (взаимные блокировки).
- •3. «Инверсия приоритетов».
Распределение по разделам
Для поддержки многозадачного режима необходимо обеспечить одновременное размещение нескольких задач в ОЗУ.
Самая простая схема распределения между несколькими задачами предполагает, что память, не занятая ядром ОС, может быть разбита на несколько непрерывных разделов.
Раздел:
— Имя,
— Тип,
— Граница.
Разбиение памяти на непрерывные разделы может быть статическим (фиксированным) или динамическим (новый раздел памяти выделяется непосредственно при появлении новой задачи).
Распределение по страницам
Разбиение всей оперативной памяти на разделы может выполняться как в процессе установки ОС, так и по мере необходимости.
В каждом разделе в любой момент времени может располагаться одна задача.
Недостаток такого способа распределения памяти: наличие большого объема неиспользуемой памяти. Такие потери памяти называют фрагментацией.
Желание сократить потери привело к следующим решениям:
1) Выделить раздел ровно такого объема, который нужен под текущую задачу.
2) Размещать задачу не в одной непрерывной области памяти, а в нескольких областях.
Распределение по сегментам
Задачи размещаются в оперативной памяти одна за другой с выделением ровно такого объема памяти, который необходим задаче.
Диспетчер памяти ведет список свободных областей оперативной памяти. При появлении новой задачи диспетчер памяти просматривает (анализирует) этот список, выделяет для задачи необходимый объем, вносит изменения в список. При этом список свободной области может быть упорядочен либо по адресам, либо по объемам.
Выделение памяти под новый раздел
Выделение памяти под новый раздел может осуществляться одним из трех способов:
1. Выделение первой подходящей области.
Список свободных областей упорядочивается (сортируется) по адресам (например, по возрастанию).
Диспетчер памяти просматривает этот список и выделяет для задачи тот раздел в этой области, который первый подходит по объему. В случае, когда такой раздел имеется, в среднем необходимо просмотреть половину списка.
Данный способ выделения приводит к тому, что память для небольших задач будет преимущественно выделяться в области младших адресов, что будет увеличивать вероятность того, что в области старших адресов будут создаваться разделы большего объема.
2. Выделение самой подходящей области.
Данный способ предполагает, что поиск свободных областей выполняется по списку, упорядоченному по возрастанию их объема. В этом случае при просмотре списка для нового раздела будет использована свободная область, объем которой наиболее точно соответствует запросу.
Необходимый раздел будет определяться в результате просмотра в среднем половины списка. Однако оставшаяся часть области оказывается настолько малой, что в ней маловероятно разместить какой-либо ещё раздел, при этом эта область попадает в самое начало списка.
В целом такой подход нельзя назвать эффективным.
3. Выделение самой неподходящей области (самый эффективный вариант).
Для нового раздела выделяется самая неподходящая свободная область памяти. В этом случае список свободных областей упорядочивается по убыванию объема свободной области памяти.
Так как такая область является самой большой, то после выделения из неё раздела памяти для задачи высока вероятность того, что оставшаяся часть области памяти будет пригодна для использования в дальнейшем.
Для любого способа выделения неизбежна фрагментация памяти. Это может привести к тому, что диспетчер памяти не сможет выделить раздел при том, что суммарный объем свободных областей может превышать объем, необходимый для задачи.
Полезно бывает уплотнение (дефрагментация) памяти, при котором диспетчер памяти корректирует свои списки, перемещая разделы в область младших или в область старших адресов.
Недостатком уплотнения является потеря времени на него и невозможность выполнения в это время каких-либо задач.