Нет, ну в общих чертах понятно - процессор генерирует исключение,
операционная система находит нужный обработчик и вызывает его. А что
происходит, если посмотреть подробнее? В Windows происходит примерно
следующее.
Выполняя поток команд, процессор проверят
возможность выполнения каждой инструкции, корректность её аргументов и
все остальные факторы, влияющие на корректность выполнения кода. В
случае если команда не может быть выполнена (деление на ноль, обращение
к несуществующей странице, несоответствие уровня привилегий и т.д.),
процессор генерирует исключение – вызывает один из обработчиков,
зарегистрированных операционной системой в IDT (Interrupt Dispatch
Table).
При вызове обработчика процессор делает сразу несколько вещей:
переключается в режим ядра (Ring 0), переключает указатель стека на
ядерный стек и сохраняет предыдущие указатели команд и стека в ядерном
стеке.
Читать полностью
0