Wie kann der Computer Daten speichern, bevor er abstürzt?


52

Ich hatte den Eindruck, dass bei einem Computerabsturz etwas schief gelaufen ist und keine Leistung mehr erbracht werden kann.

Ich habe mich gefragt, wie der Computer Dinge speichern kann, bevor er abstürzt.

Ist der Computer wirklich in der Lage zu wissen, wann er abstürzt (und so alle Prozesse zu informieren: " ASAP speichern, weil ich kurz vor dem Absturz bin ")?

Wenn nicht, wie ist es möglich , dass Programme wie Chromeund Microsoft Wordanbieten können „Wiederherstellung“ Dienste , nachdem der Computer abgestürzt ist?


13
Mir gefällt, wie die Antwort auf die Frage im Titel der Frage ist.
Chris

Wie können Notleuchten bei ausgeschaltetem Gerät aufleuchten?
JoelFan

@ JoelFan tun sie nicht, wenn Ihre Batterie / Generator
leer

Antworten:


6

Wenn ein Computer "abstürzt", kann dies z. B. auf einen "abrupten" Stromausfall zurückzuführen sein (in diesem Fall kann nichts unternommen werden), oder auf ein böses internes Ereignis (z. B. beschädigte Seitentabellen) In ähnlicher Weise wird verhindert, dass etwas unternommen wird, oder es liegt möglicherweise an einem Zustand, der "weitere Vorgänge" einfach verhindert - möglicherweise können keine neuen Prozesse gestartet werden, möglicherweise kann die Anzeige nicht aktualisiert werden, möglicherweise ist das System einfach nicht mehr im Speicher.

In letzteren Situationen kann das Betriebssystem immer noch in bestimmten Grenzen funktionieren und zumindest die laufenden Festplattenvorgänge abschließen, Dateien schließen usw. Wenn etwas mehr Funktionen möglich sind, kann das Betriebssystem möglicherweise die verschiedenen Anwendungen erkennen Prozesse, um sich sauber herunterzufahren.

Aber selbst wenn das System "schwer" ausfällt, haben das System als Ganzes und einzelne Anwendungen möglicherweise ein System von "Journalen" und / oder "Prüfpunkten" unterhalten, um den Zustand des Systems als Ganzes und einzelne Anwendungen wiederherstellen zu können bis zu einem "atomaren" Punkt, an dem alles "intern konsistent" ist und ein Minimum an wichtigen Daten verloren gegangen ist.

Dies alles wird nicht mit einem einzigen Mechanismus erreicht, sondern mit Funktionsebenen auf System- und Anwendungsebene.

Insbesondere in Bezug auf Stromausfälle kann eine Vorabbenachrichtigung vorliegen oder nicht, und die Vorabwarnung kann einen Sekundenbruchteil oder (bei einer USV oder einer defekten Laptopbatterie) mehrere Minuten betragen. Was getan werden kann, hängt von der Anzahl der Warnungen ab.

In den meisten Fällen ist es bei einem Desktop-System ohne USV am besten, Festplattenvorgänge "stillzulegen", damit sich keine Festplatte in der Mitte eines Schreibvorgangs befindet, wenn die Stromversorgung endgültig unterbrochen wird. Dies verhindert, dass fehlerhafte Sektoren auf der Festplatte generiert werden. In früheren Zeiten, als der RAM viel kleiner war, konnte ausreichend Zeit vorhanden sein (mit großen Kondensatoren im Netzteil oder sogar, wenn die im Rotor des Festplattenlaufwerks gespeicherte Energie zur Stromerzeugung verwendet wurde), um den RAM vor dem Einschalten auf die Festplatte zu schreiben fallen gelassen, aber diese Möglichkeit verschwand so ziemlich, als RAM größer als 100M oder so wurde.

[Und beachten Sie, dass in früheren Zeiten, als Erinnerungen mit magnetischen "Kernen" erstellt wurden, der Arbeitsspeicher von Natur aus erhalten blieb, wenn die Stromversorgung unterbrochen wurde (obwohl ein bestimmtes Wort, das bei einem Stromausfall gelesen / geschrieben wurde, möglicherweise beschädigt wurde). Dies erleichterte den alten Systemen die Wiederherstellung nach einem Stromausfall.]

Bei einer USV-ähnlichen Funktion (die zwischen einigen Minuten und mehreren Stunden zusätzlichen Strom liefert) gibt es jedoch mehrere weitere Optionen. Eine besteht darin, das System einfach herunterzufahren, als ob Sie "Ausschalten" angefordert hätten. Dies führt dazu, dass sich jede Anwendung selbst beendet und das System als Ganzes permanente Tabellen ausschreibt und herunterfährt. Dies kann lange dauern (wie viele von Ihnen sicherlich bemerkt haben). Es ist aber auch möglich, eine "Ruhezustand" -Strategie zu verwenden, bei der RAM als einzelner Block auf die Festplatte geschrieben und dann das System ausgeschaltet wird. Im Szenario "Ruhezustand" wird beim Wiederherstellen der Stromversorgung der Arbeitsspeicher genau an der Stelle zurückgelesen, an der er geschrieben wurde. Hier und da werden einige Bits ausgewechselt, und die Ausführung wird an der Stelle fortgesetzt, an der sie aufgehört hat.

Bei einigen älteren "großen Eisen" -Systemen wurde eine Halb-Ruhezustand-Strategie verwendet, um eine Notabschaltung durchzuführen: Der Speicher wurde wie oben beschrieben ausgeschrieben, aber wenn die Stromversorgung wiederhergestellt und der Speicher eingelesen wurde, trat eine Standardabschaltung auf. Dies geschah, weil einige Bits des Systemstatus (insbesondere in E / A-Controllern) nicht zuverlässig gespeichert / wiederhergestellt werden konnten, um einen fortgesetzten Betrieb zu ermöglichen.


82

Chrome und Microsoft Word speichern regelmäßig Ihren aktuellen Status, während Sie arbeiten. Wenn die Anwendung oder der Computer beim Neustart abstürzt, suchen sie nach einem gespeicherten Status auf der Festplatte und stellen ihn für Sie wieder her. Sie müssen den Absturz nicht vorhersagen. Sie retten ständig Ihren Zustand für den Fall, dass etwas schief geht.


10
Dies ist nur teilweise wahr. Die Betriebssysteme stellen jetzt Frameworks zur Verfügung, mit denen sich Anwendungen von Ausnahmen erholen können.
Surfasb

3
@surfasb: Könnten Sie genauer sein? Es war uns immer möglich, Signale in Unix-ähnlichen Systemen abzufangen, aber es ist Sache des Anwendungsprogrammierers, irgendetwas dagegen zu unternehmen.
Dietrich Epp

5
Diese Antwort ist richtig. Die meisten Anwendungen mit Fehlerbehebung speichern ihre Daten regelmäßig. Das Betriebssystem kann nicht wissen, wann es abstürzen wird. Und wenn es herausfindet, ist es zu spät.
Bogdacutu

1
@surfasb, die Frage nach dem Absturz des Computers (vermutlich des Kernels), nicht die Ausnahmebedingung für die Anwendung, die im Allgemeinen entweder behandelt wird und alles in Ordnung ist, oder bestenfalls die Prozess-Core-Dumps, speichert Ihre Dokumente nicht.
Psusi

62

BEARBEITEN: Dies funktioniert nur, wenn eine Anwendung abstürzt, nicht Windows.

Seit Windows Vista gibt es eine neue API, mit der Windows bei einem Absturz eine spezielle Funktion in der Anwendung aufrufen kann, um zu versuchen, Daten wiederherzustellen, bevor sie heruntergefahren werden. Das funktioniert so:

  • App startet
  • App ruft Windows-Funktion auf: Wenn ich abstürze bitte ausführen RecoverData()
  • ...
  • App stürzt ab
  • Windows wird RecoverData()in der App ausgeführt
  • RecoverData() versucht, Daten über das aktuell geöffnete Dokument abzurufen. In der Zwischenzeit pingt Windows weiter, um anzuzeigen, dass die Wiederherstellung noch nicht abgeschlossen ist.
  • Wenn RecoverData()/ time out / stoppt, beendet Windows die App und startet sie neu.

Weitere Informationen: http://msdn.microsoft.com/en-us/library/windows/desktop/aa373351(v=VS.85).aspx


8
+1: Dies ist leider eines der am wenigsten genutzten Tools. Und auch leider ist dies nicht die am besten bewertete Antwort?
Surfasb

2
@ZippyV ist es nicht wahr, dass der Computer nicht die Fähigkeit hat, Anrufe zu tätigen, wenn nicht die App abstürzt, sondern Windows selbst abstürzt RecoverData()?
Pacerier

12
Das OP fragt nach dem Absturz des Computers (Betriebssystem), nicht nach dem Absturz der Anwendung. Daher ist diese Antwort irrelevant.
Vitaut

Richtig, im Fall eines BSOD wird dies nicht funktionieren.
ZippyV

Was für eine blöde API für MS. Sobald dies erreicht ist, können Sie der Anwendung nicht mehr vertrauen, um Daten zu speichern. Aus diesem Grund wurden Anwendungen seit Jahrzehnten entwickelt, um Daten zu speichern, bevor etwas schief geht.
Psusi

16

Nun, sie speichern nur den aktuellen Status, bevor sie abstürzen. Wie eine automatische Speicherung alle X Sekunden.

Ich denke man muss wirklich unterscheiden:

  • Hardware-Absturz: Wiederherstellung nur mit vorherigen Prüfpunkten möglich
  • Betriebssystemabsturz: Keine Möglichkeit für die App, Daten zu speichern. Das Betriebssystem kann so etwas wie einen Core-Dump ablegen
  • Anwendungsabsturz: Betriebssystemfunktionen für den Anwendungsabsturz können Informationen speichern

Ja, ich sprach über die schwerwiegenderen Abstürze wie Betriebssystem- / Hardware-Abstürze
Pacerier

10

Es hängt von der Schwere des Absturzes ab. Bei einem sehr schweren Absturz (auf der untersten Ebene des Computers) wird der Computer einfach angehalten. Die einzige Arbeit, die gespeichert wird, besteht darin, dass jede Anwendung ihre Daten regelmäßig automatisch speichert.

Bei weniger schweren Abstürzen warnt der Computer jedes Programm, das heruntergefahren werden muss. WENN das Programm diese Meldung abhört, speichert das Programm die aktuellen Daten. Diese Meldung wird jedoch nicht von allen Programmen beachtet.


1
Letzteres halte ich allerdings nicht für möglich. Windows gibt Ihnen nur dann ein BSoD, wenn es eine Ausnahme im Kernel-Modus oder einen anderen schwerwiegenden Fehler feststellt, der bedeutet, dass einige Daten im Kernel-Adressraum beschädigt sind. Da Kernel-Modus-Programme (Treiber usw.) uneingeschränkten Speicherzugriff haben, kann der Fehler nicht einfach auf Komponenten beschränkt werden, sodass das gesamte System im Kernel-Modus heruntergefahren werden muss. Das Signalisieren von User-Space-Programmen zum Speichern von Daten bedeutet im Wesentlichen, einen Großteil der Funktionalität des Kernels wieder aufzunehmen, was sehr gefährlich ist.
billc.cn

2
Der letzte Teil scheint sich auf Abstürze im Userspace zu beziehen, nicht auf BSoDs.
3Doubloons

8

Die Programme speichern sie regelmäßig in einer Datei auf der Festplatte. Der Computer kann es nicht erkennen. Tatsächlich wird der Absturzspeicherauszug nicht einmal mit dem Festplattentreiber ausgeführt - das System paginiert einfach den gesamten Speicher.


Das Paging erfolgt mit dem Festplattentreiber - ohne diesen kann der Kernel nicht auf die Festplatte schreiben.
Psusi

@psusi Wenn das System abstürzt, ist die Auslagerungsdatei der einzige Ort, an dem der Kernel sicher schreiben kann.
Kinokijuf

Ja, und es wird tatsächlich über den Plattentreiber geschrieben.
Psusi

