Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
04-11-12 Управление памятью.DOC
Скачиваний:
15
Добавлен:
23.08.2019
Размер:
2.22 Mб
Скачать

10.2. Распределение памяти без использования дискового пространства

10.2.1. Распределение памяти фиксированными разделами

Самым простым способом управления оперативной памятью является разделение ее на области с фиксированными границами. Это может быть выполнено во время генерации ОС. В том случае, когда разделы имеют одинаковый размер, размещение процессов в памяти представляет собой тривиальную задачу. Не имеет значения, в каком из свободных разделов будет размещен процесс. Но при этом подходе есть и свои трудности:

  1. Программа может быть слишком велика для размещения в разделе. В этом случае программист должен разработать программу, использующую оверлеи.

  2. Использование памяти при этом крайне неэффективно. Так, маленькая программа все равно будет занимать целиком весь раздел, при этом остается неиспользованная память. Этот феномен неиспользованной памяти называется внутренней фрагментацией.

Когда разделы имеют разные размеры, очередная задача, поступившая на выполнение, помещается либо в общую очередь (рисунок 10.3,а), либо в очередь к некоторому разделу (рисунок 10.3,б). Подсистема управления памятью в этом случае выполняет следующие задачи:

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

  • осуществляет загрузку программы и настройку адресов.

Достоинство такого подхода заключается в том, что процессы могут быть распределены между разделами памяти так, чтобы минимизировать внутреннюю фрагментацию. Использование разделов разного размера по сравнению с использование разделов одинакового размера придает дополнительную гибкость данному методу. Кроме того, такие схемы относительно просты и предъявляют минимальные требования к операционной системе.

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

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

Фиксированное распределение в настоящее время практически не используется. Примером ОС с использованием данной технологии может служить ранняя ОС IBM для мэйнфреймов OS/MFT (Multiprogramming with a Fixed number of Tasks – многозадачная с фиксированным количеством задач).

10.2.2. Динамическое распределение памяти

В этом случае память машины не делится заранее на разделы. Сначала вся память свободна. Каждой вновь поступающей задаче выделяется необходимая ей память. Если достаточный объем памяти отсутствует, то задача не принимается на выполнение и стоит в очереди. После завершения задачи память освобождается, и на это место может быть загружена другая задача. Таким образом, в произвольный момент времени оперативная память представляет собой случайную последовательность занятых и свободных участков (разделов) произвольного размера. На рисунке 10.4 показано состояние памяти в различные моменты времени при использовании динамического распределения.

Так в момент t0 в памяти находится только ОС, а к моменту t1 память разделена между 5 задачами, причем задача П4, завершаясь, покидает память. На освободившееся после задачи П4 место загружается задача П6, поступившая в момент t3.

Задачами ОС при реализации данного метода управления памятью является:

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

  • при поступлении новой задачи - анализ запроса, просмотр таблицы свободных областей и выбор раздела, размер которого достаточен для размещения поступившей задачи;

  • загрузка задачи в выделенный ей раздел и корректировка таблиц свободных и занятых областей;

  • после завершения задачи корректировка таблиц свободных и занятых областей.

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

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

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

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

В свое время динамическое распределение использовала ОС IBM для мейнфреймов OS/MVT (Multiprogramming with a Variable number of Tasks – многозадачная с переменным количеством задач).