Слайд 2
Два основных вида организации виртуальной памяти – сегментная и
страничная организация.
Слайд 3
Большая программа может содержать несколько сегментов одного типа,
например, несколько сегментов кода или данных. Таким образом, при сегментной
организации у программы нет единого линейного адресного пространства. Виртуальный адрес состоит из двух частей: селектора сегмента и смещения от начала сегмента.
Слайд 4
Если сегмент находится в памяти, то в таблице
хранится его базовый адрес (адрес физической памяти, соответствующий началу
сегмента). Отсутствие сегмента означает, что его данные временно вытеснены на диск и хранятся в файле подкачки (swap file).
Слайд 5
При каждом обращении к виртуальному адресу аппаратными средствами
выполняется преобразование пары «сегмент : смещение» в физический адрес.
Слайд 6
Если сегмент отсутствует в памяти, то происходит прерывание.
Обрабатывая его, система должна подгрузить сегмент с диска на
свободное место в памяти, записать его базовый адрес в таблицу сегментов и затем повторить команду, вызвавшую прерывание.
Слайд 7
. Кроме того, перемещение сегментов занимает ощутимое время,
поэтому оно недопустимо для сегментов, содержащих, например, обработчики прерываний,
которые должны срабатывать очень быстро. Чтобы избежать этих проблем, в некоторых системах сегменты могут находиться в одном из двух состояний: · фиксированный сегмент не должен перемещаться в памяти; · перемещаемый сегмент может перемещаться системой, однако программа не может обращаться к адресам в таком сегменте, поскольку его местоположение не определено.
Слайд 8
Чтобы работать с данными в перемещаемом сегменте, программа
должна предварительно временно зафиксировать его вызовом специальной системной функции.
При этом ОС определяет текущее местоположение сегмента и корректирует его базовый адрес в таблице сегментов процесса.