- •Реальный и защищенный режим работы мп.
- •Характеристики api /os/2
- •Реальная и виртуальная память большого объема.
- •Определение физического адреса, формируемого I 80286, в реальном режиме
- •Определение физического адреса в защищенном режиме
- •Защита памяти и приоритеты программного обеспечения в защищенном режиме
- •Обработка прерываний
- •Структура пк системы.
- •В состав системного блока входят:
- •Системная шина пк.
- •Главная шина fsb
- •Шина isa
- •Шина vlb
- •Шины pci
- •Интерфейс agp
- •Мультиядерная технология amd
- •Память системы
- •Озу системы
- •Интерфейс кпдп с системной шиной данных
Защита памяти и приоритеты программного обеспечения в защищенном режиме
Микропроцессор 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 - высшего уровня приоритета.