Как компьютер может сохранять вещи до того, как он выйдет из строя?


52

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

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

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

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


13
Мне нравится, как ответ на вопрос находится в заголовке вопроса.
Крис

Как аварийное освещение может загореться при выключенном питании?
JoelFan

@JoelFan они не, если ваша батарея / генератор разряжен = P
Mechaflash

Ответы:


6

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

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

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

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

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

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

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

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

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


82

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


10
Это только частично правда. Операционные системы теперь предоставляют платформы, помогающие приложениям восстанавливаться после исключений.
surfasb

3
@surfasb: Не могли бы вы быть более конкретным? Мы всегда могли ловить сигналы в Unix-подобных системах, но разработчик приложений должен что-то с этим сделать.
Дитрих Эпп

5
Этот ответ правильный. Большинство приложений с восстановлением после ошибок периодически сохраняют свои данные. ОС не может знать, когда она вот-вот рухнет. И когда он узнает, уже слишком поздно.
Bogdacutu

1
@surfasb, заданный вопрос о сбое компьютера (предположительно, ядра), а не о том, что приложение получает исключение, которое обычно либо обрабатывается, и все в порядке, либо, в лучшем случае, дамп ядра процесса не сохраняет ваши документы.
Псуси

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


8
+1: к сожалению, это один из самых недоиспользуемых инструментов. И, к сожалению, это не самый одобренный ответ ??
Surfasb

2
@ZippyV однако, не правда ли, что, если не происходит сбой приложения, а происходит сбой самого Windows, компьютер не может вызвать RecoverData()?
Pacerier

12
ОП спрашивает о сбое компьютера (ОС), а не о сбое приложения, поэтому этот ответ не имеет значения.
Витаут

Правда, в случае BSOD это не будет работать.
ZippyV

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

16

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

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

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

Да, я говорил о более серьезных
сбоях,

10

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

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


1
Я не думаю, что последняя часть на самом деле возможна, хотя. Windows дает BSoD только в том случае, если она обнаруживает исключение в режиме ядра или другую фатальную ошибку, которая означает, что некоторые данные в адресном пространстве ядра повреждены. Поскольку программы режима ядра (драйверы и т. Д.) Имеют неограниченный доступ к памяти, ошибку нельзя легко изолировать от компонентов, поэтому вся система должна быть отключена в режиме ядра. Сигнализация программ пользовательского пространства для сохранения данных по существу означает восстановление большей части функциональности ядра, что очень опасно.
billc.cn

2
Последняя часть, похоже, относится к сбоям в пользовательском пространстве, а не к BSoD.
3DBubloons

8

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


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

@psusi Когда система падает, файл подкачки - единственное место, где ядро ​​может безопасно писать.
киноюф

Да, и он на самом деле делает запись через драйвер диска.
Псуси

1
Нет. Это делается через специальный драйвер "dump_atapi.sys" (заменит atapi для вашего контроллера SCSI), а не стандартный драйвер диска. Я думаю, что он даже использует Int 13h.
киноюф

6

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

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

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

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

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

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

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

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

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


«В этом случае операционная система призывает все процессы остановить выполнение, сохраняет содержимое оперативной памяти на диск и безопасно выключает или перезагружает компьютер». - содержимое ОЗУ, которое сохраняется на диске, когда они «восстанавливаются»?
Pacerier

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

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

3

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

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

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


2

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

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


2

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

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


2

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

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

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


1

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

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


Подсказка: у Windows их нет.
киноюф

1

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

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

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


1

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

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

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

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

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.