Prefazione ... ... ... Obiettivo L’obiettivo principale di un corso introduttivo sui sistemi operativi è spiegarne i concetti e le tecniche fondamentali. Il raggiungimento di questo obiettivo è complicato dallo scenario attuale, in cui gli studenti acquisiscono numerose, e talvolta non corrette, informazioni da Internet, senza essere in grado di organizzarle in modo strutturato. Risulta pertanto necessario fornire loro i concetti basati sulle informazioni che hanno già acquisito senza rendere la presentazione troppo accademica e, contestualmente, presentare gli stessi in maniera chiara a coloro che si avvicinano per la prima volta allo studio dei sistemi operativi. L’intento di questo libro è quello di soddisfare entrambe queste esigenze. L’approccio scelto è quello di spiegare in modo rigoroso i concetti alla base di un sistema operativo, presentato come un intermediario tra elaboratore e utenti in grado di offrire un buon servizio a questi ultimi utilizzando in modo efficiente le risorse del primo. Le interazioni SO-elaboratore da un lato e SO-utenti dall’altro sono descritte con un crescendo di dettagli pratici, mettendo in risalto quelle caratteristiche chiave dell’architettura degli elaboratori essenziali per lo studio dei sistemi operativi. In questa chiave il testo si caratterizza per un’impostazione didattica formale ma al contempo ricca di esempi ed esercizi svolti, con richiami e suggerimenti orientati all’efficienza e alla professionalità, perseguendo in tal modo l’obiettivo dichiarato di iniziare il lettore ai principi base e avanzati dei sistemi operativi e non alla sola conoscenza dei sistemi Linux, Windows, Vista e Solaris. Il testo analizza in modo comparativo le organizzazioni, la funzionalità, i meccanismi, le politiche e la gestione dei sistemi operativi per le varie architetture dei sistemi di elaborazione, sia monoprocessore sia multiprocessore, e solo successivamente quella orientata ai sistemi distribuiti, approfondendo sempre gli aspetti di progettazione, di configurazione, di ottimizzazione e di manutenzione dei sistemi operativi moderni. Gli aspetti caratteristici di questo approccio sono: i concetti fondamentali sono presentati in termini semplici; vengono immediatamente stabilite le relazioni tra concetti e tecniche; numerosi esempi illustrano concetti e tecniche; i dettagli implementativi e casi di studio sono distribuiti in tutto il testo. L’edizione italiana è stata arricchita con ulteriori esempi e problemi con l’obiettivo di illustrare aspetti più approfonditi dei concetti e delle tecniche presentate, con un forte legame con le esigenze dei corsi istituzionali di Informatica e di Ingegneria informatica degli atenei italiani. XX Prefazione Organizzazione del libro Il testo è composto di cinque parti, ciascuna delle quali è caratterizzata dai seguenti obiettivi. Parte 1 – Panoramica Questa parte è composta da quattro capitoli. Il Capitolo 1 spiega come la convenienza per l’utente, l’uso efficiente delle risorse, la sicurezza e la protezione siano gli elementi fondamentali di un sistema operativo e descrive i passi necessari per implementarli. Include anche una sintesi degli argomenti trattati nel libro. Il Capitolo 2 spiega come un sistema operativo usa le funzionalità dell’hardware di un elaboratore per organizzare l’esecuzione dei programmi degli utenti e gestire le loro richieste. Il Capitolo 3 descrive le varie classi di sistemi operativi, illustra i concetti e le tecniche fondamentali di ciascuna classe ed elenca le tecniche che sono adottate in quelli moderni. Il Capitolo 4 descrive le metodologie di progettazione che consentono a un sistema operativo di adattarsi alle differenti architetture dei calcolatori e ai vari ambienti di elaborazione in cui viene adottato. Parte 2 – Gestione dei processi La Parte 2 discute di come possano convivere più processi e thread in un calcolatore, fornendo dettagli su come il sistema operativo esegue i processi in modo da fornire un buon servizio agli utenti, sfruttando con efficienza le risorse disponibili. Il Capitolo 5 descrive come vengono creati i processi e i thread, le loro interazioni per raggiungere un particolare obiettivo e come sono controllati dal sistema operativo. I restanti cinque capitoli trattano argomenti specifici della gestione dei processi, quali la sincronizzazione e lo scheduling dei processi, il deadlock, la comunicazione tra processi, la sincronizzazione e lo scheduling nei sistemi operativi multiprocessore. Parte 3 – Gestione della memoria I due capitoli di questa parte sono dedicati all’allocazione e alla condivisione della memoria tra i processi. Il Capitolo 11 tratta i concetti fondamentali della gestione della memoria, dando enfasi al problema della frammentazione della memoria, che si verifica quando un’area della memoria è inutilizzabile perché è troppo piccola, e le tecniche per evitarla. Il Capitolo 12 descrive l’implementazione della memoria virtuale, che risolve il problema della frammentazione della memoria e supporta anche l’esecuzione di programmi complessi. Parte 4 – File system e gestione dell’I/O Questa parte è composta da tre capitoli. Il Capitolo 13 illustra le tecniche per creare, accedere, condividere e memorizzare in maniera affidabile i file. Il Capitolo 14 descrive i dispositivi di I/O e spiega come vengono implementate in maniera efficiente le operazioni sui file. Il Capitolo 15 tratta le tecniche di sicurezza e protezione che permettono di impedire accessi non autorizzati ai file. Parte 5 – Sistemi operativi distribuiti Un sistema operativo distribuito differisce da uno convenzionale poiché le risorse, i processi e le operazioni di controllo del sistema operativo sono presenti nei vari elaboratori che formano un sistema distribuito. Questa differenza genera una serie di problemi che riguardano le prestazioni, l’affidabilità e la sicurezza delle elaborazioni e dello stesso sistema operativo. Questi argomenti sono trattati nei cinque capitoli che compongono quest’ultima parte del libro. A conclusione della prefazione un ringraziamento particolare va attribuito a Graziano Pravadelli che ha curato la traduzione della quinta parte del volume. Sono felice di poter inoltre ringraziare Alessio Ferone che con il suo estremo impegno ed entusiasmo ha contribuito notevolmente alla realizzazione della versione attuale del volume; a esso si aggiungono Alessia Albanese e Alessandro Perfetto per la loro attenta opera di revisione. Alfredo Petrosino Università degli Studi di Napoli ‘‘Parthenope’’ Dipartimento di Scienze Applicate