Un Sistema Operativo multiuser-multitask UNIX I lucidi che seguono sono stati prodotti sulla base dei seguenti riferimenti: | lucidi del corso di Architettura degli Elaboratori Dip. Informatica dell’Università di Bari a cura di Pizzutilo, Tangorra, De Carolis | Corso UNIX di Roberto Polillo dell’Università di Milano | Corso Unix di Marco Liverani dell’Università di Roma | Corso di Laboratorio di sistemi Operativi – Dip. Informatica dell’Università di Bari a cura di De Carolis, Bianchi. I SISTEMI OPERATIVI DI RETE Obiettivo principale Implementazione servizi di rete | – Configurazione automatica delle workstation (DHCP) | – Gestione centralizzata degli utenti (NIS) | – Condivisione di risorse (NFS, SAMBA) | – Servizi base per Internet (HTTP, FTP, TELNET, SSH) | – Servizi di Forwarding e Routing | – Servizi di Firewall e NAT (IPTABLES) | – Servizi di Virtual Private Network | – Servizi avanzati per Internet (DNS, SMTP, POP, IMAP) Scelta degli strumenti Occorre un sistema operativo adatto • UNIX – Multiutente (multiuser) – Concorrente (multitasking) – Tradizionalmente adottato per servizi di rete – Ne esistono distribuzioni sia commerciali che “libere” • Windows – Generalmente considerato meno affidabile – Alti costi per acquisizione licenze 1 Breve storia di UNIX ¾ Sviluppato inizialmente, a partire dal 1969, da Ken Thompson e Dennis Ritchie del gruppo di ricerca dei Bell Laboratories. Incorporò caratteristiche di altri sistemi operativi (es. MULTICS). ¾ La terza versione, scritta in C, fu sviluppata ai Bell Labs appositamente per supportare UNIX. ¾ La più significativa delle versioni UNIX non-Bell fu sviluppata alla University of California at Berkeley (Berkeley Software Distributions). ¾ Sviluppato per il VAX, 4.3BSD è una delle versioni più importanti e ne è stato fatto il porting su varie piattaforme. ¾ 4BSD UNIX è il risultato di un finanziamento DARPA per lo sviluppo di uno standard UNIX ad uso governativo. ¾ Vari progetti di standardizzazione hanno tentato di consolidare le varianti di UNIX, per ottenere un’unica interfaccia di programmazione verso il sistema. Storia delle versioni UNIX 2 Architettura di UNIX Come molti sistemi operativi, UNIX consiste di 2 parti separate: | Kernel: tutto ciò che si trova sotto l’interfaccia delle system-call e sopra l’hardware fisico. Fornisce il file system, lo scheduling della CPU, la gestione della memoria ed altre funzioni di SO, tramite le chiamate di sistema (system call); | Programmi di sistema: impiegano le chiamate di sistema, supportate dal kernel, per fornire funzioni utili, come compilazione e manipolazione di file. UNIX È un sistema operativo: ª Multiuser ª Multitask : multiprocessing - multithreading ª Time-sharing shell tools kernel 3 UNIX : Sistema Operativo multistrato utente gui Xwindow Programmi di utilità (shell, editor, compilatori ed interpreti,…) Librerie standard di sistema KERNEL HARDWARE Gestione dei processi La rappresentazione dei processi è il principale problema di progetto di un sistema operativo. | UNIX si distingue dagli altri sistemi operativi per la semplicità con cui processi multipli possono essere creati e manipolati. | I processi vengono raprresentati in UNIX per mezzo di vari blocchi di controllo (control blocks). z I blocchi di controllo associati ad un processo vengono memorizzati nel kernel. z L’informazione contenuta nei blocchi di controllo viene utilizzata dal kernel per controllare i processi ed effettuare lo scheduling della CPU. 4 System Call | | | | Le chiamate di sistema definiscono l’interfaccia del programmatore verso UNIX. L’insieme dei programmi di sistema disponibili definisce l’interfaccia utente. Le interfacce del programmatore ed utente definiscono il contesto che deve essere supportato dal kernel. Si hanno, approssimativamente, tre categorie di system call in UNIX: z Manipolazione di file (le stesse chiamate di sistema supportano anche la manipolazione dei dispositivi). z Controllo dei processi. z Manipolazione dell’informazione. Controllo dei processi -1 9 Un processo è un programma in esecuzione identificato univocamente dall’identificatore di processo (un intero). 9 . Un processo necessita di alcune risorse per assolvere il proprio compito: tempo di CPU, memoria, file e dispositivi di I/O. 9 Il SO è responsabile delle attività di gestione dei processi: Creazione e cancellazione di processi. Sospensione e riattivazione di processi. Fornire meccanismi per: sincronizzazione di processi comunicazione fra processi 9 System call per il controllo dei processi: Fork, execve, exit, wait…. 9 Processo zombie: processo terminato dopo il padre. 5 Stati di un processo Ready pronto ad essere eseguito, ma non in esecuzione running in esecuzione waiting in attesa di un evento o di un dato System call di gestione dei processi Controllo dei processi — 2 | | I processi comunicano fra loro attraverso pipe, code di byte che sono accessibili tramite un descrittore di file. Tutti i processi utente sono figli di un unico processo, init. • init crea un processo getty, che inizializza i parametri della linea del terminale e attende il login name dell’utente per passarlo al processo login. • Login confronta l’user identifier per verificarne i diritti di accesso al sistema.esegue una shell che crea sottoprocessi per ciascun comando utente. 6 Gruppi di processi Un insieme di processi correlati che concorrono alla realizzazione di un task comune. | | In ogni istante, un unico gruppo di processi può utilizzare un certo terminale di I/O. z Il processo (unico) in foreground si svolge sotto gli occhi dall’utente al terminale. z I processi in background realizzano il loro compito senza interagire direttamente con l’utente. Ciascun processo eredita il proprio terminale di controllo dal processo padre. Comunicazione tra processi Ö La maggior parte dei sistemi UNIX non permette la condivisione della memoria in quanto l’hardware nativo PDP-11 non la incoraggiava. Ö La pipe è il meccanismo IPC più caratteristico di UNIX, che garantisce un flusso unidirezionale affidabile di byte tra due processi. Ö Nel 4.3BSD, le pipe sono implementate come un caso speciale del meccanismo delle socket, il quale non fornisce un’interfaccia generale solo a funzioni tipo pipe, che sono locali su una macchina, ma anche a funzioni di rete. Routine di libreria ¾ L’interfaccia delle chiamate di sistema in UNIX viene supportata ed ampliata da una notevole collezione di routine di libreria. ¾ I file header forniscono la definizione di strutture dati complesse impiegate nelle chiamate di sistema. ¾ Librerie addizionali sono fornite per funzioni matematiche, accesso alla rete, conversioni di dati, ecc. 7 Scheduling della CPU Ciascun processo ha associata una propria priorità di scheduling; numeri più alti indicano priorità più basse. | La presenza di feedback negativo nello scheduling della CPU diminuisce il rischio che un processo ne prenda possesso in modo esclusivo. | Tecniche di invecchiamento (aging) dei processi vengono impiegate per impedire l’attesa indefinita (starvation). | Quando un processo decide di rilasciare la CPU, si pone in stato di sleep per un evento. | Quando tale evento accade, il processo di sistema che lo gestisce chiama wakeup con l’indirizzo corrispondente all’evento, e tutti i processi che si trovano in stato di sleep allo stesso indirizzo vengono spostati nella coda ready per essere eseguiti. | Interfaccia utente 9Programmatori ed utenti interagiscono prevalentemente con programmi di sistema già esistenti: Le chiamate di sistema richieste sono incorporate nel programma e non devono essere conosciute dall’utente. 9I programmi di sistema più comuni sono orientati alla gestione di file e directory. Directory: mkdir, rmdir, cd, pwd File: ls, cp, mv, rm 9Altri programmi sono relativi a editor (e.g., emacs, vi) formattatori di testo (e.g., troff, TEX), e altro. 8 Shell e comandi ª Shell o interprete dei comandi – il processo utente che esegue i programmi. ª Viene chiamata shell perché “ingloba” il kernel. ª La shell indica che è pronta ad accettare un nuovo comando visualizzando un prompt e l’utente introduce comandi su una singola linea. ª La shell naviga attraverso il percorso di ricerca per trovare il file relativo al comando, che viene in seguito caricato ed eseguito. ª Le directory /bin e /usr/bin (che contengono la maggior parte dei comandi) sono quasi sempre nel percorso di ricerca. ª La shell normalmente sospende la propria esecuzione fino al termine del comando. Standard I/O | | | La maggior parte dei processi, quando iniziano la loro esecuzione, si aspettano di poter disporre di tre descrittori di file aperti: z standard input – il processo può leggere cosa viene scritto dall’utente z standard output – il processo può inviare l’output sullo schermo dell’utente z standard error – uscita dell’errore Molti programmi possono anche utilizzare file (piuttosto che un terminale) per lo standard input e lo standard output. Redirezione dell’I/O: Le shell più comuni dispongono di una semplice sintassi per cambiare i file aperti per l’I/O standard di un processo. 9 Classi di comandi Amministrazione di sistema | Gestione files | Elaborazione testi | Sviluppo software | Comunicazione | …. | Pipeline, Filtri, e Shell Script ¾ I singoli comandi possono essere “accodati” per mezzo di una barra verticale | (pipe). In questo modo, l’output del comando a sinistra della pipe costituisce l’input per il comando alla sua destra. % ls | pr | lpr ¾ Filtro – un comando che passa il proprio standard input allo standard output, compiendo qualche elaborazione (es. pr). ¾ Programmare una nuova shell personalizzata, con sintassi e semantica diverse, cambia la visione dell’utente, ma non modifica il kernel o l’interfaccia del programmatore. ¾ XWindow è un’interfaccia utente a icone molto diffusa sui sistemi UNIX. 10 Redirezione dell’I/O standard Comando % ls > file_a % pr < file_a > file_b % lpr < file_b Significato del comando dirige l’output di ls sul file file_a input da file_a e output su file_b input da file_b %% make program > & errs salva sia lo standard output che lo standard error su un file Manipolazione di file 9 Un file è una sequenza di byte; il kernel non impone ai file nessuna 9 9 9 9 struttura. I file sono raccolti in directory, organizzate ad albero. Le directory sono file che contengono informazioni su come reperire altri file. Path name (nome di percorso): identifica un file specificando un cammino che, attraverso la struttura a directory, raggiunge il file. Un path name assoluto inizia nella radice del file system. Un path name relativo inizia nella directory corrente. System call per la manipolazione di file: create, open, read, write, close, unlink, trunc. 11 Struttura delle directory in UNIX Vantaggi principali di UNIX | | | | | | | | | | Scritto in linguaggio ad alto livello. Distribuito sotto forma di sorgenti. Fornisce le primitive di un sistema operativo potente su di una piattaforma economica. Piccola dimensione, modulare, progetto “pulito”. Progettato per realizzare il time–sharing. Possiede un’interfaccia utente (shell) semplice da usare e standard, che può essere facilmente sostituita e personalizzata. File system con directory a più livelli, strutturate ad albero. I file sono supportati dal kernel come sequenze di byte senza struttura. Supporta processi multipli; un processo può creare facilmente altri processi. Sistema altamente interattivo, fornisce facilities per lo sviluppo di programmi. 12 Cosa è LINUX 9 È un SO UNIX standard 9 Tesi di laurea di Linus Torwalds all’università di Helsinki in Finlandia 9 Sviluppato a partire da Minix, un sistema UNIX molto piccolo 9 1991 è stata rilasciata la prima versione (0.02) 9 Nel 1994 fu rilasciata la versione 1.0 del Kernel Linux 9 L’ultima versione corrente è la 2.4 (Gennaio 2001) e … lo sviluppo di Linux continua. 9 È considerato un SO eccellente, economico alternativo ad altri SO molto costosi.(i.e.UNIX,NT, W2000). Linux: le caratteristiche Î Multitasking: più programmi funzionano contemporaneamente. Î Multiuser: più utenti nella stessa macchina contemporaneamente. Î Scalabile: in modo testo ha pretese hardware minime. Î Funziona su diverse architetture: PC, SPARC, Mac,… Î Affianca diversi SO: Windows, Solaris, MS-DOS, MacOs,… Ha infatti accesso trasparente a partizioni MS-DOS (o partizioni OS/2 FAT) tramite il filesystem. Î Gestisce multiprocessor. Ô Supporto rete TCP/IP, incluso ftp, telnet, NFS... Ô Modalità protetta: ogni programma in esecuzione occupa specifici indirizzi di memoria, "protetti" dalla possibilità che altri programmi vadano ad occupare gli stessi indirizzi causando in tal modo il blocco del sistema. Ô Possibilità di utilizzare un completo ambiente grafico, una GUI (Graphical User Interface) conosciuta con il nome di X Windows. 13 Vantaggi di Linux • Libertà: codici sorgenti aperti; chiunque può utilizzarli, modificarli, etc. sempre in evoluzione • Stabilità: Linux non si blocca praticamente, mai. È un sistema completamente multitasking e multiutente. Se un programma si blocca è possibile terminarlo senza alterare la stabilità dell’intero sistema. •Sicurezza: accesso ad utenti autorizzati. Diritti d’accesso differenziati per ogni utente. •Trasparenza: Gli errori Linux hanno la tendenza ad essere scoperti e corretti rapidamente per mezzo di patch scaricabili da internet. • Gratuità: è gratuito (si paga eventualmente solo il prezzo della distribuzione) - anche molti applicativi sono gratuiti Svantaggi di Linux •Mancanza di una “controparte” a cui gli utenti possono far riferimento per esigenze specifiche •Applicazioni ridondanti •Applicazioni difficili da manutenere perché poco o per nulla documentate Le varie distribuzioni www.suse.de/fr www.redhat.com www.slackware.org www.linux-mandrake.com www.debian.org 14