OneCompiler

osslip1

127

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;

}