os20
Q1)
#include <stdio.h>
#include <stdlib.h>
void scan(int requests[], int n, int start, int direction);
int main() {
int n, start, direction;
printf("Enter the total number of disk blocks: ");
scanf("%d", &n);
int *requests = (int *)malloc(n * sizeof(int));
printf("Enter the disk request string:\n");
for (int i = 0; i < n; i++) {
scanf("%d", &requests[i]);
}
printf("Enter the starting head position: ");
scanf("%d", &start);
printf("Enter the direction (1 for Right, -1 for Left): ");
scanf("%d", &direction);
scan(requests, n, start, direction);
free(requests);
return 0;
}
void scan(int requests[], int n, int start, int direction) {
int total_head_movements = 0;
int *visited = (int *)calloc(n, sizeof(int));
printf("List of requests in order of service:\n");
int cur = start;
while (1) {
int min_diff = -1;
int next_index = -1;
for (int i = 0; i < n; i++) {
if (!visited[i]) {
if (requests[i] >= 0 && requests[i] <= n - 1) {
int diff = abs(cur - requests[i]);
if (min_diff == -1 || diff < min_diff) {
min_diff = diff;
next_index = i;
}
}
}
}
if (next_index == -1) {
if (direction == 1) {
printf("%d -> ", n - 1);
total_head_movements += n - 1 - cur;
cur = n - 1;
} else if (direction == -1) {
printf("%d -> ", 0);
total_head_movements += cur;
cur = 0;
}
break;
}
printf("%d -> ", requests[next_index]);
total_head_movements += abs(cur - requests[next_index]);
visited[next_index] = 1;
cur = requests[next_index];
}
printf("\nTotal number of head movements: %d\n", total_head_movements);
free(visited);
}
Q2)
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#define ARRAY_SIZE 1000
int main(int argc, char *argv[]) {
MPI_Init(&argc, &argv);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
int *arr = (int *)malloc(ARRAY_SIZE * sizeof(int));
if (rank == 0) {
srand(time(NULL));
for (int i = 0; i < ARRAY_SIZE; i++) {
arr[i] = rand() % 1000;
}
}
int max_local = -1;
for (int i = rank; i < ARRAY_SIZE; i += size) {
if (arr[i] > max_local) {
max_local = arr[i];
}
}
int max_global;
MPI_Reduce(&max_local, &max_global, 1, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD);
if (rank == 0) {
printf("Max number: %d\n", max_global);
}
MPI_Finalize();
return 0;
}