Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л12_13_14_15КУТО.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
29.81 Mб
Скачать

2.2.6. Совместное действие

сегментации и страничного преобразования

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

Страницы Сегменты

Рис.2.25. Карта памяти с сегментами и страницами

На рис.2.25 показана карта линейной памяти типичной системы с нанесенными границами сегментов (сегменты обозначены буква­ми А — Н) и страничными кадрами (обозначены цифрами 0 — 5). Как видно из этого рисунка, взаимное расположение сегментов и страничных кадров может быть произвольным: сегмент может пол­ностью входить в страницу (сегменты А, В, D и Н), страница может целиком входить в сегмент (страница 3), а некоторые сегменты пе­ресекают границы страниц (сегменты С, Е и G). Если задавать границы сегментов безотносительно границ страниц, такое структурирование памяти неизбежно.

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

Предположим, что для передачи на диск выбрана страница т.е. ее элемент РТЕ отмечается как неприсутствующий и занятое е пространство памяти освобождается для иных целей. Весь физиче< кий кадр 3 содержится внутри одного логического сегмента и ei удаление влияет лишь на один этот сегмент. Когда выполняющаяс программа обращается к этой части сегмента F, возникает crpi ничное нарушение и обычным образом осуществляется свопинг.

Предположим, что для передачи на диск выбрана страница перекрывающая начато сегмента Е и конец сегмента F. После т редачи ее на диск обращение к любой из частей сегментов Е и потребует свопинга и считывания страницы 2 в память. Он буд произведен как обычно, но страница 2, находясь в двух сегментах, будущем может потребоваться в два раза чаще. Чем чаще произ» дится свопинг, тем значительнее падает производительность.

Возможна худшая ситуация, когда для освобождения выбра] страница 1, которая содержит весь сегмент D и примерно полов] ны сегментов С и Е. В зависимости от назначения этих сегменте не исключается, что один из сегментов С или Е используется в< время. Другими словами, как только страница 1 передается на дис текущая программа передает управление (JMP) сегменту С, сч] тывает параметры из сегмента Е или включает что-то в стек, кот рым является сегмент D. В любом из этих случаев надо возврата страницу 1 с диска; Крайне важно избегать передачи на диск т страниц, которые содержат весь сегмент стека или его часть. Обы но стеки используются весьма интенсивно и при передачи стр ницы со стеком на диск ее вскоре придется возвращать в память.

Предположим, далее, что на диск передана страница 0 и о мечена как неприсутствующая. Пусть сегмент А является псевдонимом глобальной дескрипторной таблицы GDT, а сегмент В псевдонимом дескрипторной таблицы прерываний IDT. Это приведет к тому, что дескрипторные таблицы не присутствуют, когда к ним обращается программа с уровнем привилегий 0 (например, для модификации дескрипторов), и когда к ним обращается сам процессор. Отсюда следует, что системные таблицы нельзя передава на диск в процессе свопинга. Отметка неприсутствующей страницы, содержащей дескрипторную таблицу прерываний IDT, являет верным средством вызвать отключение процессора.

Заключение

С егментация, как способ организации и управления памятью, имеет достоинства и недостатки. Среди достоинств отметим:

— возможность реализации виртуальной памяти,

-^ разработку надежных и живучих операционных систем на базе механизма защиты по привилегиям,

— автоматическое обнаружение и обработку программных ошибок, в связи с неверными указателями или нарушениями пределов.

Основной недостаток сегментации заключается в необходимости выполнять служебные функции при загрузке селекторов в сегмент­ные регистры. Действительно, при этой операции необходимо по­мимо загрузки собственно селектора загружать в теневой регистр 8-байтный дескриптор сегмента из соответствующей дескрипторной таблицы. Для этого требуются, как минимум, два цикла шины. Кроме того, при загрузке дескриптора доступ к нему должен быть отмечен в дескрипторной таблице установкой бита А = 1, а на это требуется один цикл шины для записи. Из-за этих дополнительных циклов шины и необходимости контроля типа сегмента, размера дескрипторных таблиц и уровней привилегий загрузка сегментного регистра длится значительно дольше регистра общего назначения.

Автоматический контроль пределов позволяет выявлять ошибки в программах. Однако для эффективности такого контроля прихо­дится вводить большое число сегментов, а это увеличивает число медленных операций загрузки сегментных регистров. Наконец, сегментация предполагает работу с неудобными 48-битными указателями селектор-смещение.

В процессоре i486 реализована довольно гибкая схема сегмента­ции памяти. Во-первых, ее можно полностью игнорировать, создав -один сегмент кода и один сегмент данных, которые включают в се­бя все линейное адресное пространство. На первый взгляд, здесь невозможно организовать виртуальную память. Однако такая воз­можность сохраняется благодаря тому, что в процессоре i486 имеет­ся второй уровень преобразования адресов с помощью страниц. Но при этом теряется защита по четырем уровням привилегий.

Во-вторых, можно применить ограниченную форму сегмента­ции, в которой для каждого пользователя или задачи в системе со­здаются по одному сегменту кода и данных. Здесь прикладная про­грамма «видит» одно адресное пространство, а с сегментами работа­ет только операционная система. Зашита обеспечивается по от­дельным задачам, а для организации виртуальной памяти можно привлечь сегментацию и/или страничное преобразование.

Наконец, в третьих, возможно реализовать полностью сегменти­рованную систему, где каждому большому объекту данных и каж-

дому модулю кода выделяется отдельный сегмент. Такой наиболее сложный тип системы обеспечивает надежную и защищенную среду за счет некоторого ухудшения быстродействия.

В процессоре i486 имеется внутреннее устройство страничного преобразования. Оно предназначено для того, чтобы улучшить ис­пользование памяти и упростить реализацию виртуальной памяти. Если сегментация действует всегда, то страничное преобразование адресов допускается программно разрешать и запрещать.

Устройство страничного преобразования модифицирует старшие 20 бит линейного адреса с привлечением двухуровневой системы таблиц. Первый уровень представлен каталогом страниц, а второй набором таблиц страниц. Каталог страниц локализует регистр уп­равления CR3, в котором находится физический базовый адрес ка­талога, а таблицы страниц, сами являющиеся страницами, могут размещаться в памяти произвольно.

Ключевым моментом, объясняющим достоинства страничной организации памяти по сравнению с сегментацией, является фик­сированный размер страницы. Так как внешним запоминающим устройством для системы виртуальной памяти обычно служит дис­ковый накопитель, можно выбрать такой размер страницы, кото­рый согласуется с размером дискового сектора или кластера. Кроме того, в страничной памяти снимается проблема фрагментации, так как неиспользуемых областей памяти между страницами нет. При распределении памяти большому объекту необязательно выделять ему соседние страницы; он может быть размещен в произвольных страницах. Наконец, страничное преобразование невидимо для прикладного программиста. Если сегментация требует знания базы сегмента и смещения, то в страничной организации необходимо знать только один виртуальный адрес; он разделяется на поля i схемах страничного устройства управления памятью.

Однако у страничной организации памяти имеются и некоторые недостатки. Например, в ней проявляется эффект внутренней фрагментации, когда объект точно не укладывается в страницу или набор страниц. Так, при размере страницы 4 Кбайт объект с разме ром 4К + 1 байт потребует две страницы, из которых вторая прак тически «пропадает». Однако внутренняя фрагментация обычно ме нее чувствительна, чем фрагментация на уровне сегментов. Далее, сегментации обращение к глобальной или локальной дескриптор ной таблице требуется только при загрузке нового селектора в cei ментный регистр. В страничном преобразовании обращения к ката логу страниц и таблице страниц требуются в каждой операции го мяти. Именно для сокращения потерь времени на страничное nps образование в процессоре предусмотрен внутренний ассоциативный кэш-буфер. Он обеспечивает доступ к памяти 128 Кбайт 6i ПО гчплгебных обращений к таблицам.