osslip1
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);
}
Q2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
void execute_command(char **tokens) {
pid_t pid = fork();
if (pid == 0) {
// Child process
execvp(tokens[0], tokens);
perror("Error executing command");
exit(EXIT_FAILURE);
} else if (pid < 0) {
perror("Error forking process");
} else {
// Parent process
waitpid(pid, NULL, 0);
}
}
void typeline_command(char **tokens) {
FILE *file;
char line[1024];
int n = 0;
char option = tokens[1][0];
if (option == '+') {
n = atoi(tokens[1] + 1);
}
file = fopen(tokens[2], "r");
if (file == NULL) {
perror("Error opening file");
return;
}
while (fgets(line, sizeof(line), file) != NULL) {
if (option == '+' && n-- <= 0) {
break;
}
printf("%s", line);
}
fclose(file);
}
int main() {
while (1) {
printf("myshell$ ");
char command[1024];
fgets(command, sizeof(command), stdin);
// Remove newline character
command[strcspn(command, "\n")] = '\0';
// Tokenize the command
char *token;
char *tokens[32];
int i = 0;
token = strtok(command, " ");
while (token != NULL) {
tokens[i++] = token;
token = strtok(NULL, " ");
}
tokens[i] = NULL;
if (i > 0) {
if (strcmp(tokens[0], "exit") == 0) {
break;
} else if (strcmp(tokens[0], "typeline") == 0 && i >= 3) {
typeline_command(tokens);
} else {
execute_command(tokens);
}
}
}
return 0;
}