Лекции по Вычислительным машинам, системам и сетям   

3. Тридцатидвухразрядные процессоры фирмы Intel

3.13. Битовая карта ввода-вывода

В регистре флагов (ef) имеется двухбитовое поле IOPL, задающее уровень привилегий, на котором задаче разрешены операции ввода/вывода. Например, если CPL = 3, а в поле IOPL задана двойка при попытке выполнить команду in (out или аналогичные), то будет прерывание. Связано это с тем, что операции ввода/вывода ‑ «опасные» операции и могут вывести систему из строя. Система принимает меры защиты. Скорее всего команда in все же будет выполнена, но не напрямую. Обработчик прерывания запросит ОС и она, если это допустимо, выполнит команду корректно. Сменить содержимое поля IOPL можно, только находясь на 0-м уровне привилегий.

Такое ограничение на операции ввода/вывода зачастую оказывается излишне жестким. Например, имеет смысл ограничить доступ пользователя к 0-му каналу таймера (порт 40h), на работе которого базируется служба системного времени. Однако нет никакого смысла ограничивать доступ ко 2-му каналу таймера (порт 42h), заведующему генерацией звука. Для решения этой проблемы в TSS может быть создана битовая карта ввода/вывода.

Карта содержит в себе столько бит, сколько в системе портов. Каждый бит карты соответствует одному восьмиразрядному порту. Максимально в карте может быть 64 Кбита. Если в i-м бите записан 0, то доступ к i-му порту разрешен всегда (IOPL игнорируется), если же там записана единица, то доступ к порту будет предоставлен  только если не нарушаются права, заданные полем IOPL.

Процессор может работать не только с восьмиразрядными но и 16- и 32-разрядными портами. 16-разрядному порту в карте ставятся в соответствие два смежных бита, начинающихся с четного номера. Аналогично 32-разрядному порту соответствуют четыре смежных бита, начинающихся с номера, кратного четырем.

Пример карты показан на рис. 3.20. Из примера видно, что в системе доступны 8-разрядные порты с адресами 1h, 2h, 3h, 4h и 6h, а также один 16-разрядный порт с адресом 2h. Остальные порты защищены полем IOPL.

В режиме V86 условие CPL£IOPL при выполнении команд in и out не проверяется и доступ к портам определяется битом в битовой карте ввода-вывода, т.е. последняя для задач V86 создается обязательно. Кроме того, в TSS задачи V86 непосредственно перед битовой картой ввода-вывода может располагаться битовая карта перенаправления прерываний.

Рис. 3.20



*****
© Банк лекций Siblec.ru
Формальные, технические, естественные, общественные, гуманитарные, и другие науки.