Драйверы и устройства
Прочел, что, например, операционная система знает о существование принтера. В операционной системе есть методы, которые управляют принтером, и пользовательские программы дергают эти методы, чтобы управлять принтером. Поскольку принтеров куча и все они устроены по-разному, то реализацию этих методов доверяют производителям принтеров, то есть пишут драйверы. Итого получаем, к примеру, следующую картину:
я пишу программу пользовательскую, моя программа дергает в операционной системе метод, например, для рисования 1-пиксельной зеленой точки. Операционная система находит реализацию данного метода в загруженном в память драйвере и исполняет код реализации этого метода.
Возможно я коряво описал ситуацию, вот вырезка, прочитанная мною:
Драйвера - это совего рода прослойка между ОС и железом [1]. Железа бывает много и разного, а ОС одна (под каждую ОС свой драйвер - так в 99% случаев с дровами). ОС знает, что конкретный тип устройства (т.е. железа) умеет делать то-то и то-то, к примеру, ОС знает, что с винта можно получить данные и записать на него данные (очень упрощаем), каждый винт (т.е. конкретный тип железа) выполняет эти действия по-своему. Разработчики ОС не могут реалтзовать все ветки поведения "записать данные" для ОС, поэтому на помощь приходят драйвера, которые уже обладают реализацие метода "получить данные" и "записать данные" для своего типа железа. ОС же только дергает за методы драйвера и передает/получет параметры/значения от них, а драйверы в свою очередь работают уже с конкретным железом под которое были написаны.
Это описание можно назвать "на пальцах" или базовым описанием принципа работы драйверов. На самом деле типов драйверов много больше и функции, которые они выполняют тоже огромного количество.
Вопросы вот по этой части из вырезки "ОС знает, что конкретный тип устройства (т.е. железа) умеет делать то-то и то-то,":
1) допустим, ОС знает о том, что принтер умеет делать 5 вещей, например, рисовать точку зеленую, рисовать красную точку и любые другие действия, к примеру.
Так вот зная это, ОС имеет 5 методов, которые дергают прикладные программы. А производители принтеров уже пишут драйвера и тем самым реализуют эти методы.
Вопрос в следующем. Поскольку ОС знает, что тип устройства "принтер" имеет 5 методов, то и хранит в себе 5 методов, которые могут дергать прикладные программы.
А что, если вдруг, завтра появится новый принтер, который помимо этих вот 5 методов умеет делать ещё что-нибудь, например, танцевать? Как в таком случае
прикладной программе дергать метод "танцевать", который умеет делать принтер, но о котором ничего не знает ОС т.к. в ней уже заложено, что для типа устройства
"принтер" есть 5 методов и всё?
2) допустим на момент выхода ОС разработчики знали обо всех типах устройств, которые существовали на момент написания ОС и заложили поддержку этих устройств в ОС.
То есть ОС знает об, например, всё том же устройстве-принтере и содержит методы для манипуляций этим устройством. А что, если после выхода ОС я изобрету своё устройство,
например, транслятор моих мыслей на бумагу. ОС ничего не знает о таком устройстве и не знает какие методы существуют для данного типа устройства. И как тогда
писать прикладные программы для управления моим устройством?
Наверняка я вообще где-то имею абсолютно неправильное представление о том, как все это устроено, поэтому, очень надеюсь, что вы наведете меня в нужное русло. Спасибо, с уважением.
|