Я занимаюсь этим, пытаясь найти код в ядре Linux, который реализует обработку прерываний; в частности, я пытаюсь найти код, отвечающий за обработку системного таймера.
Согласно http://www.linux -tutorial.info / modules.php? Name = MContent & pageid = 86
Ядро обрабатывает прерывания очень похоже на то, как оно обрабатывает исключения: все регистры общего назначения помещаются в системный стек и вызывается общий обработчик прерываний. > Текущий приоритет прерывания сохраняется и загружается новый приоритет. Это предотвращает прерывание ядра при более низких уровнях приоритета, пока оно обрабатывает это прерывание. Затем вызывается настоящий обработчик прерываний.
Я ищу код, который помещает все регистры общего назначения в стек, и общий код обработки прерываний.
По крайней мере, перенос регистров общего назначения в стек не зависит от архитектуры, поэтому я ищу код, связанный с архитектурой x86. В данный момент я смотрю на версию 3.0.4 исходного кода ядра, но, возможно, подойдет любая версия. Я начал искать в kernel / irq / handle.c, но я не вижу ничего похожего на сохранение регистров; похоже, что он вызывает зарегистрированный обработчик прерываний.