Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

25.Обработка страничных прерываний. Сегментная и сегментно-страничная организация памяти.

.docx
Скачиваний:
33
Добавлен:
16.12.2014
Размер:
15.45 Кб
Скачать

25.Обработка страничных прерываний. Сегментная и сегментно-страничная организация памяти.

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

Обработка страничного прерывания выполняется по следующему алгоритму:

Обработка текущей команды(выполняется аппаратно):

Процессор загрузил следующую команду;

Процесс обращается к данным по некоторому адресу;

По виртуальному адресу определяется номер страницы;

Страница с данным номером ищется в таблице страниц процесса;

ЕСЛИ страница в памяти

ТО {производится обращение к данным по физическому адресу;

завершается выполнение команды;}

ИНАЧЕ генерируется страничное прерывание и процессор переходит

на его обработку;

Обработка страничного прерывания(выполняется программно):

ЕСЛИ нет свободного блока памяти (определяется по таблице блоков памяти)

ТО { выбирается страница для удаления;

ЕСЛИ она была модифицирована

ТО страница копируется в соответствующую страницу

страничного файла;

ИНАЧЕ копирование не требуется;

корректируется таблица страниц процесса, которому

принадлежит удаляемая страница;

корректируется таблица блоков памяти;}

ИНАЧЕ {по таблице страничного файла определяется адрес

нужной страницы на диске;

страница копируется в свободный кадр;

корректируется таблица страниц процесса;

корректируется таблица блоков памяти;}

Повторяется прерванная команда (загружается старое слово состояния процесса-PSW);

Сегментная и сегментно-страничная организации памяти

В сегментной организации виртуальный адрес по-прежнему является двумерным и состоит из двух полей - номера сегмента и смещения внутри сегмента. Заметим, что с точки зрения ОС сегменты являются логическими сущностями и их главное назначение хранение и защита однородной информации (кода, данных и т.д.).

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

Программисты, пишущие на языках низкого уровня должны иметь представление о сегментной организации, явным образом меняя значения сегментных регистров (это хорошо видно по текстам программ, написанных на Ассемблере). Логическое адресное пространство - набор сегментов. Каждый сегмент имеет имя, размер и другие параметры (уровень привилегий, разрешенные виды обращений, флаги присутствия). Пользователь специфицирует каждый адрес двумя величинами: именем сегмента и смещением. (В отличие от схемы пэйджинга, где пользователь задает только один адрес, который разбивается hardware на номер страницы и смещение, прозрачным для программиста образом.)

Каждый сегмент - линейная последовательность адресов от 0 до максимума. Различные сегменты могут иметь различные длины, которые могут меняться динамически (например, сегмент стека). В элементе таблицы сегментов помимо физического адреса начала сегмента (если виртуальный сегмент содержится в основной памяти) содержится длина сегмента. Если размер смещения в виртуальном адресе выходит за пределы размера сегмента, возникает прерывание.

Логический адрес - упорядоченная пара v=(s,d), номер сегмента и смещение внутри сегмента.

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

Аппаратная поддержка сегментов относительно слабо распространена (главным образом на процессорах архитектуры Intel) и характеризуется довольно медленной загрузкой селекторов в сегментные регистры, выполняемая при каждом переключении контекста и при каждом переходе между разными сегментами. В системах с чисто страничной организацией памяти для описания типового адресного пространства процесса, представляющего собой набор сегментов, сегментация реализуется на уровне, независимом от аппаратуры.

Хранение в памяти сегментов большого размера может оказаться неудобным. Возникает идея их пейджинга. При сегментно-страничной организации виртуальной памяти происходит двухуровневая трансляция виртуального адреса в физический. В этом случае виртуальный адрес состоит из трех полей: номера сегмента виртуальной памяти, номера страницы внутри сегмента и смещения внутри страницы. Соответственно, используются две таблицы отображения - таблица сегментов, связывающая номер сегмента с таблицей страниц, и отдельная таблица страниц для каждого сегмента.

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

Соседние файлы в предмете Операционные системы