Як комп’ютер здатний зберігати речі до того, як він вийде з ладу?


52

У мене було враження, що коли комп'ютер вийшов з ладу, щось пішло не так і він більше не може працювати.

Мені було цікаво, як комп’ютер здатний зберігати речі до того, як він вийде з ладу?

Чи справді комп'ютер здатний знати, коли він вийде з ладу (і тим самим повідомити всі процеси: " Зберегти якнайшвидше, тому що я збираюся вийти з ладу ")?

Якщо ні, то як такі програми можуть подобатися Chromeта Microsoft Wordпропонувати послуги "відновлення" після того, як комп'ютер вийшов з ладу?


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

Як аварійні ліхтарі можуть загорітися, коли живлення вимкнено?
JoelFan

@JoelFan вони не роблять, якщо ваш акумулятор / генератор мертвий = P
Mechaflash

Відповіді:


6

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

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

Але навіть якщо система впаде "важко", система в цілому та окремі додатки, можливо, підтримували систему "журналів" та / або "контрольних точок", щоб дозволити відновлення стану системи в цілому та окремих програм до "атомної" точки, де все "внутрішньо послідовно", і де втрачено мінімум важливих даних.

Це все здійснюється не за допомогою одного механізму, а з шарами функціональності на системному та прикладному рівні.

Що стосується відключення електроживлення, то попереднє сповіщення може бути, а може і не бути, і попередження про попередження може бути часткою секунди або (з ДБЖ або несправним акумулятором ноутбука) кілька хвилин. Що можна зробити, залежить від суми попередження.

У більшості випадків із системою настільних комп’ютерів без ДБЖ, в кращому випадку є час "припинити" дії диска, щоб жоден диск не опинився в середині запису, коли потужність остаточно зникне. Це запобігає генерації поганих секторів на диску. Раніше, коли оперативної пам'яті було значно менше, могло бути достатньо часу (з великими конденсаторами в блоці живлення, або навіть, як не дивно, використовуючи енергію, що зберігається в роторі дисковода для отримання електроенергії), щоб записати оперативну пам'ять на диск до живлення впала, але ця можливість в значній мірі зникла, коли оперативна пам'ять зросла більше, ніж 100 Мб.

