Require Import rt.util.all.
Require Import rt.model.arrival.basic.arrival_sequence.
From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq bigop.
Module Suspension.
Import ArrivalSequence.
(* First, we define the actual job suspension times. *)
Section SuspensionTimes.
(* Consider any type of job. *)
Variable Job: eqType.
(* We define job suspension as a function that takes a job in the arrival
sequence and its current service and returns how long the job must
suspend next. *)
Definition job_suspension := Job -> (* job *)
time -> (* current service *)
duration. (* duration of next suspension *)
End SuspensionTimes.
(* Next, we define the total suspension time incurred by a job. *)
Section TotalSuspensionTime.
Context {Job: eqType}.
Variable job_cost: Job -> time.
(* Consider any job suspension function. *)
Variable next_suspension: job_suspension Job.
(* Let j be any job. *)
Variable j: Job.
(* We define the total suspension time incurred by job j as the cumulative
duration of each suspension point t in the interval [0, job_cost j). *)
Definition total_suspension :=
\sum_(0 <= t < job_cost j) (next_suspension j t).
End TotalSuspensionTime.
(* In this section, we define the dynamic self-suspension model as an
upper bound on the total suspension times. *)
Section DynamicSuspensions.
Context {Task: eqType}.
Context {Job: eqType}.
Variable job_cost: Job -> time.
Variable job_task: Job -> Task.
(* Consider any job arrival sequence subject to job suspensions. *)
Variable next_suspension: job_suspension Job.
(* Recall the definition of total suspension time. *)
Let total_job_suspension := total_suspension job_cost next_suspension.
(* Next, assume that for each task a suspension bound is known. *)
Variable suspension_bound: Task -> duration.
(* Then, we say that the arrival sequence satisfies the dynamic
suspension model iff the total suspension time of each job is no
larger than the suspension bound of its task. *)
Definition dynamic_suspension_model :=
forall j, total_job_suspension j <= suspension_bound (job_task j).
End DynamicSuspensions.
End Suspension.