Sistemi Operativi e Gestione delle Risorse
Un sistema operativo (SO o OS dall’inglese Operating System) è il cuore del computer, il “direttore d’orchestra” che coordina CPU, memoria, dispositivi e programmi. Senza di esso, un computer sarebbe soltanto un insieme di componenti hardware incapaci di dialogare tra loro o con l’utente. Il sistema operativo svolge funzioni fondamentali come la gestione dei processi, della memoria, dei file e delle periferiche, fornendo un ambiente stabile e sicuro in cui i programmi possono funzionare senza interferire l’uno con l’altro.
1. Perché esiste un sistema operativo
Immagina di voler scrivere un documento mentre contemporaneamente ascolti musica e navighi sul web. Senza un SO, dovresti gestire manualmente ogni risorsa: dire alla CPU quando passare da un programma all’altro, decidere dove salvare i dati in RAM, comunicare direttamente con ogni dispositivo. Il sistema operativo automatizza tutto questo, orchestrando le risorse e permettendo agli utenti di concentrarsi sui propri compiti.
Il SO si occupa di creare, sospendere e terminare programmi (i processi), assegna memoria e spazio su disco, dialoga con periferiche come stampanti, tastiere e GPU tramite i driver, organizza i dati in file e cartelle, e garantisce sicurezza tramite permessi e gestione utenti. Inoltre, fornisce interfacce diverse: le GUI, cioè le interfacce grafiche con finestre e icone, e le CLI, interfacce testuali precise e automatizzabili tramite comandi.
2. Processi, thread e il tempo del computer
Un processo è un programma in esecuzione con il suo stato interno: registri della CPU, memoria utilizzata e risorse aperte. All’interno di un processo, i thread rappresentano flussi di esecuzione separati ma condividono la stessa memoria.
Ogni processo passa attraverso vari stati: Nuovo, quando viene creato; Pronto, in attesa della CPU; In esecuzione, quando sta usando la CPU; Attesa I/O, quando aspetta il completamento di un’operazione di input/output; infine Terminato, quando ha completato il lavoro. Tutte queste informazioni sono conservate nel Process Control Block (PCB), mentre il context switch è il passaggio della CPU da un processo all’altro, un’operazione necessaria ma che richiede tempo.
Scheduling dei processi
Il sistema operativo deve decidere quale processo eseguire in ogni istante. Esistono diversi metodi:
- FCFS (First Come First Served): il primo processo arrivato è il primo a essere eseguito. È semplice ma può generare lunghe attese.
- Round Robin: ogni processo riceve un intervallo di tempo fisso, il quantum, e poi passa al successivo. È ideale per interattività e multitasking.
- Priorità: processi più importanti eseguono prima; per evitare che i processi meno importanti restino bloccati a lungo (starvation) si può applicare l’aging, cioè aumentare progressivamente la priorità dei processi in attesa.
Concorrenza e sincronizzazione
3. La memoria del computer: RAM, cache e pagine
La memoria è il luogo dove il computer conserva temporaneamente i dati e i programmi in esecuzione. Possiamo immaginarla come una scrivania: più grande e organizzata è, più agevolmente possiamo lavorare. La memoria non è unica: esiste una gerarchia basata su velocità e vicinanza alla CPU:
- Registri della CPU: piccolissimi spazi interni alla CPU stessa, usati per calcoli immediati. Sono ultraveloce, ma molto limitati in dimensione.
- Cache (L1/L2/L3): memoria interna più ampia dei registri, ma sempre veloce. Serve per memorizzare dati e istruzioni usati di frequente, così da non doverli richiamare dalla RAM ogni volta.
- RAM (Random Access Memory): memoria principale del computer. Qui risiedono i programmi attivi e i dati che la CPU deve usare subito. La RAM è volatile, cioè si svuota quando spegni il computer.
- Disco/SSD: memoria permanente, più lenta, dove si salvano file e programmi a lungo termine.
Memoria virtuale
Ogni processo “vede” uno spazio di memoria continuo e proprio, chiamato spazio di indirizzamento virtuale, anche se in realtà i dati possono essere sparsi tra RAM e disco. Questo permette di far sembrare a ciascun programma di avere più memoria di quella fisica disponibile. Quando un programma accede a una parte della memoria non presente in RAM, si verifica un page fault: il SO carica quella pagina dal disco nella RAM.
Parafrasi: page fault = il computer “si accorge” che il dato richiesto non è in scrivania (RAM), quindi lo va a prendere dall’archivio (disco).
La gestione della memoria avviene con pagine (blocchi di memoria di dimensione fissa, ad esempio 4 KB) e frame (spazi in RAM che accolgono le pagine). Per velocizzare, la CPU usa una cache speciale chiamata TLB (Translation Lookaside Buffer), che ricorda dove si trovano le pagine. La memoria è protetta: ogni processo non può leggere o scrivere in aree di altri processi, evitando crash e violazioni.
Frammentazione: problema comune della memoria. Può essere:
- Interna: un blocco è più grande del necessario e il resto rimane inutilizzato.
- Esterna: piccoli spazi vuoti sparsi tra blocchi occupati, difficile da riutilizzare.
4. File system: organizzare i dati
Un file è un insieme di informazioni, di solito sequenze di byte, con associate alcune proprietà chiamate metadati, ad esempio:
- dimensione
- data di creazione/modifica
- permessi
- proprietario
Le cartelle (directory) contengono file e altre cartelle, permettendo di organizzare i dati. Il percorso di un file può essere assoluto (dalla radice del file system, es. /home/alex/file.txt) o relativo (rispetto alla cartella corrente, es. ../documenti/file.txt).
In Unix/Linux i permessi determinano chi può leggere, scrivere o eseguire un file: r = read (lettura), w = write (scrittura), x = execute (esecuzione). La sequenza rwxr-x--- significa:
- Proprietario: lettura, scrittura, esecuzione
- Gruppo: lettura e esecuzione
- Altri: nessun accesso
Esistono collegamenti per riferirsi a file senza duplicarli:
- Hard link: due nomi diversi che puntano allo stesso file fisico.
- Symlink (link simbolico): puntatore a un altro file, simile a un “segnaposto”.
File system comuni:
- ext4 (Linux)
- NTFS (Windows)
- APFS (macOS)
- FAT32/exFAT (portabilità tra sistemi diversi)
Journaling: sistema che registra le operazioni recenti per prevenire perdita di dati in caso di crash.
Perfetto! Riscrivo dal punto 5 in avanti usando uno stile discorsivo e guidato, con spiegazioni approfondite dei concetti e senza attività operative. Il testo termina con un test di 20 domande, seguito da soluzioni dettagliate e spiegate punto per punto.
5. Interfacce: GUI e CLI
Quando parliamo di interfacce del sistema operativo, ci riferiamo al modo con cui l’utente comunica con il computer. Esistono due approcci principali: la GUI (Graphical User Interface) e la CLI (Command Line Interface).
La GUI è l’interfaccia grafica. È quella che vediamo quotidianamente sui nostri desktop: finestre, icone, menu, pulsanti. Il vantaggio principale della GUI è che rende intuitivo l’uso del computer. Possiamo cliccare, trascinare e osservare visivamente cosa succede. È particolarmente utile per chi esegue operazioni occasionali, come aprire un documento o spostare file tra cartelle, perché non richiede di ricordare comandi specifici. Tuttavia, la GUI può diventare lenta per operazioni ripetitive o complesse e non è sempre facilmente automatizzabile.
La CLI, invece, è basata su testo. L’utente scrive comandi che il sistema operativo interpreta. Anche se all’inizio può sembrare più difficile, la CLI è incredibilmente potente. Permette di eseguire operazioni complesse con precisione e di automatizzare attività tramite script. Concetti fondamentali della CLI includono:
- stdout e stderr: flussi di output del sistema. Lo stdout contiene l’output normale di un comando, mentre lo stderr raccoglie messaggi di errore.
- Exit code: ogni comando restituisce un numero che indica il successo (0) o il tipo di errore (1, 2, ecc.). Utile per creare controlli nei script.
- Pipe (
|): permette di collegare l’output di un comando all’input di un altro, formando catene di operazioni. - Redirezioni (
>,>>,<): consentono di salvare l’output di un comando su un file o leggere l’input da un file invece che dalla tastiera. - Variabili d’ambiente (es. PATH): definiscono informazioni globali, come dove cercare i programmi eseguibili.
La GUI è più immediata e visiva, mentre la CLI richiede una maggiore conoscenza dei comandi ma consente un controllo molto più preciso e ripetibile delle operazioni del sistema operativo.
6. Multitasking e servizi di sistema
Il multitasking è la capacità di un sistema operativo di eseguire più programmi contemporaneamente. Questo non significa che la CPU faccia più cose allo stesso istante, ma che alterna rapidamente l’esecuzione dei processi, dando l’impressione di simultaneità.
Esistono due modalità principali di multitasking:
- Cooperativo: i processi cedono volontariamente la CPU quando hanno finito di lavorare o quando attendono eventi esterni. Era comune nei primi sistemi operativi, ma può portare a blocchi se un processo si comporta male.
- Preemptive: il sistema operativo interrompe automaticamente i processi dopo un certo intervallo di tempo (quantum) e assegna la CPU ad altri processi. Questa modalità è quella dei moderni sistemi operativi ed evita che un singolo programma monopolizzi la CPU.
I servizi o daemon sono programmi che girano in background e svolgono attività continue, come gestire la stampa, la rete o i backup. Non hanno un’interfaccia diretta con l’utente, ma sono essenziali per il funzionamento del sistema. L’avvio di un computer segue una sequenza precisa: il bootloader carica il kernel, il kernel avvia i servizi di base e solo alla fine viene presentata l’interfaccia utente per login e lavoro quotidiano.
7. Driver, aggiornamenti e sicurezza
Un driver è un software che permette al sistema operativo di comunicare correttamente con l’hardware. Senza driver, dispositivi come stampanti, schede video o dischi potrebbero non funzionare o essere utilizzabili solo in modo limitato. Ogni periferica richiede driver specifici che traducono i comandi del sistema operativo in istruzioni comprensibili dall’hardware.
Gli aggiornamenti del sistema operativo includono patch di sicurezza, correzioni di bug e nuove funzionalità. È fondamentale mantenere il sistema aggiornato per proteggersi da vulnerabilità e migliorare la stabilità. Le buone pratiche di sicurezza includono backup regolari e lettura delle note di rilascio prima di applicare aggiornamenti importanti.
8. Virtualizzazione e container
La virtualizzazione consente di far girare un intero sistema operativo all’interno di un altro, creando una macchina virtuale (VM). In pratica, il software simula l’hardware del computer, permettendo di eseguire sistemi diversi contemporaneamente senza interferire tra loro.
I container, invece, isolano singole applicazioni sullo stesso kernel del sistema operativo. Sono molto leggeri e veloci da avviare, e vengono utilizzati soprattutto nello sviluppo e nella distribuzione di software moderno, perché permettono di garantire che un’applicazione funzioni nello stesso modo su computer diversi.
9. Test di verifica: 20 domande
10. Soluzioni spiegate
1. C – Il context switch salva lo stato del processo attuale e carica quello del successivo, permettendo il multitasking.
2. B – La memoria virtuale crea l’illusione di uno spazio continuo dedicato a ciascun processo, proteggendo la memoria degli altri.
3. B – Il page fault è normale; il SO recupera la pagina dal disco e la carica in RAM.
4. B – La cache L1 è integrata nella CPU e contiene dati e istruzioni frequentemente usati, velocizzando l’esecuzione.
5. A – Blocchi di memoria più grandi dei dati causano spazi inutilizzati all’interno (frammentazione interna).
6. B – La frammentazione esterna si verifica quando piccoli spazi liberi sono sparsi tra blocchi occupati, difficile da riutilizzare.
7. A – Lo symlink punta simbolicamente a un file, l’hard link crea un secondo nome che punta allo stesso file fisico.
8. B – La GUI si basa su elementi grafici come finestre, icone e menu, per facilitare l’uso.
9. B – La CLI permette controllo preciso, automazione e scripting, ideale per operazioni ripetitive.
10. C – Round Robin migliora la reattività, alternando la CPU tra i processi in modo equo.
11. B – FCFS (First Come, First Served) può causare attese lunghe se un processo lungo blocca i successivi.
12. B – Una race condition si verifica quando più processi modificano dati condivisi senza sincronizzazione, creando comportamenti imprevedibili.
13. B – Mutex e semafori servono a sincronizzare i processi e prevenire race condition.
14. B – Deadlock è una situazione di stallo in cui processi attendono risorse occupate reciprocamente.
15. B – I driver traducono le istruzioni del SO in comandi comprensibili dall’hardware.
16. B – Il journaling tiene traccia delle operazioni recenti, permettendo il recupero dei dati dopo un crash.
17. A – Un daemon è un processo che gira in background e svolge attività continue senza interfaccia utente diretta.
18. B – L’exit code indica se un comando è riuscito (0) o fallito (numero diverso da 0).
19. B – La variabile PATH indica al SO dove cercare i programmi da eseguire.
20. A – La virtualizzazione permette di simulare un intero sistema operativo all’interno di un altro, isolandolo e rendendolo indipendente.

Nessun commento:
Posta un commento