From 82956f1150a25c826d278d3e23bbeda0425a6be2 Mon Sep 17 00:00:00 2001
From: Felipe <flisboa@telecom-paris.fr>
Date: Tue, 23 Feb 2021 14:08:57 +0100
Subject: [PATCH] TLA+ : Model works, but income of requests is too heavy, have
 to model the system to be less charged

---
 TLAplus/TDMv3/TDMv3.tla | 31 ++++++++++++++++++++-----------
 1 file changed, 20 insertions(+), 11 deletions(-)

diff --git a/TLAplus/TDMv3/TDMv3.tla b/TLAplus/TDMv3/TDMv3.tla
index f1efbcd..df73f0f 100644
--- a/TLAplus/TDMv3/TDMv3.tla
+++ b/TLAplus/TDMv3/TDMv3.tla
@@ -76,7 +76,14 @@ TypeOK ==
 Init ==
     /\ time = 0
     /\ control = "IDLE"
-    /\ req_under_treatment = "NONE"
+    /\ req_under_treatment = [type |-> "NONE",
+                              deadline |-> 0,
+                              target |-> "NONE",
+                              number |-> 0,
+                              owner |-> 0,
+                              issue_date |-> 0,
+                              delayed_issue_date |-> 0,
+                              hit_miss |-> "NONE"]
     /\ queue = <<>>
     /\ request_count = [r \in Requestors |-> 0]
     /\ slot_count = 1
@@ -133,7 +140,7 @@ IN /\ control = "TREATMENT"
                          THEN time + t_RTP - (t_RL + t_BURST)
                          ELSE time
    /\ bank_state' = [bank_state EXCEPT ![bank] = "NOP"]
-   /\ req_under_treatment' = "NONE"
+   /\ req_under_treatment' = [req_under_treatment EXCEPT !.owner = "NONE"]
    /\ UNCHANGED<<queue,request_count,
                  slot_count,slot_owner,row_buffer,slack>>
    
@@ -160,9 +167,8 @@ IN  /\ control = "TREATMENT"
 \* Slacks are already considered in the delayed issue date, so, among all requests
 \* in the queue, we choose from EDF.
 treat_request ==
-LET deadlines == SelectSeq(queue, LAMBDA elem: elem.deadline)
-    set_deadlines == ToSet(deadlines)
-    min_deadline == Min(set_deadlines)
+LET deadlines == {queue[n].deadline : n \in 1..Len(queue)}
+    min_deadline == Min(deadlines)
     selected_req == SelectSeq(queue, LAMBDA elem: elem.deadline = min_deadline)[1]
     StartTreatment == /\ queue' = Remove(queue,selected_req)
                       /\ req_under_treatment' = selected_req
@@ -170,7 +176,7 @@ LET deadlines == SelectSeq(queue, LAMBDA elem: elem.deadline)
     ResumeTreatment == UNCHANGED<<queue,req_under_treatment,bank_state>>
 IN  /\ (control = "ARRIVAL") \/ (control = "COMPLETE" \/ queue /= <<>>) 
     /\ control' = "TREATMENT"
-    /\ IF req_under_treatment = "NONE" 
+    /\ IF req_under_treatment.type = "NONE" 
           THEN StartTreatment
           ELSE ResumeTreatment
     /\ UNCHANGED<<time,request_count,slot_count,slot_owner,row_buffer,slack>>
@@ -187,7 +193,9 @@ LET so_did == IF slack[req] >= (slot_count*TDM_Slot - time)
                 ELSE slot_owner
     dist == IF (time = TDM_Slot*(slot_count - 1)) /\ (req = slot_owner)
                 THEN 0
-                ELSE NumberOfSlots - so_did + req
+                ELSE IF req = so_did 
+                     THEN NumberOfSlots 
+                     ELSE IF req - so_did >= 0 THEN req - so_did ELSE so_did - req
     calc_deadline == IF req \in CrRq 
                         THEN TDM_Slot*(slot_count + dist)
                         ELSE TDM_Slot*(slot_count + 1)
@@ -199,9 +207,9 @@ LET so_did == IF slack[req] >= (slot_count*TDM_Slot - time)
                          deadline |-> calc_deadline,
                          type |-> ty,
                          hit_miss |-> hm]
-    
 IN /\ time - request_count[req]*arrival_rate >= 0
-   /\ control \in {"IDLE","COMPLETED"}
+   \*/\ control \in {"IDLE","COMPLETED"}
+   /\ control /= "ARRIVAL"
    /\ control' = "ARRIVAL"
    /\ request_count' = [request_count EXCEPT ![req] = request_count[req] + 1]
    /\ queue' = Append(queue,request_instance) 
@@ -224,6 +232,7 @@ Next ==
 (* Fairness and Temporal Formula                                           *)
 (***************************************************************************)
 L == /\ WF_vars(request_arrival(1,"RD","HIT",5))
+     /\ WF_vars(request_arrival(2,"WR","MISS",10))
      /\ WF_vars(treat_request)
      /\ \A b \in AllBanks : /\ SF_vars(IssueACT(b))
                             /\ SF_vars(IssueRD(b))
@@ -231,7 +240,7 @@ L == /\ WF_vars(request_arrival(1,"RD","HIT",5))
                             /\ SF_vars(UsingBus(b))
                             /\ SF_vars(IssuePRE(b))
 
-Spec == Init /\ [][Next]_vars /\ SF_vars(Next)
+Spec == Init /\ [][Next]_vars /\ L
 -----------------------------------------------------------------------------
 (***************************************************************************)
 (* Invariants                                                              *)
@@ -239,5 +248,5 @@ Spec == Init /\ [][Next]_vars /\ SF_vars(Next)
 FullQueue == Len(queue) =< Queue_Capacity
 =============================================================================
 \* Modification History
-\* Last modified Tue Feb 23 12:23:35 CET 2021 by felipe
+\* Last modified Tue Feb 23 13:59:40 CET 2021 by felipe
 \* Created Fri Feb 19 10:11:16 CET 2021 by felipe
-- 
GitLab