CN102346688A - 用于自动硬件中断处理的系统和方法 - Google Patents
用于自动硬件中断处理的系统和方法 Download PDFInfo
- Publication number
- CN102346688A CN102346688A CN201110214684.1A CN201110214684A CN102346688A CN 102346688 A CN102346688 A CN 102346688A CN 201110214684 A CN201110214684 A CN 201110214684A CN 102346688 A CN102346688 A CN 102346688A
- Authority
- CN
- China
- Prior art keywords
- interrupt
- register
- value
- stack pointer
- processor state
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 42
- 239000013598 vector Substances 0.000 claims abstract description 26
- 238000012545 processing Methods 0.000 claims abstract description 8
- 230000002159 abnormal effect Effects 0.000 claims description 29
- 230000008569 process Effects 0.000 claims description 14
- 238000003860 storage Methods 0.000 claims description 6
- 238000004140 cleaning Methods 0.000 claims description 5
- 238000002360 preparation method Methods 0.000 claims description 5
- 230000006870 function Effects 0.000 description 24
- 230000008859 change Effects 0.000 description 6
- 230000004888 barrier function Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 238000001514 detection method Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000005055 memory storage Effects 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 2
- 230000009191 jumping Effects 0.000 description 2
- 230000007257 malfunction Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 102100036302 C-C chemokine receptor type 6 Human genes 0.000 description 1
- 101000716068 Homo sapiens C-C chemokine receptor type 6 Proteins 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000002547 anomalous effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000012797 qualification Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/24—Handling requests for interconnection or transfer for access to input/output bus using interrupt
- G06F13/26—Handling requests for interconnection or transfer for access to input/output bus using interrupt with priority control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30116—Shadow registers, e.g. coupled registers, not forming part of the register space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/327—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for interrupts
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明公开了用于自动硬件中断处理的系统和方法。提供了一种处理系统,其包括中断引脚、多个寄存器、堆栈指针和自动中断系统。所述多个寄存器存储多个处理器状态值。当所述系统在所述中断引脚上检测到中断时,所述系统准备进入异常模式,其中自动中断系统使得中断向量被获取,堆栈指针被更新,并且在执行中断服务例程之前,处理器状态值被从寄存器并行地读取并基于更新的堆栈指针存储在存储器位置中。还提供了用于自动硬件中断处理的方法。
Description
技术领域
本发明的实施例一般地涉及微处理器,并且特别涉及中断处理。
背景技术
在计算机处理环境内,中断是中止正常程序执行的事件。程序通常在微处理器上以有序方式执行。典型的执行被明确地使程序流偏离的指令改变,例如,跳转指令和分支指令。中断干扰正常的指令执行。通常,基于中断的检测,已知为中断处理程序或中断服务例程的特殊程序被执行,该特殊程序内容切换所述系统。内容切换包括存储处理器的状态(例如,内容)、服务所述中断、以及再次存储处理的内容,从而使指令的执行可以自中断之前的点重新开始。
内容切换的处理要求大量处理器周期,在所述处理器周期中,处理器执行中断服务例程。这种中断服务例程通常清理处理器的流水线(pipeline)并且保存存储器中的多个状态寄存器。当程序的复杂度增大时,耗时地执行中断服务例程降低了可用于其他程序功能的处理器资源的可用性。
发明内容
本部分的目的在于概述本发明的一些方面并且简短地介绍本发明的一些实施例。可进行简化或省略以避免模糊本部分的目的。这种简化或省略不意图限制本发明的范围。
因此,需要的是以更实时和有效的方式服务中断请求的方法和系统。
在本发明的一个实施例中,提供了一种处理系统,该系统包括中断引脚、多个寄存器、堆栈指针和自动中断系统。所述多个寄存器存储多个处理器状态值。当系统在中断引脚上检测到中断时,所述系统准备进入异常模式,其中自动中断系统获取中断向量、更新堆栈指针、并且在执行中断服务例程之前,自寄存器并行地读取处理器状态值并基于更新的堆栈指针将所述处理器状态值存储在存储器位置中。
在本发明的另一个实施例中,提供了一种方法,该方法包括接收中断请求、获取中断向量、并行读取多个处理器状态值、并且在准备进入异常模式并且在执行中断服务例程之前,在由更新的堆栈寄存器指定的存储器位置中存储所述多个存储器状态值。
在本发明的进一步的实施例中,提供了一种非临时计算机可读存储介质,其包括用于生成处理器的计算机可读程序代码,其中所述程序代码包括生成中断引脚的计算机可读代码、生成存储多个处理器状态值的多个寄存器的计算机可读代码、生成堆栈指针的计算机可读代码、以及生成自动中断系统的计算机可读代码。所述自动中断系统检测中断引脚上的中断并且获取中断向量、更新堆栈指针、并且在执行中断服务例程之前,自寄存器并行读取多个处理器状态值并且将这些值存储在由更新的堆栈指针指定的存储器位置中。
以下将参考附图详细说明这些以及其他实施例和特征以及各个实施例的结构和操作。本发明不限于本文说明的具体实施例。这些实施例在本文中仅以说明性目的呈现。基于本文包含的信息,额外的实施例对相关领域技术人员将是显然的。
附图说明
现在将参考附图仅以示例的方式说明本发明的实施例,在附图中,相应的附图标记表示相应的部件。进一步地,并入本文并且构成说明书一部分的附图说明了本发明的实施例,并且与说明书一起进一步用于解释本发明的原理并使相关领域技术人员能制造并且使用本发明。
图1是根据本发明的一个实施例的处理系统的框图。
图2说明了根据本发明的一个实施例的中断控制寄存器的格式。
图3A-3L呈现了根据本发明的一个实施例的中断控制寄存器内的寄存器的寄存器字段说明。
图4说明了根据本发明的一个实施例的状态控制寄存器的格式。
图5A-5T呈现了根据本发明的一个实施例的状态控制寄存器内的寄存器的寄存器字段说明。
图6说明了根据本发明的一个实施例的SRS控制寄存器的格式。
图7A-7J呈现了根据本发明的一个实施例的SRS控制寄存器内的寄存器的寄存器字段说明。
图8说明了根据本发明的一个实施例的Cause寄存器的格式。
图9A-9N呈现了根据本发明的一个实施例的Cause寄存器内的寄存器的寄存器字段说明。
图10说明了根据本发明的一个实施例的异常程序计数寄存器的格式。
图11呈现了根据本发明的一个实施例的异常程序计数寄存器内的寄存器的寄存器字段说明。
图12说明了根据本发明的一个实施例的配置寄存器的格式。
图13A-13W呈现了根据本发明的一个实施例的配置寄存器内的寄存器的寄存器字段说明。
图14说明了根据本发明的一个实施例的中断返回指令的布局和命名。
图15是根据本发明的一个实施例的用于自动硬件中断处理的方法的流程图。
当结合附图时,各个实施例的特征将通过以下提出的具体实施方式变得更为显然,在全部附图中,相同附图特征表征相应的元件。在附图中,相同附图标记一般表示等同的、功能类似的和/或结构类似的元件。首次出现某个元件的附图以相应的附图标记中最左面的数字表示。
具体实施方式
本发明将通过本发明的各个“实施例”的以下说明被更好地理解。因此,具体的“实施例”是本发明的见解,但每个具体的“实施例”本身不代表整个发明。在许多情况下,来自一个特定的实施例的独立元件可以在实现类似或相应功能的另一个实施例中被替换为不同元件。期望的是获得了本文提供的教导的本领域技术人员将意识到在本发明的范围内的额外的改进、应用和实施例并且意识到本发明具有明显的实用性的额外的领域。
本文说明的实施例在说明书中被称作“一个实施例”、“一实施例”、“一个示例性实施例”等。这些参考表示所说明的实施例可以包括特定的特征、结构或特性,但每个实施例不必须包括每个所说明的特征、结构或特性。进一步地,当结合一个实施例说明特定的特征、结构或特性时,将理解结合其他实施例(无论其是否被清楚地说明)改变这种特征、结构或特性在本领域技术人员的知识范围内。
I.自动硬件中断处理
图1是根据本发明的一个实施例的处理系统100的框图,该处理系统100包括用于自动硬件中断处理的系统。系统100包括耦接到中断控制器102的处理器110,其中中断控制器102连接到多个中断线路104。中断控制器102区分中断104的优先级并且使用中断线路106向处理器110生成中断请求。中断控制器还可以将中断向量108传递到处理器110。
在处理器110内,存在异常逻辑块112、中断向量发生器116、影子寄存器组控制寄存器120、通用寄存器组124和多个影子寄存器组126。在一个实施例中,影子寄存器组126被替换为可以用在一些处理器操作模式(例如,核心模式和异常模式)中或响应于向量中断或异常的普通的通用寄存器(GPR)124。一旦影子寄存器组126被限制在特定的模式,对与该模式专用的特定影子寄存器组一起工作的GPR124中的可寻址寄存器进行查询。
处理器110内的异常逻辑块112从中断线路106接收并且确定如果存在异常的话,哪个异常将被处理。如果例如中断等异常将被处理,则异常逻辑块112发送信号114到异常向量发生器125。异常向量发生器125使用信号114产生用于处理所述异常的指令地址118。异常向量发生器125还可以直接自中断控制器102接收向量108。指令地址118之后被发送到程序计数器逻辑109以改变指令执行流。
影子寄存器组控制寄存器120包括当前影子组(CSS)寄存器121和之前影子组(PSS)寄存器123。异常逻辑块112发送信号126到影子寄存器组控制寄存器120和相关联的逻辑,从而切换到被分配用于待处理的异常的适当的影子寄存器组。如前所述,需要减小对中断服务请求进行服务所要求的时间。在一个实施例中,下面的表1概述了处理器110为了开始执行中断服务例程所必须耗费的周期数量,所述中断服务例程通过使用基于软件的中断处理进行的中断(例如,中断104和114)的检测而生成。
中断控制寄存器的一个可行的格式在图2中示出并且稍后将被更为详细地讨论。中断控制寄存器内的寄存器的示例性字段说明可以在图3A-3L中找到并且稍后将被更为详细地讨论。
系统400中的COP0状态寄存器的示例性格式在图4中示出。状态寄存器内的寄存器的示例性字段说明可以在根据本发明的一个实施例的系统500的图5A-5T中找到。
系统600中的COP0 SRSCtl寄存器的示例性格式在图6中示出。SRSCtl寄存器内的寄存器的示例性字段说明在系统700的图7A-7J中示出。
系统800中的COP0 Cause寄存器的示例性格式在图8中示出。Cause寄存器内的寄存器的示例性字段说明在系统900的图9A-9N中示出。
系统1000中的COP0 EPC寄存器的示例性格式在图10中示出。EPC寄存器内的寄存器的示例性字段说明在系统1100的图11中示出。
系统1200中的COP0配置寄存器的示例性格式在图12中示出。配置寄存器内的寄存器的示例性字段说明在系统1300的图13A-13W中示出。
表1:与中断服务例程(ISR)处理相关联的时钟周期
如表1所示,从中断被锁存的点到中断服务例程的第一个指令被执行一共耗费了24个周期。在另一个实施例中,下面的表2概述了处理器110为了开始中断服务例程的执行所必须耗费的周期的数量,所述中断服务例程通过使用基于硬件的中断处理逻辑进行的中断(例如,中断104和114)的检测而生成,所述基于硬件的中断处理逻辑使用中断自动前言程序(IAP)。
表2:与使用IAP的中断服务例程(ISR)处理相关联的时钟周期
如表1所示,通过使用IAP,从中断被锁存的点到中断服务例程的第一个指令被执行所耗费的周期数量从24个减少到10个。
II.中断自动前言程序(IAP)
影子寄存器组的使用可以减少在执行中断服务例程之前保存用户模式状态值的费用。中断自动前言程序(IAP)功能在执行中断服务例程之前,自动操作一些保存控制和状态寄存器,例如,COP0的状态值所需要的软件步骤。执行中断服务例程的第一有用指令的减小的等待时间可以通过使用并联硬件而不是串行执行的指令来执行一些步骤而获得。
在一个实施例中,IAP特征仅在以下情况下可用:
·影子寄存器组被实现(SRSCtlHSS!=0)
·使能外部中断控制器模式(Config3VEIC=1,IntCtlVS!=0,CauseIV=1,and StatusBEV=0)
·IntCtlAPE=1
在一个实施例中,IAP功能仅在以信号发送中断到异常逻辑块并且异常优先级逻辑已解决待处理的具有最高优先级的异常的中断时才起作用。如果信号发送的是异常而非中断,则这个功能不起作用。
IAP操作能够以单个堆栈指针或多个堆栈指针进行。在仅使用一个堆栈指针的示例中,以下步骤通过使用IAP而自动执行:
1.如果IntCtlUseKStk为零,则TempStackPointer被更新为来自之前影子寄存器组的GPR 29的值。如果IntCtlUseKStk为1,则进行到步骤A.(如下).
2.TempStackPointer以IntCtlStkDec寄存器字段指定的值减少。
3.使用虚拟地址[TempStackPointer]+0x0将COP0EPC寄存器中的值存储到外部存储器。
4.使用虚拟地址[TempStackPointer]+0x4将COP0状态寄存器中的值存储到外部存储器。
5.使用虚拟地址[TempStackPointer]+0x8将COP0SRSCtl寄存器中的值存储到外部存储器。
6.将TempStackPointer的值写入当前影子寄存器组的GPR 29。
7.以CauseRIPL中的值更新StatusIPL寄存器字段。
8.如果设置了IntCtlClrEXL,则状态寄存器的KSU、ERL和EXL字段被清零。
仅有的顺序从属关系是(实施方式必须维持这些从属关系):
·步骤2从属于步骤1(或以下的步骤A)。
·步骤3-5从属于步骤2。
·步骤7&8从属于步骤4。
·步骤6-8从属于步骤3-5,步骤3-5达到没有进一步的异常可以生成的阶段。
在一个实施例中,TempStackPointer是处理器内的内部寄存器并且是软件不可见的。该TempStackPointer被使用,从而直到在IAP期间不再有任何可能发生存储器异常时才发生GPR 29的修改。这允许在不对IAP期间发生的TLB异常进行修改的情况下使用TLB处理程序。
在使用了多个堆栈指针的更为复杂的环境中,例如,在用户模式和核心模式中,可以使用IntCtlUseKStk控制位来选择用于中断处理的另一个堆栈指示。例如,影子寄存器组的GPR 29被用于保持核心堆栈指针。影子寄存器组1的GPR 29可以被预初始化以保持适当的核心堆栈指针值。在一个实施例中,以下步骤说明了在使用预初始化的堆栈指示,例如IntCtlUseKStk为1时,IAP如何工作。
A)如果(在用户模式中执行中断指令)则TempStackPointer=影子寄存器1的GPR 29否则TempStackPointer=在中断指令时使用的影子寄存器组的GPR 29。
B)进行到步骤2(以上)。
对于步骤A,如果中断指令已处于核心模式中,则使用之前从影子寄存器1的GPR 29中保持的核心堆栈指针获取的堆栈指针值。
III.IAP期间的异常
在一个实施例中,在IAP期间发生的存储器存储操作可以导致地址错误,例如,地址空间特权扰乱;TLB重载入,例如,TLB不具有与所请求的地址匹配的条目;TLB无效,例如,与所请求的地址匹配的TLB条目无效;TLB修改,例如,与所请求的地址匹配的TLB条目被标记为不可写入并且存储指令试图写入所述条目的页面内的位置;高速缓冲存储器错误,例如,高速缓冲存储器分级存储器体系内的查找导致奇偶校验或不正确的错误-校正-代码(Error-Correction-Code)错误而非返回请求的数据;以及总线错误,例如,外部分级存储器体系内的查找导致错误而非返回请求的数据、异常。例如,如果这种存储器异常发生在IAP期间:
·CauseExcCode寄存器字段报告异常类型。
·CauseAP寄存器位被设置。
·EPC未改变;指向原始被中断的指令。
·全部其他异常报告COP0寄存器针对异常类型被适当地更新。这些寄存器反映了引起所述异常的有效字地址,例如,好像独立的SW指令引起了所述异常。
·如果存储器存储操作使用映射地址并且在TLB中没有匹配地址,则使用TLB重载入异常处理程序(偏置0x0)。其他TLB相关的异常(无效、修改)使用通用异常处理程序(偏置0x180)。
·由SRSCtlESS寄存器字段指定的影子寄存器组被用于存储器异常。
·异常处理程序返回到保持在C0_EPC中的原始代码PC位置。
·由于中断始终存在,所以再次以信号发送所述中断并且重复IAP。这时,当故障状态被在先确定时,IAP完成。
在本示例中,除非发生这些存储器异常中的一个,否则IAP功能将运行至完成。IAP特征是不可中断的,也就是,自其他未决中断的角度看,IAP是原子的。
IV.中断自动收尾程序(IAE)
在一个实施例中,中断自动收尾程序是IAP的镜像操作。在返回到非异常模式的准备中,这个功能自动恢复来自一个或多个堆栈的COP0 Status、SRSCtl和EPC寄存器。在一个实施例中,通过指令使IAE功能可用,例如,IRET指令。在一个示例中,IRET指令应仅在以下情况下使用:
·实现影子寄存器组(SRSCtlHSS!=0)
·使能外部中断控制器模式(Config3VEIC=1,IntCtlVS!=0,CauseIV=1,and StatusBEV=0)
IRET指令意味着倒转自动中断前言程序功能的作用。因此,IRET指令仅应在COP0寄存器以由IAP功能指定的方式被保存到堆栈上时才被使用。
V.IAE期间的异常
在一个实施例中,在IAE期间发生的存储器负载操作可以导致地址错误、TLB重载入、TLB无效、高速缓冲存储器错误和总线错误异常。在一个示例中,如果在IAE期间发生这种存储器异常,则:
·CauseExcCode寄存器字段报告异常类型
·EPC被更新到IRET指令位置。
·全部其他异常报告COP0寄存器针对异常类型被适当地更新。这些寄存器反映了引起所述异常的有效字地址,例如,好像独立的LW指令引起了所述异常。
·如果存储器存储操作使用映射地址并且在TLB中没有匹配地址,则使用TLB重载入异常处理程序(偏置0x0)。其他TLB相关的异常(无效)使用通用异常处理程序(偏置0x180)。
·由SRSCtlESS寄存器字段指定的影子寄存器组被用于存储器异常。
·异常处理程序跳转到保持在C0_EPC中的IRET指令。
·由于故障状态被在先确定,所以IRET指令现在完成。IRET返回到原始代码PC位置,该位置未被堆栈影响。
在本示例中,除非发生这些存储器异常中的一个,否则IRET指令将运行至完成。IRET指令是不可中断的,也就是,自其他未决中断的角度看,IRET是原子的。
VI.中断链
在一个实施例中,中断链的概念减少了响应中断所需的周期的数量,所述中断在自当前中断返回时未决。因为当前中断处理程序禁用中断,或者因为未决的中断具有比当前正被处理的中断更低的优先级,中断可以被悬挂。通常,当在完成处理异常的情况下自堆栈恢复寄存器时,软件必须禁用中断。在这期间,可以信号发送其他中断。在这种情况下,新的中断将被忽略,直至例如ERET指令等指令将例如EXL位等状态指示器清除,并且在跳转到异常处理程序之前,该指令在由保持程序的内容的寄存器,例如,EPC寄存器,所指向的返回地址处开始执行。在一个实施例中,在此期间,流水线被清理以完成异常处理。当随后的中断最终被异常逻辑识别时,第二次流水线清理是必须的,因为处理器开始在返回地址处执行所述指令。
在一个实施例中,中断链功能通过允许中断控制器(例如,中断控制器102或其他外部中断控制器单元)在IRET指令完成之前更新发送到异常逻辑块112的中断信号而避免上述流水线清理。如果这些信号表示例如在StatusIPL中具有比当前优先级更高的优先级的中断,则IRET指令将更新COP0寄存器,如同刚进入异常模式一样。IRET指令之后将直接跳转到新的中断向量,因此避免了以下步骤:
1.在返回到非异常模式时清理流水线
2.清除StatusEXL位
3.返回到EPC地址
4.第二次清理流水线以进入异常模式。
在一个实施例中,当与中断自动前言程序和中断自动收尾程序功能一起使用时,中断链功能还避免了以下步骤:
·在返回到EPC指令之前从堆栈加载保存的EPC和SRSCtl值
·在处理未决中断之前将Status、EPC和SRSCtl值保存到堆栈
然而,在一个实施例中,中断链通过IRET指令可用并且仅在以下情况下可用:
·实现了影子寄存器组(SRSCtlHSS!=0)
·使能外部中断控制器模式(Config3VEIC=1,IntCtlVS!=0,CauseIV=1,and StatusBEV=0)
·IntCtlICE=1
图2说明了根据本发明的一个实施例的在以上被称作系统200中的IntCtl寄存器的布局和命名。图3A-3L说明了根据本发明的一个实施例的如图2所示的系统300中的IntCtl寄存器内的字段的命名和功能。例如,图3A、3B和3C分别说明了用于中断兼容性和向量中断模式的IPTI、IPPCI和IPFDC字段。图3D说明了用于使能向量预获取功能的PF字段。图3E说明了用于使能中断链的IRET指令的ICE字段。图3F说明了在IAP特征功能中使用的StkDec字段,所述IAP功能确定自例如GPR 29等堆栈指针113的值减小的字的数量。图3G说明了在IAP功能中使用的ClrEXL字段以及确定KSU/ERL/EXL字段是否被清除的IRET指令。图3H说明了确定IAP功能是否被使能的APE字段。图3I说明了在IAP期间选择使用哪个堆栈的UseKStk字段。图3J和3L说明了保留的字段,所述字段未被定义。图3K说明了指定向量空间的VS字段。
VII.IRET指令
图14说明了根据本发明的一个实施例的在以上被称作IRET指令的布局和命名。IRET指令提供具有自动中断收尾程序处理的中断返回。所述指令可以可选择地直接跳转到其他中断向量,而不返回到如上所述的原始返回地址。IRET指令能够以多个指令组结构实现,例如,图4中示出了两个可行的编号方式和名称,第二组以插入成分示出。
IRET指令自动执行一些在自中断处理程序返回时所要求的操作,并且所述操作可以用于在例如ERET等中断处理程序结束处代替其他指令。当使用影子寄存器组和EIC中断模式时,使用IRET指令是适当的。这种指令的自动操作可以用于倒转IAP功能的自动操作的作用。
如果使用了EIC中断模式和中断链功能,则IRET指令可以用于缩短自当前中断处理程序返回和处理下一个被请求的中断之间的时间。
如果自动前言程序功能被禁用,则IRET运行为与ERET完全相同。
如果设置了StatusERL或StatusBEV,则IRET运行为与ERET完全相同。
如果中断链被禁用:
中断被禁用。COP0状态、SRSCtl和EPC寄存器自堆栈恢复。GPR 29因堆栈帧尺寸而增大。IRET之后清除执行和指令危险,有条件地自SRSCtlPSS恢复SRSCtlCSS,并且在完成中断处理时返回到由EPC寄存器指向的被中断的指令。
如果中断链被使能:
中断被禁用。COP0状态寄存器自堆栈恢复。将外部中断控制器的优先级输出与状态寄存器的IPL字段相比较。
如果StatusIPL具有比外部中断控制器值更高的优先级:
COP0 SRSCtl和EPC被从堆栈中恢复。GPR 29因堆栈帧尺寸而增大。IRET之后清除执行和指令危险,有条件地自SRSCtlPSS恢复SRSCtlCSS,并且在完成中断处理时返回到由EPC寄存器指向的被中断的指令。
如果StatusIPL具有比外部中断控制器值更低的优先级:
GPR 29的值首先被保存到临时寄存器,之后GPR 29因堆栈帧尺寸而增大。EIC被以信号告知接受了下一个未决中断。该信号告知将CauseRIPL和SRSCtlEICSS字段自EIC输出值更新。SRSCtlEICSS字段被复制到SRSCtlCSS字段,同时CauseRIPL字段被复制到StatusIPL字段。被保存的临时寄存器被复制到当前SRS的GPR29。状态寄存器的KSU和EXL字段被可选择地设置为零。不产生执行危险或指令危险的屏障。通过跳转到由EIC驱动的中断向量而完成IRET。
在一个实施例中,IRET指令不引起下一个指令的执行(即,其不具有延迟时间隙)。如果在访问堆栈的存储器事务期间发生了异常,则这种指令可被重启。全部堆栈存储器事务必须在Status、SRSCtl和EPC被该指令修改之前完成。如果在IRET完成之前发生了异常:
1.不更新SRSCtl和EPC寄存器
2.在状态寄存器中仅改变EXL位。
VIII.IRET指令中的约束
在一个实施例中,如果IRET指令在分支或跳转指令的延迟时间隙中执行,则处理器的操作是未被定义的(UNDEFINED)。
如果在影子寄存器组未被使能或EIC中断模式未被使能时执行IRET,则处理器的操作是UNDEFINED。
在一个示例中,如果IRET指令被置于LL和SC指令之间,则这种设置将引起SC指令的失败。
用于堆栈事务的有效地址必须是自然对准的。如果地址的两个最不重要的位中的任意一个为非零,则发生地址错误异常。
IRET实现软件屏障,该软件屏障解决由协处理器0状态改变产生的全部执行和指令危险。这种屏障的作用开始于指令获取并且在IRET返回的PC处解码所述指令。
在另一个实施例中,如果StatusBEV=1或StatusERL=1,则IRET不从SRSCtlPSS恢复SRSCtlCSS,因为将StatusERL设置为1的任意异常(重置、软件重置、NMI或高速缓冲存储器错误)均不在SRSCtlPSS中保存SRSCtlCSS。如果软件将StatusERL设置为1,则其必须知道可能随后执行的IRET的操作。
堆栈事务运行为关于异常报告的独立的LW操作。
如果未使能对协处理器0的访问,则发送协处理器不可用异常的信号。
为了使能从异常模式到非异常模式的完全转换,全部的COP0寄存器修改以及堆栈指针修改必须如同这种指令是原子的那样被完成。这就是,中断不被接受,同时这种指令的操作被处理。如前所述,作为这种指令的一部分的存储器事务可以引起地址错误、总线错误、奇偶校验/ECC、TLB遗漏/无效/写入异常。
下面的表3表示与IRET指令的操作相关联的伪代码如下:
表3:IRET伪代码
IX.方法
图15说明了根据本发明的一个实施例的用于自动硬件中断处理的方法1500。在图15中所示的示例中,所述方法开始于步骤1502,该步骤包括接收第一中断请求。步骤1504继续获取第一中断向量。步骤1506包括并行读取多个处理器状态值。步骤1508继续以来自影子寄存器的值更新堆栈指针。步骤1510通过在进入异常模式的准备中并且在执行中断服务例程之前,在由更新的堆栈寄存器指定的多个存储器位置中存储多个处理器状态值而结束。
X.软件实施例
例如,除了使用硬件(例如,在中央处理单元(“CPU”)、微处理器、微控制器、数字信号处理器、处理器、异常逻辑块、芯片上系统(“SOC”)或任意其他可编程或电子装置内或耦接到以上所述设备)的实施方式外,实施方式还可以被体现为软件(例如,以任意形式配置的计算机可读代码、程序代码和/或指令,例如,源语言、目标语言或机器语言),例如,配置在构造为存储所述软件的计算机可用(例如,可读)介质中的软件。这种软件可以使能例如,本文所述的设备和方法的功能、制造、建模、仿真、说明和/或测试。例如,这可以通过使用通用编程语言(例如,C、C++)、包括Verilog HDL、VHDL、系统C寄存器传输级(RTL)等的硬件描述语言(HDL)或其他可用程序、数据库和/或电路(即示意性的)捕捉工具而完成。这种软件可以被配置在包括半导体、磁盘、光盘(例如,CD-ROM、DVD-ROM等)的任意已知的非临时的计算机可读存储介质中。此外,这种软件还可以被存储为体现在计算机可用(例如,可读)介质(例如,包括基于数字、光学或模拟介质的任意其他介质)中的计算机数据信号。这样,所述软件可以基于包括因特网和内部互联网的通信网络而被传输。
应该理解本文所述的设备和方法实施例可以被包括在半导体知识产权核心中,例如,微处理器核心(例如,体现在HDL中),并且本文所述的设备和方法实施例可以在集成电路的生产中被转换为硬件。此外,本文所述的设备和方法可以被体现为硬件和软件的组合。
XI.结论
发明内容和摘要部分可能提出了一个或多个由发明人设想的本发明的示例性实施例,但不是全部,并且因此,发明内容和摘要部分不意图以任何方式限制本发明和权利要求。
以上借助说明了指定功能的实施方式及其关系的功能构造块描述了本文的实施例。这些功能构造块的边界在本文中被任意限定以便于说明。只要指定的功能及其关系被适当地执行,则可以限定可替换的边界。
具体实施例的前述说明充分地揭示了本发明的基本性质,以至于其他人可以通过应用本技术领域内的公知常识在不进行过度试验并且不背离本发明的基本概念的情况下容易地修改和/或改变这些具体实施例以用于各种应用。因此,这种改变和修改意图基于本文呈现的教导和引导而落入所公开的实施例的等价物的意义和范围内。将理解的是本文的措词或术语被用于说明的目的而不被用于限制的目的,从而使本说明书中的术语或措词由本领域技术人员根据所述教导和引导而得到解释。
本发明的宽度和范围应该不被任意上述示例性实施例限制,而是应该仅根据权利要求及其等价物被限定。
Claims (23)
1.一种处理系统,包括:
处理器,包括:
中断引脚;
多个寄存器,所述多个寄存器被构造为存储多个处理器状态值;
堆栈指针;和
自动中断系统,所述自动中断系统被构造为当在所述中断引脚上检测到第一中断,并且准备进入异常模式的情况下,使得:
第一中断向量被获取,
所述堆栈指针被更新,并且
在执行中断服务例程之前,所述多个处理器状态值被从所述多个寄存器并行地读取,并存储到由更新的堆栈指针指定的多个存储器位置。
2.如权利要求1所述的处理系统,其中在同一个周期中完成从所述多个寄存器的并行读取和所述堆栈指针的更新。
3.如权利要求1所述的处理系统,进一步包括:
推测获取系统,其被构造为推测地获取中断向量。
4.如权利要求1所述的处理系统,其中所述处理器状态值包括EPC寄存器中的值、状态寄存器中的值和影子寄存器组控制寄存器中的值。
5.如权利要求1所述的处理系统,其中在返回到非异常模式的准备中,所述自动中断系统将存储在由更新的堆栈指针指定的存储器位置中的所述多个处理器状态值并行地恢复到所述多个寄存器中。
6.如权利要求5所述的处理系统,进一步包括:
中断链系统,其被构造为在恢复所述处理器状态值之前处理接收到的第二中断。
7.如权利要求6所述的处理系统,其中获取第二中断向量不包括清理流水线以返回到非异常模式或第二次清理所述流水线以进入异常模式。
8.一种处理器中断处理的方法,包括:
接收第一中断请求;
获取第一中断向量;
并行读取多个处理器状态值;
以来自影子寄存器的值更新堆栈指针;以及
在准备进入异常模式时并且在执行中断服务例程之前,在由更新的堆栈寄存器指定的多个存储器位置中存储所述多个处理器状态值。
9.如权利要求8所述的方法,其中在同一个周期中完成处理器状态值的并行读取和所述堆栈指针的更新。
10.如权利要求8所述的方法,其中所述获取第一中断向量被推测地完成。
11.如权利要求8所述的方法,其中所述处理器状态值包括EPC寄存器中的值、状态寄存器中的值和影子寄存器组控制寄存器中的值。
12.如权利要求8所述的方法,进一步包括在返回到非异常模式的准备中,将存储在由更新的堆栈指针指定的存储器位置中的所述多个处理器状态值并行地恢复到所述多个寄存器中。
13.如权利要求12所述的方法,进一步包括:
在恢复所述处理器状态值之前处理接收到的第二中断。
14.如权利要求13所述的方法,其中获取第二中断向量不包括清理流水线以返回到非异常模式或第二次清理所述流水线以进入异常模式。
15.一种非临时计算机可读存储介质,其具有包含于其上的用于生成处理器的计算机可读程序代码,所述计算机可读程序代码包括:
用于生成中断引脚的计算机可读代码;
用于生成构造为存储多个处理器状态值的多个寄存器的计算机可读代码;
用于生成堆栈指针的计算机可读代码;以及
用于生成自动中断系统的计算机可读代码,所述自动中断系统被构造为检测所述中断引脚上的第一中断,
其中第一中断向量被获取,
所述堆栈指针被更新,并且
其中在执行中断服务例程之前,所述多个处理器状态值被从所述多个寄存器并行读取并且存储到由更新的所述堆栈指针指定的多个存储器位置。
16.如权利要求15所述的非临时计算机可读存储介质,其中在同一个周期中完成从所述多个寄存器的并行读取和所述堆栈指针的更新。
17.如权利要求15所述的非临时计算机可读存储介质,进一步包括:
用于生成推测获取系统的计算机可读代码,所述推测获取系统被构造为推测地获取中断向量。
18.如权利要求15所述的非临时计算机可读存储介质,其中所述处理器态值包括EPC寄存器中的值、状态寄存器中的值和影子寄存器组控制寄存器中的值。
19.如权利要求15所述的非临时计算机可读存储介质,其中在返回到非异常模式的准备中,所述自动中断系统将存储在由更新的堆栈指针指定的存储器位置中的所述多个处理器状态值并行地恢复到所述多个寄存器中。
20.如权利要求15所述的非临时计算机可读存储介质,进一步包括:
用于生成中断链系统的计算机可读代码,所述中断链系统被构造为在恢复所述处理器状态值之前处理接收到的第二中断。
21.如权利要求15所述的非临时计算机可读存储介质,其中获取第二中断向量不包括清理流水线以返回到非异常模式或第二次清理所述流水线以进入异常模式。
22.一种中断处理的方法,包括:
确定与第一中断相关联的特权级别;
以自第一固定寄存器复制的值更新第一堆栈指针寄存器;
将与所述第一中断相关联的值存储在第一存储器地址中由所述第一堆栈指针寄存器识别的位置处;以及
不允许自工作在第二特权级别的处理访问所述第一固定寄存器,其中所述第二特权级别低于所述第一中断的所述特权级别。
23.如权利要求22所述的方法,进一步包括:
确定第二中断的特权级别;
以自第三堆栈指针寄存器复制的值更新第二堆栈指针寄存器,所述第三堆栈指针寄存器与工作在第三特权级别的中断处理相关联,其中所述第三特权级别等于所述第二中断的所述特权级别;
修改所述第二堆栈指针寄存器中的所述值;以及
将与所述第二中断相关联的值存储在第二存储器地址中由所述第二堆栈指针寄存器识别的位置处。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/847,772 | 2010-07-30 | ||
US12/847,772 US8392644B2 (en) | 2010-07-30 | 2010-07-30 | System and method for automatic hardware interrupt handling |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102346688A true CN102346688A (zh) | 2012-02-08 |
Family
ID=45527871
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110214684.1A Pending CN102346688A (zh) | 2010-07-30 | 2011-07-29 | 用于自动硬件中断处理的系统和方法 |
Country Status (2)
Country | Link |
---|---|
US (2) | US8392644B2 (zh) |
CN (1) | CN102346688A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102708015A (zh) * | 2012-05-15 | 2012-10-03 | 江苏中科梦兰电子科技有限公司 | 基于cpu不可屏蔽中断系统问题诊断的调试方法 |
CN107402831A (zh) * | 2016-04-28 | 2017-11-28 | 想象技术有限公司 | 用于在异常驱动系统中处理异常的方法 |
CN107526622A (zh) * | 2017-08-16 | 2017-12-29 | 北方工业大学 | Linux的快速异常处理方法及装置 |
CN108037951A (zh) * | 2017-12-27 | 2018-05-15 | 山东师范大学 | 一种dtp处理器的中断快速切换方法及装置 |
CN110007964A (zh) * | 2019-03-15 | 2019-07-12 | 芯来科技(武汉)有限公司 | 用于risc-v架构的中断系统 |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103345873B (zh) * | 2013-07-19 | 2015-08-19 | 南京财经大学 | 一种单片机中断优先级的演示方法及装置 |
US20160381050A1 (en) * | 2015-06-26 | 2016-12-29 | Intel Corporation | Processors, methods, systems, and instructions to protect shadow stacks |
US10394556B2 (en) | 2015-12-20 | 2019-08-27 | Intel Corporation | Hardware apparatuses and methods to switch shadow stack pointers |
US10430580B2 (en) | 2016-02-04 | 2019-10-01 | Intel Corporation | Processor extensions to protect stacks during ring transitions |
US10606678B2 (en) * | 2017-11-17 | 2020-03-31 | Tesla, Inc. | System and method for handling errors in a vehicle neural network processor |
CN110928574A (zh) * | 2019-11-20 | 2020-03-27 | 深圳市汇顶科技股份有限公司 | 微控制器、中断处理芯片、设备及中断处理方法 |
CN117215819B (zh) * | 2023-09-11 | 2024-03-19 | 上海合芯数字科技有限公司 | 一种机器异常检查中断的处理方法及装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0795278B2 (ja) * | 1985-08-30 | 1995-10-11 | 株式会社日立製作所 | 処理装置の割込制御方式 |
US5644772A (en) * | 1994-08-12 | 1997-07-01 | Advanced Micro Devices, Inc. | Signal dispatching for C language interrupt handling |
US7487339B2 (en) * | 2001-10-12 | 2009-02-03 | Mips Technologies, Inc. | Method and apparatus for binding shadow registers to vectored interrupts |
US8291202B2 (en) * | 2008-08-08 | 2012-10-16 | Qualcomm Incorporated | Apparatus and methods for speculative interrupt vector prefetching |
US8825926B2 (en) * | 2009-04-13 | 2014-09-02 | Microchip Technology Incorporated | Processor with assignable general purpose register set |
-
2010
- 2010-07-30 US US12/847,772 patent/US8392644B2/en active Active
-
2011
- 2011-07-29 CN CN201110214684.1A patent/CN102346688A/zh active Pending
-
2013
- 2013-02-04 US US13/758,163 patent/US20130159578A1/en not_active Abandoned
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102708015A (zh) * | 2012-05-15 | 2012-10-03 | 江苏中科梦兰电子科技有限公司 | 基于cpu不可屏蔽中断系统问题诊断的调试方法 |
CN107402831A (zh) * | 2016-04-28 | 2017-11-28 | 想象技术有限公司 | 用于在异常驱动系统中处理异常的方法 |
CN107402831B (zh) * | 2016-04-28 | 2022-08-09 | 北欧半导体公司 | 用于在异常驱动系统中处理异常的方法 |
CN107526622A (zh) * | 2017-08-16 | 2017-12-29 | 北方工业大学 | Linux的快速异常处理方法及装置 |
CN107526622B (zh) * | 2017-08-16 | 2020-04-07 | 北方工业大学 | Linux的快速异常处理方法及装置 |
CN108037951A (zh) * | 2017-12-27 | 2018-05-15 | 山东师范大学 | 一种dtp处理器的中断快速切换方法及装置 |
CN108037951B (zh) * | 2017-12-27 | 2020-11-20 | 山东师范大学 | 一种dtp处理器的中断快速切换方法及装置 |
CN110007964A (zh) * | 2019-03-15 | 2019-07-12 | 芯来科技(武汉)有限公司 | 用于risc-v架构的中断系统 |
Also Published As
Publication number | Publication date |
---|---|
US20130159578A1 (en) | 2013-06-20 |
US20120030392A1 (en) | 2012-02-02 |
US8392644B2 (en) | 2013-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102346688A (zh) | 用于自动硬件中断处理的系统和方法 | |
CN101558388B (zh) | 数据高速缓存虚拟提示路线预测及其应用 | |
CN101809542B (zh) | 用于监视调试事件的系统和方法 | |
CN102792265B (zh) | 基于机器状态的指令破解 | |
CN103123597B (zh) | 微处理器及其所适用的测试方法 | |
US9817667B2 (en) | Techniques for scheduling operations at an instruction pipeline | |
US9003225B2 (en) | Confirming store-to-load forwards | |
CN108139908B (zh) | 移动前缀指令 | |
JPS59502159A (ja) | 仮想マシンデ−タプロセツサ | |
TWI497278B (zh) | 微處理器、死結或活結狀態解除方法以及其電腦程式產品 | |
JPH02232737A (ja) | パイプライン方式コンピューターシステムにおいてエラーを検出し訂正する方法及び装置 | |
CN104364771A (zh) | 修改来自较小特权状态的运行时间仪表控制 | |
CN103098020A (zh) | 由多个指令集使用的寄存器间映射 | |
CN101473303A (zh) | 在连结到本机码期间处理异常的方法及设备 | |
CN102103482B (zh) | 自适应优化的比较-交换操作 | |
CN103154883A (zh) | 对来自多个指令集的指令进行译码 | |
GB2525715A (en) | Pipelined ECC-protected memory access | |
CN108140067A (zh) | 交互式多步骤物理合成 | |
CN102890624B (zh) | 用于管理无序毫码控制操作的方法和系统 | |
EP0354585B1 (en) | Instruction pipeline microprocessor | |
CN101286117B (zh) | 微码修补扩充装置、扩充微码修补机制容量的装置及其方法 | |
JP3170472B2 (ja) | レジスタ・リマップ構造を有する情報処理システム及び方法 | |
CN101790719A (zh) | 低开销/省电处理器同步机制及其应用 | |
US8484007B2 (en) | Method and apparatus of handling instruction rejects, partial rejects, stalls and branch wrong in a simulation model | |
CN101583926B (zh) | 利用缓冲器便于指令执行的方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1162699 Country of ref document: HK |
|
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120208 |
|
WD01 | Invention patent application deemed withdrawn after publication | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: WD Ref document number: 1162699 Country of ref document: HK |