0% found this document useful (0 votes)
31 views5 pages

Fos 10

The document discusses three memory allocation schemes: first fit, best fit, and worst fit. It provides code implementations and sample outputs for each scheme.

Uploaded by

makanijenshi2409
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views5 pages

Fos 10

The document discusses three memory allocation schemes: first fit, best fit, and worst fit. It provides code implementations and sample outputs for each scheme.

Uploaded by

makanijenshi2409
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

Enrollment No: 202203103510061

Practical-10
Aim: Implement the following memory allocation scheme.

a. First Fit b. Best Fit c. Worst Fit

a) First Fit

Code:
#include<stdio.h>
void firstFit(int blockSize[], int m, int processSize[], int n)
{
int i, j;
int allocation[n];
for(i = 0; i < n; i++)
{
allocation[i] = -1;
}
for (i = 0; i < n; i++) //here, n -> number of processes
{
for (j = 0; j < m; j++) //here, m -> number of blocks
{
if (blockSize[j] >= processSize[i])
{
allocation[i] = j;
blockSize[j] -= processSize[i];
break; //go to the next process in the queue
}
}
}
printf("\nProcess No.\tProcess Size\tBlock no.\n");
for (int i = 0; i < n; i++)
{
printf(" %i\t\t\t", i+1);
printf("%i\t\t\t\t", processSize[i]);
if (allocation[i] != -1)
printf("%i", allocation[i] + 1);
else
printf("Not Allocated");

CGPIT/4IT-A/Fundamentals of Operating System 13


Enrollment No: 202203103510061

printf("\n");
}
}
// Driver code
int main()
{
int m; //number of blocks in the memory
int n; //number of processes in the input queue
int blockSize[] = {100, 500, 200, 300, 600};
int processSize[] = {212, 417, 112, 426};
m = sizeof(blockSize) / sizeof(blockSize[0]);
n = sizeof(processSize) / sizeof(processSize[0]);
firstFit(blockSize, m, processSize, n);
return 0 ;
}

Output:

b) Best Fit

Code:
#include <stdio.h>
void implimentBestFit(int blockSize[], int blocks, int processSize[], int
proccesses)
{
int allocation[proccesses];
int occupied[blocks];
for(int i = 0; i < proccesses; i++)

{
allocation[i] = -1;
}
for(int i = 0; i < blocks; i++)
{
occupied[i] = 0;
}
for (int i = 0; i < proccesses; i++)

CGPIT/4IT-A/Fundamentals of Operating System 14


Enrollment No: 202203103510061

{
int indexPlaced = -1;
for (int j = 0; j < blocks; j++)
{
if (blockSize[j] >= processSize[i] && !occupied[j])
{
if (indexPlaced == -1)
indexPlaced = j;

// if any future block is smalller than the current block


where
// process is placed, change the block and thus
indexPlaced
else if (blockSize[j] < blockSize[indexPlaced])
indexPlaced = j;
}
}
if (indexPlaced != -1)
{
allocation[i] = indexPlaced;
occupied[indexPlaced] = 1;
}
}
printf("\nProcess No.\tProcess Size\tBlock no.\n");
for (int i = 0; i < proccesses; i++)
{
printf("%d \t\t\t %d \t\t\t", i+1, processSize[i]);
if (allocation[i] != -1)
printf("%d\n",allocation[i] + 1);
else
printf("Not Allocated\n");
}
}
// Driver code
int main()
{
int blockSize[] = {100, 50, 30, 120, 35};
int processSize[] = {40, 10, 30, 60};
int blocks = sizeof(blockSize)/sizeof(blockSize[0]);
int proccesses = sizeof(processSize)/sizeof(processSize[0]);

CGPIT/4IT-A/Fundamentals of Operating System 15


Enrollment No: 202203103510061

implimentBestFit(blockSize, blocks, processSize, proccesses);


return 0 ;
}

Output:

c) Worst Fit

Code:

#include <stdio.h>
void implimentWorstFit(int blockSize[], int blocks, int processSize[], int
processes)
{
int allocation[processes];
int occupied[blocks];
for(int i = 0; i < processes; i++)
{
allocation[i] = -1;
}
for(int i = 0; i < blocks; i++)
{
occupied[i] = 0;
}
for (int i=0; i < processes; i++)
{
int indexPlaced = -1;
for(int j = 0; j < blocks; j++)
{
if(blockSize[j] >= processSize[i] && !occupied[j])
{
if (indexPlaced == -1)
indexPlaced = j;
else if (blockSize[indexPlaced] < blockSize[j])
indexPlaced = j;
}

CGPIT/4IT-A/Fundamentals of Operating System 16


Enrollment No: 202203103510061

}
if (indexPlaced != -1)
{
allocation[i] = indexPlaced;
occupied[indexPlaced] = 1;
blockSize[indexPlaced] -= processSize[i];
}
}
printf("\nProcess No.\tProcess Size\tBlock no.\n");
for (int i = 0; i < processes; i++)
{
printf("%d \t\t\t %d \t\t\t", i+1, processSize[i]);
if (allocation[i] != -1)
printf("%d\n",allocation[i] + 1);
else
printf("Not Allocated\n");
}
}
// Driver code
int main()
{
int blockSize[] = {100, 50, 30, 120, 35};
int processSize[] = {40, 10, 30, 60};
int blocks = sizeof(blockSize)/sizeof(blockSize[0]);
int processes = sizeof(processSize)/sizeof(processSize[0]);
implimentWorstFit(blockSize, blocks, processSize, processes);
return 0;
}

Output:

CGPIT/4IT-A/Fundamentals of Operating System 17

You might also like