CN1684031A - 在缓存器架构处理器中管理堆栈转移的装置与方法 - Google Patents
在缓存器架构处理器中管理堆栈转移的装置与方法 Download PDFInfo
- Publication number
- CN1684031A CN1684031A CNA2005100712346A CN200510071234A CN1684031A CN 1684031 A CN1684031 A CN 1684031A CN A2005100712346 A CNA2005100712346 A CN A2005100712346A CN 200510071234 A CN200510071234 A CN 200510071234A CN 1684031 A CN1684031 A CN 1684031A
- Authority
- CN
- China
- Prior art keywords
- data item
- storehouse
- buffer
- internal memory
- buffer zone
- 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
- 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
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明揭示用于模拟一堆栈的一部分的装置与方法,本发明的某些具体实施例是管理模拟堆栈顶部的处理器缓存器与包含堆栈其它部分的内存间数据项的转移。一些具体实施例是利用一可变缓冲区,此可变缓冲区被配置于处理器缓存器与内存间以作缓冲之用。储存与可变缓冲区中实际的数据项量具有弹性,因此可变缓冲区与处理器缓存器间的转移可维持有效的堆栈数据项填入处理器缓存器(假设堆栈数据项存在)。然而,可变缓冲区与内存间的转移可被配置在只有可变缓冲区超出可填入的容量时发生。
Description
技术领域
本发明是关于一处理器,特别是关于一用于在内存与处理器的缓存器间模拟部分内存堆栈的管理堆栈转移的装置与方法。
背景技术
处理器(如微处理器)是众所皆知且被广泛使用于许多产品与应用中,例如从桌上型计算机到可携式电子设备,如行动电话与个人数字助理(PDA;Personal digital assistant)。在目前现有的处理器有一些功能强大(如在高阶计算机工作站的处理器),而其它处理器则是具有简单的设计,以用于较低阶、较不昂贵的应用与产品。
跨平台(platform-independent)的程序语言(如Sun Microsystems,Inc.出的Java)提供了不同于传统、特定平台(platform-specific)程序语言的结构与运算特征,跨平台的程序语言典型地运用跨平台程序代码(机器可读的指令),可适用于多种硬件平台,而不去考虑硬件平台的特定指令集。一个硬件平台典型地包含一个或多个处理器(如微处理器或微控制器),此一个或多个处理器是用以执行具有特定格式的特定指令集,有时特定指令集也被称为原生指令集(native instruction set)。相对地,特定平台语言是运用编译器来产生给一特定硬件平台的原生(active)程序代码。在一些实例中,当相同的源码被以不同的特定平台的编译器编译成用于多种平台的适当程序代码时,产生的程序代码并非跨平台。
指令集中有一类是包含了一种在运作时使用堆栈架构方法(stack-based approach)来储存与操作数据项的指令集,在支持这样堆栈架构的指令集的数据项处理系统,堆栈可储存一连串的数据项(如运算值),这些数据项是被以一特定顺序放入堆栈,再被以相反顺序从堆栈取出,因此最后置入的数据项会被最先取出。堆栈架构处理器可以提供包含用于数据项写入与数据项读出的复数个可寻址堆栈项(addressable stack entry)的堆栈,可寻址堆栈项是关联于一堆栈指针,此堆栈指针指示着堆栈内顶端的位置。堆栈指针明确指出在堆栈内的一参考点,该参考点表示最新被存入堆栈的数据项,并通过此被参照来对堆栈做其它的存取。
Sun Microsystem Inc所制定的Java虚拟机器指令集便是堆栈架构指令集的其中一例,Java程序语言追求的是一种不需要更动Java软件便能将以Java撰写的计算机软件执行于许多不同硬件处理平台上的环境。
另一种指令集包含在运作时使用缓存器架构方法来储存与操作数据项的指令集,英格兰(England)ARM limited of Cambridge的ARM处理器便是这类缓存器架构系统的一例。ARM指令是对储存在处理器的缓存器上的操作数(operand)执行数学运算、加载、储存或其它的运算(operation),其中操作数是被指定于指令中的缓存器字段(register field)。
有些被设计来执行缓存器架构指令的数据项处理系统也支持堆栈架构指令的执行,在这样的系统下,堆栈架构指令被转换成一连串动作,由处理器核心使用在缓存器库(register bank)或缓存器集合(resister set)的缓存器以执行这一连串的动作。那些操作所需的堆栈中的数据项是从堆栈储存到缓存器库的缓存器中使其可以被处理器核心所使用。典型地,在缓存器库内的一组缓存器会被配置用来持有从部分堆栈而来的堆栈数据项。复数个不同的对照状态(mapping states)可以被提供用来持有从堆栈不同部分而来的相应的堆栈操作数于缓存器库中不同的缓存器。对照状态可以依运算而改变,这些运算会在用于堆栈的该缓存器合中加入或移除堆栈操作数,是以提供功能类似堆栈的堆栈指针的方式来达成,这样方法所追求的是降低在缓存器架构的处理器提供类似堆栈储存(stack-likestorage)的处理负担。
在这样的系统中,堆栈中的堆栈项可以被视为具有固定的大小,并且在缓存器集中被配置用来持有堆栈操作数的每一个缓存器可以被安排来只对一相应的堆栈项储存数据项。然而处理器核心中专用于堆栈操作数储存的缓存器可能被限制于提供其它缓存器需求的功能,如堆栈架构指令译码成用来在缓存器架构的处理器执行运算的管理的功能,与像是在堆栈架构处理系统中可以找到的变量指针或常数区(constant pool)指针的控制变量模拟。也就是这些情形可能发生在要将缓存器集合中被持有的迭操作数移回缓存器(在堆栈中)以提供空间给新的堆栈操作数置入缓存器集合中。
现有系统中有些使用缓存器来实施部分内存堆栈,其在效率获益上超出了内存堆栈的传统使用,例如在缓存器间的数据项移动会快于缓存器与内存间的数据项移动。然而这些现有的施做方式遭遇到许多缺点,其中一个缺点显然是缓存器会不足以被堆栈填入。在堆栈缓存器被填入后,更进一步从堆栈的推入与推出会导致对外部内存的过度读写(每个推入与推出都要一次),造成内存流量增加与过度的电力消耗。尤其在可携式(如以电池运作)的装置,对电力消耗的尽可能的改进是很重要的需求。
发明内容
鉴于上述的发明背景中,为了符合产业上某些利益的需求,本发明提供一种用于模拟部分堆栈的装置与方法,可用以解决上述传统的堆栈未能达成的标的。
为达成某些优点与新颖特征,本发明说明模拟一堆栈的部分的方法与装置,本发明的某些具体实施例是管理模拟堆栈顶部的处理器缓存器与包含堆栈其它部分的内存间数据项的转移。一些具体实施例是利用一可变缓冲区,此可变缓冲区被配置于处理器缓存器与内存间做缓充之用。储存与可变缓冲区中实际的数据项量具有弹性,以可变缓冲区与处理器缓存器间的转移来维持有效地堆栈数据项填入处理器缓存器(假设堆栈数据项存在)。然而,可变缓冲区与内存间的转移可被配置在只有可变缓冲区超出可填入的容量时发生。
特别是如果可变缓冲区的堆栈数据项低于一低一预设量时,堆栈数据项将被从内存读出至可变缓冲区。并且如果缓冲区的堆栈数据项高于一第二预设量时,堆栈数据项被从可变缓冲区写至内存。
本发明的具体实施例并提供管理在处理缓存器与内存间堆栈数据项转移的方法。
附图说明
图1A是为在先前技术中管线处理器内一些阶段的功能区块示意图;
图1B是为在先前技术中以一些缓存器模拟堆栈内存的一部分的功能区块示意图;以及
图2是为在本发明的一具体实施例中相似于图1A的一管线处理器的功能区块示意图;以及
图3是类似图1B,为本发明的一具体实施例的运算示意图;以及
图4是为本发明的一具体实施例的上层功能运算流程示意图。主要部分的代表符号:
110指令检索单元
120译码单元
130执行单元
132产生中断信号的逻辑电路
134中断信号
136产生分支信号的逻辑电路
138分支信号
140内存存取单元
150缓存器回写单元
160缓存器文件
163时间点
162缓存器
164时间点
165时间点
166推入运算
167加运算
180内存
182堆栈位置
215缓存器与缓冲区间管理转移的逻辑电路
217其它缓存器
230检索单元
231编译码
232译码单元
234缓存器存取单元
236执行单元
238内存存取单元
240可变缓冲区
245缓冲区与内存间管理转移的逻辑电路
260缓存器文件
262堆栈模拟缓存器
263时间点
264时间点
265时间点
266时间点
267时间点
291推入运算
292推入运算
293推出运算
294推出运算
280内存
具体实施方式
为了能彻底地了解本发明,将在下列的描述中提出详尽的步骤及其组成。显然地,本发明的施行并未限定于相关的技艺者所熟习的特殊细节。另一方面,众所周知的组成或步骤并未描述于细节中,以避免造成本发明不必要的限制。本发明的较佳实施例会详细描述如下,然而除了这些详细描述之外,本发明还可以广泛地施行在其它的实施例中,且本发明的范围不受限定,其以之后的专利范围为准。
参考图1A所示,该图是用来描述一个用来执行指令的五阶段管线处理器架构的功能区块图,其它像是具有更多或更少管线阶段与/或不同配置的管线架构亦可以本发明的概念与教示来实施。在图1A的架构中举例了一指令检索单元110、一译码单元120、一执行单元130、一内存存取单元140、一缓存器回写单元150,除了这里所描述的之外,这些单元(或逻辑区块)是为熟悉该项技艺者所熟知,并不需要在此更进一步描述。
在现有技术中,指令检索单元110进行指令内存检索,此单元被配置来决定程序计数器(位于缓存器文件160中)的内容或值,用于循序(in-order)的指令执行,同样地也用于例外向量(exception vectors)、分支(branches)与返回(returns)。指令检索单元110也被配置来决定返回地址(return address)给所有例外(exceptions)与分支连结(branch-link)指令,并写入或储存此返回地址至缓存器文件160内的指定缓存器。指令检索的寻址可以是直接指向内存的实体地址,或使用实体或虚拟寻址的指令快取(instruction cache)。虽然缓存器文件160的内部架构并未显示,此缓存器文件160包含各样被处理器使用的缓存器。在现有技术中,这样的缓存器可以包含一般用途(general-purpose)缓存器或特殊用途(special-purpose)缓存器(像是状态缓存器、程序计数器或其它)。再者,缓存器文件160内的缓存器可以是编派成排(bankded)或非编派成排(unbanked)的。在现有技术中,一个非编派成排的缓存器会参照一个单一实体缓存器,此单一实体缓存器对运算的所有处理器模式都是有效的。典型地,非编派成排的缓存器皆为一般用途,在架构中不具有特殊用途。当然程序设计师必须要确保,在运算(或当处理分支例行程序(routine)或其它子程序(subroutine))的模式改变时,缓存器的内容被储存(如推入一个堆栈),和当从一被改变的操作模式中返回时被复原。
在此考量下,缓存器文件160可能包含复数个缓存器162(在本例中标示为R0至R7),复数个缓存器162伴随着复数个其它缓存器(未示于图标),这些缓存器负责传统处理器缓存器的功能与运算。缓存器162是被配置与被控制来模拟复数个(在本例中为8个)在内存堆栈最上层8个数据项(缓存器R0-R7),这些缓存器162的流程与运算将于图1B被提供。
译码单元120被运算来对由指令检索单元110送来的指令译码,并产生必要的控制信号给执行单元130,以进行个别指令的执行。译码单元120的特定架构为处理器相关,其一般运算与组成为熟悉相关技术者可推知。同样地,执行单元130的结构与运算也是处理器相关,为熟悉相关技术者可推知。一般而言,一个执行单元130包含进行指令运算的电路,该电路是以译码单元120所产生的控制信号来决定指令的执行。
如图1A所示,例中实施例的执行单元130可能包含逻辑电路132来产生一个或多个中断信号134,同样地,逻辑电路136产生一个或多个分支信号138。由名称可知,中断信号134代表一中断条件(如IRQ、FIRQ或其它)。同样地,分支信号138代表一个分支条件(也可以是代表从一分支返回),这些信号代表接连的乱序(out-of-order)指令。
内存存取单元140是外部数据项内存为响应被执行单元130所执行的指令所做的读写界面。当然,并非所有指令需要内存存取,但是对需要者而言,内存存取单元140为进行外部内存存取的必要条件。这样的内存存取可以是直接或通过由实体或虚拟寻址来透过一数据高速缓存来完成。
最后,缓存器回写单元150负责储存或写入(从指令执行所产生的)内容至缓存器文件160中(指定)的缓存器。例如,一指令的执行为将两一般用途缓存器的内容相加,并将相加的内容存入第三个一般用途缓存器。在这样的指令执行后,缓存器回写单元150使得加总所得到的值被写入第三个一般用途缓存器。
参考图1B,该图举例堆栈模拟缓存器162的运算,其中堆栈模拟缓存器162是关连于位于内存180中的传统堆栈。在图1B的例子中,假设有四个用来处理堆栈数据项的缓存器(R0至R3),在此考量下,这些缓存器模拟内存堆栈中最上面四个堆栈位置。在图标中另外举例了一内存180,其中一部分182可配置来处理复数个堆栈数据项,内存180中的该部分182是用以实施复数个堆栈位置,该部分182可以被动态配置来因应增加的堆栈数据项而增长。
图1B的图示中举例了在三个连续时间点(以数值163、164与165来标示)的堆栈模拟缓存器162与内存180。在第一个时间点163,堆栈模拟缓存器162包含数值F、E、D与C。要注意的是,在这些个别缓存器中的值是以字母代表,与例子中的实际内容或数值无关。内存180中的堆栈部分182包含两值(B与A),分别储存在堆栈位置S0与S1中。习惯上,四个堆栈模拟缓存器162中缓存器R0被指定为堆栈位置的顶端。同样地,堆栈位置S0被指定为内存180中缓存器位置的顶端,并且在需要额外堆栈位置时,额外堆栈位置被加入并标示为S1、S2…等等。因此,在163所标示的时间点,“A”为存在堆栈中最旧的值(或第一个值)。当每一个后续值(B、C…等等)被推入堆栈时,A值被连续地往堆栈深处推下。例如,当A内容最先被推入堆栈时,其被推入堆栈模拟缓存器R0,在同时,没有有效的堆栈数据项会被包含于缓存器R1、R2或R3,也没有任何有效的堆栈数据项存在于内存180中。
以数字164标示的时间点举例了一个PUSH G运算在堆栈模拟缓存器与内存堆栈的相关部分182间的影响。因为每一个堆栈模拟缓存器162都个别被有效堆栈数据项所占据,最旧项目(在本例中为C)被从堆栈模拟缓存器162移至内存180的堆栈部分182,在这样考量下,数值C被移入内存堆栈的顶端位置。先前分别占据堆栈模拟缓存器R2、R1、R0的堆栈数据项D、E与F会被分别移至堆栈模拟缓存器R3、R2、R1,而新的堆栈数据项(G)接下来被移入堆栈模拟缓存器R0,来当作堆栈的顶端位置。
参考数值165标示相应于一加法运算167的堆栈模拟缓存器与堆栈部分182的内容。在现有技术中,一加法运算是以将堆栈位置最上方两个位置相加,并且将结果存于堆栈顶端。因此,相应于加法运算167,堆栈模拟缓存器R0会具有G+F的内容,如此便开放了堆栈模拟缓存器R1(例如使其能够持有新数据项)。接下来,在缓存器R1的下的堆栈内容便会向上移动,因此缓存器R2与R3的内容会被分别移动至R1与R2。同样地,内存堆栈180的堆栈部分182的顶端会被移动至堆栈模拟缓存器R3,每一个在内存180的堆栈部分182中后面的堆栈数据项也被往上移动。
显然地,堆栈模拟缓存器与内存的堆栈部分182有效地组合成一动态堆栈,然而在堆栈模拟缓存器中数据项的移动与在堆栈模拟缓存器162与内存180间数据项的常态移动(当堆栈模拟缓存器装满时)会导致处理器频宽的超出与不希望的内存180读写所产生的电力消耗。
参照图2,其为相似于图1A的本发明的一具体实施例的功能区块示意图。图2的具体实施例举例了相关于传统管线阶段或单元,像是一检索单元230、一译码器232、缓存器存取单元234、一执行阶段236与内存存取阶段238。显然地,本发明应可施行于其它传统管线架构。图2并举例了检索单元230所检索的编译码231,编译码231由此开始在各管线阶段的处理。典型地,编译码231被写入并被编译来执行于一特定的硬件架构之上。在本具体实施例的一较佳例子中,这样的硬件架构包含一堆栈架构处理器的架构。本发明在此所描述的特征是运算于这样的码,像是被编译成与本发明的此特定架构非相关(independent)的编译码231。
如图1A所描述,一缓存器文件160典型地包含一缓存器架构处理器的一部分,这样的缓存器文件260亦被举例于图2的具体实施例中。缓存器文件260中的缓存器包含堆栈模拟缓存器262与其它缓存器217,这些缓存器是惯见于缓存器文件260中。在一具体实施例中,更进一步包含例中四个堆栈模拟缓存器262,然而与本发明的领域与精神一致的额外或较少缓存器可以被实行这些缓存器的堆栈模拟功能。
本具体实施例的一中心特征包含一可变缓冲区240的运用,此可变缓冲区240是被设置于堆栈模拟缓存器262与内存间280。如图1B的现有技术中相关的描述,堆栈模拟缓存器162与内存180的堆栈部分182共同合作来定义了一内存堆栈。以类似的方式,堆栈模拟缓存器262与内存280的堆栈部分也组合来形成图2的系统的一工作堆栈。再者,可变缓冲区240提供复数个堆栈位置给额外的堆栈数据项,堆栈数据项在堆栈模拟缓存器262与内存280的堆栈部分间经由可变缓冲区240的管理提供了先前技术系统的系统效能与较低电力消耗的改进。为这目的,本发明的一具体实施例更包含逻辑电路215,逻辑电路215是用以管理堆栈数据项在堆栈模拟缓存器262与可变缓冲区240间的转移。同样地,逻辑电路245可被提供用来管理可变缓冲区240与内存280的堆栈部分间堆栈数据项的转移的管理。在本例的具体实施例中,例中可变缓冲区240与逻辑电路215是为执行单元236的一部分,与例中逻辑电路245分开。在另一具体实施例(未被特别举例)中,可变缓冲区240、逻辑电路215与逻辑电路245是全施做为执行单元236的一部分。在另一具体实施例中(未被特别举例),这些组件可以被实施在处理器管线的其它区域,再者,这些组件也可以被实施于非管线架构。
在一具体实施例中,可变缓冲区240被设定大小能储存八个堆栈数据项,“可变”一词是用以描述缓冲区240,在缓冲区内所包含的堆栈数据项的数目为变动,其变动是相依于数据项是否推入至堆栈,或从堆栈推出。在这考量下,可变缓冲区240被设置来识别或利用在JAVA堆栈中组件的暂时位置。在此考量下,以堆栈架构编写或编译的码(如JAVA)在被写入时会对在堆栈中相邻的数据项做经常性地参照。例如一个加指令仅对堆栈的最上面二个值相加并将结果储存在堆栈的最上面。相关于图1B,堆栈模拟缓存器一旦满时,接下来的运算会造成堆栈模拟缓存器与内存间过度的数据项移动,使得不希望的过度内存存取量产生。这样的过度内存存取造成电力被内存过度地消耗,这是特别不希望发生在可携式电子装置上的,如行动电话、个人数字助理(PDA;personal digital assistants)或其它以电池运作的装置。
因此,本发明一具体实施例是使用一可变缓冲区240,其大小能够持有八个堆栈数据项,在可变缓冲区240装满前(或已经超出某一门坎限值),堆栈数据项并不会从可变缓冲区推至内存280的堆栈部分。逻辑电路245用以运算来管理缓冲区240,除非四个(或其它预设量)或更少的堆栈数据项存在于目前的可变缓冲区240,否则堆栈数据项不会从内存280的堆栈部分推出并转移到可变缓冲区240。这样的可变缓冲区相当地小,在实作上不会占到大量的空间,同时跟先前技术比较起来效能有相当地改善(尤其在降低电力消耗方面)。
显然地,“用于管理转移的逻辑电路”(215与245)会较偏好管理数据项的地址,使得标准编译码231可以假设为是以一般的堆栈管理(在堆栈缓存器之外)。然而,这样的寻址可以被逻辑电路215与245修改来转译成缓存器识别(register identifiers)与/或被修正的地址(在缓冲区内储存的堆栈数据项的偏移量(offset)架构下)。
参照图3,本发明的一具体实施例是举例于其中。图3是类似图1B,在其中显示了在堆栈模拟缓存器262、可变缓冲区240与内存280的堆栈部分282中的堆栈内容,这些堆栈内容是分别位于数个连续的时间点(分别以数值263、264、265、266与267来标示)。假设在第一个时间点263,内存280的堆栈部分282包含数据项A与B,缓冲区储存位置B5至B0包含堆栈数据项C、D、E、F、G与H,堆栈模拟缓存器262包含堆栈数据项I、J、K与L。在这样的配置下,堆栈数据项L位于堆栈顶端,并且堆栈数据项A位于堆栈底端(如堆栈中最旧的组件)。如所示,在时间点263时,可变缓冲区240底部两个位置B6与B7尚可使用(或尚未被有效堆栈数据项所使用)。如果两个连续的推入运算291(PUSH M与PUSH N)被执行时,整个堆栈将会如数值264所标示的时间点所示。
在这考量下,堆栈数据项M与N会被推入堆栈顶端,且位于堆栈模拟缓存器262中,而堆栈的其余内容会被往下推。由于有两个开放或未用位置为于可变缓冲区,则位在可变缓冲区240中最旧的堆栈数据项(C与D)会被移下到可变缓冲区240底部的缓存器B7与B6,其它的内容也会被适当地向下移动。先前存在堆栈模拟缓存器262的缓存器R3与R2中的数据项I与J会被转变至可变缓冲区240的顶端两个位置B1与B0。然而值得注意的是,两项目被推入堆栈中,内存280却没有任何的写入,因此节省了原本要转移至内存280的电力消耗。
在图3揭示的具体实施例的运算是为了说明堆栈数据项在堆栈模拟缓存器与可变深度缓冲区间被以移动方式移动时的操作,然而,显然地数据项(在实际上)可以是以指标指向数据项来有效地移动,而不是真的从缓存器至缓存器或从位置至位置来搬动数据项。这样指标的管理可以用很多种方式来实作,其中一种例子被描述在另一个美国申请案中,其序号为10/827,662,并且申请日期为2004年4月19日,该内容在此被参照。
然而当可变缓冲区240满了时,接下来的推入292(PUSH)会导致堆栈数据项被有效地如涟漪般影响堆栈模拟缓存器262与可变缓冲区240,使用一堆栈数据项C被写入内存280。参照图示中265所标示,显示了在PUSH O运算后的状况,在这考量下,O的数据项内容被推入堆栈顶端(进入堆栈模拟缓存器中的缓存器R0)。然而在转移数据项O进入缓存器之前,其它的数据项必需被移动以空出空间给该数据项。如此导致数据项值C被从可变缓冲区240的底部转移至内存280的堆栈部分282的顶端。如图标,堆栈部分282可如任何传统堆栈随意地延展或增长至内存280中。堆栈数据项K被从堆栈模拟缓存器的R3位置转移到可变缓冲区B0位置,而可变缓冲区中其它的内容依此下移。
假设有三个连续的推出(POP)运算293被执行,包含堆栈顶端的堆栈模拟缓存器262顶端三个项目会被移出,在堆栈模拟缓存器262与可变缓冲区240中的数据项则被往上移动至这些堆栈位置。这会使得数据项K、J与I被从可变缓冲区240转移至堆栈模拟缓存器R1、R2与R3,如此可变缓冲区240底部三个位置(B5、B6与B7)便没有被用到。
如上所述,在本具体实施例中,只要超过四个项目存在可变缓冲区240中,则内存280的堆栈部分282的堆栈内容便不送至可变缓冲区240。因此,堆栈数据项C、B与A仍分别在堆栈位置S1、S2与S3。然而,如果另一个推出(POP)运算294被执行时,数据项L会被从堆栈模拟缓存器的R0位置移出,并且缓存器R1、R2与R3中的内容K、J与L会被往上移动。可变缓冲区240顶端的内容H则会被转移至堆栈模拟缓存器262的R3位置,使得可变缓冲区240中只有四个堆栈数据项,这四个项目为G、F、E与D。因为只有四个项目在可变缓冲区中,根据本发明的一具体实施例,在内存280的堆栈部分282顶端的堆栈数据项C被检索并移至可变缓冲区240的B4位置。
图3所示的运算显然地仅为可实施用来与本发明的领域与精神一致的数种具体实施例中的一种,例如可变缓冲区240与内存280间的数据项传输不一定一次一个项目(如字节或字符),可变缓冲区240与内存280间的数据项传输可以是一群,在此考量下,两个、四个、甚至更多的数据项可以一次传输。更进一步,可便缓冲区240可与图3不同尺寸如可便缓冲区240的尺寸可存放十六个堆栈数据项逻辑电路245(图2)可被配置来使得12个或更多的堆栈数据项储存在可变缓冲区中,在收到一个推入运算时,一次将四个堆栈数据项传输至内存280的堆栈部分282,并且相对于推出运算,一次将四个堆栈数据项从内存280的堆栈部分282读出至缓冲区240中四个可用的位置。
另外需要注意的是,在缓冲区240与内存280间的转移较偏好在关键路径(critical path)的外,也就是当数据项被处理器从堆栈推出或推入时,能够让在初始处理(initial transaction)上要尽量可能的快(例如当数据项由处理器管线至堆栈或由堆栈至处理器管线被处理出去),使得管线运算能够持续。参照图2,在可变缓冲区240与内存280的数据项处理可能发生在其它时候,使得在两个装置间的处理,并未中断管线的数据项流通。
参考图4,其举例了本发明的一具体实施例于上层运算的流程示意图。相应于一堆栈运算302,一方法可决定涉及数据项推入堆栈或数据项推出堆栈的运算304。如果运算涉及将数据项推出堆栈,本具体实施例可立刻从堆栈顶端的堆栈缓存器R0推出或拉出一堆栈数据项,堆栈缓存器R0为内存顶端位置(步骤306)。紧接着在步骤306之后,其余堆栈模拟缓存器的内容会朝上被移动一个位置,之后的运算被进行来决定目前是否有堆栈数据项在缓冲区240中(步骤308)。如果没有,便没有更进一步的运算需要被执行。然而,如果在缓冲区240中有堆栈数据项,则缓冲区240顶端项目被移入可用的堆栈模拟缓存器R3(步骤310),这样会让堆栈模拟缓存器尽可能地随时都在装满的状态,使得堆栈模拟缓存器的运用达到最大。接下来的运算是对维持在缓冲区240内堆栈数据项的数量进行最佳化,在这考量下,于本发明的一具体实施例中,若缓冲区240中少于四个项目时,则在内存的堆栈部分中有效的堆栈数据项可以被移至缓冲区240。因此,该方法判断是否缓冲区内的堆栈数据项是否少于四个(步骤312),如果不是,则不需要进行下一步。然而如果在缓冲区内的项目少于五个,则该方法判断是否在内存280的堆栈部分282中目前是否有堆栈数据项(步骤314)。如果有,则一个(或多个)堆栈数据项会被从内存280被移入缓冲区240中(步骤315)。
在步骤304的评估中所判断堆栈运算为推入运算时,一堆栈数据项会被推入堆栈中,然而在推入一个项目进入堆栈模拟缓存器前,必需先将空间挪出来(如果堆栈模拟器装满了时)。因此在一具体实施例中,该方法对堆栈模拟缓存器是否全满做出判断(步骤320),如果没有装满,该方法会立刻将新堆栈数据项推入在堆栈模拟缓存器中的堆栈顶端(步骤322)。当然,其余堆栈模拟缓存器的内容在数据项被推入堆栈位置顶端时不会被覆盖。然而如果步骤320判断出堆栈模拟缓存器是完全被有效堆栈数据项所占据,则在堆栈模拟缓存器底部位置的堆栈数据项会被移至可变缓冲器240,以空出空间来让新数据项被推入堆栈模拟缓存器。然而,在数据项从堆栈模拟缓存器移至缓冲区240前,该方法会先判断缓冲区240中是否有可用空间。在此考量下,该方法可评估来判断缓冲区是否是满的(如目前是否有8个项目存在缓冲区240中)(步骤325)。如果没有,则在堆栈模拟缓存器底部位置中的项目会被移至可变缓冲区240内的一个可用位置(未显示于图标)。
在此考量下,如图3所示,任何存在于可变缓冲区240的项目会被往下移动一个位置,以空出在缓冲区240的最顶端的可用空间,来接收从堆栈模拟缓存器R3传送的数据项。如果步骤325判断出可变缓冲区事实上是满的,缓冲区最底端项目会被移到内存280的堆栈部分282(步骤327)。在将数据项移入内存后,缓冲区中剩下的数据项会被移动,以空出空间让来自堆栈模拟缓存器的数据项移入缓冲区240。接下来,在缓存器R3的数据项会被移入可变缓冲区的缓冲区位置B0(步骤328)。再接下来,由于堆栈模拟缓存器给新数据项的可用空间已空出,应该被推入堆栈的新数据项便会被推入堆栈模拟缓存器(步骤322)。
虽然上述具体实施例所描述的是一些在新堆栈数据项分别在被推入或推出堆栈而向下或向上有效移动堆栈数据项的具体实施例,凡与本发明的领域与精神一致的其它方式亦可依此施行。例如,除了在堆栈模拟缓存器的不同缓存器移动堆栈数据项,或在可变缓冲区240的不同位置移动堆栈数据项外,也可以用指针来指向一连串的位置以代表最高(或最低)的一些堆栈位置。这样的实作会避免在缓存器间或其它数据项位置间做不必要的数据项移动,在时间上较有效率。在此考量下,在图3所示的具体实施例与其中的描述是为了帮助得自本发明的具体实施例的相关优点的呈现,其中本发明的具体实施例是通过由可变缓冲区240的运作来达成。
显然地,依照上面实施例中的描述,本发明可能有许多的修正与差异。因此需要在其附加的权利要求项的范围内加以理解,除了上述详细的描述外,本发明还可以广泛地在其它的实施例中施行。上述仅为本发明的较佳实施例而已,并非用以限定本发明的申请专利范围;凡其它未脱离本发明所揭示的精神下所完成的等效改变或修饰,均应包含在下述申请专利范围内。
Claims (16)
1.一处理器,其特征在于该处理器包含:
复数个缓存器,该复数个缓存器被配置来模拟一内存堆栈的一顶端部分;
一缓冲区;
一第一逻辑电路,该第一逻辑电路被配置来管理该复数个缓存器与该缓冲区间的转移;以及
一第二逻辑电路,该第二逻辑电路被配置来管理该缓冲区与一内存间的转移。
2.如权利要求1所述的处理器,其特征在于,所述该复数个暂存器的任一未包含有效的堆栈数据项并且该缓冲区包含至少一有效堆栈数据项时,数据会从缓冲区被转移至该复数个缓存器。
3.如权利要求1所述的处理器,其特征在于,所述该缓冲区的有效堆栈数据项超出一第一预设数量时,数据是从该缓冲区被转移至该内存,且在该缓冲区的有效堆栈数据项小于一第二预设数量时并且在该内存中含有有效堆栈数据项时,数据是从该内存被转移至该缓冲区,其中该第二预设数量是小于该第一预设数量。
4.一系统,其特征在于,该系统包含:
一处理器与一内存;
一模拟逻辑电路,该模拟逻辑电路是被配置以该处理器的复数个缓存器模拟一内存堆栈的一顶端部分;
一缓冲区;以及
一转移逻辑电路,该转移逻辑电路是用来管理该复数个缓存器与该内存的一部分间的数据转移,该内存的该部分是被配置来储存该内存堆栈的其它部分。
5.如权利要求4所述的系统,其特征在于,所述该转移逻辑电路储存一可变量量的堆栈数据项于该缓冲区中。
6.如权利要求4所述的系统,其特征在于,所述上述的缓冲区中的堆栈数据项超出一第一预设数量时,该转移逻辑电路为响应一推入运算,将一堆栈数据项从该缓冲区转移至该内存。
7.如权利要求6所述的系统,其特征在于,所述上述的转移逻辑电路的功能,至少包含下列两种功能中的某一种:
为响应该推入运算,将一堆栈数据项从一处理器缓存器转移至该缓冲区;以及
在该复数个缓存器中每一个都被有效堆栈数据项所使用时,为响应推入运算而将一堆栈数据项从该复数个缓存器的一转移至该缓冲区。
8.如权利要求7所述的系统,其特征在于,所述的转移逻辑电路是在一个新的堆栈数据项被移入该处理器缓存器前,将堆栈数据从该处理器缓存器转移至该缓冲区。
9.如权利要求4所述的系统,其特征在于,所述的冲区中的堆栈数据项低于一第二预设数量时,该转移逻辑电路为响应一推出运算,将一堆栈数据项从该内存转移至该缓冲区。
10.如权利要求9所述的系统,其特征在于,所述转移逻辑电路的功能至少包含下列两种功能之一:
只有在至少一有效堆栈数据项在该缓冲区时,为响应推出运算而将一堆栈数据项从该缓冲区转移至该复数个缓存器的一;以及
在一个新的堆栈数据项从该内存被移入该缓冲区的前,将堆栈数据项从该缓冲区转移至该处理器缓存器。
11.一种用于一内存与一处理器间管理堆栈转移的方法,其特征在于,包含:
使用复数个处理器缓存器模拟一内存堆栈的一顶端部分;以及
实作一深度可变的缓存器来管理在该复数个处理器缓存器与该内存间的转移。
12.如权利要求11所述的方法,其特征在于,更包含在回应一推入运算时:
在该深度可变的缓冲区中的堆栈数据项超出一第一预设数量时,自该深度可变缓冲区转移一堆栈数据项至该内存;以及
从该复数个缓存器的一缓存器转移一堆栈数据项至该深度可变缓冲区。
13.如权利要求11所述的方法,其特征在于,更包含在回应一推出运算时:
从该深度可变缓冲区转移一堆栈数据项至该复数个缓存器的一缓存器;以及
在该可变缓冲区中的堆栈数据项的数量低于一第二预设数量时,从该内存转移一堆栈数据项至该深度可变缓冲区。
14.一种处理一推入运算的方法,其特征在于,包含:
使用复数个处理器缓存器模拟一内存堆栈的一顶端部分;
当位于一中介内存缓冲区的堆栈数据项数量超出一预设数量时,将该中介内存缓冲区的内容转移至内存的一堆栈位置;
转移该复数个处理器缓存器的一的内容至该中介内存缓冲区;并且
将被推入至一堆栈的一数值移至该复数个缓存器的一以响应推入运算,其中该复数个缓存器的一是尚未包含一有效堆栈数据项。
15.如权利要求14所述的方法,其特征在于,更包含在从一处理器缓存器转移堆栈数据项至中介缓冲区时,检核该处理器缓存器中所含的一堆栈数据项是否为无效。
16.一种处理一推出运算的方法,其特征在于,包含:
使用复数个处理器缓存器模拟一内存堆栈的一顶端部分;
从该复数个缓存器的一移出一个要从该内存堆栈推出的数值以响应一推出运算;
转移一中介内存缓冲区的内容至为响应该推出运算而被移出数值的处理器缓存器;以及
当位于一中介内存缓冲区的堆栈数据项数量少于一预设数量时,将该内存的一堆栈位置的内容转移至该中介内存缓冲区。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/851,929 US7350059B2 (en) | 2004-05-21 | 2004-05-21 | Managing stack transfers in a register-based processor |
US10/851,929 | 2004-05-21 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1684031A true CN1684031A (zh) | 2005-10-19 |
CN100489769C CN100489769C (zh) | 2009-05-20 |
Family
ID=35263392
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005100712346A Active CN100489769C (zh) | 2004-05-21 | 2005-05-13 | 在缓存器架构处理器中管理堆栈转移的装置与方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7350059B2 (zh) |
CN (1) | CN100489769C (zh) |
TW (1) | TWI295786B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107832236A (zh) * | 2017-10-24 | 2018-03-23 | 记忆科技(深圳)有限公司 | 一种提高固态硬盘写性能的方法 |
CN114756287A (zh) * | 2022-06-14 | 2022-07-15 | 飞腾信息技术有限公司 | 一种重排序缓冲区的数据处理方法、装置及存储介质 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060095675A1 (en) * | 2004-08-23 | 2006-05-04 | Rongzhen Yang | Three stage hybrid stack model |
US7577795B2 (en) * | 2006-01-25 | 2009-08-18 | International Business Machines Corporation | Disowning cache entries on aging out of the entry |
TWI461909B (zh) * | 2007-08-31 | 2014-11-21 | Thomson Licensing | 大量儲存系統及在其中之資料轉移方法 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0069525B1 (en) * | 1981-06-30 | 1986-04-16 | Fujitsu Limited | Data processing system |
US5440749A (en) * | 1989-08-03 | 1995-08-08 | Nanotronics Corporation | High performance, low cost microprocessor architecture |
US5551054A (en) * | 1991-11-19 | 1996-08-27 | Adaptec, Inc. | Page mode buffer controller for transferring Nb byte pages between a host and buffer memory without interruption except for refresh |
EP0976030B1 (en) * | 1996-01-24 | 2008-07-02 | Sun Microsystems, Inc. | Instruction folding for a stack-based machine |
US6038643A (en) * | 1996-01-24 | 2000-03-14 | Sun Microsystems, Inc. | Stack management unit and method for a processor having a stack |
US5953741A (en) * | 1996-11-27 | 1999-09-14 | Vlsi Technology, Inc. | Stack cache for stack-based processor and method thereof |
US6289418B1 (en) * | 1997-03-31 | 2001-09-11 | Sun Microsystems, Inc. | Address pipelined stack caching method |
US6363473B1 (en) * | 1999-04-01 | 2002-03-26 | Compaq Information Technologies Group, L.P. | Simulated memory stack in a stackless environment |
US7742504B2 (en) * | 2002-01-24 | 2010-06-22 | University Of Southern California | Continuous media system |
JP2003271448A (ja) * | 2002-03-18 | 2003-09-26 | Fujitsu Ltd | スタック管理方法及び情報処理装置 |
US6978358B2 (en) * | 2002-04-02 | 2005-12-20 | Arm Limited | Executing stack-based instructions within a data processing apparatus arranged to apply operations to data items stored in registers |
EP1391821A3 (en) * | 2002-07-31 | 2007-06-06 | Texas Instruments Inc. | A multi processor computing system having a java stack machine and a risc based processor |
US7134000B2 (en) * | 2003-05-21 | 2006-11-07 | Analog Devices, Inc. | Methods and apparatus for instruction alignment including current instruction pointer logic responsive to instruction length information |
-
2004
- 2004-05-21 US US10/851,929 patent/US7350059B2/en active Active
-
2005
- 2005-05-13 CN CNB2005100712346A patent/CN100489769C/zh active Active
- 2005-05-13 TW TW094115505A patent/TWI295786B/zh active
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107832236A (zh) * | 2017-10-24 | 2018-03-23 | 记忆科技(深圳)有限公司 | 一种提高固态硬盘写性能的方法 |
CN107832236B (zh) * | 2017-10-24 | 2021-08-03 | 记忆科技(深圳)有限公司 | 一种提高固态硬盘写性能的方法 |
CN114756287A (zh) * | 2022-06-14 | 2022-07-15 | 飞腾信息技术有限公司 | 一种重排序缓冲区的数据处理方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
TW200529068A (en) | 2005-09-01 |
CN100489769C (zh) | 2009-05-20 |
US20050262303A1 (en) | 2005-11-24 |
TWI295786B (en) | 2008-04-11 |
US7350059B2 (en) | 2008-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9201807B2 (en) | Method and system for managing virtual memory | |
US7450131B2 (en) | Memory layout for re-ordering instructions using pointers | |
CN100480997C (zh) | 选择可实质同时处理的多重线程的系统与方法 | |
CN104951296A (zh) | 允许一种架构的代码模块使用另一种架构的库模块的架构间兼容模块 | |
Vijaykumar et al. | A case for richer cross-layer abstractions: Bridging the semantic gap with expressive memory | |
US20160117257A1 (en) | Hardware-based array compression | |
CN107077334A (zh) | 从多维阵列预取多维元素块的硬件装置和方法 | |
EP0767424A2 (en) | Processor with compiler-allocated, variable length intermediate storage | |
CN1468399A (zh) | 使用微代码引擎的java硬件加速器 | |
CN101449239A (zh) | 具有算术及初等函数单元的图形处理器 | |
JPH025139A (ja) | シミユレーシヨン方法 | |
CN101030192A (zh) | 管理处理器的寄存器的方法和系统 | |
EP2542973A1 (en) | Gpu support for garbage collection | |
KR20080075175A (ko) | 셰도우 레지스터들을 사용하여 스택 레지스터 파일을확장하는 방법 및 장치 | |
CN109508206A (zh) | 向较宽的寄存器进行依赖于模式的部分宽度加载的处理器、方法和系统 | |
CN1684031A (zh) | 在缓存器架构处理器中管理堆栈转移的装置与方法 | |
CN1862495A (zh) | 用于在执行被转换指令时维持环境的方法和装置 | |
CN101652747A (zh) | 并行dll树初始化 | |
CN101847096B (zh) | 包含栈变量函数的优化方法 | |
US20040024989A1 (en) | Mixed stack-based RISC processor | |
KR100809293B1 (ko) | 가상 머신에서 스택을 관리하는 장치 및 그 방법 | |
US7035977B2 (en) | Method and system for stack-caching method frames | |
CN1506808A (zh) | 用于在调试集成可执行代码时映射调试信息的方法和装置 | |
EP1807767A1 (en) | A virtual address cache and method for sharing data stored in a virtual address cache | |
WO2002037272A2 (en) | Improved frameworks for invoking methods in virtual machines |
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 |