У меня сложилось впечатление, что, когда компьютер выходит из строя, что-то идет не так, и он больше не может работать.
Мне было интересно, как компьютер может сохранять вещи, прежде чем он выходит из строя?
Действительно ли компьютер способен знать, когда произойдет сбой (и, таким образом, сообщить всем процессам: « Сохранить как можно скорее, потому что я собираюсь дать сбой »)?
Если нет, то как это возможно , что такие программы , как Chrome
и Microsoft Word
может предложить «восстановление» услуги после того, как компьютер вышел из строя?
windows
filesystems
crash
restore
Pacerier
источник
источник
Ответы:
Когда компьютер «выходит из строя», это может происходить, например, из-за «внезапного» сбоя питания (в этом случае ничего не может быть сделано), это может быть из-за какого-то неприятного внутреннего события (например, поврежденных таблиц страниц), которое аналогичным образом препятствует выполнению каких-либо действий или может быть вызвано каким-то условием, которое каким-то образом просто предотвращает «дальнейшие операции» - возможно, новые процессы не могут быть запущены, возможно, отображение не может быть обновлено, возможно, системе просто не хватило места для хранения.
В этих последних ситуациях ОС все еще может функционировать в определенных пределах и, по крайней мере, может завершать дисковые операции, которые продолжались, красиво закрывать файлы и т. Д. Кроме того, если возможно немного больше функций, ОС может сообщить различным приложениям процессы, чтобы закрыть себя чисто.
Но даже если система выйдет из строя "жестко", система в целом и отдельные приложения могут поддерживать систему "журналов" и / или "контрольных точек", позволяющую восстановить состояние системы в целом и отдельных приложений. в «атомную» точку, где все является «внутренне непротиворечивым», и где был потерян минимум важных данных.
Все это достигается не одним механизмом, а функциональными уровнями на уровне системы и приложений.
Что касается сбоев питания, в частности, может быть или не быть предварительного уведомления, и «предварительное» предупреждение может составлять доли секунды или (с ИБП или неисправной батареей ноутбука) несколько минут. Что можно сделать, зависит от количества предупреждений.
В большинстве случаев при использовании системного десктопа без ИБП в лучшем случае наступает время «приостановить» операции с диском, чтобы ни один диск не находился в середине записи, когда питание наконец исчезает. Это предотвращает создание плохих секторов на диске. Раньше, когда ОЗУ было намного меньше, времени могло быть достаточно (с большими конденсаторами в блоке питания или даже, странным образом, используя энергию, накопленную в роторе дисковода для выработки электроэнергии), чтобы записать ОЗУ на диск перед подачей питания упал, но эта возможность в значительной степени исчезла, когда объем оперативной памяти увеличился до 100M или около того.
[И обратите внимание, что в прежние времена, когда память создавалась с помощью магнитных «ядер», ОЗУ сохранялась при потере питания (хотя определенное слово, читаемое / записываемое при сбое питания, могло быть повреждено). Это облегчило восстановление этих старых систем после сбоя питания.]
Однако с чем-то похожим на ИБП (который может дать от нескольких минут до нескольких часов дополнительной мощности), есть еще несколько вариантов. Один из них - просто выключить систему, как если бы вы запросили «выключение». Это приводит к тому, что каждое приложение завершает себя, а затем система в целом записывает постоянные таблицы и завершает работу. Это может занять много времени (как я уверен, многие из вас заметили). Но также можно использовать стратегию гибернации, при которой ОЗУ записывается на диск как один блок, а затем система выключается. В сценарии «гибернации» при восстановлении питания ОЗУ считывается обратно точно в то место, откуда оно было записано, несколько бит здесь и там переворачиваются, а затем выполнение возобновляется с того места, где оно было остановлено.
В некоторых старых системах «большого железа» для аварийного отключения использовалась стратегия полу-гибернации: память выписывалась, как указано выше, но при восстановлении питания и считывании памяти происходило бы стандартное отключение. Это было сделано из-за того, что некоторые биты состояния системы (особенно в контроллерах ввода / вывода) не могли быть надежно сохранены / восстановлены для продолжения работы.
источник
Chrome и Microsoft Word периодически сохраняют текущее состояние во время работы. Если происходит сбой приложения или компьютера, когда приложения перезапускаются, они ищут сохраненное состояние на диске и восстанавливают его для вас. Им не нужно предсказывать аварию; они постоянно спасают ваше государство на случай, если что-то пойдет не так.
источник
РЕДАКТИРОВАТЬ: Это работает только при сбое приложения, а не Windows.
Начиная с Windows Vista, появился новый API, который позволяет Windows вызывать специальную функцию в приложении при сбое, поэтому он может попытаться восстановить любые данные до его закрытия. Это работает так:
RecoverData()
RecoverData()
в приложенииRecoverData()
пытается извлечь данные о текущем открытом документе, в то же время он продолжает пинговать Windows, сообщая, что все еще занят восстановлением.RecoverData()
завершения / тайм-аута / прекращения проверки связи Windows завершает работу приложения и перезапускает его.Дополнительная информация: http://msdn.microsoft.com/en-us/library/windows/desktop/aa373351(v=VS.85).aspx
источник
RecoverData()
?Ну, они просто сохраняют текущее состояние, прежде чем они терпят крах. Как автоматическое сохранение каждые X секунд.
Я думаю, что действительно нужно различать:
источник
Это зависит от серьезности аварии. Очень серьезный сбой (на самом нижнем уровне компьютера) приведет к тому, что компьютер просто остановится. Единственная сохраненная работа - каждое приложение автоматически сохраняет свои данные периодически.
Для менее серьезных сбоев компьютер предупредит каждую программу о необходимости завершения работы. Если программа прослушивает это сообщение, то программа сохраняет текущие данные. Однако не все программы обращают внимание на это сообщение.
источник
Программы сохраняют свое состояние периодически в файле на диске. Компьютер не способен это знать. Фактически, аварийный дамп даже не выполняется с помощью драйвера диска - система просто выгружает всю память.
источник
Да, это абсолютно верно. Однако, с логической точки зрения, ваша программа не работает без ограничений на компьютере. Программа работает под операционной системой!
Что ж, в случае BSOD или паники ядра операционная система определила, что произойдет действительно небезопасная вещь (неверный указатель памяти, перезапись некоторой памяти, выделенной для ядра ОС, доступ к несуществующему оборудованию и т. Д.). .). В этом случае операционная система призывает все процессы остановить выполнение, сохраняет содержимое ОЗУ на диск (поскольку ОС также отвечает за управление распределением памяти) и безопасно выключает или перезагружает компьютер.
Сами отдельные приложения аварийно завершают работу, когда программа создает необработанное исключение, которое распространяется в операционную систему. В этом случае ОС остановит выполнение программы и закроет все открытые дескрипторы памяти / файла.
В обоих вышеупомянутых случаях выполнение программы обычно не завершается изящно. В этих случаях это зависит от отдельных приложений, чтобы восстановить свои собственные данные, так как они внезапно просто «перестают» выполнять.
IIRC, оба этих приложения периодически сохраняют состояния приложения на диск, чтобы предотвратить потерю данных в случае возникновения вышеупомянутого условия. Например, Word автоматически сохраняет резервную копию вашего текущего рабочего документа каждые несколько минут, так что в случае внезапной полной перезагрузки вы все равно можете восстановить свои данные (дать или занять несколько минут работы) без необходимости сделал что-нибудь.
Опять же, как разработчик, вы несете ответственность за то, чтобы ваше приложение могло справиться с этими ситуациями.
источник
kindall
сказано, они не восстанавливаются (поскольку, если вы действительно восстановите ОЗУ, вы окажетесь в том же состоянии выполнения, что и привело к аварийному завершению работы компьютера!). Вы можете изменить то, что записано на диск в Windows, в Свойствах системы -> Дополнительно -> Запуск и восстановление. И опять же, как ужеkindall
говорилось, эта информация в основном полезна для разработчиков, пытающихся определить причину ошибки.да, процесс восстановления данных не только для компьютерных сбоев, но и для отключений питания, программных сбоев, выхода без сохранения и многого другого ..
То, что вы сказали, правда: компьютер не может «знать», когда он собирается аварийно завершить работу, в случае Word он периодически автоматически сохраняет данные, чтобы он мог восстановить эти данные. В случае Chrome, он, вероятно, хранит информацию для каждой вкладки где-нибудь и удаляет ее при успешном выходе, или когда начинается новый и другой сеанс ... или, возможно, и другими способами ... в любом случае, таким образом, если он этого не сделал закончив успешный выход, у него есть эти данные для восстановления.
Я (очевидно) не работаю на Microsoft или Google, но это, вероятно, так (или близко), как это работает.
источник
Программа может записать флаг на диск, который просто говорит что-то вроде «При загрузке, если этот флаг установлен, значит, что-то пошло не так». При загрузке этот флаг проверяется, чтобы увидеть, установлен ли он. Если это так, программа знает, что что-то пошло не так.
Флаг всегда работает, потому что он может быть установлен, как только программа запускается, и выключается, когда программа завершается нормально. Если программа завершает работу с неожиданной ошибкой, например, при неожиданном отключении компьютера, флаг все равно будет установлен, поскольку он не завершился нормально. Затем программа может сказать, что она не выходила нормально при последнем запуске.
источник
Как говорит @bamboom , существует несколько разных типов «компьютерных сбоев», которые нужно обрабатывать по-разному. Фактически отключение питания очень отличается от, скажем, целочисленного деления на ноль ошибок.
Поскольку многие языки программирования также поддерживают исключения (контролируемое переход к обработчику ошибок, когда что-то идет не так), существует возможность иметь обработчик ошибок верхнего уровня для всего приложения, который может сохранять состояние приложения (включая любые открытые документы, сделанные изменения). и т. д.) при возникновении необработанной ошибки приложения. Идея состоит в том, чтобы попытаться прочитать все это после перезапуска приложения. В зависимости от типа ошибки и того, как именно она реализована, она не всегда работает, и, конечно, каждое отдельное приложение должно сделать что-то значимое перед лицом ошибки и с полученными данными - но это может быть Удивительно эффективная стратегия, помогающая пользователю восстановиться после сбоя с минимальным количеством потерянной работы.
источник
Я хотел бы, чтобы точка низкого уровня здесь, так как есть тег файловой системы.
Вы могли бы вспомнить ОС Windows, которая использовала файловую систему FAT / FAT16 / FAT32. Иногда возникали проблемы, когда пользователь сталкивался с отключением питания, и вся система выходила из строя. После попытки перезагрузки было бы сказано, что файл отсутствует и загрузка невозможна. Это произошло из-за того, что FAT32 не отслеживал операции, которые он выполнял транзакционным способом.
В отличие от этого, более новая файловая система NTFS получила журнальную поддержку своей инфраструктуры, что означает, что на низком уровне ОС и информации уровня доступа к аппаратному обеспечению информация будет храниться в стабильном безопасном состоянии путем записи любых действий, которые будут приняты.
источник
В некоторых приложениях в некоторых операционных системах можно подключиться к таким сигналам, как ошибки сегментации, указывающие на нарушения доступа к памяти. В этом случае простая процедура может сохранить как можно больше данных. Являются ли эти данные пригодными для использования, это другой вопрос - сбой, возможно, повредил их. Несмотря на то, что приложение может продолжать работать после прерывания сигнала, это не рекомендуется, поскольку оно может находиться в нестабильном состоянии с поврежденной памятью, что может вызвать дальнейшие проблемы.
Другие приложения используют автосохранение или их комбинацию - это зависит от потребностей программы и поддержки платформы для перехвата этих сигналов.
источник
Сбой системы - это просто еще одна процедура, которая запускается ОС. Причина сбоя в том, что программа или библиотека не удалось загрузить или не загрузились должным образом и может нанести непоправимый вред системным файлам. Таким образом, в качестве меры предосторожности, Windows принудительно завершает работу / перезапускает и останавливает всю запись в системные файлы, прежде чем разрешить редактирование этих файлов программой / библиотекой правонарушителей.
Перед выключением / перезапуском он выполняет те же функции, что и обычное выключение / перезапуск: сохранение системных файлов и т. Д.
Что касается отдельных приложений (Word / Chrome), сохраняющих ваш «Прогресс», то это внутренняя функция приложения, сохраняющая ваш прогресс через определенные промежутки времени (которые обычно можно также изменить в настройках программы). Если у вас происходит сбой приложения / системы, после перезагрузки он может посмотреть этот файл и спросить вас, хотите ли вы восстановить сеанс.
источник
Вы можете говорить о закрытии ОС из-за потери питания. Это, возможно, является своего рода крахом.
Блок питания информирует материнскую плату (я полагаю, через сигнальный провод) о любом длительном прерывании его входа, о правильном токе переменного тока в стенке, заблаговременно до того, как он остановит свой выход, который является надлежащей подачей постоянного тока на материнскую плату. Это можно сделать, потому что он хранит свое электричество в больших конденсаторах. ОС получает этот сигнал в виде аппаратного прерывания.
В течение этого длительного интервала у файловой системы с буферизацией записи достаточно времени для передачи всех буферизованных записей на постоянный физический носитель, а также для выполнения некоторых других процедур отключения.
Одним из больших преимуществ файловой системы с буферизацией записи является то, что сортировка записей может уменьшить перемещения рычагов на жестких дисках, делая их все менее и менее удаленными.
Это похоже на то, что @oleksii говорит в своем ответе, за исключением того, что в файловой системе с буфером записи завершенные транзакции обычно не передаются немедленно, а просто буферизируются. В случае сбоя питания завершенные транзакции следует перенести на диск.
источник
Приложения могут ловить сигналы в C и сохранять определенные данные. Один сигнал, который вы можете получить случайно, - это арифметическое исключение SIGFPE с плавающей точкой (ANSI). Ошибки включают деление на ноль и переполнение. Другой сигнал - SIGINT, который вызывается нажатием Ctrl + C на консоли или терминале, который убивает приложение.
источник