一种改善嵌入式实时操作系统中断延迟的方法.pdf

上传人:111****112 文档编号:973343 上传时间:2018-03-22 格式:PDF 页数:16 大小:727.67KB
返回 下载 相关 举报
摘要
申请专利号:

CN200910101891.9

申请日:

2009.08.31

公开号:

CN101639791A

公开日:

2010.02.03

当前法律状态:

授权

有效性:

有权

法律详情:

专利实施许可合同备案的生效IPC(主分类):G06F 9/48合同备案号:2017330000040让与人:浙江大学受让人:杭州速玛科技有限公司发明名称:一种改善嵌入式实时操作系统中断延迟的方法申请日:20090831申请公布日:20100203授权公告日:20121205许可种类:独占许可备案日期:20170406|||授权|||实质审查的生效|||公开

IPC分类号:

G06F9/48

主分类号:

G06F9/48

申请人:

浙江大学

发明人:

李 红; 吴朝晖; 张培锋; 张吕红; 周 霖; 周 丽; 杨国青

地址:

310027浙江省杭州市西湖区浙大路38号

优先权:

专利代理机构:

杭州求是专利事务所有限公司

代理人:

林怀禹

PDF下载: PDF下载
内容摘要

本发明公开了一种改善嵌入式实时操作系统中断延迟的方法。该方法先创建系统服务标志、临界区标志、非实时中断标志和待处理中断服务例程环形队列,然后使用特定步骤编写任意的操作系统服务、非实时中断的中断处理程序和操作系统的任务调度,最后将非实时中断的中断处理程序注册到中断向量表,将实时中断的中断服务例程注册到中断向量表。本发明使得操作系统的系统服务的实现过程中永远不执行关闭中断操作,可以缩短最大中断禁止时间,减少中断延迟,从而提高嵌入式实时操作系统的实时性。本发明实现中断管理所需要的时间开销和空间开销

权利要求书

1、  一种改善嵌入式实时操作系统中断延迟的方法,其特征在于该方法的步骤如下:
1)创建一个系统服务标志,一个临界区标志,一个非实时中断标志和一个待处理中断服务例程环形队列;
2)使用如下的流程编写任意的操作系统服务:
(2.1)设置系统服务标志;
(2.2)如果本系统服务是在非实时中断的中断服务例程中调用的,即非实时中断标志被置位,则进入步骤(2.3),否则跳转到步骤(2.8);
(2.3)设置临界区标志;
(2.4)访问操作系统的内核数据结构完成本系统服务的功能;
(2.5)重置临界区标志;
(2.6)重置系统服务标志;
(2.7)跳转到步骤(2.13);
(2.8)设置临界区标志;
(2.9)访问操作系统的内核数据结构完成本系统服务的功能;
(2.10)重置临界区标志;
(2.11)按照先到先服务策略调用待处理中断服务例程环形队列中的中断服务例程;
(2.12)执行操作系统任务调度;
(2.13)结束该操作系统服务操作并返回;
3)使用如下的流程实现操作系统的任务调度:
(3.1)查找下一个被执行的任务并切换任务上下文;
(3.2)重置系统服务标志、临界区标志和非实时中断标志,清空待处理中断服务例程环形队列;
4)使用如下的流程编写任意的非实时中断的中断处理程序:
(4.1)设置非实时中断标志;
(4.2)如果系统服务标志没有被置位,则进入步骤(4.3),否则跳转到步骤(4.4);
(4.3)保存操作系统上下文切换相关信息;
(4.4)如果临界区标志被置位或者待处理中断服务例程环形队列非空,则进入步骤(4.5),否则跳转到步骤(4.7);
(4.5)将本中断处理程序对应的中断服务例程加入待处理中断服务例程环形队列;
(4.6)屏蔽本中断并跳转到步骤(4.8);
(4.7)直接调用本中断处理程序对应的中断服务例程;
(4.8)重置非实时中断标志;
(4.9)如果系统服务标志没有被置位,则使用步骤(4.3)保存的上下文信息进行操作系统任务调度;
(4.10)结束该中断处理程序并返回;
5)将非实时中断的中断处理程序注册到中断向量表,将实时中断的中断服务例程注册到中断向量表。

说明书

一种改善嵌入式实时操作系统中断延迟的方法
技术领域
本发明涉及嵌入式实时操作系统,尤其是涉及一种改善嵌入式实时操作系统中断延迟的方法。
背景技术
随着嵌入式实时应用程序复杂度的增加,嵌入式实时操作系统得到日益广泛的应用,以实现任务调度、资源管理、同步与通讯、精确定时,以及I/O管理等。嵌入式实时操作系统需要对外部事件作出及时的响应,因而对实时性有极高要求,这是它与一般操作系统的最主要区别。评价一个实时操作系统的实时性的重要指标有两个,即任务调度时间和中断延迟。
中断延迟(Interrupt Latency)是指从中断发生到操作系统作出响应并执行中断服务例程(Interrupt Service Routine)的第一条指令所需要的时间,一般使用“最大中断禁止时间(Maximum Interrupt-masked Time)”来衡量。关闭中断的时间越长,则中断延迟越大,甚至可能导致中断丢失。
一般的嵌入式实时操作系统的系统服务都采用关闭中断的方法来保护临界区以实现对临界资源的操作。开放源代码的嵌入式实时操作系统uC/OS-II提供的保护临界区的方法,就是采用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来完成的。在宏OS_ENTER_CRITICAL()中,先保存当前的中断状态,然后关闭全局中断;在宏OS_EXIT_CRITICAL()中恢复先前的中断状态。从而,在这两个宏之间的临界区得到了保护。
关闭中断不可避免地增加了应用系统的中断延迟,导致应用系统的实时性下降。而实际上,大多数中断的处理与操作系统的内核数据结构无关,关闭中断导致这些与临界区无关的中断的延迟时间增大。
发明内容
针对上述存在的问题,本发明的目的是提供一种改善嵌入式实时操作系统中断延迟的方法。
本发明解决其技术问题所采用的关键点是:在操作系统系统服务的实现过程中永远不执行关闭中断操作。该方法将实时应用系统中使用的中断分为两类:实时中断和非实时中断。针对不同中断的操作按如下处理(1)实时中断具有比非实时中断更高的优先级。实时中断的中断服务例程不能使用操作系统服务。实时中断的中断服务例程结束后,被中断的操作得以继续。实时中断的中断服务例程直接注册到处理器的中断向量表,操作系统不对该中断进行管理。(2)非实时中断优先级小于实时中断优先级,但大于任务优先级。非实时中断的中断服务例程可以使用有限的操作系统服务,并且在退出前必须重新使能该中断。非实时中断的中断服务例程执行结束后,由于其使用的操作系统服务可能导致任务调度,因此可能会暂停被中断任务的操作而执行其他任务的操作。操作系统需要对非实时中断进行管理以保护被中断任务的上下文(Context)。因此,操作系统对用户的中断服务例程进行封装,形成中断处理程序(Interrupt Handler),再将中断处理程序注册到中断向量表。(3)实时中断允许嵌套实时中断。非实时中断可以被实时中断嵌套,但不可被非实时中断嵌套。(4)非实时中断的中断服务例程按照先到先服务(FCFS)策略进行处理。
本发明通过在操作系统系统服务的实现过程中永远不执行关闭中断操作来改善操作系统带来的中断延迟问题。
本发明采用的技术方案的步骤如下:
1)创建一个系统服务标志,一个临界区标志,一个非实时中断标志和一个待处理中断服务例程环形队列;
2)使用如下的流程编写任意的操作系统服务:
(2.1)设置系统服务标志;
(2.2)如果本系统服务是在非实时中断的中断服务例程中调用的,即非实时中断标志被置位,则进入步骤(2.3),否则跳转到步骤(2.8);
(2.3)设置临界区标志;
(2.4)访问操作系统的内核数据结构完成本系统服务的功能;
(2.5)重置临界区标志;
(2.6)重置系统服务标志;
(2.7)跳转到步骤(2.13);
(2.8)设置临界区标志;
(2.9)访问操作系统的内核数据结构完成本系统服务的功能;
(2.10)重置临界区标志;
(2.11)按照先到先服务策略调用待处理中断服务例程环形队列中的中断服务例程;
(2.12)执行操作系统任务调度;
(2.13)结束该操作系统服务操作并返回;
3)使用如下的流程实现操作系统的任务调度:
(3.1)查找下一个被执行的任务并切换任务上下文;
(3.2)重置系统服务标志、临界区标志和非实时中断标志,清空待处理中断服务例程环形队列;
4)使用如下的流程编写任意的非实时中断的中断处理程序:
(4.1)设置非实时中断标志;
(4.2)如果系统服务标志没有被置位,则进入步骤(4.3),否则跳转到步骤(4.4);
(4.3)保存操作系统上下文切换相关信息;
(4.4)如果临界区标志被置位或者待处理中断服务例程环形队列非空,则进入步骤(4.5),否则跳转到步骤(4.7);
(4.5)将本中断处理程序对应的中断服务例程加入待处理中断服务例程环形队列;
(4.6)屏蔽本中断并跳转到步骤(4.8);
(4.7)直接调用本中断处理程序对应的中断服务例程;
(4.8)重置非实时中断标志;
(4.9)如果系统服务标志没有被置位,则使用步骤(4.3)保存的上下文信息进行操作系统任务调度;
(4.10)结束该中断处理程序并返回;
5)将非实时中断的中断处理程序注册到中断向量表,将实时中断的中断服务例程注册到中断向量表。
在本发明中,除了操作系统处于调度时无法立刻响应外部中断外,当实时中断发生时,其中断服务例程可以立刻得到执行;当非实时中断发生时,如果系统服务正在执行,则非实时中断的中断服务例程会被加入到待处理中断服务例程环形队列并在系统服务的临界区操作结束之后得到运行;如果非实时中断发生时没有系统服务在执行,其中断服务例程也可以立刻得到执行。
本发明具有的有益效果是:
1.本发明把中断分为实时中断和非实时中断,使得对中断的使用和管理更加方便。将实时性要求高的中断作为实时中断直接注册到中断向量表,脱离操作系统的管理,减少操作系统管理中断带来的执行开销从而缩短中断延迟。
2.本发明在操作系统系统服务的实现过程中永远不执行关闭中断操作,使得实时中断的中断延迟几乎为零,提高了中断处理的实时性。
3.实时中断的中断延迟取决于操作系统的调度时间,而实时操作系统的调度时间是可确定的,因此实时中断的中断延迟也是可确定的,从而提高了实时应用系统的可预测性。
本发明实现中断管理所需要的时间开销和空间开销很少,非常适合微内核嵌入式实时操作系统。
附图说明
图1操作系统的系统服务流程图。
图2操作系统的非实时中断的中断处理程序流程图。
图3常见方法与本发明方法的最大中断禁止时间对比图。
图4常见方法与本发明方法对实时中断的中断延迟对比图。
图5常见方法与本发明方法对非实时中断的中断延迟对比图。
具体实施方式
下面结合附图和一个实施例对本发明作进一步分析和介绍。
如图1所示,使用如下的流程编写任意的操作系统服务:
(2.1)设置系统服务标志;
(2.2)如果本系统服务是在非实时中断的中断服务例程中调用的,即非实时中断标志被置位,则进入步骤(2.3),否则跳转到步骤(2.8);
(2.3)设置临界区标志;
(2.4)访问操作系统的内核数据结构完成本系统服务的功能;
(2.5)重置临界区标志;
(2.6)重置系统服务标志;
(2.7)跳转到步骤(2.13);
(2.8)设置临界区标志;
(2.9)访问操作系统的内核数据结构完成本系统服务的功能;
(2.10)重置临界区标志;
(2.11)按照先到先服务策略调用待处理中断服务例程环形队列中的中断服务例程;
(2.12)执行操作系统任务调度;
(2.13)结束该操作系统服务操作并返回。
如图2所示,使用如下的流程实现操作系统的任务调度:
(3.1)查找下一个被执行的任务并切换任务上下文;
(3.2)重置系统服务标志、临界区标志和非实时中断标志,清空待处理中断服务例程环形队列;
4)使用如下的流程编写任意的非实时中断的中断处理程序:
(4.1)设置非实时中断标志;
(4.2)如果系统服务标志没有被置位,则进入步骤(4.3),否则跳转到步骤(4.4);
(4.3)保存操作系统上下文切换相关信息;
(4.4)如果临界区标志被置位或者待处理中断服务例程环形队列非空,则进入步骤(4.5),否则跳转到步骤(4.7);
(4.5)将本中断处理程序对应的中断服务例程加入待处理中断服务例程环形队列;
(4.6)屏蔽本中断并跳转到步骤(4.8);
(4.7)直接调用本中断处理程序对应的中断服务例程;
(4.8)重置非实时中断标志;
(4.9)如果系统服务标志没有被置位,则使用步骤(4.3)保存的上下文信息进行操作系统任务调度;
(4.10)结束该中断处理程序并返回。
如图3所示,阐明了在一个系统服务中,本发明与常见方法的最大中断禁止时间的区别。在常见的嵌入式实时操作系统(如uC/OS-II)中,系统服务常常使用关闭中断的方式来保护临界区。为了保证操作系统服务操作的连续性,整个系统服务的代码都被当作临界区处理。一个系统服务的操作可以抽象成两部分:对内核数据结构的操作和任务调度。为了保护对内核数据结构的操作,常见方法是通过关闭中断来实现的,从而引入了中断关闭时间。任务调度是使用自陷指令(TRAP)或者软中断指令(SWI)实现的,这两个指令都是不可中断指令,以保证任务调度的原子性,从而导致不可中断时间。因此,常见方法的最大中断禁止时间是由中断关闭时间和不可中断时间构成的。而本发明对内核数据结构操作的保护是不需要关闭中断的,从而没有中断关闭时间。本发明的最大中断禁止时间仅由任务调度导致的不可中断时间构成。显然,本发明导致的最大中断禁止时间比常见方法的要小,从而中断延迟也小。
如图4所示,阐明了一个系统服务在执行时,本发明与常见方法对实时中断的处理的区别。当操作系统的系统服务在执行对内核数据结构的操作时,发生了一个实时中断。对于常见方法,由于在执行对内核数据结构的操作时中断是禁止的,而且持续到整个系统服务的操作完成,因此对该实时中断的响应被推迟到系统服务的操作完成,即任务调度结束后才开始执行实时中断服务例程,从而造成较长的中断延迟。而对于本发明,在执行对内核数据结构的操作时中断一直是允许的,因此操作系统可以立刻响应该实时中断,导致的中断延迟几乎为零。
如图5所示,阐明了一个系统服务在执行时,本发明与常见方法对非实时中断的处理的区别。当操作系统的系统服务在执行对内核数据结构的操作时,发生了一个非实时中断。对于常见方法,由于在执行对内核数据结构的操作时中断是禁止的,而且持续到整个系统服务的操作完成,因此对该非实时中断的响应被推迟到系统服务的操作完成,即任务调度结束后才开始执行非实时中断服务例程,从而造成较长的中断延迟。而对于本发明,在执行对内核数据结构的操作时中断一直是允许的,因此操作系统可以立刻捕获到该非实时中断,并把相应的非实时中断服务例程加入待处理中断服务例程环形队列;在系统服务完成对内核数据结构的操作后,立刻执行该非实时中断服务例程而非等到整个系统服务的操作完成,即任务调度结束后才开始执行非实时中断服务例程,从而减少中断延迟。
下面结合实施例对本发明进一步介绍。该实施例使用基于飞思卡尔HCS12微控制器的开发板作为硬件平台,使用应用本发明实现了系统服务和中断处理程序的SmartOSEK OS作为本实施例中的嵌入式实时操作系统。该实施例包含一个既可以在任务中调用又可以在中断服务例程中调用的SmartOSEK OS操作系统服务ActivateTask(pTask),一个时钟中断及其中断服务例程和一个串口接收中断及其中断服务例程。其中,时钟中断作为本发明中所述的实时中断,它的中断服务例程的功能是记录时钟中断发生的次数从而可以计算系统时间;串口接收中断作为本发明所述的非实时中断,它的中断服务例程的功能是使用操作系统服务ActivateTask(pTask)激活一个任务处理接收到的串口数据。
这种改善嵌入式实时操作系统中断延迟的方法在SmartOSEK OS中的实现步骤如下:
1)创建一个系统服务标志SSCflag,一个临界区标志CSflag,一个非实时中断标志NRTIflag,一个待处理中断服务例程环形队列pISRlist。
2)操作系统服务ActivateTask(pTask)的实现步骤如下:
(2.1)设置系统服务标志,即赋值SSCflag为1;
(2.2)如果非实时中断标志NRTIflag为1,则进入步骤(2.3),否则跳转到步骤(2.8);
(2.3)设置临界区标志,即赋值CSflag为1;
(2.4)将实现该系统服务功能相关的内核数据结构,即任务pTask的状态置为就绪态;
(2.5)重置临界区标志,即赋值CSflag为0;
(2.6)重置系统服务标志,即赋值SSCflag为0;
(2.7)跳转到步骤(2.13);
(2.8)设置临界区标志,即赋值CSflag为1;
(2.9)将实现该系统服务功能相关的内核数据结构,即任务pTask的状态置为就绪态;
(2.10)重置临界区标志,即赋值CSflag为0;
(2.11)按照先到先服务策略调用待处理中断服务例程环形队列中的中断服务例程,即检查待处理中断服务例程环形队列pISRlist是否非空,若非空则依次取出队列中所记录的中断服务例程并调用执行它;
(2.12)执行操作系统任务调度;
(2.13)结束该操作系统服务操作并返回。
3)操作系统任务调度的实现如下:
(3.1)查找下一个被执行的最高优先级的任务并切换任务上下文;
(3.2)重置系统服务标志、临界区标志和非实时中断标志,清空待处理中断服务例程环形队列;
4)串口接收中断的中断处理程序的实现步骤如下:
(4.1)设置非实时中断标志,即赋值NRTIflag为1;
(4.2)如果SSCflag为0,则进入步骤(4.3),否则跳转到步骤(4.4);
(4.3)保存操作系统上下文切换相关信息;
(4.4)如果CSflag为1或者队列pISRlist非空,则进入步骤(4.5),否则跳转到步骤(4.7);
(4.5)将串口接收中断的中断服务例程加入队列pISRlist;
(4.6)屏蔽串口接收中断并跳转到步骤(4.8);
(4.7)执行串口接收中断的中断服务例程;
(4.8)重置非实时中断标志,即赋值NRTIflag为0;
(4.9)如果SSCflag为0,则使用步骤(4.3)保存的上下文信息进行操作系统任务调度;
(4.10)结束该中断处理程序并返回。
5)将串口接收中断的中断处理程序注册到HCS12微控制器中断向量表的第20号的位置,将实时时钟中断的中断服务例程直接注册到HCS12微控制器的中断向量表中的第7号的位置。
针对上述的实现,下面介绍在下述场景中本发明执行的过程。在应用本发明实现了ActivateTask(pTask)系统服务和串口接收中断的中断处理程序的SmartOSEK OS中运行的一个任务调用了系统服务ActivateTask(pTask),当其执行到步骤(2.9)的时候同时发生了2个中断,即上述的实时时钟中断和串口接收中断。时钟中断的中断服务例程的功能是记录时钟中断发生的次数从而可以计算系统时间;串口接收中断的中断服务例程的功能是使用操作系统服务ActivateTask(pTask)激活一个任务处理接收到的串口数据。
当任务调用系统服务ActivateTask(pTask)并执行到步骤(2.9)的时候,已经把系统服务标志SSCflag赋值为1,临界区标志CSflag赋值为1。
由于实时时钟中断是实时中断,串口接收中断是非实时中断,因此实时时钟中断的优先级大于串口接收中断优先级,从而优先得到处理器的响应。处理器从中断向量表中得到实时时钟中断服务例程的入口,直接执行实时时钟中断的中断服务例程。实时时钟中断的中断服务例程执行结束后,处理器才响应串口接收中断。处理器从中断向量表中得到串口接收中断处理程序的入口,并依次执行步骤(4.1),(4.2),(4.4),(4.5),(4.6),(4.8),(4.9),(4.10)。可见串口接收中断的中断服务例程只是被加入队列pISRlist,并没有立刻执行。
串口接收中断处理程序返回后,被中断了的系统服务ActivateTask(pTask)继续执行后续的步骤(2.10),(2.11),(2.12),(2.13)。在步骤(2.11)中,串口接收中断的中断服务例程被执行。
从上述例子可以看出,本发明是不需要在操作系统的系统服务中执行关闭中断操作的。由于没有关闭中断,改善了中断延迟,尤其是实时中断的延迟。
中断延迟是使用最大中断禁止时间来衡量的。在基于飞思卡尔的HCS12微控制器的开发板上对比运行采用常见方法实现的SmartOSEK OS和采用本发明后的优化中断延迟的SmartOSEK OS,微控制器HCS12的处理器为MC9S12DP256,频率16MHz。在飞思卡尔提供的CodeWarrior Debugger上用模拟器运行,测试得到SmartOSEK OS部分系统服务的最大中断禁止时间分别如表1所示。
表1采用常见方法和本发明方法最大中断禁止时间对比(单位:CPU周期)

  系统服务  本发明方法  常见方法  ActivateTask  109  183  TerminateTask  93  107  ChainTask  93  245  GetResource  84  154  ReleaseResource  109  222

从表1可以看出,由于常见的实现操作系统服务的方法需要在系统服务中关闭中断,从而导致系统服务的最大中断禁止时间比较长。而采用本发明在系统服务中不需要关闭中断,因此本发明的最大中断禁止时间很短,此最大中断禁止时间仅表现为如图3所示的不可中断的操作系统任务调度的时间,从而最大程度地改善了中断延迟。

一种改善嵌入式实时操作系统中断延迟的方法.pdf_第1页
第1页 / 共16页
一种改善嵌入式实时操作系统中断延迟的方法.pdf_第2页
第2页 / 共16页
一种改善嵌入式实时操作系统中断延迟的方法.pdf_第3页
第3页 / 共16页
点击查看更多>>
资源描述

《一种改善嵌入式实时操作系统中断延迟的方法.pdf》由会员分享,可在线阅读,更多相关《一种改善嵌入式实时操作系统中断延迟的方法.pdf(16页珍藏版)》请在专利查询网上搜索。

本发明公开了一种改善嵌入式实时操作系统中断延迟的方法。该方法先创建系统服务标志、临界区标志、非实时中断标志和待处理中断服务例程环形队列,然后使用特定步骤编写任意的操作系统服务、非实时中断的中断处理程序和操作系统的任务调度,最后将非实时中断的中断处理程序注册到中断向量表,将实时中断的中断服务例程注册到中断向量表。本发明使得操作系统的系统服务的实现过程中永远不执行关闭中断操作,可以缩短最大中断禁止时间。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1