90
То обстоятельство, что процесс работает в виртуальных адресах,
делает возможным перемещение сегментов в реальной памяти. Переместив
процесс в другую область реальной памяти, ОС просто изменяет поле
базового адреса в дескрипторе его сегмента. Поскольку, как и в модели с
фиксированными разделами, реальная память распределяется
непрерывными блоками переменной длины, здесь применяются те же
стратегии размещения. Но возможное здесь перемещение сегментов
является эффективным способом борьбы с внешними дырами. Сегменты
переписываются в реальной памяти таким образом, чтобы свободных мест
между ними не оставалось, все свободное пространство сливается в один
большой свободный блок и, таким образом, оказывается доступным для
последующего распределения.
Другой возможностью, которую открывает динамическая трансляция
адресов, является вытеснение сегментов. Если даже после перемещения
сегментов запрос на память не может быть удовлетворен, то ОС может
переписать какой-либо сегмент на внешнюю память и освободить
занимаемую им реальную память. Поскольку контекст процесса, который
содержится в вытесненном сегменте, сохраняется, то впоследствии ОС
может вновь загрузить этот сегмент в реальную память, откорректировать
базовый адрес в его дескрипторе и возобновить выполнение процесса.
Перемещение сегментов и (см. ниже) страниц между оперативной и
внешней памятью и наоборот – называется свопингом (swapping), а
составные его части – вытеснением (swap out) и подкачкой (swap in).
Поскольку в модели происходит вытеснение сегментов, должна быть
реализована какая-то его стратегия. Естественно, что наилучшим
кандидатом на вытеснение должен быть сегмент процесса, находящегося в
заблокированном состоянии. Но следует при этом иметь в виду, что
процесс может быть заблокирован потому, что он ожидает завершения
операции ввода-вывода. При вводе-выводе, использующем канал или