Built with Alectryon, running Coq+SerAPI v8.20.0+0.20.0. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file ssrmatching_plugin.cmxs (using legacy method) ... done]
[Loading ML file ssreflect_plugin.cmxs (using legacy method) ... done]
[Loading ML file ring_plugin.cmxs (using legacy method) ... done]
Serlib plugin: coq-elpi.elpi is not available: serlib support is missing.
Incremental checking for commands in this plugin will be impacted.
[Loading ML file coq-elpi.elpi ... done]
[Loading ML file zify_plugin.cmxs (using legacy method) ... done]
[Loading ML file micromega_core_plugin.cmxs (using legacy method) ... done]
[Loading ML file micromega_plugin.cmxs (using legacy method) ... done]
[Loading ML file btauto_plugin.cmxs (using legacy method) ... done]
Notation"_ + _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ - _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ <= _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ < _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ >= _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ > _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ <= _ <= _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ < _ <= _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ <= _ < _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ < _ < _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ * _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Require Export prosa.model.aggregate.workload.(** * Interference and Interfering Workload *)(** In the following, we introduce definitions of interference, interfering workload and a function that bounds cumulative interference. *)SectionDefinitions.(** Consider any type of tasks ... *)Context {Task : TaskType}.(** ... and any type of jobs associated with these tasks. *)Context {Job : JobType} {jt : JobTask Job Task} {jc : JobCost Job}.(** Consider any kind of processor state model. *)Context {PState : ProcessorState Job}.(** Consider any arrival sequence ... *)Variablearr_seq : arrival_sequence Job.(** ... and any schedule. *)Variablesched : schedule PState.(** Definitions of interference for FP policies. *)SectionFPDefinitions.Context {FP : FP_policy Task}.(** We first define interference from higher-priority tasks. *)Definitionhp_task_interference (j : Job) (t : instant) :=
has (funjhp => hp_task (job_task jhp) (job_task j)
&& receives_service_at sched jhp t)
(arrivals_up_to arr_seq t).Context {JLFP : JLFP_policy Job}.(** Then, to define interference from equal-priority tasks, we first define higher-or-equal-priority jobs from an equal-priority task... *)Definitionep_task_hep_jobj1j2 :=
hep_job j1 j2 && ep_task (job_task j1) (job_task j2).(** ... and higher-or-equal-priority-jobs of equal-priority tasks that do not stem from the same task. *)Definitionother_ep_task_hep_jobj1j2 :=
ep_task_hep_job j1 j2 && (job_task j1 != job_task j2).(** This enables us to define interference from equal-priority tasks. *)Definitionhep_job_from_other_ep_task_interference (j : Job) (t : instant) :=
has (other_ep_task_hep_job^~ j) (served_jobs_at arr_seq sched t).(** Similarly, to define interference from strictly higher-priority tasks, we first define higher-or-equal-priority jobs from a strictly higher-priority task, which... *)Definitionhp_task_hep_job :=
funj1j2 => hep_job j1 j2 && (hp_task (job_task j1) (job_task j2)).(** ... enables us to define interference from strictly higher-priority tasks. *)Definitionhep_job_from_hp_task_interference (j : Job) (t : instant) :=
has (hp_task_hep_job^~ j) (served_jobs_at arr_seq sched t).(** Using the above definitions, we define the cumulative interference incurred in the interval <<[t1, t2)>> from (1) higher-or-equal-priority jobs from strictly higher-priority tasks... *)Definitioncumulative_interference_from_hep_jobs_from_hp_tasks (j : Job) (t1t2 : instant) :=
\sum_(t1 <= t < t2) hep_job_from_hp_task_interference j t.(** ... and (2) higher-or-equal-priority jobs from equal-priority tasks. *)Definitioncumulative_interference_from_hep_jobs_from_other_ep_tasks (j : Job) (t1t2 : instant) :=
\sum_(t1 <= t < t2) hep_job_from_other_ep_task_interference j t.EndFPDefinitions.(** Definitions of interference for JLFP policies. *)SectionJLFPDefinitions.(** Consider a JLFP-policy that indicates a higher-or-equal priority relation. *)Context {JLFP : JLFP_policy Job}.(** We say that job [j] is incurring interference from another job with higher-or-equal priority at time [t] if there exists a job [jhp] (different from [j]) with a higher-or-equal priority that executes at time [t]. *)Definitionanother_hep_job_interference (j : Job) (t : instant) :=
has (another_hep_job^~ j) (served_jobs_at arr_seq sched t).(** Similarly, we say that job [j] is incurring interference from a job with higher-or-equal priority of another task at time [t] if there exists a job [jhp] (of a different task) with higher-or-equal priority that executes at time [t]. *)Definitionanother_task_hep_job_interference (j : Job) (t : instant) :=
has (another_task_hep_job^~ j) (served_jobs_at arr_seq sched t).(** Similarly, we say that job [j] is incurring interference from a job with higher-or-equal priority of the same task at time [t] if there exists another job [jhp] (of the same task) with higher-or-equal priority that executes at time [t]. *)Definitionanother_hep_job_of_same_task_interference (j : Job) (t : instant) :=
has (funjhp => another_hep_job_of_same_task jhp j
&& receives_service_at sched jhp t)
(arrivals_up_to arr_seq t).(** Now, we define the notion of cumulative interfering workload, called [other_hep_jobs_interfering_workload], that says how many units of workload are generated by jobs with higher-or-equal priority released at time [t]. *)Definitionother_hep_jobs_interfering_workload (j : Job) (t : instant) :=
\sum_(jhp <- arrivals_at arr_seq t | another_hep_job jhp j) job_cost jhp.(** For each of the concepts defined above, we introduce a corresponding cumulative function: *)(** (a) cumulative interference from other jobs with higher-or-equal priority ... *)Definitioncumulative_another_hep_job_interference (j : Job) (t1t2 : instant) :=
\sum_(t1 <= t < t2) another_hep_job_interference j t.(** ... (b) and cumulative interference from jobs with higher or equal priority from other tasks, ... *)Definitioncumulative_another_task_hep_job_interference (j : Job) (t1t2 : instant) :=
\sum_(t1 <= t < t2) another_task_hep_job_interference j t.(** ... and (c) cumulative workload from jobs with higher or equal priority. *)Definitioncumulative_other_hep_jobs_interfering_workload (j : Job) (t1t2 : instant) :=
\sum_(t1 <= t < t2) other_hep_jobs_interfering_workload j t.EndJLFPDefinitions.EndDefinitions.