EuraStudy
Il sistema operativo è il software di base che governa il calcolatore: media tra l'hardware, le applicazioni e l'utente, e amministra in modo ordinato risorse condivise e scarse come il processore, la memoria, i file e i dispositivi di ingresso/uscita. Questo appunto ne ricostruisce funzioni e architettura a strati, le strategie di gestione di processi, memoria, file system e I/O, e i meccanismi di protezione e sicurezza. L'obiettivo è capire «come» il SO trasforma una macchina nuda in un ambiente di lavoro affidabile e condiviso, in coerenza con le Indicazioni Nazionali per il Liceo Scientifico — opzione Scienze Applicate.
5 sezioni~24 min di lettura3 competenzeLivello Base 1 · Standard 3 · Approfondimento 1Verificato · 07/2026
livello base
È richiesto saper descrivere le funzioni del SO, il modello a strati, il ciclo di vita di un processo, la gerarchia del file system e il senso di permessi e protezione.
livello avanzato
L'approfondimento dell'indirizzo Scienze Applicate richiede di confrontare le politiche (scheduling, allocazione, memoria virtuale), giustificarne le scelte e collegarle alle prestazioni e alla sicurezza del sistema.
Profondità di lettura: Approfondimento
Dimensione del testo: Standard
Modello a strati del sistema operativo
Per ciascuna delle seguenti operazioni, indica quale gestore del sistema operativo è coinvolto e perché: (a) avviare contemporaneamente due programmi; (b) aprire un documento salvato su disco; (c) stampare una pagina; (d) eseguire un programma più grande della RAM disponibile.
Servono più processi che condividono l'unico (o i pochi) processore/i: interviene il gestore dei processi con il multitasking e lo scheduling, che alterna i processi in esecuzione.
Il file è organizzato dal file system; il gestore dei file individua il file nella gerarchia di directory, ne verifica i permessi e ne legge i blocchi dal disco.
La stampante è un dispositivo di I/O: il gestore dell'I/O usa il driver della stampante e tipicamente una coda di stampa (spooling) per inviare i dati al dispositivo.
Interviene il gestore della memoria con la memoria virtuale: porta in RAM solo le parti necessarie, tenendo il resto su disco.
Risultato: (a) gestore dei processi; (b) gestore dei file/file system; (c) gestore dell'I/O; (d) gestore della memoria (memoria virtuale).
Errori frequenti
Approfondimento
L'organizzazione interna del kernel non è unica. Nei sistemi a kernel monolitico (Linux, gli Unix classici) tutti i servizi — gestione dei processi, memoria, file, driver — girano nello stesso spazio privilegiato: efficiente, perché le chiamate fra i moduli sono dirette, ma vulnerabile, perché un difetto in un driver può compromettere l'intero sistema. Nell'approccio a microkernel si tiene nel nucleo solo il minimo indispensabile (comunicazione fra processi e schedulazione di base) spostando i servizi in processi separati in modo utente: più robusto e modulare, al prezzo dell'overhead dei continui scambi di messaggi; i sistemi reali adottano spesso soluzioni ibride. La separazione fra modo utente e modo supervisore non è una convenzione software ma è imposta dall'hardware: un bit di modo nel processore abilita o vieta le istruzioni privilegiate (quelle che toccano direttamente l'hardware o le tabelle del SO), e una chiamata di sistema è realizzata da un'istruzione di trap che commuta in modo kernel saltando a un punto d'ingresso controllato — così un'applicazione non può «promuoversi» da sola ad accessi privilegiati. Esistono infine famiglie diverse di sistemi operativi secondo lo scopo: a lotti (batch), interattivi a partizione di tempo (time-sharing), in tempo reale (real-time, con scadenze temporali garantite), embedded e distribuiti; tutti condividono il modello a strati, ma bilanciano diversamente prestazioni, interattività e garanzie di tempo.
Ripasso attivo
Spiega, con un esempio concreto, che cosa accade quando un'applicazione richiede di salvare un file: descrivi il percorso dalla chiamata di sistema fino all'hardware, indicando il passaggio tra modo utente e modo kernel e gli strati attraversati.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Diagramma degli stati di un processo
Tempo di attesa
Il tempo di attesa di un processo è il tempo trascorso nel sistema (dall'arrivo al completamento) meno il tempo effettivamente speso a calcolare; misura quanto il processo ha aspettato il proprio turno.
Attesa media
Il tempo medio di attesa è la media aritmetica dei tempi di attesa degli n processi: è l'indicatore con cui si confrontano le politiche di scheduling.
Tre processi P1, P2, P3 arrivano tutti all'istante 0 nell'ordine P1, P2, P3 e richiedono rispettivamente 6, 3 e 4 unità di tempo di CPU. Con politica FIFO (First-Come-First-Served) senza prelazione, calcola il tempo di completamento, il tempo di attesa di ciascun processo e il tempo medio di attesa.
FIFO esegue nell'ordine di arrivo: prima P1 (0->6), poi P2 (6->9), poi P3 (9->13).
P1 termina a 6, P2 a 9, P3 a 13.
Con arrivo a 0: attesa = completamento - tempo di CPU. P1: 6-6=0; P2: 9-3=6; P3: 13-4=9.
Media = (0 + 6 + 9) / 3 = 15 / 3 = 5.
Risultato: Completamenti: P1=6, P2=9, P3=13. Attese: P1=0, P2=6, P3=9. Tempo medio di attesa = 5 unità.
Errori frequenti
Approfondimento
Le politiche di scheduling si valutano su tempo di attesa, di risposta e di completamento, e ciascuna ha un carattere. Il FCFS (First-Come-First-Served) è equo ma soffre l'effetto convoglio: un processo lungo davanti fa attendere tutti gli altri. Lo SJF (Shortest Job First) minimizza il tempo medio di attesa — è ottimo in teoria — ma richiede di conoscere in anticipo la durata, che va stimata. Il Round Robin assegna a turno un quanto di tempo: un quanto troppo grande lo fa degenerare in un FCFS, uno troppo piccolo spreca tempo in continui cambi di contesto. Lo scheduling a priorità serve prima i processi più urgenti, ma rischia la starvation (attesa indefinita) di quelli meno prioritari, curata con l'aging (la priorità cresce con l'attesa). All'interno di un processo possono convivere più thread (flussi di esecuzione che condividono codice e dati ma hanno una pila propria), assai più leggeri da creare e commutare di interi processi. La condivisione di memoria fra thread introduce però i problemi della concorrenza: se due flussi aggiornano la stessa variabile senza coordinarsi si ha una corsa critica (race condition), dall'esito imprevedibile, che si evita garantendo la mutua esclusione sulle sezioni critiche (con semafori o lock). Un pericolo opposto è il deadlock (stallo), in cui più processi si bloccano a vicenda attendendo risorse che l'altro trattiene — situazione possibile solo se ricorrono insieme quattro condizioni: mutua esclusione, possesso-e-attesa, assenza di prelazione e attesa circolare.
Ripasso attivo
Tre processi pronti P1, P2, P3 arrivano nell'ordine indicato e richiedono rispettivamente 6, 3 e 4 unità di tempo di CPU. Con una politica FIFO senza prelazione, calcola il tempo di completamento e il tempo di attesa di ciascun processo e il tempo medio di attesa.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Memoria virtuale: pagine tra RAM e disco
Numero di pagine
Il numero di pagine necessarie per un processo di dimensione D, con pagine di taglia P, si ottiene dividendo D per P e arrotondando per eccesso: l'ultima pagina, anche se parziale, occupa un frame intero (frammentazione interna).
Un processo occupa 10 000 byte e il sistema usa pagine di 4 096 byte (4 KiB). Calcola quante pagine servono e quanto spazio resta inutilizzato nell'ultima pagina (frammentazione interna).
10 000 / 4 096 = 2.44..., quindi servono 2 pagine piene (8 192 byte) più una porzione.
Poiché resta una parte, occorre una terza pagina: numero di pagine = 3.
3 pagine x 4 096 byte = 12 288 byte effettivamente riservati.
Inutilizzato = 12 288 - 10 000 = 2 288 byte nell'ultima pagina.
Risultato: Servono 3 pagine; la frammentazione interna è di 2 288 byte.
Errori frequenti
Approfondimento
La paginazione ha una meccanica precisa che vale la pena vedere. Un indirizzo logico si spezza in due parti: il numero di pagina e lo scostamento (offset) all'interno della pagina; il numero di pagina indicizza la tabella delle pagine del processo, che fornisce il numero del frame fisico in cui la pagina risiede, e l'indirizzo fisico si compone unendo il frame all'offset. Poiché consultare la tabella a ogni accesso raddoppierebbe i tempi, si usa una cache di traduzioni (TLB). Complementare alla paginazione è la segmentazione, che divide lo spazio in segmenti di taglia variabile con significato logico (codice, dati, pila), più naturale per il programmatore ma soggetta a frammentazione esterna. Quando serve caricare una pagina e la RAM è piena, un algoritmo di sostituzione sceglie la vittima: FIFO (la pagina più vecchia) è semplice ma soffre l'anomalia di Belady (aumentare i frame può, paradossalmente, aumentare i page fault); LRU (la usata meno di recente) approssima bene l'algoritmo ottimo teorico, che scarterebbe la pagina destinata a essere riusata più tardi ma è irrealizzabile, perché richiederebbe di conoscere il futuro. Per evitare il thrashing il SO cerca di tenere in RAM il working set di ogni processo, cioè l'insieme delle pagine che esso sta effettivamente usando in un dato intervallo: se la somma dei working set supera la RAM disponibile, conviene ridurre il grado di multiprogrammazione anziché continuare a paginare.
Ripasso attivo
Un sistema ha 4 GiB di RAM e deve eseguire più applicazioni che insieme richiedono 6 GiB di spazio di indirizzi. Spiega come la memoria virtuale rende possibile l'esecuzione, descrivendo il ruolo dell'area di swap, dei page fault e del rischio di thrashing.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Albero gerarchico del file system
Nell'albero della Fig. 1, la radice / contiene la cartella scuola, che contiene informatica, che contiene appunti.txt. Scrivi il percorso assoluto del file e il percorso relativo a partire dalla directory corrente /scuola.
Si parte sempre dalla radice / e si concatenano i nomi delle directory attraversate fino al file, separati da /.
Radice / -> scuola -> informatica -> appunti.txt dà /scuola/informatica/appunti.txt.
Se la directory di lavoro è /scuola, il percorso parte da lì senza la / iniziale: si scende in informatica e si raggiunge il file.
Risultato: Assoluto: /scuola/informatica/appunti.txt; relativo da /scuola: informatica/appunti.txt.
Errori frequenti
Approfondimento
Sotto la visione logica ad albero, il file system deve decidere come disporre i blocchi di ciascun file sul disco, e le strategie hanno costi diversi. L'allocazione contigua (blocchi adiacenti) offre accesso diretto rapidissimo, ma soffre la frammentazione e la difficoltà di far crescere un file. L'allocazione concatenata collega ogni blocco al successivo con un puntatore: elimina la frammentazione esterna, ma l'accesso diretto al k-esimo blocco costa scorrere la catena; è l'idea alla base della tabella FAT, che raccoglie tutti i puntatori in un'unica tabella tenuta in memoria. L'allocazione indicizzata raccoglie invece gli indirizzi dei blocchi di un file in un blocco-indice: è la strategia degli inode di Unix/Linux, un descrittore per file che contiene attributi e puntatori (diretti e indiretti) ai blocchi dati, così da conciliare accesso diretto e file molto grandi. Poiché un'interruzione improvvisa — un blackout durante un aggiornamento — può lasciare le strutture del disco incoerenti, i file system moderni usano il journaling: prima di modificare i dati registrano l'intenzione in un giornale (log), sicché al riavvio le operazioni interrotte si completano o si annullano, ripristinando la coerenza — la stessa idea di transazione atomica che ritroveremo nelle basi di dati. È qui che si vede come la comodità dei nomi e delle cartelle poggi su un'accurata gestione fisica dei blocchi, nascosta all'utente ma decisiva per affidabilità e prestazioni.
Ripasso attivo
Dato un albero di directory con radice /, una cartella scuola contenente informatica con dentro il file appunti.txt, scrivi il percorso assoluto del file e indica quale percorso relativo useresti se la directory di lavoro corrente fosse /scuola.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Il SO media tra applicazioni e dispositivi di I/O
Per ciascuno dei seguenti elementi, indica se appartiene alla PROTEZIONE (meccanismo interno tra processi/utenti) o alla SICUREZZA (difesa del sistema dalle minacce) e giustifica: (a) i limiti di memoria che confinano un processo; (b) la richiesta di password all'accesso; (c) la distinzione modo utente/kernel; (d) la cifratura di un file riservato.
Impediscono a un processo di invadere lo spazio di un altro: meccanismo interno -> PROTEZIONE.
Autentica l'utente per difendere il sistema da accessi non autorizzati -> SICUREZZA.
Riserva le operazioni privilegiate al kernel: barriera interna -> PROTEZIONE.
Garantisce la riservatezza dei dati anche se intercettati -> SICUREZZA.
Risultato: Protezione: (a) e (c); Sicurezza: (b) e (d).
Errori frequenti
Approfondimento
Il dialogo con i dispositivi ammette due stili. Nell'I/O a interrogazione (polling) il processore controlla ripetutamente se il dispositivo è pronto, sprecando cicli in attesa attiva; nell'I/O guidato dagli interrupt il dispositivo avvisa quando ha finito, liberando la CPU per altro lavoro. Per i trasferimenti massicci — un file dal disco alla RAM — interviene il DMA (Direct Memory Access): un controllore dedicato sposta i dati direttamente fra dispositivo e memoria senza passare dal processore, che riceve un solo interrupt a trasferimento concluso, così da non fare il «facchino» byte per byte. Sul versante della sicurezza, i tre obiettivi classici sono riservatezza, integrità e disponibilità (la triade CIA): rispettivamente, che i dati siano visti solo da chi ne ha diritto, non siano alterati indebitamente e restino accessibili quando servono. Il principio guida della protezione è quello del privilegio minimo: ogni processo e ogni utente deve possedere solo i permessi strettamente necessari, per contenere i danni di un errore o di un attacco. Su di esso si fondano tecniche moderne come il sandboxing (confinare un programma in un ambiente ristretto) e la virtualizzazione (macchine virtuali isolate sullo stesso hardware). L'autenticazione, l'autorizzazione e la cifratura — di cui ci occuperemo con le reti — sono gli strumenti con cui la politica di sicurezza traduce in pratica questi principi, mentre la protezione ne fornisce i meccanismi interni imposti dal kernel.
Ripasso attivo
Spiega perché, durante la stampa di un documento lungo, l'utente può continuare a lavorare al computer: descrivi il ruolo dello spooling, del buffering e degli interrupt e il legame con lo stato «in attesa» del processo che ha richiesto la stampa.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM)) · Esame di Stato del secondo ciclo — quadri di riferimento e griglie di valutazione (Ministero dell'Istruzione e del Merito (MIM))
Riferimenti e fonti