void run_simulation(int algorithm, int quantum) { switch(algorithm) { case STRIDE: stride_scheduling(quantum); break; case PS: priority_scheduling(); break; case RR: rr_scheduling(quantum); break; case FCFS: default: first_come_first_serve(); break; } }
void priority_scheduling() { int current_task = 0; int current_tick = 0; int highest_priority = 0; int lowest_time = 999; int i; for (i=0;i<num_tasks;i++){ if (tasks[i].priority > highest_priority&&tasks[i].finish_time == 0){ highest_priority = tasks[i].priority; } } for (i=0;i<num_tasks;i++){ if(tasks[i].priority == highest_priority&&tasks[i].finish_time == 0){ if (tasks[i].arrival_time <= lowest_time&&tasks[i].finish_time == 0){ lowest_time = tasks[i].arrival_time; } } } for (i=0;i<num_tasks;i++){ if(tasks[i].priority == highest_priority && lowest_time == tasks[i].arrival_time &&tasks[i].finish_time == 0){ tasks[i].schedulings +=1; for(;;){ current_tick +=1; tasks[i].cpu_cycles +=1; if (tasks[i].cpu_cycles >= tasks[i].length) { float quantum_fragment = tasks[i].cpu_cycles - tasks[current_task].length; tasks[i].cpu_cycles = tasks[i].length; tasks[i].finish_time = current_tick - quantum_fragment; tasks[i].schedulings = 1; i++; if (i > num_tasks) { break; } tasks[i].cpu_cycles += quantum_fragment; count++; if (count==num_tasks) { compute_and_print_stats(); exit(0); } priority_scheduling(); } } } } }