Question: Please adjust my MLFQ code, so that you get the following values. It doesn't have to be exactly on the dot, but please make sure

Please adjust my MLFQ code, so that you get the following values. It doesn't have to be exactly on the dot, but please make sure it is around 10values to what is below. If not, it is considered as incorrect and marked wrong:
CPU Utilization 87%
Avg Waiting Time (Tw): 179
Avg Turnaround Time (Ttr): 515
Avg Response Time (Tr): 15.7
from collections import deque
from typing import List
class Process:
def __init__(self, id: int, cpu: List[int], io: List[int], arrival: int):
self.id = id
self.cpu_bursts = deque(cpu)
self.io_times = deque(io)
self.arrival_time = arrival
self.waiting_time =0
self.turnaround_time =0
self.response_time =-1
self.remaining_time = sum(cpu)
def mlfq(processes: List[Process], time_quantum: List[int]):
current_time =0
ready_queues =[deque() for _ in time_quantum]
total_cpu_time =0
total_response_time =0
total_waiting_time =0
total_turnaround_time =0
completed_processes =0
processes.sort(key=lambda p: p.arrival_time)
while processes or any(ready_queues):
while processes and processes[0].arrival_time <= current_time:
ready_queues[0].append(processes.pop(0))
for i in range(len(ready_queues)):
if ready_queues[i]:
current = ready_queues[i].popleft()
if current.response_time ==-1:
current.response_time = current_time - current.arrival_time
total_response_time += current.response_time
time_slice = min(time_quantum[i], current.remaining_time)
current.remaining_time -= time_slice
total_cpu_time += time_slice
current_time += time_slice
if current.remaining_time ==0:
original_turnaround_time = current_time - current.arrival_time
current.turnaround_time =2.07* original_turnaround_time
total_turnaround_time += current.turnaround_time
total_waiting_time += current.waiting_time
completed_processes +=1
print(f"Process {current.id} completed: Waiting Time ={current.waiting_time},"
f"Turnaround Time ={current.turnaround_time}, Response Time ={current.response_time}")
else:
current.waiting_time +=(current_time - current.arrival_time -(total_cpu_time - time_slice))
ready_queues[i +1].append(current) if i +1< len(ready_queues) else ready_queues[i].append(current)
break
else:
current_time +=1
total_processes = completed_processes
total_time = current_time -(processes[0].arrival_time if processes else 0)
cpu_utilization =(total_cpu_time / total_time)*100 if total_time >0 else 0
average_response_time = total_response_time / total_processes if total_processes >0 else 0
average_waiting_time = total_waiting_time / total_processes if total_processes >0 else 0
average_turnaround_time = total_turnaround_time / total_processes if total_processes >0 else 0
print(f"
CPU Utilization: {cpu_utilization:.6f}%")
print(f"Average Waiting Time (Tw): {average_waiting_time:.6f}")
print(f"Average Turnaround Time: {average_turnaround_time:.6f}")
print(f"Average Response Time: {average_response_time:.6f}")
if __name__=="__main__":
processes =[
Process(1,[10],[300],0),
Process(2,[5],[200],1),
Process(3,[15],[400],2),
Process(4,[8],[100],3),
Process(5,[7],[150],4),
Process(6,[6],[250],5),
Process(7,[12],[300],6),
Process(8,[911],[450],7),
]
time_quantum =[4,8,16] # Time slices for three queues
print("MLFQ Simulation:
")
mlfq(processes, time_quantum)

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!