Виртуальное адресное пространство процесса делится на части - сегменты, размер которых определяется с учетом смыслового значения содержащейся в них информации. Максимальный размер сегмента определяется разрядностью виртуального адреса, например при 32-разрядной организации процесса он равен 4 Гбайт. При этом максимально возможное виртуальное пространство процесса представляет собой набор из N виртуальных сегментов, каждый размером по 4 Гбайта. Виртуальный адрес задается номером сегмента и линейным виртуальным адресом внутри сегмента.
При загрузке процесса в ОП помещается только часть его сегментов, полная копия виртуального адресного пространства находится в дисковой памяти. Для каждого загружаемого сегмента ОС подыскивает непрерывный участок свободной памяти достаточного размера. Если во время выполнения процесса происходит обращение по виртуальному адресу, относящемуся к сегменту, который в данный момент отсутствует в памяти, то происходит прерывание. ОС приостанавливает активный процесс, запускает на выполнение следующий процесс из очереди, а параллельно организует загрузку нужного сегмента с диска.
|
|
При отсутствии в памяти места, необходимого для загрузки сегмента, ОС выбирает сегмент на выгрузку. На этапе создания процесса во время загрузки его образа в ОП система создает таблицу сегментов процесса, в которой для каждого сегмента указывается:
– базовый физический адрес сегмента в ОП;
– размер сегмента;
– правила доступа к сегменту;
– признаки модификации, присутствия и обращения к данному сегменту, а также некоторая другая информация.
Если виртуальные адресные пространства нескольких процессов включают один и тот же сегмент, то в таблицах сегментов этих процессов делаются ссылки на один и тот же участок ОП, в которой данный сегмент загружается в единственном экземпляре.
Недостатком данного метода распределения памяти является фрагментация на уровне сегментов и более медленное по сравнению со страничной организацией преобразование адреса.