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]
(** * Definition of Work Conservation *)(** In this module, we introduce a restrictive definition of work-conserving schedules. The definition is restrictive because it does not yet cover multiprocessor scheduling (there are plans to address this in future work). The definition does however cover effects such as jitter or self-suspensions that affect whether a job can be scheduled at a given point in time because it is based on the general notion of a job being [backlogged] (i.e., ready and not executing), which is parametric in any given job readiness model. *)SectionWorkConserving.(** Consider any type of jobs... *)Context {Job: JobType}.(** ... with arrival times and costs ... *)Context `{JobArrival Job}.Context `{JobCost Job}.(** ... and any kind of processor model. *)Context {PState: ProcessorState Job}.(** Further, allow for any notion of job readiness. *)Context {jr : JobReady Job PState}.(** Given an arrival sequence and a schedule ... *)Variablearr_seq : arrival_sequence Job.Variablesched: schedule PState.(** ... we say that a scheduler is _work-conserving_ iff whenever a job [j] is backlogged, the processor is always busy executing another job [j_other]. Note that this definition is intentionally silent on matters of priority. *)Definitionwork_conserving :=
foralljt,
arrives_in arr_seq j ->
backlogged sched j t ->
existsj_other, scheduled_at sched j_other t.(** Related to this, we define the set of all jobs that are backlogged at a given time [t], i.e., the set of jobs that could be scheduled, and which a work-conserving scheduler must hence consider. *)Definitionjobs_backlogged_at (t : instant): seq Job :=
[seq j <- arrivals_up_to arr_seq t | backlogged sched j t].EndWorkConserving.