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