52

У меня сложилось впечатление, что, когда компьютер выходит из строя, что-то идет не так, и он больше не может работать.

Мне было интересно, как компьютер может сохранять вещи, прежде чем он выходит из строя?

Действительно ли компьютер способен знать, когда произойдет сбой (и, таким образом, сообщить всем процессам: « Сохраните как можно скорее, потому что я вот-вот произойдет сбой »)?

Если нет, то как возможно, что такие программы, как Chrome и Microsoft Word могут предлагать "восстановление" служб после сбоя компьютера?

15 ответов15

82

Chrome и Microsoft Word периодически сохраняют текущее состояние во время работы. Если происходит сбой приложения или компьютера, когда приложения перезапускаются, они ищут сохраненное состояние на диске и восстанавливают его для вас. Им не нужно предсказывать аварию; они постоянно спасают ваше государство на случай, если что-то пойдет не так.

62

РЕДАКТИРОВАТЬ: Это работает только при сбое приложения, а не Windows.

Начиная с Windows Vista, появился новый API, который позволяет Windows вызывать специальную функцию в приложении при сбое, поэтому он может попытаться восстановить любые данные до его закрытия. Это работает так:

  • Приложение запускается
  • Приложение вызывает функцию Windows: при сбое, пожалуйста, выполните RecoverData()
  • ...
  • Приложение вылетает
  • Windows выполняет RecoverData() в приложении
  • RecoverData() пытается извлечь данные о текущем открытом документе, в то же время он продолжает пинговать Windows, сообщая, что все еще занят восстановлением.
  • Когда RecoverData() завершил / остановил / прекратил проверку связи, Windows завершает работу приложения и перезапускает его.

Дополнительная информация:http://msdn.microsoft.com/en-us/library/windows/desktop/aa373351(v=VS.85).aspx

16

Ну, они просто сохраняют текущее состояние, прежде чем они терпят крах. Как автоматическое сохранение каждые X секунд.

Я думаю, что действительно нужно различать:

  • Отказ оборудования: возможность восстановления только с предыдущих контрольных точек
  • Сбой ОС: приложение не может сохранить данные, ОС может сбросить что-то вроде дампа ядра
  • Сбой приложения: функции ОС для сбоя приложения могут сохранить информацию
10

Это зависит от серьезности аварии. Очень серьезный сбой (на самом нижнем уровне компьютера) приведет к тому, что компьютер просто остановится. Единственная сохраненная работа - каждое приложение автоматически сохраняет свои данные периодически.

Для менее серьезных сбоев компьютер предупредит каждую программу о необходимости завершения работы. Если программа прослушивает это сообщение, то программа сохраняет текущие данные. Однако не все программы обращают внимание на это сообщение.

8

Программы сохраняют свое состояние периодически в файле на диске. Компьютер не способен это знать. Фактически, аварийный дамп даже не выполняется с помощью драйвера диска - система просто выгружает всю память.

6

Когда компьютер "выходит из строя", это может происходить, например, из-за "резкого" сбоя питания (в этом случае ничего не может быть сделано), это может быть из-за какого-то неприятного внутреннего события (например, поврежденных таблиц страниц), которое аналогичным образом препятствует выполнению каких-либо действий или может быть вызвано каким-то условием, которое каким-то образом просто предотвращает "дальнейшие операции" - возможно, новые процессы не могут быть запущены, возможно, отображение не может быть обновлено, возможно, системе просто не хватило места для хранения.

В этих последних ситуациях ОС все еще может функционировать в определенных пределах и, по крайней мере, может завершать дисковые операции, которые выполнялись, красиво закрывать файлы и т.д. Кроме того, если возможно немного больше функций, ОС может сообщить различным процессам приложения о необходимости чистого отключения.

Но даже если система выйдет из строя "жестко", система в целом и отдельные приложения могут поддерживать систему "журналов" и / или "контрольных точек", позволяющую восстановить состояние системы в целом и отдельных приложений. в "атомную" точку, где все является "внутренне непротиворечивым", и где минимум важных данных был потерян.

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

Что касается сбоев питания, в частности, может быть или не быть предварительного уведомления, и "предварительное" предупреждение может составлять доли секунды или (с ИБП или неисправной батареей ноутбука) несколько минут. Что можно сделать, зависит от количества предупреждений.

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

[И обратите внимание, что в прежние времена, когда память создавалась с помощью магнитных "ядер", ОЗУ сохранялась при потере питания (хотя определенное слово, читаемое / записываемое при сбое питания, могло быть повреждено). Это облегчало восстановление этих старых систем после сбоя питания.]

