Corso di Laboratorio di Informatica: Sistemi Operativi Corso di Laurea in Informatica, Università di Firenze Anno accademico 2008/2009 Prof. Luca Ferrari e-mail: [email protected] telefono: 055 4237454 Ricevimento: contattatemi e ci metteremo senz’altro d’accordo. I lucidi delle lezioni ed altro eventuale materiale didattico potranno essere reperiti alla pagina http://www.dsi.unifi.it/~ferrari1.1 Programma del corso (1/2) Introduzione 1. Preliminari sui sistemi operativi 2. Storia e sviluppo dei sistemi operativi Storia di UNIX e di Linux 1. Storia ed evoluzione di UNIX 2. I progetti di standardizzazione 3. Minix 4. Organizzazioni di sistema (monolitica e client/server) 5. Avvento di Linux 6. Concetto di Open Source e Free Software Foundation 5. Distribuzioni Struttura di UNIX e di Linux 1. Livelli e componenti di UNIX 2. Shell 3. Libreria Standard 4. Kernel 5. Kernel modulare di Linux 6. Introduzione al file system di Linux I comandi principali 1. Avvio di un sistema Linux 2. Connessione e disconnessione dal sistema 3. Shell 4. Comandi 5. Filtri 6. Manuali: man, info 7. Comandi principali per la gestione di files e directories 8. Standard input, output, error e redirezionamento 9. Pipelines 10. Il comando find 11. Il comando grep 12. L’editor vi 13. Comandi per la stampa La gestione dei files 1. Implementazione del file system e dei files in un sistema UNIX 2. Index node 3. Link 4. Attributi dei files 6. Gestione dei permessi per files e directories 7. Il file system proc di Linux 8. Montare un file system 9. Compressione e uso del tar 1.2 Programma del corso (2/2) Cenni al linguaggio C 1. Cenni storici 2. Libreria standard 3. Sintassi di base 4. Variabili e tipi 5. Espressioni e operatori; strutture di controllo 6. Funzioni 7. Puntatori La gestione dei processi 1. Introduzione ai processi 2. Stati di un processo 3. Comandi per la gestione dei processi UNIX 4. System calls per la gestione dei processi: fork(), wait(), exec(), exit(),… 5. Signals 6. Scheduling in UNIX La shell bash 1. Introduzione alle shell 2. Programmi e scripts 3. Introduzione agli script per bash 4. Gestione delle variabili; variabili d’ambiente 5. Sostituzione dei comandi 6. Operatori aritmetici e valutazioni aritmetiche 7. Strutture condizionali: if-then-else-fi; sintassi delle espressioni di controllo 8. Parametri posizionali e parametri speciali 9. Strutture condizionali: case-in-esac 10. Cicli: for-in-do-done 11. Arrays 12. Debugging 13. Cicli: while-do-done; utilizzo di continue e break 14. Cicli: until-do-done 15. Gestione delle stringhe e sostituzione dei parametri 16. Funzioni 1.3 Modalità di esame L'esame consiste nella realizzazione di scripts che risolvono un esercizio assegnato dal docente. L'esercizio deve essere svolto individualmente o a gruppi di due persone. Gli scripts devono essere realizzati in una settimana. Successivamente alla consegna del programma al docente, lo studente sostiene una prova orale che consiste in una discussione sugli scripts realizzati più un paio di domande di teoria sul programma svolto durante l’anno. Prenotazione Esame Deve essere effettuata la prenotazione all'esame inviando una email con soggetto Prenotazione Laboratorio di S.O. all’indirizzo: [email protected] specificando inoltre: Nome, Cognome, Nome del corso, Corso di Laurea. Il docente invierà l'esercizio (sempre via email) al più tardi una decina di giorni prima della data fissata per l’orale. La consegna prevede •una relazione che illustri i vari passi della procedura che risolve l'esercizio e gli scripts implementati; •sia la relazione che gli scripts possono essere consegnati inviando una email all'indirizzo: [email protected]; •nel caso che lo script non funzioni e dunque non sia possibile passare alla prova orale, il docente manderà un messaggio opportuno. 1.4 Libri di Testo Linux La guida , M. Welsh, M. K. Dalheimwer, L. Kaufman, Apogeo Guida a Unix con Linux, di Jack Dent, Tony Gaddis, Apogeo Per ulteriori approfondimenti sui S.O. Sistemi Operativi, V Edizione, A. Silberschatz and P. B. Galvin, Addison Wesley. I Moderni Sistemi Operativi, A. S. Tanenbaum, Jackson Al Kelley. Sistemi Operativi, P. Ancillotti, M. Boari, A. Ciampolini, G. Lipari, McGraw-Hill. Manuali online Appunti_di_informatica_libera.html, Daniele Giacomini Linux Guida dell’Utente, Larry Greenfield Linux HOWTO - Installazione e Configurazione BASH Programming - Introduction HOWTO 1.5 Cos’è un sistema operativo? Un insieme di programmi che agisce come intermediario fra un utente di un computer e l’hardware del computer stesso. Scopi di un sistema operativo: Fornire servizi ai programmi (I/O, read, write, timer, interrupt ... ) utilizzando specifiche istruzioni (chiamate di sistema, o system calls). Rendere la macchina conveniente da utilizzare, organizzando le sue risorse e condividendole fra gli utenti. Utilizzo efficiente dell’hardware. 1.6 Componenti di un calcolatore 1. Hardware – Fornisce le risorse di calcolo di base (CPU, memorie, dispositivi di I/O). 2. Sistema operativo – E’ un insieme di programmi speciale che controlla e coordina l’uso dell’hardware tra i vari programmi di sistema e applicativi per i vari utenti. 3. Programmi di sistema e applicativi – Definiscono il modo in cui le risorse del calcolatore vengono utilizzate per risolvere i problemi computazionali degli utenti (compilatori, sistemi di basi di dati, giochi, browsers). 4. Utenti (persone, macchine, altri calcolatori). 1.7 Visione astratta dei componenti di un calcolatore 1.8 Definizioni (funzioni) di un sistema operativo Allocatore di risorse – alloca le risorse nella maniera più conveniente da un punto di vista globale. Programmi di controllo – controlla l’esecuzione dei programmi dell’utente e le operazioni dei dispositivi di I/O. Kernel – l’unico insieme di programmi in continua esecuzione (a differenza dei programmi applicativi). 1.9 Storia dei sistemi operativi Prima generazione 1945 - 1955 tubi a vuoto, plance Seconda generazione 1955 - 1965 transistors, batch systems Terza generazione 1965 – 1980 multiprogrammazione Quarta generazione 1980 – oggi personal computers 1.10 Batch Systems (2a generazione) Batch system primitivi: porta schede al 1401; copia le schede dal lettore al nastro; inserisci il nastro sul 7094 che elabora il job e prepara il nastro di output; metti il nastro di output sul 1401 che stampa; 1.11 Batch Systems Struttura di un tipico job di compilazione di un programma Fortran. 1.12 Batch Systems Velocizzazione delle operazioni raggruppando più jobs separati (batch = raggruppare). Successione automatica dei jobs – trasferimento automatico del controllo da un job ad un altro. Primo rudimentale sistema operativo. Uso di una piccola macchina per scrivere i jobs su un nastro e stampare i risultati dal nastro. Si tratta comunque di una macchina priva di abilità computazionale. 1.13 Configurazione della memoria principale per un Batch System semplice 1.14 Batch Systems con multiprogrammazione (3a generazione) Diversi jobs sono mantenuti nella memoria principale nello stesso tempo (pool di jobs), e la CPU viene suddivisa tra di essi (scheduling della CPU). 1.15 Caratteristiche di un SO necessarie per la multiprogrammazione Scheduling della CPU – Il sistema deve scegliere tra diversi jobs in memoria pronti per l’esecuzione. Gestione della memoria – Il sistema deve ripartire la memoria tra diversi jobs. Il sistema deve fornire opportune procedure di I/O. Sistemi di spooling (Simultaneous Peripheral Operation On-Line) per trattare gli output. 1.16 Sistemi Time-Sharing – Calcolo interattivo La CPU viene suddivisa fra diversi jobs che sono mantenuti in memoria e su disco (la CPU viene assegnata a un job solo se il job è in memoria). I jobs vengono continuamente scambiati fra memoria principale e secondaria. Viene fornita una comunicazione on-line fra l’utente e il sistema; quando il sistema operativo termina l’esecuzione di un comando, va in cerca del successivo dalla tastiera dell’utente. Un sistema on-line deve essere a disposizione degli utenti per avere accesso ai dati e ai programmi. 1.17 SO Time-Sharing CTSS (Compatible Time Sharing System - 1962) MULTICS (MULTIplexed Information and Computing Service - 1965) UNIX (1969) 1.18 Personal Computers (4a generazione) Personal computers – Calcolatore dedicato a un singolo utente. Dispositivi I/O – Tastiere, mouse, schermi, piccole stampanti. Convenienza per l’utente e feedback immediato. Si può adottare la tecnologia sviluppata per grossi sistemi operativi. Spesso i singoli utenti utilizzano semplicemente il calcolatore e non hanno bisogno di utilizzare sistemi di protezione particolarmente avanzati della CPU. E’ possibile utilizzare differenti tipi di sistemi operativi (Windows, MacOS, UNIX, Linux). 1.19 Personal Computer MS-DOS (MicroSoft Disk Operating System -1980) Windows (1985) Windows 95, Windows 98 Windows NT, Windows 2000 (5th version of NT), Windows XP UNIX Minix (1987) Linux (1994) 1.20 Sistemi di rete e distribuiti Necessitano di un’infrastruttura di rete. Local area networks (LAN) o Wide area networks (WAN). Possono essere sistemi client-server oppure peer-to- peer. 1.21