CN100517269C - 用于准确的指针识别的处理器 - Google Patents

用于准确的指针识别的处理器 Download PDF

Info

Publication number
CN100517269C
CN100517269C CNB2004800188369A CN200480018836A CN100517269C CN 100517269 C CN100517269 C CN 100517269C CN B2004800188369 A CNB2004800188369 A CN B2004800188369A CN 200480018836 A CN200480018836 A CN 200480018836A CN 100517269 C CN100517269 C CN 100517269C
Authority
CN
China
Prior art keywords
pointer
processor
register
data
instruction
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.)
Expired - Fee Related
Application number
CNB2004800188369A
Other languages
English (en)
Other versions
CN1816802A (zh
Inventor
马蒂亚斯·迈尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Universitaet Stuttgart
Original Assignee
Universitaet Stuttgart
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Universitaet Stuttgart filed Critical Universitaet Stuttgart
Publication of CN1816802A publication Critical patent/CN1816802A/zh
Application granted granted Critical
Publication of CN100517269C publication Critical patent/CN100517269C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/35Indirect addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/17Embedded application

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)
  • Image Processing (AREA)

Abstract

本发明涉及一种基于对象的处理器体系结构,该处理器体系结构通过在存储器和处理器寄存器中严格地将指针和数据彼此分离,从而允许准确的指针识别。只通过指向对象的指针来执行对存储器的访问。对象包括用于指针和数据的分离的区域以及用于描述两个区域长度的属性区域。在指针寄存器中的指针和在对象的指针区域中的指针都直接包括它们所指向的对象的地址。所提出的处理器体系结构允许自动垃圾回收的集成,其可以完全地或部分地用硬件来实现。通过硬件的支持,可以特别有效地实现具有实时能力的垃圾回收。

Description

用于准确的指针识别的处理器
技术领域
本发明涉及一种处理器体系结构,其中,通过指向对象的指针来访问存储器。
控制软件的复杂性是软件开发中的最大需求。只有当软件被分解成易于理解的和可控制的模块并被抽象描述的时候,才能实现高质量和可靠的系统。为了实现这个目标,已使用了多年面向对象的编程语言。
面向对象编程语言的实现中的一个主要问题是动态存储器管理。一些面向对象语言,比如C++,仍然基于人工的存储器管理,即,可以由程序员来请求存储器,同样,可以由程序员来释放存储器。然而,这个方法存在弊端,由于必须在系统设计阶段执行存储器管理,因此,难以针对问题对系统进行自然建模。此外,对存储器进行人工释放是导致整个程序类错误的原因。例如,如果一个存储区域被释放,但是仍然存在对这些存储区域的引用,则在以后的程序执行中,这可能会导致灾难性的后果。在这种情况下尤其严重的是,由仍然存在指向已经被释放了的存储区域的指针(虚引用,dangling references)所引起的错误的后果是随许多因素而变化的,因此,很难被再现,并且只能被困难地定位。因为这些原因,几乎所有的现代编程语言,比如Java,都是基于具有自动垃圾回收的动态存储器管理的。在拥有这种动态存储器管理的系统中,返还存储区域不是程序的任务。作为替代,仅当确保存储区域不再被程序引用时,由垃圾回收器自动地释放所述存储区域。基于这个原理,不会再出现“虚引用”的情况。此外,通过使用该技术,提高了程序员的生产率,因为他们现在可以集中精力解决实际的问题。另外,制备的软件具有更高的质量,因为在具有动态存储器管理的系统中产生隐蔽的程序错误的可能性比在具有人工存储器管理的系统中要低。
背景技术
有很多用于自动释放动态创建的存储区域的算法,其中基于引用计数(reference counting)、拷贝(copying)、及标记清扫(mark sweep)回收原理的算法是本领域技术人员所熟知的。对于这些算法的概述可参考R.Jones,R.Lins的“Garbage Collection.Algorithms For AutomaticDynamic Memory Management”(John Wiley&Sons,1996)。
这些算法的简单实现在整个垃圾回收周期中断应用程序。通常,在程序的执行中,它们会导致长时间的以及不可预测的停止,因此,不适用于交互式系统或者实时环境。
渐进式(incremental)和并发(concurrent)方法允许程序在垃圾回收周期中连续执行。然而,它们需要在应用程序和垃圾回收器之间进行同步。软件中这种同步的开销是非常大的,然而,依赖于所使用的方法,为了确定相关联的对象是否已经被垃圾回收器处理,在每个指针加载前(read barrier,读取屏障)或者在每个指针存储前(writebarrier,写入屏障)必须结合一个短的代码序列。
因为由垃圾回收器导致的暂停在很多情况下非常的短暂以至于不能被用户记录,所以很多渐进式方法被描述为“具有实时能力”。然而,严格的实时能力需要为系统的响应时间保证一个不变的上限。因为基于软件的方法通常依赖于不可中断的操作,比如,检查根集(寄存器和堆栈)的所有指针,或者处理整个对象的操作,他们不能满足严格的实时需求。已知多种在没有无限持续时间不可分操作的情况下进行管理的软件解决方案,但是这些解决方案在计算时间和存储器的开销方面非常大。
用于自动垃圾回收的所有技术中的一个基本问题是发现和识别指针。如果不能将指针与非指针明确地区分,则仅能执行一种稳妥的垃圾回收。这意味着,能够表示指针的每个位模式都必须被视为一个指针以避免释放仍在使用中的存储器。因此,不能在稳妥的垃圾回收中使用用于移动对象并更新指针的压缩方法。然而,在没有压缩方法的情况下,存储器变得零碎。
为了避免这些问题以及执行准确的垃圾回收,在对指针的搜索和识别中花费了更大的开销。在许多面向对象语言中,通过类型描述符来识别指针和对象,该类型描述符被包含在每个对象中。然而,特别是在与优化编译器相结合的时候,更难于在程序堆栈和进程寄存器中定位指针。可以维护一个数据结构,其中指示了当前包含指针的堆栈位置和处理器寄存器,但是在程序执行期间实现这种类型的数据结构的开销非常大。因此,大多数基于软件的方法使用由编译器产生的表,该表描述了在程序堆栈和寄存器中的指针的位置。对于可以执行垃圾回收的每个程序点,准备了一组这种类型的表。然而,这种技术的实现导致了程序代码的过度膨胀。此外,实时系统必须确保被挂起的线程在有限的时间跨度内到达下一个这种类型的程序点。
因此,使用现有的、主要使用了软件方式的自动垃圾回收的系统必须克服许多的问题。这是因为,首先,软件必须模拟底层硬件不能提供的功能。如果处理器自身能够以硬件方式全部或部分地执行自动垃圾回收,则可以克服许多有关效率和实时能力的问题。然而,为此目的,处理器能够识别指针是完全有必要的。
下面,仅描述许多已知的体系结构中的二个作为示例,其支持准确的指针识别和/或自动垃圾回收,对于所述示例,本发明的主题是重要的。
因此,自1966年起就已知使用权能(capabilities)代替直接指针以便进行存储器寻址的体系结构。权能包括关于对象的访问授权和识别的声明。它们不包括对象的物理地址,但是包括对描述对象的位置、大小和属性的描述符的引用。Intel iAPX432是具有这种类型体系结构的处理器的一个例子,例如在H.M.Levy的“Capability-Based ComputerSystem”(Digital Press,1984,第159-186页)中所说明的。在这种体系结构中,通过两级映射处理将权能与相应的对象相关联。对于每个对象在对象表中存在唯一的条目,其描述了对象的位置,大小和状态。每个对象包括二个区域:数据区域和用于权能的区域。通过这种能够进行准确的权能识别。
由于缺少寄存器组并且由于通过权能和对象描述符对对象进行双重间接寻址,iAPX432是非常没有效率的。此外,它本身不能执行自动垃圾回收。垃圾回收必须通过软件来执行并且不具有实时能力。
所有已知的用于识别直接指针的方法都使用每个存储字中的专用识别位(标记)来区分指针和非指针。一个例子是在US 5560003A中描述的用于实时的渐进式垃圾回收的系统和硬件模块,该系统和硬件模块包括二个存储体和一个执行垃圾回收的本地处理器。每个存储体由对象空间管理器支持,该对象空间管理器依据每个存储器访问将地址映射到相应对象的起始地址。因为它的复杂性,该对象空间管理器必须被实现为单独的ASIC,其占据了与存储器本身类似的芯片区域。这种类型的系统是非常昂贵的。此外,利用识别位的指针识别导致在所需的计算时间和存储器方面的额外开销。
因为在嵌入式系统中的软件的复杂性的持续增长,多年来采取了许多措施来将自动垃圾回收的优点用于这一经济上重要的领域。在现代信息技术的这一领域中可以精确地实现最大的片数。因为通过持续的创新,产品的周期变得越来越短,所以对用于现代的面向对象语言的嵌入式系统的平台的强壮性和实时能力的需求也在持续增长。然而,在很多情况下,在这些应用中,自动垃圾回收仍然被认为是非常奢侈的,尽管自动垃圾回收有无可置辩的优点,也负担不起。
从相关技术出发,本发明的目的是说明一种用于基于对象的和面向对象的程序的处理器体系结构,该处理器体系结构允许有一定成本效益的准确的指针识别,因此使得能实现一种有效的和具有实时能力的、可以被全部或部分实现为硬件的自动垃圾回收。
发明内容
为实现上述目,本发明提出一种处理器,经由指向对象的指针来访问存储器,包括:将指针和数据彼此分离地分别存储在所述对象中的指针区域和数据区域中的装置,所述指针包含它们所指向的对象的存储器地址,并且所述对象具有属性,所述属性存储在所述对象自身中并且描述所述指针区域的长度和所述数据区域的长度,寄存器组,具有分离的数据寄存器和指针寄存器,其中所述指针寄存器被用于访问所述存储器中的所述对象;以及用于保证每个指针仅包含预定的空值或现存对象的存储器地址的装置。
在本专利应用领域内,术语“字”被理解为数据单元,可以使用单个处理器指令从存储器中加载其或者将其存储在存储器中。对象被理解为存储字的连续集合,其中每个字唯一地与一个单独的对象相关联。指针被理解为指向一个对象的字。术语“空”(null)表示一个不变的预定的指针值,使用其以便不指向任何对象。
在用于基于对象的和面向对象的程序的本处理器体系结构中,唯一地通过直接指向对象的指针来访问存储器。对象被唯一地存储在连续的存储器区域中,即,被两个对象占用的存储器区域不能重叠。在每个对象中,将指针和数据彼此分离地分别存储在指针区域和数据区域中。此外,关于指针区域的长度信息和关于数据区域的长度信息被存储在每个对象中。下面将长度信息称作属性。利用属性,可以在任意时间确定对象的大小以及统一地为对象中的指针和数据定界。
本处理器体系结构提供了单独的指针寄存器组和数据寄存器组。在这种情况下,指针寄存器被唯一地用于使用对象的操作,例如,用于存储器访问,并且不用于其它的任务。因此,特别地,保证了不可以将任意的值写入指针寄存器,并且不可以使用指针寄存器来执行算术操作。
在对象的指针区域和指针寄存器中的指针直接包含存储器中的对象的地址。
使用本基于对象的处理器体系结构,以这种方式实现了指针和非指针(数据)之间的严格分离,从而使得能够在不需要识别位的情况下就可以进行准确的指针识别。通过这种由硬件确保的、准确识别处理器寄存器和存储器中的指针的能力,可以全部或者部分地在硬件中实现的自动垃圾回收可以在处理器级别上集成。基于此,能够特别有效地实现具有自动垃圾回收功能的实时系统。因此,对于垃圾回收算法本身以及对于处理器和垃圾回收器之间所需的同步,都不需要必须在处理器上执行软件。处理器仅必须为垃圾回收器提供一部分存储器带宽。
该体系结构的另一个优点是:在不需要编译器和/或运行时间系统的合作的情况下进行垃圾回收管理,因此,可以健壮地实现。
相比较于处理器本身的费用而言,用于实现垃圾回收的硬件费用相对较低。因此,可以以与制造典型的微处理器或微控制器同样的成本效率来制造这种处理器。
在本处理器体系结构中,最好由处理器来保证被识别为指针的每个字或者包括现存对象的地址或者为空。在这个优选实施例中,由处理器体系结构保持固定的规则(system invariants,系统不变量),即,可以识别每个存储字或者寄存器是否是一个指针,以及每个指针的值或者为空,或者包含现存对象的地址。通过维持这些系统不变量,可以在每个时钟周期,在系统中进行指针的准确识别。
最好,由一个专门的对象创建指令创建新对象,其中待创建对象的属性被作为参数传递到该指令。该对象创建指令在可以访问对象前,使用空值初始化指针区域中的所有指针。通过该方式不违反系统不变量。
在对于严格实时需求的改进中,对象创建指令被实现为可中断。如果对象创建指令被中断,则以下述方式创建未完全初始化的对象,即,被中断的对象创建指令可以在后面的一个时间点被恢复执行。由处理器唯一地识别未完全初始化的对象。
优选的,该处理器体系结构支持常量对象,该常量对象甚至在程序执行前就作为部分只读存储器区域而存在。由处理器唯一地识别常量对象指针。
在本处理器体系结构中,最好,以已知的方式为程序堆栈保留一个存储器区域。为此,将程序堆栈划分为指针堆栈区域和数据堆栈区域,由堆栈索引指定在各个情况中未被堆栈占用的第一个位置,在各个情况中,在保留的时间寄存器中管理堆栈索引。
如果使用了多个堆栈,则最好将当前非活动的堆栈的堆栈索引作为一个属性存储在相关联的堆栈对象中。此外,最好将所述堆栈对象存储为不在堆顶而在由操作系统管理的静态存储区域中的静态对象,并且以特殊的方式识别指向这类对象的指针(静态指针)。
为了有效实现处理器体系结构,最好每个指针寄存器都附带有属性寄存器,在属性寄存器中存储对象属性,该对象属性属于由相应指针寄存器中的指针所指向的对象。在这个实施例中,提供了一个用于加载属性的附加的流水线级。此外,最好在该流水线级中使用加速访问的属性缓存器(cache)。
在实现本处理器体系结构时,可以根据相关技术来实现程序执行和典型优化所需的所有其它流水线级和功能单元,例如,指令和数据缓存器,或者用于分支预测的单元。
附图简述
下面结合附图,基于典型实施例对根据本发明的处理器体系结构进行更加详细的说明。
图1示意性地显示了本发明处理器体系结构的寄存器模型;
图2示意性地显示了本发明处理器体系结构的对象模型;
图3示意性地显示了作为堆栈对象的程序堆栈的实现;
图4显示了对指针相关指令进行分类的表;
图5显示了用于本发明处理器体系结构的对象布局的实现的例子;
图6示意性地显示了具有属性的指针寄存器;
图7示意性地显示了用于本发明处理器体系结构的流水线的实现的例子(简要的说明);
图8示意性地显示了指针相关指令到根据图7的流水线的级的分解;以及
图9显示了本发明设备的实例的示意性说明。
具体实施方式
下面,描述根据本发明的处理器体系结构的一个实施例的例子,其首先基于在不使用识别位(标记)的情况下实现精确指针识别的目的,其基于可以高效实现的通用RISC指令集,并且不需要执行时间超过多个时钟周期的不可分操作。
所描述的处理器体系结构保证系统不变量,即
1.可以识别每个存储字或寄存器是否表示指针,以及
2.每个指针值或者为空,或者唯一地与现存的对象相关联。
如图1所示,本处理器体系结构提供分离的数据和指针寄存器组。在图中右边所示的数据寄存器被用作多用途寄存器,而在左边所示的指针寄存器用于访问存储器中的对象。Np表示指针寄存器的数目,Nd表示数据寄存器的数目。为了实现系统不变量,必须确保在指针寄存器中不能够写任意值,诸如将数据寄存器中的值拷贝到指针寄存器中,或者使用指针寄存器执行算术运算。
本处理器体系结构中的存储器模型是基于对象的。每个对象由数据区域和指针区域组成,其中数据区域与指针区域是严格分离的。图2显示了在对象的指针区域(图的左边部分)具有相应的指针字并在对象的数据区域(图的右边部分)具有相应的数据字的该类型对象的示意性结构。使用δ属性(δ>0)描述数据区域中的数据字的数目,使用π属性描述(π>0)描述指针区域中的指针的数目。当对象被产生时,由属性所描述的对象的大小是固定的,并且之后不能改变。属性是对象的一部分并被存储在单独的属性区域中。
用于本处理器体系结构的指令集的特殊部分仅包括与指针相关的指令,包括加载和存储指令。其它指令的实施例,例如算术指令和用于程序控制的指令,这些指令的选择可以独立于描述的体系结构,其不属于本发明的一部分。
所述的体系结构的指令集具有一个专门的对象创建指令,该指令用于产生一个新的对象和指向该对象的指针。对象创建指令(分配对象)接收作为参数的待创建对象的π和δ属性值,并且将新近创建的对象的指针存储到指针寄存器。在对象的指针被程序可见前,被创建对象的指针区域中的每个指针值被初始化为空。不存在用于清除对象的指令。对象仅仅可以被处理器级上的自动垃圾回收清除。
使用加载和存储指令来访问对象内的字。处理器体系结构提供用于访问指针值和数据字的不同的加载和存储指令。“加载数据”和“存储数据”指令只在对象的数据区域和数据寄存器之间移动数据字。“加载指针”和“存储指针”指令只在对象的指针区域和指针寄存器之间移动指针。加载和存储指令利用包含对象指针的指针寄存器和正整数索引来识别存储字。为了计算索引(类似于传统体系结构的寻址模式),可以使用不同的“索引模式”,例如,使用数据寄存器,常量偏移,和比例因子。
每当访问对象时,必须执行范围检查以确保不会对特定的引用对象之外的字进行访问。这种访问可能会有灾难性的后果,并违反系统不变量。因此,在跳跃违反(bounce violation)的情况中,终止存储器访问,起动相应的异常处理程序。基于类似的原因,中止试图解引用(dereference)空指针的指令。
对象的属性可以由两个“读属性”指令进行查询。
与多个典型地用于数据寄存器的操作的“寄存器到寄存器”指令相对照,本体系结构定义了两个用于指针相关的“寄存器到寄存器”指令的严格受限集合。“拷贝指针”指令将一个指针寄存器中的内容拷贝到另外一个指针寄存器中,而“比较指针”指令检查是否两个指针都指向相同的对象。
图4显示了由本处理器体系结构定义的与指针相关的指令的概要,并且关于它们是否读、写、或者解引用指针寄存器而对它们进行分类。在每种情况下被读、写或者解引用的寄存器用粗体打印。
因为程序堆栈的非结构化和高度动态的特性,这些表示关于在自动垃圾回收范围内的指针识别的最大需求中的一个。在本处理器体系结构中,程序堆栈被视作一个堆栈对象,其类似于任何对象,具有数据区域和指针区域,因此可以被视为两个单独的堆栈。为了保持堆栈对象上的指针保留指针寄存器。为了将相应的区域划分为实际的堆栈区域和当前未被占用的区域,在两个堆栈区域中的任何一个使用堆栈索引。本例子中的堆栈索引与第一个未被占用的存储器位置相关联。堆栈索引“0”代表一个空的堆栈。两个堆栈索引被标识为数据堆栈索引(dsix)和指针堆栈索引(psix)。这些索引中的每一个被保存在为此用途保留的专门的数据寄存器中。
如果堆栈对象被作为一个典型的对象来对待,则系统不能区分指针是属于当前被占用的指针堆栈,还是属于指针堆栈区域中未被占用的部分。因为指针堆栈区域中的每个字都被识别为一个指针,所以指针堆栈区域中的未使用区域可以包括许多引用不再需要的对象的指针。因为这些对象的指针仍然存在,所以垃圾回收器不能释放这些对象。对这种对象的一个可能的解决方案是,当相应的指针从堆栈中移除的时候,用空值重写每个指针值。然而,特别是如果多个指针将从堆栈中删除,这将导致不希望有的开销,例如,在子程序结束时,在取消堆栈块的分配时,通常就是这样。
对于这里描述的处理器体系结构的优选实例的实例,选择考虑堆栈的动态大小的对象的实现。为此,如图3所示,由两个属性对来描述堆栈对象,其中的一对(π,δ)规定当前的堆栈大小,第二对(∏,Δ)规定了最大的堆栈大小。这种情况中,π属性与指针堆栈索引psix的值相对应,δ属性与数据堆栈索引dsix的值相对应。系统寄存器中保存用户程序不可见的堆栈属性∏和Δ。对于指针识别和系统不变量,仅具有小于∏的索引的指针被视为指针。
有标准的加载和存储指令对堆栈中的存储字进行寻址。通过使用标准的算术指令减少相应的堆栈索引的值以将字从堆栈中删除。为了保持系统不变量,提供一个专用的指令将指针压入指针堆栈中,该指令可以不可中断地在指针堆栈区域的第一个未被占用的存储器位置上存储指针并且增加指针堆栈索引。这是唯一的被允许增加指针堆栈索引的指令。
在到此为止所描述的处理器体系结构中,可以唯一地经由指针来访问存储器,并且创建指针的唯一可能性是利用对象创建指令来创建新的对象。然而,还能够访问常量数据,该常量数据甚至在程序起动之前就作为程序代码的一部分而存在。这样的常量数据的例子是由编译器生成的常量链接列表或者结构,例如,分支表或者类型描述符。
因而,在处理器体系结构的优选实施例的本例子中引入了常量对象。常量对象是不可改变的对象,其作为程序代码的一部分存储,或者存储在为常量对象保留的专门区域中。一个专门的“创建常量指针”指令被用于创建常量对象指针,以下被称作常量指针。经由常量指针而进行的存储器访问被限制于读访问,并且常量对象的指针区域仅仅可以包含常量指针或者空指针。通过
Figure C20048001883600151
属性来区分常量对象和普通对象,属性用于区分特殊类型的对象。
在许多系统中,多个单独的程序堆栈被用于不同类型的操作,例如用户模式和操作系统模式。此外,具有多个并发执行线程的系统(多线程系统)需要用于每个执行线程的单独的程序堆栈。所有的这些堆栈典型地由操作系统进行管理,并且不位于由垃圾回收监控的存储器区域(堆)中。
为了允许操作系统管理堆存储区域以外的存储区域,提供静态对象。静态对象仅仅在操作系统模式下被创建,并且位于专门用于此用途的存储区域中。也可以通过
Figure C20048001883600153
属性识别静态对象。静态对象指针(静态指针)对用户程序来说是不可见的。
为了保持系统不变量,在相关的对象创建指令被终止前,在最新产生的对象中的每个指针必须使用空值进行初始化。因此,对象创建指令的执行时间不是被小的时间常量限制的。这对于严格的实时应用程序来说,是不可接受的。
为了将对象创建指令实现为可中断的,将未初始化的(更准确地讲是未完全初始化的)对象引入所描述的处理器体系结构的优选实施例。仅当对象创建指令在完成前被中断时创建未初始化的对象。指向未初始化对象的指针仅仅在操作系统模式下可见,并且不会被解引用。与静态对象和常量对象类似,由
Figure C20048001883600154
属性识别未初始化的对象。
所描述的处理器体系结构的示例性优选实施例支持四种不同类型的对象:普通的动态对象,未初始化的动态对象,常量对象,和静态对象。使用
Figure C20048001883600155
属性来区分对象类型并且可以采用四个值中的一个(普通的,未初始化的,常量,静态)。在实现体系结构时,
Figure C20048001883600156
属性可以被存储在指向对象的指针中和/或者存储在对象本身中。
普通的动态对象和未初始化的动态对象位于堆存储区域中,静态对象位于静态存储区域中,常量对象位于用于程序代码和/或常量数据的存储区域中。因为静态的和未初始化的对象被限制于操作系统模式,所以它们被识别为系统对象。
基于自动垃圾回收的观点,四种类型的对象可以通过它们如何被压缩垃圾回收器处理来区别。必须在典型的动态对象中搜索指针,并且在压缩期间被移动。必须在静态对象中搜索指针,并且不可以被移动。相对照地,未初始化的对象必须在压缩期间被移动,但是不可以在其中搜索指针,因为它们包含无效的指针。最后,垃圾回收器既不可以在常量对象中搜索指针,也不可以移动其。
接下来为示例的目的而说明推荐的处理器体系结构的可能实现。假定使用32位的字值用于实现。存储器是能够以字节寻址的,以便允许在数据区域内进行字节和半字访问。字必须被对齐到可由四整除的地址。
图5中示出了存储器中的对象的示例性布局。每个对象包括数据区域,指针区域,和属性区域。由于效率的原因,对象被对齐到可由八整除的地址,因此,在特定情况下,两个对象之间需要填充区域。对用户程序来说不可见的属性区域包括对象的π和δ属性。因为支持字节和半字操作数,本实现可以轻微地改变π和δ的定义,这是由于它们现在描述的是相应区域中的字节的数目而不是字的数目。
因为π必须是4的倍数,用于π属性的存储字中仍有两位没有被占用。其可用来存储属性(或者其中的一部分)和/或由垃圾回收器使用。
指针直接包括对象的物理存储器地址。因为对象是根据双字对齐的,所以对象地址仅仅占用指针字中的29位。剩余的三位被用于存储
Figure C20048001883600162
属性(或者其中的一部分)和/或由垃圾回收器使用。
在访问一个对象前,必须先知道对象的属性,因为这对于在访问前的范围检查是非常有必要的,并且在根据图5的对象布局的情况中,在进行数据访问时用于地址生成。
因为每次访问对象前从存储器中加载属性都伴随着较大的开销,所以,为每个指针寄存器提供属性寄存器,如图6所示。如果指针寄存器包含一个非空的值,则相应的属性寄存器包括指针寄存器所指向的对象的属性。以这种方式,对指针寄存器进行解引用的开销与在传统体系结构中生成地址的开销同样小。范围检查本身不涉及性能损失,因为它可以与地址计算并行地执行。
然而,属性寄存器需要一定的代价:当必须从存储器中加载指针的时候,相关的属性必须也被加载到属性寄存器中。此外,只有当结束指针加载时,才知道存储器中属性的位置。
在RISC体系结构中,通过在典型的存储器级后附加一个流水线级可以有效的解决这个问题。这一附加的级被称为属性级并且使用属性缓存器以便执行属性访问,在大多数情况下没有性能损耗。属性缓存器的结构类似于典型的数据缓存器。属性缓存器由指针的头29位寻址,并且允许在单个步骤中读或写π和δ属性。其与数据缓存器的本质上的差别是缓存器线(cache lines)的大小。数据缓存器中的缓存器线典型地包括8个字,而属性缓存器的线为2字宽并且仅包含单个对象的属性。
图7显示了所实现的流水线的基本结构,图8显示了所有指针相关指令到单个流水线级的分解。为了示例性说明,描述两个最复杂的指令的处理。
1.“加载指针”指令:
在流水线的执行级,地址生成单元(AGU)计算待加载的指针的存储器地址,并且并行地执行由体系结构规定的运行时间测试,例如范围检查和空指针测试。在存储器级使用所计算的地址以便从对象缓存器中读指针。然后,被加载的指针对属性缓存器进行寻址以便加载被加载的指针所指向的对象的属性。最后,被加载的指针和被加载的属性一起被写入寄存器组。
2.对象创建指令:
利用两个数据操作数来确定将被生成的对象的大小,所述操作数被从解码级传递到执行级。在执行级,指针生成单元(PGU)负责创建新对象的指针。在压缩垃圾回收器的情况中,PGU仅仅通过将对象大小加到辅助寄存器的内容上来简单地确定新对象的起始地址,该辅助的寄存器总是指向用于创建新对象的堆区域中最后被占用的字。AGU支持PGU,AGU用于创建指针初始化所需的地址。在具有8个字的缓存器线的对象缓存器中,在一个时钟周期内,可以同时初始化最多8指针字。以这种方式,如果可以在一个时钟周期内计算出对象的起始地址,并且如果对象中的所有指针属于同一缓存器线,则对象创建指令能够没有延迟地通过执行级。如果不是这种情况,则停止流水线直到初始化结束或者中断产生。最后,将最新生成的对象的属性写入属性缓存器,将指针连同其属性写入寄存器组。如果被中断的对象创建指令到达流水线的末端,则被中断的对象生成的状态被写入系统寄存器中,并且以用于未初始化的对象的
Figure C20048001883600181
属性识别未完全初始化的对象。当中断程序的执行环境(指令计数器,系统寄存器)重新恢复时,重新恢复初始化。
基于功能原型证明了所提出的体系结构的功能性能。在这个原型中,垃圾回收器被实现为微程序控制的协处理器,该微程序控制的协处理器紧密地与主处理器的流水线一同工作。在处理器和协处理器之间的同步完全以硬件实现。处理器和用于垃圾回收的协处理器使用VHDL描述,并且被组合到一起以用于现代的可编程逻辑设备。此外,存在一个用于此体系结构的原型的Java编译器和Java标准库的子集的实现。
图9显示了本设备的实例的概要说明。在这个例子中,由微程序控制的协处理器形成垃圾回收器。根据本发明的处理器体系结构在主处理器1中实现。具有用于主处理器1和协处理器2的多个分离的端口的存储器控制器3产生到主存储器的连接。在主处理器和协处理器之间的同步发生在不同的级别。当需要时,垃圾回收器刷新或者清空数据和属性缓存器的线以便确保缓存器的一致性。被集成到处理器流水线中的硬件读取屏障可以触发垃圾回收器中的中断。垃圾回收器也可以终止主处理器1以便保护微代码中的重要区域。

Claims (18)

1.一种处理器,经由指向对象的指针来访问存储器,包括:
将指针和数据彼此分离地分别存储在所述对象中的指针区域和数据区域中的装置,所述指针包含它们所指向的对象的存储器地址,并且所述对象具有属性,所述属性存储在所述对象自身中并且描述所述指针区域的长度和所述数据区域的长度,
寄存器组,具有分离的数据寄存器和指针寄存器,其中所述指针寄存器被用于访问所述存储器中的所述对象;以及
用于保证每个指针仅包含预定的空值或现存对象的存储器地址的装置。
2.如权利要求1所述的处理器,
其特征在于:使用具有分别用于数据和指针操作的指令的指令集。
3.如权利要求1所述的处理器,
其特征在于:指针的加载操作仅仅将指针从对象的指针区域加载到指针寄存器中,以及指针的存储操作仅将指针寄存器中的指针存储到对象的指针区域,以及
数据的加载操作仅仅将数据从对象的数据区域加载到数据寄存器中,数据的存储操作仅将数据寄存器中的数据存储到对象的数据区域中。
4.如权利要求1所述的处理器,
其特征在于:使用具有对象创建指令的指令集,所述对象创建指令在能够访问被创建的对象之前,使用空值来初始化所述被创建对象的指针区域中的所有指针。
5.如权利要求4所述的处理器,
其特征在于:所述对象创建指令能够被中断并且在后面的一个时间点被恢复执行。
6.如权利要求5所述的处理器,
其特征在于:在中断对象创建指令的情况下,创建未完全初始化的对象,处理器能够明确地区分未完全初始化的对象和完全初始化的对象。
7.如权利要求1所述的处理器,
其特征在于:处理器支持常量对象,所述常量对象被保存在单独的存储器区域中,在程序运行时间仅仅读取所述存储器区域,以及
由处理器明确地识别常量对象指针。
8.如权利要求1所述的处理器,
其特征在于:使用被划分为指针堆栈区域和数据堆栈区域的程序堆栈,由堆栈索引来指示在所述两个堆栈区域中的每一个中的已被占用部分的长度,该堆栈索引在保留的数据寄存器中被管理。
9.如权利要求8所述的处理器,
其特征在于:一个指令被用于将指针压入指针堆栈,该指令以不可中断的方式将相应的指针存储到指针堆栈并且还增加该指针堆栈索引。
10.如权利要求1所述的处理器,
其特征在于:处理器支持保存在单独存储器区域中的静态对象,所述单独存储器区域由操作系统进行管理,以及
处理器能够明确地识别静态对象指针。
11.如权利要求9或10所述的处理器,
其特征在于:程序堆栈是由静态对象实现的,以及包含在所述静态对象中的属性描述了在非活动程序堆栈的情况中,堆栈区域的实际被占用部分的长度。
12.如权利要求1所述的处理器,
其特征在于:为每个指针寄存器分配属性寄存器,将指针寄存器中的指针所指向的对象的属性写入相应的属性寄存器。
13.如权利要求12所述的处理器,
其特征在于:处理器流水线提供附加的流水线级,用于将对象的属性从存储器加载到所述属性寄存器。
14.如权利要求13所述的处理器,
其特征在于:所述附加的流水线级提供属性缓存器,以便加速所述属性的加载。
15.如权利要求1所述的处理器,
其特征在于:使用RISC指令集。
16.如权利要求1所述的处理器,
其特征在于:处理器执行自动垃圾回收。
17.一种具有主处理器(1)和协处理器(2)的设备,在所述主处理器(1)中采用根据权利要求1至15中的任何一项所述的处理器,所述协处理器(2)被用于执行自动垃圾回收并且被耦合到所述主处理器(1)上。
18.将如权利要求1至16中任何一项所述的处理器用于嵌入式系统中的应用。
CNB2004800188369A 2003-07-01 2004-07-01 用于准确的指针识别的处理器 Expired - Fee Related CN100517269C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
DE10329680A DE10329680A1 (de) 2003-07-01 2003-07-01 Prozessorarchitektur für exakte Zeigeridentifizierung
DE10329680.8 2003-07-01

Publications (2)

Publication Number Publication Date
CN1816802A CN1816802A (zh) 2006-08-09
CN100517269C true CN100517269C (zh) 2009-07-22

Family

ID=33559786

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2004800188369A Expired - Fee Related CN100517269C (zh) 2003-07-01 2004-07-01 用于准确的指针识别的处理器

Country Status (9)

Country Link
US (1) US8473722B2 (zh)
EP (1) EP1639475B1 (zh)
JP (1) JP4763598B2 (zh)
KR (1) KR101116989B1 (zh)
CN (1) CN100517269C (zh)
AT (1) ATE480824T1 (zh)
DE (2) DE10329680A1 (zh)
HK (1) HK1092236A1 (zh)
WO (1) WO2005003960A2 (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7802148B2 (en) * 2005-02-23 2010-09-21 Broadcom Corporation Self-correcting memory system
DE102008036479A1 (de) * 2008-08-05 2010-02-11 Giesecke & Devrient Gmbh Speicherverwaltung in einem portablen Datenträger
DE102008051576A1 (de) * 2008-10-14 2010-04-15 Giesecke & Devrient Gmbh Speicherverwaltung in einem portablen Datenträger
US8635415B2 (en) * 2009-09-30 2014-01-21 Intel Corporation Managing and implementing metadata in central processing unit using register extensions
US8326886B2 (en) * 2010-01-21 2012-12-04 Microsoft Corporation Per-thread, per-instance data storage
US8577936B2 (en) * 2010-11-29 2013-11-05 International Business Machines Corporation Fixup cache tool for object memory compaction in an information handling system
US20130086359A1 (en) * 2011-09-29 2013-04-04 Qualcomm Incorporated Processor Hardware Pipeline Configured for Single-Instruction Address Extraction and Memory Access Operation
US8972705B2 (en) * 2011-11-16 2015-03-03 Andes Technology Corporation Executing instructions for managing constant pool base register used for accessing constants during subroutine execution
CN103336744B (zh) * 2013-06-20 2015-11-04 华中科技大学 一种固态存储设备的垃圾回收方法及其系统
US9734052B2 (en) 2015-06-30 2017-08-15 International Business Machines Corporation Multi-section garbage collection
US10176093B2 (en) * 2015-06-30 2019-01-08 International Business Machines Corporation Pauseless location and object handle based garbage collection
US9734053B2 (en) 2015-06-30 2017-08-15 International Business Machines Corporation Garbage collection handler to update object pointers
US10180902B2 (en) * 2015-06-30 2019-01-15 International Business Machines Corporation Pauseless location and object handle based garbage collection
US10042752B2 (en) 2016-05-27 2018-08-07 Hewlett Packard Enterprise Development Lp Object descriptors
US10628306B2 (en) * 2017-02-01 2020-04-21 Microsoft Technology Licensing, Llc Garbage collector
CN113312278B (zh) * 2021-07-29 2021-11-05 常州楠菲微电子有限公司 一种静态可分配共享多队列缓存的装置及方法

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3656178A (en) * 1969-09-15 1972-04-11 Research Corp Data compression and decompression system
JPS5569855A (en) * 1978-11-20 1980-05-26 Panafacom Ltd Data processing system
DE3136387C2 (de) * 1981-09-14 1984-11-29 Deutsche Gerätebau GmbH, 4796 Salzkotten Vorrichtung zum Messen von Flüssigkeitsmengen
US5778395A (en) * 1995-10-23 1998-07-07 Stac, Inc. System for backing up files from disk volumes on multiple nodes of a computer network
JPH09297677A (ja) * 1996-05-02 1997-11-18 Fujitsu Ltd 一部のデータ群を消去可能としたfifoバッファ
US5897656A (en) * 1996-09-16 1999-04-27 Corollary, Inc. System and method for maintaining memory coherency in a computer system having multiple system buses
US5860092A (en) * 1997-02-14 1999-01-12 Lsi Logic Corporation Apparatus and method for addressing a cache memory in a computer system utilizing cache tag memory with integrated adder and pre-decode circuit
FI102426B1 (fi) * 1997-03-14 1998-11-30 Nokia Telecommunications Oy Menetelmä muistin toteuttamiseksi
US5946318A (en) * 1997-03-21 1999-08-31 International Business Machines Corporation Method and apparatus for processing and packetizing data from a data stream
US5903899A (en) 1997-04-23 1999-05-11 Sun Microsystems, Inc. System and method for assisting exact Garbage collection by segregating the contents of a stack into sub stacks
US5900001A (en) * 1997-04-23 1999-05-04 Sun Microsystems, Inc. Method and apparatus for optimizing exact garbage collection using a bifurcated data structure
US5903900A (en) * 1997-04-23 1999-05-11 Sun Microsystems, Inc. Method and apparatus for optimizing exact garbage collection of array nodes in a carded heap
US5920876A (en) * 1997-04-23 1999-07-06 Sun Microsystems, Inc. Performing exact garbage collection using bitmaps that identify pointer values within objects
WO1999009469A1 (en) 1997-08-18 1999-02-25 Koninklijke Philips Electronics N.V. Stack oriented data processing device
US6473777B1 (en) 1998-10-30 2002-10-29 National Semiconductor Corporation Method for accelerating java virtual machine bytecode verification, just-in-time compilation and garbage collection by using a dedicated co-processor
US6385113B1 (en) * 1999-04-30 2002-05-07 Madrone Solutions, Inc Method for operating an integrated circuit having a sleep mode
US6751583B1 (en) * 1999-10-29 2004-06-15 Vast Systems Technology Corporation Hardware and software co-simulation including simulating a target processor using binary translation
US6574711B2 (en) * 1999-12-27 2003-06-03 Matsushita Electric Industrial Co., Ltd. Semiconductor integrated circuit
EP1160662A1 (en) * 2000-03-10 2001-12-05 Texas Instruments France Processor with pointer tracking to eliminate redundant memory fetches
US6804681B2 (en) * 2001-05-08 2004-10-12 Sun Microsystems, Inc. Identifying and tracking object references in a java programming environment
US6895579B2 (en) * 2001-07-31 2005-05-17 Intel Corporation Method and apparatus for maintaining exception reporting for register promotion
US20040184470A1 (en) * 2003-03-18 2004-09-23 Airspan Networks Inc. System and method for data routing
US7454555B2 (en) * 2003-06-12 2008-11-18 Rambus Inc. Apparatus and method including a memory device having multiple sets of memory banks with duplicated data emulating a fast access time, fixed latency memory device

Also Published As

Publication number Publication date
US8473722B2 (en) 2013-06-25
HK1092236A1 (en) 2007-02-02
CN1816802A (zh) 2006-08-09
DE10329680A1 (de) 2005-02-10
EP1639475A2 (de) 2006-03-29
JP2009514043A (ja) 2009-04-02
KR20060052771A (ko) 2006-05-19
DE502004011642D1 (de) 2010-10-21
WO2005003960A3 (de) 2005-09-29
EP1639475B1 (de) 2010-09-08
JP4763598B2 (ja) 2011-08-31
US20080209149A1 (en) 2008-08-28
ATE480824T1 (de) 2010-09-15
WO2005003960A2 (de) 2005-01-13
KR101116989B1 (ko) 2012-03-14

Similar Documents

Publication Publication Date Title
CN100517269C (zh) 用于准确的指针识别的处理器
US7124275B2 (en) Apparatus and method for determining a physical address from a virtual address by using a hierarchical mapping regulation with compressed nodes
EP0912942B1 (en) Apparatus and method for assisting exact garbage collection by using a stack cache of tag bits
US5903899A (en) System and method for assisting exact Garbage collection by segregating the contents of a stack into sub stacks
CN102483719B (zh) 基于块的非透明高速缓存
US5560003A (en) System and hardware module for incremental real time garbage collection and memory management
CN102934084B (zh) 用于通过将第一核类型与第二核类型耦合来提高功率性能的装置、方法和系统
US20170168938A1 (en) Iterator register for structured memory
CN102985910B (zh) 对无用存储单元收集的系统和方法
CN102741826B (zh) 在无约束事务存储器(utm)系统中执行模式切换
CN101464834B (zh) 闪存数据写入方法及使用此方法的控制器
CN102460400A (zh) 基于管理程序的本地和远程虚拟内存页面管理
CN102298514A (zh) 用于有效动态二进制变换的寄存器映射技术
CN102792285A (zh) 层级转换表控制
CN113924625B (zh) 非易失性存储器系统中的操作一致性
CN103473181A (zh) 分级式不可变内容可寻址存储器处理器
CN103282877A (zh) 用于将程序自动分解成多个并行线程的硬件和软件系统的系统、设备和方法
CN104679481A (zh) 一种指令集转换系统和方法
CN103383672A (zh) 高速缓存控制以减少事务回滚
CN101739358A (zh) 利用虚存机制对片上异构存储资源动态分配的方法
CN109997109A (zh) 具有提取提前滞后的流引擎
JP2009514043A5 (zh)
CN108205447A (zh) 使用早期和后期地址以及循环计数寄存器来跟踪架构状态的流引擎
CN103176914A (zh) 一种低缺失率、低缺失惩罚的缓存方法和装置
CN102597972A (zh) 虚拟计算机系统、区域管理方法及程序

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1092236

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1092236

Country of ref document: HK

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20090722

Termination date: 20190701

CF01 Termination of patent right due to non-payment of annual fee