Сегментное распределение памяти

Страничное распределение не учитывает смысла.

· С ним нельзя организовать дифференцированный доступ к разным частям программы.

· Также разбиение по смыслу позволило бы совместное использование подпрограмм разными процессами, без дублирования кодов этой подпрограммы.

Это позволяет сделать сегментное распределение памяти.

· ВАП процесса делится на сегменты (по смыслу) – либо по принятым в системе законам либо по указаниям программиста.

· Максимальный размер сегмента ограничен разрядностью процессора (32 разряда – 4 Гбайт)

· Диапазон адресов одного сегмента – 0000 0000 – FFFF FFFF

· Сегменты не упорядочены друг относительно друга (нет общего линейного виртуального адреса)

· Виртуальный адрес = номер сегмента + линейный виртуальный адрес внутри сегмента.

При создании процесса ОС формирует таблицу сегментов. Для каждого сегменты указаны:

· Базовый физический адрес сегмента в ОП

· Размер сегмента

· Правила доступа к нему

· Признаки модификации, присутствия и обращения и еще чего-то.

Если ВАП двух процессов включают один сегмент, то в их таблицах просто есть ссылки на один и тот же сегмент.

Очень похоже на страничную организацию, но:

· Сегменты имеют произвольный размер, поэтому физический адрес получается путем сложения базового адреса сегмента (берется по номеру сегмента) и смещения. Конкатенация не прокатит.

· Сложение замедляет процедуру преобразования адреса.

· Избыточно сть – для работы программы часто не нужен целый сегмент

· И самое страшное – ФРАГМЕНТАЦИЯ. Возникает из-за непредсказуемости размера сегмента.

Плюс:

· Возможность задавать разные права доступа к разным сегментам (это невозможно со страничной организацией)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: