OneCompiler

os9

112

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;

}