Commit 8e0c1920 by Michael Schmid

changes to now

parent d7ec2fb6
...@@ -18,7 +18,7 @@ class ACET(AbstractExecutionTimeModel): ...@@ -18,7 +18,7 @@ class ACET(AbstractExecutionTimeModel):
def update_executed(self, job): def update_executed(self, job):
if job in self.on_execute_date: if job in self.on_execute_date:
self.executed[job] += (self.sim.now() - self.on_execute_date[job] self.executed[job] += (self.sim.now - self.on_execute_date[job]
) * job.cpu.speed ) * job.cpu.speed
del self.on_execute_date[job] del self.on_execute_date[job]
...@@ -31,7 +31,7 @@ class ACET(AbstractExecutionTimeModel): ...@@ -31,7 +31,7 @@ class ACET(AbstractExecutionTimeModel):
) * self.sim.cycles_per_ms ) * self.sim.cycles_per_ms
def on_execute(self, job): def on_execute(self, job):
self.on_execute_date[job] = self.sim.now() self.on_execute_date[job] = self.sim.now
def on_preempted(self, job): def on_preempted(self, job):
self.update_executed(job) self.update_executed(job)
...@@ -46,7 +46,7 @@ class ACET(AbstractExecutionTimeModel): ...@@ -46,7 +46,7 @@ class ACET(AbstractExecutionTimeModel):
def get_executed(self, job): def get_executed(self, job):
if job in self.on_execute_date: if job in self.on_execute_date:
c = (self.sim.now() - self.on_execute_date[job]) * job.cpu.speed c = (self.sim.now - self.on_execute_date[job]) * job.cpu.speed
else: else:
c = 0 c = 0
return self.executed[job] + c return self.executed[job] + c
......
...@@ -80,14 +80,14 @@ class CacheModel(AbstractExecutionTimeModel): ...@@ -80,14 +80,14 @@ class CacheModel(AbstractExecutionTimeModel):
def _update_instructions(self): def _update_instructions(self):
for job in self._running_jobs: for job in self._running_jobs:
# Compute number of instr for self.sim.now() - last_update # Compute number of instr for self.sim.now - last_update
instr = compute_instructions(job.task, self._running_jobs, instr = compute_instructions(job.task, self._running_jobs,
self.sim.now() - self._last_update) self.sim.now - self._last_update)
# Update the number of instr for this job # Update the number of instr for this job
self._instr_jobs[job] = self._instr_jobs.get(job, 0) + instr self._instr_jobs[job] = self._instr_jobs.get(job, 0) + instr
# Update last_update # Update last_update
self._last_update = self.sim.now() self._last_update = self.sim.now
def on_activate(self, job): def on_activate(self, job):
self.penalty[job] = 0 self.penalty[job] = 0
......
...@@ -16,7 +16,7 @@ class FixedPenalty(AbstractExecutionTimeModel): ...@@ -16,7 +16,7 @@ class FixedPenalty(AbstractExecutionTimeModel):
def update_executed(self, job): def update_executed(self, job):
if job in self.on_execute_date: if job in self.on_execute_date:
self.executed[job] += (self.sim.now() - self.on_execute_date[job] self.executed[job] += (self.sim.now - self.on_execute_date[job]
) * job.cpu.speed ) * job.cpu.speed
del self.on_execute_date[job] del self.on_execute_date[job]
...@@ -26,7 +26,7 @@ class FixedPenalty(AbstractExecutionTimeModel): ...@@ -26,7 +26,7 @@ class FixedPenalty(AbstractExecutionTimeModel):
self.executed[job] = 0 self.executed[job] = 0
def on_execute(self, job): def on_execute(self, job):
self.on_execute_date[job] = self.sim.now() self.on_execute_date[job] = self.sim.now
if job in self.was_running_on: if job in self.was_running_on:
# resume on the same processor. # resume on the same processor.
if self.was_running_on[job] is job.cpu: if self.was_running_on[job] is job.cpu:
...@@ -39,7 +39,7 @@ class FixedPenalty(AbstractExecutionTimeModel): ...@@ -39,7 +39,7 @@ class FixedPenalty(AbstractExecutionTimeModel):
self.was_running_on[job] = job.cpu self.was_running_on[job] = job.cpu
def on_preempted(self, job): def on_preempted(self, job):
self.executed[job] += (self.sim.now() - self.on_execute_date[job] self.executed[job] += (self.sim.now - self.on_execute_date[job]
) * job.cpu.speed ) * job.cpu.speed
def on_terminated(self, job): def on_terminated(self, job):
...@@ -52,7 +52,7 @@ class FixedPenalty(AbstractExecutionTimeModel): ...@@ -52,7 +52,7 @@ class FixedPenalty(AbstractExecutionTimeModel):
def get_executed(self, job): def get_executed(self, job):
if job in self.on_execute_date: if job in self.on_execute_date:
c = (self.sim.now() - self.on_execute_date[job]) * job.cpu.speed c = (self.sim.now - self.on_execute_date[job]) * job.cpu.speed
else: else:
c = 0 c = 0
return self.executed[job] + c return self.executed[job] + c
......
...@@ -14,7 +14,7 @@ class PWCET(AbstractExecutionTimeModel): ...@@ -14,7 +14,7 @@ class PWCET(AbstractExecutionTimeModel):
def update_executed(self, job): def update_executed(self, job):
if job in self.on_execute_date: if job in self.on_execute_date:
self.executed[job] += (self.sim.now() - self.on_execute_date[job] self.executed[job] += (self.sim.now - self.on_execute_date[job]
) * job.cpu.speed ) * job.cpu.speed
del self.on_execute_date[job] del self.on_execute_date[job]
...@@ -25,7 +25,7 @@ class PWCET(AbstractExecutionTimeModel): ...@@ -25,7 +25,7 @@ class PWCET(AbstractExecutionTimeModel):
0, 1) <= x[1]) * self.sim.cycles_per_ms 0, 1) <= x[1]) * self.sim.cycles_per_ms
def on_execute(self, job): def on_execute(self, job):
self.on_execute_date[job] = self.sim.now() self.on_execute_date[job] = self.sim.now
def on_preempted(self, job): def on_preempted(self, job):
self.update_executed(job) self.update_executed(job)
...@@ -38,7 +38,7 @@ class PWCET(AbstractExecutionTimeModel): ...@@ -38,7 +38,7 @@ class PWCET(AbstractExecutionTimeModel):
def get_executed(self, job): def get_executed(self, job):
if job in self.on_execute_date: if job in self.on_execute_date:
c = (self.sim.now() - self.on_execute_date[job]) * job.cpu.speed c = (self.sim.now - self.on_execute_date[job]) * job.cpu.speed
else: else:
c = 0 c = 0
return self.executed[job] + c return self.executed[job] + c
......
...@@ -13,7 +13,7 @@ class WCET(AbstractExecutionTimeModel): ...@@ -13,7 +13,7 @@ class WCET(AbstractExecutionTimeModel):
def update_executed(self, job): def update_executed(self, job):
if job in self.on_execute_date: if job in self.on_execute_date:
self.executed[job] += (self.sim.now() - self.on_execute_date[job] self.executed[job] += (self.sim.now - self.on_execute_date[job]
) * job.cpu.speed ) * job.cpu.speed
del self.on_execute_date[job] del self.on_execute_date[job]
...@@ -22,7 +22,7 @@ class WCET(AbstractExecutionTimeModel): ...@@ -22,7 +22,7 @@ class WCET(AbstractExecutionTimeModel):
self.executed[job] = 0 self.executed[job] = 0
def on_execute(self, job): def on_execute(self, job):
self.on_execute_date[job] = self.sim.now() self.on_execute_date[job] = self.sim.now
def on_preempted(self, job): def on_preempted(self, job):
self.update_executed(job) self.update_executed(job)
...@@ -35,7 +35,7 @@ class WCET(AbstractExecutionTimeModel): ...@@ -35,7 +35,7 @@ class WCET(AbstractExecutionTimeModel):
def get_executed(self, job): def get_executed(self, job):
if job in self.on_execute_date: if job in self.on_execute_date:
c = (self.sim.now() - self.on_execute_date[job]) * job.cpu.speed c = (self.sim.now - self.on_execute_date[job]) * job.cpu.speed
else: else:
c = 0 c = 0
return self.executed[job] + c return self.executed[job] + c
......
...@@ -82,7 +82,7 @@ class BF(Scheduler): ...@@ -82,7 +82,7 @@ class BF(Scheduler):
self.t_f = int(min([x.job.absolute_deadline for x in self.task_list]) self.t_f = int(min([x.job.absolute_deadline for x in self.task_list])
* self.sim.cycles_per_ms) * self.sim.cycles_per_ms)
# Duration that can be allocated for each processor. # Duration that can be allocated for each processor.
w = int(self.t_f - self.sim.now()) w = int(self.t_f - self.sim.now)
available = w * len(self.processors) available = w * len(self.processors)
p = 0 # Processor id. p = 0 # Processor id.
...@@ -91,7 +91,7 @@ class BF(Scheduler): ...@@ -91,7 +91,7 @@ class BF(Scheduler):
print("{:#^60}".format( print("{:#^60}".format(
" Scheduling Interval [{},{}) ".format( " Scheduling Interval [{},{}) ".format(
self.sim.now() / self.sim.cycles_per_ms, self.sim.now / self.sim.cycles_per_ms,
self.t_f / self.sim.cycles_per_ms))) self.t_f / self.sim.cycles_per_ms)))
for task in self.task_list: for task in self.task_list:
if not task.job.is_active(): if not task.job.is_active():
...@@ -191,7 +191,7 @@ class BF(Scheduler): ...@@ -191,7 +191,7 @@ class BF(Scheduler):
""" """
self.waiting_schedule = False self.waiting_schedule = False
# At the end of the interval: # At the end of the interval:
if self.sim.now() >= self.t_f: if self.sim.now >= self.t_f:
self.init_interval() self.init_interval()
# Stop current timers. # Stop current timers.
......
...@@ -37,7 +37,7 @@ class DP_WRAP(Scheduler): ...@@ -37,7 +37,7 @@ class DP_WRAP(Scheduler):
self.t_f = ceil(min([x.job.absolute_deadline for x in self.task_list] self.t_f = ceil(min([x.job.absolute_deadline for x in self.task_list]
) * self.sim.cycles_per_ms) ) * self.sim.cycles_per_ms)
# Duration that can be allocated for each processor. # Duration that can be allocated for each processor.
w = int(self.t_f - self.sim.now()) w = int(self.t_f - self.sim.now)
p = 0 # Processor id. p = 0 # Processor id.
for task in self.task_list: for task in self.task_list:
job = task.job job = task.job
...@@ -99,7 +99,7 @@ class DP_WRAP(Scheduler): ...@@ -99,7 +99,7 @@ class DP_WRAP(Scheduler):
""" """
self.waiting_schedule = False self.waiting_schedule = False
# At the end of the interval: # At the end of the interval:
if self.sim.now() >= self.t_f: if self.sim.now >= self.t_f:
self.init_interval() self.init_interval()
# Stop current timers. # Stop current timers.
......
...@@ -34,5 +34,5 @@ class EDF(Scheduler): ...@@ -34,5 +34,5 @@ class EDF(Scheduler):
if (cpu_min.running is None or if (cpu_min.running is None or
cpu_min.running.absolute_deadline > job.absolute_deadline): cpu_min.running.absolute_deadline > job.absolute_deadline):
print(self.sim.now(), job.name, cpu_min.name) print(self.sim.now, job.name, cpu_min.name)
return (job, cpu_min) return (job, cpu_min)
...@@ -32,7 +32,7 @@ class EDZL(Scheduler): ...@@ -32,7 +32,7 @@ class EDZL(Scheduler):
job.priority = 0 job.priority = 0
job.cpu.resched() job.cpu.resched()
else: else:
print(self.sim.now(), job.name) print(self.sim.now, job.name)
def schedule(self, cpu): def schedule(self, cpu):
""" """
......
...@@ -30,7 +30,7 @@ class Modified_EDF(Scheduler): ...@@ -30,7 +30,7 @@ class Modified_EDF(Scheduler):
self.migrating_task1, self.migrating_task2 = \ self.migrating_task1, self.migrating_task2 = \
self.migrating_task2, self.migrating_task1 self.migrating_task2, self.migrating_task1
if self.migrating_task1: if self.migrating_task1:
time_a = ceil((next_deadline - self.sim.now()) time_a = ceil((next_deadline - self.sim.now)
* self.migrating_task1[1]) * self.migrating_task1[1])
self.timer_a = Timer(self.sim, Modified_EDF.on_end_migrating1, self.timer_a = Timer(self.sim, Modified_EDF.on_end_migrating1,
(self,), time_a, cpu=self.processors[0], (self,), time_a, cpu=self.processors[0],
...@@ -39,7 +39,7 @@ class Modified_EDF(Scheduler): ...@@ -39,7 +39,7 @@ class Modified_EDF(Scheduler):
self.migrating_job2 = None self.migrating_job2 = None
if self.migrating_task2: if self.migrating_task2:
time_b = int((next_deadline - self.sim.now()) time_b = int((next_deadline - self.sim.now)
* (1 - self.migrating_task2[1])) * (1 - self.migrating_task2[1]))
self.timer_b = Timer( self.timer_b = Timer(
self.sim, Modified_EDF.on_start_migrating2, (self,), self.sim, Modified_EDF.on_start_migrating2, (self,),
......
...@@ -45,7 +45,7 @@ class EPDF(Scheduler): ...@@ -45,7 +45,7 @@ class EPDF(Scheduler):
pseudo_job = EPDF.PseudoJob(job, pseudo_job.seq + 1) pseudo_job = EPDF.PseudoJob(job, pseudo_job.seq + 1)
timer = Timer(self.sim, EPDF.pseudo_activate, (self, pseudo_job), timer = Timer(self.sim, EPDF.pseudo_activate, (self, pseudo_job),
pseudo_job.release_date * self.quantum - pseudo_job.release_date * self.quantum -
self.sim.now() / self.sim.cycles_per_ms + self.sim.now / self.sim.cycles_per_ms +
job.activation_date, cpu=job.cpu, job.activation_date, cpu=job.cpu,
in_ms=True) in_ms=True)
timer.start() timer.start()
......
...@@ -139,7 +139,7 @@ class ER_PD2(Scheduler): ...@@ -139,7 +139,7 @@ class ER_PD2(Scheduler):
virtual_job = VirtualJob(job) virtual_job = VirtualJob(job)
self.ready_list.append(virtual_job) self.ready_list.append(virtual_job)
if self.sim.now() == 0: if self.sim.now == 0:
self.reschedule() self.reschedule()
def schedule(self, cpu): def schedule(self, cpu):
......
...@@ -29,7 +29,7 @@ class G_FL_ZL(Scheduler): ...@@ -29,7 +29,7 @@ class G_FL_ZL(Scheduler):
job.priority = 0 job.priority = 0
job.cpu.resched() job.cpu.resched()
else: else:
print(self.sim.now(), job.name) print(self.sim.now, job.name)
def schedule(self, cpu): def schedule(self, cpu):
""" """
...@@ -55,7 +55,7 @@ class G_FL_ZL(Scheduler): ...@@ -55,7 +55,7 @@ class G_FL_ZL(Scheduler):
minimum = None minimum = None
for job in self.ready_list: for job in self.ready_list:
zl_date = int((job.absolute_deadline - job.ret zl_date = int((job.absolute_deadline - job.ret
) * self.sim.cycles_per_ms - self.sim.now()) ) * self.sim.cycles_per_ms - self.sim.now)
if (minimum is None or minimum[0] > zl_date) and zl_date > 0: if (minimum is None or minimum[0] > zl_date) and zl_date > 0:
minimum = (zl_date, job) minimum = (zl_date, job)
......
...@@ -31,7 +31,7 @@ class LLREF(Scheduler): ...@@ -31,7 +31,7 @@ class LLREF(Scheduler):
Deal with a job activation. The budget for this job is computed. Deal with a job activation. The budget for this job is computed.
""" """
# Compute budget for this newly activated job # Compute budget for this newly activated job
window = self.next_deadline - self.sim.now() window = self.next_deadline - self.sim.now
self.budget[job] = window * job.wcet / job.period self.budget[job] = window * job.wcet / job.period
# Find the next absolute deadline among the ready jobs. # Find the next absolute deadline among the ready jobs.
...@@ -56,14 +56,14 @@ class LLREF(Scheduler): ...@@ -56,14 +56,14 @@ class LLREF(Scheduler):
""" """
Remove budget from the currently executing jobs. Remove budget from the currently executing jobs.
""" """
time_since_last_update = self.sim.now() - self.last_update time_since_last_update = self.sim.now - self.last_update
for job in self.selected_jobs: for job in self.selected_jobs:
if job in self.budget: if job in self.budget:
if job.is_active(): if job.is_active():
self.budget[job] -= time_since_last_update self.budget[job] -= time_since_last_update
else: else:
del self.budget[job] del self.budget[job]
self.last_update = self.sim.now() self.last_update = self.sim.now
def date_next_event(self, selected, not_selected): def date_next_event(self, selected, not_selected):
next_event = 0 next_event = 0
...@@ -73,7 +73,7 @@ class LLREF(Scheduler): ...@@ -73,7 +73,7 @@ class LLREF(Scheduler):
next_event = next_bottom_hitting next_event = next_bottom_hitting
if not_selected: if not_selected:
next_ceiling_hitting = self.next_deadline - self.sim.now() \ next_ceiling_hitting = self.next_deadline - self.sim.now \
- not_selected[0][1] - not_selected[0][1]
if next_ceiling_hitting < next_bottom_hitting: if next_ceiling_hitting < next_bottom_hitting:
next_event = next_ceiling_hitting next_event = next_ceiling_hitting
......
...@@ -34,7 +34,7 @@ class LLREF2(Scheduler): ...@@ -34,7 +34,7 @@ class LLREF2(Scheduler):
return return
# Compute budget for this newly activated job # Compute budget for this newly activated job
window = self.next_deadline - self.sim.now() window = self.next_deadline - self.sim.now
self.budget[job] = window * job.wcet / job.period self.budget[job] = window * job.wcet / job.period
# Find the next absolute deadline among the ready jobs. # Find the next absolute deadline among the ready jobs.
...@@ -59,14 +59,14 @@ class LLREF2(Scheduler): ...@@ -59,14 +59,14 @@ class LLREF2(Scheduler):
""" """
Remove budget from the currently executing jobs. Remove budget from the currently executing jobs.
""" """
time_since_last_update = self.sim.now() - self.last_update time_since_last_update = self.sim.now - self.last_update
for job in self.selected_jobs: for job in self.selected_jobs:
if job in self.budget: if job in self.budget:
if job.is_active(): if job.is_active():
self.budget[job] -= time_since_last_update self.budget[job] -= time_since_last_update
else: else:
del self.budget[job] del self.budget[job]
self.last_update = self.sim.now() self.last_update = self.sim.now
def date_next_event(self, selected, not_selected): def date_next_event(self, selected, not_selected):
next_event = None next_event = None
...@@ -76,7 +76,7 @@ class LLREF2(Scheduler): ...@@ -76,7 +76,7 @@ class LLREF2(Scheduler):
next_event = next_bottom_hitting next_event = next_bottom_hitting
if not_selected: if not_selected:
next_ceiling_hitting = self.next_deadline - self.sim.now() \ next_ceiling_hitting = self.next_deadline - self.sim.now \
- ceil(max(y for _, y in not_selected)) - ceil(max(y for _, y in not_selected))
if next_event is None or next_ceiling_hitting < next_event: if next_event is None or next_ceiling_hitting < next_event:
next_event = next_ceiling_hitting next_event = next_ceiling_hitting
...@@ -84,7 +84,7 @@ class LLREF2(Scheduler): ...@@ -84,7 +84,7 @@ class LLREF2(Scheduler):
return next_event if next_event else 0 return next_event if next_event else 0
def select_jobs(self): def select_jobs(self):
window = self.next_deadline - self.sim.now() window = self.next_deadline - self.sim.now
res = [(job, b) for job, b in self.budget.items() res = [(job, b) for job, b in self.budget.items()
if window <= ceil(b) and job.is_active()] if window <= ceil(b) and job.is_active()]
for job, b in sorted(self.budget.items(), key=lambda x: -x[1]): for job, b in sorted(self.budget.items(), key=lambda x: -x[1]):
......
...@@ -50,7 +50,7 @@ class LRE_TL(Scheduler): ...@@ -50,7 +50,7 @@ class LRE_TL(Scheduler):
if dl not in self.h_d: if dl not in self.h_d:
heappush(self.h_d, dl) heappush(self.h_d, dl)
self.t_f = self.sim.now() + self.pmin self.t_f = self.sim.now + self.pmin
if self.h_d[0] <= self.t_f: if self.h_d[0] <= self.t_f:
self.t_f = heappop(self.h_d) self.t_f = heappop(self.h_d)
...@@ -58,9 +58,9 @@ class LRE_TL(Scheduler): ...@@ -58,9 +58,9 @@ class LRE_TL(Scheduler):
self.h_b = [] self.h_b = []
self.h_c = [] self.h_c = []
for task in self.task_list: for task in self.task_list:
l = ceil(task.wcet * (self.t_f - self.sim.now()) / task.period) l = ceil(task.wcet * (self.t_f - self.sim.now) / task.period)
if z < len(self.processors) and task.job.is_active(): if z < len(self.processors) and task.job.is_active():
heappush(self.h_b, (self.sim.now() + l, task)) heappush(self.h_b, (self.sim.now + l, task))
decisions.append((task.job, self.processors[z])) decisions.append((task.job, self.processors[z]))
z += 1 z += 1
else: else:
...@@ -82,18 +82,18 @@ class LRE_TL(Scheduler): ...@@ -82,18 +82,18 @@ class LRE_TL(Scheduler):
tasks_h_b = [t for _, t in self.h_b] tasks_h_b = [t for _, t in self.h_b]
if task not in tasks_h_b and task not in tasks_h_c: if task not in tasks_h_b and task not in tasks_h_c:
l = ceil(task.wcet * (self.t_f - self.sim.now()) / task.period) l = ceil(task.wcet * (self.t_f - self.sim.now) / task.period)
if len(self.h_b) < len(self.processors): if len(self.h_b) < len(self.processors):
idle_proc = [z for z in self.processors idle_proc = [z for z in self.processors
if not z.is_running()][0] if not z.is_running()][0]
decisions.append((task.job, idle_proc)) decisions.append((task.job, idle_proc))
heappush(self.h_b, (self.sim.now() + l, task)) heappush(self.h_b, (self.sim.now + l, task))
else: else:
if task.wcet < task.period: if task.wcet < task.period:
heappush(self.h_c, ((self.t_f - l), task)) heappush(self.h_c, ((self.t_f - l), task))
else: else:
key_b, task_b = heapreplace(self.h_b, (self.t_f + l, task)) key_b, task_b = heapreplace(self.h_b, (self.t_f + l, task))
heappush(self.h_c, (self.t_f - key_b + self.sim.now())) heappush(self.h_c, (self.t_f - key_b + self.sim.now))
dl = int(task.job.absolute_deadline * self.sim.cycles_per_ms) dl = int(task.job.absolute_deadline * self.sim.cycles_per_ms)
if dl not in self.h_d: if dl not in self.h_d:
...@@ -107,23 +107,23 @@ class LRE_TL(Scheduler): ...@@ -107,23 +107,23 @@ class LRE_TL(Scheduler):
""" """
decisions = [] decisions = []
while self.h_b and self.h_b[0][0] == self.sim.now(): while self.h_b and self.h_b[0][0] == self.sim.now:
task_b = heappop(self.h_b)[1] task_b = heappop(self.h_b)[1]
if self.h_c: if self.h_c:
key_c, task_c = heappop(self.h_c) key_c, task_c = heappop(self.h_c)
heappush(self.h_b, (self.t_f - key_c + self.sim.now(), task_c)) heappush(self.h_b, (self.t_f - key_c + self.sim.now, task_c))
decisions.append((task_c.job, task_b.cpu)) decisions.append((task_c.job, task_b.cpu))
else: else:
decisions.append((None, task_b.cpu)) decisions.append((None, task_b.cpu))
if self.h_c: if self.h_c:
while self.h_c[0][0] == self.sim.now(): while self.h_c[0][0] == self.sim.now:
key_b, task_b = heappop(self.h_b) key_b, task_b = heappop(self.h_b)
key_c, task_c = heappop(self.h_c) key_c, task_c = heappop(self.h_c)
key_b = self.t_f - key_b + self.sim.now() key_b = self.t_f - key_b + self.sim.now
assert key_c != key_b, "Handle Evt BC failed." assert key_c != key_b, "Handle Evt BC failed."
key_c = self.t_f - key_c + self.sim.now() key_c = self.t_f - key_c + self.sim.now
heappush(self.h_b, (key_c, task_c)) heappush(self.h_b, (key_c, task_c))
heappush(self.h_c, (key_b, task_b)) heappush(self.h_c, (key_b, task_b))
decisions.append((task_c.job, task_b.cpu)) decisions.append((task_c.job, task_b.cpu))
...@@ -146,7 +146,7 @@ class LRE_TL(Scheduler): ...@@ -146,7 +146,7 @@ class LRE_TL(Scheduler):
self.h_c = [(d, t) for d, t in self.h_c if t.job.is_active()] self.h_c = [(d, t) for d, t in self.h_c if t.job.is_active()]
heapify(self.h_c) heapify(self.h_c)
if self.sim.now() == self.t_f: if self.sim.now == self.t_f:
decisions = self.init_tl_plane() decisions = self.init_tl_plane()
else: else:
for task in self.activations: for task in self.activations:
...@@ -163,11 +163,11 @@ class LRE_TL(Scheduler): ...@@ -163,11 +163,11 @@ class LRE_TL(Scheduler):
t_next = min(t_next, self.h_c[0][0]) t_next = min(t_next, self.h_c[0][0])
self.timer = Timer(self.sim, LRE_TL.event_bc, (self,), self.timer = Timer(self.sim, LRE_TL.event_bc, (self,),
t_next - self.sim.now(), t_next - self.sim.now,
cpu=self.processors[0], in_ms=False) cpu=self.processors[0], in_ms=False)
else: else:
self.timer = Timer(self.sim, LRE_TL.reschedule, (self,), self.timer = Timer(self.sim, LRE_TL.reschedule, (self,),
self.t_f - self.sim.now(), self.t_f - self.sim.now,
cpu=self.processors[0], in_ms=False) cpu=self.processors[0], in_ms=False)
self.timer.start() self.timer.start()
......
...@@ -37,7 +37,7 @@ class MLLF(Scheduler): ...@@ -37,7 +37,7 @@ class MLLF(Scheduler):
if len(self.ready_list) > m: if len(self.ready_list) > m:
ta = self.ready_list[m - 1] ta = self.ready_list[m - 1]
dmin = self.ready_list[m].absolute_deadline * \ dmin = self.ready_list[m].absolute_deadline * \
self.sim.cycles_per_ms - self.sim.now() self.sim.cycles_per_ms - self.sim.now
if self.timer: if self.timer:
self.timer.stop() self.timer.stop()
......
...@@ -41,7 +41,7 @@ class NVNLF(Scheduler): ...@@ -41,7 +41,7 @@ class NVNLF(Scheduler):
for task in self.task_list]) \ for task in self.task_list]) \
* self.sim.cycles_per_ms * self.sim.cycles_per_ms
window = self.next_deadline - self.sim.now() window = self.next_deadline - self.sim.now
for j in self.budget.keys(): for j in self.budget.keys():
self.budget[j] = ceil(window * j.wcet / j.period) self.budget[j] = ceil(window * j.wcet / j.period)
...@@ -66,7 +66,7 @@ class NVNLF(Scheduler): ...@@ -66,7 +66,7 @@ class NVNLF(Scheduler):
self.budget[j] += a self.budget[j] += a
L -= a L -= a
self.last_update = self.sim.now() self.last_update = self.sim.now
# There's a new job, the system should be rescheduled. # There's a new job, the system should be rescheduled.
self.reschedule() self.reschedule()
...@@ -79,14 +79,14 @@ class NVNLF(Scheduler): ...@@ -79,14 +79,14 @@ class NVNLF(Scheduler):
""" """
Remove budget from the currently executing jobs. Remove budget from the currently executing jobs.
""" """
time_since_last_update = self.sim.now() - self.last_update time_since_last_update = self.sim.now - self.last_update
for job in self.selected_jobs: for job in self.selected_jobs:
if job in self.budget: if job in self.budget:
if job.is_active(): if job.is_active():
self.budget[job] -= time_since_last_update self.budget[job] -= time_since_last_update
else: else:
del self.budget[job] del self.budget[job]
self.last_update = self.sim.now() self.last_update = self.sim.now
def date_next_event(self, selected, not_selected): def date_next_event(self, selected, not_selected):
next_event = None next_event = None
...@@ -96,7 +96,7 @@ class NVNLF(Scheduler): ...@@ -96,7 +96,7 @@ class NVNLF(Scheduler):
next_event = next_bottom_hitting next_event = next_bottom_hitting
if not_selected: if not_selected:
next_ceiling_hitting = self.next_deadline - self.sim.now() \ next_ceiling_hitting = self.next_deadline - self.sim.now \
- ceil(max(y for _, y in not_selected)) - ceil(max(y for _, y in not_selected))
if next_event is None or next_ceiling_hitting < next_event: if next_event is None or next_ceiling_hitting < next_event:
next_event = next_ceiling_hitting next_event = next_ceiling_hitting
...@@ -104,7 +104,7 @@ class NVNLF(Scheduler): ...@@ -104,7 +104,7 @@ class NVNLF(Scheduler):
return next_event if next_event else 0 return next_event if next_event else 0
def select_jobs(self): def select_jobs(self):
window = self.next_deadline - self.sim.now() window = self.next_deadline - self.sim.now
res = [(job, b) for job, b in self.budget.items() res = [(job, b) for job, b in self.budget.items()
if window <= ceil(b) and job.is_active()] if window <= ceil(b) and job.is_active()]
for job, b in self.budget.items(): for job, b in self.budget.items():
......
...@@ -141,7 +141,7 @@ class PD2(Scheduler): ...@@ -141,7 +141,7 @@ class PD2(Scheduler):
virtual_job = VirtualJob(job) virtual_job = VirtualJob(job)
self.ready_list.append(virtual_job) self.ready_list.append(virtual_job)
if self.sim.now() == 0: if self.sim.now == 0:
self.reschedule() self.reschedule()
def schedule(self, cpu): def schedule(self, cpu):
...@@ -153,7 +153,7 @@ class PD2(Scheduler): ...@@ -153,7 +153,7 @@ class PD2(Scheduler):
self.virtual_terminate(vjob) self.virtual_terminate(vjob)
vjobs = [vjob for vjob in self.ready_list if vjob.job.is_active() and vjobs = [vjob for vjob in self.ready_list if vjob.job.is_active() and
self.sim.now() >= vjob.get_current_job().absolute_releasedate] self.sim.now >= vjob.get_current_job().absolute_releasedate]
self.running_vjobs = sorted( self.running_vjobs = sorted(
vjobs, vjobs,
......
...@@ -176,10 +176,10 @@ class ProperSubsystem(object): ...@@ -176,10 +176,10 @@ class ProperSubsystem(object):
""" """
Update the budget of the servers. Update the budget of the servers.
""" """
time_since_last_update = self.sim.now() - self.last_update time_since_last_update = self.sim.now - self.last_update
for server in self.virtual: for server in self.virtual:
server.budget -= time_since_last_update server.budget -= time_since_last_update
self.last_update = self.sim.now() self.last_update = self.sim.now
def resched(self, cpu): def resched(self, cpu):
""" """
......
...@@ -87,9 +87,9 @@ def add_job(sim, job, server): ...@@ -87,9 +87,9 @@ def add_job(sim, job, server):
""" """
server.job = job server.job = job
while server: while server:
server.add_deadline(sim.now(), job.absolute_deadline * server.add_deadline(sim.now, job.absolute_deadline *
sim.cycles_per_ms) sim.cycles_per_ms)
server.create_job(sim.now()) server.create_job(sim.now)
server = server.parent server = server.parent
......
...@@ -44,7 +44,7 @@ class U_EDF(Scheduler): ...@@ -44,7 +44,7 @@ class U_EDF(Scheduler):
job, j, job.absolute_deadline * self.sim.cycles_per_ms, t2) job, j, job.absolute_deadline * self.sim.cycles_per_ms, t2)
def compute_al(self): def compute_al(self):
t = self.sim.now() t = self.sim.now
cycles_per_ms = self.sim.cycles_per_ms cycles_per_ms = self.sim.cycles_per_ms
self.sorted_task_list = sorted( self.sorted_task_list = sorted(
...@@ -75,7 +75,7 @@ class U_EDF(Scheduler): ...@@ -75,7 +75,7 @@ class U_EDF(Scheduler):
self.reschedule() self.reschedule()
def update_al(self): def update_al(self):
delta = self.sim.now() - self.last_event delta = self.sim.now - self.last_event
for job, j in self.running_jobs.items(): for job, j in self.running_jobs.items():
self.al[job][j] -= delta self.al[job][j] -= delta
...@@ -89,7 +89,7 @@ class U_EDF(Scheduler): ...@@ -89,7 +89,7 @@ class U_EDF(Scheduler):
else: else:
self.update_al() self.update_al()
self.last_event = self.sim.now() self.last_event = self.sim.now
next_event = None next_event = None
decisions = [] decisions = []
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment