Sistemi Operativi
Informazioni Daniela Micucci Università di Milano – Bicocca E-mail: micucci@disco.unimib.it Testo per approfondimenti: Sistemi operativi ‐ Concetti ed esempi ‐ 8° Edizione A. Silberschatz ‐ P. Galvin ‐ G. Gagne - Prentice Hall
Introduzione
Outline Una breve storia dei Sistemi Operativi Cos’è un sistema operativo Organizzazione del sistema di calcolo Struttura del sistema operativo Attività del sistema operativo Gestione dei processi Gestione della memoria Gestione dei file
Outline Una breve storia dei Sistemi Operativi Cos’è un sistema operativo Organizzazione del sistema di calcolo Struttura del sistema operativo Attività del sistema operativo Gestione dei processi Gestione della memoria Gestione dei file
Prima dei Sistemi Operativi Tra il 1945 e il 1955 gli elaboratori elettronici erano progettati con valvole termoioniche Occupavano intere stanze, erano lentissimi e costosi Soltanto grossi centri di calcolo o Università potevano permetterseli I calcolatori erano molto inaffidabili Le valvole che li componevano si rompevano spesso In questo periodo non esisteva ancora il concetto di Sistema Operativo Il programma da eseguire veniva inserito ad ogni esecuzione in codice binario attraverso dei primitivi lettori di schede perforate e dopo alcune ore il risultato veniva inviato ad una stampante
I primi Sistemi Operativi (anni ‘50) Tra il 1955 e il 1965, grazie ai transistor gli elaboratori (mainframe) divennero abbastanza affidabili da poter essere costruiti e venduti in serie, anche se erano comunque macchine grosse e costosissime Tale operazione era molto dispendiosa in termini di tempo e non permetteva di sfruttare la macchina durante le lunghe fasi di caricamento di dati e programmi Concetto di job Miscela di programmi (in Fortran o Assembler), dati e comandi al SO Un programmatore doveva: Scrivere il proprio programma su carta Trasferirlo su schede Caricarlo nel computer Attendere il termine dell'esecuzione e la stampa del risultato
I primi Sistemi Operativi (anni ‘50) Nasce l’idea dei sistema batch (a lotti) ovvero l'idea di base era quella di dividere i tre lavori, ovvero il caricamento dei dati, il calcolo e la stampa I sistemi operativi tipici per questi elaboratori, per lo più programmati in FORTRAN e in Assembler erano il FMS (Fortran Monitor System) e IBSYS
La multiprogrammazione (anni ‘60) Introduzione dei circuiti integrati -> maggior velocità Necessità di ridurre il tempo idle dovuto alla esecuzione di un solo job alla volta Per la prima volta è introdotta la multiprogrammazione, che rendeva possibile la presenza di più programmi in memoria contemporaneamente Quando un job in esecuzione aveva bisogno di effettuare una operazione di I/O il Sistema Operativo lo sospendeva e al suo posto faceva girare un altro job Nel 1964 IBM presenta una famiglia di computer chiamata IBM System/360, prima realizzazione di una netta distinzione tra architettura e software t job1 job2 job3
La multiprogrammazione (anni ‘60) Sviluppo dei sistemi di telecomunicazione delle reti Nascono i sistemi multiterminale Ogni utente dispone di un dispositivo di ingresso (la tastiera) e un dispositivo di uscita (un monitor o stampante) Si introduce anche il timesharing Ogni utente dispone di un dispositivo di ingresso (la tastiera) e un dispositivo di uscita (un monitor o stampante) Nel 1962 venne realizzato al MIT il primo sistema di timesharing su un IBM 7094: CTSS (Compatible Time Sharing System), La vera rivoluzione si ebbe con il MULTICS (MULTiplexed Information and Computing Service) sviluppato congiuntamente dal MIT, dalla General Electric e dai Bell Labs Ambizione: gestire centinaia di utenti con un 286
La multiprogrammazione (anni ‘60) Fenomenale crescita dei minicalcolatori, a partire dal PDP-1 del 1961 a motivo dei bassi costi (120.000$: 5% costo di un IBM 7094!!!!) Importante il PDP-7 Su cui Ken Thompson (e Dennis Ritchie e Douglas Mcllroy sempre presso i lab Bell) sviluppò per gioco UNICS (Uniplexed Information and Computing Service): versione ridotta per singolo utente di MULTICS Che divenne poi UNIX Furono sviluppate diverse varianti di UNIX, come System V, BSD (Berkley Software Distribution), Minix (usato in ambito didattico) e successivamente (sulla base di MINIX e UNIX) l'ormai famosissimo Linux sviluppato dallo studente finlandese Linux Torvalds
I personal computer (anni ‘80) Negli anni '80 la tecnologia LSI (Large Scale Integration) porta alla costruzione di chip integrati ed all'abbattimento dei prezzi dell'hardware, facendo sorgere l'era del Personal Computer (chiamati inizialmente microcalcolatori) I primi modelli erano dotati di Sistemi Operativi Monoutente Con accesso interattivo e Alcuni con supporto al timesharing Il più importante tra i primi Sistemi Operativi per Personal computer era il CP/M-80 (Control Program for Microcomputer) della Digital Research MS-DOS (o PC-DOS da IBM) era originariamente basato proprio sul CP/M-80
I personal computer (anni ‘80) Negli anni ‘80 la Apple era uno dei pochi che credeva nell'idea Personal Computer All'epoca era difficile immaginare cosa potesse farsene una persona di un computer in casa La Xerox lancia il primo Sistema Operativo con interfaccia grafica La Apple prende in “prestito” questa idea e lancia nel 1984 il Mac OS, primo sistema operativo per Personal Computer Successivamente la Microsoft avrebbe commercializzato Windows (20 novembre 1985)
I Sistemi Operativi oggi Oggigiorno è disponibile una grande varietà di sistemi di elaborazione dalle più disparate dimensioni e performance a costi contenuti Tutte queste innovazioni hanno portato allo sviluppo di sistemi operativi per le più svariate architetture, in particolare per dispositivi handheld come cellulari (tra i quali il Symbian OS, Android) e PDA (con Windows Mobile e Palm OS) Per qualunque architettura venga sviluppato un Sistema Operativo moderno esso deve fornire il supporto, oltre a quanto visto sinora, a molteplici esigenze quali: Streaming audio/video (trasmissione ed elaborazione continua di dati multimediali) Supporto alle più diverse tecnologie di interconnessione (ad esempio Ethernet, Bluetooth e Wireless LAN) Integrazione di tecnologie per la fruizione di contenuti su Internet Gestione efficiente dell'energia
Outline Una breve storia dei Sistemi Operativi Cos’è un sistema operativo Organizzazione del sistema di calcolo Struttura del sistema operativo Attività del sistema operativo Gestione dei processi Gestione della memoria Gestione dei file
Cos’è un sistema operativo? Un Sistema Operativo è un insieme di programmi che: Gestisce gli elementi fisici del calcolatore Fornisce una piattaforma ai programmi applicativi Agisce da intermediario tra l’utente e la struttura fisica del calcolatore Scopi del sistema operativo: Eseguire i programmi, supportando l’utente nel “risolvere problemi” Rendere agevole l’interfaccia fra l’uomo e la macchina il sistema di calcolo è “conveniente” da usare Gestire in modo efficiente le risorse (hardware/software) del sistema di calcolo
Organizzazione del sistema di calcolo Il sistema di calcolo si suddivide in quattro componenti principali: Hardware Fornisce le risorse fondamentali di calcolo e.g., CPU, memoria, device di I/O Sistema operativo Controlla e coordina l’utilizzo delle risorse hardware da parte dei diversi programmi di sistema e applicativi Programmi applicativi Definiscono le modalità di utilizzo delle risorse del sistema, per risolvere i problemi di calcolo degli utenti e.g., Word processor, compilatori, web browser, sistemi per basi di dati, video game Utenti Persone, macchine, altri computer Dove si pone il S.O. rispetto al sistema di calcolo
Le componenti di un sistema di calcolo
Definizione di sistema operativo - 1 Il Sistema Operativo (SO) è un assegnatore di risorse Gestisce tutte le risorse hardware/software del sistema di calcolo Arbitra i conflitti per l’allocazione di risorse in base ad una politica equa ed efficiente Il SO è un programma di controllo Controlla l’esecuzione dei programmi utente per prevenire errori e/o uso improprio delle risorse del sistema
Definizione di sistema operativo - 2 Non esiste una definizione universalmente accettata Un’altra possibile definizione: «tutto quello che il vostro rivenditore vi fornisce quando ordinate un sistema operativo» Un’altra ancora: «il Sistema Operativo è il solo programma sempre in esecuzione quando il computer è acceso - detto kernel» Il resto sono solo programmi applicativi
SO come gestore risorse – 1 Si consideri un ristorante con un capo cuoco (che dirige la cucina) ed i suoi aiutanti, camerieri e clienti: I clienti scelgono un piatto dal menù Un cameriere prende l’ordine e lo consegna al capo cuoco Il capo cuoco riceve l’ordine e assegna uno o più aiutanti alla preparazione del piatto Ogni aiutante si dedicherà alla preparazione di un piatto, il che potrà richiedere più attività diverse Il capo cuoco supervisiona la preparazione dei piatti e gestisce le risorse (limitate) disponibili
SO come gestore risorse – 2 Il capo cuoco è il sistema operativo! I clienti sono gli utenti Il menù ed il cameriere costituiscono l’interfaccia verso il sistema operativo (grafica e non) Le ricette associate ai piatti sono i programmi Gli aiutanti sono i processi La cucina è il computer; pentole, fornelli, etc., sono le componenti hardware
SO come gestore risorse – 3 Problemi del capo cuoco Esecuzione fedele delle ricette Allocazione efficiente delle risorse esistenti (aiutanti, fornelli, etc.) Coordinamento degli aiutanti Licenziamento degli aiutanti che non si comportano secondo le regole Problemi del sistema operativo Esecuzione dei programmi utente Efficienza nell’uso delle risorse (processori, memoria, dischi, etc.) Coordinamento dei processi Protezione nell’uso delle risorse
Outline Una breve storia dei Sistemi Operativi Cos’è un sistema operativo Organizzazione del sistema di calcolo Struttura del sistema operativo Attività del sistema operativo Gestione dei processi Gestione della memoria Gestione dei file
Organizzazione di un calcolatore Un sistema di calcolo può essere descritto attraverso i seguenti elementi Modello o funzionamento del sistema di calcolo Struttura della memoria Fatto in architetture Struttura di I/O
Modello del sistema Un sistema di calcolo è composto da una o più CPU, alcuni controllori di dispositivi di I/O (device) connessi attraverso un bus alla memoria Questi dispositivi operano in maniera concorrente per ottenere cicli di accesso alla memoria
Startup Normalmente in un sistema di calcolo dopo l’accensione la prima fase è il bootstrap program (programma di avviamento) Tipicamente è memorizzato in una ROM o in una EPROM e viene identificato con il termine firmware Inizializza ogni aspetto del sistema Registri della CPU, controllori dei diversi dispositivi Carica nella memoria il kernel del sistema operativo Il Sistema Operativo avvierà normalmente il primo processo (ad esempio sotto Linux è init) Questo processo una volta avviato si metterà in attesa di un evento o di ulteriori istruzioni
Gestione dei dispositivi di I/O La CPU e i device di I/O possono eseguire operazioni concorrenti Ogni dispositivo di I/O ha un controllore che gestisce le operazioni del dispositivo attraverso un buffer locale La CPU sposta i dati da/verso la memoria principale verso/da i buffer locali Il dispositivo di I/O fornisce normalmente nuovi dati all’interno di questo buffer locale Ogni qualvolta che un dispositivo ha nuovi dati causa un interrupt per richiamare l’attenzione della CPU
Gli interrupt Un interrupt generalmente trasferisce il controllo ad una routine di servizio Normalmente esiste una sequenza di indirizzi, detta vettore delle interruzioni, che punta alle diverse routine di servizio Il Sistema Operativo deve salvare l’indirizzo dell’istruzione appena interrotta per poterla continuare ad eseguire successivamente Ulteriori interrupt sono normalmente disabilitati per non causare incoerenze nella normale esecuzione dell’interrupt corrente Un trap (o eccezione) è normalmente un interrupt generato via software a seguito di un errore oppure da una richiesta utente Ad esempio una divisione per zero Un sistema operativo è quindi anche un gestore di interrupt
Timeline delle interruzioni
Interrupt di I/O Dopo l’inizio dell’operazione di I/O, il flusso di esecuzione può seguire due percorsi distinti: I/O sincrono: si restituisce il controllo al processo utente solo dopo il completamento dell’operazione di I/O I/O asincrono: si restituisce immediatamente il controllo al processo utente in questo modo l’I/O può proseguire mentre il sistema esegue altre operazioni
Outline Una breve storia dei Sistemi Operativi Cos’è un sistema operativo Organizzazione del sistema di calcolo Struttura del sistema operativo Attività del sistema operativo Gestione dei processi Gestione della memoria Gestione dei file
Struttura del Sistema Operativo I Sistemi Operativi possono essere progettati utilizzando diversi criteri, i più comuni sono: Multiprogrammazione Timesharing (o multitasking)
Multiprogrammazione La multiprogrammazione consente di aumentare l’efficienza della CPU e dei dispositivi di I/O, infatti: Un singolo utente non può tenere occupato la CPU e i dispositivi di I/O per tutto il tempo La multiprogrammazione organizza i lavori (o job) in modo tale da tenere sempre la CPU occupata Più job (un sottoinsieme dei totali) del sistema risiedono in memoria Un solo job alla volta è selezionato per essere mandato in esecuzione attraverso un algoritmo di scheduling Quando un job è in attesa di un I/O il Sistema Operativo può passare all’esecuzione di un altro job
Time sharing (o multitasking) Il timesharing (o multitasking) è una estensione logica della multiprogrammazione La CPU esegue per un istante un job per poi passare all’esecuzione di un altro job e così via La sensazione è che la CPU sta eseguendo diversi job in parallelo Il tempo di risposta deve essere inferiore di 1 secondo Ogni utente ha almeno un programma «in esecuzione» in memoria chiamato processo Se diversi processi sono pronti per essere eseguiti nello stesso istante la CPU decide attraverso degli algoritmi di scheduling chi deve essere mandato in esecuzione Se la memoria non è sufficiente a contenere tutti i processi, mediante swapping, i processi vengono spostati fuori/dentro la memoria principale in base al loro stato di esecuzione effettivo La memoria virtuale permette l’esecuzione di processi che non sono completamente in memoria
Multiprogrammazione e memoria
Outline Una breve storia dei Sistemi Operativi Cos’è un sistema operativo Organizzazione del sistema di calcolo Struttura del sistema operativo Attività del sistema operativo Gestione dei processi Gestione della memoria Gestione dei file
Doppia modalità di funzionamento Processi condividono il sistema I processi possono tentare di modificare lo spazio di memoria dedicato ad altri processi o al SO La modalità operativa dual-mode permette al SO di proteggersi e di proteggere le varie componenti del sistema di calcolo User mode e kernel mode Mode bit cablato in hardware Il valore assunto dal mode bit distingue le due situazioni in cui il sistema esegue codice utente o codice kernel; Le istruzioni privilegiate possono essere eseguite soltanto in modalità kernel Una system call effettua il passaggio in modalità kernel; il ritorno dalla chiamata riporta il sistema in modalità utente
Transzione da modalià User a Kernel
Timer Per prevenire processi che eseguano cicli infiniti senza più restituire il controllo al SO -> Timer Emissione di un interrupt dopo un dato periodo di tempo, mediante l’uso di un generatore di impulsi e di un contatore Il SO inizializza il contatore al tempo massimo (stimato) di esecuzione del processo Il contatore viene decrementato ad ogni impulso Quando il contatore ha valore zero, si genera un interrupt
Gestione dei processi - 1 Un processo è un programma in esecuzione È una unità di lavoro del sistema Il programma è un’entità passiva, il processo è un’entità attiva Un processo necessità di risorse per poter compiere il proprio lavoro CPU, memoria, I/O, file Al termine dell’esecuzione il processo rilascia tutte le risorse utilizzate
Gestione dei processi - 2 Nei processi single‐threaded il program counter tiene traccia della prossima istruzione da eseguire Il processo esegue una singola istruzione per volta sino al suo termine Nei processi multi‐threaded ogni thread ha un suo program counter Un sistema solitamente ha diversi processi assegnati a diversi utenti e verranno eseguiti in maniera concorrente su una o più CPU Le CPU sono risorse da utilizzare per eseguire i processi/thread
Attività del gestore dei processi Il Sistema Operativo attraverso il gestore dei processi ha il compito di: Create e rimuovere i processi degli utenti e di sistema Sospendere e riprendere l’esecuzione dei processi Fornire dei meccanismo per la sincronizzazione dei processi Fornire dei meccanismo per la comunicazione tra processi Fornire dei meccanismo per la gestione dei deadlock
Gestore della memoria Il gestore della memoria si occupa di cosa tenere allocato in memoria in ogni istante È un importante modulo della Sistema Operativo in quanto rende più efficiente l’utilizzo della CPU Alcune attività del gestore della memoria sono: Tenere traccia di quale parte della memoria è occupata e da chi è usata Decidere quali processi e dati spostare dentro o fuori la memoria Allocare e deallocare blocchi di memoria quando è richiesto
Gestione del file system Il Sistema Operativo garantisce una visione uniforme e logica delle informazioni memorizzate sulle memorie di massa Il Sistema Operativo Astrae dalle caratteristiche fisiche dei dispositivi per definire un’unità di memorizzazione logica, il file Grazie ai device driver (che controllano la periferica), nasconde all’utente le caratteristiche fisiche variabili dell’hardware Permette di organizzare i file in directory Permette di controllare l’accesso per determinare quali utenti possono accedere e come a quali risorse (file) Le attività includono: Creazione e cancellazione di file e directory Fornire primitive elementari per la gestione di file e directory Associare file ai dispositivi di memoria di massa
Gestione della memoria di massa La memoria centrale è volatile e troppo piccola per contenere permanentemente tutti i dati: Il sistema operativo deve consentire l’archiviazione secondaria, per salvare i contenuti della memoria centrale La maggior parte dei moderni sistemi impiega i dischi come principale mezzo di memorizzazione La gestione efficiente della memoria secondaria è fondamentale per le prestazioni del sistema, che risentono fortemente della velocità del sottosistema di gestione dei dischi e della bontà degli algoritmi di scheduling Il SO è responsabile delle seguenti attività: Gestione dello spazio libero Allocazione dello spazio Scheduling del disco
Gestione della memoria terziaria I dispositivi di memoria terziaria non devono essere particolarmente veloci Le memorie terziarie includono i dischi ottici ed i nastri magnetici Devono comunque essere gestite in modo efficiente Variano tra memorie WORM (write-once, read-many) e RW (read-write) Supporto del SO: installazione/rimozione dei media, allocazione dei dispositivi ai processi che ne richiedono l’uso
Performance dei vari livelli di storage Complementary metal–oxide–semiconductor (CMOS)
Sottosistema di I/O Uno degli scopi del SO consiste nel nascondere all’utente le caratteristiche dei dispositivi hardware Il sottosistema di I/O è responsabile della gestione della memoria dell’I/O includendo: il buffering (la memorizzazione temporanea di dati in memorie locali alle periferiche, durante il trasferimento) il caching (la memorizzazione parziale dei dati in memorie ad accesso rapido) lo spooling (per la realizzazione della memoria virtuale) Fornisce un’interfaccia generale per i driver dei dispositivi Contiene i driver per i dispositivi specifici presenti nel sistema di calcolo
Protezione e Sicurezza In un Sistema Operativo sono necessari dei meccanismi di Protezione: meccanismo usato per controllare l’accesso da parte di processi o utenti a risorse del sistema di calcolo Sicurezza: meccanismo di difesa implementato dal sistema per proteggersi da attacchi interni ed esterni Un sistema operativo normalmente distingue i diversi utenti in modo da poter determinare chi può fare cosa Normalmente ad ogni utente corrisponde un user ID Ogni userID ha quindi i permessi su quali file accedere e su quali file mandare in esecuzione Il group ID identifica un insieme di utenti che hanno permessi su alcune risorse
Sistemi ad orientamento specifico Sistemi integrati real‐time Sono progettati imponendo dei forti vincoli sui tempi di risposta a carico del processore e del flusso dei dati Sistemi multimediali Progettati tenendo conto flussi di dati video o audio che devono essere disponibili a velocità costanti Sistemi palmari Sono progettati tenendo in considerazione le scarse risorse Le limitazioni delle periferiche di I/O …e del consumo della batteria!
Open-Source Operating Systems Disponibili in formato sorgente anziché come codice binario compilato Vantaggi Nessuna necessità di effettuare processi di reverse engineering per comprendere il funzionamento del sistema Costituzione di una comunità di programmatori interessati e non retribuiti che contribuiscono allo sviluppo, al debugging ed all’assistenza e al supporto gratuito agli utenti Codice più sicuro e privo di bug Esempi: GNU/Linux and BSD UNIX (includendo il coreb core of Mac OS X), and many more
Fine Introduzione