0% found this document useful (0 votes)
85 views16 pages

Demand Paging

The document discusses different page replacement algorithms like FIFO, LFU, LRU and MFU. It provides code snippets to simulate demand paging using each algorithm and track page faults. For each algorithm, the code accepts page references, simulates page replacements, tracks contents of each frame and outputs total page faults.
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)
85 views16 pages

Demand Paging

The document discusses different page replacement algorithms like FIFO, LFU, LRU and MFU. It provides code snippets to simulate demand paging using each algorithm and track page faults. For each algorithm, the code accepts page references, simulates page replacements, tracks contents of each frame and outputs total page faults.
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/ 16

--------------------------------------------------

DEMAND PAGING
FIFO

Q)WRITE THE SIMULATION PROGRAM TO IMPLEMENT DEMAND


PAGING USING FIFO PAGE REPLACEMENT ALGORITHM. ASSUME
THE MEMORY OF "n" FRAMES. SHOW THE CONTENTS OF PAGE
AFTER EVERY PAGE REPLACEMENT IN A FRAME AND AT END
SHOW THE TOTAL NUMBER OF PAGE FALUTS ACCORDINGLY.
INPUT THE FOLLOWING PAGE REFERENCE STRING.

PAGE REFERENCE STRING: 3,4,5,6,3,4,7,3,4,5,6,7,2,4,6.

--->

#include<stdio.h>
#define MAX 20

int frames[MAX],ref[MAX],mem[MAX][MAX],faults,sp,m,n;

void accept()
{
int i;

printf("Enter no.of frames:");


scanf("%d", &n);

printf("Enter no.of references:");


scanf("%d", &m);
printf("Enter reference string:\n");
for(i=0;i<m;i++)
{
printf("[%d]=",i);
scanf("%d",&ref[i]);
}
}

void disp()
{
int i,j;

for(i=0;i<m;i++)
printf("%3d",ref[i]);

printf("\n\n");

for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(mem[i][j])
printf("%3d",mem[i][j]);
else
printf(" ");
}
printf("\n");
}

printf("Total Page Faults: %d\n",faults);


}

int search(int pno)


{
int i;
for(i=0;i<n;i++)
{
if(frames[i]==pno)
return i;
}

return -1;
}

void fifo()
{
int i,j;

for(i=0;i<m;i++)
{
if(search(ref[i])==-1)
{
frames[sp] = ref[i];
sp = (sp+1)%n;
faults++;
for(j=0;j<n;j++)
mem[j][i] = frames[j];

}
}
}

int main()
{
accept();
fifo();
disp();

return 0;
}
------------------------------------------------------------------------------------------

LFU

Q)WRITE THE SIMULATION PROGRAM TO IMPLEMENT DEMAND


PAGING USING LFU PAGE REPLACEMENT ALGORITHM. ASSUME
THE MEMORY OF "n" FRAMES. SHOW THE CONTENTS OF PAGE
AFTER EVERY PAGE REPLACEMENT IN A FRAME AND AT END
SHOW THE TOTAL NUMBER OF PAGE FAULTS ACCORDINGLY.
INPUT THE FOLLOWING PAGE REFERENCE STRING.

PAGE REFERENCE STRING - 3,4,5,4,3,4,7,2,4,5,6,7,2,4,6.

--->

#include<stdio.h>
#define MAX 20

int frames[MAX],ref[MAX],mem[MAX][MAX],faults,
sp,m,n,count[MAX];

void accept()
{
int i;

printf("Enter no.of frames:");


scanf("%d", &n);

printf("Enter no.of references:");


scanf("%d", &m);

printf("Enter reference string:\n");


for(i=0;i<m;i++)
{
printf("[%d]=",i);
scanf("%d",&ref[i]);
}
}

void disp()
{
int i,j;

for(i=0;i<m;i++)
printf("%3d",ref[i]);

printf("\n\n");

for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(mem[i][j])
printf("%3d",mem[i][j]);
else
printf(" ");
}
printf("\n");
}

printf("Total Page Faults: %d\n",faults);


}

int search(int pno)


{
int i;

for(i=0;i<n;i++)
{
if(frames[i]==pno)
return i;
}

return -1;
}

int get_lfu(int sp)


{
int i,min_i,min=9999;

i=sp;
do
{
if(count[i]<min)
{
min = count[i];
min_i = i;
}
i=(i+1)%n;
}while(i!=sp);

return min_i;
}

void lfu()
{
int i,j,k;

for(i=0;i<m && sp<n;i++)


{
k=search(ref[i]);
if(k==-1)
{
frames[sp]=ref[i];
count[sp]++;
faults++;
sp++;

for(j=0;j<n;j++)
mem[j][i]=frames[j];
}
else
count[k]++;

sp=0;
for(;i<m;i++)
{
k = search(ref[i]);
if(k==-1)
{
sp = get_lfu(sp);
frames[sp] = ref[i];
count[sp]=1;
faults++;
sp = (sp+1)%n;

for(j=0;j<n;j++)
mem[j][i] = frames[j];
}
else
count[k]++;
}
}

int main()
{
accept();
lfu();
disp();

return 0;
}

----------------------------------------------------------------------------------------

LRU
Q)WRITE THE SIMULATION PROGRAM TO IMPLEMENT DEMAND
PAGING USING LRU(USING COUNTER) PAGE REPLACEMENT
ALGORITHM. ASSUME THE MEMORY OF "n" FRAMES. SHOW THE
CONTENTS OF PAGE AFTER EVERY PAGE REPLACEMENT IN A
FRAME AND AT END SHOW THE TOTAL NUMBER OF PAGE FAULTS
ACCORDINGLY. INPUT THE FOLLOWING PAGE REFERENCE STRING.

PAGE REFERENCE STRING -


12,15,12,18,6,8,11,12,19,12,6,8,12,15,19,8.

---->

#include<stdio.h>
#define MAX 20

int frames[MAX],ref[MAX],mem[MAX][MAX],faults,
sp,m,n,time[MAX];

void accept()
{
int i;

printf("Enter no.of frames:");


scanf("%d", &n);

printf("Enter no.of references:");


scanf("%d", &m);

printf("Enter reference string:\n");


for(i=0;i<m;i++)
{
printf("[%d]=",i);
scanf("%d",&ref[i]);
}
}

void disp()
{
int i,j;

for(i=0;i<m;i++)
printf("%3d",ref[i]);

printf("\n\n");

for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(mem[i][j])
printf("%3d",mem[i][j]);
else
printf(" ");
}
printf("\n");
}

printf("Total Page Faults: %d\n",faults);


}
int search(int pno)
{
int i;

for(i=0;i<n;i++)
{
if(frames[i]==pno)
return i;
}

return -1;
}

int get_lru()
{
int i,min_i,min=9999;

for(i=0;i<n;i++)
{
if(time[i]<min)
{
min = time[i];
min_i = i;
}
}

return min_i;
}

void lru()
{
int i,j,k;

for(i=0;i<m && sp<n;i++)


{
k=search(ref[i]);
if(k==-1)
{
frames[sp]=ref[i];
time[sp]=i;
faults++;
sp++;

for(j=0;j<n;j++)
mem[j][i]=frames[j];
}
else
time[k]=i;

for(;i<m;i++)
{
k = search(ref[i]);
if(k==-1)
{
sp = get_lru();
frames[sp] = ref[i];
time[sp] = i;
faults++;

for(j=0;j<n;j++)
mem[j][i] = frames[j];
}
else
time[k]=i;
}
}
int main()
{
accept();
lru();
disp();

return 0;
}

------------------------------------------------------------------------------------------

MFU

Q)WRITE THE SIMULATION PROGRAM TO IMPLEMENT DEMAND


PAGING USING MFU PAGE REPLACEMENT ALGORITHM. ASSUME
THE MEMORY OF "n" FRAMES. SHOW THE CONTENTS OF PAGE
AFTER EVERY PAGE REPLACEMENT IN A FRAME AND AT END
SHOW THE TOTAL NUMBER OF PAGE FAULTS ACCORDINGLY.
INPUT THE FOLLOWING PAGE REFERENCE STRING.

PAGE REFERENCE STRING - 8,5,7,8,5,7,2,3,7,3,5,9,4,6,2.

----->

#include<stdio.h>
#define MAX 20

int frames[MAX],ref[MAX],mem[MAX][MAX],faults,
sp,m,n,count[MAX];

void accept()
{
int i;

printf("Enter no.of frames:");


scanf("%d", &n);

printf("Enter no.of references:");


scanf("%d", &m);

printf("Enter reference string:\n");


for(i=0;i<m;i++)
{
printf("[%d]=",i);
scanf("%d",&ref[i]);
}
}

void disp()
{
int i,j;

for(i=0;i<m;i++)
printf("%3d",ref[i]);

printf("\n\n");

for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(mem[i][j])
printf("%3d",mem[i][j]);
else
printf(" ");
}
printf("\n");
}
printf("Total Page Faults: %d\n",faults);
}

int search(int pno)


{
int i;

for(i=0;i<n;i++)
{
if(frames[i]==pno)
return i;
}

return -1;
}

int get_mfu(int sp)


{
int i,max_i,max=-9999;

i=sp;
do
{
if(count[i]>max)
{
max = count[i];
max_i = i;
}
i=(i+1)%n;
}while(i!=sp);

return max_i;
}

void mfu()
{
int i,j,k;

for(i=0;i<m && sp<n;i++)


{
k=search(ref[i]);
if(k==-1)
{
frames[sp]=ref[i];
count[sp]++;
faults++;
sp++;

for(j=0;j<n;j++)
mem[j][i]=frames[j];
}
else
count[k]++;

sp=0;
for(;i<m;i++)
{
k = search(ref[i]);
if(k==-1)
{
sp = get_mfu(sp);
frames[sp] = ref[i];
count[sp]=1;
faults++;
sp = (sp+1)%n;

for(j=0;j<n;j++)
mem[j][i] = frames[j];
}
else
count[k]++;
}
}

int main()
{
accept();
mfu();
disp();

return 0;
}

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy