Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
PROSA - Formally Proven Schedulability Analysis
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
RT-PROOFS
PROSA - Formally Proven Schedulability Analysis
Commits
30349d2d
Commit
30349d2d
authored
11 months ago
by
Sergey Bozhko
Browse files
Options
Downloads
Patches
Plain Diff
prove that job causing service inversion is unique
parent
a50610a2
No related branches found
Branches containing commit
No related tags found
Tags containing commit
1 merge request
!363
Prove RTA for RS-FP-EDF and RS-NP-EDF
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
analysis/facts/busy_interval/service_inversion.v
+74
-0
74 additions, 0 deletions
analysis/facts/busy_interval/service_inversion.v
with
74 additions
and
0 deletions
analysis/facts/busy_interval/service_inversion.v
+
74
−
0
View file @
30349d2d
...
...
@@ -255,6 +255,80 @@ Section ServiceInversionIsBounded.
(** Next, we assume that the schedule respects the scheduling policy. *)
Hypothesis
H_respects_policy
:
respects_JLFP_policy_at_preemption_point
arr_seq
sched
JLFP
.
(** In the following section, we prove that cumulative service
inversion in a busy-interval prefix is necessarily caused by one
lower-priority job. *)
Section
CumulativeServiceInversionFromOneJob
.
(** Consider any job [j] with a positive job cost. *)
Variable
j
:
Job
.
Hypothesis
H_j_arrives
:
arrives_in
arr_seq
j
.
Hypothesis
H_job_cost_positive
:
job_cost_positive
j
.
(** Let <[t1, t2)>> be a busy-interval prefix. *)
Variable
t1
t2
:
instant
.
Hypothesis
H_busy_prefix
:
busy_interval_prefix
arr_seq
sched
j
t1
t2
.
(** Consider a time instant [t : t <= t2] such that ... *)
Variable
t
:
instant
.
Hypothesis
H_t_le_t2
:
t
<=
t2
.
(** ... the cumulative service inversion is positive in <<[t1, t)>>. *)
Hypothesis
H_service_inversion_positive
:
0
<
cumulative_service_inversion
arr_seq
sched
j
t1
t
.
(** First, note that there is a lower-priority job that receives
service at some time during the time interval <<[t1, t)>>. *)
Local
Lemma
lower_priority_job_receives_service
:
exists
(
jlp
:
Job
)
(
to
:
instant
),
t1
<=
to
<
t
/\
~~
hep_job
jlp
j
/\
receives_service_at
sched
jlp
to
.
Proof
.
move
:
H_service_inversion_positive
;
rewrite
sum_nat_gt0
filter_predT
=>
/
hasP
[
t'
IN
POS
]
.
rewrite
mem_index_iota
in
IN
;
rewrite
lt0b
in
POS
.
move
:
POS
=>
/
andP
[
NIN
/
hasP
[
jlp
INlp
LP
]]
.
exists
jlp
,
t'
.
by
rewrite
IN
LP
.
Qed
.
(** Then we prove that the service inversion incurred by job [j]
can only be caused by _one_ lower priority job. *)
Lemma
cumulative_service_inversion_from_one_job
:
exists
(
jlp
:
Job
),
job_arrival
jlp
<
t1
/\
~~
hep_job
jlp
j
/\
cumulative_service_inversion
arr_seq
sched
j
t1
t
=
service_during
sched
jlp
t1
t
.
Proof
.
have
[
jlp
[
to
[
NEQ
[
LP
SERV
]]]]
:=
lower_priority_job_receives_service
.
exists
jlp
;
split
;
last
split
=>
//.
-
apply
:
low_priority_job_arrives_before_busy_interval_prefix
=>
//=.
+
by
instantiate
(
1
:=
to
);
lia
.
+
by
apply
service_at_implies_scheduled_at
.
-
apply
:
eq_sum_seq
=>
t'
;
rewrite
mem_index_iota
=>
NEQt'
_
.
have
[
ZERO
|
POS
]
:=
unit_supply_proc_service_case
H_unit_supply_proc_model
sched
jlp
t'
.
+
rewrite
ZERO
eqb0
;
apply
/
negP
=>
/
andP
[_
/
hasP
[
joo
SERVoo
LPoo
]]
.
have
EQ
:
jlp
=
joo
.
{
apply
:
only_one_pi_job
=>
//=.
*
by
instantiate
(
1
:=
to
);
lia
.
*
by
apply
service_at_implies_scheduled_at
.
*
by
instantiate
(
1
:=
t'
);
lia
.
*
apply
:
service_at_implies_scheduled_at
.
by
apply
:
served_at_and_receives_service_consistent
.
}
subst
joo
.
apply
served_at_and_receives_service_consistent
in
SERVoo
.
by
move
:
SERVoo
;
rewrite
/
receives_service_at
ZERO
.
+
rewrite
POS
eqb1
;
apply
/
andP
;
split
.
*
apply
/
negP
=>
IN
;
apply
served_at_and_receives_service_consistent
in
IN
.
have
EQ
:
j
=
jlp
by
apply
:
only_one_job_receives_service_at_uni
=>
//
;
rewrite
/
receives_service_at
.
by
subst
jlp
;
move
:
LP
=>
/
negP
LP
;
apply
:
LP
;
apply
H_priority_is_reflexive
.
*
apply
/
hasP
;
exists
jlp
;
last
by
apply
:
LP
.
apply
receives_service_and_served_at_consistent
=>
//.
by
rewrite
/
receives_service_at
POS
.
Qed
.
End
CumulativeServiceInversionFromOneJob
.
(** In this section, we prove that, given a job [j] with a busy
interval prefix <<[t1, t2)>> and a lower-priority job [jlp], the
service of [jlp] within the busy interval prefix is bounded by
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment