6 research outputs found

    Cerberus-BMC: A Principled Reference Semantics and Exploration Tool for Concurrent and Sequential C

    Get PDF
    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의 μ €μˆ˜μ€€ κΈ°λŠ₯κ³Ό 컴파일러 μ΅œμ ν™” μ‘°ν™”μ‹œν‚€κΈ°

    Get PDF
    ν•™μœ„λ…Όλ¬Έ (박사)-- μ„œμšΈλŒ€ν•™κ΅ λŒ€ν•™μ› : κ³΅κ³ΌλŒ€ν•™ 컴퓨터곡학뢀, 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

    Towards understanding the costs of avoiding out-of-thin-air results

    No full text

    Computer Aided Verification

    Get PDF
    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

    Get PDF
    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
    corecore