1.
Software di base e sistema operativo: ruolo e funzioni generali
Un computer per funzionare necessita sia dell’hardware, cioè dei componenti
fisici, sia del software, cioè dei programmi che guidano il comportamento
della macchina. All’interno del software si distingue tra software di base e
software applicativo. Il software di base comprende, in primo luogo, il
sistema operativo, che è il programma fondamentale incaricato di gestire le
risorse hardware del computer, come CPU, memoria e dispositivi di
input/output, e di fornire ai programmi applicativi un insieme di funzioni di
base. In questo modo il sistema operativo si pone come intermediario tra
hardware e software applicativo, nascondendo ai programmi e all’utente
molti dettagli tecnici della macchina.
Il sistema operativo, dunque, è un componente essenziale del sistema di
elaborazione. Senza di esso l’utente dovrebbe interagire direttamente con
l’hardware, con un linguaggio e modalità estremamente complessi. Grazie al
sistema operativo, il computer diventa una “macchina virtuale” che offre
un’interfaccia più vicina al modo umano di pensare e lavorare, permettendo
di avviare programmi, gestire file, usare periferiche, collegarsi in rete senza
conoscere i dettagli di basso livello.
2. Compiti principali del sistema operativo e tipologie di OS
Le responsabilità del sistema operativo possono essere raggruppate in una
serie di funzioni chiave. Il process management riguarda la creazione,
schedulazione e terminazione dei processi, cioè dei programmi in
esecuzione. Il memory management si occupa di allocare e liberare memoria
centrale per i processi, di gestire la memoria virtuale e garantire che i
processi non interferiscano l’uno con la memoria dell’altro. La gestione degli
interrupt consente di rispondere in modo efficiente a eventi asincroni
provenienti dall’hardware. Il file system management tiene sotto controllo la
memorizzazione permanente dei dati su memorie di massa, organizzando file
e directory. Un’altra area importante è la gestione dei device driver, moduli
software che permettono al sistema operativo di dialogare con i diversi
dispositivi. Inoltre, molti sistemi operativi si occupano di networking,
implementando protocolli come TCP/IP e UDP, e di sicurezza, attraverso la
protezione dei processi e della memoria, la gestione di utenti e permessi, e il
controllo degli accessi.
Esistono diverse tipologie di sistemi operativi in base alle caratteristiche e
agli scenari d’uso. I sistemi multitasking permettono a più programmi di
essere eseguiti apparentemente nello stesso tempo, suddividendo l’uso della
CPU fra processi diversi, come avviene sui personal computer. I sistemi
multiutente consentono a più utenti di accedere contemporaneamente alle
risorse del sistema, tipicamente nei mainframe e nei server. I sistemi
operativi real-time sono progettati per applicazioni in tempo reale, dove è
essenziale che la risposta agli eventi avvenga entro limiti di tempo
prevedibili, come nei robot o nei sistemi di controllo industriale. I sistemi
distribuiti gestiscono più computer come se fossero un unico sistema, come
nel grid computing. Infine, i sistemi embedded sono pensati per dispositivi
con risorse limitate (orologi “smart”, dispositivi indossabili, apparecchiature
dedicate), e devono essere molto compatti ed efficienti.
3. Struttura interna del sistema operativo: kernel e shell
Concettualmente, il sistema operativo può essere visto come organizzato a
strati concentrici attorno all’hardware. Lo strato più interno è il kernel, ossia il
nucleo, che fornisce le funzioni più elementari e strettamente legate
all’hardware: gestione dei processi, gestione della memoria, accesso ai
dispositivi e sincronizzazione di base. Il kernel lavora in modalità privilegiata
e ha accesso diretto a tutte le risorse della macchina.
Lo strato più esterno è costituito dall’interfaccia utente, che può essere una
shell testuale o una interfaccia grafica (GUI). La shell testuale è un interprete
di comandi che riceve stringhe digitate dall’utente, le interpreta e invoca i
servizi corrispondenti del sistema operativo. Le interfacce grafiche, invece, si
basano su finestre, menu e icone, e si appoggiano in genere sull’uso del
mouse o di altri dispositivi di puntamento. Queste interfacce si rifanno
spesso alla metafora del desktop: lo schermo è organizzato come un piano di
lavoro su cui si manipolano oggetti (file, cartelle, applicazioni) usando il
puntatore. L’evoluzione dalle interfacce solo testuali a quelle grafiche ha reso
l’uso del computer più intuitivo e accessibile a una platea molto più ampia di
utenti.
4. Evoluzione storica dei sistemi operativi
Lo sviluppo dei sistemi operativi è andato di pari passo con l’evoluzione
dell’hardware. Si possono distinguere quattro grandi generazioni. Nella prima
generazione (1945–1955), con hardware a valvole, i sistemi erano stand-
alone e progettati per un unico utente. Il sistema operativo aveva
funzionalità ridotte: lo scopo principale era avviare ed eseguire un singolo
programma, con una bassa utilizzazione delle risorse e grandi difficoltà nella
messa a punto delle applicazioni.
La seconda generazione (1955–1965) è caratterizzata da hardware basato su
transistor e da sistemi batch uniprogrammati. I programmi venivano
preparati su schede perforate ed inseriti in lotti (“batch”) che il sistema
eseguiva in sequenza, senza interazione diretta con l’utente durante
l’elaborazione. Il sistema operativo orchestrava la lettura dei job,
l’esecuzione dei programmi e talvolta la sovrapposizione di operazioni di
input e output, ma non esisteva ancora il concetto di multiprogrammazione.
Con la terza generazione (1965–1980), grazie ai circuiti integrati, emergono i
sistemi multiprogrammati con memoria virtuale. È possibile mantenere in
memoria centrale più programmi contemporaneamente ed alternarne
l’esecuzione in base alla disponibilità della CPU e alle richieste di I/O. Il
sistema operativo introduce lo scheduling dei processi, per decidere quali
programmi caricare in memoria, e lo scheduling del processore, per
determinare quale processo attivo debba essere eseguito in un dato
momento. Si sviluppano tecniche di gestione della memoria come la
memoria virtuale e i meccanismi per proteggere i dati di ciascun processo.
La quarta generazione, dal 1980 a oggi, coincide con la diffusione dei
personal computer e dei sistemi operativi moderni. Le funzionalità della terza
generazione vengono mantenute e rafforzate: kernel, scheduler, gestore di
memoria, spooler per le periferiche, gestore dei file e interfaccia utente
grafica. Si affermano famiglie di sistemi operativi come Linux (con
distribuzioni quali Ubuntu, Fedora, Kali) e Microsoft Windows (nelle sue varie
versioni), con interfacce user-friendly e ampio supporto a networking,
multimedialità e sicurezza.
5. Funzioni del sistema operativo: scheduling, memoria, bootstrap
Nei sistemi multiprogrammati e multitasking, alcune funzioni risultano
particolarmente critiche. Lo scheduling dei processi e del processore
determina l’ordine e la modalità con cui i processi vengono eseguiti. Esistono
diverse politiche: la FIFO (First In, First Out), in cui i processi vengono serviti
in ordine di arrivo; la priority queue, dove l’esecuzione dipende dalla priorità
assegnata; lo SJF (Shortest Job First), che privilegia i job più brevi; e il round-
robin, in cui il tempo della CPU è suddiviso in “fette” uguali (time slice) e
assegnato a turno ai processi pronti, realizzando una forma di time sharing.
La gestione della memoria ha l’obiettivo di allocare a ogni processo lo spazio
necessario in memoria centrale, mantenendo traccia delle zone occupate e
di quelle libere, ed evitando che un processo scriva in aree che non gli
competono. Quando la memoria disponibile non è sufficiente a contenere
tutti i programmi contemporaneamente, interviene il meccanismo di
memoria virtuale. In questo modello, solo porzioni dei programmi (pagine o
segmenti) risiedono in memoria centrale; il resto rimane su memoria
secondaria. Quando il processo ha bisogno di una parte di programma o di
dati non presente in RAM, il sistema operativo provvede a caricarla dalla
memoria di massa, eventualmente spostando su disco (swap) una porzione
meno utilizzata di ciò che è in memoria. Le politiche di sostituzione, come
FIFO o LRU (Least Recently Used), determinano quali pagine debbano essere
rimosse.
La fase di avvio del computer, detta bootstrap, è anch’essa governata dal
sistema operativo in cooperazione con il firmware presente in ROM.
All’accensione, il codice residente nella ROM esegue una serie di test
diagnostici sull’hardware e carica i driver essenziali per comunicare con le
periferiche. Successivamente, avvia il caricamento del sistema operativo
dalla memoria di massa alla RAM. I driver sono programmi specializzati che
fungono da “traduttori” tra il sistema operativo e i singoli dispositivi
hardware; vengono aggiornati periodicamente dai produttori e possono
essere installati tramite supporti fisici o scaricati dalla rete.
6. Gestione dei file e interfacce utente
Un aspetto centrale del sistema operativo è la gestione dei file. Durante
l’esecuzione dei programmi, è spesso necessario salvare dati in modo
permanente su memorie di massa. Il file system fornisce un modello astratto
per trattare i dati come file, cioè insiemi di informazioni logicamente
correlate, sui quali è possibile eseguire operazioni di lettura, scrittura,
cancellazione, ricerca e protezione, indipendentemente dal supporto fisico
sottostante. I file possono contenere dati (ad esempio un file di testo con
estensione .txt) oppure programmi (come un file eseguibile .exe).
Per organizzare i file, il file system utilizza il concetto di directory (o cartella),
che rappresenta un contenitore logico di file e altre directory, formando una
struttura ad albero. Ogni memoria di massa, come un hard disk, un CD o un
DVD, costituisce la radice di un sottoalbero. Nei sistemi Windows, ogni
dispositivo di memoria di massa è identificato da una lettera (ad esempio, C:
per l’hard disk principale, D: per il lettore CD-ROM). Il percorso completo di
un file, chiamato path, identifica in modo univoco la sua posizione all’interno
dell’albero delle directory, includendo la lettera dell’unità, le directory
intermedie, il nome del file e la sua estensione.
Il sistema operativo fornisce all’utente strumenti per interagire con il file
system e con le altre funzioni di base. L’interprete dei comandi (shell) in
modalità testuale riceve la stringa di comando, la interpreta e invoca le
funzioni appropriate. Le interfacce grafiche, invece, rappresentano file e
directory mediante icone e permettono all’utente di eseguire operazioni di
gestione dei file tramite finestre e menu. In entrambi i casi il sistema
operativo si occupa di tradurre le richieste in operazioni concrete sui
dispositivi di memoria, gestendo anche la protezione degli accessi e il
coordinamento tra più utenti o processi che utilizzano lo stesso archivio.
7. Software di base, software applicativo e modelli di distribuzione
Oltre al sistema operativo, il software di base comprende strumenti come
compilatori, interpreti e linker, che servono per tradurre i programmi scritti in
linguaggi di alto livello nel linguaggio macchina eseguibile dalla CPU,
collegare moduli di codice e gestire librerie. Questi componenti sono spesso
invisibili all’utente finale ma fondamentali per lo sviluppo e l’esecuzione del
software applicativo.
Il software applicativo, invece, è l’insieme dei programmi destinati a svolgere
compiti specifici per l’utente: elaboratori di testo, fogli di calcolo, gestori di
basi di dati, browser, software di grafica, videogiochi, e così via. All’avvio del
computer viene caricato il sistema operativo, che mette a disposizione
l’ambiente per eseguire tali applicazioni. Prima di poter essere utilizzato, un
programma deve essere installato sulla memoria di massa. L’installazione
non consiste in una mera copia di file, ma comporta anche aggiornamenti al
sistema operativo, registrazione di componenti, creazione di collegamenti e
configurazione di parametri; tutto questo avviene in genere in modo
trasparente per l’utente, guidato da procedure semplificate.
I programmi applicativi possono essere acquisiti in modi diversi. Alcuni sono
freeware, cioè distribuiti gratuitamente, ma spesso con limitazioni sull’uso
commerciale. Altri sono open source, rilasciati gratuitamente e con codice
sorgente disponibile e modificabile, secondo determinate licenze. Esistono
poi gli shareware, che possono essere provati gratuitamente per un periodo
limitato o con funzionalità ridotte, invitando l’utente ad acquistare la
versione completa. Accanto alle distribuzioni legali, esistono versioni “pirata”
dei software commerciali, ottenute aggirando le protezioni inserite dai
produttori. Sebbene talvolta tollerate per uso strettamente personale, tali
pratiche restano illegali e, soprattutto in ambito commerciale, possono
comportare conseguenze civili e penali.
2. Scaletta sintetica per il ripasso
1. Sistema operativo e software di base
1.1 Definizione di OS e ruolo di intermediario hardware–software
1.2 Funzioni generali: gestione risorse, servizi di base
2. Compiti principali del sistema operativo
2.1 Process management e memory management
2.2 Gestione interrupt e device driver
2.3 File system, networking, sicurezza, I/O
3. Tipi di sistemi operativi
3.1 Multitasking, multiutente
3.2 Real-time
3.3 Distribuiti
3.4 Embedded
4. Struttura interna dell’OS
4.1 Kernel: funzioni di basso livello
4.2 Shell e GUI: interfaccia utente
4.3 Metafora del desktop
5. Evoluzione storica degli OS
5.1 Prima gen.: stand-alone, un utente
5.2 Seconda gen.: batch uniprogrammati
5.3 Terza gen.: multiprogrammazione, memoria virtuale, time sharing
5.4 Quarta gen.: PC, kernel moderno, famiglie Linux e Windows
6. Funzioni chiave: scheduling e memoria
6.1 Scheduling dei processi e della CPU (FIFO, PQ, SJF, Round-Robin)
6.2 Gestione della memoria e memoria virtuale
6.3 Swapping, paginazione, politiche FIFO e LRU
6.4 Bootstrap e driver
7. Gestione dei file e interfacce
7.1 Concetti di file e directory
7.2 Struttura ad albero del file system, path
7.3 Lettere di unità (C:, D: …)
7.4 Interprete dei comandi e interfacce grafiche
8. Software applicativo e modelli di distribuzione
8.1 Ruolo del software applicativo
8.2 Installazione e aggiornamento
8.3 Tipi di licenza: freeware, open source, shareware
8.4 Pirateria software e implicazioni legali
3. Otto domande aperte con spunti di risposta
1. Definisci che cos’è un sistema operativo e descrivi le sue
principali funzioni rispetto all’hardware e ai programmi
applicativi.
Spunti: definire l’OS come software di base che gestisce risorse
hardware e fornisce servizi ai programmi; menzionare la gestione di
CPU, memoria, I/O, file system, sicurezza e rete; sottolineare il ruolo di
intermediario che nasconde la complessità dell’hardware a programmi
e utenti.
2. Illustra le diverse tipologie di sistemi operativi (multitasking,
multiutente, real-time, distribuiti, embedded), fornendo per
ciascuna un esempio d’uso.
Spunti: per multitasking, citare PC che esegue più applicazioni; per
multiutente, mainframe o server aziendali; per real-time, sistemi di
controllo industriali o robotici; per distribuiti, cluster o grid computing;
per embedded, smartphone, smartwatch o dispositivi dedicati con OS
molto compatti.
3. Descrivi l’evoluzione dei sistemi operativi dalle prime
generazioni fino a quelli attuali, evidenziando i principali
cambiamenti di funzionalità.
Spunti: prima generazione: supporto minimo, un solo utente; seconda:
sistemi batch, lotti di job senza interazione; terza:
multiprogrammazione, time sharing, memoria virtuale, scheduling;
quarta: PC, kernel complessi, GUI, networking, famiglie Linux/Windows;
commentare come si sia passati da una gestione manuale a sistemi
altamente automatizzati e user-friendly.
4. Spiega che cosa si intende per scheduling dei processi e del
processore e confronta almeno due politiche di schedulazione.
Spunti: definire scheduling come scelta dell’ordine in cui i processi
vengono eseguiti; descrivere FIFO (ordine di arrivo), priority queue (in
base alle priorità), SJF (favorisce i job brevi) e round-robin (time slice
equo per ciascun processo); discutere vantaggi e svantaggi, ad
esempio SJF efficiente ma richiede conoscenza della durata, round-
robin equo ma può introdurre overhead.
5. Che cosa si intende per memoria virtuale e in che modo essa
consente di eseguire programmi più grandi della memoria
centrale disponibile?
Spunti: definire la memoria virtuale come astrazione che permette di
vedere una memoria più grande della RAM fisica; spiegare che solo
porzioni dei programmi sono caricate in RAM, il resto risiede su disco;
descrivere il ruolo del gestore di memoria nel caricare porzioni (pagine)
alla bisogna e nello spostare quelle meno usate in memoria secondaria
(swapping), rendendo il tutto trasparente a programmatore e utente.
6. Descrivi il processo di bootstrap di un sistema operativo e il
ruolo dei driver di dispositivo.
Spunti: spiegare che all’accensione il firmware in ROM esegue un test
dell’hardware e carica parte del sistema operativo; illustrare come i
driver fungano da interfaccia tra OS e periferiche specifiche,
permettendo al SO di inviare comandi ad alto livello; sottolineare che i
driver sono aggiornati dai produttori e che la loro installazione è spesso
automatizzata.
7. Analizza la gestione dei file da parte del sistema operativo,
illustrando i concetti di file, directory, path e struttura ad
albero del file system.
Spunti: definire il file come insieme di dati logicamente correlati (dati o
codice); descrivere la directory come contenitore di file e sotto-
directory; spiegare l’organizzazione ad albero, con le memorie di
massa come radici; mostrare come un path (es. C:...\lezione_1.ppt)
identifichi un file in modo univoco, includendo unità, percorso e nome
+ estensione.
8. Distingui tra software di base e software applicativo e descrivi
i principali modelli di distribuzione del software applicativo
(freeware, open source, shareware, pirata).
Spunti: indicare che il software di base include OS, compilatori,
interpreti, linker, mentre il software applicativo comprende programmi
per compiti specifici; definire freeware (gratuito, spesso non per uso
commerciale), open source (codice libero modificabile), shareware
(versioni di prova a tempo o con limitazioni) e software pirata (copie
illegali di programmi commerciali); discutere brevemente le
implicazioni legali ed etiche della pirateria, soprattutto in ambito
professionale.