Library prosa.analysis.facts.priority.elf
Require Export prosa.model.priority.elf.
Require Export prosa.model.aggregate.workload.
Require Export prosa.analysis.facts.priority.classes.
Require Export prosa.analysis.facts.priority.fp.
Require Export prosa.model.schedule.priority_driven.
Require Export prosa.analysis.facts.model.sequential.
Require Export prosa.analysis.facts.priority.sequential.
Require Export prosa.model.aggregate.workload.
Require Export prosa.analysis.facts.priority.classes.
Require Export prosa.analysis.facts.priority.fp.
Require Export prosa.model.schedule.priority_driven.
Require Export prosa.analysis.facts.model.sequential.
Require Export prosa.analysis.facts.priority.sequential.
In this section, we state and prove some basic facts about ELF scheduling
policies.
Consider any type of tasks with relative priority points ...
... and jobs of these tasks.
Consider any arbitrary FP policy ...
... that is reflexive, transitive, and total.
Hypothesis H_reflexive_priorities : reflexive_task_priorities FP.
Hypothesis H_transitive_priorities : transitive_task_priorities FP.
Hypothesis H_total_priorities : total_task_priorities FP.
Hypothesis H_transitive_priorities : transitive_task_priorities FP.
Hypothesis H_total_priorities : total_task_priorities FP.
Assume ELF scheduling.
Basic properties of ELF policies
Among jobs of equal-priority tasks, higher-or-equal job priority implies
no later absolute priority point.
Fact ELF_policy_priority_point_order :
∀ j j',
ep_task (job_task j) (job_task j') →
hep_job j j' → (job_priority_point j ≤ job_priority_point j')%R.
∀ j j',
ep_task (job_task j) (job_task j') →
hep_job j j' → (job_priority_point j ≤ job_priority_point j')%R.
ELF priorities are reflexive.
ELF priorities are transitive.
ELF priorities are total.
A job whose task has strictly higher priority has higher-or-equal job
priority.
Among jobs of equal-priority tasks, a strictly earlier priority point
implies higher-or-equal job priority.
Fact ELF_policy_earlier_priority_point :
∀ j j',
ep_task (job_task j) (job_task j') →
(job_priority_point j < job_priority_point j')%R → hep_job j j'.
∀ j j',
ep_task (job_task j) (job_task j') →
(job_priority_point j < job_priority_point j')%R → hep_job j j'.
Consequently, lack of higher-or-equal job priority reveals the opposite
task-priority order.
Fact ELF_policy_not_hep_task_priority_order :
∀ j j',
~~ hep_job j j' → hep_task (job_task j') (job_task j).
∀ j j',
~~ hep_job j j' → hep_task (job_task j') (job_task j).
If two jobs stem from equal-priority tasks and the first does not have
higher-or-equal priority, then the other job has no later priority point.
Fact ELF_policy_not_hep_priority_point_order :
∀ j j',
ep_task (job_task j) (job_task j') →
~~ hep_job j j' → (job_priority_point j' ≤ job_priority_point j)%R.
∀ j j',
ep_task (job_task j) (job_task j') →
~~ hep_job j j' → (job_priority_point j' ≤ job_priority_point j)%R.
For jobs of the same task, a strictly earlier arrival implies a strictly
earlier priority point.
Fact ELF_policy_earlier_arrival :
∀ j j',
same_task j j' → job_arrival j < job_arrival j' → hep_job j j'.
∀ j j',
same_task j j' → job_arrival j < job_arrival j' → hep_job j j'.
Every ELF policy behaves as an FP policy with respect to the underlying
task-level priority relation.
In this section, we prove that tasks always execute sequentially in a
uniprocessor schedule following an ELF policy.
Consider any valid arrival sequence.
Variable arr_seq : arrival_sequence Job.
Hypothesis H_valid_arrivals : valid_arrival_sequence arr_seq.
Hypothesis H_valid_arrivals : valid_arrival_sequence arr_seq.
Allow for any uniprocessor model.
Next, consider any schedule of the arrival sequence, ...
... allow for any work-bearing notion of job readiness, ...
Context {RM : JobReady Job PState}.
Hypothesis H_job_ready : work_bearing_readiness RM arr_seq sched.
Hypothesis H_job_ready : work_bearing_readiness RM arr_seq sched.
... and assume that the schedule is valid.
Consider any valid preemption model.
Context `{JobPreemptable Job}.
Hypothesis H_valid_preemption_model : valid_preemption_model arr_seq sched.
Hypothesis H_valid_preemption_model : valid_preemption_model arr_seq sched.
Assume that the schedule respects the ELF policy.
ELF implies the sequential_tasks property since earlier jobs of the
same task have higher priority than later jobs.
Lemma ELF_implies_sequential_tasks :
sequential_tasks arr_seq sched.
End ELFImpliesSequentialTasks.
End ELFBasicFacts.
sequential_tasks arr_seq sched.
End ELFImpliesSequentialTasks.
End ELFBasicFacts.
We add the generally useful ELF facts into the basic_rt_facts hint
database, so Coq can apply them automatically where needed.
Global Hint Resolve
ELF_policy_is_reflexive
ELF_policy_is_transitive
ELF_policy_is_total
ELF_policy_is_FP_policy
ELF_policy_not_hep_task_priority_order
ELF_policy_not_hep_priority_point_order
ELF_respects_sequential_tasks
ELF_implies_sequential_tasks
: basic_rt_facts.
ELF_policy_is_reflexive
ELF_policy_is_transitive
ELF_policy_is_total
ELF_policy_is_FP_policy
ELF_policy_not_hep_task_priority_order
ELF_policy_not_hep_priority_point_order
ELF_respects_sequential_tasks
ELF_implies_sequential_tasks
: basic_rt_facts.