Sistemi Operativi Che cosa è un sistema operativo? Un programma che agisce da intermediario fra l’utente e la struttura fisica del calcolatore: gestisce gli elementi fisici di un calcolatore e fornisce all’utente un’interfaccia per poter utilizzare le risorse del sistema di calcolo in modo semplice, efficiente e sicuro Scopi del sistema operativo: Eseguire i programmi utenti e facilitare la soluzione dei problemi degli utenti. Rende il sistema di calcolo un ambiente in cui si può lavorare in modo conveniente e corretto. Utilizzo del calcolatore in maniera efficiente. Le componenti di un sistema di calcolo • Hardware o dispositivi fisici – forniscono le risorse di calcolo fondamentali (CPU o unità centrale di elaborazione, memoria e dispositivi di input/output). • Programmi d’applicazione e di sistema – definiscono il modo in cui si usano queste risorse per risolvere i problemi computazionali degli utenti (compilatori, fogli di calcolo, elaboratori di testo e browsers). • Utenti (le persone, le macchine e altri computers). • Sistema operativo – E’ uno speciale programma di sistema che controlla e coordina l’uso dei dispositivi fisici da parte dei programmi d’applicazione per gli utenti. La Sicurezza La distinzione tra il concetto di Sicurezza e quello di Protezione è lieve, normalmente si definisce Sicurezza la capacità di un SO di: proteggere i propri dati da perdite accidentali dovute a errori umani o malfunzionamenti hardware; proteggere i propri dati da accessi (attacchi) di intrusi che accedono illegalmente al sistema di calcolo. la prima tipologia di problemi viene normalmente affrontata con diverse strategie di backup dei dati: gli attacchi hanno invece portato allo sviluppo di svariate tecnologie di difesa per rispondere alle molteplici tipologie di attacchi: Virus, Cavalli di Troia, Internet Worm, Cracking di password etc. La Protezione La multiprogrammazione e la multiutenza impongono che le risorse utilizzate dai processi e lo stesso SO siano protetti da: interazioni non desiderate, attacchi tentativi di accaparramento. Ogni SO utilizza un certo modello di protezione che può utilizzare meccanismi diversi come ad esempio: dual mode del processore (user/superuser); controllo dei diritti di accesso dei processi ai files; accesso in memoria con l’utilizzo di indirizzi logici e non fisici; operazioni di I/O con chiamate di sistema; gestione a quanti di tempo: evita l’accaparramento della CPU da parte di un solo processo; Definizioni di un sistema operativo Gestore di risorse – gestisce ed alloca le risorse. Programma di controllo – gestisce l’esecuzione dei programmi utenti e le operazioni dei dispositivi di I/O in modo da impedire che si verifichino errori. Nucleo o Kernel – il solo programma che è sempre attivato nel calcolatore (tutti gli altri sono programmi applicativi). Quali sono le parti di un SO ? Applicazioni Gestore del processore Interprete di comandi (shell) Gestore della memoria Gestore delle periferiche Hw Interfaccia grafica (desktop) File system Storia dei sistemi operativi Prima generazione 1945 - 1955 valvole, circuiti stampati Seconda generazione 1955 - 1965 transistors, sistemi operativi di tipo batch Terza generazione 1965 – 1980 Circuiti integrati e sistemi operativi multiprogrammati e time-sharing Quarta generazione 1980 – oggi personal computers, reti, sistemi distribuiti Sistemi batch (2a generazione) Primi sistemi a lotti le schede magnetiche relative ad un insieme di programmi vengono lette da un computer specializzato 1401 e trasferite su nastro il nastro viene messo nella macchina 7094 che esegue la computazione e produce un nastro di risultati la macchina 1401 stampa il nastro dei risultati Sistemi batch Pacco di schede per un sistema batch: struttura di un tipico job Sistemi batch Si riduce il tempo di preparazione della macchina raggruppando a lotti i lavori con requisiti simili ed eseguendoli come un unico gruppo. Sequenzializzazione automatica dei lavori d’elaborazione – si trasferisce automaticamente il controllo da un lavoro all’altro. Primi rudimentali sistemi operativi. disco schede Spooling CPU Sistemi batch multiprogrammati (3a generazione) Il sistema operativo tiene contemporaneamente nella memoria centrale diversi lavori (jobs) e la CPU passa dall’uno all’altro (CPU scheduling) durante le operazioni di I/O senza rimanere mai inattiva. Multiprogrammazione Obiettivo: aumentare l'utilizzo della CPU organizzando i job in modo tale da mantenere la CPU in continua attività Il sistema operativo: mantiene contemporaneamente in memoria centrale un insieme di job (un sottoinsieme di quelli memorizzati su disco) ne sceglie uno e lo esegue fino a che questo non ha bisogno di attendere il verificarsi di un qualche evento (per esempio, il montaggio di un nastro o il completamento di un'operazione di I/O) a questo punto passa ad eseguire un altro job quando un job sospeso ha terminato la sua attesa, viene reinserito nell'insieme dei job da eseguire Caratteristiche principali di un sistema multiprogrammato Il SO passa continuamente dall'esecuzione di un job all'altro effettuando: uno scheduling dei job da caricare in memoria centrale una gestione della memoria tra i vari job uno scheduling della CPU per scegliere il job da eseguire Un esempio notevole di questa classe è stato l’IBM OS/360. Scheduling dei job Memoria Centrale Sistema Operativo Scheduling del processore Job 1 DISCO Job 2 CPU Job 3 Nei sistemi multiprogrammati diventano critiche due funzioni del SO: la gestione della memoria per ottimizzarne l’utilizzo viste le dimensioni generalmente limitate (prima l’unico problema era che il programma “entrasse” in memoria); la protezione reciproca dei processi utente da eventuali interazioni non desiderate (nei sistemi monoprogrammati esisteva solo il problema della protezione del sistema dai processi utente); Sistemi Time-Sharing Estensione logica della multiprogrammazione sviluppata per garantire un uso interattivo del sistema di calcolo ad un costo ragionevole L’esecuzione del processore viene suddivisa in un certo numero di quanti temporali. Allo scadere di un quanto, il processo corrente viene interrotto e l’esecuzione passa ad un altro processo. Vantaggi Il processore non viene lasciato inattivo durante operazioni I/O molto lunghe. Il sistema dà l’impressione di eseguire più processi contemporaneamente. Il sistema di calcolo interattivo permette la comunicazione diretta tra utente e sistema: l’utente impartisce le istruzioni direttamente al sistema operativo oppure ad un programma, attraverso la tastiera o il mouse. Caratteristiche necessarie per un sistema Time-Sharing Gestione della memoria Memoria virtuale File system CPU Scheduling Sincronizzazione dei processi Deadlock Primi sistemi operativi Time-Sharing CTSS (Compatible Time Sharing System - 1962) MULTICS (MULTIplexed Information and Computing Service - 1965) UNIX (1969) Personal Computer (4a generazione) Personal computers – calcolatori orientati verso un singolo utente. Dispositivi I/O – tastiere, mouse, schermi video, stampanti. Comodità e prontezza d’uso per l’utente (invece che mirare al massimo utilizzo della CPU). Possono utilizzare tecnologie sviluppate originariamente per sistemi di grandi dimensioni Possono eseguire tipologie differenti di sistemi operativi (per esempio, Windows, MacOS, UNIX, Linux) Personal Computer MS-DOS (MicroSoft Disk Operating System -1980) Windows (1985) Windows 95, Windows 98, Windows Me Windows NT, Windows 2000, Windows XP, MacOS UNIX Minix (1987) Linux (1994) Sistemi distribuiti Lo scopo è distribuire la computazione tra parecchi processori fisici o mettere in comunicazione calcolatori fisicamente distribuiti per cooperare nella soluzione dei problemi di calcolo e per fornire agli utenti un ricco insieme di funzioni. Vantaggi dei sistemi distribuiti: condivisione di risorse e del carico della computazione affidabilità Sistemi distribuiti e reti di calcolatori Si basano sulle reti per realizzare le proprie funzioni. Le reti si classificano secondo le distanze tra i loro nodi Local Area Networks (LAN) Wide Area Networks (WAN) Possono essere sistemi client-server o peer-to-peer. Struttura di una LAN (Local Area Network) Struttura di una WAN (Wide Area Network) Struttura generale di un sistema client-server Architettura Client-Server e Peer2Peer Sistemi per Multiprocessori I sistemi paralleli sono utilizzati per incrementare: banda di elaborazione, velocità e affidabilità. I sistemi paralleli più diffusi sono i multiprocessori simmetrici (SMP) dove un pool di processori identici condividono la memoria centrale e l’I/O. Piattaforme commerciali SMP includono: workstation con processori Pentium IV o Pentium Xeon come Netfinity di IBM; server come il Sun Starfire che supporta sino a 64 processori SPARC. Su questi sistemi “girano” sistemi operativi come Windows NT-2000,XP, Solaris o Linux che supportano il multiprocessing. Funzioni tipiche di un Sistema Operativo Le Funzioni tipiche di un SO In tutte le classi di SO riusciamo ad individuare (almeno) i seguenti sottosistemi che insieme realizzano la macchina astratta del SO: Gestione dei processi e schedulazione del processore Gestione della memoria Gestione del Filesystem Gestione dei dispositivi di I/O Sicurezza Protezione delle risorse La Gestione dei Processi In un sistema multiprogrammato ogni programma deve ottenere una sorta di “macchina virtuale” allocando ogni volta che va in esecuzione le risorse di cui ha bisogno. L’entità che alloca le risorse necessarie è detta PROCESSO. Un processo può quindi essere pensato come un programma in esecuzione La differenza tra un programma e un processo è che il primo è un’entità passiva ovvero la codifica di un algoritmo, mentre il secondo è un’entità attiva ovvero l’insieme di risorse utilizzate da un programma durante la sua esecuzione. In un sistema di calcolo sono in esecuzione sia i processi di sistema che realizzano le funzioni del SO, che i processi utenti che eseguono i programmi lanciati dagli utenti. La Gestione dei Processi (2) Se i processi sono le entità che rappresentano i programmi in esecuzione concorrente, il SO deve mettere a disposizione funzionalità per: La creazione e distruzione di processi; La sospensione e ripristino dell’esecuzione; La sincronizzazione per l’accesso alle risorse; La comunicazione; Il modello concorrente è caratterizzato da un diagramma degli stati che descrive le possibili transizioni di stato consentite ai processi del sistema. Diagramma degli stati attivazione New uscita terminated interrupt Ready verificarsi di un evento o completamento di un I/O Running dispatch Waiting attesa evento (es. I/O) La Gestione della Memoria Al momento dell’esecuzione ogni programma deve risiedere, almeno in parte, nella memoria centrale. La multiprogrammazione e il TS provocano frequenti alternanze tra i processi in esecuzione quindi il SO deve gestire efficientemente le seguenti funzioni: tenere traccia dell’occupazione della memoria; scegliere di volta in volta quale processo caricare minimizzando il numero di movimenti (scheduling a medio termine); allocare e deallocare dinamicamente spazi di memoria aumentando il numero di processi che possono risiedere in memoria contemporaneamente. La Gestione dei File Il SO fornisce all’utente modalità standard per accedere ai dati che necessitano di essere archiviati permanentemente. Tali modalità utilizzano in genere due astrazioni: File (archivio): un file è un tipo di dato astratto sul quale sono definite alcune operazioni indipendenti dal tipo di supporto sul quale il file è memorizzato (disco, nastro, floppy etc). Le operazioni tipiche sono la creazione, l’eliminazione, la lettura/scrittura, la rinominazione etc. Directory (cartella): una collezione (contenitore) di file sulla quale sono possibili operazioni complessive come spostamento, rinominazione, eliminazione etc. Le directory vengono usate per organizzare i file. La Gestione dell’I/O Il gestore dell’I/O ha la finalità di nascondere all’utente e alle altre componenti del sistema le caratteristiche dei dispositivi di I/O. Il sottosistema di I/O comprende essenzialmente tre elementi: gestione della memoria per le operazioni di caching, buffering e spooling che ottimizzano gli scambi di informazione tra la memoria centrale e i dispositivi. un’interfaccia generica per utilizzare i drivers dei dispositivi in modo uniforme da parte del programmatore. un insieme di drivers associati ai dispositivi del sistema nei quali rimane confinata la parte di sistema dipendente dall’hardware. La Gestione della Memoria Secondaria Le tecniche di multiprogrammazione e TS richiedono che la memoria principale sia utilizzata in modo intenso, trasferendo continuamente dati e programmi da e verso la memoria secondaria (tipicamente su disco). Il SO deve ottimizzare tali spostamenti fornendo le seguenti funzionalità: tenere traccia dell’occupazione dello spazio disco per poter utilizzare efficientemente le eventuali aree libere; funzioni di allocazione di spazio su disco e gestione delle situazioni speciali come l’area di swap; scheduling del disco rispetto alle richieste provenienti dai processi utente e sistema (in un sistema multiprogrammato la coda di attività su disco può avere una certa lunghezza); Il nucleo del SO Le funzioni del SO che riguardano: la gestione dei processi, la loro cooperazione (sincronizzazione e comunicazione) la gestione del processore sono dette Nucleo (Kernel) del SO. Il firmware del calcolatore e il nucleo costituiscono il supporto a tempo di esecuzione del modello concorrente adottato dal SO. Processo utente Processo sistema Processo sistema Processo utente Nucleo: System call Send, Receive, Scheduling Firmware Modello monolitico Nel modello monolitico tutte le funzioni, anche quelle per la gestione delle risorse, sono contenute nel nucleo. In un SO monolitico il nucleo tende a coincidere con il SO. In linea di principio in una organizzazione monolitica tutte le funzioni possono chiamarsi senza alcuna gerarchia. Ogni procedura “conosce” l’interfaccia e i parametri con cui utilizzare le altre. La portabilità e la modularità dei SO monolitici è limitata ed è difficile separare i meccanismi dalle politiche di gestione. Un esempio di SO monolitico è MS-DOS che a cause delle limitazioni di spazio privilegia l’efficienza a scapito della struttura e della protezione. Schema del sistema MS-DOS Non ha l’identificazione PROGRAMMI DI APPLICAZIONE dell’utente con login e password; Non ha protezione del file system (ownership, gruppi). PROGRAMMI DI SISTEMA Non supporta meccanismi di protezione della memoria. Non esiste la modalità Kernel distinta da quella utente. DRIVER DISPOSITIVI MS-DOS DRIVER DISPOSITIVI ROM BIOS Non è multiprogrammato: la shell lancia un programma e attende che sia completato. i comandi utente di I/O agiscono direttamente sui dispositivi. Modello stratificato Il sistema rimane monolitico perché tutte le funzioni vengono eseguite in modalità kernel ma introduce una “strutturazione” gerarchica delle funzioni. Unix è un modello “classico” di SO stratificato e include tre livelli: un’interfaccia utente per le chiamate di sistema; un insieme di procedure per la gestione delle risorse corrispondenti alle chiamate di sistema; un insieme di procedure di servizio invocate dalle chiamate di sistema (es. per la gestione della concorrenza); La strutturazione in strati migliora la modularità e la portabilità. Esistono SO con una stratificazione più spinta (es. THE o MULTICS) ma i sistemi moderni limitano il numero degli strati per motivi di efficienza. Uno schema di sistema monolitico stratificato System call U2 U3 Procedure di gestione Proc 1 Proc 2 Proc N Procedure di servizio (gestione concorrenza) Serv 1 Serv 2 Serv k Processi utente kernel U1 Interfaccia kernel - firmware Um Lo schema di Unix interfaccia utente interfaccia delle librerie di sistema interfaccia system call Utenti Programmi di utilità (Shell, compilatori, editors) user mode Libreria Standard (Open close, read, write, fork) Unix kernel: Gestione Processi, Memoria, File System, I/O kernel mode Visione astratta delle componenti di un sistema di calcolo Modelli a microkernel Un passo avanti nella strutturazione dei sistemi si ottiene estraendo dal nucleo del SO le funzioni di gestione e lasciando solo le funzioni necessarie all’implementazione del modello concorrente. Questi sistemi sono detti anche a nucleo minimo o microkernel. Esistono due gruppi di sistemi a microkernel: sistemi orientati alle procedure: in questi sistemi le funzioni di gestione delle risorse vengono eseguite direttamente dai processi utente invocando procedure che vanno a modificare strutture dati condivise. L’assunzione implicita di questo modello è di disporre di una memoria condivisa; sistemi orientati ai processi o client-server: in questo caso le risorse dei sistema sono gestite da un insieme di processi server. I processi utenti effettuare richieste di accesso alle risorse comunicando esplicitamente con i server preposti. Modello client-server Il modello client-server estrae le funzioni di gestione dal nucleo affidandole a un insieme di processi gestori (server) che controllano l’accesso alle risorse. I processi utente effettueranno comunicazioni esplicite (per esempio per leggere un blocco di un file) al servente della risorsa che svolgerà per “suo conto” l’operazione e gli restituirà il risultato con un’altra comunicazione. La separazione tra i meccanismi (forniti dal nucleo) e le politiche (specificate nei processi) è naturale in questo modello. Il modello client-server ha gli stessi vantaggi di modularità e portabilità del modello a procedure ma non richiede memoria comune ed è quindi utilizzabile anche per i sistemi distribuiti. La protezione utilizza un meccanismo più “robusto” dato che i processi non hanno le risorse nel loro spazio logico. Modelli a macchine virtuali Multiprogrammazione e TS sono gestiti finora dalla sola astrazione dei processi. Il sistema IBM VM/370 utilizza un approccio totalmente differente, il nucleo implementa infatti una serie di macchine virtuali da associare ad ogni utente che forniscono la visione di una macchina fisica dedicata identica a quella reale. Sulle macchine virtuali dovranno essere eseguiti altri SO visto che il nucleo realizza solo l’astrazione di più macchine fisiche. I SO (monoutente) scelti da utenti diversi possono anche essere distinti!! L’approccio delle macchine virtuali offre una separazione completa tra le attività dei vari utenti perché non esiste nessuna possibilità di interazione tra macchine virtuali distinte. Lo scarso seguito avuto dal VM/370 non diminuisce il fascino di questa soluzione che è stata “riutilizzata” in diversi contesti dove la protezione e’ essenziale (emulatori, ambienti NT o Mach, Java VM). Sistema a Macchine Virtuali Processo Utente Processo Utente Processo Utente Processo Utente Kernel Kernel Kernel Kernel Macchina Virtuale HARDWARE Windows NT-2000 un modello ibrido Client Server Macchine virtuali non è microkernel