Con questa nuova rubrica, cercheremo di spiegare come funziona un sistema operativo. Una nuova avventura che cerca di percorrere e spiegare tutti gli elementi legati ai sistemi operativi. Questa che si troverà di seguito è solo un’introduzione che getta le basi per riuscire meglio a comprendere il funzionamento dei sistemi operativi.
Cosa fa un sistema operativo?
Per capire di cosa stiamo parlando dobbiamo prima capire come è strutturato un computer, le sue parti principali sono:
- hardware: composto da CPU (guarda anche l’articolo su funzionamento CPU) , memoria e dispositivi I/O (input/output)
- programmi applicativi: (editor di testo, browser web, ecc.) definiscono il modo in cui viene sfruttato l’hardware nella soluzioni di problemi computazionali proposti dagli utenti
- utenti: rappresentano gli utilizzatori finali della macchina
- sistema operativo:
- dal punto di vista dell’utente cambia principalmente l’aspetto grafico ed è progettato per facilità di utilizzo garantendo il maggior numero di lavoro nel minor tempo possibile
- dal punto di vista del calcolatore, il sistema operativo si occupa della gestione delle risorse hardware. Di fronte a numerose richieste (alle volte anche conflittuali) spetta al sistema operativo assegnare le risorse nella maniera migliore possibile, garantendo l’efficienza del calcolatore, come una sorta di programma di controllo
Il sistema operativo si pone in mezzo tra l’hardware e i programmi applicativi in maniera tale da far si che l’utilizzo dell’hardware risulti semplice per l’utente mediante i programmi applicativi.
Non esiste una definizione di sistema operativo universalmente conosciuta. Una delle definizioni più diffuse è che il sistema operativo è tutto quello che il rivenditore fornisce al momento dell’ordine del sistema operativo. Tuttavia queste funzioni variano moltissimo da sistema a sistema.
Una seconda definizione di sistema operativo è quella secondo cui il sistema operativo è solo il programma che è sempre in esecuzione (nucleo, kernel) insieme ai programmi di sistema associati al sistema operativo (non sono necessariamente parte integrante del kernel). Anche questa definizione lascia il tempo che trova.
Molti sistemi operativi per dispositivi mobili (come Android e iOS), oltre al kernel, sono forniti di un middleware che è una collezione di ambienti software per agevolare lo sviluppo di applicazioni da parte degli sviluppatori.
Come interagisce il sistema operativo con l’hardware?
Come abbiamo detto, il sistema operativo si occupa della gestione delle risorse provenienti dall’hardware; ma come fa e attraverso quali istruzioni esegue questa gestione?
Partiamo dall’avvio del sistema operativo. L’avviamento del sistema, con conseguente accensione del calcolatore, avviene attraverso uno specifico programma iniziale detto programma di avviamento (bootstrap program) tipicamente in memorie a sola lettura, quindi non modificabili (ROM read only memory), oppure in memorie programmabili e cancellabili elettricamente (EEPROM). Questo specifico programma, insieme alle memorie nelle quali è contenuto, prende il nome di firmware.
Il programma di avviamento si occupa di caricare il kernel nella memoria centrale (RAM), che a sua volta caricherà tutti i processi di sistema, o demoni in ambienti UNIX like, che resteranno sempre in esecuzione fino allo spegnimento della macchina.
Il primo demone ad esser caricato in memoria in sistemi UNIX like è init che a sua volta avvia altri demoni finché il sistema operativo non è completamente avviato e pronto all’uso, in attesa di un evento.
Gli eventi possono verificarsi attraverso l’interrupt che può essere hardware (segnale di interruzione) o software (chiamata di sistema, detta anche system call). Una volta arrivata l’interruzione, la CPU si focalizza su determinate locazioni di memoria contenenti le nuove istruzioni da seguire.
Piccola nota sulle memorie
La CPU può eseguire solo istruzioni provenienti dalla memoria RAM (leggi anche come liberare la RAM del cellulare), quindi i programmi in esecuzione devono essere caricati dal disco fisso alla RAM prima dell’esecuzione.
All’interno della CPU esistono delle piccole memorie, ad alta velocità, chiamate registri. L’operazione di caricamento delle istruzioni dalla RAM ai registri si chiama load, mentre l’operazione inversa è chiamata store. Oltre a questi accessi espliciti, la CPU è in grado di prelevare automaticamente delle istruzioni dalla RAM se e quando necessario.
Piccola nota sulle strutture I/O
Tutte le componenti hardware di un computer sono, generalmente, collegate tra di loro con i bus, grazie ai quali le varie componenti possono comunicare tra di loro.
Gran parte del codice sorgente di un qualsiasi sistema operativo è dedicato alla gestione dell’I/O. All’interno di un calcolatore sono presenti tantissimi controllori di dispositivi connessi mediante un bus comune. Ogni controllore può supportare da uno a più dispositivi contemporaneamente.
I sistemi operativi, in genere, possiedono un driver del dispositivo per ogni controllore di dispositivo. Il driver fornisce un’interfaccia uniforme per l’utilizzo del dispositivo, rendendolo disponibile al resto del sistema operativo e, di conseguenza, ai programmi applicativi.
La multiprogrammazione
Un potente strumento per i moderni sistemi operativi è la multiprogrammazione. La multiprogrammazione permette l’utilizzo continuo della CPU senza interruzioni o tempi morti. Un singolo programma non è in grado di tenere costantemente occupata la CPU, infatti questa si metterà in attesa di un evento (es. battitura su tastiera) appena verrà inviato un interrupt.
Il lasso di tempo che equivarrebbe all’attesa, con la multiprogrammazione, viene impiegato a fare altro come completare o eseguire un nuovo processo.
Spesso la memoria principale (RAM) è troppo piccola per contenere tutti i processi in attesa (job), quindi vengono caricati in una specifica zona del disco rigido chiamata job pool. Il sistema operativo si occupa di smistare e caricare i job dal disco fisso alla RAM. Se un job ad un certo punto si interrompe perché in attesa di input, la CPU si impegnerà nell’esecuzione di un’altro job, e così via.
È comodo poter passare da un’app ad un’altra con il nostro smartphone, vero? Dite grazie alla multiprogrammazione, questa infatti permette il time sharing, più comunemente chiamato multitasking. La CPU in realtà si occupa di un processo alla volta, ma la sua velocità di elaborazione da l’illusione che si stia occupando di tutti i processi contemporaneamente.
Un sistema multiprogrammato è capace di gestire più utenti contemporaneamente sulla stessa macchina. Per gestire quali processi eseguire prima rispetto ad altri e in che modo eseguirli, il sistema operativo si avvale di algoritmi di scheduling.
Un ulteriore tecnica, per rendere il tutto ancora più efficiente, che può utilizzare il sistema operativo è lo swapping. Lo swapping permette una maggiore dinamicità nel trasferimento dei processi dalla RAM al disco e viceversa. Spesso per lo swapping è utilizzata la memoria virtuale.
Piccola nota sul duplice funzionamento di un sistema operativo
Se un programma è soggetto ad errori, specie se ci si trova in un sistema multiprogrammato, potrebbe causare errori che si andrebbero a riversare anche all’interno del SO, il quale a sua volta potrebbe generare errori, e così via.
Per proteggersi ci sono 2 modalità di esecuzione di base: modalità utente e modalità di sistema. Il sistema operativo riconosce se un’istruzione e di un tipo e dell’altro attraverso un bit di modo all’interno dell’istruzione. Le istruzioni in modalità utente non possono intaccare il sistema operativo.
Lascia un commento