Commit 34b6f852 by Maxime Chéramy

update G-EDF implementation.

parent a80e5063
...@@ -7,27 +7,20 @@ from simso.core import Scheduler ...@@ -7,27 +7,20 @@ from simso.core import Scheduler
class EDF(Scheduler): class EDF(Scheduler):
"""Earliest Deadline First""" """Earliest Deadline First"""
def init(self):
self.ready_list = []
def on_activate(self, job): def on_activate(self, job):
self.ready_list.append(job)
job.cpu.resched() job.cpu.resched()
def on_terminated(self, job): def on_terminated(self, job):
if job in self.ready_list: job.cpu.resched()
self.ready_list.remove(job)
else:
job.cpu.resched()
def schedule(self, cpu): def schedule(self, cpu):
ready_jobs = [j for j in self.ready_list if j.is_active()] # List of ready jobs not currently running:
ready_jobs = [t.job for t in self.task_list
if t.is_active() and not t.job.is_running()]
if ready_jobs: if ready_jobs:
# Key explanations: # Select a free processor or, if none,
# First the free processors # the one with the greatest deadline (self in case of equality):
# Among the others, get the one with the greatest deadline
# If equal, take the one used to schedule
key = lambda x: ( key = lambda x: (
1 if not x.running else 0, 1 if not x.running else 0,
x.running.absolute_deadline if x.running else 0, x.running.absolute_deadline if x.running else 0,
...@@ -35,11 +28,10 @@ class EDF(Scheduler): ...@@ -35,11 +28,10 @@ class EDF(Scheduler):
) )
cpu_min = max(self.processors, key=key) cpu_min = max(self.processors, key=key)
# Select the job with the least priority:
job = min(ready_jobs, key=lambda x: x.absolute_deadline) job = min(ready_jobs, key=lambda x: x.absolute_deadline)
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):
self.ready_list.remove(job) print(self.sim.now(), job.name, cpu_min.name)
if cpu_min.running:
self.ready_list.append(cpu_min.running)
return (job, cpu_min) return (job, cpu_min)
""" """
Implementation of the Global-EDF (Earliest Deadline First) for multiprocessor Implementation of the Global-EDF (Earliest Deadline First) for multiprocessor
architectures. architectures (alternative implementation as the one provided by EDF.py).
""" """
from simso.core import Scheduler from simso.core import Scheduler
......
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