Защищённый режим.

Глава 2. Уровни привилегий.

        Защищённый режим (protected mode или P-Mode) обладает некоторыми особенностями, о которых нужно знать прежде, чем вы будете его использовать.
        При работе в защищённом режиме процессор следит за правильным выполнением текущей программой ряда условий, например, программа не должна обращаться по определённым адресам портов ввода/вывода, запрещённых для неё. Если всё же происходит нарушение какого-либо условия, то процессор генерирует специальный тип прерывания, так называемое исключение, снабжает это прерывание информацией, описывающей где произошло нарушение и как оно произошло. Далее, специальная процедура обрабатывает это прерывание и решает, что дальше делать с "виноватой" программой (например, прекратить её выполнение).
        Определением условий должна заниматься операционная система. Когда программа переводит процессор в защищённый режим, то ей, как говорится, "можно всё". Сразу после входа в защищённый режим процессор позволяет программе устанавливать свои условия для самой себя и для других программ. Для того, чтобы эти условия не могла переопределить другая программа, в процессоре введена система уровней привилегий. Благодаря этому, операционная система, например, может разрешить работу с дисковыми накопителями только для себя и тогда вирусы будут бессильны - они не смогут обратиться к дискам через порты ввода/вывода (разве что, только через "дыры" в самой операционной системе).
        Основой защищённого режима являются уровни привилегий. Уровень привилегий - это степень использования ресурсов процессора. Всего таких уровней четыре и они имеют номера от 0 до 3. Уровень номер 0 - самый привелигерованный. Когда программа работает на этом уровне привилегий, ей "можно всё". Уровень 1 - менее привелигерованный и запреты, установленные на уровне 0 действуют для уровня 1. Уровень 2 - ещё менее привелигерованный, а 3-й - имеет самый низкий приоритет. Таким образом, оптимальная схема работы программ по уровням привилегий будет следующая:

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

        Уровни привилегий 1, 2 и 3 подчиняются условиям, установленным на уровне 0, поэтому функционально эти четыре уровня можно разделить на 2 группы: уровень привилегий системы (0) и уровни пользователя (1, 2 и 3). На первый взгляд кажется, что проще было бы реализовать всего два уровня привилегий - системный и пользовательский, но со временем вы обнаружите, что четыре уровня привилегий - это очень удобно и гораздо лучше двух.
        Программы и данные ограничены внутри своих уровней привилегий. Например, если программа работает на уровне привилегий 2, то она не сможет передать управление процедуре, работающей на любом другом уровне (0, 1 и 3), также, она не сможет обратиться к данным, определённым для использования на других уровнях привилегий. Процессор не допустит этого и в случае нарушений привилегий при доступе к данным и коду сгенерирует исключение общей защиты (general-protection exception) и передаст управление операционной системе, чтобы она приняла меры к нарушителю.
        Сам по себе уровень привилегий ещё ничего не значит, его нельзя "установить в процессоре". Уровень привилегий применяется как одно их свойств при описании различных объектов, например, сегмента кода и действует при работе только с этим объектом.
        Уровень привилегий обозначается как "PL" (от Privilege Level) и применяется в сочетаниях, например, IOPL - Input/Output Privilege Level - уровень привилегий ввода/вывода.

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

Следующая глава Оглавление Вопросы? Замечания? Пишите: sasm@narod.ru

  Copyright © Александр Семенко.
TopList

Hosted by uCoz