Memory Management

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 5

NAME- Hari Krishna D R

REG. NO.- 21MAI0052

SUBJECT - Operating Systems & Virtualization

SUBJECT CODE – CSE5002


Memory Management

#include<stdio.h>
# define MAX 20

void LRU(int no_frames, int no_pages, int pages[]);


void FIFO(int no_frames, int no_pages, int pages[]);
void optimal(int no_frames, int no_pages, int pages[]);

int main(){
int i, ch, no_frames, no_pages, pages[MAX];
scanf("%d", &ch);
scanf("%d", &no_frames);
scanf("%d", &no_pages);
for(i=0;i<no_pages;i++){
scanf("%d", &pages[i]);
}
switch(ch){
case 1: FIFO(no_frames, no_pages, pages); break;
case 2: optimal(no_frames, no_pages, pages); break;
case 3: LRU(no_frames, no_pages, pages); break;
}
return 0;
}

int findLRU(int time[], int n){


int i, min = time[0], pos = 0;
for(i=1;i<n;++i){
if(time[i] < min){
min = time[i];
pos = i;
}
}
return pos;
}
void LRU(int no_frames, int no_pages, int pages[]){
int frames[MAX],counter=0, time[MAX], flag1, flag2, i, j, pos, faults=0;

for(i=0;i<no_frames;++i){
frames[i] = -1;
}
for(i=0;i<no_pages;++i){
flag1 = flag2 = 0;
for(j=0;j<no_frames;++j){
if(frames[j] == pages[i]){
counter++;
time[j] = counter;
flag1 = flag2 = 1;
break;
}
}
if(flag1 == 0){
for(j=0;j<no_frames;++j){
if(frames[j] == -1){
counter++;
faults++;
frames[j] = pages[i];
time[j] = counter;
flag2 = 1;
break;
}
}
}

if(flag2 == 0){
pos = findLRU(time, no_frames);
counter++;
faults++;
frames[pos] = pages[i];
time[pos] = counter;
}
}
printf("%d", faults);
}

void FIFO(int no_frames, int no_pages, int pages[]){


int i,j,k, frames[MAX],count=0, avail;
for(i=0;i<no_frames;i++){
frames[i] = -1;
}
j=0;
for(i=1;i<=no_pages;i++){
avail=0;
for(k=0;k<no_frames;k++){
if(frames[k] == pages[i])
avail = 1;
}
if(avail == 0){
frames[j] = pages[i];
j = (j+1)%no_frames;
count++;
}
}
printf("%d", count);
}
void optimal(int no_frames, int no_pages, int pages[]){

int frames[MAX], temp[MAX], flag1, flag2, flag3;


int i, j, k, pos, max, faults=0;
for(i=0;i<no_frames;i++){
frames[i] = -1;
}

for(i=0;i<no_pages;i++){
flag1 = flag2 = 0;
for(j=0;j<no_frames;++j){
if(frames[j] == pages[i]){
flag1 = flag2 = 1;
break;
}
}
if(flag1 = 0){
for(j=0;j<no_frames;++j){
if(frames[j] == -1){
faults++;
frames[j] = pages[i];
flag2 = 1;
break;
}
}
}
if(flag2 == 0){
flag3 = 0;
for(j=0;j<no_frames;++j){
temp[j] = -1;
for(k=i+1;k<no_pages;++k){
if(frames[j] == pages[k]){
temp[j] = k;
break;
}
}
}
for(j=0;j<no_frames;++j){
if(temp[j] == -1){
pos = j;
flag3 = 1;
break;
}
}
if(flag3 == 0){
max = temp[0];
pos = 0;
for(j=1;j<no_frames;++j){
if(temp[j]>max){
max = temp[j];
pos = j;
}
}
}
frames[pos] = pages[i];
faults++;
}
}
printf("%d", faults);
}

You might also like