OneCompiler

os7

111

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;

}