KR20060002031A - 명령들을 스케줄링 및 실행하는 방법 - Google Patents

명령들을 스케줄링 및 실행하는 방법 Download PDF

Info

Publication number
KR20060002031A
KR20060002031A KR1020057023578A KR20057023578A KR20060002031A KR 20060002031 A KR20060002031 A KR 20060002031A KR 1020057023578 A KR1020057023578 A KR 1020057023578A KR 20057023578 A KR20057023578 A KR 20057023578A KR 20060002031 A KR20060002031 A KR 20060002031A
Authority
KR
South Korea
Prior art keywords
instructions
register
sequence
target
store
Prior art date
Application number
KR1020057023578A
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 KR20060002031A publication Critical patent/KR20060002031A/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/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • 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
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • 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 or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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 or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Retry When Errors Occur (AREA)
  • Storage Device Security (AREA)
  • Power Sources (AREA)
  • Executing Machine-Instructions (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명은 명령들을 스케줄링 및 실행하는 방법은 저장 명령과, 그리고 제 1 어드레스 범위(address range)에 로드되며 상기 명령들의 시퀀스에서 상기 저장 명령 뒤에 위치하는 로드 명령을 포함하는 명령들의 시퀀스에 액세스하는 단계 - 여기서 상기 저장 명령이 상기 제 1 어드레스 범위를 포함하는지 여부는 알려지지 않으며 - 와; 상기 명령들의 시퀀스에서 상기 저장 명령 앞에 상기 로드 명령을 위치시키는 단계와; 상기 로드 명령을 상기 저장 명령 앞에 위치시킨 후, 상기 명령들의 시퀀스를 실행하는 단계와; 그리고 실행 동안에, 만일 상기 저장 명령이 상기 제 1 어드레스 범위에서 임의의 어드레스를 포함하는 지를 판단하는 단계를 포함한다.
스케줄링, 어드레스 범위, 로드, 저장, 예외

Description

명령들을 스케줄링 및 실행하는 방법{METHOD OF SCHEDULING AND EXECUTING INSTRUCTIONS}
도 1은 본 발명을 사용하는 새로운 마이크로프로세서를 나타내는 다이아그램이다.
도 2는 도 1의 상기 새로운 마이크로프로세서를 구현하는 하드웨어의 블록 다이아그램이다.
도 3은 도 1의 상기 새로운 마이크로프로세서의 주요 처리 루프를 나타내는 순서도이다.
도 4는 상기 새로운 프로세서의 일부분을 나타내는 블록 다이아그램이다.
도 5는 상기 새로운 프로세서의 다른 일부분을 나타내는 블록 다이아그램이다.
도 6은 본 발명에 따라 설계된 스케줄러 소프트웨어의 동작을 나타내는 순서도이다.
도 7은 본 발명을 실행하기 위한 일실시예인 회로를 나타내는 블록 다이아그램이다.
본 발명은 컴퓨터 시스템에 관한 것으로서, 특히 향상된 마이크로프로세서에서의 명령들의 시퀀스를 스케줄링 및 실행하는 방법에 관한 것이다.
[배경기술]
최근, 모프 호스트(morph host) 프로세서와는 다른 프로세서를 위해 고안된 응용 프로그램들을 그 다른 프로세서(타겟 프로세서)에 의해서는 획득될 수 없는 속도로 실행하기 위해 단순하면서도 매우 빠른 호스트 컴퓨터(일명 "모프 호스트")와 소프트웨어(일명 "코드 모핑 소프트웨어(code morphing software)")를 결합한 새로운 마이크로프로세서가 개발되었다. 모프 호스트 프로세서는 코드 모핑 소프트웨어를 실행하여 응용 프로그램들을 모프 호스트 프로세서 명령으로 변환함으로써, 원본 타겟 소프트웨어(original target software)의 목적을 달성한다. 타겟 명령들은 변환되면서 실행되는 동시에 변환 버퍼(translation buffer)에 저장됨으로써, 다시 변환되는 일 없이 변환 버퍼에서 액세스될 수 있다. 비록 초기 변환과 프로그램의 실행이 느리더라도, 일단 변환되면 하드웨어에서 프로그램을 실행하는데 일반적으로 필요한 많은 단계들이 제거된다.
다른 프로세서들을 위해 고안된 프로그램을 고속으로 실행할 수 있게 하기 위해, 모프 호스트 프로세서는 다수의 하드웨어 강화(hardware enhancement)을 구비한다. 상기 하드웨어 강화 중의 하나는 상기 호스트 프로세서와 변환 버퍼 사이에 위치한 게이트 저장 버퍼(gated store buffer)이다. 또 하나의 하드웨어 강화는 변환되는 타겟 명령들의 어느 시퀀스의 시작에서라도 타겟 머신(target machine)의 상태를 저장하는 일련의 호스트 레지스터들이다. 타겟 프로세서의 상태를 알고 있는 범위에 있는 타겟 명령들의 시퀀스들은 모프 호스트 명령들로 변환되고 상기 변환 버퍼에 위치하여 실행을 기다린다. 만약 상기 변환된 명령들이 예외(exception)를 일으킴이 없이 실행되면, 명령의 시퀀스의 시작에서의 타겟 상태는 시퀀스가 완료된 시점에서의 타겟 상태로 갱신된다.
만약 변환된 호스트 명령들의 시퀀스의 실행 동안 예외가 발생하면, 프로세싱은 중단되고 전체 동작은 상기 타겟 머신의 알려진 상태가 존재하는 타겟 명령들의 시퀀스의 시작으로 복귀하거나 되돌아간다. 이에 따라 명령들을 동적으로 변환하고 실행하는 동안 예외를 빠르고 정확하게 처리할 수 있어서 종래에 달성할 수 없었던 결과를 얻을 수 있다.
상기 코드 모핑 소프트웨어의 부분인 스케줄러(scheduler)에 의해 새로운 마이크로프로세서를 동작시킬 때 추가적인 속도가 달성된다. 스케줄러는 명령들이 변환되면서 생 변환(raw translation)에 의해 생성된 본래의 배열(naive order)로부터 동일 결과를 생성하지만 보다 빠른 실행을 가능하게 하는 배열로 상기 명령들을 재배열하고 재스케줄링(reschedule)한다. 스케줄러는 상기 재스케줄링된 소프트웨어의 실행에 보다 적은 시간이 소요되도록 다른 명령들에 앞서 특정 명령들을 배치하거나 동시에 명령들을 실행하려고 한다. 스케줄러들은 다수의 제약(constraints)을 가지고 수행되는데, 그 중 가장 기본적인 것은 재스케줄링된 프로그램이 원본 프로그램과 동일한 최종 결과들을 생성해야 한다는 것이다.
예를 들면, 시퀀스들이 옳바른 결과들을 생성하기 위해서는, 인터럽션 (interruption) 없이 수행되어야 하는 프로그램 내의 명령들의 시퀀스들이 있다. 스케줄러는 그러한 시퀀스들과 충돌할 때마다 생성된 결과들과 충돌하게 된다. 많은 프로세서들이 하드웨어 인터락(interlocks)을 제공하여 이러한 시퀀스들이 인터럽션 없이 수행되도록 한다. 명령들의 시퀀스를 보호할 필요성에 따라, 논의된 모프 호스트 프로세서와 같이 하드웨어 인터락이 없는 프로세서들에 대한 특수한 제약들이 나타나고 있다. 소프트웨어는 이러한 시퀀스들을 인식하여야 하고 상기 시퀀스들이 인터럽션 없이 실행되도록 할 수 있어야만 한다.
제어 의존성(control dependency)은 스케줄러가 직면하는 재배열에 대한 전통적인 제약이다. 제어 의존성은 분기명령과 관련이 있다. 스케줄러는 분기 전후에 발생하는 명령을 재배열하여도 프로그램이 오동작하지 않도록 할 수 있어야 한다.
다른 제어 의존성들이, 저장에 관하여 로드(loads)의 재배열에 영향을 미친다. 예를 들면, 만약 갱신된 데이터가 메모리 주소에 저장되고 이어서 레지스터 동작에서 다루어진다면, 상기 주소의 데이터는 저장이 일어날 때 레지스터에 유지되어서는 아니된다. 그렇지 않으면 레지스터 내의 데이터는 쓸모없는 것이 될 수 있다.
이러한 모든 제약들이 종래의 스케줄러로 하여금 매우 보수적으로 동작하게 하여 결과적으로 더욱 느리게 코드를 생성하게 한다.
종래의 스케줄러는 재배열을 수행하기 위해 상호 의존적인 명령들을 판단하는데 최선을 다한다. 일반적인 스케줄러는 어느 동작들이 다른 동작들에 어느 정도 의존한다는 것과 일부 동작들이 다른 동작들에 전혀 의존하지 않는다는 것을 판단 할 수 있으나, 다른 동작들에 관해서는 어떠한 것도 판단할 수 없다. 이러한 스케줄러는 동작들이 발생된 통상의 본래 순서(normal naive order)로 동작들을 배열함으로써 다른 동작들에 의존하는 동작들을 보수적으로 처리한다. 이러한 스케줄러는 다른 동작들에 전혀 의존하지 않는 동작들을 자신이 원하는 방식으로 재배열한다. 결론적으로 스케줄러는 의존성에 관한 판단을 할 수 없는 모든 동작들을 그들이 서로 의존적인 것처럼 처리하여 동작들을 보수적으로 그리고 천천히 취급한다.
따라서, 명령들의 시퀀스를 보다 빠른 속도로 스케쥴링 및 실행할 수 있는 방법을 제공하는 것이 바람직하다.
본 발명은 명령들을 스케줄링 및 실행하는 방법을 제공하는 것으로서, 이 방법은 저장 명령과, 그리고 제 1 어드레스 범위(address range)에 로드되며 상기 명령들의 시퀀스에서 상기 저장 명령 뒤에 위치하는 로드 명령을 포함하는 명령들의 시퀀스에 액세스하는 단계 - 여기서 상기 저장 명령이 상기 제 1 어드레스 범위를 포함하는지 여부는 알려지지 않으며 - 와; 상기 명령들의 시퀀스에서 상기 저장 명령 앞에 상기 로드 명령을 위치시키는 단계와; 상기 로드 명령을 상기 저장 명령 앞에 위치시킨 후, 상기 명령들의 시퀀스를 실행하는 단계와; 그리고 실행 동안에, 만일 상기 저장 명령이 상기 제 1 어드레스 범위에서 임의의 어드레스를 포함하는 지를 판단하는 단계를 포함하는 것을 특징으로 한다.
본 발명의 이러한 목적 및 특징들과 다른 목적 및 특징들은 하기의 도면과 함께 개시되는 상세한 설명에 의해 충분히 인식될 수 있을 것이고, 동일 구성요소 들은 다수의 도면에서 동일한 참조번호로 표시된다.
도 1은 종래의 진보된 마이크로프로세서 보다 더 간단한 강화 하드웨어(enhanced hardware) 처리 부분(일명, "모프 호스트")과 에뮬레이팅 소프트웨어(emulating software) 부분(일명, "코드 모핑 소프트웨어")을 결합한 새로운 마이크로프로세서(10)를 도시한다. 상기 두 부분은 함께 동작하여, 향상된 마이크로프로세서에서 통상 하드웨어만으로 달성되는 동작들을 수행한다. 상기 새로운 마이크로프로세서(10)는 종래의 마이크로프로세서보다 더 빠르고 종래 다수의 마이크로프로세서에 의해 실행되는 모든 운영체제(OS) 소프트웨어를 실행시킬 수 있고, 그러면서도 종래 마이크로프로세서보다 더 저렴하다.
상기 마이크로프로세서(10)는 다른 타겟 프로세서용 응용 프로그램을 실행하는 코드 모핑 소프트웨어(12)를 실행하도록 설계된 모프 호스트 프로세서(11)를 구비한다. 상기 모프 호스트(11)는 상기 코드 모핑 소프트웨어(12)에 의해 제공되는 가속 기술(acceleration technique)이 효과적으로 활용되도록 하는 하드웨어 강화(hardware enhancment)를 구비한다. 상기 모프 호스트 프로세서는 동작들을 가속시키고, 그리고 예외나 오류가 발생한 때 즉시 타겟 컴퓨터의 상태를 제공하도록 도와주는 하드웨어 강화를 구비한다. 상기 코드 모핑 소프트웨어는 특히 타겟 프로그램의 명령들을 모프 호스트 명령들로 변환하고, 호스트 명령들을 스케줄링 및 최적화하고, 필요 시 실행이 정확했던 것으로 알려진 마지막 포인트로 실행을 롤백(roll back)하고, 타겟 코드의 정확한 재변환이 이루어지도록 그 포인트에서 작업 상태(working state)를 옳바른 타겟 상태로 대체함으로써 예외들과 오류들에 응답하는 소프트웨어를 구비한다. 코드 모핑 소프트웨어는 또한 처리 속도를 향상시키기 위한 다양한 프로세스를 구비한다. 도 2의 블록 다이아그램은 전술한 특징들을 구현하는 모프 호스트(11)의 예시적인 하드웨어를 상세히 나타낸 것이다.
(상기 코드 모핑 소프트웨어(12)의 주요 루프의 동작을 설명하는)도 3의 다이아그램에 도시된 바와 같이, 강화 모프 호스트와 결합된 코드 모핑 소프트웨어는 실행 중(on the fly) 타겟 명령들을 상기 모프 호스트용 명령들로 변환하고 메모리 데이터 구조(일명, "변환 버퍼") 내에 상기 호스트 명령들을 캐시(cache)한다. 일단 타겟 명령이 변환되면, 이는 변환 버퍼로부터 리콜(recall)되어 종래 하드웨어 마이크로프로세서에서 요구되던 단계들(즉, 어느 원시 명령들이 각 타겟 명령을 실행하는데 요구되는지를 결정하는 단계, 각 원시 명령을 어드레싱하는 단계, 각 원시 명령을 인출(fetch)하는 단계, 원시 명령들의 시퀀스를 최적화하는 단계, 각 원시 명령에 자산(asset)을 할당하는 단계, 원시 명령들을 재배열하는 단계, 및 각 타겟 명령이 실행될 때마다 수반되는 원시 명령들의 각 시퀀스의 단계를 실행하는 단계) 없이 실행된다.
종래 에뮬레이션 기술의 주요 문제는 타겟 프로그램의 실행 동안 생성된 예외들을 좋은 성능으로 처리할 수 없다는 점이다. 상기 타겟 응용 프로그램의 실행에서 발생된 일부 예외들은 타겟 운영체제로 보내지고, 예외 및 후속 명령들의 적절한 실행을 위해 그러한 어떤 예외의 시점에도 올바른 타겟 상태가 이용될 수 있어야 한다. 일부 특정 호스트 기능에 의해 대체된 특정 타겟 동작들을 검출하기 위 해 에뮬레이터에 의해 다른 예외들이 생성될 수 있다. 타겟 명령들로부터 유래(derive)된 호스트 명령들을 실행하는 호스트 프로세서 역시 예외들을 생성할 수 있다. 이러한 모든 예외들은 타겟 명령들을 에뮬레이터에 의해 호스트 명령들로 변환할 때 또는 에뮬레이팅 호스트 명령들이 호스트 프로세서에 의해 실행될 때 발생할 수 있다. 타겟 운영체제로 보내진 예외들은, 이 예외들이 언제나 타겟 프로세서의 상태를 알아야 하므로 특히 어렵다.
이러한 예외들로부터 효율적으로 회복하기 위해, 강화 모프 호스트는 다수의 하드웨어 강화를 구비한다. 이러한 강화에는 게이트 저장 버퍼(도 5를 참조)가 있다. 게이트 저장 버퍼는 하드웨어 "게이트"의 "언커미티드" 측(uncommitted side)에 작업(working) 메모리 상태 변화를 저장하고 하드웨어 "게이트"의 "커미티드" 측(committed side)에 오피셜(official) 메모리 상태 변화를 저장한다. 하드웨어 게이트에 있어서, 이러한 커미티드 저장(committed store)은 메인 메모리로 "유출(drain)" 된다. "커미트(commit)" 동작은 게이트의 언커미티드 측에서 게이트의 커미티드 측으로 메모리 저장을 이동시킨다. 만약 예외가 발생하면, "롤백" 동작은 게이트 저장 버퍼 내의 언커미티드 저장들을 폐기한다.
상기 하드웨어 강화는 또한 다수의 추가적인 프로세서 레지스터들(도 4를 참조)을 포함한다. 레지스터 명칭변경(renaming)에 의해 동일한 하드웨어 자원을 사용하려는 명령들의 문제를 감소시키는 것에 부가적으로, 추가 레지스터들은 호스트 명령들을 처리하기 위한 일련의 호스트 또는 워킹(작업) 레지스터 및 일련의 타겟 레지스터의 관리를 통해 타겟 프로세서(타겟 프로세서를 위한 타겟 응용 프로그램 이 원본으로 생성된다)의 오피셜 상태를 유지하도록 한다. 타겟 레지스터들은 전용 인터페이스를 통하여 자신들의 워킹 레지스터 등가물에 연결되며, 이 전용 인터페이스는 커미트 동작에 의해 모든 워킹 레지스터들의 내용이 오피셜 타겟 레지스터들로 빠르게 이동되도록 하고, "롤백"으로 불리는 동작에 의해 모든 오피셜 타겟 레지스터들의 내용이 자신들의 워킹 레지스터 등가물들로 빠르게 이동되도록 한다.
일단 하나 또는 그룹의 타겟 명령들이 변환되고 오류없이 수행되면, 상기 추가적인 오피셜 레지스터들과 상기 게이트 저장 버퍼는 메모리의 상태와 타겟 레지스터들의 상태가 함께 갱신되도록 한다. 전체 타겟 명령 경계들에서 발생하는 갱신이 코드 모핑 소프트웨어에 의해 선택된다. 만약 일련의 타겟 명령들의 변환에 의해 생성된 원시 호스트 명령들이 예외를 생성함이 없이 호스트 프로세서에 의해 수행되면, 워킹 메모리 저장과 이들 명령들에 의해 생성된 워킹 레지스터 상태가 오피셜 메모리와 오피셜 타겟 레지스터들로 이동된다.
반면에 타겟 명령의 경계에서는 없는 포인트에서 상기 호스트 명령들을 처리할 때 예외가 발생하면, 가장 최근의 갱신(또는 커미트)에서 타겟 레지스터들의 원래의 상태는 워킹 레지스터들로 리콜되고 게이트 저장 버퍼 내의 언커미티드 메모리 저장들은 폐기되게 된다. 이어서, 만약 발생된 예외가 타겟 예외이라면, 타겟 예외를 야기하는 타겟 명령들은 한 번에 재변환되어, 타겟 마이크로프로세서에 의해 수행되는 것과 같이 직렬 시퀀스로 수행된다. 각 타겟 명령이 오류없이 정확하게 수행됨에 따라, 타겟 레지스터들의 상태는 갱신되고 저장 버퍼내의 데이터가 메모리로 게이트될 수 있다. 그 다음, 호스트 명령들을 수행할 때 상기 예외가 다시 발생하면, 타겟 프로세서의 정확한 상태는 모프 호스트와 메모리의 타겟 레지스터들에 의해 유지되고, 동작은 지연없이 정확하게 처리된다. 이러한 조정적 변환(corrective translation)에 의해 생성된 각 새로운 변환은 나중의 사용을 위해 캐시되거나, 혹은 페이지 고장(page fault)과 같이 한번 만 발생하거나 거의 발생하지 않는 경우에는 폐기되어도 좋다. 이러한 특징들이 결합되어, 코드 모핑 소프트웨어 및 모프 호스트의 결합으로 이루어진 마이크로프로세서가 본래 상기 소프트웨어가 기록되는 대상인 프로세서보다 더 빠르게 명령들을 실행할 수 있도록 지원한다.
명령들을 간단하게 변환하고, 변환된 명령들을 캐시하고, 명령 세트들이 실행될 필요가 있을 때마다 각 변환을 실행하는 것에 더하여, 코드 모핑 소프트웨어는 또한 다른 변환들을 재배열하고 최적화하고 재스케줄링한다. 실행 중에 분기(branches)가 행해질 가능성이 명백해지면, 하나의 최적화 프로세스는 변환된 호스트 명령들의 다양한 시퀀스들을 상호 링크시킨다. 결과적으로, 주요 루프가 호스트 명령의 분기 명령을 참조하는 것이 거의 완전하게 불필요하게 된다. 이러한 조건에 도달하게 되면, 어떤 호스트 명령들을 실행하기 전에, 타겟 명령들을 인출하고, 타겟 명령들을 디코드하고, 타겟 명령들을 구성하는 원시 동작들을 인출하고, 원시 동작들을 최적화하고, 원시 동작들을 재배열하고, 그러한 원시 동작을 재스케줄링하는데 필요한 시간이 제거된다. 따라서, 기존의 향상된 마이크로프로세서를 사용하여 일련의 타겟 명령들을 실행하는데 요구되는 작업은 현저하게 감소된다.
상술된 바와 같이, 재배열 동작은 스케줄러(scheduler)를 사용하는데, 이 스 케줄러는 비록 명령들이 부정확한 것은 아니지만 최적이지 못하게 순서가 정해진 것으로 나타나는 경우, 명령들이 실행할 최적의 실행순서 선택을 시도한다. 스케줄러들이 지니는 문제점은 수많은 제약을 가지고 동작한다는 점이다. 가장 기본적인 제약은 프로그램이 실행 시 명령들의 원본 시퀀스가 생성하는 결과와 동일한 최종 결과를 생성하여야 한다는 점이다. 이러한 모든 제약들은 통상적인 스케줄러가 매우 보수적(conservative)으로 동작케 하고, 결과적으로 느리게 실행되는 코드를 생성케 한다.
예를 들면, 정확한 결과가 생성되도록 하기 위해, 종래의 스케줄러는 결정론적 기준에 따라 동작하여 의존성을 갖지 않는 명령과, 의존성들을 갖는 명령 및 의존성의 존재가 알려지지 않은 명령을 선택한다. 의존성을 갖는 명령과 의존성의 존재가 알려지지 않은 명령은 모두 의존성이 있는 것처럼 취급되어 재배열되지 않는다. 의존성이 없는 것으로 알려진 명령들만이 재배열된다. 이러한 지침들을 따름으로써, 종래의 스케줄러들은 느리게 동작하는 코드를 생성한다.
또 다른 제약은 모프 호스트 프로세서의 특정 실시예에 관련된다. 상기 모프 호스트 프로세서의 일 실시예는 동작을 느리게 하는 특수 회로를 제거함으로써 고속으로 동작하도록 설계된 프로세서이다. 이러한 모프 호스트 프로세서의 실시예는 하드웨어 록킹 메커니즘 없이 설계된다. 하드웨어 록킹 메커니즘은 명령들의 특정 시퀀스에서의 모든 단계들이 인터럽트 없이 수행되도록 하는 회로이다. 만약 록킹 메커니즘이 없다면, 그러한 시퀀스에서의 모든 단계들이 재배열 없이 본래의 변환 배열로 처리되어 프로세서가 시퀀스로부터 정확한 결과를 생성할 수 있도록 스케줄 러가 매우 엄격하게 동작되어야 함이 요구된다.
본 발명의 스케줄러는 코드 모핑 소프트웨어의 소트프웨어 부분이다. 종래의 하드웨어 스케줄러와는 달리, 이 소프트웨어 스케줄러는 명령들을 재배열할 때 추론 기술(speculative technique)을 사용한다. 이 스케줄러는 임의의 동작들에 대해서 가능한한 가장 빠른 동작이 바람직하다고 추론하여 이 결과를 달성하기 위해 명령들을 재배열한다. 만약 선택된 추론이 부정확하면, 예외를 발생시키기 위한 하드웨어가 모프 호스트에 제공된다. 대부분의 경우, 이 추론은 정확하고, 그래서 전체 결과는 보다 더 빠른 동작이다. 그러나, 만약 추론이 부정확하면, 예외가 발생하며, 이 예외는 일반적으로 소프트웨어가 게이트 저장 버퍼를 사용하도록 함과 아울러, 타겟 레지스터들이 정확한 상태가 알려진 추론 시퀀스의 시점으로 동작들을 롤백하도록 한다.
종래의 스케줄러에 의해 사용되는 결정론적 방법과는 대조적으로, 본 발명의 스케줄러는 재배열을 위해 명령들의 카테고리를 선택할 때 확률적 지침(probabilistic guideline)을 사용한다. 본 발명에 따른 스케줄러는 타겟 명령 세트로부터의 변환에 의해 생성된 명령들의 시퀀스로부터 4개 카테고리의 명령들의 시퀀스를 선택한다(도 6을 참조). 이러한 카테고리들은 의존성이 없는 명령들의 시퀀스, 알려진 의존성을 갖는 명령들의 시퀀스, 의존성이 없을 확률이 높은 명령들의 시퀀스 및 의존성이 있을 확률이 높은 명령들의 시퀀스를 포함한다. 종래 기술에서와 같이 의존성이 없는 것으로 알려진 명령들의 시퀀스는 이 스케줄러에 의해 임의로 재배열되고, 알려진 의존성을 갖는 명령들의 시퀀스는 변환기에 의해 제공 된 시퀀스 배열로 처리된다.
그러나, 의존성이 없을 확률이 높은 명령들은 실제로 의존성이 없는 것으로 취급되어 가능한한 가장 빠른 실행을 제공하도록 하는 방식으로 재배열된다. 부정확한 재배열을 검출하고, 그리고 의존성이 실제로 존재하면 예외를 생성하는 하드웨어 수단이 모프 호스트에 제공된다. 이 스케줄러는 이 하드웨어 수단과 함께 동작하여 부정확하게 실행될 수 있는 각 재배열된 명령들을 체크하며, 동작들의 시퀀스가 부정확하게 실행되는 경우 예외를 발생시킨다. 이러한 예외에 의하여, 이 스케줄러는 예외를 발생한 이전의 재배열을 무시하고 보수적으로 또는 다른 보다 적절한 방법으로 시퀀스를 처리할 수 있게 된다.
반면에, 의존성이 있을 확률이 높은 명령들은 공격적(agressively)으로 또는 보수적으로 취급될 수 있다. 만약 공격적으로 취급되면, 상기 명령들은 의존성이 없는 명령들처럼 처리된다. 상기 명령들은 가능한 한 가장 빠른 실행을 제공하도록 재배열되고, 모프 호스트 내에 제공된 하드웨어 수단을 사용하여 잘못된 재배열이 발생했는지를 검출하여 예외를 발생시킨다. 만약 보수적으로 취급되면, 상기 명령들은 변환기에 의해 제공된 시퀀스 순서로 처리된다. 일반적으로, 보수적 취급에 의한 처리는 보다 빠른 프로세스를 제공하는데, 이는 다수의 예외 발생은 실행 속도를 현저히 저하시키기 때문이다.
본 발명의 일실시예에서, 도 7에 도시된 것과 같은 회로가 호스트 프로세서에 부가된다. 상기 회로는 특수한 "로드 및 보호(load and protect)" 또는 "저장 및 보호(store and protect)" 동작을 사용하여, 스케줄러에 의해 재배열된 명령에 의해 액세스되는 메모리 주소를 저장하는데 사용된다. 이러한 "로드 및 보호" 또는 "저장 및 보호" 동작은 명령이 재배열될 때마다 사용되며, 상기 재배열된 명령에 의해 액세스된 메모리 주소를 보호 레지스터로서 사용하기 위해 지정된 모프 호스트의 다수의 레지스터들(71) 중의 하나에 위치시키는 효과를 갖는다. 일실시예에서, 8개의 보호 레지스터(71)가 제공된다. 상기 "로드 및 보호" 또는 "저장 및 보호" 명령은 상기 동작을 위해 사용되는 특정 보호 레지스터를 지시한다.
본 명세서 전체를 통하여 상기 로드 및 보호 명령과 저장 및 보호 명령을 설명하는데 있어 "메모리 주소"라는 용어가 사용되지만, 이 용어는 보호되는 메모리 영역을 결정하기 위한 다수의 가능한 배열들에 대한 참조로서 사용된다. 메모리 주소라는 용어는 보호대상의 메모리 영역의 기술자(記述者)(descriptor)를 의미하는 것으로 사용된다. 예를 들면, 메모리가 바이트로 주소 지정이 가능한 시스템에서, 본 발명의 일 실시예는, 주소 영역 내의 바이트들의 갯 수와 동일한 다수의 비트 및 시작 메모리 주소(starting memory address)를 사용하여, 각 바이트들의 보호 상태를 나타낸다. 유사한 주소 지정을 사용하는 다른 실시예는 시작 메모리 주소 및 길이를 사용하고, 또 다른 실시예는 개별 바이트 주소와 각 바이트 주소에 대한 개별 비교기(comparator)를 사용한다.
예시적인 동작에서, 명령들의 시퀀스는 제 1 저장 명령(STORE1), 제 2 저장 명령(STORE2) 및 로드 명령(LOAD1)을 순서적으로 포함한다. 본 스케줄러는 재배열에 의해 오동작의 발생 확률이 낮아진다는 가정 하에 명령들을 재배열하기로 결정한다. 재배열된 시퀀스에서는 로드 명령이 첫 번째, 제 2 저장 명령이 두 번째, 제 1 저장 명령이 세 번째로 위치한다. 이를 위해, 스케줄러는 "로드 및 보호" 동작을 사용하여, 로드 데이터를 범용 레지스터들(72) 중의 하나에 위치시키고, 이 로드 데이터가 유래된 메모리 위치의 주소를 상기 명령에 의해 지정된 보호 레지스터(71)에 위치시킨다. 상기 스케줄러는 재배열이 오류를 야기했는지 여부를 판단하기 위해 어느 명령이 검사되어야 하는지를 알기 때문에, 이 스케줄러는 재배열에 의해 영향을 받을 수 있는 다음 명령들(이 경우, STORE1 및 STORE2 명령이며, 이들 앞에 로드가 위치함)에 표시자(indication)(예를 들면, 비트마스크 내의 비트)를 위치시켜, 보호 대상의 메모리 주소를 홀드하는 특정 보호 레지스터를 가리킨다. 이 표시자가 특정의 위치(만약 8개의 보호 레지스터들이 트랩핑(trapping) 기능을 위해 사용되면 8개 비트들 중의 하나)에 있다는 것은 저장 명령(store instruction)에 의해 각 저장(store)이 위치되는 주소가 상기 지시된 보호 레지스터(71) 내에 홀드된 메모리 주소와 중복되는지 여부에 따라 명령의 실행이 좌우된다는 것을 나타낸다.
유사하게, 이 스케줄러는 "저장 및 보호" 동작을 사용하여, 메모리에 STORE2 명령의 데이터를 저장하고, 데이터가 저장된 메모리 위치의 주소를 저장 및 보호 명령에 의해 지정된 보호 레지스터(71) 내에 위치시킨다. 이 스케줄러는 또한 재배열에 의해 영향을 받을 수 있는 명령들 각각(이 경우, STORE1 명령만임)의 비트마스크 내에 표시자를 위치시켜, 상기 보호되는 메모리 주소를 홀드하는 특정 보호 레지스터를 가리킨다. 결과적으로, 스케줄러는 마지막 STORE1 명령에 대해서 통상적인 저장 명령을 사용한다.
명령들의 시퀀스가 실행되면, 호스트 하드웨어는 비교기 회로(73)를 사용하 여 이 3개의 명령들 각각에 대해 만일 상기 명령의 메모리 주소가 상기 보호 레지스터(71) 중의 하나에 저장된 메모리 주소에서의 상기 데이터의 일부와 중복하는지를 판단하여, 중복하는 경우 예외를 생성한다. 따라서, LOAD1 동작(로드 및 보호)은 자신의 메모리 주소를 보호 레지스터(71)에 기록하나, 어느 것도 설정된 표시자에 의해 지정되지 않았기 때문에 보호 레지스터를 검사하지 않는다. STROE2 동작(저장 및 보호)은 자신의 메모리 위치를 다른 보호 레지스터(71)에 기록하고, LOAD1 명령을 위해 사용되는 보호 레지스터(71)를 검사하여 메모리 위치들 사이의 중복을 판단한다. 최종적으로, STORE1 동작(보호 레지스터 표시자에 의해 확장(augment)되지만, 단순 저장으로 남아있음)은 자신의 메모리 주소와 LOAD1과 STORE2 명령들의 메모리 주소 사이의 중복을 판단하기 위해, LOAD1 및 STOTRE2 명령들 각각에 대한 보호 레지스터를 검사한다. 상술된 제 1 및 제 3 실시예의 경우, 상기 비교에 의해 보호가 바이트 레벨에 정확히 적용될 수 있게 된다.
그 어떤 예외도 코드 모핑 소프트웨어로 하여금 그 예외에 응답하여 취해질 조치들을 결정하도록 한다. 전형적으로, 코드 모핑 소프트웨어는 재배열된 명령들의 시퀀스의 실행이 중단되도록 하고 호스트가 명령들의 시퀀스의 개시에서 타겟 프로세서의 상태로 복귀하도록 함으로써 명령들의 시퀀스를 보수적으로 재처리할 수 있다. 만약 주소들이 동일하지 않으면(본 예에서, 이는 저장 명령이 보호 메모리 주소에 액세스하지 않는다는 것을 가리킴), 재배열된 명령들의 시퀀스의 실행은 재배열에 의해 제공된 가속된 속도로 진행된다.
호스트 프로세서와 스케줄러 사이의 통신을 구현하기 위해, 모프 호스트에 의해 사용된 로드 및 저장 명령들이 변경된다. 일실시예에서, 이러한 명령들은 상기 "로드 및 보호" 및 "저장 및 보호"로 완전히 대체된다. 각 "로드 및 보호" 및 각 "저장 및 보호" 명령은 비트마스크(예를 들면, 8개 보호 레지스터들에 대응하는 8개의 비트들)를 포함하고, 그 비트마스크의 비트들은 플래그(flag)로서 사용되어 재배열되거나 또는 에일리어스된(aliased) 명령의 메모리 주소를 찾는 특정 보호 레지스터를 나타낸다. 상기 비트들 각각은 이용가능한 보호 레지스터들 중의 하나를 지정하는바, 이들 레지스터에는 하드웨어가 검사할 메모리 주소들이 저장되어 있다. 상기 비트마스크를 사용하여, 명령이 재배열될 때 메모리 주소를 저장하도록 지정된 특정 보호 레지스터는 재배열에 의해 영향을 받는 후속 명령이 실행되기 전에 검사된다. 상기 비트 마스크의 어떤 비트들도 설정되지 않을 때 어떤 검사도 이루어지지 않기 때문에, "로드 및 보호" 및 "저장 및 보호" 명령이 통상의 로드 및 저장 명령을 대신하여 각각 사용될 수 있다. 이러한 경우, "로드 및 보호" 및 "저장 및 보호" 동작들은 로드 및 저장 동작들과 동일하다. 보호 레지스터들을 메모리 데이터를 홀드하는 특정 범용 레지스터들과 연계시킬 수 있는 능력은, 소수의 보호 레지스터들의 효율적인 사용을 가능하게 한다는 점을 알아야 한다.
본 발명의 호스트 프로세서는 재배열된 명령들과 관련된 유효 메모리 주소를 포함하는 보호 레지스터들의 위치들을 저장하기 위한 인에이블(enable) 보호 레지스터(74)로 불리는 추가적인 레지스터를 포함한다. "로드 및 보호" 또는 "저장 및 보호" 명령들에 의해 제공되는 표시자를 사용하여 특정 보호 레지스터들을 가리키는 비트들이 설정된다. 일실시예에서, 변환 및 재배열된 명령들의 시퀀스가 재배열 예외를 발생시키지 않고 실행되었음을 나타내는 커미트 동작이 발생할 때마다 인에이블 보호 레지스터의 비트가 클리어된다. 재배열은 2개의 커미트 시점 간에서 발생하는 명령들의 시퀀스에서만 행해지기 때문에, 이 재배열 동작은 각 새롭게 변환된 명령들의 시퀀스마다 재배열에 할당된 모든 보호 레지스터를 사용할 수 있게 된다.
본 발명의 추가적인 장점은 "저장 및 보호" 동작이 서로에 대한 저장들의 재배열을 가능하게 한다는 것이다. 본 발명에서, 상기 재배열은 데이터를 메모리 위치에 저장하고 보호 레지스터 내의 메모리 위치의 주소를 보호함으로써 수행된다. 상기 재배열에 의해 영향을 받을 수 있는 후속의 저장이 발생될 때, 비트마스크는 하드웨어가 예외가 발생되어야 하는지 또는 저장들의 재배열이 정확하게 수행되었는지를 판단하기 위해 메모리 주소에 대해서 검사를 해야만 하는 보호 레지스터를 표시한다.
상기 새로운 마이크로프로세서의 일실시예에서, 메모리로부터 데이터를 인출하거나 메모리에 데이터를 저장는데 요구되는 시간을 줄이기 위해 동작의 실행에서 빈번히 사용되는 메모리 데이터가 실행 유닛 레지스터에 복제되도록(replicated or "aliased") 하는 회로 구성이 제공된다. 예를 들면, 만약 메모리 내의 데이터가 하나 이상의 코드 시퀀스들의 실행 동안 빈번히 재사용되면, 상기 데이터는 전형적으로 상기 메모리로부터 재검색되고 상기 데이터가 재사용될 때마다 실행 유닛의 레지스터로 로드되어야 한다. 이러한 빈번한 메모리 액세스에 소요되는 시간을 감소시키기 위해, 상기 데이터는 코드 시퀀스의 시작에서 메모리로부터 실행 유닛 레지 스터로 로드되고 코드 시퀀스가 연속되는 시간 동안 메모리 공간을 대신하여 기능하도록 지정된 레지스터로 로드된다. 일단 이것이 수행되면, 상기 메모리 주소로부터 레지스터로 데이터를 로딩하는 것을 수반하는 로드 동작들 각각은 보다 빠른 속도로 진행하는 레지스터-레지스터 복사 동작이 되며, 이러한 복사 동작들조차도 추가적인 최적화에 의해 빈번히 제거될 수 있다.
유사하게, 코드 시퀀스의 실행은 코드 시퀀스의 실행 동안 데이터가 메모리 주소에 빈번히 기록되어야 함을 종종 요구한다. 동일 주소로의 이러한 빈번한 메모리 저장에 요구되는 시간을 감소시키기 위해, 데이터가 메모리 주소에 기록될 때마다, 데이터는 코드 시퀀스가 연속하는 기간 동안 메모리 공간을 대신하여 기능하도록 지정된 실행 유닛 레지스터로 전송된다. 일단 실행 유닛 레지스터가 지정되면, 상기 데이터의 각 변경은 메모리 주소로의 저장보다 훨씬 빠르게 진행하는 간단한 레지스터-레지스터 전송만 동작을 필요로 하게 된다.
상기 에일리어스 회로의 동작이 1996년 9월 26일자로 출원되었으며, 본 출원이에게 양도된 미국 특허 출원 제08/721,698호(발명자:엠. 윙(M. Wing) 등)의 향상된 마이크로프로세서에서의 메모리 데이터를 에일리어스하는 방법 및 장치에 개시되어 있다.
재배열된 동작들을 가속시키는 본 발명의 제 2 실시예는 특정의 추가적인 하드웨어를 사용함으로써, 상기 언급한 특허 출원서에서 개시되어 있는 바와 같이, 메모리 주소들을 에일리어스하고 재배열하는데 동일한 하드웨어가 사용되도록 한다. 주목할 사항으로, 재배열 명령들은 인접한 커미트 동작들 사이에서 간헐적으로 발생하지만, 실행 유닛 레지스터 내의 에일리어스 메모리 데이터는 보다 장기간 유효하게 존속한다. 제 2 실시예에서, 제 2 "지속(persistent)" 레지스터(76)가 부가되어 인에이블 보호 레지스터(74)에 의한 재배열을 위해 제공되는 단기간 보호와 함께 장기간 또는 지속 보호가 가능하게 된다. 제 2 지속 레지스터(76)는 인접한 커미트 동작들보다 더 장기간 메모리 주소를 유지해야 하는 보호 레지스터만을 기록한다는 것을 제외하면 인에이블 보호 레지스터(74)와 동일한 방법으로 사용된다.
예를 들면, 어느 정도 장기간(예를 들면, 루프(loop) 동안) 사용하기 위해 메모리 주소를 에일리어스하고 데이터를 사용되는 호스트 레지스터에 저장하고자 한다면, 어느 보호 레지스터가 장기간 에일리어스 동작의 주소를 홀드하는지에 대한 표시가 상기 명령으로부터 복사되어 인에이블 보호 레지스터(74)와 제 2 지속 레지스터(76)에 위치된다. 재배열된 명령들의 시퀀스들이 예외 발생 없이 실행되어 제 1 커미트 동작이 가능하다고 가정하면, 인에이블 보호 레지스터는 클리어된다. 이와 같은 방식으로, 검사될 재배열된 명령들의 주소들을 홀드하는 보호 레지스터를 나타내는 단기간 플래그들은 각 커미트마다 클리어된다. 인에이블 보호 레지스터가 커미트에서 클리어된 후, 제 2 지속 레지스터의 내용들이 인에이블 보호 레지스터에 기록된다. 보호 레지스터들이 장기간 에일리어스를 위해 사용되고 있다는 것을 표시하는 상기 지속 레지스터 내의 데이터가 인에이블 보호 레지스터로 기록되기 때문에, 장기간 에일리어스를 위해 사용되는 보호 레지스터들의 표시들은 커미트 명령에 의해 영향을 받지 않는다. 지속 레지스터의 내용을 인에이블 보호 레지스터에 매 커미트마다 기록함으로써, 다음 명령들의 시퀀스 동안 그리고 궁극적 으로 데이터가 에일리어스 동작을 위해 더 이상 필요하지 않는 경우 제 2 지속 레지스터가 최종적으로 클리어될 때까지 보호가 유효하게 지속된다.
제 2 지속 레지스터(76)이외에, 지속 레지스터내에 유지된 정보를 저장하는 새도우 레지스터(shadow register)(78)가 구성된다. 새도우 레지스터는 커미트 및 롤백 동작 동안 사용된다. 커미트가 발생하는 경우, 지속 레지스터(76) 내의 데이터는 전술한 방식으로 인에이블 보호 레지스터(74)에 복사된다. 동일한 데이터가 커미트에서 지속 레지스터를 가리는(shadowing) 새도우 레지스터(78)에 복사됨으로써, 이 새도우 레지스터는 재배열되는 명령들의 다음 시퀀스의 시작에서 상기 지속 레지스터를 위한 설정들을 포함하게 된다. 예외가 명령들의 다음 시퀀스의 실행 동안 발생되고, 그리고 롤백 동작이 필요로 되는 경우, 새도우 레지스터의 내용은 인에이블 보호 레지스터와 지속 레지스터에 복사된다. 따라서, 명령들의 시퀀스의 실행이 개시되기 전, 레지스터 내에서와 같이, 인에이블 보호 및 지속 레지스터들 내에 동일한 표시들이 위치되게 되며, 그럼으로써 후속하는 보다 보수적인 실행을 위한 정확한 상태를 확인할 수 있게 된다.
본 발명의 구성에 의해 추가적인 장점들이 제공된다. 지속 레지스터(76)의 추가에 의해, 단기간 동안(커미트 사이에서) 재배열할 수 있는 능력과 실행 유닛 레지스터 내에 장기간 동안 에일리어스 메모리 데이터를 유지할 수 있는 능력을 향상시키는데 동일한 하드웨어를 사용할 수 있으므로 메모리 액세스 용장성(memory accessing redundancies)을 제거할 수 있을 뿐만 아니라, 커미트 동작들 사이에서 발생하는 다른 형태의 용장성을 제거할 수 있다. 예를 들면, 하나의 명령 시퀀스 동안 동일 메모리 주소로부터 2개의 로드가 발생할 수 있다. 이것이 발생하고 메모리 주소에 대한 저장이 중간에 일어나지 않으면, 두 번째 로드는 간단히 무시될 수 있고 첫 번째 메모리 액세스에 의해 레지스터에 위치된 데이터를 두 번째 로드 동작을 대신하여 변경 없이 사용될 수 있다. 그러나 로드 사이에서 저장이 일어나면, 두 번째 액세스가 발생될 메모리 주소에 저장이 발생하였는지를 판단할 필요가 있다. 따라서, 종래의 최적화 기술은 만일 저장이 로드 사이에서 일어난다면 두 번째 로드를 제거할 수 없게 된다.
동작 단축을 위해, 본 발명이 유용하게 이용될 수 있다. 제 1 로드가 보호 레지스터 내에 저장된 메모리 주소를 사용하여 "로드 및 보호" 동작으로 변경되고, 저장 명령이 검사될 특정 보호 레지스터를 표시하는 플래그를 수신하면, 제 2 로드는 제거되고, "로드 및 보호" 동작에 의해 저장된 데이터는 제 2 로드를 위해 사용된다. 상기 저장 명령이 상기 보호 메모리 주소에 액세스하려고 하면, 검사될 보호 레지스터를 나타내는 플래그는 저장 액세스가 발생하기 전에 비교가 이루어지도록 할 것이다. 그럼으로써 이는 예외를 생성할 것이고 정확한 타겟 상태가 존재하는 마지막 커미트 포인트로의 롤백이 발생하게 될 것이다. 스케줄러는 제 2 로드 동작을 포함하는 적절한 명령 시퀀스를 제공하고 시퀀스는 재실행될 것이다.
유사하게, 만약 2개의 커미트 동작들 간의 명령들의 시퀀스가 동일 메모리 주소로의 2개의 저장을 포함하는 경우, 메모리 주소로부터의 로드가 저장들 사이에서 일어나지 않으면 제 1 저장이 제거된다. 그러나 만약 상기 메모리 주소로부터의 데이터가 그 중간에 로드를 위해 사용되는 경우, 제 1 저장은 제거되지 않을 것이 다. 본 발명을 사용하여, 상기 로드 명령이 "로드 및 보호"를 위해 이루어지면 메모리 주소로의 제 1 저장은 제거될 것이다. 이 때 제 2 저장은 액세스의 메모리 주소를 검사할 "로드 및 보호"로부터 보호 레지스터 표시를 수신한다. 로드가 다른 주소로부터 온 것이면, 제 2 저장은 정확하게 진행한다. 로드가 동일 주소로부터 온 것이면, 제 2 저장에 대한 메모리로의 액세스 시도가 마지막 커미트 포인트로 동작을 롤백시키는 예외를 생성할 것이다. 상기 포인트로부터 스케줄러는 저장 동작들을 포함하도록 명령들을 재스케쥴링하고, 시퀀스를 재실행하게 될 것이다.
비록 본 발명은 바람직한 실시예를 통하여 개시되지만, 당업자이면 본 발명의 정신과 범위를 벗어남이 없이 다양한 변형들 및 변경들을 꾀할 수 있음이 명백하다. 예를 들면, 비록 본 발명이 특정 패밀리의 프로세서들과 기능하도록 설계되었지만, 본 발명은 다른 프로세서 아키텍쳐를 위해 설계된 프로그램 뿐만 아니라 기타 다른 프로그램들에도 적용될 수 있다. 본 발명은 하기의 청구범위에 의해 한정된다.
따라서, 본원 발명에 따라 명령들의 시퀀스를 보다 빠른 속도로 스케쥴링 및 실행할 수 있다.

Claims (3)

  1. 명령들을 스케줄링 및 실행하는 방법으로서,
    (a) 저장 명령과, 그리고 제 1 어드레스 범위(address range)에 로드되며 상기 명령들의 시퀀스에서 상기 저장 명령 뒤에 위치하는 로드 명령을 포함하는 명령들의 시퀀스에 액세스하는 단계 - 여기서 상기 저장 명령이 상기 제 1 어드레스 범위를 포함하는지 여부는 알려지지 않으며 - 와;
    (b) 상기 명령들의 시퀀스에서 상기 저장 명령 앞에 상기 로드 명령을 위치시키는 단계와;
    (c) 상기 로드 명령을 상기 저장 명령 앞에 위치시킨 후, 상기 명령들의 시퀀스를 실행하는 단계와; 그리고
    (d) 실행 동안에, 만일 상기 저장 명령이 상기 제 1 어드레스 범위에서 임의의 어드레스를 포함하는 지를 판단하는 단계를 포함하는 것을 특징으로 하는 명령들을 스케줄링 및 실행하는 방법.
  2. 제 1항에 있어서,
    상기 b) 단계는 상기 로드 명령에 의해 액세스 되는 메모리의 어드레스 범위를 보호 레지스터에 저장하는 단계를 더 포함하는 것을 특징으로 하는 명령들을 스케줄링 및 실행하는 방법.
  3. 제 2항에 있어서,
    상기 저장 명령에 상기 보호 레지스터를 표시하기 위한 플래그를 추가하는 단계를 더 포함하는 것을 특징으로 하는 명령들을 스케줄링 및 실행하는 방법.
KR1020057023578A 1999-06-14 2000-06-12 명령들을 스케줄링 및 실행하는 방법 KR20060002031A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/332,338 US7089404B1 (en) 1999-06-14 1999-06-14 Method and apparatus for enhancing scheduling in an advanced microprocessor
US09/332,338 1999-06-14

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020017016123A Division KR100758367B1 (ko) 1999-06-14 2000-06-12 향상된 마이크로프로세서에서의 스케줄링을 강화시키는 방법 및 장치

Publications (1)

Publication Number Publication Date
KR20060002031A true KR20060002031A (ko) 2006-01-06

Family

ID=23297783

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020017016123A KR100758367B1 (ko) 1999-06-14 2000-06-12 향상된 마이크로프로세서에서의 스케줄링을 강화시키는 방법 및 장치
KR1020057023578A KR20060002031A (ko) 1999-06-14 2000-06-12 명령들을 스케줄링 및 실행하는 방법

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020017016123A KR100758367B1 (ko) 1999-06-14 2000-06-12 향상된 마이크로프로세서에서의 스케줄링을 강화시키는 방법 및 장치

Country Status (9)

Country Link
US (3) US7089404B1 (ko)
EP (1) EP1194855B1 (ko)
JP (2) JP2003502754A (ko)
KR (2) KR100758367B1 (ko)
CN (1) CN1202480C (ko)
AT (1) ATE441147T1 (ko)
CA (1) CA2377164C (ko)
DE (1) DE60042824D1 (ko)
WO (1) WO2000077965A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11210099B2 (en) * 2015-06-26 2021-12-28 Intel Corporation Persistent commit processors, methods, systems, and instructions

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7761857B1 (en) * 1999-10-13 2010-07-20 Robert Bedichek Method for switching between interpretation and dynamic translation in a processor system based upon code sequence execution counts
US6594821B1 (en) 2000-03-30 2003-07-15 Transmeta Corporation Translation consistency checking for modified target instructions by comparing to original copy
US6615300B1 (en) 2000-06-19 2003-09-02 Transmeta Corporation Fast look-up of indirect branch destination in a dynamic translation system
US6981110B1 (en) 2001-10-23 2005-12-27 Stephen Waller Melvin Hardware enforced virtual sequentiality
US7316017B1 (en) * 2003-01-06 2008-01-01 Slt Logic, Llc System and method for allocatiing communications to processors and rescheduling processes in a multiprocessor system
US7386619B1 (en) * 2003-01-06 2008-06-10 Slt Logic, Llc System and method for allocating communications to processors in a multiprocessor system
US7310723B1 (en) 2003-04-02 2007-12-18 Transmeta Corporation Methods and systems employing a flag for deferring exception handling to a commit or rollback point
KR100607987B1 (ko) * 2004-06-24 2006-08-02 삼성전자주식회사 명령어 스케줄링을 수행하는 메모리 제어장치 및 방법
US20060150188A1 (en) * 2004-12-21 2006-07-06 Manuel Roman Method and apparatus for supporting soft real-time behavior
US8413162B1 (en) 2005-06-28 2013-04-02 Guillermo J. Rozas Multi-threading based on rollback
US7774583B1 (en) 2006-09-29 2010-08-10 Parag Gupta Processing bypass register file system and method
US7478226B1 (en) * 2006-09-29 2009-01-13 Transmeta Corporation Processing bypass directory tracking system and method
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US9672019B2 (en) * 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US9189233B2 (en) 2008-11-24 2015-11-17 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US8719649B2 (en) 2009-03-04 2014-05-06 Alcatel Lucent Method and apparatus for deferred scheduling for JTAG systems
US8621301B2 (en) 2009-03-04 2013-12-31 Alcatel Lucent Method and apparatus for virtual in-circuit emulation
US8775884B2 (en) 2009-03-04 2014-07-08 Alcatel Lucent Method and apparatus for position-based scheduling for JTAG systems
US20100229058A1 (en) * 2009-03-04 2010-09-09 Suresh Goyal Method and apparatus for system testing using scan chain decomposition
US8812796B2 (en) 2009-06-26 2014-08-19 Microsoft Corporation Private memory regions and coherence optimizations
US9092253B2 (en) 2009-12-15 2015-07-28 Microsoft Technology Licensing, Llc Instrumentation of hardware assisted transactional memory system
US8402218B2 (en) * 2009-12-15 2013-03-19 Microsoft Corporation Efficient garbage collection and exception handling in a hardware accelerated transactional memory system
US8850166B2 (en) * 2010-02-18 2014-09-30 International Business Machines Corporation Load pair disjoint facility and instruction therefore
US9405547B2 (en) * 2011-04-07 2016-08-02 Intel Corporation Register allocation for rotation based alias protection register
WO2013048379A1 (en) 2011-09-27 2013-04-04 Intel Corporation Expediting execution time memory aliasing checking
US9417855B2 (en) 2011-09-30 2016-08-16 Intel Corporation Instruction and logic to perform dynamic binary translation
US10102142B2 (en) 2012-12-26 2018-10-16 Nvidia Corporation Virtual address based memory reordering
US9183105B2 (en) * 2013-02-04 2015-11-10 Alcatel Lucent Systems and methods for dynamic scan scheduling
US9880842B2 (en) 2013-03-15 2018-01-30 Intel Corporation Using control flow data structures to direct and track instruction execution
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
CN103761073A (zh) * 2014-01-08 2014-04-30 东南大学 一种面向ARMv7的基于推测的指令动态调度方法
US11080182B2 (en) * 2019-01-07 2021-08-03 International Business Machines Corporation Object load introspection using guarded storage

Family Cites Families (64)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4766566A (en) * 1986-08-18 1988-08-23 International Business Machines Corp. Performance enhancement scheme for a RISC type VLSI processor using dual execution units for parallel instruction processing
US4817118A (en) 1987-06-29 1989-03-28 Step Engineering Mobile incident logger
US4903264A (en) 1988-04-18 1990-02-20 Motorola, Inc. Method and apparatus for handling out of order exceptions in a pipelined data unit
US5487156A (en) * 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
US5226130A (en) 1990-02-26 1993-07-06 Nexgen Microsystems Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
US5253349A (en) * 1991-01-30 1993-10-12 International Business Machines Corporation Decreasing processing time for type 1 dyadic instructions
IL98248A0 (en) * 1991-05-23 1992-06-21 Ibm Israel Instruction scheduler for a computer
US5269017A (en) * 1991-08-29 1993-12-07 International Business Machines Corporation Type 1, 2 and 3 retry and checkpointing
US5274815A (en) 1991-11-01 1993-12-28 Motorola, Inc. Dynamic instruction modifying controller and operation method
US5349658A (en) 1991-11-01 1994-09-20 Rourke Thomas C O Graphical user interface
JP2786574B2 (ja) 1992-05-06 1998-08-13 インターナショナル・ビジネス・マシーンズ・コーポレイション コンピュータ・システムにおける順不同ロード動作の性能を改善する方法と装置
EP0663083B1 (en) 1992-09-29 2000-12-20 Seiko Epson Corporation System and method for handling load and/or store operations in a superscalar microprocessor
US5519841A (en) * 1992-11-12 1996-05-21 Digital Equipment Corporation Multi instruction register mapper
US5450560A (en) 1992-12-21 1995-09-12 Motorola, Inc. Pointer for use with a buffer and method of operation
DE69330889T2 (de) * 1992-12-31 2002-03-28 Seiko Epson Corp System und Verfahren zur Änderung der Namen von Registern
US5467473A (en) * 1993-01-08 1995-11-14 International Business Machines Corporation Out of order instruction load and store comparison
US6704861B1 (en) * 1993-06-17 2004-03-09 Hewlett-Packard Development Company, L.P. Mechanism for executing computer instructions in parallel
US5421022A (en) * 1993-06-17 1995-05-30 Digital Equipment Corporation Apparatus and method for speculatively executing instructions in a computer system
US5420990A (en) 1993-06-17 1995-05-30 Digital Equipment Corporation Mechanism for enforcing the correct order of instruction execution
US5454117A (en) 1993-08-25 1995-09-26 Nexgen, Inc. Configurable branch prediction for a processor performing speculative execution
DE69429061T2 (de) * 1993-10-29 2002-07-18 Advanced Micro Devices Inc Superskalarmikroprozessoren
US5463745A (en) 1993-12-22 1995-10-31 Intel Corporation Methods and apparatus for determining the next instruction pointer in an out-of-order execution computer system
US5588126A (en) * 1993-12-30 1996-12-24 Intel Corporation Methods and apparatus for fordwarding buffered store data on an out-of-order execution computer system
US5537559A (en) 1994-02-08 1996-07-16 Meridian Semiconductor, Inc. Exception handling circuit and method
US5559976A (en) 1994-03-31 1996-09-24 International Business Machines Corporation System for instruction completion independent of result write-back responsive to both exception free completion of execution and completion of all logically prior instructions
US5546599A (en) 1994-03-31 1996-08-13 International Business Machines Corporation Processing system and method of operation for processing dispatched instructions with detected exceptions
TW260765B (ko) 1994-03-31 1995-10-21 Ibm
US5627981A (en) * 1994-07-01 1997-05-06 Digital Equipment Corporation Software mechanism for accurately handling exceptions generated by instructions scheduled speculatively due to branch elimination
US5689712A (en) 1994-07-27 1997-11-18 International Business Machines Corporation Profile-based optimizing postprocessors for data references
US5537620A (en) * 1994-09-16 1996-07-16 International Business Machines Corporation Redundant load elimination on optimizing compilers
JP3617686B2 (ja) 1994-09-26 2005-02-09 株式会社リコー 画像形成装置及び画像形成装置管理システム
US6216200B1 (en) 1994-10-14 2001-04-10 Mips Technologies, Inc. Address queue
US5802588A (en) * 1995-04-12 1998-09-01 Advanced Micro Devices, Inc. Load/store unit implementing non-blocking loads for a superscalar microprocessor and method of selecting loads in a non-blocking fashion from a load/store buffer
US5625835A (en) * 1995-05-10 1997-04-29 International Business Machines Corporation Method and apparatus for reordering memory operations in a superscalar or very long instruction word processor
US5694577A (en) * 1995-06-06 1997-12-02 Matsushita Electric Industrial Co., Ltd. Memory conflict buffer for achieving memory disambiguation in compile-time code schedule
US5751983A (en) * 1995-10-03 1998-05-12 Abramson; Jeffrey M. Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations
US5754812A (en) * 1995-10-06 1998-05-19 Advanced Micro Devices, Inc. Out-of-order load/store execution control
US5819056A (en) 1995-10-06 1998-10-06 Advanced Micro Devices, Inc. Instruction buffer organization method and system
US5809273A (en) 1996-01-26 1998-09-15 Advanced Micro Devices, Inc. Instruction predecode and multiple instruction decode
US6185668B1 (en) * 1995-12-21 2001-02-06 Intergraph Corporation Method and apparatus for speculative execution of instructions
US5901308A (en) * 1996-03-18 1999-05-04 Digital Equipment Corporation Software mechanism for reducing exceptions generated by speculatively scheduled instructions
US5875340A (en) * 1996-05-31 1999-02-23 Hewlett-Packard Company Optimized storage system and method for a processor that executes instructions out of order
US5860017A (en) * 1996-06-28 1999-01-12 Intel Corporation Processor and method for speculatively executing instructions from multiple instruction streams indicated by a branch instruction
US5903749A (en) * 1996-07-02 1999-05-11 Institute For The Development Of Emerging Architecture, L.L.C. Method and apparatus for implementing check instructions that allow for the reuse of memory conflict information if no memory conflict occurs
US6031992A (en) * 1996-07-05 2000-02-29 Transmeta Corporation Combining hardware and software to provide an improved microprocessor
US5832205A (en) 1996-08-20 1998-11-03 Transmeta Corporation Memory controller for a microprocessor for detecting a failure of speculation on the physical nature of a component being addressed
US5920710A (en) * 1996-11-18 1999-07-06 Advanced Micro Devices, Inc. Apparatus and method for modifying status bits in a reorder buffer with a large speculative state
US6173366B1 (en) * 1996-12-02 2001-01-09 Compaq Computer Corp. Load and store instructions which perform unpacking and packing of data bits in separate vector and integer cache storage
US5864692A (en) 1996-12-16 1999-01-26 Hewlett-Packard Company Method and apparatus for protecting memory-mapped devices from side effects of speculative instructions
US6011908A (en) * 1996-12-23 2000-01-04 Transmeta Corporation Gated store buffer for an advanced microprocessor
US5918005A (en) * 1997-03-25 1999-06-29 International Business Machines Corporation Apparatus region-based detection of interference among reordered memory operations in a processor
US5931957A (en) * 1997-03-31 1999-08-03 International Business Machines Corporation Support for out-of-order execution of loads and stores in a processor
US5790625A (en) 1997-04-14 1998-08-04 International Business Machines Corporation Mechanism for enabling an array of numerous large high speed counters
US5996060A (en) * 1997-09-25 1999-11-30 Technion Research And Development Foundation Ltd. System and method for concurrent processing
US6505296B2 (en) 1997-10-13 2003-01-07 Hewlett-Packard Company Emulated branch effected by trampoline mechanism
US5987595A (en) * 1997-11-25 1999-11-16 Intel Corporation Method and apparatus for predicting when load instructions can be executed out-of order
US6631514B1 (en) * 1998-01-06 2003-10-07 Hewlett-Packard Development, L.P. Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations
US6148394A (en) * 1998-02-10 2000-11-14 International Business Machines Corporation Apparatus and method for tracking out of order load instructions to avoid data coherency violations in a processor
US6202204B1 (en) * 1998-03-11 2001-03-13 Intel Corporation Comprehensive redundant load elimination for architectures supporting control and data speculation
US6609189B1 (en) * 1998-03-12 2003-08-19 Yale University Cycle segmented prefix circuits
US6192465B1 (en) * 1998-09-21 2001-02-20 Advanced Micro Devices, Inc. Using multiple decoders and a reorder queue to decode instructions out of order
US6163839A (en) 1998-09-30 2000-12-19 Intel Corporation Non-stalling circular counterflow pipeline processor with reorder buffer
US6463523B1 (en) * 1999-02-01 2002-10-08 Compaq Information Technologies Group, L.P. Method and apparatus for delaying the execution of dependent loads
US6189088B1 (en) * 1999-02-03 2001-02-13 International Business Machines Corporation Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11210099B2 (en) * 2015-06-26 2021-12-28 Intel Corporation Persistent commit processors, methods, systems, and instructions

