2.2硬件系统和软件系统的建模

来源:互联网 发布:js获取指定日期 编辑:程序博客网 时间:2024/05/22 06:34

硬件系统和软件系统的的建模

简单电路图的建模

首先我们先看一张简单的电路图。

可以发现该电路图中包含一个输入变量x,一个寄存器r和一个输出变量y。其中输出函数:y=¬(x⊕r),寄存器的赋值函数:r=x∨r

考虑到当寄存器的值为1时,寄存器的值不变,故当r=0时,电路行为能够建模成一个过渡系统,它的状态 空间为:S=Eval(x,r)(Eval(x,r)表示下x,r赋值的集合)

该TS的初始状态为I={<x=0,r=0>,<x=1,r=0>}。因为确定性,初始状态为哪个都有可能。假设初始状态为<x=0,r=1>,当输入x=0时,状态转换为<x=0,r=1>,当输入x=1时,状态转换为<x=1,r=1>

接下来,我们考虑标记函数。状态<x=0,r=1>被标记为{r},因为此时y的值为0,最终被标签的TS如下图所示

例子中提到的方法可以在任意顺序电路上实现。若电路包含输入x1,x2…xn,输出y1,y2..ym以及寄存器r1,r2…rk,则系统的状态由n个输入和k个寄存器组成,输出可由系统状态演算得到。
对于过渡系统:TS=(S,Act,→,I,AP,L)。我们给出寄存器的初始赋值:[r1=c0,1…rk=c0,k](表示给寄存器i赋值0,0<i≤k)。

  • 系统的空间状态为:S=Eval(x1,…,xn,r1,…,rk)
  • 系统的初始状态:I={(a1,a2,…,an,c(0,1),c(0,2),…,c(0,k)|a1,…,an属于{0,1}}
  • 因为Act这里不考虑,故用Act={τ}表示
  • 原子命题集合:AP={x1,…,xn,y1,…,ym,r1,…,rk}

软件系统的建模

数据依赖系统的执行行为主要有条件分支所确定,比如

if x%2=1 then x:=x+1 else x:=2 fi

原则上,当我们作为一个过渡系统建模一个程序片段时,过渡的条件会被我们省略,而条件分支会以不确定性的形式表现出来。这会导致过渡系统十分抽象,只有一部分相关的性质是有效的。故我们提出条件转换(conditional transitions),条件转换的带有条件分支的结果图能够展开成为过渡系统

我们扩充饮料自动售货机,nsoda表示自动售货机中soda的数量,nbeer表示自动售货机中beer的数量,若自动售货机中为空,则会返回硬币。如此之外,我们仅设置两个位置:start和select。以下条件转换


建模了投入硬币和重置自动贩卖机。条件转换以g:α的形式表示,g是一个布尔表达式(也叫guard),α是一个当g成立时将会执行的动作。条件转换


建模了当苏打水或啤酒有剩余时贩卖机的操作。当贩卖机里没有啤酒和苏打水时,补充啤酒和苏打水,条件转换如下

若我们定义最大容量为max,那么不同的动作会对变量造成不同的影响。具体如下


所谓程序图(program graphs),即用位置信息表示节点,用条件过渡表示边,显然该图并不是过渡系统,因为边是由条件构成的。但是一个过渡系统能够通过展开程序图来得到,下图为当max为2时,程序图展开为过度系统的图。

本质上讲,程序图包含以下内容

  • 变量集Var,这些变量都是标准类型的变量
  • dom(x)表示某个变量x的值域
  • Cond(Var)表示Var上的布尔表达式
  • x=(x1,x2,…,xn)
  • D=dom(x1)×…×dom(xn)

它是一个每条边上标记有条件变量和相应动作的有向图。动作的影响我们可以用以下式子形式化的表示

Effect:Act×Eval(Var)→Eval(Var)

若α表示动作x:=y+5,其中x,y是整数变量,η表示赋值,分别是η(x)=17,η(y)=-2,则

Effect(α,η)(x)=η(y)+5=3,Effect(α,η)(y)=η(y)=-2

原创粉丝点击