Module 2
Module 2
Aim :- scan
Code :-
#include <stdio.h>
#include <stdlib.h>
arr[j + 1] = temp;
sort(requests, n);
seek_sequence[index++] = head;
if (direction == 1) {
seek_sequence[index++] = requests[i];
}
seek_sequence[index++] = 199;
seek_sequence[index++] = requests[i];
} else {
seek_sequence[index++] = requests[i];
seek_sequence[index++] = 0;
seek_sequence[index++] = requests[i];
total_head_movement += distance;
}
int main() {
int direction = 1;
return 0;
Output:-
2
Aim :- c-scan
Code :-
#include <stdio.h>
#include <stdlib.h>
void sort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void cscan(int requests[], int n, int head, int direction) {
int seek_sequence[100], index = 0, distance, total_head_movement = 0;
sort(requests, n);
seek_sequence[index++] = head;
if (direction == 1) {
for (int i = 0; i < n; i++) {
if (requests[i] >= head) {
seek_sequence[index++] = requests[i];
}
}
seek_sequence[index++] = 199;
seek_sequence[index++] = 0;
for (int i = 0; i < n; i++) {
if (requests[i] < head) {
seek_sequence[index++] = requests[i];
}
}
} else {
for (int i = n - 1; i >= 0; i--) {
if (requests[i] <= head) {
seek_sequence[index++] = requests[i];
}
}
seek_sequence[index++] = 0;
seek_sequence[index++] = 199;
for (int i = n - 1; i >= 0; i--) {
if (requests[i] > head) {
seek_sequence[index++] = requests[i];
}
}
}
3
Aim :- look
Code :-
#include <stdio.h>
#include <stdlib.h>
void sort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void look(int requests[], int n, int head, int direction) {
int seek_sequence[100], index = 0, distance, total_head_movement = 0;
sort(requests, n);
seek_sequence[index++] = head;
if (direction == 1) {
for (int i = 0; i < n; i++) {
if (requests[i] >= head) {
seek_sequence[index++] = requests[i];
}
}
for (int i = n - 1; i >= 0; i--) {
if (requests[i] < head) {
seek_sequence[index++] = requests[i];
}
}
} else {
for (int i = n - 1; i >= 0; i--) {
if (requests[i] <= head) {
seek_sequence[index++] = requests[i];
}
}
for (int i = 0; i < n; i++) {
if (requests[i] > head) {
seek_sequence[index++] = requests[i];
}
}
}
for (int i = 0; i < index - 1; i++) {
distance = abs(seek_sequence[i + 1] - seek_sequence[i]);
total_head_movement += distance;
}
printf("Seek Sequence: ");
for (int i = 0; i < index; i++) {
printf("%d ", seek_sequence[i]);
}
printf("\nTotal Head Movement: %d\n", total_head_movement);
}
int main() {
int requests[] = { 98, 183, 37, 122, 14, 124, 65, 67 };
int n = sizeof(requests) / sizeof(requests[0]);
int head = 53;
int direction = 1;
look(requests, n, head, direction);
return 0;
}
Output:-
4.
Aim :- c-look
Code :-
#include <stdio.h>
#include <stdlib.h>
void sort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void clook(int requests[], int n, int head, int direction) {
int seek_sequence[100], index = 0, distance, total_head_movement = 0;
sort(requests, n);
seek_sequence[index++] = head;
if (direction == 1) {
for (int i = 0; i < n; i++) {
if (requests[i] >= head) {
seek_sequence[index++] = requests[i];
}
}
if (index == 1) {
seek_sequence[index++] = requests[0];
} else {
seek_sequence[index++] = requests[n - 1];
for (int i = 0; i < n; i++) {
if (requests[i] < head) {
seek_sequence[index++] = requests[i];
}
}
}
} else {
for (int i = n - 1; i >= 0; i--) {
if (requests[i] <= head) {
seek_sequence[index++] = requests[i];
}
}
if (index == 1) {
seek_sequence[index++] = requests[n - 1];
} else {
seek_sequence[index++] = requests[0];
for (int i = n - 1; i >= 0; i--) {
if (requests[i] > head) {
seek_sequence[index++] = requests[i];
}
}
}
}
for (int i = 0; i < index - 1; i++) {
distance = abs(seek_sequence[i + 1] - seek_sequence[i]);
total_head_movement += distance;
}
printf("Seek Sequence: ");
for (int i = 0; i < index; i++) {
printf("%d ", seek_sequence[i]);
}
printf("\nTotal Head Movement: %d\n", total_head_movement);
}
int main() {
int requests[] = { 98, 183, 37, 122, 14, 124, 65, 67 };
int n = sizeof(requests) / sizeof(requests[0]);
int head = 53;
int direction = 1;
clook(requests, n, head, direction);
return 0;
}
Output:-
5.
Aim :- FCFS
Code :-
#include <stdio.h>
#include <stdlib.h>
void fcfs(int requests[], int n, int head) {
int seek_sequence[100], index = 0, distance, total_head_movement = 0;
seek_sequence[index++] = head;
for (int i = 0; i < n; i++) {
seek_sequence[index++] = requests[i];
}
for (int i = 0; i < index - 1; i++) {
distance = abs(seek_sequence[i + 1] - seek_sequence[i]);
total_head_movement += distance;
}
printf("Seek Sequence: ");
for (int i = 0; i < index; i++) {
printf("%d ", seek_sequence[i]);
}
printf("\nTotal Head Movement: %d\n", total_head_movement);
}
int main() {
int requests[] = { 98, 183, 37, 122, 14, 124, 65, 67 };
int n = sizeof(requests) / sizeof(requests[0]);
int head = 53;
fcfs(requests, n, head);
return 0;
}
Output:-
6.
Aim :- sstf
Code :-
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
void sstf(int requests[], int n, int head) {
bool visited[100] = {false};
int seek_sequence[100], index = 0, total_head_movement = 0;
int current_position = head;
seek_sequence[index++] = current_position;
7.
Aim :- FIFO
Code :-
#include <stdio.h>
int isPageInFrames(int frames[], int capacity, int page) {
for (int i = 0; i < capacity; i++) {
if (frames[i] == page) return 1;
}
return 0;
}
int fifoPageReplacement(int pages[], int n, int capacity) {
int frames[capacity];
int front = 0;
int page_faults = 0;
for (int i = 0; i < capacity; i++) {
frames[i] = -1;
}
for (int i = 0; i < n; i++) {
if (!isPageInFrames(frames, capacity, pages[i])) {
frames[front] = pages[i];
front = (front + 1) % capacity;
page_faults++;
}
printf("\nStep %d: ", i + 1);
for (int j = 0; j < capacity; j++) {
if (frames[j] != -1)
printf("%d ", frames[j]);
else
printf("- ");
}
}
return page_faults;
}
int main() {
int pages[] = {1, 3, 0, 3, 5, 6, 3, 5, 1, 3, 6, 3};
int n = sizeof(pages) / sizeof(pages[0]);
int capacity = 3;
printf(" FIFO Page Replacement Simulation\n");
printf("===================================\n");
int page_faults = fifoPageReplacement(pages, n, capacity);
printf("\n\nTotal Page Faults: %d\n", page_faults);
return 0;
}
Output:-
8.
Aim :- optimal page replacement
Code :-
#include <stdio.h>
#define MAX_FRAMES 10
#define MAX_PAGES 50
int isPageInFrame(int frames[], int num_frames, int page) {
for (int i = 0; i < num_frames; i++) {
if (frames[i] == page) {
return 1;
}
}
return 0;
}
int findOptimalReplacement(int frames[], int num_frames, int
pages[], int num_pages, int current_index) {
int farthest = -1, replace_index = -1;
9.
Aim :- LRU
Code :- #include <stdio.h>
int isPageInFrames(int frames[], int capacity, int page) {
for (int i = 0; i < capacity; i++) {
if (frames[i] == page) return i;
}
return -1;
}
int findLRU(int time[], int capacity) {
int min = time[0], pos = 0;
for (int i = 1; i < capacity; i++) {
if (time[i] < min) {
min = time[i];
pos = i;
}
}
return pos;
}
int lruPageReplacement(int pages[], int n, int capacity) {
int frames[capacity], time[capacity];
int page_faults = 0, count = 0;
10.
Aim :- second chance algorithm
Code :-
#include <stdio.h>
#define MAX_FRAMES 3
struct Page {
int pageNumber;
int referenceBit;
};
struct Page frames[MAX_FRAMES];
int findPage(int page, int frameCount) {
for (int i = 0; i < frameCount; i++) {
if (frames[i].pageNumber == page) {
frames[i].referenceBit = 1;
return 1;
}
}
return 0;
}
void secondChance(int pages[], int n) {
int frameCount = 0, pointer = 0, pageFaults = 0;
for (int i = 0; i < n; i++) {
if (!findPage(pages[i], frameCount)) {
pageFaults++;