In che modo il computer è in grado di salvare le cose prima che si blocchi?


52

Avevo l'impressione che quando un computer si è bloccato, qualcosa è andato storto e non può più funzionare.

Mi chiedevo come è possibile che il computer salvi le cose prima che si blocchi?

Il computer è davvero in grado di sapere quando sta per andare in crash (e quindi informare tutti i processi: " Salva al più presto perché sto per andare in crash ")?

In caso contrario, come è possibile che programmi piacciano Chromee Microsoft Wordpossano offrire servizi di "ripristino" dopo l'arresto anomalo del computer?


13
Mi piace come la risposta alla domanda sia nel titolo della domanda.
Chris,

In che modo le luci di emergenza sono in grado di accendersi quando l'alimentazione è spenta?
JoelFan,

@JoelFan no se la batteria / il generatore sono
esauriti

Risposte:


6

Quando un computer "si arresta in modo anomalo", potrebbe essere, ad esempio, dovuto a un'interruzione improvvisa dell'alimentazione (nel qual caso non è possibile eseguire alcuna operazione), potrebbe essere dovuto a una sorta di brutto evento interno (ad esempio tabelle di pagine danneggiate) che allo stesso modo impedisce di fare qualsiasi cosa, o potrebbe essere a causa di una condizione che impedisce semplicemente "ulteriori operazioni" in qualche modo - forse non è possibile avviare nuovi processi, forse il display non può essere aggiornato, forse il sistema ha esaurito la memoria.

In queste ultime situazioni il sistema operativo può ancora funzionare, entro certi limiti, e può almeno completare le operazioni del disco in corso, chiudere bene i file, ecc. Inoltre, se è possibile un po 'più di funzione, il sistema operativo potrebbe essere in grado di dire alle varie applicazioni processi per chiudersi in modo pulito.

Ma anche se il sistema non funziona correttamente, è possibile che il sistema nel suo insieme e le singole applicazioni abbiano mantenuto un sistema di "riviste" e / o "punti di controllo" per consentire il ripristino dello stato del sistema nel suo insieme e delle singole applicazioni a un punto "atomico", in cui tutto è "internamente coerente" e in cui è stato perso un minimo di dati importanti.

Tutto ciò non è realizzato con un singolo meccanismo, ma con livelli di funzionalità a livello di sistema e di applicazione.

Per quanto riguarda in particolare le interruzioni di corrente, potrebbe esserci o meno una notifica anticipata e l'avviso "anticipo" può essere una frazione di secondo o (con UPS o batteria del computer portatile difettosa) diversi minuti. Cosa si può fare dipende dalla quantità di avvertimento.

Nella maggior parte dei casi, con un sistema desktop senza UPS, nella migliore delle ipotesi è possibile "sospendere" le operazioni del disco in modo che nessun disco sia nel mezzo di una scrittura quando l'alimentazione scompare definitivamente. Questo impedisce la generazione di settori danneggiati sul disco. Una volta, quando la RAM era molto più piccola, era possibile che ci fosse abbastanza tempo (con grandi condensatori nell'alimentatore o addirittura, usando stranamente l'energia immagazzinata nel rotore dell'unità disco per generare elettricità) per scrivere RAM sul disco prima dell'alimentazione è caduto, ma questa possibilità è praticamente svanita quando la RAM è cresciuta di oltre 100 milioni.

