Микропроцессоры и микрокомпьютеры

Автор: Пользователь скрыл имя, 26 Сентября 2011 в 00:48, контрольная работа

Краткое описание

Механизм шлюзов для передачи управления на сегменты кода с другими уровнями привилегий

Файлы: 1 файл

Контрольная по микропроцессорам.doc

— 136.50 Кб (Скачать)

МИНИСТЕРСТВО  ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ 

Белорусский национальный технический университет 

Международный институт дистанционного образования 
 

Кафедра «Информационные  системы и технологии» 
 
 
 
 
 
 
 
 

Контрольная работа 
 

по дисциплине:  «Микропроцессоры и микрокомпьютеры» 

ВАРИАНТ № 8 
 
 
 
 

Выполнил:                                                                                             Шумель В.В.

Студент 2 курса, группы 417437/8                                                       

Специальность 53.01.02 «Автоматизированные

 системы обработки  информации» 
 
 

Адрес:

Гродненская область  и район, г. Скидель

ул. Шеремета 12/7

тел. 8868354 
 
 
 
 

Преподаватель:                                                                                      Масальская Т. И. 
 
 
 
 
 
 
 
 
 
 

Гродно 2009г.

    Теоретический вопрос. 

    Механизм  шлюзов для передачи управления на сегменты кода с другими  уровнями привилегий 

    Поскольку межсегментные переходы контролируются с использованием уровней привилегий, а потребность в передаче управления с одного уровня привилегий на другой уровень имеется, в микропроцессорах i80x86 реализован механизм шлюзов. Шлюзование позволяет организовать обращение к так называемым подчиненным сегментам кода, которые выполняют часто встречающиеся функции и должны быть доступны многим задачам, располагающимся на том же или нижележащем уровне привилегий. Часто уровни привилегий называют кольцами зашиты, поскольку это иногда помогает объяснить принцип действия самого механизма. Часто говорят, что некоторый программный модуль «исполняется в кольце защиты с номером ...».

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

    Для доступа к более привилегированному коду задача должна обратиться к нему не непосредственно (путем указания дескриптора этого кода), а через шлюз этого сегмента.

    В этом дескрипторе вместо адреса сегмента указываются селектор, позволяющий найти дескриптор искомого сегмента кода, и адрес (смещение назначения), с которого будет выполняться подчиненный сегмент, то есть полный 32-разрядный адрес. Адресовать шлюз вызова можно с помощью команды CALL или FAR CALL (межсегментный вызов процедуры). По существу, дескрипторы шлюзов вызова не являются дескрипторами сегментов, но могут располагаться среди обычных дескрипторов (в дескриптор-ных таблицах) процесса. Смещение, указываемое в команде перехода на другой сегмент (FAR CALL), игнорируется, и фактически осуществляется переход на команду, адрес которой определяется через смещение из шлюза вызова. Этим гарантируется попадание только на разрешенные точки входа в подчиненные сегменты.

    Введены следующие правила использования  шлюзов:

    - значение DPL шлюза вызова должно быть больше или равно значению текущего уровня привилегий С PL;

    - значение DPL шлюза вызова должно быть больше или равно значению поля RPL селектора шлюза;

    - значение DPL шлюза вызова должно быть больше или равно значению DPL целевого сегмента кода;

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

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

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

    Шлюзы межсегментных переходов для  вызова системных функций делают эти самые системные функции  невидимыми для программных модулей, расположенных на внешних (более низких) уровнях привилегий.

    Поскольку вызывающая программа непосредственно  адресует только шлюз вызова, реализуемые  вызываемым модулем (сегментным кодом) функции можно изменить или переместить  в адресном пространстве, не затрагивая интерфейс со шлюзом.

    Легко реализуется вызов программных  модулей с более привилегированного уровня.

    Изложенный  вкратце аппаратный механизм защиты по привилегиям оказывается довольно сложным и жестким. Однако поскольку  все практические ситуации учесть в  схемах микропроцессора невозможно, то при разработке процедур операционных систем и иного привилегированного кода следует придерживаться приведенных ниже рекомендаций, заимствованных из [8].

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

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

    Следует проверять счетчики циклов и повторений на минимальные и максимальные значения.

    Необходимо  проверить 8- и 16-разрядные параметры, передаваемые в 32-разрядных регистрах. Когда процедуре передается короткий параметр, его следует расширить знаковым разрядом или нулем для заполнения всего 32-разрядного регистра.

    Следует стремиться свести к минимуму время  работы процессора с запрещенными прерываниями. Если процедуре требуется запрещать прерывания, необходимо, чтобы вызывающая программа не могла влиять на время нахождения процессора с запрещенными прерываниями (флаг IF = 0).

    Процедура никогда не должна воспринимать как  параметр код или указатель на код.

    В операциях процессора следует явно задавать состояние флага направления DF для цепочечных команд.

    Заключительная  команда RET или RET n в процедуре должна точно соответствовать полю WC (Word Counter — счетчик слов) шлюза вызова; при этом n = 4 х WC, так как счетчик задает число двойных слов, а п соответствует байтам.

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

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

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

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

    Практические  задания. 

    Задание 1. 

    Дан виртуальный  адрес операнда 000С5АВ7:00050321h. Определить какой тип таблицы дескрипторов используется, уровень привилегий выполняемой задачи. Поле в таблице дескрипторов содержит 2D31F000h. Определить линейный адрес операнда.

    Тип таблицы  дескрипторов – локальная (LDT).

    Тип привилегий выполняемой задачи – 3.

    Линейный  адрес операнда – CAAE91h. 
 

    Задание 2. 

    При помощи логического сдвига получить в регистре BL значение 16h вместо B6h. Определить внутренний формат команды. Установить флаги.

    Машинный  формат данной команды    shr  bl, 3   =    C0EB03

    Состояние флагов:

    0F = 0

    DF = 0

    IF   = 1

    SF = 0

    ZF = 0

    AF = 1

    PF = 0

    CF = 1 

    Задание 3. 

    Вычесть из операнда А3В1h  операнд 8D95h. Будет ли осуществлен переход на метку L1  по команде Jg L1, следующей за командой вычитания? Установить флаги. Определить машинные форматы команд. 

    Переход будет осуществлён.

    Состояние флагов:

    0F = 0

    DF = 0

    IF = 1

    SF = 0

    ZF = 0

    AF = 1

    PF = 0

    CF = 0

    Машинные  форматы команд:

    Sub   ax, bx    =     2BC3

    JG     L1       =     7F0E (в данной команде 0E – смещение для метки в конкретной программе. В другой программе смещение может быть другое, потому и машинный формат команды будет выглядеть по другому) 
 

    Задание 4. 

    Написать  две программы на языке ассемблера для каждого варианта. 

    Программа Pro8_4_1.

    Ввести  массив целых чисел. Вывести на другой строке остатки от деления элементов  массива на 10, а в следующей  – исходные числа, умноженные на 2. 

    Листинг программы: 

     CSEG segment  ; даём сегменту, в котором находится программа,      ; имя CSEG

      org  100h   ; сообщаем, что код программы (как и смещения       ; внутри сегмента CSEG) необходимо отсчитывать с      ; 100h. По этому адресу в память всегда        ; загружаются программы типа *.com.

Begin:    ; метка начала программы   

      mov  ah, 9   ; будем выводить строку символов

      lea  dx, StartMessage ; с адресом в dx

      int  21h   ; вызываем прерывание DOS

                              ;

Main:     ; метка основного цикла программы

      mov  ah, 9   ; будем выводить строку символов

      lea  dx, MainMessage ; с адресом в dx

      int  21h   ; вызываем прерывание DOS

Информация о работе Микропроцессоры и микрокомпьютеры