W jaki sposób komputer może zapisywać rzeczy, zanim ulegnie awarii?


52

Miałem wrażenie, że gdy komputer się zawiesił, coś poszło nie tak i nie może już działać.

Zastanawiałem się, w jaki sposób komputer może zapisywać rzeczy, zanim ulegnie awarii?

Czy komputer naprawdę jest w stanie wiedzieć, kiedy się zawiesi (a tym samym informuje wszystkie procesy: „ Zapisz JAK NAJSZYBCIEJ, bo zaraz się zawieszę ”)?

Jeśli nie, to w jaki sposób programy takie Chromei Microsoft Wordmogą oferować usługi „przywracania” po awarii komputera?


13
Podoba mi się, jak odpowiedź na pytanie znajduje się w tytule pytania.
Chris

W jaki sposób światła awaryjne mogą świecić, gdy zasilanie jest wyłączone?
JoelFan

@JoelFan nie robią, jeśli bateria / generator nie działa = P
Mechaflash

Odpowiedzi:


6

Gdy komputer „ulega awarii”, może np. Być spowodowany „nagłą” awarią zasilania (w takim przypadku nic nie można zrobić), może to być spowodowane jakimś nieprzyjemnym zdarzeniem wewnętrznym (np. Uszkodzonymi tabelami stron) podobnie uniemożliwia robienie czegokolwiek, lub może wynikać z jakiegoś stanu, który po prostu uniemożliwia „dalsze operacje” - być może nie można uruchomić nowych procesów, być może wyświetlacza nie można zaktualizować, być może w systemie po prostu zabrakło pamięci.

W tych ostatnich sytuacjach system operacyjny może nadal funkcjonować, w ramach limitów, i może co najmniej dokończyć trwające operacje na dysku, ładnie zamknąć pliki itp. Ponadto, jeśli możliwe jest nieco więcej funkcji, system operacyjny może być w stanie poinformować różne aplikacje procesy zamykania się w czysty sposób.

Ale nawet jeśli system przestanie działać „twardo”, system jako całość i poszczególne aplikacje mogły utrzymywać system „dzienników” i / lub „punktów kontrolnych”, aby umożliwić przywrócenie stanu systemu jako całości i poszczególnych aplikacji do „atomowego” punktu, w którym wszystko jest „wewnętrznie spójne” i gdzie utracono minimum ważnych danych.

To wszystko nie jest osiągane za pomocą jednego mechanizmu, ale dzięki warstwom funkcjonalności na poziomie systemu i aplikacji.

W szczególności w przypadku awarii zasilania może wystąpić powiadomienie z wyprzedzeniem, a ostrzeżenie „z wyprzedzeniem” może stanowić ułamek sekundy lub (w przypadku zasilacza UPS lub niesprawnej baterii laptopa) kilka minut. To, co można zrobić, zależy od ilości ostrzeżenia.

W większości przypadków w przypadku systemu stacjonarnego bez zasilacza UPS jest w najlepszym momencie „wyciszyć” operacje dyskowe, aby żaden dysk nie był w środku zapisu, gdy w końcu zaniknie zasilanie. Zapobiega to generowaniu uszkodzonych sektorów na dysku. Kiedy pamięć RAM była znacznie mniejsza, mogło być wystarczająco dużo czasu (z dużymi kondensatorami w zasilaczu, a nawet dziwnie wykorzystując energię zgromadzoną w wirniku napędu dyskowego do wytworzenia elektryczności) na zapisanie pamięci RAM na dysku przed zasilaniem spadła, ale ta możliwość prawie zniknęła, gdy pamięć RAM wzrosła o więcej niż 100 mln.

[I zauważ, że w dawnych czasach, kiedy wspomnienia były tworzone przy pomocy magnetycznych „rdzeni”, pamięć RAM była z natury zachowana po utracie zasilania (chociaż określone słowo odczytywane / zapisywane w przypadku awarii zasilania może być uszkodzone). Ułatwiło to starym systemom odzyskanie zasilania po awarii zasilania.]

Jednak w przypadku czegoś przypominającego zasilacz UPS (który może zapewnić od kilku minut do kilku godzin dodatkowej mocy) istnieje kilka innych opcji. Jednym z nich jest po prostu zamknięcie systemu, tak jakbyś prosił o „wyłączenie zasilania”. Powoduje to, że każda aplikacja kończy się sama, a następnie system jako całość zapisuje stałe tabele i wyłącza się. Może to zająć dużo czasu (jak jestem pewien, że wielu z was zauważyło). Ale możliwe jest również zastosowanie strategii „hibernacji”, w której pamięć RAM jest zapisywana na dysk jako pojedynczy blok, a następnie system wyłączany. W scenariuszu „hibernacji” po przywróceniu zasilania pamięć RAM jest odczytywana dokładnie tam, gdzie została zapisana, kilka bitów tu i tam jest zamazanych, a następnie wykonywanie jest wznawiane od miejsca, w którym zostało przerwane.

W niektórych starszych „dużych żelaznych” systemach zastosowano pół hibernację, aby wykonać awaryjne wyłączenie: Pamięć zostanie zapisana jak wyżej, ale po przywróceniu zasilania i wczytaniu pamięci nastąpi standardowe zamknięcie. Stało się tak, ponieważ niektórych bitów stanu systemu (szczególnie w kontrolerach I / O) nie można było niezawodnie zapisać / przywrócić, aby umożliwić dalszą pracę.


82

Chrome i Microsoft Word okresowo zapisują bieżący stan podczas pracy. Jeśli aplikacja lub komputer ulegnie awarii, podczas ponownego uruchamiania aplikacji szukają zapisanego stanu na dysku i przywracają go. Nie muszą przewidywać katastrofy; ciągle ratują twój stan na wypadek, gdyby coś poszło nie tak.


10
To tylko częściowo prawda. Systemy operacyjne udostępniają teraz ramy ułatwiające aplikacjom odzyskiwanie danych po wyjątkach.
surfasb

3
@surfasb: Czy możesz być bardziej szczegółowy? Zawsze byliśmy w stanie wychwycić sygnały w systemach uniksopodobnych, ale programista aplikacji musi coś z tym zrobić.
Dietrich Epp

5
Ta odpowiedź jest poprawna. Większość aplikacji z odzyskiwaniem po błędzie okresowo zapisuje swoje dane. System operacyjny nie może wiedzieć, kiedy ma się zawiesić. A kiedy się dowie, jest już za późno.
Bogdacutu

1
@surfasb, pytanie zadane na temat awarii komputera (prawdopodobnie jądra), a nie aplikacji otrzymującej wyjątek, który ogólnie jest albo obsługiwany i wszystko jest w porządku, albo w najlepszym razie zrzuty rdzenia procesu, nie zapisuje twoich dokumentów.
psusi

62

EDYCJA: Działa to tylko w przypadku awarii aplikacji, a nie systemu Windows.

Ponieważ Windows Vista ma nowy interfejs API, który pozwala Windowsowi wywoływać specjalną funkcję w aplikacji, gdy ulega awarii, aby mógł spróbować odzyskać dane przed zamknięciem. Działa to tak:

  • Aplikacja uruchomi się
  • Aplikacja wywołuje funkcję systemu Windows: po awarii proszę wykonać RecoverData()
  • ...
  • Awaria aplikacji
  • System Windows wykonuje się RecoverData()w aplikacji
  • RecoverData() próbuje pobrać dane o aktualnie otwartym dokumencie, w międzyczasie pinguje system Windows, aby poinformować, że odzyskiwanie jest nadal zajęte.
  • Po RecoverData()zakończeniu / przekroczeniu limitu czasu / zatrzymaniu pingowania system Windows kończy aplikację i uruchamia ją ponownie.

Więcej informacji: http://msdn.microsoft.com/en-us/library/windows/desktop/aa373351(v=VS.85).aspx


8
+1: Niestety, jest to jedno z najczęściej wykorzystywanych narzędzi. I niestety, nie jest to najbardziej pozytywna odpowiedź?
surfasb

2
@ZippyV nie jest jednak prawdą, że jeśli to nie awaria aplikacji, ale samo okno ulega awarii, komputer nie ma możliwości wywoływania RecoverData()?
Pacerier

12
OP pyta o awarię komputera (OS), a nie awarię aplikacji, dlatego ta odpowiedź jest nieistotna.
vitaut

To prawda, że ​​w przypadku BSOD to nie zadziała.
ZippyV

Cóż za głupie API dla MS do dodania. Gdy do tego dojdzie, nie możesz ufać aplikacji, że zapisze jakiekolwiek dane, dlatego aplikacje zostały zaprojektowane od dziesięcioleci, aby zapisywać dane, zanim coś pójdzie nie tak.
psusi

16

Cóż, po prostu zapisują bieżący stan przed awarią. Jak automatyczne zapisywanie co X sekund.

Myślę, że naprawdę trzeba odróżnić:

  • Awaria sprzętowa: można odzyskać tylko przy poprzednich punktach kontrolnych
  • Awaria systemu operacyjnego: aplikacja nie może zapisać danych, system operacyjny może upuścić coś jak zrzut pamięci
  • Awaria aplikacji: funkcje systemu w przypadku awarii aplikacji mogą zapisywać informacje

