软件学报  2022, Vol. 33 Issue (8): 2947-2963   PDF    
模拟实时系统的点区间优先级时间Petri网与TCTL验证
何雷锋 , 刘关俊     
同济大学 计算机科学与技术系, 上海 201804
摘要: 时间Petri网为实时系统提供了一种形式化的建模方法, 时间计算树逻辑(TCTL)为描述实时系统与时间相关的设计需求提供了一种逻辑化的表达方式, 因此, 基于时间Petri网的TCTL模型检测广泛应用于实时系统的正确性验证. 然而对于一些涉及优先级的实时系统, 例如多核多任务实时系统, 这里不仅需要考虑任务之间的时间约束, 还要考虑任务执行的优先级以及引入优先级带来的抢占式调度问题, 致使相应的建模和分析变得更加困难. 为此, 提出了点区间优先级时间Petri网, 通过在时间Petri网上定义变迁发生的优先级以及变迁的可挂起性, 从而可以模拟实时系统的抢占式调度机制. 首先, 高优先级的任务抢占低优先级的任务所占用的资源, 导致后者被中断; 然后, 前者执行完毕后释放资源; 最后, 后者再次获得资源, 从中断的地方恢复. 通过点区间优先级时间Petri网来模拟多核多任务实时系统, 使用TCTL来描述它们的设计需求, 设计了相应的模型检测算法, 开发了相应的模型检测器以验证它们的正确性. 通过一个实例, 来说明该模型和方法的有效性.
关键词: 点区间优先级时间Petri网    多核多任务实时系统    时间计算树逻辑(TCTL)    模型检测    抢占式调度    
Time-point-interval Prioritized Time Petri Nets Modelling Real-time Systems and TCTL Checking
HE Lei-Feng , LIU Guan-Jun     
Department of Computer Science and Technology, Tongji University, Shanghai 201804, China
Abstract: Time Petri nets is a formal method for modelling real-time systems, and timed computation tree logic (TCTL) is a logical expression for specifying time-related design requirements of real-time systems, so time Petri net based TCTL model checking has been widely used to verify the correction of real-time systems. For those real-time systems with priority such as multi-core multi-task real-time systems, it not only needs to consider time constraints among tasks but also needs to consider priority of task execution and the preemptive scheduling problem caused by priority, which results that modelling and analysis of these systems become more difficult. Therefore, this study proposes time-point-interval prioritized time Petri nets. By defining priority of transition firing and suspendable transitions in time Petri nets, time-point-interval prioritized time Petri nets can model preemptive scheduling of real-time systems, i.e., first of all, a high-priority task preempts the resource of a low-priority task, which results in the interruption of the latter, then the former is completed and releases the resource, and finally the latter gets the resource again and resumes from the interruption. This study uses time-point-interval prioritized time Petri nets to model multi-core multi-task real-time systems, uses TCTL to describe their design requirements, designs the corresponding model checking algorithms, and develops the corresponding model checker to verify their correctness. An example is used to show the effectiveness of the proposed model and method.
Key words: time-point-interval prioritized time Petri nets    multi-core multi-task real-time systems    timed computation tree logic (TCTL)    model checking    preemptive scheduling    

对于一些安全性至关重要的系统, 例如航空航天系统, 微小的设计错误就可能会导致严重的后果. 因此, 保证系统的正确性是完全必要的. 然而, 随着系统规模的日益扩大, 可能出现的错误也呈指数级增长, 导致传统的检测手段无法胜任如此繁重的工作. 因此, 对系统设计者来说, 寻找一种逻辑上精确验证系统正确性的方法是很有必要的, 例如各种形式化方法[13]. 模型检测[4, 5]作为一种完全自动化的形式化方法得到了深入的研究, 已成功应用于一些实时系统的正确性验证[68]. 模型检测采用一种形式化语言来模拟各种软硬件系统, 例如Petri网[9, 10]、反应式模块[11]、解释系统编程语言(ISPL)[12]等, 使用一种逻辑公式来描述这些系统的设计需求, 例如线性时态逻辑(LTL)[13, 14]、计算树逻辑(CTL)[15]、交替时态逻辑(ATL)[16]等, 从而把验证一个系统是否满足它的设计需求的问题等价为验证相应的模型是否满足相应的逻辑公式的问题, 而验证模型是否满足逻辑公式则可以完全通过各种模型检测器自动化完成.

Petri网作为一种形式化语言, 广泛应用于建模和分析各种软硬件系统, 例如柔性制造系统[17]、业务过程管理系统[18]、并发程序形式化验证[19]等. 时间Petri网[20, 21]是一种包含时间因素的高级Petri网, 适用于实时系统的建模和分析[22, 23]. 对于一个时间Petri网, 每个变迁伴随着一个静态发生区间, 它表示该变迁从获得发生权到发生所需要的最短等待时间和最长等待时间, 而变迁本身发生不需要时间. 计算树逻辑(CTL)[15]作为模型检测技术最常用的逻辑公式之一, 用来描述系统常见的一些设计需求, 例如无死锁、安全性、活性和公平性等. 时间计算树逻辑(TCTL)[24, 25]则是在CTL的基础之上添加了具体的时间约束, 通过量化CTL的时态算子来描述系统与时间相关的一些设计需求, 例如一个任务一旦启动就必须在某个限定的时间内执行完毕. 基于时间Petri网的TCTL模型检测已成功应用于一些实时系统的正确性验证[2628].

对于时间Petri网, 如果在一个状态下多个变迁均具有发生权, 且彼此之间不存在时间冲突(在一个状态下两个具有发生权的变迁存在时间冲突, 即一个变迁发生所需要的最短等待时间大于另一个变迁发生所需要的最长等待时间), 则按变迁发生规则, 可随机发生其中一个变迁. 然而这种情况并不适用于一些涉及优先级的实时系统, 因为这里不仅需要考虑任务之间的时间约束, 还要考虑任务执行的优先级. 对于一些更为紧要的任务, 系统通常会给它们更高的优先级, 使得它们在与低优先级的任务竞争资源时优先获得资源执行. 因此, Berthomieu[29, 30]等人提出了优先级时间Petri网, 它是在时间Petri网的基础之上添加了变迁发生的优先级, 即一个变迁在一个状态下是可发生的当且仅当它满足以下3个条件: (1) 在当前状态的标识下, 该变迁具有发生权; (2) 在当前状态下, 该变迁的已等待时间在它的静态发生区间内; (3) 在当前状态下, 所有满足条件(1)和条件(2)变迁的优先级不会高于该变迁. 优先级时间Petri网显然增强了时间Petri网的建模能力, 使得时间Petri网在实时系统中得到了更广泛的应用, 例如一些涉及线程调度、仲裁和同步的实时系统, 均可以通过优先级时间Petri网来建模和分析.

Berthomieu等人提出的优先级时间Petri网虽然可以模拟一些涉及优先级的实时系统, 但是并不能满足所有涉及优先级的实时系统的建模需求, 我们可以通过一个简单的例子来说明这种优先级时间Petri网的局限性. 通常, 用优先级时间Petri网来模拟一个实时系统时, 一些变迁是代表任务的, 称为任务型变迁. 一个任务型变迁ti代表一个任务Taski, 伴随ti的静态时间区间代表任务Taski执行完毕所需要的最短和最长时间, 变迁ti已等待的时间代表任务Taski已执行的时间, 变迁ti发生代表任务Taski执行完毕. 在一个状态下, 结构上是并发关系的任务型变迁t1t2同时获得发生权且彼此之间无时间冲突, 经过τ个时间后t1发生, 则t1发生后t2的已等待时间为τ, 即任务Task2已执行时间为τ. 这时, t1发生后产生的新状态导致变迁t3可发生, 它的优先级高于t2且彼此之间无时间冲突, 则t3会先于t2发生, 假设t2t3在结构上是冲突关系, 则t3的发生会导致t2失去发生权. 即使t2后来重新获得发生权, 但它的已等待时间已从0开始计时. 这意味着任务Task2在占有资源且已执行一段时间的情况下, 被另一个更高优先级的任务Task3抢占资源而中断, 而后再次获得资源却不会从中断的地方恢复而是从头开始执行, 这显然不符合一些实时系统的抢占式调度机制. 例如多核多任务实时系统, 即高优先级的任务可抢占低优先级的任务所占用的资源导致后者被中断, 前者执行完毕后释放资源, 后者获得资源从中断的地方恢复, 继续执行剩余的一段时间而不是从头开始执行. 这意味着Berthomieu等人提出的优先级时间Petri网不能模拟支持抢占式调度机制的实时系统.

针对传统的优先级时间Petri网对实时系统建模能力的不足, 我们提出了另一种类型的优先级时间Petri网, 它不仅考虑了任务执行的优先级, 还考虑了任务之间的抢占式调度需求. 由于一些多核多任务实时系统的任务执行时间不是一个不确定的区间而是一个确定的值, 因此我们考虑时间Petri网这样的一类子网, 即伴随每个变迁的静态发生区间为点区间, 我们称为点区间时间Petri网. 因此, 本文定义的这种优先级时间Petri网被称为点区间优先级时间Petri网. 这意味着每个变迁从获得发生权到发生所需要的最短和最长等待时间是相同的, 这种变迁从获得发生权到发生的等待时间完全确定的时间Petri网, 减少了所生成的状态图中的状态数, 降低了TCTL模型检测算法的时间和空间复杂度, 提高了对实时系统的验证效率. 除了变迁的静态发生区间不同外, 我们定义的点区间优先级时间Petri网与Berthomieu等人提出的优先级时间Petri网从网的结构、状态的定义到变迁的发生规则等方面也是不同的, 本文将在第2节详细介绍它们的区别. 我们通过点区间优先级时间Petri网来模拟多核多任务实时系统, 使用TCTL来描述它们的设计需求, 设计了相应的TCTL模型检测算法, 并开发了相应的模型检测器, 实现了对多核多任务实时系统的正确性验证.

本文第1节介绍一些基本知识, 包括Petri网、时间Petri网以及相关概念. 第2节介绍我们提出的点区间优先级时间Petri网及它的状态图. 第3节介绍TCTL的语法和语义. 第4节介绍我们的模型检测算法和模型检测器. 第5节通过一个实例来说明模型和方法的有效性. 第6节回顾一些相关的工作. 第7节对全文进行总结并阐述下一步的工作.

1 预备知识

本节简单介绍Petri网、时间Petri网及其相关概念, 有关Petri网的详情见文献[31], 有关时间Petri网的详情见文献[20, 21]. 假设$\mathbb{N} $是自然数集, R是实数集, R+是非负实数集. 定义实数闭区间I={xR|axb}, 记为I=[a, b]. 这里, a, bRab. 用IRIR+分别表示所有实数闭区间和非负实数闭区间的集合. 若a=b, 则I=[a, a]称为点区间. 设IIRI=[a, b], 定义↓I=a, ↑I=b.

1.1 Petri网

一个网定义为三元组N=(P, T, F), 其中, P为库所集, T为变迁集, PT=∅, F⊂(P×T)∪(T×P)为PT之间的流关系. 从形式上看, 一个网就是一个没有孤立结点的有向二分图, 一般用小圆圈表示库所, 小矩形表示变迁. 给定一个节点xPT, 节点x的前集定义为x={yPT|F(y, x)=1}, 后集定义为x={yPT|F(x, y)=1}. 网的标识是一个映射函数M: P$\mathbb{N} $, M(p)表示库所p里的token数. 一个标识通常表示为库所上的一个多重集, 例如在标识M下, p1里有3个token, p3里有1个token, 而其他库所均无token, 则M表示为{3p1, p3}或者3p1+p3.

一个带有初始标识M0的网N被称作为一个Petri网, 记作Σ=(N, M0). 如果对∀pP, 满足F(p, t)≤M(p), 则称变迁t在标识M下具有发生权. t的发生, 使系统进入一个新的标识M′, 记作M[tM′, 即: 对$ \forall p \in P: M^{\prime}(p)=M(\tilde{p}) F(p, t)+F(t, p)$. 标识MkM出发是可达的当且仅当Mk=M, 或者存在一个可发生序列σ=t1t2tn−1tk, 使得M0[t1M1[t2〉…Mk−1[tkMk成立. 上式也可以表示为M0[σMk. 从M出发的所有可达标识记作R(N, M), 则Petri网的所有可达标识即为R(N, M0). 如果在一个标识下没有变迁具有发生权, 则称该标识为Petri网的一个死锁(deadlock). 如果对∀MR(N, M0)和∀pP, 满足M(p)≤1, 则称此Petri网是安全的. 本文只考虑安全的Petri网. 为了保证安全性, 首先要求在初始标识M0里的每一个库所最多含有1个token; 其次, Petri网的变迁发生规则稍作修改, 即, 如果M[tM′, 则M′满足对∀pP: M′(p)=min{M(p)−F(p, t)+F(t, p), 1}. 也就是说, 如果一个库所在一个标识下含有一个token, 此后变迁发生又有新token进入该库所, 但它仍然保持为一个token而不是两个token. 本文后面所提到的Petri网均为这种类型的Petri网, 因此下文所提到的每一个标识, 实际上表示为库所上的一个集合而不是多重集.

1.2 时间Petri网

一个时间Petri网可以定义为五元组(P, T, F, M0, SI), 其中, (P, T, F, M0)为一个Petri网, SI: TIR+为一个映射函数. SI(t)表示变迁t的静态发生区间, ↓SI(t)为t获得发生权到发生所需要的最短等待时间, ↑SI(t)为t获得发生权到发生所需要的最长等待时间. En(M)表示在标识M下所有具有发生权的变迁, (M, h)表示时间Petri网的一个状态, 其中, h: En(M)→R+是一个时钟函数. h(t)表示在标识M下具有发生权的变迁t的已等待时间. 变迁t在状态(M, h)下是可发生的当且仅当它满足以下两个条件: (1) tEn(M); (2) h(t)∈SI(t). 也就是说, 一个变迁在一个状态下是可发生的当且仅当该变迁在当前状态的标识下具有发生权, 且该变迁的已等待时间在它的静态发生区间内.

时间Petri网的初始状态为S0=(M0, h0), 其中, M0为初始标识, 对∀tEn(M0): h0(t)=0. 假设S=(M, h)和S′=(M′, h′)为时间Petri网的两个状态, 则时间Petri网中存在着两种状态迁移规则.

1. $ S\xrightarrow{\tau }S' $当且仅当状态S′从状态S经过τ个时间后可达, 即:

(1) M=M′;

(2) ∀tEn(M): h′(t)=h(t)+τSI(t);

2. $ S\xrightarrow{\tau }S' $当且仅当状态S′从状态S经过变迁t发生后可达, 即:

(1) tEn(M);

(2) h(t)∈SI(t);

(3) M[tM′;

(4) ∀t′∈En(M′): 如果t′∈En(M)且t′≠t, 则h′(t′)=h(t′); 否则, h′(t′)=0.

第1种状态迁移为时间流逝导致的, 即标识不变但每个具有发生权的变迁的已等待时间增加. 第2种状态迁移为变迁发生导致的, 即新标识产生, 如果在变迁发生前后, 一些变迁(非发生变迁)一直具有发生权, 则在变迁发生后, 这些变迁的已等待时间保持不变; 如果之前没有发生权的变迁在变迁发生后获得发生权或者发生变迁本身在变迁发生后再次具有发生权, 则在变迁发生后, 这些变迁的已等待时间为0.

如果一个时间Petri网(P, T, F, M0, SI)满足对∀tT: ↓SI(t)=↑SI(t), 则称它为点区间时间Petri网. 对于点区间时间Petri网, 每个变迁的静态发生区间为点区间, 即, 每个变迁从获得发生权到发生所需要的等待时间是确定的.

2 点区间优先级时间Petri网 2.1 点区间优先级时间Petri网

定义1(点区间优先级时间Petri网). 一个点区间优先级时间Petri网(time-point-interval prioritized time Petri nets)可以定义为七元组Z=(P, T1, T2, F, M0, SI, Pr), 其中, (P, T1T2, F, M0, SI)为一个点区间时间Petri网, T1为不可挂起变迁集, T2为可挂起变迁集; Pr⊂(T1T2)×(T1T2)为变迁之间的优先级关系.

(t, t′)∈Pr表示变迁t发生的优先级高于变迁t′. Pr满足非自反性、非对称性和传递性. En(M)表示在标识M下所有具有发生权的变迁, Pend(M)表示在标识M下所有已挂起的可挂起变迁, (M, h, H)表示Z的一个状态, 其中, M是一个标识; h: En(M)→R+是一个时钟函数, h(t)表示在标识M下具有发生权的变迁t的已等待时间; H: Pend(M)→R+是一个时钟函数, H(t)表示在标识M下已挂起变迁t的中断时间. 变迁tZ的一个状态(M, h, H)下是可发生的当且仅当它满足以下3个条件.

(1) tEn(M);

(2) h(t)∈SI(t);

(3) 对∀t′∈T1T2: 如果t′∈En(M)且h(t′)∈SI(t′), 则(t′, t)∉Pr.

也就是说, 一个变迁在一个状态下是可发生的当且仅当该变迁在当前状态的标识下具有发生权, 且它的已等待时间在它的静态发生区间内, 同时不存在满足同样条件的其他变迁优先级高于该变迁.

点区间优先级时间Petri网Z的初始状态为S0=(M0, h0, H0), 其中, M0为初始标识, 对∀tEn(M0): h0(t)=0. 由于Pend(M0)=∅, 故H0=∅. 假设S=(M, h, H)和S′=(M′, h′, H′)为Z的两个状态, 则Z中存在着两种状态迁移规则.

1. $ S\xrightarrow{\tau }S' $当且仅当状态S′从状态S经过τ个时间后可达, 即:

(1) M=M′;

(2) ∀tEn(M): h′(t)=h(t)+τSI(t);

(3) ∀tPend(M): H′(t)=H(t);

2. $ S\xrightarrow{\tau }S' $当且仅当状态S′从状态S经过变迁t发生后可达, 即:

(1) tEn(M);

(2) h(t)∈SI(t);

(3) 对∀t′∈T1T2: 如果t′∈En(M)且h(t′)∈SI(t′), 则(t′, t)∉Pr;

(4) M[tM′;

(5) ∀t′∈En(M′): 如果t′∈En(M)且t′≠t, 则h′(t′)=h(t′); 否则, h′(t′)=0;

(6) ∀t′∈Pend(M): 如果t′∈En(M′), 则t′∉Pend(M′)且h′(t′)=H(t′); 否则, H′(t′)=H(t′);

(7) ∀t′∈En(M)∩T2t′≠t: 如果t′∉En(M′), 则t′∈Pend(M)且H′(t′)=h(t′).

第1种状态迁移为时间流逝导致的, 即标识不变, 每个已挂起变迁的中断时间不变, 但每个具有发生权的变迁的已等待时间增加. 第2种状态迁移为可发生变迁发生导致的, 即新标识产生, 如果在变迁发生前后, 一些变迁(非发生变迁)一直具有发生权, 则在变迁发生后, 这些变迁的已等待时间保持不变; 如果之前没有发生权的变迁在变迁发生后获得发生权或者发生变迁本身再次具有发生权, 则在变迁发生后, 这些变迁的已等待时间为0. 如果可挂起变迁在变迁发生后失去发生权(非发生变迁), 则它在变迁发生后被挂起且它的中断时间记为它在变迁发生前的已等待时间. 如果已挂起变迁在变迁发生后获得发起权, 则它在变迁发生后恢复为具有发生权的变迁, 且它的已等待时间恢复为它挂起时的中断时间; 否则, 已挂起变迁在变迁发生后, 保持它之前的中断时间不变.

注意, 我们定义的点区间优先级时间Petri网与Berthomieu等人定义的优先级时间Petri网是完全不同的, 主要区别在于以下4点.

(1) 在结构上, 我们把变迁集分为可挂起变迁集和不可挂起变迁集两种类型; 而Berth-omieu等人定义的变迁集没有分类;

(2) 在变迁的静态发生区间上, 我们定义的Petri网是基于点区间时间Petri网而扩展的; 而Berthomieu等人定义的Petri网是基于一般的时间Petri网而扩展的;

(3) 在状态的定义上, 我们定义的状态包含3个参数, 即标识、该标识下每个具有发生权的变迁的已等待时间以及该标识下每个已挂起变迁的中断时间; 而Berthomieu等人定义的状态只包含两个参数, 即标识和该标识下每个具有发生权的变迁的已等待时间;

(4) 在变迁发生规则上, 我们定义: 如果一个可挂起变迁由于别的变迁发生而失去发生权, 则它会被挂起, 它的中断时间会被保存; 反之, 如果一个已挂起变迁由于别的变迁发生而再次具有发生权, 则它会被恢复为具有发生权的变迁, 且它的已等待时间恢复为它挂起时的中断时间. 而Berthomieu等人的定义与时间Petri的定义一样, 即: 如果一个变迁由于别的变迁发生而失去发生权, 则它的已等待时间会被清空, 而该变迁以后再次具有发生权时, 它的已等待时间会从0开始计时.

我们通过一个简单的例子来解释本文的相关概念. 图 1为一个点区间优先级时间Petri网, 其中, (t2, t7)∈ Pr, 可挂起变迁集T2={t8}, 其余变迁构成不可挂起变迁集T1. 它描述了一个单核双任务实时系统. 该系统有两个任务AB, 它们共用一个处理器c1. 任务A在15ms后启动(t1), 任务B在10ms后启动(t6). 每个任务均需要先获得处理器c1, 然后才能执行(t2, t7). 任务A需要5ms执行完毕(t3), 任务B需要10ms执行完毕(t8). 由于任务A的优先级高于任务B, 所以任务A可抢占任务B所占用的处理器c1(t4), 任务A执行完毕后释放处理器c1(t5), 之后, 任务B获得处理器c1从中断的地方恢复, 继续执行剩余的一段时间(t8). 因此, t8是唯一的可挂起变迁, 即T2={t8}. (t2, t7)∈Pr意味着任务A, B同时竞争处理器c1时, 任务A的高优先级使得任务A优先获得处理器c1执行.

图 1 描述一个单核双任务实时系统的点区间优先级时间Petri网

2.2 状态图

对于时间Petri网来说, 一个变迁从获得发生权到发生一般要经历两个阶段: 一是从获得发生权到可发生, 即它从获得发生权一直等待到它的已等待时间在它的静态发生区间内; 二是该变迁从可发生到发生. 因此, 时间Petri网的两种状态迁移规则完全可以合并到一起, 即$ S\xrightarrow{\tau }S'\xrightarrow{t}S'' $等价为$ S\xrightarrow{{(\tau , t)}}S'' $, 它表示状态S在等待τ个时间后发生变迁t到达状态S″. 我们称变迁t在状态S下是可调度的(schedulable). 对于时间Petri网的状态图, 每一步的状态迁移均为时间流逝+变迁发生导致的. 同理, 我们定义的点区间优先级时间Petri网的两种状态迁移规则也可以合并到一起. 基于此, 我们给出了点区间优先级时间Petri网的状态图的定义.

定义2(状态图). 点区间优先级时间Petri网Z的状态图可以定义为五元组Δ=(Ω, S0, →, L, time), 其中, ΩZ中所有的可达状态; S0=(M0, h0, H0)是Z的初始状态; →⊂Ω×Ω表示状态之间的迁移关系; L为迁移关系上的一个标签函数: (S, S′)→T1T2, L(S, S′)表示从状态S迁移到状态S′所发生的变迁; time为迁移关系上的一个时钟函数: (S, S′)→R+, time(S, S′)表示从状态S迁移到状态S′所等待的时间. 即: 如果∃τR+和∃tT1T2使得$ S\xrightarrow{{(\tau , t)}}S' $, 则称SS′, L(S, S′)=t, time(S, S′)=τ.

注意, 状态图中并非包含了所有的可达状态. 在状态图中, 除了初始状态S0, 其他所有的状态均是变迁发生后产生的新状态. 对于时间流逝导致的状态迁移, 它所产生的新状态并不会出现在状态图中. 例如在图 1中时间流逝导致的一个状态迁移(p1+p6+c1, h(t1)=h(t6)=0)$ \xrightarrow{5} $(p1+p6+c1, h(t1)=h(t6)=5), 它所产生的新状态(p1+p6+c1, h(t1)=h(t6)=5)并不会出现在状态图中. 然而对于状态图中未出现的状态, 我们可以很容易地由状态图中的已知状态通过时间流逝得到.

对于点区间优先级时间Petri网, 由于它是安全Petri网且每个变迁发生前的等待时间是确定的, 因此它的状态图中的状态数必然是有限的. 图 2图 1点区间优先级时间Petri网的状态图, 图中共有7个状态, 除了初始状态S0外, 其他状态均是变迁发生后产生的新状态.

图 2 图 1中点区间优先级时间Petri网的状态图

● 首先, 在状态S0下, 只有变迁t1t6具有发生权且它们的已等待时间为0. t1发生所需要的时间为15而t6发生所需要的时间为10, 因此只有t6可调度. 在等待10个时间单元后, t6发生到达状态S1;

● 在状态S1下, t1仍然具有发生权, 因此它的已等待时间为10. t7刚获得发生权, 因此它的已等待时间为0. t1发生所需要的时间为5而t7发生所需要的时间为0, 因此t7发生到达状态S2;

● 在状态S2下, t1仍然具有发生权, 因此它的已等待时间为10. t8刚获得发生权, 因此它的已等待时间为0. t1发生所需要的时间为5而t8发生所需要的时间为10, 因此只有t1可调度. 在等待5个时间单元后, t1发生到达状态S3;

● 在状态S3下, t8仍然具有发生权, 因此它的已等待时间为5. t4刚获得发生权, 因此它的已等待时间为0. 由于t8发生所需要的时间为5而t4发生所需要的时间为0, 因此t4发生到达状态S4;

● 在状态S4下, t5刚获得发生权, 因此它的已等待时间为0. 由于可挂起变迁t8失去发生权, 因此t8被挂起, 且挂起时的中断时间为挂起前的已等待时间, 即H(t8)=5. t5发生所需要的时间为5, 因此在等待5个时间后, t5发生到达状态S5;

● 在状态S5下, 已挂起变迁t8重新获得发生权, 因此由已挂起变迁恢复为具有发生权的变迁, 且它的已等待时间恢复为挂起时的中断时间, 即h(t8)=5. t8发生所需要的时间为5, 因此在等待5个时间单元后, t8发生到达终点状态S6.

注意: 虽然图 1的点区间优先级时间Petri网定义了优先级关系(t2, t7), 但由于任务AB的启动时间不一致和任务的非周期性执行等原因, 在生成状态图的过程中并没有出现t2t7同时可发生的情况. 然而对于后面要提到的多核多任务实时系统, 模拟它的点区间优先级时间Petri网中的优先级关系, 就会起到两个变迁同时可发生时, 让高优先级的变迁先发生的作用.

3 TCTL

本文使用时间计算树逻辑(TCTL)[24, 25]来描述实时系统的设计需求. 首先, TCTL的语法基于点区间优先级时间Petri网来定义; 然后, TCTL的语义通过它的状态图来解释.

定义3(TCTL的语法). 基于一个点区间优先级时间Petri网Z=(P, T1, T2, F, M0, SI, Pr), TCTL定义如下:

$ \phi::=\mathbf{true}|p| \neg \phi\left|\phi_{1} \wedge \phi_{2}\right| E X \phi|A X \phi| E G \phi|A G \phi| E\left(\phi_{1} U_{\bowtie} \phi_{2}\right) \mid A\left(\phi_{1} U_{\bowtie c} \phi_{2}\right), $

其中, pP, ⋈∊{ <, ≤, >, ≥}, cR+.

TCTL中的其他算子可以由以上的算子推导出: deadlockEXtrue, ϕ1ϕ2=¬(¬ϕ1∧¬ϕ2), ϕ1ϕ2ϕ1ϕ2, EFcϕ=E(true Ucϕ), AF⋈cϕ=A(true Ucϕ).

给定一个状态图Δ和它的一个状态S, 我们定义在Δ中从S出发的一个计算(computation)是一个最大状态序列, 即ω=(S0, S1, …), 其中, S0=S. 一个计算可能是无限的也可能是有限的(遇到死锁): 对于一个有限的计算ω=(S0, S1, …, Sn, …), 假设Sn是一个死锁, 则对∀i∈{0, 1, …, n}: (Si, Si+1)∈→且ω(i)=Si, 当i > n, 则ω(i)=∅; 对于一个无限的计算ω=(S0, S1, …), 对∀i∈∞: (Si, Si+1)∈→且ω(i)=Si.(S)表示在Δ中所有从S出发的计算.

定义4(TCTL的语义). 给定一个点区间优先级时间Petri网的状态图Δ=(Ω, S0, →, L, time), 一个状态SΩ和一个TCTL公式ϕ, (Δ, S)$ \models$ϕ意味着公式ϕ在状态图Δ的状态S下为真. 换句话说, 状态图Δ中的状态S满足公式ϕ. 如果没有歧义的话, Δ可省略, 满足关系$ \models$归纳定义如下.

S$ \models$true;

S$ \models$p当且仅当S的标识M满足M(p)=1;

S$ \models$¬ϕ当且仅当S $ \models$ ϕ不成立;

S$ \models$ϕ1ϕ2当且仅当S$ \models$ϕ1S$ \models$ϕ2;

S$ \models$EXϕ当且仅当∃S′∈Ω, 满足SS′且S$ \models$ϕ;

S$ \models$AXϕ当且仅当对∀S′∈Ω: 如果SS′, 则S$ \models$ϕ;

S$ \models$EGϕ当且仅当∃ω(S): 对∀i$\mathbb{N} $: ω(i)$ \models$ϕ;

S$ \models$AGϕ当且仅当对∀ω(S): 对∀i$\mathbb{N} $: ω(i)$ \models$ϕ;

S$ \models$E(ϕ1Ucϕ2)当且仅当∃ω(S)满足这样的条件: (1) ∃i$\mathbb{N} $, 满足ω(i)$ \models$ϕ2; (2) 对∀j∊{0, 1, …, i−1}, 满足ω(j)$ \models$ϕ1; (3) time(ω(0), ω(1))+time(ω(1), ω(2))+…+time(ω(i−1), ω(i))⋈c;

S$ \models$A(ϕ1Ucϕ2)当且仅当∀ω(S)满足这样的条件: (1) ∃i$\mathbb{N} $, 满足ω(i)$ \models$ϕ2; (2) 对∀j∈{0, 1, …, i−1}, 满足ω(j)$ \models$ϕ1; (3) time(ω(0), ω(1))+time(ω(1), ω(2))+…+time(ω(i−1), ω(i))⋈c.

定义5(有效性). 一个TCTL公式ϕ在点区间优先级时间Petri网Z上是有效的(记作Z$ \models$ϕ)当且仅当Z的状态图Δ满足(Δ, S0)$ \models$ϕ, 即状态图Δ中的初始状态S0满足ϕ.

TCTL是在CTL的基础之上添加了具体的时间约束, 通过量化CTL的时态算子来描述实时系统与时间相关的一些设计需求. 例如: 对于图 1中的实时系统, 我们可要求任务B在执行过程中不会被中断, 即任务B一旦启动就必须在10ms内执行完毕, 这样的设计需求可通过TCTL公式ϕ1=AG(p7AF≤10p9)来描述, 其中, p7意味着任务B启动, p9意味着任务B执行完毕. 后面我们开发的模型检测器可验证ϕ1图 1上是无效的.

4 算法和工具

给定一个点区间优先级时间Petri网Z和一个TCTL公式ϕ, 验证Z$ \models$ϕ是否成立主要包含以下3个步骤.

(1) 由点区间优先级时间Petri网Z生成它的状态图Δ;

(2) 在状态图Δ上递归寻找所有满足ϕ的状态(记作Sat(ϕ));

(3) Z$ \models$ϕ当且仅当S0Sat(ϕ).

由点区间优先级时间Petri网生成其状态图的伪代码见算法1.

算法1.

Input: A time-point-interval prioritized time Petri nets Z=(P, T1, T2, F, M0, SI, Pr);

Output: The state graph Δ of Z.

Ω: =From: =S0: =(M0, h0, H0);

repeat

 To: =∅;

 for each SFrom

  for each tT1T2

   if t is schedulable at S then

    ∃τR+ such that $ S\xrightarrow{{(\tau , t)}}S' $; To: =To+S′; Add (S, S′) to →; L(S, S′): =t; time(S, S′): =τ;

   endif

  endfor

 endfor

 New: =To−Ω; From: =New; Ω : =Ω+New;

until New=∅;

return (Ω, S0, →, L, time).

基于生成的状态图Δ可计算Sat(ϕ). 根据TCTL的语义, 计算Sat(ϕ)的伪代码见算法2.

算法2.

Input: A state graph Δ=(Ω, S0, →, L, time) and a TCTL formula ϕ;

Output: {SΩ|S$ \models$ϕ}.

if ϕ is true then return Ω; endif

if ϕ is p then return {SΩ|M(p)=1}; endif

if ϕ is ¬ϕ then return ΩSat(ϕ); endif

if ϕ is ϕ1ϕ2 then return Sat(ϕ1)∩Sat(ϕ2); endif

if ϕ is EXϕ then return SatEX(ϕ); endif

if ϕ is AXϕ then return SatAX(ϕ); endif

if ϕ is EGϕ then return SatEG(ϕ); endif

if ϕ is AGϕ then return SatAG(ϕ); endif

if ϕ is E(ϕ1Ucϕ2) then return SatEU(ϕ1, ϕ2, ⋈, c); endif

if ϕ is A(ϕ1Ucϕ2) then return SatAU(ϕ1, ϕ2, ⋈, c); endif

由于在TCTL的定义中, 除了最后两个算子外其他均是常见的CTL算子, 因此本文只给出关于算子

E(ϕ1Ucϕ2)和A(ϕ1Ucϕ2)的计算Sat(ϕ)的算法, 即SatEU(ϕ1, ϕ2, ⋈, c)和SatAU(ϕ1, ϕ2, ⋈, c). 关于其他算子的计算Sat(ϕ)的算法可参考文献[4, 15]. 计算SatEU(ϕ1, ϕ2, ⋈, c)的伪代码见算法3.

算法3.

X: =∅; Y: =Sat(ϕ2); Z: =Sat(ϕ1);

for each SΩ min(S): =max(S): =−1; endfor

for each SY min(S): =max(S): =0; endfor

if Y=∅ then return ∅; end if

repeat

 X: =Y;

 for each SZ

  flag1: =0; flag2: =0;

  for each S′∈Y

   if (S, S′)∈→ then

    if min(S)=−1 then

     min(S): =min(S′)+time(S, S′); max(S): =max(S′)+time(S, S′); flag2: =1;

    else if min(S)!=0

     if min(S) > min(S′)+time(S, S′) then

      min(S): =min(S′)+time(S, S′); flag2: =1;

     endif

     if max(S) < max(S′)+time(S, S′) then

      max(S): =max(S′)+time(S, S′); flag2: =1;

     endif

    endif

    if flag1=0 then Y: =Y+S; flag1: =1; endif

   endif

  endfor

 endfor

until X=Y & & flag2=0;

Z=∅;

if ⋈=$ \models$ < ’||⋈=$ \models$≤’ then

 for each SX

  if min(S)⋈c then Z: =Z+S; endif

 endfor

endif

if ⋈=' > ’||⋈='≥’ then

 for each SX

  if max(S)⋈c then Z: =Z+S; endif

 endfor

endif

return Z.

在计算SatEU(ϕ1, ϕ2, ⋈, c)的过程中, 首先寻找所有满足E(ϕ12)的状态, 同时对找到的每一个这样的状态

设置两个时间函数, 即min和max, 它们根据每次添加的新的满足E(ϕ12)的状态动态调整其数值. 若用x表示存在一个从状态S出发的计算满足ϕ1U=xϕ2, 则min(S)和max(S)分别表示x的最小值和最大值. 在找到所有

满足E(ϕ12)的状态后, 且它们的min值和max值均不再改变, 基于min和max可从中筛选出满足E(ϕ1Ucϕ2)的状态. 这里分为两种情况: 一是当⋈为 < 或≤时, 只需保证S的min值< 或≤c, 即可保证存在一个从S出发的计算满足ϕ1U⋈cϕ2; 二是当⋈为 > 或≥时, 只需保证S的max值> 或≥c, 即可保证存在一个从S出发的计算满足ϕ1Ucϕ2.

计算SatAU(ϕ1, ϕ2, ⋈, c)的伪代码见算法4.

算法4.

X=∅; Y=Sat(ϕ2); Z=Sat(ϕ1);

for each SΩ min(S): =max(S): =−1; endfor

for each SY min(S): =max(S): =0; endfor

while XY

 X: =Y;

  for each SZ

   flag: =0;

   for each S′∈Ω such that (S, S′)∈→

    if S′∉Y then flag: =1; break; endif

   endfor

  if flag=0

   Y: =Y+S;

   for each S′∈Ω such that (S, S′)∈→

    if min(S)=−1 then min(S): =min(S′)+time(S, S′); max(S): =max(S′)+time(S, S′);

    else

     if min(S) > min(S′)+time(S, S′) then min(S): =min(S′)+time(S, S′); endif

     if max(S) < max(S′)+time(S, S′) then max(S): =max(S′)+time(S, S′); endif

    endif

   endfor

  endif

 endfor

endwhile

Z: =∅;

if ⋈=‘ < ’||⋈=‘≤’ then

 for each SX

  if max(S)⋈c then Z: =Z+S; endif

 endfor

endif

if ⋈=$ \models$ > ’||⋈=$ \models$≥’ then

 for each SX

  if min(S)⋈c then Z: =Z+S; endif

 endfor

endif

return Z.

在计算SatAU(ϕ1, ϕ2, ⋈, c)的过程中, 首先寻找所有满足A(ϕ12)的状态, 同时对找到的每一个这样的状态同样设置min和max时间函数. 与计算SatEU(ϕ1, ϕ2, ⋈, c)的不同之处在于, 所有满足A(ϕ12)的状态的min值和max值被设置后就不再调整了. 在找到所有满足A(ϕ12)的状态后, 基于min和max可从中筛选出满足A(ϕ1Ucϕ2)的状态. 这里分为两种情况: 一是当⋈为 < 或≤时, 只需保证S的max值< 或≤c, 即可保证从S出发的所有计算满足ϕ1Ucϕ2; 二是当⋈为 > 或≥时, 只需保证S的min值> 或≥c, 即可保证从S出发的所有计算满足ϕ1Ucϕ2.

基于Sat(ϕ), 我们可验证ϕ的有效性. 如果S0Sat(ϕ), 则ϕZ上有效; 否则, ϕZ上无效.

我们的模型检测算法的复杂度分为两个部分.

● 首先是由点区间优先级时间Petri网生成它的状态图. 由于本文所涉及的Petri网均是安全的, 因此状态图中的最大标识数不会超过2|P|. 对∀t1T1T2和∀t2T2, 我们假设h(t1)=−1表示t1在一个标识下不具有发生权, H(t2)=−1表示t2在一个标识下未挂起, SImax表示变迁的所有静态发生点区间中的最大值, 即max{SI(t)|tT1T2}. 在一个状态下, 一个变迁具有发生权就不会是已挂起变迁, 是已挂起变迁就不会具有发生权. 本文只考虑每个变迁的静态发生点区间为整数的点区间优先级时间Petri网, 因此状态图的最大状态数不会超过2|P|⋅(SImax+2)⋅(|T1T2|+|T2|), 最大状态迁移关系不会超过2|P|+1⋅(SImax+ 2)⋅(|T1T2|+|T2|). 因此, 由点区间优先级时间Petri网生成状态图的算法复杂度为O(2|P|SImax⋅|T1T2|).

● 然后, 基于生成的状态图验证TCTL公式ϕ的有效性. 该过程主要在于计算Sat(ϕ). 对于一个包含n个状态和k个状态迁移关系的状态图, 计算Sat(ϕ)算法的复杂度为O((n+k)⋅|ϕ|), 其中, |ϕ|为ϕ中库所和算子的总数量. 因此综合来说, 我们的模型检测算法的复杂度为O(2|P|SImax⋅|T1T2|⋅|ϕ|).

基于以上算法, 我们开发了一个用C++语言编写的TCTL模型检测器. 它在输入一个描述点区间优先级时间Petri网的文本型文件和一个描述TCTL公式的文本型文件后, 会自动输出验证结果. 图 3(a)展示了描述图 1中的点区间优先级时间Petri网的文本型文件, 图 3(b)展示了描述TCTL公式ϕ1=AG(p7AF≤10p9)的文本型文件(图中实际上描述的是它的等价形式AGp7AF≤10p9)), 图 3(c)为验证结果. 结果显示, ϕ1无效. 这意味着任务B在执行过程中被中断. 事实上, 任务B从启动到执行完毕需要15ms: 首先, 任务B启动后获得处理器c1开始执行, 但在执行5ms时被更高优先级的任务A抢占处理器c1而被迫中断; 接着, 任务A在5ms后执行完毕, 释放处理器c1; 最后, 任务B获得处理器c1从中断的地方恢复, 继续执行剩余的5ms后结束. 如果我们把ϕ1改成AG(p7AF≤15p9), 则结果显示ϕ1有效.

图 3  

5 应用

本节通过一个多核多任务实时系统的案例, 来说明本文的模型和方法的有效性. 有这样一个多核多任务实时系统, 它有6个任务(即A, B, C, D, EF)和两个处理器(即c0c1), 其中, 任务A, BF共用处理器c1, 任务C, DE共用处理器c0. 任务之间存在依赖关系, 即一个任务的执行结束作为下一个任务的启动. 整个系统的任务依赖图如图 4所示. 任务AD作为起始任务被周期性驱动, 任务A每过80 ms被驱动一次, 任务D每过50 ms被驱动一次. 任务A获得处理器c1后执行6 ms, 任务D获得处理器c0后执行4 ms. 任务A执行完毕驱动任务B, 任务D执行完毕驱动任务E. 任务B获得处理器c1后执行10 ms, 任务E获得处理器c0后执行22 ms. 任务BE执行完毕驱动任务C, 同时, 任务E执行完毕驱动任务F. 任务C获得处理器c0后执行8 ms, 任务F获得处理器c1后执行12 ms. 在图 4中, 各个任务之间除了依赖关系, 还存在执行的优先级关系, 这里用优先级值表示. 一个任务的优先级值越大, 代表它的优先级越高. 例如: 任务A, BF的优先级值分别为97, 98, 96, 因此任务A, BF获得处理器c1执行的优先级为B > A > F; 任务C, DE的优先级值分别为99, 97, 98, 因此任务C, DE获得处理器c0执行的优先级为C > E > D. 同时, 引入优先级带来了抢占式调度的需求.例如: 任务A, BF的优先级为B > A > F, 因此任务A可抢占任务F所占用的处理器, 任务B可抢占任务AF所占用的处理器; 任务C, DE的优先级为C > E > D, 因此任务E可抢占任务D所占用的处理器, 任务C可抢占任务DE所占用的处理器. 注意一般的抢占式调度机制要求: 首先, 高优先级任务可剥夺低优先级任务的资源, 导致后者被中断; 然后, 前者执行完毕后释放资源; 最后, 后者再次获得资源从中断的地方恢复, 继续执行剩余的一段时间.

图 4 一个多核多任务实时系统的任务依赖图

这样的一个多核多任务实时系统可通过我们定义的点区间优先级时间Petri网来模拟, 如图 5所示. 由于这里所涉及的优先级关系众多, 因此我们同样给每一个变迁设置一个优先级值, 值越大, 意味着优先级越高.例如, t2的优先级值为97, t6的优先级值为98, 这意味着存在一个优先级关系(t6, t2)∈Pr. 此外, 我们定义可挂起变迁集T2={t4, t5, t16, t20, t21, t22}, 其余变迁构成不可挂起变迁集T1.

图 5 描述图 4中的多核多任务实时系统的点区间优先级时间Petri网

图 5中, 任务AD通过变迁t1t14周期性驱动, 任务A通过变迁t2t4表示获得处理器c1然后执行6 ms, 任务D通过变迁t15t16表示获得处理器c0然后执行4 ms, 任务A执行完毕通过库所p5驱动任务B, 任务D执行完毕通过库所p15驱动任务E, 任务B通过变迁t6t10表示获得处理器c1然后执行10 ms, 任务E通过变迁t18t21表示获得处理器c0然后执行22 ms, 任务BE执行完毕通过库所p10p20驱动任务C, 同时, 任务E执行完毕通过库所p14驱动任务F, 任务C通过变迁t24t28表示获得处理器c1然后执行8 ms, 任务F通过变迁t17t20表示获得处理器c0然后执行12 ms.

对于共用处理器c1的任务A, BF, 它们的优先级关系为B > A > F.

● 任务A抢占任务F的过程通过变迁t3t5表示;

● 任务B抢占任务F的过程通过变迁t9t13表示;

● 任务B抢占任务A的过程分为两种情况: 一是抢占通过与任务F竞争获得处理器c1执行的任务A, 这种情况通过变迁t7t11表示; 二是抢占通过抢占任务F获得处理器c1执行的任务A, 这种情况通过变迁t8t12表示.

对于共用处理器c0的任务C, DE, 它们的优先级关系为C > E > D.

● 任务E抢占任务D的过程通过变迁t19t22表示;

● 任务C抢占任务D的过程通过变迁t25t29表示;

● 任务C抢占任务E的过程同样分为两种情况: 一是抢占通过与任务D竞争获得处理器c0执行的任务E, 这种情况通过变迁t26t30表示; 二是抢占通过抢占任务D获得处理器c0执行的任务E, 这种情况通过变迁t27t31表示.

代表任务CF执行结束的库所(p19p25)获得token后会被清空(t23t32), 这意味着整个系统的所有任务执行完一次后不会结束而是周期性执行.

对于这样一个多核多任务实时系统, 我们可验证它与时间相关的一些设计需求, 例如要求任务D到任务C的延迟不得超过84 ms. 我们可以使用TCTL公式ϕ2=AG(p12AF≤84p25)来表示, 其中, p12意味着任务D启动, p25意味着任务C执行完毕. ϕ2有效意味着从任务D启动到任务C执行完毕的最长延迟时间不会超过84 ms. 首先, 我们用两个文本型文件分别描述图 5中的点区间优先级时间Petri网和公式ϕ2; 然后, 把这两个文件输入到我们的模型检测器; 最后, 我们的模型检测器自动输出验证结果(生成的状态图包含138个状态, 由于空间限制, 这里不再展示). 结果显示ϕ2无效. 实际上, 当我们把公式ϕ2中的84改为任意大于等于94的整数时, ϕ2就变得有效了. 然而, 把公式ϕ2中的84改为任意小于94的整数时, ϕ2仍然无效. 由于图 5中变迁的所有静态发生点区间值均为整型变量, 因此我们可以断定: 在系统周期性执行的过程中, 任务DC的最长延迟即为94 ms.

6 相关工作

除了本文提出的时间Petri网外, 据我们所知, 目前还有4种时间Petri网可模拟实时系统的抢占式调度机制, 即调度扩展时间Petri网(scheduling extended time Petri nets)[32, 33]、抢占式时间Petri网(preemptive time Petri nets)[34, 35]、带有抑制超弧的时间Petri网(time Petri nets with inhibitor hyperarcs)[36]和带有计时器的时间Petri网(time Petri nets with stopwatches)[37]. 调度扩展时间Petri网是在时间Petri网的库所上添加了资源和优先级, 由此从标识中区分出活跃的标识, 即一个标识对应一个活跃(active)标识. 一个变迁在一个标识下具有发生权但在其活跃标识下不具有发生权, 则意味着该变迁被挂起, 一个已挂起的变迁在一个活跃标识下具有发生权, 则意味着该变迁从挂起状态恢复到它挂起前的状态. 抢占式时间Petri网与之类似, 它在时间Petri网的变迁上添加了资源和优先级, 在一个标识下一个变迁具有发生权但同时和它共享某个资源且优先级更高的变迁也具有发生权, 则意味着该变迁被挂起, 一个已挂起的变迁在一个标识下不存在和它共享某个资源且优先级更高的变迁具有发生权, 则意味着该变迁从挂起状态恢复到它挂起前的状态. 带有抑制超弧的时间Petri网是在时间Petri网上添加了抑制超弧, 这些抑制超弧蕴含着资源的分配以及任务的优先级, 一个变迁在一个标识下具有发生权但同时存在一个抑制超弧抑制它的发生, 则意味着该变迁被挂起, 一个已挂起的变迁在一个标识下不存在一个抑制超弧抑制它的发生, 则意味着该变迁从挂起状态恢复到它挂起前的状态. 带有计时器的时间Petri网是在时间Petri网上添加了计时器弧, 这些计时器弧蕴含着资源的分配以及任务的优先级, 一个变迁在一个标识下具有发生权但同时存在着一个和它相关的计时器弧的前集库所为空, 则意味着该变迁被挂起, 一个已挂起的变迁在一个标识下所有和它相关的计时器弧的前集库所非空, 则意味着该变迁从挂起状态恢复到它挂起前的状态.

由于调度扩展时间Petri网和抢占式时间Petri网之间的相似性以及带有抑制超弧的时间Petri网和带有计时器的时间Petri网之间的相似性, 本文只选取抢占式时间Petri网和带有抑制超弧的时间Petri网来与本文定义的点区间优先级时间Petri网做对比. 如图 6所示: 对于图 4中的多核多任务实时系统, 图 6(a)用抢占式时间Petri网来模拟它, 图 6(b)用带有抑制超弧的时间Petri网来模拟它. 显然, 抢占式时间Petri网和带有抑制超弧的时间Petri网均无法显式地刻画资源的占用和释放过程, 因此它们自然不能作为模型来验证一些与资源相关的时间限制需求, 例如一个资源一旦被占用就必须在一个限定的时间内得到释放. 此外, 对于抢占式时间Petri网, 由于它在变迁上引入了资源和优先级两个参数, 导致变迁可发生的判定过程要比之前复杂, 从而影响了状态图的生成效率. 对于带有抑制超弧的时间Petri网, 它隐藏了资源分配和任务的优先级等信息, 这些参数需要建模者综合考虑, 然后在建模的时候通过抑制超弧隐式地反映出来. 例如在图 4中, 任务AB共用处理器c1且任务B的优先级高于任务A, 则在图 6(b)中, p3t2之间需要一个抑制超弧以实现t3具有发生权时立即挂起t2的目的. 由于t2代表任务A, t3代表任务B, 这意味着任务AB共享着某个资源且任务B的优先级高于任务A. 显然, 这样给建模者带来了很大的不便, 即使仅仅修改一个任务的优先级值, 就有可能需要重新定义抑制超弧.

图 6  

对于我们定义的点区间优先级时间Petri网, 首先, 它可以显式地刻画资源的占用和释放过程, 因此完全可以用来验证一些与资源相关的时间限制需求; 其次, 它在变迁上引入了优先级这一个参数, 使得变迁可发生的判定过程不会太复杂; 最后, 它通过直接给出优先级关系或优先级值来显式地反应变迁发生的优先级, 使得建模的工作量不至于过大. 注意: 我们定义的点区间优先级时间Petri网与以上4种时间Petri网相比有一个很明显的缺点, 即建模时出现的变迁数爆炸问题, 这也是图 5中的网结构没有图 6中的两个网结构简洁的主要原因. 例如在图 4中, 对于共用处理器c1的任务A, BF, 优先关系为B > A > F, 因此在图 5中表示任务F需要1个变迁, 表示任务A需要2个变迁, 表示任务B需要4个变迁. 以此类推, 对于共享资源的、具有不同优先级的多个任务, 表示它们需要的变迁数呈指数级增长. 对于以上4种时间Petri网来说, 任务和变迁通常是一一对应的. 这是由于抢占式调度机制会导致中断嵌套, 而点区间优先级时间Petri网精确模拟了这些中断嵌套过程, 因此才会有这样的结果.

7 结论

本文基于传统的优先级时间Petri网对多核多任务实时系统建模能力的不足, 提出了点区间优先级时间Petri网来模拟多核多任务实时系统. 结合TCTL模型检测, 设计了相应的算法并开发了相应的工具, 实现了对多核多任务实时系统的正确性验证. 我们下一步的工作主要从以下4个方面展开: (1) 优化我们定义的点区间优先级时间Petri网, 避免它建模时出现的变迁数爆炸问题; (2) 实现由多核多任务实时系统的任务依赖图自动生成它的点区间优先级时间Petri网; (3) 参考基于Petri网对CTL公式的简化方法[38], 思考基于点区间优先级时间Petri网对TCTL公式的简化方法; (4) 基于已知的结构化方法如虹吸和陷阱, 以及符号化方法如OBDD, 来缓解点区间优先级时间Petri网的状态爆炸问题.

致谢 本文中的应用实例参考了华为公司的孔辉老师所提供的一个多核多任务实时系统的真实案例, 但考虑其系统安全问题, 本文进行了修改, 并省略了相应任务的具体描述. 在此对孔辉老师表示感谢.

参考文献
[1]
Wang J, Zhan NJ, Feng XY, et al. Overview of formal methods. Ruan Jian Xue Bao/Journal of Software, 2019, 30(1): 33-61(in Chinese with English abstract). http://www.jos.org.cn/1000-9825/5652.htm [doi:10.13328/j.cnki.jos.005652]
[2]
Cui J, Duan ZH, Tian C, et al. Modeling and analysis of nested interrupt systems. Ruan Jian Xue Bao/Journal of Software, 2018, 29(6): 1670-1680(in Chinese with English abstract). http://www.jos.org.cn/1000-9825/5472.htm [doi:10.13328/j.cnki.jos.005472]
[3]
Li YN, Deng YX, Liu J. Formal modeling and verification of Paxos based on Coq. Ruan Jian Xue Bao/Journal of Software, 2020, 31(8): 2362-2374(in Chinese with English abstract). http://www.jos.org.cn/1000-9825/5690.htm [doi:10.13328/j.cnki.jos.005690]
[4]
Baier C, Katoen JP. Principles of Model Checking. MIT Press, 2008.
[5]
Clarke EM, Grumberg O, Kroening D, et al. Model Checking. MIT Press, 2018.
[6]
Cui J, Duan Z, Tian C, et al. A novel approach to modeling and verifying real-time systems for high reliability. IEEE Trans. on Reliability, 2018, 67(2): 481-493. [doi:10.1109/TR.2018.2806349]
[7]
Bouyer P, Fahrenberg U, Larsen KG, et al. Model checking real-time systems. In: Handbook of Model Checking. 2018. 1001-1046.
[8]
Dong W, Wang J, Qi ZC. Model checking for concurrent and real-time systems. Journal of Computer Research and Development, 2001, 38(6): 698-705(in Chinese with English abstract). https://www.cnki.com.cn/Article/CJFDTOTAL-JFYZ200106011.htm
[9]
Liu GJ, Jiang CJ, Zhou MC. Time-soundness of time Petri nets modelling time-critical systems. ACM Trans. on Cyber-physical Systems, 2018, 2(2): 1-27.
[10]
Liu GJ. Primary Unfolding of Petri Nets: A Model Checking Method for Concurrent Systems. Beijing: Science Press, 2020.
[11]
Alur R, Henzinger TA, Mang FY, et al. MOCHA: Modularity in model checking. In: Proc. of the Int'l Conf. on Computer Aided Verification. Springer-Verlag, 1998. 521-525.
[12]
Lomuscio A, Qu H, Raimondi F. MCMAS: An open-source model checker for the verification of multi-agent systems. Int'l Journal on Software Tools for Technology Transfer, 2017, 19(1): 9-30. [doi:10.1007/s10009-015-0378-x]
[13]
Vardi MY. An automata-theoretic approach to linear temporal logic. In: Proc. of the Logics for Concurrency. Springer-Verlag, 1996. 238-266.
[14]
Tao X, Li G. The complexity of linear-time temporal logic model repair. In: Proc. of the Int'l Workshop on Structured Object- oriented Formal Language and Method. Springer-Verlag, 2017. 69-87.
[15]
Clarke EM, Emerson EA. Design and synthesis of synchronization skeletons using branching time temporal logic. In: Proc. of the Workshop on Logic of Programs. Springer-Verlag, 1981. 52-71.
[16]
Alur R, Henzinger TA, Kupferman O. Alternating-Time temporal logic. In: Proc. of the Int'l Symp. on Compositionality. Springer- Verlag, 1997. 23-60.
[17]
Hu L, Liu Z, Hu W, et al. Petri-net-based dynamic scheduling of flexible manufacturing system via deep reinfor- cement learning with graph convolutional network. Journal of Manufacturing Systems, 2020, 55: 1-14. [doi:10.1016/j.jmsy.2020.02.004]
[18]
Fauzan AC, Sarno R, Yaqin MA. Performance measurement based on coloured Petri net simulation of scalable business processes. In: Proc. of the 4th Int'l Conf. on Electrical Engineering, Computer Science and Informatics. IEEE, 2017. 1-6.
[19]
Lu F, Tao R, Du Y, et al. Deadlock detection-oriented unfolding of unbounded Petri nets. Information Sciences, 2019, 497: 1-22. [doi:10.1016/j.ins.2019.05.021]
[20]
Merlin PM, Farber DJ. Recoverability of communication protocols implications of a theoretical study. IEEE Trans. on Communica- tions, 1976, 24(9): 1036-1043. [doi:10.1109/TCOM.1976.1093424]
[21]
Berthomieu B, Diaz M. Modeling and verification of time dependent systems using time Petri nets. IEEE Trans. on Software Engineering, 1991, 17(3): 259-273. [doi:10.1109/32.75415]
[22]
Liu F, Zhang H. A class of extended time Petri nets for modeling and simulation of discrete event systems. Simulation, 2018, 94(8): 753-762. [doi:10.1177/0037549717742716]
[23]
Foyo PM, Silva JR. Some issues in real-time systems verification using time Petri Nets. Journal of the Brazilian Society of Mecha- nical Sciences and Engineering, 2011, 33: 467-474. [doi:10.1590/S1678-58782011000400010]
[24]
Alur R, Courcoubetis C, Dill D. Model-checking for real-time systems. In: Proc. of the 5th Annual IEEE Symp. on Logic in Computer Science. IEEE, 1990. 414-425.
[25]
Henzinger TA, Nicollin X, Sifakis J, et al. Symbolic model checking for real-time systems. Information and Computation, 1994, 111(2): 193-244. [doi:10.1006/inco.1994.1045]
[26]
Hadjidj R, Boucheneb H. On-the-fly TCTL model checking for time Petri net using state class graphs. In: Proc. of the 6th Int'l Conf. on Application of Concurrency to System Design. IEEE, 2006. 111-122.
[27]
Hadjidj R, Boucheneb H. On-the-fly TCTL model checking for time Petri nets. Theoretical Computer Science, 2009, 410(42): 4241-4261. [doi:10.1016/j.tcs.2009.06.019]
[28]
Boucheneb H, Gardey G, Roux OH. TCTL model checking of time Petri nets. Journal of Logic and Computation, 2009, 19(6): 1509-1540. [doi:10.1093/logcom/exp036]
[29]
Berthomieu B, Peres F, Vernadat F. Bridging the gap between timed automata and bounded time Petri nets. In: Proc. of the Int'l Conf. on Formal Modeling and Analysis of Timed Systems. Springer-Verlag, 2006. 82-97.
[30]
Berthomieu B, Peres F, Vernadat F. Model checking bounded prioritized time Petri nets. In: Proc. of the Int'l Symp. on Automated Technology for Verification and Analysis. Springer-Verlag, 2007. 523-532.
[31]
Reisig W. Understanding Petri Nets: Modeling Techniques, Analysis Methods, Case Studies. Springer-Verlag, 2013.
[32]
Roux OH, Déplanche AM. A T-time Petri net extension for real time-task scheduling modeling. European Journal of Automation, 2002, 36(7): 973-987.
[33]
Lime D, Roux OH. Expressiveness and analysis of scheduling extended time Petri nets. IFAC Proc. Volumes, 2003, 36 (13): 189-197.
[34]
Bucci G, Fedeli A, Sassoli L, et al. Modeling flexible real time systems with preemptive time Petri nets. In: Proc. of the 15th Euromicro Conf. on Real-time Systems. IEEE, 2003. 279-286.
[35]
Bucci G, Fedeli A, Sassoli L, et al. Timed state space analysis of real-time preemptive systems. IEEE Trans. on Software Engineering, 2004, 30(2): 97-111.
[36]
Roux OH, Lime D. Time Petri nets with inhibitor hyperarcs: Formal semantics and state space computation. In: Proc. of the Int'l Conf. on Application and Theory of Petri Nets. Springer-Verlag, 2004. 371-390.
[37]
Berthomieu B, Lime D, Roux OH, et al. Reachability problems and abstract state spaces for time Petri nets with stopwatches. Discrete Event Dynamic Systems, 2007, 17(2): 133-158.
[38]
Bønneland F, Dyhr J, Jensen PG, et al. Simplification of CTL formulae for efficient model checking of Petri nets. In: Proc. of the Int'l Conf. on Applications and Theory of Petri Nets and Concurrency. Springer-Verlag, 2018. 143-163.
[1]
王戟, 詹乃军, 冯新宇, 等. 形式化方法概貌. 软件学报, 2019, 30(1): 33-61. http://www.jos.org.cn/1000-9825/5652.htm [doi:10.13328/j.cnki.jos.005652]
[2]
崔进, 段振华, 田聪, 等. 一种嵌套中断系统的建模和分析方法. 软件学报, 2018, 29(6): 1670-1680. http://www.jos.org.cn/1000-9825/5472.htm [doi:10.13328/j.cnki.jos.005472]
[3]
李亚男, 邓玉欣, 刘静. 基于Coq的Paxos形式化建模与验证. 软件学报, 2020, 31(8): 2362-2374. http://www.jos.org.cn/1000-9825/5690.htm [doi:10.13328/j.cnki.jos.005690]
[8]
董威, 王戟, 齐治昌. 并发和实时系统的模型检验技术. 计算机研究与发展, 2001, 38(6): 698-705. https://www.cnki.com.cn/Article/CJFDTOTAL-JFYZ200106011.htm
[10]
刘关俊. Petri网的元展: 一种并发系统模型检测方法. 北京: 科学出版社, 2020.