当前位置: 首页 > 专利查询>清华大学专利>正文

基于PowerPC处理器结构的分级任务切换方法技术

技术编号:2872564 阅读:386 留言:0更新日期:2012-04-11 18:40
基于PowerPC处理器结构的分级任务切换方法,以操作系统代码的形式实现任务的切换,其特征在于:它除了实现由用户任务来执行激活新任务或申请调度的操作外,主要针对以操作系统代码的形式来执行由中断程序激活任务而产生任务切换的情况;所述的操作系统代码含有以下部分:    系统启动代码:    放在MPC555微控制器地址0x100处,在系统上电复位时自动执行,依次含有硬件初始化、初始化堆栈、初始化就绪任务列表以及开始调度的操作;     系统内核操作代码:    包括供系统启动代码、用户任务代码、或中断处理程序调用的激活任务、终止任务和按照规定策略从就绪任务列表中选取一个用户任务再跳转到该任务执行的这样一种调度器操作;系统内核操作代码支持抢占式调度,即当用户任务代码或者中断处理程序调用系统内核操作激活一个高优先级的用户任务的时候,激活任务操作可以调用调度器选择新激活的任务,强制打断正在运行的优先级较低的用户任务,而转到激活的任务去执行;    用户任务代码:    任务由用户自定义;该用户任务可以调用系统内核操作,激活其他任务、申请调度或者终止自身的执行;    就绪任务列表:    记录当前可以执行的用户任务信息,包括任务优先级、用户程序入口地址和用户堆栈指针这三个数值;    中断处理程序操作代码:    它依次含有中断处理程序入口、用户中断服务程序和中断处理程序结束三个部分;其中,外部中断处理程序放在MPC555微控制器的入口地址0x500处,计数器中断处理程序放在入口地址0x900处,该中断处理的优先级高于用户任务优先级,由用户中断服务程序激活了的新任务,只能等中断处理程序结束后再通过调度器来执行;    所述的中断处理程序,其框架依次包含保存现场、堆栈切换、调用用户服务程序、中断恢复处理四个步骤,现分述如下:    (1)保存现场:     在批量预留堆栈空间的条件下,分级入栈式的保存被打断任务的执行现场,即MPC555中CPU的各种寄存器的值;PowerPC处理器结构下的寄存器遵循统一的PowerPC-EABI(基于PowerPC结构的嵌入式系统代码接口)规范;    首先,把用户任务上下文即寄存器按内容划分为以下三个部分:    基本部分:包括链接寄存器(LR)、机器状态寄存器(MSR)、保存中断结束后返回地址的机器状态保存/恢复寄存器(SRR0)、保存中断发生时MSR状态的机器状态保存/恢复寄存器(SRR1)、条件寄存器(CR)、整数异常寄存器(XER)、计数寄存器(CTR)及通用寄存器r0、r3~r12;在调用高级语言函数时应当保存;    扩展部分:包括通用寄存器r14~r31,只在任务调度时需要保存;    可选部分:浮点寄存器f0~f31和浮点状态寄存器FPSCR,只用于浮点计算情况下;    其次,在执行任务过程中产生中断时,或者在执行另一个中断处理程序过程中产生中断即中断嵌套时,在根据PowerPC处理器指令体系所定义的堆栈操作指令批量预留了保存完整上下文即全部寄存器内容的条件下,只先执行第一级入栈操作即只先执行保留基本部分的操作;在中断处理程序结束后若要进行任务调度时,再进行第二级入栈操作保存扩展部分或第二级和第三级保存可选部分的入栈操作,激活调度器,否则恢复现场返回用户任务;    (2)堆栈切换:    使用户堆栈只保留用户任务上下文,系统堆栈保留中断服务程序上下文,根据中断层数或中断处理结束后任务调度的情况使堆栈指针在用户堆栈和系统堆栈之间进行堆栈切换;    (3)调用用户中断服务程序:    中断处理程序通过一个包括中断索引地址和对应的用户中断服务程序入口地址两项的中断查找表跳转到用户编写的中断服务程序;再通过系统定义的一个全局性的调度标志来通知中断处理程序是否需要进行任务切换,该调度标准设在系统内核操作代码中,在第一层中断处理程序进行堆栈切换的同时置为0,当用户中断服务程序要激活新任务时,把调度标志置为1,通知中断服务程序需要进行任务切换,它根据系统配置情况进行第二级或第二、第三级入栈操作,把相应寄存器的值写入第一级入栈操作时预留的用户堆栈空间里;    (4)中断恢复处理:    若用户中断服务程序完成后,判断不需要进行任务切换,则中断处理程序直接执行恢复现场操作,返回被中断的用户任务。(*该技术在2023年保护过期,可自由使用*)

【技术实现步骤摘要】

属于嵌入式实时操作系统
,尤其涉及基于PowerPC处理器结构的嵌入式实时操作系统

技术介绍
任务切换机制是多任务实时操作系统的核心。其中,堆栈操作是任务切换的主要操作。堆栈操作的合理性,直接关系到操作系统的稳定性和运行效率。任务切换机制的主要任务是保存和恢复必要的程序运行现场,使得程序可以在执行过程中被打断而不产生错误结果。一方面,实时操作系统要求任务切换过程具有较高的速度;另一方面,嵌入式系统要求任务切换过程尽量节省资源。采用占先式调度的操作系统,中断处理过程和任务切换过程紧密联系,任务切换所需的堆栈操作更为复杂。好的任务切换方法必须在保证系统可靠性的前提下,实现时间开销和空间开销的平衡。目前,现存的嵌入式实时操作系统种类繁多,各具特色。比较著名的嵌入式实时操作系统包括VxWorks、pSOS、QNX、WinCE、μC/OS-II和各种嵌入式实时Linux等等。为了保证通用性,上述各种嵌入式实时操作系统的任务切换机制均采用与处理器无关的实现框架,针对不同类型的处理器只进行细微的代码改动,这种方式有利于减少代码移植的工作量。但是,目前各种处理器在堆栈操作、寻址操作等方面的指令系统特征差别很大,如果针对特定的处理器结构设计任务切换机制,将更有利于充分利用特定处理器的功能,提高在该处理器平台上的运行效率。在现有的任务切换机制中,保存和恢复程序运行现场(在多任务操作系统中即为用户任务上下文,Context)是一次完成的,这个过程存在一些多余的操作,也就是说,程序运行现场的一部分状态实际上并没有被改变,不需要保存。一些操作系统根据不同情况,保存用户任务上下文的某一个或多个部分,以减少多余操作。但这种做法限制了后续程序的操作内容,降低了系统的灵活性。程序运行现场在内存中的保存位置有两种不同选择在用户堆栈中或在系统堆栈中。现有实时操作系统的任务切换机制只采用两种堆栈中的一种。在存在中断嵌套的系统中,只用用户堆栈使得每个用户任务都必须预留较大的堆栈空间;而只用系统堆栈则使得在发生任务调度时要进行额外的堆栈调整,降低了速度。
技术实现思路
针对现有实时操作系统的任务切换机制与处理器特性结合不够紧密、切换过程中存在多余操作、堆栈使用不够经济的问题,本专利技术基于PowerPC结构指令体系堆栈操作指令可以批量分配堆栈空间的特殊功能,提出了分级任务切换方法,主要包括下列内容1、分级入栈技术将用户任务上下文划分为基本、扩展和可选部分。在中断处理中,根据系统配置和任务调度性质的不同,采用只有基本部分入栈、基本部分和扩展部分入栈和全部上下文入栈三种方式。中断处理过程首先执行第一级入栈操作,保存上下文的基本部分,执行中断处理程序后,判断任务调度要求,选择执行下一级入栈操作并激活调度器,或者恢复现场返回用户任务。2、用户堆栈和系统堆栈间切换机制在中断预处理中进行堆栈切换,使用户堆栈只保留用户任务上下文,系统堆栈保留中断服务程序上下文,降低用户堆栈的负荷。3、提供了系统配置接口,可供用户进行系统级和任务级两种级别的配置。4、提供了对用户中断服务程序的封装。用户可以自行编写中断服务程序,经过封装自动生成实现上述机制的系统。本专利技术的特征在于它除了实现由用户任务来执行激活新任务或申请调度的操作外,主要针对以操作系统代码的形式来执行由中断程序激活任务而产生任务切换的情况;所述的操作系统代码含有以下部分系统启动代码放在MPC555微控制器地址0x100处,在系统上电复位时自动执行,依次含有硬件初始化、初始化堆栈、初始化就绪任务列表以及开始调度的操作。系统内核操作代码包括供系统启动代码、用户任务代码、或中断处理程序调用的激活任务、终止任务和按照规定策略从就绪任务列表中选取一个用户任务再跳转到该任务执行的这样一种调度器操作;系统内核操作代码支持抢占式调度,即当用户任务代码或者中断处理程序调用系统内核操作激活一个高优先级的用户任务的时候,激活任务操作可以调用调度器选择新激活的任务,强制打断正在运行的优先级较低的用户任务,而转到激活的任务去执行。用户任务代码任务由用户自定义。该用户任务可以调用系统内核操作,激活其他任务、申请调度或者终止自身的执行。就绪任务列表记录当前可以执行的用户任务信息,包括任务优先级、用户程序入口地址和用户堆栈指针这三个数值。中断处理程序操作代码它依次含有中断处理程序入口、用户中断服务程序和中断处理程序结束三个部分。其中,外部中断处理程序放在MPC555微控制器的入口地址0x500处,计数器中断处理程序放在入口地址0x900处,该中断处理的优先级高于用户任务优先级,由用户中断服务程序激活了的新任务,只能等中断处理程序结束后再通过调度器来执行。所述的中断处理程序,其框架依次包含保存现场、堆栈切换、调用用户服务程序、中断恢复处理四个步骤,现分述如下(1)保存现场在批量预留堆栈空间的条件下,分级入栈式的保存被打断任务的执行现场,即MPC555中CPU的各种寄存器的值。PowerPC处理器结构下的寄存器遵循统一的PowerPC-EABI(基于PowerPC结构的嵌入式系统代码接口)规范。首先,把用户任务上下文即寄存器按内容划分为以下三个部分基本部分包括链接寄存器(LR)、机器状态寄存器(MSR)、保存中断结束后返回地址的机器状态保存/恢复寄存器(SRR0)、保存中断发生时MSR状态的机器状态保存/恢复寄存器(SRR1)、条件寄存器(CR)、整数异常寄存器(XER)、计数寄存器(CTR)及通用寄存器r0、r3~r12;在调用高级语言函数时应当保存。扩展部分包括通用寄存器r14~r31,只在任务调度时需要保存。可选部分浮点寄存器f0~f31和浮点状态寄存器FPSCR,只用于浮点计算情况下。其次,在执行任务过程中产生中断时,或者在执行另一个中断处理程序过程中产生中断即中断嵌套时,在根据PowerPC处理器指令体系所定义的堆栈操作指令批量预留了保存完整上下文即全部寄存器内容的条件下,只先执行第一级入栈操作即只先执行保留基本部分的操作;在中断处理程序结束后若要进行任务调度时,再进行第二级入栈操作保存扩展部分或第二级和第三级保存可选部分的入栈操作,激活调度器,否则恢复现场返回用户任务。(2)堆栈切换使用户堆栈只保留用户任务上下文,系统堆栈保留中断服务程序上下文,根据中断层数或中断处理结束后任务调度的情况使堆栈指针在用户堆栈和系统堆栈之间进行堆栈切换。(3)调用用户中断服务程序中断处理程序通过一个包括中断索引地址和对应的用户中断服务程序入口地址两项的中断查找表跳转到用户编写的中断服务程序;再通过系统定义的一个全局性的调度标志来通知中断处理程序是否需要进行任务切换,该调度标准设在系统内核操作代码中,在第一层中断处理程序进行堆栈切换的同时置为0,当用户中断服务程序要激活新任务时,把调度标志置为1,通知中断服务程序需要进行任务切换,它根据系统配置情况进行第二级或第二、第三级入栈操作,把相应寄存器的值写入第一级入栈操作时预留的用户堆栈空间里。(4)中断恢复处理若用户中断服务程序完成后,判断不需要进行任务切换,则中断处理程序直接执行恢复现场操作,返回被中断的用户任务。经过在MPC555平台上初步测试,用本专利技术所述的方法从产生中断到进入本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:孙晓民蔡云鹏
申请(专利权)人:清华大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1