обработка программных ловушек ядра

Я читаю книгу о внутреннем устройстве Windows и кое-что не понимаю:

"Ядро обрабатывает программные прерывания либо как часть обработки аппаратных прерываний, либо синхронно, когда поток вызывает функции ядра, связанные с программным прерыванием."

Значит ли это, что программные прерывания или исключения будут обрабатываться только при следующих условиях:

****а. Когда ядро ​​выполняет функцию из указанного потока, связанную с программным исключением (ловушкой) b. когда он уже обрабатывает аппаратную ловушку****

Правильно ли я понимаю это?

Следующий бит:

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

Я не совсем понимаю, что имеется в виду под «внешними функциями обработки ловушек» и «выставлением ловушки»?

Может кто-нибудь помочь мне?


person Tony The Lion    schedule 29.12.2009    source источник


Ответы (1)


Программные прерывания — это не ловушки, а части обработки аппаратных прерываний, отложенные вне контекста аппаратных прерываний. Примером может служить стек TCP/IP: копирование пакетов из сетевой карты в буферы ОС выполняется/инициируется процедурой аппаратного прерывания, но обработка протокола (ethernet -> IP -> UDP/TCP) откладывается до программного прерывания. В литературе по операционным системам их часто называют нижние половины (по сравнению с верхними половинами, которые напрямую взаимодействуют с оборудованием). Это делается для уменьшения объема отключаемых аппаратных прерываний и уменьшения планирования операционной системы. задержка. Как таковые, они обычно вызываются в конце общей записи ловушки/прерывания, но после того, как прерывание(я) повторно разрешено/включены, и/или выделенным потоком ядра программного прерывания.

person Nikolai Fetissov    schedule 29.12.2009
comment
поэтому программные прерывания происходят из-за системного вызова в контексте аппаратного прерывания? Но системный вызов в процессе пользовательского режима, согласно тому, что я читал, также вызовет программное прерывание, которое может быть отложено в обработке до тех пор, пока не будет вызвано аппаратное прерывание или оно будет выполнено? - person Tony The Lion; 29.12.2009
comment
Данные передаются в обоих направлениях — от аппаратного обеспечения (прерывания) через ядро ​​(мягкие прерывания, буферизация) в пользовательскую область (системный вызов, подобный чтению), и обратно из пользовательской области (системный вызов, подобный записи) в буферы ядра, заполнение которых может вызвать запланированные программные прерывания (это отсрочка времени вне контекста процесса) и, в конечном счете, к оборудованию через DMA или порты/память ввода-вывода. Путь ввода проще объяснить :) - person Nikolai Fetissov; 29.12.2009