Come può un computer riavviarsi? Dopo che è spento, come si dice di riaccenderlo? Che tipo di software è in grado di farlo?
Come può un computer riavviarsi? Dopo che è spento, come si dice di riaccenderlo? Che tipo di software è in grado di farlo?
Risposte:
tl; dr: gli stati di alimentazione nel computer sono controllati da un'implementazione di ACPI (configurazione avanzata e interfaccia di alimentazione). Al termine di un processo di spegnimento, il sistema operativo imposta un comando ACPI che indica che il computer deve essere riavviato. In risposta, la scheda madre reimposta tutti i componenti utilizzando i rispettivi comandi o linee di ripristino, quindi segue il processo di bootstrap. La scheda madre non si spegne mai, reimposta solo vari componenti e si comporta come se il pulsante di accensione fosse appena stato premuto.
Risposta lunga e sconclusionata ma (secondo me) più interessante:
Ai vecchi tempi (beh, va bene, per uno studente universitario come me gli anni '90 era molto tempo fa), avevamo schede madri AT (Advanced Technology) con alimentazione ATgestione. Il sistema di alimentazione AT era molto, molto semplice. Il pulsante di accensione sul tuo computer era un interruttore hardware (probabilmente nella parte posteriore del case) e il tuo input da 120vac è passato attraverso di esso. Accendeva e spegneva fisicamente il tuo alimentatore, e quando questo interruttore era in posizione Off tutto nel tuo computer era completamente morto (questo rendeva la batteria CMOS molto importante, perché senza di essa non c'era un alimentatore per mantenere l'hardware ticchettio dell'orologio). Poiché l'interruttore di alimentazione era un meccanismo fisico, non esisteva un modo software per accendere e spegnere. Windows mostrerebbe il famoso messaggio "Ora è sicuro spegnere il computer" perché, sebbene tutto fosse parcheggiato e pronto per spegnersi, non era possibile per il sistema operativo in realtà girare l'interruttore di accensione. Questa configurazione veniva talvolta definita comepotenza , perché è tutto hardware.
Oggi le cose sono diverse, a causa delle meraviglie delle schede madri ATX e della potenza ATX (questa è la tecnologia avanzata eXtended se stai tenendo traccia). Insieme ad una serie di altri progressi (mini-DIN PS / 2, chiunque?), ATX ha portato soft power . Soft power significa che l'alimentazione al computer può essere controllata dal software. Ciò ha comportato alcune modifiche all'importazione:
Quindi, l'interruttore di accensione non "accende" più il computer. Invece, è collegato ai controller di base della scheda madre, che rilevano che il pulsante è stato premuto ed eseguono una serie di passaggi per preparare il sistema, inclusa l'accensione di PS_ON in modo che l'alimentazione sia disponibile. Il pulsante di accensione non è l'unico modo per attivare il processo di avvio, anche i dispositivi sul bus di espansione possono farlo. Questo è importante perché le tue schede di rete ethernet rimangono effettivamente accese quando il tuo computer è spento e cercano un pacchetto molto specifico spesso chiamato "pacchetto magico". Se rilevano questo pacchetto indirizzato al loro indirizzo MAC, attiveranno il processo di avvio. Ecco come funziona "Wake-on-LAN" (WoL). L'orologio può anche avviare un avvio (la maggior parte del BIOS consente di impostare un'ora in cui il computer dovrebbe avviarsi ogni giorno),
Bene, spiego la cosa di Soft Power sia perché penso sia interessante (sempre un motivo chiave per spiegare le cose) sia perché ti permette di capire come l'alimentazione e lo stato di funzionamento / spegnimento del tuo computer sono tutti controllati dal software. Nella maggior parte dei computer attuali, questo sistema software è un'implementazione di Advanced Configuration and Power Interface o ACPI . ACPI è un sistema standardizzato e unificato che consente al software di controllare il sistema di alimentazione del computer. Potresti aver sentito parlare degli stati di alimentazione ACPI. Il meccanismo di base del controllo dell'alimentazione è costituito da questi "stati di alimentazione", il sistema operativo passa attraverso le modalità di alimentazione preparando l'interruttore (i processi di arresto / ibernazione che si verificano prima che l'alimentazione si stacchi effettivamente) e quindi ordina alla scheda madre di cambiare stato di alimentazione . Gli stati di potere si presentano così:
Noterai che il riavvio non è uno di questi stati. Quindi cosa succede realmente quando il tuo computer si riavvia? La risposta potrebbe essere sorprendente, perché dal punto di vista della gestione dell'energia non è quasi nulla . Esiste un comando di ripristino ACPI. Quando si dice al sistema operativo di riavviarsi, segue il normale processo di arresto (arresta tutti i processi, esegue un po 'di manutenzione, smonta i file system, ecc.), Quindi come passaggio finale, invece di inviare la macchina allo stato di alimentazione G2 (come se lo avessi semplicemente detto a Spegni) imposta il comando Reimposta. Questo è generalmente indicato come "Registro di ripristino", poiché come la maggior parte dell'interfaccia ACPI è solo un indirizzo su cui scrivere un valore specifico per richiedere un ripristino. Citerò la specifica 2.0 su cosa fa:
Il meccanismo di ripristino ACPI opzionale specifica un meccanismo standard che fornisce un ripristino di sistema completo. Quando implementato, questo meccanismo deve ripristinare l'intero sistema. Ciò include processori, logica di base, tutti i bus e tutte le periferiche. Dal punto di vista OSPM, affermare che il meccanismo di ripristino è l'equivalente logico per spegnere e riaccendere la macchina. Dopo aver ottenuto il controllo dopo un ripristino, OSPM eseguirà le azioni in modo simile a un avvio a freddo.
Quindi, quando viene impostato il registro di ripristino, accadono alcune cose in sequenza.
L'effetto finale di questi due passaggi (che in realtà si interrompe in molti più passaggi) è che sembra tutto esattamente come il computer appena avviato, ma il potere è stato effettivamente per tutto il tempo. Ciò significa meno tempo necessario per l'arresto e l'avvio (poiché non è necessario attendere che l'alimentazione sia pronta) e, soprattutto, consente l'avvio del sistema operativo all'avvio. Ciò significa che non è necessario utilizzare un altro trigger di avvio (WoL ecc.) E consente di utilizzare il riavvio come un modo efficace per ripristinare il sistema in remoto, quando non si dispone di un modo per avviare l'avvio.
Questa è stata una risposta lunga. Ma hey, spero che tu sappia di più sulla gestione dell'alimentazione del computer ora. Ho sicuramente imparato alcune cose ricercando questo.
Ecco un punto di partenza:
I chip di solito non si spengono e quindi si accendono. Invece, c'è una linea di ripristino che porterà il processore nel cosiddetto stato di ripristino quando di solito tutta la memoria viene cancellata e il processore sembra appena acceso. Mentre quel pin è tenuto alto (o basso, a seconda del processore), il processore è in reset. Una volta rilasciato, il pin continuerà ad avviarsi normalmente, proprio come se fosse acceso per la prima volta. Il punto di ciò è che non esiste alcun taglio di potenza.
Quindi, come fa questa scala a sistemi più grandi come i PC moderni? Beh, i computer moderni sono fatti di computer che a volte sono fatti dai computer stessi. Pertanto, quando si imposta il ripristino del computer, i "computer" che fanno sì che il computer inizieranno a salvare i loro stati (se il ripristino è controllato), o semplicemente hanno i loro piedini di ripristino estratti.
Alcuni processori e microcontrollori (che sono computer autonomi in miniatura, in genere 20 anni indietro rispetto ai moderni computer desktop) possono ripristinarsi mediante switch interni. Come ho detto, una volta sparito il segnale che genera il ripristino, il computer si avvierà. Quindi la premessa nella domanda non è del tutto corretta. Il computer non sa quando accenderlo. Sapere quando deve essere "spento" o in reset e quando il segnale che lo mantiene è sparito, si accenderà.
Questo comportamento può apparire strano sul computer moderno che può essere impostato per accendersi in un momento specifico o su rete e così via. Come ho detto, i computer sono fatti di computer. Quindi, mentre il processore principale potrebbe essere spento, potrebbero esserci numerosi altri chip e microcontrollori all'interno dei quali sono attivi. Il caso più ovvio è l'orologio in tempo reale che è spesso alimentato a batteria. Può quindi accendere altri chip che accenderanno altri chip e la reazione a catena continuerà fino a quando l'intero computer non sarà acceso. Sui computer di oggi, c'è una linea PSU chiamata +5 VDC Standby Voltage. Fornisce circa 50 mW di potenza a vari dispositivi che sono accesi quando il computer è "spento".
Un po 'di curiosità: reimpostare il pin sul processore Intel 386 EX è il numero pin 110.
Su Intel i7-900 è il numero di terra AL39.
Spero che qualcuno sia in grado di fornire una risposta che spieghi come funzionano le cose dal punto di vista di alto livello, dal momento che è un sistema abbastanza complicato.
Questo post sul blog descrive come Linux innesca un riavvio.
Estratto:
Linux ha diversi modi per ripristinare un x86. Alcuni di essi sono solo a 32 bit e quindi li ignorerò perché onestamente proprio quello che stai facendo della tua vita. Inoltre, sono orribili. Quindi, questo ci lascia con cinque di loro.
kbd - riavvia tramite il controller della tastiera. Il PC IBM originale aveva la linea di ripristino della CPU collegata al controller della tastiera. La scrittura del valore magico appropriato pulsa la linea e la macchina si ripristina. Tutto ciò è molto semplice, tranne per il fatto che le macchine moderne non hanno controller di tastiera (in realtà fanno parte del controller incorporato) e anche le macchine più moderne non pretendono nemmeno di avere un controller di tastiera. Ora i controller integrati eseguono il software. E, come tutti sappiamo, il software è terribile. Ma, peggio ancora, il software sul controller incorporato è stato scritto dagli autori del BIOS. Quindi, chiaramente, qualsiasi pretesa che ciò funzioni mai è una sorta di finzione elaborata. Alcune macchine sono molto esigenti sul fatto che l'hardware si trovi nello stato esatto in cui Windows dovrebbe programmare. Alcune macchine funzionano 9 volte su 10 e quindi si bloccano a causa di alcuni problemi di temporizzazione. E altri semplicemente non funzionano affatto. Evviva!
triplo: tenta di generare un triplo errore. Questo viene fatto caricando una tabella descrittore di interrupt vuota e quindi chiamando int (3). L'interruzione ha esito negativo (non esiste un IDT), il gestore degli errori non riesce (non esiste un IDT) e la CPU entra in una condizione che, in teoria, dovrebbe innescare un reset. Solo che non sembra esserci un requisito per cui ciò accada e semplicemente non funziona su un sacco di macchine.
pci: in realtà non pci. L'accesso tradizionale allo spazio di configurazione PCI si ottiene scrivendo un valore a 32 bit sulla porta io 0xcf8 per identificare il bus, il dispositivo, la funzione e il registro di configurazione. La porta 0xcfc contiene quindi il registro in questione. Ma se scrivi la coppia appropriata di valori magici su 0xcf9, la macchina si riavvierà. Spettacolare! E non standardizzato in alcun modo (certamente non parte delle specifiche PCI), quindi diversi chipset possono avere requisiti diversi. Booo.
efi: i servizi di runtime EFI forniscono un punto di ingresso per riavviare la macchina. Di solito funziona anche! Fintanto che i servizi di runtime EFI funzioneranno, il che potrebbe essere un tratto.
acpi: le versioni recenti delle specifiche ACPI consentono di fornire un indirizzo (in genere spazio di memoria o IO di sistema) e un valore per scrivere lì. L'idea è che scrivere il valore sull'indirizzo resetta il sistema. Si scopre che così spesso fallisce. È anche impossibile rappresentare il metodo di riavvio PCI tramite ACPI, poiché il metodo di riavvio PCI richiede una coppia di valori e ACPI ne fornisce solo uno.
Aggancia una posizione I / O che abbassa una linea di dati che dice alla CPU che dovrebbe interrompere qualsiasi cosa stia facendo e iniziare a eseguire il codice da una certa posizione nel BIOS.
Ai vecchi tempi prima della gestione dell'alimentazione, i computer potevano ancora riavviarsi, ovviamente. (Qualcuno ricorda quando un programma bloccato significava che dovevi usare Ctrl + Alt + Canc per riavviare il computer?)
Sul mio vecchio 486, il comando assembly language JMP FFFF:0000
(ovvero impostare il puntatore di istruzioni della CPU su detto indirizzo) causerebbe il riavvio dell'intero computer. In altre parole, FFFF: 0000 risolve un percorso nel BIOS che contiene istruzioni su cosa dovrebbe fare il computer al primo avvio. Sospetto che il pin di reset descritto dalla risposta di AndrejaKo, o i pulsanti di reset nei giorni di pre-gestione dell'alimentazione, forzerebbero anche il puntatore di istruzioni allo stesso indirizzo.
Una ricerca su Google per JMP FFFF: 0000 rivela molte pagine interessanti su questo.
C'è anche una cosa chiamata watchdog. Questo dispositivo funge da interruttore di un uomo morto. Il computer deve segnalare al cane da guardia ogni minuto che è ancora vivo. Quando il computer si arresta in modo anomalo, ad esempio eseguendo un ciclo senza fine, non riuscirà a segnalare al cane da guardia che sta ancora funzionando come previsto, in quale occasione il cane da guardia eseguirà un ripristino hardware. Ciò è stato dimostrato nella popolare serie tv del terminatore, in cui un robot è stato messo fuori uso da un aumento di potenza ad alta tensione. si ripristinerebbe da solo in 2 minuti.
Di nuovo sul vecchio PC-1 IBM, il controller della tastiera, stranamente, ha gestito il riavvio. IBM ha incorporato un piccolo microprocessore per gestire la tastiera e aveva alcune linee I / O di riserva, quindi hanno usato una delle linee per guidare la linea di reset della CPU principale. Un comando inviato al controller della tastiera comporterebbe il ripristino della CPU come se fosse appena stata accesa l'alimentazione.
Immagino che questa tradizione sia proseguita bene nell'era "AT", e che potrebbero esserci tracce di ACPI oggi.
Aggiunto: c'è un dettaglio interessante sullo schema di reset sopra. Durante la sequenza di avvio iniziale, il codice ha cercato un modello particolare nella RAM che potrebbe essere stato impostato dal codice precedentemente eseguito. Se questo codice era presente, alcuni dei test diagnostici POST (power-on self-test) sono stati saltati. Il modello sarebbe presente solo su uno stivale "caldo".