ЗНАЕТЕ ЛИ ВЫ?

Смежное размещение процессов



Методы размещения процессов в основной памяти по отношению к расположению участков памяти, выделенных для процесса, делят на два класса:

- методы смежного размещения (Contiguous allocation);

- методы несмежного размещения.

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

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

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

­ для резидентной части (ядра) ОС;

­ для пользовательских процессов.

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

Простое непрерывное распределение

Пользователю выделяется область памяти, расположенная непосредственно за фиксированной областью, отведенной под ядро. Эта область память ограничивается регистрами базы и границы. Регистр базы содержит начальный адрес в оперативной памяти. Регистр границы содержит число допустимых логических адресов. Любой логический адрес должен быть меньше регистра границы. Это обеспечивает защиту операционной системы (см. рис. 11.4).

Рисунок 11.4 - Защита памяти с помощью регистра границы

При простом непрерывном распределении имеются два основных вида потерь:

­ невозможно использовать процессор, когда пользователь ждет;

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

Распределение с несколькими непрерывными разделами

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

Простейшее решение – разделить доступную оперативную память на несколько разделов фиксированного размера (Multiprogramming with Fixed number of Tasks – MFT). Каждый раздел содержит один процесс, то есть степень мультизадачности системы будет равна числу разделов. Такой подход использовался в OS/360 IBM, но недолго. Метод распределения памяти с фиксированными границами разделов нелегко приспособить к меняющемуся числу задач. Кроме того возможна недопустимая фрагментация.

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

Вообще говоря, в каждый момент времени в памяти присутствует несколько свободных областей различных размеров. Когда появляется новый процесс, нуждающийся в памяти, планировщик ищет среди них свободную область, достаточную для размещения процесса. Если область слишком велика, то она разбивается на две, в одной размещается процесс, а вторая возвращается в множество свободных областей (см. рис. 11.5).

Рисунок 11.5 – Действия планировщика при размещении процессов в памяти

Когда процесс завершается, освобождаемый блок помещается в список свободных блоков. Если свободны два соседних блока, то они объединяются в один блок большего размера.

Существует несколько стратегий выбора свободной области:

­ Стратегия наиболее подходящего (Best-fit Strategy). Выбирается программа, которой в свободном разделе наиболее «тесно».

­ Стратегия первого подходящего (First-fit Strategy). Выбирается программа, которая помещается в свободный раздел.

­ Стратегия наименее подходящего (Last-fit Strategy). Выбирается программа, которой в свободном разделе наиболее «свободно». В этом случае остающийся фрагмент часто достаточен для размещения еще одной программы

Фрагментация

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

Фрагментация вызывает различные проблемы. В самом плохом случае, свободные блоки располагаются между каждыми двумя процессами. Если бы вся эта память была объединена в единый большой блок, то можно было бы запустить большее количество процессов. Выбор стратегии распределения памяти может повлиять на фрагментацию. Внешняя фрагментация также зависит от общего объема оперативной памяти и среднего размера процесса. Статистика показывает, что даже с некоторой оптимизацией, если выделено N блоков, то 0.5N блоков теряются из-за фрагментации, то есть 1/3 памяти недоступна (правило 50%).

Другая проблема, связанная с распределением памяти с несколькими разделами, состоит в следующем. Рассмотрим блок размером 18464 байта. Предположим, что следующему процессу требуется 1862 байта. Если мы выделим запрашиваемый блок, то свободно останется 2 байта. Накладные расходы на хранение такого блока себя не оправдывают. Общий подход – распределение слишком маленьких блоков как части запрошенных. То есть выделенный участок может быть немного больше запрошенного. Эта разница составляет внутреннюю фрагментацию (память выделена, но не используется).

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

Уплотнение возможно, только если привязка адресов производится на этапе выполнения программы. Если уплотнение возможно, то следует определить его стоимость. Простейшая стратегия – подвинуть все процессы вверх, но это очень дорого.

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

Часто совместно с уплотнением используется свопинг. Одним из подходов к уплотнению является вытеснение всех процессов во внешнюю память, а затем их подкачка на новое место. Если в системе уже есть свопинг, то затраты труда программиста на решение этой задачи весьма невелики.

На практике реализация уплотнения памяти сопряжена с усложнением операционной системы и обладает следующими недостатками:

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

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





Последнее изменение этой страницы: 2016-08-16; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.236.156.32 (0.007 с.)