Infografica 3D dei sistemi operativi con CPU, processi, kernel, memoria RAM e file system collegati funzionalmente.
Il sistema operativo coordina l’esecuzione dei processi, la gestione della memoria e l’organizzazione dei dati attraverso kernel e servizi di sistema.

INFORMATICA — FONDAMENTI | Prima Liceo Scientifico — Scienze Applicate

Sistemi operativi, processi e file system

Nell’articolo precedente abbiamo studiato il processore, la RAM, le periferiche e il principio del programma memorizzato. Ma chi decide quale programma utilizza la CPU, come vengono assegnate le risorse e dove sono organizzati i nostri documenti? Il sistema operativo coordina queste attività e offre servizi ai programmi e alle persone che utilizzano il computer. Seguiremo anche il percorso concreto di un’applicazione, dal suo avvio fino alla chiusura, per mettere in relazione tutti questi concetti.

Obiettivi verificabili: definire sistema operativo, kernel e servizi di sistema; ricostruire l’avvio di un computer; distinguere programma, processo e thread; interpretare gli stati di un processo e semplici sequenze di scheduling; spiegare i principi della memoria virtuale; organizzare file e directory con percorsi e permessi; riconoscere driver e principali famiglie di sistemi operativi.

Prerequisiti: Articolo 02 — Computer e architettura di Von Neumann; conoscenza di CPU, RAM, SSD e istruzioni.

Perimetro: organizzazione e funzioni del sistema operativo. La produzione di documenti e il foglio elettronico appartengono all’Articolo 04; la programmazione e gli algoritmi saranno approfonditi dall’Articolo 05. Sicurezza informatica avanzata e amministrazione professionale dei sistemi non sono oggetto di questa unità.

1. Che cos’è un sistema operativo?

Il sistema operativo (SO, in inglese operating system, OS) è l’insieme coordinato di componenti software che gestisce le risorse di elaborazione, memoria e input/output, controlla l’accesso ai dati e mette a disposizione servizi utilizzati dalle applicazioni. È un software di sistema: non è un componente fisico e non coincide con il computer nel suo insieme.

Quando apriamo un browser, per esempio, il sistema operativo avvia i processi necessari, assegna memoria, permette di leggere file e inviare dati alla scheda di rete. Il browser rimane un programma applicativo; il sistema operativo, invece, rende disponibili le funzioni necessarie al suo funzionamento.

Un SO svolge due ruoli complementari: gestore delle risorse, perché coordina risorse condivise e limitate, e fornitore di astrazioni e servizi, perché consente ai programmi di lavorare con file, finestre e connessioni senza dover conoscere ogni dettaglio elettrico dell’hardware.

Da ricordare. Un sistema operativo non crea nuove risorse fisiche: organizza e protegge l’uso di quelle disponibili. Esistono anche computer e microcontrollori che eseguono software senza un sistema operativo general purpose.

Perché un computer ha bisogno di un sistema operativo?

Immaginiamo tre applicazioni che chiedono contemporaneamente di usare la stampante, leggere un file e occupare la memoria. Senza regole comuni, ogni programma dovrebbe conoscere il dispositivo e negoziare direttamente l’accesso alle risorse. Un SO general purpose offre invece un punto di coordinamento: assegna tempo di esecuzione, isola gli spazi di memoria, semplifica l’accesso ai dispositivi in operazioni come «apri» e «scrivi» e controlla gli accessi.

La parola astrazione indica proprio questo: il programma vede un’interfaccia più semplice della complessità fisica sottostante. Quando un’applicazione richiede di aprire relazione.txt, non deve calcolare autonomamente in quale cella di un SSD sia collocato ogni byte.

Il nostro caso-guida: aprire una relazione

Seguiremo uno studente che avvia un editor, apre relazione.txt, modifica una frase, salva e chiude. Durante il percorso ritroveremo avvio del processo, scheduling, memoria, I/O, file system e autorizzazioni. Le operazioni concrete dipendono dal sistema operativo e dall’applicazione: si tratta di un modello coerente, non di una traccia identica per ogni PC.

2. Hardware, firmware, sistema operativo e applicazioni

L’hardware comprende processori, RAM, SSD, tastiere e altre componenti materiali. Il firmware è software legato al dispositivo, spesso conservato in memoria non volatile: il firmware UEFI di molti PC contribuisce all’inizializzazione e all’avvio. Il sistema operativo gestisce l’ambiente di esecuzione e le risorse. Le applicazioni realizzano attività per l’utente, come scrivere un testo o navigare nel Web.

Livello Funzione principale Esempio
Applicazioni Svolgono compiti specifici Browser, editor di testi
Sistema operativo e servizi Coordinano processi, memoria, file e periferiche Windows, sistemi GNU/Linux, macOS
Firmware Fornisce procedure di inizializzazione e controllo del dispositivo UEFI
Hardware Esegue fisicamente le operazioni CPU, RAM, SSD

Questa tabella è un modello didattico, non una catena rigida: il firmware può intervenire anche durante il funzionamento e i componenti software comunicano tramite molte interfacce. Un programma in linguaggio macchina non è hardware: rimane codice eseguito dall’hardware.

Software di sistema: uno stesso obiettivo, responsabilità differenti

Il firmware permette, tra l’altro, di inizializzare componenti e partecipare all’avvio; il kernel governa operazioni privilegiate; i servizi di sistema svolgono funzioni comuni; l’applicazione risolve un compito dell’utente. Il confine non è sempre netto in ogni implementazione: un driver, per esempio, può essere eseguito nel kernel oppure in spazio utente.

Riconosci il livello

«La tastiera produce un evento elettrico» riguarda l’hardware; «un driver interpreta l’evento secondo l’interfaccia del SO» riguarda il software di sistema; «l’editor inserisce una lettera nel documento» riguarda l’applicazione. Una stessa azione visibile coinvolge più livelli, non uno soltanto.

3. Le funzioni fondamentali del sistema operativo

Le responsabilità del SO sono diverse ma collegate. La gestione della CPU sceglie le attività eseguibili; la gestione della memoria assegna spazio e protegge le aree dei processi; il file system organizza i dati persistenti; i servizi di input/output coordinano dispositivi e trasferimenti; il controllo degli accessi applica identità e permessi.

Il SO offre inoltre servizi per creare processi, aprire file, gestire la rete e comunicare con le periferiche. Molte applicazioni richiedono questi servizi tramite chiamate di sistema (system call) e librerie che le utilizzano. Una chiamata di sistema permette a codice applicativo di richiedere un’operazione controllata dal sistema.

Esempio guidato. Quando salvi un documento: (1) l’applicazione prepara i dati; (2) richiede al SO la scrittura; (3) il SO controlla accesso e percorso; (4) il file system organizza i dati; (5) i driver e il dispositivo di archiviazione partecipano al trasferimento. Il salvataggio percepito dall’utente non implica necessariamente che ogni byte sia già stato scritto permanentemente sul supporto: possono essere presenti cache e buffer.

Dal servizio richiesto alla risorsa reale

Consideriamo la richiesta di lettura di un file. L’applicazione invoca una funzione di libreria, che può tradursi in una o più system call. Il kernel verifica parametri e autorizzazioni, interagisce con il file system e coordina l’I/O. Al termine la funzione restituisce dati oppure un’indicazione di errore; l’applicazione deve saper gestire entrambi gli esiti.

Di conseguenza, questa separazione spiega anche perché un’applicazione ordinaria non può ignorare i permessi semplicemente scegliendo un diverso pulsante della propria interfaccia: l’autorizzazione è applicata al livello dei servizi di sistema.

4. Kernel, spazio utente e servizi di sistema

Il kernel è il nucleo del sistema operativo. Esegue operazioni privilegiate e coordina risorse fondamentali, come CPU, memoria e I/O. Le applicazioni normali lavorano prevalentemente in uno spazio utente meno privilegiato, per ridurre il rischio che un errore alteri l’intero sistema.

In particolare, la distinzione riguarda livelli di privilegio e modalità di accesso alle risorse, non due luoghi fisici della RAM. Attraverso interfacce controllate, il codice utente richiede servizi al kernel. Alcuni SO impiegano architetture monolitiche modulari, altri microkernel o soluzioni ibride: per ora è più importante comprendere la separazione delle responsabilità che memorizzare classificazioni architetturali.

I servizi di sistema sono componenti che svolgono attività di supporto, ad esempio stampa, gestione di sessioni o funzioni di rete; a seconda del sistema possono essere eseguiti nello spazio utente oppure avere parti nel kernel.

Modalità utente e modalità kernel

Molte CPU mettono a disposizione modalità con privilegi diversi. Quando il codice in spazio utente chiede un servizio privilegiato, attraversa un’interfaccia controllata: il processore passa al contesto necessario per eseguire il codice del kernel e successivamente torna all’applicazione. Non significa che il programma acquisisca liberamente tutti i privilegi del kernel.

Tre concetti da non confondere

Kernel: codice centrale del SO. Spazio utente: ambiente di esecuzione ordinariamente meno privilegiato. System call: richiesta controllata di un servizio. La transizione verso il kernel non equivale necessariamente a un cambio di processo: può riprendere lo stesso thread dopo aver completato la richiesta.

Schema 3D dell'architettura a livelli del sistema operativo con applicazioni, spazio utente, servizi di sistema, kernel, driver e hardware.
Architettura concettuale del sistema operativo: applicazioni e servizi in spazio utente richiedono funzioni al kernel, che gestisce le risorse hardware. I driver possono operare in spazio kernel o utente.

5. GUI, CLI e shell: come comunichiamo con il computer

Una GUI (Graphical User Interface) presenta finestre, icone, pulsanti e menu. Una CLI (Command-Line Interface) consente di impartire comandi scritti. Entrambe possono essere utilizzate per svolgere molte delle stesse attività, con strumenti e procedure differenti.

La shell è un programma che interpreta comandi o facilita l’interazione con il sistema. Una shell testuale può essere usata dentro un terminale; il terminale è l’ambiente che visualizza testo e riceve input, mentre la shell interpreta comandi. Una shell non coincide con il kernel.

Compito GUI CLI (esempio generico)
Esplorare una cartella Aprire il gestore file Visualizzare l’elenco dei file con un comando adatto alla shell
Creare una cartella Nuova cartella mkdir Progetto in molte shell
Avviare un’applicazione Selezionare un’icona Usare il comando appropriato al sistema

Tuttavia, non tutti i comandi funzionano identicamente in Windows, Linux e macOS: nomi, sintassi e permessi dipendono dalla shell e dall’ambiente.

Confronto operativo su sistemi differenti

Attività Windows (PowerShell) GNU/Linux o macOS (shell POSIX compatibile)
Mostrare la cartella corrente Get-Location pwd
Elencare contenuti Get-ChildItem ls
Creare una directory New-Item -ItemType Directory -Name Progetto mkdir Progetto
Accedere a una directory Set-Location Progetto cd Progetto

Questi comandi illustrano le interfacce, non richiedono privilegi amministrativi se si lavora in una cartella personale. Non confondere PowerShell con il vecchio Prompt dei comandi: sono ambienti diversi, anche quando alcuni nomi coincidono.

6. Dall’accensione all’ambiente utente: il boot

Il boot è la procedura che porta un dispositivo dall’accensione a un ambiente utilizzabile. Per molti PC moderni si può usare questa sequenza semplificata:

Firmware UEFI/BIOS → programma di avvio (bootloader) → kernel → servizi di sistema → ambiente utente
  1. Il firmware inizializza e verifica le funzioni necessarie all’avvio.
  2. Il firmware o un gestore d’avvio individua il software da caricare; quando previsto, interviene un bootloader.
  3. Il kernel viene caricato e inizializza strutture di memoria, gestione della CPU e dispositivi necessari.
  4. Vengono avviati servizi e programmi di sistema.
  5. Si arriva alla schermata di accesso, al desktop o a un’interfaccia testuale.

Si tratta, quindi, di uno schema generale: alcune implementazioni differiscono e non tutte prevedono un bootloader separato. Nei PC storici il BIOS e il MBR avevano ruoli tipici; molti PC moderni adottano UEFI e partizioni di sistema EFI. Non è corretto presentare BIOS e MBR come gli unici meccanismi di avvio possibili.

Che cosa succede tra firmware e desktop?

Il sistema deve identificare una sorgente di avvio autorizzata, caricare il codice necessario e rendere disponibili memoria e dispositivi. Il kernel crea strutture fondamentali e avvia i componenti che predisporranno sessioni e interfacce. Molti servizi vengono inizializzati anche dopo la prima schermata visibile, quindi «compare il desktop» non significa sempre che ogni attività di avvio sia terminata.

Diagnosi concettuale

Un messaggio precedente al caricamento del SO può provenire dal firmware o dal boot manager. Un errore dopo il caricamento del kernel può invece appartenere a una fase successiva. Conoscere gli stadi aiuta a descrivere il problema senza attribuire ogni mancato avvio genericamente a «Windows» o «Linux».

7. Programmi, processi e thread

Un programma è un insieme organizzato di istruzioni, spesso conservato come file. Un processo è un’istanza attiva di un programma, con uno spazio di indirizzamento, dati, risorse e uno stato gestito dal SO. Eseguire due volte lo stesso programma può creare due processi distinti.

Un thread è un flusso di esecuzione all’interno di un processo. I thread dello stesso processo condividono normalmente una parte importante delle risorse, come lo spazio di indirizzamento, ma possiedono ciascuno un proprio stato di esecuzione (per esempio registri e stack). In molti sistemi moderni lo scheduler assegna tempo di CPU ai thread eseguibili; parlare di «processi che si alternano» è una semplificazione introduttiva. Il numero di processi non coincide necessariamente con il numero di finestre aperte.

Esempio. Il programma di elaborazione testi è conservato sull’SSD. Dopo l’avvio esiste almeno un processo; un suo thread può occuparsi dell’interazione con l’utente e altri thread possono gestire attività in parallelo o concorrenti. Non tutti i programmi utilizzano più thread e la struttura effettiva dipende dall’applicazione.

Che cosa contiene il contesto di un processo?

Il SO mantiene strutture informative associate a ciascun processo, spesso descritte nei manuali come PCB (Process Control Block): identificativo, stato, informazioni di gestione, riferimenti allo spazio di indirizzamento, risorse aperte e dati per la pianificazione. Nei sistemi reali nomi e organizzazione di queste strutture variano. Un PCB non è il file eseguibile: è una descrizione del processo mentre viene gestito.

Ogni thread possiede inoltre un contesto di esecuzione, ad esempio contatore delle istruzioni, registri e stack. Un processo può contenere più thread; se due thread modificano lo stesso dato condiviso senza coordinamento, possono produrre un risultato inatteso: questa situazione introduce il problema della sincronizzazione, che qui riconosciamo senza approfondire algoritmi avanzati.

Dal doppio clic al processo

1. L’utente avvia l’editor. 2. Il SO verifica il file eseguibile e prepara risorse e spazio di indirizzamento. 3. Crea le strutture per processo e thread iniziale. 4. I thread diventano eleggibili per l’esecuzione. 5. L’applicazione chiede servizi per mostrare l’interfaccia e aprire la relazione. Non è garantita una corrispondenza univoca fra clic, processo e finestra.

8. Gli stati di un processo e le transizioni

Per ragionare sul comportamento dei processi utilizziamo un modello didattico a cinque stati: nuovo (in creazione), pronto (può essere eseguito, ma attende CPU), in esecuzione (sta utilizzando una CPU), in attesa (non può proseguire finché non si verifica un evento), terminato (ha concluso).

Transizione Significato
Nuovo → Pronto Il SO ammette l’attività tra quelle eseguibili
Pronto → Esecuzione Lo scheduler le assegna una CPU
Esecuzione → Pronto Il SO interrompe temporaneamente l’esecuzione, per esempio per scadenza del turno
Esecuzione → Attesa L’attività deve attendere un evento, per esempio un completamento di I/O
Attesa → Pronto Arriva l’evento atteso e l’attività può tornare eseguibile
Esecuzione → Terminato L’attività conclude o viene terminata

Attesa non significa semplicemente «sto aspettando il mio turno»: in quel caso lo stato è pronto. Inoltre, i SO reali hanno stati e dettagli più complessi del modello scolastico.

Esempio completo. Apri un programma: nasce una nuova attività, poi diventa pronta. Lo scheduler la fa eseguire. Quando chiede dati a un dispositivo può passare in attesa; completata l’operazione torna pronta e, quando ottiene la CPU, riprende l’esecuzione. Alla chiusura termina.

Una traccia temporale con attesa di I/O

Istante illustrativo Stato Motivo
t = 0 ms Nuovo Creazione dell’attività
t = 1 ms Pronto Può usare la CPU
t = 3 ms In esecuzione Assegnazione della CPU
t = 5 ms In attesa Richiesta di lettura bloccante
t = 9 ms Pronto I dati richiesti sono disponibili
t = 12 ms In esecuzione Nuova assegnazione della CPU
t = 15 ms Terminato Conclusione

I tempi sono inventati come dati di esercizio, non misure di un computer. Da t=5 a t=9 l’attività non è pronta; da t=9 a t=12 è pronta ma non sta ancora usando la CPU.

Questo schema descrive un’unità con un solo flusso di esecuzione. In un processo multithread, thread differenti possono trovarsi contemporaneamente in stati diversi.

Diagramma 3D dei cinque stati di un processo: Nuovo, Pronto, In esecuzione, In attesa e Terminato, con le sei transizioni principali.
Diagramma degli stati di un processo: ammissione, assegnazione della CPU, interruzione, attesa di I/O, completamento dell’evento e terminazione. Lo scheduler gestisce la selezione delle attività pronte.

9. Multitasking, concorrenza e parallelismo

Il multitasking permette di far progredire più attività nello stesso intervallo di tempo. Su una singola CPU logica, più thread possono avanzare alternandosi rapidamente: questa è una forma di concorrenza, non necessariamente di esecuzione simultanea. Il parallelismo si verifica quando più attività sono effettivamente eseguite nello stesso momento su risorse di calcolo differenti, per esempio core diversi.

Inoltre, un computer multicore può combinare concorrenza e parallelismo. Inoltre, durante l’attesa di un dispositivo, una CPU può svolgere altro lavoro. Dunque vedere varie finestre aperte non dimostra che ciascuna abbia una CPU dedicata.

Errore frequente. «Tre programmi aperti richiedono tre processori» è falso. Anche una CPU logica sola può servire più attività tramite alternanza; con più core alcune possono essere eseguite contemporaneamente.

Un confronto con una sola CPU logica e con due

Una CPU logica: nell’intervallo da 0 a 6 ms il thread A lavora [0,2), B [2,4), A [4,6). Entrambi progrediscono, ma nessun istante mostra due istruzioni dei due thread in esecuzione su quella stessa CPU logica.

Due CPU logiche disponibili: A e B possono lavorare nello stesso intervallo [0,2) su risorse differenti, se lo scheduler lo consente. La simultaneità è parallelismo; l’organizzazione delle attività che devono progredire resta un problema di concorrenza.

10. Scheduling e time slice

Lo scheduling è la scelta di quale attività pronta eseguire e per quanto tempo. Nel modello scolastico trattiamo i processi come singole unità di esecuzione; negli OS moderni, come visto, la decisione riguarda tipicamente i thread. Lo scheduler cerca di bilanciare reattività, utilizzo della CPU, equità ed eventuali priorità.

In alcuni algoritmi un processo può essere preempted, cioè interrotto dal SO anche se non ha finito. Il time slice o quantum è un intervallo massimo di esecuzione continuativa previsto in determinati schemi: non è una durata universale, uguale su tutti i sistemi operativi.

Se un’attività usa poco tempo CPU e poi aspetta un file, può cedere il controllo prima della fine del quantum. Se invece usa intensamente la CPU, può esaurire il proprio turno e tornare pronta.

Le misure dello scheduler

Per confrontare algoritmi occorre dichiarare la metrica. Il tempo di completamento è l’istante in cui il lavoro termina; il turnaround time è il tempo dal suo arrivo alla conclusione; il tempo di attesa è quello trascorso nella coda dei pronti nel modello senza I/O; il tempo di risposta misura quanto passa dall’arrivo fino alla prima assegnazione della CPU.

Turnaround = completamento − arrivo

Attesa = turnaround − CPU totale (se non vi sono attese I/O)

Risposta = primo avvio − arrivo

Perciò, un algoritmo può migliorare la risposta iniziale senza migliorare il tempo medio di attesa: per questo confrontare solo una misura non basta.

11. Tre algoritmi introduttivi: FCFS, Round Robin e priorità

FCFS — First Come, First Served

Nel modello FCFS non preemptive le attività sono servite nell’ordine di arrivo e restano sulla CPU fino alla conclusione del loro burst CPU (intervallo di calcolo) o a un evento che le blocca. Un lavoro lungo arrivato per primo può far attendere gli altri.

Round Robin

In Round Robin ciascuna attività pronta ottiene al massimo un quantum; se non ha completato il lavoro CPU, torna in coda. È utile per comprendere la condivisione temporale, ma il costo dei cambi di contesto non è nullo.

Scheduling a priorità

Si favoriscono attività di priorità maggiore. Il comportamento dipende dalla regola scelta: priorità statiche o dinamiche, preemption e gestione delle parità. Una politica troppo rigida può causare starvation, cioè attese molto lunghe di attività meno prioritarie.

Metodo Regola introduttiva Limite da conoscere
FCFS Ordine di arrivo Attesa di lavori brevi dietro lavori lunghi
Round Robin Rotazione con quantum Scelte del quantum e overhead
Priorità Prima le attività più importanti secondo la politica Possibile starvation

Esempio numerico controllabile. Tre processi A, B, C arrivano tutti a t = 0 e hanno burst CPU rispettivamente di 5, 3 e 2 millisecondi. Trascuriamo il costo di cambio di contesto, non ci sono operazioni di I/O e scegliamo l’ordine iniziale A–B–C.

FCFS: A [0,5), B [5,8), C [8,10). Tempi di attesa: A = 0 ms; B = 5 ms; C = 8 ms. Media: (0+5+8)/3 = 4,33 ms.

Round Robin con quantum 2 ms: A [0,2), B [2,4), C [4,6), A [6,8), B [8,9), A [9,10). Completamenti A = 10, B = 9, C = 6 ms. Attese (tempo di completamento − arrivo − burst CPU): A = 10−0−5 = 5; B = 9−0−3 = 6; C = 6−0−2 = 4 ms. Media = 5 ms.

In questo esempio FCFS ha un’attesa media inferiore: non significa che sia sempre migliore. Round Robin distribuisce più frequentemente la possibilità di eseguire lavoro; le prestazioni dipendono dalle condizioni e dalla metrica scelta.

Tempo di attesa = tempo di completamento − tempo di arrivo − durata totale CPU
(nel modello semplificato senza I/O)

Diagramma di Gantt: lettura guidata

Il diagramma di Gantt distribuisce il tempo sull’asse orizzontale: ogni intervallo riporta quale processo occupa la CPU. Gli intervalli sono rappresentati come [inizio, fine), cioè comprendono l’istante iniziale ma non quello finale. In questo modo non contiamo due volte il confine tra due turni.

FCFS: 0 5 8 10
|— A —|– B –|-C-|

RR q=2: 0 2 4 6 8 9 10
|-A|-B|-C|-A|B|A|

Attesa e risposta non sono uguali

Nell’esempio A=5, B=3, C=2, tutti arrivati a t=0: con FCFS i tempi di risposta sono 0, 5 e 8 ms; con Round Robin sono 0, 2 e 4 ms. La risposta media RR è (0+2+4)/3 = 2 ms, inferiore ai 4,33 ms di FCFS, benché l’attesa media complessiva RR sia 5 ms contro 4,33 ms.

Questo risultato rende visibile il vantaggio di reattività di Round Robin nel nostro esempio, senza affermare che esso sia migliore per ogni obiettivo.

Un esempio di priorità

Supponiamo che A, B e C arrivino insieme, richiedano 4, 2 e 1 ms e abbiano rispettivamente priorità 2, 1 e 3, dove 3 è la più alta. Con politica a priorità non preemptive e nessun I/O, l’ordine è C → A → B. Attese: C=0 ms, A=1 ms, B=5 ms; attesa media = (0+1+5)/3 = 2 ms. Cambiando la convenzione delle priorità o ammettendo preemption, il risultato può cambiare: le regole devono essere esplicite.

Confronto 3D degli algoritmi FCFS e Round Robin con diagrammi di Gantt, tre processi A, B e C, quantum di 2 ms e tempi di attesa e risposta.
Confronto tra FCFS e Round Robin con tre processi: A = 5 ms, B = 3 ms e C = 2 ms. Con quantum di 2 ms, Round Robin riduce il tempo medio di risposta a 2 ms, mentre FCFS presenta un’attesa media inferiore in questo esempio.

12. Il cambio di contesto

Il context switch è il passaggio dall’esecuzione di un’attività a un’altra. Il SO conserva lo stato necessario alla ripresa, come registri e altre informazioni, e ripristina quello dell’attività successiva. È come interrompere un esercizio segnando il punto raggiunto, poi riprendere un altro esercizio dal punto in cui era stato sospeso.

In ogni caso, questo passaggio richiede lavoro: perciò turni troppo brevi possono produrre un numero elevato di cambi di contesto. Non ogni passaggio tra modalità utente e kernel implica necessariamente un cambio di processo, né tutti i cambi hanno lo stesso costo.

Quali informazioni vengono salvate?

Prima di sospendere un thread, il sistema deve conservare informazioni sufficienti per proseguire correttamente: posizione nel flusso di istruzioni, valori dei registri necessari, puntatore dello stack e altri dati secondo l’architettura. Se il thread successivo appartiene a un processo diverso, possono variare anche le mappature di memoria e i dati di contesto associati.

Stima didattica dell’overhead

Immaginiamo una simulazione in cui ogni cambio di contesto richieda 0,1 ms e avvengano 30 cambi in un intervallo. Il costo totale ipotizzato è 30 × 0,1 = 3 ms. È una stima in un modello artificiale: in un computer reale il costo dipende da molte condizioni e non è necessariamente costante.

13. Gestione e protezione della memoria

La RAM contiene dati e istruzioni necessari alle attività in corso, ma è una risorsa limitata. Il SO tiene traccia delle aree allocate, collabora con l’hardware per gestire gli indirizzi e applica meccanismi di protezione per ridurre la possibilità che un processo alteri arbitrariamente la memoria di un altro.

È importante distinguere la quantità di RAM installata, la memoria fisica effettivamente disponibile e la memoria virtuale utilizzabile dai processi: sono grandezze collegate, non sinonimi. I processi non possiedono di norma un blocco fisico fisso e continuo per ogni loro dato.

Esempio. Con un editor di testi e un browser aperti, entrambi richiedono memoria. Il SO e l’hardware permettono di tradurre gli indirizzi utilizzati dai processi in posizioni fisiche, con controlli di accesso. La quantità di memoria occupata può cambiare mentre le applicazioni lavorano.

Allocazione e isolamento

Quando l’editor richiede memoria per il contenuto del documento, il sistema rende disponibile uno spazio di indirizzamento coerente con le richieste e con i limiti del processo. La MMU (Memory Management Unit) e le tabelle di mappatura permettono di tradurre gli indirizzi; i bit di protezione possono vietare accessi non autorizzati. È possibile che parti della memoria virtuale non abbiano ancora una pagina fisica assegnata fino al primo utilizzo.

Di conseguenza, un indirizzo numericamente uguale in due processi non identifica necessariamente la stessa posizione fisica: ciascun processo può avere mappature differenti. È uno dei motivi per cui la memoria virtuale aiuta sia l’organizzazione sia l’isolamento.

14. Memoria virtuale, paginazione e page fault

La memoria virtuale è un meccanismo di gestione degli indirizzi che offre ai processi spazi di indirizzamento virtuali e permette di mappare i loro indirizzi su risorse fisiche, con protezione e flessibilità. Non coincide con il file di paging o con una porzione di SSD: questi possono essere strumenti di supporto, ma non definiscono da soli la memoria virtuale.

Nella paginazione, lo spazio virtuale è organizzato in pagine e la memoria fisica in frame di dimensione corrispondente. Strutture dette tabelle delle pagine, utilizzate dalla CPU insieme al SO, consentono di tradurre gli indirizzi virtuali in indirizzi fisici.

Un page fault si verifica quando un accesso a memoria non può essere completato immediatamente con la mappatura e i permessi correnti: il SO interviene per decidere come gestirlo. Può essere un evento normale, per esempio quando una pagina deve essere caricata o allocata; oppure può causare un errore, quando l’accesso non è valido. Non tutti i page fault richiedono una lettura dall’SSD.

Esempio semplificato. Un processo richiede un indirizzo virtuale. Se la mappatura necessaria è valida e disponibile, l’hardware completa l’accesso. Se si produce un page fault, interviene il kernel: può predisporre la pagina e riprendere l’esecuzione oppure rifiutare l’accesso.

Traduzione degli indirizzi: esercizio svolto

Ipotesi: pagine di 4096 byte; indirizzi virtuali espressi in byte; la pagina virtuale 3 è associata al frame fisico 7; trascuriamo cache delle traduzioni e altri dettagli architetturali.

Passo 1 — Individuare la pagina. Un indirizzo virtuale di 12.500 byte si divide per 4096: 12.500 = 3 × 4096 + 212. Quindi numero di pagina virtuale = 3 e offset = 212.

Passo 2 — Consultare la tabella. Per la pagina virtuale 3 la tabella restituisce il frame fisico 7, con permessi sufficienti per la lettura.

Passo 3 — Ricostruire l’indirizzo fisico. 7 × 4096 + 212 = 28.884 byte.

Indirizzo virtuale = pagina × dimensione pagina + offset
Indirizzo fisico = frame × dimensione pagina + stesso offset

Una piccola tabella delle pagine

Pagina virtuale Frame fisico Presente? Permessi illustrativi
0 2 Sì Lettura
1 5 Sì Lettura/scrittura
2 — No Da gestire
3 7 Sì Lettura/scrittura

Un accesso alla pagina 2 può provocare un page fault. Il kernel potrebbe assegnare un frame o recuperare i dati, se l’accesso è legittimo; in caso contrario potrebbe segnalare un errore. La semplice assenza del frame in questa tabella didattica non permette da sola di decidere quale dei due esiti si verificherà.

Una TLB (Translation Lookaside Buffer) è una cache hardware delle traduzioni usate di recente; non è un file di paging. In questa unità è un approfondimento facoltativo.

Schema 3D della memoria virtuale con MMU, tabella delle pagine e traduzione dell'indirizzo virtuale 12500 nell'indirizzo fisico 28884.
Traduzione degli indirizzi mediante paginazione: con pagine da 4096 byte, l’indirizzo virtuale 12500 individua la pagina 3 e l’offset 212. La tabella associa la pagina al frame 7, ottenendo l’indirizzo fisico 28884. Il demand paging è una possibile modalità di caricamento delle pagine.

15. File, directory e file system

Un file è un’unità logica di dati identificata secondo le regole del file system. Una directory (cartella) consente di organizzare nomi e collegamenti ai file e, normalmente, ad altre directory. Il file system è l’insieme di strutture e regole attraverso cui i dati sono organizzati, identificati e accessibili su un volume o in un ambiente logico.

In particolare, non bisogna confondere SSD e file system: l’SSD è un dispositivo fisico di archiviazione; NTFS, ext4 e APFS sono esempi di file system. Uno stesso dispositivo può ospitare più volumi o partizioni, e un file system può essere presentato anche tramite risorse di rete o dispositivi virtuali.

Un file può avere contenuto e metadati: ad esempio nome, dimensione, informazioni temporali e attributi o permessi, secondo il sistema utilizzato. Le estensioni (.txt, .jpg) aiutano a riconoscere alcuni formati, ma non garantiscono da sole la natura dei dati contenuti.

Dal nome del file ai blocchi del supporto

Quando chiediamo di leggere misure.csv, il SO usa il percorso per raggiungere la directory che contiene il riferimento al file; il file system individua poi i dati secondo le sue strutture. I byte non devono occupare necessariamente una sola area fisica continua. In modo differente secondo il file system, le informazioni di gestione permettono di associare il contenuto logico del file alle posizioni utilizzate dal supporto.

Esempio: file e metadati

Un file di 6000 byte su un file system che usa blocchi da 4096 byte richiede, nel modello a blocchi non condivisi e non compressi, almeno 2 blocchi dati, perché un blocco non basta. Il calcolo 2 × 4096 = 8192 byte descrive la capacità dei due blocchi, non implica che il documento contenga 8192 byte né include lo spazio per i metadati.

Le directory possono contenere collegamenti e i permessi possono essere ereditati o valutati lungo il percorso. Questo introduce la differenza tra trovare un nome e essere autorizzati ad aprire il relativo contenuto.

16. Struttura gerarchica, percorsi e permessi

Una gerarchia di directory permette di organizzare file in cartelle annidate. Un percorso assoluto parte da un punto di riferimento principale (radice del file system oppure unità e radice, secondo la piattaforma); un percorso relativo viene interpretato a partire da una directory corrente.

ProgettoScienze/
├── Dati/
│   └── misure.csv
├── Grafici/
│   └── temperatura.png
└── relazione.txt

Se la directory corrente è ProgettoScienze, il percorso relativo del file dei dati è Dati/misure.csv. In un ambiente Unix-like, un esempio di percorso assoluto è /home/studente/ProgettoScienze/Dati/misure.csv; su Windows, C:\Users\Studente\ProgettoScienze\Dati\misure.csv è un esempio illustrativo di percorso assoluto, che può cambiare da un computer all’altro.

I permessi stabiliscono quali operazioni possono essere consentite, per esempio lettura, modifica ed esecuzione. Per le directory, l’accesso e l’attraversamento possono essere soggetti a permessi specifici. Le regole differiscono tra file system e SO; non è corretto pensare che chiunque possa sempre aprire o modificare qualsiasi file.

Esempio completo. Crea la cartella ProgettoScienze, al suo interno Dati e Grafici. Salva misure.csv in Dati. Dal livello ProgettoScienze individua Dati/misure.csv; dalla cartella Grafici usa un percorso relativo che prima risale di un livello, per esempio ../Dati/misure.csv nei sistemi che adottano questa notazione. Infine controlla che l’utente autorizzato possa leggere il file.

Percorsi, radici e directory corrente

Il simbolo . indica in molte shell e convenzioni la directory corrente, mentre .. indica la directory genitore. Partendo da ProgettoScienze/Grafici, il percorso ../Dati/misure.csv risale a ProgettoScienze e scende nella sottocartella Dati. Pertanto, un percorso assoluto non dipende dalla directory corrente, ma resta dipendente dall’organizzazione del sistema in cui è scritto.

Laboratorio manuale senza privilegi amministrativi

1. Crea nella tua cartella personale ProgettoScienze con le directory Dati e Grafici. 2. Salva un piccolo file di testo chiamato misure.csv in Dati con due righe: tempo,temperatura e 0,20. 3. Individua il file tramite percorso relativo e poi assoluto. 4. Verifica che l’estensione non trasformi automaticamente un testo in dati di qualità: è il contenuto, non il suffisso, a determinarne il significato.

Infografica 3D su file e file system con albero delle directory Unix-like, percorsi assoluti e relativi, metadati e permessi di accesso.
Organizzazione gerarchica di file e directory: l’esempio Unix-like mostra il percorso /Progetti/Codice/main.py. La figura illustra inoltre metadati, permessi r/w/x e file system come NTFS, ext4 e APFS.

17. Driver, controller, buffering e interrupt

Una periferica è un dispositivo che scambia informazioni con il computer. Il controller è un componente hardware o un insieme di logiche che governa un dispositivo o un’interfaccia. Il driver è software che consente al SO di comunicare con specifiche categorie di dispositivi e gestirne le operazioni, secondo l’architettura del sistema.

Il buffering utilizza una memoria temporanea per gestire differenze di velocità e organizzare trasferimenti. Un interrupt è un meccanismo con cui hardware o software segnala al processore un evento che richiede attenzione. In alternativa o in combinazione possono essere usate altre tecniche, come il polling.

Esempio della stampa. Un documento viene preparato dall’applicazione. Il servizio di stampa può mettere i lavori in coda; un driver traduce le richieste in forme adatte al dispositivo e il controller della stampante gestisce il funzionamento fisico. Il sistema non richiede necessariamente che l’applicazione resti attiva a controllare ogni singolo movimento.

Un I/O asincrono, passo dopo passo

Un programma richiede la lettura di dati. Il kernel e il driver predispongono l’operazione; il controller del dispositivo esegue il lavoro previsto. Se il programma ha richiesto una lettura bloccante, il suo thread può passare in attesa. Al completamento, un interrupt o un altro meccanismo di segnalazione permette al sistema di aggiornare lo stato dell’operazione, rendendo eventualmente il thread di nuovo pronto.

Nel polling il software controlla ripetutamente una condizione; con gli interrupt è invece possibile ricevere una segnalazione dell’evento. Nessuno dei due approcci è universalmente migliore e i dispositivi possono combinarli. Il buffer è uno spazio temporaneo di dati; una coda organizza l’ordine delle richieste. Non sono sinonimi.

18. Utenti, accessi, aggiornamenti e backup

Un account utente permette di associare operazioni e risorse a un’identità. Un account ordinario ha privilegi limitati; un account amministrativo può svolgere operazioni più delicate, come modificare configurazioni di sistema. Il principio del minimo privilegio suggerisce di assegnare soltanto le autorizzazioni necessarie.

Gli aggiornamenti possono correggere errori, vulnerabilità e incompatibilità; richiedono comunque attenzione alle procedure e alla disponibilità dei dati. Un backup è una copia recuperabile di dati importanti, preferibilmente separata dall’originale e verificata periodicamente. Non va confuso con la sincronizzazione automatica: se una cancellazione viene sincronizzata, può propagarsi anche su altri dispositivi.

Infine, il sistema operativo contribuisce alla sicurezza, ma non garantisce da solo che ogni programma sia affidabile o che ogni dato sia automaticamente protetto da perdita e uso improprio.

La differenza tra autorizzazione e autenticazione

L’autenticazione verifica con quale identità un soggetto accede al sistema; l’autorizzazione stabilisce che cosa può fare. Conoscere una password non garantisce automaticamente il diritto di modificare un file protetto: i permessi vengono valutati secondo l’identità e le regole del sistema.

Scenario scolastico

Uno studente può leggere un documento condiviso dal docente ma non modificarlo. Il docente può concedere il permesso di modifica a un gruppo ristretto. Questa è un’applicazione del minimo privilegio: attribuire a ciascuno solo le operazioni necessarie. Per proteggere il lavoro servono anche copie di backup verificabili e possibilità di recupero.

19. Le principali famiglie di sistemi operativi

Famiglia Contesto tipico Distinzione utile
Microsoft Windows PC personali e professionali Famiglia di sistemi operativi proprietari
GNU/Linux PC, server e sistemi dedicati Linux è il kernel; una distribuzione integra il kernel con strumenti e altri componenti software
macOS Computer Mac Sistema operativo Apple basato su tecnologie Unix; non coincide con il solo kernel
Android e iOS Smartphone e dispositivi mobili Sistemi pensati per dispositivi e interazioni mobili; Android usa il kernel Linux, iOS appartiene all’ecosistema Apple
MS-DOS (storico) PC di epoche precedenti Esempio storico utile per comprendere l’evoluzione delle interfacce e dei sistemi

Non esiste un sistema «migliore in assoluto»: piattaforme e versioni hanno caratteristiche differenti e la scelta dipende dalle esigenze, dal software disponibile, dalle risorse e dal contesto d’uso. Il sistema operativo non va confuso con la sua interfaccia grafica, con il kernel o con una particolare distribuzione.

Le famiglie non sono soltanto interfacce grafiche

Windows include kernel, servizi, strumenti grafici e testuali. In una distribuzione GNU/Linux il kernel Linux è integrato con utilità, librerie, servizi e, se previsto, un ambiente desktop. macOS combina il proprio kernel e servizi con applicazioni e interfacce dell’ecosistema Apple. Android usa il kernel Linux ma non è semplicemente una normale distribuzione desktop GNU/Linux; iOS è un sistema mobile distinto da macOS pur condividendo basi tecnologiche.

Esempio concreto: «Aprire Gestione attività» in Windows, «Monitoraggio Attività» in macOS o un monitor processi in Linux serve a osservare risorse simili, ma le metriche mostrate e i nomi delle colonne possono non essere direttamente equivalenti.

20. Tre situazioni reali, errori frequenti e sintesi

Situazione A — Aprire un file mentre il browser lavora

Il browser e il programma che apre il file possono essere processi distinti. Il SO mantiene le loro risorse, fa progredire i thread pronti, coordina la lettura dei dati dal file system e risponde agli eventi della tastiera. Se un processo deve aspettare l’I/O, altri thread possono utilizzare la CPU.

Situazione B — Un PC sembra rallentare

Il rallentamento può avere cause diverse: CPU molto occupata, memoria sotto pressione, trasferimenti lenti o altre attività in corso. Non basta osservare una sola percentuale per individuare la causa: è utile confrontare i dati degli strumenti di monitoraggio del SO e ricordare che correlazione non equivale automaticamente a causa.

Situazione C — Organizzare il lavoro di classe

La cartella Classe1 contiene le sottocartelle Testi, Dati e Immagini. Un file di misure resta nei Dati, il grafico nelle Immagini, la relazione nei Testi. Nomi chiari e backup verificabili facilitano la ricerca e il recupero dei materiali.

Errori frequenti da evitare

  • Confondere il SO con la CPU o con il firmware.
  • Pensare che una finestra corrisponda sempre a un solo processo.
  • Confondere pronto con in attesa.
  • Equiparare concorrenza e parallelismo.
  • Credere che memoria virtuale significhi soltanto «spazio sull’SSD».
  • Identificare il file system con il supporto fisico.
  • Scambiare shell, terminale e kernel.
  • Ritenere che la presenza di backup equivalga automaticamente a ripristino garantito.

Verifica operativa. Su un computer disponibile, apri lo strumento di monitoraggio delle risorse (per esempio Gestione attività in Windows o Monitoraggio Attività in macOS), identifica un processo attivo e osserva CPU e memoria. Non terminare processi di sistema e non modificare configurazioni amministrative. Confronta ciò che osservi con il modello teorico: un singolo programma può usare più processi e più thread.

Sintesi. Il computer fornisce risorse fisiche; il sistema operativo le organizza attraverso kernel e servizi. I programmi attivi sono rappresentati da processi e thread; lo scheduler coordina l’esecuzione; la memoria virtuale abilita traduzione e protezione degli indirizzi; il file system dà una struttura logica ai dati. Questi concetti aiutano a comprendere come funzionano le applicazioni che useremo negli articoli successivi.

Caso completo: dall’avvio dell’editor al salvataggio

  1. Avvio: l’utente attiva l’applicazione, il SO prepara almeno un processo e i relativi thread.
  2. CPU: lo scheduler consente ai thread pronti di eseguire a turno o in parallelo, a seconda delle risorse.
  3. Memoria: il programma utilizza indirizzi virtuali; il sistema e la MMU li traducono e proteggono.
  4. Apertura: l’editor richiede la lettura di relazione.txt; il file system individua i dati e il SO verifica i permessi.
  5. Attesa: se la lettura blocca un thread, altre attività possono progredire.
  6. Salvataggio: l’editor invia i dati attraverso i servizi del SO; caching e conferma di durabilità non sono la stessa cosa.
  7. Chiusura: l’applicazione rilascia risorse e il SO completa la gestione della terminazione.

Tre verifiche di laboratorio

A. Processi: apri e chiudi un editor e osserva il monitor processi senza terminare attività di sistema. B. Memoria: confronta la memoria riportata prima e dopo l’apertura di un documento, senza aspettarti numeri identici su PC differenti. C. File: crea un file nella cartella personale, cambiane il nome e verifica che il percorso di accesso debba essere aggiornato.

21. Esercizi graduati — Allenati con MEGI

Gli esercizi numerici sono modelli didattici con ipotesi esplicite: non descrivono prestazioni misurate su un sistema operativo reale.

Prova a rispondere prima di aprire ciascuna soluzione. Negli esercizi sullo scheduling usa soltanto le ipotesi dichiarate: un’unica CPU logica, nessun costo di cambio di contesto e nessun I/O, salvo diversa indicazione.

Fondamenti, componenti e interfacce — esercizi 1–5

  1. Definizione. Quali sono i due ruoli principali di un sistema operativo?
    Soluzione ragionata

    Gestisce e coordina risorse come CPU, memoria e I/O; fornisce astrazioni e servizi alle applicazioni e agli utenti.

  2. Classificazione. Classifica UEFI, RAM, browser e kernel.
    Soluzione ragionata

    UEFI: firmware; RAM: hardware; browser: software applicativo; kernel: componente fondamentale del sistema operativo.

  3. Applicazione — livelli software. Una tastiera genera un evento, il driver lo rende disponibile e l’editor inserisce un carattere. Associa le tre azioni ad hardware, software di sistema e applicazione.
    Soluzione ragionata

    La tastiera è hardware; il driver è software di sistema; l’editor è software applicativo. Un’unica azione dell’utente attraversa più livelli.

  4. System call. Un programma prova ad aprire un file senza autorizzazione. Quale componente applica il controllo e perché non basta cambiare interfaccia?
    Soluzione ragionata

    Il sistema operativo controlla permessi e identità attraverso i servizi di accesso ai file. L’interfaccia dell’applicazione non può eliminare le restrizioni imposte dal SO.

  5. Interfacce. Qual è la differenza tra terminale e shell?
    Soluzione ragionata

    Il terminale offre l’ambiente di input e visualizzazione testuale; la shell interpreta i comandi impartiti e ne organizza l’esecuzione.

Processi, thread e stati — esercizi 6–10

  1. Boot e diagnosi. Quali fasi generali precedono la schermata di accesso? Perché il desktop non dimostra che tutti i servizi siano già completamente avviati?
    Soluzione ragionata

    Schema generale: firmware, eventuale bootloader, kernel, servizi, ambiente utente. Alcuni servizi possono continuare a inizializzarsi anche dopo la comparsa del desktop; la sequenza varia secondo il sistema.

  2. Programma/processo. Se apri due istanze indipendenti dello stesso editor, possiedi necessariamente due programmi distinti salvati sull’SSD?
    Soluzione ragionata

    No. Un solo programma installato può avere più istanze di esecuzione, rappresentate da processi differenti, secondo l’architettura dell’applicazione.

  3. Thread. Quali risorse possono condividere i thread dello stesso processo e cosa resta individuale?
    Soluzione ragionata

    Condividono normalmente spazio di indirizzamento e risorse del processo; ciascuno possiede proprio stato di esecuzione, come registri e stack.

  4. Stati. Un’attività può usare la CPU ma attende che lo scheduler la scelga. Qual è lo stato?
    Soluzione ragionata

    Pronto. Non è bloccata su un evento esterno: attende soltanto l’assegnazione della CPU.

  5. Stati. Un’attività aspetta la conclusione di un’operazione su file. Quale transizione avviene quando l’evento richiesto arriva?
    Soluzione ragionata

    Attesa → Pronto; in seguito potrà passare a Esecuzione quando sarà selezionata.

Scheduling e cambi di contesto — esercizi 11–15

  1. Concorrenza. Due thread possono progredire su una CPU logica sola? Sono necessariamente paralleli?
    Soluzione ragionata

    Sì, possono progredire alternandosi; non sono necessariamente paralleli perché non vengono eseguiti simultaneamente sulla stessa CPU logica.

  2. Scheduling FCFS. A arriva a t=0 e usa 4 ms; B arriva a t=0 e usa 2 ms. Con ordine A poi B, quali sono i tempi di attesa?
    Soluzione ragionata

    A esegue [0,4), B [4,6). A attende 0 ms e B 4 ms; media 2 ms.

  3. Round Robin. Due processi A e B arrivano a t=0, entrambi richiedono 3 ms di CPU; l’ordine iniziale è A–B e il quantum è 2 ms. Scrivi la timeline.
    Soluzione ragionata

    A [0,2), B [2,4), A [4,5), B [5,6). Completamenti: A a 5 ms, B a 6 ms. Tempi di attesa: A = 5−3 = 2 ms; B = 6−3 = 3 ms.

  4. Priorità. Perché una politica che favorisce sempre processi ad alta priorità può creare problemi?
    Soluzione ragionata

    Le attività a bassa priorità potrebbero attendere molto a lungo (starvation). Per attenuare il problema si possono adottare politiche dinamiche o di invecchiamento delle priorità.

  5. Overhead numerico. In una simulazione avvengono 30 cambi di contesto, ognuno del costo ipotetico di 0,1 ms. Quanto tempo viene speso in totale?
    Soluzione ragionata

    30 × 0,1 ms = 3 ms. È un modello artificiale: nella pratica il costo non è necessariamente costante.

Memoria virtuale e file system — esercizi 16–20

  1. Memoria virtuale. È corretto dire che memoria virtuale = file di paging?
    Soluzione ragionata

    No. La memoria virtuale gestisce indirizzi e protezione; il file di paging è solo uno dei meccanismi che alcuni SO possono utilizzare per supportarla.

  2. Traduzione degli indirizzi. Con pagine da 4096 byte, l’indirizzo virtuale 12.500 appartiene alla pagina virtuale 3, mappata sul frame 7. Determina offset e indirizzo fisico.
    Soluzione ragionata

    12.500 = 3 × 4096 + 212: offset 212. Indirizzo fisico = 7 × 4096 + 212 = 28.884 byte. L’esito presuppone che la pagina sia presente e che i permessi consentano l’accesso.

  3. Blocchi di un file. Un file contiene 6000 byte, con blocchi dati non condivisi da 4096 byte e senza compressione. Quanti blocchi dati occorrono almeno e quale capacità complessiva rappresentano?
    Soluzione ragionata

    Sono necessari almeno 2 blocchi dati: 2 × 4096 = 8192 byte di capacità allocata per i dati. La dimensione logica del file resta 6000 byte; metadati e altre strutture non sono inclusi.

  4. Percorsi. Dalla cartella ProgettoScienze, scrivi il percorso relativo per misure.csv collocato in Dati.
    Soluzione ragionata

    Dati/misure.csv nella notazione dell’esempio. Su alcuni sistemi si usa il separatore inverso \.

  5. Studio di caso. Stai preparando una relazione mentre ascolti audio e stampi un documento. Indica almeno quattro servizi del SO coinvolti.
    Soluzione ragionata

    Scheduling dei thread; assegnazione/protezione della memoria; accesso ai file; gestione audio; servizi e driver di stampa; autorizzazioni dell’utente. Il sistema coordina le attività senza richiedere necessariamente un processore dedicato per ciascuna.

22. Fonti essenziali e approfondimenti

Riferimento curricolare: D.M. 7 ottobre 2010, n. 211 — Indicazioni nazionali, Liceo scientifico, opzione Scienze applicate, Informatica (area SO).

Approfondimento MEGISTONE: I sistemi operativi — lezione storica, per dettagli aggiuntivi sul bootstrap e sull’evoluzione dei sistemi; va letto distinguendo le procedure dei PC storici da quelle attuali.

Collegamento con il percorso: nell’Articolo 04 studieremo documenti digitali e foglio elettronico scientifico, cioè strumenti applicativi che sfruttano i servizi del sistema operativo descritti in questa unità.

Articoli simili