Обработка программного обеспечения ядра

Я читаю книгу о Windows Internals, и я кое-что не понимаю:

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

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

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

Правильно ли мое понимание этого?

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

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

Я не совсем понимаю, что это означает под "функциями обработки ловушек переднего конца" и "выставить ловушку"?

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

2 ответа

Мне кажется, это говорит о том, что программные прерывания обрабатываются либо A) в той же части кода ядра, что и аппаратные прерывания, либо B) ядро ​​ничего не делает в момент возникновения программного прерывания, но помнит, что произошло прерывание, и при вызове функции, связанной с программным прерыванием, оно будет обрабатывать прерывание.

В Windows есть так называемый "отложенный вызов процедур" (DPC), при котором основная часть обработки прерываний откладывается до удобного времени. Это происходит потому, что процессоры x86 имеют только одну линию IRQ, которая мультиплексируется внешним PIC или APIC. Когда запускается IRQ, CPU автоматически отключает IRQ, пока процедура обслуживания прерываний не включит их снова. Но поскольку имеется только одна строка IRQ, это означает, что когда IRQ отключены, это означает, что все IRQ отключены. В архитектуре x86 много устройств, использующих IRQ, так что на самом деле это означает, что система (или, по крайней мере, этот конкретный процессор) является своего рода заложником в то время, когда IRQ отключены. Таким образом, механизм DPC существует, чтобы гарантировать, что IRQ отключены на минимально необходимое время. В идеале ISR должен выполнить абсолютную минимальную обработку, необходимую перед повторным включением IRQ, и перенести остальную часть работы на DPC.

Я могу ошибаться, но я думаю, что программные прерывания также автоматически отключают IRQ. Таким образом, даже если программное прерывание не имеет ввода-вывода для обслуживания, оно по-прежнему приводит к тому, что система / отдельный ЦП не может обслуживать другие прерывания, пока обработчик прерываний не включит их повторно.

Системные вызовы, использующие инструкцию INT на ассемблере, являются программными прерываниями (если только Windows не использует другой метод, такой как Linux, с его уловкой linux-gate.so), а также исключениями ЦП, включая сбои страниц, деленные на ноль,

Таким образом, все прерывания обрабатываются асинхронно в Windows и любой операционной системе, я думаю, по вышеуказанным причинам. Я не эксперт по ядру или что-то в этом роде, поэтому просто примите вышеизложенное для понимания.

Это пахнет домашней работой, но я попробую.

Для меня это звучит так, как будто я говорю, что программное обеспечение прерывает (что, возможно, не то же самое, что и исключения) в недетерминированное время. По сути, ОС хочет быть эффективной и может обрабатывать их как часть другого прерывания (кажется, аппаратного) или когда вы входите в пространство ядра (скажем, делаете запрос ядра).

Что касается обработки внешних ловушек, то это более или менее говорит о том, что ядро ​​получает выстрел до и после каждой обработанной ловушки. Например, некоторые из них не могут быть переданы в пользовательский код, как бы вы ни старались. Ядро просто обрабатывает его и никогда не позволяет пользовательскому коду прикасаться к нему. Другие могут быть такими же простыми, как установка другого стека для обработки прерывания, а затем позволить пользовательскому коду сделать это. Если ни один из кодов пользовательского уровня не обрабатывает его, то в конечном итоге он предпримет какое-то действие по умолчанию.

Другие вопросы по тегам