Algorithm and Implementation of contiguous allocation techniques: Best- Fit using c
Let Blocksize is the array of size m.
Let SizeofProcess is the array of size n.
Let AllocationStatus is an array of size n.
it is the function we are going to use Best_fitCAT(int Blocksize[ ],int SizeofProcess[ ],AllocationStatus[ ])
1- Initilze the Blocksize with size and SizeofProcess with size.
2- Initialize all AllocationStatus as free.
Note we going to use -1 to indicate the status empty otherwise index of block
3- First take one process and check for the block in which it can be assigned with minimum internal fargmentation. for each block
- If SizeofProcess <= BlockSize then
- store that index in temp variable and the find index of next best fitted block after that
- Assign the Block to the process and update the status of process in AllocationStatus,
- Reduce the Size of Block by Sizeof Process
- check for next process.
5- check is allocation status for all process is allocated then Print otherwise simple not allocated
Now lets implement the above algorithm in C.
#include<stdio.h>
#include<conio.h>
void Best_fitCAT(int Blocksize[ ],int SizeofProcess[ ],int AllocationStatus[ ],int m,int n)
{
int i,j;
for(i=0;i<n;i++)
{
int bestplace = -1;
for (int j=0; j<m; j++)
{
if (Blocksize[j] >= SizeofProcess[i])
{
if (bestplace == -1)
bestplace = j;
else if (Blocksize[bestplace] > Blocksize[j])
bestplace = j;
}
}
// If find a block for current process
if (bestplace != -1)
{
// allocate block to process
AllocationStatus[i] = bestplace;
// Reduce the block Size.
Blocksize[bestplace] -= SizeofProcess[i];
}
}
printf(“Process is allocated to following blocksn”);
for(j=0;j<n;j++)
{
if(AllocationStatus[j]==-1)
{
printf(“Process %d is not Allocated n”,j+1);
}
else
{
printf(“Process %d is Allocated to %dn”,j+1,AllocationStatus[j]+1);
}
}
}
void main()
{
int Blocksize[20],SizeofProcess[20];
int AllocationStatus[20],m,n;
int i,j;
printf(“Enter the number of Blockn”);
scanf(“%d”,&m);
printf(“now enter the size of block”);
for(i=0;i<m;i++)
{
scanf(“%d”,&Blocksize[i]);
}
printf(“Enter the number of Processn”);
scanf(“%d”,&n);
printf(“now enter the size required by Process”);
for(i=0;i<n;i++)
{
scanf(“%d”,&SizeofProcess[i]);
AllocationStatus[i]=-1;
}
Best_fitCAT(Blocksize,SizeofProcess,AllocationStatus,m,n);
}