Contiguous File Allocation Algorithm program


/*
    MEMORY MAP TABLE                                         
*****************************************************                     
* FILE NAME  * FILE SIZE * FILE START *           
*****************************************************      
*                *                      *                       *          
*                *                      *                       *         
*                *                      *                       *         
*                *                      *                       *        
*****************************************************       
  we use INDEX NUMBER n for it  
.............................................................................................                              
           FREE SPACE TABLE
 ************************************ 
  *  FreeStart    *    FreeSize     *   
 ************************************
  *                    *                      *
  *                    *                      *
  *                    *                      *
   *                   *                      *
  ***********************************
     INDEX NUMBER m for it
*/
#include<stdio.h>
#include<conio.h>

void create(int,int);
void del(int);
void compaction();
void display();

int fname[10],fsize[10],fstart[10],freest[10],freesize[10],m=0,n=0,start;

int main()
{
int name,size,ch,i;
int *ptr;
//clrscr();
ptr=(int *)malloc(sizeof(int)*100);
start=freest[0]=(int)ptr;
freesize[0]=500;

printf("\n");
printf(" Free start address         Free Size        \n");

for(i=0;i<=m;i++)
printf("    %d                      %d\n",freest[i],freesize[i]);
printf("\n\n");
while(1)
{

printf("1.Create.\n");
printf("2.Delete.\n");
printf("3.Compaction.\n");
printf("4.Exit.\n");
printf("Enter your choice: ");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("\nEnter the name of file: ");
scanf("%d",&name);
printf("Enter the size of the file: ");
scanf("%d",&size);
create(name,size);
break;
case 2:
printf("\nEnter the file name which u want to delete: ");
scanf("%d",&name);
del(name);
break;
case 3:
compaction();
printf("\nAfter compaction the tables will be:\n");
display();
break;
case 4:
exit(1);
default:
printf("\nYou have entered a wrong choice.\n");
}
}

}


void create(int name,int size)
{
int i,flag=1,j,a;

for(i=0;i<=m;i++)
if( freesize[i] >= size)
a=i,flag=0;
if(!flag)
{
for(j=0;j<n;j++);
n++;
fname[j]=name;
fsize[j]=size;
fstart[j]=freest[a];
freest[a]=freest[a]+size;
freesize[a]=freesize[a]-size;

printf("\n The memory map will now be: \n\n");
display();
}
else
{
printf("\nNo enough space is available.System compaction......");

flag=1;

compaction();
display();

for(i=0;i<=m;i++)
if( freesize[i] >= size)
a=i,flag=0;
if(!flag)
{
for(j=0;j<n;j++);
n++;
fname[j]=name;
fsize[j]=size;
fstart[j]=freest[a];
freest[a]+=size;
freesize[a]-=size;
printf("\n The memory map will now be: \n\n");
display();
}
else
printf("\nNo enough space.\n");
}
}

void del(int name)
{
int i,j,k,flag=1;
for(i=0;i<n;i++)
if(fname[i]==name)
break;
if(i==n)
{
flag=0;
printf("\nNo such process exists......\n");
}
else
{
m++;
freest[m]=fstart[i];
freesize[m]=fsize[i];
for(k=i;k<n;k++)
{
fname[k]=fname[k+1];
fsize[k]=fsize[k+1];
fstart[k]=fstart[k+1];
}
n--;
}
if(flag)
{
printf("\n\n After deletion of this process the memory map will be : \n\n");
display();
}
}

void compaction()
{
int i,j,size1=0,f_size=0;
if(fstart[0]!=start)
{
fstart[0]=start;
for(i=1;i<n;i++)
fstart[i]=fstart[i-1]+fsize[i-1];
}
else
{
for(i=1;i<n;i++)
fstart[i]=fstart[i-1]+fsize[i-1];
}
f_size=freesize[0];

for(j=0;j<=m;j++)
size1+=freesize[j];
freest[0]=freest[0]-(size1-f_size);
freesize[0]=size1;
m=0;
}

void display()
{
int i;

printf("\n\t  ***   MEMORY MAP TABLE  ***        \n");
printf("\tNAME     SIZE    STARTING ADDRESS      \n");
for(i=0;i<n;i++)
printf("\t %d%10d%10d\n",fname[i],fsize[i],fstart[i]);
printf("\n");
printf("\n\t  ***  FREE SPACE TABLE  ***\n");
printf("\tFREE START ADDRESS             FREE SIZE        \n");
for(i=0;i<=m;i++)
printf("\t      %d                          %d\n",freest[i],freesize[i]);
printf("\n");
}

No comments: