Cтраница 2
Часть логического адреса, содержащая индекс сегмента, ис - пользуется для выбора строки из таблицы сегментов, которая определяет таблицу страниц, участвующую в формировании истинного адреса. Адрес строки в таблице сегментов получается путем присоединения к содержимому битов 8 - 25 управляющего регистра 1 шести младших нулевых битов и прибавления к полученному коду кода индекса сегмента. При этом младший бит кода индекса сегмента располагается на позиции, соответствующей биту 29 адреса таблицы сегментов. [16]
Поля регистра используются следующим образом: Длина таблицы сегментов: содержимое битов 0 - 7 управляющего регистра 1 определяет длину таблицы сегментов в блоках по 64 байта каждый. Следовательно, размер таблицы сегментов может изменяться на целое число, кратное суммарной длине 16 строк такой таблицы. Индекс сегмента служит для выбора строки таблицы сегментов, а содержимое поля длины позволяет проверить, указывает ли индекс сегмента на строку, находящуюся в пределах заданной таблицы сегментов. [17]
Важной целью этого метода ( которая описана здесь в общей форме) является уменьшение числа строк за счет распознавания того, где строки можно дополнить, а где их можно расчленить. На этапе распределения для каждой строки строится ряд индексов. Каждый индекс представляет некоторый сегмент строки. Сегмент строки в методе PEER, например, определяется как такая часть строки, которая помещается на одной дорожке устройства. На рис. 18.16 показан индекс сегмента строки. Одна строка, согласно этому рисунку, описывается индексным числом, младшим и старшим ключами этого сегмента, количеством записей в сегменте и адресом сегмента ня диске. [18]
При выполнении сегментированной программы участок памяти, отведенный для нее, занимается следующим образом. Эти ячейки будут расположены вплотную к полю областей, а положение их будет зафиксировано в указателе заполнения памяти. Очередной загружаемый сегмент располагается в памяти в соответствии с содержимым указателя. Ячейки индексов этого сегмента располагаются в индексном поле за ячейками индексов предыдущего сегмента. Основные, рабочие и общие области располагаются так же, как соответствующие области предыдущего сегмента, причем для общих областей с совпадающими наименованиями новое место в памяти не отводится. При загрузке сегмента автоматически корректируется указатель заполнения памяти. Если очередной сегмент вызывается на место предыдущего, то в программе должно быть предусмотрено предварительное освобождение памяти предыдущего сегмента. При освобождении памяти восстанавливается предыдущее состояние указателя. [19]