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!
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Preview
Unable to display preview. Download preview PDF.
References
Parosh Aziz Abdulla, Bengt Jonsson, and Cong Quy Trinh. “Automated Verification of Linearization Policies”. In: SAS Vol. 9837. LNCS. Springer, 2016, pp. 61–83.
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.
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.
Jade Alglave. “A shared memory poetics”. PhD thesis. Université Paris 7, 2010.
Ahmed Bouajjani, Egor Derevenetc, and Roland Meyer. “Checking and Enforcing Robustness against TSO”. In: ESOP Vol. 7792. LNCS. Springer, 2013, pp. 533–553.
Ahmed Bouajjani, Egor Derevenetc, and Roland Meyer. “Checking Robustness against TSO”. In: CoRR abs/1208.6152 (2012).
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.
Ahmed Bouajjani et al. “Lazy TSO Reachability”. In: FASE Vol. 9033. LNCS. Springer, 2015, pp. 267–282.
Sebastian Burckhardt and Madanlal Musuvathi. “Effective Program Verification for Relaxed Memory Models”. In: CAV Vol. 5123. LNCS. Springer, 2008, pp. 107–120.
Edmund M. Clarke. “The Birth of Model Checking”. In: 25 Years of Model Checking. Vol. 5000. LNCS. Springer, 2008, pp. 1–26.
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.
Patrick Cousot and Radhia Cousot. “Systematic Design of Program Analysis Frameworks”. In: POPL ACM Press, 1979, pp. 269–282.
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.
Simon Doherty et al. “Formal Verification of a Practical Lock-Free Queue Algorithm”. In: FORTE. Vol. 3235. LNCS. Springer, 2004, pp. 97–114.
Tayfun Elmas, Shaz Qadeer, and Serdar Tasiran. “A calculus of atomic actions”. In: POPL ACM, 2009, pp. 2–15.
Tayfun Elmas et al. “Simplifying Linearizability Proofs with Reduction and Abstraction”. In: TACAS Vol. 6015. LNCS. Springer, 2010, pp. 296–311.
Timothy L. Harris. “A Pragmatic Implementation of Non-blocking Linked-Lists”. In: DISC Vol. 2180. LNCS. Springer, 2001, pp. 300–314.
Frédéric Haziza et al. “Pointer Race Freedom”. In: CoRR abs/1511.00184 (2015).
Frédéric Haziza et al. “Pointer Race Freedom”. In: VMCAI Vol. 9583. LNCS. Springer, 2016, pp. 393–412.
Maurice Herlihy and Nir Shavit. The art of multiprocessor programming. Morgan Kaufmann, 2008.
Lukás Holıik et al. “Effect Summaries for Thread-Modular Analysis”. In: CoRR abs/1705.03701 (2017).
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.
Thuan Quang Huynh and Abhik Roychoudhury. “A Memory Model Sensitive Checker for C#”. In: FM Vol. 4085. LNCS. Springer, 2006, pp. 476–491.
Bengt Jonsson. “Using refinement calculus techniques to prove linearizability”. In: Formal Asp. Comput. 24.4-6 (2012), pp. 537–554.
Leslie Lamport. “A Fast Mutual Exclusion Algorithm”. In: ACM Trans. Comput. Syst. 5.1 (1987), pp. 1–11.
Leslie Lamport. “How to Make a Multiprocessor Computer That Correctly Executes Multi- process Programs”. In: IEEE Trans. Computers 28.9 (1979), pp. 690–691.
Maged M. Michael. “High performance dynamic lock-free hash tables and list-based sets”. In: SPAA 2002, pp. 73–82.
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.
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.
Seungjoon Park and David L. Dill. “An Executable Specification, Analyzer and Verifier for RMO (Relaxed Memory Order)”. In: SPAA. 1995, pp. 34–41.
Gary L. Peterson. “Myths About the Mutual Exclusion Problem”. In: Inf Process. Lett. 12.3 (1981), pp. 115–116.
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.
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.
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.
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.
Viktor Vafeiadis. “RGSep Action Inference”. In: VMCAI Vol. 5944. LNCS. Springer, 2010, pp. 345–361.
Viktor Vafeiadis and Matthew J. Parkinson. “A Marriage of Rely/Guarantee and Separation Logic”. In: CONCUR Vol. 4703. LNCS. Springer, 2007, pp. 256–271.
Martin T. Vechev and Eran Yahav. “Deriving linearizable fine-grained concurrent objects”. In: PLDI ACM, 2008, pp. 125–135.
Eran Yahav and Shmuel Sagiv. “Automatically Verifying Concurrent Queue Algorithms”. In: Electr Notes Theor Comput. Sci. 89.3 (2003), pp. 450–463.
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2018 Springer Nature Switzerland AG
About this chapter
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)