KR20000022522A - 포인터 저장기에 교차하는 가비지 수집 페이지 경계를 트랩하는장치 및 방법 - Google Patents

포인터 저장기에 교차하는 가비지 수집 페이지 경계를 트랩하는장치 및 방법 Download PDF

Info

Publication number
KR20000022522A
KR20000022522A KR1019980710967A KR19980710967A KR20000022522A KR 20000022522 A KR20000022522 A KR 20000022522A KR 1019980710967 A KR1019980710967 A KR 1019980710967A KR 19980710967 A KR19980710967 A KR 19980710967A KR 20000022522 A KR20000022522 A KR 20000022522A
Authority
KR
South Korea
Prior art keywords
pointer
garbage collection
processor
store
collection page
Prior art date
Application number
KR1019980710967A
Other languages
English (en)
Other versions
KR100576904B1 (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 마이클 에이치.모리스
Priority to KR1019980710967A priority Critical patent/KR100576904B1/ko
Publication of KR20000022522A publication Critical patent/KR20000022522A/ko
Application granted granted Critical
Publication of KR100576904B1 publication Critical patent/KR100576904B1/ko

Links

Classifications

    • 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
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • G06F12/0276Generational garbage collection

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)

Abstract

본 발명은 가비지 수집, 특히 가비지 수집내의 세대를 분리하는 시스템 및 방법에 관한 것으로서, 본원의 아키텍처 지원은 포인터 저장기에 교차하는 가비지 수집 페이지의 트래핑을 위해 제공되고, 포인터 저장기를 경계 교차로 식별하는 것은 프로그램가능하게 인코드되어 가비지 수집 페이지 크기를 정의하는 가비지 수집 페이지 마스크에 응답하여 저장 배리어에 의해 수행되고, 상기 기록 배리어 및 가비지 수집 페이지 마스크는 가비지 수집 페이지 크기의 프로그램가능하게 유연한 정의를 제공하고, 세대 갑지 수집 방법의 다양한 변형을 위한 지원으로 가비지 수집 구현을 공급하고, 트레인 알고리즘 타입 방법이 포함되어 있어서 세대로 수집된 메모리 공간의 주요부를 관리하며, 포인터 특정 저장 명령을 대체하여 포인터 저장뿐만 아니라 특히 프로그램가능하게 정의된 가비지 수집 페이지 경계에 교차하는 포인터 저장으로 정확한 배리어를 제공하는 구현을 할 수 있는 것을 특징으로 한다.

Description

포인터 저장기에 교차하는 가비지 수집 페이지 경계를 트랩하는 장치 및 방법
종래, 대부분의 프로그래밍 언어는 메모리의 동적 할당 및 할당해제의 책임을 프로그래머에게 지우고 있다. 예를 들면, C 프로그래밍 언어에 있어서, 메모리는 히프로부터 멀록(malloc) 과정(또는 그 변형)에 의해 할당된다. 포인터 변수(p)가 주어지면, 상태 p=malloc((SomeStruct)의 크기)에 대응한 머신 명령의 실행은 포인터 변수(p)가 SomeStruct 데이터 구조를 나타내기 위해 필요한 크기의 목표 메모리를 위해 새롭게 할당된 저장을 명령하도록 한다. 사용후, 포인터 변수(p)에 의해 확인된 목표 메모리는 프리(p)를 호출함으로써 할당 해제되거나 자유롭게 된다. 파스칼 및 C++언어는 메모리의 익스플리시트 할당 및 할당 해제를 위한 유사한 기능을 갖는다.
불행하게도, 동적으로 할당된 저장은 저장에 대한 기준 또는 포인터가 주어진 계산을 위한 루트 기준 할당의 세트내에 잔류하고 있지 않으면 도달 불가능하게 된다. 더 이상 도달 불가능하지만 자유롭게 되지 않은 목표 메모리는 가비지(garbage)라고 불린다. 마찬가지로, 목표 메모리와 관련된 저장은 기준된 채로 할당해제될 수 있다. 이 경우, 댕글링 기준(dangling referencc)가 생성된다. 일반적으로, 동적 메모리는 정확하게 운영하는 것이 어렵게 될 수 있다. 대부분의 프로그래밍 언어에 있어서, 히프 할당이 데이터 구조를 생성한 과정후에도 남을수 있는 데이터 구조를 위해 필요하다. 이들 데이터 구조가 다른 과정으로 통과되면, 프로그래머나 컴파일러가 이들을 안전하게 할당 해제할 수 있는 지점을 결정하는 것이 불가능하거나 어렵다.
이러한 어려움 때문에, 가비지 수집, 즉 프로그램에 의해 최종 사용된 후 히프-할당된 저장의 자동 재생은 동적 메모리 운영의 다른 흥미있는 모델이다. 가비지 수집은 특히 자바(JAVATM)언어(JAVA는 선 마이크로 시스템사의 상표임),프롤로그(Prolog), 리스프(Lisp), 스몰토크(Smaltalk), 스킴(Scheme), 에이펠(Eiffel), 다일란(Dylan), 엠엘(ML), 하스켈(Haskell), 미란다(Miranda), 오베론(Oberon) 등의 과정 언어보다 데이터 분배, 지연된 실행, 및 일반적으로 적은 예측가능한 실행 명령을 나타내는 기능 언어에 특히 효과적이다. 가비지 수집 및 이를 위한 종래 알고리즘의 논의를 위해서는 Jones & Lins, Garbage Collection: Algorithms for Automatic Dynamic Memory Management, pp 1-41, Wiley(1996)을 참조할 수 있다.
세 가지 종래의 가비지 수집 방법은 기준 카운팅, 마크-스윕, 및 저장 재생의 복사이다. 첫 번째 기준 카운팅은 기준 번호, 예를 들면 포인터의 총 수를 루트 기준 위치 또는 동적 목표 메모리로부터의 각 목표 메모리에 대하여 유명령키는 것에 기초한다. 새로운 목표 메모리가 할당되고 이에 대한 포인터가 지정될 때, 목표 메모리의 기준 카운트는 1로 설정된다. 그러면, 포인터가 목표 메모리를 참조하도록 설정될 때마다, 목표 메모리의 기준 카운트는 증가한다. 목표 메모리에 대한 기준이 삭제 또는 덮여 쓰여지면, 기준 카운트는 감소한다. 0의 기준 카운트의 목표 메모리는 도달 불가능하여 가비지로 수집된다. 기준 카운팅 가비지 수집기 실행은 전형적으로 각 목표 메모리내에 부가적인 필드, 기준 카운트를 포함하고 새로운 목표, 삭제된 목표 및 갱신 포인터 기능의 부분으로서의 증가 및 감소 지원을 포함한다.
이에 비해, 추적 수집기 방법은 살아있는 즉 참조가능한 목표 메모리를 확인하기 위해 메모리를 통해 기준 체인을 트래버스하는 것을 포함한다. 이러한 추적 수집기 방법의 하나는 마크-스윕 방법으로, 메모리를 통한 기준 체인이 트래버스되어 살아있는 목표 메모리를 확인하여 표시하는 것이다. 표시되지 않은 목표 메모리는 가비지이며 수집되어 분리된 스윕 위상동안 프리 풀로 복귀한다. 마크-스윕 가비지 수집기 실행은 전형적으로 각 목표 메모리내에 부가적인 필드, 예를 들면 마크 비트를 포함한다. 마크-컴팩트 수집기는 종래 마크-스윕 방법에 압축을 더한다. 압축은 살아있는 목표를 재위치시켜 프래그멘테이션을 감소시키는 이점이 있다. 기준 카운트 방법도 압축을 채용할 수 있다.
다른 추적 방법, 수집 복사는 메모리를 두 개의 반-공간, 하나의 컨테이닝 현재 데이터 및 다른 컨테이닝 올드 데이터로 분리(또는 파티션)한다. 가비지 수집 복사는 두 개의 반-공간의 역할을 뒤바꿈으로써 시작한다. 수집기 복사는 올드 반-공간, FromSpace 내의 살아있는 목표를 트래버스하고, 도달가능한 목표를 새로운 반-공간, ToSpace 으로 복사한다. 프롬공간내의 모든 살아있는 목표가 트래버스되고 복사된 후, 데이터 구조의 복제본이 두 공간내에 존재한다. 본질적으로, 수집기 복사는 가비지 중에서 살아있는 목표를 찾아 다닌다. 수집기 복사의 부수적 이점은 살아있는 목표가 투공간으로 압축되고, 이에 의해 프래그멘테이션을 감소시키는 것이다.
(1) 목표 메모리가 젊은 채로 없어지고 (2) 추적 방법이 오래 살아있는 목표에 비해 상당한 자원을 트래버싱, 복사 또는 재할당하는데 소비하는 점을 관찰하여 새 세대의 방법을 확립하게 되었다. 세대의 가비지 수집 구성은 히프를 두 개 이상의 세대로 분리하고, 목표를 나이대로 모으고, 수집 노력(또는 적어도 보다 활발한 수집 노력)을 새로운 세대에 집중한다. 가장 젊은 세대가 작을수 있기 때문에, 정지 시간과 관련된 가비지 수집은 평균적으로 짧게 유지될 수 있다. 하나의 세대내의 가비지 수집은 복사, 마크-스윕, 또는 다른 가비지 수집 방법일수 있다. 가비지 수집기를 실행하기 위해서는, 뮤테이터 과정, 가비지 수집기 또는 이들 모두의 조합이 세대간의 포인터를 확인하여 이들이 가비지 수집기에 의해 루트 세트의 일부로 취급되는 것이 필요하다. 뮤테이터는 컴퓨터 시스템내에서 가비지 수집을 제외한 유용한 작업을 수행하는 과정에서 메모리를 통해 기준 체인의 그래프를 변화시키는 과정이다.
세대간의 포인터는 전형적으로 변형기 절차 포인터 저장기 또는 목표 컨테이닝 포인터의 승급을 통해 발생한다. 승급된 세대간의 포인터는 수집기 처리에 의해 쉽게 검지될 수 있다. 그러나, 젊은 세대로의 포인터를 위한 오래된 세대의 스캐닝-값이 비싼 처리-이 부족하기 때문에 포인터 저장기가 트랩되고 세대간의 포인터 저장기를 검지하기 위해 기록된다. 배리어는 잘 알려져 있고 하드웨어, 소프트웨어내에서 실행되거나 또는 운영 시스템(전형적으로 페이징 시스템) 지원과 함께 실행된다. Jones & Lins, Garbage Collection: Algorithms for Automatic Dynamic Memory Management, pp 165-174, Wiley(1996)(세대간 포인터, 라이트 배리어, 엔트리 테이블, 재기억된 세트, 순차적 저장기 버퍼, 하드웨어 지원으로의 페이지 마킹, 가상 메모리 지원으로의 페이지 마킹, 및 카드 마킹 등에 대하여 논의)을 참조할 수 있다.
포인터 저장기 체킹을 위한 인-라인 코드 등의 소프트웨어 기술이 사용되고, 실행 시간 및 인-라인 코드 오버헤드가 중요할 수 있다. 소프트웨어 라이트 배리어의 한 예는 Ungar(David M. Ungar, Generation Scavening: A Non-disturbing High Performance Storage Reclamation Algorithm, ACM SIGPLAN Notice, 19(5), pp.157-167(1984) 참조)에 의해 제안된 것으로, 저장기를 중간 포착하여 (1) 포인터가 저장되고 있는 중인지 (2)포인터가 젊은 세대에 대한 것이고 오래된 세대의 목표에 저장되었는지를 체크하는 것이 있다. 그러하다면, 오래된 세대 목표의 어드레스는 재기억된 세트에 더해진다. 소프트웨어 배리어는 많은 양의 오버헤드를 이들이 적용되는 오퍼레이션에 부과될 수 있다. 예를 들면, 인-라인 코드에 의해 제공되는 소프트웨어 저장기 배리어는 부가적인 인스트럭션 레이턴시를 부가하여, 예를 들면 포인터가 저장되고 있는지 그리고 포인터가 세대간이지 체크하여 코드의 전체 부피를 증가시킨다. 그러한 코드 증가는 캐시 성능에 나쁜 영향을 준다.
상기 소프트웨어 배리어의 다른 것은 오퍼레이팅 시스템의 가상 메모리 페이지 보호 기구를 사용하여 액세스를 트랩하여 페이지를 보호하거나 페이지 수정 더티 비트를 갱신된 세대간의 포인터 필드가 있는 목표를 잠재적으로 포함하는 페이지의 맵으로 사용하는 것이다. 상기 기술은 전형적으로 포인터 저장기의 확인을 연장하고, 보다 특정적으로는 수집 시간까지 모든 저장기중에서 세대간의 포인터 저장기의 확인을 연기한다. 그러나, 가상 메모리 페이지 크기는 일반적으로 가비지 수집 서비스에 잘 맞지 않는다. 예를 들면, 페이지는 목표에 비해 큰 경향이 있고 가상 메모리 더티 비트는 단순히 포인터 저장기가 아닌 관련 페이지에 대한 수정을 기록한다. 그 결과 세대간 포인터를 위한 페이지 스캐닝의 가격은 높다.
다른 인라인 코드 소프트웨어 라이트 배리어는 하드웨어 배리어 지원이다. 많은 라이트 배리어 실행이 포인터와 비-포인터 저장기간에 구별을 두지 않고, 대신에 수집 시간까지 세대간의 포인터 체크를 연기하면서 모든 라이트를 기록함에도 불구하고, 심볼릭 3600내에서 가비지 수집을 위한 하드웨어 소프트웨어의 광범위한 사용은 페이지 마킹 구성을 효과적으로 사용할 수 있도록 한다. 심볼릭 3600의 세가지 특성은 이를 실행가능하게 한다. 첫 번째로, 하드웨어 라이트 배리어는 세대 데이터에 대한 포인터가 아닌 모든 워드는 무시한다. 세대의 메모리에 대한 기준이 페이지에 기록될 때마다, 라이트-배리어 하드웨어 세트는 가비지 수집 테이블내의 비트에 대응한다. 두 번째로, 태그된 아키텍쳐는 포인터 워드가 항상 태그를 사용하는 비-포인터 워드로부터 구별될수 있기 때문에 세대간의 포인터를 위한 수집 시간 체크를 실행하면서 목표 경계를 고려할 필요를 제거한다. 심볼릭 3600은 2-비트 메이저 데이터 형태 페이지, 4-비트 마이너 태그 및 28-비트 어드레스를 36-비트 워드내에 수용한다. 마지막으로, 페이지는 256 워드로 전형적인 가상 메모리 페이지보다 적으므로, 페이지는 수집 시간에 신속하게 스캔될 수 있다. Jones & Lins, Garbage Collection: Algorithms for Automatic Dynamic Memory Management, pp.169-170, Wiley(1996)(하드웨어 지원으로 심볼릭 3600상에의 페이지 마킹을 논의)과, Moon, Architecture of the Symbolics 3600, In Proceedings of the 12th Annual International Symposium on Computer Architecture, pp.76-83(1985)(저장된 목표의 표시를 논의)을 참조할 수 있다.
세대간의 포인터 확인 처리는 중요한 수집-시간 스캐닝을 필요로 한다. 하나의 개선은 수집된 메모리 공간(예를 들면 히프)를 카드로 불리는 작은 영역으로 나누는 것이다. 카드 마킹은 카드가 올바른 크기이면 몇가지 이점을 제공한다. 이들이 가상 메모리 페이지보다 작기 때문에, 수집-시간 스캐닝의 양은 감소될 수 있다. 반면에, 카드 페이블에 의해 점유된 공간의 양은 워드-바이-워드 마킹 구성에 필요한 것보다 적다. 일반적으로, 카드내의 워드가 수정될 때마다 비트는 카드내에 조건없이 설정된다. 카드 스캐닝의 비용은 복제가 일어나지 않기 때문에 실행된 저장의 수보다는 마킹된 카드의 크기 및 수자에 비례한다. Wilson and Moher, Design of the Opportunistic Garbage Collector, ACM SIGPLAN Notices, 24(10), pp.23-35(1985)를 참조하라.
세대 방법이 전체 가비지 수집 시간을 줄이는데 매우 효과적이고 수집의 대다수가 비-파괴적이라는 점에도 불구하고, 오래된 세대의 수집은 파괴적일 수 있다. 이들 오래된 세대의 목표를 비-파괴적으로 수집하기 위해, 허드슨과 모스는 각 수집에서 목표 공간의 특징의 바운드-사이즈 영역을 처리하는 알고리즘을 제안했다. 이 알고리즘은 특징면에서 증가되고 모든 가비지의 실제적인 수집을 보증한다. 허드슨과 모스는 트레인 분석을 사용하여 문제에 대하여 바운드 사이즈 영역과 캐리지 홀딩 링크 구조의 그룹을 나타내는 캐리지로 그들의 해결안을 설명하였다. 이 시스템은 특별한 하드웨어 또는 가상 메모리 기구에 의존하기 않기 때문에 효과적이다. Hudson and Moss, Incremental Collection of Mature Objects, Proceedings of International Workshop on Memory Management, St. Malo France(16-18 September, 1992)를 참조하라.
본 발명은 가비지 수집(garbage collection)에 관한 것으로, 특히 가비지 수집기 세대의 분리를 위한 방법 및 시스템에 관한 것이다.
지급부터 첨부된 도면을 참고한 설명을 통해 본원의 특징 및 장점 등을 보다 잘 이해할 수 있을 것이다.
도 1은 본 발명에 따른 가비지 수집 분리를 위한 지원을 포함하는 가상 머신 하드웨어 프로세서의 실시예를 나타내는 블록도,
도 2는 하드웨어 프로세서(도 1) 및 JAVA 가상 머신 실행의 소프트웨어 성분을 포함하는 JAVA 적용 환경의 하드웨어 성분과 소프트웨어간의 관계를 나타내는 도,
도 3은 도 1의 하드웨어 프로세서에 대하여 가능한 애드-온을 나타내는 도,
도 4는 본 발명의 실시예에 따라 제공된 도 1의 하드웨어 프로세서상에서 실행되는 변형기 처리에 의해 만들어진 세대간 및 카드 경계 크로싱 포인터 저장기를 트랩하기 위한 라이트 배리어를 나타내는 도,
도 5는 본 발명의 실시예에 따른 목표 기준(목표기준) 포맷을 나타내는 도,
도 6A는 본 발명의 한 실시예에 따른 목적 포맷을 나타내는 도,
도 6B는 본 발명의 한 실시예에 따른 대안적인 조정된 목적 포맷을 나타내는 도,
도 7은 세대간 카드 경계 교차 포인터 기억장치의 트래핑이 용이하도록 포인터 비특정 기억장치 바이트코드를 포인터 특정 바이트코드로 다이내믹하게 교체하기 위해 본 발명에 따라 사용된 바이트코드 교체 캐시의 한 실시예를 나타내는 도, 및
도 8은 본 발명에 따른 가비지(garbage) 수집기에 대한 아키텍쳐 지원에 의해 지원될 수 있는 예시적으로 몇 부분으로 이루어진 세트를 기반으로 한 세대 수집기 방식을 나타내는 도이다.
서로 다른 도면에서 동일한 인용 부호를 사용한 것은 이들이 유사하거나 동일한 항목임을 나타낸다.
관련 실시예에 대한 설명
본 발명을 실행하기 위한 최선의 방식에 대한 상세한 설명을 다음과 같이 기술한다. 이 설명은 본 발명을 설명하기 위한 것이고, 이에 한정되지 않는다.
가비지 수집 세대의 격리에 대해 여기에 기술된 아키텍쳐 지원은 세대간 포인터 기억장치 트랩 매트릭스, 목적 참조 세대 태그 표시, 세대간 포인터 기억장치 트랩 매트릭스와 목적 참조 세대 태그 표시에 응답하는 기록 배리어, 가비지 수집 트랩 처리기를 포함하고, 기록 배리어 지원을 갖는 포인터 특정 명령으로의 포인터 비특정 명령의 선택적인 다이내믹한 교체를 용이하게 한다.
일반적으로, 본 발명에 따른 실시예는 가비지 수집 시스템의 세대를 분리하기 위한 여러 가지 태양의 아키텍쳐 지원을 이용할 수 있다. 이런 아키텍쳐 지원이 하드웨어, 소프트웨어 또는 하드웨어와 소프트웨어의 조합으로 제공될 수 있지만, 아키텍쳐 지원이 실질적으로 하드웨어로 제공되는 실시예가 통상 향상된 성능과 감소된 메모리 요구 이점을 제공할 것이다. 이 때문에, 본 명세서에서는 예시적인 하드웨어 가상 머신 명령 프로세서 실시예가 기술되고 있다. 그러나, 당업자라면 이 설명에 기초하여 첨부한 특허청구범위의 범위에 포함되는 가상 머신 명령 프로세서의 소프트웨어(예를 들면, 인터프리터, 즉시(just-in-time, JIT) 컴파일러 등) 구현에 기초한 실시예를 포함하는 대안적인 실시예를 인식할 수 있을 것이다.
JAVA 가상 머신 명령 프로세서 실시예
도 1은 본 발명에 따른 한정된 정지 시간 재할당 가비지 수집을 위한 지원을 포함하고, 프로세서 구조와는 독립적인 JAVA 가상 머신 명령을 직접 실행하는 가상 머신 명령 프로세서(100)(이하, 하드웨어 프로세서(100))의 예시적인 하드웨어 실시예를 나타낸다. 가상 머신 명령을 실행하는데 있어서 하드웨어 프로세서(100)의 성능은 통상 소프트웨어 JAVA 인터프리터로 동일한 가상 머신 명령을 해석하는 선 마이크로시스템 ULTRASPARC 프로세서 또는 인텔 PENTIUM 마이크로프로세서(ULTRASPARC은 캘리포니아주 마운틴 뷰에 위치한 선 마이크로시스템즈의 상표이고, PENTIUM은 캘리포니아주 서니베일에 위치한 인텔의 상표이다)와 같은 하이엔드(high-end) CPU보다 좋다. 부가적으로, 하드웨어 프로세서(100)의 성능은 JAVA 즉시(JIT) 컴파일러를 갖는 다른 몇몇 하이엔드 CPU보다 좋다. 하드웨어 프로세서(100)는 저가이고, 낮은 전력 소비를 나타낸다. 그 결과, 하드웨어 프로세서(100)는 휴대용 애플리케이션에 적합하다.
하드웨어 프로세서(100)는 실질적으로 하드웨어, 25-50Kbyte의 메모리 기억장치, 예를 들어 판독 전용 메모리(ROM) 또는 랜덤 액세스 메모리(RAM)로 JAVA 가상 머신 명령 프로세서 구현을 제공하기 때문에, 소프트웨어 인터프리터에 의해 요구되는 다른 것은 제거되거나 대안적으로 할당될 수 있다. 가비지 수집을 위한 하드웨어 지원은 또한 가비지 수집을 위한 인라인(in-line) 코드(예를 들어 판독 및/또는 기록 배리어 지원을 갖는 컴파일러)를 줄이고, 제한된 메모리의 효율 개선을 용이하게 하며, 가비지 수집 오버헤드와 정지 시간을 줄임으로써 제한된 메모리의 JAVA 가상 머신 구현에 대한 이점을 제공한다. 예를 들어 네트워크용 인터넷 칩, 셀룰러폰 프로세서, 다른 통신 집적회로 또는 내장 프로세서와 같은 다른 저전력, 저비용 애플리케이션 및 휴대용 장치를 포함하는 대용량 메모리의 사용이 불가능한 환경에서는 하드웨어 프로세서(100)가 유용하다.
심지어 대용량 메모리가 사용 가능한 환경에서도, 가비지 수집을 위한 하드웨어 지원은 차단기 구현과 관련된 오버헤드를 줄이고, 메모리의 효율 개선을 용이하게 하며, 재할당 가비지 수집기 구현에 대한 정지 시간을 줄인다. 특히, 하드웨어 프로세서(100)는 예시 JAVA 가상 머신 구현과 관련하여 가비지 수집 방법 및 구현에 대한 이점을 제공한다. 그러나, 당업자라면 이 설명에 기초하여 예를 들어 해석 JIT 컴파일러 JAVA 가상 머신 구현을 포함하는 다른 JAVA 가상 머신 구현 뿐만 아니라 다른 비-JAVA 가상 머신 구현에 대한 변형을 파악할 수 있을 것이다.
여기서 사용된 것처럼, 가상 머신은 실제 컴퓨팅 머신과 같이 명령 세트를 갖고 다양한 메모리 영역을 사용하는 축약형 컴퓨팅 머신이다. 가상 머신 명세는 가상 머신 구현에 의해 실행되는 프로세서 구조와는 독립된 가상 머신 명령 세트를 규정한다. 일반적으로, 가상 머신 구현은 하드웨어(예를 들어 하드웨어 프로세서(100)의 경우), 소프트웨어(예를 들어 해석 JIT 컴파일러 구현의 경우) 또는 하드웨어와 소프트웨어의 조합일 수 있다. 각각의 가상 머신 명령은 실행되는 지정 동작을 규정한다. 가상 머신은 가상 머신 명령 또는 가상 머신의 기본 구현을 발생하기 위해 사용되는 컴퓨터 언어를 이해할 필요는 없다. 다만 가상 머신 명령에 대한 특정 포맷을 이해하기만 하면 된다. 실시예에서, 가상 머신 명령은 JAVA 가상 머신 명령이다. 각각의 JAVA 가상 머신 명령은 정보, 오퍼랜드 및 다른 필요한 정보를 식별하는 명령을 인코드하는 하나 이상의 바이트를 포함한다.
이 실시예에서, 하드웨어 프로세서(100)(도 1)는 바이트코드를 포함하는 JAVA 가상 머신 명령을 처리한다. 하드웨어 프로세서(100)는 대부분의 바이트코드를 직접 실행한다. 그러나, 다른 몇몇 바이트코드의 실행은 마이크로코드를 통해 구현된다. 참조상 본 명세서에 포함된 린드홈 및 엘렌의 "JAVATM가상 머신 명세(애디슨-웨슬리, 1996), ISBN 0-201-63452-X는 예시적인 JAVA 가상 머신 명령 세트를 포함한다. 하드웨어 프로세서(100)가 지원하는 특정한 가상 머신 명령 세트는 본 발명의 중요한 태양은 아니다. 그러나, 가상 머신 명령의 관점에서, 당업자는 특정한 가상 머신 명령 세트 또는 JAVA 가상 머신 명세로의 변경을 위해 본 발명을 변형할 수 있다.
한 실시예에서, 하드웨어 프로세서(100)는 I/O 버스 및 메모리 인터페이스 유닛(110), 명령 캐시(125)를 포함하는 명령 캐시 유닛(120), 저속-고속 변환기 캐시(131)를 포함하는 명령 디코드 유닛(130), 통합 실행 유닛(140), 스택 캐시(155)를 포함하는 스택 관리 유닛(150), 데이터 캐시(165)를 포함하는 데이터 캐시 유닛(160) 및 프로그램 카운터 및 트랩 제어 로직(170)를 포함한다. 여기에 기술된 가비지 수집 기능에 대한 지원은 기본적으로 프로그램 카운터 및 트랩 제어 로직(170)에 다른 몇몇 부가적인 지원(예를 들어 프로그램 카운터를 트래핑 기억장치에 이어지는 다음 JAVA 가상 머신 명령으로 강제하는 지원을 포함하는)을 갖는 실행 유닛(140)의 레지스터(144)와 정수 유닛(142)에 존재한다. 한 실시예에서, 저속-고속 변환기 캐시(131)는 정수 유닛(142)의 하드웨어 기록 배리어 로직에 대한 포인터 특정을 용이하게 한다. 이들 유닛들은 아래 기술되어 있다.
도 2는 예를 들어 부분적으로 하드웨어 프로세서(100)(도 1)에 의해 규정되고, 부분적으로 그 프로세서에서 실행 가능한 애플리케이션 환경과 같은 JAVA 애플리케이션 환경의 소프트웨어와 하드웨어 구성요소 사이의 관계 "설정"을 나타낸다. JAVA 애플리케이션/애플릿 소프트웨어(210)는 한 실시예에서 JAVA 바이트코드를 포함하는 AWT 클래스(241), 네트 및 I/O 클래스(242) 및 JAVA OS 윈도우(243), JAVA OS 그래픽(248), TCP(244), NFS(245), UDP(246), IP(247), 이더넷(222), 키보드 및 마우스(221) 소프트웨어 구성요소를 포함하는 애플릿/애플리케이션 프로그래밍 인터페이스(220)를 규정하는 소프트웨어 구성요소를 이용한다. 도 2의 실시예에서, JAVA OS 그래픽(248) 및 이더넷(222) 소프트웨어 구성요소는 또한 베이스라인 JAVA 가상 머신 명세에 의해 규정된 것 이외의 확장 바이트코드를 포함한다. 내장 애플리케이션 프로그래밍 인터페이스(EAPI)(230)의 구성요소는 JAVA 가상 머신 명세에 따른 JAVA 가상 머신 구현(250)의 하드웨어 및 소프트웨어 구성요소와 기본 클래스(231)를 포함한다.
JAVA 가상 머신 구현(250)은 JAVA 가상 머신 명령을 평가하기 위해 하드웨어 프로세서(100)와 그 위에서 실행 가능한 트랩 코드를 포함한다. 부가적으로, JAVA 가상 머신 구현(250)은 클래스 로더(252), 바이트코드 검사기(253), 스레드(thread) 관리기(254) 및 가비지 수집기(251) 소프트웨어와 같은 확장 바이트코드(예를 들어 가비지 수집과 관련하여 아래에 기술된 메모리 액세스 차단기와 포인터 기억장치 바이트코드를 포함하는) 및 마이크로커널(255)에 대한 하드웨어 지원을 포함한다. JAVA 가상 머신 명세 구현(250)은 JAVA 가상 머신 명세 호환 부분(250a) 뿐만 아니라 구현 종속 부분을 포함한다. JAVA 가상 머신 명세가 가비지 수집이 제공된 것을 나타내지만, 사용된 특정 가비지 수집 방법은 구현 종속이다.
JAVA 가상 머신 구현(250)의 예시적인 하드웨어 프로세서(100) 구현과 관련하여 여기에 기술된 가비지 수집에 대한 구조적인 특징은 특히 세대 가비지 수집 방법에 적합하다. 그러나, 당업자라면 이 설명에 기초하여 일반적으로 예를 들어 비-세대 수집기 구현, 증분형 마크 단축 수집기, 복사 수집기 등을 포함하는 재할당 수집기에 대한 본 발명의 한정된 정지 시간 지원에 대한 애플리케이션을 파악할 수 있을 것이다.
도 3A는 보다 정교한 시스템을 형성하기 위한 하드웨어 프로세서(100)에 대한 몇가지 가능한 애드온을 나타낸다. 도시된 8가지 기능, 즉 NTSC 인코더(310), MPEG(302), 이더넷 제어기(303), VIS(304), ISDN(305), I/O 제어기(306), ATM 어셈블리/리어셈블리(307) 및 무선 링크(308) 중 어느 하나를 지원하는 회로가 본 발명의 하드웨어 프로세서(100)와 같은 칩에 집적될 수 있다.
부가적으로, 당업자라면 상기한 애드온 회로 중 하나를 갖는 하드웨어 프로세서(100)의 실시예를 포함하는 하드웨어 프로세서(100)를 포함하는 광범위한 컴퓨터 시스템을 파악할 수 있을 것이다. 통상적인 컴퓨터 시스템(300) 실시예는 물리적인 메모리 기억장치(예를 들어 RAM 및/또는 ROM), 컴퓨터 판독 가능 매체 액세스 장치(예를 들어, 디스크, CD-ROM, 테이프 및/또는 메모리 기술 기반 컴퓨터 판독 가능 매체 액세스 장치 등), 입력/출력 장치 인터페이스(예를 들어, 키보드 및/또는 포인팅 장치, 디스플레이 장치 등에 대한 인터페이스) 및 통신 장치 및/또는 인터페이스를 포함한다. 적합한 통신 장치 및/또는 인터페이스는 네트워크 또는 전화 기반 통신에 대한 것, 공용 교환망, 전용망 등의 지상통신선 및/또는 무선 부분을 포함하는 통신망과의 연결을 위한 것을 포함한다. 본 발명의 다른 실시예에서, 명령 스트림(예를 들어 JAVA 바이트코드를 포함하는)은 상기 통신 장치 또는 인터페이스를 통하여 하드웨어 프로세서(100)에 의한 실행을 위해 송신 및/또는 수신된다.
가비지 수집을 위한 아키텍쳐 지원
하드웨어 프로세서(100)는 자체에서 실행 가능한 가비지 수집 소프트웨어로서 구현된 세대 수집기 방법을 포함하는 다양한 가비지 수집 방법에 대한 아키텍쳐 지원을 제공한다. 특히, 하드웨어 프로세서(100)는 프로그램 가능 기억장치 필터링, 태그형 목적 참조와 목적 헤더 포맷 및 확장 바이트코드 지원을 포함한다.
프로그램 가능 기억장치 필터링
도 4는 히프(heap)에 대한 기억장치의 프로그램 필터링을 지원하는 슈퍼바이저 기록 가능 레지스터 GC_CONFIG의 한 실시예를 나타낸다. 도 1과 관련하여, 레지스터 GC_CONFIG는 레지스터(144)에 포함되고, 실행 유닛(140)에 접근 가능하다. 한 실시예에서, 12비트의 레지스터 GC_CONFIG는 페이지간 포인터 기억장치 검사를 위해 페이지 크기를 선택하는데 사용하는 필드 GC_PAGE_MASK를 규정한다. 12비트의 필드 GC_PAGE_MASK는 0x3F로 규정된 부가적인 8개의 보다 유효한 비트와 0x000으로 규정된 12개의 덜 유효한 비트를 갖는 32비트 가비지 수집 페이지 마스크의 비트 23:12로서 사용된다. 생성된 32비트의 가비지 수집 페이지 마스크는 프로그램 가능 가비지 수집 페이지 경계를 교차하는 포인터 기억장치에 대한 기억장치 차단기를 형성하는데 사용된다. 포인터 기억장치의 저장 데이터 value와 objectref 타겟(예를 들어 스택 캐시(155)에 표시된 오퍼랜드 스택의 상위에 존재하는 value와 objectref에 대해 동작하는 aputfield_quick 명령)은 32비트 가비지 수집 페이지 마스크에 의해 효율적으로 마스크되고, value(objectref)가 타겟 목적이 존재하는 것과는 다른 가비지 수집 페이지를 가리키는지를 판정하기 위해 비교된다. 상기 방식에서, 가비지 수집 페이지 크기는 가상 메모리 페이지 크기와는 무관하다. 게다가, 가비지 수집 페이지는 가상 메모리 지원 없이 저비용, 저전력 휴대용 애플리케이션 또는 인터넷용 애플리케이션과 같은 운영체제 환경과 컴퓨터 시스템에 제공될 수 있다. 도 4의 실시예에서, 이 설명에 기초하여 다른 가비지 수집 페이지 크기와 크기 범위에 대한 적절한 변형이 당업자에게는 명백해지지만, 레지스터 GC_CONFIG는 4KByte 내지 8MByte 범위의 가비지 수집 페이지 크기의 프로그램 가능 규정을 허용한다.
레지스터 GC_CONFIG는 또한 세대간 포인터 기억장치 트랩 매트릭스를 프로그램 가능하게 규정하는 필드 WB_VECTOR를 포함한다. 필드 WB_VECTOR는 저장 데이터 value와 연관된 포인터 데이터 세대와, 그의 objectref 타겟과 연관된 타겟 목적 세대를 갖는 포인터 기억장치가 트랩하는 세대 쌍을 인코드한다. 도 4의 실시예에서, WB_VECTOR는 가비지 수집 트랩이 바람직한 포인터 데이터와 타겟 목적 세대 쌍에 대한 1비트 표시의 4x4 매트릭스를 규정한다. 다른 실시예는 보다 크거나 작은 매트릭스를 규정할 수 있고, 부가적인 상태(예를 들어, no_trap, gc_notify2 및 gc_notify3)를 선택적으로 인코드할 수 있다.
도 4의 실시예를 참조하면, 타겟 목적의 objectref의 2비트 태그는 필드 WB_VECTOR에 4비트 인덱스를 형성하기 위해 그 안에 저장되는 value의 2개의 태그 비트와 연관된다. 2비트 태그는 각각 아래에 기술된 바와 같이 세대 구성원 정보를 인코드한다. 다음에 필드 WB_VECTOR의 인덱스된 비트는 기록 배리어가 대응하는 포인터 기억장소를 트랩하는지를 인코드한다. 필드 WB_VECTOR는 모든 세대간 포인터 기억장소(즉, 포인터 데이터 세대와 타겟 목적 세대가 동일하지 않은 모든 포인터 기억장소), 모든 포인터 기억장소(세대간 뿐만 아니라 한 세대내), 보다 새로운 세대 포인터 기억장소(즉, 보다 오래된 세대 목적으로의 보다 새로운 세대 포인터의 저장) 등에 대한 트래핑을 인코드하기 위해 프로그램 가능하게 구성될 수 있다. 일반적으로, 세대 쌍에 대한 임의의 복합 트래핑이 지원된다. 도 4의 실시예에서는 4세대까지가 지원되지만, 당업자라면 이 설명에 기초하여 보다 많은 수의 세대에 대한 적절한 변형을 파악할 수 있을 것이다.
한 실시예에서, 필드 GC_PAGE_MASK와 필드 WB_VECTOR는 포인터 기억장소에 대한 기록 배리어의 동작을 프로그램 가능하게 규정한다. 특히, 아래에 보다 상세히 기술되는 것처럼, 하드웨어 프로세서(100)에 의해 제공된 확장 바이트코드 지원은 기록 배리어로 하여금 비-포인터 기억장소에서 포인터 기억장소를 식별하도록 하고, 필드 GC_PAGE_MASK와 WB_VECTOR는 또한 하드웨어 프로세서(100)로 하여금 프로그램 가능하게 규정된 포인터 기억장소 세트를 트랩하기 위해 기록 배리어를 프로그램 가능하게 필터링하도록 한다. 그러나, 대안적인 실시예는 통상적인 차단기 구현에서 프로그램 가능하게 규정된 명백한 포인터 기억장소 세트를 이용하면서 하드웨어 프로세서(100)의 확장 바이트코드 지원에 의해 제공된 포인터 기억장소에 대한 유리한 정확한 식별을 보류할 수 있다.
도 4는 메모리 공간(450)에 수집된 네 개의 세대의 내용내의 프로그램가능한 저장기 필터링 지원을 나타낸다. 가비지 수집기 절차(420)는 기억된 장치(460)가 변형기 절차(410)에 의해 만들어지는 새로운 세대 포인터 저장을 기록하는 세대의 수집기를 구현하기 위한 하드웨어 절차(100)에 실행할 수 있는 바이트코드를 포함한다. 세대간 포인터 저장 트랩 매트릭스(470)의 내용은 필드 WB_VECTOR의 내용에 대응하고, 기록 배리어를 새로운 세대 포인터 저장에 엔코드한다. 이하 설명된 바와 같이 인코드되는 테그는 저정 데이터 포인터 값과 연관된 발생과 변형기 절차(410)의 포인터 저장 명령(즉, aputfield_quick 명령)의 objectref 타겟과 연관된 발생을 위해 상호 발생적인 포인터 저장 트랩 매트릭스(470)내로 인덱스하기 위해 사용된다. 그렇게 인덱스된 상호 발생적인 포인터 저장 트랩 매트릭스(470) 내용에 기초하여, 기록 배리어(430)는 만일 테그가 값과 연관되고 objectref 가 새로운 세대 목적에 대한 기준이 오래된 세대 오브젝트내로 저장되고 가비지 수집기 트랩 조정기(gc_notify)(440)를 불러낸다면 aputfield_quick 포인터 저장을 트랩한다.
여기서의 설명에 기초하여, 그러한 기술은 세대간 포인터 트랩 해렬(470)(즉, 필드 WB_VECTOR의) 및/또는 필드 GC_PAGE_MASK의 내용에 의해 제공되는 특정 프로그램할 수 있게 선택된 저장 필터링을 지원하는 가비지 수집기 트랩 조정기(440)를 위해 알맞은 구현의 다양성을 평가할 것이다. 세대간 포인터 저장 트랩 매트릭스(470)의 내용(도 4)에 따른 한 실시예에서, 가비지 수집기 트랩 조정기(440)는 기억된 준비 데이터 구조(즉, 수집된 메모리 공간(450)의 세대 1, 2, 및 3에 각각 대응하는 기억된 준비 461, 462, 및 463를 포함하는) 트랩핑 저장에 대한 정보를 저장하기 위해 하드웨어 프로세서(100)에 실행할 수 있는 바이트코드를 포함한다.
다른 실시예에서는, 세대간 포인터 트랩 매트릭스(470)의 내용은 트랩을 전체 포인터 저장에 프로그램할 수 있게 한정된다. 가비지 수집기 트랩 조정기(440)의 관련된 카드 마킹 타입 대안적인 실시예는 카드 표 데이터 구조에 트랩핑 저장에 대한 정보를 저장하기 위해 하드웨어 프로세서(100)에 실행할 수 있는 바이트코드를 포함한다. 종래의 카드 마킹 구현과 대조하여, 구성은 하드웨어 프로세서(100)가 포인터 저장과 일반적인 저장을 구분하고, 세대간 포인터 저장과 일반적인 포인터 저장과 구분하도록 하는 여기에 설명된 가비지 수집을 지원한다. 이러한 이유로, 다른 카드 마킹 타입 실시예에서는 세대간 포인터 저장 트랩 매트릭스(470)의 내용은 세대간 포인터 저장에만 트랩하도록 프로그램 할 수 있게 한정된다.
기억된 준비 스타일 실시예 및 카드 마킹 스타일 실시예에서는 확장된 방트코드는 하드웨어 프로세서(100)가 아래에 더 상세하게 설명된 것과 같은 비-포인터 저장사이로부터 포인터 저장을 동일화하는 것을 지원한다. 첨가적으로, 세대간 포인터 저장 트랩 매트릭스(470)(즉, 필드 WB_VECTOR에 의한)에 의해 제공되는 더미에 대한 저장의 프로그램할 수 있는 필터링과 기록 배리어(430)은 하드웨어 프로세서(100)가 수집 시간에서보다 변형기 절차(410) 저장 시간에서 세대간 포인터 저장을 동일화하게 한다. 이러한 이유로, 용어 카드 마킹은 수집 동안에 수집기 절차(420)에 의해 사용하기 위한 가비지 수집 트랩 조정기(440)의 실시예에 의해 제공되는 저장의 종류(즉, 카드 표)로 설명된다. 용어 "카드 마킹"의 용법은 모든 저장이 포인터 또는 문자 데이터가 저장되는것과는 상관없이 트랩되는 것이 필요하다는 것을 의미하지는 않는다.
도 4는 또한 포인터 저장의 트랩핑에 기초한 가비지 수집 페이지를 지원하는 것을 나타낸다. 필드 GC_PAGE_MASK는 저장 데이터 포인터 값과 포인터 저장 명령의 objectref 타겟(즉, aputfield_quick 명령의)을 비교하기 위한 프로그램할 수 있는 마스크를 제공한다. 기록 배리어(430)은 만일 가비지 수집 페이지가 값과 objectref가 어울리지 않는다면 포인터 저장을 트랩한다. 첨가적인 저장 필터링은 필드 GC_PAGE_MASK에 의해 제공하고 기록 배리어(430)은 수집기 절차(420)가 수집기 절차(420)의 실시예에 의해 가장 오래된 세대의 비-분열 수집에 사용되는 Hudson의 트레인 알고리즘(R.Hudson 및 J.E.B. Moss, Incremental Garbage Collection for Mature Objects, Proceedings of International Workshop on Memory Management, St.Malo,France,16-18,Sept.1992)을 하드웨어 프로세서(100)에 구현하는데 특히 유용하다. 이 기술에서 이러한 것들은 Hudson의 트레인 알고리즘에 따라 트레인 "cars"를 한정하는데 사용되는 필드 GC_PAGE_MASK에 의해 한정되는 가비지 수집 페이지 크기가 있는 알맞은 구현을 인식할 것이다.
예로써, aputfield_quick 바이트코드의 신텍스(syntax)와 그것에 따른 하드웨어 프로세서(100)의 동작은 다음과 같다:
동작: 가비지 수집 체크로 객체에 기준 필드 준비
형식:
aputfield_quick
offsetbyte 1
offsetbyte 2
스택: ...,objectref,value
...
설명: reference 타입이 되는 objectref 및 또한 reference 타입이 되 는 value는 연산수 스택으로부터 팝(pop)된다. 상기 value는 objectref에 의해 기준되는 분류예내로 특정된 오프셋 (offset)에 쓰여진다. 오프셋의 상기 value는 (오프셋바이트 1 《 8)|오프셋바이트 2이다.
실행시간 예외: 만일 objectref가 0이면, aputfield_quick은 NullPointException을 한다.
objectref와 value 각각의 가장 중요한 두 비트는 네-비트 인덱 스를 형성하기 위해 연쇄되어진다. 이 인덱스는 GC_CONFIG 레지 스터의 16-비트 WB_VECTOR 필드로부터 한 비트를 선택한다. 만 일 선택된 비트가 준비된다면, gc_notify 트랩은 발생된다.
index=((objectref & 0xC0000000)≫28)|(value≫30)
if(GC_CONFIG.WB_VECTOR [index]== 1)
generate gc_notify
주의: 이 명령의 조작 부호는 근본적으로 putfield였고, 필드의 동작 은 역학적으로 타입 기준의 필드에 대응하는 분류예 데이터 내로 오프셋을 가지도록 결정되었다.
putfield 명령에 의한 일정한 풀 등록이 결정될 때, 필드를 위 한 오프셋은 발생되고, 필드의 타입은 결정된다. 16-비트 오프 셋은 최초의 putfield 명령의 두 조작 부호 바이트를 대체한다. 필드의 타입은 putfield_quick, putfield2_quick, 또는 aputfield_quick 바이트코드가 최초의 putfield 바이트코드를 대 체하는지를 결정한다.
분류에서의 정적 기준 필드(객체에서 기준 필드보다 오히려)를 준비하기 위한 aputstatic_quick 바이트코드의 신텍스와 그것에 따른 하드웨어 프로세서(100)의 동작은 유사하다.
고속 가비지 수집 트랩 처리기
한 실시예에서, 가비지 수집의 빠른 조정은 벡터된 트랩에 의해 제공되고, gc_notify(tt=0x27), prioity=17는 하드웨어 프로세서(100)에 의해 실행할 수 있는 바이트코드를 포함하는 연관된 가비지 트랩 조정기(440)를 시작하게 하는 트랩 제어 로직(170)에 의해 구현된다. 한 실시예에서, 가비지 수집 페이지 경계 횡단 포인터 저장 또는 세대간 포인터 저장에 대한 응답으로 발생하던지간에, 단일 가비지 수집 트랩 조정기(440)는 가비지 수집 트랩위 각각을 서비스한다. 가비지 수집 트랩이 트랩핑 저장이 완료되기전에 일어나기 때문에, 가비지 수집 트랩 조정기(440)는 기억된 준비 또는 카드 표 개정과 같이, 하드웨어 프로세서(100)이 무한하게 트랩핑하는 것을 방지하기 위해 실행되는 가비지 수집 기능에 더하여 트랩핑 저장을 모방하는 것이 필요하다. 가비지 수집 트랩 조정기(440)는 명령 다음의 저장에 PC를 강제할 것이다.
JAVA 가상 기억기 명령은 aputfield_quick, aputststic_quick, aastore, anewarray, multianewarray, newarray, putfield, putstatic, 및 new 를 포함하는 가비지 수집 트랩에 의해 영향을 미친다. 이러한 것중에, aputfield_quick,a putstatic_quick, 및 aastore만이 상기 필드 WB_VECTOR 및/또는 GC_PAGE_MASK의 내용에 따른 역학적인 필터링과 같은 가비지 수집 체크를 수행하는 것이 필요하다. 다른 것은 가비지 수집 메카니즘 사용, 예를 들어, 적당하게 세대의 멤버쉽 테그 초기화를 인식하는 것이 필요하다. 한 실시예에는, aastore 바이트코드는 모방 루틴에 트랩하고 aastore 트랩 조정기는 적당한 가비지 수집 체크를 수행한다. 간단한 트랩 조정기 구현은 aastore 트랩 조정기에서의 조작 부호 스택의 맨위에 저장되는 arrayref를 받고 만일 필요하다면 적당한 체크와 트랩을 수행하기 위한 dup,getfield_quick #0,aputfield_quick #0 바이트코드 시퀀스를 실행한다.
테그된 기준과 객체 형식
도 5는 하드웨어 프로세서(100)에 대표로서의 객체 기준(objectref)의 한 실시예를 나타낸다. objectref의 세 비트는 가비지 수집 힌트를 위해 사용될 수 있다. 특히, 필드 GC_TAG는 기록 배리어(430)가 상기한 바와 같이 포인터 저장을 트랩하던간에 결정하기 위한 레지스터 필드 GC_CONFIG.WB_VECTOR내로의 인덱스의 일부를 형성한다. 도 5의 실시예에서, 필드 GC_TAG는 상기한 바와 같이 기록 배리어(430)에 의해 사용하기 위한 발생 멤버쉽 정보를 인코드한다. 첨가적인 핸들 비트 H는 객체가 핸들을 통해 objectref 직접 또는 간접에 의해 기준되는지를 명령한다. 핸들은 그 시설을 레퍼런싱하는 방법, 무목적의 첨가적인 레벨의 비용, 그것에 포인터(또는 objectref)의 큰 스케일의 개정없는 메모리 객체의 재위치를 제공한다. 이러한 필드 둘다는 하드웨어 프로세서(100)의 인테거 유니트(142)(도 1)에 제공되기전에 마스크된다.
하드웨어 프로세서(100)의 한 실시예에서, 객체(600)은 헤더 부분(610)과 순간 변수 저장 부분(620)을 포함하는 메모리로 대표된다. 헤더 부분(610)은 가비지 수집기를 위한 정보와 객체의 동시 지위에 지정되는 첨가적인 저장(614)의 다섯 개 비트와 객체의 분류를 대표하기 위한 방법 벡터 표 베이스 일부(612)를 포함하는 32-비트 워드를 포함한다. 대신, 제 2 헤더 워드, 즉, 모니터 포인터(616)는 객체를 정열시키는 모니터의 어드레스를 포함할 수 있고, 그것에 의해 가비지 수집 정보에 쓸수 있는 제 1헤더 위드에 첨가적인 저장(614)의 다섯 개의 비트를 만든다. 도 6A의 실시예에서, 객체 기준(objectref)는 방법 주문의 오버헤드를 최소화하기 위해 방법 벡터 표 베이스 일부(612)의 위치를 가리킨다.
헤더 일부(610)의 세 비트는 수집기 절차(420)과 같은 가비지 수집기에 유용하다. 헤더 부분(610)에서, 세 개의 하위-주문 비트(헤더(2;0)) 및 두 개의 상위-주문-비트(헤더(31:30))는 헤더가 포인터로 취급될 때 마스크 오프된다. 이러한 세 개의 비트(헤더(31:30,2))는 가비지 수집기가 객체(600)에 대하여 정보를 저장하는데 유용하다. 대신, 제2 헤더 위드는, 즉, 모니터 포인터(616)는 객체(600)의 동시 지위를 유지하도록 제공될 수 있고, 가비지 수집 지원을 위해 다섯 개의 비트를 남기도록 제공된다. 가비지 수집을 위한 수집기 절차(420) 및 가비지 수집 트랩 처리기(440)를 구현하는 특별한 타입의 가비지 수집 방법에 의존하여 사용되었다. 세대내에서 나이 객체에 마크 비트, 카운터 비트를 포함하여 사용하는 것은 가능하다. 상기한 바와 같이, 헤더 부분(610)의 제 2 헤더 워드 실시예에서, 다섯 개의 비트는 수집기 절차(420)와 같은 가비지 수집기에 유용하다.
도 6A의 실시예에서, 순간 변수 저장 부분(620)은 방법 벡터 표 베이스 부분(612) 뒤의 한 단어에서 시작하고 객체(600)의 순간 변수를 포함한다. objectref의 최소 중요 비트는 기준이 조정되거나(==1) 또는 (==0)를 구분하고, 대안인 "조정된", 객체 형식은 도 6B에 나타낸다. 조정된 기준은 객체(600)이 만들어지고 모든 연속 기준이 처리기를 통할 때, 즉, 저장 포인터(650b)가 객체에 접근할 때 수립된다. 이 지원은 가비지 수집기의 어떤 타입이 에를 들어 변수를 포함하는 밑에 있는 객체 저장보다 힌들을 카피하므로써 객체 재위치의 비용을 줄이는 것을 제공한다.
포인터 비-특정 비이트코드의 다이내믹한 교체를 위한 확장된 바이트코드 지원
하드웨어 프로세서(100)는 빠른 변수에 의한 실행 단위에 공급되는 바이트코드를 다이내믹하게 교체함으로서 JAVA바이트 코드의 실행을 가속하기 위한 특징을 포함한다. 그러나, 이제 설명하는 바와 같이, 빠른 바이트코드 재교체 특성은 하드웨어 프로세서(100)가 가비지 수집을 위한 기록 배리어의 구현을 이용히도록 포인터-특정 저장 동작 바이트코드로 데이터-타입 비-특정 저장 동작을 다이내믹하게 교체된다.
명령 디코더(135)는 명령 캐시 유닛(120)으로부터 JAVA 바이트 코드와 같은 명령 흐름을 수신하기 위해 연결된다. 비록 본 발명이 JAVA 바이트 코드와 관련하여 기술되었지만, 당업자는 본 명세서에 기초한 다른 가상 머신 환경에서 다른 형태의 명령을 다이내믹한 교체를 위한 변형을 인지할 수 있을 것이다. 비록 본 명세서에 서술된 바이트코드 교체 특징은 상기 통합된 특허출원에 보다 일반적으로 기술된 것과 같이 명령 파라미터의 실행 시간 분석에 근거한 명령 실행 가속에 일반적으로 적용가능하지만, 본 명세서에서는 포인터 비-특정 비-고속 바이트코드를 그것의 포인터 특정 고속 변형으로 교체하는 다이내믹한 교체 및 기록 배리어의 유용한 실행을 위한 상기 다이내믹한 교체를 유용하게 실행하기 위한 하드웨어 프로세서(100)에 초점을 맞추고 있다.
도 7을 참고하면, 명령 디코더(135)는 버스(13)상의 디코드된 바이트코드에 해당하는 프로그램 카운터(PC) 값 및 디코드된 바이트코드를 제공한다. 이들 바이트코드와 PC 값은 실행 유닛(140)과 명령 및 데이터 프로세서(12)로 제공된다. 게다가, PC 값은 연관 메모리(14)의 입력 회로(22)에 제공된다. 일반적으로, 각 PC 값은 바이트코드의 대응 프로그램 발생만을 식별한다. 오퍼랜드 스택(723)의 최상위 엔트리는 명령 및 데이터 프로세서(12)에 제공된다.
연관 메모리(14)내에서, 명령 확인 메모리부(18)는 다수의 (N) 엔트리를 포함한다. 상기 N의 각각은 바이트코드 확인 값 PC_0, PC_1, PC_2, PC_3, …PC_N과 같은 대응 바이트코드 확인 값을 저장하는 것이 가능하다. 바이트코드 확인 값의 각각은 다른 PC 값에 따른 명령 확인 메모리부(18)에 저장된다. 명령 확인 메모리부(18)의 폭은 프로그램 카운터의 폭에 대응하여 선택된다.
데이터 세트 메모리부(20)도 N 엔트리를 포함하여, 명령 확인부(18)내의 각 엔트리가 데이터 세트부(20)내에 관련된 엔트리가 있게 한다. 데이터 세트 메모리부(20)의 N 엔트리 각각은 데이터 세트 DATA_0, DATA_1, DATA_2, DATA_3, …DATA_N과 같은 데이터 세트를 저장하는 것이 가능하다. 아래에 보다 자세히 서술하는 바와 같이, 데이터 세트 메모리부(20)에 저장된 데이터 세트 각각은 바이트코드의 대응 프로그램 발생의 고속 변형의 실행을 위한 데이터를 포함한다. 한 실시예에서, 데이터 세트 메모리부(20)은 4개의 32비트 단어의 폭을 가진다. 그러나, 데이터 세트 메모리부(20)는 다른 실시예에서 다른 폭을 가질 수 있다.
명령 및 데이터 프로세서(12)는 버스(11)상에 제공된 바이트코드를 모니터하고, 대응 데이터 세트가 고속 접속가능하다면, 버스(11)상의 현재 바이트코드는 가속된 방법으로 실행되어지는 것이 가능한 비고속 바이트코드인지를 결정한다. 만약 그렇다면, 대응 데이터 세트를 가지는 비고속 바이트코드의 고속 변형은 비고속에서 고속 번역 캐시(131)로 캐시될 것이다. 일반적으로, 비고속 바이트코드는 0, 1 또는 보다 고속 변형을 가질 수 있다. JAVA 가상 머신 명세서는 다음의 비고속 바이트코드: anewarray, checkcast, getfield, getstatic, instanceof, invokeinterface, invokespecial, invokestatic, invokevirtual, ldc, ldc_w, ldc2_w, multianewarray, new, putfield, 및 putstatic를 설명하고, 하드웨어 프로세서(100)의 한 실시예는 고속 변형을 한다. putfield, putstatic 및 aastore를 포함하는 비고속 저장 경향 바이트코드에 있어서, 목적 필드에 따른 일정한 풀 엔트리의 분석은, 만약 분석이 포인터 저장 작동을 가리킨다면, aputfield_quick(가비지 수집 검사로 목표내의 기준 필드 설정) 또는 aputstatic_quick(가비지 수집 검사로 클래스에서 정적 기준 필드 설정)과 같은 포인터 특정 고속 변형으로 교체를 허용한다. 만약 분석이 기준(예를들어 비포인터 형태)와 다른 형태의 목표물 필드를 가리킨다면, 교체는 putfield_quick(물체에서의 필드 설정), putfield2_quick(물체에서의 길거나 이중의 필드 설정), putstatic_quick(클래스에서의 정적 필드 설정) 또는 putstatic2_quick(클래스에서 길거나 이중 정적 필드 설정)과 같은 다른 고속 변형을 가진다.
일반적으로, 대응 데이터 세트가 고속 접속가능하다면, 가속 실행이 가능한 비고속 바이트코드는 이하에서 고속 변형을 가지는 비고속 바이트코드로 지칭된다. 고속 변형을 가지는 비고속 바이트코드는 명령 디코더(135)에 의해 제공되는 바이트코드의 서브세트를 형성한다. 명령 및 데이터 프로세서(12)는 현재 바이트코드가 현재 바이트코드의 확인부를 디코딩함으로써 고속 변형을 가지는 비고속 바이트코드인지를 결정한다. 받침은 고속 변형을 가지는 비고속 바이트코드의 N 프로그램 실행에 이르도록 하기 위해 데이터 세트 메모리와 명령 확인 메모리에서 엔트리에 의해 제공된다. 상기 엔트리의 일부는 대응 프로그램 발생이 포인터 저장을 분석하기 위한 비고속 저장 경향(그러나, 포인터 비특정인) 바이트코드의 포인터 특정 고속 변형을 위해 사용되어질 수 있다.
고속 번역 캐시(131)에 대한 비고속은 현재 PC 값을 가지는 현재 바이트코드에 따라 다음과 같이 작동한다. 명령 디코더(135)는 현재 PC 값과, 실행 유닛(140)과 명령 및 데이터 프로세서(12)로 디코드된 현재 바이트코드를 제공한다. 디코드된 바이트코드가 고속 변형, 고속 변형 로드 바이트코드 또는 재시도 바이트코드를 가지는 비고속 바이트코드일 때, 명령 및 데이터 프로세서(12)가 작동한다. 만약 버스(11)상의 명령 디코더(135)에 의해 제공되는 현재 바이트코드가 고속 변형, 고속 변형 로드 바이트코드 또는 재시도 바이트코드를 가지는 비고속 바이트코드라면, 명령 및 데이터 프로세서(12)는 바이트코드에 반응하지 않고, 대신에, 현재 바이트 코드 및 현재 PC 값은 실행을 위해 실행 유닛(140)에 제공된다.
그러나, 현재 바이트코드가 고속 변형을 가지는 비고속 바이트코드이면, 명령 및 데이터 프로세서(12)는 현재 명령에 반응하여 작동된다. 한 실시예에서, 바이트코드 putfield 및 putstatic은 데이터 프로세서(12)를 작동시킨다. 작동시에, 명령 및 데이터 프로세서(12)는 라인(21)상에 나타나는 신호 NO_MATCH의 상태를 결정한다. 초기에는 명령 확인 메모리부(18)에 저장된 명령 확인 값 PC_0, PC_1, PC_2, PC_3, …PC_N은 무효 값으로 설정된다. 대안으로 명령 확인 값과 관련한 '유효' 비트는 제거될 수 있다. 따라서, 신호 NO_MATCH가 나타난다. 현재 PC 값과 명령 확인 값 PC_1, PC_1, PC_2, PC_3, …PC_N 사이의 매치의 부재는 현재 바이트코드를 실행하기 위해 필요한 데이터 세트가 연관 메모리(14)에 현재 저장되지 않았다는 것을 가리킨다. 결과적으로, 명령 및 데이터 프로세서(12)는 적당한 고속 변형을 가지는 비고속 바이트코드의 교체를 허용하기 위해 상기 데이터 세트를 회수하고 초기에 위치하여야 한다.
현재 바이트코드가 고속 변형을 가지는 비고속 바이트코드인 측정과 나타난 신호 NO_MATCH에 응답하여, 명령 및 데이터 프로세서(12)는 제어 신호 TRAP을 나타낸다. 제어 신호 TRAP은 트랩 로직(170)에 제공된다. 제어 신호 TRAP에 응답하여, 트랩 로직(170)은 실행 유닛(170)의 작동을 일시적으로 중지하고, 액세스되어진 대응 소프트웨어 코드부(31, 32 또는 33)를 유발한다. 액세스된 소프트웨어 코드부는 나타내어진 제어 신호 TRAP을 유발하는 비고속 바이트코드에 의존한다.
한 실시예에서, 트랩 로직(170)은 나타내어진 제어 신호 TRAP을 유발하는 바이트코드의 특별한 프로그램 발생을 확인하기 위한 현재 PC 값을 사용하는 명령 캐시 유닛(120)을 액세스한다. 소프트웨어에 이행된 스위치 명령은 적당한 소프트웨어 코드부(확인된 바이트코드에 따른)로의 실행을 가리킨다. 대안 실시예에서, 트랩 벡터와 같은 다른 방법은 적당한 소프트웨어 코드부로의 직접 실행을 위해 사용되어질 수 있다.
그러므로, 확인된 바이트코드가 제1 바이트코드 INST_0에 대응할 때, 스위치 명령은 액세스되어지는 대응 소프트웨어 코드부(31)를 유발한다. 유사하게, 식별된 바이트코드가 제2 바이트코드 INST_1에 해당하면, 스위치 명령문은 대응 소프트웨어 코드부(32)가 액세스되게 한다. 한 실시예에서 제1 바이트코드 INST_0은 putfield이고, 제2 바이트코드 INST_1은 putstatic이다. 확인된 바이트코드가 다른 임의의 바이트코드(예로 INST_N으로 표시되는)에 응답하면, 스위치 명령문은 해당 소프트웨어 코드부(33)가 액세스되게 한다.
소프트웨어 코드부(31, 32, …33)는 각각 INST_0(예를들면, putfield), INST_1(예를들면 putstatic)…INST_N의 바이트코드를 실행하기 위해 필요한 데이터 세트를 위치시키고 검색한다. 다른 방법으로 설명하면, 소프트웨어 코드부(31, 32,…33)는 각각 INST_0, INST_1, …INST_N의 바이트코드의 프로그램 실행을 위해 일정한 풀 엔트리를 분석한다. 임의의 비고속 바이트코드(예를들면 putfield와 putstatic)는 다중 고속 변형(예를들면 putfield_quick, putfield2_quick, aputfield_quick, putstatic_quick, putstatic2_quick 및 aputstatic_quick)을 가지기 때문에, 대응 소프트웨어 코드부는 또한 적당한 고속 변형을 선택한다. 만약 대응하는 일정한 풀 엔트리의 분석이 포인터 저장(예를 들면 저장 목표 물체 필드가 기준 형태이면)인 저장 경향 바이트코드(예를 들면 putfield)의 특별한 프로그램 발생을 가리킨다면, 포인터 특정 고속 변형을 가지는 교체(예를들면 aputfield_quick)는 적당하다.
소프트웨어 코드부(31, 32,…33)는 오퍼랜드 스택(73)으로 위치되어지는 회수된 데이터 세트를 더 유발한다. 소프트웨어 코드부(31, 32, …33)는 명령 디코더(135)로 고속 변형 로드 바이트코드를 제공한 후, 회수된 데이터 세트는 오퍼랜드 스택(723)에 위치되어진다. 명령 디코더(135)는 수신된 고속 변형 로드 바이트코드를 디코드한다. 디코드된 고속 변형 로드 바이트코드는 버스(11)상의 명령 및 데이터 프로세서(12)로 제공된다. 명령 및 데이터 프로세서(12)는 버스(11)상에 나타나는 각각의 고속 변형 로드 바이트코드를 확인하고, 이에 응답하여, 오퍼랜드 스택(723)으로 사전에 로드된 해당 데이터 세트를 검색한다.
명령 및 데이터 프로세서(12)는 연관 메모리(14)로 회수된 데이터 세트와 현재 PC 값을 로드한다. 한 실시예에서, 현재 PC 값은 명령 확인 값 PC_0으로써 명령 확인 메모리부(18)의 제 1 엔트리로 입력되고, 대응 회수된 데이터 세트는 데이터 세트 DATA_0로써 데이터 세트부(20)의 제 1 엔트리로 입력된다. 현재 PC 값은 명령 및 데이터 프로세서(12)로부터 버스(15)상의 메모리부(18)으로 루트된다. 메모리(14)내의 특별한 엔트리를 선택하기 위해 사용된 방법은 예를들면, 최근에 사용된 (LRU-least recently used) 알고리즘이나 선입선출(FIFO) 알고리즘일 수 있다.
현재 PC 값과 회수된 데이터 세트가 메모리(14)로 입력된 다음에, 명령 및 데이터 프로세서(12)는 나타내어진 제어 신호 TRAP을 유발하는 비고속 명령을 재시도하기 위해 소프트웨어 코드를 일으킨다. 동시에, 입력 회로(22)로 다시 제공되는 현재 PC 값은 명령 확인 메모리부(18)내에 저장된 명령 확인 값(예를들면, 명령 확인 값 PC_0)을 매치한다. 결과적으로, 신호 NO_MATCH는 나타나지 않는다. 따라서, 명령 및 데이터 프로세서(12)는 소프트웨어 코드부(31, 32, …33)중 대응하는 하나와 트랩 로직(170)을 경유하는 대응 데이터 세트를 검색하고 위치하기 위해 시도되지 않는다.
현재 PC 값은 명령 확인 값 PC_0을 매치하기 때문에, 출력부(24)은 실행 유닛(140)으로 대응 데이터 세트 DATA_0을 지난다. 따라서, 실행 유닛(140)은 비고속으로부터 고속 번역 캐시(131)로 관련 데이터 세트 DATA_0과 현재 PC 값을 겁색한다. 이에 응답하여, 실행 유닛(140)은 고속 변형 바이트코드를 실행한다.
고속 변형을 가지는 비고속 바이트코드와 관련한 PC 값과 데이터 세트가 연관 메모리(14)로 로드되면, 고속 변형을 가지는 비고속 바이트코드의 특별한 프로그램 발생은 소프트웨어 코드를 액세스하지 않고 일정한 풀을 분석하지 않고도 실행되어질 수 있다. 더구나, 저장 경향 바이트코드의 특별한 프로그램 발생을 위해, 특별한 프로그램 발생이 포인터 저장으로 분석된다면 포인터 특정 고속 변형(예를들면, putfield-quick)이 실행되고, 특별한 프로그램 발생이 비포인터(또는 리터럴 값) 저장으로 분석된다면 비포인터 고속 변형(예를들면, putfield_quick 또는 putfield2_quick)이 실행된다. 더구나, 비고속 바이트코드가 프로그램 이미지에서 중복입력되지 않기 때문에, 비고속 바이트코드는 원래의 형태로 남아있는 것이 가능하다. 게다가, 비고속 바이트코드가 중복입력되지 않기 때문에 비고속 바이트코드는 판독 전용 메모리에서 선택적으로 저장되어질 수 있다.
다음의 실시예는 하드웨어 프로세서(100), 특히 변형기 프로세서(410)(도 4)에 의한 포인터 저장을 선택적으로 트랩핑하기 위한 기록 배리어(430)의 포인터 저장 특정 실시예를 유효화하는 비고속 대 고속 번역 캐시(131)의 작동을 좀더 명확히 해줄 것이다. 명령 디코더(135)는 고속 변형을 가지는 비고속 바이트코드(예를들면 putstatic)를 초기에 수신하고, 이때 비고속 바이트코드 특별한 프로그램 발생은 0×000100의 대응 PC 값을 가진다. 바이트코드 putstatic의 특별한 프로그램의 발행이 명령 확인 메모리부(18)에서 나타나지 않는다고 생각하면, 0×000100의 현재 PC 값은 신호 NO_MATCH를 나타내기 위해 입력 회로(22)를 유발한다. 신호 NO_MATCH와 바이트코드 putstatic가 고속 변형을 가지는 비고속 바이트코드인 결정에 대응하여 명령 및 데이터 프로세서(12)는 제어 신호 TRAP을 나타낸다. 트랩 로직(170)은 바이트코드INST_1(예를들면 putstatic)로써 현재 바이트코드를 확인하기 위한 PC 값을 가진다. 바이트코드 INST_1로써 확인되어지는 현재 바이트코드에 대응하여 소프트웨어 스위치 명령은 대응 소프트웨어 코드부(32)에 직접 실행한다.
그러면 소프트웨어 코드부(32)는 저장 목표 물체 필드와 관련한 일정한 풀 엔트리를 분석한 후, 바이트코드 INST_1을 실행하기 위해 필요한 데이터 세트를 검색하고, 오퍼랜드 스택(723)으로 상기 데이터 세트를 로드한다. 소프트웨어 코드부(32)는 명령 디코더(135)로 고속 변형 로드 바이트코드를 제공한다. 따라서 명령 디코더(135)는 명령 및 데이터 프로세서(12)로 디코드된 고속 변형 로드 바이트코드를 제공한다. 명령 및 데이터 프로세서(12)는 오퍼랜드 스택(723)으로부터 데이터 세트를 검색하고, 데이터 세트 DATA_0로써 데이터 세트 메모리부(20)의 제 1 엔트리로 상기 데이터 세트를 로드한다. 소프트웨어 코드부(32)는 기준 형태(예를들면, putstatic의 특별한 프로그램 발생은 포인터 저장)의 저장 목표 물체 필드를 결정하고, 데이터 세트 DATA_0를 가지는 적당한 포인터 특정 고속 변형 바이트코드aputstatic_quick을 포함한다.
명령 및 데이터 프로세서(12)는 명령 확인 값 PC_0으로써 명령 확인 메모리부(18)의 제1 엔트리로 0×000100의 현재 PC 값을 더 로드한다. 명령 및 데이터 프로세서(12)는 비고속 바이트코드 INST_1(예를들면 putstatic)과 0×000100의 현재 PC 값을 유발한 후, 각각 버스(11,13)상에 나타내어진다. 한 실시예에서, 명령 및 데이터 프로세서(12)는 나타내어지는 제어 신호 TRAP을 유발하는 바이트코드로의 백 제어를 전송하는 트랩으로부터의 복귀(ret-from-trap) 바이트코드를 발행함으로써 상기를 얻을 수 있다. 동시에, 입력 회로(22)는 현재 PC 값과 명령 확인 값 PC_0사이의 매치를 확인한다. 따라서, 연관 메모리(14)는 출력 회로(24)로 명령 확인 값 PC_0(예를들면 포인터 특정 고속 변형 바이트코드 aputstatic-quick을 포함하는 데이터 세트 DATA_0)과 관련된 데이터 세트를 제공한다. 출력 회로(24)는 포인터 특정 고속 변형 바이트코드 aputstatic_quick를 실행하는 실행 유닛(140)으로 상기 데이터 세트 DATA_0를 통과한다.
고속 변형을 가지는 다른 비고속 바이트코드와 명령 디코더(135)에 의해 수신되는 동일 비고속 바이트코드의 다른 프로그램 예는 유사한 방법으로 조정된다. 예를들면, 0×000200의 관련 PC 값을 가지는 비고속 바이트코드 INST_1(예를들면 putstatic)의 다른 프로그램 발생은, 데이터 세트 DATA_1로써 데이터 세트 메모리부(20)에 저장되어지는 명령 INST_1과 관련한 데이터 세트와 명령 확인 PC_1로써 명령 확인부(18)에 저장되어지는 0×000100의 PC 값에 기인한다. 만약 바이트코드 putstatic의 특별한 프로그램의 발생이 리터럴 값 저장으로 분석한다면, 명령 확인 값 PC_1(예를들면 데이터 세트 DATA_1)과 관련한 데이터 세트는 포인터 특정 고속 변형이라기 보다는 putstatic2_quick과 같은 고속 변형 바이트코드를 포함할 것이다. 비고속 바이트코드 INST_1(예를들면 데이터 세트 DATA_0)의 제 1 프로그램 발생과 관련한 데이터 세트는 비고속 바이트코드 INST_1(예를들면 데이터 세트 DATA_1)의 제2 프로그램 발생과 관련한 데이터 세트처럼 동일하게 되지는 않는다는 것을 주의하라.
바이트코드 putstatic의 2개의 프로그램 발생을 분석함으로서, 포인터-특정 저장 바이트코드 aputstatic_quick와 비-포인터 저장 바이트코드 putstatic2_quick를 저장한다, 하드웨어 프로세서(100)의 빠르지 않은 고속 번역 캐시(131)는 포인터 저장으로의 배리어(430) 기록을 한정한다. 전술한 바와 같이, 하드웨어 프로세서(100)에 의해 바이트코드 aputfield_quick의 기준 평가를 함으로서 기록 배리어(포인터-특정 고속 변형 바이트코드)는 objectref와 value 오퍼랜드의 각각의 가장 중요한 2비트를 연결시키는 것에 의해 4비트 인덱스를 형성한다. 이 인덱스는 레지스터 GC_CONFIG의 16비트 필드 WB_VECTOR로부터 어떤 비트를 선택한다. 선택된 비트가 설정되면, 트랩 gc_notify가 발생된다.
index=((objectref & 0xC0000000)>>28) | (value>>30)
if(GC_CONFIG.WB_VECTOR[index]==1)
generate gc_notify
실행유닛(140)(도 1)의 한 실시예에 있어서, 바이트코드 계산을 위한 논리회로는 레지스터 GC_CONFIG(도 4)에 결합되어 상기 논리 표현을 실행한다. 적절한 실행의 변형은 본 발명이 속하는 기술분야의 당업자에 의해 인지될 것이다.
다른 실시예에 있어서, 배리어 기록(430)(포인터-특성 빠른 변형 바이트코드에 의한 실행과 같이)는 세대간의 저장 트랩핑과 포인터 저장기에 교차하는 가비지 수집 페이지 경계 트랩핑의 양쪽을 지원한다. 전술한 바와 같이, 배리어 기록(430)의 이 실시예는 objectref와 store_data 오퍼랜드의 각각의 가장 중요한 2비트를 연결시키는 것에 의해 4비트 인덱스를 형성한다. 이 인덱스는 레지스터 GC_CONFIG의 16비트 필드 WB_VECTOR로부터 어떤 비트를 선택한다. 선택된 비트가 설정되면, 트랩 gc_notify가 발생된다. 그러나, 제2 트리거가 또한 objectref와 store_data 오퍼랜드의 마스크된 부분의 비교에 의해 제공된다. 이 마스크는 레지스터 GC_CONFIG의 GC_PAGE_MASK, 즉 27:16비트에 의해 프로그램가능하게 규정된다. 이 제2 트리거는 프로세서 상태 레지스터(PSR)의 가비지 수집 페이지 이네이블된 비트(GCE)를 보호한다.
if{(GC_CONFIG[(objectref[31:30]##store_data[31:30])}==1)
OR((PSR.GCE==1) AND
((store_data[31:12] & 0x3F##GC_CONFIG[27:16])!=
(objectref[31:12] & 0x3F##GC_CONFIG[27:16])}
then trap
실행유닛(140)(도 1)의 한 실시예에 있어서, 바이트코드 계산을 위한 논리회로는 레지스터 GC_CONFIG(도 4)에 결합되어 상기 논리 표현을 실행한다. 적절한 실행의 변형은 본 발명이 속하는 기술분야의 당업자에 의해 인지될 것이다.
기록 배리어(430)의 다른 실시예는 대표적으로 수집된 메모리 공간의 가장 오래된 특별한 세대 또는 세대 가비지 수집 페이지 경계 교차 검사를 제한하기 위한 메카니즘을 제공한다. 변형된 페이지 검사 트래핑 식, 즉
if((PSR.GCE==1)||
((objectref[31:30] == store_data[31:30]) &&
(GEN_PAGE_CHECK_ENABLE[objectref[31:30]]==1))) &&
((objectref[31:12] & 0x3F##GC_PAGE_MASK)!=
(store_data[31:12] & 0x3F##GC_PAGE_MASK)))
then trap
objectref 및 store_data 오퍼랜드의 발생 태그 비트(즉, 비트 31:30)가 동일한 것을 요구한다. 가장 오래된 세대를 인코딩하기 위한 유연성을 허용하기 위해, 레지스터 GC_CONFIG의 다른 미사용된 4비트(즉, 비트 31:28)가 필드 GEN_PAGE_CHECK_ENABLE를 인코드하도록 사용될 수 있다. 이 4비트 필드는 가비지 수집 페이지 경계 크로싱 저장의 트래핑이 제한되어지는 세대를 나타낸다. 특정 세대로의 가비지 수집 페이지 체크의 제한은 인접하는 메모리 구역을 나타내고 표시된 구역의 어드레스내에 objectref 및 store_data 파괴를 검사하기 위한 구조상의 지원을 제공하는 것에 의해 실행될 수 있다. 적절한 실행의 변형, 즉 레지스터 기초 및 경계를 포함하는 변형은 본 발명이 속하는 기술분야의 당업자들에 인지될 것이다. 특정 세대를 통합하는 실행, 전술한 세대간의 포인터 저장 트래핑과 함께 가비지 수집 페이지 경계 크로싱 저장 트래핑의 적절한 실행의 변형은 본 발명이 속하는 기술분야의 당업자에 인지될 것이다.
전술한 바와 같이, 비고속 번역 캐시의 동작은 바이트코드 aputfield_quick와 함께 reference 형태의 필드에 대응하는 클래스 예시 데이터로의 오프셋을 갖는 필드상에 동작하도록 결정된 원래의 바이트코드 putfield를 교체한다. putfield 명령에 의해 참조된 상수 풀 엔트리가 분석되면, 필드에 대한 오프셋이 발생되며 필드의 형태는 reference 형태로 결정된다. 고속 번역 캐시(131)의 대응 데이터 세트 DATA_1에 포함된 16비트 오프셋은 원래의 putfield 명령의 2개의 오퍼랜드 비트로 교체된다. aputfield_quick 바이트코드로 결정된 필드 형태는 putfield_quick 또는 putfield2_quick 바이트코드보다 원래의 putfield 바이트코드로 교체된다. 필드 WB_VECTOR 및 레지스터 GC_CONFIG의 GC_PAGE_MASK의 상수에 의존하여 기록 배리어(430)(빠른 변형 바이트코드 aputfield_quick에 의해 한 실시예에서 부분적으로 실행된)은 전술한 바와 같이 포인터 저장을 트랩할 수 있다.
하드웨어 프로세서(100)에 대한 다이나믹 바이트코드 교체의 한 실시예를 기술한다. 다이나믹 바이트코드 교체의 다른 실시예는 자가변형 코드에 기초한다. 비고속 번역 캐시(131)의 설명에 있어서, 자가변형 코트 실시예는 캐시의 실행이 특별하지 않거나 또는 원하지 않을 때(즉, 가격관계에 대해) 이점을 가진다. 이러한 경우에 있어서, 비고속 번역 캐시(131)는 제거될 수 있다. 그 대신에, 트랩 코드, 즉 소프트웨어 코드부(31, 32,…)가 명령 스페이스내로 직접 기록하는 것에 의해 그의 적절한 빠른 변형으로 원래의 빠르지 않은 바이트코드를 교체할 수 있어 원래의 빠르지 않은 바이트코드의 특정 프로그램 발생의 후속 실행이 빠른 변형을 계산할 수 있다. 자가변형 코드의 한 실시예는 미국특허 제5,367,685호에 기술되어 있는 다이나믹 바이트코드 교체 메카니즘에 기초한다.
가비지 수집 실시예
전술한 가비지 수집을 위한 지원의 사용은 3 세대 수집기 접근의 환경에서 기술된다: 웅거(Ungar)의 저장된 세트 세트 정보정리의 실행, 세대 수집기에 기초한 윌슨(Wilson)의 카드 테이블의 실행 및 수집기에 기초한 허드슨(Hudson)의 트레인 연산 실행.
세대 수집기에 기초한 기억된 세트
도 8은 웅거 이후 기억된 세트를 사용한 세대 가비지 수집을 나타낸다. 이 가비지 수집 접근의 실행(즉, 기록 배리어(430), 수집기 프로세서(420) 및 가비지 수집트랩 처리기(440) 포함) 이하의 방식으로 하드웨어 프로세서(100)의 특징을 개발하는 이점을 가질 수 있다.
1. 모든 저장은 트랩에 필요하지 않음. 특히, 단지 무리내로의 포인터 저장만이 체크에 필요함. 전술한 aputfield_quick 및 aputstatic_quick 바이트코드의 사용은 단지 이러한 포인터 저장의 체크를 허용한다.
또한, 스택 캐시(155)에 표시된 오퍼랜드 스택 또는 국부 가변 영역으로의 저장은 만약 오프랜드 스택, 국부 가변 및 상태 영역이 루트 세트의 부분으로 가정되어진다면 트랩은 필요하지 않다. 스택 캐시(155)의 엔트리에 나타낸 목적 기준은 포인터로써 나타낼 수 있다.
2. 전술한 바와 같이, 하드웨어 프로세서(100)의 기록 배리어(430) 지원은 만약 젊은 세대 목적의 objectref가 오래된 세대 목적으로 저장된다면 트랩된다.
3. 어떤 실시예에 있어서,단지 2세대가 수집된 메모리 스페이스(850)내에 지원되며 레지스터 GC_CONFIG의 필드 WB_VECTOR은 0x5050 값을 포함한다. objectref의 필드 GC_TAP(즉 비트 30)중의 1 비트만이 교려된다. 한 실시예에 있어서, 제로(0) 값은 젊은 세대(810)내의 목적에 포인팅할 때 objectref를 나타내며, 일(1) 값은 오래된 세대(820)내의 목적에 포인팅할 때 objectref를 나타낸다. 이 실시예에 있어서, 비트 31이 사실상 무시될 수 있다. 큰 수의 세대를 위한 실시예는 본 발명이 속하는 기술분야의 당업자에 인지될 것이다. 필드 WB_VECTOR의 내용에 따르면, 기록 배리어(430)는 오래된 세대(820) 목적으로부터 젊은 세대(810) 목적으로 포인터가 저장되더러도 가비지 수집트랩 처리기(440)를 트리거한다. 이 실시예에 있어서, PSR.GCE 비트는 제로(0)로 설정되며, 필드 GC_PAGE_MASK의 내용에 기초한 기록 배리어(430) 동작을 무능하게 한다.
4. 저장을 위한 트랩 조건:
if{(GC_CONFIG[(objectref[31:30]##store_data[31:30])}==1)
OR((PSR.GCE==1) AND
((store_data[31:12] AND 0x3F##GC_CONFIG[27:16])!=
(objectref[31:12] AND 0x3F##GC_CONFIG[27:16])}
then trap
여기서, store_data는 타겟 목적내로 저장된 32비트 포인터이며. objectref는 저장이 만들어진 목적으로 32비트 포인터이다.
5. 하드웨어 프로세서(100)가 트랩될 때, 즉 기록 배리어(430)가 가비지 수집트랩 처리기(440)를 트리거하며, 하드웨어 프로세서(100)의 실행은 가비지 수집트랩 처리기(44)를 점프한다. 어떤 실시예에 있어서, 가비지 수집트랩 처리기(440)는 저장된 세트(830)에 정보를 저장하며 트래핑 포인터 저장을 모방한다.
6. 가비지 수집 동안, 목적은 젊은 세대(810)로부터 오래된 세대(820)로 진행하며, 진행된 목적에의 모든 기준의 필드 GC_TAG는 다른 세대의 일부인 진행된 세대를 반사하도록 갱신된다.
세대 수집기에 기초한 카드 테이블
세대 수집기에 기초한 카드를 실행하기 위해, 레지스터 GC_CONFIG의 필드 WB_VECTOR가 0xFFFF로 설정된다. 이는 기록 배리어(433)가 무리에 모든 포인터 저장을 트랩하도록 하며 가비지 수집트랩 처리기(440)와 같은 트랩 조정기를 트리거 한다. 이러한 세대 정보정리에 기초한 카드의 실시예에 있어서, 가비지 수집트랩 처리기(440)는 카드 테이블 데이터 구조에 추가저장을 실행하며 트래핑 저장을 모방한다. 대조적으로 윌슨 후의 종래의 세대 수집기 실행에 기초한 카드는 기재된 실시예의 트랩은 단지 포인터를 저장한다. 다른 실시예에 있어서, 레지스터 GC_CONFIG의 필드 WB_VECTOR는 세대간의 단지 포인터 저장에 대응하는 기록 배리어(430)의 트래핑 행동을 규정하도록 적절한 값을 설정한다. 이 방식에 있어서, 수집 시간 스캐닝은 세대간 포인터 저장을 실행시키기 위해 카드에 한정될 수 있다. 이러한 실시예에 있어서, 카드 테이블은 전술한 저장된 세트 실시예와 비교하여 이중 제거기능을 제공하는 이점을 가진다.
수집기에 기초한 트레인 연산
허드슨의 트레인 연산은 세대 시스템의 가장 늦은 세대의 비 분열 수집을 허용하기 위해 보급된다. 가장 오래된 세대내의 서로다른 메모리 구역("cars")사이의 기준 트랙을 유지하도록 기록 배리어를 사용한다. 하드웨어 프로세서(100)의 실행에 있어서, 이들 "cars"는 고정적으로 규정되며, 파워 2 사이즈 구역은 파워 2 경계에 정열된다. 필드 GC_PAGE_MASK는 가비지 수집 연산의 이 클래스에 대한 기록 배리어(430)의 동작을 규정한다. 만약 프로세서 스테이트 레지스터 비트 PSR.GCE가 1로 설정되면, 가비지 수집 페이지 경계(필드 GC_PAGE_MASKFH 규정된)를 교차하는 어떤 포인터 저장은 기록 배리어(430)가 가비지 수집트랩 처리기(440)를 트리거하도록 한다. 이러한 실시예에 있어서, 가비지 수집트랩 처리기(440)는 레지스터 GC_CONFIG의 필드 GC_PAGE_MASK에 기초한 프로그램가능한 규정인 Page("car")를 조정한다. 4KByte에서 8KByte사이의 페이지 구역은 전술한 실시예에 지원되어 있다.
다른 수집기
가비지 수집기의 어떤 실재 시간은 기록 배리어에 의존한다. 이들 가비지 수집기의 실행은 기록 배리어(430)의 특정한 특징을 개발할 수 있다. 스틸에 의해 제안된 증분 마크-스윕 수집기(Guy L. Steele, Multiprocessing Compactifying Garbage Collection, Communications of the ACM, 18(9)(1975))는 또한 기록 배리어(430)의 특정 특성을 개발할 수 있다.
다양한 실시예를 참조로 하여 기술된 본 발명은 이들 실시예에 한정되는 것은 아니다. 다양한 변형, 변경, 추가 및 개선이 가능하며, 본 발명은 JAVA 프로그래밍 언어와 JAVA 가상머신에 대해 실시예를 참조로 기술하였지만 인캠패스 시스템, 물품, 방법 및 포로세서 환경의 폭넓은 적용에 한정되는 것은 아니다.
또한, 비록 본 발명을 하드웨어, 소프트웨어의 형태로 기술하였지만, 가상머신명령 프로세서의 실행은 세대간 포인터 저장 트랩 매트릭스, 목적 기준 세대 태깅, 세대간 포인터 저장 트랩 매트릭스와 목적 기준 세대 태깅 반응 기록 배리어, 가비지 수집트랩 처리기를 채용 및/또는 적절한 기록 배리어 지원으로 포인터 특정 명령과 함꼐 포인터 비-특정 명령의 선택적인 다이나믹 교체를 용이하게 할 수 있다. 이들 및 다른 변형, 변경, 추가 및 개선은 특허청구범위에 정의된 본 발명의 기술사상을 벗어나지 않는 범위내에서 있을 수 있다.
본 발명은 가비지 수집기의 실행을 용이하게 하는 시스템, 방법 및 장치를 구현하는 시스템, 방법, 장치 및 컴퓨터 프로그램을 제공한다. 특히, 본 발명은 포인터 저장기를 크로싱하는 가비지 수집 페이지 경계의 트랩핑을 위한 아키텍쳐럴 지원을 제공한다. 경계 크로싱으로서의 포인터의 확인은 가비지 수집 페이지 크기를 결정하기 위해 프로그램으로 인코드되는 가비지 수집 페이지에 응답하는 저장기 배리어에 의해 실행된다. 라이트 배리어 및 가비지 수집 페이지 마스크는 가비지 수집 페이지 크기의 프로그램-유연 결정을 제공하며 따라서 경계 크로싱 포인터 저장기는 트랩되어, 다양한 세대의 가비지 수집 방법을 위한 가비지 수집기 실행기를 제공하고, 세대 수집된 메모리 공간을 매니지하기 위한 트레인 알고리즘 형태의 방법을 포함한다.
포인터 사양 저장기 명령 교체는 포인터 저장기 뿐만아니라 프로그램으로 결정된 가비지 수집 페이지 경계에 대한 정확한 배리어를 제공하기 위한 본 발명에 따라 실행할수 있도록 한다. 그럼에도 불구하고, 다른 저장기 또는 가비지 수집 페이지 마스크 및 펌웨어의 인코딩 또는 가비지 수집 트랩 트리거링 방정식이 또한 적합하다. 또한, 일반적 또는 특별한 목적의 소프트웨어 형태도 적합하고, 특히 하드웨어 프로세서상의 실행을 위한 소프트웨어 가상 머신 명령 프로세서 실행에서 적합하다. 포인터 비-특정 명령의 실행시간을 포인터-특정 명령으로의 교체는 비-포인터 저장기 명령이 세대간의 포인터 저장기 트랩 체크를 바이패스하도록 하지만, 일부 형태는 이러한 이점이 있는 특징이 없을 수 있다. 이들 및 다른 변형은 청구범위의 범위에 속한다.
본 발명에 따른 한 실시예에 있어서, 장치는 거기에 형성된 목표가 각각의 목표 기준을 통해 접근가능한 동적으로 할당가능한 저장와, 프로그램으로 결정된 가비지 수집 페이지 마스크와, 포인터 저장기를 크로싱하는 가비지 수집 페이지 경계에 대한 라이트 배리어를 포함한다. 라이트 배리어는 관련된 첫 번째 및 두 번째 포인터의 각 선택된 부분이 서로 다르면 저장기 명령을 트랩한다. 저장기 명령을 참조하는 첫 번째 포인터는 두 번째 포인터는 저장의 기준 데이터 목표를 참조한다. 각각의 선택된 부분은 프로그램으로 결정된 가비지 수집 페이지 마스크의 컨텐트에 의해 결정된다. 다른 실시예에 있어서, 프로그램으로 결정된 가비지 수집 페이지 마스크는 가비지 수집 페이지 크기를 결정한다.
또 다른 실시예에 있어서, 라이트 배리어는 마스크와 가비지 수집 페이지 마스크를 인코딩하는 가비지 수집 페이지 레지스터 필드에 응답하는 비교 로직을 포함한다. 또 다른 실시예에 있어서, 장치는 프로그램으로 결정되는 가비지 수집 페이지 마스크의 출현을 포함하는 가상 머신 명령 프로세서를 포함한다. 라이트 배리어는 가상 머신 명령 프로세서에서 실행가능한 포인터-특정 저장기 명령 코드를 포함한다. 포인터-특정 저장기 명령 코드의 실행은 타겟 목표 기준의 각각의 마스크된 부분 및 목표 기준 데이터의 비트와이즈 비교에 기초하여, 포인터-특정 저장기 명령의 어느 하나의 특별한 실행이 가비지 수집 페이지 경계 크로싱 포이터를 저장할지를 결정하고 만약 그렇다면 가비지 수집 폴트 처리기에 트랩한다.
여러 다른 실시예에 있어서, 가상 머신 명령 프로세서는 하드웨어 프로세서 및 직접 실행가능한 가상 머신 지니의 적어도 부분, 또는 하드웨어 프로세서상에서 실행가능한 해석 실행, 또는 하드웨서 프로세서상에서 실행가능한 저스트-인-타임 컴파일러 실행을 포함한다. 해석 및 저스트-인-타임 컴파일러 실행에 있어서, 가지비 수집 페이지 마스크는 각각의 하드웨어 프로세서에 의해 접근가능한 저장내에 나타난다.
본 발명에 따른 다른 실시예에 있어서, 가비지 수집 페이지 경계 크로싱 포인터 저장기를 트랩하는 방법은 가비지 수집 페이지 마스크를 컴퓨터의 판독 가능 저장에 형성하고, 포인터-특정 저장기 명령의 특별한 실행에 관련된 첫 번째 및 두 번째 포인터를 마스킹하고, 첫 번째 및 두 번째 포인터의 각각의 마스크되지 않은 부분을 비교하여 첫 번째 및 두 번째 포인터가 동일 가비지 수집 페이지상의 각각의 저장을 참조하고 일치하지 않는 비교 결과에 기초하여 트랩 처리기를 트리거하는 것을 포함한다. 첫 번째 포인터는 포인터-특정 저장기 명령의 타겟 목표 기준이고 두 번째 포인터는 포인터-특정 저장기 명령의 목표 기준 데이터이다. 마스킹은 가비지 수집 페이지 마스크의 컨텐트에 기초한다.
다른 실시예에 있어서, 방법은 일치하는 비교결과에 근거한 트랩핑 없이 포인터-특정 저장기 명령의 특별한 실행을 완료시키는 것을 포함한다. 또 다른 실시예에 있어서, 상기 트랩 처리기의 동작은 포인터-특정 저장기 명령에 대응하는 재생된 세트 엔트리의 저장을 포함한다.

Claims (26)

  1. 내부에 목적이 형성되어 있고, 그에따른 각 각의 목적 기준을 통해 액세스 가능한 다이내믹하게 할당가능한 저장기;
    프로그램가능하게 정의된 가비지 수집 페이지 마스크;
    포인터 저장기와 교차하는 가비지 페이지 경계로의 기록 배리어를 구비하고, 상기 기록 배리어는 만일 서로 관련된 제1 및 제2 포인터의 선택된 각 부분이 다르다면 저장 명령을 트랩하고, 상기 제1 포인터는 상기 저장 명령의 타겟 목적을 언급하고, 상기 제2 포인터는 그 내부의 저장을 위한 목적 기준 데이터이고, 상기 각 각의 선택된 부분은 상기 프로그램가능하게 정의된 가비지 수집 페이지 마스크의 내용에 의해 정의되는 것을 특징으로 하는 장치.
  2. 제 1 항에 있어서,
    상기 프로그램가능하게 정의된 가비지 수집 페이지 마스크는 가비지 수집 페이지 크기를 정의하는 것을 특징으로 하는 장치.
  3. 제 1 항에 있어서,
    상기 프로그램가능하게 정의된 가비지 수집 페이지 마스크는 상기 타겟 목적 기준과 상기 목적 기준 데이터의 상기 선택된 각 부분의 비교를 위한 비트와이즈 비교 윈도우를 정의하는 것을 특징으로 하는 장치.
  4. 제 1 항에 있어서,
    상기 제1 및 제2 포인터 각 각에는 최상위 부분, 최하위 부분, 및 그 사이의 중간 부분이 포함되어 있고; 그리고
    상기 프로그램가능하게 정의된 가비지 수집 페이지 마스크는 상기 제1 및 제2 포인터의 상기 최상위 부분을 통과시키기 위해 정의된 최상위 부분이 있는 복합 마스크의 프로그램가능하게 정의가능한 중간 부분을 정의하여, 상기 상위 및 중간 부분의 마스크되지 않은 부분이 상기 저장 동작을 트랩을 위해 비교되는 것을 특징으로 하는 장치.
  5. 제 1 항에 있어서,
    상기 기록 배리어는 상기 가비지 수집 페이지 마스크를 인코딩하는 가비지 수집 페이지 레지스터 필드에 응답하는 비교 로직 및 마스크를 구비하는 것을 특징으로 하는 장치.
  6. 제 1 항에 있어서,
    상기 기록 배리어는 포인터 저장 특정 하드웨어 기록 배리어를 구비하고, 그의 포인터 저장 특이성은 포인터 비-특정 저장 명령의 저장 타겟 필드 타입의 실행--시간 분석에 따라 포인터 비-특정 저장 명령을 포인터-특정 저장 명령으로 대체함으로서 제공되는 것을 특징으로 하는 장치.
  7. 제 1 항에 있어서,
    상기 프로그램가능하게 정의된 가비지 수집 페이지 마스크의 표시를 포함하는 가상 머신 명령 프로세서를 더 구비하고,
    상기 기록 배리어는 상기 가상 머신 명령 프로세서상에서 실행가능한 포인터-특정 저장 명령 코드를 구비하고, 그리고
    상기 포인터-특정 저장 명령 코드에는, 상기 타겟 목적 기준 및 상기 목적 기준 데이터의 마스크되지 않은 각 부분의 비트와이즈 비교에 기초하여 상기 포인터-특정 저장 명령 중 하나의 특정 실행이 포인터에 교차하는 가비지 수집 페이지 경계를 저장하는지를 결정하고, 많일 그렇다면 가비지 수집 폴트 처리기로 트랩하는 단계가 포함되어 있는 것을 특징으로 하는 장치.
  8. 제 7 항에 있어서,
    상기 가상 머신 명령 프로세서에는 하드웨어 프로세서가 포함되어 있고 가상 머신 명령의 적어도 서브셋은 그것에 의해 직접 실행가능한 것을 특징으로 하는 장치.
  9. 제 7 항에 있어서,
    상기 가상 머신 명령 프로세서에는 하드웨어 프로세서상에서 그에따라 실행가능한 해석된 실행이 포함되어 있고; 그리고
    상기 가비지 수집 페이지 마스크는 상기 하드웨어 프로세서로 액세스 가능한 저장기 내에 표현되는 것을 특징으로 하는 장치.
  10. 제 7 항에 있어서,
    상기 가상 머신 명령 프로세서에는 하드웨어 프로세서상에서 그에따라 실행가능한 실시간 컴파일러 구현이 포함되어 있고; 그리고
    상기 가비지 수집 페이지 마스크는 상기 하드웨어 프로세서로 액세스 가능한 저장기 내에 표현되는 것을 특징으로 하는 장치.
  11. 제 7 항에 있어서,
    상기 가상 머신 명령 프로세서는 데이터 타입의 실행 시간 분석에 따라 포인터 비-특정 저장 명령 코드를 상기 포인터-특정 저장 명령 코드로 다이내믹하게 대체하여, 상기 기록 배리어를 포인터 저장으로 제한하고, 상기 프로그램가능하게 정의된 가비지 수집 마스크가 포인터 저장기에 교차하는 가비지 수집 페이지 경계로의 상기 기록 배리어에 의한 트랩을 더 제한하는 것을 특징으로 하는 장치.
  12. 제 1 항에 있어서,
    상기 기록 배리어의 구현 및 상기 프로그램가능하게 정의된 가비지 수집 페이지 마스크의 표현을 포함하는 가상 머신 명령 프로세서;
    상기 가상 머신 명령 프로세서에 의해 실행가능한 명령을 포함하는 폴트 처리기를 더 구비하고,
    상기 기록 배리어는 타겟 목적 및 저장 데이터가 있는 저장 명령의 실행에 일치하는 상기 처리기를 트리거시켜 상기 저장 명령의 실행이 포인터 저장기에 교차하는 가비지 수집 페이지 경계를 저장하게 하는 것을 특징으로 하는 장치.
  13. 제 12 항에 있어서,
    상기 폴트 처리기의 명령에는 기억된 세트로 저장을 하는 명령이 포함되어 있는 것을 특징으로 하는 장치.
  14. 제 12 항에 있어서,
    상기 가상 머신 명령 프로세서에 의해 실행가능한 세대 수집기 절차를 더 구비하고; 그리고
    상기 폴트 처리기에는 상기 세대 수집기 절차에 의해 사용을 위한 기억된 세트 표현으로 트랩된 저장 데이터를 식별하는 정보를 저장하기 위한 상기 가상 머신 명령 프로세서에 의해 실행가능한 명령이 포함되어 있는 것을 특징으로 하는 장치.
  15. 제 1 항에 있어서,
    상기 프로그램가능하게 정의된 가비지 수집 페이지 마스크 및 상기 타겟 목적 기준 및 상기 목적 기준 데이터의 선택된 각 부분을 마스킹하고 비교하는 로직 회로가 있는 실행 유닛이 포함되어 있는 하드웨어 프로세서를 더 구비하는 것을 특징으로 하는 장치.
  16. 제 1 항에 있어서,
    하드웨어 프로세서상에서 실행가능한 소프트웨어 가상 머신 명령 프로세서 프로그램을 더 구비하고, 상기 소프트웨어 가상 머신 명령 프로세서 프로그램은 상기 프로그램가능하게 정의된 가비지 수집 페이지 마스트를 표현하기 위한 컴퓨터 판독가능한 저장기를 정의하고 상기 타겟 목적 기준 및 상기 목적 기준 데이터의 선택된 각 부분을 마스킹하고 비교하는 프로그램 명령을 포함하는 것을 특징으로 하는 장치.
  17. 컴퓨터 판독가능한 저장기내에 가비지 수집 페이지 마스크를 형성하는 단계;
    포인터-특정 저장 명령의 특정 실행에 관련된 제1 및 제2 포인터를 마스킹하는 단계;
    상기 제1 및 제2 포인터의 마스크되지 않은 각 부분을 비교하여 상기 제1 및 제2 포인터 각 각이 동일한 가비지 수집 페이티상의 각 저장기를 언급하는지를 결정하는 단계; 및
    상기 비교 결과 매치되지 않은 것에 기초하어 트랩 처리기를 트리거하는 단계를 구비하고,
    상기 제1 포인터는 상기 포인터-특정 저장 명령의 타겟 목적 기준이고 상기 제2 포인터는 상기 포인터-특정 저장 명령의 목적 기준 데이터이며, 상기 마스킹은 상기 가비지 수집 페이지 마스크의 내용에 기초하는 것을 특징으로 하는 포인터 저장기에 교차하는 가비지 수집 페이지 경계를 트랩하는 방법.
  18. 제 17 항에 있어서,
    트래핑 없는 상기 포인터-특정 저장 명령의 상기 특정 실행은 상기 비교 결과 매칭되는 것에 기초하는 것을 특징으로 하는 방법.
  19. 제 17 항에 있어서,
    상기 트랩 처리기의 동작에는:
    상기 포인터-특정 저장 명령에 해당하는 기억된 세트 엔트리를 저장하는 단계가 포함되는 것을 특징으로 하는 방법.
  20. 제 17 항에 있어서,
    상기 트랩 처리기에는:
    상기 포인터-특정 저장 명령을 모방하는 단계가 포함되는 것을 특징으로 하는 방법.
  21. 제 17 항에 있어서,
    포인터 비-특정 명령에서 발생되는 프로그램을 저장 타겟 필드 타입의 실행-시간 결정에 기초하는 포인터-특정 명령으로 선택적으로 전송하는 단계; 및
    상기 포인터 특정 명령만을 충분히 마스킹하고 비교하는 단계를 수행하는 단계를 더 구비하는 것을 특징으로 하는 방법.
  22. 변형기 및 프로세서상에서 실행가능한 가비지 수집기 절차를 가지고 있는 가상 머신 명령 프로세서내의 포인터 저장기에 교차하는 가비지 수집 페이지 경계를 트랩하는 아키텍처 지원에 있어서,
    프로그램가능하게 정의된 가비지 수집 페이지 마스크; 및
    상기 프로그램가능하게 정의된 가비지 수집 페이지 마스크에 응답하는 기록 배리어 수단을 구비하고,
    만일 (1)상기 저장 명령이 상기 포인터 저장기로 분석되는 경우 및 (2) 상기 저장 명령의 타겟 메모리 목적 및 상기 저장기의 목적 기준 데이터에 의해 인식된 메모리 목적 모두가 동일한 가비지 수집 페이지에 있는 경우 가비지 수집 폴트 처리기를 트리거하는 상기 변형기 절차의 저장 명령을 평가하고, 가비지 수집 페이지 경계는 상기 프로그램가능하게 정의된 가비지 수집 페이지 마스크에 의해 정의되는 것을 특징으로 하는 지원.
  23. 제 22 항에 있어서,
    상기 기록 배리어 수단에는 가상 머신 명령 프로세서에 의해 실행가능한 포인터-특정 저장 명령이 포함되어 있고, 상기 포인터-특정 저장 명령은 상기 배리어를 포인터 저장으로 제한하는 것을 특징으로 하는 지원.
  24. 제 23 항에 있어서,
    상기 포인터-특정 저장 명령은 비-고속 바이트코드의 빠른 변형인 것을 특징으로 하는 지원.
  25. 제 22 항에 있어서,
    상기 기록 배리어 수단에는 로직 회로가 포함되어 있고, 상기 로직 회로는 상기 저장 명령 및 비트와이즈의 특정 실행에 관련된 제1 및 제2 포인터의 부분을 효과적으로 마스킹 및 상기 제1 및 제2 포인터의 마스크되지 않은 부분을 효과적으로 비교하고, 상기 제1 포인터는 상기 저장 명령의 상기 타겟 메모리 목적을 식별하고 상기 제2 포인터는 상기 저장 명령의 상기 데이터이며, 상기 로직 회로는 상기 비교의 결과 차이에 기초하여 트랩 처리기를 트리거링 하는 것을 특징으로 하는 지원.
  26. 제 22 항에 있어서,
    상기 기록 배리어 수단은 포인터 저장 특정 하드웨어 기록 배리어를 구비하고, 그것의 포인터 저장 특이성은 상기 포인터 비-특정 저장 명령의 저장 타겟 필드 타입의 실행-시간 분석에 따라 포인터 비-특정 저장 명령을 포인터-특정 저장 명령으로 대체함으로서 제공되는 것을 특징으로 하는 지원.
KR1019980710967A 1997-04-23 1998-04-21 가비지수집페이지경계횡단포인터스토어를트랩하기위한기록배리어시스템및방법 KR100576904B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1019980710967A KR100576904B1 (ko) 1997-04-23 1998-04-21 가비지수집페이지경계횡단포인터스토어를트랩하기위한기록배리어시스템및방법

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US8/841,544 1997-04-23
US08/841,544 1997-04-23
KR1019980710967A KR100576904B1 (ko) 1997-04-23 1998-04-21 가비지수집페이지경계횡단포인터스토어를트랩하기위한기록배리어시스템및방법

Publications (2)

Publication Number Publication Date
KR20000022522A true KR20000022522A (ko) 2000-04-25
KR100576904B1 KR100576904B1 (ko) 2006-08-18

Family

ID=41745950

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980710967A KR100576904B1 (ko) 1997-04-23 1998-04-21 가비지수집페이지경계횡단포인터스토어를트랩하기위한기록배리어시스템및방법

Country Status (1)

Country Link
KR (1) KR100576904B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112182580A (zh) * 2019-09-19 2021-01-05 中国科学院信息工程研究所 一种基于处理器芯片的内存漏洞检测方法及电子装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112182580A (zh) * 2019-09-19 2021-01-05 中国科学院信息工程研究所 一种基于处理器芯片的内存漏洞检测方法及电子装置
CN112182580B (zh) * 2019-09-19 2024-04-09 中国科学院信息工程研究所 一种基于处理器芯片的内存漏洞检测方法及电子装置

Also Published As

Publication number Publication date
KR100576904B1 (ko) 2006-08-18

Similar Documents

Publication Publication Date Title
EP0914634B1 (en) Write barrier system and method including pointer-specific instruction variant replacement mechanism
EP0914633B1 (en) Generation isolation system and method for garbage collection
JP4104668B2 (ja) ガーベッジコレクションページ境界横断ポインタストアをトラップするためのライトバリアシステム及び方法
US5930807A (en) Apparatus and method for fast filtering read and write barrier operations in garbage collection system
JP3881702B2 (ja) 部分的に再配置されたオブジェクトのソース及び目標インスタンスに関する書込みバリアを含む有界休止時間ガーベッジコレクションシステム及び方法
JP3957770B2 (ja) 部分的に再配置されたオブジェクトのソースインスタンスに関連する書き込みバリアを含む有界休止時間ガーベッジコレクションシステム及びその方法
JP4043528B2 (ja) 部分的に再配置されたオブジェクトのインスタンスに関連する読み込みバリア及び書き込みバリアを有する有界休止時間ガーベッジコレクションシステム及びそのガーベッジコレクション方法
US6185581B1 (en) Train-algorithm-based garbage collector employing fixed-size remembered sets
US6424977B1 (en) Train-algorithm-based garbage collector employing reduced oversized-object threshold
US6449626B1 (en) Reduced-cost remembered-set processing in a train-algorithm-based garbage collector
US20020161792A1 (en) Garbage collector employing multiple-car collection sets
US7412580B1 (en) Concurrent incremental garbage collector with a card table summarizing modified reference locations
US7676801B1 (en) Scanning of evacuated objects in a generation managed by the train algorithm
US7096329B2 (en) Better placement of objects promoted into a generation managed by the train algorithm
US20040186862A1 (en) Parallel caching of insertions into remembered-sets
US7653793B1 (en) Use of memory protection to implement replicating collection in an incremental, copying garbage collector
US7024437B2 (en) Better placement of objects reachable from special objects during collection based on the train algorithm
KR20000022522A (ko) 포인터 저장기에 교차하는 가비지 수집 페이지 경계를 트랩하는장치 및 방법
KR100502380B1 (ko) 포인터-고유명령변형교환메카니즘을포함하는쓰기배리어시스템및방법

Legal Events

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

Payment date: 20170330

Year of fee payment: 12

EXPY Expiration of term