CN1238787C - 嵌入式实时操作系统的二分查找式任务调度方法 - Google Patents

嵌入式实时操作系统的二分查找式任务调度方法 Download PDF

Info

Publication number
CN1238787C
CN1238787C CN 200310100463 CN200310100463A CN1238787C CN 1238787 C CN1238787 C CN 1238787C CN 200310100463 CN200310100463 CN 200310100463 CN 200310100463 A CN200310100463 A CN 200310100463A CN 1238787 C CN1238787 C CN 1238787C
Authority
CN
China
Prior art keywords
task
priority
value
user
ready
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN 200310100463
Other languages
English (en)
Other versions
CN1529233A (zh
Inventor
孙晓民
蔡云鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tsinghua University
Original Assignee
Tsinghua University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tsinghua University filed Critical Tsinghua University
Priority to CN 200310100463 priority Critical patent/CN1238787C/zh
Publication of CN1529233A publication Critical patent/CN1529233A/zh
Application granted granted Critical
Publication of CN1238787C publication Critical patent/CN1238787C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

嵌入式实时操作系统的二分查找式任务调度方法属于车用嵌入式实时操作系统领域,其特征在于:先采用状态掩码表示用户按优先级高低顺序排列的任务列表中任务的就绪状态,然后利用移位比较实现二分查找,快速定位最高优先级任务,调度器则据此进行任务调度和切换。它用简单的一级掩码表示就绪态任务的优先级分布状态,利用二分查找提高了定位最高优先级任务的效率,并在代码实现上减少访问内存次数。具有调度延时稳定,效率高,存储空间少的优点。它作为清华汽车电子开放式系统(清华OSEK)的一部分,已在MPC555硬件平台上实现。

Description

嵌入式实时操作系统的二分查找式任务调度方法
技术领域
嵌入式实时操作系统的二分查找式任务调度方法属于嵌入式实时操作系统技术领域,特别涉及基于PowerPC处理器结构的嵌入式实时操作系统。
技术背景
任务调度是多任务操作系统的核心之一。任务调度的主要功能,是从用户任务中按照一定规则选择一个就绪的用户任务,并跳转到用户任务执行。多数嵌入式实时操作系统内核是基于优先级调度的,既每个任务根据其重要程度的不同被赋予一个优先级数值,调度器总是选择就绪的优先级最高的任务运行。常见的基于优先级的调度方法有时间片轮转法和先进先出法。
任务调度主要由调度器实现。为了实现上述调度方法,调度器必须查找任务列表,获得按调度规则应该执行的任务的信息,并跳转到正确的内存地址。本发明中所述的调度实现方法,指的就是这一过程。
由于操作系统在运行过程中调度非常频繁,因此调度器的性能直接影响着操作系统的运行效率和系统稳定性。另一方面,在嵌入式应用中,可应用的存储资源非常有限,因此调度器的设计要在满足实时性要求的同时还应考虑对资源的使用要尽可能节省,从而给应用程序以更大的使用空间。
目前,现存的嵌入式实时操作系统种类繁多,它们的调度实现方法各具特色。在现有公开的技术中,有顺序遍历就绪任务列队法或改进的遍历列队法,这种方法使用的结构变量简单,使用灵活,但耗时不稳定,最坏情况下必须遍历整个任务队列,因此当优先级很多的情况下,最长的遍历延时是实时系统不能接受的。μC/OS-II等一些实时操作系统采用分组映射表的方法,这种方法耗时稳定,而且效率很高,但该方法的结构变量复杂,使用的存储空间大,而且不利于动态改变优先级。
发明内容
本发明的目的在于提供一种耗时稳定、效率高而且结构变量简单、节省存储空间,适于动态地改变任务优先级的嵌入式实时操作系统二分查找式调度方法。
本发明的主要内容为:
采用状态掩码表示任务列表中任务的就绪状态,在操作系统生成时,根据用户配置的最大优先级分配状态掩码,该掩码的每一位都标识了一个优先级状态,当其中一位为0时,表示该位对应优先级的任务都没有就绪,即该优先级任务列队为空,相反当为1时,表示该位有对应优先级的任务已经就绪即该优先级任务列队非空。在操作系统运行过程中,每当有任务进入就绪态需要运行时,或者任务结束时,对应的系统内核操作将修改状态掩码的相应优先级状态位。
利用移位比较的方法实现二分查找,快速定位最高优先级任务。首先以无符号数的形式读取当前的状态掩码值,优先级为k的任务对应读出的掩码值为2k。对n个任务优先级的系统,第一次生成比较因子2n/2,与状态掩码比较,如果比较因子大于掩码,则将比较因子改为2n/2-n/4,否则将比较因子改为2n/2+n/4,重复上述比较步骤,每次比较因子的增量减半,直到比较因子为1,即可得到最高优先级任务对应的掩码值。总比较次数只需log2(n+1)次。
本发明的特征在于:它是一种当任务主动申请调度或终止时,或者中断服务程序激活了新任务时,针对PowerPC处理器且基于优先级的先进先出队列调度方法;它先采用状态掩码表示任务列表中任务的就绪状态,而任务列表是用户根据优先级大小而顺序列出的,然后利用移位比较的方法实现二分查找,快速定位最高优先级任务,调度器则据此进行任务切换;整个过程以操作系统代码的形式实现,它依次含有以下步骤:
(1)设定操作系统代码,它保存在MPC555控制器的存储器中,包括如下部分:
系统启动代码:依次含有硬件初始化、初始化堆栈、初始化就绪任务列表以及开始调度的操作,在系统上电复位时自动执行:
系统内核操作代码:它支持抢占式调度,包括供系统启动代码、用户任务代码、或中断处理程序调用的激活任务、终止任务和调度器操作的代码;所述的调度器操作代码是指按照规定策略从就绪任务列表中选取一个用户任务再跳转到该任务执行的操作;
用户任务代码:该由用户自定义的用户任务可以调用系统内核操作去激活其它任务、申请调度或者终止自身的执行;
中断处理程序操作代码:它依次含有中断处理程序入口、用户中断服务程序和中断处理程序结束三个部分;中断服务调用系统内核操作去激活新任务;中断处理的优先级高于用户任务优先级;
就绪任务列表:记录当前可以执行的按照优先级分类排列且以队列形式出现的用户任务信息,包括任务优先级、用户程序入口地址和用户堆栈指针这三个数值;
就绪态任务状态掩码:用于标记任务优先级列队的当前状态,它是在操作系统生成时,根据用户配置的优先级顺序来分配状态掩码的,掩码的每一个二进制位标识了一个优先级状态,优先级为n的任务对应掩码的第n位,当该位为0时,表示对应优先级的任务没有就绪(或该优先级任务列队是空的),当为1时,表示对应优先级的任务已经就绪(或该优先级任务列队中存在就绪任务);
(2)用二分查找法确定最高优先级任务:
二分查找法中的查找目标,在这里定为所有就绪态任务代表的元素之和,即状态掩码值,优先级为n的任务相当于查找列表中值为2n的元素;当就绪态的最高优先级任务优先级为k,则它代表的元素为2k,而所有就绪态任务代表的元素之和大于或等于2k,且小于2k+1,而二分查找的查找区间最后正好落到最高优先级任务对应的位置上;
设定二分查找法的操作变量:
当前优先级分布状态掩码的副本变量;
二分增量变量,记录每次循环比较的优先级增量,它表示每次查找时子表的大小,初值为状态掩码位数的一半;
比较因子变量,记录每次循环生成的比较因子,它代表每次二分查找中所读出的元素的值,初值为0;
优先级累加变量,其终值就是最高优先级值,初值为0;它代表每次查找指针的位置,在每次循环比较时,根据上一次比较的结果,它的值或者保持上一次取值,或者为自身上一次取值与二分增量变量取值累加的结果;
过渡变量,生成比较因子时使用,初值为0;
查找过程依次如下:
把CPU通用寄存器GPR27~GPR31中的数值保存在用户堆栈中,而把这些寄存器作为上述各查找变量的存储空间使用;
以无符号数的形式把当前的状态掩码值加载到优先级状态掩码副本变量中;
按以下步骤执行循环比较过程:
首先把二分增量变量与优先级累加变量的和放在过渡变量中,由过渡变量以2为底作乘幂而得到比较因子;
再把比较因子与状态掩码值比较,若比较因子的值小于状态掩码值,则优先级累加变量值设为过渡变量的当前值,否则优先级累加变量保持不变;
把二分增量变量减半,重复以上比较过程,一直到二分增量为1无法再减半,此时优先级累加变量中保存的值即为当前最高的优先级值;
(3)获取用户任务信息:以获得的最高优先级为索引,访问就绪任务列表中的任务优先级队列,把该优先级队列中队头的元素取出,即得到应该执行的用户任务信息;
(4)任务切换:调度器从目标任务的用户任务堆栈中读取保存的运行现场即CPU寄存器信息,把它们写回到CPU寄存器中,然后跳转到该用户任务的代码去执行。
本发明使用简单的一级掩码结构而无需其它辅助结构,从而减少了存储空间需求,使用高效的二分查找法并减少内存访问次数,使调度延时稳定,运行高效,并且提高了灵活性。通过这些技术特点达到在满足系统实时性要求的同时还节省了存储空间的目的。
附图说明
图1:二分查找法原理图。
图2:清华OSEK操作系统简图。
图3:就绪任务列表与任务状态掩码的对应关系图。
图4:调度器原理框图。
图5:调度器在MPC555微控制器平台上的实现流程图。
图6:MPC555微控制器寄存器分类示意图。
具体实施方式
二分查找是一种常用的有序表查找方法。其原理见图1。不失一般性,设列表中的元素按从大到小排列。二分查找法最开始对整个列表进行查找。查找指针指向列表中点的元素,取该元素与目标值即要查找的元素比较,若两者恰好相等,则查找成功;若中点元素值小于目标值,说明要查找的元素在表的前半部分,否则说明要查找的元素在表的后半部分。根据判断结果,取列表的前半部分子表或者后半部分子表,将查找指针指向子表的中点元素重复上面的比较过程,直到查找成功或者列表已经无法再拆分为止。二分查找对长度为n的列表最多只需查找[log2(n+1)]([]表示向上取整)次,与顺序查找最多需要n次相比,效率明显提高。
本发明提出的方法是嵌入式实时操作系统内核的一部分,以操作系统代码的形式实现。下面以清华大学自主开发的清华OSEK(车用开放式系统及其接口规范)操作系统、基于MPC555微控制器的硬件平台环境为例,说明该调度方法的实施方案。
运行于MPC555平台上的清华OSEK操作系统包括六部分:启动代码、系统内核操作、用户任务代码、中断处理程序、就绪任务列表及任务状态掩码。如附图2所示。
MPC555微控制器的中断向量表规定了多个程序入口地址。其中0x100是系统启动代码的入口地址。启动代码在系统上电复位时自动执行。第一步先进行硬件初始化操作,即暂时禁止硬件中断、设置系统时钟频率以及关闭软件看门狗。这些操作的细节见表1说明。第二步操作是将堆栈指针寄存器和数据段基地址寄存器分别设置为系统堆栈和数据段的地址(具体数值由用户指定)。第三步操作是将可以开始执行的任务添加到就绪任务列表中并建立任务优先级列队和任务状态掩码(详述见后)。最后,启动代码打开硬件中断开关允许硬件中断,再执行系统内核操作中的调度器操作,开始执行用户任务。调度器根据本发明使用的方法从就绪列表中选择用户任务来执行。
表1  MPC555初始化过程主要硬件操作列表
  硬件操作   对应的硬件设置方法
  禁止硬件中断   往第81号特殊寄存器写任意数值,如执行汇编指令mtspr 81,r3。
  允许硬件中断   往第80号特殊寄存器写任意数值,如执行汇编指令mtspr 80,r3。
  设置系统时钟频率   设置锁相环、低电及复位控制寄存器PLPRCR(地址0x12FC284),当硬件晶振为4MHz 时,若PLPRCR=0x900000,系统时钟频率为40MHz,若PLPRCR=0x400000时,系统时钟频率为20MHz。
  关闭软件看门狗   将系统保护控制寄存器SYPCR(地址0x12FC004)最低第三位清0(比如SYPCR=0xFFFFFF03)。
系统内核操作包括激活任务、终止任务和调度器三个操作。激活任务操作将一个用户任务添加到就绪任务列表,终止任务操作将任务从就绪任务列表中删除。调度器是任务切换机制的核心,按照一定的策略从就绪任务列表中选取一个用户任务,跳转到该任务开始执行。系统内核操作代码支持抢占式调度,即当用户任务代码或者中断处理程序调用系统内核操作激活一个高优先级的用户任务的时候,激活任务操作可以调用调度器选择新激活的任务,强制打断正在运行的优先级较低的用户任务,而转到激活的任务去执行。
中断处理程序是操作系统中相对独立的一部分,这部分代码放在中断处理程序入口地址处。它由系统中的硬件事件触发,何时执行由运行时的软硬件状态决定,在设计中无法预计。在MPC555微控制器中,外部中断处理程序放在入口地址0x500处,计数器中断处理程序放在入口地址0x900处。当硬件产生中断信号以后,CPU响应中断,自动切换到相应的入口地址执行指令。中断处理程序可以调用系统内核操作,激活新任务,从而打乱用户任务执行的流程。它依次含有中断处理程序入口、用户中断服务程序和中断处理程序结束三个部分。中断处理的优先级高于用户任务优先级,由用户中断服务程序激活了的新任务,只能等中断处理程序结束后再通过调度器来执行。具体体现在图2的系统中,当中断处理程序调用“激活任务”的内核操作时,该内核操作将不调用调度器,而是由中断处理程序结束部分调用。
就绪任务列表记录当前可以执行的用户任务信息,包括任务优先级、用户程序入口地址、用户堆栈指针。这三个数值最初均由用户自行定义。在系统运行过程中,用户代码或者操作系统代码都可以修改用户堆栈指针的值,从而达到在堆栈中保存或者恢复数据的目的。如果一个任务放在就绪任务列表中,称这些任务处于就绪态。就绪列表由多个任务优先级队列组成,队列的数目和优先级数值的数目相同。用户任务信息按照优先级分类排列,每个优先级的任务放在一个队列中。任务优先级列队是一系列先进先出(FIFO)队列,每个优先级分配一个队列。当执行激活任务操作时,系统内核操作将该任务添加到就绪任务列表,并将它的任务编号添加到相应优先级的FIFO队列中,然后进行掩码映射完成就序列表状态到任务状态掩码的映射。
任务状态掩码用于标记任务优先级列队的当前状态。在操作系统生成时,根据用户配置的最大优先级分配状态掩码,掩码的每一二进制位标识了一个优先级状态,优先级为n的任务对应掩码的的n位,当该位为0时,表示对应优先级的任务没有就绪(或该优先级任务列队是空的),当为1时,表示对应优先级的任务已经就绪(或该优先级任务列队中存在就绪任务)。分配的掩码位数为2的幂次,如果任务最大优先级值在2n和2n+1之间,则分配2n+1位。当用户任务或中断服务程序调用系统内核操作激活任务时,若某一优先级任务列队由空变为不空,则激活任务操作将改优先级对应的掩码置1。当用户任务结束时,若该优先级任务列队变空,则终止任务操作将该优先级对应的掩码清0。就绪任务列队和任务状态掩码的对应关系见图3所示。
清华OSEK作为符合OSEK规范的操作系统,具有如下特征:
每个任务用一个优先级数值表示其重要程度。调度器选择处于就绪任务列表中的最高优先级的任务执行。同一优先级的任务遵从先进先出的原则,即先加入就绪任务列表的任务优先执行。
支持抢占式调度,即一个优先级高的用户任务可以强制打断一个优先级低的用户任务的执行。
中断处理程序优先级高于用户任务优先级。在中断处理程序中如果激活了新任务,不能立刻进行任务调度,而应该等中断处理程序结束后才进行。所以,抢占式调度只发生在第一层中断程序结束处。
在符合OSEK规范的操作系统中,选择下一个任务来运行有两种情况。一种是由于用户激活了比当前任务的优先级更高的任务,在这种情况下,系统直接在这两者之间进行任务切换,任务切换的具体步骤在后面有详细叙述。此时,无需再考虑整个就绪任务列表的情况。另一种情况是由任务主动申请调度或终止时,或者中断服务程序激活了新任务时,或者由系统初始化代码跳转到用户任务执行时,调度器要考虑整个就绪任务列表才能决定下一个运行的任务。在本发明实现的系统中,对第一种情况的处理和目前其它操作系统的处理基本一致,也就是说,在图2的系统中,用户任务通过“激活任务”内核操作调用调度器进行任务调度时,将不涉及本发明采用的方法。本发明实现的系统主要针对上述第二类情况进行改进。
本发明实现过程的原理框图如图4所示。调度器执行有如下情况:用户任务直接调用调度器或者通过“终止任务”系统内核操作调用调度器,或者中断服务程序激活了新任务并在中断处理结束时调用调度器,或者系统初始化代码完成并准备切换到用户任务时调用调度器。在上述情况下,调度器按本发明实现的方法执行。首先用二分查找法确定最高优先级。这一步骤涉及的操作变量有:优先级状态掩码副本变量(加载系统当前的优先级分布状态掩码)、二分增量变量(记录每次循环的优先级增量)、比较因子变量(纪录每次循环生成的比较因子)、优先级累加变量(其累加结果为最高优先级值)和过渡变量(生成比较因子时使用),在运行中,系统将CPU通用寄存器GPR27~GPR31的原有数值放入用户堆栈,而这几个32位的通用寄存器分别作为上述变量的存储空间使用。二分增量变量的初值为状态掩码位数的一半,其它变量初值均为0,然后以无符号数的形式将当前的状态掩码值加载到优先级状态掩码副本变量中,开始执行循环比较过程:首先将二分增量变量值与优先级累加变量值的和放入过渡变量,由过渡变量以2为底乘幂得到比较因子,然后将比较因子与状态掩码值比较,如果其值小于状态掩码值,则优先级累加变量值设为过渡变量的当前取值,否则优先级累加变量值保持不变,然后将二分增量变量值除二,重新生成比较因子,重复比较过程。例如对n个优先级的系统,二分增量变量的初值为n/2,由此得出第一轮比较的过渡变量为n/2,比较因子为2n/2,若该比较因子的值小于状态掩码值,则优先级累加变量值设为n/2,二分增量减小为n/4,这样第二轮生成的比较因子为2n/2+n/4,否则优先级累加变量保持为0不变,二分增量减小为n/4,第二轮生成的比较因子就为2n/4=2n/2-n/4。上述过程一直重复到二分增量为1、不能再减半时结束。此时,在优先级累加变量中保存的值就是当前最高的优先级值。
上述过程是二分查找的一种变形。优先级为n的任务相当于列表中值为2n的元素。二分查找法中的查找目标,在这里定为所有就绪态任务代表的元素之和,即状态掩码值。假设处于就绪态的最高优先级任务优先级为k,则它代表的元素为2k,而所有就绪态任务代表的元素之和大于或等于2k,且小于2k+1,这样,二分查找的查找区间最后正好落到最高优先级任务对应的位置上。查找过程没有显式的构造查找列表,而只需用比较因子变量代表每次查找中所读出的元素的值,用优先级累加变量代表查找指针的位置,二分增量变量表示每次查找时子表的大小。每次比较时,如果比较因子大于状态掩码,改变优先级累加变量,相当于取子表的前半部分继续查找,否则相当于取子表的后半部分查找。从而大大节省了占用的内存空间。
得到当前最高优先级后,根据它来定位任务。以优先级为索引进行一次内存寻址,就可以从就绪任务列表中定位到当前最该运行的任务列队,读取队首的用户任务信息。
在系统获得最高优先级的任务信息后,进行任务切换。任务切换是指在打断当前任务而转到另一个任务执行时,将被打断的任务运行现场即CPU的寄存器保存到用户预留的内存空间即用户堆栈中,在恢复到该用户任务执行时,将保存的内容重新写入CPU寄存器,这样,用户任务可以像没有被间断过一样正常运行。MPC555微控制器属于PowerPC结构的处理器,其寄存器全集见图6,其中,用户程序运行需要保存的寄存器如表2所示。
在PowerPC处理器结构中,LR保存函数调用时的返回地址,MSR保存程序运行过程的处理器配置状态,SRR0保存中断结束后的返回地址,SRR1保存中断发生时的MSR状态,CR、XER保存整数运算、逻辑运算和浮点运算指令设置的标志位,CTR用于程序循环计数。这些寄存器是程序运行过程必不可少的。因此,一段程序如果被打断后恢复执行,必须恢复这些寄存器原来的状态,才能使程序运行正常。通用寄存器r0~r31中,r1为堆栈指针,r2、r13为系统小数据段的基地址,这几个寄存器的内容不会被用户任务破坏。r0、r3~r12用于函数调用时传入和返回参数,r14~r31用于保存临时变量,用户任务要正常运行必须保证这些寄存器被正确保持和恢复。
表2   PowerPC结构处理器主要寄存器列表
  名称   简写
  通用寄存器   GPR0~GPR31(简写r0~r31),
  浮点寄存器   FPR0~FPR31(简写f0~f31),
  链接寄存器   LR
  条件寄存器   CR
  机器状态寄存器   MSR
  机器状态保存/恢复寄存器   SRR0、SRR1
  浮点状态寄存器   FPSCR
  整数异常寄存器   XER
  计数寄存器   CTR
按照PowerPC-EABI规范(基于PowerPC结构的嵌入式系统代码接口规范),通用寄存器r1在操作系统中作为当前任务的堆栈的指针,又称为堆栈寄存器,简称SP。
在用户任务激活被打断或者申请调度的时候,激活任务操作或者调度器将SP指向用户堆栈,并将堆栈指针上移保存CPU现场所需空间,然后将用户任务现场保存在该内存空间内;在决定切换到该任务执行时,调度器将原先保存在用户堆栈中的用户任务现场装到CPU相应的寄存器中,然后将堆栈指针下移同样的空间,此时SRR0寄存器中记录了用户任务代码应该开始或者继续执行的位置,调度器执行rfi指令,就跳转到用户任务代码中执行。
本发明软件程序实现的流程图如图5所示。
系统实现后,我们对该调度方法在MPC555评估系统运行于40M的时钟频率下进行了测试,寻找最高优先级的过程所需要的时间稳定在2.5μS,比遍历就绪任务列队法即高效又稳定。在存储需求方面更突出,只需要4个字节,与两级分组映射的方法庞大的存储需求对比,该方法既节省存储空间,又灵活方便。
在对n个优先级的系统,采用本发明方法的需要的最大查找次数为[log2(n+1)]次,而采用顺序遍历法需要的最大查找次数为n次,本发明方法在算法复杂度上明显优于顺序遍历法,而稍逊于μC/OS-II操作系统采用的两级分组映射法(不论优先级多少,均只需两次查表操作)。但是,本发明方法在存储空间占用上大大低于两级分组映射法。例如对32个优先级的系统,本发明方法只需用4个字节(32个二进制位)表示状态掩码。而两级分组映射法需要以8个优先级为一组建立映射表,第一级掩码需要1个字节,映射表需要4个字节,第二级掩码需要8个字节,映射表需要28=256个字节,总共需要269个字节。具体比较结果见表3。此外,与分组映射法相比,本发明方法采用的掩码结构更加简单,因而在操作系统动态改变任务优先级的情况下,改变状态掩码所需的操作比分组映射法要少得多。可见,本发明方法具有更好的综合性能。
表3  几种调度实现方法的时间和空间效率比较(以32个优先级为例)
  调度方法   查找次数   速度评估   存储需求
  本发明方法   5   稳定、较快   4字节(低)
  两级分组映射法   2   稳定、快   269字节(高)
  顺序遍历法   1~32   不稳定   4字节(低)

Claims (1)

1.嵌入式实时操作系统的二分查找式任务调度方法,包括就绪任务队列的查找方法,其特征在于:它是一种当任务主动申请调度或终止时,或者中断服务程序激活了新任务时,针对PowerPC处理器且基于优先级的先进先出队列调度方法;它先采用状态掩码表示任务列表中任务的就绪状态,而任务列表是用户根据优先级大小而顺序列出的,然后利用移位比较的方法实现二分查找,快速定位最高优先级任务,调度器则据此进行任务切换;整个过程以操作系统代码的形式实现,它依次含有以下步骤:
(1)设定操作系统代码,它保存在MPC555控制器的存储器中,包括如下部分:
系统启动代码:依次含有硬件初始化、初始化堆栈、初始化就绪任务列表以及开始调度的操作,在系统上电复位时自动执行;
系统内核操作代码:它支持抢占式调度,包括供系统启动代码、用户任务代码、或中断处理程序调用的激活任务、终止任务和调度器操作的代码;所述的调度器操作代码是指按照规定策略从就绪任务列表中选取一个用户任务再跳转到该任务执行的操作;
用户任务代码:该由用户自定义的用户任务可以调用系统内核操作去激活其它任务、申请调度或者终止自身的执行;
中断处理程序操作代码:它依次含有中断处理程序入口、用户中断服务程序和中断处理程序结束三个部分;中断服务调用系统内核操作去激活新任务;中断处理的优先级高于用户任务优先级;
就绪任务列表:记录当前可以执行的按照优先级分类排列且以队列形式出现的用户任务信息,包括任务优先级、用户程序入口地址和用户堆栈指针这三个数值;
就绪态任务状态掩码:用于标记任务优先级列队的当前状态,它是在操作系统生成时,根据用户配置的优先级顺序来分配状态掩码的,掩码的每一个二进制位标识了一个优先级状态,优先级为n的任务对应掩码的第n位,当该位为0时,表示对应优先级的任务没有就绪,或该优先级任务列队是空的,当为1时,表示对应优先级的任务已经就绪,或该优先级任务列队中存在就绪任务;
(2)用二分查找法确定最高优先级任务:
二分查找法中的查找目标,在这里定为所有就绪态任务代表的元素之和,即状态掩码值,优先级为n的任务相当于查找列表中值为2n的元素;当就绪态的最高优先级任务优先级为k,则它代表的元素为2k,而所有就绪态任务代表的元素之和大于或等于2k,且小于2k+1,而二分查找的查找区间最后正好落到最高优先级任务对应的位置上;
设定二分查找法的操作变量:
当前优先级分布状态掩码的副本变量;
二分增量变量,记录每次循环比较的优先级增量,它表示每次查找时子表的大小,初值为状态掩码位数的一半;
比较因子变量,记录每次循环生成的比较因子,它代表每次二分查找中所读出的元素的值,初值为0;
优先级累加变量,其终值就是最高优先级值,初值为0;它代表每次查找指针的位置,在每次循环比较时,根据上一次比较的结果,它的值或者保持上一次取值,或者为自身上一次取值与二分增量变量取值累加的结果;
过渡变量,生成比较因子时使用,初值为0;
查找过程依次如下:
把CPU通用寄存器GPR27~GPR31中的数值保存在用户堆栈中,而把这些寄存器作为上述各查找变量的存储空间使用;
以无符号数的形式把当前的状态掩码值加载到优先级状态掩码副本变量中;
按以下步骤执行循环比较过程:
首先把二分增量变量与优先级累加变量的和放在过渡变量中,由过渡变量以2为底作乘幂而得到比较因子;
再把比较因子与状态掩码值比较,若比较因子的值小于状态掩码值,则优先级累加变量值设为过渡变量的当前值,否则优先级累加变量保持不变;
把二分增量变量减半,重复以上比较过程,一直到二分增量为1无法再减半,此时优先级累加变量中保存的值即为当前最高的优先级值;
(3)获取用户任务信息:以获得的最高优先级为索引,访问就绪任务列表中的任务优先级队列,把该优先级队列中队头的元素取出,即得到应该执行的用户任务信息;
(4)任务切换:调度器从目标任务的用户任务堆栈中读取保存的运行现场即CPU寄存器信息,把它们写回到CPU寄存器中,然后跳转到该用户任务的代码去执行。
CN 200310100463 2003-10-17 2003-10-17 嵌入式实时操作系统的二分查找式任务调度方法 Expired - Fee Related CN1238787C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200310100463 CN1238787C (zh) 2003-10-17 2003-10-17 嵌入式实时操作系统的二分查找式任务调度方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200310100463 CN1238787C (zh) 2003-10-17 2003-10-17 嵌入式实时操作系统的二分查找式任务调度方法

Publications (2)

Publication Number Publication Date
CN1529233A CN1529233A (zh) 2004-09-15
CN1238787C true CN1238787C (zh) 2006-01-25

Family

ID=34304047

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200310100463 Expired - Fee Related CN1238787C (zh) 2003-10-17 2003-10-17 嵌入式实时操作系统的二分查找式任务调度方法

Country Status (1)

Country Link
CN (1) CN1238787C (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100349121C (zh) * 2005-07-08 2007-11-14 北京中星微电子有限公司 嵌入式并行计算系统以及嵌入式并行计算方法
CN100351793C (zh) * 2005-09-12 2007-11-28 浙江大学 支持osek标准的嵌入式实时操作系统的任务调度方法
CN101547149B (zh) * 2009-04-20 2013-06-19 浙江大学 一种基于can网络的osek com消息动态调度方法
CN102004664A (zh) * 2010-10-18 2011-04-06 北京控制工程研究所 一种空间飞行器嵌入式实时操作系统调度方法
CN102957178B (zh) * 2011-08-24 2015-09-09 上海晨兴希姆通电子科技有限公司 改进的折半查找算法在充电管理中的应用方法
US20150215633A1 (en) * 2012-08-22 2015-07-30 Nec Corporation Image-data binary arithmetic decoding device and image decoding device
CN103729245B (zh) * 2013-12-27 2017-03-08 普华基础软件股份有限公司 一种osek操作系统内核动态过程静态化方法
CN105467873B (zh) * 2015-11-27 2018-04-17 北京友信宏科电子科技有限公司 一种车辆交流电机控制器的任务调度方法及装置
CN110673937B (zh) * 2019-09-19 2022-11-15 惠州志顺电子实业有限公司 单片机及其同步异步控制方法
CN116974728B (zh) * 2023-09-20 2024-01-02 深圳市德兰明海新能源股份有限公司 单片机任务调度方法、单片机产品及存储介质
CN118025049B (zh) * 2024-04-15 2024-07-09 成都创科升电子科技有限责任公司 一种基于调度器的车辆电控件的控制方法、系统及车辆

Also Published As

Publication number Publication date
CN1529233A (zh) 2004-09-15

Similar Documents

Publication Publication Date Title
CN1208721C (zh) 基于PowerPC处理器结构的分级任务切换方法
US10255287B2 (en) Method and apparatus for on-disk deduplication metadata for a deduplication file system
CN1294485C (zh) 相关性链处理器
Graefe Implementing sorting in database systems
CN1238787C (zh) 嵌入式实时操作系统的二分查找式任务调度方法
US10007605B2 (en) Hardware-based array compression
JP7047228B2 (ja) データ照会方法、装置、電子機器、可読記憶媒体、及びコンピュータープログラム
CN1233797A (zh) 在面向对象的系统中的位置特定的信息分配
CN87100507A (zh) 微处理器芯片上的堆栈式超高速缓冲存储器
CN1601476A (zh) 用于smt处理器上的cpi调度的系统和方法
CN1605062A (zh) 处理器的装入/移动以及复制指令
Milvang-Jensen et al. BDDNOW: a parallel BDD package
CN1783020A (zh) 基于PowerPC体系结构的嵌入式操作系统的中断管理方法
EP1899799A2 (en) Storage architecture for embedded systems
CN102004664A (zh) 一种空间飞行器嵌入式实时操作系统调度方法
US20100191717A1 (en) Optimization of query processing with top operations
EP2941704B1 (en) Zero-copy caching
CN1450450A (zh) 采用双指令集的32位嵌入式微处理器
CN1329309A (zh) 操作系统的多语言用户接口
CN101051302A (zh) 用于在计算系统上加载程序的方法和系统
CN1260546A (zh) 在手持装置中存储和检索数据的方法及装置
CN1109979C (zh) 计算机硬盘数据快速保护与恢复方法
CN200953143Y (zh) 一种虚拟硬件系统
Kukunas et al. A genetic algorithm to improve linux kernel performance on resource-constrained devices
Park et al. KV-CSD: A Hardware-Accelerated Key-Value Store for Data-Intensive Applications

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C19 Lapse of patent right due to non-payment of the annual fee
CF01 Termination of patent right due to non-payment of annual fee