Жизнь после BSOD


Введение


Синий экран появляется всякий раз, когда ядро возбуждает необрабатываемое исключение (скажем, обращение по нулевому указателю) или отлавливает заведомо "левую" операцию (повторное освобождение уже освобожденной памяти, например). А что делает Жирный Хомяк (он же Системный Администратор), когда видит BSOD? Быстро шепчет заклинание: "Память-видюха-драйвер, на фиг идите от компа, уроды, буду разбираться!".

Во всех этих случаях управление передается функции KeBugCheckEx, описание которой можно найти в NT DDK, и которая завершает работу системы в аварийном режиме, при необходимости сбрасывая дамп памяти, поковырявшись в котором, можно определить причину сбоя.

Функция KeBugCheckEx принимает четыре аргумента, важнейшим из которых является BugCheckCode, определяющий причину сбоя. Всего существует свыше сотни кодов ошибок, документированных в DDK (ищите их в руководстве по отладчику "Using Microsoft Debugger"), однако, в действительности их намного больше. Дизассемблирование ядра W2K SP2 показывает, что KeBugCheckEx вызывается из 387 мест! И, преимущественно, с различными параметрами.

Разумеется, не все ошибки одинаковы по своей фатальности. В многоядерных осях это вообще не проблема. Падение одного ядра, не затрагивает других. Все ядра работают в раздельных адресных пространствах и частично или полностью изолированы друг от друга. Разрушать такую систему очень трудно, многоядерная архитектура чрезвычайно устойчива к сбоям, но… как же при этом она тормозит! Межъядерный обмен съедает уйму процессорного времени, а если запихать все компоненты в одно ядро, мы получим… монолитное ядро по типу LINUX'а (что, кстати говоря, явилось причиной яростной критики последнего со стороны многих теоретиков). В LINUX, как впрочем, и в BSD все компоненты ядра (там они называются модулями) исполняются в едином адресном пространстве и некорректно написанный модуль может непреднамеренно или умышленно надругаться над чужой собственностью (превратить данные в винегрет, например).


- Начало -  - Назад -  - Вперед -