Сегментно-страничное распределение
Комбинация страничного и сегментного методов.
Сочетает плюсы обоих подходов (должен, по крайней мере);
· ВАП делится на сегменты (можно задавать права доступа)
· Сегменты делятся на страницы фиксированного размера – перемещение данных осуществляется страницами (минимизация фрагментации)
· Сегменты образуют линейное адресное пространство
· Адрес можно задавать:
** либо линейным адресом
** либо парой чисел: номер сегмента + смещение (ОС делает так, т.к. это позволяет проверить права доступа к сегменту)
Напрочь не понимаю, что на этой картинке нарисовано, но…
Создается процесс.
· ОС создает для процесса таблицу сегментов, где содержатся дескрипторы всех сегментов (все, как при сегментной организации, только базовый адрес указывается НЕ ФИЗИЧЕСКИЙ, а начальный линейный виртуальный адрес сегмента)
· ОС, используя начальный линейный виртуальный адрес сегмента, преобразовывает пару (номер сегмента + смещение в сегменте) в ЛИНЕЙНЫЙ ВИРТУАЛЬНЫЙ адрес байта.
· Потом, используя СТРАНИЧНЫЕ механизмы, этот линейный виртуальный адрес байта преобразуется в физический.
Деление ВАП процесса на страницы аналогично страничной организации памяти:
· Размер страницы – степень двойки
· Нумерация виртуальных страниц – в пределах ВАП процесса
· Нумерация физических страниц – в пределах оперативной памяти.
· Для каждого процесса также ведется ТАБЛИЦА СТРАНИЦ
· В память загружаются / выгружается только часть страниц процесса по разным всяким механизмам.
· Базовый адрес таблицы страниц и таблицы сегментов – часть контекста процесса, они хранятся в специальных регистрах процессора.
Итак, преобразование виртуального адреса в физический:
1) Механизм сегментации (добываем линейный виртуальный адрес):
· Дано: номер сегмента, смещение
· В спец регистре хранится базовый адрес таблицы сегментов
· Базовый адрес + номер сегмента = адрес дескриптора сегмента
· Анализ полей дескриптора (разрешен ли доступ к сегменту)
· Из дескриптора добываем базовый адрес сегмента + смещение = линейный виртуальный адрес.
2) Страничный механизм (получаем физический адрес)
· Линейный виртуальный адрес раскладывается на номер страницы и смещение внутри страницы (отделение энного к-ва младших бит, в зависимости от размера страницы)
· В спец регистре хранится адрес таблицы страниц, оттуда добываем дескриптор нужной страницы, и находим соответствующий номер физической страницы
· К номеру физической страницы прибавляем смещение = физический адрес.
Ура!!!
Механизм сегментации и страничный механизм здесь довольно изолированы друг от друга, и могут быть независимо изменены.
Например, страничный механизм может быть многоуровневый (добавились разделы, описанные в страничной реализации). Так, например, работают некоторые процессоры Интел, в т.ч Интел Пентиум.
Сегментно-страничное управление памятью можно реализовать по-другому:
· ВАП процесса делим на сегменты
· Сегменты делим на виртуальные страницы, но они нумеруются В ПРЕДЕЛАХ СЕГМЕНТА, а не всего ВАП процесса.
· Виртуальный адрес задается 3 параметрами: Номер Сегмента + Номер Страницы + Смещение в Странице.
· У каждого процесса – своя таблица сегментов, хранится в регистре.
· У каждого СЕГМЕНТА – своя таблица страниц
· В таблице страниц – дескрипторы страниц, без особенностей
· В таблице сегментов – дескрипторы сегментов хранят АДРЕС ТАБЛИЦ СТРАНИЦ.
Преобразование адреса в такой схеме еще красивше:
1) Есть номер сегмента, находим адрес соответствующей таблицы страниц
2) Есть номер страницы, находим номер физической страницы
3) К нему конкатенируем смещение.
Ура!!!