os7
Q1)
#include <stdio.h>
#define MAX_PROCESSES 5
#define MAX_RESOURCES 4
int allocation[MAX_PROCESSES][MAX_RESOURCES] = {
{2, 0, 0, 1},
{3, 1, 2, 1},
{2, 1, 0, 3},
{1, 3, 1, 2},
{1, 4, 3, 2}
};
int max[MAX_PROCESSES][MAX_RESOURCES] = {
{4, 2, 1, 2},
{5, 2, 5, 2},
{2, 3, 1, 6},
{1, 4, 2, 4},
{3, 6, 6, 5}
};
int available[MAX_RESOURCES] = {3, 3, 2, 1};
void calculateNeed(int need[MAX_PROCESSES][MAX_RESOURCES]) {
for (int i = 0; i < MAX_PROCESSES; i++) {
for (int j = 0; j < MAX_RESOURCES; j++) {
need[i][j] = max[i][j] - allocation[i][j];
}
}
}
int checkSafety(int need[MAX_PROCESSES][MAX_RESOURCES], int work[MAX_RESOURCES], int finish[MAX_PROCESSES]) {
int safeSeq[MAX_PROCESSES], count = 0;
for (int i = 0; i < MAX_RESOURCES; i++) {
work[i] = available[i];
}
int done;
do {
done = 1;
for (int i = 0; i < MAX_PROCESSES; i++) {
if (finish[i] == 0) {
int j;
for (j = 0; j < MAX_RESOURCES; j++) {
if (need[i][j] > work[j]) {
break;
}
}
if (j == MAX_RESOURCES) {
for (int k = 0; k < MAX_RESOURCES; k++) {
work[k] += allocation[i][k];
}
safeSeq[count++] = i;
finish[i] = 1;
done = 0;
}
}
}
} while (!done);
printf("Safe Sequence: ");
for (int i = 0; i < MAX_PROCESSES - 1; i++) {
printf("P%d -> ", safeSeq[i]);
}
printf("P%d\n", safeSeq[MAX_PROCESSES - 1]);
for (int i = 0; i < MAX_PROCESSES; i++) {
if (finish[i] == 0) {
printf("System is not in a safe state!\n");
return 0;
}
}
printf("System is in a safe state!\n");
return 1;
}
int main() {
int need[MAX_PROCESSES][MAX_RESOURCES];
int work[MAX_RESOURCES];
int finish[MAX_PROCESSES] = {0};
calculateNeed(need);
checkSafety(need, work, finish);
return 0;
}
Q2)
#include <stdio.h>
#include <stdlib.h>
void scan(int requests[], int n, int start, int direction) {
int totalHeadMovements = 0;
int currentHead = start;
int minPos = 0, maxPos = 199; // Assuming the disk range is from 0 to 199
printf("Head Movement Sequence: ");
if (direction == 1) { // Right direction
printf("%d -> ", currentHead);
totalHeadMovements += abs(start - maxPos);
currentHead = maxPos;
for (int i = start; i <= maxPos; i++) {
printf("%d -> ", i);
}
for (int i = minPos; i < start; i++) {
printf("%d -> ", i);
}
} else { // Left direction
printf("%d -> ", currentHead);
totalHeadMovements += abs(start - minPos);
currentHead = minPos;
for (int i = start; i >= minPos; i--) {
printf("%d -> ", i);
}
for (int i = maxPos; i > start; i--) {
printf("%d -> ", i);
}
}
printf("\nTotal Head Movements: %d\n", totalHeadMovements);
}
int main() {
int requests[] = {82, 170, 43, 140, 24, 16, 190};
int n = sizeof(requests) / sizeof(requests[0]);
int start, direction;
printf("Enter the starting head position: ");
scanf("%d", &start);
printf("Enter the direction (1 for Right, 0 for Left): ");
scanf("%d", &direction);
scan(requests, n, start, direction);
return 0;
}