模型检验(闵应骅)

上传人:夏** 文档编号:572833702 上传时间:2024-08-13 格式:PDF 页数:6 大小:758.41KB
返回 下载 相关 举报
模型检验(闵应骅)_第1页
第1页 / 共6页
模型检验(闵应骅)_第2页
第2页 / 共6页
模型检验(闵应骅)_第3页
第3页 / 共6页
模型检验(闵应骅)_第4页
第4页 / 共6页
模型检验(闵应骅)_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《模型检验(闵应骅)》由会员分享,可在线阅读,更多相关《模型检验(闵应骅)(6页珍藏版)》请在金锄头文库上搜索。

1、. . 模型检验(1)(091230) 大家承认,计算机领域的 ACM 图灵奖相当于自然科学的诺贝尔奖。2007 年图灵奖授予Edmund M. Clarke,E. Allen Emerson,和 Joseph Sifakis。他们创立了模型检验-一种验证技术,用算法的方式确定一个硬件或软件设计是否满足用时态逻辑表述的形式规范。如果不能满足,则提供反例。他们在 1981 年提出这个方法,经过 28 年的发展,已经在 VLSI 电路、通信协议、软件设备驱动器、实时嵌入式系统和安全算法的验证方面得到了实际应用。相应的商业工具也已出现,估计今后将对未来的硬件和软件产业产生重大影响。 2009 年 1

2、1 月 CACM 发表了三位对模型检验的新的诠释。本人将用几次对他们的诠释做一个通俗的介绍,对我自己也是一个学习的过程。 Edmund M. Clarke 现在是美国卡内基梅隆大学 (CMU) 计算机科学系教授。 E. Allen Emerson是在美国奥斯汀的德州大学计算机科学系教授。Joseph Sifakis 是法国国家科学研究中心研究员,Verimag 实验室的创立者。 模型检验(2)(091231) 程序正确性的形式验证依靠数学逻辑的使用。程序是一个很好定义了的、可能很复杂、直观上不好理解的行为。而数学逻辑能精确地描述这些行为。过去,人们倾向于正确性的形式证明。而模型检验回避了这种证

3、明。在上世纪 60 年代,流行的是佛洛伊德-霍尔式的演绎验证。这种办法像手动证明一样,使用公理和推论规则,比较困难,而且要求人的独创性。一个很短的程序也许需要很长的一个证明。 不搞程序正确性证明,可以使用时态逻辑,一种按时间描述逻辑值变化的形式化。如果一个程序可以用时态逻辑来指定,那它就可以用有限自动机来实现。模型检验就是去检验一个有限状态图是否是一个时态逻辑规范的一个模型。 对于正在运行的并发程序,它们一般是非确定性的,像硬件电路、微处理器、操作系统、银行网络、通信协议、汽车电子及近代医学设备。时态逻辑所用的基本算子是 F(有时),G(总是),X(下一次),U(直到)。现在叫线性时间逻辑(L

4、TL)。 . . 另一种常用的逻辑是计算树逻辑(CTL)。它的基本时态是 A(对所有以后的交易),E(对某些以后的交易),跟随着 F,G,X,U 之一。复合公式是线性时间逻辑子公式的嵌套和组合。例如 AFp(以后,p 终将成立,因此是必然的。)EFp(以后,p 最后可能成立。)如图 1 所示。 时态逻辑公式可以在给定的有限状态图上加以解释。所以又称为克里普克(kripke)结构。M包含一个状态集 S,一个完全的二进制转换关系 R S S,和一个状态标签 L,其原子事实为真。用 M, s0 |= f 表示“在结构 M 中,于状态 s0,f 为真。”或者简写为 M |= f.例如,M, s0 |=

5、 AFp 当且仅当对在 M 中的所有通路 x = s0, s1, s2, . . .我们有对任何 i =0, P L(si). 当我们写规范的时候,我们只写 AFp,断言公式 p 是必然的。一个线性时间逻辑公式 h 意味着在整个结构皆为真,即 Ah。在线性时间逻辑中,G(C1 C2)表明进程 C1 和 C2 总是互相排斥的。而在计算树逻辑中则写成 AG(C1 C2)。AG(T1 AFC1)意味着只要进程 1 进入它的尝试区域 T1,它总是进入它的关键段 C1。AGEFstart 表示系统总是可以重新启动的。这在线性时间逻辑中是无法表示的。而 CTL*中的 EGFsend 则表明存在一个公平的行

6、为,使得 send 条件可以重复出现。 这些逻辑已经在工业界得到广泛应用,包括基于 CTL 的 IBM Sugar,基于 LTL 的 Intel For-Spec,和 IEEE 1850 标准所用的 PSL 用了 CTL*。 还有命题演算,非常一般的 TL。它允许时态正确性的不动点递归定义。例如 EFp = p EX(EFp)。时态正确性的不动点特征在模型检验的算法和工具中都很有用。 模型检验(3)(091231) 时态逻辑用来描述正确的系统行为,模型检验提供实用的硬件和软件验证方法。模型验证可形式地描述如下:给定一个有限结构 M,状态 s,和一个时态逻辑公式,问 M, s |= f ?即问:

7、在结构M 中,于状态 s0,f 是否为真?或者说,给定 M 和 f,计算这个集合s : M, s |= f。他们证明了这个问题的计算复杂性对公式和结构的大小是线性的。该算法是基于基本时态模型化的不动点原理。例. . 如,如果 f(Z)表示 p AXZ。AFp = f (AFp)是 f(Z)的不动点。因为 AFp 为真,当且仅当 p 为真,或者 AXAFp 为真。(意即以后 p 总会为真,当且仅当 p 现在就真,或者以后总会为真。)一般来说,可能有许多不动点,但这个是最小不动点,记为 Z = f (Z)。我们可以迭代地计算使得 AFp 为真的状态集。 因为每一个公式都有一个使之为真的状态集。 可

8、以证明, 单调递增序列 false f ( false) f 2(false) . . . f k( false) = f k+1(false)揭示最小不动点,如果 f(Z)是单调的。CTL 模型验证是多项式复杂的,但 LTL 则是指数复杂的,不过可以接受。 问题是时态逻辑公式的可表达性。就是说,什么样的特性可以用时态逻辑公式来表达?例如安全性(“无坏事发生”即 G-bad),活性(“有些好事发生”,即 Fgoal),及公平性(“有些事常发生”即 GFtry)。我们需要用表达式表达所有正确性。如果这一点做不到,就无法使用模型检验。但实际上,时态逻辑公式能够做到这一点,而且接近自然语言。正因为这

9、一点,我们需要 LTL,CTL,和 CTL*。 另一个问题是简洁性,即表达是否简洁。例如 CTL*公式 E(Fp1 Fp2)不是一个 CTL 公式,但它等价于 EF(p1 EFp2) EF(p2 EFp1),这是一个 CTL 公式,虽然它比较长一些。 另一个重要问题是有效性, 即对于电路或逻辑, 模型验证问题的复杂性及模型验证算法的性能。当然,可表达性、简洁性和有效性是有矛盾的,需要某些折中。一般要求 M 少于 1,000,000 个状态。对于状态特别多的机器,可以设法省略一些非本质的详情,以简化 M。有人也提出用所谓符号模型检验来处理复杂的机器。这方面的研究还很多,有人甚至考虑无限状态系统。

10、 模型检验(4)(091231) 模型检验的成功之处在于它用自动搜索代替手动证明来解决验证的问题。模型检验包括三部分:1。基于命题时态逻辑的规范语言,2。表示被验证系统的编码状态机的方法,3。验证算法,对状态空间的智能搜索以确定规范是真还是假。如果规范没有被实现,模型检验能够给出反例。这一条非常重要,因为它帮助我们 debug。如图 2 所示。 状态爆炸是模型检验中的一个大问题,因为现在的复杂系统,其状态数都是天文数字。n 个相互异步的进程,如果每个进程有 m 个状态,其状态数为 m 的 n 次方(mn)。近年来,正是在这方面有许多突破。 有序的二进制判决图(OBDD)提供了处理大系统进行符号

11、模型检验的可能性。例如某些具有1020 状态的实例进行了符号模型检验。 软件进程之间往往是异步的,状态数就会指数级增加。两个事件称为是独立的,如果不论它们按什么顺序执行,其结果是相同的整体状态。用偏序简化方法可以部分地解决异步进程的状态爆炸问题。 近年来,布尔可满足性问题(SAT)的进展,对模型检验提出了有界模型检验(BMC)对硬件设计验证特别有效。其主要想法如下。假如要检验形如 Fp 的性质,BMC 要确定是否存在一个长度为 k 的反例,即是否存在一条长度为 k 的通路,结束于一个循环,其每一个状态都有p。这里所谓有界就是指这个 k。有人对 9510 个锁存器和 9499 个输入的电路做了

