From 76c99fedf7a3c71f1165030db855c3d7158b9835 Mon Sep 17 00:00:00 2001 From: Mariam Vardishvili <mariamvardishvili@gmail.com> Date: Fri, 15 Oct 2021 16:12:21 +0200 Subject: [PATCH] define GEL priority policy file for gel definition for gel file for gel with basic facts PriorityPoint and comment changes PriorityPoint and comment changes GEL rta with integer offset Added set in proof modified proof gel_is_total spell check spell check moved defintion of offset and PriorityPoint, modified hep_job for GEL spelling mistake Added citation spell check --- model/priority/gel.v | 85 ++++++++++++++++++++++++++++++++++++++++++++ scripts/wordlist.pws | 5 ++- 2 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 model/priority/gel.v diff --git a/model/priority/gel.v b/model/priority/gel.v new file mode 100644 index 000000000..319574e09 --- /dev/null +++ b/model/priority/gel.v @@ -0,0 +1,85 @@ +Require Export prosa.model.priority.classes. +Require Export BinInt. + + +(** * GEL Priority Policy * *) + +(** We define the class of "Global-EDF-like" (GEL) priority policies, + as first introduced by Leontyev et al. ("Multiprocessor Extensions + to Real-Time Calculus", Real-Time Systems, 2011). + + GEL scheduling is a (large) subset of the class of JLFP policies, + which structurally resembles EDF scheduling, hence the name. Under + GEL scheduling, each task has a constant "priority point offset." + Each job's priority point is given by its arrival time plus its + task's offset, with the interpretation that an earlier priority + point implies higher priority. + + EDF and FIFO are both special cases of GEL with the offset + respectively being the relative deadline and zero. *) + +(** To begin, we define the offset type. Note that an offset may be negative. *) +Definition offset := Z. + +(** We define a task-model parameter to express each task's relative priority point. *) +Class PriorityPoint (Task : TaskType) := task_priority_point : Task -> offset. + +(** Based on the task-level relative priority-point parameter, we + define a job's absolute priority point in a straightforward manner. + To this end, we need to introduce some context first. *) +Section AbsolutePriorityPoint. + (** For any type of tasks with relative priority points, ... *) + Context {Job : JobType} {Task : TaskType} `{JobTask Job Task} `{PriorityPoint Task} `{JobArrival Job}. + + (** ... a job's absolute priority point is given by its arrival time + plus its task's relative priority point. *) + Definition job_priority_point (j : Job) := (Z.of_nat (job_arrival j) + task_priority_point (job_task j))%Z. +End AbsolutePriorityPoint. + +(** The resulting definition of GEL is straightforward: a job [j1]'s + priority is higher than or equal to a job [j2]'s priority iff + [j1]'s absolute priority point is no later than [j2]'s absolute + priority point. *) +Instance GEL_priority (Job : JobType) (Task : TaskType) + `{PriorityPoint Task} `{JobArrival Job} `{JobTask Job Task} : JLFP_policy Job := +{ + hep_job (j1 j2 : Job) := (job_priority_point j1 <=? job_priority_point j2)%Z +}. + +(** In this section, we note three basic properties of the GEL policy: + the priority relation is reflexive, transitive, and total. *) +Section PropertiesOfGEL. + + (** Consider any type of tasks with relative priority points...*) + Context {Task : TaskType} `{PriorityPoint Task}. + + (** ...and jobs of these tasks. *) + Context {Job : JobType} `{JobArrival Job} `{JobTask Job Task}. + + (** GEL is reflexive. *) + Fact GEL_is_reflexive : reflexive_priorities. + Proof. by move=> t j; apply Z.leb_refl. Qed. + + (** GEL is transitive. *) + Fact GEL_is_transitive : transitive_priorities. + Proof. by move=> t y x z; apply Zbool.Zle_bool_trans. Qed. + + (** GEL is total. *) + Fact GEL_is_total : total_priorities. + Proof. + move=> t j1 j2; apply /orP. + case: (boolP (job_priority_point j1 <=? job_priority_point j2)%Z) => REL; [left | right] => //. + move: REL; rewrite -Z.ltb_antisym => /Z.ltb_spec0 REL. + by move: (Z.lt_le_incl _ _ REL) => /Z.leb_spec0. + Qed. + +End PropertiesOfGEL. + +(** We add the above facts into a "Hint Database" basic_facts, so Coq + will be able to apply them automatically where needed. *) +Global Hint Resolve + GEL_is_reflexive + GEL_is_transitive + GEL_is_total + : basic_facts. + diff --git a/scripts/wordlist.pws b/scripts/wordlist.pws index 548d71327..fce42c60a 100644 --- a/scripts/wordlist.pws +++ b/scripts/wordlist.pws @@ -70,4 +70,7 @@ ad hoc mailinglist Gonthier -setoid \ No newline at end of file +setoid +Leontyev +et +al \ No newline at end of file -- GitLab