appuntiDiIngegneria
Sistemi Operativi
Sommario
1.0. Sistemi Operativi .............................................................................................................................. 3
1.1. Sistemi Operativi più Famosi ............................................................................................................ 7
1.2. Storia dei Sistemi Operativi .............................................................................................................11
1.3. Virtualizzazione ...............................................................................................................................14
1.4. System Call ......................................................................................................................................18
1.4.1. Primitive di Gestione di File e Directory in UNIX ...........................................................................20
1.4.2. Primitive di Gestione dei Processi in UNIX....................................................................................23
1.4.3. Primitive di Comunicazione tra Processi in UNIX ..........................................................................26
1.5. Shell UNIX .......................................................................................................................................28
1.6. Sistemi Real Time ............................................................................................................................31
1.7. Gestione dei Processi ......................................................................................................................35
1.7.1. Creazione di un Processo .............................................................................................................36
1.7.2. Bootstrap ....................................................................................................................................39
1.7.3. Ciclo di Vita di un Processo ..........................................................................................................40
1.7.4. Algoritmi di Schedulazione dei Processi .......................................................................................44
1.7.4.1. Schedulazione nei Sistemi Batch ..............................................................................................45
1.7.4.2. Schedulazione nei Sistemi Interattivi........................................................................................46
1.7.4.3. Schedulazione nei Sistemi Real Time ........................................................................................48
1.7.4.4. Schedulazione in UNIX .............................................................................................................48
1
1.7.4.5. Schedulazione in Linux .............................................................................................................50
1.7.4.6. Schedulazione in Windows 2000 ..............................................................................................50
1.7.5. Modello a Thread .......................................................................................................................51
1.7.5.1. Multithreading in Java .............................................................................................................54
1.7.5.2. Programmazione Concorrente .................................................................................................56
1.7.5.2.1. Semafori ..................................................................................................................................60
1.7.5.2.2. Monitor ...................................................................................................................................62
1.7.5.2.3. Problema dei 5 Filosofi a Cena .................................................................................................63
1.8. Gestione della Memoria ..................................................................................................................65
1.8.1. Monoprogrammazione ................................................................................................................65
1.8.2. Multiprogrammazione a Partizioni Fisse ......................................................................................66
1.8.3. Swapping .....................................................................................................................................67
1.8.4. Memoria Virtuale ........................................................................................................................69
1.8.4.1. Memoria Virtuale con Paginazione ..........................................................................................69
1.8.4.2. Algoritmi di Sostituzione dei Blocchi ........................................................................................74
1.8.4.3. Memoria Virtuale con Segmentazione .....................................................................................80
1.8.4.4. Segmentazione con Paginazione ..............................................................................................81
1.9. File System ......................................................................................................................................82
1.9.1. Gestione delle Directory ..............................................................................................................86
1.9.2. Implementazione di un File System .............................................................................................87
1.9.3. Implementazione delle Directory .................................................................................................91
1.9.4. File System più Famosi.................................................................................................................93
1.9.5. Dimensionamento dei Blocchi di un Disco....................................................................................96
1.9.6. Affidabilità e Consistenza dei File System.....................................................................................96
1.9.7. File System UNIX .........................................................................................................................98
1.9.8. File System MS-DOS ..................................................................................................................102
1.9.9. File System di Windows 98 ........................................................................................................103
1.9.10. File System di NT .......................................................................................................................104
1.10. Gestione delle Periferiche ..........................................................................................................105
2
1.0. Sistemi Operativi
Un Sistema Operativo SO (oppure OS dall’inglese) è il software fondamentale presente su un
calcolatore che agisce da intermediario fra le applicazioni e l’hardware sottostante, e poiché agisce
direttamente con l’hardware esso rende possibile un uso semplice, efficiente, corretto e sicuro
delle risorse fisiche (Processore, Memoria, Periferiche):
Semplice perché il SO semplifica l’utilizzo dell’hardware offrendo all’utente un’astrazione
più semplice e potente della semplice macchina fisica, ovvero una Macchina Virtuale MV
che gli offre molti più servizi e consente di fare più cose. Il prezzo da pagare per avere
questa “semplicità” è un po’ di tempo di elaborazione in più in quanto si sta aggiungendo
uno strato software aggiuntivo tra hardware e software;
Efficiente perché il SO gestisce le risorse hardware in maniera efficiente ottimizzando
l’intero sistema di elaborazione;
Corretto e Sicuro perché il SO deve gestire i malfunzionamenti del sistema facendo in
modo che un Processo non apporti danni al sistema, che non ci siano interazioni pericolose
tra processi diversi ed utenti diversi, e che tutte le eccezioni e le interruzioni siano gestite
correttamente al fine di impedire all’utente di compiere operazioni dannose per
l’hardware.
Riassumendo all’osso si può dire che il SO svolge 2 compiti fondamentali: è il gestore delle risorse
hardware , ed offre agli utenti una macchina virtuale che astrae la complessità della macchina
fisica. I Sistemi operativi vengono analizzati da 2 punti di vista differenti:
Dal lato del Programmatore: chi scrive applicazioni ha bisogno di interagire con il SO
sfruttando i servizi (API) che esso mette a disposizione. Si tratta di conoscere delle
istruzioni speciali che prendono il nome di System Calls (chiamate a servizi).
Dal lato del Sistema: chi deve utilizzare “parti” del sistema di elaborazione deve
comprendere come il SO funziona ed offre determinati servizi. 3
Il S.O. è formato da un insieme di programmi organizzati tra loro in modo tale che ciascuno di essi
si occupi di un compito specifico, secondo uno schema detto a buccia di cipolla (onion skin in
inglese) cioè a strati. I programmi che occupano una posizione più interna interagiscono
maggiormente con l'hardware, mentre i programmi collocati più all'esterno interagiscono
maggiormente con l'utente. In generale gli strati più esterni si servono degli strati sottostanti ma
non capita mai il contrario.
In genere ognuno di questi strati costituisce una sorta di MV che astrae la complessità di una
determinata risorsa hardware. Vengono descritti gli strati a partire da quello più esterno:
Interprete dei comandi: meglio noto come Shell, è la parte più esterna del SO dalla quale
l’utente può interagire con quest’ultimo inserendo opportune funzioni per cancellare e
creare Processi, gestire la memoria primaria e secondaria, utilizzare la rete oppure
accedere e gestire il File System. Spesso i sistemi operativi si differenziano proprio dal
punto di vista dell’interprete dei comandi: esistono interpreti amichevoli basati sull’utilizzo
del mouse per esempio Windows, in tal caso si parla di GUI (Graphical User Interface), ed
interpreti basati su righe di comando per esempio MS-DOS, in tal caso si parla di una
CUI (Command User Interface).
File System: anche noto come Gestore dei File, è la parte di SO responsabile
dell’archiviazione dei dati sulle memorie di massa strutturandoli mediante contenitori
logici (file) identificati da un nome logico (filename) ed organizzando i file in modo
gerarchico tramite cartelle (directory). In particolare il File System deve gestire in modo
ottimale lo spazio disponibile della memoria di massa, garantire agli utenti l'accesso ai dati
contenuti nei file in modo molto veloce, anche in presenza di richieste di accesso
contemporaneo allo stesso file da parte di più processi, fornire agli utenti meccanismi di
protezione dei file (controllo degli accessi), ed infine rendere disponibile in modo semplice
operazioni di uso comune come copia, cancellazione, cambio di nome, elencazione,
organizzazione gerarchica tramite la creazione di cartelle. Esistono implementazioni
diverse per i file system e di conseguenza l'organizzazione dei dati sulle memorie di massa
4
cambia di conseguenza, è infatti usuale riferirsi ad una memoria di massa indicando quale
file system la gestisce. Per i sistemi Windows sono disponibili i files system: FAT, FAT32 e
NTFS.
Gestore delle Periferiche: è la parte di SO che facilita le operazioni di I/O delle periferiche
mascherandone tutte le caratteristiche fisiche, mettendo a disposizione delle primitive per
le operazioni di lettura/scrittura di più alto livello, che quindi possono essere utilizzate
nascondendo all’utente ed al programma i dettagli tecnici del dispositivo. Il S.O. ha inoltre
il compito di regolare l'accesso a tali risorse da parte dei Processi che ne fanno richiesta. In
alcuni casi è implementato un meccanismo di virtualizzazione della risorsa stessa per
dare l'impressione al processo di avere accesso ad una risorsa che in realtà è già assegnata
e impegnata da un altro processo. È questo il caso della stampante, sulla quale è
implementata la coda di stampa, che consente ad un processo di mandare in stampa un
documento anche se in quel momento la stampante è già occupata in un altro lavoro.
Gestore della Memoria: Per poter essere eseguiti i programmi devono essere caricati
nella RAM, ma poiché essa possiede una dimensione limitata normalmente non è in grado
di contenere tutti i programmi contemporaneamente in esecuzione. Allora il SO
implementa un meccanismo detto di Virtualizzazione della Memoria (Memoria Virtuale
MV) in base al quale ogni Processo ha l’impressione di disporre di una Memoria Centrale
molto più grande di quella fisicamente presente nel computer (grande quanto l’intero
spazio di indirizzamento del programma). Questo meccanismo sfrutta parte della memoria
secondaria (ad esempio di un hard disk) per creare dei file di paging sui quali spostare le
pagine che dovrebbero risiedere in RAM ma che non trovano spazio in quel momento.
Questa operazione di spostamento dalla RAM al file di paging e viceversa si
chiama swapping. Se lo swapping è molto frequente le prestazioni del computer si
riducono. In tal modo vengono anche mascherati i dettagli sulla collocazione fisica dei dati.
Gestore dei Processi: anche noto come Scheduler, è il cuore del SO (Kernel), in quanto è la
parte che si occupa di gestire i Processi, ovvero i programmi in esecuzione sull’elaboratore
pronti a sfruttare le risorse hardware che quest’ultimo mette a disposizione. Questo strato
comunica direttamente con l’hardware ed è strettamente dipendente da esso, per tale
motivo i microprogrammi che lo compongono vengono chiamati Primitive del Nucleo. Il
kernel deve quindi assegnare ciclicamente e per un tempo molto limitato la CPU ai Processi
che le richiedono, comportandosi come un semaforo che regola il traffico ad un incrocio
dando il verde un po' a tutti ma per un tempo limitato. Per effettuare tale gestione il Kernel
deve implementare un opportuno Algoritmo di Scheduling dei Processi.
Quando si acquista un computer, specialmente un portatile o un desktop di marca, il SO
solitamente è già installato. Se invece si acquista un computer assemblato, cioè si acquistano
separatamente i singoli pezzi e si assemblano in proprio (o con l'aiuto di un tecnico), è necessario
acquistare separatamente il SO ed installarlo successivamente nel computer. Quando il computer
5
è spento il S.O. è presente su una memoria di massa, solitamente una ROM. All'accensione della
macchina ha luogo una fase detta di boot (o bootstrap), durante il quale viene eseguito un
programma presente in ROM detto BIOS il quale, sostanzialmente, carica il SO nella RAM per
avviarlo. I dettagli saranno decritti nelle prossime sezioni. Oltre ai compiti “tradizionali” un SO
deve fornire al programmatore delle API per sfruttare i servizi di rete. In genere il SO è uno strato
software organizzato secondo un Modello Monolitico, nella quale tutto è messo insieme senza
alcuna strutturazione ben precisa:
Il vantaggio del Modello Analitico è l’efficienza raggiunta dal SO dal punto di vista prestazionale,
che è l’obiettivo fondamentale da raggiungere; lo svantaggio è la difficoltà nell’aggiornamento del
codice, in quanto questi 4 pezzi del SO costituiranno un unico codice software nel quale è difficile
isolare una funzionalità ricercata. Il SO viene suddiviso in 4 pezzi fondamentali responsabili della
stretta interazione con l’hardware sottostante, ed essi devono essere eseguiti necessariamente in
Modalità Supervisore (o Modalità Kernel), cioè in una modalità privilegiata che consenta ai
programmi di accedere e gestire direttamente l’hardware sottostante. La Shell del SO e tutto il
software applicativo viene invece eseguito in Modalità Utente, nella quale le funzioni a
disposizione sono molto limitate al fine di impedire ad utenti inesperti mediante i loro programmi
di danneggiare le risorse hardware; in tale modalità i programmi hanno a disposizione solo un
sottoinsieme delle istruzioni assembler, solo una parte della RAM e solo alcuni registri di sistema.
Altri SO adottano una diversa organizzazione con il Modello Client-Server che cerca di ridurre al
minimo i pezzi di SO che lavorano in modalità supervisore (le system calls) e si basano quindi su un
Micro Kernel detto anche nucleo minimo. 6
Molte funzioni sono realizzate da processi server che sono in esecuzione nella modalità utente,
quindi il Micro Kernel si compone essenzialmente di funzioni di base per la gestione dei processi
come lo schedulatore ed i meccanismi di comunicazione fra Processi, ovvero le primitive di
comunicazione di base send() e receive(). Questo modello è più sicuro rispetto quello Monolitico,
adatta bene a SO di rete, ma risulta meno efficiente DEL Monolitico in quanto aggiunge un
ulteriore strato software aggiuntivo che è il Micro Kernel. Il mercato attuale privilegia il modello
Monolitico. 1.1. Sistemi Operativi più Famosi
Proprio perché si tratta del primo software da caricare su una macchina nuova, bisogna avere ben
presente quali e quanti sono SO in commercio. I SO più diffusi sono i Windows di Microsoft (che
hanno soppiantato l’MS-DOS), il MacOs di Macintosh, Linux e Unix utilizzati soprattutto per i
server o in ambito di ricerca. Viene mostrata una descrizione più accurati di questi:
Windows: è il SO più diffuso della Microsoft, attualmente disponibile sul mercato nella
versione Windows 10. I vantaggi principali di un sistema operativo Windows sono
riconducibili al fatto che è facile sia da imparare che da usare ma soprattutto che si tratta
di un SO universalmente supportato. Utilizzando infatti un SO Windows, non ci dovrebbero
mai essere problemi di compatibilità con la quasi totalità delle periferiche e dei software
presenti in commercio. Tutti gli applicativi standard girano su
Windows, compatibile con quasi tutto l’hardware sul mercato,
ad oggi la stragrande maggioranza delle applicazioni è
concepita per Win
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.