Il Sistema Operativo
Definizione e Funzione L’insieme dei Programmi di Sistema viene comunemente identificato con il nome di Sistema Operativo (SO). Un sistema operativo è un programma che controlla l’esecuzione di programmi applicativi ed agisce come interfaccia fra le applicazioni e l’hardware del calcolatore. Il sistema operativo fornisce un ambiente per eseguire programmi in modo conveniente ed efficiente, infatti, controlla, distribuisce ed alloca le risorse (in modo equo ed efficiente) e controlla l’esecuzione dei programmi utente e le operazioni sui dispositivi di I/O.
L’accensione del computer Al momento dell’accensione, il computer esegue una serie di operazioni, tra loro ben distinte, che portano al caricamento del Sistema Operativo. La prima fase è rappresentata dal cosiddetto test di accensione o POST (Power On Self Test), durante la quale il computer esegue i primi controlli minimali, volti a verificare che le principali componenti (quali la RAM, la scheda video, la tastiera) siano installate e correttamente funzionanti, e segnalare eventuali guasti rilevati tramite un codice sonoro (beep code). La seconda fase prevede il caricamento dei dati memorizzati nel BIOS (Basic Input Output System), relativi ai componenti installati nel computer. Successivamente, il computer legge le informazioni fondamentali andandole a cercare (nella maggior parte dei casi) prima nel lettore dei dischetti e, se questo non contiene nessun floppy, nel Hard Disk o nel Cd-rom. L’ordine con cui il computer ricerca i file di sistema è detto sequenza di boot.
L’avvio del Sistema Operativo E’ la fase in cui il computer carica il Sistema Operativo, dall’hard disk sulla memoria RAM, e occorre attendere alcuni istanti per poter vedere lo sfondo e iniziare a lavorare. Una volta completato il caricamento del sistema operativo quello che appare è la postazione di lavoro, desktop o scrivania, da cui l’utente svolge tutti i propri compiti. Grazie all’interfaccia grafica (GUI, graphic user interface) abbiamo le icone, che come su una scrivania reale sono oggetti di tutti tipi, con i quali l’utente lavora. Le icone come per esempio: risorse, strumenti (programmi), cartelle e documenti (file dati) utili per il lavoro.
Architettura del Sistema Operativo I Sistemi Operativi sono generalmente costituiti da un insieme di moduli, ciascuno dedicato a svolgere una determinata funzione; I vari moduli del Sistemi Operativi interagiscono tra di loro secondo regole precise al fine di realizzare le funzionalità di base dalla macchina. L’insieme dei moduli per la gestione della CPU e della memoria centrale è il kernel.
Attività svolte dal Sistema Operativo Gestione dei processi; Gestione della memoria principale; Gestione della memoria secondaria; Gestione del file system; Gestione dei dispositivi di I/O; Gestione dell’interfaccia utente; Protezione e sicurezza
La gestione dei processi Un processo è un programma in esecuzione che utilizza le risorse fornite dal sistema di elaborazione per assolvere ai propri compiti. La terminazione di un processo prevede il recupero di tutte le risorse riutilizzabili ad esso precedentemente allocate. Il gestore dei processi è il modulo che si occupa di controllare la sincronizzazione, interruzione e riattivazione dei programmi in esecuzione cui viene assegnato un processore; La gestione dei processi viene compiuta in vari modi, in funzione del tipo di utilizzo cui il sistema è rivolto. Il programma che si occupa della distribuzione del tempo di CPU tra i vari processi attivi, decidendone l’avvicendamento, è comunemente chiamato Scheduler. Nel caso di elaboratori multi-processore si occupa anche di gestire la cooperazione tra le varie CPU presenti nel sistema.
Ciclo di vita dei processi e Politiche di Scheduling new top nella coda di scheduling running ready Le politiche di scheduling sono raggruppabili in due grandi categorie: Preemptive: l’uso della CPU da parte di un processo può essere interrotto in un qualsiasi momento, e la risorsa concessa ad altro processo. Non preemptive: una volta che un processo ha ottenuto l’uso della CPU, è unico proprietario della risorsa finché non ne decide il rilascio. tempo scaduto evento attesa evento (es. I/O) terminated wait
Sistemi mono–tasking C B A t T I SO che gestiscono l’esecuzione di un solo programma per volta (un solo processo) sono detti mono–tasking. Non è possibile sospendere un processo per assegnare la CPU ad un altro. Sono storicamente i primi SO (es. MS–DOS). C Tempo di utilizzo della CPU. Tempo di attesa di eventi esterni. B A t T
Sistemi multi–tasking I SO che permettono l’esecuzione contemporanea di più programmi sono detti multi–tasking o multi–programmati. Un programma può essere interrotto e la CPU passata a un altro programma. Tempo di utilizzo della CPU. Tempo di attesa di eventi esterni. C B A t Tmulti-tasking Tmono-tasking
Sistemi time–sharing C B A D 0.00” 0.75” 0.25” 0.50” Un’evoluzione dei sistemi multi-tasking sono i sistemi time-sharing. Ogni programma in esecuzione viene eseguito ciclicamente per piccoli quanti di tempo. Se la velocità del processore è sufficientemente elevata si ha l’impressione di un’evoluzione parallela dei processi. C B A D 0.00” 0.25” 0.75” 0.50” Ipotesi: 1 MIPS, 4 processi, 0.25 s/utente Conseguenze: 0.25 MIPS/utente TELA = 4 ´ TCPU
Time–sharing: diagramma temporale Processo Tempo di CPU A 3 B 2 C 4 D C B A t
La gestione della memoria principale L’organizzazione e la gestione della memoria centrale è uno degli aspetti più critici nel Sistema Operativo. Il gestore della memoria è quel modulo incaricato di assegnare la memoria ai task (per eseguire un task è necessario che il suo codice sia caricato in memoria). La complessità del gestore della memoria dipende dal tipo di Sistema Operativo, nei multi–tasking, più programmi possono essere caricati contemporaneamente in memoria. Un programma per essere eseguito deve risiedere all'interno della memoria principale e lo stesso discorso vale per i dati su cui esso opera. La memoria principale è un deposito di dati facilmente accessibile e condiviso tra la CPU ed i dispositivi di I/O, è come un array di byte, indirizzabili singolarmente. Il Sistema Operativo è responsabile delle seguenti attività riguardanti la gestione della memoria principale: Tenere traccia di quali parti della memoria sono usate e da chi. Decidere quali processi caricare quando diventa disponibile spazio in memoria. Allocare lo spazio di memoria in maniera ottimale.
Allocazione lineare Memoria (Fig. 1) Memoria (Fig. 2) 0000x 0000x Programma A Programma A Nell’allocazione lineare, i programmi vengono caricati in memoria principale, e occupano uno spazio variabile in base alla propria dimensione (Fig. 1). Il problema di frammentazione, nasce quando come nella Fig. 2, il programma B è terminato e viene caricato un nuovo programma D. Infatti se il programma occupa meno spazio, vi è il problema di uno spazio vuoto che non verrà utilizzato, nel caso di un programma più grande invece il Sistema Operativo gli troverà una allocazione diversa, o aspettare che vi sia spazio sufficiente. Programma B Programma D Programma C Programma C PROBLEMA !!!! FRAMMENTAZIONE
La Paginazione Memoria (Fig. 1) Memoria (Fig. 2) 0000x 0000x Programma A Programma A Nella Paginazione, i programmi vengono caricati in memoria principale a blocchi, ovvero ogni programma viene spezzettato in blocchi di dimensioni uguali. Questo fa si che ogni programma occupa uno spazio variabile in base alla propria dimensione, però è suddiviso in blocchi. (Fig. 1). In questo caso quando come nella Fig. 2, il programma B è terminato e vengono caricati i nuovi programma E ed F, il Sistema Operativo li alloca negli spazi rimasti liberi, anche se non contigui, ottimizzando lo spazio di memoria. Programma B Programma E Programma F Programma D Programma D Programma F
La memoria virtuale Spesso la memoria non è sufficiente per contenere completamente tutto il codice dei processi, allora il sistema Operativo, può simulare una memoria più grande tenendo nella memoria di sistema (RAM) solo le parti di codice e dati che servono in quel momento. Si usa il concetto di memoria virtuale, ovvero i dati e le parti di codice relativi a programmi non in esecuzione possono essere tolti dalla memoria centrale e parcheggiati su disco nella cosiddetta area di swap; Il rapporto tra le dimensioni dell’area di swap e della RAM è di 3 : 1 (max). I processori moderni sono dotati di meccanismi hardware per facilitare la gestione della memoria virtuale.
La memoria virtuale Memoria (Fig. 1) Memoria (Fig. 2) 0000x 0000x Programma A - 1 Programma A - 2 Swap Swap Programma B - 1 Programma B - 1 Programma A - 2 Programma A - 1 Programma D Programma D Programma A - 3 Programma A - 3 Programma B - 2 Programma B - 2 In questo modo nella memoria principale, vi è caricato solo una parte dei programmi (Fig. 1), mentre le altre parti sono appoggiate nello swap. Nel momento che serve un altro blocco di un determinato programma il Sistema Operativo, provvede allo scambio dei blocchi (Fig. 2).
La gestione della memoria secondaria Poiché la memoria principale è volatile e troppo piccola per contenere tutti i dati e tutti i programmi in modo permanente, un computer è dotato di memoria secondaria. In generale, la memoria secondaria è data da hard disk e dischi ottici. Il Sistema Operativo garantisce una visione logica uniforme del processo di memorizzazione: Astrae dalle caratteristiche fisiche dei dispositivi per definire un’unità di memorizzazione logica il file. Ciascuna periferica viene controllata dal relativo device driver, che nasconde all’utente le caratteristiche fisiche variabili dell’hardware: modalità e velocità di accesso, capacità, velocità di trasferimento. Il Sistema Operativo è responsabile delle seguenti attività riguardanti la gestione della memoria secondaria: Allocazione dello spazio. Gestione dello spazio libero. Ordinamento efficiente delle richieste (disk scheduling).
La gestione del file system Un file system è composto da un insieme di file, il Sistema Operativo è responsabile delle seguenti attività riguardanti la gestione del file system: Creazione e cancellazione di file. Creazione e cancellazione di directory. Manipolazione di file e directory. Codifica del file system sulla memoria secondaria. Il gestore del file system è quel modulo del Sistema Operativo incaricato di gestire le informazioni memorizzate sui dispositivi di memoria di massa, e deve garantire la correttezza e la coerenza delle informazioni; Nei sistemi multi–utente, fornisce meccanismi di protezione per consentire agli utenti di proteggere i propri dati dall’accesso di altri utenti non autorizzati. Le funzioni tipiche che deve svolgere sono: Fornire un meccanismo per l’identificazione dei Files; Fornire opportuni metodi per accedere ai dati; Rendere trasparente la struttura fisica del supporto di memorizzazione; Implementare meccanismi di protezione dei dati.
La gestione del file system Directory Grafo delle Directory Quasi tutti i sistemi operativi utilizzano un’organizzazione gerarchica del File System; L’elemento utilizzato per raggruppare più file insieme è la directory; L’insieme gerarchico delle directory e dei file può essere rappresentato attraverso un grafo delle directory. File
La gestione dei dispositivi di I/O Il gestore dei dispositivi di I/O è il modulo del Sistema Operativo incaricato di assegnare i dispositivi ai task che ne fanno richiesta e di controllare i dispositivi stessi. Da esso dipende la qualità e il tipo di periferiche riconosciute dal sistema. Il gestore delle periferiche offre all’utente una versione astratta delle periferiche hardware; l’utente ha a disposizione un insieme di procedure standard di alto livello per leggere/scrivere da/su una periferica che percepisce come dedicata. La gestione dell’I/O richiede: Un’interfaccia comune per la gestione dei device driver. Un insieme di driver per dispositivi hardware specifici. Un sistema di gestione di buffer per il caching delle informazioni.
La gestione dei dispositivi di I/O Il controllo dei dispositivi di I/O avviene attraverso speciali programmi detti Device Driver. I device driver sono spesso realizzati dai produttori dei dispositivi stessi che ne conoscono le caratteristiche fisiche in maniera approfondita. Questi programmi implementano normalmente le seguenti funzioni: Rendono trasparenti le caratteristiche fisiche tipiche di ogni dispositivo. Gestiscono la comunicazione dei segnali verso i dispositivi. Gestiscono i conflitti, nel caso in cui due o più task vogliono accedere contemporaneamente allo stesso dispositivo.
Gestione dell’ interfaccia utente Tutti i Sistemi Operativi implementano dei meccanismi per rendere agevole l’utilizzo del sistema da parte degli utente. L’insieme di questi meccanismi di accesso al computer prende il nome di Interfaccia Utente. Interfaccia testuale: Interprete dei comandi (shell). Esempio MS-DOS/UNIX Interfaccia grafica (GUI - Graphical User Interface), metafora della scrivania (desktop): L’output dei vari programmi viene visualizzato in maniera grafica all’interno di finestre. Interazione semplice via mouse, i tasti posizionato su oggetti differenti, provocano diversi tipi di azione, le icone rappresentano file, directory, programmi, azioni, etc. L’utilizzo di disegni rende più intuitivo l’uso del calcolatore. Esempio Windows/Mac OS/Linux
Protezione e sicurezza Protezione è il meccanismo usato per controllare l’accesso da parte di processi o utenti a risorse del sistema di calcolo. Il sistema distingue gli utenti, per determinare chi può fare cosa: L’identità utente (user ID) include nome dell’utente e numero associato, uno per ciascun utente. L’user ID garantisce l’associazione corretta di file e processi all’utente e ne regola la manipolazione. L’identificativo di gruppo permette inoltre ad un insieme di utenti di accedere correttamente ad un gruppo di risorse comuni (file e processi). Sicurezza è il meccanismo di difesa implementato dal sistema per proteggersi da attacchi interni ed esterni: Denial of service, worm, virus, hacker.