分享到:

并发语言Csp和Ada的比较与分析

并发语言Csp和Ada的比较与分析朱英,周伟(电子计算机系)(电子机械工程系)摘要并发一直是计算机科学界中众所关注的问题。并发程序的执行与顺序程序的执行差别在于:并发程序的执行结果取决于时间和程序执行推进速度,因此如何实现进程间相互作用控制(如对共享资源存取的同步控制及通讯控制)便成为一个关键问题。Csp是基于消息传送,即面向消息的并发语言中典型代表,而Ada是基于远方过程调用,即面向操作的并发语言中典型代表,在文中比较和分析了这两种并发语言在并发表示方法,通讯、同步和会合,非确定性等方面的特性,并提出了对并发程序设计思想的理解和看法。关键词 并发;并发模型;分布系统中国法分类TP312引言从七十年代初计算机界开始遇到并发现象,由于并发机体系结构。并发程序设计思想和并发语言的日趋多样化,加之并发语言的形式语义描述的难度,使人们对并发缺乏理解。几十年来并发一直是计算机科学界中众所关注的问题。并发程序的执行与顺序程序的执行区别在于时...  (本文共5页) 阅读全文>>

《软件学报》2017年04期
软件学报

获取访存依赖:并发程序动态分析基础技术综述

单处理器的性能瓶颈致使共享内存多处理器系统迅速普及[1].此类系统通常对线程访存不作任何限制,运行在其上的并发程序因此存在数据竞争、死锁、原子性违反、序列化错误等串行程序中不会发生的错误,并可能致使产生严重后果[2].然而,由于并发程序具有不确定性,并发错误的触发不仅需要特定的输入,还需要特定的线程调度,导致并发错误难触发、难复现、难检测.为应对这一挑战,并发程序的动态分析技术对程序进行插装或对运行系统进行修改,然后观测并发程序的运行时行为,从而实现错误检测、错误定位、并发控制等机能.这类动态分析技术已在并发程序质量保障方面取得了卓著的成效,研究成果主要体现在两个方面:(1)轨迹分析,如动态数据流分析[3]、并发错误检测[4,5]、轨迹重放调试[6]等;(2)运行时并发控制,如事务内存[7-9]、数据竞争避免[10,11]和确定多线程[12,13]等.由于并发性存在于计算机系统栈的各个层次,根据研究对象、研究手段的不同,现有研究...  (本文共17页) 阅读全文>>

《计算机应用与软件》2014年12期
计算机应用与软件

基于模型检测的并发程序分析综述

0引言现代软件系统正不断变得更为复杂和庞大,这使得它们的正确性变得更为难以保证。系统正确性在实践上的方法大多基于模拟和测试。这些方法的基础问题是它们不能覆盖所有系统将要面临情况的可能性,并且不能找到细微的错误。一个更有优势的验证系统正确性的方法是形式化验证。流行的形式化数学方法是定理证明和模型检测。定理证明是一个能够核实无限的状态空间推理方法,但是它的使用往往需要专业知识和启发式。相反地,模型检测[11],所谓的“按钮技术”,是完全自动地依靠算法技术来验证并发系统的时序安全。并且,如模型检查一旦失败,造成故障的反例就提供了解决这个问题的线索。程序分析[17]提供了对在计算机上运行的程序的动态行为的静态近似。当提到一个程序分析所必须满足的条件时,其最低标准就是保持可判定性和正确性。一开始,程序分析是用来帮助程序编译,程序分析的结果帮助编译器进行优化,比如删除冗余计算。优化后的代码,占用空间更小,运行也更高效。目前,除了编译器优化,...  (本文共7页) 阅读全文>>

《计算技术与自动化》2007年02期
计算技术与自动化

过程间并发程序分析不可判定的一个新证明方法

1引言随着现代软件系统的日趋庞大,并发技术的广泛运用,过程间并发程序分析技术显得更加重要,并且越来越得到广泛的关注,然而,即使在只有两个并发任务的情况下,过程间并发程序分析仍然可能是一个不可判定问题。由于路径约束可能不可解,因此,就一般意义上的精确程序分析都是不可判定的,但即使不考虑路径约束,简单的将分支路径的选择视为不确定性选择(这是程序分析普遍采用的近似方法),过程间并发程序分析仍然是不可判定的[1]。第一次对这个问题给出了明确的结论和证明,由于精确的过程间并发程序分析是不可能的,近年来的研究工作大多考虑如何进行近似的非精确分析[5,6],或者回避并发程序的同步[7]。尽管过程间并发程序分析是一个不可判定问题,但不是所有的程序都是不可判定的,通过对不可判定发生原因的分析,我们希望可以找出一大类程序实际上是可以进行精确分析的。要找出不可判定的必要条件,就必须理解为什么会产生不可判定的情况,单独的过程间分析和并发分析都是可判定的...  (本文共4页) 阅读全文>>

《计算机与数字工程》2005年12期
计算机与数字工程

基于确定性重演的并发程序调试

1引言在调试和测试程序的时候,程序员通常采用循环调试的方法,以相同的输入反复执行程序,借助断点和观测点观察程序的运行状态。使用循环调试方法的前提是对于同样的输入,程序的内部执行路径与外部结果均相同,即程序的运行是确定的。并发程序的执行由于进程的并发性、进程间的通信与同步等原因具有不确定性,即在相同的输入下,程序每次正常执行的结果可能不同,这种不确定性直接导致了错误的不可再现性(non-reproducible)[1,2]。实现并发程序的调试,首先需要将传统的循环调试技术加以扩充,引入新的机制消除程序运行的不确定性,从而可以反复重现错误的原始执行。其次,并发程序是由若干个异步推进的并行成分所组成,且它们之间是相互关联、相互作用的,必须从整体考虑才能正确理解程序运行时的行为,找出程序的错误。本文提出了一种基于确定性重演的并发程序调试方法:在并发程序的初始执行阶段,跟踪引起不确定性的特殊事件,记录下其执行信息;在调试阶段,通过这些相关...  (本文共3页) 阅读全文>>

《计算机学报》2003年03期
计算机学报

并发程序的切片模型检验方法

1 引 言模型检验 (modelchecking)是一种重要的自动验证技术 ,主要通过显式状态搜索或隐式不动点计算来验证有穷状态并发系统的模态 命题性质 .由于模型检验可以自动执行 ,并能在系统不满足性质时提供反例路径 ,因此在应用中比演绎证明更受推崇 .模型检验面临的主要问题是空间爆炸 ,这限制了其在实践中的应用范围 .程序切片最初由Weiser提出[1] ,能够提取出程序中影响某个特定程序点变量值的语句 .该方法在程序调试中很有用 ,得到的切片能够减小寻找错误和缺陷的范围[2 ] .根据Weiser的工作 ,出现了许多针对顺序程序的切片技术 ,直到 90年代初才出现对并发程序进行切片的方法[3 ,4] .近来 ,有一些研究使用程序切片的方法缩减模型检验所需的状态空间规模 .文献 [5 ]中提出如何使用控制和数据依赖对顺序程序切片进行模型检验 ,但该方法不能用于并发程序 .文献 [6 ]给出如何对Promela代码进行静态切...  (本文共9页) 阅读全文>>