summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMac Mollison <mollison@cs.unc.edu>2010-04-03 18:44:12 -0400
committerMac Mollison <mollison@cs.unc.edu>2010-04-03 18:44:12 -0400
commitae3ba00d4f644cc57ba784a7185466e07a561f01 (patch)
tree22bf2df9d3824d403466ed47a6199c77e347b6dd
parent13e0520cafd6280bcdf90208c699a6925efd9fba (diff)
Added support for blocking
-rw-r--r--unit_trace/gedf_test.py28
1 files changed, 25 insertions, 3 deletions
diff --git a/unit_trace/gedf_test.py b/unit_trace/gedf_test.py
index 993e99a..0cab857 100644
--- a/unit_trace/gedf_test.py
+++ b/unit_trace/gedf_test.py
@@ -93,6 +93,24 @@ def gedf_test(stream):
93 if job.is_complete == False: 93 if job.is_complete == False:
94 eligible.append(job) 94 eligible.append(job)
95 95
96 # A job has been blocked.
97 elif record.type_name == 'block':
98 pos = _find_job(record,on_cpu)
99 # What if the job is blocked AFTER being switched away?
100 # This is a bug in some versions of LITMUS.
101 if pos is None:
102 pos = _find_job(record,eligible)
103 job = eligible[pos]
104 else:
105 job = on_cpu[pos]
106 job.is_blocked = True
107
108 # A job is resumed
109 elif record.type_name == 'resume':
110 pos = _find_job(record,eligible)
111 job = eligible[pos]
112 job.is_blocked = False
113
96 last_time = record.when 114 last_time = record.when
97 yield record 115 yield record
98 116
@@ -107,6 +125,7 @@ class Job(object):
107 self.job = record.job 125 self.job = record.job
108 self.deadline = record.deadline 126 self.deadline = record.deadline
109 self.is_complete = False 127 self.is_complete = False
128 self.is_blocked = False
110 self.inversion_start = None 129 self.inversion_start = None
111 self.inversion_end = None 130 self.inversion_end = None
112 self.inversion_start_id = None 131 self.inversion_start_id = None
@@ -147,12 +166,15 @@ def _gedf_check(eligible,on_cpu,when,m,first_event_this_timestamp):
147 # List of error records to be returned 166 # List of error records to be returned
148 errors = [] 167 errors = []
149 168
150 # List of all jobs that are not complete 169 # List of all jobs that are contending for the CPU (neither complete nor
170 # blocked)
151 all = [] 171 all = []
152 for x in on_cpu: 172 for x in on_cpu:
153 if x.is_complete is not True: 173 if x.is_complete is not True and x.is_blocked is not True:
174 all.append(x)
175 for x in eligible:
176 if x.is_blocked is not True:
154 all.append(x) 177 all.append(x)
155 all += eligible
156 178
157 # Sort by on_cpu and then by deadline. sort() is guaranteed to be stable. 179 # Sort by on_cpu and then by deadline. sort() is guaranteed to be stable.
158 # Thus, this gives us jobs ordered by deadline with preference to those 180 # Thus, this gives us jobs ordered by deadline with preference to those