Skip to content
Snippets Groups Projects
Commit ff88d776 authored by Björn Brandenburg's avatar Björn Brandenburg
Browse files

disambiguate preemption model and RTC threshold instances

parent 608eb93b
No related branches found
No related tags found
No related merge requests found
Showing with 25 additions and 25 deletions
...@@ -8,7 +8,7 @@ Require Import prosa.model.task.preemption.floating_nonpreemptive. ...@@ -8,7 +8,7 @@ Require Import prosa.model.task.preemption.floating_nonpreemptive.
Section TaskRTCThresholdFloatingNonPreemptiveRegions. Section TaskRTCThresholdFloatingNonPreemptiveRegions.
(** Furthermore, we assume the task model with floating non-preemptive regions. *) (** Furthermore, we assume the task model with floating non-preemptive regions. *)
#[local] Existing Instance floating_preemptive. #[local] Existing Instance floating_preemptive_rtc_threshold.
(** Consider any type of tasks ... *) (** Consider any type of tasks ... *)
Context {Task : TaskType}. Context {Task : TaskType}.
......
...@@ -12,7 +12,7 @@ Require Import prosa.model.preemption.limited_preemptive. ...@@ -12,7 +12,7 @@ Require Import prosa.model.preemption.limited_preemptive.
Section TaskRTCThresholdLimitedPreemptions. Section TaskRTCThresholdLimitedPreemptions.
(** We assume the task model with fixed preemption points. *) (** We assume the task model with fixed preemption points. *)
#[local] Existing Instance limited_preemptions. #[local] Existing Instance limited_preemptions_rtc_threshold.
(** Consider any type of tasks ... *) (** Consider any type of tasks ... *)
Context {Task : TaskType}. Context {Task : TaskType}.
...@@ -104,7 +104,7 @@ Section TaskRTCThresholdLimitedPreemptions. ...@@ -104,7 +104,7 @@ Section TaskRTCThresholdLimitedPreemptions.
split; first by rewrite /task_rtc_bounded_by_cost leq_subr. split; first by rewrite /task_rtc_bounded_by_cost leq_subr.
intros ? ARR__j TSK__j. move: (H_valid_fixed_preemption_points_model) => [LJ LT]. intros ? ARR__j TSK__j. move: (H_valid_fixed_preemption_points_model) => [LJ LT].
move: (LJ) (LT) => [ZERO__job [COST__job SORT__job]] [ZERO__task [COST__task [SORT__task [T4 [T5 T6]]]]]. move: (LJ) (LT) => [ZERO__job [COST__job SORT__job]] [ZERO__task [COST__task [SORT__task [T4 [T5 T6]]]]].
rewrite /job_rtct /task_rtct /limited_preemptions rewrite /job_rtct /task_rtct /limited_preemptions_rtc_threshold
/job_last_nonpreemptive_segment /task_last_nonpr_segment /lengths_of_segments. /job_last_nonpreemptive_segment /task_last_nonpr_segment /lengths_of_segments.
case: (posnP (job_cost j)) => [Z|POS]; first by rewrite Z; compute. case: (posnP (job_cost j)) => [Z|POS]; first by rewrite Z; compute.
have J_RTCT__pos : 0 < job_last_nonpreemptive_segment j have J_RTCT__pos : 0 < job_last_nonpreemptive_segment j
......
...@@ -9,9 +9,9 @@ Require Import prosa.model.task.preemption.fully_nonpreemptive. ...@@ -9,9 +9,9 @@ Require Import prosa.model.task.preemption.fully_nonpreemptive.
Section TaskRTCThresholdFullyNonPreemptive. Section TaskRTCThresholdFullyNonPreemptive.
(** We assume the fully non-preemptive task model. *) (** We assume the fully non-preemptive task model. *)
#[local] Existing Instance fully_nonpreemptive_model. #[local] Existing Instance fully_nonpreemptive_task_model.
#[local] Existing Instance fully_nonpreemptive. #[local] Existing Instance fully_nonpreemptive_rtc_threshold.
(** Consider any type of tasks ... *) (** Consider any type of tasks ... *)
Context {Task : TaskType}. Context {Task : TaskType}.
Context `{TaskCost Task}. Context `{TaskCost Task}.
...@@ -72,7 +72,7 @@ Section TaskRTCThresholdFullyNonPreemptive. ...@@ -72,7 +72,7 @@ Section TaskRTCThresholdFullyNonPreemptive.
intros; split. intros; split.
- by unfold task_rtc_bounded_by_cost. - by unfold task_rtc_bounded_by_cost.
- intros j ARR TSK. - intros j ARR TSK.
move: TSK => /eqP <-; rewrite /fully_nonpreemptive. move: TSK => /eqP <-; rewrite /fully_nonpreemptive_rtc_threshold.
edestruct (posnP (job_cost j)) as [ZERO|POS]. edestruct (posnP (job_cost j)) as [ZERO|POS].
+ by rewrite job_rtc_threshold_is_0. + by rewrite job_rtc_threshold_is_0.
+ by erewrite job_rtc_threshold_is_ε; eauto 2. + by erewrite job_rtc_threshold_is_ε; eauto 2.
......
...@@ -12,8 +12,8 @@ Section TaskRTCThresholdFullyPreemptiveModel. ...@@ -12,8 +12,8 @@ Section TaskRTCThresholdFullyPreemptiveModel.
(** We assume that jobs and tasks are fully preemptive. *) (** We assume that jobs and tasks are fully preemptive. *)
#[local] Existing Instance #[local] Existing Instance
model.preemption.fully_preemptive.fully_preemptive_model. model.preemption.fully_preemptive.fully_preemptive_model.
#[local] Existing Instance fully_preemptive_model. #[local] Existing Instance fully_preemptive_task_model.
#[local] Existing Instance fully_preemptive. #[local] Existing Instance fully_preemptive_rtc_threshold.
(** Consider any type of tasks ... *) (** Consider any type of tasks ... *)
Context {Task : TaskType}. Context {Task : TaskType}.
......
...@@ -10,8 +10,8 @@ Require Import prosa.model.task.preemption.fully_nonpreemptive. ...@@ -10,8 +10,8 @@ Require Import prosa.model.task.preemption.fully_nonpreemptive.
Section FullyNonPreemptiveModel. Section FullyNonPreemptiveModel.
(** We assume the fully non-preemptive task model. *) (** We assume the fully non-preemptive task model. *)
#[local] Existing Instance fully_nonpreemptive_model. #[local] Existing Instance fully_nonpreemptive_task_model.
#[local] Existing Instance fully_nonpreemptive. #[local] Existing Instance fully_nonpreemptive_rtc_threshold.
(** Consider any type of tasks ... *) (** Consider any type of tasks ... *)
Context {Task : TaskType}. Context {Task : TaskType}.
......
...@@ -12,8 +12,8 @@ Section FullyPreemptiveModel. ...@@ -12,8 +12,8 @@ Section FullyPreemptiveModel.
(** We assume that jobs and tasks are fully preemptive. *) (** We assume that jobs and tasks are fully preemptive. *)
#[local] Existing Instance #[local] Existing Instance
model.preemption.fully_preemptive.fully_preemptive_model. model.preemption.fully_preemptive.fully_preemptive_model.
#[local] Existing Instance fully_preemptive_model. #[local] Existing Instance fully_preemptive_task_model.
#[local] Existing Instance fully_preemptive. #[local] Existing Instance fully_preemptive_rtc_threshold.
(** Consider any type of tasks ... *) (** Consider any type of tasks ... *)
Context {Task : TaskType}. Context {Task : TaskType}.
......
...@@ -59,7 +59,7 @@ Section TaskRTCThresholdFloatingNonPreemptiveRegions. ...@@ -59,7 +59,7 @@ Section TaskRTCThresholdFloatingNonPreemptiveRegions.
information about the placement of preemption points in all jobs, i.e., information about the placement of preemption points in all jobs, i.e.,
it is impossible to predict when exactly a job will be preemptable. Thus, it is impossible to predict when exactly a job will be preemptable. Thus,
the only safe run-to-completion threshold is [task cost]. *) the only safe run-to-completion threshold is [task cost]. *)
Definition floating_preemptive : TaskRunToCompletionThreshold Task := Definition floating_preemptive_rtc_threshold : TaskRunToCompletionThreshold Task :=
fun tsk : Task => task_cost tsk. fun tsk : Task => task_cost tsk.
End TaskRTCThresholdFloatingNonPreemptiveRegions. End TaskRTCThresholdFloatingNonPreemptiveRegions.
...@@ -13,7 +13,7 @@ Section FullyNonPreemptiveModel. ...@@ -13,7 +13,7 @@ Section FullyNonPreemptiveModel.
(** In the fully non-preemptive model, no job can be preempted until its (** In the fully non-preemptive model, no job can be preempted until its
completion. The maximal non-preemptive segment of a job [j] has length completion. The maximal non-preemptive segment of a job [j] has length
[job_cost j], which is bounded by [task_cost tsk].*) [job_cost j], which is bounded by [task_cost tsk].*)
Definition fully_nonpreemptive_model : TaskMaxNonpreemptiveSegment Task := Definition fully_nonpreemptive_task_model : TaskMaxNonpreemptiveSegment Task :=
fun tsk : Task => task_cost tsk. fun tsk : Task => task_cost tsk.
End FullyNonPreemptiveModel. End FullyNonPreemptiveModel.
...@@ -31,7 +31,7 @@ Section TaskRTCThresholdFullyNonPreemptive. ...@@ -31,7 +31,7 @@ Section TaskRTCThresholdFullyNonPreemptive.
completion. In other words, once a job starts running, it is guaranteed completion. In other words, once a job starts running, it is guaranteed
to finish. Thus, we can set the task-level run-to-completion threshold to finish. Thus, we can set the task-level run-to-completion threshold
to ε. *) to ε. *)
Definition fully_nonpreemptive : TaskRunToCompletionThreshold Task := Definition fully_nonpreemptive_rtc_threshold : TaskRunToCompletionThreshold Task :=
fun tsk : Task => ε. fun tsk : Task => ε.
End TaskRTCThresholdFullyNonPreemptive. End TaskRTCThresholdFullyNonPreemptive.
...@@ -13,7 +13,7 @@ Section FullyPreemptiveModel. ...@@ -13,7 +13,7 @@ Section FullyPreemptiveModel.
(** In the fully preemptive model, any job can be preempted at any (** In the fully preemptive model, any job can be preempted at any
time. Thus, the maximal non-preemptive segment has length at most ε time. Thus, the maximal non-preemptive segment has length at most ε
(i.e., one time unit such as a processor cycle). *) (i.e., one time unit such as a processor cycle). *)
Definition fully_preemptive_model : TaskMaxNonpreemptiveSegment Task := Definition fully_preemptive_task_model : TaskMaxNonpreemptiveSegment Task :=
fun tsk : Task => ε. fun tsk : Task => ε.
End FullyPreemptiveModel. End FullyPreemptiveModel.
...@@ -32,7 +32,7 @@ Section TaskRTCThresholdFullyPreemptiveModel. ...@@ -32,7 +32,7 @@ Section TaskRTCThresholdFullyPreemptiveModel.
(** In the fully preemptive model, any job can be preempted at any (** In the fully preemptive model, any job can be preempted at any
time. Thus, the only safe run-to-completion threshold for a task time. Thus, the only safe run-to-completion threshold for a task
is its WCET. *) is its WCET. *)
Definition fully_preemptive : TaskRunToCompletionThreshold Task := Definition fully_preemptive_rtc_threshold : TaskRunToCompletionThreshold Task :=
fun tsk : Task => task_cost tsk. fun tsk : Task => task_cost tsk.
End TaskRTCThresholdFullyPreemptiveModel. End TaskRTCThresholdFullyPreemptiveModel.
...@@ -106,7 +106,7 @@ Section TaskRTCThresholdLimitedPreemptions. ...@@ -106,7 +106,7 @@ Section TaskRTCThresholdLimitedPreemptions.
reaches its last non-preemptive segment. Thus, we can set the task-level reaches its last non-preemptive segment. Thus, we can set the task-level
run-to-completion threshold to [task_cost tsk - (task_last_nonpr_seg tsk - ε)], run-to-completion threshold to [task_cost tsk - (task_last_nonpr_seg tsk - ε)],
which safely bounds [job_cost j - (job_last_nonpr_seg j - ε)]. *) which safely bounds [job_cost j - (job_last_nonpr_seg j - ε)]. *)
Definition limited_preemptions : TaskRunToCompletionThreshold Task := Definition limited_preemptions_rtc_threshold : TaskRunToCompletionThreshold Task :=
fun tsk : Task => task_cost tsk - (task_last_nonpr_segment tsk - ε). fun tsk : Task => task_cost tsk - (task_last_nonpr_segment tsk - ε).
End TaskRTCThresholdLimitedPreemptions. End TaskRTCThresholdLimitedPreemptions.
...@@ -25,8 +25,8 @@ Section RTAforFullyPreemptiveEDFModelwithArrivalCurves. ...@@ -25,8 +25,8 @@ Section RTAforFullyPreemptiveEDFModelwithArrivalCurves.
(** We assume that jobs and tasks are fully preemptive. *) (** We assume that jobs and tasks are fully preemptive. *)
#[local] Existing Instance #[local] Existing Instance
model.preemption.fully_preemptive.fully_preemptive_model. model.preemption.fully_preemptive.fully_preemptive_model.
#[local] Existing Instance fully_preemptive_model. #[local] Existing Instance fully_preemptive_task_model.
#[local] Existing Instance fully_preemptive. #[local] Existing Instance fully_preemptive_rtc_threshold.
(** Consider any type of tasks ... *) (** Consider any type of tasks ... *)
Context {Task : TaskType}. Context {Task : TaskType}.
...@@ -133,7 +133,7 @@ Section RTAforFullyPreemptiveEDFModelwithArrivalCurves. ...@@ -133,7 +133,7 @@ Section RTAforFullyPreemptiveEDFModelwithArrivalCurves.
Proof. Proof.
have BLOCK: blocking_bound ts tsk = 0. have BLOCK: blocking_bound ts tsk = 0.
{ by rewrite /blocking_bound /parameters.task_max_nonpreemptive_segment { by rewrite /blocking_bound /parameters.task_max_nonpreemptive_segment
/fully_preemptive.fully_preemptive_model subnn big1_eq. } /fully_preemptive_task_model subnn big1_eq. }
try ( eapply uniprocessor_response_time_bound_edf_with_bounded_nonpreemptive_segments with (L0 := L) ) || try ( eapply uniprocessor_response_time_bound_edf_with_bounded_nonpreemptive_segments with (L0 := L) ) ||
eapply uniprocessor_response_time_bound_edf_with_bounded_nonpreemptive_segments with (L := L) . eapply uniprocessor_response_time_bound_edf_with_bounded_nonpreemptive_segments with (L := L) .
all: rt_eauto. all: rt_eauto.
......
...@@ -23,8 +23,8 @@ Section RTAforFullyPreemptiveFPModelwithArrivalCurves. ...@@ -23,8 +23,8 @@ Section RTAforFullyPreemptiveFPModelwithArrivalCurves.
(** We assume that jobs and tasks are fully preemptive. *) (** We assume that jobs and tasks are fully preemptive. *)
#[local] Existing Instance #[local] Existing Instance
model.preemption.fully_preemptive.fully_preemptive_model. model.preemption.fully_preemptive.fully_preemptive_model.
#[local] Existing Instance fully_preemptive_model. #[local] Existing Instance fully_preemptive_task_model.
#[local] Existing Instance fully_preemptive. #[local] Existing Instance fully_preemptive_rtc_threshold.
(** Consider any type of tasks ... *) (** Consider any type of tasks ... *)
Context {Task : TaskType}. Context {Task : TaskType}.
...@@ -139,7 +139,7 @@ Section RTAforFullyPreemptiveFPModelwithArrivalCurves. ...@@ -139,7 +139,7 @@ Section RTAforFullyPreemptiveFPModelwithArrivalCurves.
Proof. Proof.
have BLOCK: blocking_bound ts tsk = 0. have BLOCK: blocking_bound ts tsk = 0.
{ by rewrite /blocking_bound /parameters.task_max_nonpreemptive_segment { by rewrite /blocking_bound /parameters.task_max_nonpreemptive_segment
/fully_preemptive.fully_preemptive_model subnn big1_eq. } /fully_preemptive_task_model subnn big1_eq. }
eapply uniprocessor_response_time_bound_fp_with_bounded_nonpreemptive_segments. eapply uniprocessor_response_time_bound_fp_with_bounded_nonpreemptive_segments.
all: rt_eauto. all: rt_eauto.
rewrite /work_bearing_readiness. rewrite /work_bearing_readiness.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment