顺光Huynh;阿比克·罗伊乔杜里 内存模型敏感字节码验证。 (英语) Zbl 1131.68061号 形式方法系统。设计。 31,第3期,281-305(2007). 概要:像C#和Java这样的现代并发编程语言有一个编程语言级内存模型,它捕获了任何实现平台(单处理器或多处理器)上程序的所有允许行为集。这种内存模型通常比顺序一致性弱,并允许程序线程内的操作重新排序。因此,通过假定顺序一致性(即每个线程按程序顺序进行)验证的程序在某些平台上可能无法正常运行!解决这个问题的一个方法是开发对内存模型敏感的程序检查器。在本文中,我们为编程语言C#开发了一个字节码级不变检查器。我们的检查器识别程序状态,只有在C#内存模型比顺序一致性更宽松的情况下才能达到这些状态。它采用部分降阶策略来加快搜索速度。这些策略不同于标准的部分顺序缩减方法,因为我们的搜索还考虑了包含字节码重新排序的执行跟踪。此外,我们的检查器确定(a)操作重新排序,这会导致达到不希望的状态,以及(b)简单的程序修改(通过插入内存屏障操作),这会阻止这种不希望的重新排序。 引用于1文件 MSC公司: 60年第68季度 规范和验证(程序逻辑、模型检查等) 68甲15 编程语言理论 关键词:软件模型检查;编程语言记忆模型;字节码验证 软件:检查围栏 PDF格式BibTeX公司 XML格式引用 \textit{T.Q.Huynh}和\textit{A.Roychoudhury},《形式与方法系统》。设计。31,第3号,281--305(2007;Zbl 1131.68061) 全文: 内政部 参考文献: [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的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。