2009-04-12 7 views
11

Ogni volta che il bootloader carica il sistema operativo, è presumibile che sia attivo un solo flusso di programma, giusto? Ciò significherebbe che un processore mantiene il puntatore dell'istruzione ed esegue i comandi che trova nella posizione in cui punta il registro EIP. A che punto e in che modo il sistema inizia a sfruttare più processi e/o thread (nessun thread di userland, ma thread in cpu)?programmazione a basso livello: come fa il sistema operativo a iniziare un nuovo thread/processo?

risposta

5

Il sistema operativo si avvierà (dopo che il BIOS e il bootloader sono terminati) in un ruolo speciale - poiché il primo programma da eseguire avrà direttamente accesso a tutti i comandi della CPU.

Quindi configurerà varie parti del sistema, ad esempio la configurazione di Interrupt Handlers (o le routine di servizio di interruzione). Fatto ciò, ha la possibilità di creare uno "scheduler".

La gestione "processo/thread" effettiva verrà eseguita da questo programma di pianificazione. Decide, quali thread verranno eseguiti. Inoltre gestisce tutti i thread attivi. La CPU non è a conoscenza di tutte queste cose.

Una volta che il responsabile dello scheduler decide di eseguire Thread (o "Processo") A, copia i dati dei processi nei registri (e memorizza i registri nel InfoBlock del thread in esecuzione di recente). Indica alla CPU/a un timer di causare un'interruzione in n microsecondi (o altra unità temporale). Quindi dirà alla cpu di eseguire il "programma" (l'unica cosa che la CPU conosce) in modalità non OS (in modo che non possa modificare i dati critici o registrare i propri gestori di interrupt senza autorizzazione).

Mentre il thread A è in esecuzione, verrà eseguito il timer hardware. Una volta raggiunto l'offset di tempo desiderato, causerà un interrupt. L'hardware interromperà quindi l'esecuzione del programma corrente e invocherà invece il numero Interrupt Handler registrato. Questo gestore sarà un metodo del programma di pianificazione (di nuovo il direttore generale, per essere precisi).

Questo metodo ripeterà nuovamente quale thread deve essere pianificato e quindi la pianificazione continua.

+0

Grazie per la spiegazione. Puoi dirmi come cambia questa immagine quando sono coinvolti diversi processori/core indipendenti? – prinzdezibel

+0

La maggior parte dei multicores ha almeno un processore "master" (vedi altre risposte) - Le cache L1 + non funzionerebbero senza una gestione centralizzata. Lo scheduler dovrà solo indirizzare il processore desiderato per ogni operazione di registro. Tutto il resto mantiene lo stesso (timer a intervallo fisso). –

+0

@prinzdezible: lo scheduler del sistema operativo generalmente viene eseguito su ciascun core della CPU quando il thread corrente viene arrestato tramite interrupt o effettuando una chiamata di sistema. Per essere scalabile su molti core, non guarderà tutti i thread, ma solo i thread assegnati a quella CPU. Se è troppo occupato, sposterà i thread su altre CPU. Se non è occupato, estrarrà i thread da altre CPU. Ogni tanto il tempo o qualche contatore, lo schedulatore carica le attività di bilanciamento su tutte le CPU (questo è lento, quindi non spesso) –

3

Una delle prime cose che un OS (con multithreading) deve avviare è lo scheduler che è responsabile della gestione di più processi (e quindi gestisce anche più thread della CPU, ad esempio su macchine multicore).

Il primo processo avviato da questo programma di pianificazione è in genere una sorta di processo "init" che a sua volta è responsabile del caricamento degli altri programmi/processi successivamente.

4

Correggere, durante il processo di avvio c'è solo un thread di esecuzione. Solitamente questo è il caso fino a quando il sistema operativo non si è inizializzato al punto in cui la gestione della memoria di basso livello, l'utilità di pianificazione ecc. Sono funzionali.

Questo è anche il caso in sistemi multi-CPU: un core è il "master processor" che gestisce l'avvio anticipato fino a quando l'infrastruttura è lì per avviare gli altri core.

Alla fine è altamente specifico per il sistema operativo; il Intel Architecture Software Developer's Manuals ha i dettagli delle specifiche hardware. (Supponendo che tu stia parlando dell'architettura Intel, altre architetture potrebbero essere diverse).