Also Published As

Publication number Publication date
US20120246453A1 (en) 2012-09-27
KR20020022068A (ko) 2002-03-23
WO2000077965A2 (en) 2000-12-21
ATE441147T1 (de) 2009-09-15
EP1194855B1 (en) 2009-08-26
JP2006099800A (ja) 2006-04-13
US7089404B1 (en) 2006-08-08
DE60042824D1 (de) 2009-10-08
JP3872809B2 (ja) 2007-01-24
EP1194855A2 (en) 2002-04-10
CA2377164C (en) 2007-09-25
CN1355902A (zh) 2002-06-26
CN1202480C (zh) 2005-05-18
US9081563B2 (en) 2015-07-14
EP1194855A4 (en) 2004-11-03
JP2003502754A (ja) 2003-01-21
US8209517B1 (en) 2012-06-26
KR100758367B1 (ko) 2007-09-14
WO2000077965A3 (en) 2001-04-05
CA2377164A1 (en) 2000-12-21

Similar Documents

Publication Publication Date Title
KR100758367B1 (ko) 향상된 마이크로프로세서에서의 스케줄링을 강화시키는 방법 및 장치
JP3753743B2 (ja) 先進のプロセッサにおけるメモリ・データ・エリアシング方法および装置
US10061582B2 (en) Method for increasing the speed of speculative execution
EP0747816B1 (en) Method and system for high performance multithread operation in a data processing system
EP0686912B1 (en) Data processor with an execution unit for performing load instructions and method of operation
US4521851A (en) Central processor
US4530052A (en) Apparatus and method for a data processing unit sharing a plurality of operating systems
US6694427B1 (en) Method system and apparatus for instruction tracing with out of order processors
TWI263169B (en) Method and data processing system having an external instruction set and an internal instruction set
JP2504830Y2 (ja) デ―タ処理装置
EP0394624B1 (en) Multiple sequence processor system
EP0107449A2 (en) Computer with multiple operating systems
WO2006101572A2 (en) The generation of multiple checkpoints in a processor that supports speculative execution
WO2006016927A2 (en) Selective execution of deferred instructions
US6848044B2 (en) Circuits and methods for recovering link stack data upon branch instruction mis-speculation
US5621896A (en) Data processor with unified store queue permitting hit under miss memory accesses
US6668287B1 (en) Software direct memory access
JP2001229022A (ja) コンピュータ処理システムにおけるスタック・リファレンスのリネーム方法およびそのプログラム記憶装置
US6681321B1 (en) Method system and apparatus for instruction execution tracing with out of order processors
JP2001519955A (ja) 先進のプロセッサのための変換メモリ保護装置
JP3138259B2 (ja) カウントによる高速レジスタ・リネームのためのシステムおよび方法
EP3935491B1 (en) Instruction ordering
JP2783285B2 (ja) 情報処理装置
US8181002B1 (en) Merging checkpoints in an execute-ahead processor

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application