Commit 843c6ffc authored by Felipe Cerqueira's avatar Felipe Cerqueira

Major commit: Suspension-Oblivious Analysis

- Add generic definition of job suspension based on the cumulative service
- Define the dynamic suspension model (based on task suspension bounds)
- Add suspension semantics for uniprocessor schedules
- Formalize reduction from suspension-aware schedule to suspension-oblivious
  schedule by inflating costs (works with JLDP policies and non-unique priorities)
- Formalize suspension-oblivious FP RTA using the reduction
- Add implementation of a concrete suspension-aware scheduler
- Test suspension-oblivious FP RTA with an actual task set
- Add simpler definition for JLFP policies
- Generalize busy interval lemmas from FP to JLFP scheduling
parent cecba062
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
# #
# This Makefile was generated by the command line : # This Makefile was generated by the command line :
# coq_makefile -f _CoqProject ./util/ssromega.v ./util/seqset.v ./util/sorting.v ./util/step_function.v ./util/minmax.v ./util/powerset.v ./util/all.v ./util/ord_quantifier.v ./util/nat.v ./util/sum.v ./util/bigord.v ./util/counting.v ./util/tactics.v ./util/induction.v ./util/list.v ./util/divround.v ./util/bigcat.v ./util/fixedpoint.v ./util/notation.v ./analysis/global/jitter/bertogna_fp_comp.v ./analysis/global/jitter/interference_bound_edf.v ./analysis/global/jitter/workload_bound.v ./analysis/global/jitter/bertogna_edf_comp.v ./analysis/global/jitter/bertogna_fp_theory.v ./analysis/global/jitter/interference_bound.v ./analysis/global/jitter/interference_bound_fp.v ./analysis/global/jitter/bertogna_edf_theory.v ./analysis/global/parallel/bertogna_fp_comp.v ./analysis/global/parallel/interference_bound_edf.v ./analysis/global/parallel/workload_bound.v ./analysis/global/parallel/bertogna_edf_comp.v ./analysis/global/parallel/bertogna_fp_theory.v ./analysis/global/parallel/interference_bound.v ./analysis/global/parallel/interference_bound_fp.v ./analysis/global/parallel/bertogna_edf_theory.v ./analysis/global/basic/bertogna_fp_comp.v ./analysis/global/basic/interference_bound_edf.v ./analysis/global/basic/workload_bound.v ./analysis/global/basic/bertogna_edf_comp.v ./analysis/global/basic/bertogna_fp_theory.v ./analysis/global/basic/interference_bound.v ./analysis/global/basic/interference_bound_fp.v ./analysis/global/basic/bertogna_edf_theory.v ./analysis/apa/bertogna_fp_comp.v ./analysis/apa/interference_bound_edf.v ./analysis/apa/workload_bound.v ./analysis/apa/bertogna_edf_comp.v ./analysis/apa/bertogna_fp_theory.v ./analysis/apa/interference_bound.v ./analysis/apa/interference_bound_fp.v ./analysis/apa/bertogna_edf_theory.v ./analysis/uni/basic/workload_bound_fp.v ./analysis/uni/basic/fp_rta_comp.v ./analysis/uni/basic/fp_rta_theory.v ./model/arrival_sequence.v ./model/task.v ./model/task_arrival.v ./model/partitioned/schedulability.v ./model/partitioned/schedule.v ./model/priority.v ./model/global/workload.v ./model/global/schedulability.v ./model/global/jitter/interference_edf.v ./model/global/jitter/interference.v ./model/global/jitter/job.v ./model/global/jitter/constrained_deadlines.v ./model/global/jitter/schedule.v ./model/global/jitter/platform.v ./model/global/response_time.v ./model/global/basic/interference_edf.v ./model/global/basic/interference.v ./model/global/basic/constrained_deadlines.v ./model/global/basic/schedule.v ./model/global/basic/platform.v ./model/job.v ./model/time.v ./model/arrival_bounds.v ./model/apa/interference_edf.v ./model/apa/interference.v ./model/apa/affinity.v ./model/apa/constrained_deadlines.v ./model/apa/platform.v ./model/uni/workload.v ./model/uni/transformation/construction.v ./model/uni/schedulability.v ./model/uni/schedule_of_task.v ./model/uni/response_time.v ./model/uni/schedule.v ./model/uni/basic/arrival_bounds.v ./model/uni/basic/busy_interval.v ./model/uni/basic/platform.v ./model/uni/service.v ./implementation/arrival_sequence.v ./implementation/task.v ./implementation/global/jitter/arrival_sequence.v ./implementation/global/jitter/task.v ./implementation/global/jitter/bertogna_edf_example.v ./implementation/global/jitter/job.v ./implementation/global/jitter/bertogna_fp_example.v ./implementation/global/jitter/schedule.v ./implementation/global/parallel/bertogna_edf_example.v ./implementation/global/parallel/bertogna_fp_example.v ./implementation/global/basic/bertogna_edf_example.v ./implementation/global/basic/bertogna_fp_example.v ./implementation/global/basic/schedule.v ./implementation/job.v ./implementation/apa/arrival_sequence.v ./implementation/apa/task.v ./implementation/apa/bertogna_edf_example.v ./implementation/apa/job.v ./implementation/apa/bertogna_fp_example.v ./implementation/apa/schedule.v ./implementation/uni/basic/fp_rta_example.v ./implementation/uni/basic/schedule.v -o Makefile # coq_makefile -f _CoqProject ./util/ssromega.v ./util/seqset.v ./util/sorting.v ./util/step_function.v ./util/minmax.v ./util/powerset.v ./util/all.v ./util/ord_quantifier.v ./util/nat.v ./util/sum.v ./util/bigord.v ./util/counting.v ./util/tactics.v ./util/induction.v ./util/list.v ./util/divround.v ./util/bigcat.v ./util/fixedpoint.v ./util/notation.v ./analysis/global/jitter/bertogna_fp_comp.v ./analysis/global/jitter/interference_bound_edf.v ./analysis/global/jitter/workload_bound.v ./analysis/global/jitter/bertogna_edf_comp.v ./analysis/global/jitter/bertogna_fp_theory.v ./analysis/global/jitter/interference_bound.v ./analysis/global/jitter/interference_bound_fp.v ./analysis/global/jitter/bertogna_edf_theory.v ./analysis/global/parallel/bertogna_fp_comp.v ./analysis/global/parallel/interference_bound_edf.v ./analysis/global/parallel/workload_bound.v ./analysis/global/parallel/bertogna_edf_comp.v ./analysis/global/parallel/bertogna_fp_theory.v ./analysis/global/parallel/interference_bound.v ./analysis/global/parallel/interference_bound_fp.v ./analysis/global/parallel/bertogna_edf_theory.v ./analysis/global/basic/bertogna_fp_comp.v ./analysis/global/basic/interference_bound_edf.v ./analysis/global/basic/workload_bound.v ./analysis/global/basic/bertogna_edf_comp.v ./analysis/global/basic/bertogna_fp_theory.v ./analysis/global/basic/interference_bound.v ./analysis/global/basic/interference_bound_fp.v ./analysis/global/basic/bertogna_edf_theory.v ./analysis/apa/bertogna_fp_comp.v ./analysis/apa/interference_bound_edf.v ./analysis/apa/workload_bound.v ./analysis/apa/bertogna_edf_comp.v ./analysis/apa/bertogna_fp_theory.v ./analysis/apa/interference_bound.v ./analysis/apa/interference_bound_fp.v ./analysis/apa/bertogna_edf_theory.v ./analysis/uni/susp/dynamic/oblivious/fp_rta.v ./analysis/uni/susp/dynamic/oblivious/reduction.v ./analysis/uni/basic/workload_bound_fp.v ./analysis/uni/basic/fp_rta_comp.v ./analysis/uni/basic/fp_rta_theory.v ./model/arrival_sequence.v ./model/task.v ./model/task_arrival.v ./model/suspension.v ./model/partitioned/schedulability.v ./model/partitioned/schedule.v ./model/priority.v ./model/global/workload.v ./model/global/schedulability.v ./model/global/jitter/interference_edf.v ./model/global/jitter/interference.v ./model/global/jitter/job.v ./model/global/jitter/constrained_deadlines.v ./model/global/jitter/schedule.v ./model/global/jitter/platform.v ./model/global/response_time.v ./model/global/basic/interference_edf.v ./model/global/basic/interference.v ./model/global/basic/constrained_deadlines.v ./model/global/basic/schedule.v ./model/global/basic/platform.v ./model/job.v ./model/time.v ./model/arrival_bounds.v ./model/apa/interference_edf.v ./model/apa/interference.v ./model/apa/affinity.v ./model/apa/constrained_deadlines.v ./model/apa/platform.v ./model/uni/workload.v ./model/uni/transformation/construction.v ./model/uni/susp/suspension_intervals.v ./model/uni/susp/schedule.v ./model/uni/susp/platform.v ./model/uni/schedulability.v ./model/uni/schedule_of_task.v ./model/uni/response_time.v ./model/uni/schedule.v ./model/uni/basic/arrival_bounds.v ./model/uni/basic/busy_interval.v ./model/uni/basic/platform.v ./model/uni/service.v ./implementation/arrival_sequence.v ./implementation/task.v ./implementation/global/jitter/arrival_sequence.v ./implementation/global/jitter/task.v ./implementation/global/jitter/bertogna_edf_example.v ./implementation/global/jitter/job.v ./implementation/global/jitter/bertogna_fp_example.v ./implementation/global/jitter/schedule.v ./implementation/global/parallel/bertogna_edf_example.v ./implementation/global/parallel/bertogna_fp_example.v ./implementation/global/basic/bertogna_edf_example.v ./implementation/global/basic/bertogna_fp_example.v ./implementation/global/basic/schedule.v ./implementation/job.v ./implementation/apa/arrival_sequence.v ./implementation/apa/task.v ./implementation/apa/bertogna_edf_example.v ./implementation/apa/job.v ./implementation/apa/bertogna_fp_example.v ./implementation/apa/schedule.v ./implementation/uni/susp/dynamic/arrival_sequence.v ./implementation/uni/susp/dynamic/task.v ./implementation/uni/susp/dynamic/job.v ./implementation/uni/susp/dynamic/oblivious/fp_rta_example.v ./implementation/uni/susp/schedule.v ./implementation/uni/basic/fp_rta_example.v ./implementation/uni/basic/schedule.v -o Makefile
# #
.DEFAULT_GOAL := all .DEFAULT_GOAL := all
...@@ -145,12 +145,15 @@ VFILES:=util/ssromega.v\ ...@@ -145,12 +145,15 @@ VFILES:=util/ssromega.v\
analysis/apa/interference_bound.v\ analysis/apa/interference_bound.v\
analysis/apa/interference_bound_fp.v\ analysis/apa/interference_bound_fp.v\
analysis/apa/bertogna_edf_theory.v\ analysis/apa/bertogna_edf_theory.v\
analysis/uni/susp/dynamic/oblivious/fp_rta.v\
analysis/uni/susp/dynamic/oblivious/reduction.v\
analysis/uni/basic/workload_bound_fp.v\ analysis/uni/basic/workload_bound_fp.v\
analysis/uni/basic/fp_rta_comp.v\ analysis/uni/basic/fp_rta_comp.v\
analysis/uni/basic/fp_rta_theory.v\ analysis/uni/basic/fp_rta_theory.v\
model/arrival_sequence.v\ model/arrival_sequence.v\
model/task.v\ model/task.v\
model/task_arrival.v\ model/task_arrival.v\
model/suspension.v\
model/partitioned/schedulability.v\ model/partitioned/schedulability.v\
model/partitioned/schedule.v\ model/partitioned/schedule.v\
model/priority.v\ model/priority.v\
...@@ -178,6 +181,9 @@ VFILES:=util/ssromega.v\ ...@@ -178,6 +181,9 @@ VFILES:=util/ssromega.v\
model/apa/platform.v\ model/apa/platform.v\
model/uni/workload.v\ model/uni/workload.v\
model/uni/transformation/construction.v\ model/uni/transformation/construction.v\
model/uni/susp/suspension_intervals.v\
model/uni/susp/schedule.v\
model/uni/susp/platform.v\
model/uni/schedulability.v\ model/uni/schedulability.v\
model/uni/schedule_of_task.v\ model/uni/schedule_of_task.v\
model/uni/response_time.v\ model/uni/response_time.v\
...@@ -206,6 +212,11 @@ VFILES:=util/ssromega.v\ ...@@ -206,6 +212,11 @@ VFILES:=util/ssromega.v\
implementation/apa/job.v\ implementation/apa/job.v\
implementation/apa/bertogna_fp_example.v\ implementation/apa/bertogna_fp_example.v\
implementation/apa/schedule.v\ implementation/apa/schedule.v\
implementation/uni/susp/dynamic/arrival_sequence.v\
implementation/uni/susp/dynamic/task.v\
implementation/uni/susp/dynamic/job.v\
implementation/uni/susp/dynamic/oblivious/fp_rta_example.v\
implementation/uni/susp/schedule.v\
implementation/uni/basic/fp_rta_example.v\ implementation/uni/basic/fp_rta_example.v\
implementation/uni/basic/schedule.v implementation/uni/basic/schedule.v
......
...@@ -911,10 +911,10 @@ Module ResponseTimeIterationEDF. ...@@ -911,10 +911,10 @@ Module ResponseTimeIterationEDF.
(* ...and jobs are sequential. *) (* ...and jobs are sequential. *)
Hypothesis H_sequential_jobs: sequential_jobs sched. Hypothesis H_sequential_jobs: sequential_jobs sched.
(* Assume a work-conserving APA scheduler that enforces EDF policy. *) (* Assume a work-conserving APA scheduler that respects EDF policy. *)
Hypothesis H_respects_affinity: respects_affinity job_task sched alpha. Hypothesis H_respects_affinity: respects_affinity job_task sched alpha.
Hypothesis H_work_conserving: apa_work_conserving job_cost job_task sched alpha. Hypothesis H_work_conserving: apa_work_conserving job_cost job_task sched alpha.
Hypothesis H_edf_policy: enforces_JLDP_policy_under_weak_APA job_cost job_task sched alpha (EDF job_deadline). Hypothesis H_edf_policy: respects_JLFP_policy_under_weak_APA job_cost job_task sched alpha (EDF job_deadline).
(* To avoid a long list of parameters, we provide some local definitions. *) (* To avoid a long list of parameters, we provide some local definitions. *)
Definition no_deadline_missed_by_task (tsk: sporadic_task) := Definition no_deadline_missed_by_task (tsk: sporadic_task) :=
......
...@@ -68,11 +68,11 @@ Module ResponseTimeAnalysisEDF. ...@@ -68,11 +68,11 @@ Module ResponseTimeAnalysisEDF.
completed_jobs_dont_execute job_cost sched. completed_jobs_dont_execute job_cost sched.
(* Assume that the schedule is an work-conserving APA schedule that (* Assume that the schedule is an work-conserving APA schedule that
enforces EDF priorities. *) respects EDF priorities. *)
Hypothesis H_respects_affinity: respects_affinity job_task sched alpha. Hypothesis H_respects_affinity: respects_affinity job_task sched alpha.
Hypothesis H_work_conserving: apa_work_conserving job_cost job_task sched alpha. Hypothesis H_work_conserving: apa_work_conserving job_cost job_task sched alpha.
Hypothesis H_edf_policy: Hypothesis H_edf_policy:
enforces_JLDP_policy_under_weak_APA job_cost job_task sched alpha (EDF job_deadline). respects_JLFP_policy_under_weak_APA job_cost job_task sched alpha (EDF job_deadline).
(* Let's define some local names to avoid passing many parameters. *) (* Let's define some local names to avoid passing many parameters. *)
Let no_deadline_is_missed_by_tsk (tsk: sporadic_task) := Let no_deadline_is_missed_by_tsk (tsk: sporadic_task) :=
......
...@@ -531,11 +531,11 @@ Module ResponseTimeIterationFP. ...@@ -531,11 +531,11 @@ Module ResponseTimeIterationFP.
(* ...and jobs are sequential. *) (* ...and jobs are sequential. *)
Hypothesis H_sequential_jobs: sequential_jobs sched. Hypothesis H_sequential_jobs: sequential_jobs sched.
(* Assume a work-conserving APA scheduler that enforces the FP policy. *) (* Assume a work-conserving APA scheduler that respects the FP policy. *)
Hypothesis H_respects_affinity: respects_affinity job_task sched alpha. Hypothesis H_respects_affinity: respects_affinity job_task sched alpha.
Hypothesis H_work_conserving: apa_work_conserving job_cost job_task sched alpha. Hypothesis H_work_conserving: apa_work_conserving job_cost job_task sched alpha.
Hypothesis H_enforces_FP_policy: Hypothesis H_respects_FP_policy:
enforces_FP_policy_under_weak_APA job_cost job_task sched alpha higher_priority. respects_FP_policy_under_weak_APA job_cost job_task sched alpha higher_priority.
(* To avoid a long list of parameters, we provide some local definitions. *) (* To avoid a long list of parameters, we provide some local definitions. *)
Let no_deadline_missed_by_task (tsk: sporadic_task) := Let no_deadline_missed_by_task (tsk: sporadic_task) :=
......
...@@ -72,11 +72,11 @@ Module ResponseTimeAnalysisFP. ...@@ -72,11 +72,11 @@ Module ResponseTimeAnalysisFP.
Variable higher_eq_priority: FP_policy sporadic_task. Variable higher_eq_priority: FP_policy sporadic_task.
(* ... and assume that the schedule is an APA work-conserving (* ... and assume that the schedule is an APA work-conserving
schedule that enforces this policy. *) schedule that respects this policy. *)
Hypothesis H_respects_affinity: respects_affinity job_task sched alpha. Hypothesis H_respects_affinity: respects_affinity job_task sched alpha.
Hypothesis H_work_conserving: apa_work_conserving job_cost job_task sched alpha. Hypothesis H_work_conserving: apa_work_conserving job_cost job_task sched alpha.
Hypothesis H_enforces_FP_policy: Hypothesis H_respects_FP_policy:
enforces_FP_policy_under_weak_APA job_cost job_task sched alpha higher_eq_priority. respects_FP_policy_under_weak_APA job_cost job_task sched alpha higher_eq_priority.
(* Let's define some local names to avoid passing many parameters. *) (* Let's define some local names to avoid passing many parameters. *)
Let no_deadline_is_missed_by_tsk (tsk: sporadic_task) := Let no_deadline_is_missed_by_tsk (tsk: sporadic_task) :=
...@@ -383,7 +383,7 @@ Module ResponseTimeAnalysisFP. ...@@ -383,7 +383,7 @@ Module ResponseTimeAnalysisFP.
H_previous_jobs_of_tsk_completed into BEFOREok, H_previous_jobs_of_tsk_completed into BEFOREok,
H_response_time_no_larger_than_deadline into NOMISS, H_response_time_no_larger_than_deadline into NOMISS,
H_constrained_deadlines into RESTR, H_constrained_deadlines into RESTR,
H_respects_affinity into APA, H_enforces_FP_policy into FP. H_respects_affinity into APA, H_respects_FP_policy into FP.
unfold sporadic_task_model in *. unfold sporadic_task_model in *.
unfold x, X, total_interference, task_interference. unfold x, X, total_interference, task_interference.
rewrite -big_mkcond -exchange_big big_distrl /= mul1n. rewrite -big_mkcond -exchange_big big_distrl /= mul1n.
...@@ -444,7 +444,7 @@ Module ResponseTimeAnalysisFP. ...@@ -444,7 +444,7 @@ Module ResponseTimeAnalysisFP.
H_work_conserving into WORK, H_work_conserving into WORK,
H_response_time_no_larger_than_deadline into NOMISS, H_response_time_no_larger_than_deadline into NOMISS,
H_constrained_deadlines into RESTR, H_constrained_deadlines into RESTR,
H_enforces_FP_policy into FP, H_respects_FP_policy into FP,
H_respects_affinity into APA, H_affinity_subset into SUB. H_respects_affinity into APA, H_affinity_subset into SUB.
unfold sporadic_task_model in *. unfold sporadic_task_model in *.
unfold x, X, total_interference, task_interference. unfold x, X, total_interference, task_interference.
...@@ -512,7 +512,7 @@ Module ResponseTimeAnalysisFP. ...@@ -512,7 +512,7 @@ Module ResponseTimeAnalysisFP.
H_valid_task_parameters into PARAMS, H_valid_task_parameters into PARAMS,
H_previous_jobs_of_tsk_completed into BEFOREok, H_previous_jobs_of_tsk_completed into BEFOREok,
H_sequential_jobs into SEQ, H_constrained_deadlines into CONSTR, H_sequential_jobs into SEQ, H_constrained_deadlines into CONSTR,
H_enforces_FP_policy into FP. H_respects_FP_policy into FP.
move => t /andP [GEt LTt] BACK. move => t /andP [GEt LTt] BACK.
move: WORK => WORK. move: WORK => WORK.
specialize (WORK j t BACK). specialize (WORK j t BACK).
...@@ -667,7 +667,7 @@ Module ResponseTimeAnalysisFP. ...@@ -667,7 +667,7 @@ Module ResponseTimeAnalysisFP.
H_job_of_tsk into JOBtsk, H_affinity_subset into SUB, H_job_of_tsk into JOBtsk, H_affinity_subset into SUB,
H_sporadic_tasks into SPO, H_respects_affinity into APA, H_sporadic_tasks into SPO, H_respects_affinity into APA,
H_constrained_deadlines into RESTR, H_constrained_deadlines into RESTR,
H_sequential_jobs into SEQ, H_enforces_FP_policy into FP. H_sequential_jobs into SEQ, H_respects_FP_policy into FP.
unfold sporadic_task_model in *. unfold sporadic_task_model in *.
move => delta /andP [HAS LT]. move => delta /andP [HAS LT].
rewrite -has_count in HAS. rewrite -has_count in HAS.
......
...@@ -174,7 +174,7 @@ Module InterferenceBoundEDF. ...@@ -174,7 +174,7 @@ Module InterferenceBoundEDF.
(* Assume that the scheduler is a work-conserving EDF scheduler. *) (* Assume that the scheduler is a work-conserving EDF scheduler. *)
Hypothesis H_work_conserving: apa_work_conserving job_cost job_task sched alpha. Hypothesis H_work_conserving: apa_work_conserving job_cost job_task sched alpha.
Hypothesis H_edf_weak_APA_scheduler: Hypothesis H_edf_weak_APA_scheduler:
enforces_JLDP_policy_under_weak_APA job_cost job_task sched alpha (EDF job_deadline). respects_JLFP_policy_under_weak_APA job_cost job_task sched alpha (EDF job_deadline).
(* Let tsk_i be the task to be analyzed, ...*) (* Let tsk_i be the task to be analyzed, ...*)
Variable tsk_i: sporadic_task. Variable tsk_i: sporadic_task.
......
...@@ -900,7 +900,7 @@ Module ResponseTimeIterationEDF. ...@@ -900,7 +900,7 @@ Module ResponseTimeIterationEDF.
(* Assume a work-conserving scheduler with EDF policy. *) (* Assume a work-conserving scheduler with EDF policy. *)
Hypothesis H_work_conserving: work_conserving job_cost sched. Hypothesis H_work_conserving: work_conserving job_cost sched.
Hypothesis H_edf_policy: enforces_JLDP_policy job_cost sched (EDF job_deadline). Hypothesis H_edf_policy: respects_JLFP_policy job_cost sched (EDF job_deadline).
Definition no_deadline_missed_by_task (tsk: sporadic_task) := Definition no_deadline_missed_by_task (tsk: sporadic_task) :=
task_misses_no_deadline job_cost job_deadline job_task sched tsk. task_misses_no_deadline job_cost job_deadline job_task sched tsk.
......
...@@ -69,7 +69,7 @@ Module ResponseTimeAnalysisEDF. ...@@ -69,7 +69,7 @@ Module ResponseTimeAnalysisEDF.
(* Assume that the schedule is a work-conserving EDF schedule. *) (* Assume that the schedule is a work-conserving EDF schedule. *)
Hypothesis H_work_conserving: work_conserving job_cost sched. Hypothesis H_work_conserving: work_conserving job_cost sched.
Hypothesis H_edf_policy: enforces_JLDP_policy job_cost sched (EDF job_deadline). Hypothesis H_edf_policy: respects_JLFP_policy job_cost sched (EDF job_deadline).
(* Let's define some local names to avoid passing many parameters. *) (* Let's define some local names to avoid passing many parameters. *)
Let no_deadline_is_missed_by_tsk (tsk: sporadic_task) := Let no_deadline_is_missed_by_tsk (tsk: sporadic_task) :=
......
...@@ -518,10 +518,10 @@ Module ResponseTimeIterationFP. ...@@ -518,10 +518,10 @@ Module ResponseTimeIterationFP.
(* Also assume that jobs are sequential (as required by the workload bound). *) (* Also assume that jobs are sequential (as required by the workload bound). *)
Hypothesis H_sequential_jobs: sequential_jobs sched. Hypothesis H_sequential_jobs: sequential_jobs sched.
(* Assume that the scheduler is work-conserving and enforces the FP policy. *) (* Assume that the scheduler is work-conserving and respects the FP policy. *)
Hypothesis H_work_conserving: work_conserving job_cost sched. Hypothesis H_work_conserving: work_conserving job_cost sched.
Hypothesis H_enforces_FP_policy: Hypothesis H_respects_FP_policy:
enforces_FP_policy job_cost job_task sched higher_priority. respects_FP_policy job_cost job_task sched higher_priority.
Let no_deadline_missed_by_task (tsk: sporadic_task) := Let no_deadline_missed_by_task (tsk: sporadic_task) :=
task_misses_no_deadline job_cost job_deadline job_task sched tsk. task_misses_no_deadline job_cost job_deadline job_task sched tsk.
......
...@@ -71,10 +71,10 @@ Module ResponseTimeAnalysisFP. ...@@ -71,10 +71,10 @@ Module ResponseTimeAnalysisFP.
Variable higher_eq_priority: FP_policy sporadic_task. Variable higher_eq_priority: FP_policy sporadic_task.
(* ... and assume that the schedule is a work-conserving (* ... and assume that the schedule is a work-conserving
schedule that enforces this policy. *) schedule that respects this policy. *)
Hypothesis H_work_conserving: work_conserving job_cost sched. Hypothesis H_work_conserving: work_conserving job_cost sched.
Hypothesis H_enforces_FP_policy: Hypothesis H_respects_FP_policy:
enforces_FP_policy job_cost job_task sched higher_eq_priority. respects_FP_policy job_cost job_task sched higher_eq_priority.
(* Let's define some local names to avoid passing many parameters. *) (* Let's define some local names to avoid passing many parameters. *)
Let no_deadline_is_missed_by_tsk (tsk: sporadic_task) := Let no_deadline_is_missed_by_tsk (tsk: sporadic_task) :=
...@@ -383,7 +383,7 @@ Module ResponseTimeAnalysisFP. ...@@ -383,7 +383,7 @@ Module ResponseTimeAnalysisFP.
\sum_(tsk_k <- hp_tasks) x tsk_k = X * num_cpus. \sum_(tsk_k <- hp_tasks) x tsk_k = X * num_cpus.
Proof. Proof.
have DIFFTASK := bertogna_fp_interference_by_different_tasks. have DIFFTASK := bertogna_fp_interference_by_different_tasks.
rename H_work_conserving into WORK, H_enforces_FP_policy into FP, rename H_work_conserving into WORK, H_respects_FP_policy into FP,
H_all_jobs_from_taskset into FROMTS, H_job_of_tsk into JOBtsk. H_all_jobs_from_taskset into FROMTS, H_job_of_tsk into JOBtsk.
unfold sporadic_task_model in *. unfold sporadic_task_model in *.
unfold x, X, total_interference, task_interference. unfold x, X, total_interference, task_interference.
...@@ -436,7 +436,7 @@ Module ResponseTimeAnalysisFP. ...@@ -436,7 +436,7 @@ Module ResponseTimeAnalysisFP.
H_response_time_no_larger_than_deadline into NOMISS, H_response_time_no_larger_than_deadline into NOMISS,
H_constrained_deadlines into CONSTR, H_constrained_deadlines into CONSTR,
H_sequential_jobs into SEQ, H_sequential_jobs into SEQ,
H_enforces_FP_policy into FP, H_respects_FP_policy into FP,
H_hp_bounds_has_interfering_tasks into HASHP, H_hp_bounds_has_interfering_tasks into HASHP,
H_interfering_tasks_miss_no_deadlines into NOMISSHP. H_interfering_tasks_miss_no_deadlines into NOMISSHP.
unfold sporadic_task_model in *. unfold sporadic_task_model in *.
......
...@@ -161,7 +161,7 @@ Module InterferenceBoundEDF. ...@@ -161,7 +161,7 @@ Module InterferenceBoundEDF.
(* Assume that the scheduler is a work-conserving EDF scheduler. *) (* Assume that the scheduler is a work-conserving EDF scheduler. *)
Hypothesis H_work_conserving: work_conserving job_cost sched. Hypothesis H_work_conserving: work_conserving job_cost sched.
Hypothesis H_edf_scheduler: Hypothesis H_edf_scheduler:
enforces_JLDP_policy job_cost sched (EDF job_deadline). respects_JLFP_policy job_cost sched (EDF job_deadline).
(* Let tsk_i be the task to be analyzed, ...*) (* Let tsk_i be the task to be analyzed, ...*)
Variable tsk_i: sporadic_task. Variable tsk_i: sporadic_task.
......
...@@ -987,7 +987,7 @@ Module ResponseTimeIterationEDF. ...@@ -987,7 +987,7 @@ Module ResponseTimeIterationEDF.
(* Assume that we have a work-conserving EDF scheduler. *) (* Assume that we have a work-conserving EDF scheduler. *)
Hypothesis H_work_conserving: work_conserving job_cost job_jitter sched. Hypothesis H_work_conserving: work_conserving job_cost job_jitter sched.
Hypothesis H_edf_policy: enforces_JLDP_policy job_cost job_jitter sched (EDF job_deadline). Hypothesis H_edf_policy: respects_JLFP_policy job_cost job_jitter sched (EDF job_deadline).
Let no_deadline_missed_by_task (tsk: sporadic_task) := Let no_deadline_missed_by_task (tsk: sporadic_task) :=
task_misses_no_deadline job_cost job_deadline job_task sched tsk. task_misses_no_deadline job_cost job_deadline job_task sched tsk.
......
...@@ -75,7 +75,7 @@ Module ResponseTimeAnalysisEDFJitter. ...@@ -75,7 +75,7 @@ Module ResponseTimeAnalysisEDFJitter.
(* Assume that the schedule is a work-conserving EDF schedule. *) (* Assume that the schedule is a work-conserving EDF schedule. *)
Hypothesis H_work_conserving: work_conserving job_cost job_jitter sched. Hypothesis H_work_conserving: work_conserving job_cost job_jitter sched.
Hypothesis H_edf_policy: enforces_JLDP_policy job_cost job_jitter sched (EDF job_deadline). Hypothesis H_edf_policy: respects_JLFP_policy job_cost job_jitter sched (EDF job_deadline).
(* Let's define some local names to avoid passing many parameters. *) (* Let's define some local names to avoid passing many parameters. *)
Let no_deadline_is_missed_by_tsk (tsk: sporadic_task) := Let no_deadline_is_missed_by_tsk (tsk: sporadic_task) :=
......
...@@ -519,10 +519,10 @@ Module ResponseTimeIterationFP. ...@@ -519,10 +519,10 @@ Module ResponseTimeIterationFP.
(* Also assume that jobs are sequential (as required by the workload bound). *) (* Also assume that jobs are sequential (as required by the workload bound). *)
Hypothesis H_sequential_jobs: sequential_jobs sched. Hypothesis H_sequential_jobs: sequential_jobs sched.
(* Assume that the scheduler is work-conserving and enforces the FP policy. *) (* Assume that the scheduler is work-conserving and respects the FP policy. *)
Hypothesis H_work_conserving: work_conserving job_cost job_jitter sched. Hypothesis H_work_conserving: work_conserving job_cost job_jitter sched.
Hypothesis H_enforces_FP_policy: Hypothesis H_respects_FP_policy:
enforces_FP_policy job_cost job_task job_jitter sched higher_priority. respects_FP_policy job_cost job_task job_jitter sched higher_priority.
Let no_deadline_missed_by_task (tsk: sporadic_task) := Let no_deadline_missed_by_task (tsk: sporadic_task) :=
task_misses_no_deadline job_cost job_deadline job_task sched tsk. task_misses_no_deadline job_cost job_deadline job_task sched tsk.
......
...@@ -76,10 +76,10 @@ Module ResponseTimeAnalysisFP. ...@@ -76,10 +76,10 @@ Module ResponseTimeAnalysisFP.
(* Consider a given FP policy, ... *) (* Consider a given FP policy, ... *)
Variable higher_eq_priority: FP_policy sporadic_task. Variable higher_eq_priority: FP_policy sporadic_task.
(* ...and assume that the schedule is work-conserving and enforces this policy. *) (* ...and assume that the schedule is work-conserving and respects this policy. *)
Hypothesis H_work_conserving: work_conserving job_cost job_jitter sched. Hypothesis H_work_conserving: work_conserving job_cost job_jitter sched.
Hypothesis H_enforces_priority: Hypothesis H_respects_priority:
enforces_FP_policy job_cost job_task job_jitter sched higher_eq_priority. respects_FP_policy job_cost job_task job_jitter sched higher_eq_priority.
(* Let's define some local names to avoid passing many parameters. *) (* Let's define some local names to avoid passing many parameters. *)
Let no_deadline_is_missed_by_tsk (tsk: sporadic_task) := Let no_deadline_is_missed_by_tsk (tsk: sporadic_task) :=
...@@ -416,7 +416,7 @@ Module ResponseTimeAnalysisFP. ...@@ -416,7 +416,7 @@ Module ResponseTimeAnalysisFP.
H_work_conserving into WORK, H_work_conserving into WORK,
H_constrained_deadlines into CONSTR, H_constrained_deadlines into CONSTR,
H_previous_jobs_of_tsk_completed into PREV, H_previous_jobs_of_tsk_completed into PREV,
H_enforces_priority into FP, H_respects_priority into FP,
H_response_time_no_larger_than_deadline into NOMISS. H_response_time_no_larger_than_deadline into NOMISS.
unfold sporadic_task_model in *. unfold sporadic_task_model in *.
unfold x, X, total_interference, task_interference. unfold x, X, total_interference, task_interference.
...@@ -470,7 +470,7 @@ Module ResponseTimeAnalysisFP. ...@@ -470,7 +470,7 @@ Module ResponseTimeAnalysisFP.
H_response_time_no_larger_than_deadline into NOMISS, H_response_time_no_larger_than_deadline into NOMISS,
H_constrained_deadlines into CONSTR, H_constrained_deadlines into CONSTR,
H_sequential_jobs into SEQ, H_sequential_jobs into SEQ,
H_enforces_priority into FP, H_respects_priority into FP,
H_hp_bounds_has_interfering_tasks into HASHP, H_hp_bounds_has_interfering_tasks into HASHP,
H_interfering_tasks_miss_no_deadlines into NOMISSHP. H_interfering_tasks_miss_no_deadlines into NOMISSHP.
unfold sporadic_task_model, valid_sporadic_job_with_jitter, valid_sporadic_job in *. unfold sporadic_task_model, valid_sporadic_job_with_jitter, valid_sporadic_job in *.
......
...@@ -163,7 +163,7 @@ Module InterferenceBoundEDFJitter. ...@@ -163,7 +163,7 @@ Module InterferenceBoundEDFJitter.
(* Assume that we have a work-conserving EDF scheduler. *) (* Assume that we have a work-conserving EDF scheduler. *)
Hypothesis H_work_conserving: work_conserving job_cost job_jitter sched. Hypothesis H_work_conserving: work_conserving job_cost job_jitter sched.
Hypothesis H_edf_policy: enforces_JLDP_policy job_cost job_jitter sched (EDF job_deadline). Hypothesis H_edf_policy: respects_JLFP_policy job_cost job_jitter sched (EDF job_deadline).
(* Let tsk_i be the task to be analyzed, ...*) (* Let tsk_i be the task to be analyzed, ...*)
Variable tsk_i: sporadic_task. Variable tsk_i: sporadic_task.
......
...@@ -893,7 +893,7 @@ Module ResponseTimeIterationEDF. ...@@ -893,7 +893,7 @@ Module ResponseTimeIterationEDF.
(* Assume a work-conserving scheduler with EDF policy. *) (* Assume a work-conserving scheduler with EDF policy. *)
Hypothesis H_work_conserving: work_conserving job_cost sched. Hypothesis H_work_conserving: work_conserving job_cost sched.
Hypothesis H_edf_policy: enforces_JLDP_policy job_cost sched (EDF job_deadline). Hypothesis H_edf_policy: respects_JLFP_policy job_cost sched (EDF job_deadline).
Definition no_deadline_missed_by_task (tsk: sporadic_task) := Definition no_deadline_missed_by_task (tsk: sporadic_task) :=
task_misses_no_deadline job_cost job_deadline job_task sched tsk. task_misses_no_deadline job_cost job_deadline job_task sched tsk.
......
...@@ -69,7 +69,7 @@ Module ResponseTimeAnalysisEDF. ...@@ -69,7 +69,7 @@ Module ResponseTimeAnalysisEDF.
(* Assume that the schedule is a work-conserving EDF schedule. *) (* Assume that the schedule is a work-conserving EDF schedule. *)
Hypothesis H_work_conserving: work_conserving job_cost sched. Hypothesis H_work_conserving: work_conserving job_cost sched.
Hypothesis H_edf_policy: enforces_JLDP_policy job_cost sched (EDF job_deadline). Hypothesis H_edf_policy: respects_JLFP_policy job_cost sched (EDF job_deadline).
(* Let's define some local names to avoid passing many parameters. *) (* Let's define some local names to avoid passing many parameters. *)
Let no_deadline_is_missed_by_tsk (tsk: sporadic_task) := Let no_deadline_is_missed_by_tsk (tsk: sporadic_task) :=
......
...@@ -505,10 +505,10 @@ unfold interference_bound_generic; simpl. ...@@ -505,10 +505,10 @@ unfold interference_bound_generic; simpl.
Hypothesis H_completed_jobs_dont_execute: Hypothesis H_completed_jobs_dont_execute:
completed_jobs_dont_execute job_cost sched. completed_jobs_dont_execute job_cost sched.
(* Assume that the scheduler is work-conserving and enforces the FP policy. *) (* Assume that the scheduler is work-conserving and respects the FP policy. *)
Hypothesis H_work_conserving: work_conserving job_cost sched. Hypothesis H_work_conserving: work_conserving job_cost sched.
Hypothesis H_enforces_FP_policy: Hypothesis H_respects_FP_policy:
enforces_FP_policy job_cost job_task sched higher_priority. respects_FP_policy job_cost job_task sched higher_priority.
Let no_deadline_missed_by_task (tsk: sporadic_task) := Let no_deadline_missed_by_task (tsk: sporadic_task) :=
task_misses_no_deadline job_cost job_deadline job_task sched tsk. task_misses_no_deadline job_cost job_deadline job_task sched tsk.
......
...@@ -68,10 +68,10 @@ Module ResponseTimeAnalysisFP. ...@@ -68,10 +68,10 @@ Module ResponseTimeAnalysisFP.
Variable higher_eq_priority: FP_policy sporadic_task. Variable higher_eq_priority: FP_policy sporadic_task.
(* ... and assume that the schedule is an APA work-conserving (* ... and assume that the schedule is an APA work-conserving
schedule that enforces this policy. *) schedule that respects this policy. *)
Hypothesis H_work_conserving: work_conserving job_cost sched. Hypothesis H_work_conserving: work_conserving job_cost sched.
Hypothesis H_enforces_FP_policy: Hypothesis H_respects_FP_policy:
enforces_FP_policy job_cost job_task sched higher_eq_priority. respects_FP_policy job_cost job_task sched higher_eq_priority.
(* Assume that there exists at least one processor. *) (* Assume that there exists at least one processor. *)
Hypothesis H_at_least_one_cpu: num_cpus > 0. Hypothesis H_at_least_one_cpu: num_cpus > 0.
...@@ -267,11 +267,11 @@ Module ResponseTimeAnalysisFP. ...@@ -267,11 +267,11 @@ Module ResponseTimeAnalysisFP.
H_sporadic_tasks into SPO, H_sporadic_tasks into SPO,
H_work_conserving into WORK, H_work_conserving into WORK,
H_constrained_deadlines into RESTR, H_constrained_deadlines into RESTR,
H_enforces_FP_policy into FP, H_respects_FP_policy into FP,
H_previous_jobs_of_tsk_completed into BEFOREok, H_previous_jobs_of_tsk_completed into BEFOREok,
H_response_time_no_larger_than_deadline into NOMISS. H_response_time_no_larger_than_deadline into NOMISS.
unfold sporadic_task_model, enforces_FP_policy, unfold sporadic_task_model, respects_FP_policy,
enforces_JLDP_policy, FP_to_JLDP in *. respects_JLDP_policy, FP_to_JLDP in *.
unfold x, X, total_interference, task_interference. unfold x, X, total_interference, task_interference.
rewrite -big_mkcond -exchange_big big_distrl /=. rewrite -big_mkcond -exchange_big big_distrl /=.
rewrite [\sum_(_ <= _ < _ | backlogged _ _ _ _) _]big_mkcond. rewrite [\sum_(_ <= _ < _ | backlogged _ _ _ _) _]big_mkcond.
......
...@@ -158,7 +158,7 @@ Module InterferenceBoundEDF. ...@@ -158,7 +158,7 @@ Module InterferenceBoundEDF.
(* Assume that the scheduler is a work-conserving EDF scheduler. *) (* Assume that the scheduler is a work-conserving EDF scheduler. *)
Hypothesis H_work_conserving: work_conserving job_cost sched. Hypothesis H_work_conserving: work_conserving job_cost sched.
Hypothesis H_edf_scheduler: Hypothesis H_edf_scheduler:
enforces_JLDP_policy job_cost sched (EDF job_deadline). respects_JLFP_policy job_cost sched (EDF job_deadline).
(* Let tsk_i be the task to be analyzed, ...*) (* Let tsk_i be the task to be analyzed, ...*)
Variable tsk_i: sporadic_task. Variable tsk_i: sporadic_task.
......
...@@ -288,10 +288,10 @@ Module ResponseTimeIterationFP. ...@@ -288,10 +288,10 @@ Module ResponseTimeIterationFP.
Hypothesis H_completed_jobs_dont_execute: Hypothesis H_completed_jobs_dont_execute:
completed_jobs_dont_execute job_cost sched. completed_jobs_dont_execute job_cost sched.
(* Also assume that the scheduler is work-conserving and enforces the FP policy. *) (* Also assume that the scheduler is work-conserving and respects the FP policy. *)
Hypothesis H_work_conserving: work_conserving job_cost sched. Hypothesis H_work_conserving: work_conserving job_cost sched.
Hypothesis H_enforces_FP_policy: Hypothesis H_respects_FP_policy:
enforces_FP_policy job_cost job_task sched higher_eq_priority. respects_FP_policy job_cost job_task sched higher_eq_priority.
(* For simplicity, let's define some local names. *) (* For simplicity, let's define some local names. *)
Let no_deadline_missed_by_task := Let no_deadline_missed_by_task :=
......
...@@ -66,7 +66,7 @@ Module ResponseTimeAnalysisFP. ...@@ -66,7 +66,7 @@ Module ResponseTimeAnalysisFP.
(* Next, assume that the schedule is a work-conserving FP schedule. *) (* Next, assume that the schedule is a work-conserving FP schedule. *)
Hypothesis H_work_conserving: work_conserving job_cost sched. Hypothesis H_work_conserving: work_conserving job_cost sched.
Hypothesis H_enforces_fp_policy: enforces_FP_policy job_cost job_task sched higher_eq_priority. Hypothesis H_respects_fp_policy: respects_FP_policy job_cost job_task sched higher_eq_priority.
(* Now we proceed with the analysis. (* Now we proceed with the analysis.
Let tsk be any task in ts that is to be analyzed. *) Let tsk be any task in ts that is to be analyzed. *)
...@@ -92,13 +92,17 @@ Module ResponseTimeAnalysisFP. ...@@ -92,13 +92,17 @@ Module ResponseTimeAnalysisFP.
Theorem uniprocessor_response_time_bound_fp: Theorem uniprocessor_response_time_bound_fp:
response_time_bounded_by tsk R. response_time_bounded_by tsk R.
Proof. Proof.
rename H_response_time_is_fixed_point into FIX.
intros j JOBtsk. intros j JOBtsk.
apply busy_interval_bounds_response_time with have bla := busy_interval_bounds_response_time.
(job_task0 := job_task) (tsk0 := tsk) set prio := FP_to_JLFP job_task arr_seq higher_eq_priority.
(higher_eq_priority0 := higher_eq_priority); try (by done). apply busy_interval_bounds_response_time with (higher_eq_priority0 := prio); try (by done).
- by intros x; apply H_priority_is_reflexive.
- by intros x z y; apply H_priority_is_transitive.
apply fp_workload_bound_holds with (task_cost0 := task_cost) apply fp_workload_bound_holds with (task_cost0 := task_cost)
(task_period0 := task_period) (task_deadline0 := task_deadline) (task_period0 := task_period) (task_deadline0 := task_deadline)
(job_deadline0 := job_deadline) (ts0 := ts); try (by done). (job_deadline0 := job_deadline) (ts0 := ts); try (by done).
by rewrite JOBtsk.
Qed. Qed.
End ResponseTimeBound. End ResponseTimeBound.
......
...@@ -187,7 +187,7 @@ Module WorkloadBoundFP. ...@@ -187,7 +187,7 @@ Module WorkloadBoundFP.
(* First, let's define some local names for clarity. *) (* First, let's define some local names for clarity. *)
Let hp_workload := Let hp_workload :=
workload_of_higher_or_equal_priority job_cost job_task arr_seq higher_eq_priority tsk. workload_of_higher_or_equal_priority_tasks job_cost job_task arr_seq higher_eq_priority tsk.
Let workload_bound := Let workload_bound :=
total_workload_bound_fp task_cost task_period higher_eq_priority ts tsk. total_workload_bound_fp task_cost task_period higher_eq_priority ts tsk.
...@@ -206,7 +206,7 @@ Module WorkloadBoundFP. ...@@ -206,7 +206,7 @@ Module WorkloadBoundFP.
rename H_fixed_point into FIX, H_all_jobs_from_taskset into FROMTS, rename H_fixed_point into FIX, H_all_jobs_from_taskset into FROMTS,
H_valid_job_parameters into JOBPARAMS, H_valid_job_parameters into JOBPARAMS,
H_valid_task_parameters into PARAMS. H_valid_task_parameters into PARAMS.
unfold hp_workload, workload_of_higher_or_equal_priority, unfold hp_workload, workload_of_higher_or_equal_priority_tasks,
valid_sporadic_job, valid_realtime_job, valid_sporadic_job, valid_realtime_job,
valid_sporadic_taskset, is_valid_sporadic_task in *. valid_sporadic_taskset, is_valid_sporadic_task in *.
intro t. intro t.
......