带保存和恢复标志的服务中断的制作方法

文档序号:6460569阅读:134来源:国知局
专利名称:带保存和恢复标志的服务中断的制作方法
技术领域
本发明涉及服务中断,特别是与嵌套子程序有关的服务中断。
在处理系统中,普遍使用中断服务子进程来实现对共享资源,如存储器的多个要求的处理。这些子进程一般包括禁止下一个中断的指令,直到完成当前中断,并重启中断。这种使中断禁止/使能功能的主要目的是确保服务对同一资源的竞争要求,而不破坏已有的信息。
在有些情况下,每个中断子进程分别在开始部和结束部的禁止和再使能中断的简单动作不足以防止信息毁坏。例如,有时需要容许在第一个子进程中嵌套第二个子进程,它们都包括自己的禁止和使能中断指令。嵌套的第二个子进程的结尾能包括一个中断使能的指令,接着是一个启动返回的返回指令,并完成第一个子进程。然而,如果当嵌套的第二个子进程发出它的中断使能指令时,服务另一个中断的请求被挂起,那么其它中断能在完成第一个子进程之前被第三个中断服务。如果第三个子进程共享的存储器位置仍然被第一个子进程使用,第三个子进程能够修改并不被注意地破坏在这些共享存储器位置的信息。另外,这些存储器位置能包括不正确信息,如还没有被第一个子进程更新的存储器地址。在这种情况下,第三个子进程在不正确地址或读取或保存信息。
对该问题的一个已知的解决方案是首先保存涉及执行嵌套子进程的处理器状态的相关数据(如处理器状态字),使中断不能进行一个子进程,然后读取保存的数据并在使中断重使能之前恢复处理器至它的较早状态。这种解决方案是耗时且耗内存的。
欧洲专利441054一般性地讨论了该问题并建议将寄存器库,状态位和服务中断的中断逻辑的结合作为一个解决方案。有必要提供一个更简单的方法。
本发明的目的之一是提供一个服务中断的简单方法,它能有效地避免破坏保存在存储器中的信息的问题。
注意在这里使用的单词“存储器”,将一般被解释为与这样的方式一致,即在该方式下它无限制地被使用并包括各种类型的易失和非易失设备,如寄存器,RAM,DRAM,ROM,LIFO,FIFO等等。
依照本发明,在响应被请要的中断执行嵌套子进程的处理器的操作中,一种服务这样的中断的方法包括·提供一个表示当前中断能状态的指示器;·保存包括该指示器的状态数据;·将该当前中断使能状态置于禁止状态;·至少开始执行被请求中断指定的一个动作;·在接收另一个中断请求前·从保存的状态数据中读取指示器;·将当前中断使能状态置于该指示器表示的状态。


图1是描述处理系统的方框图,它能按照本发明的实施例服务中断。
图2是表示一个按照本发明应用实施例的方法的示范性操作顺序的表。
图3是描述应用于该实施例中的示范性中断子进程的方框图。
图1的处理系统包括一个处理器10,一个存储器20和一条总线30。示范性处理器10使用时钟脉冲来顺序进行由程序计数器寄存器确认的指令。一般,程序计数器寄存器包括处理器将要读取并因此而动作的下一条指令的存储器位置。
该处理器包括一个中断服务单元12,一个寄存器组14,一个指令解码器16和一个算术逻辑单元18。在本实施例中,存储器20包含一个有多个存储器位置用于存储的RAM,它存储,例如,子进程和数据。在优先实施例中,存储器部分作为LIFO堆栈22来使用。
处理器10和存储器20连接至总线30用来彼此通信并与连接至该总线的其它硬件通信。该总线包括各种载有信息的线路,如地址,中断,数据,读取闸门,写入闸门和设备选择闸门。
处理器10的操作是由程序流中的指令和中断来控制的。该中断可以或是从总线30接收的外部中断,或是在处理器本身,如从处理器中的计时器(未示出)中产生的内部中断。
所有中断由中断服务单元12服务,该单元产生确定与外部中断和内部中断有关的存储器位置的地址。为了响应任何中断,单元12产生确认对应的内部中断子进程在存储器20中的位置的一个地址。中断服务单元最好包含一个用于产生地址的专门的优先级敏感硬件元件,如一个可编程的查询表或一个编码器。二者在现有技术中是已知的。二者都能使速度最大并能在较低优先级中断之前服务较高优先级中断。
该寄存器组14包含多个寄存器,它们包含可更新的存储器地址和由中断子进程产生的变量。在本优先实施例中,寄存器组包括·变量寄存器140,141,142,它存有各自变量A0,A1,A2的;·一个程序计数器寄存器,它存有将要存取的存储器中的下一条指令的连续更新地址PC;·一个计数器寄存器144,它有一个计数,表示等待使用的信息片的个数。
·一个或多个通用寄存器(未示出);和·一个或多个数据寄存器(未示出),它存有或从存储器20中读取或由算法逻辑单元18产生的数据。
指令解码器16是一个传统的硬件元件,如一个排序器或微排序器,用于转换从存储器20中读取的指令为低级操作码,将由算法逻辑单元18执行。该算法逻辑单元也是一个传统的硬件元件。
图2示出了一个典型的连续步骤示例,它将根据本发明优先实施例在服务多个中断时由处理器10)来执行。在本例中使用的中断子进程是·一个生产信息的生产信息子进程;·一个消费信息子进程,用于使用由生产信息子进程产生的信息;·一个更新计数器子进程,用于更新寄存器144中的计数。
该表的列标题有下面含义·符号IR代表一个中断请求标志的状态,“1”表示一个中断请求正在被接收,“0”表示没有中断请求正在被接收。
·符号IE代表一个中断使能标志的状态,“1”表示该标志被设定(即中断当前是使能的),“0”表示该标被重置(即中断当前是禁止的)。
·“Inst.#”表示当前正被处理器10执行的指令个数。
·“计数”是当前包含在寄存器144中的数目,即已经产生正在等待消费的信息片个数。
·符号A0和A1表示分别保存在寄存器140和141中的这些变量的当前值。
图3示出了示范性子进程,包括在该子进程中的每条指令前面有各自的指令#。
现在参考图3描述图2中的例子。注意本例中假设在步骤1之前,中断使能标志已设置(IE=1),并且寄存器144中的计数已被初始化为值0,表示没有信息在等待消费。
在步骤1,收到一个产生信息的中断请求(1R=0)。该处理器10通过从已在执行的任何过程切换到中断子进程生产信息响应该请求。
在步骤2和3,处理器重置中断请求标志,产生信息并将它保存在存储器20中,并执行生产信息子进程的指令#1和#2。具体是·在步骤2,重置中断请求标(IR=0),并执行指令#1,即将变量A1(在寄存器141中的)值设为1。(变量A0的值这时是不确定的。)·在步骤3,执行指令#2,即调用子进程更新计数。
在步骤4至9,处理器执行被调用的更新计数子进程。具体是·在步骤4,执行指令#10,即压入和禁止中断。根据本指令,处理器首先通过将中断使能标志的当前状态压入LIFO堆栈保存它(IE=1)。如果需要保存附加信息(如其它标志的当前状态),该附加信息此时也被推入堆栈。然后处理器重置中断使能标志(IE=O),从而使下一个中断不能直到完成对寄存器144中的计数的更新。
·在步骤5,通过设置变量A0(在寄存器140中)值等于寄存器144中的计数的当前值,即A0=0,执行指令#11。
·在步骤6,通过计算总和A0+A1=1并将该总和保存在寄存器140中作为A0的新值,执行指令#12。
·在步骤7,通过保存寄存器144中的新值作为计算的新值,即计数=1来执行指令#13。
·在步骤8,执行指令#14,即恢复指令。依照本指令,处理器将中断使能标志恢复到状态IE=1,当指令#10被执行时,该标于步骤4保存在LIFO堆栈中。(如果在步骤4保存附加信息,这时放弃这样的信息。)
·在步骤9,执行指令#15,即返回指令。依照本指令,处理器返回到先前执行的子进程,即生产信息子进程。
·在步骤10,处理器执行将在生产信息子进程中执行的下一条指令,即指令#3跳至生产信息。这只是重启生产信息子进程。
在步骤11和12,处理器产生信息,保存在存储器20中并执行生产信息子进程的指令#1和#2,具体是·在步骤11,通过将变量A1再次初始化为值1,执行指令#1。
·在步骤12,通过调用更新计数子进程执行指令#2。
在步骤13至17,处理器承担起执行被调用的更新计数子进程的任务,其中接收到一个中断请求。具体是·在步骤13,首先通过将中断使能标志(IE=1)保存在LIFO堆栈中执行指令#10(推入和禁止中断)。然后重置中断使能标志(IE=0),从而禁止下一个中断,直到寄存器144中的计数更新完成。
·在步骤14,通过将变量A0值设为等于计数当前值,即A0=1,执行指令#11。
·在步骤15,通过计数总和A0+A1=2并将寄存器140中的总和保存作为A0的新值,执行指令#12。在该步骤,也收到一个中断请求,它将忽略该请求直到根据指令#14再次使能中断。
·在步骤16,通过将寄存器144中的A0新值保存作为计数新值(计数=2),执行指令#13。
·在步骤17,通过恢复中断使能标志为状态IE=1,执行指令#14,当指令#10最后执行时,该标于步骤13保存在LIFO堆栈中。
在步骤18,处理器响应在步骤15中接收到的中断请求,它是一个要求消费信息的请求。这是通过切换至消费信息子进程来响应的。
在步骤19,处理器重置中断请求标(IR=0),然后接着执行消费信息子进程。具体是·在步骤19,通过设置变量A0值为计数当前值,即A0=2,执行指令#4。
·在步骤20,通过从寄存器140中读取A0当前值(现在等于计数),执行指令#5。
·在步骤21,通过对A0值与0的比较执行指令#6。如果A0=0,表示存储器20中没有信息在等待消费,处理器跳到消费信息子进程的开始部。然而,如果A0=2,表示存储器中有2块信息正在等待被消费。这样,处理器消费已保存的最后一块信息,然后该消费信息子进程中的剩下指令响应地对计数成1。
·在步骤22,通过设置变量A1值(在寄存器141中)为-1,执行指令#7。
·在步骤23,通过调用更新计数子进程执行指令#8。
在步骤24至28,处理器负责执行被调用的更新计数子进程,其中收到一个中断请求。具体是·在步骤24,首先通过将中断使能标志(IE=1)保存在LIFO堆栈中执行指令#10(推入和禁止中断)。然后重置中断使能标志(IE=O),从而禁止下一个中断,直到寄存器144中的计数更新完成。
·在步骤25,通过将变量A0值设为等于计数当前值,即A0=1,执行指令#11。在该步,也收到一个中断请求。
·在步骤26,通过计数总和A0+A1=2并将寄存器140中的总和保存作为A0的新值,执行指令#12。
·在步骤27,通过将寄存器144中的A0新值保存作为计数新值(计数=1),执行指令#13。
·在步骤28,通过恢复中断使能标志为状态IE=1,执行指令#14,当指令#10最后执行时,该标于步骤13保存在LIFO堆栈中。
在步骤29,处理器响应在步骤25中接收到的中断请求,它是一个切换至先前运行的生产信息子进程的请求。
在步骤30。当前面的生产信息子进程被中断时(即在步骤17,这里A0=2和A1=1),处理器重置中断请求标志(IR=0)并从存储器中获取存在的A0和A1值。然后执行返回指令(指令#15)来启动返回至先前的生产信息子进程。然后处理器执行生产信息子进程中下一个连续指令,即指令#3。
在步骤31,通过跳至生产信息子进程的开始部,处理器执行指令#3。
在步骤32和33,处理器产生信息,将它保存在存储器20中并执行生产信息子进程中的指令#1和#2。具体是·在步骤32,通过将变量A1重新初始化为值1,执行指令#1。
·在步骤33,通过调用更新计数子进程执行指令#2。
在步骤34至38,处理器再次负责执行被调用的更新计数子进程,其中收到另一个中断请求。具体是·在步骤34,首先通过将中断使能标志(IE=1)保存在LIFO堆栈中执行指令#10(推入和禁止中断)。然后重置中断使能标志(IE=0),从而禁止下一个中断,直到寄存器144中的计数更新完成。
·在步骤35,通过将变量A0值设为等于计数当前值,即AO=1,执行指令#11。
·在步骤36,通过计数总和A0+A1=2并将寄存器140中的总和保存作为A0的新值,执行指令#12。
·在步骤37,通过将寄存器144中的A0新值保存作为计数新值(计数=2),执行指令#13。在该步,也收到一个中断请求,它将忽略该请求直到依照指令#14再次使能中断。
·在步骤38,通过恢复中断使能标志为状态IE=1执行指令#14,当指令#10最后执行时,该标于步骤34保存在LIFO堆栈中。
在步骤39,处理器响应在步骤37中接收到的中断请求,它是一个切换至先前运行的消费信息子进程的请求。
在步骤40。当前面的消费信息子进程被中断时(即在步骤28,这里A0=1和A1=-1),处理器重置中断请求标(IR=0)并从存储器中获取存在的A0和A1值。然后执行返回指令(指令#15)来启动返回至先前的消费信息子进程。然后处理器执行消费信息子进程中下一个连续指令(即在指令#8之后,在步骤23中执行)。
在步骤41,通过跳至该子进程的开始部,处理器执行消费信息子进程中的下一个连续指令,即指令#9。
接着在步骤41,处理器将继续以相似的方式操作。提供图2中的示范性步骤来说明依照本发明的一个实施例。服务中断如何以一种简单方式,即用很少几条指令,通过保存最少信息并不需要特殊硬件而有效实现。
注意到上面描述的和图2中显示的顺序是一个示范性实施例,提供它只为了帮助理解本发明。不意味着限制本发明的范畴。例如,只使用单位码作为中断请求状态(IR)和中断使能状态(IE)。然而在现有技术中众所周知,一些处理器能同时响应多个中断请求并能跟踪多个中断能状态。本发明同样能,例如,通过给IR和IE分别使用多位码,服务这样多个请求并跟踪这样多个状态。而且,本发明不限于使用本例中公开的三个示范性子进程(即,生产信息,消费信息,更新计数),但可应用于各种各样的进程和子进程,为了响应中断请求它们可以变成嵌套使用。
权利要求
1.一种在处理器的操作中服务中断的方法,该处理器能够响应请求的中断执行嵌套子进程,该方法包含a.提供一个表示当前中断使能状态的指示器(IE);b.保存包含所述指示器的状态数据;c.将当前中断使能状态置为禁止状态;d.最少开始执行一个由被请求的中断所指定的动作;e.在接收另一个中断请求之前i.从保存的状态数据读取指示器(IE);Ii.将当前中断使能状态置为所述指示器所表示的状态。
2.权利要求1中的方法,其中状态数据只包含所述指示器。
3.权利要求1中的方法,其中通过将状态数据推入到一个LIFO堆栈中保存状态数据,并通过从所述堆栈弹出所述数据读取指示器。
4.权利要求1中的方法,其中处理器能够同时接收多个中断请求,所述指示器表示每个所述中断的当前中断使能状态。
5.权利要求1中的方法,用于产生和消费保存的信息,所述方法在接收另一个中断请求之前,包括更新等待被消费的信息的计数。
6.权利要求1中的方法,所述将当前中断状态置为状态指示器的状态包含放弃剩下的状态数据。
7.一种能够响应请求的中断执行嵌套子进程的处理器,所述处理器能被编程来服务所述中断,通过a.提供一个表示当前中断使能状态的指示器(IE);b.保存包含所述指示器的状态数据;c.将当前中断使能状态置为禁止状态;d.最少开始执行一个由被请求的中断所指定的动作;e.在接收另一个中断请求之前ⅰ.从保存的状态数据读取指示器(IE);ⅱ.将当前中断能状态置为所述指示器所表示的状态。
8.权利要求7中的处理器,其中状态数据只包含所述指示器。
9.权利要求7中的处理器,其中通过将状态数据推入到一个LIFO堆栈中保存状态数据,并通过从所述堆栈弹出所述数据读取指示器。
10.权利要求7中的处理器,其中处理器能够同时接收多个中断请求,所述指示器表示每个所述中断的当前中断使能状态。
11.权利要求7中的处理器,在接收另一个中断请求之前,被编程来读取该指示器(IE)。
12.权利要求11中的处理器,其中状态数据只包含所述指示器。
13.权利要求7中的处理器,所述将当前中断使能状态置为所述指示器作表示的状态包含放弃剩下的状态数据。
全文摘要
提供了一种方法,它能避免当处理器嵌套子进程而且这些子进程使中断能和不能时出现的毁坏信息。
文档编号G06F13/20GK1320243SQ00801734
公开日2001年10月31日 申请日期2000年7月31日 优先权日1999年8月19日
发明者W·L·萨维勒, K·罗斯 申请人:皇家菲利浦电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1