welcome: please sign in

Cerca

Link Dipartimentali

Link Esterni

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.