一种轻量级可扩展的多核嵌入式操作系统调度器设计方法与流程

文档序号:33504015发布日期:2023-03-17 23:01阅读:34来源:国知局
一种轻量级可扩展的多核嵌入式操作系统调度器设计方法与流程

1.本发明属于操作系统任务调度领域,具体涉及一种轻量级可扩展的多核嵌入式操作系统调度器设计方法。


背景技术:

2.随着smp(对称多处理)架构的多核处理器在嵌入式领域的大量应用,如何有效保证任务在多核处理器上高效调度,是操作系统调度器需要解决的关键问题。多核嵌入式操作系统任务调度通常分为调度器调度决策和任务切换,通过两个主要操作实现任务调度管理。多核嵌入式操作系统调度器是多核任务调度的决策中枢,实现嵌入式操作系统任务调度机制中的调度决策功能。多核调度器在外部或内部事件发生时执行,改变对应任务的状态以及当前核或其他某个核后继者任务,而后配合任务切换处理实现当前执行任务向后继者任务的切换。
3.中国专利“cn114168352a任务的多核调度方法、装置、电子设备及存储介质”提供了一种任务的多核调度方法、装置、电子设备及存储介质。该方法包括:在运行任务队列中筛选出优先级最低且其运行的cpu核不具备次优先抢占属性的目标运行任务;其中,次优先抢占属性用于指示cpu核对应有与cpu核具备亲和力属性的全局任务;在就绪任务中筛选出优先级最高的目标就绪任务,若目标就绪任务的优先级高于目标运行任务,确定目标就绪任务具备抢占权;若目标就绪任务具备抢占权,确定目标运行任务运行的cpu核的候选任务,并基于目标就绪任务与候选任务的优先级,利用目标就绪任务对候选任务进行抢占;其中,候选任务为已投入cpu核中运行或者即将投入cpu核中运行的任务。以避免任务抢占过程中可能会出现的多核处理性能降低的问题。
4.中国专利“cn114168352a任务的多核调度方法、装置、电子设备及存储介质”,提供了一种任务的多核调度方法,以避免任务抢占过程中因抢占cpu使用权控制不当引起冗余调度,导致多核处理性能降低的问题。但是该方法未完整提出一种调度器架构,其设计也不具有扩展性,不能针对不同调度策略(如基于优先级、时间的策略,或者不同的调度算法)进行扩展,以支持更多类型的调度器,同时,该方法未对调度器进行有效优化,以支持任务的高效调度。针对轻量化、可扩展的多核任务调度需求,目前没有一项专利提出相应的设计方法。


技术实现要素:

5.(一)要解决的技术问题
6.本发明要解决的技术问题是如何提供一种轻量级可扩展的多核嵌入式操作系统调度器设计方法,以解决现有技术未完整提出一种调度器架构,其设计也不具有扩展性,不能针对不同调度策略(如基于优先级、时间的策略,或者不同的调度算法)进行扩展,以支持更多类型的调度器,同时,该方法未对调度器进行有效优化,以支持任务的高效调度的问题。
7.(二)技术方案
8.为了解决上述技术问题,本发明提出一种轻量级可扩展的多核嵌入式操作系统调度器设计方法,该调度器包括:调度器主框架、调度器状态机和调度器队列;
9.调度器主框架包括基础调度器组件、优先级调度器组件、smp调度器组件和调度器操作插件;基础调度器组件作为插件入口,其上分别扩展优先级调度器组件和smp调度器组件,形成基于亲和性的smp调度器;同时,调度器操作插件也以插件形式嵌入调度器主框架,支持不同策略的调度操作;
10.调度器状态机:从调度器角度,任务状态分为调度态、就绪态和阻塞态;调度态的任务是正在处理器核上执行的任务,其个数与处理器核数相同;就绪态的任务是已经拥有除去处理器之外的所有资源的任务;阻塞态的任务是正在等待相关资源的任务;
11.调度器队列:调度器队列与任务状态相对应,用于管理处于不同状态的任务,包括已调度队列、就绪队列和阻塞队列;调度器维护一个已调度队列,其按照优先级次序从高到低依次排序已调度的任务;同时维护一个就绪队列,其按照优先级次序维护等待处理器执行的任务;调度器对每个资源维护一个阻塞队列,用于管理等待该资源的任务。
12.进一步地,调度器调度操作用于更新当前处理器核的后继任务,每个处理器核均对应一个正在执行任务和后继者任务,后继者任务是当前处理器核即将要执行的任务。
13.进一步地,相关资源包括信号量、互斥量、消息队列、事件、屏障、读写锁和定时器。
14.进一步地,调度器通过调度器锁进行保护,访问调度器时需要先获取调度器锁。
15.进一步地,调度器阻塞任务的流程包括:
16.步骤s11:任务获取资源,若资源可用继续执行,否则跳转至步骤s16;
17.步骤s12:获取调度器锁,进入调度器执行时的独占访问流程;
18.步骤s13:将正在执行的任务修改为阻塞状态;
19.步骤s14:从就绪队列中,为被阻塞任务所在的处理器核选择新的后继者任务,被选择的任务符合两个条件,条件一是其亲和性集合中包含该处理器核,条件二是其为符合条件一的任务中优先级最高的任务;
20.步骤s15:释放调度器锁,退出调度器执行时的独占访问流程;
21.步骤s16:结束阻塞任务流程。
22.进一步地,调度器解除任务阻塞状态流程包括:
23.步骤s21:任务在阻塞队列中等待资源,若资源已可用继续执行,否则跳转至步骤s27;
24.步骤s22:获取调度器锁,进入调度器执行时的独占访问流程;
25.步骤s23:将阻塞队列中的任务修改为就绪态,并将其加入就绪队列;
26.步骤s24:若该任务优先级大于某个处理器核上正在执行任务的优先级,且其亲和性集合也包含该处理器核,则继续执行,否则跳转至步骤s27:
27.步骤s25:将该任务改变为执行态,并加入已执行队列;
28.步骤s26:释放调度器锁,退出调度器执行时的独占访问流程;
29.步骤s27:结束解除任务阻塞状态流程。
30.进一步地,已调度队列采用双向链表结构设计,并将已调度的任务按照优先级从高到低顺序排列。
31.进一步地,就绪队列采用以优先级位图为索引的哈希表设计,同优先级的任务按照先进先出的顺序以双向链表结构维护,同时使用位图的方式管理优先级索引;其中,嵌入式操作系统具有256个优先级,将256个优先级分为16个组,每一组中有16个优先级;首先,用一个16位整形数来表示每一组中的16个优先级,称作组内索引,其每一位代表一个优先级,若某一个优先级对应有就绪的任务,则该位就为1,否则为0;然后,用一个16位整形数来表示16个组,称为组索引,若组内只要有一个优先级对应位为1,则对应组的位就为1,否则为0;当查询最高优先级任务时,首先查找组索引,选取对应位为1的最高优先级组,然后查找该组对应的组内索引,查找对应位为1的最高优先级,同时,该优先级位图信息在任务状态更新时会对应修改,利用该位图映射表信息方便快捷地修改优先级位图表。
32.进一步地,阻塞队列维护于每一类资源的实例,每个资源的一个实例均对应一个阻塞队列,阻塞队列使用双向链表结构维护,并按照任务的优先级排序。
33.进一步地,亲和性集合以一个无符号的32位的整形数来表示,其0-31位的每一位分别对应一个处理器核的亲和性,最多支持32个处理器核;每个任务均有一个亲和性集合,若亲和性集合的某一位设置为1,则表示该任务与对应的处理器具有亲和性,即能在该处理器核上执行,一个任务可与多个处理器核均具有亲和性;判断某任务和对应处理器核是否有亲和性的方法是,将该任务的亲和性集合与该处理器核的掩码按位与运算,若结果不为0,则表示该任务与该处理器核具有亲和性,否则不具有亲和性。
34.(三)有益效果
35.本发明提出一种轻量级可扩展的多核嵌入式操作系统调度器设计方法,本发明设计了一种轻量级、可扩展的多核嵌入式操作系统调度器。当前已存在的调度器未从调度器架构和执行流程角度进行建模,并且不具备扩展性,未对调度器进行有效优化。本发明从架构、扩展性和性能三个角度出发,通过对调度器运行流程的分析,对调度器架构、执行流程、关键模块的实现和数据结构进行了设计,简化了调度器的架构和处理流程,降低了调度器操作带来的时间开销,同时对调度器的扩展升级提供了便捷的接口。
36.本发明设计了一种高效可扩展的多核嵌入式操作系统调度器,与现有专利相比,本发明的效果在于:
37.(1)提出了一种抽象的调度器模型,有利于设计实现更高效和通用的调度器;
38.(2)设计了一种可扩展的插件式调度器框架,不仅可以支持现有的优先级调度器,还可以支持基于其他策略调度器,有利于后续扩展;
39.(3)采用优先级位图机制对就绪队列进行优化管理,有效降低就绪队列管理带来的开销。
附图说明
40.图1为本发明的多核调度器总体架构;
41.图2为多核调度器阻塞任务执行流程;
42.图3为多核调度器解除任务阻塞状态执行流程;
43.图4为任务状态转换流程;
44.图5为基于双向链表的已调度队列;
45.图6为基于优先级位图结构的就绪队列;
46.图7为各类资源的阻塞队列。
具体实施方式
47.为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
48.本发明的目的是针对多核嵌入式操作系统提供了一种轻量级、可扩展的调度器,提出了一种抽象且完整的调度器模型,从而设计一种插件化的调度器框架,为调度器扩展提供便捷的接口。同时,针对任务调度的时机和流程进行了合理设计,对就绪队列管理进行优化,并支持基于亲和性的高效任务调度。
49.本发明提出一种轻量级、可扩展的多核嵌入式操作系统调度器设计方法,支持基于亲和性的任务调度,多核调度器的架构如图1所示。
50.(1)调度器模型
51.本发明中针对多核调度器的功能和工作原理,抽象出一种通用的调度器架构模型,调度器包括:调度器主框架、调度器状态机、调度器队列(包括已调度、就绪和阻塞)三部分。
52.1)调度器主框架。调度器主框架是可扩展的调度器核心,包括基础调度器组件、优先级调度器组件、smp调度器组件和调度器操作插件;基础调度器组件作为插件入口,其上分别扩展优先级调度器组件和smp调度器组件,形成基于亲和性的smp调度器。同时,调度器操作插件也以插件形式嵌入调度器主框架,支持不同策略的调度操作。调度器调度操作的主要结果是更新当前处理器核的后继任务,每个处理器核均对应一个正在执行任务和后继者任务,后继者任务是当前处理器核即将要执行的任务。
53.2)调度器状态机。从调度器角度,任务状态分为调度态、就绪态和阻塞态。调度态的任务是正在处理器核上执行的任务,其个数与处理器核数相同;就绪态的任务是已经拥有除去处理器之外的所有资源的任务;阻塞态的任务是正在等待相关资源的任务(通常包括信号量、互斥量、消息队列、事件、屏障、读写锁和定时器等)。
54.3)调度器队列。调度器队列与任务状态相对应,用于管理处于不同状态的任务,包括已调度队列、就绪队列和阻塞队列。调度器维护一个已调度队列,其按照优先级次序从高到低依次排序已调度的任务;同时维护一个就绪队列,其按照优先级次序维护等待处理器执行的任务;调度器对每个资源维护一个阻塞队列,用于管理等待该资源的任务。
55.(2)调度器执行流程
56.根据调度器抽象模型,多核调度器在系统中执行伴随着任务状态发生变化,其时机通常有两个:其一是任务获取资源时资源已被占用,或者任务主动延时,任务从执行态变为就绪态;其二是等待资源的任务获取资源后从阻塞态变为就绪态,若该任务优先级最高,则会转为执行态。上述两个时机分别对应阻塞当前任务和解除当前任务阻塞状态两个操作,由于调度器用于共享资源,需要通过调度器锁进行保护,访问调度器时需要先获取调度器锁。
57.调度器阻塞任务时执行流程如图2所示,包括以下步骤:
58.步骤s11:任务获取资源,若资源可用继续执行,否则跳转至步骤s16;
59.步骤s12:获取调度器锁,进入调度器执行时的独占访问流程;
60.步骤s13:将正在执行的任务修改为阻塞状态;
61.步骤s14:从就绪队列中,为被阻塞任务所在的处理器核选择新的后继者任务,被选择的任务符合两个条件,条件一是其亲和性集合中包含该处理器核,条件二是其为符合条件一的任务中优先级最高的任务;
62.步骤s15:释放调度器锁,退出调度器执行时的独占访问流程;
63.步骤s16:结束阻塞任务流程。
64.解除任务阻塞状态流程如图3所示,包括以下步骤:
65.步骤s21:任务在阻塞队列中等待资源,若资源已可用继续执行,否则跳转至步骤s27;
66.步骤s22:获取调度器锁,进入调度器执行时的独占访问流程;
67.步骤s23:将阻塞队列中的任务修改为就绪态,并将其加入就绪队列;
68.步骤s24:若该任务优先级大于某个处理器核上正在执行任务的优先级,且其亲和性集合也包含该处理器核,则继续执行,否则跳转至步骤s27:
69.步骤s25:将该任务改变为执行态,并加入已执行队列;
70.步骤s26:释放调度器锁,退出调度器执行时的独占访问流程;
71.步骤s27:结束解除任务阻塞状态流程。
72.(3)可扩展调度器插件设计
73.可扩展调度器采用插件结构,基础调度器组件实现调度器的基础接口和数据结构,优先级调度器组件扩展其中优先级管理的相关功能,smp调度器实现其中的多核任务调度功能,最终实现基于亲和性的多核调度器。同时,调度器的操作插件也以插件的方式嵌入调度器中,可方便定制实现不同的调度器。
74.(4)任务状态转换设计
75.任务状态在调度器的执行下进行相应的转换,通常条件下任务在就绪和阻塞态之间转换,以及就绪态和执行态之间转换。任务转换流程如图4所示。
76.(5)调度器队列设计
77.1)已调度队列设计
78.已调度队列采用双向链表结构设计,并将已调度的任务按照优先级从高到低顺序排列。已调度队列结构如图5所示。
79.2)就绪队列设计
80.就绪队列采用以优先级位图为索引的哈希表设计,同优先级的任务按照先进先出的顺序以双向链表结构维护,同时使用位图的方式管理优先级索引,能够有效提升就绪队列遍历效率。就绪队列结构如图6所示。
81.嵌入式操作系统具有多个优先级,通常支持256个优先级。以256个优先级为例,将256个优先级分为16个组,每一组中有16个优先级。首先,用一个16位整形数来表示每一组中的16个优先级,称作组内索引,其每一位代表一个优先级,若某一个优先级对应有就绪的任务,则该位就为1,否则为0;然后,用一个16位整形数来表示16个组,称为组索引,若组内只要有一个优先级对应位为1,则对应组的位就为1,否则为0。
82.当查询最高优先级任务时,首先查找组索引,选取对应位为1的最高优先级组,然后查找该组对应的组内索引,查找对应位为1的最高优先级。同时,该优先级位图信息在任
务状态更新时会对应修改,利用该位图映射表信息也可以方便快捷的修改优先级位图表。
83.3)阻塞队列设计
84.阻塞队列维护于每一类资源的实例中,资源通常包括信号量、互斥量、消息队列、事件、屏障、读写锁和定时器等,每个资源的一个实例均对应一个阻塞队列。阻塞队列使用双向链表结构维护,并按照任务的优先级排序。阻塞队列结构如图7所示。
85.(6)处理器亲和性集合设计
86.亲和性集合以一个无符号的32位的整形数来表示,其0-31位的每一位分别对应一个处理器核的亲和性,最多支持32个处理器核。每个任务均有一个亲和性集合,若亲和性集合的某一位设置为1,则表示该任务与对应的处理器具有亲和性,即可以在该处理器核上执行,一个任务可与多个处理器核均具有亲和性。判断某任务和对应处理器核是否有亲和性的方法是,将该任务的亲和性集合(affinity_set)与该处理器核的掩码(如核n的掩码为2
n-1)按位与运算,若结果不为0,则表示该任务与该处理器核具有亲和性,否则不具有亲和性。
87.(7)调度器数据结构设计
88.调度器数据结构包括调度器控制结构和调度器节点,调度器控制结构管理调度器的主要上下文信息,包括:
89.1)调度操作插件;
90.2)已调度队列;
91.3)就绪队列;
92.4)优先级位图。
93.调度器节点与任务一一对应,是调度器调度的基本单位,包括以下数据结构:
94.1)处理器核数;
95.2)处理器亲和性集合。
96.(8)后继者任务选择设计
97.当高优先级任务创建或者就绪时,或者正在执行的任务阻塞时,会引起调度器的执行,调度器会改变某个核的后继者任务。后继者任务需要符合处理器核的亲和性,并且优先级最高。
98.本发明设计了一种轻量级、可扩展的多核嵌入式操作系统调度器。当前已存在的调度器未从调度器架构和执行流程角度进行建模,并且不具备扩展性,未对调度器进行有效优化。本发明从架构、扩展性和性能三个角度出发,通过对调度器运行流程的分析,对调度器架构、执行流程、关键模块的实现和数据结构进行了设计,简化了调度器的架构和处理流程,降低了调度器操作带来的时间开销,同时对调度器的扩展升级提供了便捷的接口。
99.本发明设计了一种高效可扩展的多核嵌入式操作系统调度器,与现有专利相比,本发明的效果在于:
100.(1)提出了一种抽象的调度器模型,有利于设计实现更高效和通用的调度器;
101.(2)设计了一种可扩展的插件式调度器框架,不仅可以支持现有的优先级调度器,还可以支持基于其他策略调度器,有利于后续扩展;
102.(3)采用优先级位图机制对就绪队列进行优化管理,有效降低就绪队列管理带来的开销。
103.以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1