实时操作系统中的任务调度方法及系统的制作方法

文档序号:6613994阅读:174来源:国知局
专利名称:实时操作系统中的任务调度方法及系统的制作方法
技术领域
本发明涉及实时操作系统,尤其涉及一种实时操作系统中的任务调度方 法及系统。
背景技术
实时操作系统是一种能够在指定或者确定时间内完成系统功能,并且对 外部和内部事件在同步或者异步时间内能做出及时响应的系统。在实时操作
系统中,操作的正确性不仅依赖于逻辑设计的正确程度,而且与这些操作运 行的时间有关,也就是说,实时系统对逻辑和时序的要求非常严格,如果逻 辑和时序控制出现偏差,则将会产生严重后果。
为了提供对于实时性的支持,实时操作系统必须对CPU和其他资源进
行有效的调度和管理,即实时调度。实时操作系统中各任务(该任务可以是 线程)的状态主要有就绪状态、运行状态、等待状态、中断状态和休眠状态。 其中,由于休眠状态比较少有,因此不再详述,图l示出了其它各状态之间 的转换关系,如图l所示,就绪状态会向运行状态转换、运行状态中会出现 中断状态,中断状态结束后会返回运行状态,运行状态结束后进行等待状态, 等待状态再向就绪状态进行转换。
具体进行任务调度时,可基于抢占点进行任务的调度,即在抢占点上进
行任务的切换调度。其中,抢占点主要有(l)按照规定的时间间隔设置抢占 点,即一般情况下根据操作系统的定时器(Tick)的时钟节拍,也即操作系 统的心脏进行设置,每隔一定的时间(一般为几毫秒)中断一次,则操作系 统内核会将当前运行的任务延时整数个时钟节拍,此时即出现任务调度的抢 占点;(2)某个任务主动放弃CPU (通常为任务运行完所要处理的事情时,
主动放弃CPU,进入延时队列)时,出现任务调度的抢占点;(3)某个任务 因需要资源而资源没有得到时被迫挂起,出现任务调度的抢占点;(4)操作系 统支持时间片运转时,时间片用完时出现任务调度的抢占点;(5)发生中断, 进行中断程序后出现任务调度的抢占点。
实时性是实时操作系统内核最重要的特性之一。因此,在实时操作系统 中, 一个好的调度方法对实时系统是非常重要的。
通常情况下,实时操作系统内核支持多个优先级任务,并且每个优先级 下有多个任务。不同优先级任务支持抢占式调度,现有技术中的调度方法是 按照优先级由高到低的顺序逐次检索进入就绪状态的任务,将检索到的任务 进行调度。但该调度方法中,当优先级的级别较多,且只有较低优先级的任 务进入就绪状态时,进行调度时的检索工作量较大,降低了实时性。

发明内容
有鉴于此,本发明中一方面提供一种嵌入式实时系统中的任务调度方 法,另 一方面提供一种嵌入式实时系统中的任务调度系统,以便提高实时性。 本发明所提供的嵌入式实时系统中的任务调度方法,包括 为N个优先级中的每个优先级设置优先级链表,将每个优先级链表的首地 址存放于对应该优先级的数组元素中;
进行连接;
从N个优先级中确定存在就绪状态任务的最高优先级; 通过所述最高优先级对应的数组元素中存放的所述首地址,调用所述最高 优先级对应的优先级链表中的第 一个任务; 其中,N为大于1的整数。
其中,从N个优先级中确定存在就绪状态任务的最高优先级之前,进一步 包括
按照优先级的高低顺序将N个优先级划分为n个级别互不相同的组,每个组中至多包括m个优先级,且高优先级对应高级别的组;其中,N《mxn;
为每个组设置包括m个比特的组员信息,所述每个组员信息中的各比特与 该组中的各优先级相对应,用于指示对应优先级是否存在就绪状态任务;
设置包括n个比特的组信息,所述组信息中的每个比特与各个组相对应, 用于指示对应组中是否包含有就绪状态任务的优先级;
根据任务的优先级及当前状态设置所述组信息和组员信息; 所述从N个优先级中确定存在就绪状态任务的最高优先级包括根据所述 组信息的取值,确定包含有就绪状态任务的优先级的最高级别组;根据所述最 高级别组对应的组员信息的取值,确定N个优先级中存在就绪状态任务的最高 优先级。
较佳地,所述组信息和组员信息分别用整数个字节表示,且表示所述组信 息的字节中低位比特对应高级别组,表示所述组员信息的字节中低位比特对应 高优先级;
所述根据任务的优先级及当前状态设置所述组信息和组员信息为在任务 的当前状态为就绪状态时,将组员信息中所述任务的优先级对应的比特置位, 在组员信息中存在置位的比特时,将组信息中所述组员信息的组对应的比特置 位;
该方法进一步包括设置通过字节的取值查找字节中被置位的最低位比特 的序号的查找表函数;
所述根据组信息的取值,确定包含有就绪状态任务的优先级的最高级别组 为以所述组信息的取值为索引,调用所述查找表函数,得到包含有就绪状态 任务的优先级的最高级别组对应的比特序号,根据所述比特序号确定所述最高 级别组;
所述根据所述最高级别组对应的组员信息的取值,确定N个优先级中存在 就绪状态任务的最高优先级为以所述最高级别组对应的組员信息的取值为索 引,调用所述查找表函数,得到该最高级别组中存在就绪状态任务的最高优先 级对应的比特序号,根据得到的所述最高级别组中的所述最高优先级对应的比
特序号及所述最高级别组对应的比特序号,确定N个优先级中存在就绪状态任 务的最高优先级。
较佳地,n个组的组员信息通过一个数组表示。
其中,所述优先级链表为单向链表或双向链表。
專交佳地,所述m为8。 较佳地,所述N^64。
本发明所提供的嵌入式实时系统中的任务调度系统,包括 优先级链表模块,用于为N个优先级中的每个优先级设置优先级链表,并
连接;其中,N为大于1的整数;
数组模块,用于设置对应优先级的数组,将每个优先级链表的首地址存放 于对应该优先级的数组元素中;
优先级确定模块,用于从N个优先级中确定存在就绪状态任务的最高优先
级;
调度模块,用于通过所述最高优先级对应的数组元素中存放的所述首地址, 调用所述最高优先级对应的优先级链表中的第一个任务。 较佳地,该系统进一步包括
分组模块,用于按照优先级的高低顺序将N个优先级划分为n个级别互不 相同的组,每个组中至多包括m个优先级,且高优先级对应高级别的组;其中, N < m x n;
组员信息模块,用于为每个组设置包括m个比特的组员信息,所述每个组 员信息中的各比特与该组中的各优先级相对应,用于指示对应优先级是否存在 就绪状态任务;
组信息模块,用于设置包括n个比特的组信息,所述组信息中的每个比特 与各个组相对应,用于指示对应组中是否包含有就绪状态任务的优先级;
信息设置模块,用于根据任务的优先级及当前状态设置所述组信息和组员 信息;
所述优先级确定模块包括
最高级别组确定模块,用于根据所述设置后的组信息的取值,确定包含有
就绪状态任务的优先级的最高级别组;
最高优先级确定模块,用于根据所述最高级别组对应的所述设置后的组员 信息的取值,确定N个优先级中存在就绪状态任务的最高优先级。
较佳地,所述组信息和组员信息分别用整数个字节表示,且表示所述组信 息的字节中低位比特对应高级别组,表示所述组员信息的字节中低位比特对应 高优先级;
所述信息设置模块在任务的当前状态为就绪状态时,将组员信息中所述任 务的优先级对应的比特置位,在组员信息中存在置位的比特时,将组信息中所 述组员信息的组对应的比特置位;
所述优先级确定模块进一步包括查找表函数模块,用于设置通过字节的 取值查找字节中被置位的最低位比特的序号的查找表函数;
所述最高级别组确定模块以所述组信息的取值为索引,调用所述查找表函 数,得到包含有就绪状态任务的优先级的最高级别组对应的比特序号,根据所 述比特序号确定所述最高级别组;
所述最高优先级确定模块以所述最高级别组对应的组员信息的取值为 索引,调用所述查找表函数,得到该最高级别组中存在就绪状态任务的最高 优先级对应的比特序号,根据得到的所述最高级别组中的所述最高优先级对 应的比特序号及所述最高级别组对应的比特序号,确定N个优先级中存在 就绪状态任务的最高优先级。
从上述方案可以看出,本发明通过为N个优先级中的每个优先级设置 优先级链表,并将每个优先级链表的首地址存放于对应该优先级的数组元素
级链表进行连接,从而使得直接根据数组的下标,即数组元素本身便可找到 对应优先级的第一个任务,则需要进行调度时,只需从N个优先级中确定 存在就绪状态任务的最高优先级即可,之后通过所确定的最高优先级对应的数组元素中存放的优先级链表的首地址,直接调用该最高优先级对应的优先 级链表中的第一个任务,从而完成任务的快速调度,提高了实时性。
此外,为了快速的从N个优先级中确定存在就绪状态任务的最高优先
级,可将优先级进行划分,将N个优先级分为n个级别互不相同的组,为 所划分的组设置二级查找算法,即先查找有就绪状态任务的优先级的最高级 别组,在从该最高级别组中查找存在就绪状态任务的优先级,从而加快了确 定存在就绪状态任务的最高优先级的速度,进一步提高了实时性。
最后,为了更快的进行二级查找算法,可事先设置索引值与结果对应的 用于快速查找的查找表函数,通过在进行调度时,根据索引值调用查找表函 数,直接得到对应结果,从而进一步加快了确定存在就绪状态任务的最高优 先级的速度,并且进一步提高了实时性。


图1为本发明实施例中实时操作系统中的任务调度方法的示例性流程
图2为本发明实施例中设置的数组及双向链表的结构示意图3为本发明实施例中优先级的一种表示示意图4为本发明实施例中实时操作系统中的任务调度系统的示例性结构图。
具体实施例方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和 附图,对本发明进一步详细说明。
图1为本发明实施例中实时操作系统中的任务调度方法的示例性流程 图。如图l所示,该流程包括如下步骤
步骤IOI,为N个优先级中的每个优先级设置优先级链表,并根据优先
级的个数N设置对应优先级的数组,将每个优先级链表的首地址存放于对
应该优先级的数组元素中,并基于先进先出的原则将每个优先级的任务通过 对应该优先级的优先级链表进行连接。其中,N为大于l的整数。
由于在同 一个优先级中存在许多个相同优先级的任务,因此可为每个优 先级设置优先级链表,该优先级链表可以是单向链表,也可以是双向链表。 本实施例中假设为双向链表,则相同优先级的任务基于先入先出的原则通过 对应该优先级的双向链表连接,只要找到链表中的第一个任务或最后一个任 务,就能够找到其他的任务。
此外,由于同等优先级的任务通常根据时间片进行调度,则基于先进先 出的原则时,同等优先级链表中的第一个任务总是被先调用, 一旦第一个任 务的时间片用完,就把链表中的第一个任务放在链表的最后面,接着第二个 任务运行。本实施例中为了快速的查找到链表的第一个任务,根据优先级的 个数N设置对应优先级的数组,数组的大小大于等于优先级的个数N,并将 每个优先级链表的首地址,如头指针存放于对应该优先级的数组元素中,则 根据数组的下标,即数组元素本身便可找到对应优先级的第一个任务。
本实施例中,设置的数组及双向链表的结构可如图2所示,假设优先级 共有N个,则数组的大小可设置为N,并且数组的各元素分别存放对应优先 级链表的首地址,图2中以存放头指针的情况为例,假设数组用数组名 "OSReadyListHeader "表示,则第 一 个数组元素(即下标为0的元素 OSReadyListHeader[O])指向优先级0的链表指针头,第二个数组元素(即 下标为1的元素OSReadyListHeader[l])指向优先级1的链表指针头,……, 第N个数组元素(即下标为N-l的元素OSReadyListHeader[N-l])指向优先 级N-1的链表指针头。每个优先级链表中连接有该同优先级的各任务,如图 示中,优先级0包括nl个任务,优先级1包括n2个任务,……,优先级N 包括n (N-l)个任务。
步骤102,从N个优先级中确定存在就绪状态任务的最高优先级,通过 所述最高优先级对应的数组元素中存放的优先级链表的首地址,调用所述最 高优先级对应的优先级链表中的第一个任务。
本步骤中,从N个优先级中确定存在就绪状态任务的最高优先级时, 可以按照优先级的高低顺序,依次查找优先级链表的第一个任务,在该第一 个任务的状态为就绪状态时,通过调用该优先级对应的数组元素中存放的优 先级链表的首地址,实现调用该优先级对应的优先级链表中的第一个任务。
此外,为了进一步加快从N个优先级中确定存在就绪状态任务的最高 优先级的速度,还可预先将N个优先级进行分组,并设置二级查找算法。 具体实现时,可按照优先级的高低顺序将N个优先级划分为n个级别互不 相同的组,且高优先级对应高级别的组,低优先级对应低级别的组。其中, 每m个优先级为一个组,N《mxn。
为每个组设置包括m个比特的组员信息,则每个组员信息中的各比特与该 组中的各优先级相对应,用于指示对应优先级是否存在就绪状态任务;再设置 包括n个比特的组信息,则组信息中的每个比特与各个组相对应,用于指示对 应组中是否包含有就绪状态任务的优先级。其中,组信息和组员信息可分别用 整数个字节表示,或者二者公用部分字节,或者二者分别和其他信息公用部分 字节,又或者通过其他方式表示。
本实施例中,以组信息和组员信息可分别用整数个字节表示的情况为 例,并且假设表示组信息的字节中低位比特对应高级别组,表示组员信息的 字节中低位比特对应高优先级。如图3所示,图3中示出了N为64, m为 8, n为8时优先级的一种表示示意图,图3中,将64个优先级按照从高到 低的顺序划分为8个级别组,即第0组至第7组,其中,第O组包括第O至 第7个优先级,即8个组中的最高级别组,第1组包括第8至第15个优先 级,即8个组中的次高级别组,以此类推,第7组包括第56至第63个优先 级,即8个组中最低级别组。这8个组构成的组信息可用一个字节表示,该 字节可命名为OSReadyGroup,贝'j OSReadyGroup的每个比特分别对应一个 组,如图3中所示,OSReadyGroup的第0个比特对应第0组,第1个比特 对应第l组,以此类推,第7个比特对应第7组。此外,可将8个组的组员 信息通过一个数组OSReadyTable[8]表示,其中,OSReadyTable
用于指示第0组的组员信息,OSReadyTable[l]用于指示第l组的组员信息,以此类 推,OSReadyTable[7]用于指示第7组的组员信息。
其中,OSReadyGroup中的每一个比特用于表示8组中的每一组中是否 有进入就绪状态的任务。当任务进入就绪状态时,OSReadyTable[]中的相应
图3所示优先级的表示关系,可根据任务的优先级及当前状态设置上述组信 息和组员信息。操作系统最重要的一个功能是为用户提供多任务,就是一个 CPU上用户能够同时响应多个任务,因此在操作系统启动过程中会创建多个 任务,或者也可以用户动态的创建任务,在实时搡作系统中,任务必须要分 配一个优先级,则在任务的当前状态为就绪状态时,将组员信息中该任务的 优先级对应的比特置位(如置l),在组员信息中存在置位的比特时,将组 信息中该组员信息的组对应的比特置位(如置l)。
例如,当OSReadyTable [O]中的任何一个比特是1时,OSReadyGroup 的第0个比特置1;
当OSReadyTable [l]中的任何一个比特是1时,OSReadyGroup的第1 个比特置1;
当OSReadyTable [2]中的任何一个比特是1时,OSReadyGroup的第2 个比特置1;
当OSReadyTable [3]中的任何一个比特是1时,OSReadyGroup的第3 个比特置1;
当OSReadyTable [4]中的任何一个比特是1时,OSReadyGroup的第4 个比特置1;
当OSReadyTable [5]中的任何一个比特是1时,OSReadyGroup的第5 个比特置1;
当OSReadyTable [6]中的任何一个比特是1时,OSReadyGroup的第6
个比特置1;
当OSReadyTable [7]中的任何一个比特是1时,OSReadyGroup的第7
个比特置1。
之后,可根据组信息的取值,确定包含有就绪状态任务的优先级的最高 级别组,根据所述最高级别组对应的组员信息的取值,确定N个优先级中 存在就绪状态任务的最高优先级。
例如,在OSReadyGroup中找到包含有就绪状态任务的优先级的最高级 别组,如OSReadyGroup中第1 , 3, 5个比特都置了位,则确定当前任务中 第1组为包含有就绪状态任务的优先级的最高级别组,查找 OSReadyTable[l]。此时,如果OSReadyTable[l]中的第2, 4, 6个比特置了 位,那么说明该级别组中的最高优先级是OSReadyTable[l]的第2位,则总 的64个优先级中存在就绪状态任务的最高优先级优先级是1 x 8+2=10,相 当于进行了 二级索引进行任务的查找。
具体实现时,可对组信息及组员信息按位进行编码,通过解析对应的编 码,得到相应比特是否被置位,从而确定该比特对应的信息情况。或者,也 可将表示组信息及表示组员信息的字节通过字节的取值计算其各比特的置 位情况,或者最低比特的置位情况。或者,还可以采用其他方法进行确定。
此外,为了进一步加快确定速度,可预先设置一个通过字节的取值查找 字节中被置位的最低位比特的序号的查找表函数。则具体实现时,可以组信 息的取值为索引,调用所述查找表函数,得到包含有就绪状态任务的优先级 的最高级别组对应的比特序号,根据所述比特序号确定所述最高级别组;之 后,以所述最高级别组对应的组员信息的取值为索引,调用所述查找表函数, 得到该最高级别组中存在就绪状态任务的最高优先级对应的比特序号,根据 得到的所述最高级别组中的所述最高优先级对应的比特序号及所述最高级 别组对应的比特序号,确定N个优先级中存在就绪状态任务的最高优先级。
仍以图3所示优先级的表示情况为例,则可设置如下所示的查找表函 数,即Byte OSM叩Table[256h
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
4,0,1,o,2,0,1,o,3,0,1,0, 2,0,1,0,
5,0,1,o,2,o,1,o,3,0,1,0, 2,0,1,0,
4,0,1,o,2,o,1,o,3,o,1,0, 2,0,1,0,
6,0,1,o,2,o,1,o,3,o,1,0, 2,0,1,o,
4,0,1,o,2,o,1,o,3,o,1,0, 2,0,1,o,
5,0,1,o,2,o,1,o,3,o,1,0, 2,0,1,o,
4,0,1,o,2,o,1,o,3,o,1,0, 2,0,1,o,
7,o,1,o,2,o,1,o,3,o,1,0, 2,0,1,o,
4,o,1,o,2,o,1,o,3,o,1,0, 2,0,1,o,
5,o,1,o,2,o,1,o,3,o,1,0, 2,0,1,o,
4,o,1,o,2,o,1,o,3,o,1,0, 2,0,1,o,
6,o,1,o,2,o,1,o,3,o,1,0, 2,0,1,o,
4,o,1,o,2,o,1,o,3,o,1,0, 2,0,1,o,
5,o,1,o,2,o,1,o,3,o,1,0, 2,0,1,o,
4,o,1,o,2,o,1,o,3,o,1,0, 2,0,1,0
即当字节的取值为1时,该字节的第0个比特被置位;当字节的取值 为2时,该字节的第1个比特被置位;当字节的取值为3时,该字节的第0 个比特被置位;当字节的取值为4时,该字节的第2个比特被置位;以此类 推;当字节的取值为255时,该字节的第0个比特被置位。
则应用该查找表函数,确定N个优先级中存在就绪状态任务的最高优 先级的计算公式可如下所示
y = OSMapTable[OSReadyGroup];得到一级的优先级,即级别组。
x = OSMapTable[OSReadyTable[y]];即在一级的优先级组中找到二级的 优先级;
则N个优先级中存在就绪状态任务的最高优先级TaskPrio = y x 8+x; 最后算出总的被调用优先级。
对于上面的例子中OSReadyGroup中1 , 3 , 5位都置了位,则 OSReadyGroup=42,那么y=OSMapTable[42]=l 。
又有xOSMapTable[OSReadyTable[ 1 ]]=OSMapTable[84]=2。
贝寸TaskPrio=y*8+x=10。
图3中仅示出了 N-mxn的情况,实际应用中,当N〈mxn时,剩余的 mxn-N个比特可为预留比特,用作其他扩展。例如,若共有63个优先级,
则若每8个优先级为一组,则共分为8组,若每组的组员信息用一个字节表 示,则会有一个字节的8个比特位中只能对应7个优先级,相应地,剩余的 一个比特位可作为预留比特位;同样若共有56个优先级,则若每8个优先 级为一组,则共分为7组,若组信息用一个字节表示,则该字节的8个比特 位中只能对应7个组,相应地,剩余的一个比特位可作为预留比特位。
此外,本实施例的技术方案对于N大于64的情况同样适用,例如当N 为128时,则m可为8, n为16,相应的组员信息用 一个字节表示,组信息 用两个字节表示;或者,m可为16, n为8,相应的组员信息用两个字节表 示,组信息用一个字节表示。同样,当N小于128时,可设置预留位。
以上对本发明实施例实时操作系统中的任务调度方法进行了详细描述, 下面再对本发明实施例中实时操作系统中的任务调度系统进行详细描述。
图4示出了本发明实施例中实时操作系统中的任务调度系统的示例性 结构图。如图4中的实线部分所示,该系统包括优先级链表模块、数组模 块、优先级确定模块和调度模块。
其中,优先级链表模块用于为N个优先级中的每个优先级设置优先级链表,
行连接;其中,N为大于l的整数。
数组模块用于设置对应优先级的数组,将每个优先级链表的首地址存放于 对应该优先级的数组元素中。
优先级确定模块用于从N个优先级中确定存在就绪状态任务的最高优先级。
调度模块用于通过所述最高优先级对应的数组元素中存放的首地址,调 用所述最高优先级对应的优先级链表中的第 一 个任务。
具体实现时,上述各模块的操作过程可与图1所示流程中描述的操作过 程一致。相应地,如图4中的虚线部分所示,该系统还可包括分组模块、 组员信息模块、组信息模块和信息设置模块。
其中,分组模块,用于按照优先级的高低顺序将N个优先级划分为n个级
别互不相同的组,每个组中至多包括m个优先级,且高优先级对应高级别的组; 其中,N<m x n。
组员信息模块用于为每个组设置包括m个比特的组员信息,所述每个组员 信息中的各比特与该组中的各优先级相对应,用于指示对应优先级是否存在就 绪状态任务。
组信息模块用于设置包括n个比特的组信息,所述组信息中的每个比特与 各个组相对应,用于指示对应组中是否包含有就绪状态任务的优先级。
信息设置模块用于根据任务的优先级及当前状态设置所述组信息和组 员信息。
此时,优先级确定模块可具体包括最高级别组确定模块和最高优先级 确定模块。
其中,最高级别组确定模块用于根据所述设置后的组信息的取值,确定包 含有就绪状态任务的优先级的最高级别组。
最高优先级确定模块用于根据所述最高级别组对应的所述设置后的组 员信息的取值,确定N个优先级中存在就绪状态任务的最高优先级。
与图l所示方法相对应,当组信息和组员信息分别用整数个字节表示, 且表示组信息的字节中低位比特对应高级别组,表示组员信息的字节中低位 比特对应高优先级时,信息设置模块可在任务的当前状态为就绪状态时,将 组员信息中所述任务的优先级对应的比特置位,在组员信息中存在置位的比 特时,将组信息中所述组员信息的组对应的比特置位。
此时,优先级确定模块中还可包括查找表函数模块,用于设置通过字节 的取值查找字节中被置位的最低位比特的序号的查找表函数。则最高级别组 确定模块可以所述组信息的取值为索引,调用所述查找表函数,得到包含有 就绪状态任务的优先级的最高级别组对应的比特序号,根据所述比特序号确 定所述最高级别组;最高优先级确定模块可以所述最高级别组对应的组员信 息的取值为索引,调用所述查找表函数,得到该最高级别组中存在就绪状态 任务的最高优先级对应的比特序号,根据得到的所述最高级别组中的所述最高优先级对应的比特序号及所述最高级别组对应的比特序号,确定N个优 先级中存在就绪状态任务的最高优先级。
本发明实施例中的系统中的各个模块可以是通过硬件实现的硬件模块, 也可以是通过纯代码实现的软件模块,也可以是同时包括硬件模块和软件模 块,具体应用中可根据实际需要而定。
本发明的技术方案可应用于嵌入式操作系统的实时操作系统中,如面向 控制、通信、医疗等领域的实时操作系统。嵌入式操作系统是一种支持嵌入 式系统应用的搡作系统软件,它是嵌入式系统(包括硬、软件系统)极为重要 的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接 口、通信协议、图形界面、标准化浏览器等。与通用操作系统相比,嵌入式 操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专 用性等方面具有较为突出的特点。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了 进一步详细说明,所应理解的是,以上所述仅为本发明的较佳实施例而已, 并非用于限定本发明的保护范围,凡在本发明的精神和原则之内,所作的任 何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1、一种实时操作系统中的任务调度方法,其特征在于,该方法包括为N个优先级中的每个优先级设置优先级链表,将每个优先级链表的首地址存放于对应该优先级的数组元素中;基于先进先出的原则将每个优先级的任务通过对应该优先级的优先级链表进行连接;从N个优先级中确定存在就绪状态任务的最高优先级;通过所述最高优先级对应的数组元素中存放的所述首地址,调用所述最高优先级对应的优先级链表中的第一个任务;其中,N为大于1的整数。
2、 如权利要求1所述的方法,其特征在于,从N个优先级中确定存在就 绪状态任务的最高优先级之前,进一步包括按照优先级的高低顺序将N个优先级划分为n个级别互不相同的组,每个 组中至多包括m个优先级,且高优先级对应高级别的组;其中,N<mxn;为每个组设置包括m个比特的组员信息,所述每个组员信息中的各比特与 该组中的各优先级相对应,用于指示对应优先级是否存在就绪状态任务;设置包括n个比特的组信息,所述组信息中的每个比特与各个组相对应, 用于指示对应组中是否包含有就绪状态任务的优先级;根据任务的优先级及当前状态设置所述组信息和组员信息;所述从N个优先级中确定存在就绪状态任务的最高优先级包括根据所述 组信息的取值,确定包含有就绪状态任务的优先级的最高级别组;根据所述最 高级别组对应的组员信息的取值,确定N个优先级中存在就绪状态任务的最高 优先级。
3、 如权利要求2所述的方法,其特征在于,所述组信息和组员信息分别用 整数个字节表示,且表示所述组信息的字节中低位比特对应高级别组,表示所 述组员信息的字节中低位比特对应高优先级; 所述根据任务的优先级及当前状态设置所述组信息和组员信息为在任务 的当前状态为就绪状态时,将组员信息中所述任务的优先级对应的比特置位, 在组员信息中存在置位的比特时,将组信息中所述组员信息的组对应的比特置位;该方法进一步包括设置通过字节的取值查找字节中被置位的最低位比特 的序号的查找表函数;所述根据组信息的取值,确定包含有就绪状态任务的优先级的最高级别组为以所述组信息的取值为索引,调用所述查找表函数,得到包含有就绪状态 任务的优先级的最高级别组对应的比特序号,根据所述比特序号确定所述最高 级别组;所述根据所述最高级别组对应的组员信息的取值,确定N个优先级中存在 就绪状态任务的最高优先级为以所述最高级别组对应的组员信息的取值为索 引,调用所述查找表函数,得到该最高级别组中存在就绪状态任务的最高优先 级对应的比特序号,根据得到的所述最高级别组中的所述最高优先级对应的比 特序号及所述最高级别组对应的比特序号,确定N个优先级中存在就绪状态任 务的最高优先级。
4、 如权利要求3所述的方法,其特征在于,n个组的组员信息通过一个数 组表示。
5、 如权利要求1至4中任一项所述的方法,其特征在于,所述优先级链表 为单向链表或双向链表。
6、 如权利要求1至4中任一项所述的方法,其特征在于,所述m为8。
7、 如权利要求6所述的方法,其特征在于,所述N《64。
8、 一种实时操作系统中的任务调度系统,其特征在于,该系统包括 优先级链表模块,用于为N个优先级中的每个优先级设置优先级链表,并基于先进先出的原则将每个优先级的任务通过对应该优先级的优先级链表进行 连接;其中,N为大于l的整数;数组模块,用于设置对应优先级的数组,将每个优先级链表的首地址存放于对应该优先级的数组元素中;优先级确定模块,用于从N个优先级中确定存在就绪状态任务的最高优先级;调度模块,用于通过所述最高优先级对应的数组元素中存放的所述首地址, 调用所述最高优先级对应的优先级链表中的第 一个任务。
9、 如权利要求8所述的系统,其特征在于,该系统进一步包括 分组模块,用于按照优先级的高低顺序将N个优先级划分为n个级别互不相同的组,每个组中至多包括m个优先级,且高优先级对应高级别的组;其中, N < m x n;组员信息模块,用于为每个组设置包括m个比特的组员信息,所述每个组 员信息中的各比特与该组中的各优先级相对应,用于指示对应优先级是否存在就绪状态任务;组信息模块,用于设置包括n个比特的组信息,所述组信息中的每个比特 与各个组相对应,用于指示对应组中是否包含有就绪状态任务的优先级;信息设置模块,用于根据任务的优先级及当前状态设置所述组信息和组员45 '^1 ,所述优先级确定模块包括最高级别组确定模块,用于根据所述设置后的组信息的取值,确定包含有 就绪状态任务的优先级的最高级别组;最高优先级确定模块,用于根据所述最高级别组对应的所述设置后的组员 信息的取值,确定N个优先级中存在就绪状态任务的最高优先级。
10、 如权利要求9所述的系统,其特征在于,所述组信息和组员信息分别 用整数个字节表示,且表示所述组信息的字节中低位比特对应高级别组,表示 所述组员信息的字节中低位比特对应高优先级;所述信息设置模块在任务的当前状态为就绪状态时,将组员信息中所述任 务的优先级对应的比特置位,在组员信息中存在置位的比特时,将组信息中所 述组员信息的组对应的比特置位;所述优先级确定模块进一步包括查找表函数模块,用于设置通过字节的 取值查找字节中被置位的最低位比特的序号的查找表函数;所述最高级别组确定模块以所述组信息的取值为索引,调用所述查找表函 数,得到包含有就绪状态任务的优先级的最高级别组对应的比特序号,根据所 述比特序号确定所述最高级别组;所述最高优先级确定模块以所述最高级别组对应的组员信息的取值为索 引,调用所述查找表函数,得到该最高级别组中存在就绪状态任务的最高优先 级对应的比特序号,根据得到的所述最高级别组中的所述最高优先级对应的比 特序号及所述最高级别组对应的比特序号,确定N个优先级中存在就绪状态任 务的最高优先级。
全文摘要
本发明公开了一种实时操作系统中的任务调度方法,包括为N个优先级中的每个优先级设置优先级链表,将每个优先级链表的首地址存放于对应该优先级的数组元素中;基于先进先出的原则将每个优先级的任务通过对应该优先级的优先级链表进行连接;从N个优先级中确定存在就绪状态任务的最高优先级;通过所述最高优先级对应的数组元素中存放的所述首地址,调用所述最高优先级对应的优先级链表中的第一个任务;其中,N为大于1的整数。此外,本发明还公开了一种实时操作系统中的任务调度系统。本发明所公开的技术方案,能够提高系统的实时性。
文档编号G06F9/46GK101178664SQ20071017932
公开日2008年5月14日 申请日期2007年12月12日 优先权日2007年12月12日
发明者游明琦, 国 艾 申请人:北京中星微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1