Sistemi operativi

Un Sistema Operativo (abbreviato come SO o OS dall’inglese
Operating System) è quella componente software di un
computer responsabile della gestione e coordinamento di
tutte le attività e la condivisione delle risorse hw/sw di un
computer. Uno dei suoi scopi principali è quello di gestire
l’interazione tra l’uomo e la macchina nascondendo i dettagli
delle operazioni hardware.
Utente
Applicazioni
Hardware
Sistemi Operativi
Prof. Paolo Michelini
Primi sistemi operativi

Monitor: il primo tipo di sistema operativo mai implementato su un computer
con un’interfaccia interattiva minima per impartire i comandi. Permette solo di
scrivere in memoria il programma da eseguire e di lanciarlo. Spesso i suoi
comandi sono semplici chiamate dirette a sottoprogrammi in linguaggio
macchina. Si limita a inizializzare il sistema ed a rimanere poi in attesa di
comandi, cedendo il controllo completo della macchina ai programmi che
vengono lanciati.

Interprete: è un interprete di comandi o di un semplice linguaggio di
programmazione che funge da interfaccia utente (shell). Con questa
interfaccia è possibile creare delle liste di comandi interpretati ed eseguiti
lasciando libero l’interprete di eseguire altri comandi (comandi batch).

DOS (Disk Operating Systems): un computer diventa molto più utile ed
efficace se dotato di una memoria di massa e di un software (file system) che
permetta di organizzare e gestire i dati sui mezzi di memorizzazione secondo
una struttura ben precisa. I sistemi operativi che risiedevano su disco e
capaci di gestire un file system sono detti genericamente Disk Operating
Systems, cioè DOS appunto. Il più famoso è il MS-DOS della Microsoft, oggi
non più in uso ed evolutosi negli anni nelle varie versioni di Windows, fino
alla attuale Windows 7.
Sistemi Operativi
Prof. Paolo Michelini
Principali componenti di un
sistema operativo
Un generico sistema operativo moderno si compone di:





Il kernel
Un gestore di file system
Uno scheduler
Un gestore di memoria
Un'interfaccia utente (shell o GUI)
Sistemi Operativi
Prof. Paolo Michelini
Kernel

Il kernel è il nucleo di un sistema operativo. Si tratta di un software
che offre a) le funzioni fondamentali ai moduli che compongono il
sistema operativo e ai programmi in esecuzione sul computer
(chiamati processi o task) e b) un'interfaccia uniforme verso
l'hardware tale da nascondere la complessità di accesso e gestione
dello stesso.



Sistemi Operativi
Microkernel: il kernel implementa soltanto un numero molto ristretto di
funzioni, delegando il resto ad altre parti. Il vantaggio di un sistema
operativo microkernel è la semplicità del suo kernel e la possibilità di
cambiare facilmente i moduli e che se un modulo crolla non crolla tutto il
sistema; lo svantaggio è l'interazione più complessa e costosa fra il
kernel e le altre componenti del S.O. stesso, che spesso rallenta il
sistema.
Kernel monolitico (tradizionale): integra dentro di sé la gestione della
memoria, dei processi e dei file su disco, nonché il software necessari per
il controllo di tutte le periferiche collegate (driver). Questo tipo di kernel è
più complesso da progettare, mantenere ed aggiornare, ma è anche più
veloce ed efficiente.
Kernel modulari (evoluzione dei monolitici): mantengono al loro interno i
moduli fondamentali di gestione (memoria, processi e file su disco), ma
separano alcune funzioni non essenziali in moduli a sé stanti, da caricare
in memoria solo in caso di effettivo uso della funzione o periferica di loro
competenza.
Prof. Paolo Michelini
File System


Il File System si occupa del modo in cui i file sono
immagazzinati e organizzati su un dispositivo di
archiviazione, come un hard-disk o un CD-ROM. Esistono
molti tipi di file system, creati per diversi sistemi operativi, per
diverse unità di memorizzazione e per diversi usi. Si possono
identificare due grandi classi di file system: file system per
unità locali, destinate ad organizzare fisicamente i dati su un
disco, e i file system distribuiti, nati per condividere i dati fra
più computer collegati attraverso una rete, superando le
differenze fra sistemi operativi e filesystem locali delle varie
macchine.
Esempi di Filesystem per unita’ locali:




Ext3, JFS (Linux)
FAT, FAT32, NTFS (Windows)
HFS+ (Mac OSX)
Filesystem distribuiti


Sistemi Operativi
NFS (Network File Sysyem)
AFS (Andrew File System)
Prof. Paolo Michelini
Scheduler - multitasking



Lo scheduler è il componente fondamentale dei sistemi
operativi multitasking, cioè quelli in grado di eseguire più
processi/task contemporaneamente. Se, ad esempio, viene
chiesto al sistema di eseguire contemporaneamente due
processi A e B, la CPU eseguirà per qualche istante il
processo A, poi per qualche istante il processo B, poi tornerà
ad eseguire il processo A e così via. In questo modo abbiamo
la sensazione che i processi siano eseguiti allo stesso tempo
in parallelo.
Lo scheduler si occupa di gestire lo stato dei processi come,
ad esempio, fare avanzare un processo interrompendone
temporaneamente un altro (ad esempio per una richiesta di
I/O), realizzando così un cambiamento di contesto (context
switch).
Al cambio di task il sistema operativo è costretto a salvare
tutti o quasi i registri della CPU e ricaricarli con quelli salvati
dal task che subentra. Esistono vari algoritmi di scheduling
che permettono di scegliere nella maniera più efficiente
possibile quale task far proseguire.
Sistemi Operativi
Prof. Paolo Michelini
Tipologie di multitasking
Esistono sostanzialmente due modi di implementare il multitasking:
cooperative (cooperativo) e preemptive (con prelazione).

Nel primo, non più utilizzato, sono i programmi che cedono
spontaneamente il controllo al sistema non appena hanno terminato
la singola operazione in corso (es: Windows 3.1); nel secondo è lo
scheduler che ferma i programmi allo scadere del quanto di tempo
assegnato e trasferisce il controllo dall'uno all'altro (adottato dalla
maggior parte dei sistemi operativi moderni)

Il preemptive multitasking necessita di CPU che implementino in
hardware sia i livelli di privilegio per l'esecuzione del codice, sia una
logica specifica per il cambio di task (context switch) eseguito dallo
scheduler . Al cambio di task il sistema operativo è costretto a
salvare tutti o quasi i registri della CPU e ricaricarli con quelli salvati
dal task che subentra, perdendo molto tempo. A fronte di queste
maggiori richieste, il preemptive multitasking offre una sicurezza del
sistema molto maggiore rispetto al cooperative ed una (virtuale)
immunità ai crash di tutto il sistema causati da errori nei singoli
programmi in esecuzione.
Sistemi Operativi
Prof. Paolo Michelini
Gestore della memoria



Il gestore di memoria è la componente del sistema operativo che si
occupa di gestire ed assegnare la memoria ai processi che ne fanno
richiesta. La gestione della memoria è necessaria per tenere traccia di
quanta memoria è impegnata e di quanta invece è disponibile per
soddisfare nuove richieste: in mancanza di un sistema di gestione, si
avrebbe prima o poi il caso di processi che ne sovrascrivono altri, con gli
ovvi inconvenienti.
Un altro buon motivo per registrare la memoria usata dai vari processi è
il fatto che in caso di errori gravi i processi possono andare in crash e
non essere più in grado di comunicare al sistema che la memoria che
occupano può essere liberata: in questo caso è compito del gestore di
memoria, dopo la terminazione anomala del processo, marcare come
libere le zone di memoria possedute dal processo "defunto", rendendole
disponibili per nuove allocazioni.
Per poter gestire i programmi, divenuti processi, è necessario che tutti
gli indirizzi definiti in essi siano calcolati in forma relativa alla prima
istruzione del programma (come se il programma dovesse essere
caricato a partire dall’indirizzo 0 di memoria centrale.) Al momento del
caricamento, che può essere eseguito in qualsiasi zona libera della
memoria, gli indirizzi relativi verranno sommati al primo indirizzo di
effettivo caricamento, diventando così assoluti: INDIRIZZO ASSOLUTO =
INDIRIZZO RELATIVO + INDIRIZZO DI PARTENZA
Sistemi Operativi
Prof. Paolo Michelini
Memoria virtuale



Dovendo ospitare in memoria centrale più programmi
nello stesso tempo, i sistemi multitask hanno bisogno di
più memoria rispetto a quelli monotask. Per far ciò si
può utilizzare un'architettura a memoria virtuale, capace
di simulare uno spazio di memoria centrale maggiore di
quello fisicamente presente
In questo caso, il gestore della memoria si occupa
anche di mappare (INDIRIZZARE) la memoria virtuale
offerta ai programmi sulla memoria fisica e sui dischi
rigidi del sistema, copiando da memoria a disco rigido e
viceversa le parti di memoria necessarie di volta in volta
ai programmi, senza che i programmi stessi o gli utenti
debbano preoccuparsi di nulla.
Questa operazione è normalmente gestita via hardware
tramite una MMU, (Memory Management Unit),
generalmente integrata all'interno della CPU.
Sistemi Operativi
Prof. Paolo Michelini
Interfaccia utente



Interfaccia utente: si tratta di un programma che
permette all'utente di interagire con il computer.
Esistono sostanzialmente due famiglie di interfacce
utente: interfaccia a linea di comando e interfacce
grafiche (GUI = Graphic User Interface)
L'interfaccia a linea di comando (shell o terminale)
è l'ambiente di lavoro attraverso il quale è possibile
impartire al computer comandi e richiedere
l'esecuzione di programmi in modo puramente
testuale (es: DOS)
Con le GUI l'interazione con il computer non
avviene più in modo testuale, ma operando su
icone e finestre che permettono di fare operazioni
complesse con un clic del mouse (es: GNOME e
KDE nei sistemi Unix e Unix-like, Finder in Mac OS
e Windows Explorer nei sistemi Microsoft
Windows)
Sistemi Operativi
Prof. Paolo Michelini
Sistemi operativi multiutente

Sistema multiutente: se un computer può far girare più
programmi contemporaneamente, allora può anche
accettare comandi da più utenti contemporaneamente.

I problemi di sicurezza di questi sistemi si risolvono
assegnando un account univoco per ogni utente,
assegnando un proprietario ai file ed ai programmi con un
sistema di permessi per l'accesso ad essi e prevedendo
una gerarchia di utenti (cioè di account). Così facendo, il
sistema rifiuterà tutti i comandi potenzialmente
"pericolosi" e li accetterà soltanto se impartiti da un utente
in cima alla gerarchia, cioè l'amministratore del sistema
(generalmente
l'account
root
nei
sistemi
Unix,
Administrator nei sistemi Windows).
Sistemi Operativi
Prof. Paolo Michelini
Sistemi operativi real-time




Sistema operativo real-time: è un particolare tipo di
sistema operativo in grado di garantire una risposta
entro un dato tempo limite (millisecondi o
microsecondi) a qualunque evento esterno.
Non hanno memoria virtuale
Per gestire le periferiche, i sistemi real-time usano
spesso, al posto degli interrupt, il così detto polling
(verifica ciclica di tutte le unità di input/output),
meno efficiente, ma deterministico
I sistemi real-time sono normalmente utilizzati in
ambito industriale dove è necessario ottenere una
risposta dal sistema in un tempo massimo
prefissato.
Sistemi Operativi
Prof. Paolo Michelini
Sistemi operativi distribuiti

Tra le varie ipotesi d'uso di un sistema
operativo c'è anche la possibilità di sistemi
distribuiti in rete. In tal caso la computazione
viene distribuita tra più computer collegati in
rete tra loro. In questo modo le risorse e il
carico computazionale vengono condivise e
bilanciate, si ottiene una maggiore affidabilità e
i costi sono più contenuti nella scalabilità. Una
configurazione
funzionalmente
simmetrica
permette che tutte le macchine componenti
abbiano lo stesso ruolo nel funzionamento del
sistema e lo stesso grado di autonomia. Una
approssimazione
pratica
di
questa
configurazione è il clustering.
Sistemi Operativi
Prof. Paolo Michelini