Library prosa.analysis.facts.busy_interval.pi_bound

Bounded Priority Inversion Due to Non-Preemptive Sections

In the following, we relate the maximum cumulative priority inversion with a given blocking bound, assuming that priority version is caused (only) by non-preemptive segments.
Consider any type of tasks ...
  Context {Task : TaskType}.
  Context `{TaskCost Task}.

In addition, we assume that each task has a maximal non-preemptive segment ...
... and any type of preemptable jobs associated with these tasks.
  Context {Job : JobType}.
  Context `{JobTask Job Task}.
  Context `{JobArrival Job}.
  Context `{JobCost Job}.
  Context `{JobPreemptable Job}.

Consider any valid arrival sequence,...
... and any schedule of this arrival sequence.
  Context {PState : ProcessorState Job}.
  Variable sched : schedule PState.

Consider a JLFP policy that indicates a higher-or-equal priority relation, and assume that the relation is reflexive and transitive.
And assume that they define a valid preemption model with bounded nonpreemptive segments.
Further, allow for any work-bearing notion of job readiness.
  Context `{!JobReady Job PState}.
  Hypothesis H_job_ready : work_bearing_readiness arr_seq sched.

We assume that the schedule is valid.
Next, we assume that the schedule is a work-conserving schedule...
...,it respects the scheduling policy at every preemption point,...
... and complies with the preemption model.
Now, we consider an arbitrary task set ts...
  Variable ts : seq Task.

... and assume that all jobs stem from tasks in this task set.
Let tsk be any task in ts that is to be analyzed.
  Variable tsk : Task.
  Hypothesis H_tsk_in_ts : tsk \in ts.

Let blocking_bound be a bound on the priority inversion caused by jobs with lower priority.
The following argument assumes an ideal uniprocessor.
We show that, if the maximum length of a priority inversion of a given job j is bounded by the blocking bound,...
... then the priority inversion incurred by any job is bounded by the blocking bound.