С фиксированными границами

Простейший способ управления оперативной памятью состоит в том, что память разбивается на несколько областей фиксированной величины, называемых раз­делами. Такое разбиение может быть выполнено вручную оператором во время старта системы или во время ее установки. После этого границы разделов не из­меняются.

Очередной новый процесс, поступивший на выполнение, помещается либо в об­щую очередь (рис. 7, а), либо в очередь к некоторому разделу (рис. 7, б).

Рис. 7. Распределение памяти фиксированными разделами:а) с общей очередью; б) с отдельными очередями

Подсистема управления памятью в этом случае выполняет следующие задачи:

 сравнивает объем памяти, требуемый для вновь поступившего процесса, с размерами свободных разделов и выбирает подходящий раздел;

 осуществляет загрузку программы в один из разделов и настройку адресов. Уже на этапе трансляции разработчик программы может задать раздел, в ко­тором ее следует выполнять. Это позволяет сразу, без использования переме­щающего загрузчика, получить машинный код, настроенный на конкретную область памяти.

При очевидном преимуществе – простоте реализации, данный метод имеет существенный недостаток – жесткость. Так как в каждом разделе может выпол­няться только один процесс, то уровень мультипрограммирования заранее огра­ничен числом разделов. Независимо от размера программы она будет занимать весь раздел. Так, например, в системе с тремя разделами невозможно выполнять одновременно более трех процессов, даже если им требуется совсем мало памя­ти. Однако разбиение памяти на разделы не позволяет выполнять процессы, программы которых не помещаются ни в один из разделов, но для ко­торых было бы достаточно памяти нескольких разделов.

Такой способ управления памятью применялся в ранних мультипрограммных ОС. Однако и сейчас метод распределения памяти фиксированными разделами нахо­дит применение в системах реального времени, в основном благодаря неболь­шим затратам на реализацию. Детерминированность вычислительного процесса систем реального времени (заранее известен набор выполняемых задач, их тре­бования к памяти, а иногда и моменты запуска) компенсирует недостаточную гибкость данного способа управления памятью.

Распределение памяти разделами

С динамическими границами

В этом случае память машины не делится заранее на разделы. Сначала вся па­мять, отводимая для приложений, свободна. Каждому вновь поступающему на выполнение приложению на этапе создания процесса выделяется вся необходи­мая ему память (если достаточный объем памяти отсутствует, то приложение не принимается на выполнение и процесс для него не создается). После завершения процесса память освобождается, и на это место может быть загружен другой про­цесс. Таким образом, в произвольный момент времени оперативная память пред­ставляет собой случайную последовательность занятых и свободных участков (разделов) произвольного размера. На рис. 8 показано состояние памяти в различные моменты времени при использовании динамического распределения. Так, в момент t0в памяти находится только ОС, а к моменту t1память разделена между 5 процессами, причем процесс П4, завершаясь, покидает память. На осво­бодившееся от процесса П4 место загружается процесс П6, поступивший в мо­мент t3.

Рис. 8. Распределение памяти динамическими разделами

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

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

 При создании нового процесса – анализ требований к памяти, просмотр таб­лицы свободных областей и выбор раздела, размер которого достаточен для размещения кодов и данных нового процесса. Выбор раздела может осущест­вляться по разным правилам, например “первый попавшийся раздел доста­точного размера”, “раздел, имеющий наименьший достаточный размер” или “раздел, имеющий наибольший достаточный размер”.

 Загрузка программы в выделенный ей раздел и корректировка таблиц сво­бодных и занятых областей. Данный способ предполагает, что программный код не перемещается во время выполнения, а значит настройка адресов мо­жет быть проведена единовременно во время загрузки.

 После завершения процесса – корректировка таблиц свободных и занятых об­ластей.

По сравнению с методом распределения памяти фиксированными разделами дан­ный метод обладает гораздо большей гибкостью, но ему присущ очень серьезный недостаток – фрагментация памяти. Фрагментация – это наличие большого числа несмежных участков свободной памяти очень маленького размера (фрагментов). Настолько маленького, что ни одна из вновь поступающих программ не может поместиться ни в одном из участков, хотя суммарный объем фрагментов может составить значительную величину, намного превышающую требуемый объем памяти.

Распределение памяти динамическими разделами лежит в основе подсистем управления памятью многих мультипрограммных операционных системах 60-70-х го­дов, в частности такой популярной операционной системы, как OS/360.

Наши рекомендации