-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathshortest_job_first_non_preemptive.py
More file actions
27 lines (22 loc) · 1.22 KB
/
shortest_job_first_non_preemptive.py
File metadata and controls
27 lines (22 loc) · 1.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from Process import get_process_details, display_process_table
def shortest_job_first_non_preemptive(process_list):
process_list.sort(key=lambda x: x.arrival_time, reverse=False)
time = 0
completion_time = 0
while any(process.is_scheduled is False for process in process_list):
available_processes = [process for process in process_list if
process.arrival_time <= time and process.is_scheduled is False]
if len(available_processes) == 0:
time += 1
continue
available_processes.sort(key=lambda x: x.burst_time, reverse=False)
completion_time = completion_time + available_processes[0].burst_time
available_processes[0].completion_time = completion_time
available_processes[0].turn_around_time = available_processes[0].completion_time - available_processes[
0].arrival_time
available_processes[0].wait_time = available_processes[0].turn_around_time - available_processes[0].burst_time
available_processes[0].is_scheduled = True
time += available_processes[0].burst_time
display_process_table(process_list)
process_list = get_process_details()
shortest_job_first_non_preemptive(process_list)