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 Chrome
i Microsoft Word
mogą oferować usługi „przywracania” po awarii komputera?
windows
filesystems
crash
restore
Pacerier
źródło
źródło
Odpowiedzi:
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ę.
źródło
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.
źródło
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:
RecoverData()
RecoverData()
w aplikacjiRecoverData()
próbuje pobrać dane o aktualnie otwartym dokumencie, w międzyczasie pinguje system Windows, aby poinformować, że odzyskiwanie jest nadal zajęte.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
źródło
RecoverData()
?Cóż, po prostu zapisują bieżący stan przed awarią. Jak automatyczne zapisywanie co X sekund.
Myślę, że naprawdę trzeba odróżnić:
źródło
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.
źródło
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ęć.
źródło
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!
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ć.
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.
źródło
kindall
wspomniano, 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żkindall
wspomniano, te informacje są najbardziej przydatne dla programistów próbujących ustalić, co spowodowało błąd.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).
źródło
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.
źródło
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.
źródło
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.
źródło
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.
źródło
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ę.
źródło
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.
źródło
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ę
źródło