×

内存模型敏感字节码验证。 (英语) Zbl 1131.68061号

概要:像C#和Java这样的现代并发编程语言有一个编程语言级内存模型,它捕获了任何实现平台(单处理器或多处理器)上程序的所有允许行为集。这种内存模型通常比顺序一致性弱,并允许程序线程内的操作重新排序。因此,通过假定顺序一致性(即每个线程按程序顺序进行)验证的程序在某些平台上可能无法正常运行!解决这个问题的一个方法是开发对内存模型敏感的程序检查器。在本文中,我们为编程语言C#开发了一个字节码级不变检查器。我们的检查器识别程序状态,只有在C#内存模型比顺序一致性更宽松的情况下才能达到这些状态。它采用部分降阶策略来加快搜索速度。这些策略不同于标准的部分顺序缩减方法,因为我们的搜索还考虑了包含字节码重新排序的执行跟踪。此外,我们的检查器确定(a)操作重新排序,这会导致达到不希望的状态,以及(b)简单的程序修改(通过插入内存屏障操作),这会阻止这种不希望的重新排序。

MSC公司:

60年第68季度 规范和验证(程序逻辑、模型检查等)
68甲15 编程语言理论

软件:

检查围栏
PDF格式BibTeX公司 XML格式引用
全文: 内政部

参考文献:

[1] Java规范请求(JSR)133(2004)Java内存模型和线程规范修订
[2] 艾布拉姆斯B。http://blogs.msdn.com/brada/archive/2004/05/12/10935.aspx
[3] Brumme C.Weblog:内存模型。http://blogs.msdn.com/cbrumme/archive/2003/05/17/51445.aspx
[4] Burckhardt S,Alur R,Martin M(2006),放松记忆模型上并发数据类型的有界模型检查:案例研究。参加:计算机辅助验证国际会议(CAV)
[5] Burckhardt S、Alur R、Martin M(2007年)。Checkfence:检查放松内存模型上并发数据类型的一致性。In:ACM编程语言设计与实现会议(PLDI)
[6] Clarke EM、Grumberg O、Peled D(1999)模型检查。麻省理工学院出版社,剑桥
[7] Collier WW(1992)《关于并行架构的推理》。纽约普伦蒂斯·霍尔。详情请访问http://www.mpdiag.com/archtest.html ·Zbl 0759.68009号
[8] Dill DL,Park S,Nowatzyk A(1993)抽象内存模型的形式规范。集成系统研究专题讨论会。麻省理工学院出版社,剑桥
[9] Dwyer MB,Hatcliff JR Prasad VR(2004),利用对象转义和锁定信息以降低并发面向对象程序的部分顺序。表格方法系统设计25(2–3):199–240·兹比尔1090.68020 ·doi:10.1023/B:FORM.0000040028.49845.67
[10] 培根·D等人。“双重锁定被打破”声明。网址:http://www.cs.umd.edu/\(\sim\)pugh/java/memoryModel/DoubleCheckedLocking.html
[11] Ford LR,Fulkerson DR(1956)网络最大流量。加拿大数学杂志8:399–404·Zbl 0073.40203号 ·doi:10.4153/CJM-1956-045-5
[12] Gopalakrishnan G,Yang Y,Lindstrom G(2004)QB与否QB:内存排序的高效执行验证工具。参加:计算机辅助验证国际会议(CAV)·Zbl 1103.68618号
[13] Huynh TQ,Roychoudhury A(2006)C#的内存模型敏感检查器。In:正式方法研讨会(FM)。http://www.comp.nus.edu.sg网站/\(\sim\)abhik/pdf/fm06.pdf
[14] JGF(2001)Java grade Forum多线程基准测试。http://www.epcc.ed.ac.uk/computing/research_activities/java_grade/threads.html
[15] JPF(2005)Java路径查找器模型检查工具。http://javapathfinder.sourceforge.net/
[16] Lamport L(1979)《如何制作正确执行多进程程序的多处理器计算机》。IEEE传输计算28(9):690–691·Zbl 0419.68045号 ·doi:10.1109/TC.1979.1675439
[17] Lea D编译器编写者的JSR-133食谱。http://gee.cs.oswego.edu/dl/jmm/cookbook.html
[18] Manson J,Pugh W(2002)java内存模型模拟器。In:与ECOOP联合举办的类Java程序正式技术研讨会
[19] Manson J,Pugh W,Adve S(2005)Java内存模型。In:ACM编程语言原则研讨会(POPL)·Zbl 1369.68079号
[20] Microsoft(2005)标准ECMA-334 C#规范。http://www.ecma-international.org/publications/files/ecma-ST/ecma-334.pdf1
[21] Microsoft(2005)标准ECMA-335公共语言基础设施(CLI)。http://www.ecma-international.org/publications/standards/ecma-335.htm
[22] Morrison V.Dotnet讨论:Dotnet记忆模型。http://discussion.develop.com/archives/wa.exe?A2=ind0203B&L=DOTNET&P=R375
[23] Nalumusu R等人(1998年)多处理器内存模型验证的“测试模型检查”方法。在计算机辅助验证(CAV)国际会议上
[24] Nipkow T等人(2003)Java字节码验证专题。《自动化研究杂志》30(34)
[25] Park S,Dill DL(1999)放松内存顺序的可执行规范和验证器。IEEE传输计算48(2):227–235·数字对象标识代码:10.1109/12.752664
[26] 挥发性物质连续一致性的Pugh W试验。网址:http://www.cs.umd.edu/\(\sim\)pugh/java/memoryModel/ReadAfterWrite.java
[27] Raynal M(1986)互斥算法。麻省理工学院出版社,剑桥·Zbl 0662.68002号
[28] Roychoudhury A,Mitra T(2002)为程序验证指定多线程Java语义。在ACM国际软件工程会议(ICSE)上
[29] Schmidt D,Harrison T(1996)《双重锁定:有效初始化和访问线程安全对象的优化模式》。In:第三届程序设计年会模式语言
[30] Stark RF,Borger E(2004)C#线程和NET内存模型的ASM规范。在:抽象状态机车间。计算机科学课堂讲稿,第3065卷。柏林施普林格
[31] Yang Y,Gopalakrishnan G,Lindstrom G(2004)记忆模型敏感数据竞争分析。在正式工程方法国际会议上
[32] Yang Y,Gopalakrishnan G,Lindstrom G,Slind K(2003)使用逻辑编程和SAT分析英特尔安腾内存排序规则。In:正确的硬件设计与验证方法CHARME
此参考列表基于出版商或数字数学图书馆提供的信息。其项与zbMATH标识符进行启发式匹配,可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。