Skip to content
Snippets Groups Projects
Commit 98b0e734 authored by Sergey Bozhko's avatar Sergey Bozhko :eyes:
Browse files

Add workload of set of jobs

parent 4efbd031
No related branches found
No related tags found
No related merge requests found
From rt.restructuring.behavior Require Import schedule.
From rt.restructuring.model Require Export workload schedule.priority_based.priorities.
From rt.restructuring.analysis Require Import basic_facts.arrivals.
From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
(** * Lemmas about Workload of Sets of Jobs *)
(** In this file, we establish basic facts about the workload of sets of jobs. *)
Section WorkloadFacts.
(* Consider any type of tasks ... *)
Context {Task : TaskType}.
Context `{TaskCost Task}.
(* ... and any type of jobs associated with these tasks. *)
Context {Job : JobType}.
Context `{JobTask Job Task}.
Context `{JobArrival Job}.
Context `{JobCost Job}.
(* Consider any job arrival sequence. *)
Variable arr_seq : arrival_sequence Job.
(* For simplicity, let's define a local name. *)
Let arrivals_between := arrivals_between arr_seq.
(* We prove that workload can be split into two parts. *)
Lemma workload_of_jobs_cat:
forall t t1 t2 P,
t1 <= t <= t2 ->
workload_of_jobs P (arrivals_between t1 t2) =
workload_of_jobs P (arrivals_between t1 t)
+ workload_of_jobs P (arrivals_between t t2).
Proof.
move => t t1 t2 P /andP [GE LE].
rewrite /workload_of_jobs /arrivals_between.
by rewrite (arrivals_between_cat _ _ t) // big_cat.
Qed.
End WorkloadFacts.
\ No newline at end of file
From rt.restructuring.behavior Require Import schedule.
From rt.restructuring.model Require Import task schedule.priority_based.priorities.
From rt.restructuring.analysis Require Import basic_facts.arrivals.
From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq fintype bigop.
(** * Workload of Sets of Jobs *)
(** In this section, we define the notion of workload for sets of jobs. *)
Section WorkloadOfJobs.
(* Consider any type of tasks ... *)
Context {Task : TaskType}.
Context `{TaskCost Task}.
(* ... and any type of jobs associated with these tasks. *)
Context {Job : JobType}.
Context `{JobTask Job Task}.
Context `{JobArrival Job}.
Context `{JobCost Job}.
(* Consider any job arrival sequence. *)
Variable arr_seq : arrival_sequence Job.
(* First, we define the workload for generic sets of jobs. *)
Section WorkloadOfJobs.
(* Given any predicate over Jobs, ... *)
Variable P : Job -> bool.
(* ... and any (finite) set of jobs. *)
Variable jobs : seq Job.
(* We define the total workload of the jobs that satisfy predicate P. *)
Definition workload_of_jobs := \sum_(j <- jobs | P j) job_cost j.
End WorkloadOfJobs.
(* Next, we define the workload of tasks with higher or
equal priority under FP policies. *)
Section PerTaskPriority.
(* Consider any FP policy that indicates whether a task has
higher or equal priority. *)
Variable higher_eq_priority : FP_policy Task.
(* Let tsk be the task to be analyzed. *)
Variable tsk : Task.
(* Recall the notion of a job of higher or equal priority. *)
Let of_higher_or_equal_priority j :=
higher_eq_priority (job_task j) tsk.
(* Then, we define the workload of all jobs of tasks with
higher-or-equal priority than tsk. *)
Definition workload_of_higher_or_equal_priority_tasks :=
workload_of_jobs of_higher_or_equal_priority.
End PerTaskPriority.
(* Then, we define the workload of jobs with higher or
equal priority under JLFP policies. *)
Section PerJobPriority.
(* Consider any JLFP policy that indicates whether a job has
higher or equal priority. *)
Variable higher_eq_priority : JLFP_policy Job.
(* Let j be the job to be analyzed. *)
Variable j : Job.
(* Recall the notion of a job of higher or equal priority. *)
Let of_higher_or_equal_priority j_hp := higher_eq_priority j_hp j.
(* Then, we define the workload of higher or equal priority of all jobs
with higher-or-equal priority than j. *)
Definition workload_of_higher_or_equal_priority_jobs :=
workload_of_jobs of_higher_or_equal_priority.
End PerJobPriority.
(* We also define workload of a task. *)
Section TaskWorkload.
(* Let tsk be the task to be analyzed. *)
Variable tsk : Task.
(* We define the task workload as the workload of jobs of task tsk. *)
Definition task_workload jobs := workload_of_jobs (job_of_task tsk) jobs.
(* Next, we recall the definition of the task workload in interval [t1, t2). *)
Definition task_workload_between (t1 t2 : instant) :=
task_workload (arrivals_between arr_seq t1 t2).
End TaskWorkload.
End WorkloadOfJobs.
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment