Устройства ввода вывода делятся на два типа: блок-ориентированные устройства и байт-ориентированные устройства. Блок-ориентированные устройства берегут информацию в блоках фиксированного размера, каждый из который имеет свой собственный адрес. Проще всего блок-ориентированное устройство - диск. Байт-ориентированные устройства не адресуемы и не позволяют делать операцию поиска, они генерируют или потребляют последовательность байтов. Примерами являются терминалы, строчные принтеры, сетевые адаптеры. Однако некоторые внешние устройства не относятся к никакому классу, например, времена, которые, с одной стороны, не адресуемы, а с другой стороны, не порождают потока байтов. Это устройство только выдает сигнал прерывания в некоторые моменты времени.

Внешнее устройство обычно составляется из механического и электронного компонента. Электронный компонент называется контроллером устройства или адаптером. Механический компонент подает собственно устройство. Некоторые контроллеры могут управлять несколькими устройствами. Если интерфейс между контроллером и устройством стандартизован, то независимые производители могут выпускать совместные как контроллеры, так и устройства.

Операционная система обычно имеет дело не с устройством, а с контроллером. Контроллер, как правило, выполняет простые функции, например, превратит поток битый в блоки, которые составляются из байтов, и осуществляют контроль и исправления ошибок. Каждый контроллер имеет несколько регистров, которые используются для взаимодействия с центральным процессором. В некоторых компьютерах эти регистры являются частью физическое адресного пространства. В таких компьютерах нет специальных операций ввода вывода. В других компьютерах адреса регистров ввода вывода, называемых часто портами, образуют собственное адресное пространство за счет введения специальных операций внедрения-висновка (например, команд IN и OUT в процессорах i86).

ОС выполняет внедрение-вывод, записывая команды в регистры контроллера. Например, контроллер гибкого диска IBM PC принимает 15 команд, таких как READ, WRITE, SEEK, FORMAT и т.д. Когда команда принята, процессор оставляет контроллер и занимается другой работой. При завершении команды контроллер организует прерывание для того, чтобы передать управление процессором операционной системе, которая должна проверить результаты операции. Процессор получает результаты и статус устройства, читая информацию из регистров контроллера.

 

Возможно стоит прочитать: