Andrea Mansi - UNIUD - Riassunto Teoria Sistemi Operativi
Sistemi Operativi
Riassunto
Andrea Mansi 2018-2019 - UNIUD
Bibliografia:
Slides Prof. Marina Lenisa UNIUD
Slides Prof. Ivan Scagnetto UNIUD
1
Andrea Mansi - UNIUD - Riassunto Teoria Sistemi Operativi
Sommario
1. Introduzione ............................................................................................................................................. 3
2. Richiami di Hardware ................................................................................................................................ 6
3. Struttura dei Sistemi Operativi .................................................................................................................. 7
4. Processi & Threads.................................................................................................................................. 11
5. Scheduling dei Processi ........................................................................................................................... 18
6. Cooperazione tra Processi ....................................................................................................................... 25
7. Deadlock ................................................................................................................................................. 34
8. Memory Management ............................................................................................................................ 38
9. Virtual Memory....................................................................................................................................... 45
10. Input / Output....................................................................................................................................... 52
11. Dischi .................................................................................................................................................... 58
12. File System ............................................................................................................................................ 65
13. Implementazione del File System .......................................................................................................... 69
2
Andrea Mansi - UNIUD - Riassunto Teoria Sistemi Operativi
1. Introduzione
Sistema Operativo: Un sistema operativo, abbreviato S.O. è un software di sistema che
agisce come intermediario tra l’utente e l’hardware del calcolatore. Un S.O. ha il compito di
gestire le risorse hardware e software di quest’ultimo e di fornire servizi di base ai software
applicativi installati. Inoltre, si pone l’obbiettivo di nascondere tutti i dettagli tecnici legati allo
specifico hardware e architettura su cui è installato, rappresentando le informazioni ad un
alto livello, meglio comprensibile dall'uomo. Un sistema operativo fornisce all'utente una
serie di comandi e servizi per usufruire al meglio della potenza di calcolo di un qualsivoglia
elaboratore elettronico. Esso garantisce l'operatività di base di un calcolatore, coordinando e
gestendo le risorse hardware di processamento, memorizzazione, input/output, le
risorse/attività software (processi) e facendo da interfaccia con l'utente, senza il quale non
sarebbe possibile l'utilizzo del calcolatore stesso. Riassumendo, un S.O. si pone
principalmente l’obbiettivo di creare una macchina astratta, realizzando funzionalità di alto Schema di un S.O.
livello, nascondendo i dettagli di basso livello; un S.O. mira quindi a soddisfare principalmente
i seguenti criteri:
• Eseguire i programmi utente e semplificargli l’utilizzo del calcolatore.
• Gestire le risorse del calcolatore in modo sicuro ed efficiente.
Questi obbiettivi sono in contrapposizione (avere un sistema più efficace ed efficiente possibile). A quale obbiettivo
dare priorità dipende dal contesto e dalle politiche introdotte dal sistema operativo.
Kernel: Nucleo di un sistema operativo: Il kernel è un gruppo di funzioni
fondamentali, strettamente interconnesse fra loro, e con l'hardware, che
vengono eseguite con il privilegio massimo disponibile sulla macchina (la
modalità kernel designa proprio questo tipo di interazione). Un kernel non è altro
che un software che ha il compito di fornire ai moduli che compongono il sistema
operativo e ai programmi in esecuzione sul calcolatore le funzioni fondamentali,
inoltre fornisce egli un accesso controllato all'hardware, sollevandoli dai dettagli
della sua gestione. Il kernel fornisce dunque le funzionalità di base per tutte le
altre componenti del sistema operativo, che assolvono le loro funzioni Schema di un Kernel Monolitico
servendosi dei servizi che esso offre, è dunque la colonna portante di un S.O..
A seconda del tipo di sistema operativo il kernel può inglobare altre parti (kernel
classico, monolitico o modulare) o fornire solo funzioni base delegando più
funzioni possibili a “servers” (moduli) esterni (microkernel). Un kernel
tradizionale, ovvero monolitico, integra invece dentro di sé la gestione della
memoria virtuale e della CPU, lo scheduler e i gestori del file system, nonché i
driver necessari per il controllo di tutte le periferiche collegate. Quali funzioni sia
opportuno che il kernel debba fornire e quali possano essere demandate a
moduli esterni è oggetto di opinioni divergenti (che danno appunto vita alle
diverse tipologie di kernel sopracitate). Il vantaggio di un sistema operativo con
Schema di un Microkernel microkernel è la maggiore semplicità del suo kernel, del suo sviluppo, della
possibilità di cambiare facilmente i moduli e di una certa tolleranza ai guasti in quanto se un modulo "crolla" (crash),
solo la funzionalità del modulo in questione si interrompe, ed il sistema rimane funzionale e gestibile
dall'amministratore (che può ad esempio ripristinare la funzionalità del modulo stesso); lo svantaggio è invece
l'interazione più complessa e costosa fra kernel e le altre componenti del S.O. stesso, che spesso rallenta il sistema e/o
lo rende meno stabile. 3
Andrea Mansi - UNIUD - Riassunto Teoria Sistemi Operativi
Alcuni concetti e tipologie base di sistemi operativi:
Multiprogrammazione: In generale un singolo utente quando utilizza un calcolatore non può tenere costantemente
occupati la CPU e i dispositivi di I/O. La multiprogrammazione consente di aumentare l’utilizzo della CPU organizzando
il lavoro in modo tale da mantenerla in continua attività. L’ idea su cui si fonda questo concetto è la seguente: il sistema
operativo tiene nella memoria centrale diversi processi. Il S.O. sceglie uno tra quelli contenuti nella memoria e inizia
ad eseguirlo. Esso a qualche punto potrebbe trovarsi in attesa di qualche evento, come il completamento di
un’operazione di input output. In questo caso nei sistemi non multiprogrammati la CPU rimarrebbe inattiva, ma in
questo caso, invece, il S.O. passa a un altro processo e lo esegue. Quando il primo processo ha terminato l’attesa, la
CPU ne riprende l’esecuzione. Finché c’è almeno un lavoro da eseguire la CPU non rimarrà mai inattiva.
Multitasking: In informatica, un sistema operativo con supporto per il multitasking (multiprocessualità) permette di
eseguire più programmi contemporaneamente. Se ad esempio viene chiesto al sistema di eseguire in contemporanea
due processi A e B, la CPU eseguirà per qualche istante di tempo il processo A, poi per qualche istante successivo il
processo B, poi tornerà a eseguire il processo A e così via. Il passaggio dal processo A al processo B e viceversa viene
definito "commutazione di contesto" (context switch). Le decisioni riguardanti l'esecuzione di un cambio di contesto
tra due programmi vengono intraprese da un componente del sistema operativo, lo scheduler processi, il quale invierà
le proprie decisioni a un altro modulo del sistema operativo, il dispatcher, che eseguirà effettivamente il cambio di
contesto. A seconda di quale strategia (algoritmo di scheduling) venga seguita, lo scheduler controlla la ripartizione
del tempo di CPU tra tutti i processi attivi.
Sistemi Time-Sharing: Letteralmente "condivisione di tempo", è un approccio all'uso interattivo dei calcolatori in cui
un singolo calcolatore viene utilizzato contemporaneamente da più utenti, ciascuno con un proprio terminale. Più
nello specifico, l'esecuzione dell'attività della CPU viene suddivisa in quanti o intervalli temporali (come nel
multitasking). Ogni quanto è assegnato sequenzialmente a vari processi di uno stesso utente o a processi di più utenti.
La CPU del calcolatore viene quindi utilizzata per rispondere alle richieste dei singoli utenti, passando rapidamente da
uno all'altro e dando l'impressione che ognuno abbia a disposizione il calcolatore centrale interamente per sé. Il time-
sharing è correlato al multitasking nel senso che in ambedue i sistemi un singolo computer esegue più processi in
modo che appare simultaneo. Tuttavia, il time-sharing fa riferimento ad un calcolatore che supporta più utenti
simultaneamente, mentre il multitasking, come definito precedentemente è un termine più ampio che implica
l'esecuzione di più processi “contemporaneamente”. Nei sistemi time-sharing è più importante garantire un basso
tempo di risposta rispetto al minimizzare il tempo di turnaround dei processi. Due persone che utilizzano lo stesso
sistema time-sharing allo stesso momento potrebbero ricevere tempi di risposta molto differenti, infatti, il tempo di
risposta dipende molto dal tipo di processo in esecuzione: un processo CPU-bound potrebbe avere un tempo di
risposta molto più lungo di un processo interattivo (processo I/O-bound).
Sistemi Real Time: Un sistema operativo real-time è un sistema operativo specializzato per il supporto di applicazioni
software real-time. Questi sistemi vengono utilizzati tipicamente in ambito industriale (controllo di processo,
pilotaggio di robot, trasferimento dati nelle telecomunicazioni) o comunque dove sia necessario ottenere una risposta
dal sistema entro un tempo prefissato. Un sistema operativo real-time non deve essere necessariamente veloce: non
è importante l'intervallo di tempo in cui il sistema operativo/applicativo deve reagire; l'importante è che risponda
entro un tempo massimo prefissato. In altre parole, il sistema deve essere prevedibile, nel senso che nel sistema si
possa conoscere il tempismo reale (nei migliori o peggiori dei casi) di un determinato processo o elaborazione. Quindi
un sistema real-time deve garantire che una elaborazione (o job/task) termini entro un dato vincolo temporale o
scadenza (detta in gergo “deadline”). Per garantire questo è richiesto che la schedulazione delle operazioni sia fattibile.
Il concetto di fattibilità di schedulazione è alla base della teoria dei sistemi real-time.
Sistemi Operativi di Rete: Sono quei sistemi operativi utilizzati quando è necessaria la distribuzione della
computazione tra più processi in cui sono presenti più calcolatori che comunicano tra loro attraverso linee di
comunicazione. 4
Andrea Mansi - UNIUD - Riassunto Teoria Sistemi Operativi
Sistemi Operativi Distribuiti: I sistemi operativi distribuiti vengono utilizzati quando più calcolatori sono collegati
tra loro e si hanno più processi che comunicano mediante l’invio di messaggi. In questo caso si vuole ottimizzare
l'utilizzo delle risorse evitando che esse risiedano in una macchina sola. Questo tipo di architettura di un sistema di
elaborazione si chiama "network" ed è costituito da un insieme di calcolatori che, anche se a prima vista possono
apparire come simili, possono essere dedicati a scopi diversi. L’utente ha una visione unitaria del sistema di calcolo.
Kernel Prelazionabile: Un kernel si dice prelazionabile quando consente la prelazione di un processo anche quando
opera in kernel-mode (ad esempio quando esegue il codice di una chiamata di sistema). I punti di prelazionabilità
individuano delle posizioni nel codice delle chiamate di sistema in cui è possibile che il processo venga prelazionato,
solitamente i punti di prelazionabilità vengono individuati in posizioni sicure del kernel, ovvero, laddove non vi siano
in corso operazioni di modifica delle strutture dati di quest’ultimo (per non rischiare di creare delle inconsistenze).
Tipicamente nei sistemi operativi per applicazioni tradizionali il kernel è prelazionabile in quanto non vi sono esigenze
di risposte in tempi così rapidi come quelli tipici di questi sistemi. Invece nei sistemi real-time avere un kernel
prelazionabile è fondamentale per evitare che una chiamata di sistema troppo lunga porti al fallimento dei vincoli
temporali dei vari processi. I vantaggi di un kernel prelazionabile consistono nell’avere dei tempi di risposta molto più
rapidi, raggiungendo un grado di parallelismo molto più alto rispetto ai kernel tradizionali. Gli svantaggi sono
rappresentati dalla maggior complessità del kernel stesso e dal rischio di deadlock/inconsistenze in caso di errori di
progettazione dei punti di prelazione o dell’utilizzo delle primitive di sincronizzazione. 5
Andrea Mansi - UNIUD - Riassunto Teoria Sistemi Operativi
2. Richiami di Hardware
Segue un riassunto delle principali nozioni richieste in ambito hardware per lo studio dei sistemi operativi. Alcune di
queste nozioni verranno riprese e approfondite nei capitoli successivi.
• Struttura dei sistemi di calcolo
• Struttura dell’input/output
• Struttura della memoria
• Protezione hardware
Architettura dei calcolatori: Un sistema operativo (S.O.) è fortemente
legato all’hardware del calcolatore su cui è installato. Infatti un S.O.
estende l’insieme di istruzioni del calcolatore e inoltre gestisce le sue
risorse hardware. Ne consegue che un S.O. deve avere un’ottima
conoscenza interna dell’hardware, o almeno, di come quest’ultimo
appaia ad alto livello. Questa è la ragione per cui tipicamente un S.O.
è scritto in un linguaggio “vicino” alla macchina (assemply, C). Segue
un’illustrazione di un modello astratto del calcolatore.
Struttura della memoria: Idealmente si vorrebbe che la memoria fosse estremamente veloce (più veloce del tempo
richiesto per l’esecuzione di un’istruzione), molto capiente ed economica. In realtà la memoria si distingue in almeno
due categorie: memoria principale ovvero la memoria a cui la CPU può accedere direttamente e la memoria
secondaria, un’estensione della memoria principale che fornisce una memoria non volatile (e solitamente più grande).
Dischi magnetici: Sono il principale dispositivo di archiviazione (memoria secondaria) utilizzato ai giorni nostri. Sono
sostanzialmente dei piatti di metallo rigido in rotazione, ricoperti di materiale ferromagnetico. La superficie del disco
è logicamente divisa in tracce, che sono sotto divise in settori; Il controller del disco determina l’interazione logica tra
il dispositivo ed il calcolatore.
Input/Output: Con input output si indicano le fasi di scambio informazioni tra i
dispositivi collegati al calcolatore e il calcolatore stesso. I dispositivi di I/O possono
funzionare concorrentemente alla CPU, ciascuno di essi possiede un controller
che permette l’interfacciamento con la CPU. Queste operazioni possono essere
eseguite in modo sincrono, asincrono e DMA (Direct Memory Access). Tutto
questo verrà spiegato in modo molto più dettagliato nei capitoli successivi.
Protezione Hardware: La condivisione di risorse di sistema richiede che il S.O.
assicuri che un programma scorretto non possa portare altri programmi (corretti)
a funzionare non correttamente. L’hardware deve fornire un supporto per
differenziare almeno tra due modi di funzionamento: Schematizzazione di un disco
• user mode: La CPU esegue codice utente
• kernel mode (o supervisor/system/monitor mode): la CPU sta eseguendo codice del sistema operativo.
Questa funzionalità richiede supporto a livello hardware: la CPU ha un mode bit che indica in quale modalità si trova.
Mentre nella modalità user la CPU esegue il codice di un processo utente, nella modalità kernel essa esegue il codice
del sistema operativo. L’utilità nel disporre di due modalità consiste nel fatto che tutte le operazioni potenzialmente
pericolose per il sistema possono essere marcate come eseguibili soltanto in kernel mode, evitando che possano
essere richiamate in modo erroneo dai processi degli utenti. Quindi soltanto il codice del sistema operativo (che si
suppone essere stato scritto in modo da sfruttare correttamente l’hardware della macchina) può eseguire queste
istruzioni privilegiate. I processi degli utenti potranno invocare i servizi oggetto delle istruzioni privilegiate attraverso
il meccanismo delle chiamate di sistema che provocano il passaggio da user mode a kernel mode e viceversa. 6
Andrea Mansi - UNIUD - Riassunto Teoria Sistemi Operativi
3. Struttura dei Sistemi Operativi
➢ Componenti comuni dei sistemi operativi:
• Gestione dei processi
• Gestione della memoria principale
• Gestione della memoria secondaria
• Gestione dell’I/O (input & output)
• Gestione dei file (Filesystem)
• Sistemi di protezione (Sicurezza)
• Networking (connessioni di rete)
• Sistema di interpretazione dei comandi
Segue una breve descrizione di ogni componente: (Gli argomenti vengono approfonditi nei cap. successivi).
• Gestione dei Processi:
Un processo è un programma in esecuzione che necessita di certe risorse per assolvere il suo compito, ad esempio:
tempo di CPU, memoria, file, dispositivi di I/O.
Il sistema operativo, in ambito della gestione dei processi è responsabile delle seguenti attività:
• Creazione e cancellazione dei processi
• Sospensione e resume dei processi
• Fornire meccanismi per:
o Sincronizzazione dei process
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.