Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Write a program in either C or C++ that implements a Priority based Pre-emptive

ID: 3861402 • Letter: W

Question

Write a program in either C or C++ that implements a Priority based Pre-emptive Scheduling Algorithm. Include tests that highlight the working of the algorithm. the Algorithm is just a simulation, it will not be accessing real processes. You can assume a process to be a user-defined type which has CPU execution time, Arrival Time and Priority as fields. the user of your executable should be able to input processes along with their respective times and priorities. After every time unit, your program should printout the processes in the ready queue and the CPU status (idle/busy with process #). You do not have to use system time or "real" time. You can model time by a counter variable which increments inside a loop. Upload the source code, exe, any dependent required for compilation or running of your code (on Linux/Windows) and readmes (if any).

Explanation / Answer

#include<stdio.h>

struct scheduling

{

char scheduling_name;

int arrival_time, burst_time, ct, waiting_time, turnaround_time, priority;

int status;

}scheduling_queue[10];

int limit;

void Arrival_Time_Sorting()

{

struct scheduling temp;

int i, j;

for(i = 0; i < limit - 1; i++)

{

for(j = i + 1; j < limit; j++)

{

if(scheduling_queue[i].arrival_time > scheduling_queue[j].arrival_time)

{

temp = scheduling_queue[i];

scheduling_queue[i] = scheduling_queue[j];

scheduling_queue[j] = temp;

}

}

}

}

void main()

{

int i, time = 0, burst_time = 0, largest;

char c;

        float wait_time = 0, turnaround_time = 0, average_waiting_time, average_turnaround_time;

printf(" Enter Total Number of Processes: ");

scanf("%d", &limit);

for(i = 0, c = 'A'; i < limit; i++, c++)

{

scheduling_queue[i].scheduling_name = c;

printf(" Enter Details For Process[%C]: ", scheduling_queue[i].scheduling_name);

printf("Enter Arrival Time: ");

scanf("%d", &scheduling_queue[i].arrival_time );

printf("Enter Burst Time: ");

scanf("%d", &scheduling_queue[i].burst_time);

printf("Enter Priority: ");

scanf("%d", &scheduling_queue[i].priority);

scheduling_queue[i].status = 0;

burst_time = burst_time + scheduling_queue[i].burst_time;

}

Arrival_Time_Sorting();

scheduling_queue[9].priority = -9999;

printf(" Process Name Arrival Time Burst Time Priority Waiting Time");

   for(time = scheduling_queue[0].arrival_time; time < burst_time;)

   {

     largest = 9;

     for(i = 0; i < limit; i++)

     {

       if(scheduling_queue[i].arrival_time <= time && scheduling_queue[i].status != 1 && scheduling_queue[i].priority > scheduling_queue[largest].priority)

         {

largest = i;

}

     }

       time = time + scheduling_queue[largest].burst_time;

scheduling_queue[largest].ct = time;

           scheduling_queue[largest].waiting_time = scheduling_queue[largest].ct - scheduling_queue[largest].arrival_time - scheduling_queue[largest].burst_time;

     scheduling_queue[largest].turnaround_time = scheduling_queue[largest].ct - scheduling_queue[largest].arrival_time;

     scheduling_queue[largest].status = 1;

     wait_time = wait_time + scheduling_queue[largest].waiting_time;

turnaround_time = turnaround_time + scheduling_queue[largest].turnaround_time;

printf(" %c %d %d %d %d", scheduling_queue[largest].scheduling_name, scheduling_queue[largest].arrival_time, scheduling_queue[largest].burst_time, scheduling_queue[largest].priority, scheduling_queue[largest].waiting_time);

}

average_waiting_time = wait_time / limit;

average_turnaround_time = turnaround_time / limit;

printf(" Average waiting time: %f ", average_waiting_time);

printf("Average Turnaround Time: %f ", average_turnaround_time);

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote