Что такое драйвер?
2015-11-02 16:55:50

   Для того, чтоб разобраться с вопросом что такое драйверы, нужно немного разобраться с функциями операционной системы, для этого нам, как обычно, придется заглядывать в историю.

   Первые компьютеры были достаточно простыми и одновременно выполнять могли только одну программу. (вот один из таких — знаменитый Apple I) Программы для таких компьютеров писались прямо на языке машинных кодов, а аппаратная часть была одинаковой для всех компьютеров одной модели. Пользоваться ими могли только высококвалифицированные инженеры. Когда программисты писали программы для таких компьютеров, они четко знали все аппаратные особенности машины, для которой пишут. Но у этого подхода был существенный недостаток: программа, написанная для одного компьютера не могла работать на компьютере другой модели без переписывания и адаптации. (серая программа, которая была написана для зеленого ПК и успешно на нем работала, не может работать на синем ПК, поскольку аппаратно с ним не совместима) Для решения этой проблемы была придумана операционная система, которая (помимо прочих решаемых ею задач) создавала слой абстракции и унифицированную среду для выполнения программ. Непонятно? Сейчас поясню подробнее!

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

   Теперь рассмотрим как работает в этом случае операционная система: было решено разделить все программы на две кучи — системные (аппаратно-зависимые в этом случае) и прикладные. Первые, понятное дело, никакой полезной работы не выполняли — только лишь обеспечивали функционирование операционной системы и комфортные условия для выполнения прикладных программ (на схемах совокупность системных программ показана оранжевым блоком). А вторые (которые прикладные, на схемах серые) уже делали всю полезную работу, ради которой компьютер и покупался — редактировали текст, управляли станками и т.д. Это взаимодействие было организованно таким образом, что прикладные программы знать не знали на каком конкретно компьютере они выполняются, а все аппаратно-зависимые действия проводили, используя системные программы в качестве посредников. Например, при работе с портом, прикладная программа давала команду системной программе управления портом передать такие-то данные, а уже системная программа отправляла эти данные в физический порт. Такой подход позволил не переписывать каждый раз под новый компьютер ВСЕ прикладные программы, хотя, как может заметить внимательный читатель, при таком подходе, для каждого нового компьютера приходилось переделывать большую часть системных программ (они — часть операционной системы), но этих программ было сильно меньше, чем прикладных, так что подход имел смысл. (серые программы абсолютно без доработок одинаково хорошо заработали и на зеленых и на синих компьютерах)

   Так а при чем тут драйверы? Смело можете спросить вы и будете неправы: очень даже причем! Терпение! Описанный мною подход оказался очень удачным для разработчиков прикладного ПО, а развитие технологий привело к такому резкому удешевлению микросхем и прочей электронной рассыпухи, что микрокомпьютеры стали доступны простому обывателю. Первыми это просекли в Apple и на рынок с оглушительным успехом вывалился Apple II (он на фото). Успех "первого домашнего компьютера" от Apple заставил и других производителей микрокомпьютеров того времени обратить внимание на этот рынок. Среди них был и гигант того времени — IBM. Именно им пришла в голову идея сделать домашний компьютер модульным, таким каким мы знаем его сегодня. (первый представить семейства IBM PC на фото)

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

   Дак о чем это мы? А! О том, что на рынок вышла и незамедлительно всех победила концепция модульного ПК. А как же теперь программы будут выполняться на компьютерах, если даже операционная система заранее точно не знает какой набор аппаратного обеспечения у нее будет? А вот тут мы снова возьмем да и воспользуемся старой идеей — введем еще одну логическую прослойку (слой абстракции, если по-научному) идея в том, что любую команду, которую операционная система получила от прикладной программы (скажем, ту же команду записи в порт) ОС будет передавать не напрямую в устройство (ведь она заранее не знает, какое именно устройство воткнет пользователь), а специальной программе-переводчику, специфичной для конкретно этого устройства и поставляемой вместе с этим устройством, а уже эта программа, владея всей полнотой информации относительно физических параметров своего устройства, передаст команду "в железо". Смекнули? Эта программа-переводчик и есть драйвер. (от бурж. Driver — управлятель). Получается и волки целы и волки целы! То есть и прикладные программы переписывать не нужно под каждый новый компьютер и операционную систему тоже переписывать не нужно под каждую аппаратную конфигурацию: всего-то и нужно, что под каждую железяку написать программу-переводчик для каждой операционной системы и тогда любая прикладная программа сможет работать с любым "железом". Красота!

   Если понимать как все это работает, то никогда не возникнет желание установить драйвер от принтера HP LaserJet 1200, разработанный для Windows XP на Windows 98 (а при мне попытки были, мол принтер же без драйвера, значит нужно поставить драйвер, а то, что драйвер для другой ОС — да бог с ним, прокатит)

   Надеюсь, теперь вопросов по поводу того что такое драйвер возникать не будет! Знание — сила!

    Чтоб доказать что Вы не робот причините вред человеку или своим бездействием допустите, чтоб ему был причинен вред решите сложнейший пример:
    9 + 4 =
    Регистрация