OneCompiler

osslip11

103

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.Tokenizethecommandlineandexecutethegivencommandbycreatingthechildprocess.Additionallyitshouldinterpretthefollowinglistcommandsasmyshell”. Tokenize the command line and execute the given command by creating the child process. Additionally it should interpret the following ‘list’ commands as 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;

            }
    }

}