1
Nein. Dies geschieht über einen speziellen "dump_atapi.sys" -Treiber (der Ihren SCSI-Controller durch atapi ersetzt), NICHT über den Standard-Festplattentreiber. Ich denke, es verwendet sogar Int 13h.
Kinokijuf

6

Ich hatte den Eindruck, dass bei einem Computerabsturz etwas schief gelaufen ist und keine Leistung mehr erbracht werden kann.

Ja, das ist völlig richtig. Aus logischer Sicht läuft Ihr Programm jedoch nicht uneingeschränkt auf dem Computer. Das Programm läuft unter dem Betriebssystem!

Ich habe mich gefragt, wie der Computer Dinge speichern kann, bevor er abstürzt. Ist der Computer wirklich in der Lage zu wissen, wann er abstürzt (und so alle Prozesse zu informieren: "ASAP speichern, weil ich kurz vor dem Absturz bin")?

Nun, im Falle einer BSOD- oder Kernel-Panik stellte das Betriebssystem fest, dass eine wirklich unsichere Sache passieren würde (ungültiger Speicherzeiger, Überschreiben von Speicher, der dem Betriebssystemkern zugewiesen ist, Zugriff auf nicht vorhandene Hardware usw.). .). In diesem Fall fordert das Betriebssystem alle Prozesse auf, die Ausführung anzuhalten, den Inhalt des Arbeitsspeichers auf der Festplatte zu speichern (da das Betriebssystem auch für die Verwaltung der Speicherzuordnung verantwortlich ist) und den Computer sicher herunterzufahren oder neu zu starten.

Einzelne Anwendungen stürzen ab, wenn das Programm eine nicht behandelte Ausnahme auslöst, die sich auf das Betriebssystem überträgt. In diesem Fall stoppt das Betriebssystem die Ausführung des Programms und schließt alle offenen Speicher- / Datei-Handles.

In beiden oben genannten Fällen wird die Programmausführung normalerweise nicht ordnungsgemäß beendet. In diesen Fällen liegt es an den einzelnen Anwendungen, ihre eigenen Daten wiederherzustellen, da sie die Ausführung plötzlich einfach "stoppen".

Wenn nicht, wie ist es möglich, dass Programme wie Chrome und Microsoft Word "Wiederherstellungsdienste" anbieten, nachdem der Computer abgestürzt ist?

Gemäß IIRC speichern beide Anwendungen regelmäßig die Anwendungszustände auf der Festplatte, um einen Datenverlust zu verhindern, wenn der oben genannte Zustand eintritt. Beispielsweise speichert Word alle paar Minuten automatisch eine Sicherungskopie Ihres aktuellen Arbeitsdokuments, sodass Sie im Falle eines plötzlichen Neustarts Ihre Daten wiederherstellen können (einige Minuten Arbeit geben oder nehmen), ohne dass Sie dies tun müssen habe alles getan.

Auch hier liegt es in Ihrer Verantwortung, als Entwickler sicherzustellen, dass Ihre Anwendung mit diesen Situationen zurechtkommt.


"In diesem Fall fordert das Betriebssystem alle Prozesse auf, die Ausführung anzuhalten, den Inhalt des Arbeitsspeichers auf der Festplatte zu speichern und den Computer sicher herunterzufahren oder neu zu starten." - Wann werden die auf der Festplatte gespeicherten RAM-Inhalte "wiederhergestellt"?
Pacerier

1
Sie sind nicht im normalen Verlauf der Ereignisse. Wenn Ihr Computer jedoch regelmäßig abstürzt, kann ein erfahrener Programmierer möglicherweise diese Datei verwenden, um die Ursache zu ermitteln.
kindall

@Pacerier werden, wie kindallangegeben, nicht wiederhergestellt (da Sie sich , wenn Sie den RAM wiederherstellen würden, im gleichen Ausführungsstatus befinden würden, der den Computer zum Absturz gebracht hat!). Sie können in Windows unter Systemeigenschaften -> Erweitert -> Starten und Wiederherstellen ändern, was auf die Festplatte geschrieben wird. Wie bereits kindallerwähnt, sind diese Informationen vor allem für Entwickler hilfreich, die herausfinden möchten, was den Fehler verursacht hat.
Durchbruch

3

Ja, der Datenwiederherstellungsprozess ist nicht nur für Computerabstürze gedacht, sondern auch für Stromausfälle, Programmabstürze, das Beenden ohne Speichern und vieles mehr.

Was Sie gesagt haben, ist wahr, der Computer kann nicht "wissen", wann er abstürzen wird. Im Fall von Word wird er regelmäßig automatisch gespeichert, damit er diese Daten wiederherstellen kann. Im Falle von Chrome werden wahrscheinlich die Informationen für jeden Tab irgendwo gespeichert und beim erfolgreichen Beenden gelöscht, oder wenn eine neue und andere Sitzung beginnt. Oder wahrscheinlich auch auf andere Weise. Auf diese Weise, wenn dies nicht der Fall ist Am Ende des erfolgreichen Beendens müssen die Daten wiederhergestellt werden.

Ich arbeite (offensichtlich) nicht für Microsoft oder Google, aber das ist wahrscheinlich die Art und Weise (oder in der Nähe der Art und Weise), wie es funktioniert.


2

Ein Programm kann ein Flag auf die Festplatte schreiben, das nur so etwas wie "Beim Booten, wenn dieses Flag gesetzt ist, ist etwas schief gelaufen" sagt. Beim Booten wird dieses Flag überprüft, um festzustellen, ob es gesetzt ist. Wenn ja, weiß das Programm, dass etwas schief gelaufen ist.

Das Flag funktioniert immer, da es gesetzt werden kann, sobald das Programm gestartet wird, und deaktiviert werden kann, wenn das Programm normal beendet wird. Wenn das Programm aufgrund eines unerwarteten Fehlers beendet wird, z. B. wenn ein Computer unerwartet ausgeschaltet wird, bleibt das Flag weiterhin gesetzt, da es nicht normal beendet wurde. Dann kann das Programm feststellen, dass es beim letzten Ausführen nicht normal beendet wurde.


2

Wie @bamboom sagt, gibt es verschiedene Arten von "Computerabstürzen", die unterschiedlich gehandhabt werden müssen. Tatsächlich unterscheidet sich ein Stromausfall stark von einer ganzzahligen Division durch Null.

Mit vielen Programmiersprachen, die auch Ausnahmen unterstützen (kontrolliertes Verzweigen zu einer Fehlerbehandlungsroutine, wenn etwas völlig schief geht), besteht die Möglichkeit, eine anwendungsweite Fehlerbehandlungsroutine auf oberster Ebene zu haben, die den Status der Anwendung (einschließlich aller offenen Dokumente, vorgenommener Änderungen) speichern kann usw.), wenn ein nicht behandelter Anwendungsfehler auftritt. Die Idee ist dann, zu versuchen, alles zurückzulesen, wenn die Anwendung neu gestartet wird. Abhängig von der Art des Fehlers und der Art und Weise, wie dieser implementiert wird, funktioniert er nicht immer und es liegt natürlich an jeder einzelnen Anwendung, im Fehlerfall und mit den daraus resultierenden Daten etwas Sinnvolles zu tun Eine überraschend effektive Strategie, um dem Benutzer zu helfen, sich nach einem Absturz mit einem Minimum an verlorener Arbeit zu erholen.


2

Ich möchte hier auf eine untergeordnete Ebene eingehen, da es einen Tag des Dateisystems gibt.

Sie hätten sich an ein Windows-Betriebssystem erinnern können, das das Dateisystem FAT / FAT16 / FAT32 verwendet. Es gab manchmal Probleme, wenn ein Benutzer einen Stromausfall erlebte und das gesamte System ausfiel. Nach einem Neustart wird angezeigt, dass eine Datei fehlt und der Start nicht möglich ist. Dies geschah, weil FAT32 die Operationen, die es auf transaktionale Weise ausführte, nicht nachverfolgte.

Im Gegensatz empfing neueres NTFS - Dateisystem Journal Unterstützung seiner Infrastruktur, die auf dem niedrige Niveau von Betriebssystem und Hardware - Zugriffsschicht Informationsmitteln in einem stabilen sicheren Zustand durch Aufnahme von Handlungen begangen gehalten werden würde.


1

