 |
печения иллюзию, что физическая память имеет размер очень
большой области обмена на диске. Ниже подробно описывается
этот механизм.
Когда в процессе трансляции логического адреса процессор
получает линейный адрес, который ссылается на элемент стра-
ничной таблицы, чей бит присутствия сброшен, в процессоре
возникает особая ситуация, называемая, условно, страничной
ошибкой. Особые ситуации рассматриваются ниже в этом разделе,
но основным следствием этой ошибки является вызов процессором
процедуры операционной системы, называемой обработчиком стра-
ничной ошибки. При входе в обработчик страничной ошибки
Uправляющий регистр 2 содержит линейный адрес, связанный с
отсутствующей страницей. По этому адресу обработчик странич-
ной ошибки может найти относящийся к нему элемент страничной
таблицы путем трансляции линейного адреса, как это делает
процессор. Отметим, что все остальные биты, за исключением
бита присутствия в элементе страничной таблицы, определяются
пользователем; они представляют для операционной системы
удобное место для запоминания дискового адреса отсутствующей
страницы. Определив дисковый адрес отсутствующей страницы,
обработчик страничной ошибки может найти свободный страничный
кадр и передать страницу с диска в этот кадр. Затем обработ-
чик старничной ошибки изменяет адресное поле в элементе стра-
ничной таблицы и бит присутствия, после чего возвращает уп-
равление программе, прерванной страничной ошибкой. После это-
го процессор автоматически заново выбирает команду, в которой
произошла страничная ошибка, и результат будет таким же, как
если бы страница ранее находилась в памяти, когда команда на-
чала исполнятьяся в первый раз.
Другие поля в элементе старничной таблицы процессора
80786 помогают операционной системе эффективно производить
действия, связанные с управлением виртуальной памятью. Кроме
загрузки старниц по запросам операционная система должна под-
держивать набор свободных страничных кадров, которые могут
быть распределены обработчиком страничных ошибок. Для увели-
чения набора свободных старничных кадров операционная система
должна знать, какой кадр освободить. Прежде чем освободить
кадр, операционная система должна записать эту страницу на
диск, если страница была модифицирована с тех пор, когда она
была загружена. Для того, чтобы помочь операционной системе в
этой длительности, архитектура 80786 имеет бит доступа и бит
изменения в каждом элементе страничной таблицы, процессор из-
меняет эти биты автоматически, для всех имеющихся в памяти
страниц 80786 устанавливает бит доступа всегда, когда проис-
ходит чтение или запись в данной странице, иустанавливает бит
изменения, когда происходит запись в эту страницу. Путем пе-
риодического просмотра и сброса битов доступа операционная
система может определить страницы, которые давно не использо-
вались. Кадры, содержащие такие страницы, являются хорошими
кандидатами на освобождение, поскольку стрсницы, которые дав-
но не использовались, вряд ли будут использованы в ближайшем
будущем. Когда операционная система выбрала страницу для ос-
вобождения ее страничного кадра, страница не должна записы-
ваться на диск за исключением случая, когда процессор устано-
вил ее бит изменения.
Каждый элемент старничной таблицы также содержит 3-х
битное поле, которое операционная система может использовать
по своему усмотрению. Операционные системы обычно используют
это поле для маркировки страниц специальными знаками такими
как, например, "закрыто для ввода/вывода".
3.4. Защита
Процессор 80786 обеспечивает несколько мрханизмов защи-
ты, которое операционная система может селективно выбирать
для своих нужд. Одна из форм защиты - отделение пространств
адресов задач при помощи таблиц дескрипторов сегментов и
старничных таблиц, обсуждалась выше. Это разделение эффектив-
но предотвращает налоложение кодов и данных различных прик-
ладных задач. В дополнение к изоляции задач друг от друга
80386 обеспечивает возможность защиты операционной системы от
прикладных задач, защиту одной части операционной системы от
других частей и защиту задач от некоторых их собственных оши-
бок. Кроме того, что система защиты 80386 делает операционные
системы более надежными, она может упростить процесс отладки,
используя прерывания (ловушки) по ошибкам для конкретных за-
дач. Все свойства защиты процессора 80386 реализованы внутри
кристалла, поэтому действия по проверке защиты не вляют на
производительность процессора.
3.4.1. Привилегии
Многие из свойств защиты процессора 80386 базируются на
понятии иерархии привилегий. В любой момент привилегии задачи
эквивалентна уровню привилегий исполняемого кодового сегмен-
та. В каждом дескрипторе сегмента имеется поле, которое опре-
деляет уровень привилегии связанного с ним сегмента, поле мо-
жет принимать 0 - это наиболее привилегированный уровень, а
уровень привелегии 3 - наименее привилегированный.
На рис.3-8 Показано, как уровни привилегии процессора
80386 могут быть использованы для установки различных страте-
гий защиты. Система без защиты может быть реализована путем
простого помещения всех процедур в сегмент (или сегменты),
чей уровень привилегии равен 0. Традиционное разделение на
супервизора и пользователя может быть реализовано путем поме-
щения прикладной задачи в сегмент с уровнем привилегии 3, а
процедур супервизора - в сегмент чей уровень привилегий равен
0. Операционная система может также использовать уровни при-
вилегии 1 и 2, если это необходимо. Например, наиболее крити-
ческие и наиболее изменяемые процедуры операционной системы
(иногда называемые ядром операционной системы) могут иметь
уровень привилегий 0. Уровень привилегий 0. Уровень привиле-
гий 1 может быть использован для функций операционной системы
, которые являются менее критическими и более часто изменяют-
ся или расширяются, например, для драйверов устройств. Уро-
вень 2 может быть использован для использования производите-
лями оригинального обурудования, такие производители ориги-
нального оборудования должны затем присваивать уровень приви-
легий 2 своим программам, оставляя уровень привилегий 3 для
конечных пользователей. В этом случае программы производите-
лей оригинального оборудования защищены от программ конечных
пользователей. Операционная система защищена как от программ
производителей оригинального оборудования и программ конечных
пользователей, а ядро операционной системы защищено от всех
остальных программ, включая ту часть операционной системы,
которая является предметом частных изменений.
Как будет показано ниже, уровень привилегий задачи опре-
деляет, какие команды можно использовать и какое подмножество
сегментов и/или страниц в их адресном пространстве они могут
обрабатывать (исполнять). Процессор осуществляет проверку на
допустимость работы согласно уровню привилегии задачи и уров-
ню привилегии сегментов или страниц, которые являются операн-
дами команд. Любая попытка задачи использовать более привиле-
гированный сегмент или страницу приводит к остановке работы
процессора над командой и возникновению особой ситуации защи-
ты. (Особые ситуации описываются в данном разделе ниже как
системные вызовы, которые обеспечивают управляемый путь для
вызова менее привилегированными процедурами более привилеги-
рованных процедур).
3.4.2. Привилегированные команды
В дополнение к тому, какие сегменты и страницы могут
быть использованы, уровень прувулегии задачи определяет ко-
манды, которые задачей могут быть использованы. Процессор
80386 имеет подмножество команд, исполнение которых должно
быть тщательно проанализировано для того, чтобы предотвратить
серьезные разрушения системы. Все команды, которые загружают
новые значения в системные регистры, являются примерами при-
вилегированных команд. Только задача, работающая на уровне
привилегий 0, может исполнять привилегированные команды.
3.4.3. Защита сегментов
Дескрипторы в регистрах LDT и GDT - задач определяют ло-
гическое адресное пространство задачи. Сегменты, определенные
в этих таблицах, теоретически адресуемы, поскольку таблицы
дескрипторов обеспечивают информацией, необходимой для вычис-
ления адреса сегмента. Однако адресуемый сегмент не может
быть доступен для некоторых операций, из-за дополнительных
проверок защиты, осуществляемых процессором 80386. Процессор
проверяет каждое обращение к сегменту (сгенерированное при
исполнении команды или при выборке команды), чтобы опреде-
лить, что обращение согласуется с атрубутами защиты сегмента,
как это описано ниже.
Привилегия. Чтобы получить доступ к сегменту, программа
должна иметь, по крайней мере, такую же привилегию как сег-
мент. Например, программа, работающая на уровне 3, может об-
ращаться только к тем сегментам, чей уровень привилегий также
равен 3, в то время, как программа, работающая на уровне 0,
может обращаться ко всем сегментам в своем адресном простран-
стве.
Граница. Обращение к сегменту должно находиться внутри
границ сегмента. Границы сегмента позволяют процессору обна-
руживать программные ошибки, такие как переполнение стека,
неверные указатели и индексы массивов, а также неправильные
адреса вызовов и переходов. В случаях, когда операционная
система может определить, что обращение за границы сегмента
не является ошибкой (переполнение стека является примером для
некоторых систем), операционная система может расширить сег-
мент (например, путем добавления старницы к нему) и начать
команду с начала.
Тип. Каждый дескриптор содержит поле типа, которое про-
цессор проверяет на соответствие команде, которую он исполня-
ет. Обычные сегменты имеют тип команд или данных , позволяя
процессору, например, обнаружить попытку записи в существую-
щий код, например, типы сегментов, непосредственно работающие
в прикладных программах - это команды и данные. Системные
дескрипторы также имеют тип, так что процессор может, напри-
мер, проверить при переключении задач, что сегмент, указанный
в команде JUMP TSS, действительно является сегментом сосотоя-
ния задачи.
Права. Дескриптор сегмента может быть помечен правами,
ограничивающими операции, которые можно производить со свя-
занным с ним сегментом. Сегменты команд могут быть помечены
как исполняемый или читаемый. Сегменты данных могут быть по-
мечены как доступные толко для чтения или как доступные для
чтения и записи.
Все проверки, описанные выше, зависят от целостности
дескрипторв. Если задача, исполняющая прикладную программу,
могла бы изменять дескриптор, проверка ничего бы не гаранти-
ровала. По этой причине операционная система может ограничить
доступ к таблицам дескрипторов только для программ с уровнем
привилегии 0.
Заметим, что в случае разделяемых сегментов различные
дескрипторы для одного и того же сегмента (т.е. синонимы) мо-
гут иметь различные атрибуты защиты, позволяя, например, од-
ной задаче читать и писать сегмент, в то время, как другой
только читать его. Синонимы также позволяют операционной сис-
теме преодолеть механизм защиты, если это необходимо, напри-
|