Skip to main content

Reasoning About Weak Semantics via Strong Semantics

  • Chapter
  • First Online:
Principled Software Development
  • 494 Accesses

Abstract

Verification has to reason about the actual semantics of a program. The actual semantics not only depends on the source code but also on the environment: the target machine, the runtime system, and in the case of libraries the number of clients. So verification has to consider weak memory models, manual memory management, and arbitrarily many clients. Interestingly, most programs are insensitive to the environment. Programs are often well-behaved in that they appear to be executed under sequentially-consistent memory, garbage collection, and with few clients—although they are not. There is a correspondence between the actual semantics and an idealized much simpler variant. This suggests to carry out the verification in two steps. Check that the program is well-behaved. If so, perform the verification on the idealized semantics. Otherwise, report that the code is sensitive to the environment.

Arnd is one of the few researchers who is able to switch with ease between the practice of writing code and the theory of defining programming interfaces. Discussions with him had substantial influence on the above verification approach, which we started to develop in Kaiserslautern, two offices next to his. In this paper, we give a unified presentation of our findings.

Happy Birthday, Arnd!

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

eBook
USD 16.99
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 109.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info
Hardcover Book
USD 109.99
Price excludes VAT (USA)
  • Durable hardcover edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  1. Parosh Aziz Abdulla, Bengt Jonsson, and Cong Quy Trinh. “Automated Verification of Linearization Policies”. In: SAS Vol. 9837. LNCS. Springer, 2016, pp. 61–83.

    Google Scholar 

  2. Parosh Aziz Abdulla et al. “An Integrated Specification and Verification Technique for Highly Concurrent Data Structures”. In: TACAS Vol. 7795. LNCS. Springer, 2013, pp. 324–338.

    Google Scholar 

  3. Sarita V. Adve and Mark D. Hill. “A Unified Formalization of Four Shared-Memory Models”. In: IEEE Trans. Parallel Distrib Syst. 4.6 (1993), pp. 613–624.

    Google Scholar 

  4. Jade Alglave. “A shared memory poetics”. PhD thesis. Université Paris 7, 2010.

    Google Scholar 

  5. Ahmed Bouajjani, Egor Derevenetc, and Roland Meyer. “Checking and Enforcing Robustness against TSO”. In: ESOP Vol. 7792. LNCS. Springer, 2013, pp. 533–553.

    Google Scholar 

  6. Ahmed Bouajjani, Egor Derevenetc, and Roland Meyer. “Checking Robustness against TSO”. In: CoRR abs/1208.6152 (2012).

    Google Scholar 

  7. Ahmed Bouajjani, Roland Meyer, and Eike Möhlmann. “Deciding Robustness against Total Store Ordering”. In: ICALP (2). Vol. 6756. LNCS. Springer, 2011, pp. 428–440.

    Google Scholar 

  8. Ahmed Bouajjani et al. “Lazy TSO Reachability”. In: FASE Vol. 9033. LNCS. Springer, 2015, pp. 267–282.

    Google Scholar 

  9. Sebastian Burckhardt and Madanlal Musuvathi. “Effective Program Verification for Relaxed Memory Models”. In: CAV Vol. 5123. LNCS. Springer, 2008, pp. 107–120.

    Google Scholar 

  10. Edmund M. Clarke. “The Birth of Model Checking”. In: 25 Years of Model Checking. Vol. 5000. LNCS. Springer, 2008, pp. 1–26.

    Google Scholar 

  11. Patrick Cousot and Radhia Cousot. “Abstract Interpretation: A Unified Lattice Model for Static Analysis of Programs by Construction or Approximation of Fixpoints”. In: POPL ACM, 1977, pp. 238–252.

    Google Scholar 

  12. Patrick Cousot and Radhia Cousot. “Systematic Design of Program Analysis Frameworks”. In: POPL ACM Press, 1979, pp. 269–282.

    Google Scholar 

  13. Edsger W. Dijkstra. “Cooperating Sequential Processes”. In: The Origin of Concurrent Programming: From Semaphores to Remote Procedure Calls. Ed. by Per Brinch Hansen. Springer New York, 2002, pp. 65–138.

    Google Scholar 

  14. Simon Doherty et al. “Formal Verification of a Practical Lock-Free Queue Algorithm”. In: FORTE. Vol. 3235. LNCS. Springer, 2004, pp. 97–114.

    Google Scholar 

  15. Tayfun Elmas, Shaz Qadeer, and Serdar Tasiran. “A calculus of atomic actions”. In: POPL ACM, 2009, pp. 2–15.

    Google Scholar 

  16. Tayfun Elmas et al. “Simplifying Linearizability Proofs with Reduction and Abstraction”. In: TACAS Vol. 6015. LNCS. Springer, 2010, pp. 296–311.

    Google Scholar 

  17. Timothy L. Harris. “A Pragmatic Implementation of Non-blocking Linked-Lists”. In: DISC Vol. 2180. LNCS. Springer, 2001, pp. 300–314.

    Google Scholar 

  18. Frédéric Haziza et al. “Pointer Race Freedom”. In: CoRR abs/1511.00184 (2015).

    Google Scholar 

  19. Frédéric Haziza et al. “Pointer Race Freedom”. In: VMCAI Vol. 9583. LNCS. Springer, 2016, pp. 393–412.

    Google Scholar 

  20. Maurice Herlihy and Nir Shavit. The art of multiprocessor programming. Morgan Kaufmann, 2008.

    Google Scholar 

  21. Lukás Holıik et al. “Effect Summaries for Thread-Modular Analysis”. In: CoRR abs/1705.03701 (2017).

    Google Scholar 

  22. Lukás Holıik et al. “Effect Summaries for Thread-Modular Analysis Sound Analysis Despite an Unsound Heuristic”. In: SAS Vol. 10422. LNCS. Springer, 2017, pp. 169–191.

    Google Scholar 

  23. Thuan Quang Huynh and Abhik Roychoudhury. “A Memory Model Sensitive Checker for C#”. In: FM Vol. 4085. LNCS. Springer, 2006, pp. 476–491.

    Google Scholar 

  24. Bengt Jonsson. “Using refinement calculus techniques to prove linearizability”. In: Formal Asp. Comput. 24.4-6 (2012), pp. 537–554.

    Google Scholar 

  25. Leslie Lamport. “A Fast Mutual Exclusion Algorithm”. In: ACM Trans. Comput. Syst. 5.1 (1987), pp. 1–11.

    Article  Google Scholar 

  26. Leslie Lamport. “How to Make a Multiprocessor Computer That Correctly Executes Multi- process Programs”. In: IEEE Trans. Computers 28.9 (1979), pp. 690–691.

    Google Scholar 

  27. Maged M. Michael. “High performance dynamic lock-free hash tables and list-based sets”. In: SPAA 2002, pp. 73–82.

    Google Scholar 

  28. Maged M. Michael and Michael L. Scott. “Nonblocking Algorithms and Preemption-Safe Locking on Multiprogrammed Shared Memory Multiprocessors”. In: J. Parallel Distrib Comput. 51.1 (1998), pp. 1–26.

    Google Scholar 

  29. Maged M. Michael and Michael L. Scott. “Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms”. In: PODC ACM, 1996, pp. 267–275.

    Google Scholar 

  30. Seungjoon Park and David L. Dill. “An Executable Specification, Analyzer and Verifier for RMO (Relaxed Memory Order)”. In: SPAA. 1995, pp. 34–41.

    Google Scholar 

  31. Gary L. Peterson. “Myths About the Mutual Exclusion Problem”. In: Inf Process. Lett. 12.3 (1981), pp. 115–116.

    Google Scholar 

  32. Pedro da Rocha Pinto, Thomas Dinsdale-Young, and Philippa Gardner. “TaDA: A Logic for Time and Data Abstraction”. In: ECOOP Vol. 8586. LNCS. Springer, 2014, pp. 207–231.

    Google Scholar 

  33. Gerhard Schellhorn, John Derrick, and Heike Wehrheim. “A Sound and Complete Proof Technique for Linearizability of Concurrent Data Structures”. In: ACM Trans. Comput. Log. 15.4 (2014), 31:1–31:37.

    Article  MathSciNet  Google Scholar 

  34. Peter Sewell et al. “x86-TSO: a rigorous and usable programmer’s model for x86 multipro- cessors”. In: Commun. ACM 53.7 (2010), pp. 89–97.

    Google Scholar 

  35. Dennis E. Shasha and Marc Snir. “Efficient and Correct Execution of Parallel Programs that Share Memory”. In: ACM Trans. Program. Lang Syst. 10.2 (1988), pp. 282–312.

    Google Scholar 

  36. Viktor Vafeiadis. “RGSep Action Inference”. In: VMCAI Vol. 5944. LNCS. Springer, 2010, pp. 345–361.

    Google Scholar 

  37. Viktor Vafeiadis and Matthew J. Parkinson. “A Marriage of Rely/Guarantee and Separation Logic”. In: CONCUR Vol. 4703. LNCS. Springer, 2007, pp. 256–271.

    Google Scholar 

  38. Martin T. Vechev and Eran Yahav. “Deriving linearizable fine-grained concurrent objects”. In: PLDI ACM, 2008, pp. 125–135.

    Google Scholar 

  39. Eran Yahav and Shmuel Sagiv. “Automatically Verifying Concurrent Queue Algorithms”. In: Electr Notes Theor Comput. Sci. 89.3 (2003), pp. 450–463.

    Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Sebastian Wolff .

Editor information

Editors and Affiliations

Rights and permissions

Reprints and permissions

Copyright information

© 2018 Springer Nature Switzerland AG

About this chapter

Check for updates. Verify currency and authenticity via CrossMark

Cite this chapter

Meyer, R., Wolff, S. (2018). Reasoning About Weak Semantics via Strong Semantics. In: MĂĽller, P., Schaefer, I. (eds) Principled Software Development. Springer, Cham. https://doi.org/10.1007/978-3-319-98047-8_18

Download citation

  • DOI: https://doi.org/10.1007/978-3-319-98047-8_18

  • Published:

  • Publisher Name: Springer, Cham

  • Print ISBN: 978-3-319-98046-1

  • Online ISBN: 978-3-319-98047-8

  • eBook Packages: Computer ScienceComputer Science (R0)

Publish with us

Policies and ethics