Сделай Сам Свою Работу на 5

Разделы с подвижными границами

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

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

Рассмотрим процесс распределения памяти, показанный на рис.3.6. Для каждого загружаемого процесса создается новый раздел с размерами, соответствующими размеру процесса. На рис.3.6,а система последовательно выделила память пяти процессам, и 1 000 байт памяти остались свободными, что недостаточно для загрузки очередного процесса. Когда завершается процесс 2, его раздел освобождается, и новый раздел отводится процессу 6. Как показано на рис.3.6,б, этот новый раздел занимает часть памяти, которая отводилась процессу 2. Остаток от прежнего раздела процесса 2 остается свободным.

 

 

 

Рис. 3.6. Распределение памяти с использование разделов

с подвижными границами

 

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

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



Эта проблема решается при помощи метода, называемого уплотнением памяти (рис.3.7) и состоящего в перемещении всех занятых разделов к одному или другому краю основной памяти. Благодаря этому вместо многочисленных небольших «дыр», обычных для мультипрограммирования с переменными разделами, мы получаем е­диный большой свободный участок памяти. А уж если вся свободная память представлена одним участком, то ожидающее задание может выполняться, если ему требуется память, не превышающая размера этого единого полученного в результате уплотнения участка. Уплотнение памяти называют дефрагментацией памяти, а среди программистов бытует термин «сбор мусора».

 

 

Рис. 3.7. Уплотнение памяти

 

Уплотнение памяти имеет свои недостатки:

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

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

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

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

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

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

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

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

 

 

Рис. 3.8. Размещение процесса D длиной 6000 байт в памяти

по принципу занятия

а) первого подходящего по размеру участка

б) наиболее подходящего по размеру участка

в) наименее подходящего по размеру участка

 

Своппинг

 

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

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

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

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

 



©2015- 2017 stydopedia.ru Все материалы защищены законодательством РФ.