Allegato "esercizio2-luglio2008.txt"
Scarica 1 // array rappresentante la tabella dei cluster
2 int fat[M];
3
4 int deframmenta (int start)
5 {
6 int dim=1;
7 int succ=start;
8 int count=0;
9 bool consecutivo=true;
10 int indice=0;
11
12 // trova la dimensione del file
13 while (fat[succ] != -1)
14 {
15 // se il file è già deframmentato non ho bisogno di deframmentarlo
16 consecutivo=(fat[succ] == succ + 1) && consecutivo;
17 succ=fat[succ];
18 dim++;
19 }
20 // se il file è già deframmentato restituisco start
21 if (consecutivo)
22 return start;
23
24 // trova sequenza libera
25 for (int i=0; i<M && count<dim; i++)
26 {
27 if (fat[i] == 0)
28 {
29 count++;
30 // indice conterra' l'indice del nuovo cluster di inizio del file
31 indice=i-dim+1;
32 }
33 else
34 {
35 count=0;
36 }
37 }
38
39 // sposta il file se ho trovato lo spazio libero (count == dim)
40 for (int j=indice; j<dim && count == dim; j++)
41 {
42 if (j == dim-1)
43 fat[j]=-1;
44 else
45 fat[j]=j+1;
46 }
47
48 // cancello il file se ho trovato lo spazio libero (count == dim)
49 succ=start;
50 int tmp;
51 while (fat[succ]!=-1 && count == dim)
52 {
53 tmp=fat[succ];
54 fat[succ]=0;
55 succ=tmp;
56 }
57
58 return indice;
59 }
Allegati
Non è consentito inserire allegati su questa pagina.