嵌入式微内核实时操作系统分析与测试
分配给符合条件的任务使用。约束规则又称为调度算法。Wolf内核采用多种调度算法分配CPU给处于Ready态(就绪态)的任务。默认基于优先级的抢占式调度算法,也支持基于时间片的轮转(Round-Robin)调度算法。在嵌入式系统实时应用中,不是每次抢占都是合理的,非期待的抢占会导致系统出现无法预料的情况,Woif提供允许和禁止调度的功能调用实现禁止抢占机制。
(2)任务通信、同步、互斥机制
任务间通信机制是提供多任务间相互同步和通信,以协调独立任务之间活动的机制。
①共享内存,提供数据共享。Woif采用简单快速的禁止中断手段保证共享数据被互斥访问②消息队列实现一CPU内多任务间通信和同步。Woif提供消息队列函数库创建、删除、发送消息,消息队列是动态建立的抽象对象,不绑定于任务一个任务。
3微内核测试设计方案
设计嵌入式操作系统软件测试方案时,我们根据系统分析的基本思想,定用判定表、功能矩阵将其划分成状态测试、系统调用功能测试。
(1)多任务状态测试
下面运用判定表设计状态转移测试用例。首先确定状态转移活动(5类活动):
①运行态到阻塞态E→B;
②阻塞态到就绪态B→R;
③阻塞态到运行态B→E;
④就绪态到就绪态E→R。
⑤执行态到就绪态E→R。
然后列出不同活动必须遵守的状态转换规则并编号。这里编号形式定义为:具体活动编号+数字序列编号。例如:用转换规则编号③2,表明该规则是活动3必须遵守的第2条规则。
以下是部分转换规则。
◇一个运行态的任务E变成阻塞态B(E→B):
①,它从一个空消息队列中请求一个消息;或者②,它等待一个不会即将发生的事件条件;或者③,它请求一个当前不能提供的信号量标志;或者④,它请求一段目前不能提供的内存;或者⑤,它暂中止一个时间段或直到一个特殊的时刻。
◇一个阻塞态的任务B变成就绪态R(B→R):
①,B是消息等待队列中的第一个任务,它等待的消息来到消息队列中;或者②,一个事件发送给了B,满足了它一直等待的事件的条件;或者③,一个信号量标志被返回,B是等待队列中的第一个;或者④,返还的内存区允许分配给B;或者⑤,B一直在超时等待一个事件、消息、信号量或一个内存段(当超过时间间隔)。
◇一个阻塞态的任务B变成运行态(B→E):
任何一个(B→R)任务条件满足,该任务运行优先级就高于运行态任务,这个运行态任务是能被抢先的。
◇一个就绪态的任务R会变成运行态任务(R→E),在当前运行态任务是:
①阻塞;或者②,可抢占。R有较高的优先级。
◇一个运行态的任务R会变成就绪态任务(E→R),当:
①任何一个阻塞状态的任务B满足了(E→R)的发生条件(由于当前E或一个ISR系统调用);或者②,满足(R→E)的2至4条件中的任何一个条件发生。
最后,确定判定条件,建立判定表。这里有3个判定条件:当前状态是E,或当前状态是B,或当前状态是R。如满足对应规则,则填写“Y”,不满足对应规则,则填写“N”。如果在判定条件的规则下,进行的活动正确,则用“√”确认,错误用“×”确认,尚未测试用“□”确认,无关用“⊙”确认。
表1为任务状态判定表(部分)。
表1任务状态判定表(部分)
条件①1①2①3①4①5②1②2②3②4②5当前状态EYYYYYNNNNN当前状态BNNNNNYYYYY当前状态RNNNNNNNNNN①E→B√√√√√⊙⊙⊙⊙⊙②B→R⊙⊙⊙⊙⊙√√√√√③B→E⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙④R→E⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⑤E→R⊙⊙⊙⊙⊙×××××
表1显示了测试活动1和活动2的正确性。其中满足条件2的活动有2个,即活动2和活动5,但由于活动5并支持对应的规则,所以结果用“×”标示。
由表1可以看出,使用判定表明晰测试覆盖,能保持测试的完备性和一致性。
(2)多任务功能测试
首先,分析Wolf的微内核功能,将其划分成3个测试功能域:
①面向应用层的高级系统服务(调用)测试域。Wolf为应用层提供丰富的系统调用函数,将其细分为操作系统服务类、内存服务类、文件系统服务类、I/O服务类及调试平台服务5类。
②面向内核的多任务调度测试、任务通信测试及内存测试域。
③面向低层硬件的设备 《嵌入式微内核实时操作系统分析与测试(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/165676.html
(2)任务通信、同步、互斥机制
任务间通信机制是提供多任务间相互同步和通信,以协调独立任务之间活动的机制。
①共享内存,提供数据共享。Woif采用简单快速的禁止中断手段保证共享数据被互斥访问②消息队列实现一CPU内多任务间通信和同步。Woif提供消息队列函数库创建、删除、发送消息,消息队列是动态建立的抽象对象,不绑定于任务一个任务。
3微内核测试设计方案
设计嵌入式操作系统软件测试方案时,我们根据系统分析的基本思想,定用判定表、功能矩阵将其划分成状态测试、系统调用功能测试。
(1)多任务状态测试
下面运用判定表设计状态转移测试用例。首先确定状态转移活动(5类活动):
①运行态到阻塞态E→B;
②阻塞态到就绪态B→R;
③阻塞态到运行态B→E;
④就绪态到就绪态E→R。
⑤执行态到就绪态E→R。
然后列出不同活动必须遵守的状态转换规则并编号。这里编号形式定义为:具体活动编号+数字序列编号。例如:用转换规则编号③2,表明该规则是活动3必须遵守的第2条规则。
以下是部分转换规则。
◇一个运行态的任务E变成阻塞态B(E→B):
①,它从一个空消息队列中请求一个消息;或者②,它等待一个不会即将发生的事件条件;或者③,它请求一个当前不能提供的信号量标志;或者④,它请求一段目前不能提供的内存;或者⑤,它暂中止一个时间段或直到一个特殊的时刻。
◇一个阻塞态的任务B变成就绪态R(B→R):
①,B是消息等待队列中的第一个任务,它等待的消息来到消息队列中;或者②,一个事件发送给了B,满足了它一直等待的事件的条件;或者③,一个信号量标志被返回,B是等待队列中的第一个;或者④,返还的内存区允许分配给B;或者⑤,B一直在超时等待一个事件、消息、信号量或一个内存段(当超过时间间隔)。
◇一个阻塞态的任务B变成运行态(B→E):
任何一个(B→R)任务条件满足,该任务运行优先级就高于运行态任务,这个运行态任务是能被抢先的。
◇一个就绪态的任务R会变成运行态任务(R→E),在当前运行态任务是:
①阻塞;或者②,可抢占。R有较高的优先级。
◇一个运行态的任务R会变成就绪态任务(E→R),当:
①任何一个阻塞状态的任务B满足了(E→R)的发生条件(由于当前E或一个ISR系统调用);或者②,满足(R→E)的2至4条件中的任何一个条件发生。
最后,确定判定条件,建立判定表。这里有3个判定条件:当前状态是E,或当前状态是B,或当前状态是R。如满足对应规则,则填写“Y”,不满足对应规则,则填写“N”。如果在判定条件的规则下,进行的活动正确,则用“√”确认,错误用“×”确认,尚未测试用“□”确认,无关用“⊙”确认。
表1为任务状态判定表(部分)。
表1任务状态判定表(部分)
条件①1①2①3①4①5②1②2②3②4②5当前状态EYYYYYNNNNN当前状态BNNNNNYYYYY当前状态RNNNNNNNNNN①E→B√√√√√⊙⊙⊙⊙⊙②B→R⊙⊙⊙⊙⊙√√√√√③B→E⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙④R→E⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⑤E→R⊙⊙⊙⊙⊙×××××
表1显示了测试活动1和活动2的正确性。其中满足条件2的活动有2个,即活动2和活动5,但由于活动5并支持对应的规则,所以结果用“×”标示。
由表1可以看出,使用判定表明晰测试覆盖,能保持测试的完备性和一致性。
(2)多任务功能测试
首先,分析Wolf的微内核功能,将其划分成3个测试功能域:
①面向应用层的高级系统服务(调用)测试域。Wolf为应用层提供丰富的系统调用函数,将其细分为操作系统服务类、内存服务类、文件系统服务类、I/O服务类及调试平台服务5类。
②面向内核的多任务调度测试、任务通信测试及内存测试域。
③面向低层硬件的设备 《嵌入式微内核实时操作系统分析与测试(第2页)》