Встроенные средства защиты. Принципы модульности и перемещаемости. Проверка привилегированности сегмента, страница 21

31                                          0

база БКВВ                                     064h

 200h                                    Т

 


Аппаратная часть TSS

                                                     000h                           

Задача, имеющая сегмент TSS с такой картой, может обращаться к портам 8, 9, 10, 11, 12.  Эти адреса соответствуют портам для передачи байт. При передаче слов можно обращаться к портам 8 и 10, а при передаче двойных слов - к порту 8.

Процедуры, которые обращаются к дескриптору TSS, вызывают переключение задач, если  CPL £ DPLTSS.  В большинстве систем поле DPL дескрипторов TSS содержит 00В, при этом обеспечивается переключение задач только привилегированными командами ОС.

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

Как и в 16-разрядном процессоре 80286, инициализация сегмента 32-разрядного TSS осуществляется с помощью алиасных сегментов данных с разрешенными операциями записи и считывания.

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

Инициализация сегмента TSS

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

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

При первом запуске задачи ее выполнение зависит от значений инициализации.  Регистры CS и (Е)IP должны адресовать первую команду, а сегментные регистры данных должны содержать селекторы сегментов данных задачи. Если первый запуск не требует конкретной инициализации, регистры блока РОН обычно содержат нули. При необходимости в TSS дополнительно инициализируются поля SSi : (Е)SPi,  LDTR.

Выше отмечено, что сегмент состояния задачи можно использовать только внутри кольца, определяемого его уровнем DPL, или кольца с меньшим номером, т.е. более привилегированного. Процедура недостаточно привилегированная для использования дескриптора TSS в сегменте GDT может вызвать задачу в более привилегированном кольце только через шлюз задачи.

Дескриптор шлюза задачи обеспечивает косвенные защищенные ссылки к задаче. DPL шлюза задачи управляет доступом к дескриптору TSS для переключения задачи. Процедура не может выбрать дескриптор шлюза задачи, если RPL селектора, выбирающего шлюз, или CPL процедуры больше DPL шлюза задачи. Благодаря этому предотвращается переключение на другую задачу процедурой менее привилегированной, чем сама задача.

Формат шлюза задачи представлен на рис.

16 бит         8 бит             8 бит            16 бит            16 бит  

 


0        P DPL 0 0101     резерв      селектор            резерв доступ

Рис.    Дескриптор шлюза задачи