Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦИИ КСУ 1.doc
Скачиваний:
0
Добавлен:
18.09.2019
Размер:
604.16 Кб
Скачать

Защита памяти и приоритеты программного обеспечения в защищенном режиме

Микропроцессор 80286 в защищенном режиме позволяет организовать защиту памяти и устанавливать приоритеты. В реальном режиме микропроцессора возможности защиты памяти полностью отсутствуют. Это значит, что любая программа может обратиться к любому разделу памяти (вплоть до 1 Мбайт) и выполнять любые команды, разрешенные в реальном режиме. Формирование отдельное части таблицы локальных дескрипторов (LDT) для каждой программы позволяет операционной систе­ме обеспечить полную защиту любой программы от остальных программ. Какое бы значение селектора ни сформировала про­грамма, ей все равно не удастся обратиться к дескриптору сег­мента, находящемуся в чужом разделе таблицы LDT.

Для формирования физического адреса используют, защитные механизмы, ко­торые срабатывают при любом обращении к памяти. Если какое-либо из правил защиты памяти не будет выполнено, про­цессор генерирует особую ситуацию. Это заставляет процессор выполнить специальный набор команд, который называется обработчиком особых ситуаций.

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

Генерирует и обрабатывает особые ситуации операционная система. После устранения условий, приведших к появлению особой ситуации, процессор может попы­таться вновь выполнить команду, которая послужила причи­ной появления особой ситуации.

Приведем примеры действий, вызывающих особые ситуации:

- селектор указывает на дескриптор, расположенный за границами текущей таблицы дескрипторов; смещение ока­зывается больше размера текущего сегмента памяти;

- нарушены правила приоритета;

- содержимое регистра программных сегментов CS соответствует сегменту данных;

- попытка запи­сать информацию в сегмент памяти, который предназначен только для чтения;

- поиск данных в программном сегменте, который предназначен только для команд;

- процессор пытается записать в регистр сегментов полученное с помощью селектора значение дескриптора сегмента, соответствующее отсутствующему в реальной памяти сегменту.

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

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

Поскольку GDT содержит информацию о многих сегментах операционной системы, программа может попытаться обратиться с помощью селектора к такому сегменту, который ей не нужен.

Для этой цели в микропроцессоре, i 80286 существует четыре уровня приоритета, устанавливаемые ОС или программистом. Высший приоритет имеет значение 0, низший – 3.

В операционной системе большинство прикладных про­грамм имеет приоритет 3, а ядру операционной системы уста­новлен нулевой приоритет. Некоторые программы могут обла­дать приоритетом ввода/вывода (IOPL). В ином случае в ОС они выполняются с приоритетом 2, но не могут располагать всеми средствами операционной системы, которыми бы эта программа могла пользоваться при уровне приоритета, равном 3.

В соответствии с установленными приоритетами программы могут обращаться только к тем данным, которые соответствуют их уровню приоритета или имеют более низкий приоритет. Это, с одной стороны, предохраняет операционную систему от работающих программ, а с другой стороны, позволяет операци­онной системе обратиться к любой информации более низкого приоритетного уровня. Уровень приоритета выполняемого в данный момент процесса, который определяется значением двух младших битов регистра сегментов GS (селектора), называется текущим уровнем приоритета (CPL). Уровень приоритета для данных, к которым выполняется обращение, задается двумя битами дескриптора соответствующего сегмента и называется уров­нем приоритета дескриптора (DPL).

Можно так сгенерировать операционную систему, что про­граммы сами не смогут изменить уровень своего приоритета. Задавая прикладной программе CPL, равный 3, операционная система может предохранить себя от вмешательства со стороны программ, присвоив своим сегментам данных значение CPL, равное нулю. (То же спра­ведливо и для программ, имеющих CPL = 1 или 2.)

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

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

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

К таким командам относятся:

- команды, которые позволяют процессору считывать или записывать данные в адресное про­странство ввода/вывода;

- команды, разрешающие или запрещающие обслуживать прерывания внешних устройств;

- команда LOCK—блокировка системной шины (не рассматривается).

Выполнение этих команд сопровождается проверкой уровня приоритета, так как они могут навредить системе, если будут выполняться в непривилегированной программе. Требуя явного запроса для получения IOPL, операционная система может ограничить число прикладных программ, которым разрешено обращаться к командам ввода/вывода. Для этого ей достаточ­но определить тот минимальный уровень приоритета (т. е. тот уровень, начиная с которого программа считается привилеги­рованной), который позволяет получить IOPL. В операционной системе OS/2 уровень привилегированности начинается с 2-го уровня. В API существует специальный интерфейс, через который программы могут запрашивать IOPL. Поскольку большинство программ имеет приоритетный уровень CPL=3, они не могут получить IOPL. В среде операционной системы OS/2 есть ряд ограничений на использование IOPL программами. Такие программы могут получить IOPL, если пользователь при генерации систе­мы определенным образом сформирует файл CONFIG.SYS. Однако существуют ограничения и для программ с IOPL, ра­ботающих в среде МОС. Например, программы не могут само­стоятельно обслуживать прерывания внешних устройств из сво­их программных сегментов, имеющих IOPL. Для работы с внешними устройствами, управляемыми по прерываниям, предпочтительнее использовать соответствующие драйверы этих устройств.

Команды, предназначенные для формирования и размещения в памяти таблиц дескрипторов GDT и LDT, разрешается выполнять только из приоритетного уровня CPL=0 - высшего уровня приоритета.