Драйвери на устройства и сервизни процедури за прекъсване

Много основен въпрос. Научих, че драйверите на устройствата и рутинните услуги за прекъсване са само някаква програма или кодове. когато е необходимо, те се изпълняват. Изпълнение означава, че процесорът изпълнява някои инструкции от своя набор от инструкции ISA. Означава ли това, че драйверите на устройства и ISR също са машинни инструкции за генериране на необходимия резултат?

от какво точно се състоят такива програми като драйвер на устройство и рутинни процедури? имат ли такива програми също сегмент от данни, кодов сегмент и стеков сегмент?

Уча асемблерен език x86 и C .


person KawaiKx    schedule 25.05.2011    source източник


Отговори (2)


Това е точна оценка. Достатъчно сложен драйвер на устройство има сегмент от данни, кодов сегмент и стеков сегмент.

person Olaf    schedule 25.05.2011
comment
Компютърът работи от една рутина към друга рутина към друга или обратно към стара рутина, винаги, от момента, в който е включен до момента, в който е изключен. Вярно ли е също? - person KawaiKx; 25.05.2011
comment
@Saurabh: Като цяло да. В крайния случай вашето основно приложение може да бъде HLT команда в цикъл. Тогава действителното изпълнение ще се случи само при обработка на заявки за хардуерно прекъсване. - person Olaf; 25.05.2011
comment
Добре. добре.. така че рутина, драйвер, процедура, подпрограма са просто фантастични имена за блок от инструкции (само от ISA), които при изпълнение дават желания резултат. няма нищо специално за тях като такива, освен техните различни резултати.. Прав ли съм да го кажа? - person KawaiKx; 25.05.2011
comment
@Saurabh: Достатъчно сложен драйвер съдържа редица процедури/подпрограми. Можете да го сравните с обикновено приложение. GUI приложение извиква редица свои процедури въз основа на въведеното от потребителя чрез, да речем, GUI. Драйверът извиква редица свои процедури въз основа на заявките за хардуерно прекъсване. - person Olaf; 25.05.2011
comment
Разбрах това.. Но вярно ли е, че който и да е драйвер/подпрограма не може да направи нищо извън основната ISA? Първо се опитвам да получа по-голямата картина на тази тема. за всеки x86 микропроцесор, всички изпълними файлове имат една и съща структура - данни, код, сегмент на стека, без значение кодът е това, което компилирам на език C или програма за драйвер на устройство, или всякакви рутинни процедури за прекъсване. Правилно ли е? - person KawaiKx; 25.05.2011

Помислете как да получите данни от устройство. Има два начина:

  • Анкета: Стигнахме ли вече? Стигнахме ли вече? Програма, ядро ​​на ОС, драйвер на устройство, каквото и да е... продължава да пита устройството дали има нови данни.
  • Прекъсвания: Устройството казва на процесора, че има нещо важно, и прекъсва процесора. Централният процесор изпълнява рутина, наречена Interrupt Service Routine, за да обслужи заявката и след това продължава с това, което е правил, преди да бъде прекъснат.

В зависимост от вашата операционна система (или без операционна система, само голи метал) драйверът на устройство може да бъде програма или може да бъде неразделна част от ядрото на вашата операционна система, ...

Типичният драйвер на устройство ще направи няколко неща: идентифициране на устройства, инициализиране на устройства, обработка на прекъсвания от устройството, обработка на заявки за запис/четене/конфигуриране на устройството, ...

Разбира се, модерните процесори са склонни да предоставят функции за защита и не позволяват достъп на произволни процеси до устройства. Така че драйверът на устройството или ще работи на високо ниво на привилегия, обикновено като част от ядрото на ОС, или в случай, че драйверите за устройства в потребителското пространство ще използват някои добре дефинирани интерфейси, предоставени от ядрото.

person ninjalj    schedule 25.05.2011
comment
благодаря много .. От любопитство, какъв език се използва за писане на такива драйвери на устройства и ISR? асемблиране, C или някакъв друг език? Правилно ли казвам, че тези драйвери и ISR са изпълними в самите тях? имат ли разширения като .exe или .com или някакви нови разширения? - person KawaiKx; 26.05.2011
comment
Зависи от ОС. В Linux те обикновено се пишат на C и се компилират в обектен файл с разширение .ko (модул на ядрото), който се свързва в ядрото по време на изпълнение. Или те може би са статично свързани с ядрото. OTOH, драйверите за потребителско пространство са нормални програми, които се изпълняват с достатъчно привилегии за достъп до I/O портове или специални файлове на устройства. - person ninjalj; 27.05.2011