Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Direttori
Struttura
Direttori a un livello
File (dati)
Sistemi Operativi – Stefano Quer 5
Direttori a un livello
Directory entry
File (dati)
Sistemi Operativi – Stefano Quer 6
Direttori a un livello
Prestazioni
Efficiency
Struttura facilmente comprensibile e gestibile
Gestione del file system semplice ed efficiente
Naming
I file devono avere nomi univoci
Presenta limiti evidenti all’aumentare del numero di
file memorizzati
Grouping
La gestione dei file di un utente singolo è complessa
La gestione di utenti multipli è praticamente
impossibile
Sistemi Operativi – Stefano Quer 7
Directory entry
della home di
File (dati)
user 1
Sistemi Operativi – Stefano Quer 8
Prestazioni
Efficiency
Visione del file-system "user oriented"
Ricerche semplificate e efficienti agendo su utenti
singoli
Naming
È possibile avere file con lo stesso nome purchè
appartenenti a utenti diversi
Occorre specificare un path-name per ogni file
Grouping
Semplificato tra utenti diversi
Complesso per ciascun utente singolo
Sistemi Operativi – Stefano Quer 9
Direttori ad albero
Generalizza i precedenti
I file sono contenuti in un albero
Ogni nodo/vertice può contenere come entry un
altro nodo/vertice dell’albero
tutti i direttori
gestitiallo
vengono
stessomodo
nessunelementopuò
esserecondiviso
i
innateduplicare
i file
Sistemi Operativi – Stefano Quer 10
Direttori ad albero
Elemento condiviso
Sistemi Operativi – Stefano Quer 13
riferimentoindirettoad unoggetto
Sistemi Operativi – Stefano Quer 14
Visita e ricerca
Se la entry è un link occorre accorgersene e
effettuare un indirizzamento indiretto, ovvero
"risolvere" il collegamento, utilizzandolo per
raggiungere l’entry originaria
Tramite link ogni entry del file system può essere
raggiungibile con più path assoluti (e con nomi
diversi)
assoluto cieli ● Analisi del file system (statistiche, e.g., quanti file di
path
più estensione ".c" sono presenti?) diventano molto più
complesse
Sistemi Operativi – Stefano Quer 15
Cancellazione
Occore stabilire come gestire il link e come gestire
l’oggetto riferito
● La cancellazione di un link in genere viene effettuata
in maniera immediata e non influisce sull’oggetto
originale
● Occorre però decidere come effettuare la
cancellazione dell’oggetto
o Se si cancella l’oggetto che cosa si fa dei link che lo
problemi riferiscono?
o Quando si riutilizza lo spazio ad esso riservato?
Sistemi Operativi – Stefano Quer 16
mossamigliore
interno al directory ciè
www.T
direttorio
linkoun
il link punta
ciclo ai link c
aldirectory
Sistemi Operativi – Stefano Quer 18
Presenza di un
ciclo
Sistemi Operativi – Stefano Quer 19
Allocazione
Allocazione contigua
vieneoccupato
sempreilblocco
intero
bloccougualmenteoccupatoalmassimo
es file 1kbyte
blocco
4kbyte
Sistemi Operativi – Stefano Quer 22
Allocazione contigua
Vantaggi
Strategia di allocazione molto semplice
Per ogni file si memorizzano poche informazioni
Permette accessi sequenziali immediati
Ogni blocco si trova dopo il precedente e prima del
successivo
Permette accessi diretti semplici
L’i-esimo blocco a partire dal blocco b si trova
all’indirizzo b+i-1
Sistemi Operativi – Stefano Quer 23
Allocazione contigua
Occorre ricercare uno spazio
Svantaggi libero di dimensione sufficiente
Allocazione concatenata
Allocazione concatenata
j
Vantaggi
Risolve i problemi dell’allocazione contigua
Permette l’allocazione dinamica dei file
Elimina la frammentazione esterna
Evita l’utilizzo di algoritmi di allocazione complessi
Sistemi Operativi – Stefano Quer 26
Allocazione concatenata
Svantaggi
Ogni lettura implica un accesso sequenziale ai
blocchi 1
Risulta efficiente solo per accessi sequenziali
Un accesso diretto richiede la lettura di una catena
di puntatori sino a raggiungere l’indirizzo desiderato
Ogni accesso a un puntatore implica una operazione
di lettura dell’intero blocco
costo dispazio
La memorizzazione dei puntatori maggior
dato puntatorenext
Richiede spazio
un bloccoperdo
seperdo blocchi
È critica dal punto di vista dell’affidabilità tutti i
successivi
Rende lo spazio utile minore di
critico
● Lo spazio disponibile non è più una potenza di 2
Sistemi Operativi – Stefano Quer 27
FAT
Sistemi Operativi – Stefano Quer 29
Limiti
Accesso lento ildoppiodiaccessi porcoddio
Directory
entry
FAT
Sistemi Operativi – Stefano Quer 30
Allocazione indicizzata
Allocazione indicizzata
Il direttorio contiene il solo
puntatore al blocco indice
Allocazione indicizzata
iosonodirette
Ricordare
comandi disolitoiprimi
"ls –la" 13 indiretto
e "ls –i" vi indirettodoppio
is indirettotriplo
ecosivia
Il puntatore 14 è di tipo
indiretto doppio
Hard-link
Un direttorio è una tabella che associa a ogni nome di file un i-node number
Il link da un direttorio al rispettivo i-node è detto hard-link
Lo stesso i-node number può essere individuato da più link
Sistemi Operativi – Stefano Quer 36
il direttorio si
autoindividua
hadlivecantare DIR PADRE
Directory entry del
2549 direttorio 1267
ti (nome ignoto)
e
riina
DIR FIGLIO
Directory entry
tris
di "2549 testdir"
edfiglio di1261
ognidirettoriopadre ha 2 noouiukaogrisotxodirettoriop
senqnaz.nard
dafoglia
ognidieta
link cimaalpadre
rootnon ha unhard
Sistemi Operativi – Stefano Quer 39
Directory entry
di "2549 testdir"
Ogni sotto-
direttorio
incrementa
il numero
di link del
padre di 1 !
I.jo Yair
mkdir, rmdir
eYehdir2
Creazione
opendir, readdir, closedir cancellazione
scd Visita
getewdcsp.no
ugualialla
shell
Sistemi Operativi – Stefano Quer 41
stat ()
Path di cui Struttura
ritornare le dati
#include <sys/types.h> informazioni ritornata
#include <sys/stat.h>
principalmente
la vediamo
megiioora cifacapiredi
tipoè il g
int stat (const char *path, struct stat *sb);
che
int lstat (const char *path, struct stat *sb); cima
int fstat (int fd, struct stat *sb);
S
stat ()
La funzione
lstat restituisce informazioni sul link simbolico,
non sul file puntato dal link (quando il path
individua un link)
fstat restituisce informazioni su un file già aperto
(riceve il descrittore del file invece del path)
stat ()
struct stat {
mode_t st_mode; /* file type & mode */
ino_t st_ino; /* i-node number */
dev_t st_dev; /* device number */
dev_t st_rdev; /* device number */
...
}; Tipi primitivi
stat ()
struct stat {
mode_t st_mode; /* file type & mode */
ino_t st_ino; /* i-node number */
dev_t st_dev; /* device number */
dev_t st_rdev; /* device number */
...
};
Esempio
getcwd ()
Dimensione perevitareerroridi
#include <unistd.h>
di buf bufferoverflow
Get Current
char *getcwd (char *buf, int size); Working Directory
chdir ()
#include <unistd.h>
Change
int chdir (char *path); Directory
Esempio
#define N 100
char name[N];
codicedei
comandi if (getcwd (name, N) == NULL)
vistisopra fprintf (stderr, "getcwd failed.\n");
else
fprintf (stdout, "dir %s\n", name);
if (chdir(argv[1]) < 0)
fprintf (stderr, "chdir failed.\n");
else
fprintf (stdout, "dir changed to %s\n", argv[1]);
Sistemi Operativi – Stefano Quer 49
mkdir ()
Vedere system
#include <unistd.h> call open
#include <sys/stat.h>
rmdir ()
#include <unistd.h>
#include <sys/stat.h>
Struttura dirent
struct dirent {
inot_t d_no;
char d_name[NAM_MAX+1];
...
}
Esempio
Struttura per lstat
#define N 100
... Directory "handle"
struct stat buf;
DIR *dp;
Struttura per readdir Richiesta
char fullName[N];
informazioni sul
struct dirent *dirp;
path in argv[1]
int i;
...
if (stat(argv[1], &buf) < 0 ) {
fprintf (stderr, "Error.\n"); exit (1); Se non è un
} direttorio termina
if (S_ISDIR(buf.st_mode) == 0) {
fprintf (stderr, "Error.\n"); exit (1);
In caso contrario
}
si apre il direttorio
if ( (dp = opendir(argv[1])) == NULL) {
fprintf (stderr, "Error.\n"); exit (1);
}
Sistemi Operativi – Stefano Quer 54
Esempio
Lettura direttorio
(iterando su tutte le entry)
i = 0;
while ( (dirp = readdir(dp)) != NULL) {
sprintf (fullName, "%s/%s", argv[1], dirp->d_name);
if (lstat(fullName, &buf) < 0 ) {
fprintf (stderr, "Error.\n"); exit (1);
}
if (S_ISDIR(buf.st_mode) == 0) {
fprintf (stdout, "File %d: %s\n", i, fullName);
} else {
fprintf (stdout, "Dir %d: %s\n", i, fullName);
}
i++; Richiesta
} Visualizzazione dati informazioni sulla
entry fullName
if (closedir(dp) < 0) {
fprintf (stderr, "Error.\n"); exit (1);
}
Chiusura e terminazione