6 research outputs found
Cerberus-BMC: A Principled Reference Semantics and Exploration Tool for Concurrent and Sequential C
C remains central to our infrastructure, making verification of C code
an essential and much-researched topic, but the semantics of C is
remarkably complex, and important aspects of it are still unsettled,
leaving programmers and verification tool builders on shaky
ground.
This paper describes a tool, Cerberus-BMC, that for the first time
provides a principled reference semantics that simultaneously supports
(1) a choice of concurrency memory model (including substantial
fragments of the C11, RC11, and Linux kernel memory models), (2) a modern memory object model,
and (3) a well-validated thread-local semantics for a large fragment
of the language.
The tool should be useful for C programmers, compiler writers,
verification tool builders, and members of the C/C++ standards committees
Cμ μ μμ€ κΈ°λ₯κ³Ό μ»΄νμΌλ¬ μ΅μ ν μ‘°νμν€κΈ°
νμλ
Όλ¬Έ (λ°μ¬)-- μμΈλνκ΅ λνμ : 곡과λν μ»΄ν¨ν°κ³΅νλΆ, 2019. 2. νμΆ©κΈΈ.μ£Όλ₯ C μ»΄νμΌλ¬λ€μ νλ‘κ·Έλ¨μ μ±λ₯μ λμ΄κΈ° μν΄ κ³΅κ²©μ μΈ μ΅μ νλ₯Ό μννλλ°, κ·Έλ° μ΅μ νλ μ μμ€ κΈ°λ₯μ μ¬μ©νλ νλ‘κ·Έλ¨μ νλμ λ°κΎΈκΈ°λ νλ€. λΆννλ C μΈμ΄λ₯Ό λμμΈν λ μ μμ€ κΈ°λ₯κ³Ό μ»΄νμΌλ¬ μ΅μ νλ₯Ό μ μ νκ² μ‘°νμν€κ° κ΅μ₯ν μ΄λ ΅λ€λ κ²μ΄ νκ³μ μ
κ³μ μ€λ‘ μ΄λ€. μ μμ€ κΈ°λ₯μ μν΄μλ, κ·Έλ¬ν κΈ°λ₯μ΄ μμ€ν
νλ‘κ·Έλλ°μ μ¬μ©λλ ν¨ν΄μ μ μ§μν΄μΌ νλ€. μ»΄νμΌλ¬ μ΅μ νλ₯Ό μν΄μλ, μ£Όλ₯ μ»΄νμΌλ¬κ° μννλ 볡μ‘νκ³ λ ν¨κ³Όμ μΈ μ΅μ νλ₯Ό μ μ§μν΄μΌ νλ€. κ·Έλ¬λ μ μμ€ κΈ°λ₯κ³Ό μ»΄νμΌλ¬ μ΅μ νλ₯Ό λμμ μ μ§μνλ μ€νμλ―Έλ μ€λλ κΉμ§ μ μλ λ°κ° μλ€.
λ³Έ λ°μ¬νμ λ
Όλ¬Έμ μμ€ν
νλ‘κ·Έλλ°μμ μκΈ΄νκ² μ¬μ©λλ μ μμ€ κΈ°λ₯κ³Ό μ£Όμν μ»΄νμΌλ¬ μ΅μ νλ₯Ό μ‘°νμν¨λ€. ꡬ체μ μΌλ‘, μ°λ¦° λ€μ μ±μ§μ λ§μ‘±νλ λμ¨ν λμμ±, λΆν μ»΄νμΌ, μ μ-ν¬μΈν° λ³νμ μ€νμλ―Έλ₯Ό μ²μμΌλ‘ μ μνλ€. 첫째, κΈ°λ₯μ΄ μμ€ν
νλ‘κ·Έλλ°μμ μ¬μ©λλ ν¨ν΄κ³Ό, κ·Έλ¬ν ν¨ν΄μ λ
Όμ¦ν μ μλ κΈ°λ²μ μ§μνλ€. λμ§Έ, μ£Όμν μ»΄νμΌλ¬ μ΅μ νλ€μ μ§μνλ€. μ°λ¦¬κ° μ μν μ€νμλ―Έμ μμ κ°μ μ»κΈ° μν΄ μ°λ¦¬λ λ
Όλ¬Έμ μ£Όμ κ²°κ³Όλ₯Ό λλΆλΆ Coq μ¦λͺ
κΈ° μμμ μ¦λͺ
νκ³ , κ·Έ μ¦λͺ
μ κΈ°κ³μ μ΄κ³ μλ°νκ² νμΈνλ€.To improve the performance of C programs, mainstream compilers perform aggressive optimizations that may change the behaviors of programs that use low-level features in unidiomatic ways. Unfortunately, despite many years of research and industrial efforts, it has proven very difficult to adequately balance the conflicting criteria for low-level features and compiler optimizations in the design of the C programming language. On the one hand, C should support the common usage patterns of the low-level features in systems programming. On the other hand, C should also support the sophisticated and yet effective optimizations performed by mainstream compilers. None of the existing proposals for C semantics, however, sufficiently support low-level features and compiler optimizations at the same time.
In this dissertation, we resolve the conflict between some of the low-level features crucially used in systems programming and major compiler optimizations. Specifically, we develop the first formal semantics of relaxed-memory concurrency, separate compilation, and cast between integers and pointers that (1) supports their common usage patterns and reasoning principles for programmers, and (2) provably validates major compiler optimizations at the same time. To establish confidence in our formal semantics, we have formalized most of our key results in the Coq theorem prover, which automatically and rigorously checks the validity of the results.Abstract
Acknowledgements
Chapter I Prologue
Chapter II Relaxed-Memory Concurrency
Chapter III Separate Compilation and Linking
Chapter IV Cast between Integers and Pointers
Chapter V Epilogue
μ΄λ‘Docto
Recommended from our members
Prove Once, Run Efficiently Anywhere: Tools for Lock-free Concurrent Algorithms
The multi-core revolution has pushed programmers and algorithm designers to build algorithms that leverage concurrency. This notoriously difficult task is futher complicated by the existence of weak architecture and language memory models. The presence of many such memory models has traditionally forced correctness proofs for lock-free concurrent algorithms to be performed on a per-model basis, resulting in a significant duplication of effort. We demonstrate that the correctness of lock-free concurrent algorithms can be proved once for implementations that can be compiled to run correctly and efficiently on all mainstream memory models
Computer Aided Verification
This open access two-volume set LNCS 11561 and 11562 constitutes the refereed proceedings of the 31st International Conference on Computer Aided Verification, CAV 2019, held in New York City, USA, in July 2019. The 52 full papers presented together with 13 tool papers and 2 case studies, were carefully reviewed and selected from 258 submissions. The papers were organized in the following topical sections: Part I: automata and timed systems; security and hyperproperties; synthesis; model checking; cyber-physical systems and machine learning; probabilistic systems, runtime techniques; dynamical, hybrid, and reactive systems; Part II: logics, decision procedures; and solvers; numerical programs; verification; distributed systems and networks; verification and invariants; and concurrency
Computer Aided Verification
This open access two-volume set LNCS 11561 and 11562 constitutes the refereed proceedings of the 31st International Conference on Computer Aided Verification, CAV 2019, held in New York City, USA, in July 2019. The 52 full papers presented together with 13 tool papers and 2 case studies, were carefully reviewed and selected from 258 submissions. The papers were organized in the following topical sections: Part I: automata and timed systems; security and hyperproperties; synthesis; model checking; cyber-physical systems and machine learning; probabilistic systems, runtime techniques; dynamical, hybrid, and reactive systems; Part II: logics, decision procedures; and solvers; numerical programs; verification; distributed systems and networks; verification and invariants; and concurrency