2009-05-27 13 views
8

Mi ha colpito solo l'altro giorno. Cosa succede in realtà quando dico al computer di andare in Stand-By o in letargo?Cosa succede durante Stand-By e Ibernazione?

Più in particolare, quali sono le implicazioni, se ce ne sono, sul codice in esecuzione? Ad esempio, se un'applicazione sta comprimendo alcuni file, codifica file video, controlla la posta elettronica, esegue una query di database, genera report o semplicemente elabora un sacco di dati o esegue complicate operazioni matematiche. Che succede? Puoi finire con un bug nel tuo video? La query del database può fallire? L'elaborazione dei dati può contenere errori?

Lo chiedo sia per curiosità generale, ma anche perché ho iniziato a chiedermi se è qualcosa a cui dovrei pensare quando mi programmo.

risposta

6

È necessario ricordare che il sistema operativo (programma di pianificazione) congela il programma circa un giro di volte ogni secondo. Ciò significa che il tuo programma può già funzionare abbastanza bene quando il sistema operativo lo blocca. Non c'è molta differenza, dal tuo punto di vista, tra lo stand-by, l'ibernazione e il cambio di contesto.

Ciò che è diverso è che sarai congelato per molto tempo. E questa è l'unica cosa a cui devi pensare. Nella maggior parte dei casi, questo non dovrebbe essere un problema.

Se si dispone di una connessione di rete, sarà probabilmente necessario ristabilirla e problemi simili. Ma questo significa solo verificare errori in tutte le operazioni di I/O, che sono sicuro che stai già facendo ... :-)

+0

Questo è un ottimo punto. Non ci ho mai pensato! – Svish

+0

Si noti inoltre che mentre in prinicple standby/hibernate si dovrebbe ripristinare l'hardware * all * allo stato precedente (RAM, CPU, grafica ecc.), Questo potrebbe non funzionare per tutto l'hardware. Quindi alcuni componenti hardware potrebbero non "svegliarsi" correttamente. Normalmente questo si verifica solo con driver non validi, ma è qualcosa a cui prestare attenzione, specialmente con hardware insolito (ad esempio schede di interfaccia speciali). – sleske

2

Stand-By mantiene il tuo "stato" in vita conservandolo nella RAM. Di conseguenza se perdi energia perderai lo "stato" memorizzato.

Ma è più rapido da raggiungere.

Hibernation memorizza lo "stato" nella RAM virtuale sul disco rigido, quindi se si perde il potere si può ancora tornare tre giorni dopo. Ma è più lento.

Immagino che una limitazione con Stand-By sia la quantità di RAM disponibile, ma sono sicuro che la RAM virtuale deve essere utilizzata da Stand-By quando esaurisce la RAM standard. Lo guarderò e tornerò!

+0

Il computer si iberna, scrive semplicemente il contenuto della RAM sul disco. La prossima volta che si avvia, ripristina il contenuto della RAM dal disco. Quando il sistema operativo esaurisce la RAM standard, scrive cose su disco, questo è chiamato paging :) – Philippe

+0

E, AFAIK, il paging si verifica anche quando il pc è in esecuzione normalmente (se si esaurisce la RAM) – Svish

+0

@Philippe - è quello che sto dicendo; ibernare prende il contenuto della tua RAM e lo mette sull'HDD – joshcomley

1

L'articolo di Wikipedia su ACPI contiene i dettagli sulle diverse modalità di risparmio energetico presenti in PC moderni.

Ecco l'idea di base, da come ho capito le cose:

L'idea di base è quella di mantenere lo stato attuale del sistema persisteva, in modo che quando la macchina viene rimessa in funzione, si può riprendere allo stato in cui si era prima che la macchina fosse messa in stato di sospensione/standby/ibernazione, ecc. Pensa a una serializzazione per il tuo PC.

In modalità standby, il computer continua ad alimentare la RAM, poiché la memoria principale è volatile memory che richiede il mantenimento costante dello stato di refreshing. Ciò significa che i dischi rigidi, la CPU e altri componenti possono essere spenti, a condizione che ci sia abbastanza energia per mantenere la DRAM aggiornata per impedire la scomparsa dei suoi contenuti.

Nella modalità di sospensione, anche la memoria principale verrà disattivata, pertanto il contenuto deve essere copiato in una memoria permanente, ad esempio un disco rigido, prima che il sistema sia spento. Oltre a ciò, la premessa di base di hiberation non è diversa dallo standby: per memorizzare lo stato corrente della macchina da ripristinare in un secondo momento.

Con questo in mente, probabilmente non è troppo probabile che andare in standby o in letargo possa causare problemi con le attività in esecuzione al momento. Tuttavia, potrebbe non essere una buona idea consentire alle attività di rete di fermarsi nel mezzo dell'esecuzione, in quanto a seconda del protocollo, la connessione di rete potrebbe scadere e non essere in grado di riprendere quando si riporta il sistema al suo stato di funzionamento.

Inoltre, ci possono essere alcune macchine che hanno solo driver di risparmio energetico instabili che possono farla andare in standby e non tornare mai più, ma questo è completamente un altro problema.

3

Il mio pensiero iniziale è che finché il programma e il suo ecosistema sono contenuti nel computer in stand-by o ibernazione, al riavvio il programma non dovrebbe essere compromesso.

Tuttavia, se si sta aggiornando un record in un database ospitato su un computer separato, lo stato di ibernazione/stand-by verrà considerato come un timeout.

Se il programma dipende da un tale cambiamento in "stato di alimentazione" che si può ascoltare WM_POWERBROADCAST messaggio come indicato sul msdn

+0

Grazie per aver notato il messaggio WM_POWERBROADCAST su msdn! Potrebbe essere molto utile se un'applicazione deve ristabilire una connessione di rete o qualcosa =) – Svish

0

Ci sono alcune implicazioni per il codice. Lo stato di ibernazione è più di un semplice passaggio di contesto dallo scheduler. Le connessioni di rete saranno chiuse, unità di rete o un supporto rimovibile potrebbero essere scollegati durante l'ibernazione, ...

Non penso che l'applicazione può essere notificata dal letargo (ma potrei sbagliarmi). Quello che dovresti fare è gestire gli scenari di errore (ad esempio la perdita della connettività di rete) nel modo più elegante possibile. E si noti che lo scenario di errore può verificarsi anche durante il normale funzionamento, non solo durante la sospensione ...

Problemi correlati