Il concetto di Sistema operativo Il sistema operativo nasce intorno

Il concetto di Sistema operativo
Il sistema operativo nasce intorno agli anni 50 per l'estrema complessità con la quale si
gestivano manualmente i calcolatori dell'epoca, immaginate di dover dare istruzioni
manualmente e leggere dalla memoria manualmente ogni singola istruzione. Il sistema
al giorno d'oggi rappresenta un astrazione rispetto al hardware del calcolatore, infatti
possiamo benissimo essere allo scuro di come funziona realmente un calcolatore, ma
saperlo comunque farlo funzionare. Sostanzialmente quindi il sistema operativo è un
insieme di componenti software, che garantisce l'operatività del calcolatore,
coordinando e gestendo le risorse hardware di elaborazione e memorizzazione, le
periferiche I/O ed interfacciando il sistema HW all'utente senza che quest'ultimo abbia
reale percezione delle operazioni che si stanno svolgendo.
Nella memoria del calcolatore risiedono due tipi di software, il software di base che
sostanzialmente rappresenta in memoria il sistema operativo, e il software applicativo,
che sostanzialmente sono tutti i programmi in esecuzione dell'utente.
Classificazione dei Sistemi operativi
Nei sistemi monoprogrammati o monotasking, che spesso sono anche monoutente, vi
è una bassa utilizzazione delle risorse hardware del sistema, soprattutto della
componente più veloce che è la CPU: la CPU non fa niente quando è in attesa che
l'utente impartisca un comando o è costretta a cicli di attesa durante operazioni di I/O
su dispositivi lenti. In questi sistemi un solo processo per volta può essere eseguito e
questo usufruisce di tutte le risorse del sistema. Quest'ultima cosa è il solo vantaggio
di questi sistemi, oltre la semplicità, ma naturalmente si paga col fatto di non poter
eseguire più elaborazioni contemporaneamente.
Nei sistemi multiprogrammati, che spesso sono anche multiutente, più processi sono
presenti in memoria e il controllo viene trasferito da un processo in esecuzione ad un
altro per evitare lunghe attese da parte della CPU ed aumentarne il fattore di
utilizzazione. Nei sistemi multiutente a divisione di tempo (time-sharing) o interattivi,
come ad es. UNIX, per dare l'impressione a ciascun utente di avere una propria
macchina personale il trasferimento del controllo viene forzato periodicamente tramite
il meccanismo delle interruzioni hardware.
Se un calcolatore è dotato di più unità di elaborazione (CPU) riesce a realizzare un vero
e proprio parallelismo dei processi (overlapping), ossia i processi sono realmente
eseguiti in parallelo, vale a dire tanti processi possono essere eseguiti
contemporaneamente nel tempo quante sono le CPU disponibili.
Nel caso più comune (e più economico) esiste una sola CPU nel sistema di calcolo,
perciò il parallelismo non è reale ma simulato. L'esecuzione di diversi processi viene
alternata (tecnica di interleaving); in ogni momento solo un processo alla volta è in
esecuzione, e potrebbe anche trattarsi di codice del sistema operativo, mentre
l'esecuzione di tutti gli altri viene sospesa. In un sistema time-sharing l'interleaving è
abbastanza frequente da dare l'impressione umana che i job vengano eseguiti
contemporaneamente, proprio come se ciascuno avesse una sua CPU dedicata.
Un sistema operativo multiprogrammato consente quindi una migliore utilizzazione
delle risorse hardware, a fronte di una maggiore complessità del sistema operativo
stesso. Infatti la multiprogrammazione presenta vari problemi, di protezione o
interferenza nell'accesso a dati comuni, di interazione e comunicazione tra i processi
che devono essere risolti dal sistema operativo tramite opportuni algoritmi e
opportune procedure che il sistema operativo deve mettere a disposizione del
programmatore di applicazioni.
Il sistema operativo deve implementare un algoritmo di scheduling che opera le
transizioni da un processo ad un altro, tenendo in conto anche fattori di priorità
assegnati ai processi. La multiprogrammazione ha un costo computazionale che può
essere spesso trascurabile, ma non è mai nullo, nonostante l'hardware possa offrire
funzionalità che la facilitano: c'è sempre un overhead software non nullo, cioè del
tempo impiegato dal sistema operativo per la schedulazione e altre attività connesse.
Bootstrap
Indica, in generale, l'insieme dei processi che vengono eseguiti da un computer durante
la fase di avvio, in particolare dall'accensione fino al completo caricamento in memoria
primaria del kernel del sistema operativo a partire dalla memoria secondaria.
Kernel
Costituisce il nucleo di un sistema operativo. Si tratta di un software avente il compito
di fornire ai processi in esecuzione sull'elaboratore un accesso sicuro e controllato
all'hardware. Dato che possono esserne eseguiti simultaneamente più di uno, il kernel
ha anche la responsabilità di assegnare una porzione di tempo-macchina (scheduling)
e di accesso all'hardware a ciascun programma (multitasking).
L'accesso diretto all'hardware può essere anche molto complesso, quindi i kernel
usualmente implementano uno o più tipi di astrazione dall'hardware, il cosiddetto:
Hardware abstraction layer. Queste astrazioni servono a "nascondere" la complessità e
a fornire un'interfaccia pulita ed uniforme all'hardware sottostante, in modo da
semplificare il lavoro degli sviluppatori. I kernel si possono classificare - in base al grado
di astrazione dell'Hardware - in quattro categorie:

Kernel monolitici, che implementano direttamente una completa astrazione
dell'hardware sottostante.

Microkernel, che forniscono un insieme ristretto e semplice di astrazione
dell'hardware e usano software (chiamati device driver o server) per fornire maggiori
funzionalità.

Kernel ibridi (o microkernel modificati), che si differenziano dai microkernel puri
per l'implementazione di alcune funzioni aggiuntive al fine di incrementare le
prestazioni.

Esokernel, che rimuovono tutte le limitazioni legate all'astrazione dell'hardware
e si limitano a garantire l'accesso concorrente allo stesso, permettendo alle singole
applicazioni di implementare autonomamente le tradizionali astrazioni del sistema
operativo per mezzo di speciali librerie.