堆栈管理系统及方法

文档序号:6557969阅读:329来源:国知局
专利名称:堆栈管理系统及方法
技术领域
本发明是有关于堆栈管理,特别有关于一种具有主动交换机制的堆栈管理系统及方法。
背景技术
在计算机科学中,堆栈机器是一种常见的计算模型,其内存是以堆栈的型态来进行存取。堆栈机器应用于实作或仿真计算机操作。对于堆栈机器,如果要切换至一执行绪(Thread)或呼叫一个方法,必须提供一个相应的堆栈。而在堆栈中,指令的储存与项目的取出都必须依据放入/取出规则(Push/Pop Rule)来进行。也就是,一个项目被放入堆栈的最上方,且由堆栈的最上方取出项目,并将剩余的项目往上移动一个位准(Level)。
对于堆栈机器而言,堆栈存取的效率是非常重要的。举例来说,Java虚拟机器是一个以堆栈为基础的机器。一个Java堆栈包括堆栈数据、区域变量与虚拟机器内部数据。由于堆栈所需的内存空间非常大,堆栈通常是储存于具有较低存取速率的正常内存中。然而,所有Java虚拟机器的计算都是在堆栈上进行。因此,在较低存取速率的正常内存中储存堆栈将会严重降低Java虚拟机器的处理效率。
目前已经有多种公知机制可以用来加速堆栈的存取。Harlan McGhan,MikeO’Connor提出一种Java字节码(Bytecode)(Java机器指令)的直接执行引擎,称作PicoJava。PicoJava配备一个圆形的缓冲缓存器作为堆栈缓存器,其中堆栈缓存器的底部与堆栈缓存器的顶部相连。新的项目将会被放入堆栈的上方,使得堆栈变大,且项目可以由堆栈的上方取出,使得堆栈变小。如果堆栈持续成长且放入堆栈缓存器的项目数目超过一高水位标记值时,则会执行一溢出(Spill)机制,其中最老的项目将会被移至其它的堆栈内存。如果项目由堆栈中取出且堆栈缓存器中的项目数目掉到一低水位标记值之下时,则会执行一填满(Fill)机制,其中堆栈内存中的项目将被复制至堆栈缓存器中。另外,ARMJazelle科技提出一种架构,其额外配备最多4个在缓存器中维护的堆栈组件,用以将内存的存取降到最少。其中,堆栈的溢出与填满都是由硬件来自动处理。在PicoJava与Jazelle科技中,必须提供与使用额外的硬件。
此外,一种公知的软件方法可以用来改善堆栈机器的处理效率,其中JIT(Just-In-Time,实时)或AOT(Ahead-Of-Time,事先)编译器可以通过将字节码转译为机器码,从而将复杂的堆栈操作转换为中央处理单元内的简单的缓存器操作。然而,JIT或AOT编译器编译Java程序来产生机器码时将会增加内存的使用。

发明内容
本发明的目的在于提供一种堆栈管理系统及方法。
本发明的堆栈管理系统,包括一第一内存;一第二内存;以及一控制器,耦接于第一与第二内存之间,该控制器由第一内存储存的多个堆栈区块中识别一第一堆栈区块,其中该第一堆栈区块包括含有至少一指针的数据,在该第一堆栈区块被识别之后,所述的控制器将该第一堆栈区块由第一内存移动至第二内存,且调整原先指向于该第一堆栈区块的指针来指向第二内存中的一新地址。
本发明的堆栈管理系统,更包括至少一执行绪,用以存取所述多个堆栈区块,每一堆栈区块记录被执行绪存取的一时间期间,控制器更比对第一内存中相应每一堆栈区块所记录的所述时间期间,从而识别出第一堆栈区块,其中该第一堆栈区块具有最长的所述时间期间。
所述第一堆栈区块更包括堆栈数据、区域变量或虚拟机器内部数据。
所述指针指向第一堆栈区块、第一堆栈区块的堆栈数据、第一堆栈区块的区域变量、第一堆栈区块的虚拟机器内部数据或其它的堆栈区块。
所述控制器更在第一堆栈区块移动至第二内存之前,暂停执行绪存取第一堆栈区块。
所述控制器更在指针调整之后,恢复执行绪。
所述执行绪包括一垃圾收集器(Garage Collector)或一Java执行绪。
所述第一内存为一外部内存,且第二内存为一内部存储器。
本发明的堆栈管理方法,使用于包括一第一内存与一第二内存的系统。首先,由第一内存中储存的多个堆栈区块中识别一第一堆栈区块,其中第一堆栈区块是第一内存中系统最常存取的堆栈区块。之后,暂停第一堆栈区块的存取操作,且将第一堆栈区块由第一内存移动至第二内存。在移动之后,系统可以存取在第二内存中的第一堆栈区块。
所述第一堆栈区块的移动步骤更包括找出至少一指针,其原来指向第一内存中第一堆栈区块的一原始地址;以及调整指针来指向第二内存中的一新地址。
所述调整步骤更包括将一位移加至指针的原始地址中。
所述第一内存为一外部内存,且第二内存为一内部存储器。
本发明的另一种堆栈管理方法,使用于包括一第一内存与一第二内存的系统。首先,由第一内存中储存的多个堆栈区块中识别一第一堆栈区块,其中第一堆栈区块包括含有至少一指针的数据。之后,将第一堆栈区块由第一内存移动至第二内存,且调整原先指向于第一堆栈区块的指针来指向第二内存中的一新地址。
所述系统更包括至少一执行绪,用以存取所述多个堆栈区块,每一堆栈区块记录被执行绪存取的一时间期间,其中所述识别步骤更比对第一内存中相应每一堆栈区块所记录的时间期间,从而识别出第一堆栈区块,其中第一堆栈区块具有最长的所述时间期间。
所述第一堆栈区块更包括堆栈数据、区域变量或虚拟机器内部数据。
所述指针指向第一堆栈区块、第一堆栈区块的堆栈数据、第一堆栈区块的区域变量、第一堆栈区块的虚拟机器内部数据或其它的堆栈区块。
所述的堆栈管理方法,更包括在第一堆栈区块移动至第二内存之前,暂停执行绪存取第一堆栈区块。
所述的堆栈管理方法,更包括在指针调整之后,恢复执行绪。
所述执行绪包括一垃圾收集器或一Java执行绪。
所述第二内存的存取速度快于第一内存。
本发明上述方法可以通过程序代码方式收录于实体媒体中。当程序代码被机器加载且执行时,机器变成用以实行本发明的装置。


图1为一示意图是显示依据本发明实施例的堆栈管理系统。
图2为一示意图是显示执行绪与堆栈区块间的关系。
图3为一示意图是显示依据本发明实施例的堆栈区块。
图4为一示意图是显示依据本发明实施例的堆栈区块。
图5为一流程图是显示依据本发明实施例的堆栈管理方法。
图6为一示意图是显示依据本发明实施例的经过移动,但尚未进行指针调整的堆栈区块。
图7为一示意图是显示依据本发明实施例的经过移动,且进行指针调整的堆栈区块。
100 堆栈管理系统110 第一内存120 第二内存130 虚拟机器141、142、221、222、223、310、320、400 堆栈区块220 堆栈210、330 执行绪
311、411、421 堆栈数据312、412、422 区域变量313 虚拟机器内部数据410、420 堆栈帧413、423 前一堆栈指针414、424 前一帧指针415、425 堆栈指针416、426 其它虚拟机器数据S510、S520、...、S560 步骤具体实施方式
图1显示依据本发明实施例的堆栈管理系统。堆栈管理系统100可以是一个数据处理系统,其包括一第一内存110、一第二内存120、与一处理器(未显示)用以执行一虚拟机器130,如一Java虚拟机器。在一些实施例中,数据处理系统可以是一嵌入式系统,如移动台(Mobile Station)。第一内存110与第二内存120分别储存多个堆栈区块(141与142)。在此实施例中,第一内存110可以是一外部内存,且第二内存120可以是一个内部存储器。换言之,第二内存120的存取速度将快于第一内存110。然而,第二内存120的容量可能是受限的,且只有既定数目的堆栈区块可以储存在第二内存120中,而其它的堆栈区块将会储存于第一内存110中。在本发明中,如果第一内存110中有较常存取的堆栈区块,堆栈管理系统100将会先辨别出这些较常存取的堆栈区块,之后再将她们移动至第二内存120中。因此,较常存取的堆栈区块将可以更有效率的进行存取。在此实施例中,为了要识别这些较常存取的堆栈区块,虚拟机器130将会剖绘(Profile)第一内存110中的所有堆栈区块。
堆栈管理系统100可以处理存取堆栈区块的至少一个执行绪。在此实施例中,堆栈管理系统100的虚拟机器130可以同时处理多个执行绪(内容(Context))。图2显示执行绪与堆栈区块间的关系。如图2所示,每一执行绪210可以存取自己的堆栈220,其包括多个堆栈区块(221、222、与223)。值得注意的是,在一些实施例中,一个堆栈可以只包括一个堆栈区块,且虚拟机器130包括一排程器(Scheduler),用以排程内容切换(Context Switch)程序与重新排程包括执行绪的内容、一中断服务程序(ISR)分配器(Dispatchetr),用以分配至特定的中断服务程序、与至少一中断服务程序,用以服务特定的中断。剖绘堆栈区块包括分析效能、计算资源利用率、或在特定堆栈区块上的执行时间等。在一些实施例中,为了要剖绘这些堆栈区块,必须要在个别堆栈区块中增加一个额外的字段(未显示)。当执行内容切换程序、重新排程来分配至特定中断服务程序、或服务特定中断服务程序时,内容的额外信息,如累积的存取时间与/或存取频率将会被记录至被存取的堆栈区块的额外字段中。
由于剖绘分析必须要记录额外的信息,在一些实施例中,排程器、中断服务程序分配器、与中断服务程序的处理程序将会修改。在排程器找出需要切换的一内容之后,将会记录一时间与此内容的辨识数据。在中断服务程序分配器找出一中断来源之后,将会在跳到中断服务程序之前与/或跳到中断服务程序之后记录一时间与此中断来源的辨识数据。在服务中断之前与/或服务中断之后,中断服务程序将会记录一时间与中断的辨识数据。记录的时间与辨识数据可以用来进行内容剖绘。值得注意的是,排程器、中断服务程序分配器、与中断服务程序的处理程序的修改并不限定于此,且用以记录额外信息的方式也不限定于此。一般来说,处理器通常花费大部分时间在某些执行绪,以及执行绪的特定堆栈区块之上。虚拟机器130可以使用剖绘的结果来在第一内存110与第二内存120间移动堆栈区块。
图3显示依据本发明实施例的堆栈区块。如图3所示,堆栈区块310包括堆栈数据311、区域变量312、与虚拟机器内部数据313。堆栈数据311是当程序执行时所需的数据。区域变量312包括对象,如Java对象与任何类型数字的参考(Reference)。虚拟机器内部数据313可以具有指向堆栈数据311、区域变量312、与虚拟机器内部数据313本身的指针。另外,另一个堆栈区块320与/或一执行绪330可以具有指针来指向堆栈区块310。一旦堆栈区块移动时,指针所指向的地址都必须进行调整。在一些实施例中,可以通过将指针所指向的原始地址加上一位移来完成指针的调整。
图4显示依据本发明实施例的堆栈区块。在此实施例中,堆栈400包括多个堆栈帧(Frame)(410与420)。堆栈帧420包括堆栈数据421、区域变量422、前一堆栈指针423、前一帧指针424、堆栈指针425与虚拟机器数据426。其中,前一堆栈指针423、前一帧指针424、堆栈指针425与虚拟机器数据426包含于前述的虚拟机器内部数据中。前一堆栈指针423指向前一堆栈帧410。前一帧指针424指向包括堆栈帧420的堆栈区块400。类似地,一旦堆栈区块移动时,指针都必须进行调整。
值得注意的是,图3与图4中所述的堆栈区块结构与指针都仅是需要调整的可能的堆栈区块结构与指针,而并非用来限制本发明。本领域中熟习技艺者可以应用本发明至所有类型的堆栈区块结构。
图5显示依据本发明实施例的堆栈管理方法。如步骤S510,对于系统中的堆栈区块进行剖绘以判断那些堆栈区块是较常存取的。如前所述,堆栈区块的剖绘可以根据记录的额外信息,如累积存取时间与存取频率来进行。值得注意的是,可以移动至第二内存120的堆栈区块数目可以依据第二内存120的可用空间与剖绘结果来决定。如步骤S520,暂停目前存取选定的堆栈区块的执行绪。如步骤S530,移动堆栈区块。移动堆栈区块的动作包括将堆栈区块由第一内存110移动至第二内存120,以及在第一内存110与第二内存120间交换堆栈区块。举例来说,如果第二内存120中具有一特定数目的堆栈区块的可用空间,则不在第二内存120中,且前此特定数目的较常存取的堆栈区块将会被移动至第二内存120。如果第二内存120中没有可用空间,且第一内存110中一第一堆栈区块的存取频率大于第二内存120中一第二堆栈区块的存取频率时,则第一与第二堆栈区块将会被交换。图6显示依据本发明实施例的经过移动,但尚未进行指针调整的堆栈区块。如图6所示,原先在第一内存110中的堆栈区块310被移动至第二内存120。在堆栈区块310移动之后,移动至第二内存120的堆栈区块的虚拟机器内部数据313中的指针仍然指向第一内存110中堆栈数据311、区域变量312与虚拟机器内部数据313的原始地址。另外,在堆栈区块320中的指针与执行绪330也仍然指向第一内存110中堆栈区块310的原始地址。如步骤S540,将移动的堆栈区块的指针,以及指向移动的堆栈区块的堆栈区块与执行绪进行调整。图7显示依据本发明实施例的经过移动且进行指针调整的堆栈区块。在指针调整之后,移动至第二内存120的堆栈区块的虚拟机器内部数据313中的指针被调整来指向第二内存120中堆栈数据311、区域变量312与虚拟机器内部数据313的新地址。另外,堆栈区块320中的指针与执行绪330被调整来指向第二内存120中堆栈区块310的新地址。如步骤S550,被暂停的执行绪被恢复来执行,从而执行绪可以正确地指向且存取堆栈区块。如步骤S560,判断虚拟机器130是否要停止作业。如果没有停止作业,流程回到步骤S510。如果虚拟机器130要停止作业,则结束整个流程。
本发明的方法,或特定型态或其部分,可以以程序代码的型态包含于实体媒体,如软盘、光盘片、硬盘、或是任何其它机器可读取(如计算机可读取)储存媒体,其中,当程序代码被机器,如计算机加载且执行时,此机器变成用以参与本发明的装置。本发明的方法与装置也可以以程序代码型态通过一些传送媒体,如电线或电缆、光纤、或是任何传输型态进行传送,其中,当程序代码被机器,如计算机接收、加载且执行时,此机器变成用以参与本发明的装置。当在一般用途处理器实际操作时,程序代码结合处理器提供一操作类似于应用特定逻辑电路的独特装置。
上述
具体实施例方式
仅用以说明本发明,而非限定本发明。
权利要求
1.一种堆栈管理系统,其特征在于,包括一第一内存;一第二内存;以及一控制器,耦接于第一与第二内存之间,该控制器由第一内存储存的多个堆栈区块中识别一第一堆栈区块,其中该第一堆栈区块包括含有至少一指针的数据,在该第一堆栈区块被识别之后,所述的控制器将该第一堆栈区块由第一内存移动至第二内存,且调整原先指向于该第一堆栈区块的指针来指向第二内存中的一新地址。
2.如权利要求1所述的堆栈管理系统,其特征在于,更包括至少一执行绪,用以存取所述多个堆栈区块,每一堆栈区块记录被执行绪存取的一时间期间,控制器更比对第一内存中相应每一堆栈区块所记录的所述时间期间,从而识别出第一堆栈区块,其中该第一堆栈区块具有最长的所述时间期间。
3.如权利要求1所述的堆栈管理系统,其特征在于,所述第一堆栈区块更包括堆栈数据、区域变量或虚拟机器内部数据。
4.如权利要求3所述的堆栈管理系统,其特征在于,所述指针指向第一堆栈区块、第一堆栈区块的堆栈数据、第一堆栈区块的区域变量、第一堆栈区块的虚拟机器内部数据或其它的堆栈区块。
5.如权利要求2所述的堆栈管理系统,其特征在于,所述控制器更在第一堆栈区块移动至第二内存之前,暂停执行绪存取第一堆栈区块。
6.如权利要求5所述的堆栈管理系统,其特征在于,所述控制器更在指针调整之后,恢复执行绪。
7.如权利要求2所述的堆栈管理系统,其特征在于,所述执行绪包括一垃圾收集器或一Java执行绪。
8.如权利要求1所述的堆栈管理系统,其特征在于,所述第一内存为一外部内存,且第二内存为一内部存储器。
9.一种堆栈管理方法,使用于包括一第一内存与一第二内存的系统,其特征在于,包括下列步骤由第一内存中储存的多个堆栈区块中识别一第一堆栈区块,其中该第一堆栈区块是第一内存中所述系统最常存取的堆栈区块;暂停第一堆栈区块的存取操作;以及将第一堆栈区块由第一内存移动至第二内存,其中,在第一堆栈区块移动之后,所述系统可以存取在第二内存中的第一堆栈区块。
10.如权利要求9所述的堆栈管理方法,其特征在于,所述第一堆栈区块的移动步骤更包括找出至少一指针,其原来指向第一内存中第一堆栈区块的一原始地址;以及调整所述指针来指向第二内存中的一新地址。
11.如权利要求10所述的堆栈管理方法,其特征在于,所述调整步骤更包括将一位移加至所述指针的原始地址中。
12.如权利要求9所述的堆栈管理方法,其特征在于,所述第一内存为一外部内存,且第二内存为一内部存储器。
13.一种堆栈管理方法,使用于包括一第一内存与一第二内存的系统,其特征在于,包括下列步骤由第一内存中储存的多个堆栈区块中识别一第一堆栈区块,其中该第一堆栈区块包括含有至少一指针的数据;将第一堆栈区块由第一内存移动至第二内存;以及调整原先指向于第一堆栈区块的指针来指向第二内存中的一新地址。
14.如权利要求13所述的堆栈管理方法,其特征在于,所述系统更包括至少一执行绪,用以存取所述多个堆栈区块,每一堆栈区块记录被执行绪存取的一时间期间,其中所述识别步骤更比对第一内存中相应每一堆栈区块所记录的时间期间,从而识别出第一堆栈区块,其中该第一堆栈区块具有最长的所述时间期间。
15.如权利要求13所述的堆栈管理方法,其特征在于,所述第一堆栈区块更包括堆栈数据、区域变量或虚拟机器内部数据。
16.如权利要求15所述的堆栈管理方法,其特征在于,所述指针指向第一堆栈区块、第一堆栈区块的堆栈数据、第一堆栈区块的区域变量、第一堆栈区块的虚拟机器内部数据或其它的堆栈区块。
17.如权利要求14所述的堆栈管理方法,其特征在于,更包括在第一堆栈区块移动至第二内存之前,暂停执行绪存取第一堆栈区块。
18.如权利要求17所述的堆栈管理方法,其特征在于,更包括在指针调整之后,恢复执行绪。
19.如权利要求14所述的堆栈管理方法,其特征在于,所述执行绪包括一垃圾收集器或一Java执行绪。
20.如权利要求13所述的堆栈管理方法,其特征在于,第二内存的存取速度快于第一内存。
全文摘要
一种堆栈管理系统及方法。堆栈管理系统包括一第一内存、一第二内存、与耦接于第一与第二内存间的一控制器。控制器由第一内存中储存的多个堆栈区块中识别一第一堆栈区块,其中第一堆栈区块包括含有至少一指针的数据。在第一堆栈区块被识别之后,控制器将第一堆栈区块由第一内存移动至第二内存,且调整原先指向于第一堆栈区块的指针来指向第二内存中的一新地址。
文档编号G06F9/455GK1963762SQ20061007262
公开日2007年5月16日 申请日期2006年4月5日 优先权日2005年11月8日
发明者朱志兴 申请人:联发科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1