[E nota che, ai vecchi tempi, quando i ricordi venivano fatti con "nuclei" magnetici, la RAM veniva intrinsecamente preservata quando si perdeva energia (sebbene una particolare parola che veniva letta / scritta in caso di interruzione dell'alimentazione potesse essere corrotta). Ciò ha reso più semplice il ripristino di quei vecchi sistemi in caso di mancanza di corrente.]

Tuttavia, con qualcosa che assomiglia a un UPS (che può dare da qualche minuto a diverse ore di potenza aggiuntiva) ci sono molte altre opzioni. Uno è semplicemente quello di spegnere il sistema, come se si fosse richiesto "spegnimento". Questo fa sì che ogni applicazione finisca da sola, quindi l'intero sistema scrive tabelle permanenti e si spegne. Questo può richiedere molto tempo (come sono sicuro che molti di voi hanno notato). Ma è anche possibile utilizzare una strategia di "ibernazione", in cui la RAM viene scritta su disco come un singolo blocco e quindi il sistema spento. Nello scenario "ibernazione", al ripristino della potenza, la RAM viene letta nuovamente nel punto esatto in cui è stata scritta, alcuni bit qua e là vengono fatti ruotare, quindi l'esecuzione riprende da dove era stata interrotta.

Su alcuni vecchi sistemi "big iron" veniva utilizzata una strategia semi-ibernata per eseguire un arresto di emergenza: la memoria veniva scritta come sopra, ma quando veniva ripristinata l'alimentazione e la memoria letta si verificava un arresto standard. Ciò è stato fatto perché alcuni bit di stato del sistema (in particolare nei controller I / O) non potevano essere salvati / ripristinati in modo affidabile per consentire il funzionamento continuo.


82

Chrome e Microsoft Word salvano periodicamente il tuo stato attuale mentre lavori. Se l'applicazione o il computer si arresta in modo anomalo, quando le applicazioni vengono riavviate, cercano uno stato salvato sul disco e lo ripristinano. Non hanno bisogno di prevedere l'incidente; salvano costantemente il tuo stato nel caso qualcosa vada storto.


10
Questo è solo parzialmente vero. I sistemi operativi ora forniscono framework per aiutare le applicazioni a riprendersi da eccezioni.
surfasb,

3
@surfasb: potresti essere più specifico? Siamo sempre stati in grado di catturare segnali in sistemi simili a Unix, ma spetta al programmatore dell'applicazione fare qualsiasi cosa al riguardo.
Dietrich Epp,

5
Questa risposta è corretta La maggior parte delle applicazioni con ripristino degli errori salva periodicamente i propri dati. Il sistema operativo non può sapere quando sta per andare in crash. E quando lo scopre, è troppo tardi.
Bogdacutu,

1
@surfasb, la domanda posta in merito al crash del computer (presumibilmente Kernel), non all'applicazione che riceve un'eccezione, che generalmente viene gestita e tutto va bene, o nella migliore delle ipotesi, il dump del processo, non salva i tuoi documenti.
psusi,

62

EDIT: funziona solo in caso di arresto anomalo di un'applicazione, non di Windows.

Dal momento che Windows Vista ha una nuova API che consente a Windows di chiamare una funzione speciale nell'applicazione quando si blocca in modo da poter provare a recuperare tutti i dati prima che venga chiuso. Funziona così:

  • L'app si avvia
  • L'app chiama la funzione Windows: in caso di arresto anomalo, eseguire RecoverData()
  • ...
  • L'app si arresta in modo anomalo
  • Windows viene eseguito RecoverData()nell'app
  • RecoverData() tenta di recuperare i dati sul documento attualmente aperto, nel frattempo continua a eseguire il ping di Windows per dire che è ancora impegnato nel recupero.
  • Al RecoverData()termine / timeout / interrompe il ping, Windows termina l'app e la riavvia.

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


8
+1: Questo è uno degli strumenti più sottoutilizzati là fuori purtroppo. E purtroppo, questa non è la risposta più votata ??
surfasb,

2
@ZippyV, tuttavia, non è vero che se non si verifica l'arresto anomalo dell'app, ma Windows si arresta in modo anomalo, il computer non è in grado di chiamare RecoverData()?
Pacerier,

12
L'OP chiede il crash del computer (OS), non il crash dell'applicazione, quindi questa risposta è irrilevante.
vitaut

È vero, nel caso di un BSOD, questo non funzionerà.
ZippyV,

Che stupida API da aggiungere per MS. Una volta arrivato a quel punto, non puoi fidarti dell'applicazione per salvare alcun dato, motivo per cui le applicazioni sono state progettate per decenni per salvare i dati prima che qualcosa vada storto.
psusi,

16

Bene, salvano solo lo stato corrente prima di andare in crash. Come un salvataggio automatico ogni X secondi.

Penso che si debba davvero differenziare:

  • Arresto anomalo dell'hardware: può essere ripristinato solo con checkpoint precedenti
  • OS Crash: nessun modo per l'app di salvare i dati, il sistema operativo può rilasciare qualcosa come un dump principale
  • Arresto anomalo dell'applicazione: le funzionalità del sistema operativo per l'arresto anomalo dell'applicazione possono salvare informazioni

Sì, stavo parlando degli arresti più gravi come gli arresti di sistema operativo / hardware
Pacerier

10

Dipende dalla gravità del crash. Un arresto molto grave (al livello più basso del computer) causerà l'arresto del computer. L'unico lavoro che viene salvato è il salvataggio automatico periodico dei dati da parte di ciascuna applicazione.

Per arresti anomali meno gravi, il computer avviserà ogni programma che è necessario arrestarlo. SE il programma ascolta questo messaggio, è qui che il programma salverà i dati correnti. Tuttavia, non tutti i programmi prestano attenzione a questo messaggio.


1
Tuttavia, non credo che quest'ultima parte sia effettivamente possibile. Windows ti dà un BSoD solo se rileva un'eccezione in modalità kernel o un altro errore fatale che significa che alcuni dati nello spazio degli indirizzi del kernel sono corrotti. Poiché i programmi in modalità kernel (driver, ecc.) Hanno accesso illimitato alla memoria, l'errore non può essere facilmente isolato ai componenti, quindi l'intero sistema deve essere spento in modalità kernel. Segnalare i programmi di spazio utente per salvare i dati significa essenzialmente riprendere gran parte delle funzionalità del kernel, il che è molto pericoloso.
billc.cn,

2
L'ultima parte sembra riferirsi a arresti anomali dello spazio utenti, non a BSoD.
3Doubloons il

8

I programmi salvano lo stato periodicamente in un file su disco. Il computer non è in grado di saperlo. In effetti, il dump dell'arresto anomalo non viene nemmeno eseguito utilizzando il driver del disco: il sistema semplicemente espelle tutta la memoria.


Il paging viene eseguito con il driver del disco - senza di esso il kernel non saprebbe come scrivere sul disco.
psusi,

@psusi Quando il sistema si arresta in modo anomalo, il file di paging è l'unico posto in cui il kernel sa che può tranquillamente scrivere.
Kinokijuf,

Sì, e in realtà esegue la scrittura tramite il driver del disco.
psusi,

1
No. Lo fa tramite uno speciale driver "dump_atapi.sys" (atapi sostitutivi per il controller SCSI), NON il driver del disco standard. Penso che usi anche Int 13h.
Kinokijuf,

6

Avevo l'impressione che quando un computer si è bloccato, qualcosa è andato storto e non può più funzionare.

Sì, questo è completamente vero. Tuttavia, dal punto di vista logico, il programma non viene eseguito senza restrizioni sul computer. Il programma è in esecuzione nel sistema operativo!

Mi chiedevo come è possibile che il computer salvi le cose prima che si blocchi? Il computer è davvero in grado di sapere quando sta per andare in crash (e quindi informare tutti i processi: "Salva al più presto perché sto per andare in crash")?

Bene, nel caso di un BSOD o del panico del kernel, il sistema operativo ha determinato che stava per succedere qualcosa di veramente pericoloso (puntatore di memoria non valido, sovrascrittura di una parte della memoria allocata al kernel del sistema operativo, accesso a hardware inesistente, ecc. .). In tal caso, il sistema operativo richiede che tutti i processi interrompano l'esecuzione, salva il contenuto della RAM su disco (poiché il sistema operativo è anche responsabile della gestione dell'allocazione della memoria) e arresta o riavvia in modo sicuro il computer.

Le singole applicazioni si arrestano in modo anomalo quando viene generata un'eccezione non gestita dal programma, che si propaga nel sistema operativo. In questo caso, il sistema operativo interromperà l'esecuzione del programma e chiuderà tutti gli handle di memoria / file aperti.

In entrambi i casi di cui sopra, l'esecuzione del programma non viene di solito terminata con garbo. In questi casi, spetta alle singole applicazioni recuperare i propri dati, poiché improvvisamente "interrompono" l'esecuzione.

In caso contrario, come è possibile che programmi come Chrome e Microsoft Word possano offrire servizi di "ripristino" dopo l'arresto anomalo del computer?

IIRC, entrambe le applicazioni salvano periodicamente gli stati dell'applicazione su disco per impedire la perdita di dati se si verifica la condizione di cui sopra. Ad esempio, Word salva automaticamente una copia di backup del documento di lavoro corrente ogni pochi minuti in modo che in caso di un riavvio improvviso improvviso, è ancora possibile ripristinare i dati (concedere o richiedere alcuni minuti di lavoro) senza che sia necessario ho fatto qualsiasi cosa.

Anche in questo caso, come sviluppatore, è tua responsabilità assicurarti che la tua applicazione sia in grado di gestire queste situazioni.


"In tal caso, il sistema operativo richiede che tutti i processi interrompano l'esecuzione, salva il contenuto della RAM su disco e spegne o riavvia il computer in modo sicuro". - i contenuti della RAM che vengono salvati su disco, quando vengono "ripristinati"?
Pacerier,

1
Non nel normale corso degli eventi. Tuttavia, se il computer si blocca regolarmente, un programmatore esperto potrebbe essere in grado di utilizzare questo file per capire la causa.
kindall

@Pacerier come kindallha dichiarato, non ottengono ripristinati (perché se si fatto ripristinare la RAM, si dovrebbe essere nello stesso stato di esecuzione che ha causato un crash del computer, in primo luogo!). È possibile modificare ciò che è scritto su disco in Windows in Proprietà del sistema -> Avanzate -> Avvio e ripristino. E ancora una volta, come kindalldetto, queste informazioni sono principalmente utili per gli sviluppatori che cercano di determinare cosa ha causato l'errore.
Sfondamento

3

sì, il processo di ripristino dei dati non è solo per arresti anomali del computer, ma per interruzioni di corrente, arresti anomali del programma, chiusura senza salvataggio e molto altro ancora ..

Quello che hai detto è vero, il computer non può "sapere" quando andrà in crash, nel caso di Word, si salva periodicamente in modo da poter ripristinare quei dati. Nel caso di Chrome, probabilmente memorizza le informazioni per ogni scheda da qualche parte e le elimina in caso di chiusura riuscita, o quando inizia una sessione nuova e diversa ... o probabilmente anche in altri modi .. comunque, in questo modo, se non lo facesse termina con una chiusura corretta, ha i dati su cui ripristinare.

Io (ovviamente) non lavoro per Microsoft o Google, ma probabilmente è così (o vicino) che funziona.


2

Un programma può scrivere un flag sul disco che dice qualcosa come "All'avvio, se questo flag è impostato allora qualcosa è andato storto". All'avvio quel flag viene controllato per vedere se è impostato. Se lo è, il programma sa che qualcosa è andato storto.

Il flag funziona sempre, perché può essere impostato non appena il programma si avvia e si spegne quando il programma esce normalmente. Se il programma esce fa un errore imprevisto, come un computer che si spegne inaspettatamente, il flag verrà comunque impostato poiché non è uscito normalmente. Quindi il programma è in grado di dire che non è uscito normalmente l'ultima volta che è stato eseguito.


2

Come dice @bamboom , ci sono diversi tipi di "crash" del computer che devono essere gestiti in modo diverso. In effetti un'interruzione di corrente è molto diversa da, per esempio, una divisione intera per errore zero.

Con molti linguaggi di programmazione che supportano anche le eccezioni (diramazione controllata verso un gestore errori quando qualcosa va completamente storto), c'è la possibilità di avere un gestore errori di livello superiore a livello di applicazione in grado di salvare lo stato dell'applicazione (inclusi eventuali documenti aperti, modifiche apportate , ecc.) quando si verifica un errore dell'applicazione non gestita. L'idea è quindi quella di provare a rileggere tutto al riavvio dell'applicazione. A seconda del tipo di errore ed esattamente come questo è implementato, non sempre funziona, e ovviamente spetta a ciascuna applicazione separata fare qualcosa di significativo di fronte a un errore e con i dati risultanti - ma può essere un strategia sorprendentemente efficace per aiutare l'utente a riprendersi da un incidente con una quantità minima di lavoro perso.


2

Vorrei un punto di basso livello qui, in quanto esiste un tag di filesystem.

Avresti potuto ricordare il sistema operativo Windows che utilizzava il file system FAT / FAT16 / FAT32. A volte si sono verificati problemi quando un utente ha avuto un'interruzione di corrente e l'intero sistema si è spento. Dopo aver provato a riavviare, direbbe che mancava un file e che non è possibile avviare. Ciò è accaduto perché FAT32 non ha tenuto traccia delle operazioni che stava eseguendo in modo transazionale.

Al contrario, il nuovo file system NTFS ha ricevuto il supporto journal della sua infrastruttura, il che significa che a basso livello di sistema operativo e le informazioni sul livello di accesso all'hardware sarebbero mantenute in una condizione stabile e stabile registrando tutte le azioni da commettere.


1

In alcune applicazioni su alcuni sistemi operativi, è possibile collegarsi a segnali come errori di segmentazione che indicano violazioni dell'accesso alla memoria. In questo caso, una semplice routine può salvare quanti più dati possibile. Se i dati siano utilizzabili o meno è un'altra domanda: l'arresto anomalo potrebbe averlo corrotto. Sebbene sia possibile che un'applicazione continui a funzionare dopo aver interrotto un segnale, non è consigliabile, poiché potrebbe essere in uno stato instabile con memoria corrotta che potrebbe causare ulteriori problemi.

Altre applicazioni utilizzano il salvataggio automatico o una combinazione di entrambi: dipende dalle esigenze del programma e dal supporto della piattaforma per la cattura di questi segnali.


Suggerimento: Windows non li ha.
Kinokijuf,

1

Un arresto anomalo del sistema è solo un'altra routine eseguita dal sistema operativo. Il motivo per cui si verifica un "arresto anomalo" è perché un programma o una libreria non è stata caricata correttamente o non è stata caricata correttamente e ha la capacità di causare danni permanenti ai file di sistema. Quindi, come precauzione di sicurezza, Windows forza un arresto / riavvio e interrompe la scrittura su tutti i file di sistema prima che uno qualsiasi di questi file possa essere modificato dal programma / libreria delinquente.

Prima di arrestare / riavviare, svolge le stesse funzioni di un arresto / riavvio regolare: ad esempio il salvataggio di file di sistema, ecc.

Per quanto riguarda le singole applicazioni (Word / Chrome) che salvano i tuoi "Progressi", questa è una funzione interna dell'applicazione, che salva i tuoi progressi a intervalli specifici (che di solito puoi modificare anche nelle impostazioni del programma). Se si verifica un arresto anomalo dell'applicazione / del sistema, dopo il riavvio, può guardare quel file e chiederti se desideri ripristinare la sessione.


1

È possibile che si stia arrestando il sistema operativo a causa della perdita di energia. Questo è probabilmente una specie di incidente.

L'alimentatore informa la scheda madre (tramite un cavo di segnalazione, suppongo) di qualsiasi interruzione prolungata del suo ingresso, della corrente CA a parete corretta, con largo anticipo del suo arresto della sua uscita, che è la corretta alimentazione della corrente CC alla scheda madre. Può farlo perché immagazzina l'elettricità in grandi condensatori. Il sistema operativo riceve questo segnale sotto forma di un interrupt di processo.

Durante questo lungo intervallo, c'è un tempo sufficiente affinché un filesystem con buffer di scrittura trasferisca tutte le scritture memorizzate nel buffer sul supporto di archiviazione fisico permanente, nonché per eseguire alcune altre routine di spegnimento.

Un grande vantaggio di un filesystem con buffer di scrittura è che ordinando le scritture, può ridurre i movimenti del braccio sui dischi rigidi, rendendoli sempre meno distanti.

Questo è simile a quello che dice @oleksii nella sua risposta, tranne per il fatto che in un filesystem con buffer di scrittura, le transazioni completate non vengono normalmente trasferite immediatamente, ma semplicemente bufferate. In caso di interruzione dell'alimentazione, le transazioni completate devono essere trasferite sul disco.


0

Le app possono catturare segnali in C e salvare determinati dati. Un segnale che potresti ricevere accidentalmente è l'eccezione aritmetica in virgola mobile SIGFPE (ANSI). Gli errori includono divisione per zero e overflow. Un altro singal è SIGINT che viene generato premendo ctrl + C sulla console o sul terminale che uccide l'app

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.