CN117573318A - 中断控制方法、处理器系统、芯片及电子设备 - Google Patents
中断控制方法、处理器系统、芯片及电子设备 Download PDFInfo
- Publication number
- CN117573318A CN117573318A CN202311581174.7A CN202311581174A CN117573318A CN 117573318 A CN117573318 A CN 117573318A CN 202311581174 A CN202311581174 A CN 202311581174A CN 117573318 A CN117573318 A CN 117573318A
- Authority
- CN
- China
- Prior art keywords
- stack
- interrupt
- value
- register
- processor core
- 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 80
- 238000012545 processing Methods 0.000 claims abstract description 71
- 230000008569 process Effects 0.000 claims abstract description 26
- 230000004044 response Effects 0.000 claims description 36
- 238000004321 preservation Methods 0.000 claims description 14
- 238000013461 design Methods 0.000 claims description 12
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 claims description 6
- 230000003247 decreasing effect Effects 0.000 claims description 4
- 230000006870 function Effects 0.000 description 24
- 101000829705 Methanopyrus kandleri (strain AV19 / DSM 6324 / JCM 9639 / NBRC 100938) Thermosome subunit Proteins 0.000 description 13
- 239000013625 clathrin-independent carrier Substances 0.000 description 13
- 238000010586 diagram Methods 0.000 description 8
- 230000008859 change Effects 0.000 description 4
- 230000007547 defect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- 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/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
Abstract
本公开提供了一种中断控制方法、处理器系统、芯片及电子设备,所述处理器系统包括:处理器内核、中断控制器、寄存器、任务栈、中断程序栈,其中:当在处理器内核运行任务过程中接收到中断请求时,处理器内核将寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,然后,处理器内核使用栈指针指向的栈来执行中断请求对应的中断处理流程,其中,在处理器内核运行任务时,栈指针指向任务栈,保存中断程序栈地址值;在执行完中断处理流程后,处理器内核将所述栈指针的值恢复为保存的值,保存中断程序栈地址值,从栈指针指向的栈恢复寄存器的值。
Description
技术领域
本公开涉及内核中断处理技术领域,具体涉及一种中断控制方法、处理器系统、芯片及电子设备。
背景技术
RISC-V是基于精简指令集(RISC)原则的开源指令集架构(ISA)。RISC-V指令集的设计考虑了小型、快速、低功耗等现实要求。它是可以在BSD许可证下自由使用的CPU设计,相当于“开源硬件”,在相关行业得到了广泛应用。但是,标准的RISC-V中断控制器方案存在支撑中断操作时需要大量上下文来保存、恢复指令等缺点。
发明内容
为了解决相关技术中的问题,本公开提供了一种中断控制方法、处理器系统、芯片及电子设备。
第一方面,本公开实施例中提供了一种处理器系统,包括:处理器内核、中断控制器、寄存器、任务栈、中断程序栈,其中:
当中断控制器在所述处理器内核运行任务过程中接收到中断请求时,所述中断控制器通知所述处理器内核发生中断;
响应于所述中断,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,然后,所述处理器内核使用所述栈指针指向的栈来执行所述中断请求对应的中断处理流程,其中,所述任务栈为所述任务使用的栈,所述中断程序栈为中断处理程序使用的栈,在处理器内核运行任务时,所述栈指针指向所述任务栈;
在所述处理器内核执行完中断处理流程后,所述处理器内核将所述栈指针的值恢复为保存的值,保存中断程序栈地址值,从所述栈指针指向的栈恢复所述寄存器的值。
根据本公开的实施例,所述中断程序栈与所述任务程序栈占用不同的栈空间,不同任务共享同一个所述中断程序栈。
根据本公开的实施例,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,包括:
所述处理器内核将所述寄存器的值压入栈指针指向的栈,然后保存栈指针的值,将栈指针指向中断程序栈。
根据本公开的实施例,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,包括:
所述处理器内核保存栈指针的值,将栈指针指向中断程序栈,然后将所述寄存器的值压入栈指针指向的栈。
根据本公开的实施例,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,以及所述处理器内核将所述栈指针的值恢复为保存的值,保存中断程序栈地址值,从所述栈指针指向的栈恢复所述寄存器的值,为硬件实现的操作。
根据本公开的实施例,所述处理器内核使用所述栈指针指向的栈来执行所述中断请求对应的中断处理流程为软件实现的操作。
根据本公开的实施例,所述寄存器包括通用寄存器和控制和状态寄存器;
所述处理器内核将所述寄存器的值压入栈指针指向的栈,包括所述处理器内核更新所述控制和状态寄存器的值,然后将所述控制和状态寄存器的值和所述通用寄存器的值压入所述栈指针指向的栈。
根据本公开的实施例,当所述中断控制器在所述处理器内核执行中断处理流程期间接收到另一中断请求时,所述中断控制器将所述另一中断请求通知所述处理器内核;
响应于所述另一中断,所述处理器内核更新所述控制和状态寄存器的值,将所述通用寄存器的值和所述控制和状态寄存器的值压入栈指针指向的栈;
所述处理器内核使用所述栈指针指向的栈来执行所述另一中断请求对应的中断处理流程;
在所述处理器内核执行完所述另一中断请求对应的中断处理流程后,所述处理器内核从所述栈指针指向的栈恢复所述通用寄存器和所述控制和状态寄存器的值。
根据本公开的实施例,所述控制和状态寄存器包括指令地址寄存器和状态寄存器;
所述处理器内核更新所述控制和状态寄存器的值,包括:将所述指令地址寄存器的值设置为处理器内核执行的当前指令的下一条指令地址;将状态寄存器的值设置为关闭全局中断;
所述处理器内核从所述栈指针指向的栈恢复所述控制和状态寄存器的值之后,根据所述指令地址寄存器的值继续执行相应指令,并将所述状态寄存器的值设置为允许全局中断。
根据本公开的实施例,所述控制和状态寄存器还包括原因寄存器,用于保存异常或中断原因。
根据本公开的实施例,所述通用寄存器包括调用者保存寄存器和被调用者保存寄存器;
所述处理器内核将所述通用寄存器的值压入栈指针指向的栈,包括:所述处理器内核将所述调用者保存寄存器的值压入栈指针指向的栈;
所述处理器内核从所述栈指针指向的栈恢复所述通用寄存器的值,包括:所述处理器内核从所述栈指针指向的栈恢复所述调用者保存寄存器的值。
根据本公开的实施例,所述处理器内核执行的中断处理流程包括:
保存被调用者保存寄存器的值;
执行中断处理程序;
恢复被保存的被调用者保存寄存器的值。
根据本公开的实施例,所述处理器系统还包括拓展中断嵌套控制寄存器,所述拓展中断嵌套控制寄存器包括中断嵌套计数字段,用于记录中断嵌套状态。
根据本公开的实施例,在接收到中断请求时,所述处理器内核根据所述中断嵌套计数字段的值确定所述处理器内核处于运行任务过程中还是处于中断处理过程中。
根据本公开的实施例,所述拓展中断嵌套控制寄存器还包括最大中断嵌套级数字段,所述最大中断嵌套级数字段保存中断嵌套功能允许嵌套的最大级数,当中断嵌套计数字段表示的中断嵌套级数达到所述最大中断嵌套级数字段的值时,不开启中断。
根据本公开的实施例,所述拓展中断嵌套控制器还包括中断嵌套水位字段,所述中断嵌套水位字段保存系统启动以来的中断嵌套最大值深度。
根据本公开的实施例,当所述中断嵌套水位字段的值等于最大中断嵌套级数字段时,表明系统设计需要进行优化。
根据本公开的实施例,所述拓展中断嵌套控制寄存器还包括指针交换开关字段,所述处理器内核根据所述指针交换开关字段确定是否应当将栈指针指向中断程序栈。
根据本公开的实施例,所述处理器系统还包括栈地址寄存器,用于保存中断程序栈地址值,其中,所述将栈指针指向中断程序栈,包括将所述栈指针的值设置为所述栈地址寄存器中保存的中断程序栈地址值。
第二方面,本公开实施例提供了一种芯片,包括以上所述一项或多项的处理器系统。
第三方面,本公开实施例提供了一种电子设备,包括以上所述第一方面任意一项或多项的处理器系统,或第二方面所述的芯片。
第四方面,本公开实施例提供了一种中断控制方法,所述方法应用于包括处理器内核、中断控制器、寄存器、任务栈、中断程序栈的处理器系统,所述方法包括:
当中断控制器在所述处理器内核运行任务过程中接收到中断请求时,所述中断控制器通知所述处理器内核发生中断;
响应于所述中断,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,然后,所述处理器内核使用所述栈指针指向的栈来执行所述中断请求对应的中断处理流程,其中,所述任务栈为所述任务使用的栈,所述中断程序栈为中断处理程序使用的栈,在处理器内核运行任务时,所述栈指针指向所述任务栈;
在所述处理器内核执行完中断处理流程后,所述处理器内核将所述栈指针的值恢复为保存的值,保存中断程序栈地址值,从所述栈指针指向的栈恢复所述寄存器的值。
根据本公开的实施例,所述中断程序栈与所述任务程序栈占用不同的栈空间,不同任务共享同一个所述中断程序栈。
根据本公开的实施例,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,包括:
所述处理器内核将所述寄存器的值压入栈指针指向的栈,然后保存栈指针的值,将栈指针指向中断程序栈。
根据本公开的实施例,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,包括:
所述处理器内核保存栈指针的值,将栈指针指向中断程序栈,然后将所述寄存器的值压入栈指针指向的栈。
根据本公开的实施例,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,以及所述处理器内核将所述栈指针的值恢复为保存的值,保存中断程序栈地址值,从所述栈指针指向的栈恢复所述寄存器的值,为硬件实现的操作。
根据本公开的实施例,所述处理器内核使用所述栈指针指向的栈来执行所述中断请求对应的中断处理流程为软件实现的操作。
根据本公开的实施例,所述寄存器包括通用寄存器和控制和状态寄存器;
所述处理器内核将所述寄存器的值压入栈指针指向的栈,包括所述处理器内核更新所述控制和状态寄存器的值,然后将所述控制和状态寄存器的值和所述通用寄存器的值压入所述栈指针指向的栈。
根据本公开的实施例,所述方法还包括:
当所述中断控制器在所述处理器内核执行中断处理流程期间接收到另一中断请求时,所述中断控制器将所述另一中断请求通知所述处理器内核;
响应于所述另一中断,所述处理器内核更新所述控制和状态寄存器的值,将所述通用寄存器的值和所述控制和状态寄存器的值压入栈指针指向的栈;
所述处理器内核使用所述栈指针指向的栈来执行所述另一中断请求对应的中断处理流程;
在所述处理器内核执行完所述另一中断请求对应的中断处理流程后,所述处理器内核从所述栈指针指向的栈恢复所述通用寄存器和所述控制和状态寄存器的值。
根据本公开的实施例,所述控制和状态寄存器包括指令地址寄存器和状态寄存器;
所述处理器内核更新所述控制和状态寄存器的值,包括:将所述指令地址寄存器的值设置为处理器内核执行的当前指令的下一条指令地址;将状态寄存器的值设置为关闭全局中断;
所述处理器内核从所述栈指针指向的栈恢复所述控制和状态寄存器的值之后,根据所述指令地址寄存器的值继续执行相应指令,并将所述状态寄存器的值设置为允许全局中断。
根据本公开的实施例,所述控制和状态寄存器还包括原因寄存器,用于保存异常或中断原因。
根据本公开的实施例,所述通用寄存器包括调用者保存寄存器和被调用者保存寄存器;
所述处理器内核将所述通用寄存器的值压入栈指针指向的栈,包括:所述处理器内核将所述调用者保存寄存器的值压入栈指针指向的栈;
所述处理器内核从所述栈指针指向的栈恢复所述通用寄存器的值,包括:所述处理器内核从所述栈指针指向的栈恢复所述调用者保存寄存器的值。
根据本公开的实施例,所述处理器内核执行的中断处理流程包括:
保存被调用者保存寄存器的值;
执行中断处理程序;
恢复被保存的被调用者保存寄存器的值。
根据本公开的实施例,所述处理器系统还包括拓展中断嵌套控制寄存器,所述拓展中断嵌套控制寄存器包括中断嵌套计数字段,用于记录中断嵌套状态,所述方法还包括:
当处理器内核当前不处于中断处理流程中时,将所述中断嵌套计算字段的值设置为0,每次响应中断时所述中断嵌套计数字段的值加1,退出中断处理流程时所述中断嵌套计数字段的值减1。
根据本公开的实施例,所述方法还包括:
在接收到中断请求时,所述处理器内核根据所述中断嵌套计数字段的值确定所述处理器内核处于运行任务过程中还是处于中断处理过程中。
根据本公开的实施例,所述拓展中断嵌套控制寄存器还包括最大中断嵌套级数字段,所述最大中断嵌套级数字段保存中断嵌套功能允许嵌套的最大级数,当中断嵌套计数字段表示的中断嵌套级数达到所述最大中断嵌套级数字段的值时,不开启中断。
根据本公开的实施例,所述拓展中断嵌套控制器还包括中断嵌套水位字段,所述中断嵌套水位字段保存系统启动以来的中断嵌套最大值深度。
根据本公开的实施例,当所述中断嵌套水位字段的值等于最大中断嵌套级数字段时,表明系统设计需要进行优化。
根据本公开的实施例,所述拓展中断嵌套控制寄存器还包括指针交换开关字段,所述方法还包括:所述处理器内核根据所述指针交换开关字段确定是否应当将栈指针的值指向中断程序栈。
根据本公开的实施例,所述处理器系统还包括栈地址寄存器,用于保存中断程序栈地址值,所述将栈指针指向中断程序栈,包括将所述栈指针的值设置为所述栈地址寄存器中保存的中断程序栈地址值。
本公开实施例简化了中断响应的操作,提升了中断响应速度。此外,本公开实施例通过硬件实现调用者保存寄存器和控制和状态寄存器的压栈操作,极大地优化了中断响应时间。通过将栈指针指向中断程序栈的操作,使得在中断处理流程期间使用中断程序栈,只需要预留一份中断处理所需的栈空间,而无需为每个任务预留一份用于中断操作的栈空间,极大节约了硬件成本。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
结合附图,通过以下非限制性实施方式的详细描述,本公开的其它特征、目的和优点将变得更加明显。在附图中:
图1示出根据本公开实施例的处理器系统。
图2示出标准CLIC的中断响应流程示意图。
图3示出了标准CLIC的嵌套中断响应流程示意图。
图4示出了根据本公开实施例的中断响应流程示意图。
图5示出了拓展中断嵌套寄存器的示意图。
图6示出根据本公开实施例的中断控制方法的流程图。
具体实施方式
下文中,将参考附图详细描述本公开的示例性实施例,以使本领域技术人员可容易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施例无关的部分。
在本公开中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不欲排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。
另外还需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
如上所述,标准的RISC-V中断控制器方案存在支撑中断操作时需要大量上下文来保存、恢复指令等缺点。例如,在嵌入式多任务系统中,每个任务有独立的栈空间,中断处理时都需保存上下文。一般的简单系统也有至少10个任务,而中断发生时间不可预知,任何一个任务运行时都可能发生中断事件,所以每个任务栈都要留出任务运行时处理中断需要的栈空间,极大增加系统硬件成本。具体说来,假设一个简单的中断占用256字节(通用寄存器有31个,压栈需要120多个字节,因此256字节一般是不够的)。假设我们有10个任务,那么在现有技术中就需要256x10个字节的栈空间,假设嵌套为五级,总共需要256x10x5个字节的栈空间。而应用本发明,只需要占用256x5个字节的栈空间,因此本发明对RAM空间有显著的节省。
本公开提供了一种处理器系统,可实现对中断的快速响应并节约处理中断使用的上下文空间。根据本公开实施例的处理器系统包括:处理器内核、中断控制器、寄存器、任务栈、中断程序栈,其中:当中断控制器在所述处理器内核运行任务过程中接收到中断请求时,所述中断控制器通知所述处理器内核发生中断;响应于所述中断,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,然后,所述处理器内核使用所述栈指针指向的栈来执行所述中断请求对应的中断处理流程,其中,所述任务栈为所述任务使用的栈,所述中断程序栈为中断处理程序使用的栈,在处理器内核运行任务时,所述栈指针指向所述任务栈;在所述处理器内核执行完中断处理流程后,所述处理器内核将所述栈指针的值恢复为保存的值,保存中断程序栈地址值,从所述栈指针指向的栈恢复所述寄存器的值。根据本公开实施例,中断程序栈与所述任务程序栈占用不同的栈空间,不同任务共享同一个所述中断程序栈,只需要预留一份中断处理所需的栈空间,能够显著节约系统硬件成本。
图1示出了根据本公开实施例的处理器系统示例。
如图1所示,根据本公开的实施例,处理器系统100包括处理器内核101、中断控制器102、寄存器103、任务栈104、中断程序栈105,其中,任务栈104、中断程序栈105可以在随机访问存储器RAM中实现,中断程序栈105是系统启动后在RAM中分配的一块不同于任务栈的空间,不同任务都可以使用这个中断程序栈
根据本公开的实施例,处理器内核101在运行任务时使用任务栈104,在运行中断处理程序时使用中断程序栈105。在处理器内核101运行任务时,栈指针(sp)指向任务栈104。根据本公开的实施例,任务是除了异常处理程序之外的程序或进程,例如可以是应用程序、操作系统进程等。
当中断控制器102在处理器内核101运行任务过程中接收到中断请求时,中断控制器102通知处理器内核101发生中断。响应于该中断,处理器内核101将寄存器103的值压入栈指针指向的栈,即压入任务栈104,保存栈指针的值,然后将栈指针指向中断程序栈105。根据本公开的实施例的处理器系统可以包括栈地址寄存器,系统启动后,在栈地址寄存器中配置中断程序栈的地址。将栈指针指向中断程序栈105,可以实现为将栈指针的值设置为栈地址寄存器中保存的中断程序栈的地址。进一步地,栈地址寄存器也可用于保存栈指针的值。然后,处理器内核101使用栈指针指向的栈,即使用中断程序栈105来执行所述中断请求对应的中断处理流程。根据本公开的实施例,处理器内核101执行与中断请求相对应的中断处理流程可以包括处理器内核101执行与中断请求相对应的中断处理程序,由于栈指针指向中断程序栈105,处理器内核101使用中断程序栈105执行中断处理程序。在处理器内核101执行完中断处理流程后,处理器内核101保存中断栈地址值,例如将栈指针的当前值保存在寄存器中,然后将栈指针的值恢复为保存的值,即将栈指针指向任务栈104。然后,处理器内核101从栈指针指向的栈恢复所述寄存器的值,即从任务栈104恢复进入中断处理流程前压入栈的寄存器102的值,并继续运行任务。
根据本公开的实施例,只需要预留一份中断处理所需的栈空间,不同任务可以使用相同的中断程序栈空间来处理中断,能够显著节约系统硬件成本。
根据本公开的实施例,所述处理器内核将所述寄存器的值压入栈指针指向的栈,将栈指针的值指向中断程序,保存原任务栈地址值,以及所述处理器内核将所述栈指针指向原任务栈,保存中断程序栈地址值,从所述栈指针指向的栈恢复所述寄存器的值,为硬件实现的操作。根据本公开的实施例,所述处理器内核使用所述栈指针指向的栈来执行所述中断请求对应的中断处理流程为软件实现的操作。
如图1所示,根据本公开的实施例,寄存器103包括通用寄存器和控制和状态寄存器,所述处理器内核将所述寄存器的值压入栈指针指向的栈,包括所述处理器内核更新所述控制和状态寄存器的值,然后将所述控制和状态寄存器的值和所述通用寄存器的值压入所述栈指针指向的栈。
根据本公开的实施例,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,包括:所述处理器内核将所述寄存器的值压入栈指针指向的栈,然后保存栈指针的值,将栈指针指向中断程序栈,称为后交换法。或者,所述处理器内核可以先保存栈指针的值,将栈指针指向中断程序栈,然后将所述寄存器的值压入栈指针指向的栈,称为先交换法。
当寄存器包括通用寄存器和控制和状态寄存器时,处理器内核先将通用寄存器的值和控制和状态寄存器的值压入栈指针指向的栈,然后再保存栈指针的值,将栈指针指向中断程序栈,或者,处理器内核也可以先保存栈指针的值,将栈指针指向中断程序栈,然后将通用寄存器的值和控制和状态寄存器的值压入栈指针指向的栈。
根据本公开的实施例,控制和状态寄存器包括指令地址寄存器和状态寄存器,所述处理器内核更新所述控制和状态寄存器的值,包括:将所述指令地址寄存器的值设置为处理器内核执行的当前指令的下一条指令地址;将状态寄存器的值设置为关闭全局中断;所述处理器内核从所述栈指针指向的栈恢复所述控制和状态寄存器的值之后,触发所述处理器内核根据所述指令地址寄存器的值继续执行相应指令,并将所述状态寄存器的值设置为允许全局中断。
根据本公开的实施例,所述控制和状态寄存器还包括原因寄存器,用于保存异常或中断原因。
根据本公开的实施例,所述通用寄存器包括调用者保存寄存器和被调用者保存寄存器,所述处理器内核将所述通用寄存器的值压入栈指针指向的栈,包括:所述处理器内核将所述调用者保存寄存器的值压入栈指针指向的栈,所述处理器内核从所述栈指针指向的栈恢复所述通用寄存器的值,包括:所述处理器内核从所述栈指针指向的栈恢复所述调用者保存寄存器的值。
根据本公开的实施例,所述处理器内核执行的中断处理流程包括:保存被调用者保存寄存器的值;执行中断处理程序;恢复被保存的被调用者保存寄存器的值。
根据本公开实施例的处理器系统可以通过对RISC-V标准进行拓展来实现。现有RISC-V的中断控制主要采用两种方式:适合于多核系统的平台级中断控制器(Platform-level interrupt controller,PLIC)和适合于单核系统的(核心本地中断控制器,Core-Local Interrupt Controller,CLIC)。PLIC针对多核系统,其将外设中断分发给不同的核心,每个核心有独立的本地中断控制器CLINT,用于计时器和软中断管理。但是,单核系统不需要中断分发,PLIC的分发设计显得多余,也增加了硬件成本。CLIC针对单核系统,可以选择为每个中断源提供单独的trap入口地址,具有可调优先级阈值控制的中断抢占(嵌套),并支持通过背靠背中断减少上下文切换。但是,CLIC中断控制器软件依然存在中断响应速度慢、在支撑嵌套中断或繁琐操作时需要大量上下文来保存和恢复指令等缺点。
根据RISC-V标准,控制和状态寄存器(CSRs)包括指令地址寄存器mepc、状态寄存器mstatus、原因寄存器mcause,通用寄存器(GPRs)包括调用者保存寄存器(Caller-save)和被调用者保存寄存器(Callee-save)。C函数调用规范规定函数调用时,函数中需要用到的通用寄存器值保存在栈上,函数结束之前需要把通用寄存器的值恢复原始值。通用寄存器包括Callee-save和Caller-save两组寄存器,对于A函数(调用者,Caller)调用B函数(被调用者,Callee)的情况,Caller-save类型由Caller进行保护,Callee-save类型由Callee进行保护。编译工具会在C函数(包括C中断服务函数)之前加入prologue,用于保存Caller-save寄存器,在退出时加入epilogue,用于恢复16组Caller-save寄存器,prologue/epilogue共同负责了函数中保存/恢复硬件寄存器值的堆栈平衡。对于普通的函数而言,加入prologue/epilogue是必要的也是合理的,但是中断服务函数中加入大量的prologue/epilogue,会导致中断无法得到快速响应,甚至在某些实时性的领域还会带来软件开发困难、工作效率低下等缺点。
图2示出了标准CLIC的中断响应流程示意图。
如图2所示,在任务运行时发生中断事件,CLIC将中断通知处理器内核。响应于该中断,处理器内核更新mepc以保存当前指令的下一条指令地址;更新mstatus,将mstatus的MIE域拷贝到mstatus的MPIE域,然后清除mstatus的MIE域,其中,MIE域是全局中断开关,清除MIE域就是关闭全局中断;更新mcause寄存器。然后,处理器内核计算中断入口地址并跳转到该地址执行,以上过程由硬件完成。
接下来进入软件中断处理流程,处理器内核运行软件,将中断处理函数中使用到的通用寄存器GPRs先压栈,即保存到当前栈指针sp指向的内存区域。然后,如果需要支持中断嵌套,还需要将mepc、mstatus、mcause等控制和状态寄存器CSRs压栈,之后开启中断,即设置mstatus寄存器的MIE域。然后,执行中断处理程序,之后重新关闭中断,恢复之前压栈的CSRs和GPRs寄存器,中断处理最后执行mret指令,该指令会触发硬件恢复到mepc保存的地址处执行,同时恢复mstatus寄存器的值,即使用mstatus的MPIE域恢复MIE域,从而打开全局中断。如果不需要支持中断嵌套,则上述流程中不用保存和恢复CSRs,也不用软件开启和关闭中断。
图3示出了标准CLIC的嵌套中断响应流程示意图。
如图3所示,在任务运行时发生中断事件,CLIC将中断通知处理器内核。响应于该中断,处理器内核更新mepc以保存当前指令的下一条指令地址;更新mstatus,将mstatus的MIE域拷贝到mstatus的MPIE域,然后清除mstatus的MIE域,其中,MIE域是全局中断开关,清除MIE域就是关闭全局中断;更新mcause寄存器。然后,CLIC计算中断入口地址并跳转到该地址执行,以上过程由硬件完成。
接下来进入软件中断处理流程,处理器内核运行软件,将中断处理函数中使用到的通用寄存器GPRs先压栈,即保存到当前堆栈指针sp指向的内存区域。然后将mepc、mstatus、mcause等控制和状态寄存器CSRs压栈,之后开启中断,即设置mstatus寄存器的MIE域。此时如果接收到另一中断请求,则处理器内核响应于该另一中断请求更新mepc、mstatus、mcause等CSRs,中断入口地址并跳转到该地址执行,以上过程由硬件完成。接下来进入软件中断处理流程,处理器内核运行软件,将中断处理函数中使用到的通用寄存器GPRs先压栈,即保存到当前堆栈指针sp指向的内存区域。然后将mepc、mstatus、mcause等控制和状态寄存器CSRs压栈,之后开启中断,执行中断处理程序,之后重新关闭中断,恢复之前压栈的CSRs和GPRs寄存器,中断处理程序最后执行mret指令,该指令会触发硬件恢复到mepc保存的地址处执行,恢复mstatus寄存器的值,即使用mstatus的MPIE域恢复MIE域,从而打开全局中断。然后,处理器内核关闭中断并恢复压栈的CSRs值和GPRs值,根据mepc值继续执行中断前的程序,恢复mstatus状态。
可以看出,根据标准CLIC的中断响应流程需要在软件流程和硬件流程间频繁切换,操作繁琐,响应速度慢,而且需要为每个任务预留一份用于中断操作的栈空间,硬件成本高。
本公开实施例对标准CLIC进行了改进,可以有效提升中断响应速度并节省栈空间。
图4示出了根据本公开实施例的中断响应流程示意图。
如图4所示,在接收到中断请求时,CLIC通知处理器内核发生中断。响应于该中断,处理器内核更新控制和状态寄存器的值,包括:将指令地址寄存器的值设置为处理器内核执行的当前指令的下一条指令地址,将状态寄存器的值设置为关闭全局中断,设置原因寄存器的值以保存异常或中断原因,其中,指令地址寄存器可以为mepc寄存器,状态寄存器可以为mstatus寄存器,原因寄存器可以为mcause寄存器。然后,处理器内核将控制和状态寄存器的值压入栈指针指向的栈。
处理器内核将通用寄存器的值压入栈指针指向的栈,包括将调用者保存寄存器的值压入栈指针指向的栈,例如,调用者保存寄存器可为Caller-save寄存器。
处理器内核判断中断请求是在运行任务期间接收到的,还是在执行中断处理流程期间接收到的。
本公开实施例使用拓展中断嵌套控制寄存器mxntctrl来记录中断嵌套状态,处理器内核可以根据中断嵌套控制寄存器mxntctrl的值判断中断请求是在运行任务期间接收到的,还是在执行中断处理流程期间接收到的。
图5示出了拓展中断嵌套寄存器的示意图。如图5所示,拓展中断嵌套控制寄存器mxntctrl可以包括中断嵌套计数字段mncnt,用于记录中断嵌套状态。例如,mncnt值为0表示当前系统不在中断处理流程中,每次响应中断时mncnt值加1,退出中断处理流程时减1。
拓展中断嵌套控制寄存器mxntctrl还可以包括最大中断嵌套级数字段mnmax,所述最大中断嵌套级数字段保存中断嵌套功能允许嵌套的最大级数。当中断嵌套计数字段表示的中断嵌套级数达到所述最大中断嵌套级数字段的值时,不开启中断。最大中断嵌套级数可配置,避免出现中断嵌套过多而导致栈溢出,进而导致整个系统宕机等严重问题。mnmax字段可以有效避免系统中断嵌套过深可能的栈溢出问题,提升了系统的稳定性。
拓展中断嵌套控制寄存器mxntctrl还可以包括中断嵌套水位字段mnwl,所述中断嵌套水位字段保存系统启动以来的中断嵌套最大值深度。此字段可以帮助软件开发人员调试。如果mnwl经过长时间测试达到mnmax,说明存在高优先级中断不能及时响应的风险,则该产品可能存在软件中断函数过大/执行时间过长等软硬件设计缺陷。
根据本公开的实施例,拓展中断嵌套控制寄存器mxntctrl还可以包括保留字段reserve和指针交换开关字段msrcsp,指针交换开关字段msrcsp的值表示是否应当将栈指针指向中断程序栈。根据本公开的实施例,当中断嵌套计数字段mncnt值为0时,将指针交换开关字段msrcsp设置为1,表示应当将栈指针指向中断程序栈,当中断嵌套计数字段mncnt值不为0时,将指针交换开关字段msrcsp设置为0,表示不应当将栈指针指向中断程序栈。
如图4所示,处理器内核根据拓展中断嵌套控制寄存器mxntctrl的中断嵌套计数字段mncnt判断中断请求是在运行任务期间接收到的,还是在执行中断处理流程期间接收到的。如果中断嵌套计数字段mncnt值为0,则中断请求是在运行任务期间接收到的,否则中断请求是在执行中断处理流程期间接收到的。
如果中断嵌套计数字段mncnt值为0,表示中断请求是在运行任务期间接收到的,则处理器内核将栈指针的指向中断程序栈,否则不改变栈指针指向的栈。
或者,处理器内核可以根据指针交换开关字段msrcsp的值确定是否要改变指针指向。如果指针交换开关字段msrcsp的值为1,则进行指针指向改变,否则不进行指针指向改变。
根据本公开的实施例,可以使用RISC-V标准中的mscratch寄存器用作栈地址寄存器,用于实现栈指针切换备份。mscratch寄存器在RISC-V标准中用于暂时存放一个字大小的数据,没有规定具体暂存什么数据,因此可以用其作为指针切换备份来节约硬件设计成本。系统启动后,配置mscratch寄存器的值为中断程序栈的内存地址,当处理任务执行期间接收到的中断时,将栈指针的值设置为mscratch寄存器的值,从而使用中断程序栈执行中断处理流程。mscratch寄存器也可以用来保存栈指针指向的任务栈地址值。
处理器内核将中断嵌套计数字段mncnt的值加1,然后将其与mnmax的值比较,如果其小于mnmax,则开启中断,获取中断入口地址,跳转到该地址执行。如果其等于mnmax,则不开启中断,等当前中断处理完再开启。
以上操作均由硬件完成。然后,进入处理器内核运行软件执行的中断处理流程。
如图4所示,处理器内核保存被调用者保存寄存器的值。在本实施例中可为将被调用者保存寄存器的值压入中断程序栈。C函数中编译器会自动保存函数中用到的被调用者保存寄存器的值。将状态寄存器的值设为打开全局中断。打开之后可以嵌套中断,即允许在中断处理流程期间响应其他中断请求。
然后,处理器内核运行与当前中断请求相对应的中断处理程序。
中断处理程序运行完毕后,处理器内核恢复被调用者保存寄存器的值。在本实施例中可为从所述栈指针指向的栈,也即中断程序栈中取出被调用者保存寄存器的值,并将状态寄存器的值设为关闭全局中断。
接下来,由硬件执行中断退出流程。处理器内核将拓展中断嵌套控制寄存器中的中断嵌套计数字段的值减1,然后检查拓展中断嵌套控制寄存器中的中断嵌套计数字段,所述中断嵌套计数字段为0表示处理器内核当前不处于中断处理流程中,此时将栈指针指向中断程序栈,否则不改变栈指针指向的栈。
然后,处理器内核从栈指针指向的栈恢复通用寄存器的值和控制和状态寄存器的值。
中断控制器触发处理器内核根据指令地址寄存器的值继续执行相应指令,在本实施例中,即为执行RISC-V的mret指令,触发硬件恢复到mepc保存的地址处执行。
处理器内核将状态寄存器的值设置为允许全局中断,例如使用mstatus的MPIE域的值恢复MIE域的值。
可以看出,本公开实施例统一了在任务运行期间和在中断处理流程期间的中断响应流程,二者的区别在于是否改变栈指针指向的栈。因此,本公开实施例简化了中断响应的操作,提升了中断响应速度。此外,本公开实施例通过硬件实现调用者保存寄存器和控制和状态寄存器的压栈操作,极大地优化了中断响应时间。通过改变栈指针指向的栈,使得在中断处理流程期间使用中断程序栈,只需要预留一份中断处理所需的栈空间,而无需为每个任务预留一份用于中断操作的栈空间,极大节约了硬件成本。
如上所述,处理器内核将寄存器的值压入栈指针指向的栈,然后保存栈指针的值,将栈指针指向中断程序栈,这种做法称为后交换法。或者,处理器内核可以保存栈指针的值,将栈指针指向中断程序栈,然后将所述寄存器的值压入栈指针指向的栈,这种做法称为先交换法。在多任务系统中,每个任务都有自己的任务栈空间。考虑到任务切换场景,如果在中断处理过程中遭遇任务切换,采用后交换法时,通用寄存器中调用者保存寄存器和状态控制寄存器已经保存在原任务A的栈空间,切换到新任务B时,只需再保存通用寄存器中被调用者保存寄存器到任务A的栈空间。而采用先交换法时,切换任务之前通用寄存器中调用者保存寄存器和状态控制寄存器是保存在中断程序栈的,那么在切换之前还需要把通用寄存器中调用者保存寄存器、被调用者保存寄存器和状态控制寄存器都保存到任务A的栈空间。因此,后交换法更有助于实现更为简洁的任务切换流程。
本公开实施例还提供了一种芯片,包括如上所述的处理器系统。
本公开实施例还提供了一种电子设备,包括如上所述的处理器系统或如上所述的芯片。
图6示出了根据本公开实施例的中断控制方法的流程图,所述方法应用于包括处理器内核、中断控制器、寄存器、任务栈、中断程序栈的处理器系统。
如图6所示,根据本公开实施例的中断控制方法包括步骤S101-S103。
在步骤S101中,当中断控制器在所述处理器内核运行任务过程中接收到中断请求时,所述中断控制器通知所述处理器内核发生中断。
在步骤S102中,响应于所述中断,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,然后,所述处理器内核使用所述栈指针指向的栈来执行所述中断请求对应的中断处理流程,其中,所述任务栈为所述任务使用的栈,所述中断程序栈为中断处理程序使用的栈,在处理器内核运行任务时,所述栈指针指向所述任务栈。
在步骤S103中,在所述处理器内核执行完中断处理流程后,所述处理器内核将所述栈指针的值恢复为保存的值,保存中断程序栈地址值,从所述栈指针指向的栈恢复所述寄存器的值。
根据本公开的实施例,所述中断程序栈与所述任务程序栈占用不同的栈空间,不同任务共享同一个所述中断程序栈。
根据本公开的实施例,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,包括:所述处理器内核将所述寄存器的值压入栈指针指向的栈,然后保存栈指针的值,将栈指针指向中断程序栈。
根据本公开的实施例,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,包括:所述处理器内核保存栈指针的值,将栈指针指向中断程序栈,然后将所述寄存器的值压入栈指针指向的栈。
根据本公开的实施例,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,以及所述处理器内核将所述栈指针的值恢复为保存的值,保存中断程序栈地址值,从所述栈指针指向的栈恢复所述寄存器的值,为硬件实现的操作。
根据本公开的实施例,所述处理器内核使用所述栈指针指向的栈来执行所述中断请求对应的中断处理流程为软件实现的操作。
根据本公开的实施例,所述寄存器包括通用寄存器和控制和状态寄存器;所述处理器内核将所述寄存器的值压入栈指针指向的栈,包括所述处理器内核更新所述控制和状态寄存器的值,然后将所述控制和状态寄存器的值和所述通用寄存器的值压入所述栈指针指向的栈。
根据本公开的实施例,所述方法还包括:当所述中断控制器在所述处理器内核执行中断处理流程期间接收到另一中断请求时,所述中断控制器将所述另一中断请求通知所述处理器内核;响应于所述另一中断,所述处理器内核更新所述控制和状态寄存器的值,将所述通用寄存器的值和所述控制和状态寄存器的值压入栈指针指向的栈;所述处理器内核使用所述栈指针指向的栈来执行所述另一中断请求对应的中断处理流程;在所述处理器内核执行完所述另一中断请求对应的中断处理流程后,所述处理器内核从所述栈指针指向的栈恢复所述通用寄存器和所述控制和状态寄存器的值。
根据本公开的实施例,所述控制和状态寄存器包括指令地址寄存器和状态寄存器;所述处理器内核更新所述控制和状态寄存器的值,包括:将所述指令地址寄存器的值设置为处理器内核执行的当前指令的下一条指令地址;将状态寄存器的值设置为关闭全局中断;所述处理器内核从所述栈指针指向的栈恢复所述控制和状态寄存器的值之后,根据所述指令地址寄存器的值继续执行相应指令,并将所述状态寄存器的值设置为允许全局中断。
根据本公开的实施例,所述控制和状态寄存器还包括原因寄存器,用于保存异常或中断原因。
根据本公开的实施例,所述通用寄存器包括调用者保存寄存器和被调用者保存寄存器;所述处理器内核将所述通用寄存器的值压入栈指针指向的栈,包括:所述处理器内核将所述调用者保存寄存器的值压入栈指针指向的栈;所述处理器内核从所述栈指针指向的栈恢复所述通用寄存器的值,包括:所述处理器内核从所述栈指针指向的栈恢复所述调用者保存寄存器的值。
根据本公开的实施例,所述处理器内核执行的中断处理流程包括:保存被调用者保存寄存器的值;执行中断处理程序;恢复被保存的被调用者保存寄存器的值。
根据本公开的实施例,所述处理器系统还包括拓展中断嵌套控制寄存器,所述拓展中断嵌套控制寄存器包括中断嵌套计数字段,用于记录中断嵌套状态,所述方法还包括:
当处理器内核当前不处于中断处理流程中时,将所述中断嵌套计算字段的值设置为0,每次响应中断时所述中断嵌套计数字段的值加1,退出中断处理流程时所述中断嵌套计数字段的值减1。
根据本公开的实施例,所述方法还包括:在接收到中断请求时,所述处理器内核根据所述中断嵌套计数字段的值确定所述处理器内核处于运行任务过程中还是处于中断处理过程中。
根据本公开的实施例,所述拓展中断嵌套控制寄存器还包括最大中断嵌套级数字段,所述最大中断嵌套级数字段保存中断嵌套功能允许嵌套的最大级数,当中断嵌套计数字段表示的中断嵌套级数达到所述最大中断嵌套级数字段的值时,不开启中断。
根据本公开的实施例,所述拓展中断嵌套控制器还包括中断嵌套水位字段,所述中断嵌套水位字段保存系统启动以来的中断嵌套最大值深度。
根据本公开的实施例,当所述中断嵌套水位字段的值等于最大中断嵌套级数字段时,表明系统设计需要进行优化。
根据本公开的实施例,所述拓展中断嵌套控制寄存器还包括指针交换开关字段,所述方法还包括:所述处理器内核根据所述指针交换开关字段确定是否应当改变栈指针指向的栈。
根据本公开实施例的方法可以通过对RISC-V标准进行拓展来实现。根据RISC-V标准,控制和状态寄存器(CSRs)包括指令地址寄存器mepc、状态寄存器mstatus、原因寄存器mcause,通用寄存器(GPRs)包括调用者保存寄存器(Caller-save)和被调用者保存寄存器(Callee-save)。根据本公开的实施例,可以使用RISC-V标准中的mscratch寄存器用作栈指针切换备份。mscratch寄存器在RISC-V标准中用于暂时存放一个字大小的数据,没有规定具体暂存什么数据,因此可以用其作为指针切换备份来节约硬件设计成本。系统启动后,配置mscratch寄存器的值为中断程序栈的内存地址,当处理任务执行期间接收到的中断时,将栈指针的值设置为mscratch寄存器的值,从而使用中断程序栈执行中断处理流程。mscratch寄存器也可以用来保存栈指针指向的任务栈地址值。
附图中的每个步骤可以代表一个处理器系统、芯片或程序段的一部分,所述处理器系统、芯片或程序段的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,这些步骤也可以以不同于附图中所标注的顺序发生。例如,两个步骤实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (40)
1.一种处理器系统,其特征在于,包括:处理器内核、中断控制器、寄存器、任务栈、中断程序栈,其中:
当中断控制器在所述处理器内核运行任务过程中接收到中断请求时,所述中断控制器通知所述处理器内核发生中断;
响应于所述中断,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,然后,所述处理器内核使用所述栈指针指向的栈来执行所述中断请求对应的中断处理流程,其中,所述任务栈为所述任务使用的栈,所述中断程序栈为中断处理程序使用的栈,在处理器内核运行任务时,所述栈指针指向所述任务栈;
在所述处理器内核执行完中断处理流程后,所述处理器内核将所述栈指针的值恢复为保存的值,保存中断程序栈地址值,从所述栈指针指向的栈恢复所述寄存器的值。
2.根据权利要求1所述的处理器系统,其中,所述中断程序栈与所述任务程序栈占用不同的栈空间,不同任务共享同一个所述中断程序栈。
3.根据权利要求1所述的处理器系统,其中,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,包括:
所述处理器内核将所述寄存器的值压入栈指针指向的栈,然后保存栈指针的值,将栈指针指向中断程序栈。
4.根据权利要求1所述的处理器系统,其中,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,包括:
所述处理器内核保存栈指针的值,将栈指针指向中断程序栈,然后将所述寄存器的值压入栈指针指向的栈。
5.根据权利要求1所述的处理器系统,其中:
所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,以及所述处理器内核将所述栈指针的值恢复为保存的值,保存中断程序栈地址值,从所述栈指针指向的栈恢复所述寄存器的值,为硬件实现的操作。
6.根据权利要求1所述的处理器系统,其中:
所述处理器内核使用所述栈指针指向的栈来执行所述中断请求对应的中断处理流程为软件实现的操作。
7.根据权利要求1所述的处理器系统,其中:
所述寄存器包括通用寄存器和控制和状态寄存器;
所述处理器内核将所述寄存器的值压入栈指针指向的栈,包括所述处理器内核更新所述控制和状态寄存器的值,然后将所述控制和状态寄存器的值和所述通用寄存器的值压入所述栈指针指向的栈。
8.根据权利要求7所述的处理器系统,其中:
当所述中断控制器在所述处理器内核执行中断处理流程期间接收到另一中断请求时,所述中断控制器将所述另一中断请求通知所述处理器内核;
响应于所述另一中断,所述处理器内核更新所述控制和状态寄存器的值,将所述通用寄存器的值和所述控制和状态寄存器的值压入栈指针指向的栈;
所述处理器内核使用所述栈指针指向的栈来执行所述另一中断请求对应的中断处理流程;
在所述处理器内核执行完所述另一中断请求对应的中断处理流程后,所述处理器内核从所述栈指针指向的栈恢复所述通用寄存器和所述控制和状态寄存器的值。
9.根据权利要求7所述的处理器系统,其中:
所述控制和状态寄存器包括指令地址寄存器和状态寄存器;
所述处理器内核更新所述控制和状态寄存器的值,包括:将所述指令地址寄存器的值设置为处理器内核执行的当前指令的下一条指令地址;将状态寄存器的值设置为关闭全局中断;
所述处理器内核从所述栈指针指向的栈恢复所述控制和状态寄存器的值之后,根据所述指令地址寄存器的值继续执行相应指令,并将所述状态寄存器的值设置为允许全局中断。
10.根据权利要求7所述的处理器系统,其中,所述控制和状态寄存器还包括原因寄存器,用于保存异常或中断原因。
11.根据权利要求7所述的处理器系统,其中:
所述通用寄存器包括调用者保存寄存器和被调用者保存寄存器;
所述处理器内核将所述通用寄存器的值压入栈指针指向的栈,包括:所述处理器内核将所述调用者保存寄存器的值压入栈指针指向的栈;
所述处理器内核从所述栈指针指向的栈恢复所述通用寄存器的值,包括:所述处理器内核从所述栈指针指向的栈恢复所述调用者保存寄存器的值。
12.根据权利要求11所述的处理器系统,其中,所述处理器内核执行的中断处理流程包括:
保存被调用者保存寄存器的值;
执行中断处理程序;
恢复被保存的被调用者保存寄存器的值。
13.根据权利要求1所述的处理器系统,还包括拓展中断嵌套控制寄存器,所述拓展中断嵌套控制寄存器包括中断嵌套计数字段,用于记录中断嵌套状态。
14.根据权利要求13所述的处理器系统,其中,在接收到中断请求时,所述处理器内核根据所述中断嵌套计数字段的值确定所述处理器内核处于运行任务过程中还是处于中断处理过程中。
15.根据权利要求13所述的处理器系统,其中,所述拓展中断嵌套控制寄存器还包括最大中断嵌套级数字段,所述最大中断嵌套级数字段保存中断嵌套功能允许嵌套的最大级数,当中断嵌套计数字段表示的中断嵌套级数达到所述最大中断嵌套级数字段的值时,不开启中断。
16.根据权利要求13所述的处理器系统,其中,所述拓展中断嵌套控制器还包括中断嵌套水位字段,所述中断嵌套水位字段保存系统启动以来的中断嵌套最大值深度。
17.根据权利要求16所述的处理器系统,其中,当所述中断嵌套水位字段的值等于最大中断嵌套级数字段时,表明系统设计需要进行优化。
18.根据权利要求13所述的处理器系统,其中,所述拓展中断嵌套控制寄存器还包括指针交换开关字段,所述处理器内核根据所述指针交换开关字段确定是否应当将栈指针指向中断程序栈。
19.根据权利要求1所述的处理器系统,还包括栈地址寄存器,用于保存中断程序栈地址值,其中,所述将栈指针指向中断程序栈,包括将所述栈指针的值设置为所述栈地址寄存器中保存的中断程序栈地址值。
20.一种芯片,包括根据权利要求1-19中任一项所述的处理器系统。
21.一种电子设备,包括根据权利要求1-19中任一项所述的处理器系统,或包括根据权利要求20所述的芯片。
22.一种中断控制方法,其特征在于,所述方法应用于包括处理器内核、中断控制器、寄存器、任务栈、中断程序栈的处理器系统,所述方法包括:
当中断控制器在所述处理器内核运行任务过程中接收到中断请求时,所述中断控制器通知所述处理器内核发生中断;
响应于所述中断,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,然后,所述处理器内核使用所述栈指针指向的栈来执行所述中断请求对应的中断处理流程,其中,所述任务栈为所述任务使用的栈,所述中断程序栈为中断处理程序使用的栈,在处理器内核运行任务时,所述栈指针指向所述任务栈;
在所述处理器内核执行完中断处理流程后,所述处理器内核将所述栈指针的值恢复为保存的值,保存中断程序栈地址值,从所述栈指针指向的栈恢复所述寄存器的值。
23.根据权利要求22所述的方法,其中,所述中断程序栈与所述任务程序栈占用不同的栈空间,不同任务共享同一个所述中断程序栈。
24.根据权利要求22所述的方法,其中,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,包括:
所述处理器内核将所述寄存器的值压入栈指针指向的栈,然后保存栈指针的值,将栈指针指向中断程序栈。
25.根据权利要求22所述的方法,其中,所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,包括:
所述处理器内核保存栈指针的值,将栈指针指向中断程序栈,然后将所述寄存器的值压入栈指针指向的栈。
26.根据权利要求22所述的方法,其中:
所述处理器内核将所述寄存器的值压入栈指针指向的栈,保存栈指针的值,将栈指针指向中断程序栈,以及所述处理器内核将所述栈指针的值恢复为保存的值,保存中断程序栈地址值,从所述栈指针指向的栈恢复所述寄存器的值,为硬件实现的操作。
27.根据权利要求22所述的方法,其中:
所述处理器内核使用所述栈指针指向的栈来执行所述中断请求对应的中断处理流程为软件实现的操作。
28.根据权利要求22所述的方法,其中:
所述寄存器包括通用寄存器和控制和状态寄存器;
所述处理器内核将所述寄存器的值压入栈指针指向的栈,包括所述处理器内核更新所述控制和状态寄存器的值,然后将所述控制和状态寄存器的值和所述通用寄存器的值压入所述栈指针指向的栈。
29.根据权利要求28所述的方法,还包括:
当所述中断控制器在所述处理器内核执行中断处理流程期间接收到另一中断请求时,所述中断控制器将所述另一中断请求通知所述处理器内核;
响应于所述另一中断,所述处理器内核更新所述控制和状态寄存器的值,将所述通用寄存器的值和所述控制和状态寄存器的值压入栈指针指向的栈;
所述处理器内核使用所述栈指针指向的栈来执行所述另一中断请求对应的中断处理流程;
在所述处理器内核执行完所述另一中断请求对应的中断处理流程后,所述处理器内核从所述栈指针指向的栈恢复所述通用寄存器和所述控制和状态寄存器的值。
30.根据权利要求28所述的方法,其中:
所述控制和状态寄存器包括指令地址寄存器和状态寄存器;
所述处理器内核更新所述控制和状态寄存器的值,包括:将所述指令地址寄存器的值设置为处理器内核执行的当前指令的下一条指令地址;将状态寄存器的值设置为关闭全局中断;
所述处理器内核从所述栈指针指向的栈恢复所述控制和状态寄存器的值之后,根据所述指令地址寄存器的值继续执行相应指令,并将所述状态寄存器的值设置为允许全局中断。
31.根据权利要求28所述的方法,其中,所述控制和状态寄存器还包括原因寄存器,用于保存异常或中断原因。
32.根据权利要求28所述的方法,其中:
所述通用寄存器包括调用者保存寄存器和被调用者保存寄存器;
所述处理器内核将所述通用寄存器的值压入栈指针指向的栈,包括:所述处理器内核将所述调用者保存寄存器的值压入栈指针指向的栈;
所述处理器内核从所述栈指针指向的栈恢复所述通用寄存器的值,包括:所述处理器内核从所述栈指针指向的栈恢复所述调用者保存寄存器的值。
33.根据权利要求22所述的方法,其中,所述处理器内核执行的中断处理流程包括:
保存被调用者保存寄存器的值;
执行中断处理程序;
恢复被保存的被调用者保存寄存器的值。
34.根据权利要求22所述的方法,其中,所述处理器系统还包括拓展中断嵌套控制寄存器,所述拓展中断嵌套控制寄存器包括中断嵌套计数字段,用于记录中断嵌套状态,所述方法还包括:
当处理器内核当前不处于中断处理流程中时,将所述中断嵌套计算字段的值设置为0,每次响应中断时所述中断嵌套计数字段的值加1,退出中断处理流程时所述中断嵌套计数字段的值减1。
35.根据权利要求34所述的方法,还包括:
在接收到中断请求时,所述处理器内核根据所述中断嵌套计数字段的值确定所述处理器内核处于运行任务过程中还是处于中断处理过程中。
36.根据权利要求34所述的方法,其中,所述拓展中断嵌套控制寄存器还包括最大中断嵌套级数字段,所述最大中断嵌套级数字段保存中断嵌套功能允许嵌套的最大级数,当中断嵌套计数字段表示的中断嵌套级数达到所述最大中断嵌套级数字段的值时,不开启中断。
37.根据权利要求34所述的方法,其中,所述拓展中断嵌套控制器还包括中断嵌套水位字段,所述中断嵌套水位字段保存系统启动以来的中断嵌套最大值深度。
38.根据权利要求37所述的方法,其中,当所述中断嵌套水位字段的值等于最大中断嵌套级数字段时,表明系统设计需要进行优化。
39.根据权利要求34所述的方法,其中,所述拓展中断嵌套控制寄存器还包括指针交换开关字段,所述方法还包括:
所述处理器内核根据所述指针交换开关字段确定是否应当将栈指针指向中断程序栈。
40.根据权利要求22所述的方法,其中,所述处理器系统还包括栈地址寄存器,用于保存中断程序栈地址值,所述将栈指针指向中断程序栈,包括将所述栈指针的值设置为所述栈地址寄存器中保存的中断程序栈地址值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311581174.7A CN117573318A (zh) | 2023-11-24 | 2023-11-24 | 中断控制方法、处理器系统、芯片及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311581174.7A CN117573318A (zh) | 2023-11-24 | 2023-11-24 | 中断控制方法、处理器系统、芯片及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117573318A true CN117573318A (zh) | 2024-02-20 |
Family
ID=89895164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311581174.7A Pending CN117573318A (zh) | 2023-11-24 | 2023-11-24 | 中断控制方法、处理器系统、芯片及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117573318A (zh) |
-
2023
- 2023-11-24 CN CN202311581174.7A patent/CN117573318A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6128641A (en) | Data processing unit with hardware assisted context switching capability | |
US7155600B2 (en) | Method and logical apparatus for switching between single-threaded and multi-threaded execution states in a simultaneous multi-threaded (SMT) processor | |
EP2548115B1 (en) | Apparatus and method for handling exception events | |
CN104461876B (zh) | 一种基于运行快照序列的并行程序重现调试方法 | |
US20040216101A1 (en) | Method and logical apparatus for managing resource redistribution in a simultaneous multi-threaded (SMT) processor | |
US20050066302A1 (en) | Method and system for minimizing thread switching overheads and memory usage in multithreaded processing using floating threads | |
US8321874B2 (en) | Intelligent context migration for user mode scheduling | |
WO2002033570A2 (en) | Digital signal processing apparatus | |
US5671422A (en) | Method and apparatus for switching between the modes of a processor | |
US6405234B2 (en) | Full time operating system | |
US9841994B2 (en) | Implementation of multi-tasking on a digital signal processor with a hardware stack | |
US7360223B2 (en) | Arrangements and methods for invoking an upcall in a computer system | |
CN107526622B (zh) | Linux的快速异常处理方法及装置 | |
KR100495240B1 (ko) | 프로세서 시스템 | |
KR20050014636A (ko) | 멀티태스크 시스템에서의 메모리 관리 시스템 및 태스크제어장치 | |
EP4130987A1 (en) | Interrupt control system and method based on risc-v | |
CN117573318A (zh) | 中断控制方法、处理器系统、芯片及电子设备 | |
KR101838474B1 (ko) | 다중프로세서 시스템에서의 예외 제어 | |
JP2001256062A (ja) | 割込処理方法およびその方法を用いた演算処理装置 | |
CN111124624B (zh) | 一种基于TriCore架构处理器的操作系统任务上下文管理方法 | |
GB2372348A (en) | A multi-mode, multi-tasking processor with reduction in context preservation and restoration to save processing time | |
US7203822B2 (en) | Unprivileged context management | |
US5778207A (en) | Assisting operating-system interrupts using application-based processing | |
CN115809121A (zh) | 用于上下文切换的方法和装置 | |
CN116860264A (zh) | 一种解决hmp架构应用程序自动部署的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |