From d53e55ce7c989767555ed1fd40ecd7e86c876b68 Mon Sep 17 00:00:00 2001 From: hello Date: Thu, 20 Feb 2025 10:16:27 +0530 Subject: [PATCH] updated week7, week8 --- OS/C/Week6/menu | Bin 0 -> 34248 bytes OS/C/Week6/menudriven.c | 522 ++++++++++++++++++++-------------------- OS/C/Week7/aq1.c | 1 + OS/C/Week8/q1.c | 134 +++++++++++ 4 files changed, 395 insertions(+), 262 deletions(-) create mode 100755 OS/C/Week6/menu create mode 100644 OS/C/Week8/q1.c diff --git a/OS/C/Week6/menu b/OS/C/Week6/menu new file mode 100755 index 0000000000000000000000000000000000000000..a8eb922789c7a954c0390834a35aa764f6557623 GIT binary patch literal 34248 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 0 && processes[i].at <= current_time) { - if (processes[i].rt == -1) { - processes[i].rt = current_time - processes[i].at; - } - - int execute_time = (processes[i].remaining_bt > quantum) ? quantum : processes[i].remaining_bt; processes[i].remaining_bt -= execute_time; current_time += execute_time; - - if (processes[i].remaining_bt == 0) { - completed++; - processes[i].ct = current_time; - processes[i].is_completed = 1; - } - - timeline[timeline_index++] = current_time; - - } else if (processes[i].at > current_time) { - current_time++; // if process hasn't arrived, time is incremented (to prevent a stall) - } - - - i = (i + 1) % n; - if (current_time > 1000) break; - } - - - calculate_times(processes, n); - - - float avg_ct, avg_tat, avg_wt, avg_rt; - calculate_averages(processes, n, &avg_ct, &avg_tat, &avg_wt, &avg_rt); - - - printf("\nRound Robin Scheduling (Quantum = %d):\n", quantum); - display_table(processes, n); - - - printf("\nAverage Completion Time: %.2f\n", avg_ct); - printf("Average Turnaround Time: %.2f\n", avg_tat); + printf("\nAverage Completion Time: %.2f\n", avg_ct); + printf("Average Turnaround Time: %.2f\n", avg_tat); printf("Average Waiting Time: %.2f\n", avg_wt); printf("Average Response Time: %.2f\n", avg_rt); - display_gantt_chart(processes, n, timeline); - free(timeline); // Free memory - } + display_gantt_chart(processes, n, timeline, timeline_index); + free(timeline); +} + + void round_robin(Process processes[], int n, int quantum) { + + for (int i = 0; i < n; i++) { + processes[i].remaining_bt = processes[i].bt; + processes[i].rt = -1; + processes[i].is_completed = 0; + } - void non_preemptive_priority(Process processes[], int n) { - for (int i = 0; i < n - 1; i++) { - for (int j = 0; j < n - i - 1; j++) { - if (processes[j].at > processes[j + 1].at) { - swap(&processes[j], &processes[j + 1]); - } - } - } - - int current_time = 0; - int completed = 0; - int *timeline = (int *)malloc((n * 2) * sizeof(int)); + int current_time = 0; + int completed = 0; + int i = 0; + int *timeline = (int *)malloc((n * 100) * sizeof(int)); if (timeline == NULL) { - perror("Failed to allocate memory for timeline"); - return; - } + perror("Failed to allocate memory for timeline"); + return; + } int timeline_index = 0; + int last_process = -1; - while (completed != n) { - int highest_priority = -1; - int min_priority = 9999; // Large value + while (completed != n) { + if (processes[i].remaining_bt > 0 && processes[i].at <= current_time) { + if (processes[i].rt == -1) { + processes[i].rt = current_time - processes[i].at; + } + if(i != last_process) { + timeline[timeline_index++] = i; + last_process = i; + } - for (int j = 0; j < n; j++) { - if (processes[j].at <= current_time && processes[j].bt > 0 && processes[j].priority < min_priority) { - min_priority = processes[j].priority; - highest_priority = j; - } - } + int execute_time = (processes[i].remaining_bt > quantum) ? quantum : processes[i].remaining_bt; + processes[i].remaining_bt -= execute_time; + current_time += execute_time; - if (highest_priority == -1) { - current_time++; - continue; - } + if (processes[i].remaining_bt == 0) { + completed++; + processes[i].ct = current_time; + processes[i].is_completed = 1; + } - if (processes[highest_priority].rt == -1) { - processes[highest_priority].rt = - current_time - processes[highest_priority].at; - } + } else if (processes[i].at > current_time) { + current_time++; + } - current_time += processes[highest_priority].bt; + i = (i + 1) % n; + if (current_time > 1000) break; + } - processes[highest_priority].ct = current_time; - processes[highest_priority].bt = 0; // Mark completed + calculate_times(processes, n); - completed++; - timeline[timeline_index++] = current_time; - } + float avg_ct, avg_tat, avg_wt, avg_rt; + calculate_averages(processes, n, &avg_ct, &avg_tat, &avg_wt, &avg_rt); - calculate_times(processes, n); + printf("\nRound Robin Scheduling (Quantum = %d):\n", quantum); + display_table(processes, n); - float avg_ct, avg_tat, avg_wt, avg_rt; - calculate_averages(processes, n, &avg_ct, &avg_tat, &avg_wt, &avg_rt); + printf("\nAverage Completion Time: %.2f\n", avg_ct); + printf("Average Turnaround Time: %.2f\n", avg_tat); + printf("Average Waiting Time: %.2f\n", avg_wt); + printf("Average Response Time: %.2f\n", avg_rt); - printf("\nNon-Preemptive Priority Scheduling:\n"); - display_table(processes, n); + display_gantt_chart(processes, n, timeline, timeline_index); + free(timeline); + } - printf("\nAverage Completion Time: %.2f\n", avg_ct); - printf("Average Turnaround Time: %.2f\n", avg_tat); - printf("Average Waiting Time: %.2f\n", avg_wt); - printf("Average Response Time: %.2f\n", avg_rt); + void non_preemptive_priority(Process processes[], int n) { + for (int i = 0; i < n - 1; i++) { + for (int j = 0; j < n - i - 1; j++) { + if (processes[j].at > processes[j + 1].at) { + swap(&processes[j], &processes[j + 1]); + } + } + } - display_gantt_chart(processes, n, timeline); - free(timeline); // Free memory - } + int current_time = 0; + int completed = 0; + int *timeline = (int *)malloc((n * 100) * sizeof(int)); + if (timeline == NULL) { + perror("Failed to allocate memory for timeline"); + return; + } - int main() { - int n, choice, quantum; + int timeline_index = 0; + int last_process = -1; - printf("Enter the number of processes: "); - scanf("%d", &n); + while (completed != n) { + int highest_priority = -1; + int min_priority = 9999; - Process processes[n]; + for (int j = 0; j < n; j++) { + if (processes[j].at <= current_time && processes[j].bt > 0 && processes[j].priority < min_priority) { + min_priority = processes[j].priority; + highest_priority = j; + } + } - // Input process details - for (int i = 0; i < n; i++) { + if (highest_priority == -1) { + current_time++; + continue; + } + + if (processes[highest_priority].rt == -1) { + processes[highest_priority].rt = current_time - processes[highest_priority].at; + } + + if(highest_priority != last_process) { + timeline[timeline_index++] = highest_priority; + last_process = highest_priority; + } + + current_time += processes[highest_priority].bt; + processes[highest_priority].ct = current_time; + processes[highest_priority].bt = 0; + completed++; + } + + calculate_times(processes, n); + + float avg_ct, avg_tat, avg_wt, avg_rt; + calculate_averages(processes, n, &avg_ct, &avg_tat, &avg_wt, &avg_rt); + + printf("\nNon-Preemptive Priority Scheduling:\n"); + display_table(processes, n); + + printf("\nAverage Completion Time: %.2f\n", avg_ct); + printf("Average Turnaround Time: %.2f\n", avg_tat); + printf("Average Waiting Time: %.2f\n", avg_wt); + printf("Average Response Time: %.2f\n", avg_rt); + + display_gantt_chart(processes, n, timeline, timeline_index); + free(timeline); + } + + int main() { + int n, choice, quantum; + + printf("Enter the number of processes: "); + scanf("%d", &n); + + Process processes[n]; + + // Input process details + for (int i = 0; i < n; i++) { printf("\nEnter details for process %d:\n", i + 1); printf("PID: "); scanf("%s", processes[i].pid); printf("Arrival Time: "); - scanf("%d", &processes[i].at); + scanf("%d", &processes[i].at); printf("Burst Time: "); - scanf("%d", &processes[i].bt); + scanf("%d", &processes[i].bt); printf("Priority (lower value = higher priority): "); - scanf("%d", &processes[i].priority); + scanf("%d", &processes[i].priority); processes[i].rt = 0; // Initialize response time - processes[i].is_completed = 0; // Initialize completion flag - } + processes[i].is_completed = 0; // Initialize completion flag + } - // Display initial table - printf("\nInitial Process Table:\n"); - printf("-----------------------\n"); - printf("| PID | AT | BT |\n"); - printf("-----------------------\n"); + // Display initial table + printf("\nInitial Process Table:\n"); + printf("-----------------------\n"); + printf("| PID | AT | BT |\n"); + printf("-----------------------\n"); - for (int i = 0; i < n; i++) { - printf("| %-5s | %-3d | %-3d |\n", processes[i].pid, processes[i].at, processes[i].bt); - } + for (int i = 0; i < n; i++) { + printf("| %-5s | %-3d | %-3d |\n", processes[i].pid, processes[i].at, processes[i].bt); + } printf("-----------------------\n"); - // Algorithm Selection Menu with Loop and Exit - while (1) { - printf("\nChoose a scheduling algorithm:\n"); - printf("1. Preemptive SJF\n"); - printf("2. Round Robin\n"); - printf("3. Non-Preemptive Priority\n"); - printf("4. Exit\n"); - printf("Enter your choice: "); + // Algorithm Selection Menu with Loop and Exit + while (1) { + printf("\nChoose a scheduling algorithm:\n"); + printf("1. Preemptive SJF\n"); + printf("2. Round Robin\n"); + printf("3. Non-Preemptive Priority\n"); + printf("4. Exit\n"); + printf("Enter your choice: "); scanf("%d", &choice); switch (choice) { - case 1: - preemptive_sjf(processes, n); - break; - case 2: - printf("Enter the time quantum: "); - scanf("%d", &quantum); - round_robin(processes, n, quantum); - break; - case 3: - non_preemptive_priority(processes, n); - break; - case 4: - printf("Exiting program.\n"); - exit(0); - default: - printf("Invalid choice. Please try again.\n"); - } - } + case 1: + preemptive_sjf(processes, n); + break; + case 2: + printf("Enter the time quantum: "); + scanf("%d", &quantum); + round_robin(processes, n, quantum); + break; + case 3: + non_preemptive_priority(processes, n); + break; + case 4: + printf("Exiting program.\n"); + exit(0); + default: + printf("Invalid choice. Please try again.\n"); + } + } - return 0; - } + return 0; + } diff --git a/OS/C/Week7/aq1.c b/OS/C/Week7/aq1.c index e69de29..4cce698 100644 --- a/OS/C/Week7/aq1.c +++ b/OS/C/Week7/aq1.c @@ -0,0 +1 @@ +// Write a C program to solve the Dining-Philosophers problem. diff --git a/OS/C/Week8/q1.c b/OS/C/Week8/q1.c new file mode 100644 index 0000000..783cfe8 --- /dev/null +++ b/OS/C/Week8/q1.c @@ -0,0 +1,134 @@ +// Develop a program to simulate banker’s algorithm. (Consider safety and resource-request algorithms) + +#include + +#define MAX_PROCESSES 10 +#define MAX_RESOURCES 10 + +int processes, resources; +int available[MAX_RESOURCES]; +int maximum[MAX_PROCESSES][MAX_RESOURCES]; +int allocation[MAX_PROCESSES][MAX_RESOURCES]; +int need[MAX_PROCESSES][MAX_RESOURCES]; + +int safeSequence[MAX_PROCESSES]; + +void initialize() { + printf("Enter number of processes: "); + scanf("%d", &processes); + + printf("Enter number of resources: "); + scanf("%d", &resources); + + printf("\nEnter available resources:\n"); + for(int i=0; i work[j]) + break; + } + if(j == resources) { + for(int k=0; k need[process][i]) { + printf("Error: Request exceeds maximum claim\n"); + return; + } + if(request[i] > available[i]) { + printf("Error: Resources not available\n"); + return; + } + } + + // Try to allocate + for(int i=0; i