Thursday, July 28, 2022

Operating Systems Assignment 4

 Operating Systems Assignment No. 4: 

Demand Paging


Set A 

i. Write the simulation program to implement demand paging and show the page scheduling and total number of page faults for the following given page reference string. Give input n as the number of memory frames. 

Reference String : 12,15,12,18,6,8,11,12,19,12,6,8,12,15,19,8 

1) Implement FIFO 

2) Implement LRU


Program For FIFO:-

#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;

}


Program For LRU:-

#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;

}



Set B:

 I. Write the simulation program to implement demand paging and show the page scheduling and total number of page faults for the following given page reference string. Give input n as the number of memory frames.

 Reference String : 12,15,12,18,6,8,11,12,19,12,6,8,12,15,19,8 

1) Implement OPT 

2) Implement MFU


Program for OPT:-

#include<stdio.h>

int main()

{

int no_of_frames, no_of_pages, frames[10], pages[30], temp[10], flag1, flag2, flag3, i, j, k, pos,

max, faults = 0;

printf("Enter number of frames: ");

scanf("%d", &no_of_frames);

printf("Enter number of pages: ");

scanf("%d", &no_of_pages);

printf("Enter page reference string: ");

for(i = 0; i < no_of_pages; ++i){

scanf("%d", &pages[i]);

}

for(i = 0; i < no_of_frames; ++i){

frames[i] = -1;

}


for(i = 0; i < no_of_pages; ++i){

flag1 = flag2 = 0;

for(j = 0; j < no_of_frames; ++j){

if(frames[j] == pages[i]){

flag1 = flag2 = 1;

break;

}

}

if(flag1 == 0){

for(j = 0; j < no_of_frames; ++j){

if(frames[j] == -1){

faults++;

frames[j] = pages[i];

flag2 = 1;

break;

}

}

}

if(flag2 == 0){

flag3 =0;

for(j = 0; j < no_of_frames; ++j){

temp[j] = -1;

for(k = i + 1; k < no_of_pages; ++k){

if(frames[j] == pages[k]){

temp[j] = k;

break;

}

}

}

for(j = 0; j < no_of_frames; ++j){

if(temp[j] == -1){

pos = j;

flag3 = 1;

break;

}

}

if(flag3 ==0){

max = temp[0];

pos = 0;

for(j = 1; j < no_of_frames; ++j){

if(temp[j] > max){

max = temp[j];

pos = j;

}

}

}

frames[pos] = pages[i];

faults++;

}

printf("\n");


for(j = 0; j < no_of_frames; ++j){

printf("%d\t", frames[j]);

}

}

printf("\n\nTotal Page Faults = %d", faults);

return 0;

}



Program For MFU:-

#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;

}


Set C:

I. Write the simulation program to implement demand paging and show the page scheduling and total number of page faults for the following given page reference string. Give input n as the number of memory frames.

Reference String: 2,5,2,8,5,4,1,2,3,2,6,1,2,5,9,8

1) Implement MRU

2) Implement Second Chance Page Replacement.

3) Least Frequently Used





No comments:

Post a Comment