Università degli Studi dell’Aquila Lab. di Sistemi Operativi A.A. 20112011-2012 Romina Eramo Dipartimento di Informatica Università degli Studi dell’Aquila (Italy) [email protected] Informazioni generali Orario: martedì 9:30-11.30 aula 1.7 (Coppito I) Docente: Romina Eramo Home page del corso: http://www.di.univaq.it/romina.eramo/lso/ Ricevimento: su appuntamento ([email protected]) LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Obiettivi Conoscenze Conoscenza dell’architettura UNIX e della bash UNIX. Principi di programmazione del sistema operativo UNIX/Linux ed alcuni aspetti elementari della programmazione in ambiente concorrente e/o distribuito Capacità Manualità nell'utilizzo delle system-call di UNIX/Linux. Capacità di risolvere semplici problematiche applicando le tecniche base della programmazione di sistema in ambiente UNIX/Linux Comportamenti attesi Interesse per gli aspetti realizzativi e pragmatici connessi alla tecnologia dei sistemi operativi LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Programma (1) Architettura UNIX → Struttura del kernel, processi, system call La bash di UNIX → → → → Concetti fondamentali: cosa è la shell, struttura del file system Unix, il pathname, standard stream Comandi bash: (ls, cd, pwd, mkdir, rmdir, cp, rm, mv, ln, mount, umount, chmod…) La shell e le modalità di esecuzione dei comandi, job control, redirezione, variabili di shell, espansioni dei comandi Scripting di shell, costrutti di controllo, file di configurazione/inizializzazione. Programmazione di sistema – processi → → → Gestione dei processi, strutture dati del kernel I processi e la loro creazione: le system call fork, exec, wait,..., Gestione segnali Programmazione di sistema – I/O e File System → → Le system call di Unix per l'accesso ai file: open, creat, close,read, write, lseek, unlink, remove, fcntl, stat File System: Strutture dati del Kernel e su disco LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Programma (2) Comunicazione e sincronizzazione tra processi → → System pipe e Named pipe. Uso delle system call pipe, read, write IPC system V: i semafori e shared memory Cenni su Thread → Principali nozioni sulle system call per la gestione dei thread. Applicazioni distribuite → → → → Richiami su architettura TCP/IP Struttura dei servizi Internet Socket Cenni Applicazioni basate su RPC LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Testi di riferimento Testo di riferimento → Unix for Programmers and Users. Graham Glass e King Ables, terza edizione, Pearson-PrenticeHall, 2003. Bibliografia consigliata → → → → → Manuale on-line del sistema operativo unix/linux (man). Advanced programming in the UNIX environment W. R. Stevens Addison-Wesley, 1992 Unix network programming. W.R.Stevens, B.Fenner, A.M.Rudoff, Addison-Wesley, 2004. TCP/IP Illustrated Vol. 1 W. R. Stevens Addison-Wesley, 1999 The design and implementation of the 4.4 BSD M.K McKusick, K. Bostic, M.J. Karels, J.S. Quarterman Addison Wesley LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Modalità d’esame Per superare il corso di laboratorio di Sistemi Operativi è necessario svolgere due progetti, uno per ciascuna parte del corso, e stendere per ciascuno una breve relazione. Shell UNIX: progettazione e implementazione di uno script per la shell Bash, opportunamente commentato. → Programmazione di sistema: progettazione e implementazione di due programmi C (client e server) → I dettagli dei progetti saranno comunicati durante il corso, così come le consegne dei progetti che saranno circa a completamento della relativa parte del corso. I progetti svolti devono essere inviati via e-mail e saranno discussi nelle date di appello. LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO INTRODUZIONE AL SISTEMA OPERATIVO UNIX LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Il sistema operativo UNIX Unix nasce negli anni ‘70 con l’introduzione dei mini computer. Oggi è perfettamente integrato con i nuovi sistemi. Nuove generazioni di sistemi operativi Unix-like: Linux, BSD, Darwin (su cui è basato Mac OS X) UNIX riveste un ruolo importante nell’ambiente di rete Filosofia Opern Source Ottimo “oggetto didattico” LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Sistema aperto ed elaborazione distribuita (1) Unix è predisposto per comunicare facilmente con altri sistemi e ad essere interconnesso con altre macchine Lo scopo è di operare su risorse non più centralizzate su un unico grosso sistema, ma distribuite su più macchine di media potenza La configurazione del sistema e i formati utilizzati per i suoi file sono aspetti noti e documentati (aperti) Chiunque viene messo nelle condizioni di poter intervenire su di essi adattando il funzionamento e la configurazione del sistema alle proprie specifiche esigenze LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Sistema aperto ed elaborazione distribuita (2) Soprattutto nelle versioni più recenti le caratteristiche di Unix si sono via via uniformate allo standard Posix (Portable Operating System Interface for Unix) Inoltre, Unix realizza alcuni dei più diffusi servizi e protocolli di comunicazione della rete Internet, rendendo possibile una facile integrazione di sistemi Unix all'interno di una rete LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Il Kernel Unix è basato su un nucleo (il kernel) che è strettamente legato all’hardware del computer e che gestisce → → → la comunicazione di basso livello con la macchina l’esecuzione dei programmi l’uso e la condivisione o la protezione delle risorse del sistema Il resto del sistema è costituito da una serie di moduli aggiuntivi finalizzati alla gestione dei vari sottosistemi che completano l’ambiente operativo → il riconoscimento degli utenti, la visualizzazione a video, l’input da tastiera, l’esecuzione dei comandi impostati dall’utente, la posta elettronica, la stampa, ecc. LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Sistema multiutente Più utenti possono interagire contemporaneamente (da terminali diversi) con il sistema, che evita interferenze tra le attività dei vari utenti. All'interno del sistema ogni utente è individuato univocamente da un nome logico (lo username). Inoltre, gli utenti sono suddivisi in gruppi, ciascuno individuabile univocamente mediante il suo nome (il groupname). In ogni sistema è definito l'utente root, che rappresenta l'amministratore di sistema, e che, in generale, non ha alcuna limitazione nell'accesso alle risorse del sistema stesso. LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Sistema multiprogrammato (multitasking) Il suo nucleo può supportare la contemporanea esecuzione di più processi (task) gestiti a divisione di tempo Il sistema operativo a controllare che la CPU ripartisca equamente le sue prestazioni tra tutti i processi attivi Quando un processo va in crash i restanti processi e l’intero sistema non subiscono alcun danneggiamento e possono proseguire senza conseguenze i compiti loro assegnati LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Gestione della memoria virtuale Il sistema di gestione della memoria in Unix si basa su paginazione e segmentazione. Queste caratteristiche consentono ad ogni processo di indirizzare un'area di memoria di dimensioni eventualmente superiori a quelle della memoria centrale effettivamente disponibile LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Un sistema portabile Ogni modulo è in genere “portabile”, cioè è possibile adattarlo quasi senza nessuna modifica sostanziale ed utilizzarlo su macchine completamente diverse, corredate del loro specifico kernel Unix è un sistema operativo aperto e facilmente trasportabile su hardware diversi La possibilità da parte di chiunque di sviluppare moduli aggiuntivi per il sistema operativo ha fatto sì che oggi possiamo disporre di una grande varietà di Unix differenti, utilizzabili su piattaforme diverse Grazie all'impiego del linguaggio C nella realizzazione del sistema, esso gode di un'elevata portabilità, ed è oggi disponibile su una vasta gamma di architetture; LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Ambiente di sviluppo per programmi "C" Unix mantiene tuttora uno stretto legame con il linguaggio di programmazione “C” Questa relazione si manifesta anche nella disponibilità all'interno delle utilità di sistema di un insieme piuttosto ricco di strumenti per lo sviluppo di applicazioni in “C” → tra i quali il compilatore cc LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Diritti e attributi (1) Gli utenti Unix non hanno tutti gli stessi diritti Ogni utente è identificato univocamente mediante uno username Gli utenti sono distribuiti in più gruppi (ogni utente fa parte di almeno un gruppo) Utente privilegiato (root) che rappresenta l’amministratore del sistema (system manager) - può modificare la configurazione dell’intero sistema - ha accesso totale al sistema LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Diritti e attributi (2) Ad ogni utente viene assegnata una propria home directory nel filesystem della macchina. Ad utenti differenti corrispondono home directory diverse (di solito hanno lo stesso nome dell’utente). Ogni file nel filesystem ha un proprietario che, mediante un apposito comando, ne stabilisce le modalità d’uso (i diritti di accesso) per se stesso e per gli altri utenti del sistema. E’ possibile inotre stabilire i diritti di lettura, scrittura ed accesso, per ogni directory. Infine è possibile stabilire i diritti di lettura, scrittura ed esecuzione per file binari contenenti le applicazioni (programmi). LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Uno sguardo al filesystem L’insieme dei supporti di memorizzazione, fisici o virtuali, collegati al sistema (in gergo: montati sul sistema). Esiste un’unità (disco) principale (root, radice, da non confondersi con lo username del system manager) a cui vengono “agganciate” come sottodirectory tutte le altre unità: - hard disk - unità di memorizzazione di massa - volumi condivisi via rete attraverso appositi protocolli L’insieme di tutte le unita` di del filesystem memorizzazione (volumi), accorpate in un’unica grande struttura ad albero, costituiscono il filesystem. LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Il contenuto delle directory… (1) /bin Contiene molti dei file binari (eseguibili) presenti sul sistema. /dev E’ una directory molto importante che contiene i puntatori ai device driver delle unità hardware installate sul sistema. Sono alcune estensioni del kernel che permettono al sistema di gestire le unità ad esso collegate. Ad esempio il file /dev/ttyS0 gestisce l’input/output attraverso il primo terminale collegato al sistema, mentre /dev/console gestisce la console del sistema. /dev/null è l’unità “nulla”, che risulta assai utile in alcune situazioni. /etc Contiene una serie di file che non trovano collocazione migliore in altre directory; sono per lo più file di configurazione generale del sistema. /home Contiene le home directory degli utenti. LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Il contenuto delle directory… (2) /lib Contiene le “librerie” di sistema, dei file che contengono parte di codice eseguibile e che vengono utilizzati per la compilazione di applicazioni. Questo consente di ridurre la dimensione dei programmi, inserendo nelle librerie parti di codice comuni a più applicazioni. /proc E’ una directory piuttosto particolare: i file che contiene non sono memorizzati su disco, ma direttamente nella memoria dell’elaboratore; contengono i riferimenti ai vari processi attivi nel sistema e le informazioni utili per potervi accedere. /sbin Contiene i file eseguibili (“binari”) riservati all’amministratore del sistema. /tmp E’ la directory temporanea di default. Spesso le applicazioni devono scrivere dei dati su un file temporaneo, che al termine dell’esecuzione verrà cancellato; in questi casi spesso usano la directory /tmp, che è sempre presente sui sistemi Unix. LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Il contenuto delle directory… (3) /usr Contiene numerose sottodirectory molto importanti per il sistema: nulla di ciò che è contenuto sotto la directory /usr è di vitale importanza per il funzionamento della macchina, ma spesso è proprio sotto /usr che vengono collocate tutte quelle cose che rendono utile il sistema. /usr/X11 Contiene ciò che riguarda l’interfaccia grafica X Window. /usr/bin Altri eseguibili (file binari). /usr/include Contiene i file include per i programmi in linguaggio C relativi alle librerie installate sul sistema. /usr/lib Altre librerie di sistema. /usr/local Contiene file tipici della nostra macchina; tipicamente applicazioni installate successivamente al sistema operativo. /usr/man Contiene le pagine di manuale (l’help on-line del sistema operativo Unix). LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Il contenuto delle directory… (4) /var Contiene diversi tipi di file il cui contenuto varia con una frequenza elevata; i file presenti in queste directory vengono gestiti da altri programmi attivi sul sistema. /var/log Contiene il “registro storico” (i file di log) degli eventi accaduti sul sistema e tracciati da alcuni dei programmi attivi sul sistema stesso. /var/mail Contiene i file con le mailbox di posta elettronica degli utenti del sistema, con i messaggi di posta elettronica giacenti e non ancora letti dai rispettivi destinatari. /var/spool Contiene i file in attesa di essere elaborati da altri programmi, come ad esempio la coda di stampa e la coda dei messaggi di posta elettronica in uscita. LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Gli standard Standard di riferimento per gli sviluppatori di sistemi UNIX: → → BSD (Berkeley System Distribution) UNIX System V (noto anche come SVR4 e probabilmente il più diffuso) I sistemi operativi open source Unix di tipo BSD più noti sono → → → → FreeBSD (http://www.freebsd.org) NetBSD (http://www.netbsd.org) Open BSD (http://www.openbsd.org) Darwin (su cui si fonda il sistema operativo della Apple, Mac OS X; http://www.opendarwin.org, http://www.gnu-darwin.org, http://developer.apple.com/darwin/) Sulla versione UNIX System V sono basati invece: → → → → → Linux (http://www.linux.org/) IBMAIX (http://www.ibm.com/aix) Sun Solaris (http://www.sun.com/solaris) HP UX di Hewlett Packard (http://www.hp.com/products1/unix/operating/) … molti altri LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO PANORAMICA SULLE DISTRIBUZIONI GNU/LINUX LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Cos’è una distribuzione GNU/Linux consiste in: - un kernel (Linus Torvalds, Agosto 1991), - una collezione di software open-source (per la maggior parte opera del progetto GNU, 1984). Ogni software è modificabile da tutti sotto GPL (GNU Public License) o altre licenze derivate. Aziende e community “confezionano” in CD, DVD e/o repository on-line le loro versioni del kernel e di diversi applicativi. Queste “confezioni” sono chiamate distribuzioni. LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Differenze tra le distribuzioni Le distribuzioni GNU/Linux si distinguono per: - la tipologia di utente a cui sono destinate: - power user/“smanettone”, utente normale, utente alle prime armi (titubante) - la tipologia di utilizzo: - desktop, server, utilizzo occasionale, emulazione da Windows - la gestione del software: - compilazione a partire dai sorgenti - gestione a pacchetti (con gestione delle dipendenze): RPM (Red Hat based), deb (Debian based). -LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Tipologia di utente Utente “smaneƩone” → Slackware, Gentoo, Debian Tool di configurazione tipicamente testuali Utente “normale” → Ubuntu, Fedora, Red Hat, Suse, Mandriva Tool di configurazione grafici e user friendly (Adept, Synaptic, Anaconda, YaST, Drake, tool del desktop manager KDE o Gnome) Utente “Ɵtubante” → Knoppix, Suse Live, Mandriva Live, Ubuntu Non necessitano di configurazione per l’utilizzo Live o utilizzano tool grafici LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Tipologia di utilizzo Desktop → Ubuntu, Fedora, Suse, Mandriva Server → Debian, Ubuntu, Red Hat Utilizzo occasionale → Knoppix, Suse Live, Mandriva Live, Ubuntu Emulazione da Win → Cygwin, qualsiasi distro mediante VMWare, VirtualBox, VirtualPC o altri software per la gestione di macchine virtuali LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Gestione del software Per installare dei programmi su Linux esistono vari modi: - compilare il sorgente, pratica che può essere complessa ma è utile in casi particolari; - utilizzare pacchetti (packages) che contengono i programmi già compilati e pronti per l'uso, facilitando e standardizzando la gestione del software sul sistema. Compilazione da sorgenti (configure, make, make install) → Slackware, Gentoo Pacche( deb (apt−get, apt−cache, dselect) → Debian, Ubuntu Pacchetti RPM (rpm, urpmi) → Red Hat, Fedora, Suse, Mandriva LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Distribuzioni più diffuse (1) Arch Linux - È leggera, veloce, estremamente scalabile e adattabile alle proprie esigenze. Ottimizzata per i686 e X86-64. Backtrack - Offre tools per fare test di penetrazione. Fino alla versione 3.0 derivava dalla distro WHAX, dalla versione 4.0 è invece basata su Ubuntu. CentOS - È una distribuzione basata sui sorgenti di Red Hat Enterprise Linux, quindi uguale ad essa in tutto e per tutto se non per i loghi e il nome che vengono cambiati in quanto marchi registrati. È usata per lo più in ambito server. Debian - Offre un ottimo sistema di gestione dei pacchetti software (in formato deb), compilati per 11 architetture differenti: Alpha, AMD64, ARM, HP PA-RISC, Intel x86, Intel IA-64, MIPS (big endian), MIPS (little endian), PowerPC, IBM S/390, SPARC. Viene definita per questo "il sistema operativo universale". Ha un'installazione disponibile sia in modalità testuale che grafica. LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Distribuzioni più diffuse (2) Fedora - Distribuzione non commerciale sponsorizzata da Red Hat. Piuttosto curata nell'aspetto, viene aggiornata frequentemente con le ultime novità. Il sistema di pacchettizzazione è basato su RPM Package Manager e l'installazione è disponibile sia in modalità testuale che grafica. Gentoo Linux - Distribuzione non commerciale basata sui sorgenti che permette di ottimizzare e rendere estremamente flessibile il sistema. Implementa un sistema di porting derivato da *BSD. L'installazione avviene manualmente, seguendo l'apposito manuale oppure attraverso l'installer del livecd. Ulteriori punti di forza della distribuzione sono l'ottima documentazione e la comunità molto disponibile. Knoppix - La distribuzione live CD più famosa. Nata per uso forense, deriva da Debian. Molto indicata per i principianti, permette di avere un sistema completo avviabile direttamente da CD-ROM o DVD che permette, tra i vari usi, l'utilizzo dimostrativo, come tool di diagnostica, come test di compatibilità hardware, ecc. Presenta alcune varianti come Eduknoppix. Linspire - Era un distribuzione commerciale derivata da Debian che puntava alla facilità d'installazione e d'utilizzo anche da parte di principianti. LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Distribuzioni più diffuse (3) GNOME 2.20 desktop. Mandriva - Conosciuta come Mandrake fino al 2005, anno in cui la Mandrakesoft ha acquisito Conectiva. È una tra le distribuzioni più diffuse e maggiormente orientate all'utente desktop. È distribuita sia in forma gratuita che come prodotto commerciale (in questo caso include alcuni pacchetti proprietari), con nuove release a cadenza approssimativamente annuale. Ha un sistema di pacchettizzazione basato su RPM. Mint - Derivata da Ubuntu, comprende alcuni software personalizzati per installazione e gestione, un menù principale che richiama quello di Windows Vista, e comprende codec multimediali preinstallati per DVD, MP3 ecc. OpenSUSE - È una distribuzione non commerciale nata dall'apertura allo sviluppo comunitario di SuSE. Puppy - Distribuzione molto leggera, disponibile in versione Live cd, ed adatta a pc poco potenti o datati, occupa poche risorse e spazio su disco. Se la quantità di RAM è sufficiente (256 MB o più), può girare integralmente in memoria. LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Distribuzioni più diffuse (4) Red Hat Linux Enterprise - È la distribuzione commerciale più diffusa. Leggera, non viene aggiornata alle ultime novità ma predilige versioni di kernel e componenti stabili e collaudate. Gli sviluppatori di Red Hat hanno realizzato il diffuso sistema di pacchetti RPM. Sabayon - Sabayon è una distro basata su Gentoo che si caratterizza per la compresenza di due package manager (binario e sorgente). È disponibile in diverse versioni con KDE, GNOME, XFCE, LXDE, Enlightenment, Fluxbox. Slackware - Viene spesso definita come la distribuzione più "pura" dal punto di vista degli standard GNU Linux. Possiede un sistema di gestione dei pacchetti molto rigido con una relativa scarsità di software precompilato. SLAX - Deriva direttamente da Slackware e ne conserva le caratteristiche di velocità, stabilità, leggerezza e ampia configurabilità in base alle varie esigenze del singolo utente. Adotta un approccio modulare avanzato. SuSE - Celebre distribuzione europea, molto usata a livello aziendale, ma rivolta anche all'utente Desktop. Anch'essa basata su RPM, è un prodotto commerciale. È basata sul lavoro del progetto OpenSUSE. LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO Distribuzioni più diffuse (5) Ubuntu - Distribuzione derivata da Debian, è salita alla ribalta per la facilità d'installazione e d'utilizzo e per la disponibilità di frequenti aggiornamenti della versione stabile. Supporta i pacchetti Debian e il desktop GNOME. Esistono numerose varianti, tra cui Kubuntu, Xubuntu, Lubuntu ed Edubuntu. Secondo una statistica relativa al mese di dicembre 2010 risulta la distribuzione più diffusa. LABORATORIO DI SISTEMI OPERATIVI - ROMINA ERAMO