LAB DA- 4
DR. PRIYA M
RAJAT SRIVASTAVA
19BCE2055
a) Consider a memory hole of size 1kb initially. When a sequence of memory request arrives as
following, illustrate the memory allocation by various approaches and calculate the total amount
memory wasted by external fragmentation and internal fragmentation in each approach.
i. First fit; ii. Best fit iii. Worst fit
Code -
#include <iostream>
using namespace std;
int main()
int c,i,j,k,n,l,m[10],p[10],po[20],flag,z,y,temp,temp1;
cout<<"Enter memory total partitions:\t"; cin>>n;
cout<<"\nEnter memory size for\n";
for(i=1;i<=n;i++)
cout<<"\npartition "<<i<<" :\t"; cin>>m[i];
po[i]=i;}
cout<<"\nEnter total number of process:\t"; cin>>j;
cout<<"\nEnter memory size for\n"; for(i=1;i<=j;i++)
cout<<"\nprocess "<<i<<" :\t"; cin>>p[i];
cout<<"\n*Menu*\n1.first fit\n2.best fit\n3.worst fit\nenter
choice:\t"; cin>>c;
switch(c)
case 1:
for(i=1;i<=j;i++)
flag=1; for(k=1;k<=n;k++)
if(p[i]<=m[k])
cout<<"\nProcess "<<i<<" whose memory size is "<<p[i]<<"KB
allocated at memory partition:\t"<<po[k];
m[k]=m[k]-p[i]; break;
else
flag++;}}
if(flag>n)
cout<<"\nProcess "<<i<<" whose memory size is "<<p[i]<<"KB
can't be allocated";
break; case 2:
for(y=1;y<=n;y++)
for(z=y;z<=n;z++)
if(m[y]>m[z])
temp=m[y]; m[y]=m[z]; m[z]=temp; temp1=po[y]; po[y]=po[z];
po[z]=temp1;
}}
for(i=1;i<=j;i++)
flag=1; for(k=1;k<=n;k++)
if(p[i]<=m[k])
cout<<"\nProcess "<<i<<" whose memory size is "<<p[i]<<"KB
allocated at memory partition:\t"<<po[k];m[k]=m[k]-p[i]; break;
else
flag++;
if(flag>n)
cout<<"\nProcess "<<i<<" whose memory size is "<<p[i]<<"KB
can't be allocated";
break; case 3:
for(y=1;y<=n;y++)
for(z=y;z<=n;z++)
if(m[y]<m[z])
temp=m[y]; m[y]=m[z]; m[z]=temp; temp1=po[y]; po[y]=po[z];
po[z]=temp1;
}}
for(i=1;i<=j;i++)
flag=1; for(k=1;k<=n;k++)
if(p[i]<=m[k])
cout<<"\nProcess "<<i<<" whose memory size is "<<p[i]<<"KB
allocated at memory partition:\t"<<po[k];
m[k]=m[k]-p[i]; break;
else
flag++;
if(flag>n)
cout<<"\nProcess "<<i<<" whose memory size is "<<p[i]<<"KB
can't be allocated";
break;
}return 0; }
OUTPUT-
(b) Write a program to implement the page replacement algorithms.
i. FIFO ii. LRU iii. OPT
CODE-
int n,nf; int in[100];I
nt p[50]; int hit=0;
int i,j,k; int pgfaultcnt=0;
void getData()
printf("\nEnter length of page reference sequence:");
scanf("%d",&n);
printf("\nEnter the page reference sequence:");
for(i=0; imax) {
max=near[j];
repindex=j; } }
p[repindex]=in[i];
pgfaultcnt++;
dispPages();
else printf("No page fault"); }
dispPgFaultCnt(); }
void lru() { initialize(); int least[50];
for(i=0; i=0; k--) { if(pg==in[k]) { least[j]=k; found=1; break; }
else found=0; } if(!found) least[j]=-9999; }
int min=9999;
int repindex;
or(j=0; j<nf; j++)
if(least[j]<min)
min=least[j];
repindex=j;
p[repindex]=in[i];
pgfaultcnt++;
dispPages();
else
printf("No page fault!");
dispPgFaultCnt();
int main()
{
int choice;
printf("Enter data : ");
getData();
while(1)
{ printf("\nPage Replacement
Algorithms\n1.FIFO\n2.Optimal\n3.LRU\n4.Exit\nEnter your
choice:");
scanf("%d",&choice);
switch(choice)
case 1:
fifo();
break;
case 2:
optimal();
break;
case 3:
lru();
break;
default:
return 0;
break;
OUTPUT-
c) Write a program that implements the FIFO, LRU, and optimal pager replacement algorithms. First,
generate a random page-reference string where page numbers range from 0 to 9. Apply the random
page reference string to each algorithm, and record the number of page faults incurred by each
algorithm. Implement the replacement algorithms so that the number of page frames can vary from 1
to 7. Assume that demand paging is used.
Code-
#include <stdio.h>
/* c program which implement FIFO, LRU, and optimal page replacement algorithms */
int n, pg[30], fr[10];
void fifo();
void optimal();
void lru();
void main()
int i, ch;
printf("\nEnter total number of pages:");
scanf("%d", &n);
printf("\nEnter page references:");
for (i = 0; i<n; i++) //accepting sequence
scanf("%d", &pg[i]);
do
printf("\n\tMENU\n");
printf("\n1)FIFO");
printf("\n2)OPTIMAL");
printf("\n3)LRU");
printf("\n4)Exit");
printf("\nEnter your choice:");
scanf("%d", &ch);
switch (ch)
case 1: fifo();
break;
case 2: optimal();
break;
case 3: lru();
break;
} while (ch != 4);
getchar();
void fifo()
{
int i, f, r, s, count, flag, num, psize;
f = 0;
r = 0;
s = 0;
flag = 0;
count = 0;
printf("\nEnter size of page frame:");
scanf("%d", &psize);
for (i = 0; i<psize; i++)
fr[i] = -1;
while (s<n)
flag = 0;
num = pg[s];
//check wether the page is already exist
for (i = 0; i<psize; i++)
if (num == fr[i])
s++;
flag = 1;
break;
//if page is not already exist
if (flag == 0)
if (r<psize)
{
fr[r] = pg[s];
r++;
s++;
count++;
else
if (f<psize)
fr[f] = pg[s];
s++;
f++;
count++;
else
f = 0;
//print the page frame
printf("\n");
for (i = 0; i<psize; i++)
printf("%d\t", fr[i]);
printf("\nPage Faults=%d", count);
getchar();
void optimal()
{
int count[10], i, j, k, l, m, p, r, fault, fSize, flag, temp, max, tempflag = 0;
fault = 0;
k = 0;
printf("\nEnter frame size:");
scanf("%d", &fSize);
//initilizing frames array
for (i = 0; i<fSize; i++)
count[i] = 0;
fr[i] = -1;
for (i = 0; i<n; i++)
flag = 0;
temp = pg[i];
//check wether the page is already exist
for (j = 0; j<fSize; j++)
if (temp == fr[j])
flag = 1;
break;
//if the page is not already exist and frame has empty slot
if ((flag == 0) && (k<fSize))
fault++;
fr[k] = temp;
k++;
//printf("\n Test 0");
}
//if the page is not already exist and frame is full
else if ((flag == 0) && (k == fSize))
fault++;
for (l = 0; l<fSize; l++)
count[l] = 0;
//apply optimal replacemnt strategy
for (m = 0; m<fSize; m++)
tempflag = 0;
for (r = i + 1; r<n; r++)
if (fr[m] == pg[r])
{
if (count[m] == 0)
count[m] = r;
tempflag = 1;
if (tempflag != 1)
count[m] = n + 1;
//find optimal page to replace
p = 0;
max = count[0];
for (l = 0; l<fSize; l++)
{
if (count[l]>max)
max = count[l];
p = l;
fr[p] = temp;
//print the page frame
printf("\n");
for (l = 0; l<fSize; l++)
printf("%d\t", fr[l]);
}
printf("\nTotal number of faults=%d", fault);
getchar();
void lru()
int count[10], i, j, k, fault, f, flag, temp, current, c, dist, least, m, cnt, p, x;
fault = 0;
dist = 0;
k = 0;
printf("\nEnter frame size:");
scanf("%d", &f);
//initilizing distance and frame array
for (i = 0; i<f; i++)
count[i] = 0;//helps to know recently used page
fr[i] = -1;
for (i = 0; i<n; i++)
flag = 0;
temp = pg[i];
//check wether the page is already exist or not
for (j = 0; j<f; j++)
if (temp == fr[j])
flag = 1;
count[j] = i;
break;
}
//if the page is not already exist and frame has empty slot
if ((flag == 0) && (k<f))
fault++;
fr[k] = temp;
count[k] = i;
k++;
//if the page is not already exist and frame is full
else if ((flag == 0) && (k == f))
fault++;
//find the least recenlty used page
least = count[0];
for (m = 0; m<f; m++)
{
if (count[m]<least)
least = count[m];
p = m;
fr[p] = temp;
count[p] = i;
p = 0;
//print the page frame
printf("\n");
for (x = 0; x<f; x++)
printf("%d\t", fr[x]);
}
printf("\nTotal number of faults=%d", fault);
getchar();
}
File system and Disk Management
(a) Implement the following Disk scheduling algorithms:
i. SSTF ii. SCAN iii. C-SCAN iv. FCFS
Code-
b) Consider a file of size 1 MB. The size of a disk block is 512Bytes. Assume any number of available
free blocks in the disk contiguously or non-contiguously. Implement the following algorithms to
perform file allocation. Determine the efficiency of each file allocation strategies.
i. Sequential
ii. Indexed
iii. Linked
Code-
#include<stdio.h>
#include<conio.h>
int main()
int n,i,j,b[20],sb[20],t[20],x,c[20][20];
printf("Enter no.of files:");
scanf("%d",&n);
for(i=0;i<n;i++)
printf("Enter no. of blocks occupied by file%d",i+1);
scanf("%d",&b[i]);
printf("Enter the starting block of file%d",i+1);
scanf("%d",&sb[i]); t[i]=sb[i];
for(j=0;j<b[i];j++) c[i][j]=sb[i]++;
printf("Filename\tStart block\tlength\n");
for(i=0;i<n;i++) printf("%d\t %d \t%d\n",i+1,t[i],b[i]);
printf("blocks occupiedare:");
for(i=0;i<n;i++) { printf("fileno%d",i+1);
for(j=0;j<b[i];j++) printf("\t%d",c[i][j]);
printf("\n")
;
}
getch(); }
Code-
#include<stdio.h>
#include<conio.h>
int main()
int n,m[20],i,j,ib[20],b[20][20];
printf("Enter no. of files:");
scanf("%d",&n);
for(i=0;i<n;i++)
{ printf("Enter index block :",i+1);
scanf("%d",&ib[i]);
printf("Enter blocks occupied by file%d:",i+1);
scanf("%d",&m[i]);
printf("enter blocks of file%d:",i+1); for(j=0;j<m[i];j++)
scanf("%d",&b[i][j]);
printf("\nFile\t index\tlength\n");
for(i=0;i<n;i++)
printf("%d\t%d\t%d\n",i+1,ib[i],m[i]);
printf("blocks occupiedare:");
for(i=0;i<n;i++)
{ printf("fileno%d",i+1);
for(j=0;j<m[i]; j++)
printf("\t%d--->%d\n",ib[i],b[i][j]);
printf("\n");
getch();