Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AOS_otvety_1.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
3.29 Mб
Скачать

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Плюс:

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

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

Комбинация страничного и сегментного методов.

Сочетает плюсы обоих подходов (должен, по крайней мере);

  • ВАП делится на сегменты (можно задавать права доступа)

  • Сегменты делятся на страницы фиксированного размера – перемещение данных осуществляется страницами (минимизация фрагментации)

  • Сегменты образуют линейное адресное пространство

  • Адрес можно задавать:

** либо линейным адресом

** либо парой чисел: номер сегмента + смещение (ОС делает так, т.к. это позволяет проверить права доступа к сегменту)

Напрочь не понимаю, что на этой картинке нарисовано, но…

Создается процесс.

  • ОС создает для процесса таблицу сегментов, где содержатся дескрипторы всех сегментов (все, как при сегментной организации, только базовый адрес указывается НЕ ФИЗИЧЕСКИЙ, а начальный линейный виртуальный адрес сегмента)

  • ОС, используя начальный линейный виртуальный адрес сегмента, преобразовывает пару (номер сегмента + смещение в сегменте) в ЛИНЕЙНЫЙ ВИРТУАЛЬНЫЙ адрес байта.

  • Потом, используя СТРАНИЧНЫЕ механизмы, этот линейный виртуальный адрес байта преобразуется в физический.

Деление ВАП процесса на страницы аналогично страничной организации памяти:

  • Размер страницы – степень двойки

  • Нумерация виртуальных страниц – в пределах ВАП процесса

  • Нумерация физических страниц – в пределах оперативной памяти.

  • Для каждого процесса также ведется ТАБЛИЦА СТРАНИЦ

  • В память загружаются / выгружается только часть страниц процесса по разным всяким механизмам.

  • Базовый адрес таблицы страниц и таблицы сегментов – часть контекста процесса, они хранятся в специальных регистрах процессора.

Итак, преобразование виртуального адреса в физический:

  1. Механизм сегментации (добываем линейный виртуальный адрес):

  • Дано: номер сегмента, смещение

  • В спец регистре хранится базовый адрес таблицы сегментов

  • Базовый адрес + номер сегмента = адрес дескриптора сегмента

  • Анализ полей дескриптора (разрешен ли доступ к сегменту)

  • Из дескриптора добываем базовый адрес сегмента + смещение = линейный виртуальный адрес.

  1. Страничный механизм (получаем физический адрес)

  • Линейный виртуальный адрес раскладывается на номер страницы и смещение внутри страницы (отделение энного к-ва младших бит, в зависимости от размера страницы)

  • В спец регистре хранится адрес таблицы страниц, оттуда добываем дескриптор нужной страницы, и находим соответствующий номер физической страницы

  • К номеру физической страницы прибавляем смещение = физический адрес.

Ура!!!

Механизм сегментации и страничный механизм здесь довольно изолированы друг от друга, и могут быть независимо изменены.

Например, страничный механизм может быть многоуровневый (добавились разделы, описанные в страничной реализации). Так, например, работают некоторые процессоры Интел, в т.ч Интел Пентиум.

Сегментно-страничное управление памятью можно реализовать по-другому:

  • ВАП процесса делим на сегменты

  • Сегменты делим на виртуальные страницы, но они нумеруются В ПРЕДЕЛАХ СЕГМЕНТА, а не всего ВАП процесса.

  • Виртуальный адрес задается 3 параметрами: Номер Сегмента + Номер Страницы + Смещение в Странице.

  • У каждого процесса – своя таблица сегментов, хранится в регистре.

  • У каждого СЕГМЕНТА – своя таблица страниц

  • В таблице страниц – дескрипторы страниц, без особенностей

  • В таблице сегментов – дескрипторы сегментов хранят АДРЕС ТАБЛИЦ СТРАНИЦ.

Преобразование адреса в такой схеме еще красивше:

  1. Есть номер сегмента, находим адрес соответствующей таблицы страниц

  2. Есть номер страницы, находим номер физической страницы

  3. К нему конкатенируем смещение.

Ура!!!

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]