12、BMC。 . . 抽象映射是简化模型检验的另一种方法,如图 4 所示,把一堆状态简化为一个状态。原来系统称为具体系统,而简化了的系统称为抽象系统。抽象系统能够保持具体系统的许多性质,但也会丢失某些性质。已有许多结果揭示这一问题。 状态爆炸的问题已经有了许多的研究,但是,并没有完全解决。这正是未来要解决的问题。 模型检验(5)(100101) 模型检验(model checking)自从 1981 年提出来以后,受到各种非议。至今 28 年过去了,才得到了学术界和工业界的广泛关注。这是很正常的。要求一个学术成果马上用于实际,很不现实。中. . 国某些干部就这么急功近利。算法的设计验证包括三步:(

13、1)需求规范;(2)建立可执行的系统模型;(3)开发可扩展的算法,一是去检验需求,二是当需求不能满足时进行诊断。 需求规范可以用两种方式给定。一种是基于状态的需求,用转换系统指明系统的可观察行为;另一种是基于特性的需求, 用说明性的方式。 这些需求用一系列的时态逻辑公式表达。 IEEE 的 PSL语言就用了这二者的组合。需求规范的无矛盾性和完全性仍然是一个问题。现在还缺乏某些外部需求的形式化,例如安全性(隐私),可重构性(不相互干扰的构造性),服务质量(抖动度)等。 可执行的模型要求忠实性,即模型必须与被验证系统保持语义,而且必须是可检验的。这样,你验证的特性才能在实际系统中实现。为了避错和纠

14、错,模型应该能从系统描述自动产生。对于硬件验证,此事从 RTL 描述出发,比较容易完成。而对于软件,可能只能在抽象级别上进行。扩展UML 进行调度和资源管理无法提供严格的定时特性。而扩展硬件描述语言,像 SystemC 和 TLM由于缺乏形式语义只能用于模拟。 可扩展的验证方法对大系统不好做。一个解决办法是根据特定的语义范畴开发抽象技术,即在特定语义领域求解不动点方程。另一个解决办法是面对复杂性,用分而治之的途径。过去,特性被分成两部分:阶段-结论。现在,我们需要组合验证的理论,把验证组合起来,形成一个大的验证。 计算机工程于其他自然科学一个巨大的不同就在于保证正确的验证的重要性。 其他科学用

15、建造理论来保证正确性和可预见性。我们需要建造复杂系统可靠模型的理论和方法。异构系统可能是同步的或异步的;不同的交互机制,如锁闭、监管、功能调用和消息传达;执行粒度不同,即硬件或软件。我们需要从基于自动机的组合中解放出来,考虑体系结构的组合,像协议、调度和总线。我们需要研究某些特定的特性类,例如无死锁、互操作。而不是去研究一般的安全特性。我们也需要研究特殊体系结构的验证技术。体系结构给定了部件间的交互机制。例如对环形或星形体系结构,对带抢先任务和固定优先级的实时系统, 对时间触发的体系结构等。 可以像测试定义可测试性一样,定义可验证性。 总之,模型检验已经在硬件和软件设计验证中得到了应用,但是,

16、还有许多问题有待研究。 模型检验(结束语)(100101) 学习完模型检验(model checking)三位创建者的文章以后,现在可以说几句结束语了。 科学大家就是科学大家。他们就模型检验 28 年来的发展,对历史、研究动机、已有成就及今后发展做了高度的概括和总结,指明了方向。但是,真要想做这方面的研究,还需要就其中的一个问题,查阅文献,深入下去才行。 当今,在计算机工程与科学领域,困扰我们的一个问题是复杂性。系统很复杂,计算很复杂。但是,真要定义什么叫复杂,倒是一个很困难的问题。计算复杂性有一成套的理论,基于图灵机可计算性,有所谓 P 问题、NP 问题。但是,实际上,一个多项式复杂性的问题

17、可能你算不了。例如解线性方程组是多项式复杂的,但是,13 亿人建一个 13 亿阶的方程组,可能现在的超级计算机也算不了。反过来,NP 难的问题,在 IC 设计与测试领域比比皆是。SAT 就是一个典型的 NP 难问题。对于特定的 NP 问题,我们完全能够用启发式方法,得到很有效率的解。有些过去望而生畏的问题现在已经有了有效的解。例如,OBDD(有序二进制判决图),测试生成,模型检验等。本人. . 上世纪提出的布尔过程,由于复杂性问题而得不到响应。但是,你想一想,我们现在 IC 设计与测试中碰到的判决问题、优化问题,哪一个是简单的。计算机发展到如此强大,不就是为了处理复杂问题的吗?所以人类的智慧一

18、定会越来越善于处理复杂问题。 我想,如果我们请一位博士生,读几篇模型检验的文章,然后写一篇综述,他一定会列出许多模型检验工具,说明它们有哪些功能。林林总总一大堆,内容似乎很丰富。三位大师的文章不是这样的。他们指出的是基础性的问题、前瞻性的问题。这对科学研究才是最有益的。商业工具只是根据基础研究成果,变成大众便于使用的工具。所以,工具一定是要落后于研究的。没有研究出方法来,就不会有工具出现。当然,并不是所有的方法都会变成工具。工业界认为有助于实际问题解决的方法,工业界才会把它变为工具,工具好不好最后要看用户满不满意。所以,研究成果的意义最后还是要工业界说话、要实际说话。实践是检验真理的唯一标准嘛!正因为如此,基础研究一定不能削弱,但又不能追着出成果。产品开发很需要做,但不能代替基础研究。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号