Esercizio. Dato un file la cui corrispondenza tra blocchi logici e fisici sia espressa dalla seguente tabella:

 

blocco logico    0          1          2          19        20        21        22        23        24        25        26        27

blocco fisico     77        78        80        60        61        109      110      111      112      113      114      115

 

dire il contenuto del record MFT nel file system NTFS che lo descrive.

 

Soluzione

A parte le informazioni iniziali dell’MFT record:

record header, stardard info header, standard info, file name header, file name

i blocchi del file sono descritti nel modo seguente:

 

(0,3),(77,2),(80,1),(19,9),(60,2),(109,7)

 

Esercizio .  Determinare il numero di accessi al disco necessari in un sistema unix per accedere al terzo blocco dei seguenti files:

a)../../etc/passwd

b)/././home/pippo

c)../pippo/vecchi/foto.jpg

 

nell'ipotesi che la directory attuale sia /home/caio, che ogni directory occupi al massimo un blocco, e che nessuna directory né i-node sia caricato in memoria. Motivare la risposta.

 

Soluzione

Siccome nessun i-node né directory è caricato in memoria occorre caricare l’i-node e la directory attuale, quindi servono 6 accessi (nell’ipotesi che l’i.node della root sia noto) per accedere al contenuto di /home/caio.

 

1) Per ogni cambio di directory è necessario leggere l’i-nodo e il contenuto, siccomegli i-node e il contenuto della root, di home e di caio sono già caricati in memoria, bisogna solo caricare l’i-node e il contenuto di etc e quindi leggere direttamente il 3’ blocco di passwd. Quindi in totale per accedere a ../../etc/passwd servono 10 accessi al disco.

2) in questo caso accedere alla directory caio è inutile dato che si tratta di un path assoluto, inoltre accedere alla directory . non necessita di ulteriori accessi dato che si tratta della directory corrente che è già caricata. Quindi il numero di accessi è 6.

3) Come per il caso 1) il numero di accessi è 10

Esercizio. Si consideri la seguente soluzione del problema dei filosofi a cena:

 

#define N 5

semaphore mutex=1;

semaphore fork[N] = {1,...,1};

void philosopher(int i)

{

  while(TRUE) {

        think();

        down(mutex);

          down(fork[i]);

          down(fork[(i+1)%N]);

        up(mutex);

        eat();

        down(mutex);

          up(fork[i]);

          up(fork[(i+1)%N];

        up(mutex);

  }

}

 

La soluzione proposta è corretta? In caso affermativo discuterne l‘efficienza, in caso negativo spiegare il motivo.

 

Soluzione :

La soluzione è sbagliata, infatti può provocare deadlock. Infatti, nel caso il filosofo i trovi il bastoncino i o il bastoncino (i+1)%N occupati si sospende all’interno della mutua esclusione. In questo modo impedirà ad altri filosofi di entrare in mutua esclusione per acquisire o cedere i bastoncini, bloccando così tutti gli altri filosofi.