Struttura di Unix e di Linux - Dipartimento di Ingegneria dell

Il sistema Linux: principi di progettazione
 Linux è un sistema multiutente, multitasking dotato di una




serie completa di strumenti compatibili con UNIX.
Il suo file system concorda con la tradizionale semantica
UNIX, e implementa completamente il modello standard di
networking di UNIX.
I principali obiettivi della progettazione sono la velocità,
l’efficienza, la flessibilità e la standardizzazione.
Linux è progettato per essere conforme ai documenti
POSIX più importanti; alcune distribuzioni di Linux hanno
ottenuto la certificazione ufficiale POSIX.
L’interfaccia di programmazione di Linux concorda con la
semantica UNIX di SVR4, piuttosto che con i dettami della
BSD.
1.1
I livelli di un sistema UNIX
User
Interface
1.2
Componenti di un sistema UNIX
 Come la maggior parte delle implementazioni di UNIX,
Linux è composto da tre blocchi di codice principali:
 Programmi di utilità standard
 Libreria standard
 Kernel
 I programmi di utilità standard realizzano specifici compiti di
gestione.
 Shell
 Comandi per la gestione di files e cartelle
 Filtri
 Compilatori
 Editors
 Comandi per l’amministrazione del sistema
 …
1.3
La shell di un sistema UNIX
 I sistemi UNIX hanno una Graphical User Interface (Linux
usa KDE, GNOME …), ma i programmatori preferiscono
scrivere direttamente i comandi.
 Shell: il processo utente che esegue i programmi (interprete
dei comandi).
 L’utente digita i comandi.
 La shell legge i comandi (li legge dallo standard input) e li traduce al
sistema operativo.
 Si possono eseguire programmi esterni (es. netscape) o
comandi interni alla shell (es. cd).
 Sono disponibili vari tipi diversi di shell:
 Bourne shell (sh), C shell (csh), Korn shell (ksh), TC shell (tcsh),
Bourne Again shell (bash).
 L’amministratore del sistema fornisce all’utente una shell di
default, ma l’utente può cambiare tipo di shell.
1.4
La shell di un sistema UNIX
 Esempi di comandi:
 $ cd /usr/src/linux
 $ more COPYING
 $ cp file1 file2
 $ head –20 file
 $ head 20 file
 $ ls *.c
 $ ls [abc]*
 $ sort < file1 > file2
 Stringhe di comandi multipli in uno script di shell:
 $ sort < file1 > file2; head –30 < file2 ; rm temp
 $ sort < file | head –30
 $ grep org CREDITS | sort | head –20 | tail –5 > file
1.5
La shell è qualcosa di più ...
 La shell è programmabile, cioè è possibile realizzare degli
scripts di shell.
 Uno shell script è un file contenente una sequenza di
comandi indirizzati al sistema operativo che facilita
l’esecuzione ripetuta dei comandi contenuti senza bisogno
che siano faticosamente riscritti ogni volta che devono
essere eseguiti.
 Se c’è una ben precisa lista ordinata di comandi del sistema
operativo che l’utente deve eseguire ripetutamente, ad
esempio, subito dopo ogni login o subito prima di ogni
logout, allora la maggior parte dei sistemi operativi ha la
possibilità di registrare la lista dei comandi in un file, che poi
può essere eseguito automaticamente ad ogni login o
logout, oppure può essere invocato dall’utente tramite
l’esecuzione di un singolo comando che dà luogo
all’esecuzione dell’intero contenuto del file, il quale può
contenere tanto un solo comando del sistema operativo
quanto migliaia.
1.6
Gli scripts di shell
 Esempio:
 #!/bin/csh
clear
echo Menuset
stop=1
while ($stop>0) cat << ENDOFMENU
1: stampa data
2: stampa la directory corrente
3: esci
ENDOFMENU
echo -n Scegli il comando
set reply=$<
switch ($reply)
case 1 :
date
breaksw
case 2 :
pwd
breaksw
case 3 :
set stop=0
breaksw
default:
echo scelta sbagliata riprova
breaksw
endsw
end
exit 0
1.7
Programmi di utilità UNIX
Alcuni dei più comuni programmi di utilità di UNIX richiesti dallo standard POSIX.
1.8
La libreria standard
 Una chiamata di sistema (o system call) è il metodo che il processo utente usa




per richiedere un’azione al SO.
I programmi realizzano le chiamate di sistema per mezzo delle trap.
Istruzioni trap:
 Passa dalla modalità utente alla modalità kernel.
 Controlla la correttezza dei parametri della chiamata.
 I comandi sono eseguiti come se fossero direttamente invocati dal sistema
operativo.
 Torna in modalità utente.
Poichè è impossibile scrivere una trap in C, viene fornita una libreria standard
con una procedura per ogni system call. Queste procedure sono scritte in
assembler e vengono richiamate utilizzando codice scritto in C. Ad esempio, un
programma C per realizzare la chiamata di sistema read, si appoggia sulla
procedura read della libreria standard.
Pertanto, la standard library definisce un insieme standard di funzioni tramite le
quali le applicazioni interagiscono col kernel; tale insieme di funzioni
implementa gran parte delle funzionalità del sistema operativo che così non
hanno bisogno di essere richiamate direttamente dal kernel.
POSIX stabilisce quali sono le procedure delle librerie che il sistema deve
fornire, i loro parametri e i loro compiti.
1.9
Il Kernel
 Il kernel è responsabile del mantenimento della visione astratta del
sistema operativo.
 Fornisce le principali funzioni della macchina virtuale (system calls,
interrupt e traps).
Struttura approssimativa di un generico kernel UNIX.
1.10
Il Kernel
 Il kernel di Linux utilizza un modello monolitico.
Non si serve del “più nuovo” modello client-server
(cioè micro-kernel). La principale ragione di questa
scelta è il miglioramento delle prestazioni.
 Il codice del kernel viene eseguito in modalità kernel con
pieno accesso a tutte le risorse fisiche del calcolatore.
 Tutto il codice del kernel e i dati sono contenuti in un
unico indirizzo di memoria.
 Sebbene il kernel venga eseguito come un singolo
processo con un singolo indirizzo, il kernel di Linux
usa la modularità.
1.11
File System
 I files di Linux sono organizzati secondo una gerarchia di
etichette, generalmente nota come una struttura a
directories. I files referenziati da queste etichette possono
essere di tre tipi:
 Files ordinari, contenenti una sequenza di bytes che generalmente
corrispondono a codice (programmi) o a dati.
 Files directory, che sono immagazzinati su disco in un formato
speciale e costituiscono l’ossatura del file system.
 Files speciali, che corrispondono a periferiche quali stampanti o
dischi.
 Agli utenti, il file system di Linux appare come un albero di
directories gerarchico soddisfacente la semantica UNIX.
1.12
File System
 / è la directory root; punto di riferimento per tutte le
directories. Ogni file possiede un pathname non
ambiguo:
 /home/user1/papers.
1.13




Alcune directories che si trovano nei sistemi
UNIX
/bin Programmi di sistema essenziali per Linux.
/boot Tutti i files richiesti per avviare Linux.
/dev Tutti i devices hanno qui i propri files corrispondenti.
/etc Tutti i files di configurazione per il diverso software
sono immagazzinati qui. E’ quantomai opportuno non
mettersi a giocare con questa cartella!
 /home
Tutti gli utenti avranno una directory personale in
questa directory. Se la tua id è rossi, la tua directory
personale (detta home) sarà probabilmente /home/rossi.
 /lib
Le librerie richieste dalle applicazioni di sistema.
(Esattamente come DLL in Windows).
 /lost+found
Quando il controllo del disco trova files che
sono danneggiati o che non sono legati ad alcuna
directory, essi vengono ripristinati in questa directory.
Questi danni sono in gran parte dovuti a uno shutdown non
corretto.
1.14
Alcune directories che si trovano nei sistemi
UNIX
 /mnt







La directory in cui periferiche e altri file systems
vengono montati.
/opt
La directory in cui è installato software aggiuntivo
(optional).
/proc
proc alloggia uno pseudo-file system. Il suo
contenuto in realtà non esiste in alcuna parte del disco, ed
è reso disponibile solo quando si entra in questa directory
e si consulta qualche file.
/root La home per l’amministratore: root.
/sbin
La directory contenente i programmi dell’amministratore di sistema.
/tmp La directory in cui i files temporanei vengono creati
e conservati. Tutti gli utenti possono salvare files qui.
/usr Tutto ciò che è collegato agli utenti.
/var Files il cui contenuto varia frequentemente si trovano
in questa directory.
1.15
Alcune directories che si trovano nei sistemi
UNIX
 /usr
Tutto ciò che è collegato agli utenti.
 /usr/bin Contiene programmi degli utenti.
 /usr/include
I files di intestazione richiesti dai programmi per la






compilazione.
/usr/lib Le librerie richieste dalle applicazioni dell’utente.
/usr/local Files specifici di questa particolare macchina.
/usr/sbin I programmi dell’utente amministratore.
/usr/share
Informazioni che possono essere condivise dalla
maggior parte degli utenti.
/usr/src Il codice sorgente per il kernel di Linux.
/usr/X11R6 Files necessari per il sistema X Window.
 /var
Files il cui contenuto varia frequentemente si trovano
in questa directory.
 /var/log I log-files del sistema.
 /var/spool Directories per mail, news, stampe e altro.
1.16
Montare un file system
 Separate file systems
 After mounting
Prima del
montaggio
Dopo il
montaggio
1.17