116 Глава 4, Особенности архитектуры микропроцессоров J80x86
жима работы процессора: режим пользователя и режим супервизора. Большин-
ство современных процессоров поддерживают по крайней мере два этих режима.
Так, в режиме супервизора программа может выполнять все действия и иметь дос-
туп по любым адресам, тогда как в пользовательском режиме должны быть ограни-
чения, с тем чтобы обнаруживать и пресекать запрещенные действия, перехватывая
их и передавая управление супервизору операционной системы. Часто в пользо-
вательском режиме запрещается выполнение команд ввода-вывода и некоторых
других, чтобы гарантировать выполнение этих операций только операционной
системой.
В микропроцессорах i80x86 режим супервизора и режим пользователя непосред-
ственно связаны с так называемыми уровнями привилегий, причем имеется не два,
а четыре уровня привилегий. Для указания уровня привилегий используются два
бита, поэтому код 0 обозначает самый высший уровень, а код 3 — самый низший.
Самый высший уровень привилегий предназначен для операционной системы
(прежде всего для ядра ОС), самый низший — для прикладных задач пользовате-
ля. Промежуточные уровни привилегий введены для большей свободы системных
программистов в организации надежных вычислений при создании операционной
системы и иного системного программного обеспечения. Предполагалось, что уро-
вень с номером (кодом) 1 может быть использован, например, для системного сер-
виса — программ обслуживания аппаратуры, драйверов, работающих с портами
ввода-вывода. Уровень привилегий с кодом 2 может быть использован для созда-
ния пользовательских интерфейсов, систем управления базами данных и прочи-
ми, то есть для реализации специальных системных функций, которые по отноше-
нию к супервизору операционной системы ведут себя как обычные приложения.
Так, например, в системе OS/2 доступны три уровня привилегий: с нулевым уров-
нем привилегий исполняется код супервизорной части операционной системы,
на втором уровне исполняются системные процедуры подсистемы ввода-вывода,
на третьем уровне исполняются прикладные задачи пользователей. Однако на прак-
тике чаще всего задействуются только два уровня — нулевой и третий. Таким об-
разом, упомянутый режим супервизора для микропроцессоров i80x86 соответствует
выполнению кода с уровнем привилегий 0, обозначаемый как PLO (Privilege Level 0 —
уровень привилегий 0). Подводя итог, можно констатировать, что именно уровень
привилегий задач определяет, какие команды в них можно использовать и какое
подмножество сегментов и/или страниц в их адресном пространстве они могут
обрабатывать.
Основными системными объектами, которыми манипулирует процессор при ра-
боте в защищенном режиме, являются дескрипторы. Именно дескрипторы сегмен-
тов содержат информацию об уровне привилегий соответствующего сегмента кода
или данных. Уровень привилегий исполняющейся задачи определяется значени-
ем поля привилегий, находящегося в дескрипторе ее текущего кодового сегмента.
Напомним (см. рис. 4.3), что в байте прав доступа каждого дескриптора сегмента
имеется поле DPL (Descriptor Privilege Level — уровень привилегий сегмента, оп-
ределяемый его дескриптором), которое и определяет уровень привилегий связан-
ного с ним сегмента. Таким образом, поле DPL текущего сегмента кода становится
полем текущего уровня привилегий (Current Privilege Level, CPL), илнуровня при-