Методы распределения памяти

Разные ОС по-разному распределяют память между процессами

Методы распределения памяти можно разделить на:

- без использования внешней памяти

- фиксированными разделами

- динамическими разделами

- перемещаемыми разделами

- с использованием внешней памяти

- страничное распределение

- сегментное распределение

- сегментно-страничное распределение

 

Фиксированные разделы

Наиболее простой и примитивный способ распределения памяти. Во время старта или загрузки системы память разбивается на разделы фиксированной величины, после чего границы разделов не сдвигаются.

 

Новый процесс поступает либо в общую очередь, либо в очередь конкретного раздела.

Система:

- сравнивает требуемый объем памяти с памятью раздела

- загружает программу в один из разделов и настраивает адреса

 

Недостаток системы:

- жесткость

- уровень мультипрограммирования заранее ограничен числом разделов

- невозможно выполнить прогу, которая больше самого большого раздела

 

Все же используется в системах реального времени, т.к. там детерминированность компенсирует недостаточную гибкость.

 

Динамические разделы

 

· Память изначально свободна и не разбита на разделы

· При поступлении процесса на исполнение ей выдается столько памяти, сколько нужно, если памяти не хватает, то процесс не исполняется

· После завершения процесса память освобождается

 

ОС должна:

- вести таблицы свободных и занятых областей

- анализировать требования к памяти при создании нового процесса, подыскивать ему незанятую область

- загружать процесс в выделенный ему раздел, корректировать таблицы

- корректировать таблицы после завершения процесса

 

Плюсы:

- гибче

Минусы – фрагментация памяти.

Так организована память в ОС/360

 

Перемещаемые разделы

Выделение памяти перемещаемыми разделами призвано решить проблему фрагментации. Суть его – сжатие, то есть перемещение всех занятых участков в сторону старших или младших адресов, чтобы вся свободная память собралась в одном месте.

 

Ко всем функциям, исполняемым ОС в динамических разделах, добавляется сжатие, которое должно производиться:

- либо при каждом завершении процесса

- либо когда для нового процесса не хватает места.

 

Физические адреса здесь постоянно меняются, поэтому перемещающий загрузчик для их настройки использовать нельзя, нужно динамическое преобразование адресов.

 

Минусы:

- затраты времени