@@ -23,8 +23,8 @@ def cpu_process(self):
2323 first_time_quantum = 8
2424 sec_time_quantum = 16
2525 self .two_queue_with_diff_quantum (first_time_quantum , sec_time_quantum )
26- self .fcfs_queue ()
2726 return self .grantt_chart
27+ self .fcfs_queue ()
2828
2929 def two_queue_with_diff_quantum (self , fist_time_quantum , second_time_quantum ):
3030 done_first_time_quantum = []
@@ -35,6 +35,7 @@ def two_queue_with_diff_quantum(self, fist_time_quantum, second_time_quantum):
3535 ready_processes_queue = []
3636 processes_next_ready_queue = self .get_arrival_times ()
3737 cycle = 1
38+ total_counter = 0
3839 while True :
3940 if cycle == 1 :
4041 time_quantum = fist_time_quantum
@@ -51,10 +52,13 @@ def two_queue_with_diff_quantum(self, fist_time_quantum, second_time_quantum):
5152 self .processes .remove (process )
5253 started = True
5354
54- if len (ready_processes_queue ) == 0 :
55+ if len (ready_processes_queue ) == 0 and not is_sec_burst_allowed :
5556 self .current_cpu_time += 1
5657 continue
5758
59+ elif len (ready_processes_queue ) == 0 and is_sec_burst_allowed :
60+ ready_processes_queue .append ([self .processes .pop (0 ), 0 ])
61+
5862 sub_count = ready_processes_queue [0 ][1 ]
5963 current_process = ready_processes_queue [0 ][0 ]
6064 pre_current_process = current_process .cpu_burst_time1 + current_process .cpu_burst_time2 + current_process .io_time
@@ -81,8 +85,7 @@ def two_queue_with_diff_quantum(self, fist_time_quantum, second_time_quantum):
8185 self .current_cpu_time += time_quantum
8286
8387 if current_process .cpu_burst_time1 <= 0 and current_process .arrival_time <= self .current_cpu_time and \
84- processes_next_ready_queue [str (current_process .process_id )] <= self .current_cpu_time and \
85- is_sec_burst_allowed :
88+ processes_next_ready_queue [str (current_process .process_id )] <= self .current_cpu_time :
8689 if current_process .io_time > 0 :
8790 ready_processes_queue [0 ][1 ] = 0 # sub_count = 0
8891 sub_count = 0
@@ -100,8 +103,8 @@ def two_queue_with_diff_quantum(self, fist_time_quantum, second_time_quantum):
100103 info .cpu_end_time2 = - 1
101104 break
102105 current_process .io_time = 0
103- finished = True
104- elif current_process .cpu_burst_time2 > 0 and current_process .cpu_burst_time1 <= 0 :
106+
107+ elif current_process .cpu_burst_time2 > 0 and current_process .cpu_burst_time1 <= 0 and is_sec_burst_allowed :
105108 if sub_count == 0 :
106109 for info in self .grantt_chart :
107110 if info .process .process_id == current_process .process_id :
@@ -123,12 +126,42 @@ def two_queue_with_diff_quantum(self, fist_time_quantum, second_time_quantum):
123126 current_process_value = current_process .cpu_burst_time1 + current_process .cpu_burst_time2 + current_process .io_time
124127 if pre_current_process != current_process_value :
125128 ready_processes_queue .pop (0 )
129+ total_counter += 1
126130 if current_process .cpu_burst_time2 > 0 or current_process .cpu_burst_time1 > 0 or current_process .io_time > 0 :
127131 ready_processes_queue .append ([current_process , sub_count ])
128132
129133 if len (self .processes ) <= 0 and len (ready_processes_queue ) <= 0 :
130134 break
131135
136+ # counter = 0
137+ # for each in ready_processes_queue:
138+ # if each[1] > 0:
139+ # counter += 1
140+ # if counter == processes_count:
141+ # if is_sec_burst_allowed:
142+ # break
143+ # is_sec_burst_allowed = True
144+ # for each in ready_processes_queue:
145+ # self.processes.append(each[0])
146+ # ready_processes_queue.clear()
147+ # done_first_time_quantum.clear()
148+ # continue
149+
150+ # if len(self.processes) == 0 and len(ready_processes_queue) == processes_count:
151+ if len (ready_processes_queue ) == processes_count and total_counter == processes_count :
152+ if not is_sec_burst_allowed :
153+ is_sec_burst_allowed = True
154+ for each in ready_processes_queue :
155+ self .processes .append (each [0 ])
156+ self .sort ()
157+ ready_processes_queue .clear ()
158+ done_first_time_quantum .clear ()
159+ cycle = 2
160+ continue
161+ else :
162+ break
163+ # else:
164+
132165 if prev_cpu_time == self .current_cpu_time :
133166 self .current_cpu_time += 1
134167 prev_cpu_time = self .current_cpu_time
@@ -141,13 +174,6 @@ def two_queue_with_diff_quantum(self, fist_time_quantum, second_time_quantum):
141174 self .processes .remove (process )
142175 new_queue = True
143176
144- if len (done_first_time_quantum ) == processes_count :
145- if not is_sec_burst_allowed :
146- is_sec_burst_allowed = True
147- done_first_time_quantum .clear ()
148- else :
149- break
150-
151177 if new_queue :
152178 for process_info in _temp :
153179 ready_processes_queue .insert (0 , process_info )
@@ -172,3 +198,18 @@ def fcfs_queue(self):
172198
173199 elif process_info .cpu_start_time2 > 0 and process_info .process .cpu_burst_time2 > 0 :
174200 process_info .cpu_end_time2 = self .current_cpu_time + process_info .process .cpu_burst_time2
201+
202+
203+ def sort (self ):
204+ sorted_processes = []
205+ arrival_times = []
206+ for process in self .processes :
207+ arrival_times .append (process .arrival_time )
208+ arrival_times .sort ()
209+ for arrival_time in arrival_times :
210+ for process in self .processes .copy ():
211+ if process .arrival_time == arrival_time :
212+ sorted_processes .append (process )
213+ self .processes .remove (process )
214+ self .processes .clear ()
215+ self .processes = sorted_processes .copy ()
0 commit comments