CN102460377A - 数据处理设备及方法 - Google Patents
数据处理设备及方法 Download PDFInfo
- Publication number
- CN102460377A CN102460377A CN2010800273969A CN201080027396A CN102460377A CN 102460377 A CN102460377 A CN 102460377A CN 2010800273969 A CN2010800273969 A CN 2010800273969A CN 201080027396 A CN201080027396 A CN 201080027396A CN 102460377 A CN102460377 A CN 102460377A
- Authority
- CN
- China
- Prior art keywords
- floating
- integer
- point
- data processing
- context
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- 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/461—Saving or restoring of program or task context
- G06F9/462—Saving or restoring of program or task context with multiple register sets
-
- 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
-
- 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/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address 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/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
-
- 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
Abstract
本发明揭示一种数据处理设备,其包含响应数据处理指令来执行整数数据处理操作及浮点数据处理操作的处理电路,第一组整数寄存器可由处理电路用来执行整数数据处理操作,第二组浮点寄存器可由处理电路用来执行浮点数据处理操作。该处理电路响应于中断请求,执行其中仅整数寄存器的至少一子集复制到堆栈内存的整数状态保存功能,以及其中整数寄存器与浮点寄存器的至少一子集都复制到堆栈内存的浮点状态保存功能之一,处理电路根据状态信息选择整数状态保存功能与浮点状态保存功能之一。如此,可通过减少堆栈大小来减少内存大小需求,并且相较于总是保存浮点寄存器的基本解决方案,减少内存存取次数。因此,可降低耗电量与中断延迟。
Description
技术领域
本发明涉及处理整数与浮点数据处理操作的数据处理设备及方法,更具体而言,本发明的具体实施例涉及在上下文切换(context switch)时将数据值保存在处理器寄存器内。
背景技术
对于许多应用来说,希望数据处理设备可中断当前正在执行数据处理指令的处理,以便服务另一处理。虽然被中断的处理(interruptedprocess)可完全终止,并且一旦该中断处理(interrupting process)获得服务后即可从头开始,但希望从该被中断处理的断点重启该被中断处理。为了达成此目的,已知在切换至新处理之前,将存有当前参数及现有处理之当前状态的寄存器文件内容,复制到堆栈内存。
处理以上下文关系方式运行,所述上下文为正确运行处理所需的系统状态。在ARM架构的情况下,此状态包含特定整数处理器寄存器的值,包含程序计数器、堆栈指针器以及连结寄存器(link register),以及若该处理需要则还包含浮点寄存器的值。因此处理之间的切换需要包括寄存器值在内的上下文的切换,因此从中断处理返回先前被中断的处理,需要并复原对应于被中断处理的上下文。
在数据处理设备藉由只用于整数数据处理操作的专用寄存器来提供硬件支持的情况下,在进行上下文切换以服务不同处理的情况下必须至少某些整数寄存器。在数据处理设备藉由专用浮点寄存器来额外提供硬件支持给浮点数据处理操作的情况下,则在上下文切换上除了整数寄存器以外,还必须至少某些浮点寄存器。这样要提供与要在硬件不支持浮点运算的数据处理设备上所执行的代码的向下兼容性时会有问题。理由在于:同时整数寄存器和浮点寄存器需要每一处理的私用堆栈上具有足够空间,来容纳备份的整数与浮点寄存器,之前(在未提供支持浮点的硬件的情况下)私用堆栈只有整数寄存器的空间,并且与硬件不支持浮点的数据处理设备中只有整数的状态保存处理相比,整数与浮点保存处理显著增加中断延迟。
发明内容
根据本发明的一个方面,提供一种数据处理设备,该数据处理设备包含:
处理电路,该处理电路响应于数据处理指令来执行整数数据处理操作及浮点数据处理操作;
第一组整数寄存器,可由该处理电路使用来执行该整数数据处理操作,以及第二组浮点寄存器,可由该处理电路使用来执行该浮点数据处理操作;
其中
该处理电路响应一中断请求,来执行其中只有该整数寄存器的至少一子集复制到一堆栈内存的一整数状态保存功能,以及其中该整数寄存器与该浮点寄存器的至少一子集都复制到该堆栈内存的一浮点状态保存功能其中之一,该处理电路根据状态信息,选择该整数状态保存功能与该浮点状态保存功能的该其中之一。
在此方式中,只有该状态信息指示需要备份该浮点寄存器时,才会进行更耗时并且耗费空间的浮点状态保存功能(其备份至少某些该整数寄存器与该浮点寄存器)。否则,若状态信息指示只需要备份该整数寄存器,则进行较不耗时并且不耗费空间的整数状态保存功能来仅备份该整数寄存器。因此,利用维持中断延迟以及只用于整数程序代码的私用堆栈大小需求,来保存向下兼容性。因此,可避免或至少缓和对于增加旧式(只有整数)程序代码上堆栈框架大小,以及调整延迟中断处置器来容纳增加的延迟之非所要需求。更一般来说,本发明的具体实施例通过减少堆栈大小来减少内存大小需求,并且相较于总是保存浮点寄存器的基本解决方案来说,减少内存存取次数。因此,可降低耗电量与中断延迟。
该状态信息可包含第一状态信息,指出接收中断请求时该处理电路执行的当前数据处理上下文是浮点数据处理上下文(包含一个或多个浮点数据处理操作),还是整数数据处理上下文(不包含任何浮点数据处理操作)。可响应于导致处理电路执行浮点数据处理操作的数据处理指令,设定此第一状态信息。该处理电路可响应中断请求,在该第一状态信息指示该当前的数据处理上下文为一整数数据处理上下文时执行该整数状态保存功能,且在该第一状态信息指出该当前的数据处理上下文为一浮点数据处理上下文时执行该浮点状态保存功能。此配置能够只有在一中断处理使用浮点寄存器时,才会进行浮点状态保存。
执行该整数状态保存功能时,该处理电路可设定第二状态信息来指出浮点寄存器尚未复制到该堆栈内存,并且执行该浮点状态保存功能时,该处理电路可设定该第二状态信息来指出该浮点寄存器已经复制到该堆栈内存。在此情况下,该处理电路响应由于该中断请求而由该处理电路所执行的目标数据处理上下文的终止,执行其中只有由该整数寄存器保存至该堆栈的数据从该堆栈获得并复制到该对应寄存器内的一整数状态复原功能,以及其中由该整数和浮点寄存器保存至该堆栈的数据从该堆栈获得并复制到该对应寄存器内的一浮点状态复原功能其中之一。尤其是,若该第二状态信息指出浮点寄存器尚未存储到该堆栈内存,则该处理电路选择该整数状态复原功能,并且若该第二状态信息指出该浮点寄存器已经存储到该堆栈内存,则该处理电路选择该浮点状态复原功能。
另外,该处理电路可响应中断请求,在该第一状态信息指示该当前的数据处理上下文为一整数数据处理上下文时执行该整数状态保存功能,并且在该第一状态信息指示该当前的数据处理上下文为一浮点数据处理上下文时执行该浮点状态保存功能的第一部分,其中只有该整数寄存器的子集复制到该堆栈内存,以及执行该浮点状态保存功能的第二部分,其中分配该堆栈内存上的空间用于该浮点寄存器的子集。在此情况下,执行该整数状态保存功能时,该处理电路设定第二状态信息来指出用于该浮点寄存器的空间尚未分配至该堆栈内存,并且执行该浮点状态保存功能的该第二部分时,该处理电路设定该第二状态信息来指出在该堆栈内存内已分配用于该浮点寄存器的空间。
然后该处理电路可响应跟在该堆栈内存上空间分配之后、让该处理电路执行浮点数据处理操作的一数据处理指令,来执行该浮点状态保存功能的一第三部分,其中该浮点寄存器的子集复制到该堆栈内存的已分配部分。
可提供一堆栈分配地址寄存器,用来存储在该浮点状态保存功能的该第二部分内分配的该堆栈内存部分的该内存地址,其中该处理电路在该浮点状态保存功能第三部分内,将该浮点寄存器复制到该堆栈内存内的该堆栈分配地址寄存器所指示的一地址。
该第三状态信息可在该浮点状态保存功能的该第二部分内设定,指出已经在该堆栈内存内分配空间,但是尚未复制该浮点寄存器。该第三状态信息在此作为该浮点状态保存功能第三部分的一部分而被重置,指出该浮点寄存器已经复制到该堆栈内存内分配的空间。运用这种三部分浮点状态保存功能,仅当浮点寄存器有遭可修改这些寄存器的中断浮点指令覆写的危险时,才将这些寄存器存储到该堆栈内存内。
然后该处理电路可响应由于该中断请求而由该处理电路所执行的目标数据处理上下文的终止,执行其中只有由该整数寄存器保存至该堆栈的数据从该堆栈获得并复制到该对应寄存器内的一整数状态复原功能,以及其中由该整数和浮点寄存器保存至该堆栈的数据从该堆栈获得并复制到该对应寄存器内的一浮点状态复原功能。尤其是,若该第二状态信息指出该浮点寄存器尚未存储到该堆栈内存内,或若该第二状态信息指出在该堆栈内存内已经分配空间给该浮点寄存器,并且第三状态信息指出尚未将该浮点寄存器的子集复制到该堆栈内存的该已分配部分,则该处理电路选取该整数状态复原功能,并且若该第二状态信息指出在该堆栈内存内已经分配空间给该浮点寄存器,以及该第三状态信息指出该浮点寄存器的子集已经复制到该堆栈内存的该已分配部分,则该处理电路选择该浮点状态复原功能。在此方式中,若该堆栈上的空间已经分配给该浮点寄存器,但是该浮点寄存器的内容实际上尚未复制到该已分配的空间,则从该堆栈只复原该整数寄存器。
执行该整数状态复原功能时,该第一状态信息设定成指示该当前的数据处理上下文为一整数数据处理上下文,并且执行该浮点状态复原功能时,该第一状态信息设定成指示该当前的数据处理上下文为一浮点数据处理上下文。
该处理电路可对第四状态信息产生响应,以便在其中响应于该中断请求将该浮点寄存器复制到该堆栈内存的一浮点状态保存功能,以及其中已响应于该中断请求将该堆栈内存内空间分配给该浮点寄存器,并且其中响应于跟在所述堆栈内存上空间的分配之后、导致所述处理电路执行浮点数据处理操作的一数据处理指令而将所述浮点寄存器复制到已分配空间内的一浮点状态保存功能之间选择。在此方式中,可在其中已启用延迟的浮点保存的模式与其中已停用延迟的浮点保存的模式之间选择。
在另一具体实施例内,该状态信息可包含第一状态信息,指出接收中断请求时该处理电路执行的当前数据处理上下文是浮点数据处理上下文(包含一个或多个浮点数据处理操作),还是整数数据处理上下文(不包含任何浮点数据处理操作)。该状态信息也可包含第二状态信息,指出因为该中断请求而要由该处理电路执行的一目标数据处理上下文是一浮点数据处理上下文(包含一个或多个浮点数据处理操作),还是整数数据处理上下文(不包含任何浮点数据处理操作)。在此方式中,可做出有关何时进行浮点状态保存处理的决定,其为在例外或中断(当前的处理)之时处理器的状态和目的地处置器处理所需的处理器状态的函数。
该状态信息也可包含第三状态信息,其指出一当前的数据处理上下文是未由一中断请求触发的一线程数据处理上下文,还是一中断请求已经触发的一处置器数据处理上下文。这使得对从一线程到一处置器的转移的处置能够不同于对从一处置器到一处置器的转移的处置。为了进一步说明,可以考虑两个基本模式:线程以及处置器。线程模式为基线处理,也就是非由中断或例外所触发的处理。处置器模式为一种中断模式,其中断一线程模式处理或另一处置器处理。换言之,一例外或中断的目的地总是一处置器,但是该原始出处可为一线程或处置器。通常,假设线程与任务/处理的执行有关,而处置器提供用于例外与中断的特权执行。本发明的具体实施例提供额外机械状态,将每一处置器注释为使用浮点硬件(一浮动处置器)或未使用(一整数处置器)。类似地,可提供额外机械状态,指出当前的线程使用该浮点硬件(一浮动线程)或未使用(一整数线程)。
在一个具体实施例内,使用该额外机械状态将浮点状态保存限制在该目的地处理为“浮动处置器”并且原始处理并非“整数线程”的情况(即是原始为浮动线程、浮动处置器或整数处置器)。因此,若该中断处置器为一整数处置器,则不会发生浮点状态保存,因为该中断处理并不会覆写该浮点寄存器。再者,即使若该中断处置器为一浮点处置器,若该被中断(原始)处理为一整数线程,也并不会发生浮点保存,因为在此情况下,该被中断处理并不需要可由该浮点处置器覆写的浮点寄存器,并且该被中断处理本身并不中断可能需要该浮点寄存器的任何其他处理(因为其为一线程,而非一处置器)。
该处理电路可响应于指出该目标数据处理上下文为一浮点数据处理上下文,以及该当前数据处理上下文为一浮点数据处理上下文或由一中断请求触发的一整数数据处理上下文的状态信息,来选择该浮点状态保存功能。在此方式中,可提供浮点状态保存用于潜在活动浮点状态。换言之,在该目标数据处理上下文将能够访问该浮点寄存器的情况下,若存在该浮点寄存器存储一中断处理所需数据的可能性时,将保存该浮点寄存器内的数据值。
该处理电路可响应于指出该当前数据处理上下文为一整数数据处理上下文,并且该目标数据处理上下文为一整数数据处理上下文的状态信息,来选择该整数状态保存功能。在此方式中,整数例外情况下的状态保存功能的延迟仍与旧程序代码维持恒等。
该处理电路可响应于指出该当前数据处理上下文为一浮点数据处理上下文,并且该目标数据处理上下文为一浮点数据处理上下文的状态信息,来选择该浮点状态保存功能。在此方式中,可提供浮点状态保存用于潜在活动浮点状态。
该处理电路可响应于指出该当前数据处理上下文为未由一中断请求触发的一整数数据处理上下文,并且该目标数据处理上下文为一浮点数据处理上下文的状态信息,来选择该整数状态保存功能。如此,变成备份整数线程时不需要准备浮动框架存储。将了解备份整数处置器时,无法假设不需要保存浮点寄存器,因为该整数处置器本身可能已经中断一浮点线程或处置器,在此情况下,在未来(处理回到该更早的线程或处置器时)可能需要并且之前可能并未保存浮点寄存器的内容。为此,想象在由一浮点处置器中断一整数处置器的情况下,该浮点寄存器会被保存。
作为一种替代实施方式,可将指出是否一先前(被中断)处理使用了浮点寄存器的额外状态信息存储在寄存器内并且在决定是执行整数还是浮点状态保存功能时参照,而非根据该原始处理是一线程还是一处置器来做出决定。
该数据处理设备可包含一中断控制器,用于产生该中断请求。该中断控制器可配置成将关于目标处理的状态信息与用于触发目标处理的一个或多个可能的中断请求相关联地存储,以及将与可能中断请求中所选一者相关联的状态信息与所选的中断请求一起传送至该处理电路。
或者,可使用一传统中断控制器,并且可以在例如该处理器本身或主存储器内,单独提供用于存储与一个或多个可能中断请求相关联的该状态信息的一状态信息存储器。该处理电路在此情况下将会设置成响应于一已接收的中断请求,从该状态信息存储器内读取该状态信息。
一旦已经完成该整数或浮点状态保存功能,需要设定该系统的状态用于该目标数据处理上下文,同时设定寄存器信息,以使得一旦已经完成或终止该目标数据处理上下文时,让该处理电路回到该当前数据处理上下文。在一个范例内,可设置一第一配置寄存器和一第二配置寄存器,在开始该目标数据处理上下文之前,将该第二状态信息存储到该第一配置寄存器中,并且在开始该目标数据处理上下文之前,将该第一和第三状态信息存储到该第二配置寄存器中。该第一配置寄存器可为一专属配置寄存器,指出该系统的一当前浮点状态(也就是,一当前执行的上下文是一整数还是浮点上下文),并且该第二配置寄存器可为一连结寄存器,用于指出先前数据处理上下文的堆栈指针器,以及该先前数据处理上下文是一整数数据处理上下文还是一浮点数据处理上下文。如此,要开始一目标数据处理上下文时,该处理电路设定该连结寄存器,指出该当前数据处理上下文的该堆栈指针器,以及指出该当前数据处理上下文是一整数数据处理上下文还是一浮点数据处理上下文。如此,该处理电路将能够访问所需信息(堆栈识别以及备份至该堆栈的数据量),使得一旦已经完成该目标数据处理上下文时可回到该当前数据处理上下文。将了解,该连结寄存器为传统上函数调用内使用并且用于服务中断的机构。在函数调用的情况下,一分支指令将其后续指令的地址写入该连结寄存器内,并且分支至指定位置。为了在完成该分支之后返回,该处理器使用存储在该连结寄存器内的值,来决定究竟要返回哪里。在进入例外时也是如此,其中传统上在该连结寄存器内存储一例外返回值。不过,可使用,并且在某些情况下相当有用,该连结寄存器以外的寄存器来存储一函数调用或中断的返回值。
该第一组整数寄存器可包含存储一堆栈指针器的一寄存器,该当前数据处理上下文为一线程时,该堆栈指针器指向一处理堆栈的顶端,并且该当前数据处理上下文为一处置器时,则指向一主堆栈的顶端。在此情况下,该堆栈指针器可用来决定一当前上下文是一线程还是一处置器,因此该活动堆栈指针器可用来作为该第三状态信息。
在此情况下,该第一组整数寄存器包含一连结寄存器时,该处理电路可响应该中断请求来设定该连结寄存器,指出该当前数据处理上下文的该堆栈指针器,以及指出该当前数据处理上下文是一整数数据处理上下文还是一浮点数据处理上下文。然后该处理电路将响应该目标数据处理上下文的终止,使用该连结寄存器内存储的该信息,来执行该整数状态复原功能与该浮点状态复原功能其中之一。
该状态信息可以是硬连线的,或可另外由在操作系统或其他程序代码控制之下的该处理电路来设置。
特定情况下只保存该浮点寄存器内容所可能产生的问题为,编程的错误可能导致要在一整数上下文内操作的一数据处理操作尝试使用该浮点寄存器。若允许使用,这会覆写尚未存储至该堆栈的寄存器,因此导致被中断处理的后续执行错误。为了避免这种错误,本发明的具体实施例提供了,若状态信息指出该目标数据处理上下文为一整数数据处理上下文时,由该中断请求触发的该目标数据处理操作尝试使用该浮点寄存器,则该处理电路在覆写该浮点寄存器之前产生一例外。然后该处理器可用适当方式处置此例外。
将寄存器的内容传输至该堆栈有许多选项。例如:可通过先将该第一组整数寄存器复制到该堆栈,然后将该第二组浮点寄存器复制到该堆栈顶端,来执行该浮点状态保存功能。如所了解,复制该寄存器值至该堆栈的处理需耗费一些时间。为了更快速处理较高优先级中断,该处理电路响应于在执行该浮点状态保存功能期间接收的需要一整数状态保存功能的一较高优先级中断,禁止将该第二组浮点寄存器复制到该堆栈,并且设定一堆栈指针器指出该第一组整数寄存器位于该堆栈顶端。这改善在接收到两相当接近的中断时状态保存处理的及时性,并且降低处理与能量需求。尤其是,这通过以能够优先采用一整数处置器而放弃浮动堆栈的形式,允许一较高优先级中断的迟到,从而协助实现整数处置器延迟的利益。
作为一种替代实施方式,可通过先将该第二组浮点寄存器复制到该堆栈,然后将该第一组整数寄存器复制到该堆栈,来执行该浮点状态保存功能。在此情况下,该处理电路响应于在执行该浮点状态保存功能期间接收的需要一整数状态保存功能的一较高优先级中断,完成该浮点寄存器与整数寄存器二者向该堆栈的存储,并且产生另外状态信息,指出该中断浮点处理已经在完成该浮点状态保存处理之前中断,以及不再需要存储至该堆栈的该浮点寄存器值。因此,该另外状态信息可在返回该稍早处理时使用,导致只有与整数寄存器相关较少量的数据自堆栈复制到整数寄存器,而非复制与该整数和浮点寄存器二者相关的较大量数据。
在特定环境下,例如在旧模式内,可能想要停用该浮点状态保存功能。在此情况下,该处理电路可响应于一推翻(override)信号,来与状态信息无关地响应于中断请求执行整数状态保存功能。
根据本发明的另一方面,提供一种响应于数据处理指令执行整数数据处理操作和浮点数据处理操作的数据处理方法,该整数数据处理操作使用一第一组整数寄存器,并且该浮点数据处理操作使用一第二组浮点寄存器,该方法包含以下步骤:
响应于一中断请求,执行其中只有该整数寄存器的至少一子集复制到一堆栈内存的一整数状态保存功能,以及其中该整数寄存器与该浮点寄存器的至少一子集都复制到该堆栈内存的一浮点状态保存功能其中之一,根据状态信息选择该整数状态保存功能与该浮点状态保存功能的该其中之一。
本发明的许多其他方面与特征都定义在权利要求书当中,并且包含一计算机程序产品。
附图说明
在此将参考附图范例来说明本发明的具体实施例,其中:
图1示意性例示一数据处理设备,其中响应来自中断控制器的中断请求,保存整数寄存器与浮点寄存器至堆栈内存;
图2示意性例示一组整数寄存器范例(图2A)和一组浮点寄存器范例(图2B);
图3示意性例示堆栈内寄存器条目的存储,用于一个范例整数状态保存操作(图3A)以及两个范例浮点状态保存操作(图3B和图3C);
图4示意性例示根据第一具体实施例的数据处理设备,其中根据当前的数据处理上下文为整数上下文或浮点上下文,来执行整数或浮点状态保存;
图5为例示根据第一具体实施例的状态保存功能操作的示意流程图;
图6为例示根据第一具体实施例的状态复原功能操作的示意流程图;
图7为示意性例示第一具体实施例在同时启用浮点状态保存与延迟保存的模式内操作的状态图;
图8为示意性例示第一具体实施例在启用浮点状态保存但是停用延迟保存的模式内操作的状态图;
图9示意性例示第一具体实施例在同时停用浮点状态保存与延迟保存的模式内的操作;
图10示意性例示根据第二具体实施例的第一范例数据处理设备,其中根据(a)当前的数据处理上下文是否为整数上下文或浮点上下文、(b)当前的数据处理上下文是否为线程或处置器以及(c)中断数据处理上下文是否为整数上下文或浮点上下文,并且其中状态信息由中断控制器提供,来执行整数或浮点状态保存;
图11示意性例示第二具体实施例的另一范例,其中以处理器内查找表的形式提供状态信息;
图12示意性例示四个范例线程/处置器级数;
图13为例示根据第二具体实施例来响应中断的上下文切换方法的示意流程图;以及
图14为例示根据第二具体实施例已经完成中断处理时所发生上下文切换方法的示意流程图。
具体实施方式
请参阅图1,数据处理设备1包含数据处理器10、主存储器20、中断控制器30以及总线40。数据处理器10包含处理电路12和寄存器文件14。寄存器文件14包含一组整数寄存器14A和一组浮点寄存器14B。处理电路12可操作来响应于数据处理指令,运用寄存器文件14的整数寄存器14A和浮点寄存器14B内所存储值来执行数据处理操作。尤其是,由处理电路12使用整数寄存器14A执行整数数据处理操作,而由处理电路12使用整数寄存器14A和浮点寄存器14B执行浮点数据处理操作。
整数寄存器14A可包含一般用途寄存器,用于存储处理电路12使用与操纵的资料值,并且可包含专用寄存器(不过在某些情况下也可用作一般用途寄存器)。在ARM型处理器架构的情况下,提供16个整数寄存器,这些包含一个程序计数器(寄存器15)、一个连结寄存器(寄存器14)和一个堆栈指针器(寄存器13)。该程序计数器存储当前由处理电路12所执行指令的内存地址。在从第一处理分支到第二处理的情况下,该连结寄存器在完成分支至第二处理之后,存储第一处理内要执行的下一个指令的内存地址。该堆栈指针器存储一地址,指出与当前处理相关联的堆栈的顶端。
主存储器20可操作来存储多用途的数据值,并且可由数据处理器10通过总线40存取。总线40本身可包含携带数据值的数据总线、携带指出主存储器内存储位置的地址信号的地址总线,以及运用控制信号来控制数据读取自与写入至主存储器40的控制总线。主存储器20包含堆栈存储区22,提供存储区给主堆栈(MSP)22A和处理堆栈(PSP)22B。堆栈属于后进先出(Last-in-first-out,“LIFO”)数据结构,因此利用将新数据值“推送”至堆栈顶端来加入新值,并且接着从堆栈顶端“弹出”这些值来存取。在这两情况下,更新堆栈指针器(在本情况下存储在寄存器13内)来反映堆栈顶端的新部分。在ARM架构内,提供了给“线程”处理(也就是尚未由中断或例外触发的处理)使用的处理堆栈,并且提供一主堆栈来提供“特权”模式供“处置器”(handler)处理(也就是已经由中断或例外触发的处理)使用。此外,许多处置器处理每一都可藉由使用专用堆栈指针器,将处理堆栈的不同部分看待为自己的专用堆栈。
中断控制器30包含优先级电路32,用来接收中断36并且从已接收要通过信号线38供应至数据处理器10的处理电路12的中断当中选择一最高优先级中断。已接收的中断36可为从外围装置或数据处理设备1的硬件组件中接收的硬件中断,或可为处理电路12所发出来响应数据处理指令的软件中断。
在操作中,处理电路12执行当前处理的数据处理指令串流,直到通过信号线38从中断控制器30接收中断为止。该已接收的中断指出,当前的处理应该中止而进行新处理。为了能够恢复当前的处理,所以存储关于当前处理的信息,如此可在到期时复原。此要存储的信息包含寄存器文件14的整数寄存器14A和浮点寄存器14B之一或二者的至少部分内容,尤其是,整数寄存器14A将由整数状态保存功能与浮点状态保存功能所存储,而浮点寄存器14B将只由浮点状态保存功能所存储。因此,只有在中断时系统的状态要求浮点寄存器保存时,才会发起浮点状态保存功能。
中断处理终止时,处理电路12可操作来复原状态信息(包含保存至堆栈的寄存器值),然后从断点继续该被中断的处理。
此时请参阅图2A和图2B,示意性例示了范例整数与浮点处理器寄存器库。将了解,本发明的具体实施例同样适用于其他组整数与浮点寄存器。图2A例示一组17个整数寄存器r0至r15和xpsr。寄存器r0至r15为一般用途寄存器(不过寄存器r13作为堆栈指针器、寄存器r14作为连结寄存器并且寄存器r15作为程序计数器),寄存器xpsr为程序状态寄存器,指出当前的系统状态。要作为整数或浮点状态保存功能一部分而备份的整数寄存器为寄存器r0至r3、r12、r14、r15和xpsr。在已接收中断的情况中,并不需要备份剩余的寄存器。
图2B例示一组34个浮点寄存器s0至s31、fpscr和fpexc。寄存器s0至s31为一般用途寄存器,寄存器fpscr为浮点状态与控制寄存器,其内含浮点运算用的状态与控制位,寄存器fpexc为浮点例外寄存器,用于记录与浮点处理有关的例外状态。要作为浮点状态保存功能一部分而备份的浮点寄存器为s0至s15、fpscr和fpexc。在已接收中断的情况中,并不需要备份剩余的寄存器。
不备份完整整数寄存器与浮点寄存器的两个理由为此存储操作耗费有限的时间、增加上下文切换的延迟,同时备份完整寄存器也需要增加所交换处理的堆栈大小。我们了解,并非所有寄存器都需要备份,才能将系统状态复原至中断处理已经完成后允许返回处理所需的程度。尤其是,一过程调用标准可需要新的上下文,来手动保存并复原某些想要使用的寄存器。
此时请参阅图3A、图3B和图3C,示意性例示堆栈的范例部分,包含从图2A和图2B内所示整数与浮点寄存器备份的寄存器内容。尤其是,图3A显示整数状态保存操作之后堆栈的顶端部分,在所述整数状态保存操作中寄存器r0至r3、r12、r14、r15和xpsr都已经存储在堆栈顶端。先前的(前中断请求IRQ)堆栈顶端部分显示在图3A内。新的堆栈顶端位置对应至内存内存储整数寄存器r0的值的位置。在ARM架构内,新增项目至堆栈时,因为由上(最高地址值)往下填入堆栈内存,所以堆栈顶端的内存地址会递减。
在图3B内,显示浮点状态保存操作之后堆栈的顶端部分。在对应至图3A中的位置上,这包含整数寄存器r0至r3、r12、r14、r15和xpsr的备份值。不过,存储在这之上(靠近堆栈顶端)为浮点寄存器s0至s15、fpscr和fpexc的备份值。先前的(前中断请求IRQ)堆栈顶端部分显示在图3B内,新的堆栈顶端位置对应至其上存储浮点寄存器s0的值的地址。
在图3C内,如图3B一样,显示浮点状态保存操作之后堆栈的顶端部分。不过与图3B不同的是,先备份浮点寄存器,然后整数寄存器存储在浮点寄存器的顶端上。因此,整数寄存器r0至r3、r12、r14、r15和xpsr都存储得比浮点寄存器s0至s15、fpscr和fpexc还靠近堆栈顶端。先前的(前中断请求IRQ)堆栈顶端部分显示在图3C内。新的堆栈顶端位置对应至内存内存储整数寄存器r0的值的位置。
如所了解,将来自整数与浮点寄存器的数据值存储到该堆栈上需耗费一些时间。在此期间,处理电路12可接收其他、较高优先级的中断,并且在此情况下,取消先前的中断(该先前的中断触发了整数与浮点状态保存功能)并且进行较高优先级中断。在此情况下,若该较高优先级中断与整数处理有关,将不使用该浮点寄存器,因此(在某些具体实施例内)不再需要保存该浮点寄存器。其中可处理此情况的方式取决于整数寄存器与浮点寄存器存储至堆栈的顺序。在图3B内例示顺序的情况下,可终止作为浮点状态保存功能一部分的向浮点寄存器堆栈的存储,并且堆栈指针器顶端设定为r0。堆栈指针器以及已中断处理是否为整数或浮点处理的指示,将在中断处理开始时复制到连结寄存器,并且可在重新发生中断处理时用来存取堆栈来复原寄存器值。此时使用中断处理是否为整数或浮点处理的指示,来决定是否只有整数寄存器需要复原,或是否整数与浮点寄存器都需要复原。
在图3C内所例示顺序的情况下,将完成存储浮点与整数寄存器至堆栈,但是在中断处理重新发生时并不会复原保存的浮点寄存器值,因为处理电路将决定只需要复原整数寄存器,因此在状态复原功能期间将忽略存储浮点寄存器的堆栈部分。
一般来说,根据依照状态信息所做的决定,处理电路12将只传输整数寄存器的(至少部分)内容至堆栈,或将传输整数与浮点寄存器的(至少部分)内容至堆栈。然后,一旦所需的寄存器已经复制到堆栈,则再来的处理可依需要运用该寄存器,而不需毁掉回到稍早处理所需的状态信息或数据。
第一具体实施例
此时将描述第一具体实施例,其中在进行中断请求时,整数或浮点状态保存功能的选择取决于当前数据处理上下文(正在中断的上下文)是只用于整数寄存器的整数上下文,或是用于整数寄存器与浮点寄存器的浮点上下文。尤其是,若当前的上下文为整数上下文,则执行整数状态保存功能,而若当前的上下文为浮点上下文,则执行浮点状态保存功能。
请参阅图4,示意性例示根据第一具体实施例的设备100,其中具有处理电路112的数据处理器110响应从中断控制器接收的中断请求138,以便中止当前的上下文、保存关于当前(已中止)上下文的状态信息(寄存器内容)以及进行新的(中断)上下文。在图4内,如图1所示,寄存器文件114包含一组整数寄存器114A和一组浮点寄存器114B。此情况内显示的整数寄存器114A包含堆栈指针器(SP)115和连结寄存器(LR)116,运用在稍后要说明的状态复原处理内。如图1所示,数据处理设备100的主存储器120包含堆栈内存122,其设置成根据该中断数据处理上下文是线程或处置器,将关于整数和/或浮点处理器寄存器的内容存储至主堆栈区122A或处理堆栈区122B。尤其是,若该中断处理为线程,则状态保存功能将关于该处理的寄存器复制到主堆栈内,而若该中断处理为处置器,则状态保存功能将关于该处理的寄存器复制到处理堆栈内。
数据处理器110也包含一组配置寄存器140,包含控制寄存器141、浮点上下文控制寄存器(Flo ating-point context control register,“FPCCR”)142以及一个浮点上下文地址寄存器(Floating point contextaddress register,“FPCAR”)143。这些配置寄存器描述如下:
控制寄存器
位[2] | 位[1] | 位[0] |
当前的上下文整数/浮点 | 使用中的堆栈 | 线程模式专用 |
控制寄存器141为一3位寄存器,具有第一位(位[2])指出当前运行的上下文是为整数或浮点上下文、第二位(位[1])指出主(MSP)堆栈和处理(PSP)堆栈哪个用于当前上下文内,以及第三位(位[0])指出线程模式的专用状态。针对第一具体实施例的目的,位[2]为控制寄存器当中特别令人感兴趣的组件,因为根据当前的上下文是整数上下文或浮点上下文来进行对要执行的状态保存功能的选择。
FPCCR
位[31] | 位[30] | 位[29:1] | 位[0] |
ASPEN | LSPEN | 专用/保留 | LSPACT |
浮点上下文控制寄存器(FPCCR)142为一种寄存器,通常只有在特权模式内运行的软件才能存取。浮点上下文控制寄存器142包含一位[31](ASPEN),其可设定来指出浮点状态保存功能是否可用,整数状态保存功能假设都可使用。尤其是,若设定成浮点状态保存功能可用,则位[31]可让上述控制寄存器141的位[2]设定在浮点执行指令上,造成在例外进入与离开时浮点数上下文的自动硬件状态保存与复原。浮点上下文控制寄存器142也包含一位[30](LSPEN),其可启用与停用自动懒惰浮点状态保存功能(稍后描述)。浮点上下文控制寄存器142也包含一位[0](LSPACT),指出懒惰浮点状态保存已启动,尤其是指出浮点堆栈框架已经分配在堆栈上,但是延迟了向其上存储状态(处理器寄存器的内容)。浮点上下文控制寄存器142包含一些其他位(位[29:1]),保留供其他使用或提供状态信息,在返回该已中断处理之前用于保存关于已中断处理的优先级与特权信息。
FPCAR
位[31:3] | 位[2:0] |
地址 | 保留 |
为了达成延迟浮点状态保存,所以提供浮点上下文地址寄存器(FPCAR)143,如同浮点上下文控制寄存器142一样只能在特权模式内存取。浮点上下文地址寄存器143存储一地址(在位[31:3]内),指出在延迟浮点状态保存功能的情况下,堆栈内接着要复制浮点寄存器的位置。保留位[2:0]。
在操作中,处理电路112使用控制寄存器141的位[2]来记录是否执行浮点指令。控制寄存器141的位[2]根据当前执行的指令是只使用整数寄存器或同时使用整数寄存器与浮点寄存器来设定,例如:
ADD r0,r0,#1 (1)
CMP r0,#3 (2)
是使用“rX”整数寄存器的纯整数码,因而是整数上下文。尤其是,指令(1)用来将整数寄存器r0内的值递增1,并且指令(2)用来将整数寄存器r0内存储的值与数量3比较。在这两情况下,这些指令只在整数寄存器上操作。
相较之下,下列指令:
VADD.F32 s0,s0,s1 (3)
VCMP.F32 s0,#0 (4)
运用浮点指令以及“sX”浮点寄存器(以及整数寄存器和指令),如此形成浮点上下文。尤其是,指令(3)将浮点寄存器s0和s1内存储的值加在一起,并且将结果存储在浮点寄存器s0之内。指令(4)将浮点寄存器s0内存储的值与值0比较。执行VADD.F32(若此为第一VFP指令)将导致设定控制信号141的位[2],指出此时上下文为浮点上下文。
使用整数上下文的简单范例可为采用指针器至两整数值、相乘并回传结果的函数:
C-Code:
int integer_mul(int*int_array)
{
return int_array[0]*int_array[1];
}
组合码:
LDR r1,[r0];load int_array[0]into r1(r0contains pointer)
LDR r2,[r0,#4];load int_array[1]into r2
MUL r0,r1,r2;multiply into r0(return value)
BX lr;return from function
浮点上下文的简单范例可为采用指针器至两浮点数、相乘并回传结果的相同函数:
C-Code:
float float_mul(float*float_array)
{
return float_array[0]*float_array[1];
}
组合程序代码:
VLDR s1,[r0];load float_array[0]into s1(r0 contains pointer)
VLDR s2,[r0,#4];load float_array[1]into s2
VMUL.F32 s0,s1,s2;multiply into s0(return value)
BX lr;return from function
若VLDR为当前上下文内遇到的第一个VFP指令,则会导致上下文变成VFP上下文,其上可设定控制寄存器141的位[2]。
若当前数据处理上下文已经被中断抢先,并且设定控制寄存器141的位[2],则浮点上下文控制寄存器142的位[31]指出处理电路112是分配浮点框架(用于浮点状态保存)或整数框架(用于整数状态保存)。浮点上下文控制寄存器142的另一位(位[30])指出是否在分配时填充堆栈内的浮点框架,或延迟填充浮点框架稍后再进行。若延迟,则设定浮点上下文控制寄存器142(位[0]),并且将堆栈内存内空白浮点框架的地址记录到浮点上下文地址寄存器(FPCAR)143之内。
在中断的输入上,反转控制寄存器141的位[2],并且将反转后的值设定为连结寄存器116内的框架大小指示位。此位用来指出已经分配或复制到堆栈内存122的框架大小(整数框架或浮点框架),一旦在连结寄存器116内设定此位,则控制寄存器141的位[2]归零。若已执行浮点指令,同时控制寄存器141的位[2]已清除并且浮点上下文控制寄存器142的位[0]设定为一(指出浮点框架已分配但是尚未存储),则仍旧在浮点寄存器114B内的浮点内容存储到浮点上下文地址寄存器143内指定的地址,并且浮点上下文控制寄存器142的位[0]归零(指出浮点寄存器已经存储至堆栈内已分配空间),然后设定控制寄存器141的位[2](第一状态信息)。
在从中断处理返回时如果连结寄存器116内框架大小指示位为清除(零),指出已经分配浮点框架,然后若浮点上下文控制寄存器142的位[0]设定为一,指出浮点框架已经分配在堆栈内,但是尚未填充,则仅略过堆栈内的浮点框架,因为在此情况下位[0]指示从未发生浮点寄存器复制到堆栈内已分配空间。不过,若浮点上下文控制寄存器142的位[0]已清除(归零),如同一旦浮点寄存器114B的内容已经复制到堆栈122,则堆栈的浮点框架载回浮点寄存器114B。然后根据设备是否回到整数上下文或浮点上下文,来更新控制信号的位[2]。位[2]更新与是否恢复状态无关。这基本上实施一个硬件式懒惰上下文切换系统。
使用连结寄存器116实施从中断的返回,该寄存器在中断时被设定以指定一返回值,该返回值向处理器指出被中断上下文的状态信息已经存储到哪个堆栈(主堆栈或处理堆栈)、已经存储多少信息(整数框架或浮点框架)以及将要返回的处理是线程或处置器。在连结寄存器116内可设定来达成此目的的返回值范例显示如下:
EXC_RETURN | 返回到 | 返回堆栈 | 目的地使用浮点 |
0xFFFF_FFE1 | 处置器模式 | MSP | 是 |
0xFFFF_FFE9 | 线程模式 | MSP | 是 |
0xFFFF_FFED | 线程模式 | PSP | 是 |
0xFFFF_FFF1 | 处置器模式 | MSP | 否 |
0xFFFF_FFF9 | 线程模式 | MSP | 否 |
0xFFFF_FFFD | 线程模式 | PSP | 否 |
表1:连结缓存器的例外返回值
从表1可看见例外返回值内倒数第二个十六进制值为E或F,E值表示(第4栏)目的地(返回)上下文为浮点上下文,并且F值表示目的地上下文为整数上下文。因此,此值实施上述的框架大小指示位。也可看见,例外返回值内最后一个十六进制值为1、9或D,1表示(第2和第3栏)回到主(MSP)堆栈进入处置器模式、9表示回到主堆栈进入线程模式并且D表示回到处理(PSP)堆栈进入线程模式。
图5示意性例示根据第一具体实施例的状态保存处理。尤其是在步骤S1上,进行当前的处理。在步骤S2上,决定是否已经接收具有比当前所执行处理还要高优先级的中断。在未接收中断或已接收中断但是其优先级低于当前所执行处理的情况下,处理重返步骤S1。在步骤S2上,决定已经接收具有比当前所执行处理还要高优先级的中断请求时,则在步骤S3上根据浮点上下文控制寄存器142的位[31]决定是否启用浮点状态保存。若在步骤S3上已决定并未启用浮点状态保存,则在步骤S4上进行整数状态保存功能。如上所述,整数状态保存功能导致将预定的整数寄存器复制到堆栈。整数寄存器已经存储到堆栈时,在步骤S5上,堆栈指针器指出堆栈顶端已经更新,来反映新的堆栈顶端位置。这将牵涉到使用等于所保存寄存器内容的整数框架的数量,来修改堆栈指针器。然后在步骤S6上使用例外返回地址更新连结寄存器116,来包含一位指出整数框架已经存储至堆栈,并且指出哪个堆栈已经存储寄存器(MSP或PSP)。然后在步骤S7上发生目标(中断)处理,其中可覆写整数寄存器(以及可能覆写浮点寄存器)。
若在步骤S3上决定已经启用浮点状态保存,则然后在步骤S8上根据当前的处理是在整数数据处理上下文或浮点数据处理上下文内操作,来决定是否需要浮点寄存器存储,如控制寄存器141的位[2]所示。若决定当前的上下文为整数上下文,则处理直接前往步骤S4至S7,如上面所示。不过,若在步骤S8上决定当前的上下文为浮点上下文,则进行浮点状态保存功能。尤其是在步骤S9上,根据浮点上下文控制寄存器142的位[30],决定是否应该立刻(堆栈分配时)或延迟存储浮点寄存器。若在步骤S10上决定不延迟存储浮点上下文,则处理前往步骤S10,在此整数与浮点寄存器都复制到堆栈内存内。然后在步骤S11上更新堆栈指针器,用等于所保存寄存器内容的浮点框架的数量修改堆栈指针器,来反映新的堆栈顶端位置。然后在步骤S12上使用例外返回地址更新连结寄存器116,来包含一位指出浮点框架已经存储至堆栈。然后在步骤S13上发生目标(中断)处理,其中可覆写整数寄存器(以及可能覆写浮点寄存器)。
若在步骤S9上决定延迟将浮点寄存器复制至堆栈,则在步骤S14上只将整数寄存器复制到堆栈。然后在步骤S15上更新堆栈指针器来指示,用等于所保存寄存器内容的浮点框架的数量递增堆栈指针器,来反映新的堆栈顶端位置。如此,虽然只有整数寄存器已经复制到堆栈,堆栈内还是分配空间给浮点寄存器。再者,在步骤S16上,地址寄存器设定成存储地址值,指出堆栈内可复制浮点寄存器的已分配区的位置,并且在浮点上下文控制寄存器142(位[0])内设定标志,指出在堆栈上已经分配用于浮点寄存器的空间,但是尚未将浮点寄存器复制到已分配的空间内。然后在步骤S17上使用例外返回地址更新连结寄存器116,来包含一位指出浮点框架已经存储至堆栈。如此,若已经复制浮点寄存器,则使用连结寄存器116返回被中断的处理将从堆栈获得浮点寄存器内容。若尚未复制浮点寄存器,则在状态复原期间忽略堆栈的空白部分(如底下所述)。然后在步骤S18上开始目标(中断)处理。
在步骤S19上,处理监视目标处理开始之后接收的指令,来决定是否要执行会导致覆写浮点寄存器的浮点指令。若并未接收到这种指令,则继续步骤S19的监视处理。若接收到这种指令,则在步骤S20上利用将浮点寄存器存储至地址寄存器所指示的已分配空间内,终止浮点寄存器保存处理,并且将浮点上下文控制寄存器142(位[0])内的标志重置为零,指出已经进行浮点寄存器的复制。应该注意,用于将浮点寄存器复制到堆栈上已分配空间内的触发可以不仅仅是使用浮点寄存器的指令,较佳使用将会实际修改浮点寄存器内容的指令。
图6示意性例示根据第一具体实施例的状态复原处理。尤其是,所例示的方法提供从目标(中断)处理上下文切换回由目标处理所中断的线程或处置器处理。在步骤T1上,由中断所触发的处理一直进行到在步骤T2上终止为止。一旦在步骤T2上终止处理,则在步骤T3上读取连结寄存器116来决定中断处理的状态信息复制到哪个堆栈(MSP或PSP),并且数据的整数框架或数据的浮点框架是否存储至该堆栈(框架大小指示位)。在步骤T4上,根据框架大小指示位并且根据浮点上下文控制寄存器142内的标志,决定(a)整数框架是否已经分配并复制、(b)浮点框架是否已经分配并复制(立刻或在后续浮点指令之后)或(c)浮点框架是否已经分配但是并未填充(因为在步骤T2上终止中断处理之前并未执行浮点指令)。若在步骤T4上决定只有整数框架已经分配并复制到堆栈,则在步骤T5上从堆栈弹出适当数量的数据,来获得整数寄存器的数据值,并且在步骤T6上将获得的数据值存储到对应的寄存器。然后在步骤T7上更新堆栈指针器来指示新的堆栈顶端位置,这与之前的堆栈顶端位置相差一与整数框架相等的量。然后在步骤T8上恢复先前的处理。
若在步骤T4上决定浮点框架已经分配并存储在堆栈内,则在步骤T9上从堆栈弹出大量数据(对应于浮点框架),并且在步骤T10上复制到整数与浮点寄存器。然后在步骤T7上更新堆栈指针器来指示新的堆栈顶端位置,这与之前的堆栈顶端位置相差一与浮点框架相等的量。然后在步骤T8上恢复先前的处理。
若在步骤T4上决定浮点框架已经分配但是尚未实际存储至堆栈,则在步骤T9上从堆栈弹出少量数据(对应于整数框架),并且在步骤T10上复制到整数寄存器。然后在步骤T7上更新堆栈指针器来指示新的堆栈顶端位置,这与之前的堆栈顶端位置相差一与浮点框架相等的量,因为已经分配浮点框架所需的空间,即使最终并未使用。然后在步骤T8上恢复先前的处理。
此时第一具体实施例参考状态图进一步解释,如此示意性例示许多寄存器位的设定,将数据处理设备转换为第一、第二、第三和第四状态。
首先请参阅图7,设定FPCCR内的ASPEN和LSPEN位,如此让浮点状态保存与懒惰上下文切换都可使用。在此情况下,硬件型状态保存与复原功能可达到设备的第一、第二和第三状态,并且只有通过直接软件控制才能达到第四状态。状态图中只能通过直接软件控制到达的部分标示为Z区。
在图7内,在步骤A1上,重置或开启数据处理设备,如此设备进入第一状态,其中在步骤A2上,第一控制位(控制寄存器141的位[2])设定为零,并且第二控制位(FPCCR的位[2])设定为零。第一状态为其中当前数据处理上下文为整数数据处理上下文的状态。若在步骤A3上已接收中断请求(Interrupt request,“IRQ”),而设备在第一状态内,则发起整数状态保存功能,并且在连结寄存器内设定第三控制位具有第一控制位相反的值。第一控制位的值为零并且设备在第一状态内时,存储在连结寄存器116内的第三控制位的值设定为一。为了服务中断请求,(某些)整数寄存器的内容存储至堆栈,并且更新堆栈指针器来反映新的堆栈顶端,在此情况下,与之前的堆栈顶端位置相距32字节(对应至八个32位寄存器已经复制到堆栈)。应该注意,由于ARM架构内堆栈的天性,利用递减堆栈指针器的方式进行项目新增至堆栈时堆栈指针器的修改。类似地,从堆栈中移除项目时,堆栈指针器的修改利用递增堆栈指针器的方式进行。
若在步骤A5上发生来自中断处理的返回(例外返回),而该设备在第一状态内,则决定被中断处理是否在整数上下文内操作,其中设备在第一状态或第三状态内(由第三控制位所示,设定为一),或在浮点上下文内操作,其中设备在第二状态或第四状态内(由第三控制位所示,设定为零)。若被中断处理在整数上下文内操作,则在步骤A7上利用弹出来自堆栈的所保存整数寄存器内容,并且更新堆栈指针器来反映新的堆栈顶端,在此情况下,与之前的堆栈顶端位置相距32字节(对应至已经从堆栈弹出的八个32位寄存器),从而执行整数状态复原功能。在此情况下,一旦已经执行整数状态复原功能,则该设备仍旧在第一状态内。若被中断处理在浮点上下文内操作,则在步骤A6上利用弹出来自堆栈的所保存整数和浮点寄存器内容,并且更新堆栈指针器来反映新的堆栈顶端,在此情况下,与之前的堆栈顶端位置相距104字节(对应至已经从堆栈弹出的二十六个32位寄存器),从而执行浮点状态复原功能。在此情况下,一旦已经执行浮点状态复原功能,则在步骤B1内该设备进入第二状态内。这是因为浮点状态复原功能之后继续浮点数据处理上下文。
若在步骤A4上接收浮点指令而设备在第一状态内,该设备会在步骤B1上进入第二状态,因为这将表示浮点数据处理上下文的开始。设备进入第二状态时,第一控制位设定为一,但是第二控制位仍旧为零。
在第二状态内,若在步骤B2上执行浮点指令,则不会发生状态改变并且设备仍旧在第二状态内。这是因为第二状态总是代表浮点数据处理上下文。不过,若在步骤B3上已接收中断请求,而设备在第二状态内,则发起浮点状态保存功能,并且在连结寄存器内设定第三控制位具有第一控制位相反的值。第一控制位的值为一,而设备在第二状态内时,存储在连结寄存器116内的第三控制位的值设定为零。为了服务中断请求,(某些)整数寄存器的内容存储至堆栈,但是因为图7呈现其中延迟复制浮点寄存器的系统状态,所以此时浮点寄存器并未复制到堆栈内。不过,更新堆栈指针器,反映分配堆栈上空间给浮点寄存器的位置上的堆栈新顶端,在此情况下距离先前堆栈顶端位置104字节(对应于已经复制到堆栈的二十六个32位寄存器)。一旦已经更新连结寄存器以及堆栈指针器,造成设备在步骤C1上进入第三状态。
若在步骤B5上发生来自中断处理的返回(例外返回),而该设备在第二状态内,则决定中断处理是否在整数上下文内操作,其中设备在第一状态或第三状态内(由第三控制位所示,设定为一),或在浮点上下文内操作,其中设备在第二状态或第四状态内(由第三控制位所示,设定为零)。若中断处理在整数上下文内操作,则在步骤B6上利用弹出来自堆栈的所保存整数寄存器内容,并且更新堆栈指针器来反映新的堆栈顶端,在此情况下,与之前的堆栈顶端位置相距32字节(对应至已经从堆栈弹出的八个32位寄存器),从而执行整数状态复原功能。在此情况下,一旦已经执行整数状态复原功能,则在步骤A2内该设备进入第一状态内。这是因为整数状态复原功能之后继续整数数据处理上下文。若被中断处理在浮点上下文内操作,则在步骤B6上利用弹出来自堆栈的所保存整数和浮点寄存器内容,并且更新堆栈指针器来反映新的堆栈顶端,在此情况下,与之前的堆栈顶端位置相距104字节(对应至已经从堆栈弹出的二十六个32位寄存器),从而执行浮点状态复原功能。在此情况下,一旦已经执行浮点状态复原功能,则该设备仍旧在第二状态内。
第三状态为其中第一控制位(控制寄存器141的位[2])设定为零(如同第一状态),指出当前的上下文为整数数据处理上下文,并且第二控制位(FPCCR的位[0])设定为一,指出当前堆栈内存内的空间分配给浮点寄存器,但是浮点寄存器尚未复制到该已分配的空间的状态。若在步骤C3上接收浮点指令,而设备在第三状态内,则导致在步骤C4上设备存储浮点状态(浮点寄存器)至堆栈内存内已分配的空间,然后在步骤B1上进入第二状态,因为对已接收的浮点指令的执行将标记浮点数据处理上下文的启始。设备进入第二状态时,第一控制位设定为一,并且第二控制重置为零。
若在步骤C2上已接收中断请求(IRQ),而设备在第三状态内,则发起整数状态保存功能,并且在连结寄存器内设定第三控制位具有第一控制位相反的值。第一控制位的值为零并且设备在第三状态内时,存储在该连结寄存器内的第三控制位的值设定为一。为了服务中断请求,(某些)整数寄存器的内容存储至堆栈,并且更新堆栈指针器来反映新的堆栈顶端,在此情况下,与之前的堆栈顶端位置相距32字节(对应至八个32位寄存器被复制到堆栈)。
若在步骤C5上发生来自中断处理的返回(例外返回),而该设备在第三状态内,则决定被中断处理是否在整数上下文内操作,其中设备在第一状态或第三状态内(由第三控制位所示,设定为一),或在浮点上下文内操作,其中设备在第二状态或第四状态内(由第三控制位所示,设定为零)。若中断处理在整数上下文内操作,则在步骤C7上利用弹出来自堆栈的所保存整数寄存器内容,并且更新堆栈指针器来反映新的堆栈顶端,在此情况下,与之前的堆栈顶端位置相距32字节(对应至已经从堆栈弹出的八个32位寄存器),从而执行整数状态复原功能。在此情况下,一旦已经执行整数状态复原功能,则该设备仍旧在第三状态内。若中断处理在浮点上下文内操作,则在步骤C6上利用弹出来自堆栈的所保存整数和浮点寄存器内容,并且更新堆栈指针器来反映新的堆栈顶端,在此情况下,与之前的堆栈顶端位置相距104字节(对应至已经从堆栈弹出的二十六个32位寄存器),从而执行浮点状态复原功能。在此情况下,一旦已经执行浮点状态复原功能,则在步骤B1内该设备进入第二状态内。这是因为浮点状态复原功能之后继续浮点数据处理上下文。
在步骤D1上,第四状态只能通过软件达到,并且为其中在步骤D2上,第一控制位(控制寄存器141的位[2])设定为一,并且第二控制位(FPCCR的位[2])设定为一的状态。第四状态为其中当前数据处理上下文为浮点数据处理上下文,以及其中当前堆栈内存内空间分配给浮点寄存器,但是浮点寄存器尚未复制到该已分配空间内(如第二控制位设定为一所示)的状态。
在第四状态内,若在步骤D4上接收浮点指令,导致在步骤D5上设备存储浮点状态(浮点寄存器)至堆栈内存内已分配的空间,然后在步骤B1上进入第二状态。设备进入第二状态时,第一控制位设定为一,但是第二控制重置为零。
若在步骤D3上已接收中断请求,而设备在第四状态内,则发起浮点状态保存功能,并且在连结寄存器内设定第三控制位具有第一控制位相反的值。第一控制位的值为一,而设备在第四状态内时,存储在连结寄存器116内的第三控制位的值设定为零。为了服务中断请求,(某些)整数寄存器的内容存储至堆栈,但是因为图7呈现其中延迟复制浮点寄存器的系统状态,所以此时浮点寄存器并未存储到堆栈内。不过,更新堆栈指针器,反映分配堆栈上空间给浮点寄存器的位置上的堆栈新顶端,在此情况下距离先前堆栈顶端位置104字节(对应于已经复制到堆栈的二十六个32位寄存器)。一旦已经更新连结寄存器以及堆栈指针器,造成设备在步骤C1上进入第三状态。
若在步骤D6上发生来自中断处理的返回(例外返回),而该设备在第四状态内,则决定中断处理是否在整数上下文内操作,其中设备在第一状态或第三状态内(由第三控制位所示,设定为一),或在浮点上下文内操作,其中设备在第二状态或第四状态内(由第三控制位所示,设定为零)。若中断处理在整数上下文内操作,则在步骤D7上利用弹出来自堆栈的所保存整数寄存器内容,并且更新堆栈指针器来反映新的堆栈顶端,在此情况下,与之前的堆栈顶端位置相距32字节(对应至已经从堆栈弹出的八个32位寄存器),从而执行整数状态复原功能。在此情况下,一旦已经执行整数状态复原功能,则在步骤A2内该设备进入第三状态内。若中断处理在浮点上下文内操作,则在步骤D8上利用弹出来自堆栈的所保存整数和浮点寄存器内容,并且更新堆栈指针器来反映新的堆栈顶端,在此情况下,与之前的堆栈顶端位置相距104字节(对应至已经从堆栈弹出的二十六个32位寄存器),从而执行浮点状态复原功能。在此情况下,一旦已经执行浮点状态复原功能,则该设备进入第二状态。
在图8内,FPCCR内的ASPEN位设定成浮点状态保存可用,但是FPCCR内的LSPEN位设定成懒惰上下文切换不可用。因此,上述参照图7描述的第三和第四状态只有在直接软件控制之下可用。状态图中只能通过直接软件控制达到的部分标示为Z′区。
在此情况下,第一状态内设备的操作与上面参考图7所描述的一样。不过,第二状态内设备的操作与上述类似,不同在于就在步骤B3’(对应至图7内的步骤B3)上,浮点寄存器的内容立即复制(与整数寄存器一起)到堆栈内存内,而非延迟直到接收后续浮点操作而设备在第三状态内才复制浮点寄存器。此外,图7内的步骤B3转移进入第三状态,图8内的步骤B3’则转移进入第一状态。第三状态只能通过第四状态取得(其本身只能通过直接软件控制取得)。
在图9内,设定FPCCR内的ASPEN和LSPEN位,使得浮点状态保存与懒惰上下文切换都无法使用。因此,上述参照图7的第二、第三和第四状态只有在直接软件控制之下可用。状态图中只能由直接软件控制达到的部分标示为Z″区。
在此情况下,设备与第一状态绑定,并且在对应至图7和图8内步骤A4的步骤A4’上所接收的浮点指令不会导致设备改变至不同状态。请注意,设备与第一状态绑定时,将不会到达步骤A6(除非从第二、第三和第四状态之一通过直接软件控制),因为连结寄存器的位4只能设定为一(控制位的反转,所述控制位在设备与第一状态绑定的情况下固定为零)。
第二具体实施例
此时将描述第二具体实施例,其中根据下列做出要存储哪两组寄存器的决定:(a)当前的处理是否为线程,就是不由中断触发的处理,或是为处置器,就是由中断触发的处理,(b)当前的处理是否为不使用浮点寄存器的整数处理,或使用浮点寄存器的浮点处理,以及(c)中断处理是否为不使用浮点寄存器的整数处理,或使用浮点寄存器的浮点处理。
请参阅图10,示意性例示范例数据处理器210和中断控制器230,其中状态电路234提供中断处理是否为整数处理或在中断控制器230内提供浮点处理的指示。数据处理器210和中断控制器230通过总线240连接在一起。数据处理器210包含(以类似于图1的方式)处理电路212和寄存器文件214。寄存器文件214包含整数寄存器214A(包含堆栈指针器215和连结寄存器216)以及浮点寄存器214B。中断控制器230包含优先级电路232,采用复用器的形式,根据相对优先级在传入的请求236-1至236-4之间选择。在此情况下,中断请求236-1和236-2为处理电路212产生的软件中断,而中断请求236-3和236-4则是硬件装置(未显示)产生的硬件中断。优先级电路232在中断请求236-1至236-4之间选择,产生通过信号线238供应至处理电路212的中断信号,指出处理电路212要进行的中断处理。
优先级电路232也产生控制信号233,指出中断请求已经选择的状态电路234。状态电路234采用复用器的形式,根据接收的控制信号233在状态指示器235-1至235-4之间选择。每一状态指示器235-1至235-4都对应至中断请求236-1至236-4其中之一。因此,状态电路234产生供应至处理电路212并指出所接收中断状态的控制信号,该控制信号尤其是指出接收的中断是否关于需要存取浮点寄存器214B的处理。状态指示器235-1至235-4可在适当硬件或软件控制之下,利用通过总线240供应控制信号,由处理电路212设定。
如此,中断控制器230的状态电路234产生状态信息(其对应于一选择的中断),施加表示状态信息的信号通过信号线239给数据处理器的处理电路212,其与通过信号线238供应的所选中断相关联。
处理电路212可运用通过信号线239获得的状态信息,来决定信号线238上接收的中断是关于整数上下文或浮点上下文。
数据处理器210也包含配置寄存器240,所述配置寄存器包含控制寄存器241,其具有第一位241A用于指出当前的上下文是整数上下文或浮点上下文、第二位241B用于指出当前使用主堆栈(MSP)和处理堆栈(PSP)哪一个以及第三位241C用于指出线程模式的特权。尤其是,控制寄存器241对应至上面参考图4所描述的控制寄存器141。
请参阅图11,示意性例示另一范例数据处理器310和中断控制器330,其中在数据处理器310内设置一状态存储器,该状态存储器提供将可能的中断映射至对应状态的查找表。数据处理器310和中断控制器330通过总线340连接在一起。数据处理器310包含(方式类似于图10)处理电路312和寄存器文件314,所述寄存器文件包含整数寄存器314A(包含堆栈指针器315和连结寄存器316)以及浮点寄存器314B。
中断控制器330包含优先级电路332,该优先级电路采用复用器的形式,根据相对优先级在传入的请求336-1至336-4之间选择。与图10一样,中断请求336-1和336-2为处理电路312产生的软件中断,而中断请求336-3和336-4则是硬件装置(未显示)产生的硬件中断。优先级电路332在中断336-1至336-4之间选择,产生通过信号线238供应至处理电路312的中断信号,指出处理电路312要服务的中断处理。
在图11内,数据处理器310内提供的状态信息存储器316取代图10内的状态电路334,使得可使用传统中断控制器,而非图10配置内提供的改良式中断控制器。状态信息存储器316存储状态信息,指出对于一个或多个可能中断请求中的每一个,是否为对应于该请求的处理需要浮点寄存器314B。处理电路312设置成从该状态信息存储器内读取状态信息,来响应从中断控制器330接收的中断请求。如此,处理电路312可适当备份只有整数寄存器314A或整数寄存器314A和浮点寄存器314B二者。状态信息存储器可由处理电路312在软件或硬件控制之下适当地更新。
数据处理器310也包含配置寄存器340,该配置寄存器包含控制寄存器341,其具有第一位341A用于指出当前的上下文是整数上下文或浮点上下文、第二位341B用于指出当前使用主堆栈(MSP)和处理堆栈(PSP)哪一个以及第三位341C用于指出线程模式的特权。尤其是,控制寄存器341对应至上面参考图10所描述的控制寄存器241。
在图10的范例和图11的范例情况下,来自中断控制器或状态信息存储器的状态信息分别提供中断(目标)数据处理上下文为整数上下文还是浮点上下文的指示。
在当前的处理为处置器时,从中断控制器(图10)或状态信息存储器(图11)获得指出当前处理为整数处理或浮点处理的状态信息,并分别用于更新控制寄存器241或341的位[2],指出当前的上下文为整数上下文或浮点上下文。当前的处理为线程时,则由硬件或软件直接设定控制寄存器241或341的位[2]。如此,决定要执行整数或浮点状态保存功能所需的状态可从指出目标上下文为整数上下文或浮点上下文的中断控制器或状态信息存储器中撷取、从指出当前上下文为整数上下文或浮点上下文的控制寄存器241、341的位[2]中撷取以及从指出(如上所述)当前上下文为线程或处置器的控制寄存器241、341的位[1]中撷取。
表2内显示根据当前与未来处理的上下文以及当前处理为线程或处置器的范例保存策略,具有关于仅需整数状态保存还是需要整数与浮点状态保存的指示。
发出地 | 目的地 | 保存至堆栈 |
整数线程 | 整数处置器 | 只有整数 |
整数线程 | 浮动处置器 | 只有整数 |
浮动线程 | 整数处置器 | 只有整数 |
浮动线程 | 浮动处置器 | 整数与浮点 |
整数处置器 | 整数处置器 | 只有整数 |
整数处置器 | 浮动处置器 | 整数与浮点 |
浮动处置器 | 整数处置器 | 只有整数 |
浮动处置器 | 浮动处置器 | 整数与浮点 |
表2:保存策略
表2内显示的保存策略保护避免浮点寄存器文件数据流失,而只在存在覆写风险时才进行浮点状态保存。
此时将参照图12A至图12D来描述根据第二具体实施例的范例处理与中断。
在图12A内,示意性例示处理与中断的第一范例系列。在周期602期间,产生整数线程处理(处理1A),直到由触发整数处置器处理(处理2A)的中断在点604上中断为止。如上所述,从整数线程到整数处置器的上下文切换只需要备份整数寄存器即可,因为不会也未曾使用浮点寄存器。在点604与点606之间发生上下文切换,在点606时整数寄存器的状态保存操作已经完成并且可开始新整数处置器处理(2A)。
整数处置器处理(2A)持续到点608,此时它由触发浮点处置器处理(处理3A)的中断所中断。如上所述,从整数处置器到浮点处置器的上下文切换需要备份整数寄存器与浮点寄存器,因为中断浮点处置器处理(3A)将使用浮点寄存器,并且整数处置器处理(2A)本身可能中断了一使用浮点寄存器的浮点处理。在点608与点610之间发生上下文切换,在点610时整数与浮点寄存器的状态保存操作已经完成并且可开始新浮点处置器处理(3A)。将了解,虽然简化显示点604与606之间整数状态保存操作周期与点608与610之间浮点状态保存操作周期相同,不过后者上下文切换的持续时间可因为需要存储更多寄存器至堆栈而更长。
然后在点610上开始的浮点处理(3A)持续直到点612,其上终止浮点处理(3A)并且可恢复被中断的处理(2A)。为了返回被中断的处理(2A),必须利用读取在整数与浮点状态保存处理中存储至堆栈内的值,并且将这些值存储到对应的寄存器内,从而复原备份整数寄存器与浮点寄存器。此操作发生在点612与点614之间,之后可恢复整数处置器处理(2A)。然后整数处置器处理(2A)持续到点616,其上终止并且恢复被中断的处理(1A)。为了返回被中断的处理(1A),必须利用读取在整数状态保存处理中存储至堆栈内的值,并且将这些值存储到对应的寄存器内,从而复原备份的整数寄存器。此复原操作发生在点616与点618之间,之后可恢复整数线程处理(1A)。
在上面的范例中,整数线程(1A)可为在用户模式内操作并且使用处理堆栈的应用处理(如上所述)。整数处置器(2A)和浮点处置器(3A)可为在特权模式内运行并且使用主堆栈的操作系统处理(如上所述)。运用处理堆栈来用于用户处理的堆栈指针器将为寄存器13内存储的处理堆栈指针器(PSP),而运用主堆栈来用于特权处理的堆栈指针器将为寄存器13内存储的主堆栈指针器(MSP)。因此,处理电路可利用检查寄存器13内所存储堆栈指针器所指向的地址,决定处理为线程(运用处理堆栈的用户模式)或处置器(运用主堆栈的特权模式)。下列范例都可使用相同的技术。
在图12B内,示意性例示处理与中断的第二范例系列。在周期622期间,产生整数线程处理(处理1B),直到由触发浮点处置器处理(处理2B)的中断在点624上中断为止。如上所述,从整数线程到浮点处置器的上下文切换只需要备份整数寄存器即可,因为先前未用浮点寄存器,因此就不需要保存。在点624与点626之间发生上下文切换,在点626时整数寄存器的状态保存操作已经完成并且可开始新浮点处置器处理(2B)。
浮点处置器处理(2B)持续到点628,此时它被触发另一浮点处置器处理(处理3B)的中断所中断。如上所述,从浮点处置器到其他浮点处置器的上下文切换需要备份整数寄存器与浮点寄存器,因为当前的浮点处置器处理(2B)和中断浮点处置器处理(3B)将使用浮点寄存器。在点628与点630之间发生上下文切换,在点630时整数与浮点寄存器的状态保存操作已经完成并且可开始新浮点处置器处理(3B)。
然后在点630上开始的浮点处理(3B)持续直到点632,其上终止浮点处理(3B)并且可恢复被中断的处理(2B)。为了返回被中断的处理(2B),必须利用读取在整数与浮点状态保存处理中存储至堆栈内的值,并且将这些值存储到对应的寄存器内,复原备份的整数寄存器与浮点寄存器。此操作发生在点632与点634之间,之后可恢复浮点处置器处理(2B)。然后浮点处置器处理(2B)持续到点636,其上终止并且恢复被中断的处理(1B)。为了返回被中断的处理(1B),必须利用读取在整数状态保存操作与浮点状态保存操作中存储至堆栈内的值,并且将这些值存储到对应的寄存器内,复原备份的整数寄存器与浮点寄存器。此复原操作发生在点636与点638之间,之后可恢复整数线程处理(1B)。
在图12C内,示意性例示处理与中断的第三范例系列。在周期642期间,产生浮点线程处理(处理1C),直到由触发整数处置器处理(处理2C)的中断在点644上中断为止。如上所述,从浮点线程到整数处置器的上下文切换只需要备份整数寄存器即可,因为中断整数处理不会覆写浮点寄存器。在点644与点646之间发生上下文切换,在点646时整数寄存器的状态保存操作已经完成并且可开始新整数处置器处理(2C)。
整数处置器处理(2C)持续到点648,此时它被触发另一整数处置器处理(处理3C)的中断所中断。如上所述,从一整数处置器到一整数处置器的上下文切换只需要备份整数寄存器即可,因为中断处置器处理(3C)将不会使用浮点寄存器。在点648与点650之间发生上下文切换,在点650时整数寄存器的状态保存操作已经完成并且可开始新整数处置器处理(3C)。
然后在点650上开始的整数处置器处理(3C)持续直到点652,其上终止整数处理(3C)并且恢复被中断的处理(2C)。为了返回被中断的处理(2A),必须利用读取在整数状态保存处理中存储至堆栈内的值,并且将这些值存储到对应的寄存器内,复原备份的整数寄存器。此操作发生在点652与点654之间,之后可恢复整数处置器处理(2C)。然后整数处置器处理(2C)持续到点656,其上终止并且恢复被中断的处理(1C)。为了返回被中断的处理(1C),必须利用读取在整数状态保存处理中存储至堆栈内的值,并且将这些值存储到对应的寄存器内,复原备份的整数寄存器。浮点线程处理(1C)所使用的浮点寄存器未被中断处理(2C和3C)使用,如此仍旧保存在浮点寄存器内。此复原操作发生在点656与点658之间,之后可恢复浮点线程处理(1C)。
在图12D内,示意性例示处理与中断的第四范例系列。在周期662期间,产生浮点线程处理(处理1D),直到由触发浮点处置器处理(处理2D)的中断在点664上中断为止。如上所述,从浮点线程到浮点处置器的上下文切换需要备份整数寄存器与浮点寄存器,因为当前的浮点处置器处理(1D)和中断浮点处置器处理(2D)将使用浮点寄存器。在点664与点666之间发生上下文切换,在点666时整数寄存器与浮点寄存器的状态保存操作已经完成并且可开始新浮点处置器处理(2D)。
浮点处置器处理(2D)持续到点668,此时它被触发整数处置器处理(处3D)的中断所中断。如上所述,从浮点处置器到整数处置器的上下文切换只需要备份整数寄存器即可,因为中断整数处置器处理(3D)将不会使用浮点寄存器。在点668与点670之间发生上下文切换,在点670时整数寄存器的状态保存操作已经完成并且可开始新整数处置器处理(3D)。
然后在点670上开始的整数处理(3D)持续直到点672,其上终止整数处理(3D)并且恢复被中断的处理(2D)。为了返回被中断的处理(2D),必须利用读取在整数状态保存处理中存储至堆栈内的值,并且将这些值存储到对应的寄存器内,复原备份的整数寄存器。此操作发生在点672与点674之间,之后可恢复浮点处置器处理(2D)。然后浮点处置器处理(2D)持续到点676,其上终止并且恢复被中断的处理(1D)。为了返回被中断的处理(1D),必须利用读取在整数与浮点状态保存处理中存储至堆栈内的值,并且将这些值存储到对应的寄存器内,复原备份的整数寄存器与浮点寄存器。此复原操作发生在点676与点678之间,之后可恢复浮点线程处理(1D)。
图13为显示提供从当前处理至目标处理的上下文切换的示范方法的示意流程图。在步骤U1上,当前的处理继续直到步骤U2上的处理电路接收到中断。在步骤U2上接收到中断时,在步骤U3上决定该中断所发起的目标处理为整数处理或浮点处理。如上所述,根据关联于该中断的中断控制器所提供或从数据处理器内提供的状态信息存储器所获得的状态信息,做出此决定。然后在步骤U4上,决定当前的处理为整数处理或浮点处理。如上所述,已经发起当前处理时,根据来自中断控制器的状态信息(当前的处理为处置器)或由硬件或软件直接设定(当前的处理为线程),此信息可存储至控制寄存器的位[2]。利用处理电路可从控制寄存器中撷取此指示。然后在步骤U5上,决定当前的处理为线程处理或处置器处理。可根据控制寄存器的位[1]来做出决定,该位指出当前使用主堆栈(指出当前的处理为处置器)或当前使用处理堆栈(指出当前的处理为线程)。在步骤U3至U5上收集的信息是做出如下决策所需的:只有整数寄存器应该存储至堆栈,或整数寄存器与浮点寄存器都应该存储至堆栈。
在步骤U6上,做出是否要存储浮点寄存器的决定。然后在决策决定不存储浮点寄存器的情况下,在步骤U7上只将整数寄存器存储至堆栈。然后,在步骤U8上更新堆栈指针器来反映新的堆栈顶端,并且在步骤U9上更新连结寄存器,存储使用了主堆栈或处理堆栈来存储保存处理器寄存器的指示,以及存储被中断处理使用浮点上下文的指示。若在步骤U6上做出存储浮点寄存器的决定,则在步骤U8上将整数寄存器和浮点寄存器都存储至堆栈。然后,在步骤U8上更新堆栈指针器来反映新的堆栈顶端,并且在步骤U9上更新连结寄存器,存储被中断处理使用浮点上下文的指示。
在步骤U11上,可设定控制寄存器的位[2],指出根据步骤U3上所获得信息的目标处理(将变成当前的处理)是否指出该中断处理是使用整数或浮点数据处理上下文。最终,在步骤U12上开始目标处理。开始当前处理之后,若由中断请求触发的目标处理在步骤U3上获得并在步骤U11上存储于控制寄存器位[2]内的状态信息指出目标数据处理上下文为整数数据处理上下文时,尝试使用浮点寄存器,则处理电路产生例外。此例外将在能覆写浮点寄存器之前暂停目标处理,因此避免尚未存储至堆栈的浮点寄存器数据遗失。然后可仅利用在该时间点上进行浮点状态保存操作,或利用终止目标处理,则可处理此例外。
图14为显示提供从目标(中断)处理上下文切换回由目标处理所中断的线程或处置器处理的范例方法示意流程图。在步骤V1上,由中断(例如是参考图13所描述的中断)所触发的处理一直进行到在步骤V2上终止为止。一旦在步骤V2上终止处理,则在步骤V3上读取连结寄存器来决定处理器寄存器复制的是主堆栈和处理堆栈中哪一个,并且决定被中断处理是否使用浮点上下文(形成要从堆栈弹出多少数据(整数框架或浮点框架)的指示)。在步骤V4上,根据连结寄存器内存储的值,决定处理中断时,浮点寄存器是否已经存储至堆栈。若在步骤V4上决定浮点寄存器已经存储至堆栈,则在步骤V5上从堆栈弹出适当数量的数据,来获得整数寄存器和浮点寄存器的数据值,并且在步骤V6上将获得的数据值存储到对应的寄存器。在图2和图3内所示范例的情况下,这需要从堆栈弹出对应于26个寄存器的数据量。另一方面,若在步骤V5上决定浮点寄存器尚未存储至堆栈,则在步骤V7上从堆栈弹出少量数据,并且在步骤V8上复制到整数寄存器。在图2和图3内所示范例的情况下,这需要从堆栈弹出对应于8个寄存器的数据量。在步骤V9上,一旦已经完成步骤V6或步骤V8,则恢复先前的处理。
本发明的许多其他方面与特征都定义在附属权利要求书当中。在不背离本发明范畴之下,可对先前描述的具体实施例进行许多修改。
Claims (37)
1.一种数据处理设备,包含:
处理电路,该处理电路响应于数据处理指令来执行整数数据处理操作及浮点数据处理操作;
一第一组整数寄存器,该第一组整数寄存器可由所述处理电路使用,来执行所述整数数据处理操作;以及
一第二组浮点寄存器,该第二组浮点寄存器可由所述处理电路使用,来执行所述浮点数据处理操作:
其中
所述处理电路响应于一中断请求,来执行其中只有所述整数寄存器的至少一子集被复制到一堆栈内存的一整数状态保存功能,以及其中所述整数寄存器与所述浮点寄存器二者的至少一子集都被复制到所述堆栈内存的一浮点状态保存功能其中之一,所述整数状态保存功能与所述浮点状态保存功能的所述其中之一是由所述处理电路根据状态信息选择的。
2.如权利要求1所述的数据处理设备,其中:
所述状态信息包含第一状态信息,该第一状态信息指出接收所述中断请求时所述处理电路正执行的当前数据处理上下文是包含一个或多个浮点数据处理操作的一浮点数据处理上下文,还是不包含任何浮点数据处理操作的一整数数据处理上下文。
3.如权利要求2所述的数据处理设备,其中:
响应于一数据处理指令而设定所述第一状态信息,所述数据处理指令导致所述处理电路执行浮点数据处理操作。
4.如权利要求2或权利要求3所述的数据处理设备,其中:
所述处理电路响应于所述中断请求,在所述第一状态信息指出所述当前的数据处理上下文为一整数数据处理上下文时,执行所述整数状态保存功能,并且在所述第一状态信息指出所述当前的数据处理上下文为一浮点数据处理上下文时,执行所述浮点状态保存功能。
5.如权利要求4所述的数据处理设备,其中,执行所述整数状态保存功能时,所述处理电路设定第二状态信息以指出所述浮点寄存器尚未复制到所述堆栈内存,并且执行所述浮点状态保存功能时,所述处理电路设定所述第二状态信息以指出所述浮点寄存器已经复制到所述堆栈内存。
6.如权利要求5所述的数据处理设备,其中所述处理电路响应于由于所述中断请求而由所述处理电路执行的一目标数据处理上下文的终止,执行一整数状态复原功能与一浮点状态复原功能其中之一,在所述整数状态复原功能中只有从所述整数寄存器保存至所述堆栈的数据从所述堆栈获得并复制到对应寄存器内,在所述浮点状态复原功能中从所述整数和浮点寄存器保存至所述堆栈的数据从所述堆栈获得并复制到对应寄存器内,其中
若所述第二状态信息指出所述浮点寄存器尚未存储到所述堆栈内存,则由所述处理电路选择所述整数状态复原功能,以及
若所述第二状态信息指出所述浮点寄存器已经存储到所述堆栈内存,则由所述处理电路选择所述浮点状态复原功能。
7.如权利要求3所述的数据处理设备,其中:
所述处理电路响应于所述中断请求,在所述第一状态信息指示所述当前的数据处理上下文为一整数数据处理上下文时,执行所述整数状态保存功能,并且在所述第一状态信息指示所述当前的数据处理上下文为一浮点数据处理上下文时,执行所述浮点状态保存功能的一第一部分以及执行所述浮点状态保存功能的一第二部分,在所述第一部分中只有所述整数寄存器的子集复制到所述堆栈内存,在所述第二部分中分配所述堆栈内存上的空间用于所述浮点寄存器的子集。
8.如权利要求7所述的数据处理设备,其中,执行所述整数状态保存功能时,所述处理电路设定第二状态信息以指出用于所述浮点寄存器的空间尚未分配到所述堆栈内存,并且执行所述浮点状态保存功能的所述第二部分时,所述处理电路设定所述第二状态信息以指出用于所述浮点寄存器的空间已经分配在所述堆栈内存内。
9.如权利要求7或权利要求8所述的数据处理设备,其中:
所述处理电路响应于跟在所述堆栈内存上空间分配之后的、让所述处理电路执行浮点数据处理操作的一数据处理指令,来执行所述浮点状态保存功能的一第三部分,在该第三部分中所述浮点寄存器的子集复制到所述堆栈内存的已分配部分。
10.如权利要求7、8、9中任一项所述的数据处理设备,包含:一堆栈分配地址寄存器,用来存储在所述浮点状态保存功能的所述第二部分内分配的堆栈内存部分的内存地址,其中所述处理电路在所述浮点状态保存功能的所述第三部分内,将所述浮点寄存器复制到所述堆栈内存内由所述堆栈分配地址寄存器所指示的一地址。
11.如权利要求9所述的数据处理设备,其中在所述浮点状态保存功能的所述第二部分内设定第三状态信息,以指出在所述堆栈内存内已经分配空间,但是尚未进行所述浮点寄存器的复制,并且其中所述第三状态信息作为所述浮点状态保存功能的所述第三部分中的一部分而被重置,以指出所述浮点寄存器已经复制到所述堆栈内存内的已分配空间。
12.如权利要求11所述的数据处理设备,其中所述处理电路响应于由于所述中断请求而由所述处理电路执行的一目标数据处理上下文的终止,执行一整数状态复原功能与一浮点状态复原功能其中之一,在所述整数状态复原功能中只有从所述整数寄存器保存至所述堆栈的数据从所述堆栈获得并复制到对应寄存器内,在所述浮点状态复原功能中从所述整数和浮点寄存器保存至所述堆栈的数据从所述堆栈获得并复制到对应寄存器内,其中
若所述第二状态信息指出所述浮点寄存器尚未存储至所述堆栈内存,或若所述第二状态信息指出所述堆栈内存内已经分配空间给所述浮点寄存器,并且所述第三状态信息指出尚未发生所述浮点寄存器的子集到所述堆栈内存的所述已分配部分的复制,则由所述处理电路选择所述整数状态复原功能,以及
若所述第二状态信息指出所述堆栈内存内已经分配空间给所述浮点寄存器,并且所述第三状态信息指出所述浮点寄存器的子集已经复制到所述堆栈内存的所述已分配部分,则由所述处理电路选择所述浮点状态复原功能。
13.如权利要求12所述的数据处理设备,其中,执行所述整数状态复原功能时,设定所述第一状态信息以指出当前的数据处理上下文为一整数数据处理上下文,并且执行所述浮点状态复原功能时,设定所述第一状态信息以指出当前的数据处理上下文为一浮点数据处理上下文。
14.如前述权利要求中任一项所述的数据处理设备,其中:
所述处理电路响应于第四状态信息,在其中响应于所述中断请求而将所述浮点寄存器复制到所述堆栈内存的一浮点状态保存功能,以及其中响应于所述中断请求而将所述堆栈内存内空间已分配给所述浮点寄存器,并且其中响应于跟在所述堆栈内存上空间的分配之后、导致所述处理电路执行浮点数据处理操作的一数据处理指令而将所述浮点寄存器复制到已分配空间内的一浮点状态保存功能之间进行选择。
15.如权利要求1或权利要求2所述的数据处理设备,其中:
所述状态信息包含第二状态信息,该第二状态信息指出由于所述中断请求而要由所述处理电路执行的一目标数据处理上下文是包含一个或多个浮点数据处理操作的一浮点数据处理上下文,还是不包含任何浮点数据处理操作的一整数数据处理上下文。
16.如权利要求1、2或15所述的数据处理设备,其中:
所述状态信息包含第三状态信息,该第三状态信息指出一当前的数据处理上下文是未被一中断请求触发的一线程数据处理上下文,还是一中断请求已经触发的一处置器数据处理上下文。
17.如权利要求2、15或16所述的数据处理设备,其中:
所述处理电路响应于状态信息,来选择所述浮点状态保存功能,所述状态信息指出所述目标数据处理上下文为一浮点数据处理上下文,以及所述当前数据处理上下文为一浮点数据处理上下文或由一中断请求触发的一整数数据处理上下文。
18.如权利要求2、15或16所述的数据处理设备,其中:
所述处理电路响应于状态信息,来选择所述整数状态保存功能,所述状态信息指出所述当前数据处理上下文为一整数数据处理上下文,并且所述目标数据处理上下文为一整数数据处理上下文。
19.如权利要求2、15或16所述的数据处理设备,其中:
所述处理电路响应于状态信息,来选择所述浮点状态保存功能,所述状态信息指出所述当前数据处理上下文为一浮点数据处理上下文,并且所述目标数据处理上下文为一浮点数据处理上下文。
20.如权利要求2、15或16所述的数据处理设备,其中:
所述处理电路响应于状态信息,来选择所述整数状态保存功能,所述状态信息指出所述当前数据处理上下文为未被一中断请求触发的一整数线程上下文,并且所述目标数据处理上下文为一浮点数据处理上下文。
21.如权利要求2、15或16所述的数据处理设备,其中:
所述处理电路响应于状态信息,来选择所述浮点状态保存功能,所述状态信息指出所述当前数据处理上下文为一中断请求触发的一整数处置器上下文,并且所述目标数据处理上下文为一浮点数据处理上下文。
22.如权利要求2、15或16所述的数据处理设备,其中所述第一组整数寄存器包含用于存储一堆栈指针器的一寄存器,当所述当前数据处理上下文为一线程时,所述堆栈指针器指向一处理堆栈的顶端,并且当所述当前数据处理上下文为一处置器时,所述堆栈指针器指向一主堆栈的顶端,并且其中
由所述堆栈指针器提供所述第三状态信息。
23.如权利要求22所述的数据处理设备,其中所述第一组整数寄存器包含一连结寄存器,用于存储至一先前数据处理上下文的一返回地址,以及所述先前数据处理上下文是一整数数据处理上下文还是一浮点数据处理上下文的指示,并且其中
所述处理电路响应于所述中断请求,来设定所述连结寄存器以包含所述当前数据处理上下文的一堆栈指针器,以及所述当前数据处理上下文是一整数数据处理上下文还是一浮点数据处理上下文的指示。
24.如权利要求23所述的数据处理设备,其中所述处理电路响应于所述目标数据处理上下文的终止,来执行一整数状态复原功能与一浮点状态复原功能其中之一,在所述整数状态复原功能中只有从所述整数寄存器保存至所述堆栈的数据从所述堆栈获得并复制到对应寄存器内,在所述浮点状态复原功能中从所述整数和浮点寄存器保存至所述堆栈的数据从所述堆栈获得并复制到对应寄存器内,其中
根据所述连结寄存器内所述堆栈指针器是指向所述主堆栈还是所述处理堆栈,并且根据所述连结寄存器是指出所述先前数据处理上下文为一整数数据处理上下文还是一浮点数据处理上下文,由所述处理电路选择所述整数状态复原功能与所述浮点状态复原功能之一者。
25.如前述权利要求中任一项所述的数据处理设备,其中所述状态信息能由所述处理电路设置。
26.如权利要求15至25中任一项所述的数据处理设备,还包含用于产生所述中断请求的一中断控制器;其中:
所述中断控制器存储与一个或多个可能中断请求相关联的所述第二状态信息,并且将与所选所述可能中断请求其中之一相关联的第二状态信息与所选中断请求一起传送至所述处理电路。
27.如权利要求15至25中任一项所述的数据处理设备,包含:
一状态信息存储器,用于存储与一个或多个可能中断请求相关联的所述第二状态信息,所述处理电路设置成响应于一接收的中断请求,从所述状态信息存储器中读取所述第二状态信息。
28.如权利要求15所述的数据处理设备,其中当所述第二状态信息指出所述目标数据处理上下文为一整数数据处理上下文时,若由所述中断请求触发的所述目标数据处理操作尝试使用所述浮点寄存器,则所述处理电路产生一例外。
29.如前述权利要求中任一项所述的数据处理设备,其中通过先将所述第一组整数寄存器复制到所述堆栈,然后将所述第二组浮点寄存器复制到所述堆栈顶端,来执行所述浮点状态保存功能。
30.如权利要求29所述的数据处理设备,其中所述处理电路响应于在正执行所述浮点状态保存功能时接收的需要一整数状态保存功能的一较高优先级中断,禁止将所述第二组浮点寄存器复制到所述堆栈,并且设定一堆栈指针器以指出所述第一组整数寄存器位于所述堆栈顶端。
31.如权利要求29所述的数据处理设备,其中通过先将所述第二组浮点寄存器复制到所述堆栈,然后将所述第一组整数寄存器复制到所述堆栈,来执行所述浮点状态保存功能。
32.如前述权利要求中任一项所述的数据处理设备,其中所述处理电路响应于第四状态信息,来与所述状态信息无关地响应于一中断请求执行所述整数状态保存功能。
33.一种响应于数据处理指令而执行整数数据处理操作和浮点数据处理操作的数据处理方法,所述整数数据处理操作使用一第一组整数寄存器,并且所述浮点数据处理操作使用一第二组浮点寄存器,所述方法包含以下步骤:
响应于一中断请求,来执行其中只有所述整数寄存器的至少一子集被复制到一堆栈内存的一整数状态保存功能,以及其中所述整数寄存器与所述浮点寄存器二者的至少一子集都被复制到所述堆栈内存的一浮点状态保存功能其中之一,所述整数状态保存功能与所述浮点状态保存功能的所述其中之一是根据状态信息选择的。
34.一种包含一计算机程序的计算机程序产品,所述计算机程序可操作来使一计算机执行如权利要求33所述的方法。
35.一种实质上如本申请中参照附图所描述的数据处理设备。
36.一种实质上如本申请中参照附图所描述的数据处理方法。
37.一种实质上如本申请中参照附图所描述的计算机程序产品。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB0910661.8A GB2471138B (en) | 2009-06-19 | 2009-06-19 | Handling integer and floating point registers during a context switch |
GB0910661.8 | 2009-06-19 | ||
PCT/GB2010/000879 WO2010146328A1 (en) | 2009-06-19 | 2010-04-30 | Data processing apparatus and method |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102460377A true CN102460377A (zh) | 2012-05-16 |
CN102460377B CN102460377B (zh) | 2015-02-18 |
Family
ID=40972495
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201080027396.9A Active CN102460377B (zh) | 2009-06-19 | 2010-04-30 | 数据处理设备及方法 |
Country Status (10)
Country | Link |
---|---|
US (1) | US9201651B2 (zh) |
EP (1) | EP2443548B1 (zh) |
JP (1) | JP5564562B2 (zh) |
KR (1) | KR101762124B1 (zh) |
CN (1) | CN102460377B (zh) |
GB (1) | GB2471138B (zh) |
IL (1) | IL216377A (zh) |
MY (1) | MY154086A (zh) |
TW (1) | TWI478064B (zh) |
WO (1) | WO2010146328A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110799940A (zh) * | 2017-07-05 | 2020-02-14 | Arm有限公司 | 内容数据管理 |
CN111782269A (zh) * | 2020-06-04 | 2020-10-16 | 珠海格力电器股份有限公司 | 一种中断处理方法及中断处理设备 |
CN114064302A (zh) * | 2020-07-30 | 2022-02-18 | 华为技术有限公司 | 一种进程间通信的方法及装置 |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4873423B2 (ja) * | 2007-12-27 | 2012-02-08 | 東芝ソリューション株式会社 | 仮想化プログラム、シミュレーション装置、仮想化方法 |
JP5590022B2 (ja) * | 2011-12-28 | 2014-09-17 | 富士通株式会社 | 情報処理装置、制御方法および制御プログラム |
US10210349B2 (en) * | 2012-02-08 | 2019-02-19 | Arm Limited | Data processing apparatus and method using secure domain and less secure domain |
US9213828B2 (en) | 2012-02-08 | 2015-12-15 | Arm Limited | Data processing apparatus and method for protecting secure data and program code from non-secure access when switching between secure and less secure domains |
GB2501343A (en) * | 2012-02-08 | 2013-10-23 | Advanced Risc Mach Ltd | Data processing apparatus and method using secure domain and less secure domain |
US9116711B2 (en) | 2012-02-08 | 2015-08-25 | Arm Limited | Exception handling in a data processing apparatus having a secure domain and a less secure domain |
US9477834B2 (en) | 2012-02-08 | 2016-10-25 | Arm Limited | Maintaining secure data isolated from non-secure access when switching between domains |
JP6214142B2 (ja) * | 2012-10-09 | 2017-10-18 | キヤノン株式会社 | 情報処理装置、情報処理方法およびプログラム |
CN104679585B (zh) * | 2013-11-28 | 2017-10-24 | 中国航空工业集团公司第六三一研究所 | 浮点上下文切换方法 |
GB2548602B (en) * | 2016-03-23 | 2019-10-23 | Advanced Risc Mach Ltd | Program loop control |
GB2548604B (en) | 2016-03-23 | 2018-03-21 | Advanced Risc Mach Ltd | Branch instruction |
GB2548603B (en) | 2016-03-23 | 2018-09-26 | Advanced Risc Mach Ltd | Program loop control |
JP2018109838A (ja) * | 2016-12-28 | 2018-07-12 | 富士通株式会社 | 情報処理装置、情報処理システム、プログラム、及び情報処理方法 |
US10725739B2 (en) | 2017-06-23 | 2020-07-28 | International Business Machines Corporation | Compiler controls for program language constructs |
US10514913B2 (en) | 2017-06-23 | 2019-12-24 | International Business Machines Corporation | Compiler controls for program regions |
US10684852B2 (en) | 2017-06-23 | 2020-06-16 | International Business Machines Corporation | Employing prefixes to control floating point operations |
US10379851B2 (en) | 2017-06-23 | 2019-08-13 | International Business Machines Corporation | Fine-grained management of exception enablement of floating point controls |
US10310814B2 (en) | 2017-06-23 | 2019-06-04 | International Business Machines Corporation | Read and set floating point control register instruction |
US10740067B2 (en) | 2017-06-23 | 2020-08-11 | International Business Machines Corporation | Selective updating of floating point controls |
US10481908B2 (en) | 2017-06-23 | 2019-11-19 | International Business Machines Corporation | Predicted null updated |
GB2575877B (en) | 2018-07-27 | 2021-06-09 | Advanced Risc Mach Ltd | Memory protection unit using memory protection table stored in memory system |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5481719A (en) * | 1994-09-09 | 1996-01-02 | International Business Machines Corporation | Exception handling method and apparatus for a microkernel data processing system |
US20050038977A1 (en) * | 1995-12-19 | 2005-02-17 | Glew Andrew F. | Processor with instructions that operate on different data types stored in the same single logical register file |
CN101023410A (zh) * | 2004-08-27 | 2007-08-22 | 松下电器产业株式会社 | 信息处理装置、例外控制电路 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ATE241170T1 (de) * | 1995-10-06 | 2003-06-15 | Patriot Scient Corp | Architektur für einen risc-mikroprozessor |
US5701508A (en) * | 1995-12-19 | 1997-12-23 | Intel Corporation | Executing different instructions that cause different data type operations to be performed on single logical register file |
US6119206A (en) * | 1996-02-12 | 2000-09-12 | Sun Microsystems, Inc. | Design of tags for lookup of non-volatile registers |
US5761491A (en) * | 1996-04-15 | 1998-06-02 | Motorola Inc. | Data processing system and method for storing and restoring a stack pointer |
US5928356A (en) * | 1997-10-11 | 1999-07-27 | Institute For The Development Of Emerging Architectures, L.L.C. | Method and apparatus for selectively controlling groups of registers |
JP3991443B2 (ja) * | 1998-04-27 | 2007-10-17 | ソニー株式会社 | タスク切り替え方法及びデータ処理装置 |
JP3982353B2 (ja) * | 2002-07-12 | 2007-09-26 | 日本電気株式会社 | フォルトトレラントコンピュータ装置、その再同期化方法及び再同期化プログラム |
US20070136724A1 (en) * | 2005-12-12 | 2007-06-14 | Arun Sharma | Transferring registers in transitions between computer environments |
US7529916B2 (en) * | 2006-08-16 | 2009-05-05 | Arm Limited | Data processing apparatus and method for controlling access to registers |
-
2009
- 2009-06-19 GB GB0910661.8A patent/GB2471138B/en active Active
-
2010
- 2010-04-30 MY MYPI2011005609A patent/MY154086A/en unknown
- 2010-04-30 KR KR1020127000881A patent/KR101762124B1/ko active IP Right Grant
- 2010-04-30 JP JP2012515549A patent/JP5564562B2/ja active Active
- 2010-04-30 WO PCT/GB2010/000879 patent/WO2010146328A1/en active Application Filing
- 2010-04-30 CN CN201080027396.9A patent/CN102460377B/zh active Active
- 2010-04-30 EP EP10717209.0A patent/EP2443548B1/en active Active
- 2010-05-03 US US12/662,783 patent/US9201651B2/en active Active
- 2010-05-24 TW TW099116532A patent/TWI478064B/zh active
-
2011
- 2011-11-15 IL IL216377A patent/IL216377A/en active IP Right Grant
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5481719A (en) * | 1994-09-09 | 1996-01-02 | International Business Machines Corporation | Exception handling method and apparatus for a microkernel data processing system |
US20050038977A1 (en) * | 1995-12-19 | 2005-02-17 | Glew Andrew F. | Processor with instructions that operate on different data types stored in the same single logical register file |
CN101023410A (zh) * | 2004-08-27 | 2007-08-22 | 松下电器产业株式会社 | 信息处理装置、例外控制电路 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110799940A (zh) * | 2017-07-05 | 2020-02-14 | Arm有限公司 | 内容数据管理 |
US11704127B2 (en) | 2017-07-05 | 2023-07-18 | Arm Limited | Marking current context data to control a context-data-dependent processing operation to save current or default context data to a data location |
CN110799940B (zh) * | 2017-07-05 | 2023-12-22 | Arm有限公司 | 内容数据管理 |
CN111782269A (zh) * | 2020-06-04 | 2020-10-16 | 珠海格力电器股份有限公司 | 一种中断处理方法及中断处理设备 |
CN111782269B (zh) * | 2020-06-04 | 2023-12-12 | 珠海格力电器股份有限公司 | 一种中断处理方法及中断处理设备 |
CN114064302A (zh) * | 2020-07-30 | 2022-02-18 | 华为技术有限公司 | 一种进程间通信的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
KR20120052934A (ko) | 2012-05-24 |
TW201102929A (en) | 2011-01-16 |
GB0910661D0 (en) | 2009-08-05 |
KR101762124B1 (ko) | 2017-07-27 |
JP2012530315A (ja) | 2012-11-29 |
IL216377A0 (en) | 2012-01-31 |
JP5564562B2 (ja) | 2014-07-30 |
GB2471138B (en) | 2014-08-13 |
US20100325397A1 (en) | 2010-12-23 |
EP2443548A1 (en) | 2012-04-25 |
MY154086A (en) | 2015-04-30 |
CN102460377B (zh) | 2015-02-18 |
EP2443548B1 (en) | 2015-07-01 |
IL216377A (en) | 2016-05-31 |
WO2010146328A1 (en) | 2010-12-23 |
GB2471138A (en) | 2010-12-22 |
US9201651B2 (en) | 2015-12-01 |
TWI478064B (zh) | 2015-03-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102460377A (zh) | 数据处理设备及方法 | |
CN100533428C (zh) | 半导体器件 | |
RU2263949C2 (ru) | Перезапускаемые транслированные команды | |
CN101464819B (zh) | 进入低功率模式前的硬件驱动处理器状态存储 | |
CN100538737C (zh) | 图形处理单元管线多阶同步控制处理器及其方法 | |
RU2179331C2 (ru) | Способ и устройство для выполнения команд с плавающей запятой и упакованных данных, используя одиночный файл регистра | |
CN100440139C (zh) | 双线程处理器和方法 | |
KR920005852B1 (ko) | 데이타 처리 시스템에 있어서 합성 디스크립터를 제공하는 장치 및 방법 | |
US9158574B2 (en) | Handling interrupts in data processing | |
US5727227A (en) | Interrupt coprocessor configured to process interrupts in a computer system | |
US20040205719A1 (en) | Hop method for stepping parallel hardware threads | |
JPH08505965A (ja) | コンテキスト切り換え装置及び方法 | |
JP5273982B2 (ja) | データ処理システム内のレジスタリネーミング | |
JP4956891B2 (ja) | 演算処理装置,情報処理装置および演算処理装置の制御方法 | |
RU2005107713A (ru) | Система обработки данных, содержащая наборы внешних и внутренних команд | |
JP3439033B2 (ja) | 割り込み制御装置及びプロセッサ | |
CN100394382C (zh) | 算术运算装置、信息处理装置以及寄存器堆控制方法 | |
CN105242963A (zh) | 执行机构间的切换控制 | |
US5687381A (en) | Microprocessor including an interrupt polling unit configured to poll external devices for interrupts using interrupt acknowledge bus transactions | |
JP4926009B2 (ja) | 情報処理装置の障害処理システム | |
CN102334108A (zh) | 具有可指派通用寄存器组的处理器 | |
CN105190551A (zh) | 具有存储器区域交换机制的双引导系统 | |
US5948093A (en) | Microprocessor including an interrupt polling unit configured to poll external devices for interrupts when said microprocessor is in a task switch state | |
CN103955356B (zh) | 多线程处理器中通用寄存器组的分配方法及装置 | |
US3909794A (en) | Method of storing control data upon the interruption of a program in a processing system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |