6.1.6. Реализация сегментации
Сегментацию можно
реализовать одним из двух способов -
подкачка
(“чистая сегментация”) и разбиение
на страницы. Подкачка
сегментов очень похожа на вызов страниц
по требованию: сегменты загружаются и
удаляются только в случае необходимости.
В каждый момент в физической памяти
находится некоторый набор сегментов.
Если происходит обращение к отсутствующему
сегменту, то он загружается в память.
Если для него нет места в памяти, один
или несколько сегментов нужно удалить,
при необходимости записав на диск. Тем
не менее сегментация существенно
отличается от разбиения на страницы
тем, что размер страниц фиксирован, а
сегментов - нет. В связи с этим возможна
внешняя фрагментация
(неиспользованное
пространство попадает не в сегменты, а
в промежутки между ними. Иногда внешнюю
фрагментацию называют поклеточной
разбивкой. Для ее
устранения периодически или по
необходимости может запускаться процесс
дефрагментации (уплотнения памяти), что
снижает общую производительность.
При чистой сегментации
страницы не используются. Второй
способ реализации - разделить каждый
сегмент на страницы фиксированного
размера и вызывать их, например, по
требованию. В этом случае одна часть
страниц сегмента может находиться
в памяти, другая - на диске. Поскольку
сегмент представляет собой линейное
адресное пространство, все вышеизложенные
средства разбиения на страницы
применимы к любому сегменту. Единственное
различие состоит в том, что каждый
сегмент получает отдельную таблицу
страниц.