Распределение ОП динамическими разделами.
35. Распределение ОП динамическими разделами.
Когда появляется процесс, он запрашивает какое-то количество памяти. Если памяти не хватает, он становится в очередь. Ведутся таблицы:
Таблица выделенных областей
Process PCB Address
Address
Size
Status (1/0)
Таблица свободных областей
Address
Size
В хороших ОС размер таблиц фиксирован. При освобождении памяти происходит слияние смежных областей и перенос информации из одной таблицы в другую.
Статус:1 – процесс уже есть; 0 – эта область может быть использована для порождения нового процесса.
Если поступает запрос на память, то ищется участок, в котором есть нужная память. Он делится на 2 части: одна выделяется процессу, другая остается.
Стратегия выделения памяти зависит от того, как отсортирована таблица свободных областей: если в порядке возрастания начального адреса, то алгоритм называется "первый подходящий", а если в порядке возрастания размера, то "самый подходящий". При "самом подходящем" большие куски не делятся на более мелкие, но он более сложный, т.к. нужно упорядочивать таблицу. Но при этом в процессе обслуживания или выполнения процессов существует тенденция образования мелких свободных участков памяти, общий объем которых удовлетворяет запросам, но они не являются смежными.
Пример: управление ОП в DOS
Управление – разделами по запросу.
MCB – Memory Control Block (5 байт). Располагается в начале каждого блока памяти.
· Статус (1 байт). ‘M’ – занят, ‘Z’ – свободен
· Адрес PSP (PCB), 0 – свободен (2 байта)
· Размер блока в параграфах (2 байта)
В самой ОС есть управляющее поле, которое ссылается на начало этой цепочки. Адрес следующего блока вычисляется через адрес и размер предыдущего. Команды процессора в DOS:
GETBLOCK – выделение памяти
FREEBLOCK – освобождение памяти
SETBLOCK – изменение размера памяти
И при этом нет никакой защиты ядра ОС!
|