42
1 Lezione T11 Virtual File System Sistemi Operativi (9 CFU), CdL Informatica, A. A. 2013/2014 Dipartimento di Scienze Fisiche, Informatiche e Matematiche Università di Modena e Reggio Emilia http://weblab.ing.unimo.it/people/andreolini/didattica/sistemi-operativi

Lezione T11 Virtual File System - weblab.ing.unimore.it · 4 Che cosa è il Virtual File System (Componente del kernel) Il Virtual File System (VFS) è un sottosistema del kernel

Embed Size (px)

Citation preview

1

Lezione T11Virtual File SystemSistemi Operativi (9 CFU), CdL Informatica, A. A. 2013/2014Dipartimento di Scienze Fisiche, Informatiche e MatematicheUniversità di Modena e Reggio Emiliahttp://weblab.ing.unimo.it/people/andreolini/didattica/sistemi-operativi

2

Quote of the day(Meditate, gente, meditate...)

“In UNIX, everything is a file; if something is not a file, it is a process.”

Ken Thompson (1943-)ProgrammatoreIl padre dei SO UNIX e Plan 9Ideatore dei linguaggi B e Go

3

IL VIRTUAL FILE SYSTEM

4

Che cosa è il Virtual File System(Componente del kernel)

Il Virtual File System (VFS) è un sottosistema del kernel. In Linux, esso è implementato in tutti i file di primo livello contenuti nella directory $LINUX/fs.

5

A cosa serve il Virtual File System(Fornisce una visione omogenea, gerarchica, di file e directory)

Il VFS fornisce una visione omogenea, gerarchica, indipendente dai dispositivi.Visione di cosa? Del contenuto informativo (organizzato per file e directory) ottenuto da:

periferiche hardware locali (dischi, CD, chiavette, …).periferiche hardware remote (file system di rete).kernel (file system virtuali per debug, statistiche, …).

6

A cosa serve la visione omogenea?(Provate a scambiare due hard disk in Windows...)

Si supponga di avere mountpoint con nomi direttamente associabili alle periferiche.Esempio: Windows.

Primo disco SATA: “C:\”.Secondo disco SATA: “D:\”.Terzo disco SATA: “E:\”.

Si scriva un'applicazione che fa riferimento a file contenuti in “D:”.Si scambino di posto il secondo ed il terzo disco.

→ L'applicazione non accede più ai file.

7

Uno schema(File system virtuali, fisici locali, fisici remoti)

User

Kernel

Hardware

ApplicazioneLibreria del C

I/O

Chiamata di sistema

fread()

read()

Virtual File System

Lettura

sys_read()

vfs_read()

RAM Discointerno

Discoesterno

Discoremoto

/procfile system

EXT4file system

VFATfile system

NFSfile system

8

Compiti del Virtual File System(Risoluzione dei percorsi e redirezione al sottosistema opportuno)

Il VFS decompone il percorso di un file nelle sue componenti (path lookup) ed individua i dispositivi in cui queste si trovano.Il VFS gestisce descrittori di file rappresentanti i file aperti dall'applicazione. Il descrittore punta ad informazioni sulle operazioni possibili nel file system.

9

Struct inode(Il File Control Block)

Nei sistemi UNIX (pertanto, anche in GNU/Linux), il FCB è rappresentato da una struttura dati impacchettata in un blocco, detta inode.Nel caso di EXT4, l'inode è definito tramite la struttura dati struct ext4_inode nel file:

$LINUX/fs/ext4/ext4.hL'inode contiene informazioni statiche sul file.

10

Inode del file system e del VFS(AKA “perché è meglio portarsene appresso due, di inode”)

File system diversi possono avere inode in formato diverso. Per tale motivo il VFS definisce un unico formato di inode, valido per tutti i file system: struct inode, definita nel file:

$LINUX/include/fs.hTale struttura è creata al primo uso di un file, è riempita con il contenuto dell'inode su disco ed è mantenuta in memoria centrale per motivi di efficienza.

11

Struct file(Rappresenta un file aperto)

La struct file rappresenta un file aperto:$LINUX/include/fs.h

Contiene informazioni dinamiche sul file:puntatore all'inode del VFS.posizione nel file.modalità di apertura.il percorso del file.puntatori alle operazioni possibili sul file.

12

Struct dentry(Rappresenta un elemento di directory)

La struct dentry rappresenta un elemento del percorso di un file:

$LINUX/include/dcache.hAd esempio, il file /bin/vi è composto da due dentry: /bin (directory) e vi (file).La prima volta che il kernel scandisce tale percorso, costruisce le due dentry e le inserisce in un albero in memoria centrale (dentry cache).

13

Path name lookup(Se le dentry sono in RAM, è fulmineo)

Perché mantenere le dentry in RAM? Perché l'operazione di analisi del percorso di un file (path name lookup) è frequente e onerosa.Con una dentry cache, il path name lookup si riduce ad una navigazione di un albero binario in memoria centrale.

Implementazione in $LINUX/fs/namei.c.Path name lookup implementato dalla funzionevfs_path_lookup().

14

Struct file_operations(Rappresenta le operazioni possibili su un file)

La struct file_operations è un array di puntatori a funzione rappresentante le operazioni possibili su un file:

$LINUX/include/fs.hOperazioni: lettura, scrittura, apertura, chiusura, flush, …

15

Struct dentry(Rappresenta un elemento di directory)

La struct dentry rappresenta un elemento del percorso di un file:

$LINUX/include/dcache.hAd esempio, il file /bin/vi è composto da due dentry: /bin (directory) e vi (file).La prima volta che il kernel scandisce tale percorso, costruisce le due dentry e le inserisce in un albero in memoria centrale (dentry cache).I lookup successivi sono effettuati in memoria.

