Подсистемы ввода-вывода
Управление вводом-выводом. Блочные и символьные операции. Синхронные и асинхронные операции. Отображение ввода-
вывода на адресное пространство памяти. Прямой доступ к памяти. Кэширование операций. Упреждающее чтение. От-
ложенная запись. Программное обеспечение ввода-вывода. Драйверы UNIX. Псевдоустройства. Переключатели устройств.
Файл устройства. Драйверы Windows. Процесс загрузки драйверов. Дерево устройств. Дисциплины оптимизации запросов
чтения-записи
Система вв, способная объединить в одной модели широкий набор устройств, должна быть универсальной. Кроме того, не-
обходимо обеспечить доступ к устройствам вв множества параллельных задач. Используется следующий принцип: любые
операции по управлению вв объявляются привилегированными и могут выполняться только кодом самой ОС. За управление
вв отвечает компонент ОС, называемый супервизором ОС. Он выполняет следующие действия:
- получает запросы на вв от прикладных задач и модулей ОС., проверяет их на корректность, и или обрабатывает их даль-
ше или выдает соответствующее сообщение
- вызывает распределители каналов и контроллеров, планирует вв, помещает задачи в очередь
- инициирует операции вв, передавая управление соответствующим драйверам, если при этом используются прерывания,
предоставляет процессор диспетчеру задач для смены контекста
- при получении сигналов прерываний идентифицирует их и передает управление соответствующему обработчику
- выполняет передачу сообщений об ошибках, если они произошли в процессе операции вв
- передает сообщения о завершении операции вв ожидающему процессу
Уровни вв можно представить следующей иерархией: 1. ПО вв уровня пользователя. Функции: обращение к вызовам вв,
форматированный вв, спулинг. 2. Устройство-независимое ПО ОС. Ф: именование, защита, блокирование, буферизация, на-
значение увв. 3. Драйверы устройств. Установка регистров устройства, завершение операции вв. 4. Обработчики прерыва-
ний. активирование драйвера при завершении операции вв. 5. Аппаратура. выполнение операции вв.
Устройства вв можно разделить на два класса: блочные, когда возможно чтение-запись данных блоком и имеют четко вы-
раженную адресную структуру, например, диск, и символьные, которые принимают или передают поток символов без ка-
кой-либо блочной структуры, которые не являются адресуемыми и не выполняют операцию поиска. Электронная состав-
ляющая устройства вв называется контроллером или адаптером.
Интерфейс между устройством и контроллером является интерфейсом очень низкого уровня. Например, контроллер диска
при чтении сектора принимает поток бит, содержащий заголовок сектора, собственно биты данных и контрольную сумму
ЕСС. Он преобразует поток бит в последовательность байт, сравнивает ЕСС, после чего операция считается выполненной и
передается в память.
У контроллера имеются регистры, с которыми может взаимодействовать центральный процессор для управления устройст-
вом, выбора режима и т.д. Может присутствовать буфер данных, с которым также могут выполняться операции чтения-
записи. 2 способа доступа к управляющим регистрам и буферам устройств вв. 1. Каждому регистру устройства назначается
номер порта, тогда операции вв могут выглядеть как IN REG, PORT или OUT PORT, REG. При такой схеме адресное про-
странство вв и памяти не пересекается, а существует раздельно. 2. Все регистры устройств отображаются на адресное про-
странство памяти, т.е. регистру присваивается номер ячейки памяти, как правило это верхние адреса диапазона (например,
Motorola 680x0). Используются и гибридные варианты, например, в x86 существует адресное пространство портов вв от 0 до
64К, а адресное пространство памяти от 640К до 1М зарезервировано под буферы устройств. Отображение на адресное про-
странство памяти имеет следующие преимущества: не требуется ассемблерных вставок на языках высокого уровня для ко-
манд IN и OUT; не требуется специальных механизмов защиты от процессов пользователей при доступе к устройствам вв,
достаточно исключить ту часть адресного пространства, на которую отображаются управляющие регистры увв из адресного
пространства пользователей; при отображении разных увв на разные страницы памяти доступ пользователей можно ограни-
чивать выборочно. Недостатки этого решения: в современных системах используется кэширование памяти, что требует за-
прещения кэширования отображаемого адресного диапазона, иначе при обращении к увв будут считаны данные из кэша а не
из реального устройства; модули памяти должны отслеживать диапазон адресов и реагировать только на свой, также как и
увв; увв не могут отследить обращения к памяти, если они происходят не по общей шине, а по прямой шине процессор-
память. В x86 во время загрузки в специальные регистры моста шины PCI загружаются значения отображаемого диапазона.
При обращении к памяти с этими адресами, обращение передаются не на прямую шину процессор-память, а на шину PCI.
Существует вариант прямого доступа к памяти, DMA (direct memory access), при котором устройство может пере-
слать/принять данные напрямую из памяти. Для этого необходим аппаратный контроллер DMA, который и выполняет дос-
туп к системной шине независимо от центрального процессора. Контроллер может находиться как интегрировано в увв, так
и на материнской плате, обслуживая в последнем случае несколько увв. DMA контроллер содержит управляющие регистры,
доступные ЦП, в которых указывается номер порта вв, направление пересылки данных, единица переноса (побайтно или
пословно0), размер переносимого блока. Механизм выглядит следующим образом. ЦП программирует контроллер DMA,
указывая, какие данные и куда перемещать. Далее процессором дается команда контроллеру диска прочитать данные во
внутренний буфер. Как только контроллер диска сообщает, что операция выполнена, в работу включается DMA. Он выстав-
ляет запрос на перенос одного слова, получает доступ к шине и выполняет передачу, затем аналогично для следующего и т.д.
Если ЦП в этот момент нужна шина, он ожидает, так как шина занята DMA. Такой механизм называется захват цикла, он
требует выставления запроса при передаче каждого слова, забирая случайный цикл шины у ЦП и притормаживая его. Суще-
ствует пакетный режим, когда запрос выставляется один раз на серию пересылок, в этом случае ЦП может простаивать
достаточно долго, ожидая освобождения шины. По завершении операции переноса данных, контроллер DMA инициирует
прерывание процессора, сообщая, что перенос данных завершен. В результате ОС нет необходимости заниматься переносом