[І зауважте, що за старих часів, коли спогади робили з магнітними "ядрами", оперативна пам'ять за своєю суттю зберігалася при втраті живлення (хоча певне слово, яке читається / пишеться, коли живлення не вдається, може бути пошкоджено). Це полегшило відновлення старих систем після відключення електроенергії.]

Однак, щось подібне до ДБЖ (що може давати десь від декількох хвилин до декількох годин додаткової потужності) є ще кілька варіантів. Одне полягає в тому, щоб просто вимкнути систему, як ніби ви вимагали "вимкнути живлення". Це призводить до того, що кожна програма закінчується, і тоді система в цілому виписує постійні таблиці та вимикається. Це може зайняти тривалий час (як я впевнений, що багато хто з вас помітили). Але також можливо використовувати "сплячу" стратегію, де оперативна пам'ять записується на диск як єдиний блок, а потім система вимикається. У сценарії "сплячого режиму" при відновленні потужності оперативна пам'ять зачитується туди, куди вона написана, кілька біт тут і там шипляться, а потім виконання поновлюється там, де вона припинилася.

У деяких старих системах з "великим залізам" для аварійного відключення використовувалася стратегія напівзахисного режиму: пам'ять виписувалася б, як було сказано вище, але коли відновлення живлення та зчитування пам’яті відбудеться стандартне відключення. Це було зроблено тому, що деякі біти стану системи (особливо в контролерах вводу / виводу) не вдалося надійно зберегти / відновити, щоб дозволити продовжувати роботу.


82

Chrome і Microsoft Word періодично зберігають поточний стан під час роботи. Якщо програма або комп’ютер виходять з ладу, коли програми перезапускаються, вони шукають збережений стан на диску та відновлять його для вас. Їм не потрібно передбачати аварії; вони постійно рятують вашу державу, якщо щось піде не так.


10
Це лише частково правда. Тепер ОС надають рамки, щоб допомогти програмам відновитися після винятку.
surfasb

3
@surfasb: Чи можете ви бути більш конкретними? Ми завжди могли вловлювати сигнали в системах, схожих на Unix, але програміст додатків робити щось з цим.
Дітріх Епп

5
Ця відповідь правильна. Більшість програм із відновленням помилок періодично зберігають свої дані. Операційна система не може знати, коли вона вийде з ладу. І коли це дізнається, вже пізно.
Богдакуту

1
@surfasb, запитання про збій комп'ютера (імовірно, ядро), а не програма, яка отримує виняток, який, як правило, або обробляється, і все нормально, або в кращому випадку ядро ​​процесу скидає, а не зберігає ваші документи.
psusi

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, правда, чи не правда, що якщо не програма hte, яка виходить з ладу, а сама система Windows, яка виходить з ладу, комп'ютер не має можливості дзвонити RecoverData()?
Пейсьєр

12
ОП запитує про збій комп'ютера (ОС), а не про збої програми, тому ця відповідь не має значення.
vitaut

Щоправда, у випадку з BSOD це не спрацює.
ZippyV

Який дурний API для MS додати. Після того, як ви досягнете цього пункту, ви не можете довіряти програмі для збереження будь-яких даних, саме тому програми розроблялися десятиліттями для збереження даних, перш ніж щось піде не так.
psusi

16

Ну, вони просто збережуть поточний стан перед тим, як вони впадуть. Як автоматичне збереження кожні X секунд.

Я думаю, що насправді треба диференціювати:

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

Так, я говорив про більш серйозні збої, такі як збої ОС / обладнання
Pacerier

10

Це залежить від тяжкості аварії. Дуже сильний збій (на найнижчому рівні комп'ютера) призведе до того, що комп'ютер просто зупиниться. Єдина робота, яка зберігається, - це кожен додаток автоматично зберігати свої дані періодично.

За менш серйозних збоїв комп'ютер попередить кожну програму про необхідність її вимкнення. Якщо програма слухає це повідомлення, саме тут програма збереже поточні дані. Однак не всі програми звертають увагу на це повідомлення.


1
Не думаю, що остання частина насправді можлива. Windows дає вам BSoD лише у тому випадку, коли він виявляє виняток у режимі ядра або іншу фатальну помилку, яка означає, що деякі дані в просторі адреси ядра пошкоджені. Оскільки програми режиму ядра (драйвери тощо) мають необмежений доступ до пам'яті, помилку неможливо легко виділити до компонентів, тому вся система повинна бути відключена в режимі ядра. Сигналізація програм користувача для збереження даних по суті означає відновлення значної частини функціональності ядра, що дуже небезпечно.
billc.cn

2
Остання частина, схоже, стосується збоїв у просторі користувачів, а не BSoD.
3Doubloons

8

Програми зберігають їх періодично у файлі на диску. Комп'ютер не здатний цього знати. Насправді, дамп аварійного завершення роботи навіть не виконується за допомогою драйвера диска - система просто видаляє всю пам'ять.


Пейджинг здійснюється з драйвером диска - без цього ядро ​​не знало б, як записати на диск.
psusi

@psusi Коли система виходить з ладу, файл сторінки - це єдине місце, де ядро ​​знає, що на нього можна сміливо писати.
kinokijuf

Так, і це насправді робить запис через драйвер диска.
psusi

1
Ні. Це відбувається через спеціальний драйвер "dump_atapi.sys" (замінити атапі для вашого SCSI-контролера), а не стандартний драйвер диска. Я думаю, що він навіть використовує Int 13h.
kinokijuf

6

У мене було враження, що коли комп'ютер вийшов з ладу, щось пішло не так і він більше не може працювати.

Так, це цілком правда. Однак, з логічної точки зору, ваша програма не працює без обмежень на комп'ютері. Програма працює під операційною системою!

Мені було цікаво, як комп’ютер здатний зберігати речі до того, як він вийде з ладу? Чи справді комп’ютер здатний знати, коли він вийде з ладу (і тим самим повідомити всі процеси: "Зберегти якнайшвидше, тому що я збираюся вийти з ладу")?

Що ж, у випадку паніки BSOD або ядра, операційна система визначила, що дійсно відбудеться небезпечна річ (недійсний покажчик пам'яті, перезапис деякої пам'яті, виділеної на ядро ​​ОС, доступ до неіснуючого обладнання та ін.) .). У цьому випадку операційна система закликає всі процеси зупинити виконання, зберігає вміст ОЗУ на диску (оскільки ОС також відповідає за управління розподілом пам'яті) і безпечно вимикає або перезавантажує комп'ютер.

Індивідуальні програми самі виходять з ладу, коли є нерегульований виняток, кинутий програмою, який поширюється в операційну систему. У цьому випадку ОС припинить виконання програми та закриє будь-які ручки відкритої пам'яті / файлів.

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

Якщо ні, то як такі програми, як Chrome та Microsoft Word, можуть пропонувати послуги "відновлення" після того, як комп'ютер вийшов з ладу?

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

Знову ж таки, як розробник, ви відповідаєте за те, щоб ваша програма могла впоратися з цими ситуаціями.


"У цьому випадку операційна система закликає всі процеси зупинити виконання, зберігає вміст ОЗУ на диску і безпечно вимикає або перезавантажує комп'ютер." - вміст оперативної пам’яті, який зберігається на диску, коли вони «відновлюються»?
Печер'є

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

@Pacerier , як kindallзазначено, що вони не отримують відновлені (так як якщо ви зробили відновити RAM, ви б в тому ж стані виконання, що викликав комп'ютер до збою в першу чергу!). Ви можете змінити те, що записано на диск у Windows у розділі Властивості системи -> Додатково -> Запуск та відновлення. І знову ж таки, як kindallзазначено, ця інформація в основному корисна розробникам, які намагаються визначити, що спричинило помилку.
Прорив

3

так, процес відновлення даних не лише для збоїв на комп'ютері, це для відключення електроенергії, збоїв у програмі, виходу з системи без збереження та багато іншого.

Те, що ви сказали, є правдою, комп'ютер не може «знати», коли він вийде з ладу, у випадку Word він періодично автоматично зберігає, щоб він міг відновити ці дані. У випадку з Chrome він, ймовірно, зберігає інформацію для кожної вкладки десь і видаляє її після успішного завершення, або коли починається новий і інший сеанс .. або, мабуть, і інші способи .. так чи інакше, якщо б не закінчується успішним завершенням роботи, воно має відновити ці дані.

Я (очевидно) не працюю в Microsoft чи Google, але це, мабуть, спосіб (або близький до цього).


2

Програма може записати прапор на диск, який просто каже щось на кшталт "Під час завантаження, якщо цей прапор встановлений, то щось пішло не так". Під час завантаження цей прапор перевіряється, чи встановлений він. Якщо це так, програма знає, що щось пішло не так.

Прапор завжди працює, тому що його можна встановити, як тільки програма запускається, і вимикати, коли програма нормально виходить. Якщо програма виходить з-за несподіваної помилки, як-от комп'ютер несподівано вимкнений, прапор все одно буде встановлений, оскільки він не вийшов нормально. Тоді програма може сказати, що вона не виходила нормально останній раз, коли вона була запущена.


2

Як каже @bamboom , є кілька різних типів комп'ютерних «збоїв», які доводиться обробляти по-різному. Ефективно відключення електроенергії сильно відрізняється від, скажімо, цілочисельного поділу на нульову помилку.

Оскільки багато мов програмування також підтримують винятки (контрольоване розгалуження на оброблювач помилок, коли щось піде зовсім не так), існує можливість наявності обробника помилок на найвищому рівні, який може зберегти стан програми (включаючи будь-які відкриті документи, внесені зміни тощо), коли виникає неподібна помилка програми. Тоді ідея полягає в тому, щоб спробувати прочитати все це при перезапуску програми. Залежно від типу помилки та того, як це реалізується, це не завжди працює, і, звичайно, кожен окремий додаток повинен робити щось значуще внаслідок помилки та отриманих даних - але це може бути напрочуд ефективна стратегія, яка допомагає користувачеві відновитися після аварії з мінімальною кількістю втраченої роботи.


2

Мені б хотілося, щоб тут був низький рівень, оскільки є тег файлової системи.

Ви могли б згадати ОС Windows, яка використовувала файлову систему FAT / FAT16 / FAT32. Іноді виникали проблеми, коли у користувача спостерігалось відключення електроенергії, і вся система вийшла з ладу. Після спроби перезавантажити було б сказано, що файл відсутній, і його неможливо завантажити. Це сталося тому, що FAT32 не відслідковував трансакційні операції, які він виконував.

На відміну від цього, новіша файлова система NTFS отримала журнальну підтримку своєї інфраструктури, а це означає, що на низькому рівні ОС та апаратного рівня доступу інформація зберігатиметься в стабільному безпечному стані, записуючи будь-які дії, які слід здійснити.


1

У деяких додатках на деяких операційних системах можливе підключення до таких сигналів, як помилки сегментації, що вказують на порушення доступу до пам'яті. У цьому випадку проста програма може зберегти якомога більше даних. Чи можна використовувати ці дані чи не інше питання - збій, можливо, пошкодив їх. Хоча програма може продовжувати працювати після того, як вона перериває сигнал, це не рекомендується, оскільки воно може перебувати в нестабільному стані з пошкодженою пам'яттю, що може спричинити подальші проблеми.

Інші програми використовують автоматичне збереження або комбінацію обох - це залежить від потреб програми та підтримки платформи для лову цих сигналів.


Підказка: у Windows їх немає.
kinokijuf

1

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

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

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


1

Ви можете говорити про вимкнення ОС через втрату живлення. Це, мабуть, є різновидом краху.

Блок живлення повідомляє материнську плату (я думаю, що через провід сигналізації) про будь-яке тривале переривання її входу, правильний струм змінного струму, заздалегідь він зупиняє свій вихід, а це правильна подача постійного струму на материнську плату. Це можна зробити, тому що вона зберігає свою електроенергію у великих конденсаторах. ОС отримує цей сигнал у вигляді апаратного переривання.

Протягом цього тривалого інтервалу є достатня кількість часу для файлової системи буферизації для запису всіх буферизованих записів на постійний фізичний носій інформації, а також для виконання деяких інших процедур відключення.

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

Це схоже на те, що говорить @oleksii у своїй відповіді, за винятком того, що у файловій системі буферизації запису завершені транзакції зазвичай не передаються негайно, а просто буферуються. У разі відмови живлення завершені транзакції слід перенести на диск.


0

Програми можуть вловлювати сигнали на C та зберігати певні дані. Один сигнал, який ви можете отримати випадково, - це арифметична виняток з плаваючою точкою SIGFPE (ANSI). Помилки включають поділ на нуль та перелив. Ще один сингл - SIGINT, який піднімається натисканням клавіш ctrl + C на консолі або терміналі, що вбиває додаток

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.