16

Struct dentry_operations(Rappresenta le operazioni possibili su un elemento del percorso)

La struct dentry_operations è un array di puntatori a funzione rappresentante le operazioni possibili su un elemento del percorso:

$LINUX/include/dcache.hOperazioni: calcolo hash sul nome, confronto con stringa, eliminazione dalla cache, individuazione del mountpoint, …La struttura è impacchettata in 64 byte, in modo tale da occupare una intera linea di cache hardware Accesso fulmineo.→

17

L'ALBERO DELLE DIRECTORY

18

Filesystem Hierarchy Standard(Come sono organizzate le directory di un SO GNU/Linux?)

Le directory del file system di root sono organizzate secondo uno standard ben preciso: Filesystem Hierarchy Standard (FHS).http://www.linuxfoundation.org/collaborate/workgroups/lsb/fhs

19

Organizzazione ad alto livello(10000 feet view)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

20

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

La directory /bin contiene i comandi necessari ad un sistema di base testuale.

21

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

La directory /sbin contiene i comandi di amministrazione (utenti, periferiche) nonché l'eseguibile init che avvia i servizi.

22

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

La directory /boot contiene dati relativi al processo di boot:immagini del kernel (e relative configurazioni), configurazione del boot loader.

23

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

La directory /dev contiene i file speciali di dispositivo (device special file). Il colloquio a basso livello con le periferiche avviene interagendo con tali file.

24

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

La directory /etc contiene la configurazione di sistema (valida per tutti gli utenti) relativa ai software installati nella macchina.

25

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

La directory /home contiene gli spazi di lavoro degli utenti normali, organizzati in directory.studente

studente

26

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

La directory /lib contiene le librerie (dinamiche e statiche) necessarie all'avvio del sistema.

→ Libreria del C, load dinamico, moduli del kernel.

27

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

La directory /mnt è il mount point classico, statico per periferiche esterne nei sistemi UNIX. Oggi è obsoleta e sostituita dalla cartella /media.

28

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

La directory /opt contiene un root file system (con directory bin, sbin, lib, usr, …) destinato a software di terze parti non free e binario.

29

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

La directory /proc contiene informazioni statistiche sulle risorse hardware e software, generate al volo dal kernel.

30

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

La directory /root contiene lo spazio di lavoro dell'utente root (amministratore).

31

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

La directory /run è un file system contenuto in RAM. Esso contiene file volatili associati all'esecuzione di un servizio.

32

File volatili associati all'esecuzione?(Eh?)

Ad esempio, gli script di avvio e terminazione di Apache2 (un Web server) devono sapere se il server è attivo oppure no e, nel caso, che PID ha.Tali script gestiscono un file contenente il PID del processo padre: /run/http/httpd.pid.Quando viene eseguito lo script di terminazione, viene letto il PID in tale file ed ucciso il processo esatto.

33

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

La directory /tmp è un file system contenuto in RAM. Esso contiene file temporanei aperti dalle applicazioni e scartati ad ogni riavvio.

34

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

La directory /usr contiene un root file system (con directory bin, sbin, lib, usr, …) destinato al software non necessario all'avvio della macchina.

→ Desktop grafico, suite da ufficio, Web browser, giochi, …

35

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/varLa directory /usr/local contiene un root file system (con directory bin, sbin, lib, usr, …) destinato al software

non necessario all'avviodella macchina.compilato ed installatolocalmente da archivi UNIX.

/local

36

Eseguibili di sistema(Servono a far partire la macchina e a gestire periferiche)

//bin

/boot/boot

/dev

/etc

/home

/lib

/mnt/opt /proc

/root

/run

/sbin

/tmp

/usr

/var

La directory /var contiene file il cui contenuto è supposto variare (crescere) nel tempo.

→ File di log, stato del gestore dei pacchetti, ...

37

USI DEL VIRTUAL FILE SYSTEM

38

Clone di dischi(One-liner equivalente all'uso di Ghost)

Il comando seguente:dd if=/dev/sda of=/dev/sdb

effettua una copia blocco per blocco del disco identificato da /dev/sda nel disco identificato da /dev/sdb.

→ Strumento per la clonazione di dischi.

39

Masterizzazione di CD (DVD)(One-liner equivalente all'uso di Nero)

Il comando seguente:dd if=img.iso of=/dev/cdrw

effettua una copia blocco per blocco dell'immagine img.iso nel CD inserito nell'unità /dev/cdrw.

→ Strumento per la masterizzazione di CD.

40

Analisi del contenuto di una partizione(Quali stringhe sono scritte sul disco?)

Il comando seguente:strings /dev/sda2

legge la partizione identificata da /dev/sda2 ed estrae le sequenze di valori identificanti

→ Strumento per la masterizzazione di CD.

41

Visione di un terminale(Cosa sta scrivendo un utente sul terminale?)

Il comando seguente:watch -n 1 fold -w 80 /dev/vcs2

stampa ogni secondo la schermata del secondo terminale (tty2).

→ Strumento di monitoraggio dei terminali.Si dia il comando precedente e si vada sul terminale TTY2 con Ctrl-Alt-F2. Si digitino delle stringhe e si osservi il risultato del primo comando.

42

Statistiche di un processo(Cosa sta scrivendo un utente sul terminale?)

Per un processo di PID p il kernel crea la directory /proc/p contenente informazioni statistiche.Ad esempio, è possibile vedere tutti i file aperti da un processo tramite il seguente comando:

ls -l /proc/p/fd