Операционные системы. Учебное пособие. Марапулец Ю.В. - 96 стр.

UptoLike

Составители: 

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

     4.2.4. Сегментное распределение памяти

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


                                         98