Когда компьютер «выходит из строя», это может происходить, например, из-за «внезапного» сбоя питания (в этом случае ничего не может быть сделано), это может быть из-за какого-то неприятного внутреннего события (например, поврежденных таблиц страниц), которое аналогичным образом препятствует выполнению каких-либо действий или может быть вызвано каким-то условием, которое каким-то образом просто предотвращает «дальнейшие операции» - возможно, новые процессы не могут быть запущены, возможно, отображение не может быть обновлено, возможно, системе просто не хватило места для хранения.
В этих последних ситуациях ОС все еще может функционировать в определенных пределах и, по крайней мере, может завершать дисковые операции, которые продолжались, красиво закрывать файлы и т. Д. Кроме того, если возможно немного больше функций, ОС может сообщить различным приложениям процессы, чтобы закрыть себя чисто.
Но даже если система выйдет из строя "жестко", система в целом и отдельные приложения могут поддерживать систему "журналов" и / или "контрольных точек", позволяющую восстановить состояние системы в целом и отдельных приложений. в «атомную» точку, где все является «внутренне непротиворечивым», и где был потерян минимум важных данных.
Все это достигается не одним механизмом, а функциональными уровнями на уровне системы и приложений.
Что касается сбоев питания, в частности, может быть или не быть предварительного уведомления, и «предварительное» предупреждение может составлять доли секунды или (с ИБП или неисправной батареей ноутбука) несколько минут. Что можно сделать, зависит от количества предупреждений.
В большинстве случаев при использовании системного десктопа без ИБП в лучшем случае наступает время «приостановить» операции с диском, чтобы ни один диск не находился в середине записи, когда питание наконец исчезает. Это предотвращает создание плохих секторов на диске. Раньше, когда ОЗУ было намного меньше, времени могло быть достаточно (с большими конденсаторами в блоке питания или даже, странным образом, используя энергию, накопленную в роторе дисковода для выработки электроэнергии), чтобы записать ОЗУ на диск перед подачей питания упал, но эта возможность в значительной степени исчезла, когда объем оперативной памяти увеличился до 100M или около того.
[И обратите внимание, что в прежние времена, когда память создавалась с помощью магнитных «ядер», ОЗУ сохранялась при потере питания (хотя определенное слово, читаемое / записываемое при сбое питания, могло быть повреждено). Это облегчило восстановление этих старых систем после сбоя питания.]
Однако с чем-то похожим на ИБП (который может дать от нескольких минут до нескольких часов дополнительной мощности), есть еще несколько вариантов. Один из них - просто выключить систему, как если бы вы запросили «выключение». Это приводит к тому, что каждое приложение завершает себя, а затем система в целом записывает постоянные таблицы и завершает работу. Это может занять много времени (как я уверен, многие из вас заметили). Но также можно использовать стратегию гибернации, при которой ОЗУ записывается на диск как один блок, а затем система выключается. В сценарии «гибернации» при восстановлении питания ОЗУ считывается обратно точно в то место, откуда оно было записано, несколько бит здесь и там переворачиваются, а затем выполнение возобновляется с того места, где оно было остановлено.
В некоторых старых системах «большого железа» для аварийного отключения использовалась стратегия полу-гибернации: память выписывалась, как указано выше, но при восстановлении питания и считывании памяти происходило бы стандартное отключение. Это было сделано из-за того, что некоторые биты состояния системы (особенно в контроллерах ввода / вывода) не могли быть надежно сохранены / восстановлены для продолжения работы.