• Non ci sono risultati.

File System

N/A
N/A
Protected

Academic year: 2021

Condividi "File System"

Copied!
8
0
0

Testo completo

(1)

WAIT(&STATUS);

}

Tabella degli i-node

# I-Node Tipo Blocco

2 DIR 150

3 DIR 151

4 FILE 152

Blocco 150

# I-Node Tipo

3 ETC

7 DEVICE

14 LIB

Blocco 151

# I-Node Tipo

4 PASSWD

5 SHADOW

Blocco 12

ROOT:: ………

L’esercizio chiede di completare - File Table di P

- File Table di Q

- Tabella Globale dei aperti

(2)

File Table di P

FID File

0 Stdin

1 Stdout

2 Stderr

3 2

File Table di Q

FID File

Global File Table

I-Node Table (RAM) UID Type Block

2 DIR 150

3 DIR 151

4 FILE 152

Facciamo ora la fork: copio la tabella di P in Q. Il figlio legge tre caratteri dal buffer.

FID POSIT #PROC #INODE

0 / / /

1 / / /

2 0 -> 6 1 4

(3)

0 Stdin

1 Stdout

2 Stderr

3 2

Global File Table

I-Node Table (RAM) UID Type Block

2 DIR 150

3 DIR 151

4 FILE 152

Eseguo la seconda OPEN.

FID POSIT #PROC #INODE

0 / / /

1 / / /

2 9 2 4

(4)

File Table di P

FID File

0 Stdin

1 Stdout

2 Stderr

3 2

File Table di Q

FID File

0 Stdin

1 Stdout

2 Stderr

3 2

4 3

Global File Table

I-Node Table (RAM) UID Type Block

2 DIR 150

3 DIR 151

4 FILE 152

Con la Exit viene cancellata la tabella di Q

Al termine del programma P viene cancellata la tabella di P FID POSIT #PROC #INODE

0 / / /

1 / / /

2 9 2 4

3 0 1 4

(5)

Block 20

Block 80

Block 90

Main () {

FD_1 = OPEN (“/CAT1/ALFA”,ORDNR), READ (FD_1,BUF,5);

PID=FORK();

IF (PID = = 0) {

FD_2=OPEN(“/CAT1/CAT2/BETA”,O_RDWR);

READ(FD2,BUF,5);

PID = = FORK ();

IF (PID = = 0) {

FD_1 = OPEN (“/CAT1/GAMMA”,O_RDWR);

READ (FD_1,BUF,5) WRITE(FD_1,”GOOD”,4), EXIT (0),

}

WRITE (FD_2,”BD”,3), EXIT(42),

} EXIT(0);

}

T1 T2 T3

# INODE NAME

50 BETA

60 GAMMA

WEARE….

SHEIS…

(6)

Percorso di Gamma e contenuto a T1 /CAT1/Gamma

“She is good”.

Percorso di Beta e contenuto a T2 /CAT1/CAT2/Beta

“We are bad”.

Alfa e Beta sono lo stesso file, condividono l’i-node Alpha a T3

“We are good”

File Tables all’istante T2

Indicare con L righe liberate e NE celle che non esistono più.

File Table di P FID ref

0 Stdin 1 Stdout 2 Stderr

3 10

File Table di Q FID ref

0 Stdin 1 Stdout 2 Stderr

3 10

4 11

5 12

File Table di R FID ref

0 Stdin 1 Stdout 2 Stderr

3 10

4 11

Global File Table

FID POSIT #PROC #INODE

10 5 2 50

11 0 -> 8 1 50

12 9 -> L 1 -> 0 -> L 60 -> L

(7)

blocco è da 512)

La write deve caricare 10 blocchi del file da 512 kb l’uno.

Es 4

MAIN () {

FD = OPEN (“/MIOCAT/F”,O_RDWR), PID = FORK ();

IF (PID = = 0) {

L SEEK (FD1,1022L,1), WRITE (FD1,V2,100), EXIT (0)

}

WAITPID(PID,NULL), READ(FD1,V2,100), LSEEK(FD1,-200L,1), WRITE(FD1,V3,1024);

CLOSE(FD1);

EXIT(0) }

Numero di blocchi

12, 17, 24, 13, 11 -> 5 K per blocco quindi 2,5 K massimo.

Completare tabella Dma. Non si conta il nodo della radice.

Syscall Cur Read Blocks

Written Blocks

#INT DMA

Open 0 X X 4

Lseek 1022 X X 0

Write 1122 17, 24 24 3

Read 1222 X X 0

Lseek 1022 X X 0

Write 2046 17,24,13 24,17,24 6

Close X X 13 1

N.B. IND dma deve essere la somma di read e written per read e write.

(8)

Seconda Write 24 W -> in disco 17 W <- da disco 17 -> al disco 24 <- da disco 24 W -> al disco 13 W <- da disco 6 operazioni su DMA

La close rimanda a disco il blocco aperto.

Riferimenti

Documenti correlati

– tabella associata ad ogni processo utente contenente una riga per ogni file aperto dal processo (indice = descrittore del file) con l’indirizzo della riga della tabella globale

■ Per accedere ad un file memorizzato su un’unità fisica (di qualunque tipo), è necessario creare un collegamento tra il file oggetto dell'operazione e una variabile di tipo

int lstat (const char *path, struct stat *sb);. int fstat (int fd, struct

copiando il descrittore del file da questo alla tabella dei file aperti.  Close(f) – il descrittore del file viene rimosso dalla tabella dei

 Open(f) – prende il nome del file e cerca nel dispositivo, copiando il descrittore del file da questo alla tabella dei file aperti.  Close(f) – il descrittore del file viene

• Le operazioni di lettura e scrittura su file ad accesso random fanno uso di un indice che si può spostare con le funzioni lseek (basso livello) e fseek (stream). • Ovviamente non

Calcolo dell’indirizzo fisico: a partire dall’indirizzo logico, il file system fisico individua il numero del blocco che contiene il record richiesto, in base alla lunghezza

Una conseguenza della struttura delle directory descritta e che costituisce una caratteristica peculiare dei file system dei sistemi Unix è che un inode può essere associato a più di