Однако с чем-то, напоминающим ИБП (который может дать от нескольких минут до нескольких часов дополнительной мощности), есть еще несколько вариантов. Один из них - просто выключить систему, как если бы вы запросили "выключение". Это приводит к тому, что каждое приложение завершает себя, а затем система в целом записывает постоянные таблицы и завершает работу. Это может занять много времени (как я уверен, многие из вас заметили). Но также можно использовать стратегию гибернации, при которой ОЗУ записывается на диск в виде одного блока, а затем система выключается. В сценарии "гибернации" при восстановлении питания ОЗУ считывается обратно точно в то место, откуда оно было записано, несколько бит здесь и там переворачиваются, а затем выполнение возобновляется с того места, где оно было остановлено.

В некоторых старых системах "большого железа" для аварийного отключения использовалась стратегия полу-гибернации: память выписывалась, как указано выше, но при восстановлении питания и считывании памяти происходило бы стандартное отключение. Это было сделано из-за того, что некоторые биты состояния системы (особенно в контроллерах ввода / вывода) не могли быть надежно сохранены / восстановлены для продолжения работы.

6

У меня сложилось впечатление, что, когда компьютер выходит из строя, что-то идет не так, и он больше не может работать.

Да, это абсолютно верно. Однако, с логической точки зрения, ваша программа не работает без ограничений на компьютере. Программа работает под операционной системой!

Мне было интересно, как компьютер может сохранять вещи, прежде чем он выходит из строя? Действительно ли компьютер способен знать, когда произойдет сбой (и, таким образом, сообщить всем процессам: «Сохраните как можно скорее, потому что я вот-вот произойдет сбой»)?

Что ж, в случае BSOD или паники ядра операционная система определила, что произойдет действительно небезопасная вещь (неверный указатель памяти, перезапись некоторой памяти, выделенной для ядра ОС, доступ к несуществующему оборудованию и т.д.). .). В этом случае операционная система призывает все процессы остановить выполнение, сохраняет содержимое ОЗУ на диск (поскольку ОС также отвечает за управление распределением памяти) и безопасно выключает или перезагружает компьютер.

Сами отдельные приложения аварийно завершают работу, когда программа создает необработанное исключение, которое распространяется в операционную систему. В этом случае ОС остановит выполнение программы и закроет все открытые дескрипторы памяти / файла.

В обоих вышеописанных случаях выполнение программы обычно не завершается изящно. В этих случаях это зависит от отдельных приложений, чтобы восстановить свои собственные данные, так как они внезапно просто "перестают" выполнять.

Если нет, то как возможно, что такие программы, как Chrome и Microsoft Word, могут предлагать "восстановление" служб после сбоя компьютера?

IIRC, оба этих приложения периодически сохраняют состояния приложения на диск, чтобы предотвратить потерю данных в случае возникновения вышеупомянутого условия. Например, Word автоматически сохраняет резервную копию вашего текущего рабочего документа каждые несколько минут, так что в случае внезапной полной перезагрузки вы все равно сможете восстановить свои данные (дать или занять несколько минут работы) без необходимости сделал что-нибудь.

Опять же, как разработчик, вы несете ответственность за то, чтобы ваше приложение могло справиться с этими ситуациями.

3

да, процесс восстановления данных не только для компьютерных сбоев, но и для отключений питания, программных сбоев, выхода без сохранения и многого другого ..

То, что вы сказали, правда: компьютер не может «знать», когда он собирается аварийно завершить работу, в случае Word он периодически автоматически сохраняет данные, чтобы он мог восстановить эти данные. В случае Chrome, он, вероятно, хранит информацию для каждой вкладки где-то и удаляет ее при успешном выходе, или когда начинается новый и другой сеанс ... или, возможно, и другими способами ... в любом случае, таким образом, если он этого не сделал закончив успешный выход, у него есть данные для восстановления.

Я (очевидно) не работаю на Microsoft или Google, но это, вероятно, так (или близко), как это работает.

2

Как говорит @bamboom , существует несколько разных типов "компьютерных" сбоев, которые нужно обрабатывать по-разному. Фактически отключение питания очень отличается от, скажем, целочисленного деления на ноль ошибок.

Поскольку многие языки программирования также поддерживают исключения (контролируемое переход к обработчику ошибок, когда что-то идет не так), существует возможность иметь обработчик ошибок верхнего уровня для всего приложения, который может сохранять состояние приложения (включая любые открытые документы, сделанные изменения). и т. д.) при возникновении необработанной ошибки приложения. Идея состоит в том, чтобы попытаться прочитать все это обратно при перезапуске приложения. В зависимости от типа ошибки и того, как именно она реализована, она не всегда работает, и, конечно, каждое отдельное приложение может сделать что-то значимое перед лицом ошибки и с полученными данными - но это может быть Удивительно эффективная стратегия, помогающая пользователю восстановиться после сбоя с минимальным количеством потерянной работы.