In einigen Anwendungen auf einigen Betriebssystemen ist es möglich, Signale wie Segmentierungsfehler, die auf Speicherzugriffsverletzungen hinweisen, einzubinden. In diesem Fall kann eine einfache Routine so viele Daten wie möglich speichern. Ob diese Daten verwendbar sind oder nicht, ist eine andere Frage - der Absturz hat sie möglicherweise beschädigt. Es ist zwar möglich, dass eine Anwendung nach dem Unterbrechen eines Signals weiter ausgeführt wird, dies wird jedoch nicht empfohlen, da sie sich möglicherweise in einem instabilen Zustand mit beschädigtem Speicher befindet, der weitere Probleme verursachen kann.

Andere Anwendungen verwenden die automatische Speicherung oder eine Kombination aus beiden - dies hängt von den Anforderungen des Programms und der Plattformunterstützung ab, um diese Signale abzufangen.


Hinweis: Windows hat sie nicht.
Kinokijuf

1

Ein Systemabsturz ist nur eine weitere Routine, die vom Betriebssystem ausgeführt wird. Der Grund für einen "Absturz" liegt darin, dass ein Programm oder eine Bibliothek nicht oder nicht ordnungsgemäß geladen werden konnte und die Systemdateien dauerhaft beschädigt werden können. Aus Sicherheitsgründen erzwingt Windows das Herunterfahren / Neustarten und stoppt alle Schreibvorgänge in Systemdateien, bevor diese Dateien von dem betreffenden Programm / der Bibliothek bearbeitet werden dürfen.

Vor dem Herunterfahren / Neustarten werden die gleichen Funktionen ausgeführt wie beim regulären Herunterfahren / Neustart: dh Speichern von Systemdateien usw.

Soweit einzelne Anwendungen (Word / Chrome) Ihren "Fortschritt" speichern, handelt es sich um eine interne Funktion der Anwendung, die Ihren Fortschritt in bestimmten Intervallen speichert (die Sie normalerweise auch in den Programmeinstellungen ändern können). Wenn eine Anwendung / ein System abstürzt, wird nach dem Neustart diese Datei angezeigt und Sie gefragt, ob Sie die Sitzung wiederherstellen möchten.


1

Möglicherweise wird das Betriebssystem aufgrund eines Stromausfalls heruntergefahren. Dies ist wohl eine Art Absturz.

Das Netzteil informiert das Mainboard (über eine Signalleitung, nehme ich an) über eine lange Unterbrechung seines Eingangs, den richtigen Wandwechselstrom, lange bevor es seinen Ausgang stoppt, der die richtige Zufuhr von Gleichstrom zum Mainboard darstellt. Es kann dies tun, weil es seinen Strom in großen Kondensatoren speichert. Das Betriebssystem empfängt dieses Signal in Form eines Hardware-Interrupts.

Während dieses langen Intervalls hat ein Schreibpuffer-Dateisystem genügend Zeit, um alle gepufferten Schreibvorgänge auf das permanente physische Speichermedium zu übertragen und einige andere Herunterfahrroutinen auszuführen.

Ein großer Vorteil eines Schreibpuffer-Dateisystems besteht darin, dass durch das Sortieren von Schreibvorgängen die Armbewegungen auf Festplattenlaufwerken verringert werden und diese immer weniger voneinander entfernt werden.

Dies ähnelt dem, was @oleksii in seiner Antwort sagt, mit der Ausnahme, dass in einem Schreibpuffer-Dateisystem abgeschlossene Transaktionen normalerweise nicht sofort übertragen, sondern lediglich gepuffert werden. Bei einem Stromausfall sollten abgeschlossene Transaktionen auf die Festplatte übertragen werden.


0

Apps können Signale in C abfangen und bestimmte Daten speichern. Ein Signal, das Sie möglicherweise versehentlich erhalten, ist die SIGFPE-Gleitkomma-arithmetische Ausnahme (ANSI). Fehler sind Division durch Null und Überlauf. Ein weiterer Singal ist SIGINT, der durch Drücken von Strg + C auf der Konsole oder dem Terminal ausgelöst wird, wodurch die App beendet wird

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.