Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Взаимодействие через пространство ввода-вывода



Для обращения программы к пространству ввода-вывода предназначены всего четыре инструкции процессора: IN (ввод из порта в регистр процессора), OUT (вывод в порт из регистра процессора), INS (ввод из порта в элемент строки па­мяти) и OUTS (вывод элемента из строки памяти в порт). Последние две ин­струкции, появившиеся с процессором 80286, могут использоваться с префик­сом повтора REP, что обеспечивает быструю пересылку блоков данных между портом и памятью. Как уже отмечалось, обмен данными с портами, при кото­ром применяют строковые инструкции ввода-вывода, получил название РЮ (Programmed Input/Output — программируемый ввод-вывод).

Разрядность слова, передаваемого за одну инструкцию ввода-вывода, может со­ставлять 8, 16 или 32 бита. В зависимости от выровненности адреса по границе слова и разрядности данных используемой шины это слово может передаваться за один или несколько циклов шины с указанием соответствующего нарастаю­щего адреса в каждом цикле обращения к памяти. Инструкции ввода-вывода порождают шинные циклы обмена, в которых вырабатываются сигналы чтения из порта и записи в порт. Во избежание недоразумений и для экономии шин­ных циклов рекомендуется выравнивать адреса 16-битных портов по границе слова, а 32-битных — по границе двойного слова. Обращение по выровненным адресам выполняется за один цикл системной шины. Обращение по невыров­ненным адресам выполняется за несколько циклов, причем однозначная после­довательность адресов обращений, которая зависит от модели процессора, не гарантируется. Так, одна инструкция вывода слова по нечетному адресу приве­дет к генерации двух смежных шинных циклов записи. При программировании обращений следует учитывать специфику устройств ввода-вывода. Если, на­пример, устройство допускает только 16-разрядные обращения, то старший байт его регистров будет доступен лишь при вводе-выводе слова по четному ад­ресу.

В реальном режиме процессора программе доступно все пространство адресов ввода-вывода. В защищенном режиме инструкции ввода-вывода являются при­вилегированными: возможность их исполнения зависит от текущего уровня привилегий. В защищенном режиме 32-разрядных процессоров (частным слу­чаем которого является и виртуальный режим V86) имеется возможность про­граммно ограничить доступное пространство ввода-вывода, определяя его мак­симальный размер (начиная с нулевого адреса и в пределах 64 Кбайт), а внутри разрешенной области доступ может быть разрешен или запрещен для каждого конкретного адреса. Размер области и карта разрешенных портов ввода-вывода (Ю permission bitmap) задаются операционной системой в дескрипторе сегмен­та состояния задачи (Task State Segment, TSS). Карта разрешений влияет на ис­полнение инструкций ввода-вывода в зависимости от соотношения текущего и требуемого уровней привилегий ввода-вывода. При недостаточных привиле­гиях обращение по неразрешенному адресу вызывает исключение процессора, а поведение его обработчика определяется операционной системой. Возможно снятие задачи-нарушителя (знаменитое сообщение «Приложение... выполнило недопустимую операцию и будет закрыто»). Возможен и другой вариант, когда по обращении к порту монитор операционной системы выполняет некоторые действия, создавая для программы иллюзию реальной операции ввода-вывода. Таким образом, виртуальная машина по операциям ввода-вывода может об­щаться с виртуальными устройствами. Программа, выполняемая на нулевом уровне привилегий, безусловно может обращаться ко всем портам непосредст­венно.

Наиболее корректный (с точки зрения организации ОС) способ общения при­ложения с портами устройства требует помещения инструкций ввода-вывода в драйвер устройства, работающий на уровне привилегий ОС (на нулевом уровне). Обращение к портам непосредственно из приложения возможно, если в карте разрешения портов бит для данного порта сброшен. Если бит установ­лен, то обращение к порту вызывает исключение защиты, которое обрабатывает диспетчер виртуальной машины (Virtual Machine Manager, VMM). В этом слу­чае VMM вызывает процедуру, назначенную для данного порта операционной системой. Это может быть либо специальная процедура виртуального драйвера, установленного для данного порта, либо процедура, заданная по умолчанию. В первом случае ввод-вывод для данного порта доступен приложению только через виртуальный драйвер, вызов которого каждый раз будет приводить к из­держкам переключения задач и смены уровня привилегий (от приложения на уровне 3 к драйверу нулевого уровня). Однако с точки зрения идеологии мно­гозадачности и защиты это — естественное решение, обеспечивающее полную виртуализацию ввода-вывода. Процедура, заданная по умолчанию (в Windows 9х), открывает порт для данного приложения (сбрасывает бит в карте разреше­ний ввода-вывода) и выполняет собственно инструкцию ввода-вывода, возвра­щая приложению результат ввода. Таким образом, приложению Windows 9x станут доступными любые порты, для которых не установлен виртуальный драйвер. Правда, первое обращение к каждому порту произойдет медленно (че­рез исключение), но последующие будут выполняться быстро. Если для взаи­модействия с устройством задержка первого обращения критична, то при ини­циализации приложения можно выполнить «безобидные» обращения по адре­сам всех требуемых портов, чтобы открыть их для дальнейшей непосредствен­ной работы (без издержек).

Заметим, что ОС Windows 9x не особо заботится о виртуализации и защите ввода-вывода: например, в Windows 9x из окна DOS можно обращаться к лю­бым портам, даже к портам устройств, занятых операционной системой. В Windows NT/XP/200x защита ввода-вывода организована строже.

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.