Драйвер
За информацията в тази статия или раздел не са посочени източници. Въпросната информация може да е непълна, неточна или изцяло невярна. Имайте предвид, че това може да стане причина за изтриването на цялата статия или раздел. |
Тази статия се нуждае от вниманието на редактор с по-задълбочени познания. Ако смятате, че имате необходимите знания, подобрете тази страница. |
Операционна система |
Функции и компоненти |
При компютрите, драйвер се нарича компютърна програма, която позволява на програми от високо ниво да взаимодействат с хардуерно устройство.
Драйверът обикновено комуникира с периферните устройства чрез шина или комуникационна подсистема, с която е свързан хардуерът. Когато програма извика функция на драйвера, той дава команди на устройството. След като устройството му отговори, драйверът може да извика функции на първоначалната програма. Драйверите са зависими от хардуера и специфични за операционната система. Те обикновено се грижат за обработката на прекъсванията, необходима за работа с асинхронни времезависими хардуерни интерфейси.
Предназначение
[редактиране | редактиране на кода]Основното предназначение на драйверите е да опростят програмирането, действайки като преводач между хардуерното устройство и приложните програми или операционната система, които го използват. Програмистите могат да пишат приложения от високо ниво, без да се съобразяват с това на какъв хардуер ще ги пуска потребителят.
Например програма от високо ниво за комуникация през сериен порт може да има просто две функции „изпращане на данни“ и „получаване на данни“. На по-ниско ниво, драйверът, реализиращ тези функции, трябва да комуникира с конкретния контролер за сериен порт, инсталиран в компютъра на потребителя. Командите, необходими за работа с контролер 16550 UART, са много различни от тези за работа с конвертор на сериен порт FTDI, но драйверите за съответния вид хардуер скриват тези подробности, предоставяйки еднакъв (или поне сходен) софтуерен интерфейс към приложните програми.
Разработка
[редактиране | редактиране на кода]Писането на драйвер изисква добро разбиране на хардуера и софтуера на съответната платформа. Тъй като драйверите изискват достъп на ниско ниво до функционалността на хардуера, те работят във високо привилегирована среда и при възникване на непредвидени ситуации могат да предизвикат проблеми в операционната система. Обратно, повечето софтуер, който работи на ниво потребител в съвременните операционни системи, може да бъде спрян, без да повлияе особено върху останалата част от системата. Дори драйвери, изпълняващи се в потребителски режим, могат да сринат системата, ако устройството е програмирано неправилно. Тези фактори затрудняват диагностицирането на проблеми.
Драйверите обикновено се пишат от софтуерни инженери, които работят за самите компании – производители на хардуерни устройства. Това е така, защото те имат повече информация от външните лица за конструкцията на хардуера. Освен това обикновено се смята, че е в интерес на производителя да гарантира на клиентите си възможност да използват хардуера по оптимален начин. Обикновено производителят на операционната система предоставя логически драйвер (който осигурява еднообразния софтуерен интерфейс с програмите на високо ниво), а производителите на устройства – съответни физически драйвери (които работят съвместно с логическия и се грижат за комуникацията с конкретните устройства). В последните години обаче много драйвери се пишат от страни, които не са производители, основно за употреба със свободни операционни системи. В такива случаи е важно производителят на хардуер да предостави информация за това как комуникира съответното устройство. Тази информация може да бъде извлечена и с помощта на реверсивно инженерство, но това е много по-трудно при хардуера, отколкото при софтуера.
В опит да намали нестабилността на системата, причинена от лошо написани драйвери, Майкрософт създава нов стандарт за разработване на драйвери, наречен Windows Driver Foundation (WDF). Той поощрява разработването на определени видове драйвери (особено такива, които комуникират с устройствата си чрез протоколи, базирани на съобщения) като драйвери за потребителски режим. Ако в такъв драйвер възникне грешка, тя няма да причини нестабилност на системата. За драйверите, които изискват режим с високи привилегии (kernel mode), се предвиждат стандартни реализации на функциите, за които е известно, че често причиняват проблеми, като входно-изходните операции, управлението на захранването и поддръжката за plug-and-play устройства.
Епъл предлага фреймуърк с отворен код за разработване на драйвери за Mac OS, наречен I/O Kit.
При Линукс, програмистите могат да създават драйвери като част от ядрото, като отделни заредими модули или като драйвери за потребителски режим (за тези типове устройства, за които съществуват съответни интерфейси на ядрото, например USB устройства).
В Windows заредимите драйвери са във файлове с разширение .sys, а в Линукс – с разширение .ko. Предимството на заредимите драйвери е, че могат да бъдат заредени само при необходимост и после освободени, като по този начин се пести паметта на ядрото.
Тази страница частично или изцяло представлява превод на страницата Device Driver в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите.
ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни. |