Il Sistema Operativo (SO) è il software più importante in esecuzione su un
calcolatore. Agisce come un intermediario tra l’utente e l’hardware, gestendo
le risorse del sistema e fornendo una piattaforma sulla quale le applicazioni
possono essere eseguite. Questo documento offre una trattazione completa e
strutturata dei principi fondamentali dei sistemi operativi, partendo dai concetti
teorici di gestione dei processi, della memoria e dei file system, fino alla loro
implementazione pratica nell’ambiente UNIX/Linux. L’obiettivo è fornire una
guida di riferimento accademica per comprendere l’architettura, le funzioni e le
sfide dei moderni sistemi operativi.
Capitolo 1: Ruolo e Struttura dei Sistemi Operativi
1.1 Cos’è un Sistema Operativo?
Un Sistema Operativo è un programma che gestisce l’hardware di un computer.
Svolge due funzioni principali:
1. Gestore delle Risorse (Resource Manager): Il SO gestisce e alloca le
risorse del sistema, sia hardware (CPU, memoria, dischi, periferiche) che
software (file, dati). Agisce come un “arbitro” per risolvere i conflitti tra i
diversi programmi e utenti che competono per le stesse risorse, garantendo
un utilizzo efficiente ed equo.
2. Macchina Virtuale Estesa (Extended Machine): Il SO nasconde la
complessità dell’hardware sottostante e fornisce all’utente e ai programma-
tori una visione più semplice, astratta e pulita del sistema. Ad esempio,
invece di dover gestire i dettagli dei settori del disco, un programmatore
lavora con l’astrazione di “file”.
1.2 Struttura di un Sistema Operativo
Un SO moderno è tipicamente strutturato a livelli. I due componenti principali
sono:
• Kernel: È il nucleo del sistema operativo. È il primo programma a essere
caricato all’avvio (boot) e rimane sempre in esecuzione. Il kernel ha il con-
trollo completo sull’hardware e gestisce tutte le funzioni critiche: schedul-
ing della CPU, gestione della memoria, accesso ai dispositivi. Opera in
modalità kernel (o supervisore), una modalità di esecuzione privi-
legiata della CPU che consente l’accesso a tutte le istruzioni e a tutto
l’hardware.
• Shell (o Interprete dei Comandi): È l’interfaccia tra l’utente e il
kernel. Legge i comandi dell’utente e li traduce in richieste per il kernel.
1
Non fa parte del kernel, ma è un’applicazione come le altre. Esistono shell
testuali (CLI - Command-Line Interface, es. in Linux) e shell grafiche
bash
(GUI - Graphical User Interface, es. Windows Explorer, GNOME).
1.3 System Call (Chiamate di Sistema)
Le applicazioni utente non possono accedere direttamente all’hardware o alle
funzioni critiche del kernel. Per richiedere un servizio al SO (es. leggere un file,
creare un processo), un’applicazione deve eseguire una system call.
Una system call è un meccanismo che trasferisce il controllo dal programma
utente (in esecuzione in modalità utente) al kernel (in modalità kernel). Il
kernel esegue l’operazione richiesta per conto dell’applicazione e poi restituisce il
controllo al programma utente. Le system call rappresentano l’API (Application
Programming Interface) del sistema operativo.
Capitolo 2: La Gestione dei Processi e lo Scheduling della
CPU
2.1 Il Concetto di Processo
Un processo è un programma in esecuzione. È l’unità di lavoro fondamen-
tale in un sistema operativo. Mentre un programma è un’entità passiva (un
file su disco), un processo è un’entità attiva, caratterizzata da: * Il codice del
programma (text section). * Lo stato corrente, rappresentato dal valore del
Program Counter e dei registri della CPU. * Lo stack, che contiene i dati tem-
poranei (parametri delle funzioni, variabili locali). * L’heap, la memoria allocata
dinamicamente durante l’esecuzione.
2.2 Stati di un Processo
Durante la sua vita, un processo attraversa diversi stati: 1. Nuovo (New): Il
processo è stato creato. 2. Pronto (Ready): Il processo è pronto per essere
eseguito e attende che lo scheduler gli assegni la CPU. 3. In Esecuzione (Run-
ning): Le istruzioni del processo sono in esecuzione sulla CPU. 4. In Attesa
(Waiting): Il processo è in attesa del verificarsi di un evento (es. il comple-
tamento di un’operazione di I/O, la ricezione di un segnale). 5. Terminato
(Terminated): Il processo ha terminato la sua esecuzione.
2.3 Process Control Block (PCB)
Per ogni processo, il sistema operativo mantiene una struttura dati chiamata
Process Control Block (PCB). Il PCB contiene tutte le informazioni asso-
ciate a un processo, tra cui: * Lo stato del processo. * Il Program Counter e i
valori dei registri della CPU. * Informazioni sullo scheduling (priorità, puntatori
alle code di scheduling). * Informazioni sulla gestione della memoria (tabelle
2
delle pagine). * Informazioni di accounting (tempo di CPU utilizzato). * Infor-
mazioni sullo stato dell’I/O (file aperti, dispositivi allocati).
2.4 Context Switch
Quando il SO deve passare la CPU da un processo A a un processo B, esegue
un context switch. L’operazione consiste nel: 1. Salvare lo stato del processo
A (il suo “contesto”, ovvero i registri della CPU) nel suo PCB. 2. Caricare
il contesto del processo B dal suo PCB nei registri della CPU. 3. Riprendere
l’esecuzione del processo B.
Il context switch è un overhead, perché durante il suo svolgimento il sistema
non compie lavoro utile.
2.5 Scheduling della CPU
Lo scheduler della CPU è la componente del SO che seleziona quale processo,
tra quelli nella coda dei pronti, deve essere eseguito sulla CPU.
Algoritmi di Scheduling: * First-Come, First-Served (FCFS): Il pro-
cesso che richiede per primo la CPU la ottiene per primo. Semplice ma può
portare a tempi di attesa medi molto lunghi (effetto “convoglio”). È un algo-
non-preemptive
ritmo (un processo mantiene la CPU finché non la rilascia
volontariamente). * Shortest-Job-First (SJF): Assegna la CPU al processo
con il “burst” di CPU successivo più breve. È provato essere ottimale per mini-
mizzare il tempo di attesa medio. Può essere preemptive (se arriva un nuovo
processo più breve di quello in esecuzione, quest’ultimo viene interrotto) o non-
preemptive. Il suo limite è la difficoltà di predire la durata del prossimo burst
Scheduling a Priorità:
di CPU. * A ogni processo è associata una priorità.
La CPU viene assegnata al processo con la priorità più alta. Può essere preemp-
tive o non-preemptive. Un problema è la starvation (inedia), in cui i processi
a bassa priorità potrebbero non essere mai eseguiti. * Round Robin (RR):
Progettato per i sistemi time-sharing. Ogni processo ottiene la CPU per un
piccolo intervallo di tempo fisso, detto quanto di tempo. Se il processo non
termina entro il quanto, viene interrotto (preemption) e messo in fondo alla
coda dei pronti. Garantisce una buona interattività.
Capitolo 3: Gestione della Memoria
3.1 Indirizzamento Logico e Fisico
• Indirizzo Logico (o Virtuale): È un indirizzo generato dalla CPU.
Fa riferimento a uno spazio di indirizzamento virtuale, unico per ogni
processo.
• Indirizzo Fisico: È l’indirizzo visto dall’unità di memoria (la RAM).
3
La Memory-Management Unit (MMU) è il dispositivo hardware che si
occupa di tradurre (mappare) gli indirizzi logici in indirizzi fisici a runtime.
3.2 Paginazione
La paginazione è la tecnica di gestione della memoria più comune. * La memo-
ria fisica è divisa in blocchi di dimensione fissa chiamati frame. * La memo-
ria logica di un processo è divisa in blocchi della stessa dimensione chiamati
pagine. * Quando un processo viene eseguito, le sue pagine vengono caricate
in frame disponibili (non necessariamente contigui) della memoria fisica. * Il
SO mantiene una tabella delle pagine (page table) per ogni processo, che
mappa ogni pagina logica al frame fisico corrispondente.
3.3 Memoria Virtuale
La memoria virtuale è una tecnica che permette di eseguire processi che sono
più grandi della memoria fisica disponibile. Si basa sulla paginazione e sull’uso
della memoria secondaria (disco) come estensione della RAM.
• Demand Paging: Le pagine di un processo vengono caricate in memoria
solo quando sono effettivamente richieste, non tutte all’inizio.
• Page Fault: Se la CPU genera un indirizzo che appartiene a una pagina
non presente in memoria, la MMU genera un’eccezione chiamata page
fault. Il SO gestisce il page fault:
1. Trova la pagina richiesta sul disco.
2. Carica la pagina in un frame libero della RAM. Se non ci sono frame
liberi, ne sceglie uno da “rimpiazzare” (vittima) secondo un algo-
ritmo di rimpiazzo (es. LRU - Least Recently Used). Se la pagina
vittima era stata modificata, deve essere prima salvata su disco.
3. Aggiorna la tabella delle pagine.
4. Riprende l’esecuzione dell’istruzione che aveva causato il fault.
La memoria virtuale permette un grado di multiprogrammazione più elevato e
astrae la gestione della memoria dal programmatore.
Capitolo 4: Il File System
Il file system è la parte del SO che si occupa della gestione della memoria secon-
daria (dischi). Fornisce un’astrazione logica per la memorizzazione e l’accesso
ai dati.
• File: Un insieme di informazioni correlate, a cui viene dato un nome. Dal
punto di vista del SO, è una sequenza di byte.
• Directory (o Cartella): Un contenitore per organizzare i file in modo
gerarchico. 4
• Attributi di un File: Nome, tipo, dimensione, data di creazione/modifica,
proprietario, permessi.
• Operazioni sui File: Creazione, scrittura, lettura, cancellazione, po-
sizionamento (seek).
4.1 Allocazione dello Spazio su Disco
• Allocazione Contigua: Ogni file occupa un insieme di blocchi contigui
sul disco. Veloce in lettura, ma soffre di frammentazione esterna.
• Allocazione Collegata (Linked Allocation): Ogni blocco del file con-
tiene un puntatore al blocco successivo. Elimina la frammentazione es-
terna, ma non consente l’accesso diretto (solo sequenziale) ed è poco affid-
abile.
• Allocazione Indicizzata (Indexed Allocation): Per ogni file, esiste
un blocco speciale (il blocco indice o i-node in UNIX) che contiene i
puntatori a tutti i blocchi dati del file. Permette l’accesso diretto e non
soffre di frammentazione esterna. È l’approccio più comune.
Capitolo 5: Introduzione all’Ambiente UNIX/Linux
5.1 Filosofia e Architettura
-
Miei appunti personali presi con latex di Ricerca operativa
-
Miei appunti personali presi con latex di Fisica tecnica applicata
-
Miei appunti personali presi con latex di Calcolatori elettronici
-
Miei appunti presi con latex di Telecomunicazioni
- Risolvere un problema di matematica
- Riassumere un testo
- Tradurre una frase
- E molto altro ancora...
Per termini, condizioni e privacy, visita la relativa pagina.