Presentation is loading. Please wait.

Presentation is loading. Please wait.

On the Relationship Between Concurrent Separation Logic and Assume-Guarantee Reasoning Xinyu Feng Yale University Joint work with Rodrigo Ferreira and.

Similar presentations


Presentation on theme: "On the Relationship Between Concurrent Separation Logic and Assume-Guarantee Reasoning Xinyu Feng Yale University Joint work with Rodrigo Ferreira and."— Presentation transcript:

1 On the Relationship Between Concurrent Separation Logic and Assume-Guarantee Reasoning Xinyu Feng Yale University Joint work with Rodrigo Ferreira and Zhong Shao

2 Motivation Concurrency verification is challenging! T1 T2 Exponential state space caused by interleaving of execution. Memory aliasing makes it harder to ensure non-interference. Modularity is the key!

3 Two kinds of modularity Control modularity –a.k.a. thread-modularity –each thread is verified independently of others Data modularity –a.k.a. information hiding –each thread only cares about data it uses

4 Existing work Assume-Guarantee (A-G) reasoning [Misra&Chandy’81, Jones’83] thread modularity general: no restriction over synchronization pattern  spec of A&G requires global data invariants Concurrent Separation Logic (CSL) [O’Hearn, Brookes 2004] thread modularity data modularity: local reasoning  restrictive synchronization pattern  shared resources can be accessed only inside critical regions

5 Our Contributions SAGL: combining CSL and A-G reasoning –extend A-G logic with local reasoning better data modularity (than A-G reasoning) thread modularity no restriction over synchronization pattern A formal study of the relationship between CSL and A-G reasoning

6 Outline of this talk Background –Concurrent Separation Logic –Assume-Guarantee reasoning SAGL: combination of CSL & A-G reasoning Interpretation of CSL in SAGL

7 Concurrent Separation Logic Assertions capture ownerships of resources Cannot access resource without ownership Shared resources are protected by critical regions (CRs) Transfer of ownership at boundary of CR l  n

8 CSL assertions l  n n l p  qp  q pq emp empty heap p  qp  q p  q

9 Locks and Critical Regions Lock-based critical regions (CR): l.acq(); … l.rel() Invariants about memory protected by locks:  = {l 1  r 1, …, l n  r n } r 1  rn rn l1l1 lnln

10 p1p1 (l2)(l2) p2p2 (l1)(l1) p1p1 (l2)(l2) (l1)  p2(l1)  p2 Concurrent Separation Logic p1p1 (l2)(l2) p2p2 (l1)(l1) l 1.acq() l 1.rel() … p1p1 (l2)(l2) (l1)  p2(l1)  p2

11 Example: List x …  = { l  List(x) } getNode(): l.acq(); … l.rel(); -{emp} -{emp * List(x)}; -{Node(y) * List(x)} -{Node(y)} x … y

12 Concurrent Separation Logic Thread modularity Data modularity by local reasoning –do not need knowledge of other threads’ data  Ownership transfer is bound with CRs –requires built-in critical regions –hard to support ad-hoc synchronizations  ┝ {p} C {q}

13 Outline of this talk Background –Concurrent Separation Logic –Assume-Guarantee reasoning SAGL: combination of CSL & A-G reasoning Interpretation of CSL in SAGL

14 Assume-Guarantee Reasoning Thread T and its environment –Environment: the collection of all other threads except T A: assumption about environment’s transition G: guarantee to the environment a: precondition

15 Assume-Guarantee Reasoning To certify each thread:  S, S'. a S  A S S'  a S' Non-Interference of threads: G 1  …  G i-1  G i+1  …  G n  A i G i  A 1  …  A i-1  A i+1  …  A n preservation of precondition: G S Next c (S) transitions satisfy the guarantee:

16 A-G reasoning a1a2a1a2 a 1  a 2 a1a2a1a2 G2G2 A1A1 A2A2 G1G1 a2a2 a2a2 a1a1 a1a1

17 A-G reasoning Thread modular –separate verification of threads Not require CRs –but need to know smallest granularity of transitions  A, G: global invariants about all resources –hard to define –lack data modularity  Need to check A and G at every step (A,G) ┝ {a} C {a’}

18 Example: data modularity broken … [100] := m; … [101] := n; … 100101 G 1 : [101] = [101]' A 1 : [100] = [100]' G 2 : [100] = [100]' A 2 : [101] = [101]'

19 Outline of this talk Background –Concurrent Separation Logic –Assume-Guarantee reasoning SAGL: combination of CSL & A-G reasoning Interpretation of CSL in SAGL

20 SAGL: Separated A-G Logic Partition of each thread’s resource –shared and private –shared can be accessed at any time governed by A and G –exclusive access to private resources follows local reasoning in CSL not specified in A and G better memory modularity Dynamic change of partition –may occur at any point, not tied with CR boundaries

21 SAGL: Specification of Threads A, G: assumption and guarantee a: precondition about shared resources p: precondition about private resources Spec for T i : (( a i, p i ), A i, G i )

22 p1p1 a1a2a1a2 p2'p2' p1p1 a1a2a1a2 p2p2 SAGL – Access Private Resource

