Operating System Algorithms (C Programs)
LRU Page Replacement
#include <stdio.h>
int findmin(int time[], int f)
{
int i, min, pos;
for (i = 0; i < f; i++) {
if (time[i] == -1)
return i;
}
min = time[0];
pos = 0;
for (i = 1; i < f; i++) {
if (time[i] < min) {
min = time[i];
pos = i;
}
}
return pos;
}
void main()
{
int pages[50], frames[10], time[10];
int i, j, n, f;
int count = 0;
int found;
int faults = 0;
int k;
printf("Enter number of pages: ");
scanf("%d", &n);
printf("Enter page reference string:\n");
for (i = 0; i < n; i++)
scanf("%d", &pages[i]);
printf("Enter number of frames: ");
scanf("%d", &f);
for (i = 0; i < f; i++) {
frames[i] = -1;
time[i] = -1;
}
printf("\nPage\t");
for (i = 0; i < f; i++)
printf("Frame%d\t", i + 1);
printf("Status\n");
for (i = 0; i < n; i++) {
found = 0;
count++;
for (j = 0; j < f; j++) {
if (frames[j] == pages[i]) {
found = 1;
time[j] = count;
break;
}
}
if (!found) {
k = findmin(time, f);
frames[k] = pages[i];
time[k] = count;
faults++;
}
printf("%d\t", pages[i]);
for (j = 0; j < f; j++) {
if (frames[j] == -1)
printf("-\t");
else
printf("%d\t", frames[j]);
}
if (found)
printf("Hit\n");
else
printf("Fault\n");
}
printf("\nTotal Page Faults = %d\n", faults);
}
FIFO Page Replacement
#include <stdio.h>
void main() {
int pages[50], frames[10];
int i, j,n,f;
int next = 0;
int found;
int faults = 0;
printf("Enter number of pages: ");
scanf("%d", &n);
printf("Enter page reference string:\n");
for (i = 0; i < n; i++)
scanf("%d", &pages[i]);
printf("Enter number of frames: ");
scanf("%d", &f);
for (i = 0; i < f; i++)
frames[i] = -1;
printf("\nPage\t");
for (i = 0; i < f; i++)
printf("Frame%d\t", i + 1);
printf("Status\n");
for (i = 0; i < n; i++) {
found = 0;
for (j = 0; j < f; j++) {
if (frames[j] == pages[i]) {
found = 1;
break;
}
}
if (!found) {
frames[next] = pages[i];
next = (next + 1) % f;
faults++;
}
printf("%d\t", pages[i]);
for (j = 0; j < f; j++) {
if (frames[j] == -1)
printf("-\t");
else
printf("%d\t", frames[j]);
}
if (found)
printf("Hit\n");
else
printf("Fault\n");
}
printf("\nTotal Page Faults = %d\n", faults);
}
FCFS Disk Scheduling
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, head, total = 0;
printf("Enter number of requests: ");
scanf("%d", &n);
int req[n];
printf("Enter the requests:\n");
for(int i = 0; i < n; i++)
scanf("%d", &req[i]);
printf("Enter initial head position: ");
scanf("%d", &head);
printf("\nStep\tFrom\tTo\tMovement\n");
printf("--------------------------------\n");
for(int i = 0; i < n; i++) {
int movement = abs(head - req[i]);
printf("%d\t%d\t%d\t%d\n", i+1, head, req[i], movement);
total += movement;
head = req[i];
}
printf("--------------------------------\n");
printf("Total head movement = %d\n", total);
return 0;
}
SSTF Disk Scheduling
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, head, total = 0;
printf("Enter number of requests: ");
scanf("%d", &n);
int req[n], visited[n];
printf("Enter the requests:\n");
for(int i = 0; i < n; i++) {
scanf("%d", &req[i]);
visited[i] = 0;
}
printf("Enter initial head position: ");
scanf("%d", &head);
printf("\nStep\tFrom\tTo\tMovement\n");
printf("--------------------------------\n");
for(int step = 0; step < n; step) {
int min = 100000, index = -1;
for(int i = 0; i < n; i++) {
if(!visited[i]) {
int dist = abs(head - req[i]);
if(dist < min) {
min = dist;
index = i;
}
}
}
printf("%d\t%d\t%d\t%d\n", step+1, head, req[index], min);
total += min;
head = req[index];
visited[index] = 1;
}
printf("--------------------------------\n");
printf("Total head movement = %d\n", total);
return 0;
}