Tak, mówiłem o poważniejszych awariach, takich jak awarie systemu / sprzętu
Pacerier,

10

To zależy od powagi awarii. Bardzo poważna awaria (na najniższym poziomie komputera) spowoduje, że komputer po prostu się zatrzyma. Jedyną zapisaną pracą jest okresowe automatyczne zapisywanie danych przez każdą aplikację.

W przypadku mniej poważnych awarii komputer ostrzega każdy program, że musi zostać zamknięty. JEŚLI program nasłuchuje tego komunikatu, w tym miejscu program zapisze bieżące dane. Jednak nie wszystkie programy zwracają uwagę na ten komunikat.


1
Nie sądzę jednak, aby ta ostatnia część była rzeczywiście możliwa. Windows daje BSoD tylko wtedy, gdy wykryje wyjątek w trybie jądra lub inny krytyczny błąd, który oznacza, że ​​niektóre dane w przestrzeni adresowej jądra są uszkodzone. Ponieważ programy trybu jądra (sterowniki itp.) Mają nieograniczony dostęp do pamięci, błędu nie można łatwo odizolować od komponentów, dlatego cały system musi zostać zamknięty w trybie jądra. Sygnalizacja programów kosmicznych użytkownika w celu zapisywania danych zasadniczo oznacza wznowienie dużej części funkcjonalności jądra, co jest bardzo niebezpieczne.
billc.cn

2
Ta ostatnia część wydaje się odnosić do awarii przestrzeni użytkownika, a nie BSoD.
3Doubloons,

8

Programy zapisują je okresowo w pliku na dysku. Komputer nie jest w stanie o tym wiedzieć. W rzeczywistości zrzut awaryjny nie jest nawet wykonywany przy użyciu sterownika dysku - system po prostu wyrzuca całą pamięć.


Stronicowanie odbywa się za pomocą sterownika dysku - bez niego jądro nie wiedziałoby, jak zapisać na dysk.
psusi

@psusi Gdy system ulega awarii, plik stronicowania jest jedynym miejscem, o którym jądro wie, że może bezpiecznie pisać.
kinokijuf

Tak, i faktycznie zapisuje za pomocą sterownika dysku.
psusi

1
Nie. Robi to za pomocą specjalnego sterownika „dump_atapi.sys” (zamiennik atapi dla kontrolera SCSI), a NIE standardowego sterownika dysku. Myślę, że nawet używa Int 13h.
kinokijuf

6

Miałem wrażenie, że gdy komputer się zawiesił, coś poszło nie tak i nie może już działać.

Tak, to jest całkowicie prawda. Jednak z logicznego punktu widzenia program nie działa bez ograniczeń na komputerze. Program działa w systemie operacyjnym!

Zastanawiałem się, w jaki sposób komputer może zapisywać rzeczy, zanim ulegnie awarii? Czy komputer naprawdę jest w stanie wiedzieć, kiedy się zawiesi (a tym samym informuje wszystkie procesy: „Zapisz JAK NAJSZYBCIEJ, bo zaraz się zawieszę”)?

Cóż, w przypadku paniki BSOD lub jądra system operacyjny stwierdził, że wydarzy się naprawdę niebezpieczna rzecz (nieprawidłowy wskaźnik pamięci, nadpisanie części pamięci przydzielonej do jądra systemu operacyjnego, dostęp do nieistniejącego sprzętu itp.) .). W takim przypadku system operacyjny wzywa wszystkie procesy do zatrzymania wykonywania, zapisuje zawartość pamięci RAM na dysku (ponieważ system operacyjny jest również odpowiedzialny za zarządzanie przydziałem pamięci) i bezpiecznie wyłącza lub ponownie uruchamia komputer.

Poszczególne aplikacje ulegają awarii, gdy program generuje nieobsługiwany wyjątek, który rozprzestrzenia się w systemie operacyjnym. W takim przypadku system operacyjny przerwie wykonywanie programu i zamknie wszystkie otwarte uchwyty pamięci / plików.

W obu powyższych przypadkach wykonywanie programu zwykle nie kończy się płynnie. W takich przypadkach odzyskanie własnych danych zależy od poszczególnych aplikacji, ponieważ nagle po prostu „przestają” działać.

Jeśli nie, to w jaki sposób programy takie jak Chrome i Microsoft Word mogą oferować usługi „przywracania” po awarii komputera?

IIRC, obie te aplikacje okresowo zapisują stany aplikacji na dysku, aby zapobiec utracie danych, jeśli wystąpi wyżej wymieniony warunek. Na przykład program Word automatycznie zapisuje kopię zapasową bieżącego dokumentu roboczego co kilka minut, aby w razie nagłego ponownego uruchomienia komputera można było nadal odzyskać dane (dać lub zająć kilka minut pracy) bez konieczności zrobiłem cokolwiek.

Jednak jako programista ponosisz odpowiedzialność za zapewnienie, że Twoja aplikacja poradzi sobie z takimi sytuacjami.


„W takim przypadku system operacyjny wzywa wszystkie procesy do zatrzymania wykonywania, zapisuje zawartość pamięci RAM na dysku i bezpiecznie wyłącza lub ponownie uruchamia komputer”. - zawartość pamięci RAM, które są zapisywane na dysku, kiedy zostaną „przywrócone”?
Pacerier

1
Nie postępują normalnie. Jeśli jednak komputer regularnie ulega awarii, wykwalifikowany programista może użyć tego pliku do ustalenia przyczyny.
kindall

@Pacerier jak kindallwspomniano, one nie są przywracane (ponieważ jeśli nie przywrócić pamięć RAM, można byłoby w takim samym stanie egzekucji, który spowodował awarię komputera w pierwszej kolejności!). Możesz zmienić to, co jest zapisywane na dysk w systemie Windows w obszarze Właściwości systemu -> Zaawansowane -> Uruchamianie i odzyskiwanie. I znowu, jak już kindallwspomniano, te informacje są najbardziej przydatne dla programistów próbujących ustalić, co spowodowało błąd.
Przełom

3

tak, proces przywracania danych dotyczy nie tylko awarii komputera, ale także awarii zasilania, awarii programu, zamykania bez zapisywania i wiele więcej ...

To, co powiedziałeś, jest prawdą, komputer nie może „wiedzieć”, kiedy się zawiesi, w przypadku programu Word okresowo zapisuje się automatycznie, aby móc przywrócić te dane. W przypadku Chrome prawdopodobnie przechowuje gdzieś informacje o każdej karcie i usuwa je po pomyślnym zamknięciu, lub gdy rozpoczyna się nowa i inna sesja ... lub prawdopodobnie także w inny sposób ... tak czy inaczej, jeśli tak nie było kończy się pomyślnym zakończeniem, ma dane do przywrócenia.

Nie (oczywiście) nie pracuję dla Microsoft ani Google, ale prawdopodobnie tak to działa (lub jest bliskie).


2

Program może zapisać na dysku flagę, która mówi po prostu coś takiego: „Po uruchomieniu, jeśli ta flaga jest ustawiona, coś poszło nie tak”. Podczas uruchamiania flaga jest sprawdzana, aby sprawdzić, czy jest ustawiona. Jeśli tak, program wie, że coś poszło nie tak.

Flaga zawsze działa, ponieważ można ją ustawić zaraz po uruchomieniu programu i wyłączyć, gdy program zakończy się normalnie. Jeśli program zakończy działanie z nieoczekiwanym błędem, takim jak nieoczekiwane wyłączenie komputera, flaga nadal będzie ustawiona, ponieważ nie zakończyła się normalnie. Następnie program jest w stanie stwierdzić, że nie wyszedł normalnie przy ostatnim uruchomieniu.


2

Jak mówi @bamboom , istnieje kilka różnych rodzajów awarii komputera, które należy traktować inaczej. W rzeczywistości zanik zasilania jest bardzo różny od, powiedzmy, podziału na liczby całkowite przez błąd zerowy.

Ponieważ wiele języków programowania obsługuje również wyjątki (kontrolowane rozgałęzianie do procedury obsługi błędów, gdy coś pójdzie zupełnie nie tak), istnieje możliwość posiadania najwyższej klasy aplikacji do obsługi błędów, która może zapisać stan aplikacji (w tym wszelkie otwarte dokumenty, wprowadzone zmiany itp.), gdy wystąpi nieobsługiwany błąd aplikacji. Chodzi o to, aby spróbować ponownie przeczytać wszystko po ponownym uruchomieniu aplikacji. W zależności od rodzaju błędu i sposobu, w jaki jest on zaimplementowany, nie zawsze działa, i oczywiście każda aplikacja musi wykonać coś sensownego w obliczu błędu i wynikowych danych - ale może to być zaskakująco skuteczna strategia pomagania użytkownikowi w wyjściu z awarii przy minimalnej ilości utraconej pracy.


2

Chciałbym tutaj przejść do punktu niskiego poziomu, ponieważ istnieje znacznik systemu plików.

Mogłeś pamiętać system operacyjny Windows, który korzystał z systemu plików FAT / FAT16 / FAT32. Czasami występowały problemy, gdy użytkownik doświadczył przerwy w zasilaniu i cały system przestał działać. Po próbie ponownego uruchomienia system powiedziałby, że brakuje pliku i nie można go uruchomić. Stało się tak, ponieważ FAT32 nie śledził operacji, które wykonywał w sposób transakcyjny.

W przeciwieństwie do tego, nowy system plików NTFS otrzymał obsługę dziennika swojej infrastruktury, co oznacza, że ​​na niskim poziomie systemu operacyjnego i sprzętowej warstwy dostępu informacje byłyby przechowywane w stabilnym, bezpiecznym stanie poprzez rejestrowanie wszelkich działań do zatwierdzenia.


1

W niektórych aplikacjach w niektórych systemach operacyjnych możliwe jest przechwycenie sygnałów, takich jak błędy segmentacji wskazujące na naruszenia dostępu do pamięci. W takim przypadku prosta procedura może zapisać jak najwięcej danych. To, czy dane są użyteczne, to kolejne pytanie - awaria mogła je uszkodzić. Chociaż aplikacja może kontynuować działanie po tym, jak przerwie sygnał, nie jest to zalecane, ponieważ może być w niestabilnym stanie z uszkodzoną pamięcią, co może powodować dalsze problemy.

Inne aplikacje używają automatycznego zapisywania lub kombinacji obu - zależy to od potrzeb programu i obsługi platformy do przechwytywania tych sygnałów.


Wskazówka: Windows ich nie ma.
kinokijuf

1

Awaria systemu to kolejna procedura wykonywana przez system operacyjny. Przyczyną „awarii” jest to, że program lub biblioteka nie załadowała się lub nie załadowała się poprawnie i może spowodować trwałe uszkodzenie plików systemowych. Dlatego ze względów bezpieczeństwa system Windows wymusza zamknięcie / ponowne uruchomienie i zatrzymuje wszystkie zapisywanie do plików systemowych, zanim te pliki będą mogły być edytowane przez zalegający program / bibliotekę.

Przed zamknięciem / ponownym uruchomieniem wykonuje te same funkcje, co zwykłe zamknięcie / ponowne uruchomienie: zapisywanie plików systemowych itp.

O ile pojedyncze aplikacje (Word / Chrome) zapisują Twój „Postęp”, jest to wewnętrzna funkcja aplikacji, zapisująca Twój postęp w określonych odstępach czasu (które zwykle możesz również zmienić w ustawieniach programu). Jeśli masz awarię aplikacji / systemu, po ponownym uruchomieniu może on spojrzeć na ten plik i zapytać, czy chcesz przywrócić sesję.


1

Być może mówisz o wyłączeniu systemu operacyjnego z powodu utraty zasilania. Prawdopodobnie jest to rodzaj awarii.

Zasilacz informuje płytę główną (przypuszczam, że za pośrednictwem przewodu sygnałowego) o każdym długim zakłóceniu jego wejścia, o prawidłowym prądzie prądu przemiennego na ścianie, z dużym wyprzedzeniem przed zatrzymaniem jego wyjścia, co jest właściwym dostarczeniem prądu stałego na płytę główną. Może to zrobić, ponieważ magazynuje energię elektryczną w dużych kondensatorach. System operacyjny odbiera ten sygnał w postaci przerwania sprzętowego.

W tym długim czasie system plików buforujący zapis ma wystarczająco dużo czasu, aby przenieść wszystkie buforowane zapisy na stały fizyczny nośnik pamięci, a także wykonać inne procedury zamykania.

Jedną wielką zaletą systemu plików buforującego zapis jest to, że sortując zapisy, można ograniczyć ruchy ramion na dyskach twardych, czyniąc je mniej i bardziej odległymi.

Jest to podobne do tego, co @oleksii mówi w swojej odpowiedzi, z tym wyjątkiem, że w systemie plików buforującym zapisy zakończone transakcje nie są zwykle natychmiast przesyłane, lecz jedynie buforowane. W przypadku awarii zasilania zakończone transakcje należy przenieść na dysk.


0

Aplikacje mogą wychwytywać sygnały w C i zapisywać określone dane. Jednym z sygnałów, który możesz otrzymać przypadkowo, jest wyjątek arytmetyczny zmiennoprzecinkowy SIGFPE (ANSI). Błędy obejmują dzielenie przez zero i przepełnienie. Kolejnym singlem jest SIGINT, który jest podnoszony przez naciśnięcie ctrl + C na konsoli lub terminalu, który zabija aplikację

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.