December 17 2017 17:38:45
Навигация
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации .

Забыли пароль?
Запросите новый здесь.
использование БКВВ
ФОРМАТЫ ПРЕДСТАВЛЕНИЯ ДАННЫХ И ВЫПОЛНЕНИЕ ОПЕРАЦИЙ

Бит ловушки Т в сегменте TSS вызывает при Т = 1 исключение типа #DB («исключение отладки») при переключении на данную задачу. Это исключение используется при отладке программного обеспечения.

Два последних байта в обязательной части TSS определяют относительный адрес начала битовой карты ввода/вывода (БКВВ) в TSS. Каждый бит БКВВ соответствует однобайтовому порту ввода/вывода. Так как процессор обеспечивает обслуживание до 65536 портов, то полная БКВВ, определяющая возможность их обслуживания, будет представлять строку длиной 64 Кбит, занимающую 8 Кбайт памяти. Поэтому относительный адрес БКВВ должен быть меньше или равен DFFFh. При записи в бите БКВВ нуля разрешается обращение к порту ввода-вывода, адрес (номер) которого соответствует порядковому номеру данного бита в карте ввода-вывода. Если значение некоторого бита БКВВ равно единице, то при поступлении команд обращения к соответствующему порту процессор реализует исключе­ние типа #GP («нарушение защиты»).

Таким образом, использование БКВВ вводит для команд ввода-вывода дополнительный вид защиты (помимо выполнения условия CPL<IOPL), который устанавливается для каждого порта индивидуально. Эту защиту можно обеспечить как для всех, так и для части портов. Если конец БКВВ выходит за границу сегмента, определенную его размером, который задается дескриптором TSS, то доступность соответствующих портов с высокими номерами не зависит от БКВВ. При этом БКВВ контролирует доступ только к портам с меньшими номерами, для которых биты БКВВ вошли в заданную дескриптором границу сегмента. Если значение размера сегмента, заданное дескриптором TSS, меньше указанного в TSS относительного адреса БКВВ, то эта карта не влияет на доступность портов и ее можно полностью исключить.

Перед БКВВ располагаются 32 байта (256 бит) таблицы, определяющей способ обслуживания программных прерываний, реализуемых при поступлении команды INTn в режиме виртуального процессора 8086. Каждому из 256 значений п в команде INTn соответствует бит с таким же номером в данной таблице. Если этот бит имеет значение «1», то при поступлении соответствующей команды INTn вызывается подпрограмма обслуживания в защищенном режиме, обращение к которой производится с помощью таблицы прерываний IDТ. Если бит в этой таблице имеет значение «0», то выполняется обращение к подпрограмме обслуживания, которая должна содержаться в составе выполняемой программы, написанной для процессора 8086 (вектор соответствующей подпрограммы обслуживания должен размещаться в таблице, расположенной в начале адресуемой памяти, адреса 0000h - 03FFh).

За последним байтом БКВВ в TSS должен следовать заключительный байт, содержащий единицу во всех разрядах (FFh). Адрес этого байта должен соответствовать границе сегмента, определенной дескриптором TSS.

Объем дополнительной части TSS зависит от размеров применяемой БКВВ и количества служебной информации, используемой операционной системой. Этот объем определяется характером решаемой задачи. Во многих случаях дополнительная часть TSS вообще отсутствует.

Обращение к TSS осуществляется путем загрузки в регистр TR селектора, который адресует размещенный в GDT дескриптор TSS соответствующей задачи (рис. 2.52). Содержимое регистра TR можно загружать или заносить в память командами LTR, STR. Однако обычно команда LTR используется только при инициализации системы для установки начального содержимого TR. В процессе дальнейшей работы этот регистр загружается процессором при выполнении команд JMP, CALL, IRET, переключающих задачу.

Дескриптор TSS должен храниться только в таблице GDT. Поэтому обращение к дескриптору TSS с помощью селектора, имеющего бит TI = 1 (индикатор таблицы LDT), вызовет исключение типа #TS («ошибка обращения к TSS»). При загрузке селектора дескриптора TSS в какой-либо из регистров сегментов (CS, DS, SS, ES, FS, GS) возникает исключение того же типа.

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

Формат дескриптора TSS приведен на рис. 2.52. Назначение битов присутствия Р и дробности G такое же, как в дескрипторах сегментов. Поле TYPE (см. рис. 2.43, в) в байте доступа определяет тип задачи (см. табл. 2.59): код 01В1 указывает, что данная задача запрограммирована для решения на 16-разрядном процессоре 80286, код 11В1 -что задача предназначена для 32-разрядных процессоров 386,486, Pentium, P6. Бит занятости В в этом байте устанавливается в состояние В = 1 при переключении на данную задачу. Указанная в дескрипторе граница сегмента TSS должна иметь значение не менее чем 67h, что соответствуют минимальному объему его обязательной части 104 байт. В противном случае при обращении к TSS реализуется исключение типа #TS. Неиспользуемый бит AVL в байте 6 дескриптора может быть использован операционной системой и установлен ею в любое состояние.

Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, авторизуйтесьили зарегистрируйтесь для голосования.

Нет данных для оценки.

Время загрузки: 0.06 секунд 2,299,309 уникальных посетителей