Средства аппаратного обеспечения вычислительной техники отличаются гигантским многообразием. Существуют сотни различных моделей видеоадаптеров, звуковых карт, мониторов, принтеров, сканеров и прочего оборудования. Ни один разработчик программного обеспечения не в состоянии предусмотреть все варианты взаимодействия своей программы, например, с печатающим устройством.
Гибкость аппаратных и программных конфигураций вычислительных систем поддерживается за счет того, что каждый разработчик оборудования прикладывает к нему специальные программные средства управления — драйверы. Драйверы имеют точки входа для взаимодействия с прикладными программами, а диспетчеризация обращений прикладных программ к драйверам устройств — это одна из функций ОС. Строго говоря, выпуская устройство, например модем, его разработчик прикладывает к нему несколько драйверов, предназначенных для основных ОС, как-то: Windows 95/98/ME/NT/2000/XP, MS-DOS и т. п.
В ОС MS-DOS драйверы устройств загружаются как резидентные программы, напрямую работающие с процессором и другими устройствами материнской платы. Здесь участие ОС сводится лишь к тому, чтобы предоставить пользователю возможность загрузки драйвера — далее он сам перехватывает прерывания, используемые для обращения к устройству, и управляет его взаимодействием с вызывающей программой. Загрузка драйверов устройств может быть ручной (после первоначальной загрузки компьютера пользователь сам выдает команды на загрузку драйверов) или автоматической, когда команды на загрузку и настройку драйверов включаются в состав файлов, автоматически читаемых при загрузке компьютера.
ОС семейства Windows берут на себя все функции по установке драйверов устройств и передаче им управления от приложений. Во многих случаях ОС даже не нуждается в драйверах, полученных от разработчика устройства, а использует драйверы из собственной базы данных.
Наиболее современные ОС Windows позволяют управлять не только установкой и регистрацией программных драйверов устройств, но и процессом аппаратно-логического подключения. Если устройство подключается к материнской плате через шину PCI, то есть техническая возможность организовать между ним и материнской платой обратную связь. Это позволяет ОС анализировать требования устройств о выделении им ресурсов и гибко реагировать на них, исключая захват одних и тех же ресурсов разными устройствами. Такой принцип динамического распределения ресурсов ОС получил название plug-and-play, а устройства, удовлетворяющие этому принципу, называются самоустанавливающимися.
Если же устройство подключается к устаревшей шине ISA и не является самоустанавливающимся, то в этом случае ОС не может динамически выделять ему ресурсы, но, тем не менее, при распределении ресурсов для самоустанавливающихся устройств, она учитывает ресурсы, захваченные им.