Library prosa.results.rta.rs.fp.fully_nonpreemptive
Require Export prosa.analysis.facts.readiness.sequential.
Require Export prosa.analysis.abstract.restricted_supply.task_intra_interference_bound.
Require Export prosa.analysis.abstract.restricted_supply.bounded_bi.fp.
Require Export prosa.analysis.abstract.restricted_supply.search_space.fp.
Require Export prosa.analysis.facts.model.task_cost.
Require Export prosa.analysis.facts.preemption.task.nonpreemptive.
Require Export prosa.analysis.facts.preemption.rtc_threshold.nonpreemptive.
Require Export prosa.analysis.abstract.restricted_supply.task_intra_interference_bound.
Require Export prosa.analysis.abstract.restricted_supply.bounded_bi.fp.
Require Export prosa.analysis.abstract.restricted_supply.search_space.fp.
Require Export prosa.analysis.facts.model.task_cost.
Require Export prosa.analysis.facts.preemption.task.nonpreemptive.
Require Export prosa.analysis.facts.preemption.rtc_threshold.nonpreemptive.
RTA for Fully Non-Preemptive FP Scheduling on Restricted-Supply Uniprocessors
Defining the System Model
- tasks, jobs, and their parameters,
 - processor model,
 - the sequence of job arrivals,
 - worst-case execution time (WCET) and the absence of self-suspensions,
 - the task under analysis,
 - an arbitrary schedule of the task set, and finally,
 - a supply-bound function.
 
Tasks and Jobs
... and any type of jobs associated with these tasks, where each
      job has a task job_task, a cost job_cost, and an arrival
      time job_arrival. 
  Context {Job : JobType}.
Context `{JobTask Job Task}.
Context `{JobCost Job}.
Context `{JobArrival Job}.
Context `{JobTask Job Task}.
Context `{JobCost Job}.
Context `{JobArrival Job}.
Furthermore, assume that jobs and tasks are fully non-preemptive. 
  #[local] Existing Instance fully_nonpreemptive_job_model.
#[local] Existing Instance fully_nonpreemptive_task_model.
#[local] Existing Instance fully_nonpreemptive_rtc_threshold.
#[local] Existing Instance fully_nonpreemptive_task_model.
#[local] Existing Instance fully_nonpreemptive_rtc_threshold.
  Context `{PState : ProcessorState Job}.
Hypothesis H_uniprocessor_proc_model : uniprocessor_model PState.
Hypothesis H_unit_supply_proc_model : unit_supply_proc_model PState.
Hypothesis H_consumed_supply_proc_model : fully_consuming_proc_model PState.
Hypothesis H_uniprocessor_proc_model : uniprocessor_model PState.
Hypothesis H_unit_supply_proc_model : unit_supply_proc_model PState.
Hypothesis H_consumed_supply_proc_model : fully_consuming_proc_model PState.
The Job Arrival Sequence
  Variable arr_seq : arrival_sequence Job.
Hypothesis H_valid_arrival_sequence : valid_arrival_sequence arr_seq.
Hypothesis H_valid_arrival_sequence : valid_arrival_sequence arr_seq.
Absence of Self-Suspensions and WCET Compliance
We further require that a job's cost cannot exceed its task's stated WCET. 
... and assume that all jobs stem from tasks in this task set. 
We assume that max_arrivals is a family of valid arrival
      curves that constrains the arrival sequence arr_seq, i.e., for
      any task tsk in ts, max_arrival tsk is (1) an arrival
      bound of tsk, and ... 
... (2) a monotonic function that equals 0 for the empty interval delta = 0. 
The Schedule
  Variable sched : schedule PState.
Hypothesis H_valid_schedule : valid_schedule sched arr_seq.
Hypothesis H_work_conserving : work_conserving arr_seq sched.
Hypothesis H_nonpreemptive_sched : nonpreemptive_schedule sched.
Hypothesis H_valid_schedule : valid_schedule sched arr_seq.
Hypothesis H_work_conserving : work_conserving arr_seq sched.
Hypothesis H_nonpreemptive_sched : nonpreemptive_schedule sched.
Consider an FP policy that indicates a higher-or-equal priority
      relation, and assume that the relation is reflexive and
      transitive. 
  Context {FP : FP_policy Task}.
Hypothesis H_priority_is_reflexive : reflexive_task_priorities FP.
Hypothesis H_priority_is_transitive : transitive_task_priorities FP.
Hypothesis H_priority_is_reflexive : reflexive_task_priorities FP.
Hypothesis H_priority_is_transitive : transitive_task_priorities FP.
We assume that the schedule respects the FP scheduling policy. 
  Hypothesis H_respects_policy_at_preemption_point :
respects_FP_policy_at_preemption_point arr_seq sched FP.
respects_FP_policy_at_preemption_point arr_seq sched FP.
Supply-Bound Function
  Context {SBF : SupplyBoundFunction}.
Hypothesis H_SBF_monotone : sbf_is_monotone SBF.
Hypothesis H_unit_SBF : unit_supply_bound_function SBF.
Hypothesis H_SBF_monotone : sbf_is_monotone SBF.
Hypothesis H_unit_SBF : unit_supply_bound_function SBF.
We assume that SBF properly characterizes all busy intervals
      (w.r.t. task tsk) in sched. That is, (1) SBF 0 = 0 and (2)
      for any duration Δ, at least SBF Δ supply is available in
      any busy-interval prefix of length Δ. 
Maximum Length of a Busy Interval
  Definition busy_window_recurrence_solution (L : duration) :=
L > 0
∧ SBF L ≥ blocking_bound ts tsk
+ total_hep_request_bound_function_FP ts tsk L.
L > 0
∧ SBF L ≥ blocking_bound ts tsk
+ total_hep_request_bound_function_FP ts tsk L.
Response-Time Bound
  Definition rta_recurrence_solution L R :=
∀ (A : duration),
is_in_search_space tsk L A →
∃ (F : duration),
SBF F ≥ blocking_bound ts tsk
+ (task_request_bound_function tsk (A + ε) - (task_cost tsk - ε))
+ total_ohep_request_bound_function_FP ts tsk F
∧ SBF (A + R) ≥ SBF F + (task_cost tsk - ε)
∧ A + R ≥ F.
∀ (A : duration),
is_in_search_space tsk L A →
∃ (F : duration),
SBF F ≥ blocking_bound ts tsk
+ (task_request_bound_function tsk (A + ε) - (task_cost tsk - ε))
+ total_ohep_request_bound_function_FP ts tsk F
∧ SBF (A + R) ≥ SBF F + (task_cost tsk - ε)
∧ A + R ≥ F.
Finally, using the sequential variant of abstract
      restricted-supply analysis, we establish that any such R is a
      sound response-time bound for the concrete model of
      fully non-preemptive fixed-priority scheduling with arbitrary
      supply restrictions. 
  Theorem uniprocessor_response_time_bound_fully_nonpreemptive_fp :
∀ (L : duration),
busy_window_recurrence_solution L →
∀ (R : duration),
rta_recurrence_solution L R →
task_response_time_bound arr_seq sched tsk R.
Proof.
move⇒ L [BW_POS BW_FIX] R SOL js ARRs TSKs.
have VPR : valid_preemption_model arr_seq sched by exact: valid_fully_nonpreemptive_model ⇒ //.
have [ZERO|POS] := posnP (job_cost js);
first by rewrite /job_response_time_bound /completed_by ZERO.
have READ : work_bearing_readiness arr_seq sched
by exact: sequential_readiness_implies_work_bearing_readiness.
eapply uniprocessor_response_time_bound_restricted_supply_seq with (L := L) ⇒ //.
- exact: instantiated_i_and_w_are_coherent_with_schedule.
- exact: sequential_readiness_implies_sequential_tasks.
- exact: instantiated_interference_and_workload_consistent_with_sequential_tasks.
- apply: busy_intervals_are_bounded_rs_fp ⇒ //.
by apply: instantiated_i_and_w_are_coherent_with_schedule.
- apply: valid_pred_sbf_switch_predicate; last by exact: H_valid_SBF.
move ⇒ ? ? ? ? [? ?]; split ⇒ //.
by apply instantiated_busy_interval_prefix_equivalent_busy_interval_prefix.
- apply: instantiated_task_intra_interference_is_bounded; eauto 1 ⇒ //; first last.
+ by apply athep_workload_le_total_ohep_rbf.
+ apply: service_inversion_is_bounded ⇒ // ⇒ jo t1 t2 ARRo TSKo BUSYo.
unshelve rewrite (leqRW (nonpreemptive_segments_bounded_by_blocking _ _ _ _ _ _ _ _ _)) ⇒ //.
by instantiate (1 := fun _ ⇒ blocking_bound ts tsk).
- move ⇒ A SP; move: (SOL A) ⇒ [].
+ by apply: search_space_sub ⇒ //.
+ move ⇒ F [FIX1 [FIX2 LE]]; ∃ F; split ⇒ //.
rewrite /task_intra_IBF /task_rtct /fully_nonpreemptive_rtc_threshold /constant.
split; [rewrite -(leqRW FIX1)| ]; lia.
Qed.
End RTAforFullyNonPreemptiveFPModelwithArrivalCurves.
∀ (L : duration),
busy_window_recurrence_solution L →
∀ (R : duration),
rta_recurrence_solution L R →
task_response_time_bound arr_seq sched tsk R.
Proof.
move⇒ L [BW_POS BW_FIX] R SOL js ARRs TSKs.
have VPR : valid_preemption_model arr_seq sched by exact: valid_fully_nonpreemptive_model ⇒ //.
have [ZERO|POS] := posnP (job_cost js);
first by rewrite /job_response_time_bound /completed_by ZERO.
have READ : work_bearing_readiness arr_seq sched
by exact: sequential_readiness_implies_work_bearing_readiness.
eapply uniprocessor_response_time_bound_restricted_supply_seq with (L := L) ⇒ //.
- exact: instantiated_i_and_w_are_coherent_with_schedule.
- exact: sequential_readiness_implies_sequential_tasks.
- exact: instantiated_interference_and_workload_consistent_with_sequential_tasks.
- apply: busy_intervals_are_bounded_rs_fp ⇒ //.
by apply: instantiated_i_and_w_are_coherent_with_schedule.
- apply: valid_pred_sbf_switch_predicate; last by exact: H_valid_SBF.
move ⇒ ? ? ? ? [? ?]; split ⇒ //.
by apply instantiated_busy_interval_prefix_equivalent_busy_interval_prefix.
- apply: instantiated_task_intra_interference_is_bounded; eauto 1 ⇒ //; first last.
+ by apply athep_workload_le_total_ohep_rbf.
+ apply: service_inversion_is_bounded ⇒ // ⇒ jo t1 t2 ARRo TSKo BUSYo.
unshelve rewrite (leqRW (nonpreemptive_segments_bounded_by_blocking _ _ _ _ _ _ _ _ _)) ⇒ //.
by instantiate (1 := fun _ ⇒ blocking_bound ts tsk).
- move ⇒ A SP; move: (SOL A) ⇒ [].
+ by apply: search_space_sub ⇒ //.
+ move ⇒ F [FIX1 [FIX2 LE]]; ∃ F; split ⇒ //.
rewrite /task_intra_IBF /task_rtct /fully_nonpreemptive_rtc_threshold /constant.
split; [rewrite -(leqRW FIX1)| ]; lia.
Qed.
End RTAforFullyNonPreemptiveFPModelwithArrivalCurves.