A4 Il sistema operativo Privo del software del sistema operativo l’hardware del computer sarebbe inutilizzabile. Diversi tipi di sistema operativo Schermata della fase di avvio di Windows. I più comuni sistemi operativi, come Windows e Linux, sono utilizzati per i computer personali. Ma i computer che necessitano di un sistema operativo sono anche di altro tipo, per esempio: • i server (come i computer che ospitano i dati aziendali, oppure i servizi Internet); • i dispositivi mobili (telefoni cellulari, navigatori satellitari ecc.); • i dispositivi embedded (computer incorporati in altri dispositivi, per esempio nel motore o nel sistema di guida di un’automobile). Esistono sistemi operativi specifici e versioni specializzate dei sistemi operativi più comuni per questi particolari ambiti di applicazione. 56 Schermata della fase di avvio di Linux. Nella fase di bootstrap che segue l’accensione il computer si attiva caricando nella memoria principale il codice del sistema operativo memorizzato nella memoria permanente: è solo l’esecuzione del sistema operativo, infatti, che trasforma il computer nello strumento multifunzionale che conosciamo. A4 Il sistema operativo Meini, Formichi TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI © Zanichelli 2012 per Informatica 1 Le funzionalità fondamentali del sistema operativo Le numerose e diverse funzionalità del computer di cui noi utenti usufruiamo sono rese possibili da tre componenti fondamentali: • l’hardware vero e proprio; • il sistema operativo; • le applicazioni software. ESEMPIO La multifunzionalità tipica dei computer attuali è certamente dovuta alla varietà dei programmi applicativi che vi possono essere installati, ma la loro esecuzione – per la quale l’hardware è sicuramente necessario – sarebbe comunque impossibile senza il supporto del sistema operativo. La riproduzione di un filmato reso disponibile da un servizio Internet in modalità streaming è una delle più frequenti azioni che l’utente di un computer esegue. Per quanto la connessione «fisica» con la rete (wired o wireless che sia), il processore, la memoria, la scheda video e il monitor siano elementi essenziali per assolvere questo compito, è il sistema operativo che: • gestisce la comunicazione di rete con il servizio remoto garantendo la ricezione in tempo reale dei dati che costituiscono i frammenti audio e video del filmato; • gestisce e controlla l’esecuzione del programma1 di riproduzione condividendo il processore tra i vari programmi contemporaneamente attivi; • gestisce la memorizzazione temporanea dei dati ricevuti per renderli successivamente disponibili al programma di riproduzione; • gestisce l’invio dei dati generati dal programma di riproduzione alla scheda video in modo trasparente (il programma di riproduzione, infatti, ignora le caratteristiche fisiche e funzionali di questo dispositivo). Il sistema operativo (S.O.) assolve a tre funzioni fondamentali: • realizzare la piattaforma di esecuzione delle applicazioni software; • gestire le risorse hardware del computer (la CPU, le memorie, i dispositivi di input e di output ecc.); • gestire le risorse software del computer (i programmi installati, i dati memorizzati permanentemente ecc.). Che il sistema operativo realizzi la «piattaforma» di esecuzione dei programmi applicativi è reso evidente dal fatto che, anche utilizzando lo stesso computer, i programmi sviluppati per Windows non possono essere installati in ambiente Linux e viceversa2. 1. In questo esempio invece di un programma applicativo vero e proprio potrebbe trattarsi di un plug-in del browser utilizzato per la navigazione della rete. OSSERVAZIONE Dal punto di vista dell’utente la funzione principale del sistema operativo è però ancora un’altra: fornire l’interfaccia per l’uso del computer (FIGURE 1-4). 1 2. Un’eccezione è rappresentata dai programmi realizzati con linguaggi che utilizzano una «macchina virtuale» per l’esecuzione, come per esempio Java. Le funzionalità fondamentali del sistema operativo Meini, Formichi TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI © Zanichelli 2012 per Informatica 57 FIGURA 1 Interfaccia utente di Microsoft Windows. FIGURA 3 Interfaccia utente di tipo KDE per Ubuntu Linux. FIGURA 2 Interfaccia utente di Mac-OS. FIGURA 4 Interfaccia utente di tipo Gnome per Ubuntu Linux. In realtà questo aspetto è una caratteristica solo di alcuni sistemi operativi – come le varie versioni di Windows e di Mac-OS – perché in molti altri casi – per esempio nelle diverse distribuzioni Linux – l’interfaccia utente (spesso denominata GUI, Graphics User Interface) è realizzata da uno specifico programma separato dal sistema operativo vero e proprio ed è di conseguenza intercambiabile. In definitiva il sistema operativo può essere sinteticamente definito come il gestore delle risorse (sia hardware sia software) del computer. 2 L’architettura modulare e gerarchica dei sistemi operativi Per semplificarne la progettazione e lo sviluppo un sistema operativo è di solito organizzato internamente in moduli corrispondenti alle diverse risorse che esso deve gestire: 58 A4 Il sistema operativo Meini, Formichi TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI © Zanichelli 2012 per Informatica • il gestore del processore e dei programmi in esecuzione; • il gestore della memoria per il codice e per i dati dei programmi in esecuzione; • il gestore dei file memorizzati su disco o su altri supporti; • i gestori dei dispositivi di input e di output; • il gestore della comunicazione di rete. OSSERVAZIONE L’interfaccia grafica di interazione con l’utente non è, dal punto di vista tecnico, un componente fondamentale di un sistema operativo e, con le notevoli eccezioni di Windows e Mac-OS, ne costituisce spesso un modulo esterno indipendente e intercambiabile. Dal punto di vista dell’utente del computer il sistema operativo (S.O.) costituisce un’estensione dell’hardware (HW) che incapsula consentendo l’esecuzione dei programmi applicativi con cui interagisce (FIGURA 5). Interfaccia utente a riga di comando Anche i S.O. moderni che presentano all’utente interfacce grafiche (GUI) sofisticate, mantengono la possibilità di interagire con il sistema mediante la digitazione di comandi che forniscono risposte in formato esclusivamente testuale. Questa forma di interazione con il S.O. – l’unica disponibile fino all’avvento delle GUI negli anni ’80 e ’90 del secolo scorso – è infatti ancora utile in molte situazioni. UTENTE APPLICAZIONI S.O. Gestione della sicurezza HW La gestione della sicurezza è ormai considerata una funzionalità indispensabile dei moderni sistemi operativi. Un sistema operativo deve autenticare gli utenti (gli umani o le applicazioni software) con cui interagisce al fine di non consentire loro operazioni non autorizzate che potrebbero coinvolgere il corretto funzionamento del computer, o i dati di altri utenti del sistema. L’autenticazione degli utenti avviene tradizionalmente mediante una password segreta, ma è ormai diffusa la pratica di utilizzare per gli utenti umani dati biometrici (per esempio le impronte digitali), o un supporto fisico (come una smart-card ) abilitato mediante un PIN (Personal Identification Number ). Le autorizzazioni delle applicazioni software che intendono accedere alle risorse di un computer sono invece verificate mediante tecniche crittografiche. FIGURA 5 In quest’ottica l’interfaccia grafica di interazione con l’utente è considerata come un’applicazione e non come un componente del sistema operativo. Pur essendo un elemento software, la particolarità del sistema operativo di costituire un’estensione dell’hardware del computer lo rende un programma con privilegi speciali: il processore esegue il codice del sistema operativo in una modalità protetta, distinta dalla modalità utente in cui sono eseguiti i normali programmi applicativi; il kernel o nucleo di un sistema operativo è costituito dai moduli eseguiti in modalità protetta. I sistemi operativi per i quali tutti i moduli sono eseguiti in modalità protetta, come un unico programma, sono definiti monolitici. Invece i sistemi operativi in cui tutti i moduli, esclusi i gestori del processore e della memoria, vengono eseguiti in modalità utente sono denominati micro-kernel. La maggior parte dei sistemi operativi più diffusi sono monolitici, o ibridi; in quest’ultimo caso solo alcuni moduli sono eseguiti in modalità utente come programmi esterni. OSSERVAZIONE 2 L’architettura modulare e gerarchica dei sistemi operativi Meini, Formichi TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI © Zanichelli 2012 per Informatica 59 Macchine virtuali Le elevate prestazioni dell’hardware dei computer attuali ha consentito la diffusione di applicazioni software capaci di emulare l’hardware di un computer: questi programmi sono noti come «macchine virtuali» ed è possibile installarvi sistemi operativi diversi da quello della piattaforma di esecuzione, ottenendo di fatto una nuova piattaforma di esecuzione distinta da quella originale. Per esempio è possibile avere un sistema Linux ospitato in una macchina virtuale eseguita in un sistema Windows, o viceversa. Una tecnologia simile è utilizzata dai compilatori di alcuni linguaggi di programmazione, come Java, per rendere i programmi potenzialmente eseguibili su qualsiasi piattaforma hardware e software. API Livello 2 0 Gestori del processore e della memoria 1 1 Gestori dei dispositivi di input/output e della comunicazione di rete 2 Gestore dei file 0 HARDWARE Modulo/i FIGURA 6 Anche nei sistemi operativi monolitici il kernel ha un’organizzazione interna gerarchica distribuita su più livelli (FIGURA 6). Ma come avviene l’accesso alle risorse hardware e software gestite dal sistema operativo da parte dei programmi applicativi con cui interagisce l’utente del computer? Il sistema operativo espone un’Application Program Interface (API) che tradizionalmente assume la forma di una libreria di funzioni speciali (note come system-call o «chiamate di sistema»). L’invocazione di una system-call da parte di un programma non può consistere in una semplice chiamata di funzione; infatti essa genera una vera e propria interruzione dell’esecuzione del programma e trasferisce al sistema operativo la richiesta dell’operazione desiderata. L’esecuzione del programma riprende solo dopo che il sistema operativo ha completato l’operazione richiesta. ESEMPI OSSERVAZIONE 䊏 Un programma di gioco con funzionalità di interazione on-line con i computer di altri giocatori deve invocare le funzioni dell’API del sistema operativo che utilizza come piattaforma di esecuzione ad esempio per: • comunicare in rete con i programmi degli altri giocatori; • visualizzare sul monitor la scena del gioco utilizzando la scheda video del computer; • recuperare da file memorizzati su disco i filmati e i suoni da riprodurre; • salvare in modo permanente su file il livello e la situazione di gioco all’uscita dal programma. 䊏 L’API delle varie versioni dei sistemi operativi Windows a 32 e 64 bit è nota come WinAPI, mentre molte funzionalità comuni ai vari sistemi Unix ed ereditate dal kernel di Linux sono state standardizzate in una interfaccia di riferimento denominata POSIX. Molti programmatori non conoscono direttamente le funzionalità dell’API dei sistemi operativi che utilizzano come piattaforma di esecuzione del software che sviluppano: le funzionalità e le librerie standard di molti linguaggi di programmazione, infatti, «nascondono» l’interazione del codice con le funzioni esposte dal sistema OSSERVAZIONE 60 A4 Il sistema operativo Meini, Formichi TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI © Zanichelli 2012 per Informatica operativo. Per esempio un programmatore C/C++ visualizzerà una stringa di testo nella console di esecuzione del programma utilizzando la funzione printf o l’oggetto cout: il compilatore che trasforma il codice sorgente C/C++ in codice eseguibile per quella specifica piattaforma hardware e software di esecuzione si occuperà di inserirvi le specifiche invocazioni alle funzioni dell’API del sistema operativo. Lo schema di FIGURA 7 sintetizza l’architettura di un sistema operativo moderno e il contesto hardware e software in cui opera. LINGUAGGIO DI PROGRAMMAZIONE APPLICAZIONI interprete dei comandi e/o GUI compilatore + librerie programmi applicativi SW UTENTE API DEL SISTEMA OPERATIVO S.O. («chiamate» di sistema) gestione processi gestione memoria gestione disco gestione I/O + rete HARDWARE processore memoria disco HW (linguaggio «macchina») I/O + rete In quale linguaggio di programmazione sono scritti i S.O.? Per quanto siano un prodotto molto particolare, i S.O. sono composti da moduli software e come tali sono progettati, implementati e mantenuti da sviluppatori. Data la stretta dipendenza dall’hardware che hanno alcune componenti dei S.O., è inevitabile il ricorso al linguaggio macchina della piattaforma di esecuzione, ma tradizionalmente la maggior parte del codice del kernel di un S.O. è codificata nel linguaggio C che, pur essendo un linguaggio di alto livello, presenta molti costrutti per il controllo dell’efficienza dell’esecuzione del codice e della gestione dei dati. Molti sistemi operativi – Linux è in questo un esempio notevole – devono la loro diffusione su piattaforme diverse alla portabilità garantita da un kernel scritto in ampia misura in linguaggio C. FIGURA 7 3 Windows e Linux Il sistema operativo Windows è un prodotto commercializzato in varie versioni da Microsoft Corporation, un’azienda con sede a Redmond nello stato di Washington. Il primo sistema Windows fu rilasciato nel 1985, ma l’architettura interna oggi condivisa da tutte le versioni del sistema operativo nasce nel 1993 con la serie «NT». Anche se la distribuzione commerciale dei sistemi Windows prevede oggi il supporto esclusivamente per le piattaforme hardware IA-32 (a 32 bit) e IA-64 (a 64 bit) di Intel e AMD, la progettazione interna prevede la portabilità tra architetture hardware diverse, prevedendo esplicitamente un livello HAL (Hardware Abstraction Layer) che separa il codice del kernel dalle specificità dell’hardware. L’architettura interna dei sistemi operativi Windows è basata su un kernel ibrido che non comprende la gestione del sistema dei file; tuttavia questo modulo e la caratteristica GUI sono eseguiti in modalità protetta e di fatto sono componenti essenziali del sistema operativo stesso, le cui funzionalità sono esposte dall’API standard che ha mantenuto nel tempo e nelle varie 3 Unix: il padre dei sistemi operativi Il sistema operativo che ha maggiormente influenzato la progettazione di quelli attuali è senz’altro Unix, realizzato a partire dal 1969 nei laboratori di ricerca «Bell» della AT&T nel New Jersey, principalmente da Ken Thompson e Dennis Ritchie. 씰 Windows e Linux Meini, Formichi TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI © Zanichelli 2012 per Informatica 61 씰 Unix fu il primo sistema operativo «portabile», cioè parzialmente indipendente dall’hardware del computer. Questa caratteristica fondamentale è il risultato del fatto che Unix è stato fin dall’inizio scritto in gran parte in linguaggio C (sviluppato nello stesso periodo e nello stesso laboratorio da Dennis Ritchie e da Brian Kernighan). Alcune versioni di Unix sono distribuite o commercializzate ancora oggi, ma – anche se la lezione di Unix è stata accolta da molti sistemi operativi attuali, compresi Windows e Mac-OS – sono in particolare le numerose distribuzioni del sistema operativo Linux a rappresentare oggi l’eredità di Unix. 3. La gratuità della maggior parte delle distribuzioni di Linux è una conseguenza dell’adozione di una licenza legale del tipo noto come open-source license (in particolare si tratta della licenza denominata GPL, GNU Public License). versioni una elevata coerenza. Nonostante esistano versioni di Windows specializzate per server, dispositivi mobili e dispositivi embedded, questa caratteristica lo ha reso il più diffuso sistema operativo per computer di uso personale. Le numerose distribuzioni del sistema operativo Linux rappresentano l’eredità tecnica dei sistemi Unix: il kernel monolitico espone un’API che discende da quella di Unix e che implementa lo standard POSIX. Linux nasce nel 1992 da un progetto personale di Linus Torvalds, allora studente all’università di Helsinki, dove la prima versione fu presentata nel 1994, ma la sua evoluzione è avvenuta grazie al contributo di migliaia di sviluppatori e di aziende interessate al successo del progetto: questo è stato possibile grazie alla licenza legale adottata da Torvalds stesso che rende obbligatorio il rilascio pubblico del codice sorgente3 del kernel. La libera disponibilità del codice sorgente ha inoltre consentito di «portare» Linux su una moltitudine di diverse architetture hardware; oggi esiste una versione di Linux praticamente per ogni tipo di computer esistente. Il kernel di Linux è completamente indipendente dall’interfaccia utente: molte distribuzioni di tipo server si limitano a installare una interfaccia di comando non grafica, mentre le due GUI più diffuse – Gnome e KDE – sono entrambe basate sul servizio X Window System esterno al kernel. Il campo applicativo in cui i sistemi Linux sono maggiormente diffusi è senz’altro quello dei sistemi server, ma negli ultimi anni sono sempre più numerose le distribuzioni di Linux dedicate ai computer per uso personale. Windows e Linux sono oggi i sistemi operativi più diffusi e utilizzati. In questo testo tutti i concetti introdotti sono illustrati per entrambi gli ambienti – sottolineando convergenze ed eventuali divergenze – e, nella seconda parte, il codice che esemplifica le varie funzionalità esposte dai sistemi operativi è sempre dettagliato con riferimento all’API di entrambe le piattaforme. Sintesi Dal punto di vista dell’utente le componenti fondamentali del computer sono: • gestisce le risorse hardware del computer; • gestisce le risorse software del computer. • l’hardarwe; • il sistema operativo; • i programmi applicativi. Il S.O. può essere definito come il gestore delle risorse hardware e software del computer. Il sistema operativo (S.O.) assolve a tre funzioni fondamentali: • realizza la piattaforma di esecuzione delle applicazioni; 62 A4 L’interfaccia utente grafica di un S.O. è un elemento caratterizzante, ma non fondamentale: in alcuni S.O. è implementata mediante un’applicazione indipendente dal sistema vero e proprio. Il sistema operativo Meini, Formichi TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI © Zanichelli 2012 per Informatica