MLFQ(Multi Level Feedback Queue) https://en.wikipedia.org/wiki/Multilevel_feedback_queue MLFQ has a lot of queues that have different priority In this MLFQ, The first Queue(0) to last second Queue(N-2) of MLFQ have Round Robin Algorithm The last Queue(N-1) has First Come, Fi
| 13 | |
| 14 | |
| 15 | class MLFQ: |
| 16 | """ |
| 17 | MLFQ(Multi Level Feedback Queue) |
| 18 | https://en.wikipedia.org/wiki/Multilevel_feedback_queue |
| 19 | MLFQ has a lot of queues that have different priority |
| 20 | In this MLFQ, |
| 21 | The first Queue(0) to last second Queue(N-2) of MLFQ have Round Robin Algorithm |
| 22 | The last Queue(N-1) has First Come, First Served Algorithm |
| 23 | """ |
| 24 | |
| 25 | def __init__( |
| 26 | self, |
| 27 | number_of_queues: int, |
| 28 | time_slices: list[int], |
| 29 | queue: deque[Process], |
| 30 | current_time: int, |
| 31 | ) -> None: |
| 32 | # total number of mlfq's queues |
| 33 | self.number_of_queues = number_of_queues |
| 34 | # time slice of queues that round robin algorithm applied |
| 35 | self.time_slices = time_slices |
| 36 | # unfinished process is in this ready_queue |
| 37 | self.ready_queue = queue |
| 38 | # current time |
| 39 | self.current_time = current_time |
| 40 | # finished process is in this sequence queue |
| 41 | self.finish_queue: deque[Process] = deque() |
| 42 | |
| 43 | def calculate_sequence_of_finish_queue(self) -> list[str]: |
| 44 | """ |
| 45 | This method returns the sequence of finished processes |
| 46 | >>> P1 = Process("P1", 0, 53) |
| 47 | >>> P2 = Process("P2", 0, 17) |
| 48 | >>> P3 = Process("P3", 0, 68) |
| 49 | >>> P4 = Process("P4", 0, 24) |
| 50 | >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0) |
| 51 | >>> _ = mlfq.multi_level_feedback_queue() |
| 52 | >>> mlfq.calculate_sequence_of_finish_queue() |
| 53 | ['P2', 'P4', 'P1', 'P3'] |
| 54 | """ |
| 55 | sequence = [] |
| 56 | for i in range(len(self.finish_queue)): |
| 57 | sequence.append(self.finish_queue[i].process_name) |
| 58 | return sequence |
| 59 | |
| 60 | def calculate_waiting_time(self, queue: list[Process]) -> list[int]: |
| 61 | """ |
| 62 | This method calculates waiting time of processes |
| 63 | >>> P1 = Process("P1", 0, 53) |
| 64 | >>> P2 = Process("P2", 0, 17) |
| 65 | >>> P3 = Process("P3", 0, 68) |
| 66 | >>> P4 = Process("P4", 0, 24) |
| 67 | >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0) |
| 68 | >>> _ = mlfq.multi_level_feedback_queue() |
| 69 | >>> mlfq.calculate_waiting_time([P1, P2, P3, P4]) |
| 70 | [83, 17, 94, 101] |
| 71 | """ |
| 72 | waiting_times = [] |
no outgoing calls
no test coverage detected