os17
Q1)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_BLOCKS 1000
#define MAX_FILES 100
typedef struct {
int allocated;
int blocks[MAX_BLOCKS];
} IndexEntry;
void show_bit_vector(IndexEntry index[], int n);
void show_directory(IndexEntry index[], int n);
void delete_file(IndexEntry index[], int n);
int main() {
int n;
IndexEntry index[MAX_FILES];
printf("Enter the number of blocks on the disk: ");
scanf("%d", &n);
// Initialize index entries
srand(time(NULL));
for (int i = 0; i < MAX_FILES; i++) {
index[i].allocated = 0;
for (int j = 0; j < MAX_BLOCKS; j++) {
index[i].blocks[j] = 0;
}
}
char choice;
do {
printf("\nMenu:\n");
printf("1. Show Bit Vector\n");
printf("2. Show Directory\n");
printf("3. Delete Already File\n");
printf("4. Exit\n");
printf("Enter your choice: ");
scanf(" %c", &choice);
switch (choice) {
case '1':
show_bit_vector(index, n);
break;
case '2':
show_directory(index, n);
break;
case '3':
delete_file(index, n);
break;
case '4':
printf("Exiting...\n");
break;
default:
printf("Invalid choice! Please try again.\n");
}
} while (choice != '4');
return 0;
}
void show_bit_vector(IndexEntry index[], int n) {
printf("Bit Vector:\n");
for (int i = 0; i < MAX_FILES; i++) {
printf("%d ", index[i].allocated);
}
printf("\n");
}
void show_directory(IndexEntry index[], int n) {
printf("Directory:\n");
printf("File Name\tBlock Numbers\n");
for (int i = 0; i < MAX_FILES; i++) {
if (index[i].allocated) {
printf("File%d\t\t", i);
for (int j = 0; j < n; j++) {
if (index[i].blocks[j] == 1) {
printf("%d ", j);
}
}
printf("\n");
}
}
}
void delete_file(IndexEntry index[], int n) {
int file_num;
printf("Enter the file number to delete: ");
scanf("%d", &file_num);
if (file_num < 0 || file_num >= MAX_FILES) {
printf("Invalid file number!\n");
return;
}
if (index[file_num].allocated == 0) {
printf("File%d is already empty.\n", file_num);
return;
}
index[file_num].allocated = 0;
for (int i = 0; i < n; i++) {
index[file_num].blocks[i] = 0;
}
printf("File%d deleted successfully.\n", file_num);
}
Q2)
#include <stdio.h>
#include <stdlib.h>
void sort(int arr[], int n);
void look(int arr[], 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);
look(requests, n, start, direction);
free(requests);
return 0;
}
void sort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void look(int arr[], int n, int start, int direction) {
sort(arr, n);
printf("Order of disk service:\n");
int total_head_movements = 0;
int current = start;
int index = 0;
while (index < n) {
printf("%d ", current);
if (current == arr[index]) {
index++;
}
current += direction;
total_head_movements++;
if (current < 0 || current >= n) {
direction *= -1;
current += 2 * direction;
}
}
printf("\nTotal number of head movements: %d\n", total_head_movements);
}