Центральный процессор и память — не единственные ресурсы, которыми должна управлять операционная система. С ней также активно взаимодействуют и устройства ввода-вывода информации. Устройства ввода-вывода обычно состоят из двух компонентов: самого устройства и его контроллера. Контроллер представляет собой микросхему или набор микросхем, которые управляют устройством на физическом уровне. Он принимает от операционной системы команды, например считать данные с помощью устройства, а затем их выполняет.
Достаточно часто непосредственное управление устройством очень сложно и требует высокого уровня детализации, поэтому задачей контроллера является предоставление операционной системе простого (но не упрощенного) интерфейса. Например, контроллер диска может получить команду прочитать сектор 11 206 с диска 2. Получив команду, контроллер должен преобразовать этот простой порядковый номер сектора в номер цилиндра, сектора и головки. Операция преобразования может быть затруднена тем, что внешние цилиндры имеют больше секторов, чем внутренние, а номера «плохих» секторов отображаются на другие секторы. Затем контроллер должен определить, над каким цилиндром сейчас находится привод головок, и выдать последовательность импульсов, чтобы он переместился вперед или назад на требуемое количество цилиндров. Далее необходимо дождаться, пока нужный сектор не попадет под головку, а затем приступить к чтению и сохранению битов по мере их поступления из привода, удаляя заголовки и подсчитывая контрольную сумму. В завершение он должен собрать поступившие биты в слова и сохранить их в памяти. Для осуществления всей этой работы контроллеры часто содержат маленькие встроенные компьютеры, запрограммированные на выполнение подобных задач.
Другим компонентом является само устройство. Устройства имеют довольно простые интерфейсы, поскольку, во-первых, они обладают весьма скромными возможностями, а во-вторых, они должны отвечать общим стандартам. Соблюдение последнего условия необходимо для того, чтобы, к примеру, любой контроллер IDE-диска смог работать с любым IDE-диском. IDE означает встроенный интерфейс накопителей — Integrated Drive Electronics, и диски такого типа являются стандартными для многих компьютеров. Поскольку фактический интерфейс устройства скрыт его контроллером, операционная система видит только интерфейс контроллера, который может существенно отличаться от интерфейса самого устройства.
Так как все типы контроллеров отличаются друг от друга, для управления ими требуется различное программное обеспечение. Программа, предназначенная для
общения с контроллером, выдачи ему команды и воспринятая поступающих от него ответов, называется драйвером устройства. Каждый производитель контроллеров должен поставлять вместе с ними драйверы для каждой поддерживаемой операционной системы. Например, сканер может поступить в продажу с драйверами для операционных систем Windows 2000, Windows XP, Vista и Linux.

