Страничное распределение не учитывает смысла.
· С ним нельзя организовать дифференцированный доступ к разным частям программы.
· Также разбиение по смыслу позволило бы совместное использование подпрограмм разными процессами, без дублирования кодов этой подпрограммы.
Это позволяет сделать сегментное распределение памяти.
· ВАП процесса делится на сегменты (по смыслу) – либо по принятым в системе законам либо по указаниям программиста.
· Максимальный размер сегмента ограничен разрядностью процессора (32 разряда – 4 Гбайт)
· Диапазон адресов одного сегмента – 0000 0000 – FFFF FFFF
· Сегменты не упорядочены друг относительно друга (нет общего линейного виртуального адреса)
· Виртуальный адрес = номер сегмента + линейный виртуальный адрес внутри сегмента.
При создании процесса ОС формирует таблицу сегментов. Для каждого сегменты указаны:
· Базовый физический адрес сегмента в ОП
· Размер сегмента
· Правила доступа к нему
· Признаки модификации, присутствия и обращения и еще чего-то.
Если ВАП двух процессов включают один сегмент, то в их таблицах просто есть ссылки на один и тот же сегмент.
Очень похоже на страничную организацию, но:
· Сегменты имеют произвольный размер, поэтому физический адрес получается путем сложения базового адреса сегмента (берется по номеру сегмента) и смещения. Конкатенация не прокатит.
· Сложение замедляет процедуру преобразования адреса.
· Избыточно сть – для работы программы часто не нужен целый сегмент
· И самое страшное – ФРАГМЕНТАЦИЯ. Возникает из-за непредсказуемости размера сегмента.
Плюс:
· Возможность задавать разные права доступа к разным сегментам (это невозможно со страничной организацией)