os14
Q1)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_BLOCKS 1000
void show_bit_vector(int disk[], int n);
void show_directory(int disk[], int n);
void create_new_file(int disk[], int n);
void delete_file(int disk[], int n);
int main() {
int disk[MAX_BLOCKS];
int n;
printf("Enter the number of blocks on the disk: ");
scanf("%d", &n);
// Randomly mark some blocks as allocated
srand(time(NULL));
for (int i = 0; i < n; i++) {
disk[i] = rand() % 2; // Randomly mark blocks as allocated (1) or free (0)
}
char choice;
do {
printf("\nMenu:\n");
printf("1. Show Bit Vector\n");
printf("2. Show Directory\n");
printf("3. Create New File\n");
printf("4. Delete File\n");
printf("5. Exit\n");
printf("Enter your choice: ");
scanf(" %c", &choice);
switch (choice) {
case '1':
show_bit_vector(disk, n);
break;
case '2':
show_directory(disk, n);
break;
case '3':
create_new_file(disk, n);
break;
case '4':
delete_file(disk, n);
break;
case '5':
printf("Exiting...\n");
break;
default:
printf("Invalid choice! Please try again.\n");
}
} while (choice != '5');
return 0;
}
void show_bit_vector(int disk[], int n) {
printf("Bit Vector:\n");
for (int i = 0; i < n; i++) {
printf("%d ", disk[i]);
}
printf("\n");
}
void show_directory(int disk[], int n) {
printf("Directory:\n");
printf("File Name\tStart Block\tEnd Block\n");
int start_block = -1;
for (int i = 0; i < n; i++) {
if (disk[i] == 1 && start_block == -1) {
start_block = i;
} else if ((disk[i] == 0 || i == n - 1) && start_block != -1) {
printf("File%d\t\t%d\t\t%d\n", start_block, start_block, i - 1);
start_block = -1;
}
}
}
void create_new_file(int disk[], int n) {
int start, end;
printf("Enter the starting block for the new file: ");
scanf("%d", &start);
printf("Enter the ending block for the new file: ");
scanf("%d", &end);
if (start < 0 || start >= n || end < start || end >= n) {
printf("Invalid range! Please enter valid start and end blocks.\n");
return;
}
for (int i = start; i <= end; i++) {
if (disk[i] == 1) {
printf("Block %d is already allocated!\n", i);
return;
}
}
for (int i = start; i <= end; i++) {
disk[i] = 1; // Mark blocks as allocated
}
printf("New file created successfully.\n");
}
void delete_file(int disk[], int n) {
int start;
printf("Enter the starting block of the file to delete: ");
scanf("%d", &start);
if (start < 0 || start >= n) {
printf("Invalid block number! Please enter a valid block number.\n");
return;
}
if (disk[start] == 0) {
printf("Block %d is already free!\n", start);
return;
}
int end = start;
while (end < n && disk[end] == 1) {
end++;
}
end--;
for (int i = start; i <= end; i++) {
disk[i] = 0; // Mark blocks as free
}
printf("File deleted successfully.\n");
}
Q2)
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
void sstf(int requests[], int n_requests, int start_position) {
int total_head_movements = 0;
int current_position = start_position;
printf("Order of request servicing:\n");
for (int i = 0; i < n_requests; i++) {
int min_distance = INT_MAX;
int min_index = -1;
for (int j = 0; j < n_requests; j++) {
if (requests[j] != -1) {
int distance = abs(requests[j] - current_position);
if (distance < min_distance) {
min_distance = distance;
min_index = j;
}
}
}
if (min_index != -1) {
printf("%d ", requests[min_index]);
total_head_movements += min_distance;
current_position = requests[min_index];
requests[min_index] = -1; // Mark as serviced
}
}
printf("\nTotal head movements: %d\n", total_head_movements);
}
int main() {
int n_requests, start_position;
printf("Enter the number of disk requests: ");
scanf("%d", &n_requests);
int *requests = (int *)malloc(n_requests * sizeof(int));
printf("Enter the disk requests: ");
for (int i = 0; i < n_requests; i++) {
scanf("%d", &requests[i]);
}
printf("Enter the start head position: ");
scanf("%d", &start_position);
sstf(requests, n_requests, start_position);
free(requests);
return 0;
}