- •26. Синхронизация
- •27. Оповещения и асинхронные вызовы процедур
- •28. Структура процессов
- •Требования подсистем среды
- •29. Базовая структура процессов
- •Управление клиентскими процессами
- •Как предотвратить неправильное использование
- •52. База данных страничных фреймов
- •53. Дескрипторы виртуальных адресов
- •Соображения мультипроцессорной обработки
- •Соображения переносимости
- •Общие сведения
- •Планирование потоков
- •55. Объекты процесс ядра и поток ядра
- •56. Приоритеты планирования
- •Переключение контекста
- •57. Обработка прерываний и исключений
- •Обработчик ловушки
- •Распределение прерываний
- •58. Таблица распределения прерываний. Программные прерывания. Прерывания асинхронного вызова процедур (apc).
- •Прерывания асинхронного вызова процедуры (арс)
- •59. Распределение исключений
- •60. Многопроцессорная синхронизация
- •Синхронизация на уровне ядра
- •61. Синхронизация на уровне исполнительной системы
- •Восстановление после сбоя питания
Восстановление после сбоя питания
Главной задачей при разработке NT было сделать ее устойчивой и надежной ОС. Здесь можно задать вопрос: насколько далеко должна заходить надежность? Хотя архитектура обработки исключений помогает защитить ОС изнутри, что произойдет, если вмешается внешний фактор, нарушающий ее целостность? Одной из форм внешней угрозы являются пользователи-нарушители, пытающиеся обойти системный контроль доступа. Другая потенциальная угроза — программы, пытающиеся израсходовать все системные ресурсы. Для борьбы с первой опасностью предназначена система защиты Windows NT, а ограничения квот на ресурсы помогают бороться со второй. Однако остается еще одна опасность — сбой питания.
Для сбоя питания в ядре NT зарезервировано второе по старшинству приоритета прерывание. Оно уведомляет о проблеме в источнике питания, чтобы система могла выполнить останов как можно более корректно. Если бы ни эта процедура, вся работа, выполнявшаяся в момент аварии, могла бы пропасть, Исполняющиеся программы могут закончить или не закончить свою работу и могут оставить постоянные ресурсы (такие как файлы), которые они использовали, в восстановимом или в невосстановимом состоянии.
При сбое питания у ОС остается время только на то, чтобы начать процедуру останова. Если компьютер оборудован резервными батареями для памяти, данные можно восстановить, когда питание будет подано вновь. Выполнявшиеся задачи могут быть перезапущены либо продолжены, в зависимости от их состояния на момент сбоя. (Конечно, при отсутствии резервных батарей такое восстановление невозможно.)
Перезагрузки регистров и возобновления исполнения недостаточно для полного восстановления системы. Так как устройства ввода-вывода работают независимо от остальной ОС, для восстановления после сбоя питания им требуется следующая поддержка со стороны ядра:
• Они должны быть переинициализированы, когда питание восстановится.
• Они должны уметь определять, имел ли место сбой питания.
Эти средства предоставляются двумя управляющими объектами ядра. Объекты-уведомления питания (power notify objects) позволяют драйверам устройств зарегистрировать процедуру восстановления, которую ядро будет вызывать при возобновлении питания. Драйвер устройства определяет, что должна делать эта процедура; в общем случае она выполняет повторную инициализацию устройства и перезапуск прерванных операций ввода-вывода.
Чтобы зарегистрировать процедуру восстановления после сбоя питания, драйвер создает объект-уведомление питания, вызывает ядро для инициализации объекта указателем на процедуру, после чего снова вызывает ядро для добавления объекта в очередь, контролируемую ядром. При восстановлении питания ядро просматривает эту очередь и вызывает все процедуры по порядку.
Ядро предоставляет еще один управляющий объект, используемый драйверами устройств, объект-состояние питания (power status object). Создав такой объект и добавив его в другую очередь ядра, драйвер может определить перед началом операции, которую нельзя прервать (например, запись данных в регистр устройства), не произошел ли сбой питания. Если он произошел драйвер не выполняет операцию.