23 Example: regained data modularity … [100] := m; … [101] := n; … 100101 -{(emp, 100  _) } -{(emp, 101  _)} G 1 : emp A 1 : emp G 2 : emp A 2 : emp

24 p1p1 a1a2'a1a2' p2p2 p1p1 a1a2a1a2 p2p2 SAGL – Access Shared Resource A1A1 G2G2 a1a1 a1a1 A-G reasoning: a special case where p 1 and p 2 are emp.

25 p1p1 a 1  a 2  p 2  p1p1 a1a2a1a2 p2p2 p1p1 a1a2'a1a2' p2p2 SAGL - Redistribution A1A1 G2G2 A1A1 G2G2

26 SAGL Thread modular –separate verification of threads Not require CRs –but need to know smallest granularity of transitions A, G: only specifies shared resources –better modularity Need to check A and G at every step –but the check is trivial if only private resource is used (A,G) ┝ {(a,p)} C {(a’,p’)}

27 Outline of this talk Background –Concurrent Separation Logic –Assume-Guarantee reasoning SAGL: combination of CSL & A-G reasoning Interpretation of CSL in SAGL

28 p1p1 (l2)(l2) p2p2 (l1)(l1) p1p1 (l2)(l2) (l1)  p2(l1)  p2 Concurrent Separation Logic p1p1 (l2)(l2) p2p2 (l1)(l1) l 1.acq() l 1.rel() … p1p1 (l2)(l2) (l1)  p2(l1)  p2

29 Implicit Invariants in CSL Shared resources are well-formed outside of critical regions. Invariants of shared resources: a   Inv( l 1 )  …  Inv( l n ) At each program point: (p 1  …  p n )  a  S Inv( l i )  ( free (l i )   (l i ))  (  free (l i )  emp )

30 p1p1 a1a2a1a2 p2p2 Specialization of SAGL At each program point in SAGL: (p 1  …  p n )  (a 1  …  a n ) Specialize a i into a  (p 1  …  p n )  (a   …  a  ) Specialize A and G to enforce a  at every step A  S S'  a  S  a  S' G  S S'  a  S  a  S'  (p 1  …  p n )  a 

31 Interpretation of CSL in SAGL If  ┝ CSL {p} C {q}, then (A ,G  ) ┝ SAGL {(a ,p)} C {(a ,q)} Also a new way to prove the soundness of CSL! The soundness of SAGL is proved following the syntactic approach (by proving progress & preservation). Proofs have been formalized in Coq.

32 getNode(): l.acq(); … l.rel(); -{(a , emp)} Example: List  = { l  List(x) } -{(emp, emp * List(x))}; -{(emp, Node(y) * List(x))} -{(List(x), Node(y))} a  = free( l )  List(x)   free( l )  emp x … x … y  a a  a a  a a

33 Conclusion SAGL –combination of local reasoning with A-G reasoning –improved modularity than A-G reasoning –more flexible than CSL Embedding of CSL in SAGL –formalization of invariants: shared resources are well-formed outside of CRs –a new way to prove the soundness of CSL

34 Thank you!

35 Example: GCD while(x <> y){ if (x > y) x = x – y; } while(x <> y){ if (y > x) y = y – x; } initially: x =  ; y =  ; result: x = GCD( ,  ); y = GCD( ,  ); G 1 : (y = y')  (x  y  x = x')  (GCD(x, y) = GCD(x', y')) A 1 : (x = x')  (y  x  y = y')  (GCD(x, y) = GCD(x', y')) G 2 = A 1 ; A 2 = G 1

36 Example: GCD while(x <> y){ if (x > y) x = x – y; } while(x <> y){ if (y > x) y = y – x; } initially: x =  ; y =  ; result: x = GCD( ,  ); y = GCD( ,  ); Hard to certify using CSL without rewriting the program and adding auxiliary variables.

37 Problem with CSL Needs to rewrite code using CRs –then needs to prove semantic preservation CSL is a program logic –what if the language does not support CRs? only use “ cas ” to do synchronization

38 Example: malloc x = alloc(1); [x] = 2; if ( odd([x]) ){ //should never reach here } y = alloc(1); [y] = 3; if ( even([y]) ){ //should never reach here } G 1 : ??? A 1 : ??? G 2 : ??? A 1 : ??? { emp }  { x  _ } { y  _ } 

39 Example: malloc x = alloc(1); [x] = 2; if ( odd([x]) ){ //should never reach here } y = alloc(1); [y] = 3; if ( even([y]) ){ //should never reach here } G 1 : emp A 1 : emp G 2 : emp A 1 : emp -{ (emp, emp) } -{ (emp, emp } -{ (emp, x  _) } -{ (emp, y  _) }

40 Soundness of SAGL Safety: progress & preservation Partial correctness: –assertions assigned to program points hold when we reach these points


Download ppt "On the Relationship Between Concurrent Separation Logic and Assume-Guarantee Reasoning Xinyu Feng Yale University Joint work with Rodrigo Ferreira and."

Similar presentations


Ads by Google