KR20010040742A - 인터프리터 프로그램을 실행하는 방법 - Google Patents

인터프리터 프로그램을 실행하는 방법 Download PDF

Info

Publication number
KR20010040742A
KR20010040742A KR1020007008626A KR20007008626A KR20010040742A KR 20010040742 A KR20010040742 A KR 20010040742A KR 1020007008626 A KR1020007008626 A KR 1020007008626A KR 20007008626 A KR20007008626 A KR 20007008626A KR 20010040742 A KR20010040742 A KR 20010040742A
Authority
KR
South Korea
Prior art keywords
program
instruction
interpreter
instructions
program instructions
Prior art date
Application number
KR1020007008626A
Other languages
English (en)
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 KR20010040742A publication Critical patent/KR20010040742A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units

Abstract

쓰레디드 인터프리터(916)는 메모리(904)에 기억된 일련의 프로그램 명령을 포함하는 프로그램을 실행하는데 적합하다. 프로그램 명령을 실행하는 동안, 상기 쓰레디드 인터프리터는 상기 쓰레디드 인터프리터에서 이용가능한 프로그램 명령을 만드는 복수의 준비 단계를 실행하는 준비 장치(918) 및 상기 프로그램 명령을 에뮬레이팅하는 한 개 이상의 기계 명령을 갖는 실행 장치(920)를 포함한다. 본 발명에 따르면, 상기 쓰레디드 인터프리터는 상기 일련의 프로그램 명령의 명령 레벨 병렬 프로세서상에 실행하는 동안, 상기 준비 단계 중에서 제1 단계를 실행하는 기계 명령이 상기 일련의 프로그램 명령의 각 명령에 대한 준비 단계 중에서 제2 단계를 실행하는 기계 명령과 병렬로 실행된다.

Description

인터프리터 프로그램을 실행하는 방법{METHOD OF EXECUTING AN INTERPRETER PROGRAM}
인터프리터에 의해 프로그램을 실행하는 것은 공지되어 있다. 해석은 프로그램 실행 기술인데, 이 프로그램은 컴파일러를 이용하는 실행 기술과 반대로, 특정 프로세서에 의해 직접 실행하기에 적합한 형태로 변환되지 않는다. 그 실행될 프로그램은 특정 프로세서에 전용되지 않은 표준 형태로 기술된다. 상기 프로세서에 대한 특정 프로그램을 언제든지 쓸 수 있는 인터프리터는 실행될 프로그램의 프로그램 명령을 판독하여 이 프로그램 명령을 분석한다. 결과적으로, 상기 인터프리터는 무슨 활동이 취해지는지를 결정하여 상기 프로세서에 의해 실행된 그러한 활동을 한다. 프로그램 명령을 판독하여 그 해당하는 기계 명령을 실행하는 것은 중간 포맷으로 그 변환된 프로그램 명령을 기억하지 않고도 변환 방법으로 수행된다. 프로그램 명령은 수행될 동작의 종류, 예컨대, 가산 동작(add operation)을 지시하는 오퍼레이션 코드를 갖는다. 또한, 프로그램 명령은 그 동작에 따르는 1 또는 즉시 인자(immediate argument)를 가지는데, 그 인자는 그 동작용 오퍼랜드이다. 해석될 프로그램이 기술되는 표준 형태의 적합한 예는 파스칼 프로그램을 변환하는 자바 바이트 코드 및 P 코드이다.
실행될 상기 프로그램을 토대로 프로그램 실행은 컴파일 프로그램을 토대로 실행하는 것보다 늦다. 후자의 경우에, 상기 프로그램은 변환이 진행되어 상기 프로세서에 의해 직접 실행할 수 있는 기계 명령의 형태로 기억된다. 해석의 경우에, 그 변환의 적어도 마지막 단계는 상기 프로세서상에서 구동하고 상기 프로세서의 자원과 시간을 이용하는 인터프리터에 의한 구동 시간에 행한다. 이것은 인터프리터를 토대로 프로그램을 천천히 실행한다. 논문['Interpretation Techniques',Paul Klint, Software-Practice and Experience,Vol.11,pages 963-973,September 1981]은 소위 쓰레디드 인터프리터를 개시하고 있고, 이것은 메모리에 대하여 비싸지 않은 기술을 필요로 하는 고속 인터프리터이다. 쓰레디드 인터프리터는 해석되고 실행될 각 프로그램 명령에 대한 기계 명령의 블록을 포함한다. 상기 블록은 다음과 같은 블록을 포함한다.
- 상기 프로그램 명령, 즉, 상기 프로그램 명령의 목적을 실현하기 위하여 상기 프로세서에 의해 실행될 한 개 이상의 기계 명령에 대한 에뮬레이션 코드,
- 실행될 다음 프로그램 명령을 인출하는 인출 명령,
- 인출된 후에 상기 프로그램 명령을 디코딩하는 디코드 명령,
- 상기 프로그램 명령의 블록으로 점프.
상기 쓰레디드 인터프리터는 이러한 몇개의 블록을 병렬로 보여질 수 있다. 상기 쓰레디드 인터프리터는 해석될 각종의 프로그램 명령에 대한 블록을 갖는다. 예컨대, 256개의 다른 프로그램 명령이 제공될 때 256개의 블록을 갖는다. 임의 블록의 실행후에, 실행될 다음 프로그램 명령을 실행하는 블록으로 점프된다. 다음, 이러한 블록은 실행되고, 다시, 그 다음 프로그램 명령으로 점프된다.
본 발명의 목적은 공지된 방법보다 비교적 빠른 종류의 방법을 제공하는 것이다. 본 발명에 따르면, 이러한 목적은 명령 레벨 병렬 프로세서상에 인터프리터를 실행하는 동안 상기 준비 단계 중에서 첫번째 단계를 실행하는 기계 명령을 상기 일련의 프로그램 명령 중에서 각각의 명령에 대한 준비 단계 중 두번째 단계를 실행하는 기계 명령과 병렬로 실행하는 것을 특징으로 하는 방법에 의해 달성된다. 상기 2개의 준비 단계에 대하여 상기 기계 명령을 실행할 때, 각 단계는 자체의 프로그램 명령에 대하여 실행되고, 적어도 2개의 다른 프로그램 명령이 동시에 실행되게 만든다. 이것은 프로그램 실행속도를 상당히 개선할 수 있는데, 그 이유는 한 개의 모든 필요한 기계 명령 및 나아가서 더 이상 순서대로 모든 필요한 기계 명령을 실행할 필요가 없기 때문이다.
명령의 병렬 처리는 그 자체가 공지되어 있다. 예컨대, 논문[Instruction-Level Parallel Processing : History, Overview, and Perspective',B.Ramakrishna Rau and Joseph A. Fisher, The Journal of Supercomputing,7,pages 9-50,May 1993]에 개시되어 있다. 특히 상기 논문의 19 페이지에는 VLIW(very long instru ction word) 프로세서상에서 병렬 처리하는 명령 레벨을 개시하고 있다. 상기 프로세서는 복수의 슬롯을 갖고, 각 슬롯에 명령이 위치될 수 있다. 상기 명령은 소위 매우 긴 명령어를 함께 형성하여, 상기 프로세서에 의해 단일(매우 긴)명령과 같이 실행된다. 이것은 각 슬롯에 위치된 개별 명령을 병렬로 처리한 결과이다. 서로 독립적이고 병렬로 실행될 수 있는 명령을 식별하는 것이 컴파일러의 임무이다. 따라서, 이러한 명령들은 각 슬롯에 함께 위치될 후보자이다. 이러한 상기 컴파일러의 임무에 대한 중요한 특징은 상기 프로그램 명령을 실행하는 루프의 식별이고, 그 루프 안쪽에 프로그램 명령을 이동시키는 것이다. 이러한 목적은 상기 명령 중에서 어느 명령이 서로 독립적이고, 서로 병렬로 실행될 후보자인지를 식별하는 것이다.
교과서['Compiler:Principles,Techniques and Tools',Alfred V.Aho,Ravi Sethi,and Jeffrey D,Ullman,Addison-Wesley Series in Computer Science,Addison- Wesley Publishing Company,Reading,Massachusetts,1985]에는 프로그램 코드의 루프가 상기 컴파일러에 의해 프로그램 코드를 최적화하기 위하여 처리되는 방법을 페이지 602 내지 608에 기재하고 있다. 상기 컴파일러에 의해 최적화하기 위하여, 바깥쪽에서 루프의 중간으로 점프되지 않아야 한다. 한 개의 루프의 엔트리만이 헤더를 경유한다. 상기 교본에 따르면, 루프의 제어 흐름 에지는 백 에지 (back edges)와 포워드 에지(forward edge)로 분할 된다. 백 에지는 상기 루프의 엔트리 블록으로 지정되는 특성을 갖고, 상기 포워드 에지는 나머지 에지이다. 루프는 포워드 에지가 비순환 그래프, 즉, 더이상 루프가 없는 그래프를 형성하면 최적화 될 수 있다. 상기 쓰레디드 인터프리터의 구조는 루프의 배열이 복잡한 제어 흐름 그래프로써 보여질 수 있다. 각 블록을 통하여, 루프는 통과하고, 상기 블록뒤에, 상기 루프는 각각의 블록에서 다시 진행한 후에 그 각각의 블록에서 서로 진행할 수 있다. 모든 제어 흐름 에지는 포워드 에지이며 순환 그래프를 형성하지 않는다. 따라서, 상기 인터프리터의 제어 흐름 그래프는 상기 교본에 개시된 공지된 소프트웨어 파이프라인 알고리즘에 의해 최적화 될 수 없다. 이러한 교훈에도 불구하고, 그 발명가는 쓰레디드 인터프리터의 몇가지 준비 단계를 상기 기술된 바와 같이 병렬로 실행하는 것을 알았다.
본 발명은 일련의 프로그램 명령으로 이루어진 프로그램을 해석하는 쓰레디드 인터프리터(threaded interpreter)를 실행하는 방법에 관한 것인데, 이 방법은 각 프로그램 명령을 실행하는 단계, 즉, 상기 쓰레디드 인터프리터에서 이용가능한 프로그램 명령을 만드는 단계 및 상기 프로그램 명령을 에뮬레이팅하는 실행단계를 포함한다.
또한, 본 발명은 일련의 프로그램 명령으로 이루어지는 프로그램을 해석하는 쓰레디드 인터프리터를 실행하는 시스템에 관한 것인데, 이 시스템은 상기 일련의 프로그램 명령을 기억하는 메모리, 상기 쓰레디드 인터프리터에서 이용가능한 특정 프로그램 명령을 만드는 복수의 준비 단계를 실행하는 준비 장치로 이루어진 쓰레디드 인터프리터 및 상기 특정 프로그램 명령을 에뮬레이팅하는 실행 장치를 포함한다.
또한, 본 발명은 일련의 프로그램 명령으로 이루어지는 프로그램을 해석하는 쓰레디드 인터프리터를 포함하는 데이터 캐리어에 관한 것으로서, 상기 쓰레디드 인터프리터는 상기 쓰레디드 인터프리터에서 이용가능한 특정 프로그램 명령을 만드는 복수의 준비 단계를 실행하는 준비 장치 및 상기 특정 프로그램 명령을 에뮬레이팅하는 실행 장치로 구성된다.
또한, 본 발명은 일련의 프로그램 명령으로 이루어지는 프로그램 명령을 해석하는 실행가능한 인터프리터를 발생하는 시스템에 관한 것으로서, 이 시스템은 원시 코드에서 제공된 인터프리터를 기계 명령어로 변환하는 컴파일러를 포함하고, 상기 원시 코드의 인터프리터는 그 인터프리터에서 이용가능한 프로그램 명령 중 한 개를 만드는 적어도 한 개의 준비 단계를 실행하는 준비 장치 및 상기 프로그램 명령 중 한 개의 명령을 에뮬레이팅하는 에뮬레이션 코드를 가진 실행 장치로 구성된다.
또한, 본 발명은 일련의 프로그램 명령으로 이루어지는 프로그램을 해석하는 실행가능한 인터프리터를 발생하는 컴파일러를 포함하는 데이터 캐리어에 관한 것으로서, 상기 컴파일러는 원시 코드로부터 제공된 인터프리터를 실행가능한 기계 명령으로 변환하기 위하여 배치되고, 상기 원시 코드의 인터프리터는 그 인터프리터에서 이용가능한 프로그램 명령 중 한 개의 명령을 만드는 적어도 한 개의 준비단계를 실행하는 준비 장치를 포함한다.
본 발명 및 그 이점들은 예시적인 실시예 및 첨부 도면을 참조하여 보다 명확하게 기술될 것이다.
도 1은 쓰레드 인터프리터의 제어 흐름 그래프에 대한 도시도.
도 2는 매우 긴 명령어 프로세서의 일부를 도시하는 개략도.
도 3은 공지된 방법에 따라 VLIW 프로세서에 의해 실행될 프로그램의 일부에대한 레이아웃을 도시하는 개략도.
도 4는 본 발명에 따른 복수의 프로그램에 대한 인터프리터 단계의 실행을 도시하는 도시도.
도 5는 도 4에 도시된 단계를 실행하는 프로그램의 일부에 대한 레이아웃을 도시하는 개략도.
도 6은 C로 실행함으로써 변환된 인터프리터의 제어 흐름 그래프를 도시하는 도시도.
도 7은 처음의 최적화 후에 인터프리터의 제어 흐름 그래프를 도시하는 도시도.
도 8은 다른 최적화 후에 인터프리터의 제어 흐름 그래프를 도시하는 도시도.
도 9는 본 발명에 따른 인터프리터를 발생하는 시스템의 일 실시예도.
도 10은 본 발명에 따른 인터프리터를 발생하는 시스템의 일시예도.
여러 도면에 있어서의 대응하는 특징부는 동일 참조 번호로 기재된다.
본 발명에 따른 방법의 실시예는 청구항 제3항에 정의 되고, 이러한 실시예에서, 프로그램 명령을 해석하는 단계를 실행하는 기계 명령들은 3단 파이프라인으로 실행된다. 이것은 3개의 프로그램 명령이 병렬로 해석된다는 것을 의미하며, 이것은 상기 프로그램을 해석하고 실행하는데 필요한 시간을 상당히 줄인다.
본 발명에 따른 방법의 실시예는 청구항 제4항에 정의된다. 바이트 코드 포맷은 해석될 프로그램을 기술하고 기억하는데 매우 적합하다. 상기 바이트 코드 포맷은 상기 프로그램 명령의 검색 및 분석을 용이하게 함으로써 보다 간단한 인터프리터를 만들수 있다.
또한, 본 발명의 목적은 공지된 시스템보다 고속으로 실행할 수 있는 종류의 인터프리터를 실행하는 시스템을 제공하는 것이다. 이러한 목적은 본 발명에 따르면, 상기 일련의 프로그램 명령 중에서 각각의 명령에 대한 준비 단계 중 두 번째 명령을 실행하는 기계 명령과 병렬로 명령 레벨 병렬 프로세서상에서 실행된 준비 단계 중 첫 번째 단계를 실행하는 기계 명령을 갖게 쓰레디드 인터프리터를 배치하는 것을 특징으로 하는 프로그램을 실행하는 시스템에 의해 달성된다. 상기 일련의 프로그램 명령의 해석시 2개의 단계를 실행하는 기계 명령이 상기 명령 레벨 병렬 프로세서상에서 병렬로 수행되기 때문에, 상기 인터프리터의 실행은 고속으로 된다.
본 발명에 따른 쓰레디드 인터프리터를 포함하는 데이터 캐리어는 상기 일련의 프로그램 명령의 각 명령에 대한 준비 단계 중에서 두 번째 명령을 실행하는 기계 명령과 병렬로 명령 레벨 병렬 프로세서상에 실행된 준비 단계 중에서 첫 번째 단계를 실행하는 기계 명령을 갖게 쓰레디드 인터프리터를 배치하는 것을 특징으로 한다.
또한, 본 발명의 목적은 상기 공지된 프로그램보다 프로그램을 고속으로 실행하는데 적합한 종류의 인터프리터를 발생하는 시스템을 제공하는 것이다. 본 발명에 따르면, 이러한 목적은 상기 실행가능한 인터프리터에서 코드 복사에 의해 특정 프로그램 명령에 대하여, 이러한 특정 프로그램 명령에 대한 실행 장치의 기계 명령으로 변환한 다음, 쓰레디드 형태로 실행가능한 인터프리터를 얻기 위하여 상기 특정 프로그램 명령에 후임하는 후임자 프로그램 명령에 대하여 주변 장치의 기계 명령으로 변환을 포함하는 블록을 발생시키기 위하여 컴파일러가 배치되는 것을 특징으로 하는 인터프린터 발생 시스템에 의해 달성된다. 상기 시스템은 이러한 쓰레디드 구조를 포함하지 않는 소오스 코드로부터 실행가능한 쓰레디드 인터프리터를 발생한다. 이것은 상기 소오스 코드를 상기 표준 프로그래밍 언어 ANSI C로 쓸 수 있다.
본 발명에 따른 방법의 버전은 청구항 제9항에 정의된다. 상기 발생된 인터프리터가 명령 레벨 병렬 프로세서상에 병렬로 2개의 준비 단계를 실행하는 기계 명령을 수행하기 위하여 배치되기 때문에, 2개의 다른 프로그램 명령은 이러한 인터프리터에 의해 프로그램을 실행하는 동안 동시에 실행된다. 이것은 상기 프로그램을 해석하는 인터프리터를 실행하는 데 필요한 시간을 줄인다.
본 발명에 따른 컴파일러를 포함하는 데이터 캐리어는 상기 실행가능한 인터프리터에서 코드 복사에 의해 특정 프로그램 명령에 대하여, 이러한 특정 프로그램 명령에 대하여 실행 장치의 기계 명령으로 변환한 다음, 쓰레디드 형태로 실행가능한 인터프리터를 얻기 위하여 상기 특정 프로그램 명령에 즉시 후속하는 후임자 프로그램 명령에 대하여 준비 장치의 기계 명령으로 변환을 포함하는 블록을 발생하기 위하여 컴파일러를 배치하는 것을 특징으로 한다.
본 발명의 또다른 실시예들은 특허 청구 범위의 종속항에 기술된다.
도 1은 쓰레디드 인터프리터의 제어 흐름 그래프를 도시한다. 이 쓰레디드 인터프리터는 블록(102,104,106 및 108)을 그래프로 도시한 복수의 블록을 갖는다. 한 개의 블록은 인터프리터에 의해 해석될 수 있는 특정 타입의 프로그램 명령에 해당하고, 상기 프로세서에 의해 실행될 복수의 기계 명령을 포함한다. 상기 쓰레디드 인터프리터는 제공되는 모든 타입의 프로그램 명령에 대한 블록을 갖는다. 주어진 프로그램 명령이 해석될 때, 주어진 타입의 프로그램 명령에 해당하는 블록, 예컨대, 블록(106)을 통하여 제어하고, 그 블록은 실행된다. 상기 블록을 실행하는 끝에서, 어떤 프로그램 명령이 다음에 수행되고, 그 다음 프로그램 명령의 타입에 해당하는 블록, 예컨대, 블록(102)을 통하여 제어하는 것을 결정한다. 임의 블록 제어의 끝에서, 상기 쓰레디드 인터프리터의 특성은 임의의 다른 블록을 통과할 수 있다.
상기 인터프리터의 블록의 내용은 프로그램 명령을 기억하는 성질, 즉, 프로그램 명령을 기억하는 포맷에 따르고, 인터프리터를 구동하는 프로세서에 의존한다. 그러나, 상기 쓰레디드 인터프리터의 블록에서, 다음과 같이 구성 요소가 구별될 수 있다.
- 상기 프로그램 명령을 에뮬레이팅하는 한 개 이상의 기계 명령, 즉, 상기 프로그램 목적을 실현하는 기계 명령,
- 상기 메모리로부터 그 다음 프로그램 명령을 인출하는 인출 명령,
- 상기 인출 프로그램 명령을 디코딩하여 그러한 종류의 프로그램 명령을 결정하는 디코드 명령,
- 상기 타입의 프로그램 명령에 해당하는 블록에 점프 명령.
본 발명의 바람직한 실시예에 있어서, 상기 프로그램 명령은 소위 바이트 코드 포맷에 기억된다. 상기 포맷에 따르면, 프로그램 명령은 단일 바이트로 고정한 코드로 유일하게 부호화된다. 이러한 바이트 코드는 동작의 타입을 지시하고, 상기 명령의 오퍼랜드를 지시하는 한 개 이상의 즉시 인자 다음이 될 것이다. 상기 인출 및 디코드 명령은 바이트 코드 포맷으로 기억된 프로그램 명령을 취급하는 방법으로 실행된다. 그러나, 본 발명의 적용은 바이트 코드 포맷으로 기억된 프로그램에 제한되지 않는다. 다른 포맷의 경우에, 상기 인출 및 디코드 명령의 실행은 이러한 다른 포맷을 수용해야 한다. 아래의 상기 표는 곱셈용 프로그램 명령에 대한 블록의 일예를 도시한다. 이러한 예는 바이트 코드 포맷에 관한 것이고, 의사 어셈블리 언어로 제공된다.
상기 왼쪽 열은 의사 어셈블리 언어의 기계 명령을 포함하고, 오른쪽 열은 개별 명령의 코멘트를 포함한다. 상기 첫번째 행은 상기 프로그램 명령을 에뮬레이팅하는 기계 명령이다. 이것은 상기 스택상에 다음 소자에 의해 스택의 상부에 그 소자의 증식이고, 그 결과 상기 스택의 상부에 놓인다. 상기 두번째 행은 다음 프로그램 명령을 인출하는 인출 명령이다. 상기 프로그램 카운터 pc에 의해 지시되는 바이트는 상기 메모리로부터 로드되어 가변 bc에 놓이고, 상기 프로그램 카운터는 다음 프로그램 명령을 준비하기 위하여 증가된다. 상기 세번째 행은 상기 인출 명령을 디코딩하는 디코드 명령이다. 디코딩을 위하여, 우리는 상기 인터프리터의 가변 블록의 어드레스를 포함하는 어레이를 만든다. 0과 255사이의 값을 갖는 상기 인출 바이트는 상기 어레이에 대한 색인으로써 이용되고, 그 색인 워드는 상기 가변 블록으로 로드된다. 상기 인출 및 디코드 명령은 매우 간단한데, 그 이유는 상기 프로그램 명령이 바이트 코드로써 메모리에 기억되기 때문이다. 상기 네번째 행은 상기 다음 프로그램 명령에 해당하는 블록에 점프 명령이다.
도 2는 매우 긴 워드 프로세서의 일부를 개략적으로 도시한다. 이러한 예로서, 상기 프로세서는 서로에 관하여 병렬로 동작을 수행할 수 있는 5개의 기능 장치(202-210)을 갖는다. 또한, 상기 프로세서는 레지스터 파일(212)로 그룹되는 복수의 레지스터를 갖는다. 동작을 실행하기 위하여, 기능 장치는 입력으로 레지스터 파일의 2개의 레지스터의 내용을 이용하여 상기 레지스터 파일의 레지스터 중에서 한 개의 동작 결과를 기억할 수 있다. VLIW의 기능 장치는 각각의 기능 장치가 각각의 제공된 동작을 수행할 수 있게 일정하게 될 수 있다. 그러나, 그 기능 장치는 임의의 기능 장치가 이용가능한 동작의 그룹만을 수행하는 반면에, 다른 기능 장치는 다른 그룹만을 수행하는 점에서 일정하지 않다. 이것에 관한 예는 메모리 관련 동작에 한 개의 기능 장치를 배치하고, 다른 기능 장치를 산술 동작에 배치하는 상황이다.
블록(214)로 표시된 매우 긴 명령어(VLIW) 명령은 기능 장치에 의해 수행될 동작이 위치하는 5개의 슬롯을 갖는다. 상기 VLIW 명령에서 발행 슬롯의 위치는 상기 슬롯에 위치된 동작을 어느 기능 장치가 수행하는지를 결정한다. 도시한 예에 있어서, 상기 발행 슬롯(216)에 위치된 동작은 기능 장치(202), 기능 장치(204)에 의한 발행 슬롯(218)의 동작, 기능 장치(206)에 의한 발행 슬롯(220)의 동작, 기능 장치(208)에 의한 발행 슬롯(222)의 동작 및 기능 장치(210)에 의한 발행 슬롯 (224)의 동작에 의해 수행될 것이다. 동작(226)처럼 발행 슬롯에 위치된 동작은 그 동작 타입을 지시하는 동작 코드 필드(228)을 갖는다. 또한, 그 동작(226)은 2개의 입력 레지스터를 지시하는 레지스터 필드(230 및 232) 및 상기 출력 레지스터를 지시하는 레지스터 필드(234)를 갖는다. 상기 VLIW 프로세서는 주기적으로 동작하는데, 종료 VLIW 명령은 각 싸이클에서 처리된다. 이것은 상기 VLIW 명령의 발행 슬롯에 위치된 동작의 병렬 실행에 기인한다. 몇개의 동작에 대하여, 그 결과는 다음 싸이클의 개시에서 즉시 이용할 수 없다. 그 결과, 그 결과에 필요한 다음 동작은 그러한 동작후에 즉시 계획할 수 없다. 바람직한 실시예에 이용된 프로세서에 대한 그러한 동작의 예는 각각 3개의 싸이클을 갖는 로드 워드 명령 및 로드 바이트 명령, 및 4개의 싸이클을 갖는 점프 명령이다.
도 3은 공지된 방법에 따라 VLIW 프로세서에 의해 실행되는 프로그램의 일부에 대한 래이아웃을 개략적으로 도시한다. 상기 프로그램은 로우가 동시에 발생될 동작으로 이루어지는 VLIW 명령을 나타내는 매트릭스로 도시될 수 있다. 상기 매트릭스의 특정 열은 그 해당하는 기능 장치에 의해 수행되는 동작을 나타낸다. 그 실행 순서는 다른 명령이 실행되는 것을 점프 명령이 강요하지 않더라도 매트릭스에 주어진 순서로 상부 행(302)에서 아래로 실행한다. 점프 명령의 효과, 즉, 특정 어드레스로 점프는 점프 명령의 대기 시간이 지난 후에 발생한다. 아래에, VLIW 프로세서상에 쓰레디드 인터프리터의 블록의 실행은 표 1에 제공된 4개의 기계 명령을 이용하는 동안 예시될 것이다. 실제로, 상기 표에서 시작하는 동작 이외의 몇가지 동작은 자유로운 발행 슬롯에 스케쥴링될 수 있지만, 이것은 명백한 이유 때문에 볼 수 없지만 본 발명을 설명하는데 중요한 것은 아니다. 상기 MUL 동작 및 LDB 동작은 제1 VLIW 명령으로 스케쥴링될 수 있는데, 그 이유는 이러한 2개의 동작이 서로 의존하지 않기 때문이다. 상기 MUL 동작은 현재 프로그램 명령을 실현하는 반면, 상기 LDB 동작은 다음 프로그램 명령을 인출하는 것이다. 상기 LDW 동작은 스케쥴링할 수 없는데, 그 이유는 LDW 동작의 결과가 필요하기 때문이다. 상기 LDB 동작의 결과를 이용할 수 있게 되기 전에 3개의 싸이클을 가짐에 따라서, 상기 LDW 동작은 행(304)에 지시된 네번째 VLIW 명령으로 동작된다. 상기 LDW 동작의 결과를 이용할 수 있기 전에 3개의 싸이클을 갖는다. 따라서, 상기 JMP 동작은 행(306)으로 지시된 7번째 VLIW 명령에서 발생한다. 상기 JMP 동작의 결과가 영향을 미치기전에 4개의 싸이클을 갖기 때문에, 표 1에 의해 특정된 전체 블록의 실행은 VLIW 프로세서 의 최소한 10개 싸이클을 갖는다. 장점으로써, MUL 동작같은 상기 프로그램 명령을 에뮬레이팅하는 동작은 2개의 싸이클마다 필요하다. 거의 모든 프로그램 명령에 대하여, 상기 에뮬레이팅 동작은 10개 싸이클 이하가 필요하다. 따라서, 상기 쓰레디드 인터프리터의 한 개의 블록을 실행하는데 상기 VLIW 프로세서의 10개 싸이클이 필요하다는 것을 말할 수 있다. 상기 LDB 동작의 결과를 이용할 수 있게 됨에 따라 그 LDB 동작에 의존할 때에만 상기 LDW 동작을 실행할 수 있다는 사실은 상기 LDB 동작에서 LDW 동작까지 화살표(308)에 의해 지시된다. 동일한 방법으로, 화살표 (310)는 상기 JMP 동작이 LDW 동작에 의존한다는 것을 지시한다.
도 4는 본 발명에 따른 복수의 프로그램 명령에 대한 인터프리터의 실행을 도시한다. 상기 인터프리터에서 프로그램 명령을 해석하는 단계들의 실행은 행으로 나타낸다. 또한, 이러한 실행은 행의 각 필드에 도시된 복수의 단계로 분할된다. ith프로그램 명령에 대하여, 행(402)은 상기 인출 단계에 대한 스테이지(404), 상기 디코드 단계에 대한 스테이지(406) 및 상기 점프 단계와 실행 단계에 대한 스테이지(408)을 갖는다. 상기 실행 단계는 상기 프로그램 명령(i)을 에뮬레이팅하는 기계 명령을 실행하기 위한 것인 반면, 상기 인출 단계, 디코드 단계 및 점프 단계는 프로그램 명령(i+1)상에서 동작한다. 이것은 도 1 및 표 1에 관하여 설명된 바와같이 쓰레디드 인터프리터의 기본 기능과 일치한다. 표 1은 특정 프로그램 명령에 대한 블록을 도시하는데, 각 블록에서 특정 프로그램 명령은 실행되고, 다음 프로그램 명령으로 점프는 준비되고 만들어진다. 그래서, 단계(404)에서, 상기 프로그램 명령(i+1)은 메모리에서 인출되고, 단계(406)에서 상기 프로그램 명령은 디코딩된다. 단계(408)에서 상기 프로그램 명령(i+1)을 에뮬레이트하는 기계 명령의 장치로 점프는 이루어진다. 또한, 단계(408)에서 상기 프로그램 명령(i)의 기계 명령은 실행된다. 행(410)은 상기 (i+1)th프로그램 명령에 대한 단계, 즉, 스테이지 (412)에서 인출 단계, 스테이지(414)에서 디코드 단계, 스테이지(416)에서 점프 단계 및 상기 프로그램(i+1)을 에뮬레이팅하는 기계 명령의 실행 단계를 도시한다. 유사하게, 행(418)은 스테이지(420, 422 및 424)에서 프로그램에 대한 상기 단계들을 도시한다. 상기 도면에서, 왼쪽에서 오른쪽으로 시간을 나타내고, 프로그램 명령에 대한 스테이지들은 왼쪽에서 오른쪽으로 실행된다, 예컨대, 프로그램 명령의 인출 단계는 그 디코드 단계 이전에 실행되고, 프로그램 명령의 디코드 단계는 점프 단계 이전에 실행된다.
상기 다른 것에 도시되는 스테이지들은 VLIW 프로세서상에서 병렬로 수행된다. 그결과, 스테이지(408)의 프로그램 명령(i)과 관련된 점프 및 실행 단계는 스테이지(414)의 프로그램 명령(i+1)과 관련된 디크드 단계 및 스테이지(420)의 프로그램 명령(i+2)와 관련된 인출 단계와 동시에 수행된다. 이러한 단계의 컬럼이 수행될 때, 그 다음 주기는 일어나고, 그 스테이지(416,422,426)는 병렬로 실행된다. 이러한 스테이지에서, 이전의 반복 단계와 동일한 단계가 실행되지만, 그 후계자 명령에 대하여는 실행되지 않는다. 또한, 상기 행 및 도 3의 스테이지들은 상기 소프트웨어 파이프라인과 동일하게 상기 인터트리터의 파이프라인으로 언급된다. 바람직한 실시예에 있어서, 3개의 스테이지 파이프라인이 적용되고, 이것은 상기 프로그램 명령이 병렬로 실행되는 것을 의미한다. 상기 기술된 바와 같은 소프트웨어 파이프라인에서 프로그램 명령의 해석은 해석될 다음 프로그램 명령이 현재의 프로그램 명령을 즉시 진행시키는 프로그램 명령이라는 가정하에 동작한다. 점프 프로그램 명령의 경우에, 이러한 가정은 허용되지 않고, 그 해석된 프로그램 명령의 흐름은 순서가 다르게 될 것이다. 이러한 경우에, 상기 파이프라인은 초기화 되고, 상기 파이프라인 동작은 점프가 이루어지는 프로그램 명령으로 개시한다.
도 4의 스테이지들이 해석되는 프로그램의 일부분인 프로그램 명령의 일부분을 포함한다는 것을 주목해야 한다. 상기 스테이지들은 상기 프로세서가 실행되는 기계 명령의 일부분을 포함한다. 다르게 말해서, 도 4는 본 발명에 따른 인터프리터를 실행하는 동안 소프트웨어 파이프라인을 도시하고, 프로세서에 의해 기계 명령을 실행하는 하드웨어 파이프라인을 도시하지 않는다.
도 5는 도 4에 도시된 상기 스테이지를 실행하는 프로그램의 일부분에 대한 레이아웃을 도시한다. 이러한 부분은 스테이지(408), 스테이지(414) 및 스테이지 (420)가 되는 경우에 병렬로 실행되는 각 프로그램 명령의 3개 스테이지를 도시한다. 상기 JMP 동작(502) 및 MUL 동작(504)은 제1 VLIW 명령으로 스케쥴링된다. 이러한 동작은 서로에 대하여 의존하지 않기 때문에 병렬로 실행될 수 있다. 상기 MUL 동작은 프로그램 명령(i)의 실현이고, 상기 JMP 동작은 프로그램 명령(i+1)으로 점프이다. 상기 MUL 동작 및 JMP 동작은 상기 ith프로그램 명령의 스테이지(408)에 해당한다. 상기 JMP 동작(502)은 종료하기 위하여 2개의 싸이클을 갖음으로써, 상기 스테이지를 종료하기 위하여, 적어도 3개의 싸이클은 JMP 동작이 스케쥴링되는 싸이클을 따라야 한다. 상기 LDW 동작(506)은 제2 VLIW 명령에서 스케쥴링되어 스테이지(414)에 도시된 바와 같이 프로그램 명령(i+1)에 속하는 디코드를 실행한다. 상기 LDW 동작은 3개의 싸이클로 종료하고, 따라서, JMP 동작이 4개이 싸이클을 갖기 때문에 상기 프로그램 부분의 길이에 영향을 끼치지 않고 제1 또는 제2 VLIW 명령으로 스케쥴링될 수 있다. 상기 LDB 동작(508)은 제1 VLIW 명령으로 스케쥴링되어 스테이지(420)에 도시된 바와 같이 프로그램 명령(i+2)에 속하는 인출을 실행한다. 상기 LDB 동작은 종료하기 위하여 3개의 싸이클을 취하고, 따라서, 상기 프로그램 부분의 길이에 영향을 끼침이 없이 제1 또는 제2 VLIW 명령으로 스케쥴링될 수 있다. 그 이유는 상기 JMP 동작(502)이 4개의 싸이클을 갖기 때문이다.
도 5에 도시된 동작과 도 4에 도시된 인터프리터의 단계사이에 실현을 요약하기 위하여, 어떤 프로그램이 상기 동작을 하는지 명확하게 도시하기 위하여,
- 상기 MUL 동작은 프로그램 명령(i)의 실행에 속하고 프로그램 명령(i)을 에뮬레이트하고,
- 상기 JMP 동작은 프로그램 명령(i)의 실행에 속하고 프로그램 명령(i+1)의 블록으로 점프하고,
- 상기 LDW 동작은 프로그램 명령(i+1)의 실행에 속하고 프로그램 명령(i+2)을 디코드하며,
상기 LDB 동작은 프로그램 명령(i+2)의 실행에 속하고 프로그램 명령(i+3)을 인출한다.
다음 3개의 스테이지의 실행은 도 5에 도시된 명령과 비슷하고 각각의 다음 프로그램 명령상에서 동작하는 VLIW 명령의 다음 블록에서 수행된다. 상기 JMP 동작(502)은 VLIW 명령의 이전 블록의 LDW 동작에 의존하지만 현재의 블록 LDW 동작에는 의존하지 않는다. 이러한 의존성은 화살표로 도시되며, 이것은 이전의 반복, 즉, VLIW 명령의 이전의 블록에 따라 지시하기 위하여 매트릭스 바깥쪽에 루프로 도시된다. 이전의 블록이 현재의 블록을 개시하기 전에 완전히 종료하기 때문에, 상기 JMP 동작은 현재 블록의 개시에 즉시 스케쥴링될 수 있다. 동일한 방법으로, 상기 LDW 동작(506)은 이전 블록의 LDB 동작에 의존하고, 현재 블록의 LDB 동작(508)에 의존하지 않는다. 이러한 의존성은 화살표(512)로 지시된다.
한 개의 블록의 동작은 서로 의존하지 않고, 전체의 블록이 상기 VLIW 프로세서의 몇개의 싸이클이 전체의 블록에 가능한 필요시 되는 그러한 방법으로 스케쥴링된다. 이러한 예에서, 상기 JMP 동작은 종료하기 위하여 4개의 싸이클이 필요하다. 다른 동작, 특히, 상기 MUL 동작은 조기에 종료되거나, 동일한 순간에 나중에 종료함에 따라, 그 전체의 블록은 4개의 싸이클을 갖는다. 이것은 상기 예의 MUL 동작과 같이 상기 프로그램 명령을 에뮬레이팅 동작 또는 상기 동작이 거의 4개의 싸이클을 필요로 하는 한, 마찬가지로 다른 타입의 프로그램 명령에 대하여도 동일하게 될 것이다. 실제로, 이것은 대부분의 타입의 프로그램 명령에 대하여 진실이다. 이것은 도 4 및 도 5에 도시된 단계 및 동작의 스케쥴링이 도 3에 도시된 바와 같이 10개의 싸이클에서 4개의 싸이클까지 VLIW 프로세서상에 프로그램 명령의 해석을 줄인다는 것을 의미한다.
본 발명의 바람직한 실시예는 필립스 VLIW 프로세서(TM 1000)상에서 쓰레디드 인터프리터의 실행에 관한 것이다. 그러나, 본 발명은 기계 명령들이 병렬로 실행될 수 있는 다른 타입의 프로세서를 실행할 수 있다. 이러한 기술은 일반적으로 명령 레벨 병렬 처리라고 불려지며, 그러한 프로세서는 명령 레벨 병렬 프로세서로 불려진다. VLIW 프로세서는 명령 레벨 병렬 프로세서의 그룹 중에서 특정 서브 그룹에 속한다.
바람직한 실시예의 인터프리터는 프로그래밍 언어(C)로 써서 다른 프로세서상에 이용할 수 있는 휴대용 프로그램을 만든다. ANSIC에서 쓰레디드 인터프리터를 직접 실행하는 것이 불가능 한데, 그 이유는 이러한 언어가 레벨을 변하게 하는 것이 부족하기 때문이다. 따라서, 상기 쓰레디드 인터프리터의 블록의 끝에서, 구동 시간에 결정되는 블록으로 점프 명령을 실행하는 것이 불가능하기 때문이다.
따라서, 상기 인터프리터는 루프동안 끝없이 포함되는 스위치 상태에 의해 ANSI에서 실행되고, 최적화한 컴파일러에 의해 컴파일되어 쓰레디드 인터프리터를 얻기 위하여 그 컴파일된 명령을 재배열한다. 아래의 표는 ANSI C에서 인터프리터의 한 개 블록을 도시한다.
파이프라인된 인터프리터와 동일한 실행은 상기 인터프리터에서 사전 인출된 바이트(b0,.......bn)의 세트를 정확하게 유지하는 것에 의해 실현된다. 상기 인터프리터 스위치의 인자는 해석될 프로그램 명령의 바이트 코드인 b0 이다. 상기 프로그램 명령의 중간 인자는 b1,...bm 이고, m은 상기 프로그램 명령이 필요한 중간 인자의 갯수이다. 프로그램 명령이 n 바이트 중간 인자 이상이 필요한 경우에, 상기 미싱 m-n 바이트는 메모리로부터 인출된다. n에 대한 값을 결정하는 것은 상기 사전 인출된 바이트를 쉬프트하는데 필요한 명령의 양과 불충분한 사전 인출이 상기 파이프라인 아래로 천천히 내려가는 기회사이의 트레이드 오프(trade off)를 포함한다. n 에 대하여 적합한 값이 6이라는 것을 경험적인 측면에서 알았다. b0,. ..bm을 이용한 후에, 상기 인출 파이프라인은 m+1에 의해 쉬프트되고, m+1 신규 바이트는 메모리로부터 인출된다. 충분히 바이트가 사전 인출되었을 때, 상기 컴파일러는 아래에 기술된 바와 같이 반복하기 위하여 로드 동작을 디코드 할 수 있다. 여기서, 상기 프로그램 "TCS-graft"는 최적화하기 위하여 수행될 컴파일러 명령이다.
도 6은 C로 실행하여 변환된 인터프리터의 제어 흐름 그래프를 도시한다. 제어 흐름 그래프는 상기 컴파일러에 의해 변환된 프로그램의 가능한 흐름 및 구조를 도시한다. 상기 제어 흐름 그래프는 기본 블록 및 제어 흐름 에지를 포함한다. 기본 블록은 주어진 순서로 상기 기본 블록을 제어할 때 각각 실행되는 복수의 명령을 포함한다. 제어 흐름 에지는 한 개의 기본 블록에서 다른 블록으로 제어하는 방법을 도시한다. 기본 블록(602)은 범위를 점검하여 상기 스위치 인자(b0)가 상기 스위치 상태의 경우 중 한 개에 해당하는지 여부를 입증한다. 그렇지 않은 경우, 이러한 예외적인 조치를 하기 위하여 기본 블록(604)으로 제어를 한다. bo가 해당하는 경우이면, 상기 스위치를 포함하는 기본 블록(605) 및 그 후에, 관련된 경우의 기본 블록, 예컨대, 기본 블록(608)로 제어를 한다. 각각의 기본 블록(604 내지 610) 후에, 기본 블록(602)에 뒤로 점프하는 기본 블록(612)으로 제어를 한다. 이러한 점프는 상기 C 프로그램에서 주어지는 루프인 동안 끝없이 반영한다.
도 7은 처음의 최적화 후에 인터프리터의 제어 흐름 그래프를 도시한다. 상기 컴파일러에 의한 처음의 최적화는 스위치가 256 케이스를 포함하는 경우에 적용될 수 있고, 그 결과, 상기 인터프리터에 의해 제공된 프로그램 명령의 갯수는 거의 256개가 될 수 있다. 상기 케이스의 갯수는 복수의 더미 케이스에 의해 256으로 증가된다. 이것이 의미하는 것은 상기 프로그램 명령에 해당하는 한 개의 바이트 코드의 값에 대하여, 허용한 기본 블록을 상기 스위치에서 이용할 수 있고, 그 범위 점검이 낭비될 수 있다는 것을 의미한다. 상기 제어 흐름 그래프는 기본 블록(702)의 스위치로써 직접 개시한다. 그 후에, 상기 바이트 코드의 값에 의존하는 기본 블록(704 내지 710)중 한 개의 블록으로 제어를 한다. 이전과 같이, 기본 블록(712)에서 점프로 반드시 제어한다.
도 8은 다른 최적화 후에 상기 인터프리터의 제어 흐름 그래프를 도시한다. 기본 블록(702)의 스위치는 상기 루프에서 뒤쪽으로 이동되고, 기본 블록(712)의 점프와 함께 각 기본 블록(704 내지 710)에 부가된다. 상기 스위치 + 점프는 프로그램 명령의 디코드 및 상기 프로그램 명령의 블록으로 점프를 나타낸다. 이러한 최적화는 기본 블록(802 내지 808)으로 도시되는 256 기본 블록을 갖는 제어 흐름 그래프 및 각 블록에서 각각의 상기 블록까지의 제어 흐름 에지의 결과로 발생한다. 기본 블록은 다음과 같은 구성을 포함한다.
- 상기 프로그램 명령을 에뮬레이팅하는 기계 명령의 실행
- 다음 프로그램 명령의 바이트 코드의 인출
- 상기 바이트 코드의 디코드,
- 상기 디코딩 프로그램 명령에 해당하는 블록으로 점프.
앞서 언급한 것은 도 1에 관하여 기술된 바와 같이 쓰레디드 인터프리터의 실행에 해당한다. 본 발명에 따른 컴파일러는 상기 쓰레디드 구조를 포함하지 않는 ANSI C에서 프로그램 원시 코드로부터 쓰레디드 인터프리터를 형성했다.
일련의 프로그램 명령을 포함하는 프로그램을 해석하는 동안, 상기 기본 블록은 상기 프로그램이 종료할 때 까지 반복하여 실행된다. 도 4를 참조로 기술된 바와 같이 상기 파이프라인을 실현하기 위해서, 상기 컴파일러는 아래에 기술한 방법으로 한 개의 반복에서 다른 반복으로 명령을 이동한다. 상기 디코드 명령은 이전의 반복으로 컴파일러에 의해 이동된다. 이것이 의미하는 것은 소정의 프로그램 명령의 블록에 대한 디코드 명령이 상기 일련의 프로그램 명령으로 나중에 한 개의 위치에 위치되는 프로그램 명령에 관한것인데, 그 이유는 상기 디코드 명령이 다음 블록으로부터 이동되기 때문이다. 상기 인출 명령은 상기 C 프로그램으로 특정된 사전 인출 파이프라인 때문에 뒤로 2번 반복하여 이동된다. 이것이 의미하는 것은 소정의 프로그램 명령의 블록에 대한 인출 명령이 상기 일련의 프로그램 명령에서 나중에 2개의 위치에 위치되는 프로그램에 관한 것인데, 그 이유는 상기 인출 명령이 나중에 2개의 블록으로부터 이러한 블록으로 이동되기 때문이다. 이러한 반복을 다른 반복으로 이동하는 것은 소정의 블록 내부에 상기 명령들을 종속시킨다. 이것은 도 5에 관하여 기술된 바와 같이 상기 명령의 병렬 처리를 허용한다.
상기 컴파일러는 상기 명령을 복사함으로써 이전의 반복으로 돌아가는 블록의 명령을 상기 기본 블록의 모든 가능한 전임자로 이동한다. 상기 쓰레디드 인터프리터의 경우에, 이것은 소정의 블록이 각각 다른 블록에 도달될 수 있기 때문에 특정 블록에서 모든 다른 블록으로 상기 명령을 복사하는 것을 의미한다. 모든 블록이 이러한 방법으로 수정되기 때문에, 즉, 모든 블록이 특정 블록의 역할을 한번하기 때문에, 각 블록은 이동될 명령의 많은 사본을 수신한다. 상기 이동될 명령은 다음에 점프될 블록의 주소를 발생하는 디코드 명령이다. 상기 디코딩 명령은 다음 프로그램 명령의 바이트 디코드인 바이트를 입력함으로써 수신한다. 이것은 상기 사전 인출 파이프 라인에서 한 개 이상의 바이트가 즉시 인자인 경우에 상기 사전 인출 파이프라인의 다음 바이트 또는 나중의 바이트가 될 수 있다. 그 결과, 블록의 디코드 명령의 정확한 실행은 상기 블록의 프로그램 블록의 프로그램 명령의 종류에 의존하고, 그 이유는 다른 종류는 즉시 인자의 다른 갯수가 될 수 있고, 따라서, 상기 디코드 명령의 복수의 다른 버젼은 여러개의 사본중에서 정확하다. 상기 컴파일러는 블록으로 이동되는 디코드 명령에서 그 사본을 제거하고, 다른 버전은 그 블록에서 실행되도록 남겨준다.
상기 쓰레디드 인터프리터를 실행하는 소정의 파이프라인을 실행하는 것은 2개의 특징을 토대로 한다. 그 첫번째 특징은 C 프로그램에서 부호화되는 것과 같이 6 바이트의 사전 인출 파이프라인이고, 이것은 프로그램 명령의 인출 단계를 2번 반복하여 뒤쪽으로 이동할 수 있게 허용한다. 상기 인출 단계의 실제적인 이동은 컴파일러에 의해 수행되고, 이것은 직선방향으로 주어진 사전 인출 파이프라인이다. 그 두번째 특징은 한 번 반복한 프로그램 명령의 디코드 명령을 뒤쪽으로 이동하는 것이다. 그 컴파일러는 모든 블록으로부터 모든 다른 블록으로 관련 기계 명령을 복사하고, 한 블록에서 그 복사 명령을 제거함으로써 이러한 이동을 수행한다.
도 9는 본 발명에 따라 프로그램 명령을 실행하는 시스템의 구현을 도시한다. 상기 시스템(900)은 공지된 아키텍쳐에 따라 실행된다. 그 시스템은 워크스테이션, 텔레비젼 세트와 같은 소비 장치, 또는 필요한 자원을 갖는 다른 종류의 장치가 될 수 있다. 상기 시스템은 메모리(904)에 로드된 프로그램 모듈의 기계 명령을 수행하는 VLIW 프로세서(902)를 갖는다. 이러한 메모리는 랜덤 액세스 메모리 또는 랜덤 액세스 메모리와 판독 전용 메모리의 조합이 될 수 있다. 또한, 상기 시스템은 주변 장치로 통신하기 위한 인터페이스(906)를 갖는다. 상기 시스템의 다양한 소자사이에 명령과 데이터를 교환하는 버스(908)이다. 상기 시스템의 주변 장치는 해석될 프로그램을 포함하는 기억 매체(910)를 포함한다. 택일적으로, 이러한 프로그램은 상기 시스템의 판독 전용 메모리에 기억될 수 있다. 상기 기억 매체(910)는 광디스크, 칩 카드 또는 테이프와 같은 다른 매체 또는 하드 디스크가 될 수 있다. 상기 시스템의 주변 장치는 상기 시스템의 사용자와 통신하는 디스플레이(912) 및 입력장치(914)를 포함한다. 상기 시스템은 상술한 쓰레디드 인터프리터(916)를 갖는다. 상기 인터프리터는 상기 메모리(904)로부터 프로그램 명령을 검색하고, 인터프리터에 의해 처리할 수 있는 주변 장치(918)를 갖는다. 또한, 상기 인터프리터는 상기 검색 프로그램 명령을 에뮬레이트하는 명령 또는 기계 명령으로 이루어진 장치(920)를 갖는다. 실행될 프로그램은 일련의 프로그램 명령을 포함하고, 해석하기 위하여 메모리(904)에 로드되어 인터프리터(916)에 의해 실행된다.
도 10은 본 발명에 따라 인터프리터를 발생하는 시스템의 실체를 도시한다. 그 시스템(1000)은 공지된 아키텍쳐에 따라 실행된다. 그 시스템은 일반용 컴퓨터에 기초한 워크스테이션인 반면, 다른 타입의 컴퓨터도 이용될 수 있다. 그 시스템은 메모리(1004)에서 로드되는 프로그램 모듈의 기계 명령을 수행하는 프로세서 (1002)를 갖는다. 또한, 상기 시스템은 주변 장치와 통신하는 인터페이스(1006)를 포함한다. 상기 시스템의 다양한 소자사이에 명령 및 데이터의 변경을 위한 버스 (1008)가 있다. 상기 시스템의 주변 장치는 컴파일되는 인터프리터의 소오스를 포함하는 기억 매체(1010)를 포함한다. 또한, 그 결과적으로 실행가능한 컴파일러는 기억 매체(1010)상에 기억된다. 그 기억 매체(1010)는 하드 디스크 또는 광디스크, 칩 카드 또는 테이프와 같은 다른 적합한 매체가 될 수 있다. 또한, 상기 시스템의 주변 장치는 상기 시스템의 사용자와 통신하는 디스플레이(1012) 및 입력 장치 (1014)를 포함한다. 상기 시스템은 상기 기술한 바와 같이 컴파일러(1016)를 포함한다.

Claims (11)

  1. 일련의 프로그램 명령으로 이루어진 프로그램을 해석하는 쓰레디드 인터프리터 (threaded interpreter)를 실행하는 방법에 있어서,
    상기 쓰레디드 인터프리터에서 이용가능한 프로그램 명령을 만드는 복수의 준비 단계와,
    상기 프로그램 명령을 에뮬레이팅하는 실행 단계와 같이 각 프로그램 명령을 실행하는 단계를 포함하고,
    상기 준비 단계 중에서 제1 단계를 실행하는 명령 레벨 병렬 프로세서 기계 명령상에서 인터프리터를 실행하는 동안에 상기 일련의 프로그램 명령의 각 명령에 대한 준비 단계 중에서 제2 단계를 실행하는 기계 명령과 병렬로 실행되는 것을 특징으로 하는 일련의 프로그램 명령을 포함하는 프로그램을 해석하는 쓰레디드 인터프리터를 실행하는 방법.
  2. 제 1 항에 있어서,
    상기 프로그램 명령은 메모리에 기억되고, 상기 준비 단계 중에서 제1 단계를 실행하는 기계 명령은 특정 프로그램 명령에 대하여 실행되는 반면, 상기 준비 단계 중에서 제2 단계를 실행하는 기계 명령은 상기 특정 프로그램 명령을 즉시 진행하는 후임자 프로그램 명령에 대하여 실행되는 것을 특징으로 하는 일련의 프로그램 명령을 포함하는 프로그램을 해석하는 쓰레디드 인터프리터를 실행하는 방법.
  3. 제 2 항에 있어서,
    상기 준비 단계는,
    상기 메모리에서 프로그램 명령을 인출하는 인출 단계와,
    상기 프로그램 명령을 디코딩하는 디코딩 단계와,
    상기 프로그램 명령을 에뮬레이팅하는 한 개 이상의 기계 명령의 단위로 점핑하는 점프 단계를 포함하고,
    1) 특정 프로그램 명령에 대한 점프 단계를 실행하는 기계 명령 및 상기 특정 프로그램 명령에 대한 실행 단계를 실행하는 기계 명령은 2) 상기 특정 프로그램 명령을 즉시 진행하는 후임자 프로그램 명령에 대한 디코드 단계를 실행하는 기계 명령과 병렬로 실행되고, 3) 상기 후임자 프로그램 명령을 즉시 진행하는 프로그램 명령에 대한 인출 단계를 실행하는 기계 명령과 병렬로 실행되는 것을 특징으로 하는 일련의 프로그램 명령을 포함하는 프로그램을 해석하는 쓰레디드 인터프리터를 실행하는 방법.
  4. 제 1 항에 있어서,
    상기 일련의 프로그램 명령을 포함하는 프로그램은 바이트 코드로 기술되는 것을 특징으로 하는 일련의 프로그램 명령을 포함하는 프로그램을 해석하는 쓰레디드 인터프리터를 실행하는 방법.
  5. 일련의 프로그램 명령을 기억하는 메모리를 포함하고 상기 일련의 프로그램 명령을 포함하는 프로그램을 해석하는 쓰레디드 인터프리터(threaded interpreter)를 실행하는 시스템에 있어서,
    상기 쓰레디드 인터프리터는,
    상기 쓰레디드 인터프리터에서 이용가능한 특정 프로그램 명령을 만드는 복수의 준비 단계를 실행하는 준비 장치와,
    상기 특정 프로그램 명령을 에뮬레이팅하는 실행 장치를 포함하고,
    상기 쓰레디드 인터프리터는 상기 일련의 프로그램 명령의 각각의 명령에 대한 준비 단계 중에서 제2 단계를 실행하는 기계 명령과 병렬로 명령 레벨 병렬 프로세서상에 실행된 준비 단계 중에서 제1 단계를 실행하는 기계 명령를 갖게 배열되는 것을 특징으로 하는 일련의 프로그램 명령을 포함하는 프로그램을 해석하는 쓰레디드 인터프리터를 실행하는 시스템.
  6. 제 5 항에 있어서,
    상기 명령 레벨 병렬 프로세서는 VLIW 프로세서인 것을 특징으로 하는 일련의 프로그램 명령을 포함하는 프로그램을 해석하는 쓰레디드 인터프리터를 실행하는 시스템.
  7. 일련의 프로그램 명령을 포함하는 프로그램을 해석하는 쓰레디드 인터프리터(threaded interpreter)를 포함하는 데이터 캐리어에 있어서,
    상기 쓰레디드 인터프리터는,
    상기 쓰레디드 인터프리터에서 이용가능한 특정 프로그램 명령을 만드는 복수의 준비 단계를 실행하는 준비 장치와,
    상기 특정 프로그램 명령을 에뮬레이팅하는 실행 장치를 포함하고,
    상기 쓰레디드 인터프리터는 상기 일련의 프로그램 명령의 각각의 명령에 대한 준비 단계 중에서 제2 단계를 실행하는 기계 명령과 병렬로 명령 레벨 병렬 프로세서상에 실행된 준비 단계 중에서 제1 단계를 실행하는 기계 명령을 갖게 배열되는 것을 특징으로 하는 일련의 프로그램 명령을 포함하는 프로그램을 해석하는 쓰레디드 인터프리터를 포함하는 데이터 캐리어.
  8. 인터프리터를 원시 코드에서 기계 명령으로 변환하는 컴파일러를 포함하고 일련의 프로그램 명령을 포함하는 프로그램을 해석하는 실행가능한 인터프리터를 발생하는 시스템에 있어서,
    상기 원시 코드에서 인터프리터는,
    상기 쓰레디드 인터프리터에서 이용가능한 프로그램 명령 중에서 한 개의 명령을 만드는 적어도 한 개의 준비 단계를 실행하는 준비 장치와,
    상기 프로그램 명령 중에서 한 개를 에뮬레이팅하기 위하여 에뮬레이션 코드를 갖는 실행 장치를 포함하고,
    상기 컴파일러는 상기 실행가능한 인터프리터에서 코드 복사에 의해 특정 프로그램 명령에 대하여,
    - 이러한 특정 프로그램 명령에 대하여 실행 장치의 기계 명령으로 변환한 다음,
    - 상기 특정 프로그램 명령을 즉시 진행하는 후임자 프로그램 명령에 대하여 준비 장치의 기계 명령을 변환하여 쓰레디드 형태로 실행가능한 인터프리터를 얻는 것을 특징으로 하는 일련의 프로그램 명령을 포함하는 프로그램을 해석하는 실행가능한 인터프리터를 발생하는 시스템.
  9. 제 8 항에 있어서,
    상기 컴파일러는 반복 주기로 명령 레벨 병렬 프로세서상에 실행되도록 배열되는 쓰레디드 인터프리터를 발생하고,
    즉시 진행하는 반복 주기로 상기 준비 단계 중에서 제1 단계를 실행하는 기계 명령을 이동시킴으로써 상기 일련의 프로그램 명령 중에서 각 명령에 대하여 상기 준비 단계 중에서 제2 단계를 실행하는 기계 명령과 병렬로 실행된 준비 단계 중에서 제1 단계를 실행하는 기계 명령을 갖게 배열된 쓰레디드 인터프리터를 발생하는 것을 특징으로 하는 일련의 프로그램 명령을 포함하는 프로그램을 해석하는 실행가능한 인터프리터를 발생하는 시스템.
  10. 제 9 항에 있어서,
    상기 컴파일러는 각 블록에 대하여 즉시 진행하는 주기의 준비 단계 중에서 제1 단계를 실행하는 기계 명령을 이동시키기 위하여 배치되고, 상기 이동의 결과로 특정 블록에 기계 명령의 사본을 제거하기 위하여 배치되는 것을 특징으로 하는 일련의 프로그램 명령을 포함하는 프로그램을 해석하는 실행가능한 인터프리터를 발생하는 시스템.
  11. 인터프리터를 원시 코드에서 기계 명령으로 변환하고 일련의 프로그램 명령을 포함하는 프로그램을 해석하는 실행가능한 인터프리터를 발생하는 컴파일러를 포함하는 데이터 캐리어에 있어서,
    상기 원시 코드에서 인터프리터는,
    상기 쓰레디드 인터프리터에서 이용가능한 프로그램 명령 중에서 한 개의 명령을 만드는 적어도 한 개의 준비 단계를 실행하는 준비 장치와,
    상기 프로그램 명령 중에서 한 개를 에뮬레이팅하기 위하여 에뮬레이션 코드를 갖는 실행 장치를 포함하고,
    상기 컴파일러는 상기 실행가능한 인터프리터에서 코드 복사에 의해 특정 프로그램 명령에 대하여,
    - 이러한 특정 프로그램 명령에 대하여 실행 장치의 기계 명령으로 변환한 다음,
    - 상기 특정 프로그램 명령을 즉시 진행하는 후임자 프로그램 명령에 대하여 준비 장치의 기계 명령을 변환하여 쓰레디드 형태로 실행가능한 인터프리터를 얻는 것을 특징으로 하는 인터프리터를 원시 코드에서 기계 명령으로 변환하고 일련의 프로그램 명령을 포함하는 프로그램을 해석하는 실행가능한 인터프리터를 발생하는 컴파일러를 포함하는 데이터 캐리어.
KR1020007008626A 1998-12-08 1999-11-24 인터프리터 프로그램을 실행하는 방법 KR20010040742A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP98204163 1998-12-08
EP98204163.4 1998-12-08
PCT/EP1999/009184 WO2000034854A2 (en) 1998-12-08 1999-11-24 Method of executing an interpreter program

Publications (1)

Publication Number Publication Date
KR20010040742A true KR20010040742A (ko) 2001-05-15

Family

ID=8234445

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020007008626A KR20010040742A (ko) 1998-12-08 1999-11-24 인터프리터 프로그램을 실행하는 방법

Country Status (6)

Country Link
US (2) US6658655B1 (ko)
EP (1) EP1062577A2 (ko)
JP (1) JP2002532775A (ko)
KR (1) KR20010040742A (ko)
TW (1) TW518511B (ko)
WO (1) WO2000034854A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100678912B1 (ko) * 2005-10-18 2007-02-05 삼성전자주식회사 메소드 바이트코드 해석 방법 및 상기 방법에 의해동작하는 시스템

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6986128B2 (en) * 2000-01-07 2006-01-10 Sony Computer Entertainment Inc. Multiple stage program recompiler and method
US20030009750A1 (en) * 2001-07-09 2003-01-09 Robert Hundt Optimizing an executable computer program having linkage functions
US7506322B2 (en) * 2001-12-13 2009-03-17 Synopsys, Inc. System and method of utilizing a hardware component to execute an interpretive language
US20040088703A1 (en) * 2002-11-05 2004-05-06 Nedim Fresko Mechanism for implementing an interpreter with hierarchical execution loops
US7103881B2 (en) * 2002-12-10 2006-09-05 Intel Corporation Virtual machine to provide compiled code to processing elements embodied on a processor device
US7210127B1 (en) 2003-04-03 2007-04-24 Sun Microsystems Methods and apparatus for executing instructions in parallel
JP2004318502A (ja) * 2003-04-16 2004-11-11 Matsushita Electric Ind Co Ltd 電力制御機能を備えたマイクロプロセッサ及び命令変換装置
US7600221B1 (en) 2003-10-06 2009-10-06 Sun Microsystems, Inc. Methods and apparatus of an architecture supporting execution of instructions in parallel
US7765539B1 (en) 2004-05-19 2010-07-27 Nintendo Co., Ltd. System and method for trans-compiling video games
WO2006064409A1 (en) * 2004-12-13 2006-06-22 Koninklijke Philips Electronics N.V. Compiling method, compiling apparatus and computer system for a loop in a program
TWI306215B (en) * 2005-04-29 2009-02-11 Ind Tech Res Inst Method and corresponding apparatus for compiling high-level languages into specific processor architectures
GB2426083A (en) * 2005-05-09 2006-11-15 Sony Comp Entertainment Europe Software emulation of a pipeline processor
KR100806274B1 (ko) 2005-12-06 2008-02-22 한국전자통신연구원 멀티 쓰레디드 프로세서 기반의 병렬 시스템을 위한 적응형실행 방법
JP2008269529A (ja) * 2007-04-25 2008-11-06 Toshiba Corp デバッグ支援装置
US8046750B2 (en) * 2007-06-13 2011-10-25 Microsoft Corporation Disco: a simplified distributed computing library
JP5256685B2 (ja) * 2007-10-18 2013-08-07 日本電気株式会社 情報処理装置
US7971032B2 (en) * 2007-11-14 2011-06-28 Vns Portfolio Llc System for native code execution
EP2573403B1 (en) * 2011-09-20 2017-12-06 Grundfos Holding A/S Pump
CN112632095A (zh) * 2020-12-31 2021-04-09 中国农业银行股份有限公司 一种更新解释器和线程池单元的对应关系的方法和装置

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4493027A (en) * 1981-05-22 1985-01-08 Data General Corporation Method of performing a call operation in a digital data processing system having microcode call and return operations
US5179734A (en) * 1984-03-02 1993-01-12 Texas Instruments Incorporated Threaded interpretive data processor
JPH0475139A (ja) * 1990-07-18 1992-03-10 Toshiba Corp ループ並列化装置
JP2834292B2 (ja) * 1990-08-15 1998-12-09 株式会社日立製作所 データ・プロセッサ
US5299321A (en) * 1990-12-18 1994-03-29 Oki Electric Industry Co., Ltd. Parallel processing device to operate with parallel execute instructions
US5774727A (en) * 1991-06-27 1998-06-30 Digital Equipment Corporation Parallel processing system for virtual processor implementation of machine-language instructions
US5430850A (en) * 1991-07-22 1995-07-04 Massachusetts Institute Of Technology Data processing system with synchronization coprocessor for multiple threads
US5410681A (en) * 1991-11-20 1995-04-25 Apple Computer, Inc. Interpreter for performing remote testing of computer systems
IL100598A0 (en) * 1992-01-06 1992-09-06 Univ Bar Ilan Dataflow computer
US5404469A (en) * 1992-02-25 1995-04-04 Industrial Technology Research Institute Multi-threaded microprocessor architecture utilizing static interleaving
WO1994022079A1 (de) * 1993-03-15 1994-09-29 Siemens Aktiengesellschaft Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren
US5721854A (en) * 1993-11-02 1998-02-24 International Business Machines Corporation Method and apparatus for dynamic conversion of computer instructions
US5859991A (en) * 1995-06-07 1999-01-12 Advanced Micro Devices, Inc. Parallel and scalable method for identifying valid instructions and a superscalar microprocessor including an instruction scanning unit employing the method
WO1997027537A2 (en) * 1996-01-24 1997-07-31 Sun Microsystems, Inc. A processor for executing instruction sets received from a network or from a local memory
US6031992A (en) * 1996-07-05 2000-02-29 Transmeta Corporation Combining hardware and software to provide an improved microprocessor
US5889996A (en) * 1996-12-16 1999-03-30 Novell Inc. Accelerator for interpretive environments
US5872990A (en) * 1997-01-07 1999-02-16 International Business Machines Corporation Reordering of memory reference operations and conflict resolution via rollback in a multiprocessing environment
US6139199A (en) * 1997-06-11 2000-10-31 Sun Microsystems, Inc. Fast just-in-time (JIT) scheduler
US6021273A (en) * 1997-06-30 2000-02-01 Sun Microsystems, Inc. Interpreter generation and implementation utilizing interpreter states and register caching
US6163836A (en) * 1997-08-01 2000-12-19 Micron Technology, Inc. Processor with programmable addressing modes
US6085315A (en) * 1997-09-12 2000-07-04 Siemens Aktiengesellschaft Data processing device with loop pipeline
EP0950216B1 (en) * 1997-10-02 2003-11-26 Koninklijke Philips Electronics N.V. A processing device for executing virtual machine instructions
JP3377419B2 (ja) * 1997-11-11 2003-02-17 インターナショナル・ビジネス・マシーンズ・コーポレーション 命令列生成方法及び装置、変換方法、及びコンピュータ
US6549930B1 (en) * 1997-11-26 2003-04-15 Compaq Computer Corporation Method for scheduling threads in a multithreaded processor
US6324639B1 (en) * 1998-03-30 2001-11-27 Matsushita Electric Industrial Co., Ltd. Instruction converting apparatus using parallel execution code
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
US6256784B1 (en) * 1998-08-14 2001-07-03 Ati International Srl Interpreter with reduced memory access and improved jump-through-register handling
US6205578B1 (en) * 1998-08-14 2001-03-20 Ati International Srl Interpreter for stack-based languages
US7111290B1 (en) * 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
US6826748B1 (en) * 1999-01-28 2004-11-30 Ati International Srl Profiling program execution into registers of a computer
US6446192B1 (en) * 1999-06-04 2002-09-03 Embrace Networks, Inc. Remote monitoring and control of equipment over computer networks using a single web interfacing chip
US6629312B1 (en) * 1999-08-20 2003-09-30 Hewlett-Packard Development Company, L.P. Programmatic synthesis of a machine description for retargeting a compiler

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100678912B1 (ko) * 2005-10-18 2007-02-05 삼성전자주식회사 메소드 바이트코드 해석 방법 및 상기 방법에 의해동작하는 시스템

Also Published As

Publication number Publication date
US7194734B2 (en) 2007-03-20
US20030149964A1 (en) 2003-08-07
EP1062577A2 (en) 2000-12-27
WO2000034854A3 (en) 2000-10-19
US6658655B1 (en) 2003-12-02
WO2000034854A2 (en) 2000-06-15
TW518511B (en) 2003-01-21
JP2002532775A (ja) 2002-10-02

Similar Documents

Publication Publication Date Title
KR20010040742A (ko) 인터프리터 프로그램을 실행하는 방법
EP1385090B1 (en) Program code conversion for variably sized registers
US7210127B1 (en) Methods and apparatus for executing instructions in parallel
US5692169A (en) Method and system for deferring exceptions generated during speculative execution
US5732234A (en) System for obtaining parallel execution of existing instructions in a particulr data processing configuration by compounding rules based on instruction categories
US6463521B1 (en) Opcode numbering for meta-data encoding
Bala et al. Efficient instruction scheduling using finite state automata
JP2002149416A (ja) プログラムの最適化方法及びこれを用いたコンパイラ
JP2000066898A (ja) コンピュ―タ命令の実行をスケジュ―ルする方法
JPH08272609A (ja) Vliwプログラムのオブジェクト・コード互換性提供方法
KR20150111990A (ko) 하드웨어 포인터를 이용한 simd 코어 내 분기 해법
JP2006268833A (ja) 制限的な呼び出し規約を有するコードをインストルメントする方法
KR19990083019A (ko) 정적 초기화 방법, 데이터 처리 시스템 및 컴퓨터 판독 가능한 매체
EP2951682B1 (en) Hardware and software solutions to divergent branches in a parallel pipeline
WO2002015003A2 (en) Method and apparatus for caching native code in a virtual machine interpreter
US6301652B1 (en) Instruction cache alignment mechanism for branch targets based on predicted execution frequencies
US6691307B2 (en) Interpreter optimization for native endianness
KR20040094888A (ko) 단일 스레드 응용을 지원하기 위한 시간-멀티플렉스된스펙큘레이티브 멀티 스레딩
Larus Assemblers, linkers, and the SPIM simulator
Garnett Dynamic optimization if IA-32 applications under DynamoRIO
CN114995832B (zh) 一种动静结合的二进制程序翻译方法
JPH02176938A (ja) 機械語命令最適化方式
Roubinchtein IR-MetaOCaml:(re) implementing MetaOCaml
Perrott et al. A supercomputer program development system
Mattsson Implementation of concurrent Pascal on LSI—11

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
NORF Unpaid initial registration fee