Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО.doc
Скачиваний:
51
Добавлен:
12.03.2015
Размер:
605.18 Кб
Скачать

Использование перемещаемых разделов

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

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

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

Защита памяти

Вне зависимости от способа создания разделов, необходимо чтобы ОС и аппаратные средства обеспечивали защиту памяти. При выполнении задания в одном разделе необходимо, чтобы оно не меняло значения ячеек в других разделах или блоке размещения ОС. В литературе описаны два основных приема организации защиты.

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

б) При помощи ключей. Каждому блоку памяти ставится в соответствие, как правило, 4-х битовый ключ защиты памяти (следовательно существуют 24=16 вариантов ключей). Каждый пользовательский процесс имеет поставленный ему в соответствие 4-х битовый идентификатор процесса, который хранится в слове состояния. Когда заданию выделяется какой-нибудь раздел, ОС присваивает ключам всех блоков памяти внутри этого раздела значение идентификатора процесса этого задания. При каждом обращении пользовательского процесса к памяти аппаратура сравнивает идентификатор процесса с ключом защиты адресуемого блока. Если значения этих полей не совпадают, то обращение к памяти не происходит и генерируется программное прерывание.