os9
Q1)
#include <stdio.h>
#include <stdbool.h>
#define NUM_RESOURCES 4
#define NUM_PROCESSES 5
int allocation[NUM_PROCESSES][NUM_RESOURCES] = {
{0, 0, 1, 2},
{1, 0, 0, 0},
{1, 3, 5, 4},
{0, 6, 3, 2},
{0, 0, 1, 4}
};
int max[NUM_PROCESSES][NUM_RESOURCES] = {
{0, 0, 1, 2},
{1, 7, 5, 0},
{2, 3, 5, 6},
{0, 6, 5, 2},
{0, 6, 5, 6}
};
int available[NUM_RESOURCES] = {1, 5, 2, 0};
bool canExecute(int process) {
for (int i = 0; i < NUM_RESOURCES; i++) {
if (max[process][i] - allocation[process][i] > available[i]) {
return false;
}
}
return true;
}
void executeProcess(int process) {
for (int i = 0; i < NUM_RESOURCES; i++) {
available[i] += allocation[process][i];
allocation[process][i] = 0;
}
}
bool isSafe() {
bool finished[NUM_PROCESSES] = {false};
int work[NUM_RESOURCES];
for (int i = 0; i < NUM_RESOURCES; i++) {
work[i] = available[i];
}
int count = 0;
while (count < NUM_PROCESSES) {
bool found = false;
for (int i = 0; i < NUM_PROCESSES; i++) {
if (!finished[i] && canExecute(i)) {
executeProcess(i);
finished[i] = true;
count++;
found = true;
}
}
if (!found) {
return false;
}
}
return true;
}
int main() {
if (isSafe()) {
printf("The current system is in a safe state.\n");
} else {
printf("The current system is not in a safe state.\n");
}
return 0;
}
Q2)
#include <stdio.h>
#include <stdlib.h>
#define MAX_BLOCKS 100
void look(int requests[], int n, int start, int direction) {
int totalHeadMovements = 0;
int currentHead = start;
printf("Head Movement Sequence: %d", currentHead);
int i, j;
if (direction == -1) {
// Move left
for (i = currentHead; i >= 0; i--) {
for (j = 0; j < n; j++) {
if (requests[j] == i) {
totalHeadMovements += abs(currentHead - i);
printf(" -> %d", i);
currentHead = i;
break;
}
}
}
for (i = currentHead + 1; i < MAX_BLOCKS; i++) {
for (j = 0; j < n; j++) {
if (requests[j] == i) {
totalHeadMovements += abs(currentHead - i);
printf(" -> %d", i);
currentHead = i;
break;
}
}
}
} else {
// Move right
for (i = currentHead; i < MAX_BLOCKS; i++) {
for (j = 0; j < n; j++) {
if (requests[j] == i) {
totalHeadMovements += abs(currentHead - i);
printf(" -> %d", i);
currentHead = i;
break;
}
}
}
for (i = currentHead - 1; i >= 0; i--) {
for (j = 0; j < n; j++) {
if (requests[j] == i) {
totalHeadMovements += abs(currentHead - i);
printf(" -> %d", i);
currentHead = i;
break;
}
}
}
}
printf("\nTotal Head Movements: %d\n", totalHeadMovements);
}
int main() {
int n;
printf("Enter the number of disk requests: ");
scanf("%d", &n);
int requests[n];
printf("Enter the disk request string: ");
for (int i = 0; i < n; i++) {
scanf("%d", &requests[i]);
}
int start;
printf("Enter the starting head position: ");
scanf("%d", &start);
int direction;
printf("Enter the direction (1 for right, -1 for left): ");
scanf("%d", &direction);
look(requests, n, start, direction);
return 0;
}