Lab. di Sistemi Operativi Sistemi Operativi

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