实施由一个实时操作系统控制的实时计算机系统的方法

文档序号:6410464阅读:165来源:国知局
专利名称:实施由一个实时操作系统控制的实时计算机系统的方法
技术领域
本发明涉及的是一种实施由一个实时操作系统控制的实时计算机系统的方法,该实时计算机系统处理一个技术进程的中断信号。
这样的方法用于例如在公用和专用网络的远程通信组件中使用的实时计算机系统。一个实时计算机系统的特征是,可以在一个已知限制的时间区间内中断一个程序-例如作为对一个中断信号反应而激活的程序-的处理,使得对该程序的继续处理仅在具有更高优先级的程序处理完才可能。当在远程通信组件中处理一个程序时,每秒钟可能发生例如大约到50000个中断信号,它们每次都中断一个正在被处理的程序,并且要求对中断信号做出反应。
已知的实时计算机系统在一个规定的时间段内禁止接收另外的中断信号,以致不再考虑在该时间段到来的中断信号,因此可能丢失信息。后面把该时间段称为中断禁止时间。中断禁止时间是需要的,以便微处理器能够通过处理一个中断子例程保护其寄存器,至少部分地对中断信号作出反应,并且最后重新更新寄存器,以便能够继续运行中断的程序。中断禁止时间越长,不考虑到来的中断信号越多。若有一个改进了的实施实时计算机系统的方法,使中断禁止时间缩短,那么这种方法将具有很大优越性。
因此本发明的任务是开发一个实时操作系统部件,它允许在每一时间单元采集尽可能大数目出现的中断信号,并作出反应。
该任务通过下述处理步骤而解决在一个中断信号出现时。实时计算机系统中断一个正在处理的程序;禁止接收其它的中断信号并调用一个属于该中断信号的中断子例程;在处理该中断子例程时临时存储在中断信号出现时被中断程序的第一部分程序参量;在一个中断存储器中至少存储一个关于该中断信号的数据;从中断子例程转向一个中断管理子例程,在这种情况下在处理中断管理子例程时重新开放对其它中断信号的接收;在处理完中断管理子例程后清除在中断存储器中属于中断信号的数据;临时存储中断信号出现时被中断程序的剩余部分程序参量;根据中断存储器中关于中断信号的数据至少激活一个属于该中断信号的反应子例程并在可能的情况下接入该实时操作系统下处理;在处理完中断管理子例程后实时操作系统使用临时存储的程序参量返回中断信号出现时被中断的程序。
本发明的出发点是考虑为能够处理尽可能多的中断信号而缩短中断禁止时间。如果把到目前为止必需的指令执行过程-它们在已知的方法中落入中断禁止时间内-从一个中断子例程转移出去,就可以缩短中断禁止时间。本发明为属于单个中断子例程的反应子例程设计一个中断管理子例程,每一个为处理中断信号的动作都由该所属中断子例程移到该中断管理子例程,这些动作在中断信号出现时不必无条件地立即执行。属于这种动作的例如有保存微处理器存储器部分数据,大部分到现在为止在中断子例程中执行的对中断信号的反应步骤和恢复在中断信号出现时不必立刻保存的微处理器寄存器的那一部分数据。
下面把在中断信号出现时必须保存的那部分微处理器寄存器数据称为中断信号出现时被中断程序的程序参量的第一部分(上下文(Kontext)I),它可以例如是该微处理器的标志寄存器的内容。剩下的要保存的数据称为中断信号出现时被中断程序的程序参量的剩余部分(上下文II和III)。
因为在处理中断管理子例程时重新开放接收另外的中断信号,相对于已知的方法来说显著缩短了中断禁止时间,因此仅丢失较少的中断信号以及在中断信号出现时仅在短时期内可用的数据。
按照本发明的方法的一个优选的实施例在于,在中断管理子例程开始处恢复接收其它中断信号。通过尽早开放接收其它的中断信号达到,中断禁止时间仅由一个绝对必需的时间区间确定,因此最大地缩短。
本发明的一个优选的改进在于,在中断信号出现时被中断程序的程序参量的剩余部分(上下文II)部分暂存在一个为程序参量分配给被中断程序的第一堆栈存储器中,而部分暂存在一个为程序参量(上下文III)分配给中断管理子例程的第二堆栈存储器中。通过这种办法达到节省存储空间,因为在第二堆栈存储器中存储的程序参量不必另外为每一个被中断程序存储。
下面根据附图叙述具有几种适当安排的本发明的一个实施例,其中


图1表示在一个中断信号出现时处理步骤的流程图;和图2a、2b、2c表示在处理中断管理子例程的框架中执行的处理步骤的流程图。
附图中,用双箭头表示禁止接收中断信号的处理步骤。与此相对,单箭头表示开放接收另外的中断信号的处理步骤。
图1表示一个中断信号出现时(步骤10)按照本发明的处理步骤的流程图。在中断信号出现时立刻由实时计算机系统禁止接收其它的中断信号。为使微处理器能在晚些时刻继续处理由中断信号中断了的程序,必须在执行处理出现的中断信号的步骤之前存储其寄存器的状态。如同已经说明的,在中断信号出现后必须立刻存储或保存(retten)的那部分被中断程序的程序参量表示为上下文I。这种保存是在一个中断禁止生效后实行的(步骤12),这样,程序参量以预先给定的顺序存储在一个堆栈存储器中。
在微处理器保存寄存器数据后现在重新允许改变寄存器内容时,它就能够对来自实时计算机系统的其它组成部分,例如中断接收的电路的中断信号进行确认了(步骤14)。处理步骤12到14在已知的方法中在中断子例程内执行,因此在这里也应该视为一个中断子例程的组成部分。
为能够在晚些时候处理中断信号,微处理器在一个中断存储器中存储一个指向该中断信号的数据(步骤16)。这个中断存储器可以例如是一个指向联合为一个存储器字的多位存储器单元,其中根据出现的中断信号的类型将一个确定的位置位,以便后来可以确定出现过哪一个中断信号。后面说明这种可能性。
微处理器接着检验在中断信号出现的时刻实时计算机系统是否在处理时间紧要因而是不允许中断的程序子例程(步骤18)。这种不可中断的程序的数目由微处理器存储在一个存储单元中,例如一个带规定起始值的封锁计数器中。该封锁计数器在每次调用一个不可中断程序时升值,并在处理完一个不可中断程序后相应降低。因此微处理器能够在处理步骤18时确定,是否在当前时刻在处理一个不可中断程序。如果不是这样,也就是说封锁计数器的存储单元中存有规定的起始值,则微处理器通过询问一个存储中断管理子例程的状态的状态存储器单元检验,是否已经激活一个中断管理子例程(IVR)(步骤20)。如果中断管理子例程未激活,则调用它(步骤22)。下面根据图2a、2b、2c继续说明在中断管理子例程中要执行的处理步骤。
如果在处理步骤18时确定,封锁计数器的内容偏离它的起始值,因此激活了一个不可中断程序子例程,或者在处理步骤20时根据状态存储器单元确定,中断管理子例程已经激活,则向中断子例程跳转(步骤24)。在中断子例程中,通过从堆栈寄存器中以逆存储顺序重新读出处理器寄存器需要的数据(步骤26),恢复上下文I。之后开放接收其它的中断信号,并且返回到中断出现时被中断的程序,以便继续处理它(步骤28)。
图1中所有的处理步骤直到最后的处理步骤28在中断封锁生效下都被执行,所以到目前为止在中断禁止时间方面与现有技术状态相比尚未有任何重要的优点出现。中断禁止时间的节省仅在根据图2a、2b、2c的处理步骤下才明显,因为在那里显示的处理流图中大部分处理步骤是在开放接收其它的中断信号下执行的。
图2a、2b和2c表示中断管理子例程的处理步骤的流程图。在中断管理子例程在处理步骤22被调用之后,微处理器开始处理中断管理子例程的处理步骤(步骤40)。
之后,状态存储器单元置位(步骤42)。以此可以在其它的中断信号出现时在处理步骤20确定,中断管理子例程是否已经激活,因为它在流程正常执行时只可以激活一次。
为使中断禁止时间相对于已知的方法最大可能地缩短,立刻开放接收其它的中断禁止信号(步骤44)。于是在处理完处理步骤44以后能够接收其它的中断信号并处理。这些其它的中断信号由微处理器在处理步骤16作为数据以置位的形式在中断存储器登录。在中断管理子例程中接着继续处理其它的处理步骤时能够顾及到这些另外的中断信号。
在中断信号出现时被中断程序尚未作为上下文I在处理步骤12保存的那些程序参量将分为两组。一组由程序参量建立,其保存即临时存储在一个为程序参量分配给被中断程序的堆栈寄存器中,这一程序参量组下面称为上下文II。另外的剩余程序参量组临时存储在一个为程序参量分配给中断管理子例程的堆栈寄存器中,下面称为上下文III。
通过这种对剩余的程序参量的划分能够显著节省存储器空间,因为上下文III不必每次在被中断程序的堆栈存储器中存储,而仅在中断管理子例程的堆栈存储器中临时存储。
如同已经提到的,上下文II保存在一个分配给被中断程序的堆栈存储器中(步骤46)。然后中断管理子例程的堆栈存储器激活(步骤48)并接着把上下文III保存在该堆栈存储器中(步骤50)。通过存储程序参量,可以在后来继续在中断信号出现时被中断的程序。接着在步骤52复位中断存储器中分配给中断信号的位,它们是在中断信号出现时在处理步骤16置位的。由此可以重新接收和利用由中断管理子例程正在处理的同一中断信号。
现在在所有为处理中断信号而调用一个子例程的准备工作结束后,调用相应于该中断信号的处理子例程(步骤54)。在处理处理子例程期间已能接收已经在处理步骤16中通过将中断存储器中相应的位置位而进行标记的其它的中断信号。中断存储器在处理完处理子例程后在处理步骤54由微处理器询问置位的位(步骤56)。如果中断存储器中这些位已置位,则流程在处理步骤52继续。因此流程处在一个由处理步骤52到56构成的一个循环中。在处理该处理循环时,可以接收通过中断管理子例程的存储器发出信号并且在处理步骤56询问时顾及到的另外的中断信号。由于中断信号的处理相对于已知的方法是在允许进行中断情况下进行的,因此可以显著缩短中断封锁时间。
在处理步骤56询问中断存储器中置位的位时考虑被接收的中断信号的优先级是有利的。这样可以相应于在中断存储器的存储器字中的优先次序,例如每次从右向左,询问中断存储器的单个位,由此确定单个位的优先级,其从右向左接收在存储器字中。
当中断存储器中所有置位的位复位(参照处理步骤52)和相应的处理子例程处理完(参照处理步骤54)后,流程以在图2b中的处理步骤继续。接着,通过从分配给中断管理子例程的堆栈存储器中按照与存储时的反顺序重新读出上下文III,恢复上下文III(步骤58)。
为调用中断管理子例程,有两种不同的可能。第一种已经叙述的可能是根据处理步骤22的调用。在这种情况下,对步骤24到28不做处理。作为第二种可能,如果在中断信号出现时正在处理不可中断程序并由此封锁计数器在处理步骤18置位,则通过实时操作系统调用中断管理子例程。像上面已经叙述的那样,处理步骤24到28在调用中断管理子例程之前由实时操作系统执行,因此不会在中断管理子例程内再次执行。
可以以下述方式由实时操作系统调用中断管理子例程在处理完一个不可中断程序和在降低了封锁计数器后,检验封锁计数器是否有起始值和在中断存储器中是否至少有一个分配给中断信号的位置位。如果这两个条件满足,则调用中断管理子例程。
为能够区别这两种可能并做相应处理,可以在处理步骤58恢复上下文Ⅲ之后,激活一个分配给中断管理子例程的程序堆栈存储器,同时将被中断程序的堆栈存储器的地址加载到微处理器的堆栈寄存器,(步骤60)。程序管理子例程是实时操作系统的组成部分,并通过标记要处理的程序和以一个预先给定的顺序起动它的处理来协调程序处理。
之后提升封锁计数器的值(步骤62),因为后续的处理步骤64和66不能中断。接着,例如通过将状态寄存器单元置零表明中断管理子例程不在激活状态(步骤64),以便能够再次处理该中断管理子例程。
之后调用程序管理子例程(步骤66),它可能启动一个另外的程序。程序结束后,程序管理子例程返回中断管理子例程并封锁接收其它的中断信号(步骤68)。
因为在处理处理步骤56到68期间可以接收在处理步骤16将中断存储器中分配的位置位的那些中断信号,因此在处理完中断管理子例程后离开之前再次询问,是否在中断存储器中还有置位的位(步骤70)。如果是,则不离开中断管理子例程,而通过相应的状态存储器单元重新置为动作状态(步骤72),并重新开放接收其它的中断信号(步骤74)。然后流程在处理步骤48继续。中断管理子例程现在处于由处理步骤48到74组成的另一工作循环中。这一工作循环只能当中断存储器中的所有位已经复位后在处理步骤70离开。在这种情况下,通过将封锁计数器的值相应降低而复位封锁计数器(步骤76)。
接着,通过换接到中断信号出现时被中断程序的堆栈存储器并以与存储相反的顺序读出那里存储的程序参量而恢复上下文II(步骤78)。
在步骤80,返回中断子例程,在其中恢复上下文I(步骤82)。接着返回中断信号出现时被中断的程序(步骤84)。以此结束中断管理子例程。
权利要求
1.实施一个由实时操作系统控制的实时计算机系统的方法,它处理一个技术进程的中断信号,其中执行下述步骤-在中断信号出现时该实时计算机系统中断一个正在处理的程序,禁止接收其它的中断信号,并调用一个属于该中断信号的中断子例程,-在处理该中断子例程时临时存储中断信号出现时被中断程序的程序参量的第一部分(上下文I),-在一个中断存储器中至少存储一个有关该中断信号的数据,-从该中断子例程向一个中断管理子例程分支,-在处理中断管理子例程时开放接收其它的中断信号,-在处理中断管理子例程时清除中断存储器中属于该中断信号的数据,-临时存储中断信号出现时被中断程序的程序参量的剩余部分(上下文II和III),-根据在中断存储器中关于中断信号的数据,至少激活一个属于该中断信号的反应子例程并在可能的情况下由实时操作系统处理,-在处理完中断管理子例程后实时操作系统使用临时存储的程序参量(上下文I到III)返回到中断信号出现时被中断的程序。
2.根据权利要求1的方法,其特征在于,在中断管理子例程开始时开放接收其它中断信号。
3.根据权利要求1或2中任何一个权利要求的方法,其特征在于,程序参量的第一部分(上下文I)包括在一个由实时操作系统控制的微处理器被中断时刻的处理器寄存器的内容。
4.根据权利要求1到3中任何一个权利要求的方法,其特征在于,在处理中断管理子例程时临时存储的程序参量的剩余部分(上下文II和III)包括关于中断信号出现时被中断程序的状态信息以及在晚些时候继续恢复被中断程序必须的信息。
5.根据权利要求1到4的方法,其特征在于,中断信号出现时被中断程序的程序参量的剩余部份(上下文II和III)部分临时存储在一个分配给被中断程序用于存储程序参量(上下文II)的第一堆栈存储器中,部分临时存储在一个分配给中断管理子例程为存储程序参量(上下文III)的第二堆栈存储器中。
6.根据权利要求1到5中任何一个权利要求的方法,其特征在于,在多个依次出现的中断信号的场合,关于这些中断信号的数据存储在中断存储器中。
7.根据权利要求6的方法,其特征在于,有关出现的中断信号的数据按照一个预先规定的顺序存储,以及中断管理子例程根据这个顺序处理中断信号。
8.根据权利要求1到7中任何一个权利要求的方法,其特征在于,在处理中断管理子例程时在中断存储器中存储在此期间出现的其它中断信号的数据以及仅在中断存储器中不再存储有任何关于中断信号的数据时,中断管理子例程才能结束。
9.根据前述权利要求中任何一个权利要求的方法,其特征在于,向中断管理子例程的分支根据一个封锁计数器的值进行,它计数该实时操作系统对不可中断子例程的调用。
10.根据权利要求9的方法,其特征在于,在每次调用一个不可中断子例程时,封锁计数器的值升高,而在处理完一个不可中断子例程后封锁计数器的值相应降低。
11.根据权利要求9或10的方法,其特征在于,如果封锁计数器中有一个不是预先规定的起始值,或者中断管理子例程尚未完全处理完毕,则实时操作系统使用临时存储的程序参量(上下文I到III)在中断管理子例程结束前分支返回到中断信号出现时被中断的程序。
12.根据权利要求9到11中任何一个权利要求的方法,其特征在于,仅在封锁计数器具有预先规定的起始值和在中断存储器中至少存储有一个关于中断信号的数据时才向中断管理子例程分支。
13.根据权利要求5到12中任何一个权利要求的方法,其特征在于,仅在中断存储器中不存储有任何数据时才恢复在分配给中断管理子例程的第二堆栈存储器中临时存储的程序参量(上下文III)。
14.根据权利要求5到13中任何一个权利要求的方法,其特征在于,仅在中断存储器中不存储有任何数据时才恢复在分配给被中断程序的第一堆栈存储器中临时存储的程序参量(上下文I和II)。
全文摘要
说明一个实施由一个实时操作系统控制的计算机系统的方法,该计算机系统处理中断信号。在中断信号出现时,计算机系统中断一个正在处理的程序。封锁接收另外的中断信号并调用一个属于该中断信号的中断子例程。在处理这个中断子例程时,临时存储中断信号出现时被中断的程序的程序参量的第一部分,并且在一个中断存储器中至少存储一个关于中断信号的数据。从该中断子例程向一个中断管理子例程(IVR)分支,其中在处理IVR时重新开放接收其它的中断信号。
文档编号G06F13/20GK1155698SQ9611241
公开日1997年7月30日 申请日期1996年9月25日 优先权日1995年9月25日
发明者F·布兰克, P·施林斯基, B·施特尔, U·韦辛格 申请人:西门子公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1