Advertisement
dudehost

OS2-Slip-Solutions

Mar 16th, 2025
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 43.36 KB | None | 0 0
  1. Slip 1
  2. Q1: Banker's Algorithm (Menu Driven)
  3. #include <stdio.h>
  4. #define MAX_PROCESSES 5
  5. #define MAX_RESOURCES 3
  6.  
  7. void displayMatrix(int matrix[MAX_PROCESSES][MAX_RESOURCES], char* title) {
  8.    printf("\n%s:\n", title);
  9.    for(int i = 0; i < MAX_PROCESSES; i++) {
  10.        for(int j = 0; j < MAX_RESOURCES; j++)
  11.            printf("%d ", matrix[i][j]);
  12.        printf("\n");
  13.    }
  14. }
  15.  
  16. int main() {
  17.    int allocation[MAX_PROCESSES][MAX_RESOURCES] = {{2,3,2}, {4,0,0}, {5,0,4}, {4,3,3}, {2,2,4}};
  18.    int max[MAX_PROCESSES][MAX_RESOURCES] = {{9,7,5}, {5,2,2}, {1,0,4}, {4,4,4}, {6,5,5}};
  19.    int available[MAX_RESOURCES] = {3,3,2};
  20.    int need[MAX_PROCESSES][MAX_RESOURCES];
  21.    int choice;
  22.  
  23.    do {
  24.        printf("\nMenu:\n1. Accept Available\n2. Display Allocation, Max\n3. Display Need\n4. Display Available\n5. Exit\nChoice: ");
  25.        scanf("%d", &choice);
  26.        switch(choice) {
  27.            case 1: printf("Enter Available (A B C): "); scanf("%d %d %d", &available[0], &available[1], &available[2]); break;
  28.            case 2: displayMatrix(allocation, "Allocation"); displayMatrix(max, "Max"); break;
  29.            case 3:
  30.                for(int i = 0; i < MAX_PROCESSES; i++)
  31.                    for(int j = 0; j < MAX_RESOURCES; j++)
  32.                        need[i][j] = max[i][j] - allocation[i][j];
  33.                displayMatrix(need, "Need"); break;
  34.            case 4: printf("\nAvailable: %d %d %d\n", available[0], available[1], available[2]); break;
  35.            case 5: printf("Exiting...\n"); break;
  36.            default: printf("Invalid choice!\n");
  37.        }
  38.    } while(choice != 5);
  39.    return 0;
  40. }
  41.  
  42. Q2: FCFS Disk Scheduling
  43. #include <stdio.h>
  44. #include <stdlib.h>
  45.  
  46. int main() {
  47.    int requests[] = {55, 58, 39, 18, 90, 160, 150, 38, 184};
  48.    int n = 9, head = 50, totalMovement = 0;
  49.    printf("FCFS Order: %d ", head);
  50.    for(int i = 0; i < n; i++) {
  51.        printf("%d ", requests[i]);
  52.        totalMovement += abs((i == 0 ? head : requests[i-1]) - requests[i]);
  53.    }
  54.    printf("\nTotal Head Movement: %d\n", totalMovement);
  55.    return 0;
  56. }
  57.  
  58. Slip 2
  59. Q1: Banker's Algorithm (Menu Driven)
  60. #include <stdio.h>
  61. #define MAX_PROCESSES 5
  62. #define MAX_RESOURCES 3
  63.  
  64. void displayMatrix(int matrix[MAX_PROCESSES][MAX_RESOURCES], char* title) {
  65.     printf("\n%s:\n", title);
  66.     for(int i = 0; i < MAX_PROCESSES; i++) {
  67.         for(int j = 0; j < MAX_RESOURCES; j++)
  68.             printf("%d ", matrix[i][j]);
  69.         printf("\n");
  70.     }
  71. }
  72.  
  73. int main() {
  74.     int allocation[MAX_PROCESSES][MAX_RESOURCES] = {{0,1,0}, {4,0,0}, {5,0,4}, {4,3,3}, {2,2,4}};
  75.     int max[MAX_PROCESSES][MAX_RESOURCES] = {{0,0,0}, {5,2,2}, {1,0,4}, {4,4,4}, {6,5,5}};
  76.     int available[MAX_RESOURCES] = {0,0,0}; // To be accepted
  77.     int need[MAX_PROCESSES][MAX_RESOURCES];
  78.     int choice;
  79.  
  80.     do {
  81.         printf("\nMenu:\n1. Accept Available\n2. Display Allocation, Max\n3. Display Need\n4. Display Available\n5. Exit\nChoice: ");
  82.         scanf("%d", &choice);
  83.         switch(choice) {
  84.             case 1: printf("Enter Available (A B C): "); scanf("%d %d %d", &available[0], &available[1], &available[2]); break;
  85.             case 2: displayMatrix(allocation, "Allocation"); displayMatrix(max, "Max"); break;
  86.             case 3:
  87.                 for(int i = 0; i < MAX_PROCESSES; i++)
  88.                     for(int j = 0; j < MAX_RESOURCES; j++)
  89.                         need[i][j] = max[i][j] - allocation[i][j];
  90.                 displayMatrix(need, "Need"); break;
  91.             case 4: printf("\nAvailable: %d %d %d\n", available[0], available[1], available[2]); break;
  92.             case 5: printf("Exiting...\n"); break;
  93.             default: printf("Invalid choice!\n");
  94.         }
  95.     } while(choice != 5);
  96.     return 0;
  97. }
  98.  
  99. Q2: SCAN Disk Scheduling
  100. #include <stdio.h>
  101. #include <stdlib.h>
  102.  
  103. void sort(int arr[], int n, int asc) {
  104.     for(int i = 0; i < n-1; i++)
  105.         for(int j = 0; j < n-i-1; j++)
  106.             if(asc ? arr[j] > arr[j+1] : arr[j] < arr[j+1]) {
  107.                 int temp = arr[j];
  108.                 arr[j] = arr[j+1];
  109.                 arr[j+1] = temp;
  110.             }
  111. }
  112.  
  113. int main() {
  114.     int requests[] = {86, 147, 91, 170, 95, 130, 102, 70};
  115.     int n = 8, head = 125, totalMovement = 0;
  116.     int direction = 0; // 0 for Left
  117.     int sorted[n];
  118.     for(int i = 0; i < n; i++) sorted[i] = requests[i];
  119.  
  120.     sort(sorted, n, 1); // Ascending order
  121.     printf("SCAN Order: %d ", head);
  122.    
  123.     int start = 0;
  124.     for(int i = 0; i < n; i++) if(sorted[i] >= head) { start = i; break; }
  125.    
  126.     if(direction == 0) { // Left
  127.         for(int i = start-1; i >= 0; i--) {
  128.             printf("%d ", sorted[i]);
  129.             totalMovement += abs(head - sorted[i]);
  130.             head = sorted[i];
  131.         }
  132.         totalMovement += head; printf("0 ");
  133.         head = 0;
  134.         for(int i = start; i < n; i++) {
  135.             printf("%d ", sorted[i]);
  136.             totalMovement += abs(head - sorted[i]);
  137.             head = sorted[i];
  138.         }
  139.     }
  140.     printf("\nTotal Head Movement: %d\n", totalMovement);
  141.     return 0;
  142. }
  143.  
  144. Slip 3
  145. Q1: Linked File Allocation
  146. #include <stdio.h>
  147. #include <stdlib.h>
  148. #define MAX_BLOCKS 100
  149.  
  150. struct File {
  151.     int start;
  152.     int length;
  153. };
  154.  
  155. int main() {
  156.     int n, bitVector[MAX_BLOCKS] = {0}, choice;
  157.     struct File files[10];
  158.     int fileCount = 0;
  159.  
  160.     printf("Enter total number of blocks: ");
  161.     scanf("%d", &n);
  162.     for(int i = 0; i < n/2; i++) bitVector[rand() % n] = 1; // Random allocation
  163.  
  164.     do {
  165.         printf("\nMenu:\n1. Show Bit Vector\n2. Create New File\n3. Show Directory\n4. Exit\nChoice: ");
  166.         scanf("%d", &choice);
  167.         switch(choice) {
  168.             case 1:
  169.                 printf("Bit Vector: ");
  170.                 for(int i = 0; i < n; i++) printf("%d ", bitVector[i]);
  171.                 printf("\n");
  172.                 break;
  173.             case 2:
  174.                 printf("Enter file length: ");
  175.                 int len; scanf("%d", &len);
  176.                 int start = -1;
  177.                 for(int i = 0; i < n && start == -1; i++)
  178.                     if(!bitVector[i]) {
  179.                         int free = 0;
  180.                         for(int j = i; j < i+len && j < n; j++)
  181.                             if(!bitVector[j]) free++;
  182.                         if(free == len) start = i;
  183.                     }
  184.                 if(start != -1) {
  185.                     for(int i = start; i < start+len; i++) bitVector[i] = 1;
  186.                     files[fileCount].start = start;
  187.                     files[fileCount].length = len;
  188.                     fileCount++;
  189.                     printf("File created at block %d\n", start);
  190.                 } else printf("Not enough space!\n");
  191.                 break;
  192.             case 3:
  193.                 printf("Directory:\n");
  194.                 for(int i = 0; i < fileCount; i++)
  195.                     printf("File %d: Start=%d, Length=%d\n", i, files[i].start, files[i].length);
  196.                 break;
  197.             case 4: printf("Exiting...\n"); break;
  198.             default: printf("Invalid choice!\n");
  199.         }
  200.     } while(choice != 4);
  201.     return 0;
  202. }
  203.  
  204. Q2: C-SCAN Disk Scheduling
  205. #include <stdio.h>
  206. #include <stdlib.h>
  207.  
  208. void sort(int arr[], int n) {
  209.     for(int i = 0; i < n-1; i++)
  210.         for(int j = 0; j < n-i-1; j++)
  211.             if(arr[j] > arr[j+1]) {
  212.                 int temp = arr[j];
  213.                 arr[j] = arr[j+1];
  214.                 arr[j+1] = temp;
  215.             }
  216. }
  217.  
  218. int main() {
  219.     int requests[] = {80, 150, 60, 135, 40, 35, 170};
  220.     int n = 7, head = 70, totalMovement = 0;
  221.     int sorted[n];
  222.     for(int i = 0; i < n; i++) sorted[i] = requests[i];
  223.  
  224.     sort(sorted, n);
  225.     printf("C-SCAN Order: %d ", head);
  226.     int start = 0;
  227.     for(int i = 0; i < n; i++) if(sorted[i] >= head) { start = i; break; }
  228.  
  229.     for(int i = start; i < n; i++) {
  230.         printf("%d ", sorted[i]);
  231.         totalMovement += abs(head - sorted[i]);
  232.         head = sorted[i];
  233.     }
  234.     totalMovement += (199 - head); printf("199 "); head = 199;
  235.     totalMovement += 199; printf("0 "); head = 0;
  236.     for(int i = 0; i < start; i++) {
  237.         printf("%d ", sorted[i]);
  238.         totalMovement += abs(head - sorted[i]);
  239.         head = sorted[i];
  240.     }
  241.     printf("\nTotal Head Movement: %d\n", totalMovement);
  242.     return 0;
  243. }
  244.  
  245. Slip 4
  246. Q1: Resource-Request Algorithm (Safety Check)
  247. #include <stdio.h>
  248. #define MAX_PROCESSES 5
  249. #define MAX_RESOURCES 4
  250.  
  251. int main() {
  252.     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}};
  253.     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}};
  254.     int available[MAX_RESOURCES] = {3,3,2,1};
  255.     int need[MAX_PROCESSES][MAX_RESOURCES], work[MAX_RESOURCES], finish[MAX_PROCESSES] = {0};
  256.     int safeSequence[MAX_PROCESSES], count = 0;
  257.  
  258.     for(int i = 0; i < MAX_PROCESSES; i++)
  259.         for(int j = 0; j < MAX_RESOURCES; j++)
  260.             need[i][j] = max[i][j] - allocation[i][j];
  261.  
  262.     for(int j = 0; j < MAX_RESOURCES; j++) work[j] = available[j];
  263.  
  264.     while(count < MAX_PROCESSES) {
  265.         int found = 0;
  266.         for(int i = 0; i < MAX_PROCESSES; i++) {
  267.             if(!finish[i]) {
  268.                 int canExecute = 1;
  269.                 for(int j = 0; j < MAX_RESOURCES; j++)
  270.                     if(need[i][j] > work[j]) canExecute = 0;
  271.                 if(canExecute) {
  272.                     for(int j = 0; j < MAX_RESOURCES; j++) work[j] += allocation[i][j];
  273.                     finish[i] = 1;
  274.                     safeSequence[count++] = i;
  275.                     found = 1;
  276.                 }
  277.             }
  278.         }
  279.         if(!found) break;
  280.     }
  281.  
  282.     if(count == MAX_PROCESSES) {
  283.         printf("System is in safe state. Safe sequence: ");
  284.         for(int i = 0; i < MAX_PROCESSES; i++) printf("P%d ", safeSequence[i]);
  285.         printf("\n");
  286.     } else printf("System is not in safe state.\n");
  287.     return 0;
  288. }
  289.  
  290. Q2: SCAN Disk Scheduling
  291. #include <stdio.h>
  292. #include <stdlib.h>
  293.  
  294. void sort(int arr[], int n, int asc) {
  295.     for(int i = 0; i < n-1; i++)
  296.         for(int j = 0; j < n-i-1; j++)
  297.             if(asc ? arr[j] > arr[j+1] : arr[j] < arr[j+1]) {
  298.                 int temp = arr[j];
  299.                 arr[j] = arr[j+1];
  300.                 arr[j+1] = temp;
  301.             }
  302. }
  303.  
  304. int main() {
  305.     int requests[] = {82, 170, 43, 140, 24, 16, 190};
  306.     int n = 7, head = 50, totalMovement = 0;
  307.     int direction = 1; // Right
  308.     int sorted[n];
  309.     for(int i = 0; i < n; i++) sorted[i] = requests[i];
  310.  
  311.     sort(sorted, n, 1);
  312.     printf("SCAN Order: %d ", head);
  313.     int start = 0;
  314.     for(int i = 0; i < n; i++) if(sorted[i] >= head) { start = i; break; }
  315.  
  316.     if(direction == 1) {
  317.         for(int i = start; i < n; i++) {
  318.             printf("%d ", sorted[i]);
  319.             totalMovement += abs(head - sorted[i]);
  320.             head = sorted[i];
  321.         }
  322.         totalMovement += (199 - head); printf("199 "); head = 199;
  323.         for(int i = start-1; i >= 0; i--) {
  324.             printf("%d ", sorted[i]);
  325.             totalMovement += abs(head - sorted[i]);
  326.             head = sorted[i];
  327.         }
  328.     }
  329.     printf("\nTotal Head Movement: %d\n", totalMovement);
  330.     return 0;
  331. }
  332.  
  333. Slip 5
  334. Q1: Contiguous File Allocation
  335. #include <stdio.h>
  336. #include <stdlib.h>
  337. #define MAX_BLOCKS 100
  338.  
  339. struct File {
  340.     int start;
  341.     int length;
  342. };
  343.  
  344. int main() {
  345.     int n, bitVector[MAX_BLOCKS] = {0}, choice;
  346.     struct File files[10];
  347.     int fileCount = 0;
  348.  
  349.     printf("Enter total number of blocks: ");
  350.     scanf("%d", &n);
  351.     for(int i = 0; i < n/2; i++) bitVector[rand() % n] = 1;
  352.  
  353.     do {
  354.         printf("\nMenu:\n1. Show Bit Vector\n2. Create New File\n3. Show Directory\n4. Exit\nChoice: ");
  355.         scanf("%d", &choice);
  356.         switch(choice) {
  357.             case 1:
  358.                 printf("Bit Vector: ");
  359.                 for(int i = 0; i < n; i++) printf("%d ", bitVector[i]);
  360.                 printf("\n");
  361.                 break;
  362.             case 2:
  363.                 printf("Enter file length: ");
  364.                 int len; scanf("%d", &len);
  365.                 int start = -1;
  366.                 for(int i = 0; i <= n-len && start == -1; i++) {
  367.                     int free = 1;
  368.                     for(int j = i; j < i+len; j++) if(bitVector[j]) free = 0;
  369.                     if(free) start = i;
  370.                 }
  371.                 if(start != -1) {
  372.                     for(int i = start; i < start+len; i++) bitVector[i] = 1;
  373.                     files[fileCount].start = start;
  374.                     files[fileCount].length = len;
  375.                     fileCount++;
  376.                     printf("File created at block %d\n", start);
  377.                 } else printf("Not enough contiguous space!\n");
  378.                 break;
  379.             case 3:
  380.                 printf("Directory:\n");
  381.                 for(int i = 0; i < fileCount; i++)
  382.                     printf("File %d: Start=%d, Length=%d\n", i, files[i].start, files[i].length);
  383.                 break;
  384.             case 4: printf("Exiting...\n"); break;
  385.             default: printf("Invalid choice!\n");
  386.         }
  387.     } while(choice != 4);
  388.     return 0;
  389. }
  390.  
  391. Q2: SSTF Disk Scheduling
  392. #include <stdio.h>
  393. #include <stdlib.h>
  394.  
  395. int findNearest(int arr[], int n, int head, int visited[]) {
  396.     int minDist = 9999, index = -1;
  397.     for(int i = 0; i < n; i++)
  398.         if(!visited[i] && abs(arr[i] - head) < minDist) {
  399.             minDist = abs(arr[i] - head);
  400.             index = i;
  401.         }
  402.     return index;
  403. }
  404.  
  405. int main() {
  406.     int requests[] = {186, 89, 44, 70, 102, 22, 51, 124};
  407.     int n = 8, head = 70, totalMovement = 0;
  408.     int visited[n] = {0};
  409.    
  410.     printf("SSTF Order: %d ", head);
  411.     for(int i = 0; i < n; i++) {
  412.         int next = findNearest(requests, n, head, visited);
  413.         visited[next] = 1;
  414.         totalMovement += abs(head - requests[next]);
  415.         head = requests[next];
  416.         printf("%d ", head);
  417.     }
  418.     printf("\nTotal Head Movement: %d\n", totalMovement);
  419.     return 0;
  420. }
  421.  
  422. Slip 6
  423. Q1: Resource-Request Algorithm (Safety Check)
  424. #include <stdio.h>
  425. #define MAX_PROCESSES 5
  426. #define MAX_RESOURCES 4
  427.  
  428. int main() {
  429.     int allocation[MAX_PROCESSES][MAX_RESOURCES] = {{0,0,1,2}, {1,0,0,0}, {1,3,5,4}, {0,6,3,2}, {0,0,1,4}};
  430.     int max[MAX_PROCESSES][MAX_RESOURCES] = {{0,0,1,2}, {1,7,5,0}, {2,3,5,6}, {0,6,5,2}, {0,6,5,6}};
  431.     int available[MAX_RESOURCES] = {1,5,2,0};
  432.     int need[MAX_PROCESSES][MAX_RESOURCES], work[MAX_RESOURCES], finish[MAX_PROCESSES] = {0};
  433.     int safeSequence[MAX_PROCESSES], count = 0;
  434.  
  435.     for(int i = 0; i < MAX_PROCESSES; i++)
  436.         for(int j = 0; j < MAX_RESOURCES; j++)
  437.             need[i][j] = max[i][j] - allocation[i][j];
  438.  
  439.     for(int j = 0; j < MAX_RESOURCES; j++) work[j] = available[j];
  440.  
  441.     while(count < MAX_PROCESSES) {
  442.         int found = 0;
  443.         for(int i = 0; i < MAX_PROCESSES; i++) {
  444.             if(!finish[i]) {
  445.                 int canExecute = 1;
  446.                 for(int j = 0; j < MAX_RESOURCES; j++)
  447.                     if(need[i][j] > work[j]) canExecute = 0;
  448.                 if(canExecute) {
  449.                     for(int j = 0; j < MAX_RESOURCES; j++) work[j] += allocation[i][j];
  450.                     finish[i] = 1;
  451.                     safeSequence[count++] = i;
  452.                     found = 1;
  453.                 }
  454.             }
  455.         }
  456.         if(!found) break;
  457.     }
  458.  
  459.     if(count == MAX_PROCESSES) {
  460.         printf("System is in safe state. Safe sequence: ");
  461.         for(int i = 0; i < MAX_PROCESSES; i++) printf("P%d ", safeSequence[i]);
  462.         printf("\n");
  463.     } else printf("System is not in safe state.\n");
  464.     return 0;
  465. }
  466.  
  467. Q2: LOOK Disk Scheduling
  468. #include <stdio.h>
  469. #include <stdlib.h>
  470.  
  471. void sort(int arr[], int n, int asc) {
  472.     for(int i = 0; i < n-1; i++)
  473.         for(int j = 0; j < n-i-1; j++)
  474.             if(asc ? arr[j] > arr[j+1] : arr[j] < arr[j+1]) {
  475.                 int temp = arr[j];
  476.                 arr[j] = arr[j+1];
  477.                 arr[j+1] = temp;
  478.             }
  479. }
  480.  
  481. int main() {
  482.     int requests[] = {176, 79, 34, 60, 92, 11, 41, 114};
  483.     int n = 8, head = 65, totalMovement = 0;
  484.     int direction = 0; // Left
  485.     int sorted[n];
  486.     for(int i = 0; i < n; i++) sorted[i] = requests[i];
  487.  
  488.     sort(sorted, n, 1);
  489.     printf("LOOK Order: %d ", head);
  490.     int start = 0;
  491.     for(int i = 0; i < n; i++) if(sorted[i] >= head) { start = i; break; }
  492.  
  493.     if(direction == 0) {
  494.         for(int i = start-1; i >= 0; i--) {
  495.             printf("%d ", sorted[i]);
  496.             totalMovement += abs(head - sorted[i]);
  497.             head = sorted[i];
  498.         }
  499.         for(int i = start; i < n; i++) {
  500.             printf("%d ", sorted[i]);
  501.             totalMovement += abs(head - sorted[i]);
  502.             head = sorted[i];
  503.         }
  504.     }
  505.     printf("\nTotal Head Movement: %d\n", totalMovement);
  506.     return 0;
  507. }
  508.  
  509. Slip 7
  510. Q1: Banker's Algorithm (Safety Check)
  511. #include <stdio.h>
  512. #define MAX_PROCESSES 5
  513. #define MAX_RESOURCES 3
  514.  
  515. void displayNeed(int need[MAX_PROCESSES][MAX_RESOURCES]) {
  516.    printf("\nNeed Matrix:\n");
  517.    for(int i = 0; i < MAX_PROCESSES; i++) {
  518.        for(int j = 0; j < MAX_RESOURCES; j++)
  519.            printf("%d ", need[i][j]);
  520.        printf("\n");
  521.    }
  522. }
  523.  
  524. int main() {
  525.    int allocation[MAX_PROCESSES][MAX_RESOURCES] = {{0,1,0}, {2,0,0}, {3,0,3}, {2,1,1}, {0,0,2}};
  526.    int max[MAX_PROCESSES][MAX_RESOURCES] = {{0,0,0}, {2,0,2}, {0,0,0}, {1,0,0}, {0,0,2}};
  527.    int available[MAX_RESOURCES] = {0,0,0};
  528.    int need[MAX_PROCESSES][MAX_RESOURCES], work[MAX_RESOURCES], finish[MAX_PROCESSES] = {0};
  529.    int safeSequence[MAX_PROCESSES], count = 0;
  530.  
  531.    for(int i = 0; i < MAX_PROCESSES; i++)
  532.        for(int j = 0; j < MAX_RESOURCES; j++)
  533.            need[i][j] = max[i][j] - allocation[i][j];
  534.  
  535.    displayNeed(need);
  536.    for(int j = 0; j < MAX_RESOURCES; j++) work[j] = available[j];
  537.  
  538.    while(count < MAX_PROCESSES) {
  539.        int found = 0;
  540.        for(int i = 0; i < MAX_PROCESSES; i++) {
  541.            if(!finish[i]) {
  542.                int canExecute = 1;
  543.                for(int j = 0; j < MAX_RESOURCES; j++)
  544.                    if(need[i][j] > work[j]) canExecute = 0;
  545.                if(canExecute) {
  546.                    for(int j = 0; j < MAX_RESOURCES; j++) work[j] += allocation[i][j];
  547.                    finish[i] = 1;
  548.                    safeSequence[count++] = i;
  549.                    found = 1;
  550.                }
  551.            }
  552.        }
  553.        if(!found) break;
  554.    }
  555.  
  556.    if(count == MAX_PROCESSES) {
  557.        printf("System is in safe state. Safe sequence: ");
  558.        for(int i = 0; i < MAX_PROCESSES; i++) printf("P%d ", safeSequence[i]);
  559.        printf("\n");
  560.    } else printf("System is not in safe state.\n");
  561.    return 0;
  562. }
  563.  
  564. Q2: SCAN Disk Scheduling
  565. #include <stdio.h>
  566. #include <stdlib.h>
  567.  
  568. void sort(int arr[], int n, int asc) {
  569.    for(int i = 0; i < n-1; i++)
  570.        for(int j = 0; j < n-i-1; j++)
  571.            if(asc ? arr[j] > arr[j+1] : arr[j] < arr[j+1]) {
  572.                int temp = arr[j];
  573.                arr[j] = arr[j+1];
  574.                arr[j+1] = temp;
  575.            }
  576. }
  577.  
  578. int main() {
  579.    int requests[] = {176, 79, 34, 60, 92, 11, 41, 114};
  580.    int n = 8, head = 65, totalMovement = 0;
  581.    int direction = 0; // Left
  582.    int sorted[n];
  583.    for(int i = 0; i < n; i++) sorted[i] = requests[i];
  584.  
  585.    sort(sorted, n, 1);
  586.    printf("SCAN Order: %d ", head);
  587.    int start = 0;
  588.    for(int i = 0; i < n; i++) if(sorted[i] >= head) { start = i; break; }
  589.  
  590.    if(direction == 0) {
  591.        for(int i = start-1; i >= 0; i--) {
  592.            printf("%d ", sorted[i]);
  593.            totalMovement += abs(head - sorted[i]);
  594.            head = sorted[i];
  595.        }
  596.        totalMovement += head; printf("0 "); head = 0;
  597.        for(int i = start; i < n; i++) {
  598.            printf("%d ", sorted[i]);
  599.            totalMovement += abs(head - sorted[i]);
  600.            head = sorted[i];
  601.        }
  602.    }
  603.    printf("\nTotal Head Movement: %d\n", totalMovement);
  604.    return 0;
  605. }
  606.  
  607. Slip 8
  608. Q1: Sequential File Allocation
  609. #include <stdio.h>
  610. #include <stdlib.h>
  611. #define MAX_BLOCKS 100
  612.  
  613. struct File {
  614.    int start;
  615.    int length;
  616. };
  617.  
  618. int main() {
  619.    int n, bitVector[MAX_BLOCKS] = {0}, choice;
  620.    struct File files[10];
  621.    int fileCount = 0;
  622.  
  623.    printf("Enter total number of blocks: ");
  624.    scanf("%d", &n);
  625.    for(int i = 0; i < n/2; i++) bitVector[rand() % n] = 1;
  626.  
  627.    do {
  628.        printf("\nMenu:\n1. Show Bit Vector\n2. Show Directory\n3. Delete File\n4. Exit\nChoice: ");
  629.        scanf("%d", &choice);
  630.        switch(choice) {
  631.            case 1:
  632.                printf("Bit Vector: ");
  633.                for(int i = 0; i < n; i++) printf("%d ", bitVector[i]);
  634.                printf("\n");
  635.                break;
  636.            case 2:
  637.                printf("Directory:\n");
  638.                for(int i = 0; i < fileCount; i++)
  639.                    printf("File %d: Start=%d, Length=%d\n", i, files[i].start, files[i].length);
  640.                break;
  641.            case 3:
  642.                printf("Enter file index to delete (0-%d): ", fileCount-1);
  643.                int idx; scanf("%d", &idx);
  644.                if(idx >= 0 && idx < fileCount) {
  645.                    for(int i = files[idx].start; i < files[idx].start + files[idx].length; i++)
  646.                        bitVector[i] = 0;
  647.                    for(int i = idx; i < fileCount-1; i++) files[i] = files[i+1];
  648.                    fileCount--;
  649.                    printf("File deleted.\n");
  650.                } else printf("Invalid index!\n");
  651.                break;
  652.            case 4: printf("Exiting...\n"); break;
  653.            default: printf("Invalid choice!\n");
  654.        }
  655.    } while(choice != 4);
  656.    return 0;
  657. }
  658.  
  659. Q2: SSTF Disk Scheduling
  660. #include <stdio.h>
  661. #include <stdlib.h>
  662.  
  663. int findNearest(int arr[], int n, int head, int visited[]) {
  664.    int minDist = 9999, index = -1;
  665.    for(int i = 0; i < n; i++)
  666.        if(!visited[i] && abs(arr[i] - head) < minDist) {
  667.            minDist = abs(arr[i] - head);
  668.            index = i;
  669.        }
  670.    return index;
  671. }
  672.  
  673. int main() {
  674.    int requests[] = {55, 58, 39, 18, 90, 160, 150, 38, 184};
  675.    int n = 9, head = 50, totalMovement = 0;
  676.    int visited[n] = {0};
  677.    
  678.    printf("SSTF Order: %d ", head);
  679.    for(int i = 0; i < n; i++) {
  680.        int next = findNearest(requests, n, head, visited);
  681.        visited[next] = 1;
  682.        totalMovement += abs(head - requests[next]);
  683.        head = requests[next];
  684.        printf("%d ", head);
  685.    }
  686.    printf("\nTotal Head Movement: %d\n", totalMovement);
  687.    return 0;
  688. }
  689.  
  690. Slip 9
  691. Q1: Linked File Allocation
  692. #include <stdio.h>
  693. #include <stdlib.h>
  694. #define MAX_BLOCKS 100
  695.  
  696. struct File {
  697.    int start;
  698.    int length;
  699. };
  700.  
  701. int main() {
  702.    int n, bitVector[MAX_BLOCKS] = {0}, choice;
  703.    struct File files[10];
  704.    int fileCount = 0;
  705.  
  706.    printf("Enter total number of blocks: ");
  707.    scanf("%d", &n);
  708.    for(int i = 0; i < n/2; i++) bitVector[rand() % n] = 1;
  709.  
  710.    do {
  711.        printf("\nMenu:\n1. Show Bit Vector\n2. Create New File\n3. Show Directory\n4. Exit\nChoice: ");
  712.        scanf("%d", &choice);
  713.        switch(choice) {
  714.            case 1:
  715.                printf("Bit Vector: ");
  716.                for(int i = 0; i < n; i++) printf("%d ", bitVector[i]);
  717.                printf("\n");
  718.                break;
  719.            case 2:
  720.                printf("Enter file length: ");
  721.                int len; scanf("%d", &len);
  722.                int start = -1;
  723.                for(int i = 0; i < n && start == -1; i++)
  724.                    if(!bitVector[i]) {
  725.                        int free = 0;
  726.                        for(int j = i; j < i+len && j < n; j++)
  727.                            if(!bitVector[j]) free++;
  728.                        if(free == len) start = i;
  729.                    }
  730.                if(start != -1) {
  731.                    for(int i = start; i < start+len; i++) bitVector[i] = 1;
  732.                    files[fileCount].start = start;
  733.                    files[fileCount].length = len;
  734.                    fileCount++;
  735.                    printf("File created at block %d\n", start);
  736.                } else printf("Not enough space!\n");
  737.                break;
  738.            case 3:
  739.                printf("Directory:\n");
  740.                for(int i = 0; i < fileCount; i++)
  741.                    printf("File %d: Start=%d, Length=%d\n", i, files[i].start, files[i].length);
  742.                break;
  743.            case 4: printf("Exiting...\n"); break;
  744.            default: printf("Invalid choice!\n");
  745.        }
  746.    } while(choice != 4);
  747.    return 0;
  748. }
  749.  
  750. Q2: C-SCAN Disk Scheduling
  751. #include <stdio.h>
  752. #include <stdlib.h>
  753.  
  754. void sort(int arr[], int n) {
  755.    for(int i = 0; i < n-1; i++)
  756.        for(int j = 0; j < n-i-1; j++)
  757.            if(arr[j] > arr[j+1]) {
  758.                int temp = arr[j];
  759.                arr[j] = arr[j+1];
  760.                arr[j+1] = temp;
  761.            }
  762. }
  763.  
  764. int main() {
  765.    int requests[] = {80, 150, 60, 135, 40, 35, 170};
  766.    int n = 7, head = 70, totalMovement = 0;
  767.    int sorted[n];
  768.    for(int i = 0; i < n; i++) sorted[i] = requests[i];
  769.  
  770.    sort(sorted, n);
  771.    printf("C-SCAN Order: %d ", head);
  772.    int start = 0;
  773.    for(int i = 0; i < n; i++) if(sorted[i] >= head) { start = i; break; }
  774.  
  775.    for(int i = start; i < n; i++) {
  776.        printf("%d ", sorted[i]);
  777.        totalMovement += abs(head - sorted[i]);
  778.        head = sorted[i];
  779.    }
  780.    totalMovement += (199 - head); printf("199 "); head = 199;
  781.    totalMovement += 199; printf("0 "); head = 0;
  782.    for(int i = 0; i < start; i++) {
  783.        printf("%d ", sorted[i]);
  784.        totalMovement += abs(head - sorted[i]);
  785.        head = sorted[i];
  786.    }
  787.    printf("\nTotal Head Movement: %d\n", totalMovement);
  788.    return 0;
  789. }
  790.  
  791. Slip 10
  792. Q1: Indexed File Allocation
  793. #include <stdio.h>
  794. #include <stdlib.h>
  795. #define MAX_BLOCKS 100
  796.  
  797. struct File {
  798.    int indexBlock;
  799.    int length;
  800. };
  801.  
  802. int main() {
  803.    int n, bitVector[MAX_BLOCKS] = {0}, choice;
  804.    struct File files[10];
  805.    int fileCount = 0;
  806.  
  807.    printf("Enter total number of blocks: ");
  808.    scanf("%d", &n);
  809.    for(int i = 0; i < n/2; i++) bitVector[rand() % n] = 1;
  810.  
  811.    do {
  812.        printf("\nMenu:\n1. Show Bit Vector\n2. Show Directory\n3. Delete File\n4. Exit\nChoice: ");
  813.        scanf("%d", &choice);
  814.        switch(choice) {
  815.            case 1:
  816.                printf("Bit Vector: ");
  817.                for(int i = 0; i < n; i++) printf("%d ", bitVector[i]);
  818.                printf("\n");
  819.                break;
  820.            case 2:
  821.                printf("Directory:\n");
  822.                for(int i = 0; i < fileCount; i++)
  823.                    printf("File %d: Index=%d, Length=%d\n", i, files[i].indexBlock, files[i].length);
  824.                break;
  825.            case 3:
  826.                printf("Enter file index to delete (0-%d): ", fileCount-1);
  827.                int idx; scanf("%d", &idx);
  828.                if(idx >= 0 && idx < fileCount) {
  829.                    bitVector[files[idx].indexBlock] = 0;
  830.                    for(int i = idx; i < fileCount-1; i++) files[i] = files[i+1];
  831.                    fileCount--;
  832.                    printf("File deleted.\n");
  833.                } else printf("Invalid index!\n");
  834.                break;
  835.            case 4: printf("Exiting...\n"); break;
  836.            default: printf("Invalid choice!\n");
  837.        }
  838.    } while(choice != 4);
  839.    return 0;
  840. }
  841.  
  842. Q2: LOOK Disk Scheduling
  843. #include <stdio.h>
  844. #include <stdlib.h>
  845.  
  846. void sort(int arr[], int n, int asc) {
  847.    for(int i = 0; i < n-1; i++)
  848.        for(int j = 0; j < n-i-1; j++)
  849.            if(asc ? arr[j] > arr[j+1] : arr[j] < arr[j+1]) {
  850.                int temp = arr[j];
  851.                arr[j] = arr[j+1];
  852.                arr[j+1] = temp;
  853.            }
  854. }
  855.  
  856. int main() {
  857.    int requests[] = {23, 89, 132, 42, 187, 69, 36, 55};
  858.    int n = 8, head = 40, totalMovement = 0;
  859.    int direction = 0; // Left
  860.    int sorted[n];
  861.    for(int i = 0; i < n; i++) sorted[i] = requests[i];
  862.  
  863.    sort(sorted, n, 1);
  864.    printf("LOOK Order: %d ", head);
  865.    int start = 0;
  866.    for(int i = 0; i < n; i++) if(sorted[i] >= head) { start = i; break; }
  867.  
  868.    if(direction == 0) {
  869.        for(int i = start-1; i >= 0; i--) {
  870.            printf("%d ", sorted[i]);
  871.            totalMovement += abs(head - sorted[i]);
  872.            head = sorted[i];
  873.        }
  874.        for(int i = start; i < n; i++) {
  875.            printf("%d ", sorted[i]);
  876.            totalMovement += abs(head - sorted[i]);
  877.            head = sorted[i];
  878.        }
  879.    }
  880.    printf("\nTotal Head Movement: %d\n", totalMovement);
  881.    return 0;
  882. }
  883.  
  884. Slip 11
  885. Q1: Indexed File Allocation
  886. #include <stdio.h>
  887. #include <stdlib.h>
  888. #define MAX_BLOCKS 100
  889.  
  890. struct File {
  891.    int indexBlock;
  892.    int length;
  893. };
  894.  
  895. int main() {
  896.    int n, bitVector[MAX_BLOCKS] = {0}, choice;
  897.    struct File files[10];
  898.    int fileCount = 0;
  899.  
  900.    printf("Enter total number of blocks: ");
  901.    scanf("%d", &n);
  902.    for(int i = 0; i < n/2; i++) bitVector[rand() % n] = 1;
  903.  
  904.    do {
  905.        printf("\nMenu:\n1. Show Bit Vector\n2. Create New File\n3. Show Directory\n4. Delete File\n5. Exit\nChoice: ");
  906.        scanf("%d", &choice);
  907.        switch(choice) {
  908.            case 1:
  909.                printf("Bit Vector: ");
  910.                for(int i = 0; i < n; i++) printf("%d ", bitVector[i]);
  911.                printf("\n");
  912.                break;
  913.            case 2:
  914.                printf("Enter file length: ");
  915.                int len; scanf("%d", &len);
  916.                int idx = -1;
  917.                for(int i = 0; i < n && idx == -1; i++)
  918.                    if(!bitVector[i]) idx = i;
  919.                if(idx != -1) {
  920.                    bitVector[idx] = 1;
  921.                    files[fileCount].indexBlock = idx;
  922.                    files[fileCount].length = len;
  923.                    fileCount++;
  924.                    printf("File created with index %d\n", idx);
  925.                } else printf("No free blocks!\n");
  926.                break;
  927.            case 3:
  928.                printf("Directory:\n");
  929.                for(int i = 0; i < fileCount; i++)
  930.                    printf("File %d: Index=%d, Length=%d\n", i, files[i].indexBlock, files[i].length);
  931.                break;
  932.            case 4:
  933.                printf("Enter file index to delete (0-%d): ", fileCount-1);
  934.                int del; scanf("%d", &del);
  935.                if(del >= 0 && del < fileCount) {
  936.                    bitVector[files[del].indexBlock] = 0;
  937.                    for(int i = del; i < fileCount-1; i++) files[i] = files[i+1];
  938.                    fileCount--;
  939.                    printf("File deleted.\n");
  940.                } else printf("Invalid index!\n");
  941.                break;
  942.            case 5: printf("Exiting...\n"); break;
  943.            default: printf("Invalid choice!\n");
  944.        }
  945.    } while(choice != 5);
  946.    return 0;
  947. }
  948.  
  949. Q2: SCAN Disk Scheduling
  950. #include <stdio.h>
  951. #include <stdlib.h>
  952.  
  953. void sort(int arr[], int n, int asc) {
  954.    for(int i = 0; i < n-1; i++)
  955.        for(int j = 0; j < n-i-1; j++)
  956.            if(asc ? arr[j] > arr[j+1] : arr[j] < arr[j+1]) {
  957.                int temp = arr[j];
  958.                arr[j] = arr[j+1];
  959.                arr[j+1] = temp;
  960.            }
  961. }
  962.  
  963. int main() {
  964.    int requests[] = {33, 99, 142, 52, 197, 79, 46, 65};
  965.    int n = 8, head = 72, totalMovement = 0;
  966.    int direction = 1; // Right
  967.    int sorted[n];
  968.    for(int i = 0; i < n; i++) sorted[i] = requests[i];
  969.  
  970.    sort(sorted, n, 1);
  971.    printf("SCAN Order: %d ", head);
  972.    int start = 0;
  973.    for(int i = 0; i < n; i++) if(sorted[i] >= head) { start = i; break; }
  974.  
  975.    if(direction == 1) {
  976.        for(int i = start; i < n; i++) {
  977.            printf("%d ", sorted[i]);
  978.            totalMovement += abs(head - sorted[i]);
  979.            head = sorted[i];
  980.        }
  981.        totalMovement += (199 - head); printf("199 "); head = 199;
  982.        for(int i = start-1; i >= 0; i--) {
  983.            printf("%d ", sorted[i]);
  984.            totalMovement += abs(head - sorted[i]);
  985.            head = sorted[i];
  986.        }
  987.    }
  988.    printf("\nTotal Head Movement: %d\n", totalMovement);
  989.    return 0;
  990. }
  991.  
  992. Slip 12
  993. Q1: Banker's Algorithm (Safety Check)
  994. #include <stdio.h>
  995. #define MAX_PROCESSES 6
  996. #define MAX_RESOURCES 4
  997.  
  998. void displayNeed(int need[MAX_PROCESSES][MAX_RESOURCES]) {
  999.     printf("\nNeed Matrix:\n");
  1000.     for(int i = 0; i < MAX_PROCESSES; i++) {
  1001.         for(int j = 0; j < MAX_RESOURCES; j++)
  1002.             printf("%d ", need[i][j]);
  1003.         printf("\n");
  1004.     }
  1005. }
  1006.  
  1007. int main() {
  1008.     int allocation[MAX_PROCESSES][MAX_RESOURCES] = {{0,3,2,4}, {1,2,0,1}, {0,0,0,0}, {3,3,2,2}, {1,4,3,2}, {2,4,1,4}};
  1009.     int max[MAX_PROCESSES][MAX_RESOURCES] = {{6,5,4,4}, {4,4,4,4}, {0,0,1,2}, {3,9,3,4}, {2,5,3,3}, {4,6,3,4}};
  1010.     int available[MAX_RESOURCES] = {3,4,4,2};
  1011.     int need[MAX_PROCESSES][MAX_RESOURCES], work[MAX_RESOURCES], finish[MAX_PROCESSES] = {0};
  1012.     int safeSequence[MAX_PROCESSES], count = 0;
  1013.  
  1014.     for(int i = 0; i < MAX_PROCESSES; i++)
  1015.         for(int j = 0; j < MAX_RESOURCES; j++)
  1016.             need[i][j] = max[i][j] - allocation[i][j];
  1017.  
  1018.     displayNeed(need);
  1019.     for(int j = 0; j < MAX_RESOURCES; j++) work[j] = available[j];
  1020.  
  1021.     while(count < MAX_PROCESSES) {
  1022.         int found = 0;
  1023.         for(int i = 0; i < MAX_PROCESSES; i++) {
  1024.             if(!finish[i]) {
  1025.                 int canExecute = 1;
  1026.                 for(int j = 0; j < MAX_RESOURCES; j++)
  1027.                     if(need[i][j] > work[j]) canExecute = 0;
  1028.                 if(canExecute) {
  1029.                     for(int j = 0; j < MAX_RESOURCES; j++) work[j] += allocation[i][j];
  1030.                     finish[i] = 1;
  1031.                     safeSequence[count++] = i;
  1032.                     found = 1;
  1033.                 }
  1034.             }
  1035.         }
  1036.         if(!found) break;
  1037.     }
  1038.  
  1039.     if(count == MAX_PROCESSES) {
  1040.         printf("System is in safe state. Safe sequence: ");
  1041.         for(int i = 0; i < MAX_PROCESSES; i++) printf("P%d ", safeSequence[i]);
  1042.         printf("\n");
  1043.     } else printf("System is not in safe state.\n");
  1044.     return 0;
  1045. }
  1046.  
  1047. Q2: C-SCAN Disk Scheduling
  1048. #include <stdio.h>
  1049. #include <stdlib.h>
  1050.  
  1051. void sort(int arr[], int n) {
  1052.     for(int i = 0; i < n-1; i++)
  1053.         for(int j = 0; j < n-i-1; j++)
  1054.             if(arr[j] > arr[j+1]) {
  1055.                 int temp = arr[j];
  1056.                 arr[j] = arr[j+1];
  1057.                 arr[j+1] = temp;
  1058.             }
  1059. }
  1060.  
  1061. int main() {
  1062.     int requests[] = {23, 89, 132, 42, 187, 69, 36, 55};
  1063.     int n = 8, head = 40, totalMovement = 0;
  1064.     int sorted[n];
  1065.     for(int i = 0; i < n; i++) sorted[i] = requests[i];
  1066.  
  1067.     sort(sorted, n);
  1068.     printf("C-SCAN Order: %d ", head);
  1069.     int start = 0;
  1070.     for(int i = 0; i < n; i++) if(sorted[i] >= head) { start = i; break; }
  1071.  
  1072.     for(int i = start-1; i >= 0; i--) {
  1073.         printf("%d ", sorted[i]);
  1074.         totalMovement += abs(head - sorted[i]);
  1075.         head = sorted[i];
  1076.     }
  1077.     totalMovement += head; printf("0 "); head = 0;
  1078.     totalMovement += 199; printf("199 "); head = 199;
  1079.     for(int i = start; i < n; i++) {
  1080.         printf("%d ", sorted[i]);
  1081.         totalMovement += abs(head - sorted[i]);
  1082.         head = sorted[i];
  1083.     }
  1084.     printf("\nTotal Head Movement: %d\n", totalMovement);
  1085.     return 0;
  1086. }
  1087.  
  1088. Slip 13
  1089. Q1: Dynamic Banker's Algorithm
  1090. #include <stdio.h>
  1091. #define MAX_PROCESSES 10
  1092. #define MAX_RESOURCES 10
  1093.  
  1094. int main() {
  1095.    int m, n, allocation[MAX_PROCESSES][MAX_RESOURCES], max[MAX_PROCESSES][MAX_RESOURCES], available[MAX_RESOURCES];
  1096.    int need[MAX_PROCESSES][MAX_RESOURCES];
  1097.  
  1098.    printf("Enter number of processes: "); scanf("%d", &m);
  1099.    printf("Enter number of resource types: "); scanf("%d", &n);
  1100.    printf("Enter instances for each resource type:\n");
  1101.    for(int j = 0; j < n; j++) scanf("%d", &available[j]);
  1102.    printf("Enter Allocation Matrix:\n");
  1103.    for(int i = 0; i < m; i++)
  1104.        for(int j = 0; j < n; j++)
  1105.            scanf("%d", &allocation[i][j]);
  1106.    printf("Enter Max Matrix:\n");
  1107.    for(int i = 0; i < m; i++)
  1108.        for(int j = 0; j < n; j++)
  1109.            scanf("%d", &max[i][j]);
  1110.  
  1111.    for(int i = 0; i < m; i++)
  1112.        for(int j = 0; j < n; j++)
  1113.            need[i][j] = max[i][j] - allocation[i][j];
  1114.  
  1115.    printf("\nNeed Matrix:\n");
  1116.    for(int i = 0; i < m; i++) {
  1117.        for(int j = 0; j < n; j++) printf("%d ", need[i][j]);
  1118.        printf("\n");
  1119.    }
  1120.  
  1121.    int request[MAX_RESOURCES], p;
  1122.    printf("Enter process number for request (0-%d): ", m-1); scanf("%d", &p);
  1123.    printf("Enter request vector:\n");
  1124.    for(int j = 0; j < n; j++) scanf("%d", &request[j]);
  1125.  
  1126.    int canGrant = 1;
  1127.    for(int j = 0; j < n; j++)
  1128.        if(request[j] > need[p][j] || request[j] > available[j]) canGrant = 0;
  1129.  
  1130.    if(canGrant) printf("Request can be granted immediately.\n");
  1131.    else printf("Request cannot be granted immediately.\n");
  1132.    return 0;
  1133. }
  1134.  
  1135. Q2: SSTF Disk Scheduling
  1136. #include <stdio.h>
  1137. #include <stdlib.h>
  1138.  
  1139. int findNearest(int arr[], int n, int head, int visited[]) {
  1140.    int minDist = 9999, index = -1;
  1141.    for(int i = 0; i < n; i++)
  1142.        if(!visited[i] && abs(arr[i] - head) < minDist) {
  1143.            minDist = abs(arr[i] - head);
  1144.            index = i;
  1145.        }
  1146.    return index;
  1147. }
  1148.  
  1149. int main() {
  1150.    int requests[] = {24, 90, 133, 43, 188, 70, 37, 55};
  1151.    int n = 8, head = 58, totalMovement = 0;
  1152.    int visited[n] = {0};
  1153.    
  1154.    printf("SSTF Order: %d ", head);
  1155.    for(int i = 0; i < n; i++) {
  1156.        int next = findNearest(requests, n, head, visited);
  1157.        visited[next] = 1;
  1158.        totalMovement += abs(head - requests[next]);
  1159.        head = requests[next];
  1160.        printf("%d ", head);
  1161.    }
  1162.    printf("\nTotal Head Movement: %d\n", totalMovement);
  1163.    return 0;
  1164. }
  1165.  
  1166. Slip 14
  1167. Q1: LOOK Disk Scheduling
  1168. #include <stdio.h>
  1169. #include <stdlib.h>
  1170.  
  1171. void sort(int arr[], int n, int asc) {
  1172.    for(int i = 0; i < n-1; i++)
  1173.        for(int j = 0; j < n-i-1; j++)
  1174.            if(asc ? arr[j] > arr[j+1] : arr[j] < arr[j+1]) {
  1175.                int temp = arr[j];
  1176.                arr[j] = arr[j+1];
  1177.                arr[j+1] = temp;
  1178.            }
  1179. }
  1180.  
  1181. int main() {
  1182.    int requests[] = {86, 147, 91, 170, 95, 130, 102, 70};
  1183.    int n = 8, head = 125, totalMovement = 0;
  1184.    int direction;
  1185.    printf("Enter direction (0-Left, 1-Right): "); scanf("%d", &direction);
  1186.    int sorted[n];
  1187.    for(int i = 0; i < n; i++) sorted[i] = requests[i];
  1188.  
  1189.    sort(sorted, n, 1);
  1190.    printf("LOOK Order: %d ", head);
  1191.    int start = 0;
  1192.    for(int i = 0; i < n; i++) if(sorted[i] >= head) { start = i; break; }
  1193.  
  1194.    if(direction == 0) {
  1195.        for(int i = start-1; i >= 0; i--) {
  1196.            printf("%d ", sorted[i]);
  1197.            totalMovement += abs(head - sorted[i]);
  1198.            head = sorted[i];
  1199.        }
  1200.        for(int i = start; i < n; i++) {
  1201.            printf("%d ", sorted[i]);
  1202.            totalMovement += abs(head - sorted[i]);
  1203.            head = sorted[i];
  1204.        }
  1205.    } else {
  1206.        for(int i = start; i < n; i++) {
  1207.            printf("%d ", sorted[i]);
  1208.            totalMovement += abs(head - sorted[i]);
  1209.            head = sorted[i];
  1210.        }
  1211.        for(int i = start-1; i >= 0; i--) {
  1212.            printf("%d ", sorted[i]);
  1213.            totalMovement += abs(head - sorted[i]);
  1214.            head = sorted[i];
  1215.        }
  1216.    }
  1217.    printf("\nTotal Head Movement: %d\n", totalMovement);
  1218.    return 0;
  1219. }
  1220.  
  1221. Q2: Linked File Allocation
  1222. #include <stdio.h>
  1223. #include <stdlib.h>
  1224. #define MAX_BLOCKS 100
  1225.  
  1226. struct File {
  1227.    int start;
  1228.    int length;
  1229. };
  1230.  
  1231. int main() {
  1232.    int n, bitVector[MAX_BLOCKS] = {0}, choice;
  1233.    struct File files[10];
  1234.    int fileCount = 0;
  1235.  
  1236.    printf("Enter total number of blocks: ");
  1237.    scanf("%d", &n);
  1238.    for(int i = 0; i < n/2; i++) bitVector[rand() % n] = 1;
  1239.  
  1240.    do {
  1241.        printf("\nMenu:\n1. Show Bit Vector\n2. Create New File\n3. Show Directory\n4. Exit\nChoice: ");
  1242.        scanf("%d", &choice);
  1243.        switch(choice) {
  1244.            case 1:
  1245.                printf("Bit Vector: ");
  1246.                for(int i = 0; i < n; i++) printf("%d ", bitVector[i]);
  1247.                printf("\n");
  1248.                break;
  1249.            case 2:
  1250.                printf("Enter file length: ");
  1251.                int len; scanf("%d", &len);
  1252.                int start = -1;
  1253.                for(int i = 0; i < n && start == -1; i++)
  1254.                    if(!bitVector[i]) {
  1255.                        int free = 0;
  1256.                        for(int j = i; j < i+len && j < n; j++)
  1257.                            if(!bitVector[j]) free++;
  1258.                        if(free == len) start = i;
  1259.                    }
  1260.                if(start != -1) {
  1261.                    for(int i = start; i < start+len; i++) bitVector[i] = 1;
  1262.                    files[fileCount].start = start;
  1263.                    files[fileCount].length = len;
  1264.                    fileCount++;
  1265.                    printf("File created at block %d\n", start);
  1266.                } else printf("Not enough space!\n");
  1267.                break;
  1268.            case 3:
  1269.                printf("Directory:\n");
  1270.                for(int i = 0; i < fileCount; i++)
  1271.                    printf("File %d: Start=%d, Length=%d\n", i, files[i].start, files[i].length);
  1272.                break;
  1273.            case 4: printf("Exiting...\n"); break;
  1274.            default: printf("Invalid choice!\n");
  1275.        }
  1276.    } while(choice != 4);
  1277.    return 0;
  1278. }
  1279.  
  1280. Slip 15
  1281. Q1: Banker's Algorithm (Safety Check)
  1282. #include <stdio.h>
  1283. #define MAX_PROCESSES 5
  1284. #define MAX_RESOURCES 4
  1285.  
  1286. void displayNeed(int need[MAX_PROCESSES][MAX_RESOURCES]) {
  1287.     printf("\nNeed Matrix:\n");
  1288.     for(int i = 0; i < MAX_PROCESSES; i++) {
  1289.         for(int j = 0; j < MAX_RESOURCES; j++)
  1290.             printf("%d ", need[i][j]);
  1291.         printf("\n");
  1292.     }
  1293. }
  1294.  
  1295. int main() {
  1296.     int allocation[MAX_PROCESSES][MAX_RESOURCES] = {{0,0,1,2}, {1,0,0,0}, {1,3,5,4}, {0,6,3,2}, {0,0,1,4}};
  1297.     int max[MAX_PROCESSES][MAX_RESOURCES] = {{0,0,1,2}, {1,7,5,0}, {2,3,5,6}, {0,6,5,2}, {0,6,5,6}};
  1298.     int available[MAX_RESOURCES] = {1,5,2,0};
  1299.     int need[MAX_PROCESSES][MAX_RESOURCES], work[MAX_RESOURCES], finish[MAX_PROCESSES] = {0};
  1300.     int safeSequence[MAX_PROCESSES], count = 0;
  1301.  
  1302.     for(int i = 0; i < MAX_PROCESSES; i++)
  1303.         for(int j = 0; j < MAX_RESOURCES; j++)
  1304.             need[i][j] = max[i][j] - allocation[i][j];
  1305.  
  1306.     displayNeed(need);
  1307.     for(int j = 0; j < MAX_RESOURCES; j++) work[j] = available[j];
  1308.  
  1309.     while(count < MAX_PROCESSES) {
  1310.         int found = 0;
  1311.         for(int i = 0; i < MAX_PROCESSES; i++) {
  1312.             if(!finish[i]) {
  1313.                 int canExecute = 1;
  1314.                 for(int j = 0; j < MAX_RESOURCES; j++)
  1315.                     if(need[i][j] > work[j]) canExecute = 0;
  1316.                 if(canExecute) {
  1317.                     for(int j = 0; j < MAX_RESOURCES; j++) work[j] += allocation[i][j];
  1318.                     finish[i] = 1;
  1319.                     safeSequence[count++] = i;
  1320.                     found = 1;
  1321.                 }
  1322.             }
  1323.         }
  1324.         if(!found) break;
  1325.     }
  1326.  
  1327.     if(count == MAX_PROCESSES) {
  1328.         printf("System is in safe state. Safe sequence: ");
  1329.         for(int i = 0; i < MAX_PROCESSES; i++) printf("P%d ", safeSequence[i]);
  1330.         printf("\n");
  1331.     } else printf("System is not in safe state.\n");
  1332.     return 0;
  1333. }
  1334.  
  1335. Q2: FCFS Disk Scheduling
  1336. #include <stdio.h>
  1337. #include <stdlib.h>
  1338.  
  1339. int main() {
  1340.     int requests[] = {56, 59, 40, 19, 91, 161, 151, 39, 185};
  1341.     int n = 9, head = 48, totalMovement = 0;
  1342.     printf("FCFS Order: %d ", head);
  1343.     for(int i = 0; i < n; i++) {
  1344.         printf("%d ", requests[i]);
  1345.         totalMovement += abs((i == 0 ? head : requests[i-1]) - requests[i]);
  1346.     }
  1347.     printf("\nTotal Head Movement: %d\n", totalMovement);
  1348.     return 0;
  1349. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement