基于独立中断栈的中断退出时抢占调度方法

文档序号:6335682阅读:616来源:国知局
专利名称:基于独立中断栈的中断退出时抢占调度方法
技术领域
本发明涉及一种基于独立中断栈的中断退出时抢占调度方法,属于嵌入式操作 系统技术领域。
背景技术
对于不支持独立中断栈的处理器,如SPARC,中断发生后,CPU使用被中断任 务的堆栈进行中断处理,工作流程如图1所示。中断发生后,中断现场被保存在任务A 的堆栈中并且中断服务程序使用任务A的堆栈执行中断服务程序。与支持独立中断栈的 CPU相比,当系统中断嵌套层数过多时,容易造成任务栈溢出,导致系统崩溃。针对上述可能导致任务栈溢出的问题,传统的方法是为任务设置尽可能大的任 务堆栈空间,降低堆栈溢出的可能性。由于被中断的任务具有不确定性,因此需要为系 统中所有的任务都设置尽可能大的堆栈空间,而系统在进行中断处理时,最多只会占用 一个任务的堆栈,这样就造成内存资源的极大浪费。

发明内容
为了解决这些问题,本发明为不支持硬件中断栈的处理器提供了一种类似于硬 件中断栈的处理方法。在系统保存完中断上下文后,系统先切换到分配的专用于中断处 理的堆栈空间,然后执行中断服务程序。在中断服务程序执行完成后,中断退出前,先 切换回被中断的任务栈,最后才进行中断抢占调度。由于中断上下文是直接保存在任务 的堆栈中,相当于任务的局部变量,因而可以安全地切换出去,而不会造成中断上下文 的丢失。本发明采用的技术方案如下一种基于独立中断栈的中断退出时抢占调度方法,其特征在于包括以下步骤1)系统将被中断任务的上下文保存在任务的堆栈中;2)系统切换到分配的专用于中断处理的堆栈空间;3)执行中断服务程序;4)中断退出前,先切换回被中断任务的堆栈,最后才进行中断抢占调度。在所述步骤3)中,如果是中断嵌套,则系统直接调用中断服务程序。在所述步骤4)中,如果是中断嵌套,则系统直接返回到被中断的低优先级服务 程序,当最后一层中断服务程序执行完成时,系统进行抢占调度判断。本发明具有以下优点1.有效支持重负载下的中断处理,而不容易导致系统堆栈溢出,提高系统可靠 性;2.不需要转移被中断任务上下文,中断处理迅速;3.中断退出时的调度方法与任务级调度保持一致,使汇编代码量压缩到最少。


图1是传统中断嵌套执行原理;图2是任务栈与独立中断栈的切换原理;图3是基于独立中断栈的中断嵌套执行流程图;图4是基于独立中断栈的中断嵌套执行原理。
具体实施例方式本发明为不支持硬件中断栈的处理器提供了一种类似于硬件中断栈的处理方 法。在系统保存完中断上下文后,系统先切换到分配的专用于中断处理的堆栈空间,然 后执行中断服务程序。在中断服务程序执行完成后,中断退出前,先切换回被中断的任 务栈,最后才进行中断抢占调度。所谓抢占调度是指,高优先级任务可以抢占正在运行 的低优先级任务,而中断可以抢占任何任务。系统总是使高优先级任务和中断处理可以 得到及时处理,以确保系统的实时性。由于中断上下文是直接保存在任务的堆栈中,相 当于任务的局部变量,因而可以安全的切换出去,而不会造成中断上下文的丢失。原理 框图如图2所示。当第一次中断进入时,系统将被中断任务的上下文保存在任务自己的堆栈中, 然后系统切换到独立的中断栈,执行系统中断服务程序。如果是中断嵌套,则被中断的 是低优先级的中断服务程序,其上下文直接保存在独立的中断栈中,然后系统直接调用 中断服务程序,而不需要进行中断栈的切换。在中断退出时,系统先进行判断,如果是 中断嵌套的情况,系统直接返回到被中断的低优先级中断服务程序。当最后一层中断服 务程序执行完成时,系统进行抢占调度判断,即在系统中,如果有更高优先级的任务 准备就绪且调度未被锁定,则系统保存当前任务的上下文,切换到高优先级的任务中去 执行。由于在第一次进入中断时,被中断任务的上下文已经保存在任务自己的堆栈中, 对中断服务程序或其他任务来说是不可见的,所以不再需要转移被中断任务的上下文到 该任务的TCB中,系统可以直接进行调度,切换到其他任务去执行。经过本发明的处理 后,在系统进行中断处理时,不再使用被中断任务的堆栈,降低了系统对任务栈的空间 需求,在保证功能正确的同时,加快了中断处理流程。具体处理过程如图3所示。中断发生时的任务栈与中断栈的变化如图4所示。任务A被中断的现场保存在 当前任务栈中;然后堆栈指针切换到独立的中断栈。如果在执行中断服务程序期间,再 次发生中断,那么,此时堆栈指针已经指向中断栈,无需进行切换了,直接将中断现场 保存到中断栈中即可,当中断服务程序执行完毕后,再恢复中断现场。本发明已经在神舟OS操作系统中成功应用。通过本技术,神舟OS可以有效地 降低任务栈的空间需求,提高系统的中断吞吐量。
权利要求
1.一种基于独立中断栈的中断退出时抢占调度方法,其特征在于包括以下步骤1)系统将中断任务的上下文保存在任务的堆栈中;2)系统切换到分配的专用于中断处理的堆栈空间;3)执行中断程序;4)中断退出前,先切换回被中断任务的堆栈,最后才进行中断抢占调度。
2.如权利要求1所述的基于独立中断栈的中断退出时抢占调度方法,其特征在于 在所述步骤3)中,如果是中断嵌套,则系统直接调用中断服务程序。
3.如权利要求1所述的基于独立中断栈的中断退出时抢占调度方法,其特征在于 在所述步骤4)中,如果是中断嵌套,则系统直接返回到被中断的低优先级中断服务程序,当最后一层中断服务程序执行完成时,系统进行抢占调度判断。
全文摘要
本发明涉及一种基于独立中断栈的中断退出时抢占调度方法,其包括以下步骤1)系统将中断任务的上下文保存在任务的堆栈中;2)系统切换到分配的专用于中断处理的堆栈空间;3)执行中断程序;4)中断退出前,先切换回被中断任务的堆栈,最后才进行中断抢占调度。本发明具有以下优点1.有效支持重负载下的中断处理,而不容易导致系统堆栈溢出,提高系统可靠性;2.不需要转移被中断任务上下文,中断处理迅速;3.中断退出时的调度方法与任务级调度保持一致,使汇编代码量压缩到最少。
文档编号G06F9/48GK102012842SQ201010539870
公开日2011年4月13日 申请日期2010年11月9日 优先权日2010年11月9日
发明者刘姝, 王小飞, 程胜, 陶戈丹 申请人:北京神舟航天软件技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1