CPU 资源的调度方法及装置 【技术领域】
本发明涉及计算机操作系统领域, 尤其涉及一种 CPU 资源的调度方法及装置。背景技术 在计算机操作系统中, CPU 资源作为整个系统的核心资源, 被系统中所有任务所共 享, 为了给众多的任务分配 CPU 资源, 由此产生了很多种 CPU 资源的调度方法。通常的操 作系统中, 为了满足系统所需的并发和实时性要求, 在不同优先级的任务间采用了基于优 先级的可抢占调度方法, 这种调度方法为优先级最高的任务提供 CPU 资源调度的保证, 只 要优先级最高的任务准备就绪, 它立即会抢占目前运行的低优先级任务, 并且一直占用 CPU 资源直到它主动放弃对 CPU 的使用。如果高优先级的任务长时间运行, 低优先级的任务将 无法获取到 CPU 资源而被饿死。
对于任务数量较少的简单系统, 可以通过精确的划分任务功能、 调整任务的优先 级, 确保实时的任务不会长时间占用 CPU 资源, 以及设置可能长时间占用 CPU 资源的低优先
级任务为相同的优先级, 并且采用时间片轮转的调度方法来避免这些任务饿死。
但是, 发明人发现, 对于包含几十甚至几百个任务、 拥有数以百计优先级的大系 统, 上述的方法很难做到, 尤其是拥有很多子系统的软件系统, 这些软件子系统由不同的开 发团队完成, 解决该问题异常困难。 即便通过上述的方法解决了现有系统的问题, 伴随着新 需求的不断引入, 新的子系统被加入到系统中, 问题又将出现。
例 如, 在 一 个 通 讯 系 统 设 备 软 件 中, 存在三个软件子系统 : 运行管理和维护 (Operation Administration and Maintenance, 简称为 OAM) 子系统、 宽带子系统和窄带子 系统。这三个子系统本身都由若干个任务协作完成特定的业务功能, 按照常规的基于优先 级抢占的调度方法, 其中任何一个高优先级的任务长时间占用 CPU 资源, 都会导致其它子 系统无法获取 CPU 资源。比如, 宽带子系统被拒绝服务 (Denial of Service, 简称为 DoS) 攻击, 最终导致 OAM 模块无法得到调度, 无法响应用户的操作维护的请求, 使得用户失去对 设备的控制。 发明内容 本发明的主要目的在于提供一种 CPU 资源的调度方案, 以至少解决上述相关技术 中由于高优先级的任务长时间占用 CPU 资源, 导致低优先级的任务无法获取 CPU 资源而被 饿死的问题。
为了实现上述目的, 根据本发明的一个方面, 提供了一种 CPU 资源的调度方法。
根据本发明的 CPU 资源的调度方法, 包括以下步骤 : 将系统中的任务划分成任务 组; 统计任务组当前对 CPU 资源的占用情况 ; 以及在任务组当前对 CPU 资源的占用超过预 设的最大值时, 释放任务组中的一个或多个任务的 CPU 资源给除该任务组之外的其他任务 组中的准备就绪的任务运行。
进一步地, 统计任务组当前对 CPU 资源的占用情况之前, 该方法还包括 : 预先设置
任务组对 CPU 资源占用的最大值, 其中, 最大值为任务组中所有任务对 CPU 资源占用的总 和。
进一步地, 预先设置任务组对 CPU 资源占用的最大值包括 : 在每个预定时段为任 务组分配其对 CPU 资源占用的最大百分比。
进一步地, 统计任务组当前对 CPU 资源的占用情况包括 : 统计任务组在每个预定 时段内对 CPU 资源的占用率。
进一步地, 每个预定时间段的时间精度为微秒。
进一步地, 释放任务组中的一个或多个任务的 CPU 资源给除该任务组之外的其他 任务组中的准备就绪的任务运行包括 : 若其他任务组中均没有准备就绪的任务, 则任务组 中的任务继续占用 CPU 资源运行 ; 若其他任务组中有准备就绪的任务, 则释放任务组中的 一个或多个任务的 CPU 资源给其他任务组中的准备就绪的任务运行。
为了实现上述目的, 根据本发明的另一个方面, 还提供了一种 CPU 资源的调度装 置。
根据本发明的 CPU 资源的调度装置, 包括 : 划分模块, 用于将系统中的任务划分成 任务组 ; 统计模块, 用于统计任务组当前对 CPU 资源的占用情况 ; 以及调度模块, 用于在任 务组当前对 CPU 资源的占用超过预设的最大值时, 释放任务组中的一个或多个任务的 CPU 资源给除该任务组之外的其他任务组中的准备就绪的任务运行。
进一步地, 该装置还包括 : 设置模块, 用于预先设置任务组对 CPU 资源占用的最大 值, 其中, 最大值为任务组中所有任务对 CPU 资源占用的总和。
进一步地, 设置模块还用于在每个预定时段为任务组分配其对 CPU 资源占用的最 大百分比 ; 以及统计模块还用于统计任务组在每个预定时段内对 CPU 资源的占用率。
进一步地, 调度模块包括 : 保持单元, 用于在其他任务组中均没有准备就绪的任务 的情况下, 保持任务组中的任务继续占用 CPU 资源运行 ; 以及释放单元, 用于在其他任务组 中有准备就绪的任务的情况下, 释放任务组中的一个或多个任务的 CPU 资源给其他任务组 中的准备就绪的任务运行。
通过本发明, 采用在任务组对 CPU 资源的占用超过阈值时释放其中一个或多个任 务所占用的 CPU 资源给其他任务组中准备就绪的任务的方式, 解决了相关技术中由于高优 先级的任务长时间占用 CPU 资源, 导致低优先级的任务无法获取 CPU 资源而被饿死的问题, 增强了系统的稳定性, 提高了系统的性能。 附图说明
此处所说明的附图用来提供对本发明的进一步理解, 构成本申请的一部分, 本发 明的示意性实施例及其说明用于解释本发明, 并不构成对本发明的不当限定。在附图中 :
图 1 是根据本发明实施例的 CPU 资源的调度方法的流程图 ;
图 2 是根据本发明实施例的 CPU 资源的调度装置的结构框图 ;
图 3 是根据本发明优选实施例的 CPU 资源的调度装置的结构框图 ;
图 4 是根据本发明优选实施例二的任务组划分的示意图 ;
图 5 是根据本发明优选实施例二的系统运行时间的示意图 ;
图 6 是根据本发明优选实施例二的分配任务组占用 CPU 的最大时长的流程图。具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是, 在不冲突的 情况下, 本申请中的实施例及实施例中的特征可以相互组合。
根据本发明的实施例, 提供了一种 CPU 资源的调度方法。图 1 是根据本发明实施 例的 CPU 资源的调度方法的流程图, 如图 1 所示, 该方法包括以下步骤 :
步骤 S102, 将系统中的任务划分成任务组 ;
步骤 S104, 统计任务组当前对 CPU 资源的占用情况 ; 以及
步骤 S106, 在任务组当前对 CPU 资源的占用超过预设的最大值时, 释放任务组中 的一个或多个任务的 CPU 资源给除该任务组之外的其他任务组中的准备就绪的任务运行。
通过上述步骤, 采用在任务组对 CPU 资源的占用超过阈值时释放其中一个或多个 任务所占用的 CPU 资源给其他任务组中准备就绪的任务的方式, 解决了相关技术中由于高 优先级的任务长时间占用 CPU 资源, 导致低优先级的任务无法获取 CPU 资源而被饿死的问 题, 增强了系统的稳定性, 提高了系统的性能。
优选地, 在步骤 S104 之前, 可以预先设置任务组对 CPU 资源占用的最大值, 其中, 最大值为任务组中所有任务对 CPU 资源占用的总和。 例如, 可以预先设置每个任务组对 CPU 资源占用的最大值。该方法使得用户可以对各任务组占用 CPU 资源的情况进行配置, 增强 了系统的灵活性, 提高了用户体验。 优选地, 预先设置任务组对 CPU 资源占用的最大值包括 : 在每个预定时段为任务 组分配其对 CPU 资源占用的最大百分比。 例如, 在每个预定时段为每个任务组分配其对 CPU 资源占用的最大百分比。该方法可以提高系统的有效性和准确性。
优选地, 在步骤 S104 中, 可以统计任务组在每个预定时段内对 CPU 资源的占用率。 该方法实现简单、 可操作性强。
优选地, 每个预定时间段的时间精度为微秒。该方法有利于精确统计任务对 CPU 的占用率, 提高了系统的精准度。
优选地, 在步骤 S106 中, 若其他任务组中均没有准备就绪的任务, 则任务组中的 任务继续占用 CPU 资源运行 ; 若其他任务组中有准备就绪的任务, 则释放任务组中的一个 或多个任务的 CPU 资源给其他任务组中的准备就绪的任务运行。
本优选实施例可以根据系统当前的情况对超过预设的最大值 ( 即, CPU 占用率 ) 的 任务组中的任务进行调度, 提高了系统的灵活性和处理能力。
对应于上述的方法, 在本实施例中还提供了一种 CPU 资源的调度装置。 图 2 是根据 本发明实施例的 CPU 资源的调度装置的结构框图, 如图 2 所示, 该装置包括 : 划分模块 22、 统计模块 24、 调度模块 26, 下面对该结构进行详细说明。
划分模块 22, 用于将系统中的任务划分成任务组 ; 统计模块 24, 耦合至划分模块 22, 用于统计任务组当前对 CPU 资源的占用情况 ; 以及调度模块 26, 耦合至统计模块 24, 用 于在任务组当前对 CPU 资源的占用超过预设的最大值时, 释放任务组中的一个或多个任务 的 CPU 资源给除该任务组之外的其他任务组中的准备就绪的任务运行。
通过上述装置, 采用调度模块 26 在任务组对 CPU 资源的占用超过阈值时释放其中 一个或多个任务所占用的 CPU 资源给其他任务组中准备就绪的任务的方式, 解决了相关技
术中由于高优先级的任务长时间占用 CPU 资源, 导致低优先级的任务无法获取 CPU 资源而 被饿死的问题, 增强了系统的稳定性, 提高了系统的性能。
图 3 是根据本发明优选实施例的 CPU 资源的调度装置的结构框图, 如图 3 所示, 该 装置还包括 : 设置模块 32, 耦合至划分模块 22 和统计模块 24, 用于预先设置任务组对 CPU 资源占用的最大值, 其中, 该最大值为任务组中所有任务对 CPU 资源占用的总和。
优选地, 设置模块 32 还用于在每个预定时段为任务组分配其对 CPU 资源占用的最 大百分比 ; 以及统计模块 24 还用于统计任务组在每个预定时段内对 CPU 资源的占用率。
例如, 设置模块 32 还可以在每个预定时段为每个任务组分配其对 CPU 资源占用的 最大时长以及最大时长的阈值。
优选地, 调度模块 26 包括 : 保持单元 262, 用于在其他任务组中均没有准备就绪的 任务的情况下, 保持任务组中的任务继续占用 CPU 资源运行 ; 以及释放单元 264, 用于在其 他任务组中有准备就绪的任务的情况下, 释放任务组中的一个或多个任务的 CPU 资源给其 他任务组中的准备就绪的任务运行。
优选地, 在释放单元 264 将任务组中的一个或多个任务的 CPU 资源释放给其他任 务组中准备就绪的任务运行之后, 在统计模块 24 统计到该任务组当前对 CPU 资源的占用小 于预设的最大值时, 还可以恢复该任务组中之前被调度出去的任务对 CPU 资源的使用。 以下各个实施例结合了上述优选的实施方式。
实施例一
本实施例是把任务划分成任务组, 并且设置其最大 CPU 资源占用值, 当任务组的 CPU 资源的占用超过了设定的最大值, 就把该任务组中的任务调度出去, 放弃对 CPU 资源的 使用, 调度到其它任务组中的任务运行, 直到该任务组对 CPU 资源的占用小于设定的最大 值。其中, 这里的任务组可以包含多个任务, 也可以只包含一个任务。
在具体实施过程中, 首先需要对系统中的任务划分成若干个任务组, 然后可以按 照系统的需要设置任务组对 CPU 资源占用的最大值 ( 任务组中所有任务对 CPU 资源占用值 的和 ), 即, 对 CPU 资源占用的最大百分比。 因为任务对 CPU 资源的占用是一个动态的数据, 伴随着系统的运行动态的变化, 具有时效性, 所以这里的某个任务的 CPU 占有率都是指过 去一段时间内该任务占用 CPU 的情况。例如, 1 秒钟的 CPU 占有率、 30 秒钟的 CPU 占有率、 1 分钟的 CPU 占有率等。也就是说, 本实施例中的任务组的 CPU 资源占用的最大值通常需 要指定是多长时间段内的 CPU 资源占有率。另外, 无论是所有任务组 CPU 资源占用的最大 值的和、 还是单个任务组 CPU 资源占用的最大值的设置可用大于 100%, 也可以小于 100%。 当然单个任务组 CPU 资源占用的最大值的设置超过 100%没有任何意义。
设置好以上的条件之后, 在操作系统调度任务的时候 ( 这里可以是定时的调度、 也可以是系统调用导致的调度 ) 统计任务组在指定时间段内对 CPU 资源的占用情况, 如果 任务组对 CPU 资源的占用超过了设定的最大值, 并且其它任务组有准备就绪可以运行的任 务, 立即把该任务组的任务调度出去, 释放出 CPU 资源给其它任务组中准备就绪的任务运 行。如果其它所有任务组中均没有准备就绪的任务, 那么该任务组继续占用 CPU 运行 ( 即, 在这种情况下任务组对 CPU 的占用可以超过设定的最大值 )。
可见, 本实施例把系统中所有的任务划分成若干个任务组, 并按照系统需要定量 地分配每个任务组对 CPU 资源占用的最大值, 然后实时地对每个任务组占用 CPU 资源情况
进行监控, 在任务组的 CPU 资源的占用超过了设定的最大值时, 把该任务组中的任务调度 出去, 放弃对 CPU 资源的使用, 调度到其它任务组中的任务运行, 直到该任务组对 CPU 资源 的占用小于设定的最大值, 从而避免了传统实时操作系统中按照严格优先级进行抢占调度 任务而导致低优先级任务饿死的问题, 提高了系统的稳定性。
实施例二
以具体例子为例, 详细说明本实施例中的 CPU 资源的调度方法, 该方法可以包括 以下步骤 :
步骤 1, 对系统中的任务进行任务组的划分。 图 4 是根据本发明优选实施例二的任 务组划分的示意图, 这里假设某个系统软件中由 T1 ~ T9 共计 9 个任务构成, 被划分成 A、 B、 C 三个任务组。其中, 任务组 A 包括 T1-T3 三个任务, 任务组 B 包括 T4 和 T5 两个任务, 其它任务全部划分到任务组 C 中。
步骤 2, 设置每个任务组对 CPU 资源占用的最大值。如图 4 所示, 这里假设将任务 组 A 的 CPU 资源占用的最大值设置为 i%, 将任务组 B 的 CPU 资源占用的最大值设置为 j%, 将任务组 C 的 CPU 资源占用的最大值设置为 k%。
可见, 本实施例把各个子系统的任务划分到一个任务组, 且设置其对 CPU 资源占 用最大值, 从而避免了一个子系统长时间占用 CPU 资源而导致其它子系统无法正常运行的 情况。 需要说明的是, 因为任务的 CPU 占有率是指过去一段时间间隔内该任务占用 CPU 的情况 ( 例如, 1 秒钟的 CPU 占有率、 30 秒钟的 CPU 占有率、 1 分钟的 CPU 占有率等 ), 所以, 任务组的 CPU 资源占用的最大值需要指定是多长时间间隔内的 CPU 资源占有率, 这里可以 将这个时间间隔设置为 m。此外, 为了精确计算设定时间间隔内各个任务组的 CPU 占有率, 在具体实施过程中, 需要有一个精度比较高的时间源, 这里可以假定时间精度为微秒。
步骤 3, 计算出在每一个时间间隔 m 内每一个任务组可以占用 CPU 的时间值 ( 即, 时长 )。该时间值就是 m 乘上任务组 CPU 资源占用的最大值设置, 即, 任务组 A 就是 m 乘上 i%。这里假定任务组 A 在时间间隔 m 内被分配的时长为 I = m*i% ( 精度等同上述的时间 源, 这里假定精度为微秒 ), 任务组 B 在时间间隔 m 内被分配的时长为 J = m*j%, 任务组 C 在时间间隔 m 内被分配的时长为 K = m*k%。
图 5 是根据本发明优选实施例二的系统运行时间的示意图, 如图 5 所示, 系统运行 的开始时间为 0, 系统在每个时间间隔 m 的时候都会进行任务组 CPU 资源运行时间的分配, 分配的值就是上述任务组在时间间隔 m 内被分配的时长, 例如, I、 J 和 K。
步骤 4, 为每一个任务组分配其占用 CPU 的最大时长。
图 6 是根据本发明优选实施例二的分配任务组占用 CPU 的最大时长的流程图, 如 图 6 所示, 包括以下步骤 :
步骤 S602, 设置任务组可占用 CPU 的时间长度 ( 即, 最大时长 )。例如, 可以设置 x、 y、 z 三个变量, 分别对应 A、 B、 C 三个任务组可占用的 CPU 时间长度 ( 精度等同上述的时 间源, 这里假定精度为微秒 ), 其中, x = I, y = Y, z = K。
步骤 S604, 检测预定分配时长是否达到。若已到该分配时长, 进入步骤 S606, 若没 有到该分配时长, 则继续检测。
步骤 S606, 更新每个任务组可占用 CPU 的时间长度。例如, 可以在每一个时间间
隔 m 为每个任务组分配其对应的设置好的时长 ( 即, 上述 I、 J 和 K 三个值 ), 即, 每一个时 间间隔 m 时间整点, 任务组可占用 CPU 的时间长度更新为此时该任务组最大时长加上该任 务组的上述分配时长。以任务组 A 为例, 在每一个时间间隔 m, 其对应的可占用 CPU 的时长 累加 I, 即 x = x+I。需要说明的是, 如果某一个任务组长时间没有运行 ( 例如, 用户交互任 务组, 如果用户一直没有使用该设备, 相应的任务组没有事情可做, 就会休眠 ), 相应的最大 时长就不会被消耗, 一直累加到一个很大的值, 一旦这个任务组得到执行, 就会长时间占用 处理器, 导致其它任务组得不到执行。 所以, 这里可以为每一个任务组设置一个最大时长的 阀值, 当最大时长超过该阀值之后, 不再分配时长给该改任务组, 直到其最大时长小于该阀 值。
在具体实施过程中, 在每一次任务被调度的时候, 被调度进入的任务, 通过上述的 高精度的时间源获取该点的时间 t1, 该任务被调度出去的时候, 通过上述的高精度的时间 源获取该点的时间 t2, t2 减去 t1 就是该任务运行时间。在调度任务运行的时候, 首先判断 该任务所属的任务组可以占用 CPU 时间长度 ( 即, 最大时长 ), 减去该运行时间是否小于等 于 0, 如果是, 就禁止该任务调度执行, 选择其它任务运行, 直到该任务属于任务组可以占用 CPU 时间长度是大于 0。例如, 该任务属于任务组 A, 则 x = I-(t2-t1)。
综上所述, 通过上述实施例, 采用在任务组对 CPU 资源的占用超过阈值时释放其 中一个或多个任务所占用的 CPU 资源给其他任务组中准备就绪的任务的方式, 避免了单个 ( 或者多个 ) 任务长时间占用 CPU 资源而导致其它任务饿死的问题, 增强了系统的稳定性, 提高了系统的性能。
显然, 本领域的技术人员应该明白, 上述的本发明的各模块或各步骤可以用通用 的计算装置来实现, 它们可以集中在单个的计算装置上, 或者分布在多个计算装置所组成 的网络上, 可选地, 它们可以用计算装置可执行的程序代码来实现, 从而, 可以将它们存储 在存储装置中由计算装置来执行, 并且在某些情况下, 可以以不同于此处的顺序执行所示 出或描述的步骤, 或者将它们分别制作成各个集成电路模块, 或者将它们中的多个模块或 步骤制作成单个集成电路模块来实现。 这样, 本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已, 并不用于限制本发明, 对于本领域的技 术人员来说, 本发明可以有各种更改和变化。 凡在本发明的精神和原则之内, 所作的任何修 改、 等同替换、 改进等, 均应包含在本发明的保护范围之内。