Задачи драйвера Windows NT (2000/XP/2003)

Основной задачей любого драйвера устройства Windows NT (и более старших) является предоставление возможности пользовательским программам использовать устройство данного драйвера.

В операционной системе DOS пользовательские программы имеют возможность напрямую обращаться к аппаратным устройствам посредством: портов ввода-вывода, обращения к памяти устройства или использовать прерывания в/в. Такой подход создаёт следующие проблемы:

  • Любое пользовательское приложение может полностью «захватить» управление над компьютером, не делясь ресурсами с остальными приложениями;
  • В случае ошибки приложение напрямую работающее с устройством может привести к отказу от обслуживания («зависанию» системы), или порче аппаратного устройства;
  • Учитывая эти проблемы разработчики ОС Windows NT решили пойти по пути абстрагирования приложений пользователя от прямой работы с оборудованием.

Система взаимодействия с аппаратными устройствами в Windows NT обладает большим уровнем надежности так как не позволяет напрямую обращаться к устройствам из пользовательского кода, а вместо этого заставляет пользовательское приложение запрашивать необходимые действия с над устройствами у драйвера данного устройства.

Введение такой системы увеличивает количество уровней абстракции (если в DOS для обращения к устройству достаточно написать несколько строк ассемблера, то в Windows NT будет кроме написанных программистом строк будет выполнено огромное количество кода «лежащего» между программой и устройством), в следствии чего увеличивается общая нагрузка на аппаратное обеспечение. Кроме того ввиду появления большого количества слоев абстракции от оборудования в Windows NT, программист для изучения программирования под данную систему должен потратить гораздо больше времени чем при программировании под ОС DOS.

В свою очередь система взаимодействия с аппаратными устройствами в DOS проста и прозрачна что принесло ей большое распространение (равно как и популярность) в 90-е годы…

Метки: , , , ,

Ваш отзыв

Повторите код: