Файл: 12. Управление внешними устройствами.pdf

Добавлен: 20.10.2018

Просмотров: 925

Скачиваний: 5

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

12. Управление внешними устройствами 

Подсистема  ввода/вывода  данных  –  это  комплекс  технических  и 

программных  средств,  используемых  для  взаимодействия  ВС  с  внешним 

миром.  За  время  существования  вычислительной  техники  было  создано 

множество разнообразных устройств ввода/вывода со своими параметрами и 

характеристиками. Более того, устройство одного и того же типа (например, 

лазерный  принтер),  как  правило,  выпускается  в  разных  модификациях. 

Совершенно очевидно, что прикладным программам не обязательно знать о 

конкретном  используемом  виде  устройства,  поэтому  важнейшая  задача 

подсистемы  ввода/вывода  –  это  экранирование  приложений  от  технических 

особенностей используемых устройств.  

По этой причине подсистема ввода/вывода в современных ОС строится по 

многоуровневому принципу: 

 

нижний (аппаратный) слой включает два уровня: 

сами устройства ввода/вывода; 

электронные схемы для управления этими устройствами 

(контроллеры); 

 

верхний (программный) слой включает следующие уровни: 

специализированные программы-драйверы для 

непосредственного управления устройствами; 

независимые от устройств управляющие программы ядра 

системы (диспетчер ввода/вывода); 

программное обеспечение ввода/вывода на уровне пользователя, 

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

ввода/вывода. 

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

 


background image

 

 

К  основным  устройствам  ввода/вывода  относятся:  клавиатура,  мышь, 

различные манипуляторы, монитор, принтер, сканер, цифровой фотоаппарат, 

видеокамера,  модем,  диски  разных  типов,  сетевые  платы  и  т.д.  Все  они 

имеют  разные  характеристики  и  могут  классифицироваться  по  разным 

признакам. 

Прежде  всего,  устройства  ввода/вывода  достаточно  условно  можно 

разбить  на  две  большие  группы  –  символьные  и  блочные.  Символьные 

устройства обрабатывают последовательность (поток) байтов строго друг за 

другом.  Блочные  устройства  позволяют  группировать  соседние  байты  в 

блоки с возможностью адресации каждого блока в отдельности, независимо 

от других блоков. Типичный пример – дисковые накопители.  

Другой очевидной классификацией устройств является их специализация 

– одни устройства предназначены только для ввода данных, другие – только 

для вывода, третьи могут выполнять оба действия.  

Непосредственное  управление  устройствами  выполняют  электронные 

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

приложение 

приложение 

приложение 

программное обеспечение ввода/вывода на уровне пользователя 

управляющие программы ввода/вывода  

драйвер 

устройства 

драйвер 

устройства 

драйвер 

устройства 

контроллер 

устройства 

контроллер 

устройства 

контроллер 

устройства 

устройство 

ввода/вывода 

устройство 

ввода/вывода 

устройство 

ввода/вывода 


background image

общих  для  всех  контроллеров.  Важнейшее  свойство  контроллеров  –  это 

наличие  специальных  регистров,  через  которые  организуется  все  общение 

операционной  системы  с  устройствами.  Как  правило,  регистры 

специализируются в зависимости от их назначения следующим образом:  

 

регистр  состояния  содержит  биты,  определяющие  текущее  состояние 

устройства (свободно/занято, готово к выполнению команды, успешное 

или  ошибочное  завершение  команды);  биты  регистра  состояния 

формируются самим устройством и могут лишь читаться программами 

ОС; 

 

управляющий регистр содержит очередную команду, которую должно 

выполнить  устройство  (занести  байт(ы)  в  регистр  данных,  взять 

байт(ы) из регистра данных и обработать его); 

 

регистр  входных  данных,  в  который  устройство  помещает  очередной 

байт  (или  несколько  байтов)  данных  и  откуда  этот  байт  (байты) 

считывается системой; 

 

регистр  выходных  данных,  в  который  система  помещает  очередной 

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

Разрядность  регистров  определяется  разрядностью  соответствующей 

шины.  Если  для  первых  двух  регистров  достаточно  одного-двух  байтов,  то 

данные могут передаваться группами по 4 байта. 

 

 

 

 

регистр 

состояния 

регистр 

управления 

регистр 

входных 

данных 

регистр 

выходных 

данных 

 

 

 

подсистема ввода/вывода ОС  

устройство ввода/вывода  


background image

Каждому  регистру  каждого  установленного  в  системе  устройства 

присваивается  порядковый  номер-адрес,  для  обозначения  которого 

используется термин “порт ввода/вывода”. Набор используемых в системе 

портов  образует  адресное  пространство  ввода/вывода.  Это  адресное 

пространство  может  либо  занимать  часть  адресов  основного  адресного 

пространства,  либо  существовать  отдельно  от  него.  Часто  используется 

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

реализуются  как  самостоятельное  адресное  пространство,  а  порты  для 

непосредственного обмена данными занимают часть основной памяти. 

Для  взаимодействия  с  портами  ввода/вывода  в  систему  команд  часто 

вводятся специальные команды ввода/вывода: 

 

записать один-два байта в порт с заданным номером (команда OUT); 

 

прочитать один-два байта из порта с заданным номером (команда IN). 

Эти  команды  относятся  к  группе  привилегированных,  т.е.  они  могут 

выполняться  только  в  режиме  ядра.  Попытка  выполнения  этих  команд 

внутри  прикладной  программы,  работающей  в  пользовательском  режиме, 

приводит к аварийному прерыванию выполнения программы.  Такой подход 

позволяет  изолировать  приложения  от  непосредственного  общения  с 

устройствами  ввода/вывода.  Только  программы  ядра  системы  имеют  право 

напрямую общаться с устройствами, тогда как приложения для данных целей 

должны  использовать  специальные  системные  вызовы.  Это особенно  важно 

для  многозадачных  ОС,  где  централизованное  управление  всеми  ресурсами 

(к  которым  относятся  и  устройства  ввода/вывода)  является  чрезвычайно 

важной задачей. 

 

Программирование 

операций 

ввода/вывода 

на 

уровне 

команд 

представляет  собой  достаточно  сложную  задачу,  решение  которой  требует 

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

ввода/вывода  включается  специальный  уровень  программ-драйверов,  как 

правило,  создаваемых  фирмами 

− 

разработчиками  аппаратуры.  Набор 


background image

драйверов – это важнейшая часть подсистемы ввода/вывода и операционной 

системы  в  целом.  Для  устранения  возможного  разнобоя  при  написании 

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

процесс  взаимодействия  драйверов  как  с  ядром  системы,  так  и  с 

контроллерами  устройств.  Например,  для  написания  драйверов  для  ОС 

семейства Windows корпорация Microsoft разработала специальный стандарт 

Windows  Driver  Model  (WDM).  Для  облегчения  написания  драйверов  в 

соответствии  с  этим  стандартом  разработан  целый  ряд  программных 

инструментов (DDK – Driver Development Kit).  

В  целом,  каждый  драйвер  должен  предоставлять  четко  определенный 

набор  функций,  которые  могут  вызываться  программами  более  высокого 

уровня.  Типичный  алгоритм  взаимодействия  драйвера  с  устройством  и  с 

вышележащим программным уровнем включает следующие шаги: 

1.  Драйвер  получает  от  управляющего  уровня  команду  на  выполнение 

операции ввода/вывода. 

2.  Драйвер  записывает  в  управляющий  порт  контроллера  сигнал  “начать 

операцию”. 

3.  В  ответ  на  это  устройство  устанавливает  в  регистре  состояния 

соответствующий признак возможности выполнения операции. 

4.  Драйвер  проверяет  значение  этого  признака  и  в  зависимости  от 

результата либо продолжает процесс взаимодействия, либо прекращает 

его с выдачей сообщения на более высокий уровень. 

5.  Если операция возможна, драйвер записывает в управляющий порт код 

операции. 

6.  Если  выполняется  операция  вывода,  то  драйвер  в  порт  выходных 

данных записывает и сам выводимый элемент данных. 

7.  Когда  устройство  закончит обработку  элемента данных, то  оно  в порт 

состояния помещает признак успешного завершения, а при вводе еще и 

заносит во входной порт элемент данных.