Come può il sistema operativo funzionare sullo stesso chip che dovrebbe gestire?


17

Dalle mie letture sui sistemi operativi (lettura del materiale di base su Wikipedia, siti tecnologici, ecc.) Ho appreso che il sistema operativo è un programma che consente a programmi e applicazioni di interagire con l'hardware in modo efficiente e sicuro.

Tuttavia, sono confuso su come il sistema operativo sovrintenda al funzionamento del computer quando deve essere utilizzato da solo.

Cosa voglio dire? Bene, il modo in cui immagino che un sistema operativo funzioni è che su un computer ci sarebbero due CPU. Uno che esegue continuamente il sistema operativo e un altro che il sistema operativo utilizza per eseguire il computer. Tuttavia, si scopre che il sistema operativo è in esecuzione sulla stessa CPU degli altri processi. È come se un manager dovesse lavorare sulla stessa linea di produzione dei suoi dipendenti e utilizzare gli elettroutensili solo quando un altro dipendente ha finito con loro. Non sarebbe un manager molto efficace, dal momento che non avrebbe la capacità di emettere ordini se il suo dipendente fosse anche leggermente indisciplinato.

Quindi come può essere che il sistema operativo gira solo una parte del tempo sulla stessa CPU che deve essere condivisa tra tutti gli altri processi? Come funziona?


1
Un manager non dovrebbe usare gli utensili elettrici dei suoi dipendenti! Invece, deve assicurarsi che i dipendenti dispongano di utensili elettrici funzionanti.
MSalters,

Risposte:


15

Le CPU moderne sono a conoscenza del sistema operativo fino a un certo punto. Forniscono alcuni "utensili elettrici" per il primo che li rivendica. Di solito si tratta del boot loader, che quindi passa il controllo al sistema operativo. Di solito si parla di "modalità kernel" vs "modalità utente" o "ring 0" vs "ring 3" per distinguere tra un processo con i privilegi extra e il resto.

Questi "strumenti di potere" sono alcuni privilegi per la gestione delle risorse: controllo della memoria, accesso all'hardware e per quanto tempo il codice a livello utente può essere eseguito senza interruzioni.

La CPU esegue il sistema operativo con i suoi privilegi speciali quando si verifica uno dei seguenti eventi:

  1. Un processo in modalità utente passa esplicitamente il controllo al processo in modalità kernel. Questo si chiama syscall .
  2. Il processo in modalità kernel può utilizzare i suoi privilegi speciali per la registrazione per determinati eventi (ad esempio, l'hardware esterno invia un segnale speciale alla CPU o un processo nello spazio utente tenta di accedere a una risorsa riservata). Quando si verifica un simile evento, la CPU interrompe immediatamente il processo in modalità utente e passa il controllo al processo in modalità kernel. Di solito si parla da un'interruzione .

Quindi il sistema operativo può essere eseguito sullo stesso chip perché il chip è stato creato per questo. Può riservare privilegi speciali per se stesso. La CPU può interrompere tutte le altre parti di codice senza questi privilegi speciali in qualsiasi momento e consegnare il controllo al sistema operativo.

Alcuni chip con supporto molto limitato (ad es. Un microcontrollore ) non dispongono di questo supporto per codice privilegiato speciale. Questi chip di solito funzionano senza un sistema operativo. Esiste solo un grande programma in esecuzione, che può accedere direttamente all'hardware, deve rispondere agli interrupt di processo e può accedere a qualsiasi risorsa in qualsiasi momento. Se quel programma commette un errore, di solito tutto si blocca.


17

Nella loro forma più primitiva, i sistemi operativi si affidano ai processi ben educati e di volta in volta restituiscono il controllo al sistema operativo. Se un processo non è ben educato, allora può accadere che il sistema operativo si blocchi.

La maggior parte delle CPU, tuttavia, ha interruzioni : un interruzione mette in pausa il processo corrente (preemption) e restituisce il controllo manuale al sistema operativo. È possibile programmare l'interruzione a intervalli specifici o essere attivata esternamente (ad esempio premendo il pulsante di ripristino).

Fondamentalmente, la CPU passa avanti e indietro tra l'esecuzione del sistema operativo e l'esecuzione dei processi a una velocità incredibilmente veloce. Inoltre, le CPU hanno "modalità utente" e "modalità kernel". I processi vengono eseguiti in modalità utente e il sistema operativo viene eseguito in modalità kernel. L'esecuzione in modalità utente impedisce a un processo di eseguire comandi con restrizioni (come IO). Se un processo vuole scrivere sul disco, deve chiedere al SO di farlo. Il sistema operativo passa alla modalità kernel ed esegue la scrittura per conto del processo (dopo aver verificato che il processo disponga delle autorizzazioni necessarie).


7
@Imray Non proprio, per la CPU il sistema operativo è solo un altro bit di codice. Tuttavia, la CPU ha molte funzionalità progettate per l'uso da parte dei creatori di un sistema operativo.
Tom van der Zanden,

3
Non so se "conoscere" sia la terminologia giusta, ma la CPU non ha motivo di esistere se non quello di eseguire un sistema operativo. Non è assolutamente completamente indipendente. In effetti, la CPU dipende completamente dal sistema operativo per gestire le sue varie modalità e altrimenti dirgli cosa fare.
Mohair,

2
@Mohair Ci sono molti microcontrollori che funzionano senza un sistema operativo, contano quelli come CPU?
Tom van der Zanden,

2
"quelli contano come CPU?" Certo che lo fanno. Così ha fatto il 6502 nel mio primo computer anche se non aveva distinti anelli utente e kernel, e potevi pokedalla riga di comando lavorare tutti i tipi di malizia.
dmckee,

2
@TomvanderZanden come funziona esattamente the CPU switches back and forth between running the OS and running processes? Cosa attiva l'interruttore?
jnovacho,

1

Non sono necessari due processori diversi per il microprocessore per eseguire spazio utente e codice spazio kernel. Fondamentalmente funziona in questo modo quando accendi il tuo computer sul tuo BIOS carica Bootloader (codice da 512kb su disco che termina 55aa firma del bootloader) su ram e attraverso questo bootloader il tuo kernel viene caricato su ram e gira per sempre fino allo spegnimento del computer. E il tuo kernel gestisce la memoria e non consente al tuo codice del kernel che si trova su ram non di essere sovrascritto dal codice dello spazio utente. A questo scopo ci sono chiamate di sistema che il codice di spazio utente ha invocato usando queste chiamate di sistema e aggiungi il tuo codice di spazio utente a ram e inizia a eseguirlo. Nei sistemi operativi questo concetto è studiato come Gestione della memoria. Ecco il link che puoi leggere è ottimo per iniziare https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf


0

Per basarsi su altre risposte, è più facile capire se si pensa che il kernel stesso non è un processo ma un codice di gestione. Qualsiasi processo utente può passare dalla modalità utente alla modalità kernel ed eseguire il codice del kernel (istruzioni privilegiate) utilizzando una parte dello spazio del kernel. Quindi il processo può tornare alla modalità utente ed eseguire nuovamente nello spazio utente.

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.