Операционные системы. Теория и практика. Замятин А.В. - 99 стр.

UptoLike

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

99
В связи с тем, что программы перемещаются по ОП в ходе своего
выполнения, то невозможно выполнить настройку адресов с помощью
перемещающего загрузчика. Здесь более подходящим оказывается ди-
намическое преобразование адресов.
Сжатие применяется и при использовании других методов распре-
деления памяти, когда отдельному процессу выделяется не одна сплош-
ная область памяти, а несколько несмежных участков памяти произ-
вольного размера (сегментов). Такой подход был использован в ранних
версиях OS/2, в которых память распределялась сегментами, а возни-
кавшая при этом фрагментация устранялась путем периодического пе-
ремещения сегментов.
Распределение памяти динамическими разделами легло в основу
подсистем управления памятью многих мультипрограммных ОС 60-70-х
годов, в частности такой популярной ОС, как OS/360.
4.2.6 Сегментное распределение
Наряду с рассмотренными в пп. 4.2.3-4.2.5 методами непрерывного
распределения памяти не использующими внешнюю память, существует
целый ряд разрывных методов распределения памяти, при которых за-
даче не предоставляется сплошная (непрерывная) область памяти, и
кроме того используется внешняя память.
Идея выделять память задаче не одной сплошной областью, а фраг-
ментами позволяет уменьшить фрагментацию памяти, однако этот под-
ход требует для своей реализации больше ресурсов, он значительно
сложнее. Если задать адрес начала текущего фрагмента программы и ве-
личину смещения относительно этого начального адреса, то можно ука-
зать необходимую нам переменную или команду. Таким образом, вир-
туальный адрес можно представить состоящим из двух полей. Первое
поле будет указывать на ту часть программы, к которой обращается
процессор, для определения местоположения этой части в памяти, а
второе поле виртуального адреса позволит найти нужную нам ячейку
относительно найденного адреса. Программист может либо самостоя-
тельно разбивать программу на фрагменты, либо можно ав-
томатизировать эту задачу, возложив ее на систему программирования.
Первым среди разрывных методов распределения памяти был сег-
ментный. В соответствие с этим методом программу необходимо разби-
вать на части и уже каждой такой части выделять физическую память.
Естественным способом разбиения программы на части является разби-
ение ее на логические элементы так называемые сегменты. В принци-
пе, каждый программный модуль (или их совокупность) может быть
воспринят как отдельный сегмент, и вся программа тогда будет пред-
ставлять собой множество сегментов.