2

Я хотел бы, чтобы точка низкого уровня здесь, так как есть тег файловой системы.

Вы могли бы вспомнить ОС Windows, которая использовала файловую систему FAT/FAT16/FAT32. Иногда возникали проблемы, когда пользователь сталкивался с отключением питания, и вся система выходила из строя. После попытки перезагрузки было бы сказано, что файл отсутствует и загрузка невозможна. Это произошло из-за того, что FAT32 не отслеживал операции, которые он выполнял транзакционным способом.

В отличие от этого, более новая файловая система NTFS получила журнальную поддержку своей инфраструктуры, что означает, что на низком уровне информации об уровне доступа к ОС и аппаратному обеспечению будет храниться стабильное безопасное состояние путем записи любых действий, которые будут совершены.

2

Программа может записать флаг на диск, который просто говорит что-то вроде «При загрузке, если этот флаг установлен, значит, что-то пошло не так». При загрузке этот флаг проверяется, чтобы увидеть, установлен ли он. Если это так, программа знает, что что-то пошло не так.

Флаг всегда работает, потому что он может быть установлен, как только программа запускается, и выключается, когда программа завершается нормально. Если программа завершает работу с неожиданной ошибкой, например, при неожиданном отключении компьютера, флаг все равно будет установлен, поскольку он не завершился нормально. Затем программа может сказать, что она не выходила нормально при последнем запуске.

1

Вы можете говорить о закрытии ОС из-за потери питания. Это, возможно, является своего рода крахом.

Источник питания информирует материнскую плату (я полагаю, через сигнальный провод) о любом длительном прерывании его входа, о надлежащем настенном переменном токе, заблаговременно до того, как он остановит свой выход, который является надлежащей подачей постоянного тока на материнскую плату. Он может сделать это, потому что он хранит свое электричество в больших конденсаторах. ОС получает этот сигнал в виде аппаратного прерывания.

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

Одним из больших преимуществ файловой системы с буферизацией записи является то, что сортировка записей может уменьшить перемещения рычагов на жестких дисках, делая их все менее и менее удаленными.

Это похоже на то, что говорит @oleksii в своем ответе, за исключением того, что в файловой системе с буфером записи завершенные транзакции обычно не передаются немедленно, а просто буферизируются. В случае сбоя питания завершенные транзакции следует перенести на диск.

1

В некоторых приложениях в некоторых операционных системах можно подключиться к таким сигналам, как ошибки сегментации, указывающие на нарушения доступа к памяти. В этом случае простая процедура может сохранить как можно больше данных. Являются ли эти данные пригодными для использования, это другой вопрос - сбой, возможно, повредил их. Хотя приложение может продолжать работать после прерывания сигнала, это не рекомендуется, поскольку оно может находиться в нестабильном состоянии с поврежденной памятью, что может вызвать дальнейшие проблемы.

Другие приложения используют автосохранение или их комбинацию - это зависит от потребностей программы и поддержки платформы для перехвата этих сигналов.

1

Сбой системы - это просто еще одна процедура, которая запускается ОС. Причина сбоя в том, что программа или библиотека не удалось загрузить или не загрузились должным образом и может нанести непоправимый вред системным файлам. Таким образом, в качестве меры предосторожности, Windows принудительно завершает работу / перезапускает и останавливает всю запись в системные файлы, прежде чем разрешить редактирование этих файлов программой / библиотекой правонарушителей.

Перед выключением / перезапуском он выполняет те же функции, что и обычное выключение / перезапуск: сохранение системных файлов и т.д.

Что касается отдельных приложений (Word/Chrome), сохраняющих ваш "Прогресс", то это внутренняя функция приложения, сохраняющая ваш прогресс через определенные промежутки времени (которые вы обычно можете изменить в настройках программы). Если у вас происходит сбой приложения / системы, после перезагрузки он может посмотреть этот файл и спросить вас, хотите ли вы восстановить сеанс.

0

Приложения могут ловить сигналы в C и сохранять определенные данные. Один сигнал, который вы можете получить случайно, - это арифметическое исключение SIGFPE с плавающей точкой (ANSI). Ошибки включают деление на ноль и переполнение. Другой сигнал - SIGINT, который вызывается нажатием Ctrl +C на консоли или терминале, который убивает приложение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .