KR101116989B1 - 정확한 포인터 식별을 위한 프로세서 아키텍처 - Google Patents

정확한 포인터 식별을 위한 프로세서 아키텍처 Download PDF

Info

Publication number
KR101116989B1
KR101116989B1 KR1020067000018A KR20067000018A KR101116989B1 KR 101116989 B1 KR101116989 B1 KR 101116989B1 KR 1020067000018 A KR1020067000018 A KR 1020067000018A KR 20067000018 A KR20067000018 A KR 20067000018A KR 101116989 B1 KR101116989 B1 KR 101116989B1
Authority
KR
South Korea
Prior art keywords
pointer
objects
processor
pointers
data
Prior art date
Application number
KR1020067000018A
Other languages
English (en)
Other versions
KR20060052771A (ko
Inventor
메티아스 메이어
Original Assignee
우니베르지테트 스튜트가르트
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 우니베르지테트 스튜트가르트 filed Critical 우니베르지테트 스튜트가르트
Publication of KR20060052771A publication Critical patent/KR20060052771A/ko
Application granted granted Critical
Publication of KR101116989B1 publication Critical patent/KR101116989B1/ko

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

Abstract

본 발명은 메모리 내에서 및 프로세서 레지스터 내에서 서로 포인터 및 데이터를 엄격하게 분리하므로써 정확한 포인터 식별을 허용하는 객체 근거 프로세서 아키텍처에 관한 것이다. 메모리에 대한 액세스는 객체를 조회하는 포인터를 통해 배타적으로 수행된다. 객체는 포인터 및 데이터를 위한 개별 영역들을 포함하고 2개의 영역들의 길이를 기술하기 위한 속성 필드를 포함한다. 객체들의 포인터 레지스터 내의 포인터들 및 또한 포인터 영역들 내의 포인터들은 참조하는 객체들의 어드레스를 직접 포함한다. 제안된 프로세서 아키텍처는 자동 가비지 콜렉션의 통합을 허용하는데, 이는 하드웨어 내에서 완전하게 또는 부분적으로 구현될 수 있다. 실시간 가능한 가비지 콜렉션은 하드웨어 지원을 통해 특별히 효율적으로 구현될 수 있다.
아키텍처, 프로세서 레지스터, 포인터, 객체 근거 프로세서 아키텍처, 객체, 속성 필드, 포인터 레지스터, 어드레스, 자동 가비지 콜렉션

Description

정확한 포인터 식별을 위한 프로세서 아키텍처 {PROCESSOR ARCHITECTURE FOR EXACT POINTER IDENTIFICATION}
본 발명은 메모리로의 액세스가 객체(object)를 나타내는 포인터(pointer)를 통해 발생하는 프로세서 아키텍처에 관한것이다.
소프트웨어의 복잡도를 관리하는 것은 소프트웨어 개발에서 가장 큰 필요 조건이다. 고품질, 신뢰성 시스템은 소프트웨어가 이해가능하고 제어가능한 모듈로 분해되고 이론적으로 기술될 때에만 구현될 수 있다. 이를 달성하기 위해서, 객체-지향 프로그래밍 언어(object-oriented programming language)가 수년간 사용되어 왔다.
객체-지향 프로그래밍 언어의 구현에서 중요한 문제점은 동적 메모리 관리이다. C++와 같은 몇몇 객체-지향 프로그래밍 언어는 계속 매뉴얼 메모리 관리에 대해 구축되는데, 즉 프로그래머의 책임하에 메모리가 요구될 수 있고 또한 다시 해제될 수 있다. 그러나, 이러한 방법은 문제점에 맞춰진 시스템의 자연적인 모델링이, 메모리 관리가 또한 시스템의 설계중에 구현되어야 하기 때문에 종종 가능하지 않다는 단점을 갖는다. 더구나, 메모리의 매뉴얼 해제는 프로그램 에러의 전체적인 등급의 원인이다. 예를 들면, 메모리 영역이 참조가 계속 이 메모리 영역에 존재하더라도 해제되는 경우, 이는 또 다른 프로그램 실행시에 파국적 결과를 가질 수 있다. 이는 이미 해제된 메모리 영역(허상 참조; dangling reference)에 대한 포인터가 계속 존재하므로써 생긴 에러의 결과가 많은 요소들의 함수이고 따라서 쉽게 재생될 수 없고 간신히 국부화만 가능한 경우에 특히 심각한다. 이러한 이유로, 자바와 같은 거의 모든 현대 프로그래밍 언어가 자동 가비지 콜렉션(automatic garbage collection)를 포함하는 동적 메모리 관리에 기초한다. 이러한 동적 메모리 관리를 포함하는 시스템에서, 메모리 영역은 프로그램의 책임하에 반환될 수 없다. 대신에, 가비지 콜렉터는 메모리 영역들이 프로그램에 의해 더 이상 안전하게 참조되지 않을 때 자동적으로 메모리 영역들을 해제만 한다. 이러한 원리 때문에, "허상 참조"는 발생하지 않을 수 있다. 더구나, 이러한 기술의 사용은 프로그래머의 생산성을 증가시키는데, 그 이유는 프로그래머가 이제는 실질적인 문제점을 완전하게 해결할 수 있기 때문이다. 마지막으로, 준비된 소프트웨어는 높은 품질인데, 그 이유는 동적 메모리 관리를 포함하는 시스템 내의 숨겨진 프로그램 에러의 가능성이 매뉴얼 메모리 관리를 포함하는 시스템 내에서보다 상당히 낮기 때문이다.
동적으로 생성된 메모리 영역의 자동 해제에 대한 다양한 알고리즘이 있는데, 이들은 참조 카운팅, 복사 및 마크 스위프 콜렉션의 개념하에서 본 분야의 숙련자들에게는 알려져 있다. 이들 알고리즘의 개략에 대해서, R. Jones, R. Lins: "Garbage Collection: Algorithm For Automatic Dynamic Memory Management", John Wiley & Sons, 1996을 참조한다.
이들 알고리즘의 간단한 구현은 가비지 콜렉션 사이클의 전체 기간 동안 애플리케이션 프로그램을 인터럽트한다. 이들은 전형적으로 프로그램 실행시에 길고 예측할 수 없는 포즈(pause)를 야기하고, 따라서 인터랙티브 시스템 또는 실시간 환경에 대해서 적절하지 않다.
증분 및 동시 방법은 가비지 콜렉션 사이클 동안 프로그램 실행이 지속되게 한다. 그러나, 이들은 애플리케이션 프로그램과 가비지 콜렉터 간의 동기화를 요구한다. 관련된 객체가 가비지 콜렉터에 의해 이미 처리되었는지를 결정하기 위해서는, 이러한 소프트웨어 내에서의 동기화는 중요하나, 그 이유는 사용된 방법에 따라, 짧은 코드 시퀀스가 각 포인터 로드(판독 배리어) 전에 또는 각 포인터 저장(기입 배리어) 전에 채택되어야 하기 때문이다.
많은 증분 방법은 "실시간 가능(real-time capable)"으로서 기술되는데, 그 이유는 가비지 콜렉터에 의해 생긴 포즈가 사용자에 의해 등록될 대부분의 경우에 너무 짧기 때문이다. 그러나, 하드 실시간 가능성(hard real-time capability)은 시스템의 응답 시간에 대한 일정한 상한 한계치의 보장을 요구한다. 소프트웨어-근거 방법들이 전체 객체의 프로세싱 또는 루트 세트(레지스터 및 스택)의 모든 포인터들의 심사와 같은 논-인터럽트가능(non-interruptible) 동작에 전형적으로 좌우되기 때문에, 이들 방법은 하드 실시간 필요 조건을 충족시키지 못한다. 무제한 기간의 분할 불가능 동작 없이 가능한 소프트웨어 솔루션이 알려져 있지만, 계산 시간 및 메모리 내에서의 이들 솔루션의 오버헤드는 중요하다.
자동 가비지 콜렉션에 대한 모든 기술의 기본적인 문제점은 포인터를 찾고 식별하는 것이다. 포인터가 논-포인터로부터 분명하게 구별화될 수 없다면, 보수적인 가비지 콜렉션이 수행될 수 있다. 이것이 의미하는 것은 포인터를 표현할 수 있는 모든 비트 패턴이 계속 사용중인 메모리의 해제를 방지하기 위해서 포인터로서도 보여질 수 있어야 한다는 것이다. 따라서, 객체 및 업데이트 포인터를 이동시키는 비압축 방법(no compacting methods)은 보수적인 가비지 콜렉션에 사용될 수 있다. 그러나, 메모리는 압축 방법없이 분해된다.
이들 방법을 방지하고 정확한 가비지 콜렉션을 수행하기 위해서, 더 큰 비용이 포인터를 탐색하고 식별하는데 사용된다. 많은 객체-지향 언어에서, 포인터 및 객체는 모든 객체 내에 포함되는 타입 디스크립터(type descriptor)를 통해 식별될 수 있다. 프로그램 스택 및 프로세스 레지스터 내에서의 포인터의 국부화는 좀 더 어려우나, 특히 컴파일러의 최적화와 관련하여 어렵다. 현재 포인터를 포함하는 프로세서 레지스터 및 스택 포지션이 상세된 데이터 구조를 유지하는 것이 가능하나, 프로그램 실행중에 이러한 타입의 데이터 구조를 구현하기 위한 비용은 매우 높다. 이러한 이유로, 대부분의 소프트웨어 근거 방법은 프로그램 스택 및 레지스터 내의 포인터의 포지션을 기술하는 컴파일러에 의해 생성된 테이블을 사용한다. 가비지 콜렉션이 수행될 수 있는 모든 프로그램 포인트에 있어서, 이러한 타입의 테이블 세트가 준비된다. 이러한 기술의 구현은 그러나, 프로그램 코드의 중대한 인플레이션을 야기한다. 더구나, 실시간 시스템은 중지될 스레드(thread)가 제한된 시간 범위 내에 이러한 타입의 다음 프로그램 포인트에 도달하는 것을 보장해야 한다.
따라서, 다양한 문제점은 소프트웨어 내에 자동 가비지 콜렉션을 주로 사용하는 현행 시스템을 사용하여 극복되어야 한다. 이는 무엇보다도 소프트웨어가 하위 하드웨어가 제공하지 못하는 기능들을 시물레이션하여야 하기 때문이다. 효율성 및 실시간 가능성과 관련된 많은 문제점들은 프로세서 자체가 하드웨어 내에서 자동 가비지 콜렉션을 전체적으로 또는 부분적으로 수행하는 경우에 극복될 수 있다. 그러나, 프로세서가 이러한 목적을 위해 포인터를 식별할 수 있는 것이 절대적으로 필요하다.
다음에, 다양한 공지된 아키텍처 중에서, 2개만이 예시적 목적으로 기술되는데, 이는 정확한 포인터 식별 및/또는 자동 가비지 콜렉션을 지지하고, 본 발명의 주 과제가 중요하다.
따라서, 메모리 영역을 어드레스하기 위해서 직접 포인터 대신에 가능성을 이용하는 아키텍처가 1966년 이래로 공지되어 있다. 가능성은 객체의 액세스 인가 및 식별에 대한 스테이트먼트를 포함한다. 이들은 객체의 물리적 어드레스를 포함하지 않지만, 오히려 객체의 위치, 사이즈 및 속성을 기술하는 디스크립터에 대한 참조를 포함한다. 이러한 타입의 아키텍처를 포함하는 프로세서의 예는 예를 들어, H. M. Levy: "Capability-Based Computer Systems", Digital Press, 1984, 159-186 페이지에 기술된 Intel iAPX 432이다. 이러한 아키텍처에서, 가능성은 2-스테이지 맵핑 프로세스를 통해 관련 객체와 관련된다. 객체 테이블 내의 고유 엔트리가 모든 객체마다 존재하는데, 이는 객체의 위치, 사이즈 및 상태를 기술한다. 모든 객체는 2개의 영역: 데이터 영역 및 가능성에 대한 영역을 포함한다. 정확한 가능성 식별은 이러한 방식으로 가능하게 된다.
iAPX 432는 가능성 및 객체 디스크립터를 통해 객체의 2중 간접 어드레싱 및 레지스터 세트의 부족으로 인해 매우 비효율적이다. 더구나, 자동 가비지 콜렉션 자체를 수행하지는 못한다. 가비지 콜렉션은 소프트웨어 내에서 수행되어야 하고, 실시간으로 가능하지는 못한다.
직접 포인터를 식별하기 위한 모든 공지된 방법은 포인터와 논-포인터 간의 구별을 위해 모든 메모리 워드 내의 특별한 식별 비트 (태그; tag)를 사용한다. 이러한 예는 US 5,560,003A 내에 기술된 실시간의 증분 가비지 콜렉션을 위한 시스템 및 하드웨어 모듈인데, 이는 가비지 콜렉션을 수행하는 로컬 프로세서 및 2개의 메모리 뱅크들로 이루어진다. 모든 메모리 뱅크는 각 메모리 액세스 시에 대응하는 객체의 스타트 어드레스에 어드레스들을 맵핑하는 객체 공간 매니저에 의해 지지된다. 그 복잡성 때문에, 이러한 객체 공간 매니저는 메모리 자체로서 유사한 칩 영역을 점유하는 개별 ASIC로서 구현되어야 한다. 이러한 타입의 시스템은 매우 비싸다. 더구나, 식별 비트의 도움으로 포인터의 식별은 필요한 메모리 및 계산 시간의 형태로 추가 비용을 야기한다.
임베디드 시스템 내의 소프트웨어의 복잡성의 계속적인 증가 때문에, 이러한 경제적으로 중요한 분야에 대해 액세스가능한 자동 가비지 콜렉션의 장점을 또한 만들기 위해서 매우 큰 노력이 수년간 취해졌다. 가장 큰 피스 카운트는 현대 정보 기술의 이 영역에서 정확하게 얻어진다. 제조 사이클이 계속적인 혁신을 통해 점점 짧아지기 때문에, 현대 객체 지향 언어를 위한 임베디드 시스템을 위한 로버 스트 및 실시간 가능 플랫폼을 위한 요구가 계속해서 증가한다. 그러나, 이들 애플리케이션에 있어서, 자동 가비지 콜렉션은 대부분의 경우에 사치를 계속 고려해야 하는데, 이는 자동 가비지 콜렉션의 확실한 장점에도 불구하고 제공될 수 없다.
이러한 관련 기술로부터 진행하여, 본 발명의 목적은 객체 근거 및 객체 지향 프로그램을 위한 프로세서 아키텍처를 특정하는 것인데, 이는 비용 효율적이고 정확한 포인터 식별을 허용하고 따라서 하드웨어 내에서 전체적으로 또는 부분적으로 구현될 수 있는 효율적이고 실시간 가능한 자동 가비지 콜렉션을 위한 경로를 개방한다.
본 발명의 목적은 청구항 1에 따른 프로세서 아키텍처에 의해 달성된다. 프로세서 아키텍처의 유리한 실시예는 종속 청구항의 주 과제이고 다음의 설명 및 예시적인 실시예들로부터 추론될 수 있다.
본 특허 출원의 범위에서, 용어 워드(word)는 단일 프로세서 명령을 사용하여 메모리 내에 저장되거나 메모리로부터 로드될 수 있는 데이터 유닛으로서 이해되어진다. 객체는 모든 워드가 단일 객체와 배타적으로 관련되어 있는 메모리 워드들의 코히런트 세트(coherent set)로서 이해되어진다. 포인터는 객체를 나타내는 워드로서 이해되어진다. 용어 널(null)은 객체가 없음(no object)을 나타내기 위해 사용되는 영구히 미리 정의된 포인터 값을 나타낸다.
객체 근거 및 객체 지향 프로그램을 위한 본 프로세서 아키텍처에서, 메모리는 객체를 직접 나타내는 포인터를 통해 배타적으로 액세스된다. 객체는 코히런트 메모리 영역 내에 배타적으로 저장되는데, 즉 2개의 객체에 의해 점유된 메모리 영역은 중첩될 수 없다. 모든 객체에서, 포인터는 포인터 영역에 저장되고 데이터는 서로 분리적으로 데이터 영역에 저장된다. 또한, 포인터 영역의 길이 및 데이터 영역의 길이에 관한 정보는 모든 객체 내에 저장된다. 이러한 길이 정보는 다음에 속성(attribute)으로서 나타내진다. 언제든지 객체의 사이즈를 결정하고 속성의 도움으로 서로 객체 내에 포인터 및 데이터의 범위를 유일하게 정하는 것이 가능하다.
본 프로세서 아키텍처는 개별적인 포인터 레지스터 및 데이터 레지스터 세트들을 제공한다. 이 경우, 포인터 레지스터는 객체를 사용하는 동작을 위해, 예를 들면 메모리 액세스를 위해 배타적으로 제공되고, 다른 태스크들을 위해서는 사용되지 않는다. 따라서, 임의 값이 포인터 레지스터 내에 기입될 수 없고 산술 동작이 포인터 레지스터를 사용하여 수행될 수 없다는 것이 특히 보장된다.
객체의 포인터 영역 내의 및 포인터 레지스터 내의 포인터들은 메모리 내의 객체의 어드레스들을 직접 포함한다.
본 객체 근거 프로세서 아키텍처를 사용하여, 포인터와 논-포인터 (데이터)의 엄격한 분리는 정확한 포인터 식별이 식별 비트를 필요로 하지 않고도 가능하도록 이러한 방식으로 구현된다. 하드웨어에 의해 보장되는, 프로세서 아키텍처 내의 및 메모리 내의 포인터를 식별하기 위한 이러한 정확한 능력에도 불구하고, 하드웨어 내에서 전체적으로 또는 부분적으로 구현될 수 있는 자동 가비지 콜렉션은 프로세서 레벨 상에 통합될 수 있다. 이러한 기초하에, 특별히 효율적으로 구현될 수 있는 자동 가비지 콜렉션을 포함하는 실시간 가능 시스템이 가능하다. 따라서, 프로세서 상에서 실행되어야 하는 소프트웨어는 가비지 콜렉션 알고리즘 자체에 대해서 필요하지 않고, 프로세서와 가비지 콜렉터 간의 필수 동기화에 대해서도 필요하지 않다. 프로세서는 가비지 콜렉터에 대해 메모리 대역폭의 일부를 단지 산출하여야 한다.
아키텍처의 다른 장점은 가비지 콜렉션이 컴파일러 및/또는 런타임 시스템의 협력없이도 관리되고 따라서 특히 강건하게 구현될 수 있다는 점이다.
가비지 콜렉션의 구현을 위한 하드웨어 비용은 프로세서 자체를 위한 비용에 비해, 비교적 낮다. 이러한 이유로, 그러한 프로세서는 바로 전형적인 마이크로 프로세서 또는 마이크로 컨트롤러와 같이 비용 효율적으로 제조될 수 있다.
본 프로세서 아키텍처에서, 포인터로서 식별된 모든 워드가 현행 객체의 어드레스를 포함하거나 널(null)인 것이 프로세서에 의해 양호하게 보장된다. 이러한 양호한 실시예에서, 모든 메모리 워드 또는 레지스터가 포인터인지 아닌지에 대해서, 그리고 또한 모든 포인터 값이 널이거나 현행 객체의 어드레스를 포함하는 지에 대해서 식별될 수 있는 고정된 룰(시스템 불변; system invariants)은 따라서 프로세서 아키텍처에 의해 유지된다. 이들 시스템 불변 상태를 유지하므로써, 시스템 내의 포인터의 정확한 식별은 모든 클럭 사이클마다 가능하다.
양호하게는, 새로운 객체는 생성될 객체의 속성이 파라미터로서 전송되는 특별한 객체 생성 명령에 의해 생성된다. 이러한 객체 생성 명령은 객체가 액세스될 수 있기 전에 널 값을 갖는 포인터 영역의 모든 포인터들을 초기화한다. 시스템 불변은 이런 방식으로 침해되지 않는다.
하드 실시간 필요 조건에 대한 세분할에 있어서, 객체 생성 명령은 인터럽트가능하게 구현된다. 객체 생성 명령이 인터럽트되면, 불완전하게 초기화된 객체들은 인터럽트된 객체 생성 명령이 때를 맞춰 나중 포인트에서 다시 시작할 수 있는 방식으로 생성된다. 불완전하게 초기화된 객체들은 프로세서에 의해 유일하게 식별된다.
양호하게는, 프로그램이 시작되기 전에도 판독 전용 메모리 영역의 일부로서 존재하는 일정한 객체는 프로세서 아키텍처에 의해 지지된다. 일정한 객체에 대한 포인터는 프로세서에 의해 유일하게 식별된다.
본 프로세서 아키텍처에서, 메모리의 영역은 공지된 방식으로 프로그램 스택을 위해 양호하게 예비된다. 프로그램 스택은 이러한 목적을 위해 포인터 스택 영역 및 데이터 스택 영역으로 분할되는데, 제1 포지션은 각 경우에 예비된 데이터 레지스터 내에서 관리되는 스택 인덱스에 의해 특정되는 각 경우의 스택에 의해 점유되지 않는다.
다중 스택이 사용되면, 현재 비활성중인 스택의 스택 인덱스는 관련 스택 객체 내의 속성으로서 양호하게 저장된다. 더구나, 스택 객체는 힙(heap) 내에 보다는 오히려, 동작 시스템에 의해 관리된 정적 메모리 영역 내에 정적 객체로서 양호하게 저장되고, 이러한 타입의 객체에 대한 포인터(정적 포인터)는 특별한 방식으로 식별된다.
프로세서 아키텍처의 효율적인 구현을 위해서, 모든 포인터 레지스터는 이러한 포인터 레지스터 내의 포인터에 의해 표시된 객체에 속하는 객체의 속성이 저장되는 속성 레지스터를 수반한다. 이 실시예에서, 속성을 로드하기 위한 추가 파이프라인 스테이지가 제공된다. 더구나, 액세스를 가속하기 위한 속성 캐시(attribute cache)는 이러한 파이프라인 스테이지 내에 양호하게 사용된다.
브랜치 예측(branch prediction)을 위한 명령 및 데이터 캐시 또는 유닛과 같은, 프로그램 실행 및 전형적인 최적화에 필요한 모든 다른 파이프라인 스테이지 및 기능적 유닛은 본 프로세서 아키텍처의 구현에서의 관련 기술에 따라 구현될 수 있다.
도 1은 본 프로세서 아키텍처의 레지스터 모델을 개략적으로 도시한다.
도 2는 본 프로세서 아키텍처의 객체 모델을 개략적으로 도시한다.
도 3은 스택 객체로서 프로그램 스택의 구현을 개략적으로 도시한다.
도 4는 포인터 관련 명령의 분류를 포함하는 테이블을 도시한다.
도 5는 본 프로세서 아키텍처를 위한 객체 레이아웃의 구현의 예를 도시한다.
도 6은 속성을 포함하는 포인터 레지스터를 개략적으로 도시한다.
도 7은 본 프로세서 아키텍처를 위한 파이프라인의 구현의 예를 개략적으로 도시한다.
도 8은 도 7에 따른 파이프라인의 스테이지에 대한 포인터 관련 명령의 분해를 개략적으로 도시한다.
도 9는 본 장치의 예를 개략적으로 도시한다.
다음에서, 본 발명에 따른 프로세서 아키텍처의 실시예의 예가 기술되는데, 이는 효율적으로 구현될 수 있는 일반적으로 적용가능한 RISC 명령 세트에 기초하는, 그리고 실행 시간이 수 클럭 사이클을 초과하는 불가분의 동작을 요구하지 않는, 식별 비트 (태그)를 사용하지 않는 정확한 포인터 식별을 달성하는 목적에 우선적으로 기초한다.
기술된 프로세서 아키텍처는 다음의 시스템 불변을 보장한다:
1. 모든 메모리 워드 또는 레지스터는 포인터를 나타내는 지에 대해서 식별될 수 있다.
2. 모든 포인터 값은 널이거나 현행 객체와 유일하게 관련된다.
본 프로세서 아키텍처는 도 1에서 개략적으로 도시된 바와 같이, 개별 데이터 및 포인터 레지스터 세트들을 제공한다. 우측 부분에 도시된 데이터 레지스터는 다용도 레지스터로서 사용되는 반면, 좌측 부분에 도시된 포인터 레지스터는 메모리 내의 객체에 대한 액세스를 위해 사용된다. Np는 포인터 레지스터의 수를 나타내고, Nd는 데이터 레지스터의 수를 나타낸다. 시스템 불변을 충족시키기 위해서는, 포인터 레지스터 내의 데이터 레지스터의 값을 복사하거나 포인터 레지스터를 사용하여 산술 동작을 수행하는 것과 같이, 포인터 레지스터 내에 임의 값을 기입하는 것이 불가능하다는 것이 보장되어야 한다.
본 프로세서 아키텍처의 메모리 모델은 객체 근거형이다. 모든 객체는 데이 터 영역 및 포인터 영역으로 이루어지는데, 이는 엄격하게 서로 분리된다. 도 2는 객체의 포인터 영역(도면의 좌측부)의 대응하는 포인터 워드 및 데이터 영역(도면의 우측부)의 데이터 워드를 포함하는 형태의 객체의 개략적 구조를 도시한다. 데이터 영역 내의 데이터 워드의 수는 σ 속성 (σ≥0)에 의해 기술되고, 포인터 영역 내의 포인터 워드의 수는 Π 속성 (Π≥0)에 의해 기술된다. 속성에 의해 기술된 객체의 사이즈는 객체가 생성되고 나중에 변경되지 않을 수 있을 때 고정된다. 속성은 객체의 일부이고, 개별적인 속성 영역 내에 저장된다.
본 프로세서 아키텍처에 대한 명령 세트의 특정 부분은 로드 및 저장 명령을 포함하는 포인터 관련 명령을 단독으로 포함한다. 산술 명령 또는 프로그램 콘트롤을 위한 명령과 같은 다른 명령의 실시예는 기술된 아키텍처와 독립적으로 선택될 수 있고, 본 발명의 일부가 아니다.
기술된 아키텍처의 명령 세트는 새로운 객체 및 이 객체에 대한 포인터를 생성하는데 사용되는 특별한 객체 생성 명령을 포함한다. 객체 생성 명령 (객체 할당)은 인수(arguments)로서 생성될 객체에 대한 Π 및 σ 속성의 값들을 수신하고, 새롭게 생성된 객체에 대한 포인터를 포인터 레지스터 내에 저장한다. 생성된 객체의 포인터 영역 내의 모든 포인터 값은 객체에 대한 포인터가 프로그램을 위해 가시적이기 전에, 널을 사용하여 초기화된다. 객체를 소거시키기 위한 명령은 없다. 객체는 프로세서 레벨에 따라 자동 가비지 콜렉션에 의해 소거만 될 수 있다.
로드 및 저장 명령은 객체 내의 워드에 대한 액세스를 위해 사용된다. 프로세서 아키텍처는 포인터 값 및 데이터 워드에 대한 액세스를 위한 상이한 로드 및 저장 명령을 제공한다. "로드 데이터" 및 "저장 데이터" 명령은 객체의 데이터 영역과 데이터 레지스터 간에 데이터 워드를 배타적으로 이동시킨다. "로드 포인터" 및 "저장 포인터" 명령은 객체의 포인터 영역과 포인터 레지스터 간에 포인터를 배타적으로 이동시킨다. 로드 및 저장 명령은 객체에 대한 포인터를 포함하는 포인터 레지스터의 도움으로 그리고 양의 정수 인덱스의 도움으로 액세스될 메모리 워드를 식별한다. 인덱스를 -종래의 아키텍처의 어드레싱 모드에 아날로그적으로- 계산하기 위해서, 상이한 "인덱싱 모드"는 예를 들어, 데이터 레지스터, 일정한 오프셋 및 스케일링 팩터를 이용하여 사용될 수 있다.
객체에 대한 액세스 시에, 범위 체크는 특별한 참조된 객체 외부의 워드에 대한 액세스가 가능하지 않다는 것을 보장하기 위해서 수행되어야 한다. 그러한 액세스는 파국적 결과를 가질 수 있고 시스템 불변을 침해할 수 있다. 이러한 이유로, 바운스 위반(bounce violation)의 경우에, 메모리 액세스는 종료되고 대응하는 예외 핸들러(corresponding exception handler)는 초기화된다. 유사한 이유로, 널 포인터를 디레퍼런스(dereference)하기를 시도하는 명령은 중지된다.
객체의 속성은 2개의 "판독 속성" 명령에 의해 질의될 수 있다.
데이터 레지스터 상의 동작을 위해 전형적으로 구현되는 다중 "레지스터 대 레지스터" 명령과 대비하여, 포인터 관련 "레지스터 대 레지스터" 명령을 위한 2개의 명령의 강하게 제한된 세트는 현재의 아키텍처에 의해 정의된다. "포인터 복사(copy pointer)" 명령은 포인터 레지스터 내의 콘텐트를 다른 포인터 레지스터에 복사하고, 반면에 "포인터 비교(compare pointers)" 명령은 2개의 포인터가 동일한 객체를 나타내는 지를 체크한다.
도 4는 본 프로세서 아키텍처에 의해 정의된 포인터 관련 명령의 개요를 도시하고, 포인터 레지스터를 판독, 기입 또는 디레퍼런스하는 지에 대해서 이들 명령을 특징지운다. 각 경우에 판독, 기입 및 디레퍼런스되는 레지스터는 굵게 인쇄된다.
프로그램 스택의 비체계적이고 높은 동적 특성 때문에, 이들은 자동 가비지 콜렉션의 범위 내에서 포인터 식별과 관련하여 가장 큰 요구들 중 하나를 나타낸다. 본 프로세서 아키텍처에서, 프로그램 스택은 소정의 객체와 같이 데이터 영역 및 포인터 영역을 포함하고 따라서 2개의 개별 스택으로서 보여질 수 있는 스택 객체로서 보여진다. 포인터 레지스터는 스택 객체 상의 포인터를 유지하기 위해서 예비된다. 스택 인덱스는 대응하는 영역을 실제 스택과 현재 점유되지 않은 영역으로 나누기 위해서 2개의 스택 영역들 각각에 사용된다. 스택 인덱스는 본 예에서는 제1의 비점유된 메모리 위치에 관련되어 있다. 0의 스택 인덱스는 빈 스택을 나타낸다. 2개의 스택 인덱스는 데이터 스택 인덱스(dsix) 및 포인터 스택 인덱스(psix)로서 식별된다. 이들 인덱스 각각은 이러한 용도로 예비된 특별한 데이터 레지스터 내에 유지된다.
스택 객체가 전형적인 객체와 같이 처리되면, 시스템은 포인터가 현재 점유된 포인터 스택 또는 포인터 스택 영역 중 비점유된 부분에 속하는 지를 구별할 수 없다. 포인터 스택 영역 내의 모든 워드가 포인터로서 식별되기 때문에, 포인터 스택 영역 중 미사용 영역은 더 이상 필요하지 않은 객체를 조회하는 많은 포인터 들을 포함할 수 있다. 가비지 콜렉터는 이들 객체에 대한 포인터가 계속 존재하기 때문에 이들 객체들을 해제할 수 없다. 이 객체에 대한 가능한 솔루션은 대응하는 포인터가 스택으로부터 제거될 때마다 모든 포인터 값을 널로 겹쳐쓰는 것이다. 그러나, 이는 특히 다중 포인터가 스택으로부터 제거되는 경우에, 예를 들면 서브프로그램의 끝에서 스택 프레임의 비할당 동안의 경우에서와 같이, 바람직하지 않은 오버헤드를 야기한다.
프로세서 아키텍처의 유리한 실시예의 기술된 예를 위해서, 객체의 달성이 선택되는데, 이는 스택의 동적 사이즈를 고려한다. 이러한 목적을 위해, 도3에 도시된 스택 객체는 2개의 속성 쌍들에 의해 기술되는데, 그 중 한 쌍(Π, σ)은 현재 스택 사이즈를 특정하고, 다른 쌍(Π, Δ)은 최대 스택 사이즈를 특정한다. Π 속성은 이 경우에 포인터 스택 인덱스(psix)의 값에 대응하고, σ 속성은 데이터 스택 인덱스(dsix)의 값에 대응한다. 스택 속성(Π 및 Δ)은 시스템 레지스터 내에 유지되는데, 이는 사용자 프로그램을 위해 가시적이지 않다. Π보다 작은 인덱스를 갖는 포인터만이 포인터 식별 및 시스템 불변과 관련한 포인터로서 보여진다.
스택 내의 메모리 워드는 표준 로드 및 저장 명령에 의해 어드레스된다. 워드는 표준 산술 명령을 사용하여 대응 스택 인덱스의 값을 감소시키므로써 스택으로부터 제거될 수 있다. 시스템 불변을 유지하기 위해서는, 포인터 스택 상에 포인터를 푸쉬하도록 특별한 명령이 제공되는데, 이는 포인터 스택 영역의 제1의 비점유 메모리 위치 상에 포인터를 인터럽트가능하지 않게 저장하고 포인터 스택 인덱스를 증가시킨다. 이는 단지 포인터 스택 인덱스를 증가시키도록 허용된 명령이 다.
지금까지 기술된 프로세서 아키텍처에서, 메모리는 포인터를 통해 배타적으로 액세스될 수 있고, 포인터를 생성하기 위한 유일한 가능성은 객체 생성 명령에 의해 새로운 객체를 생성하는 것이다. 그러나, 예를 들어 프로그램 개시 전에도 프로그램 코드의 일부로서 존재하는 일정한 데이터를 액세스하는 것 또한 가능하다. 그러한 일정한 데이터의 예들은 브랜치 테이블 또는 타입 디스크립터와 같이 컴파일러에 의해 생성된 구조 또는 일정하게 링크된 리스트이다.
따라서, 프로세서 아키텍처의 유리한 실시예의 현재 예는 일정한 객체를 도입한다. 일정한 객체는 변경불가능한 객체인데, 이는 프로그램 코드의 일부로서 저장되거나 또는 일정한 객체를 위해 예비된 특별한 영역 내에 저장된다. 특별한 "상수 포인터 생성(create constant pointer)" 명령은 이하에 상수 포인터로서 인용된 상수 객체에 대한 포인터의 생성을 위해 사용된다. 상수 포인터를 통한 메모리 액세스는 판독 액세스에 제한되고, 상수 객체의 포인터 영역은 상수 포인터 또는 널 포인터를 배타적으로 포함할 수 있다. 상수 객체는 특별한 타입의 객체를 구별하도록 제공되는
Figure 112006000061760-pct00001
속성에 의해 통상의 객체로부터 구별된다.
많은 시스템에서, 개별 프로그램 스택들은 사용자 모드 및 동작 시스템 모드와 같은 상이한 타입의 동작을 위해 사용된다. 또한, 다중 동시 실행 스레드(다중스레드 시스템)를 갖는 시스템은 각 실행 스레드를 위한 개별 프로그램 스택을 필요로 한다.
이들 모든 스택들은 동작 시스템에 의해 전형적으로 관리되며, 가비지 콜렉 션 (힙)에 의해 모니터링된 메모리 영역 내에 위치하지 않는다.
동작 시스템이 힙 메모리 영역 외부의 메모리 영역을 관리하게 하기 위해서, 정적 객체가 제공된다. 정적 객체는 동작 시스템 모드 내에 배타적으로 생성되며, 이러한 용도로 특별히 제공된 메모리 영역 내에 위치한다. 정적 객체는 또한
Figure 112006000061760-pct00002
속성에 의해 식별된다. 정적 객체에 대한 포인터(정적 포인터)는 사용자 프로그램에 대해서는 전혀 가시적이지 않다.
시스템 불변을 유지하기 위해서, 새롭게 생성된 객체 내의 모든 포인터는 관련 객체 생성 명령이 종료될 수 있기 전에 널 값으로 초기화되어야 한다. 따라서, 객체 생성 명령을 위한 실행 시간은 짧은 일정한 시간에 의해 제한되지 않는다. 이는 하드 실시간 애플리켄이션에 적용될 수 없다.
객체 생성 명령을 인터럽트가능하게 구현하기 위해서, 미초기화된 (좀 더 상세하게는, 불완전하게 초기화된) 객체는 이미 기술된 프로세서 아키텍처의 유리한 실시예 내에 도입된다. 미초기화된 객체는 객체 생성 명령이 완료되기 전에 인터럽트될 때에만 생성된다. 미초기화된 객체에 대한 포인터는 오직 동작 시스템 모드 내에서만 가시적이고, 전혀 디레퍼런스될 수 없다. 미초기화된 객체는 정적 및 일정한 객체와 같이
Figure 112006000061760-pct00003
속성에 의해 식별된다.
따라서, 기술된 프로세서 아키텍처의 예시적인 유리한 실시예는 4개의 상이한 타입의 객체들을 지지하는데, 이들은 정상적인 동적 객체, 미초기화된 동적 객체, 일정한 객체 및 정적 객체가다.
Figure 112006000061760-pct00004
속성은 객체 타입을 구별하는데 사용되며, 4개의값 (norm, uini, const, stat) 중 하나를 추정할 수 있다. 아키텍처의 구현에서,
Figure 112006000061760-pct00005
속성은 객체에 대한 포인터 내에 및/또는 객체 자체 내에 저장될 수 있다.
정상적인 동적 객체 및 미초기화된 동적 객체는 힙 메모리 영역 내에 위치하고, 정적 객체는 정적 메모리 영역 내에 위치하며, 일정한 객체는 프로그램 코드 및/또는 일정한 데이터를 위해 제공된 메모리 영역 내에 위치한다. 정적 및 미초기화된 객체들이 동작 시스템 모드에 제한되기 때문에, 이들은 시스템 객체로서 식별된다.
자동 가비지 콜렉션의 관점으로부터, 4개 타입의 객체들은 이들이 압축(compacting) 가비지 콜렉터에 의해 처리되는 방법에 의해 특징지워질 수 있다. 전형적인 동적 객체는 포인터에 대해 탐색되어야 하고, 압축 중에 이동되어야 한다. 정적 객체는 포인터에 대해 탐색되어야 하지만, 이동될 수는 없다. 반면에, 미초기화된 객체는 압축 중에 이동되어야 하지만, 포인터에 대해 탐색될 수 없는데, 그 이유는 이들이 무효 포인터를 포함할 수 있기 때문이다. 마지막으로, 일정한 객체는 포인터에 대해서 탐색되어야 하지도 않고, 가비지 콜렉터에 의해 이동되지도 않는다.
암시적인 프로세서 아키텍처의 가능한 구현은 다음에 예시적인 목적을 위해 설명된다. 32-비트의 워드 값은 구현을 위해 가정된다. 메모리는 데이터 영역 내에서 바이트 및 하프워드(halfword) 액세스를 또한 허용하기 위해서 어드레스가능한 바이트 바이 바이트(byte by byte)이다. 워드는 4개로 분할가능한 어드레스들 로 정렬되어야 한다.
메모리 내의 객체의 예시적인 레이아웃은 도 5에서 설명된다. 모든 객체는 데이터 영역, 포인터 영역 및 속성 영역을 포함한다. 효율성을 이유로, 객체는 8개로 분할가능한 어드레스들로 정렬되는데, 그 이유는 2개의 객체들 간의 패딩 영역이 특정 환경하에서 요구될 수 있기 때문이다. 사용자 프로그램에 가시적이지 않은 속성 영역은 객체의 Π 및 σ 속성을 포함한다. 바이트 및 하프워드 연산자의 지지 때문에, 현재의 구현은 Π 및 σ의 정의를 약간 변경하는데, 그 이유는 이들이 이제 대응 영역 내의 워드의 수 대신에 바이트의 수를 기술하기 때문이다.
Π가 4의 배수이어야 하기 때문에, 2개의 비트는 Π 속성에 사용되는 메모리워드 내에 점유되지 않은 상태로 남아 있다. 이들은
Figure 112006000061760-pct00006
속성 (또는 그 일부)를 및/또는 가비지 콜렉터에 의해 저장하는데 사용될 수 있다.
포인터는 객체의 물리적 메모리 어드레스를 직접 포함한다. 객체들이 2중 워드에 따라 정렬되기 때문에, 객체 어드레스만은 29 비트의 포인터 워드를 점유한다. 나머지 3개의 비트들은
Figure 112006000061760-pct00007
속성 (또는 그 일부)를 및/또는 가비지 콜렉터에 의해 저장하는데 사용될 수 있다.
객체로의 액세스 전에, 객체의 속성들이 알려져야 하는데, 그 이유는 이들이 액세스 전에 범위 체크를 위해 필수적이고, 도 5에 따른 객체 레이아웃의 경우에는, 데이터 액세스 경우의 어드레스 생성에 추가적으로 필요하기 때문이다.
모든 객체 액세스 전에 메모리로부터 속성의 로딩이 큰 오버헤드와 연결되어 있기 때문에, 속성 레지스터는 도 6에 개략적으로 도시된 바와 같이, 모든 포인터 레지스터마다 제공된다. 포인터 레지스터가 널이 아닌 값을 포함하는 경우에, 대응 속성 레지스터는 포인터 레지스터가 참조하는 객체의 속성을 포함한다. 이러한 방식으로, 포인터 레지스터를 디레퍼런스하기 위한 비용은 종래 아키텍처에서의 어드레스 생성을 위한 비용만큼 매우 적다. 범위 체크 자체는 소정의 성능 손실에 관련되어 있지 않은데, 그 이유는 어드레스 계산에 병행하여 수행될 수 있기 때문이다.
그러나, 속성 레지스터는 그들의 가격을 갖는데, 포인터가 메모리로부터 로드되어야 할 때, 관련 속성 또한 속성 레지스터 내에 로드되어야 한다. 또한, 메모리 내의 속성의 위치는 포인터의 로딩이 완성될 때만 알려진다.
이러한 문제점은 RISC 아키텍처의 경우에 전형적인 메모리 스테이지 후에 추가 파이프라인 스테이지에 의해 효율적으로 해결될 수 있다. 이러한 추가 스테이지는 속성 스테이지로서 인용되고, 성능 손실 없이 대부분의 경우에 속성 액세스를 실행하기 위해서 속성 캐시를 사용한다. 속성 캐시의 구성은 전형적인 데이터 캐시의 것과 유사하다. 속성 캐시는 포인터의 상위 29 비트에 의해 어드레스되고, 단일 단계에서 Π 및 σ 속성의 판독 및 기입을 허용한다. 데이터 캐시로부터의 근본적인 차이는 캐시 라인의 사이즈이다. 데이터 캐시 내의 캐시 라인이 전형적으로 8 워드를 포함하는 반면, 속성 캐시의 라인은 2 워드의 폭을 갖고, 오직 단일 객체의 속성을 포함한다.
도 7은 구현된 파이프라인의 기본적인 구조를 도시하고, 도 8은 모든 포인터 관련 명령들을 개별적인 파이프라인 스테이지들로 분해하는 것을 도시한다. 2개의 가장 복잡한 명령의 프로세싱은 설명과 같이 예시적인 목적을 위해 기술된다.
1. "포인터 로드" 명령:
파이프라인의 실행 스테이지에서, 어드레스 생성 유닛(AGU)은 로드될 포인터의 메모리 어드레스를 계산하고, 이와 병행하여, 범위 체크 및 널 포인터 테스트와 같이, 아키텍처에 의해 규정된 런타임 테스트를 수행한다. 메모리 스테이지에서, 계산된 어드레스가 객체 캐시로부터 포인터를 판독하기 위해서 사용된다. 그 다음, 로드된 포인터가 조회하는 객체로부터 속성을 로드하기 위해서, 로드된 포인터는 속성 캐시를 어드레스한다. 마지막으로, 로드된 포인터는 레지스터 세트 내의 로드된 속성과 함께 기입된다.
2. 객체 생성 명령
생성될 객체의 사이즈는 디코딩 스테이지로부터 실행 스테이지까지 릴레이되는 2개의 데이터 연산자에 의해 결정된다. 실행 스테이지에서, 포인터 생성 유닛 (PGU)은 새로운 객체에 대한 포인터의 생성에 책임이 있다. 압축 가비지 콜렉터의 경우에, PGU는 새로운 객체의 생성을 위해 사용되는 힙의 영역 내의 마지막 점유된 워드를 항상 조회하는 보조 레지스터의 콘텐트에 객체 사이즈를 추가하므로써 매우 간단하게 새로운 객체의 개시 어드레스를 결정할 수 있다. PGU는 포인터 초기화에 필요한 어드레스를 생성하는 AGU에 의해 지지된다. 8 워드의 캐시 라인을 갖는 객체 캐시에서, 8까지의 포인터 워드는 클럭 사이클 내에 동시에 초기화될 수 있다. 이러한 방식으로, 객체 생성 명령은 객체의 개시 어드레스가 한 클럭 사이클 내에 개시될 수 있는 경우 및 객체 내의 모든 포인터가 동일 캐시 라인에 속하는 경우에 지연없이 실행 스테이지를 경험한다. 이것이 그 경우가 아니면, 파이프라인은 초기화가 완성되거나 인터럽션이 발생할 때까지 정지된다. 마지막으로, 새롭게 생성된 객체의 속성들은 속성 캐시 내에, 및 레지스터 세트 내의 속성과 함께 포인터 내에 기입된다. 인터럽트된 객체 생성 명령이 파이프라인의 끝에 도달하는 경우, 인터럽트된 객체 생성의 상태는 시스템 레지스터 내에 기입되고, 불완전하게 초기화된 객체는 미초기화된 객체에 대한
Figure 112006000061760-pct00008
속성으로 식별된다. 인터럽트된 프로그램의 실행 콘텍스트(명령 카운터, 시스템 레지스터)가 다시 시작하자마자 초기화가 다시 시작한다.
제안된 아키텍처의 기능적 가능성은 기능성 시제품(functioning prototype)에 기초하여 입증된다. 이러한 시제품에서, 가비지 콜렉터는 메인 프로세서의 파이프라인과 함께 밀접하게 작업하는 마이크로프로그램된 코프로세서로서 구현된다. 프로세서와 코프로세서 간의 동기화는 하드웨어 내에서 완전하게 구현된다. 가비지 콜렉션을 위한 프로세서와 코프로세서는 VDHL로 기술되고, 현대의 프로그램가능 논리 장치를 위해 함께 동기화된다. 더구나, 아키텍처를 위한 자바 클래식 라이브러리의 서브세트의 구현 및 원형의 자바 컴파일러가 존재한다.
도 9는 현재 장치의 예의 개략적 설명을 나타낸다. 가비지 콜렉터는 이 예에서는 마이크로프로그램가능한 코프로세서에 의해 형성된다. 본 발명에 따른 프로세서 아키텍처는 메인 프로세서(1) 내에서 구현된다. 메인 프로세서(1) 및 코프 로세서(2)에 대한 다중 개별 포트들을 갖는 메모리 콘트롤러(3)는 메인 메모리에 접속을 만든다. 메인 프로세서와 코프로세서 간의 동기화는 상이한 레벨로 발생한다. 가비지 콜렉터는 캐시 코히어런스를 보장하기 위해 필요할 때 데이터 및 속성 캐시의 라인을 플러시시키거나(flush) 비운다(empty). 프로세서 파이프라인 내에 통합되는 하드웨어 판독 배리어(hardware read barrier)는 가비지 콜렉터 내에서 인터럽트를 트리거시킬 수 있다. 가비지 콜렉터는 또한 마이크로코드 내의 임계 영역을 보호하기 위해서 메인 프로세서(1)를 정지시킬 수 있다.

Claims (20)

  1. 객체(object)를 나타내는 포인터(pointer)를 통해 메모리로의 액세스가 발생하는 프로세서 아키텍처(processor architecture)를 구비한 프로세서에 있어서,
    상기 프로세서는
    개별 데이터 및 포인터 레지스터들을 갖는 레지스터 세트를 포함하고, 상기 포인터 레지스터들은 상기 메모리 내의 객체들로의 액세스를 위해 사용되고,
    상기 포인터들은 포인터 영역 내에 저장되고 데이터는 객체들 내에서 서로 분리적으로 데이터 영역 내에 저장되며, 상기 포인터들은 이들이 나타내는 객체의 메모리 어드레스를 포함하고, 상기 객체들에는 상기 객체 자체 내에 저장되고 상기 포인터 영역의 길이 및 상기 데이터 영역의 길이를 기술하는 속성(attributes)들이 제공되는 것을 특징으로 하는 프로세서.
  2. 제1항에 있어서,
    상기 프로세서는 모든 포인터가 미리 정의된 널(null) 값 또는 현존 객체의 상기 메모리 어드레스만을 포함하는 것을 보장하는 것을 특징으로 하는 프로세서.
  3. 제1항 또는 제2항에 있어서,
    데이터 및 포인터 동작들을 위한 개별 명령들을 갖는 명령 세트가 사용되는 것을 특징으로 하는 프로세서.
  4. 제1항 또는 제2항에 있어서,
    포인터들을 위한 로드 및 저장 동작들은 상기 객체들의 상기 포인터 영역들로부터의 포인터들을 상기 포인터 레지스터들 내에 배타적으로 로드시키고, 포인터 레지스터들의 콘텐트(content)를 상기 객체들의 상기 포인터 영역들 내에 저장하며,
    데이터를 위한 로드 및 저장 동작들은 상기 객체들의 상기 데이터 영역들로부터의 데이터들을 데이터 레지스터들 내에 배타적으로 로드시키고, 데이터 레지스터들의 콘텐트를 상기 객체들의 상기 데이터 영역들 내에 저장하는 것을 특징으로 하는 프로세서.
  5. 제1항 또는 제2항에 있어서,
    객체 생성 명령(object creation instructin)을 갖는 명령 세트가 사용되며, 상기 객체 생성 명령은 생성된 객체의 상기 포인터 영역 내의 모든 포인터들을 상기 생성된 객체가 액세스될 수 있기 전에 널(null) 값으로 초기화시키는 것을 특징으로 하는 프로세서.
  6. 제5항에 있어서,
    상기 객체 생성 명령은 인터럽트될 수 있고, 때를 맞춰 나중 시점에 다시 시작하는 것을 특징으로 하는 프로세서.
  7. 제6항에 있어서,
    상기 객체 생성 명령의 인터럽션의 경우에, 불완전하게 초기화된 객체들이 생성되며, 이들 객체들은 완전하게 초기화된 객체들로부터 상기 프로세서에 의해 명확하게 구별되는 것을 특징으로 하는 프로세서.
  8. 제1항 또는 제2항에 있어서,
    상기 프로세서는 프로그램 런타임 시에 배타적으로 판독되는 개별 메모리 영역 내에 유지되는 상수 객체들을 지지하고,
    상수 객체들에 대한 포인터들은 상기 프로세서에 의해 명확하게 식별되는 것을 특징으로 하는 프로세서.
  9. 제1항에 있어서,
    프로그램 스택이 사용되며, 이 스택은 포인터 스택 영역과 데이터 스택 영역으로 나뉘어지고, 상기 2개의 스택 영역들 각각 내의 점유된 부분의 길이는 스택 인덱스에 의해 표시되며, 이 스택 인덱스는 그 목적을 위해 예비된 데이터 레지스터 내에서 관리되는 것을 특징으로 하는 프로세서.
  10. 제9항에 있어서,
    명령은 포인터를 상기 포인터 스택 상에 푸쉬하기 위해 사용되며, 이 명령은 대응하는 포인터를 상기 포인터 스택 상에 저장하고 또한 인터럽트가능하지 않는 방식으로 상기 포인터 스택 인덱스를 증가시키는 것을 특징으로 하는 프로세서.
  11. 제1항 또는 제2항에 있어서,
    상기 프로세서는 동작 시스템에 의해 관리되는 개별 메모리 영역 내에 유지되는 정적 객체들을 지지하고,
    정적 객체들에 대한 포인터들은 상기 프로세서에 의해 명확하게 식별되는 것을 특징으로 하는 프로세서.
  12. 제9항 또는 제10항에 있어서,
    상기 프로세서는 정적 객체들을 지원하고, 상기 정적인 객체들은 오퍼레이팅 시스템에 의해 관리되는 개별 메모리 영역에 유지되고,
    정적 객체들에 대한 포인터들은 프로세서에 의해 식별되고, 정적 객체들은 프로그램 스택을 위해 사용되고, 상기 객체 내에 포함된 속성들은 비활성 프로그램 스택의 경우에 상기 스택 영역의 실제 점유된 부분의 길이를 기술하는 것을 특징으로 하는 프로세서.
  13. 제1항에 있어서,
    속성 레지스터는 모든 포인터 레지스터에 할당되며, 이 속성 레지스터 내에는 상기 포인터 레지스터 내의 상기 포인터가 나타내는 상기 객체의 상기 속성들이 기입되는 것을 특징으로 하는 프로세서.
  14. 제13항에 있어서,
    추가 파이프라인 스테이지(pipeline stage)를 갖는 파이프라인이 상기 속성들을 로드하기 위해 사용되는 것을 특징으로 하는 프로세서.
  15. 제13항 또는 제14항에 있어서,
    속성 캐시(attribute cache)가 사용되는 것을 특징으로 하는 프로세서.
  16. 제1항 또는 제2항에 있어서,
    RISC 명령 세트가 사용되는 것을 특징으로 하는 프로세서.
  17. 제1항 또는 제2항에 있어서,
    상기 프로세서는 자동 가비지 콜렉션(automatic garbage collection)을 수행하는 것을 특징으로 하는 프로세서.
  18. 삭제
  19. 제1항 또는 제2항에 따른 메인 프로세서(main processor; 1); 및
    자동 가비지 콜렉션을 수행하기 위해 구현되고, 효율적인 동기화를 위해 상기 메인 프로세서(1)에 결합되는 코프로세서(coprocessor; 2)를 포함하는
    장치.
  20. 삭제
KR1020067000018A 2003-07-01 2004-07-01 정확한 포인터 식별을 위한 프로세서 아키텍처 KR101116989B1 (ko)

Applications Claiming Priority (3)

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
PCT/EP2004/007175 WO2005003960A2 (de) 2003-07-01 2004-07-01 Prozessorarchitektur für exakte zeigeridentifizierung

Publications (2)

Publication Number Publication Date
KR20060052771A KR20060052771A (ko) 2006-05-19
KR101116989B1 true KR101116989B1 (ko) 2012-03-14

Family

ID=33559786

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020067000018A KR101116989B1 (ko) 2003-07-01 2004-07-01 정확한 포인터 식별을 위한 프로세서 아키텍처

Country Status (9)

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

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 华中科技大学 一种固态存储设备的垃圾回收方法及其系统
US10180902B2 (en) 2015-06-30 2019-01-15 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
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
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 常州楠菲微电子有限公司 一种静态可分配共享多队列缓存的装置及方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0087431A1 (de) * 1981-09-14 1983-09-07 Deutsche Geraetebau Gmbh Vorrichtung zum messen von flüssigkeitsmengen.
EP0874316A2 (en) * 1997-04-23 1998-10-28 Sun Microsystems, Inc. System and method for assisting exact garbage collection by segregating the contents of a stack into sub stacks
US20010010071A1 (en) 1997-08-18 2001-07-26 Vlot Marnix C. Stack oriented data processing device

Family Cites Families (20)

* 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
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
FI102426B (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
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
US5900001A (en) * 1997-04-23 1999-05-04 Sun Microsystems, Inc. Method and apparatus for optimizing exact garbage collection using a bifurcated data structure
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

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0087431A1 (de) * 1981-09-14 1983-09-07 Deutsche Geraetebau Gmbh Vorrichtung zum messen von flüssigkeitsmengen.
EP0874316A2 (en) * 1997-04-23 1998-10-28 Sun Microsystems, Inc. System and method for assisting exact garbage collection by segregating the contents of a stack into sub stacks
US20010010071A1 (en) 1997-08-18 2001-07-26 Vlot Marnix C. Stack oriented data processing device

Also Published As

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

Similar Documents

Publication Publication Date Title
KR101116989B1 (ko) 정확한 포인터 식별을 위한 프로세서 아키텍처
US9935975B2 (en) Hard object: lightweight hardware enforcement of encapsulation, unforgeability, and transactionality
US5930807A (en) Apparatus and method for fast filtering read and write barrier operations in garbage collection system
US5560003A (en) System and hardware module for incremental real time garbage collection and memory management
US5819304A (en) Random access memory assembly
JP5608738B2 (ja) 無制限トランザクショナルメモリ(utm)システムの最適化
US7225431B2 (en) Method and apparatus for setting breakpoints when debugging integrated executables in a heterogeneous architecture
US5835964A (en) Virtual memory system with hardware TLB and unmapped software TLB updated from mapped task address maps using unmapped kernel address map
US7036118B1 (en) System for executing computer programs on a limited-memory computing machine
US20120216015A1 (en) System and method to concurrently execute a plurality of object oriented platform independent programs by utilizing memory accessible by both a processor and a co-processor
EP1208425A2 (en) Computer system, computer-readable storage medium and method of operating same, and method of operating that system
US4989137A (en) Computer memory system
US20050015756A1 (en) Method and apparatus for partitioning code in program code conversion
JP2009514043A5 (ko)
GB2404044A (en) Partitioning code in program code conversion to account for self-modifying code
JP6023765B2 (ja) 無制限トランザクショナルメモリ(utm)システムの最適化
Meyer An on-chip garbage collection coprocessor for embedded real-time systems
Meyer A novel processor architecture with exact tag-free pointers
US11513954B2 (en) Consolidated and concurrent remapping and identification for colorless roots
US11573794B2 (en) Implementing state-based frame barriers to process colorless roots during concurrent execution
Ægidius Mogensen Memory Management
JP6318440B2 (ja) 無制限トランザクショナルメモリ(utm)システムの最適化
Bättig et al. Dynamic one-to-one mapping of ownership records for STM using versioned weak references
EP4291988A1 (en) Tracking frame states of call stack frames including colorless roots
Saunders Opencontainers: A study of portable techniques for thread-heavy applications

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20141224

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee