osslip11
Q1
LFU
#include <stdio.h>
int numberOfRef = 0;
int ref[20];
int numberOfFrame = 0;
int frame[20];
int table[20][20];
int pageFault = 0;
int count[20] = { 0 };
int main(void)
{
void accept(void);
void lfu(void);
void display(void);
accept();
lfu();
display();
return(0);
}
void accept(void)
{
int i = 0;
int r = 0;
printf("How Many References You Have : ");
scanf("%d", &numberOfRef);
for (r = 0; r < numberOfRef; r++)
{
printf("Enter The Page Reference : ");
scanf("%d", &ref[r]);
}
printf("How Many Frames : ");
scanf("%d", &numberOfFrame);
for (i = 0; i < numberOfFrame; i++)
{
frame[i] = -1;
}
}
void lfu(void)
{
int search(int, int *);
int getPos(int);
int i = 0;
int pos = 0;
int r = 0;
int found = 0;
for (r = 0; r < numberOfRef; r++)
{
found = search(ref[r], frame);
if (found == -1)
{
pageFault++;
pos = getPos(r);
frame[pos] = ref[r];
// copying frames into table
for (i = 0; i < numberOfFrame; i++)
{
table[i][r] = frame[i];
}
}
else
{
for (i = 0; i < numberOfFrame; i++)
{
table[i][r] = frame[i];
}
}
}
}
int search(int pno, int *frame)
{
int i;
for (i = 0; i < numberOfFrame; i++)
{
if (frame[i] == pno)
{
return(i);
}
}
return(-1);
}
void getCount(int r)
{
int i = 0,pos = 0;
for (i = r - 1; i >= 0; i--)
{
pos = search(ref[i], frame);
if (pos != -1)
{
count[pos]++;
}
}
}
int getMin(int *arr)
{
int i = 0;
int min = arr[0];
for (i = 0; i < numberOfFrame; i++)
{
if (arr[i] < min)
{
min = arr[i];
}
}
return(min);
}
int getPos(int r)
{
void getCount(int r);
int getMin(int *);
int cnt, tpos, i, k, tframe[20],min,pos;
for (i = 0; i < numberOfFrame; i++)
{
if (frame[i] == -1)
{
return(i);
}
tframe[i] = frame[i];
}
getCount(r);
min = getMin(count);
for (i = 0; i < numberOfFrame; i++)
{
if (count[i] != min)
{
tframe[i] = -1;
}
}
for (k = r - 1; k >= 0; k--)
{
tpos = search(ref[k], tframe);
if (tpos != -1)
{
pos = tpos;
tframe[tpos] = -1;
}
}
return(pos);
}
void display(void)
{
int i, r;
printf("Refereence String : \n");
for (r = 0; r < numberOfRef; r++)
{
printf("%2d ", ref[r]);
}
printf("\n");
printf("------------------------------------------------------------\n");
for (i = 0; i < numberOfFrame; i++)
{
for (r = 0; r < numberOfRef; r++)
{
printf("%2d ", table[i][r]);
}
printf("\n");
}
printf("\n\n number of Page Fault : %d\n", pageFault);
}
/*Write a program to implement the shell. It should display the command
prompt “myshell list f dirname :- To print names of all the files in current
directory.
myshell$ list n dirname :- To print the number of all entries in the current
directory */
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<dirent.h> //opendir(),readdir(),closedir()
#include<sys/stat.h>
#include<string.h>
#include<fcntl.h> // open,read(),close() : file related function
void list(char p1,chardname)
{
DIR *dir;
struct dirent *entry; //used to hold entry of directory i.e file or dir
struct stat info; //hold inforrmation about file i.e inode, regular file
int cnt=0;
dir=opendir(dname);
if(dir==NULL)
{
printf("\n Directory %s Not Found....",dname);
}
else
{
if(strcmp(p1,"F")==0)
{
while((entry=readdir(dir))!=NULL)
{
stat(entry->d_name,&info);
if(info.st_mode & S_IFREG) //s_mode =2 is for regular file regular file
printf("%s\n",entry->d_name);
}
}
else if(strcmp(p1,"N")==0)
{
cnt=0;
while((entry=readdir(dir))!=NULL)
{
cnt++;
}
printf("\nTotal no. of entries in directory '%s' = %d ",dname,cnt);
}
else if(strcmp(p1,"I")==0)
{
while((entry=readdir(dir))!=NULL)
{
stat(entry->d_name,&info);
if(info.st_mode & S_IFREG) //s_mode =2 is for regular file regular file
{
printf("File name =%s\t",entry->d_name);
printf("Inode=%d\n",info.st_ino);
}
}
}
}
}
int main()
{
char cmd[80],tok1[10],tok2[10],tok3[10],tok4[10];
int n;
while(1)
{
printf("\nMYSHELL $]");
fgets(cmd,80,stdin);
n=sscanf(cmd,"%s%s%s%s",tok1,tok2,tok3,tok4); //n=no of tokens are formed from given command
switch(n)
{
case 1:
if(fork()==0)
{
execlp(tok1,tok1,NULL); //paramenters- nameOfProcess,parametersOfProcess
}
wait(0);
break;
case 2 :
if(fork()==0)
{
execlp(tok1,tok1,tok2,NULL);
}
wait(0);
break;
case 3:
if(strcmp(tok1,"list")==0)
{
list(tok2,tok3);
}
else
{
if(fork()==0)
{
execlp(tok1,tok1,tok2,tok3,NULL);
}
wait(0);
}
break;
case 4 :
if(fork()==0)
{
execlp(tok1,tok1,tok2,tok3,tok4,NULL);
}
wait(0);
break;
}
}
}