Драйверы устройств и процедуры обслуживания прерываний

Очень простой вопрос. Я узнал, что драйверы устройств и процедуры обслуживания прерываний - это только некоторые программы или коды. всякий раз, когда это необходимо, их заставляют исполнять. Выполнение означает, что ЦП выполняет некоторые инструкции из своего набора инструкций 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
Ok. хорошо .. так что подпрограмма, драйвер, процедура, подпрограмма - это просто причудливые имена для блока инструкций (только от ISA), которые при выполнении дают желаемый результат. в них как таковых нет ничего особенного, кроме различных результатов .. Правильно ли я говорю? - person KawaiKx; 25.05.2011
comment
@Saurabh: Достаточно сложный драйвер содержит ряд процедур / подпрограмм. Вы можете сравнить это с обычным приложением. Приложение с графическим интерфейсом пользователя вызывает ряд своих процедур на основе пользовательского ввода, например, через графический интерфейс. Драйвер вызывает ряд своих процедур на основе запросов аппаратного прерывания. - person Olaf; 25.05.2011
comment
Понятно ... Но правда ли, что какой-либо драйвер / подпрограмма не может делать ничего, кроме базовой ISA? Сначала я пытаюсь получить более широкую картину по этому вопросу. для любого микропроцессора x86 все исполняемые файлы имеют одинаковую структуру - данные, код, сегмент стека, независимо от того, какой код я компилирую на языке C, программу драйвера устройства или любые процедуры обслуживания прерываний. Это правильно? - person KawaiKx; 25.05.2011

Рассмотрим, как получить данные с устройства. Есть два пути:

  • Опрос: Мы еще на месте? Мы уже там? Программа, ядро ​​ОС, драйвер устройства, что угодно ... постоянно спрашивает устройство, есть ли у него какие-либо новые данные.
  • Прерывания: устройство сообщает ЦП, что у него есть что-то важное, и прерывает ЦП. ЦП выполняет подпрограмму, называемую подпрограммой обслуживания прерывания, для обслуживания запроса, а затем продолжает то, что он делал до того, как был прерван.

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

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

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

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