Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
UchbnoePosobieV14 - p2.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
2.08 Mб
Скачать

4.1.5.Подкачка процессов целиком

При swapping выгрузка процесса на диск, связанная с временными потерями, на логическом уровне не вызывает никаких осложнений. При наличии динамического уплотнения загрузка также осуществляется на основе простого принципа: либо процесс помещается в свободную область памяти, находящуюся на старших адресах памяти, либо не помещается. Любая из этих ситуаций диктует очевидное продолжение. Положение меняется, когда временные затраты на поддержку уплотнения памяти не вписываются в круг решаемых задач и приходится ограничиваться моделью памяти с перемещаемыми модулями. В этом случае наличие свободных фрагментов памяти порождает две проблемы, связанных с продуктивным использованием оперативной памяти. Первая проблема связана с решением задачи: в какой раздел памяти включать данный процесс? Если во время выполнения задачи её объём остаётся постоянным, то практически можно ограничиться решением первой проблемы. При изменении в процессе выполнения задачи её объёма, занимаемого в памяти (например, при выделении задачи динамической памяти), при выделении ОП приходится учитывать это обстоятельство.

Включение задачи в соответствующий раздел памяти. Соответствующий раздел памяти может выбираться по одному из трех алгоритмов (Рис. 4 .5, на котором занятые разделы памяти заштрихованы):

  • включать в первый подходящий раздел памяти, т. е. тот который находится на младших адресах памяти (на рисунке – (1));

  • включать в самое подходящее место (2);

  • включать в самое неподходящее место (3).

По первому алгоритму ищется первый свободный раздел, объем которого V2 больше объема процесса Vпроцесса. Этот алгоритм, который можно назвать алгоритмом лентяя, является самым простым.

Рис. 4.5. Область памяти

Второй алгоритм – алгоритм «рачительного хозяина». Соответствующим разделом памяти в рамках этого подхода будет считаться свободная область памяти с объёмом V1 , для которого разность V1 Vпроцесса будет минимальной. Идея этого алгоритма – очевидна. Она направлена на оптимальное использование оперативной памяти.

Суть третьего алгоритма, на первый взгляд, не столь очевидна. Разность V3 Vпроцесса выбирается максимальной из всех свободных фрагментов памяти. Такая схема напоминает алгоритм игрока. Однако, «железная» логика присутствует и в этом алгоритме. Действительно, при таком выборе фрагмента памяти после загрузки процесса остаётся самый большой свободный «кусок» и не исключено, что он может быть использован для загрузки другой задачи.

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

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

Управление памятью при свопинге. Рассмотрим способы управления памятью, реализующие представленные выше алгоритмы. Наиболее распространенными методами управления памяти являются следующие:

  • управление памяти с помощью битовых массивов;

  • управление памятью с помощью связанных списков.

Битовые массивы. Каждой области памяти, одинакового объема в n байт соответствует в битовом массиве 1 бит. Если данная область памяти занята, то бит установлен, В противном случае он равен 0. Это простой и не требующий больших затрат памяти способ отслеживать занятые области памяти. Однако, как это часто характерно для простых методов, его поддержка требует определенных временных затрат в силу того, что в довольно большой битовой последовательности необходимо найти соответствующую область из непрерывных битов со значением, равным 0. При этом для второго и третьего алгоритма при определении наименьшего (или наибольшего) подходящего кандидата эту процедуру следует повторять до тех пор, пока указанный битовый массив не будет исследован до конца. Очевидно, что такую процедуру трудно назвать оптимальной.

Управление памятью с помощью связанных списков. Применение двухсвязанных списков позволяет решить эту задачу намного продуктивнее, чем на уровне битовых массивов. На Рис. 4 .6 представлен фрагмент памяти из 55 условных областей, состояние которого описано двухсвязным списком. Каждый элемент этого списка имеет 5 полей. Два крайних поля служат для записи указателей на предыдущий и последующий элементы связанного списка. В одном поле записан статус данной совокупности областей памяти (P – совокупность занята процессом, H – свободный раздел). В двух оставшихся полях соответственно записан начальный адрес раздела и количество областей памяти. В данном случае поиск соответствующего оставленной задачи свободного раздела памяти осуществляется простым просмотром связанного списка с посещением поля, в котором записано количество условных областей. Также просто в этой структуре обновляется описание фрагментов памяти после загрузки или выгрузки процесса.

При загрузке процесса возникает всего одна ситуация: соседями нового процесса, загруженного в свободный раздел, могут быть только другие процессы (при таком описании не могут встретиться подряд два свободных раздела памяти). Для того чтобы изменить описание фрагмента памяти достаточно:

  • создать новый элемент списка;

  • включить его в связанный список, адекватно заполнив его поля;

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

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

При окончании работы процесса или временной выгрузки на диск могут возникнуть четыре варианта:

Рис. 4.6. Двухсвязанный список описывающий состояние фрагмента памяти (55 областей)

  • справа и слева от освобожденной памяти соседями являются процессы;

  • справа и слева свободные разделы памяти;

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

  • предыдущий элемент списка описывает процесс раздел памяти, а последующий – свободный раздел памяти.

В первом варианте достаточно поменять статус с P на H.

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

В третьем случае надо слить предыдущий элемент и освобожденный.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]