KR19980079691A - 데이터 처리 시스템의 자원 할당 방법 및 그 장치 - Google Patents
데이터 처리 시스템의 자원 할당 방법 및 그 장치 Download PDFInfo
- Publication number
- KR19980079691A KR19980079691A KR1019980003716A KR19980003716A KR19980079691A KR 19980079691 A KR19980079691 A KR 19980079691A KR 1019980003716 A KR1019980003716 A KR 1019980003716A KR 19980003716 A KR19980003716 A KR 19980003716A KR 19980079691 A KR19980079691 A KR 19980079691A
- Authority
- KR
- South Korea
- Prior art keywords
- instruction
- instructions
- interruptible
- dispatched
- buffer
- Prior art date
Links
- 238000012545 processing Methods 0.000 title claims abstract description 46
- 238000000034 method Methods 0.000 title claims abstract description 37
- 238000013468 resource allocation Methods 0.000 title claims 8
- 239000000872 buffer Substances 0.000 claims abstract description 102
- 230000008569 process Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 238000011084 recovery Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 239000003795 chemical substances by application Substances 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3863—Recovery, 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)
Abstract
데이터 처리 시스템(data processing system)에서 프로세서 자원(processor resources)을 할당하는 방법 및 장치에서, 처리를 위해 인스트럭션(instructions)은 디스패치(dispatch)되고 태깅(tagging)된다. 프로세서 자원은 태그(tag)된 인스트럭션에 대한 실행 결과를 얻기위해 스누핑(snooping)한다. 그러한 인스트럭션은 인터럽트(interrupt)(인스트럭션의 완료 순서를 변화시키지 않는 것 포함)를 발생시키지 않을 것이라는 판정에 따라 논리적으로 종료(finish)되고, 이전에 디스패치된 모든 인스트럭션이 종료함에 따라 완료(complete)된다.
이러한 인스트럭션에 대한 정보는 인스트럭션이 구조화된 레지스터를 종착지로 함에 따라 재명명 버퍼(rename buffer)로 입력되고, 재명명 버퍼 엔트리는 엔트리의 인스트럭션이 완료됨에 따라 해방(release)된다. 재명명 버퍼는 히스토리 버퍼(history buffer)를 포함할 수 있다. 또한, 인스트럭션에 대한 정보는 인스트럭션이 디스패치됨에 따라 완료 큐(completion queue)로 입력되고, 이러한 인스트럭션에 대한 큐 엔트리는 인스트럭션이 완료됨에 따라 해방된다.
또한, 인스트럭션은 그룹핑(grouping)되고, 하나의 그룹(group)은 단지 하나의 인터럽트 가능 인스트럭션(interruptible instruction)과 상기 인터럽트 가능 인스트럭션에 이어서 디스패치되는 인터럽트 불가 인스트럭션(noninterruptible instructions)을 포함하며 그 사이에 디스패치되는 인터럽트 가능 인스트럭션은 존재하지 않는다. 따라서, 하나의 그룹 내에는 다수의 인터럽트 불가 인스트럭션이 존재할 수 있다. 그러한 인터럽트 가능 인스트럭션은 인터럽트(interrupt)를 발생하지 않는다는 판정에 따라 논리적으로 종료되고, 이전에 디스패치된 모든 인스트럭션이 종료함에 따라 완료된다. 인터럽트 불가 인스트럭션은 관련된 인터럽트 가능 인스트럭션이 완료됨에 따라 논리적으로 종료되고 완료된다. 그 결과, 인터럽트 불가 인스트럭션은 디스패치되기 전에 완료될 수 있다.
Description
본 발명은 데이터 처리 시스템(data processing system)에 관한 것으로, 특히 수퍼스칼라(superscalar)나 파이프라인(pipeline) 실행 유닛을 가진 프로세서를 포함하는 시스템에 대한 복원 메카니즘(recovery mechanisms)에 적용되는 것이다.
**관련 특허출원에 대한 상호참증**
본 특허는 하기의 이전 출원에 관련되어 있으며, 하기의 출원은 본 출원의 양수인에 양도되고 참조로서 본 출원에서 인용된 것이다.
METHOD AND APPARATUS FOR IMPROVED RECOVERY OF PROCESSOR STATE USING HISTORY BUFFER(미국 특허출원 번호 08/729,307, 1996년 10월 15일 출원);
METHOD AND APPARATUS FOR WRITING INFORMATION TO REGISTERS IN A DATA PROCESSING SYSTEM USING A NUMBER OF REGISTERS FOR PROCESSING INSTRUCTIONS(미국 특허출원 번호 08/729,308, 1996년 10월 15일 출원);
METHOD AND APPARATUS FOR CONDENSED HISTORY BUFFER(미국 특허출원 번호 08/729,309, 1996년 10월 15일 출원).
본 특허는 하기의 이전 출원에 관련되어 있으며, 하기의 출원은 본 출원의 양수인에 양도되고 참조로서 본 출원에서 인용된 것이다.
ISSUING INSTRUCTIONS IN A PROCESSOR SUPPORTING OUT-OF-ORDER EXECUTION(미국 특허출원 번호 08/_______, 대리인 사건번호 AA9-96-048);
DISPATCHING INSTRUCTIONS IN A PROCESSOR SUPPORTING OUT-OF-ORDER EXECUTION(미국 특허출원 번호 08/_______, 대리인 사건번호 AA9-97-001);
FAST UNIFIED INTERRUPT RECOVERY, INCLUDING BRANCH RECOVERY, SUPPORTING OUT-OF-ORDER EXECUTION(미국 특허출원 번호 08/_______, 대리인 사건번호 AA9-97-087);
DATA PROCESSING SYSTEM AND METHOD FOR DETERMINING AN INSTRUCTION ORDER USING AN INSTRUCTION IDENTIFIER(미국 특허출원 번호 08/_______, 대리인 사건번호 AA9-97-022).
오늘날의 데이터 처리 시스템에서 사용되고 있는 고성능 프로세서는 수퍼스칼라 동작을 할 수 있을 뿐만 아니라, 파이프라인 요소(pipelined elements)를 포함하기도 한다. 수퍼스칼라 프로세서는 단일 처리 사이클(single processing cycle) 내에 다수의 인스트럭션(multiple instructions)을 처리할 수 있도록, 병렬 동작하는 다수의 요소를 구비하고 있다. 파이프라인닝(pipelining)은 여러 단(stage)에서 인스트럭션을 처리하며, 그로 인해 파이프라인된 단들은 동시에 다수개의 인스트럭션을 처리할 수 있게 된다.
인스트럭션 인출(fetch) 단으로 일컬어지는 전형적인 제 1 단에서, 인스트럭션은 메모리로부터 인출된다. 이어서, 디코드(decode) 단에서, 인스트럭션은 상이한 제어비트로 디코딩(decoding)되는데, 이 제어비트는 일반적으로 i) 인스트럭션에 의해 지정된 동작을 수행하는 기능유닛(functional unit)의 타입, ii) 상기 지정된 동작에 대한 소스 오퍼랜드(source operand), iii) 동작 결과에 대한 종착지 등을 나타낸다. 디스패치(dispatch) 단에서, 디코딩된 인스트럭션은 제어비트 단위로 실행 단을 갖는 유닛으로 디스패치된다. 이 단에서는 인스트럭션에 의해 지정된 동작을 처리한다. 인스트럭션에 의해 지정된 동작을 실행하는 데에는 하나 이상의 오퍼랜드를 받아들여 하나 이상의 결과를 생성하는 일이 포함된다.
인스트럭션이 원래 소정의 프로그램된 논리 순서에 따라 처리되도록 준비되어 있기는 하나, 다수의 인스트럭션을 동시에 처리하기 위해, 인스트럭션이 어떤 면에서는 상이한 순서로 처리될 수도 있다는 것을 이해해야 한다. 그러나, 인스트럭션은 상호 완전히 독립되어 있지는 않으므로 복잡해진다. 즉, 하나의 인스트럭션을 처리하는 것은 다른 인스트럭션으로부터의 결과에 의존하기도 한다. 예를 들면, 분기 인스트럭션(branch instruction)을 뒤따르는 인스트럭션의 처리는 분기 인스트럭션에 의해 선택된 분기 경로에 의존할 것이다. 다른 예를 보면, 처리 시스템 내의 소정의 메모리 요소의 내용을 판독하는 인스트럭션의 처리는 해당 메모리 요소에 그 내용을 기록하는 소정의 이전 인스트럭션의 결과에 의존할 것이다.
이러한 예들에서 제안된 바와 같이, 하나의 인스트럭션이 첫 번째 인스트럭션에 의존하고, 인스트럭션들이 동시에 처리될 경우 혹은 의존하는 인스트럭션이 첫 번째 인스트럭션 전에 처리될 경우, 첫 번째 인스트럭션에 의해 생성된 결과에 대해 가정을 하여야 한다. 프로세서가 인스트럭션의 실행을 위해 사용하는 레지스터의 내용에 의해 부분적으로라도 정의되는 프로세서의 상태(state)는 매 사이클마다 변할 수 있다. 인스트럭션을 처리하는데 사용된 가정이 당시에 틀린 것으로 증명되면, 물론 인스트럭션의 처리에 의해 생성된 결과는 거의 틀림없이 틀릴 것이므로, 프로세서 상태는 이러한 가정이 이루어진 인스트럭션에 이르기까지 알려진 정확한 결과로 복원되어야 한다.(여기서, 가정이 존재하는 인스트럭션은 인터럽트 가능 인스트럭션(interruptible instruction)이라 지칭하고, 프로세서 상태가 이전 상태로 복구될 필요를 야기시키는, 가정이 틀렸다는 판정은 인터럽션(interruption) 또는 인터럽트 포인트(interrupt point)라 지칭한다.) 틀린 가정 이외에도, 프로세서 상태의 복구를 필요로하는 그러한 인터럽션에는 다른 원인들이 있다. 일반적으로 그러한 인터럽션은 인스트럭션 실행이나, 에러나, 신호와 관련하여 프로세서의 외부에서 발생하는 이상 조건에 의해 일어난다.
완료(completion) 단은 동시에 실행되는 다수의 인스트럭션이 단일 레지스터에 결과를 저장할 경우에 동시 실행으로부터 발생하는 프로그램 순서 이슈(issues)를 처리한다. 완료 단은 또한 종착지 레지스터(destination registers)에 결과를 저장하는 인터럽트된 인스트럭션에 후속하는 인스트럭션으로부터 발생하는 이슈를 처리한다. 종래기술의 완료 단과 관련하여, 인스트럭션에 관한 정보는 전형적으로 디스패치 순서대로 완료 버퍼(또한 재순서 버퍼(reorder buffer)로 알려짐) 내에 저장되므로, 인스트럭션들은 순서외(out-of-order)로 실행된 후에 디스패치 순서대로 다시 정렬될 수 있다. 또한, 인스트럭션 실행의 결과는 일시적으로 하나 이상의 백업 버퍼(backup buffer)(또한 재명명 버퍼(rename buffer)로 알려짐)에 저장된다. 일단 실행 결과들이 이양(commit)되면, 실행 결과는 궁극적으로 완료 버퍼 내의 인스트럭션 순서에 따라 구조화된 레지스터(architected registers)에 재기록된다. 완료 버퍼 엔트리(entries)에 대응하는 실행 결과가 재명명 버퍼로부터 구조화된 레지스터에 재기록된 후에, 완료 및 재명명 버퍼 엔트리들은 해방(release)되어 후속적으로 디스패치되는 인스트럭션에 대한 정보로 채워질 수 있다.
상술한 디스패칭, 완료, 및 재기록에 관한 소정의 타이밍 양상이, 두 개의 예시적 인스트럭션에 대해서 도 1에 도시되어 있다. 예에서, 두 개의 인스트럭션은 대응하는 사이클에서 인출되고, 디코딩(decoding)되고, 디스패치된다. 이 예에서, 두 번째 인스트럭션은 그 소스 오퍼랜드에 대해서 첫 번째 인스트럭션에 의존하지 않고 두 번째 인스트럭션은 첫 번째 인스트럭션보다 신속히 실행된다고 가정한다. 그럼에도 불구하고, 두 번째 인스트럭션이 완료되기 위해서는 첫 번째 인스트럭션이 실행 및 완료되어야 한다. 그래서, 도 1은 두 번째 인스트럭션의 완료 및 재기록이 첫 번째 인스트럭션의 실행 및 완료때까지 보류됨을 보여준다. 인스트럭션 2는 사이클 3에서 실행되지만, 첫 번째 인스트럭션이 실행되기 전에 다수의 사이클이 소모된다. 이는 데이터 액세스(access), 분기 결정(resolution) 등을 위해 대기하는 것에 기인할 것이다. 이어서, 이 예의 사이클 6에서 인스트럭션 1이 완료된다. 이에 따라, 인스트럭션 2가 완료된다. 이 예에서는, 단일 사이클 내에 다수의 인스트럭션을 완료할 수 있는 머신 내에서 인스트럭션 1이 완료됨에 따라 동일한 사이클인 사이클 6에서 인스트럭션 2가 완료되는 것이 가능하기는 하지만, 인스트럭션 2는 사이클 7에서 완료되는 것으로 되어 있다. 상기 두 인스트럭션들은 각각 사이클 7과 8에서 실행의 결과를 재기록하는 것으로 되어 있다.
예에서 설명한 바와 같이, 인스트럭션을 디스패칭하고 완료하고 재기록하는 본 발명의 방법 및 장치는 선행하는 인스트럭션의 실행 및 완료를 기다리는 것에 의해 두 번째 인스트럭션에 대한 완료 및 재명명 버퍼 엔트리의 해방을 지연시키기도 한다. 이로 인해 후속 인스트럭션의 디스패칭이 지연될 수도 있다. 그러므로 인스트럭션을 처리하는 방법 및 장치를 개선할 필요가 있다.
본 발명의 목적은 인스트럭션 완료에 대한 제약조건을 완화하는 것이다.
본 발명의 또다른 목적은 인스트럭션 완료의 대기와 관련하여 구속되는 자원(resources)을 줄이는 것이다.
본 발명에 따르면, 상기한 목적과 다른 목적들은 데이터 처리 시스템 내의 프로세서 자원을 할당하는 방법 및 장치에 의해 실현된다. 인스트럭션은 처리를 위해 디스패치되고 태그(tag)된다. 프로세서 자원은 스누핑(snooping)을 통해 태그된 인스트럭션에 대한 실행 결과를 얻는다. 인스트럭션은 인터럽트(인스트럭션의 완료 순서를 변화시키지 않는 것을 포함함)를 발생시키지 않음으로써 논리적으로 종료(finished)되고, 앞서 디스패치된 모든 인스트럭션을 종료함으로써 완료(completed)된다.
다른 측면에서, 스누핑 자원은 구조화된 레지스터와, 재명명 버퍼와, 예약 스테이션(reservation station)을 포함할 수 있다. 재명명 버퍼는 히스토리 버퍼(history buffer)를 포함할 수 있다.
인스트럭션은 인터럽트가 가능한 로드 인스트럭션(load instructions)과 저장 인스트럭션(store instructions)을 포함할 수 있다. 로드 인스트럭션의 실행은 인스트럭션에 대한 오퍼랜드를 메모리로부터 구조화된 레지스터로 로드(load)하고, 히스토리 버퍼를 포함하는 재명명 버퍼에 오퍼랜드를 일시적으로 로드할 수 있다. 반면에, 저장 인스트럭션의 실행은 오퍼랜드를 메모리에 저장한다. 실시예에 따르면, 로드 인스트럭션은 오퍼랜드가 레지스터나 버퍼로 로드되도록 사용 가능하기 전에 완료될 수 있으며, 저장 인스트럭션은 오퍼랜드가 메모리에 저장되기 전에 완료될 수 있다.
또다른 측면에서, 이러한 인스트럭션에 대한 정보가 구조화된 레지스터를 종착지로 하는 인스트럭션에 따라 재명명 버퍼로 입력되고, 입력된 엔트리의 인스트럭션을 완료함에 따라 이러한 재명명 버퍼 입력이 해방된다. 재명명 버퍼는 히스토리 버퍼를 포함할 수 있다.
또다른 측면에서, 해당 인스트럭션이 디스패치된 인스트럭션들 중 선택된 인스트럭션인지의 여부에 따라 정보가 히스토리 버퍼에 입력되고, 그 결과 히스토리 버퍼 정보가 입력되지 않은 인터럽트 불가(noninterruptible) 인스트럭션의 경우에는, 구조화된 레지스터가 실행 유닛이 인스트럭션을 실행한 후에 인스트럭션에 할당된 유일한 자원이 될 수 있다.
또한, 인스트럭션에 대한 정보는 인스트럭션을 디스패칭함에 따라 완료 큐(completion queue)로 입력되고, 이러한 인스트럭션에 대한 큐 엔트리(queue entry)는 인스트럭션이 완료됨에 따라 해방된다. 완료 큐 엔트리의 해방은 인스트럭션의 결과를 자원에 기록하는 것과는 독립적이다.
또다른 측면에서, 인스트럭션이 그룹핑(grouping)되는데, 하나의 그룹은 단지 하나의 인터럽트 가능 인스트럭션 및 상기 인터럽트 가능 인스트럭션 이후 디스패치되는 다수의 인터럽트 불가 인스트럭션을 가지며, 그 사이에는 디스패치된 인터럽트 가능 인스트럭션이 존재하지 않는다. 그러므로, 하나의 그룹에는 다수의 인터럽트 불가 인스트럭션이 존재하게 된다. 인터럽트 가능 인스트럭션은 인터럽트를 발생시키지 않는다는 판정에 따라 논리적으로 종료되고, 이전에 디스패치된 모든 인스트럭션의 종료에 따라 완료된다. 인터럽트 불가 인스트럭션은 관련된 인터럽트 가능 인스트럭션이 완료됨에 따라 논리적으로 종료되고 완료되며, 이에 따라 인터럽트 불가 인스트럭션이 디스패치되기 전에 완료될 수 있게 된다.
또다른 측면에서, 인스트럭션에 대한 정보는 구조화된 레지스터를 종착지로 하는 인스트럭션에 따라 재명명 버퍼로 입력되고, 재명명 버퍼 입력은 그룹의 인터럽트 가능 인스트력션을 완료함에 따라 그룹 내의 인스트럭션에 대해 해방된다.
또다른 측면에서, 인스트럭션이 디스패칭됨에 따라 단지 인터럽트가 가능한 인스트럭션에 대해서만 정보가 완료 큐로 인가된다.(종래의 완료 큐의 소정의 기능을 제공하는 반면 압축되는, 즉, 인터럽트 가능 인스트럭션에 대해서만 엔트리를 포함하는 큐는 관련 출원에서 인터럽트 가능 인스트럭션 테이블(interruptible instruction table : IIT)이라 일컬어진다. 후속하는 상세한 설명에서는 종래의 완료 큐와 IIT 간의 차이점이 기술될 것이다. 여기에서 완료 큐라 지칭할 경우에는 일반적으로 IIT를 포함하는 것으로 이해되어야 한다.) 완료 큐 버퍼 엔트리(completion queue buffer entry)는 인터럽트 가능 인스트럭션이 완료됨에 따라 인터럽트 가능 인스트럭션에 대해 해방된다. 완료 큐로 입력되는 정보는 인터럽트 가능 인스트럭션에 대한 어드레스(address)를 포함한다. 인터럽트 가능 인스트럭션과 관련된 그룹의 인스트럭션은 인터럽트 가능 인스트럭션에 대한 완료 큐 내의 어드레스와, 인스트럭션의 인트럽션에 반응하여 재인출된다.
본 발명의 이점은 인스트럭션이 완료된 후에 실행될 수 있고, 구조화된 레지스터, 히스토리 버퍼, 예약 스테이션에 관련된 큐와 같은 프로세서 자원에 실행 결과를 기록하는 것과는 독립적으로, 인스트럭션의 완료후 완료 큐 엔트리가 할당해제될 수 있다는 것이다.
본 발명의 다른 이점은 인터럽트 불가 인스트럭션이 디스패치되기 전에 완료될 수 있다는 것이다.
본 발명의 또다른 이점은 히스토리 버퍼 엔트리가 할당되지 않은 인터럽트 불가 인스트럭션의 경우에, 구조화된 레지스터가 실행 유닛이 인스트럭션을 실행한 후에 인스트럭션에 할당된 유일한 자원이 될 수 있다는 것이다.
또다른 목적과 이점과 신규한 특성은 후속하는 설명에서 나타내어지거나 본 분야에 통상의 지식을 가진 자나 본 발명을 실시하는 자에게 자명할 것이다. 다른 실시예들은 본 발명의 기술적 사상과 범주에 속한다. 이러한 목적과 실시예는 첨부된 청구항에 의해 지적된 조합에 의해 실현될 수 있다. 본 발명은 청구항에서 정의된 바에 의해서만 한정된다.
도 1은 종래 기술에 의한 두 개의 예시적인 인스트럭션에 대한 디스패칭과, 완료와, 재기록의 타이밍을 도시한 타이밍도,
도 2는 본 발명의 바람직한 실시예에 따른 데이터 처리 시스템을 도시한 블록도,
도 3은 본 발명의 바람직한 실시예에 따른 CPU의 구성요소들을 도시한 블록도,
도 4는 본 발명에 의한 인터럽트 가능 인스트럭션 테이블의 생성을 설명한 도면,
도 5는 본 발명의 바람직한 실시예에 따라 예시적인 인스트럭션에 대한 디스패칭과, 완료와, 재기록의 타이밍을 도시한 타이밍도.
* 도면의 주요 부분에 대한 부호의 설명
200 : 데이터 처리 시스템 210 : CPU
212 : 시스템 버스 214 : RAM
216 : ROM 218 : I/O 어댑터
220 : 디스크 저장장치 222 : 사용자 인터페이스 어댑터
224 : 키보드 226 : 마우스
228 : 스피커 232 : 트랙 볼
234 : 통신 어댑터 236 : 디스플레이 어댑터
238 : 디스플레이 모니터
본 발명의 신규한 특성을 명확하게 나타내기 위하여, 후속의 논의에서 본 기술 분야의 통상의 지식을 가진 자에게는 자명한 종래의 정보 처리 시스템의 특성은 생략되거나 간단히 기술된다. 본 기술 분야의 통상의 지식을 가진 자는 수퍼스칼라 프로세서를 잘 알고 있는 것으로 가정한다. 특히, 순서내의 디스패치(in-order dispatch), 순서외의 실행, 순서내의 완료 형식으로 동작하는 프로세서는 익히 알고 있다라고 가정한다.
도 2에는 본 발명에 사용될 수 있는 데이터 처리 시스템(200)의 예가 도시되어 있다. 이 데이터 처리 시스템(200)은 PowerPC 마이크로프로세서(microprocessor)(PowerPC는 IBM사의 상표임)와 같은 중앙 처리 유닛(central processing unit : CPU)(210)을 포함하며, 이 PowerPC 마이크로프로세서는 The PowerPC Architecture : A Specification for a New Family of RISC Processors, 2nd edition, 1994, Cathy May, et al. Ed.에 의한 것으로, 이 문헌은 본 명세서에서 참조로서 인용된다. PowerPC 마이크로 프로세서의 보다 상세한 구현은 PowerPC 604 RISC Microprocessor User's Manual, 1994, IBM Corporation에 기술되어 있으며, 이 문헌은 본 명세서에서 참조로서 인용된다. 본 발명의 히스토리 버퍼(도시되지 않음)는 CPU(210)에 포함되어 있다. CPU(210)는 시스템 버스(212)를 통해 각종의 다른 구성요소들과 결합되어 있다. 시스템 버스(212)에는 판독 전용 메모리(Read Only Memory : ROM)(216)가 결합되어 있으며 데이터 처리 시스템(200)의 소정의 기본 기능을 제어하는 기본 입출력 시스템(basic input/output system : BIOS)을 포함하고 있다. 시스템 버스(212)에는 또한 랜덤 액세스 메모리(Random Access Memory : RAM)(214)와 I/O 어댑터(adapter)(218)와 통신(communications) 어댑터(234)가 결합되어 있다. I/O 어댑터(218)는 디스크 저장 장치(220)와 통신하는 SCSI(small computer system interface) 어댑터가 될 수 있다. 통신 어댑터(234)는 데이터 처리 시스템이 다른 데이터 처리 시스템과 통신할 수 있도록 버스(212)를 외부 네트워크(network)와 상호 접속시킨다. 시스템 버스(212)에는 또한 입출력 장치가 사용자 인터페이스 어댑터(user interface adapter)(222) 및 디스플레이 어댑터(display adapter)(236)를 통해 시스템 버스(212)에 접속되어 있다. 키보드(keyboard)(224)와, 트랙 볼(track ball)(232)과, 마우스(mouse)(226)와, 스피커(speaker)(228)가 모두 사용자 인터페이스 어댑터(222)를 통해 시스템 버스(212)에 상호 접속되어 있다. 디스플레이 모니터(monitor)(238)는 디스플레이 어댑터(236)에 의해 시스템 버스(212)에 접속된다. 이러한 방법으로, 사용자는 키보드(224)나 트랙 볼(232)이나 마우스(226)를 통해 시스템에 정보를 입력할 수 있고, 스피커(228)와 디스플레이 모니터(238)를 통해 시스템으로부터 출력을 받을 수 있다. 추가적으로, AIX(AIX는 IBM사의 상표임)와 같은 오퍼레이팅(operating) 시스템이 도 2에 도시된 다양한 구성요소의 기능을 조정하기 위해 사용된다.
CPU(또는 프로세서)(210)는 다양한 레지스터와 버퍼와 메모리와 집적회로로 형성된 다른 유닛을 포함하며, RISC(reduced instruction set computing) 기법에 따라 동작한다. CPU(210)는 소정의 경우에 내부 클럭(도시 안됨)에 동기된 사이클에 따라 동작한다.
이하에서는 인스트럭션의 잠정적 실행(speculative execution)에 의해 발생하는 인터럽션에 중점을 둔다. 그러나, 앞서 언급한 바와 같이, 인터럽션은 인스트럭션의 실행이나, 에러나, 신호와 관련하여 프로세서(210)의 외부에서 발생하는 이상 조건에 의해서도 발생할 수 있다. 예를 들면, 이러한 인터럽션은 (1) 불법적(illegal)이거나 우선적(privileged)인 인스트럭션을 실행하려고 시도하거나, (2) 유효하지 않은 형태를 갖는 인스트럭션이나, 시스템 구조에서는 선택사양적이지만 특정 시스템에서 구현되지 않은 인스트럭션, 시스템 콜(System Call), 트랩(Trap) 인스트럭션을 실행하거나, (3) 사용 불가능하거나 시스템 소프트웨어의 도움을 필요로 하는 부동 소수점(floating-point) 인스트럭션을 실행하거나, (4) 유효하지 않은 동작, 영 나눔(zero divide), 오버플로우(overflow), 언더플로우(underflow) 등에 기인한 부동 소수점 예외(exception)를 발생시키는 부동 소수점 인스트럭션을 실행하거나, (5) RAM(214) 또는 디스크(220)를 포함하여, 사용 불가능한 저장 영역(storage location)을 액세스하려고 시도하거나, (6) RAM(214) 또는 디스크(220)를 포함하여, 부적절한 유효 어드레스 정렬(invalid effective address alignment)로 저장장치를 액세스하려고 시도하거나, (7) 프로세서(210)에 직접접속된 장치나 버스(212)를 통해 프로세서(210)에 접속된 시스템(200) 내의 다른 장치로부터의 시스템 리셋(System Reset)이나 머신 체크 신호(Machine Check signal)(도시되지 않음)에 의해 발생할 수 있다. 이러한 조건은 앞서 언급한 참조문헌 The PowerPC Architecture : A Specification for a New Family of RISC Processors와 PowerPC 604 RISC Microprocessor User's Manual에 더 자세히 논의되어 있다.
도 3에는 본 발명의 바람직한 실시예에 의한 CPU(210)의 특정 형태와 인터럽트 가능 인스트럭션 테이블(IIT)(302)(또는 인터럽트 스택(interrupt stack)으로 일컬어짐)이 도시되어 있다. (여기서, 번호 붙여진 구성요소는 해당 요소가 소개된 도면에 의해 번호가 붙여진 것이고 이어지는 도면들을 통해서도 그 번호로 불려진다는 것을 주지바람.) IIT는 종래의 완료 버퍼(completion buffer)의 소정의 기능을 제공하므로, IIT와 완료 버퍼는 비록 상호간에 상당한 차이점을 가지고 있기는 하나 유사점도 가지고 있다.
인출 유닛(도시되지 않음)은 인스트럭션의 정상 순서 또는 순서에 조건 분기 인스트럭션이 포함된 경우에는 예측된 순서에 기초해서 인스트럭션 캐쉬(cache)(304)로부터 인스트럭션을 인스트럭션 큐(306)로 인출한다. 디코더 유닛(decoder unit)(도시되지 않음)은 인스트럭션을 디코딩하고, 디스패치 유닛(도시되지 않음)은 디코딩된 인스트럭션을 실행 유닛과 관련된 예약 스테이션(RES)(324 내지 334)을 통해 적당한 실행 유닛(308 내지 318)(또는 기능 유닛으로 일컬어짐)으로 디스패치한다. (연관된 출원 중 하나 이상에서, 예약 스테이션으로 디스패치된 정보는 선 실행 큐(pre-execution queue)나 저장 선 실행 큐(store pre-execution queue)에 저장되는 것으로 기술되어 있다. 이 경우, 예약 스테이션은 큐와 송출 로직(issue logic)을 포함한다.)
도 4에는 발명의 실시예의 여러 측면을 설명할 수 있도록 일련의 인스트럭션 Ld, Add, Cmp이 도시되어 있으며, 여기에는 디스패치된 인스트럭션에 관련된 식별자(identifiers)를 할당하고 디스패치된 인스트럭션에 대해 IIT(302) 내에 엔트리를 생성하는 것이 포함된다.
디스패치되는 것과 관련하여, 하나의 인스트럭션에 하나의 인스트럭션 종착지 식별자(instruction target identifier : TID)가 할당된다. 이 인스트럭션 종착지 식별자는 때때로 트랜잭션 식별자(transation identifier)라 일컬어진다. TID는 인스트럭션이 디스패치되는 순서에 대해 수적으로 단조(monotonic)로우므로, 인스트럭션이 디스패치되는 상대적 순서는 인스트럭션에 할당된 TID로부터 추론될 수 있다. TID와 인스트럭션 간의 이러한 관련성의 측면은 인터럽트의 경우에 프로세서 상태를 복원하는데 유용하고, 완료 버퍼의 기능 중의 하나 즉, 인스트럭션의 순서를 식별하는 기능을 대체한다. 프로세서 상태를 복원하는 데에 TID를 이용하는 하나 이상의 실시예가 위에서 교차 참조된 하나 이상의 관련 출원에서 기술되어 있다.
도 4에 설명된 예에서, 인스트럭션은 상부로부터 하부로 도시된 Ld, Add, Add, Cmp 등의 순서로 디스패치된다. 따라서, TID는 표시된 바와 같이 할당되고, 첫 번째로 디스패치된 인스트럭션(Ld 인스트럭션)은 순서에서 최하위 TID 값, TID 1으로 할당되고, 두 번째로 디스패치된 인스트럭션은 다음의 상대적으로 높은 TID 값, TID 2으로 할당된다.
인스트럭션이 하나 보다 많은 구조화된 레지스터를 종착지로 하면 하나 보다 많은 TID가 인스트럭션에 할당된다. 하나의 구조화된 레지스터를 종착지로 하는 각각의 인스트럭션에 대해서, 인스트럭션 각각에 할당된 하나 이상의 TID는 종착지로 된 레지스터 중의 하나에 대응한다. (여기서 사용된 용어법에 따라, 어떤 인스트럭션이 레지스터의 내용에 영향을 미치는 동작을 실행할 때, 그 동작은 해당 레지스트를 종착지로 한다(target)라고 하고, 인스트럭션은 종착지로 하는 인스트럭션(targeting instruction)이라 하며, 해당 레지스터는 종착지 레지스터(target register) 또는 종착지로 된 레지스터(targeted register)라 한다. 예를 들면, 인스트럭션 ld r3, ...는 레지스터 r3를 종착지로 하고, r3는 인스트럭션 ld r3, ...에 대한 종착지 레지스터가 된다.)
TID, 인스트럭션, 종착지로 된 레지스터들 간에 유일한 대응성이 존재한다는 점은, 인스트럭션의 실행이 소스 오퍼랜드로서 이전 인스트럭션의 실행으로부터 생성된 결과를 필요로 할 경우에, 실행을 위해 인스트럭션을 송출하는 것과 관련된 스누핑(snooping)을 가능케하는 데에 유용하다. 또한 이러한 대응성으로 인해, 실행 결과의 재기록을 정렬시키는 데에 완료 버퍼와 포인터(pointer)를 사용하는 종래의 방법의 측면을 상기의 스누핑으로서 대체할 수 있게 된다.
이러한 정보 흐름과 스누핑의 여러 가지 상세한 설명은 상기 교차 참조된 관련 특허 출원에 기술되어 있으나, 본 발명에 특히 관련된 소정의 부분은 여기서도 새롭고 자명하지 않은 측면과 더불어 반복된다.
도 3을 다시 참조하면, 인스트럭션의 디스패치시, 인스트럭션에 관련된 정보 패키지(package)가 생성되어 IIT(302)와 같은 다양한 자원과, 히스토리 버퍼(340), 구조화된 레지스터 파일(342), 예약 스테이션(324) 등과 같은 다른 자원으로 보내진다. 이 정보는 자원과 인스트럭션에 따라 변화한다. 그러나, 이러한 정보의 공통적인 특성은 기능적 유닛 버스(308버스 내지 318버스)로 결과를 방송(broadcast)한다는 것과, 히스토리 버퍼(340), 레지스터(342), IIT(302), 예약 스테이션(324) 등과 같이 자원에 의한 버스로의 스누핑을 촉진하는 TID가 존재한다는 것이다.
여기에서 사용된 용어처럼, 히스토리 버퍼는 일종의 재명명 버퍼임을 이해해야 한다. 여기에서 사용된 용어법에서, 재명명 버퍼는 구조화된 레지스터를 목적으로 하는 오퍼랜드를 저장하기 위한 것이다. 히스토리 버퍼라는 용어가 구조화된 레지스터가 보다 최근에 디스패치된 인스트럭션에 대한 결과를 포함하고 있음을 암시하는 반면에, 재명명버퍼는 보다 초기에 디스패치된 인스트럭션에 대한 결과를 보유하고 있다. 즉, 히스토리 버퍼라는 용어의 사용은 대응하는 구조화된 레지스터가 프로세서의 현재 상태나 아직 이양되지 않은 프로세서의 미래 상태에 대한 정보를 포함하고 있는 반면, 버퍼는 현재나 과거 상태에 대한 정보를 포함하고 있다는 것을 의미한다. 이것은 재명명 버퍼가 미래 상태에 대한 정보를 포함하는 반면, 구조화된 레지스터는 현재 이양된 상태에 대한 정보를 포함하고 있는 대안적 실시예와는 대조된다. 여기서 기술한 실시예는 히스토리 버퍼에 관해 설명하고 있으나, 여기에 개시된 몇몇 측면은 대안적으로 재명명 버퍼를 응용하는 것에 대해서도 적용가능하다는 것이 컴퓨터 구조 분야에서 통상의 지식을 가진 자에 의해서 이해되어야만 한다.
인스트럭션들은 op 코드에 따라 적절한 실행 유닛(도 3의 308 내지 318을 참조)으로 디스패치된다. 예를 들면, 분기 인스트럭션은 분기 유닛(308)으로 디스패치되고, 저장 인스트럭션은 저장 유닛(316)으로 디스패치되고, 로드 인스트럭션을 포함하는 고정 소수점 인스트럭션은 클러스터(cluster) 유닛(314)으로 디스패치된다. 디스패칭과 관련하여, 실행 유닛과 관련된 예약 스테이션으로 정보 패키지가 즉시 전달된다. 이 정보는 op 코드와, 인스트럭션의 TID 번호와, 적용가능하다면 인스트럭션에 대한 소스 오퍼랜드를 생성하기 이전에 디스패치된 인스트럭션들의 TID 번호들을 포함한다. 인스트럭션이 구조화된 레지스터를 종착지로 하는 경우에는 인스트럭션의 TID를 포함하는 유사한 정보가 구조화된 레지스터 파일(342)로 즉시 보내지고, 인스트럭션이 구조화된 레지스터를 종착지로 하는 특정한 경우에는 히스토리 버퍼(340)로 보내진다.
인스트럭션이 실행됨에 따라, 그 결과는 TID와 함께 실행 유닛 버스로 방송된다. 이 결과(이것은 부분적이나마 인스트럭션 TID를 보유한 자원에 의해 나타내어질 것이다)를 기다리는 임의의 자원은 실행 유닛 버스(318버스 등) 상에서 필요한 결과를 스누핑할 것이다. 따라서, 실행결과는 단순히 방송되며, 구조화된 레지스터(342)가 그러한 결과를 생성하기 위해 실행된 인스트럭션에 대한 TID를 가지면 이 레지스터에 의해 판독될 것이다. 마찬가지로, 결과는 예약 스테이션(324)이 TID를 포함하면 이 스테이션(324) 등에 의해 스누핑되며, 예약 스테이션이 실행을 위해 송출될 인스트럭션을 보유하고, 보유된 인스트럭션이 소스 오퍼랜드를 위해 이 결과를 필요로 하는 경우 이와 같이 될 것이다. 그리고, 그 결과는 히스토리 버퍼(340)가 TID를 포함하는 등의 경우라면 히스토리 버퍼에 의해 스누핑될 것이다.
이러한 구조는 상당히 많은 것을 암시하고 있다. 프로세서의 이양된 상태가 구조화된 레지스터에 필수적으로 존재하는 것은 아니라는 것이 하나의 중요한 점이다. 또한, 재기록은 완료 버퍼에 의해 통제되지 않는다. 본 발명의 구조에 따르면, 비록 IIT가 재기록을 제어하지 않더라도 그것은 상술한 바와 같이 종래의 완료 버퍼의 기능들을 제공한다. 예를 들면, IIT는 인터럽트의 경우에 인스트럭션 어드레스를 보유한다. 또한, IIT는 TID/GID 연합(association)과 HB 엔트리의 해방에 있어서의 게이팅 효과(gating effect)를 추적하는 것과 관련하여 프로세서에 의해 이양된 상태를 제어한다.
도 4 에는 IIT(302)로의 정보 전송이나 IIT(302) 내에서의 정보의 생성에 관해 개념적으로 도시되어 있으며, 도면에서 첫 번째, 두 번째, 및 세 번째 엔트리는 디스패치된 첫 번째, 다섯 번째, 및 일곱 번째 인스트럭션 ― 도 4에 도시된 인터럽트 가능 인스트럭션 ― 에 대한 정보를 받아들이는 것으로 도시되어 있다.
IIT는 선입선출(first-in-first-out) 순서화 방식을 갖는 큐로서 구현된다. IIT로 입력되는 인스트럭션에 대한 TID와 관련하여, 디스패치의 순서를 나타내는 이 인스트럭션 엔트리에 대해 그룹 식별자(group identifier : GID)가 할당되는데, 상기 인스트럭션 엔트리는 IIT 내의 인터럽트 가능 인스트럭션 엔트리의 순서에 대응한다. TID와 GID는 인스트럭션에 대한 op 코드 옆에 도 4에 개념적으로 도시되어 있다.
디스패치된 인터럽트 가능 인스트럭션 GID는 포인터 DGID으로서 도 3에 도시된 디스패치 GID 포인터에 의해 추적된다. 기술된 바와 같이, 인스트럭션은 순서대로 디스패치되고 완료되며, IIT(302)는 선입 선출 큐로서 구현된다. 그러므로, IIT 내의 버퍼 영역는 순서대로 정렬되고, 각각의 디스패치된 인터럽트 가능 인스트럭션은 바로 직전에 디스패치된 인터럽트 가능 인스트럭션을 뒤따라 다음 순서에 해당하는 버퍼 영역로 입력된다. (물론, 엔트리의 시퀀스가 랩 어라운드(wrap around)되어야 하는 버퍼의 각 끝에 위치한 엔트리에서 송출이 일어난다. 이러한 송출이 가능하게 되는 FIFO 큐의 구현은 해당 분야에 통상의 지식을 가진 자에 의해 이해될 것이다.) 마찬가지로, 각각의 연속적인 디스패치된 인터럽트 가능 인스트럭션으로 DGID가 갱신됨으로써, DGID가 다음의 연속적인 IIT 위치를 지정하도록 하고 또한, 지정된 위치에 대응하는 인스트럭션에 할당된 GID 값을 나타내도록 한다.
인터럽트 불가 인스트럭션은 IIT 내에 엔트리를 갖지는 않지만 GID와 연관성을 가지게 된다. 즉, 인터럽트 불가 인스트럭션이 디스패치될 때, 바로 직전에 디스패치된 인터럽트 가능 인스트럭션의 GID는 인터럽트 불가 인스트럭션과 관련될 것이다. 예를 들면, 도 4에 도시된 인터럽트 가능 인스트럭션은 첫 번째와 다섯 번째와 일곱 번째 디스패치된 인스트럭션 Ld와 Br과 St이다. 따라서, GID 1은 첫 번째 내지 네 번째 디스패치된 인스트럭션과 관련될 것이고, GID 2는 다섯 번째와 여섯 번째 디스패치된 인스트럭션과 관련될 것이고, GID 3은 일곱 번째 디스패치된 인스트럭션과 관련될 것이다. 인터럽트 가능 인스트럭션과 연속하는 인터럽트 불가 인스트럭션 간의 관련의 측면은 예를 들어, 상기한 하나 이상의 교차 참조된 특허 출원에 기재된 바와 같이, 히스토리 버퍼 내에서 추적된다.
도 3을 다시 참조하면, IIT(302)가 추가적으로 설명되어 있다. 디스패치된 인스트럭션에 대한 IIT 엔트리의 생성은 이 인스트럭션에 대한 TID 번호를 입력하는 것을 포함한다. 상기 엔트리의 생성은 또한, 해당 위치에 대한 하나의 제어비트인 유효비트 혹은 V 비트를 세트함으로써 버퍼 영역가 할당되었으므로 이제는 유효하다는 것을 나타내는 단계와, 종료비트 혹은 F 비트로서 도시된 또다른 제어비트를 세트함으로써 엔트리가 아직 종료 되지 않은 인스트럭션과 관련되어 있다는 것을 나타내는 단계에 의해 IIT 내의 버퍼 영역 중의 하나를 할당하는 것을 포함한다. 또한, 엔트리를 생성하는 단계의 일부로서, 디스패치된 인스트럭션의 어드레스가 도 3 내의 필드 I Addr에 도시된 바와 같이, 할당된 버퍼 영역로 입력된다. 이 어드레스는 엔트리에 포함되고, 그에 따라 인스트럭션은 인터럽트의 경우에 해당 어드레스로부터 재인출될 수 있다.
인스트럭션의 op 코드에 의해 지정된 모든 동작이 실행되기 전에, 유닛(308 내지 318) 중 한 유닛과 같이 인스트럭션의 할당된 실행 유닛은 인스트럭션에 관련된 인터럽트 상태를 점검하고 점검 결과를 나타내는 종료 보고(report)를 IIT(302)에 전달하며, 이에 따라 인터럽트 상태로 될 수 있다. 예를 들면, 로드 또는 저장 인스트럭션에 대해, 클러스터 유닛(314)이나 저장 유닛(316) 점검은 인스트럭션 소스나 종착 오퍼랜드에 의해 지정된 메모리 영역을 번역(translate)하는 것은 포함하지만, 데이터가 실제적으로 저장장치(storage)로부터 반송되거나 저장부에 기록되는 것을 기다리는 것은 포함하지 않을 것이다. 지정된 메모리 영역가 정의되어 있지 않거나 에러가 있는 경우라면, 인터럽트가 발생할 것이다. 조건 분기 인스트럭션(conditional branch instruction)에 대해, 분기 유닛(308)을 점검하는 것은 분기 경로를 결정하고 틀린 분기 경로 예측이 발생했는 지를 결정하는 것을 포함할 것이며, 틀린 분기 경로가 예측된 경우에는 인터럽트가 발생될 것이고 그 결과 이전에 잠정적으로 실행된 틀린 분기 경로에서의 인스트럭션은 취소될 것이다.
IIT(302)는 인스트럭션에 대한 종료 보고를 받아들여 그것을 인스트럭션의 IIT 엔트리에 대한 예외 필드(exception field)에 입력한다. 실시예에서, 예외 필드는 5 비트 필드이다. 점검 과정에서 검출된 바와 같이, 호출된 인터럽션이 없으면, 실행 유닛에 의해 반환된 종료 보고는 0을 나타낸다. 종료 보고의 다른 예들은 데이터 저장 인터럽트에 대해 10000을, 잘못 예측된 분기 경로에 대해 1을, 머신 점검 인터럽션에 대해 10을, 부동 소수점 예외(언더플로우, 오버플로우 등)에 대해 1110을, 우선적인 인스트럭션 예외에 대해 100을 포함한다.
IIT로 전송되는 인스트럭션에 대한 종료 보고에 따라, 인스트럭션에 대한 F 비트가 세트되어 인스트럭션이 종료되었다는 것을 나타낸다. 따라서, 인스트럭션은 인스트럭션 op 코드에 의해 지정된 모든 동작들을 실행하는 것과는 독립적으로 종료할 것이다. 왜냐하면, 상기 인스트럭션은 모든 지정된 동작이 실행되기 전에 발생하는 점검에 따라 종료하기 때문이다.
또다른 포인터, 즉 포인터 CGID 로서 도 3에 도시된 완료 GID 포인터는 완료된 IIT 내의 가장 최근에 디스패치된 인스트럭션을 가리킨다. 인터럽트 가능 인스트럭션의 완료에 대한 조건들은 1) 인스트럭션에 대한 F 비트에 의해 나타내어지는 바와 같이 인스트럭션 자체가 종료되는 것과, 2) 인스트럭션 각각의 F 비트들 각각 또는 IIT 내의 인스트럭션의 부재(인스트럭션들이 종료되었을 뿐만 아니라 완료되었음을 나타내는 것으로, 뒤에 설명되는 IIT 내의 엔트리의 할당 해제에 대한 논의에 의해 이해될 것이다)에 의해 나타내어지는 바와 같이 모든 이전에 디스패치된 인터럽트 가능 인스트럭션이 종료되는 것이다. 따라서, 인터럽트 가능 인스트럭션은 종료될 뿐만 아니라, 그 실행에 독립적으로 완료되는 것으로, 즉, 인터럽트 가능 인스트럭션은 실행 유닛이 인스트럭션 op 코드에 의해 지정된 동작을 실행하기 이전에 생성된 종료 보고에 따라 완료된다.
CGID 포인터는 가장 최근에 완료된 인스트럭션에 대한 IIT 내의 엔트리를 가리키며, 다음과 같이 갱신된다. 클럭 사이클과 같은 인터벌(intervals)에서, 현재 인스트럭션(즉, CGID 포인터에 의해 현재 가리켜진 것을 뒤따르는 다음 엔트리에 대응하는 인스트럭션)의 F 비트는 그것이 유효하다는 것을 나타내는 V 비트가 세팅되면 점검된다. F 비트가 현재 인스트럭션이 종료되었다는 것을 나타내면 인스트럭션은 완료된 것으로 여겨진다. 현재 인스트럭션이 완료됨에 따라, 인스트럭션에 대한 IIT 엔트리는, 엔트리에 대한 IIT 위치의 V 비트를 해당 위치가 더 이상 유효한 엔트리를 갖지 않는다는 것을 나타내도록 리셋시킴으로써, 할당 해제된다. 또한, 현재 인스트럭션의 완료를 결정함에 따라, 곧이어 디스패치된 인스트럭션에 대응하는 IIT 내의 다음 유효 엔트리도 해당 F 비트를 점검함으로써 동일한 처리 사이클 동안에 완료여부가 점검된다. 상기 엔트리도 완료되면, 포인터는 엔트리로 진행하고, 다음 유효 엔트리의 완료여부가 계속적으로 점검되는데, 이러한 점검 동작은 포인트가 시퀀스 내의 완료된 마지막 엔트리까지 진행할 때까지 이어진다.
이러한 완료 추적(completion tracking)의 측면은 다수개의 인스트럭션에 대한 완료 시퀀스를 나타내는 도 5를 참조하여 더욱 상세히 설명된다. 도시된 첫 번째 세 사이클 내에 모두 인출되고 디코딩되고 디스패치되는 세 개의 예시적인 인스트럭션이 도시되어 있다. 예에서, 인스트럭션 1, 2, 3은 사이클 번호 4, 3, 6에서 각각 종료한다. 인스트럭션 2는 사이클 3에서 종료했지만, 인스트럭션 1이 종료할 때까지 완료될 수 없고, 그에 따라 인스트럭션 2는 인스트럭션 1이 종료하는 사이클 4가 될 때까지 완료될 수 없다. 사이클 4에서, (이 예에서 초기에 인스트럭션 1에 대한 IIT 엔트리 앞을 가리키는) CGID는 인스트럭션 1이 완료됨에 따라 증가함으로써 인스트럭션 1을 가리키게 된다. 인스트럭션 2도 사이클 4에 이르러서는 종료되었기 때문에, 인스트럭션 2에 대한 F 비트를 점검함에 따라, CGID는 인스트럭션 2를 가리키도록 다시 증가될 것이다. 사이클 4 동안에도 이런 일이 일어날 수 있다. 인스트럭션 3은 사이클 4까지 종료되지 않았기 때문에, CGID 포인터는 인스트럭션 3이 종료하는 후속 사이클까지 인스트럭션 2를 지나 진행하지 못할 것이다. 예에서, 인스트럭션 3이 종료되고, 완료되고 실행되었을 때, 사이클 6에서 이러한 현상이 발생한다.
이 예에서는 또한 인스트럭션들의 완료가 그들의 실행 이전 ― 즉, 그들의 지정된 동작이 그들이 송출되는 실행 유닛 내에서 실행되기 이전 ― 에 발생할 수 있다는 것을 설명한다.
여기에서 주장한 바와 같이 본 실시예의 구조와 과정에 따르면, 완료되거나 취소된 인스트럭션들에 대한 프로세서의 이전 상태를 역추적(backtracking)하기 위한 자원을 유지할 필요가 없다는 것이 이해되어야 한다. 이러한 자원에는 완료되거나 취소된 관련된 인터럽트 가능 인스트럭션과 동일한 GID로 디스패치된 인스트럭션에 대한 히스토리 버퍼 엔트리가 포함된다. 그러므로, 인스트럭션이 완료됨에 따라, 동일한 GID를 갖는 인스트럭션과 인터럽트 불가 인스트럭션에 대한 임의의 히스토리 버퍼 엔트리들은 퇴출(retire)된다(즉, 해방된다, 즉, 할당해제된다). 만약 인터럽트 가능 인스트럭션이 완료되는 것이 아니라 취소된다면, 완료의 경우에는 인스트럭션과 대응하는 GID를 갖는 후속 인스트럭션에 대한 히스토리 버퍼 엔트리들은 할당 해제되지만, 추가적 엔트리 ― 즉, 취소된 인스트럭션을 뒤따르지만 취소된 인스트럭션과 동일한 GID를 가지지는 않는 인스트럭션들에 대한 엔트리 ― 도 할당 해제되어야만 한다. 히스토리 버퍼 할당 해제에 대한 상세한 설명은 상기 하나 이상의 교차 참조된 출원에 기재되어 있다.
첫 번째 인터럽트 가능 인스트럭션 이후이지만 다른 인터럽트 가능 인스트럭션 이전에 디스패치된 인터럽트 불가 인스트럭션들은 첫 번째 인터럽트 가능 인스트럭션과 동일한 디스패치 그룹에 속하므로 즉, 첫 번째 인터럽트 가능 인스트럭션의 GID와 관련되어 있으므로, 그들은 또한 첫 번째 인트럽트 가능 인스트럭션이 완료될 때에 완료되는 것으로 간주된다. 그래서, 인터럽트 불가 인스트럭션 또한 그들의 실행과는 독립적으로 완료된다. 즉, 그들은 실행 이전에 발생할 수 있는 점검에 따라 완료된다.
인터럽트 불가 인스트럭션의 완료는 그들 자체의 디스패치에 앞서 디스패치된 디스패치 그룹 내의 인터럽트 가능 인스트럭션의 완료에만 의존하므로, 인터럽트 불가 인스트럭션은 디스패치되기 이전에라도 완료될 수 있고 그들의 히스토리 버퍼 엔트리는 해방될 수 있다. 더욱이, 선택된 예에서, 인스트럭션이 하나 이상의 구조화된 레지스터를 종착지로 할 경우에 히스토리 버퍼 엔트리는 인터럽트 불가 인스트럭션에 대해서는 생성되지 않는다.(상세한 설명은 상기 하나 이상의 교차 참조된 특허 출원에 기재되어 있다.) 그러므로, IIT 엔트리는 인터럽트 불가 인스트럭션에 대해서는 전혀 생성되지 않기 때문에, 선택된 히스토리 버퍼가 없는 경우에는 인터럽트 불가 인스트럭션은 IIT나 히스토리 버퍼 자원을 사용하지 않을 것이다. 또한, 본 발명의 실시예에 따르면, 선택된 인터럽트 불가 인스트럭션에 대해서 실행 유닛은 인스트럭션에 대한 결과를 생성하고 즉시 영향받은 구조화된 레지스터에 대한 결과를 방송하기 때문에, 일단 실행 유닛이 선택된 인터럽트 불가 인스트럭션에 대해 해방되면, 영향받은 구조화된 레지스터 혹은 레지스터들 만이 인스트럭션에 할당될 것이다. 그리고, 물론, 구조화된 레지스터 혹은 레지스터들은 동일한 레지스터 혹은 레지스터들을 종착지로 하는 다음으로 디스패치된 인스트럭션의 방송된 실행 결과를 레지스터가 스누핑함에 따라 해방될 것이다.
인스트럭션 처리량이, 적어도 얼마간은 완료 버퍼의 크기에 의해 한정될 수 밖에 없다는 것은 종래 기술에서는 일반적인 사실이다. 본 발명에 의하면, IIT 엔트리의 선택적 생성과 완료에 따라 IIT와 히스토리 버퍼 엔트리를 할당 해제하는 것은 보다 적은 자원을 사용할 뿐만 아니라, 할당해제시 재기록을 기다려야 하는 종래 기술에서 유사한 자원이 해방될 때에 비해 보다 빨리 해당 자원을 해방시킨다. 상기 이유로, 본 발명에 의해, 주어진 크기의 IIT에 대해 동시에 보다 많은 인스트럭션을 실행할 수 있게 된다.
본 발명은 바람직한 실시예를 참조하여 도시되고 기술되었지만, 본 기술 분야에 통상의 지식을 가진 자라면, 본 발명의 정신 및 범주를 벗어나지 않은 범위 내에서 형태 및 세부사항에 있어 여러 가지 변형을 가할 수 있음을 이해할 것이다.
본 발명은, 인스트럭션이 완료된 후에 실행될 수 있고, 구조화된 레지스터, 히스토리 버퍼, 예약 스테이션에 관련된 큐와 같은 프로세서 자원에 실행 결과를 기록하는 것과는 독립적으로, 인스트럭션의 완료후 완료 큐 엔트리가 할당해제될 수 있고, 인터럽트 불가 인스트럭션이 디스패치되기 전에 완료될 수 있으며, 히스토리 버퍼 엔트리가 할당되지 않은 인터럽트 불가 인스트럭션의 경우에, 구조화된 레지스터가 실행 유닛이 인스트럭션을 실행한 후에 인스트럭션에 할당된 유일한 자원이 될 수 있다는 것이다.
Claims (33)
- 데이터 처리 시스템(data processing system)에서 인스트럭션 처리(instruction processing)에 자원(resources)을 할당하는 방법에 있어서,① 처리를 위해 디스패치(dispatch)된 인스트럭션을 태깅(tagging)하는 단계와,② 태크된 인스트럭션에 대한 실행 결과를 획득하기 위해 프로세서 자원에 의해 스누핑(snooping)하는 단계와,③ 상기 인스트럭션이 인터럽트(interrupt)를 일으키지 않을 것이라는 판단에 따라 상기 인스트럭션을 종료(finish)하고, 이전에 디스패치된 모든 인스트럭션이 종료됨에 따라 상기 인스트럭션을 완료(complete)함으로써, 상기 인스트럭션이 그 실행 이전에 완료될 수 있도록 하는 단계를 포함하는 데이터 처리 시스템의 자원 할당 방법.
- 제 1 항에 있어서,상기 스누핑 자원은 구조화된 레지스터(architected register)를 포함하는 데이터 처리 시스템의 자원 할당 방법.
- 제 1 항에 있어서, 상기 스누핑 자원은 재명명 버퍼(rename buffer)를 포함하는 데이터 처리 시스템의 자원 할당 방법.
- 제 3 항에 있어서, 상기 재명명 버퍼는 히스토리 버퍼(history buffer)인 데이터 시스템의 자원 할당 방법.
- 제 4 항에 있어서, 상기 스누핑 자원은 예약 스테이션(reservation station)을 포함하는 데이터 시스템의 자원 할당 방법.
- 제 1 항에 있어서, 상기 인스트럭션은 로드 인스트럭션(load instruction)을 포함하며, 상기 로드 인스트럭션의 실행은 인스트럭션에 대한 오퍼랜드(operand)를 레지스터나 버퍼에 로드(load)하고, 상기 로드 인스트럭션은 오퍼랜드가 레지스터나 버퍼로 로딩되기 전에 완료될 수 있는 데이터 처리 시스템의 자원 할당 방법.
- 제 1 항에 있어서, 상기 인스트럭션은 저장 인스트럭션(store instruction)을 포함하며, 상기 저장 인스트럭션의 실행은 인스트럭션에 대한 오퍼랜드를 메모리에 저장하고, 상기 저장 인스트럭션은 오퍼랜드가 메모리에 저장되도록 사용될 수 있기 전에 완료될 수 있는 데이터 처리 시스템의 자원 할당 방법.
- 제 1 항에 있어서, 상기 인스트럭션이 구조화된 레지스터를 종착지로 함에 따라 상기 인스트럭션에 대한 정보를 재명명 버퍼로 입력하는 단계와, 엔트리(entry)의 인스트럭션을 완료함에 따라 상기 재명명 버퍼 엔트리(rename buffer entry)를 해방(release)하는 단계를 포함하는 데이터 시스템의 자원 할당 방법.
- 제 8 항에 있어서,상기 재명명 버퍼는 히스토리 버퍼를 포함하고, 히스토리 버퍼로 정보를 입력하는 단계는 상기 인스트럭션이 디스패치된 인스트럭션 중에서 선택된 인스트럭션인 지에 따라 이루어짐으로써, 히스토리 버퍼 정보가 인가되지 않은 인터럽트 불가 인스트럭션(noninterruptible instruction)의 경우, 실행 유닛(execution unit)이 상기 인스트럭션을 실행한 후에 상기 인스트럭션에 할당된 유일한 자원은 구조화된 레지스터가 되는 데이터 처리 시스템의 자원 할당 방법.
- 제 1 항에 있어서, 상기 인스트럭션을 디스패치함으로써 완료 큐(completion queue)에 상기 인스트럭션에 대한 정보를 입력하는 단계와, 상기 인스트럭션이 완료됨에 따라 인스트럭션의 완료 큐 엔트리를 해방하는 단계를 포함하는 데이터 처리 시스템의 자원 할당 방법.
- 제 10 항에 있어서, 상기 완료 큐 엔트리의 해방은 상기 인스트럭션의 결과를 자원에 기록하는 것과는 독립적인 데이터 처리 시스템의 자원 할당 방법.
- 데이터 처리 시스템(data processing system)에서 인스트럭션 처리(instruction processing)에 자원(resources)를 할당하는 방법에 있어서,① 처리를 위해 디스패치(dispatch)된 인스트럭션에 태그(tags)를 할당하는 단계와,② 상기 인스트럭션에 대한 실행 결과를 얻기 위해 프로세서 자원(processor resource)에 의해 스누핑(snooping)하는 단계와,③ 상기 인스트럭션을 그룹핑(grouping) ― 하나의 그룹(group)은 단지 하나의 인터럽트 가능 인스트럭션(interruptible instruction)과 상기 인터럽트 가능 인스트럭션에 이어서 디스패치되는 인터럽트 불가 인스트럭션(noninterruptible instructions)을 포함하며 그 사이에 디스패치되는 인터럽트 가능 인스트럭션은 존재하지 않는다 ― 하는 단계와,④ 상기 인터럽트 가능 인스트럭션이 인터럽트(interrupt)를 일으키지 않을 것이라는 판단에 따라 상기 인터럽트 가능 인스트럭션을 종료하고, 이전에 디스패치된 모든 인스트럭션이 종료함에 따라 인터럽트 가능 인스트럭션을 완료하는 단계와,⑤ 관련된 인터럽트 가능 인스트럭션이 완료함에 따라 상기 인터럽트 불가 인스트럭션을 종료하고 완료함으로써, 인터럽트 불가 인스트럭션이 디스패치되기 전에 완료될 수 있도록 하는 단계를 포함하는 데이터 처리 시스템의 자원 할당 방법.
- 제 12 항에 있어서, 상기 인스트럭션이 구조화된 레지스터(architected register)를 종착지로 함에 따라 상기 인스트럭션에 대한 정보를 재명명 버퍼(rename buffer)로 입력하는 단계와, 상기 그룹의 인터럽트 가능 인스트럭션을 완료함에 따라 그룹내의 인스트럭션에 대한 재명명 버퍼 엔트리(rename buffer entry)를 해방하는 단계를 포함하는 데이터 시스템의 자원 할당 방법.
- 제 13 항에 있어서, 상기 인스트럭션을 디스패치함에 따라 인터럽트 가능한 인스트럭션에 대한 정보만을 완료 큐(completion queue)로 입력하는 단계를 포함하는 데이터 시스템의 자원 할당 방법.
- 제 14 항에 있어서, 상기 인터럽트 가능 인스트럭션이 완료함에 따라 인터럽트 가능 인스트럭션에 대한 완료 큐 버퍼 엔트리(completion queue buffer entry)를 해방하는 단계를 포함하는 데이터 처리 시스템의 자원 할당 방법.
- 제 14 항에 있어서, 상기 완료 큐에 입력된 정보는 인터럽트 가능 인스트럭션에 대한 어드레스(address)를 포함하며, 상기 방법은, 상기 인터럽트 가능 인스트럭션과 인스트럭션의 인터럽션(interruption)에 대한 완료 큐 내의 어드레스에 따라, 인터럽트 가능 인스트럭션에 관련된 그룹의 인스트럭션을 재인출하는 단계를 포함하는 데이터 처리 시스템의 자원 할당 방법.
- 데이터 처리 시스템(data processing system)에서 인스트럭션 처리(instruction processing)에 자원(resources)을 할당하는 장치에 있어서,① 처리를 위해 디스패치(dispatch)된 인스트럭션을 태깅(tagging)하는 수단과,② 태크(tag)된 인스트럭션에 대해 실행 결과를 획득하기 위해 프로세서 자원(processor resource)에 의해 스누핑(snooping)하는 수단과,③ 상기 인스트럭션이 인터럽트(interrupt)를 일으키지 않을 것이라는 판단에 따라 상기 인스트럭션을 종료하고, 이전에 디스패치된 모든 인스트럭션이 종료됨에 따라 상기 인스트럭션을 완료함으로써, 상기 인스트럭션이 그 실행 이전에 완료될 수 있도록 하는 수단을 포함하는 데이터 처리 시스템의 자원 할당 장치.
- 제 17 항에 있어서, 상기 스누핑 자원은 구조화된 레지스터(architected register)를 포함하는 데이터 처리 시스템의 자원 할당 장치.
- 제 17 항에 있어서, 상기 스누핑 자원은 재명명 버퍼(rename buffer)를 포함하는 데이터 처리 시스템의 자원 할당 장치.
- 제 19 항에 있어서, 상기 재명명 버퍼는 히스토리 버퍼(history buffer)인 데이터 시스템의 자원 할당 장치.
- 제 17 항에 있어서, 상기 스누핑 자원은 예약 스테이션(reservation station)을 포함하는 데이터 시스템의 자원 할당 장치.
- 제 17 항에 있어서, 상기 인스트럭션은 로드 인스트럭션(load instruction)을 포함하며, 상기 장치는 상기 인스트럭션에 대한 오퍼랜드를 레지스터 혹은 버퍼에 로드시키는 로드 인스트럭션 실행 수단을 더 포함하고, 상기 로드 인스트럭션은 상기 인스트럭션의 오퍼랜드를 레지스터 혹은 버퍼에 로딩시키기 이전에 완료될 수 있는 데이터 처리 시스템의 자원 할당 장치.
- 제 17 항에 있어서, 상기 인스트럭션은 저장 인스트럭션(store instruction)을 포함하며, 상기 장치는 상기 인스트럭션에 대한 오퍼랜드를 메모리에 저장하는 저장 인스트럭션 실행 수단을 더 포함하고, 상기 저장 인스트럭션은 상기 인스트럭션의 오퍼랜드가 메모리에 저장되기 이전에 완료될 수 있는 데이터 처리 시스템의 자원 할당 장치.
- 제 17 항에 있어서, 상기 인스트럭션이 구조화된 레지스터를 종착지로 함에 따라 상기 인스트럭션에 대한 정보를 재명명 버퍼로 입력하는 수단과, 엔트리(entry)의 인스트럭션을 완료함에 따라 상기 재명명 버퍼 엔트리(rename buffer entry)를 해방(release)하는 수단을 포함하는 데이터 시스템의 자원 할당 장치.
- 제 24 항에 있어서, 상기 재명명 버퍼는 히스토리 버퍼를 포함하고, 히스토리 버퍼에 정보를 입력하는 수단은 상기 인스트럭션이 디스패치된 인스트럭션 중 선택된 인스트럭션인 지에 따르며, 히스토리 버퍼 정보가 입력되지 않은 인터럽트 불가 인스트럭션(noninterruptible instruction)의 경우, 실행 유닛(execution unit)이 상기 인스트럭션을 실행한 후에 상기 인스트럭션에 할당된 유일한 자원은 구조화된 레지스터가 되는 데이터 처리 시스템의 자원 할당 장치.
- 제 17 항에 있어서, 상기 인스트럭션을 디스패치함에 따라 완료 큐(completion queue)에 상기 인스트럭션에 대한 정보를 입력하는 수단과, 상기 인스트럭션이 완료됨에 따라 상기 인스트럭션의 완료 큐 엔트리를 해방하는 수단을 포함하는 데이터 처리 시스템의 자원 할당 장치.
- 제 26 항에 있어서, 상기 인스트럭션의 결과를 자원에 기록하는 수단을 포함하며, 상기 완료 큐 엔트리를 해방하는 수단은 상기 인스트럭션의 결과를 자원에 기록하는 수단과는 독립적인 데이터 처리 시스템의 자원 할당 장치.
- 데이터 처리 시스템(data processing system)에서 인스트럭션 처리(instruction processing)에 자원(resources)를 할당하는 장치에 있어서,① 처리를 위해 디스패치(dispatch)된 인스트럭션에 태그(tags)를 할당하는 수단과,② 상기 인스트럭션에 대한 실행 결과를 얻기 위해 프로세서 자원(processor resource)에 의해 스누핑(snooping)하는 수단과,③ 상기 인스트럭션을 그룹핑(grouping) ― 하나의 그룹(group)은 단지 하나의 인터럽트 가능 인스트럭션(interruptible instruction)과 상기 인터럽트 가능 인스트럭션에 이어서 디스패치되는 인터럽트 불가 인스트럭션(noninterruptible instructions)을 포함하며 그 사이에 디스패치되는 인터럽트 가능 인스트럭션은 존재하지 않는다 ― 하는 수단과,④ 상기 인터럽트 가능 인스트럭션이 인터럽트(interrupt)를 일으키지 않을 것이라는 판정에 따라 상기 인터럽트 가능 인스트럭션을 종료하고, 이전에 디스패치된 모든 인스트럭션이 종료함에 따라 인터럽트 가능 인스트럭션을 완료하는 수단과,⑤ 관련된 인터럽트 가능 인스트럭션이 완료함에 따라 인터럽트 불가 인스트럭션을 종료하고 완료함으로써 상기 인터럽트 불가 인스트럭션이 디스패치되기 전에 완료될 수 있도록 하는 수단을 포함하는 데이터 처리 시스템의 자원 할당 장치.
- 제 28 항에 있어서, 상기 인스트럭션이 조화된 레지스터(architected register)를 종착지로 함에 따라 상기 인스트럭션에 대한 정보를 재명명 버퍼(rename buffer)로 입력하는 수단과, 상기 그룹의 인터럽트 가능 인스트럭션을 완료함에 따라 그룹내의 인스트럭션에 대한 재명명 버퍼 엔트리(rename buffer entry)를 해방하는 수단을 포함하는 데이터 시스템의 자원 할당 장치.
- 제 29 항에 있어서, 상기 인스트럭션을 디스패치함에 따라 인터럽트 가능한 인스트럭션에 대한 정보만을 완료 큐(completion queue)로 입력하는 수단을 포함하는 데이터 시스템의 자원 할당 장치.
- 제 30 항에 있어서, 상기 인터럽트 가능 인스트럭션이 완료함에 따라 인터럽트 가능 인스트럭션에 대한 완료 큐 버퍼 엔트리(completion queue buffer entry)를 해방하는 수단을 포함하는 데이터 처리 시스템의 자원 할당 장치.
- 제 30 항에 있어서, 상기 완료 큐에 입력된 정보는 인터럽트 가능 인스트럭션에 대한 어드레스(address)를 가지며, 상기 장치는, 상기 인터럽트 가능 인스트럭션과 인스트럭션의 인터럽션(interruption)에 대한 완료 큐 내의 어드레스에 따라, 인터럽트 가능 인스트럭션에 관련된 그룹의 인스트럭션을 재인출하는 수단을 포함하는 데이터 처리 시스템의 자원 할당 장치.
- 제 28 항에 있어서, 상기 인스트럭션을 그룹핑하는 수단은 다수개의 인터럽트 불가 인스트럭션을 그룹핑하는 수단을 포함하는 데이터 처리 시스템의 자원 할당 장치.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/829,671 US5870582A (en) | 1997-03-31 | 1997-03-31 | Method and apparatus for completion of non-interruptible instructions before the instruction is dispatched |
US8/829,671 | 1997-03-31 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR19980079691A true KR19980079691A (ko) | 1998-11-25 |
Family
ID=25255201
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1019980003716A KR19980079691A (ko) | 1997-03-31 | 1998-02-09 | 데이터 처리 시스템의 자원 할당 방법 및 그 장치 |
Country Status (3)
Country | Link |
---|---|
US (1) | US5870582A (ko) |
JP (1) | JPH10312282A (ko) |
KR (1) | KR19980079691A (ko) |
Families Citing this family (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6098167A (en) * | 1997-03-31 | 2000-08-01 | International Business Machines Corporation | Apparatus and method for fast unified interrupt recovery and branch recovery in processors supporting out-of-order execution |
US6408324B1 (en) * | 1997-07-03 | 2002-06-18 | Trw Inc. | Operating system having a non-interrupt cooperative multi-tasking kernel and a method of controlling a plurality of processes with the system |
US5974524A (en) * | 1997-10-28 | 1999-10-26 | International Business Machines Corporation | Method and apparatus for reducing the number of rename registers in a processor supporting out-of-order execution |
KR100705847B1 (ko) * | 1999-05-19 | 2007-04-09 | 코닌클리즈케 필립스 일렉트로닉스 엔.브이. | 데이터 프로세서 및 데이터 처리 방법 |
US6704843B1 (en) * | 2000-10-26 | 2004-03-09 | International Business Machines Corporation | Enhanced multiprocessor response bus protocol enabling intra-cache line reference exchange |
US6772368B2 (en) | 2000-12-11 | 2004-08-03 | International Business Machines Corporation | Multiprocessor with pair-wise high reliability mode, and method therefore |
US6751749B2 (en) | 2001-02-22 | 2004-06-15 | International Business Machines Corporation | Method and apparatus for computer system reliability |
JP3564445B2 (ja) * | 2001-09-20 | 2004-09-08 | 松下電器産業株式会社 | プロセッサ、コンパイル装置及びコンパイル方法 |
US7313734B2 (en) * | 2002-01-14 | 2007-12-25 | International Business Machines Corporation | Method and system for instruction tracing with enhanced interrupt avoidance |
US7979677B2 (en) * | 2007-08-03 | 2011-07-12 | International Business Machines Corporation | Adaptive allocation of reservation station entries to an instruction set with variable operands in a microprocessor |
US10146545B2 (en) | 2012-03-13 | 2018-12-04 | Nvidia Corporation | Translation address cache for a microprocessor |
US9880846B2 (en) | 2012-04-11 | 2018-01-30 | Nvidia Corporation | Improving hit rate of code translation redirection table with replacement strategy based on usage history table of evicted entries |
US9875105B2 (en) * | 2012-05-03 | 2018-01-23 | Nvidia Corporation | Checkpointed buffer for re-entry from runahead |
US10241810B2 (en) | 2012-05-18 | 2019-03-26 | Nvidia Corporation | Instruction-optimizing processor with branch-count table in hardware |
US9740549B2 (en) | 2012-06-15 | 2017-08-22 | International Business Machines Corporation | Facilitating transaction completion subsequent to repeated aborts of the transaction |
US9448796B2 (en) | 2012-06-15 | 2016-09-20 | International Business Machines Corporation | Restricted instructions in transactional execution |
US20130339680A1 (en) | 2012-06-15 | 2013-12-19 | International Business Machines Corporation | Nontransactional store instruction |
US9384004B2 (en) | 2012-06-15 | 2016-07-05 | International Business Machines Corporation | Randomized testing within transactional execution |
US9361115B2 (en) | 2012-06-15 | 2016-06-07 | International Business Machines Corporation | Saving/restoring selected registers in transactional processing |
US10437602B2 (en) | 2012-06-15 | 2019-10-08 | International Business Machines Corporation | Program interruption filtering in transactional execution |
US9348642B2 (en) | 2012-06-15 | 2016-05-24 | International Business Machines Corporation | Transaction begin/end instructions |
US9436477B2 (en) | 2012-06-15 | 2016-09-06 | International Business Machines Corporation | Transaction abort instruction |
US9772854B2 (en) | 2012-06-15 | 2017-09-26 | International Business Machines Corporation | Selectively controlling instruction execution in transactional processing |
US8688661B2 (en) | 2012-06-15 | 2014-04-01 | International Business Machines Corporation | Transactional processing |
US9336046B2 (en) | 2012-06-15 | 2016-05-10 | International Business Machines Corporation | Transaction abort processing |
US8682877B2 (en) | 2012-06-15 | 2014-03-25 | International Business Machines Corporation | Constrained transaction execution |
US9645929B2 (en) | 2012-09-14 | 2017-05-09 | Nvidia Corporation | Speculative permission acquisition for shared memory |
US10001996B2 (en) | 2012-10-26 | 2018-06-19 | Nvidia Corporation | Selective poisoning of data during runahead |
US9740553B2 (en) | 2012-11-14 | 2017-08-22 | Nvidia Corporation | Managing potentially invalid results during runahead |
US9632976B2 (en) | 2012-12-07 | 2017-04-25 | Nvidia Corporation | Lazy runahead operation for a microprocessor |
US20140189310A1 (en) | 2012-12-27 | 2014-07-03 | Nvidia Corporation | Fault detection in instruction translations |
US9569214B2 (en) | 2012-12-27 | 2017-02-14 | Nvidia Corporation | Execution pipeline data forwarding |
US9823931B2 (en) | 2012-12-28 | 2017-11-21 | Nvidia Corporation | Queued instruction re-dispatch after runahead |
US10108424B2 (en) | 2013-03-14 | 2018-10-23 | Nvidia Corporation | Profiling code portions to generate translations |
US9547602B2 (en) | 2013-03-14 | 2017-01-17 | Nvidia Corporation | Translation lookaside buffer entry systems and methods |
US9582280B2 (en) | 2013-07-18 | 2017-02-28 | Nvidia Corporation | Branching to alternate code based on runahead determination |
US10255071B2 (en) * | 2015-10-14 | 2019-04-09 | International Business Machines Corporation | Method and apparatus for managing a speculative transaction in a processing unit |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4870614A (en) * | 1984-08-02 | 1989-09-26 | Quatse Jesse T | Programmable controller ("PC") with co-processing architecture |
US4965721A (en) * | 1987-03-31 | 1990-10-23 | Bull Hn Information Systems Inc. | Firmware state apparatus for controlling sequencing of processing including test operation in multiple data lines of communication |
JP2594979B2 (ja) * | 1987-10-23 | 1997-03-26 | 株式会社日立製作所 | マルチプロセツサシステム |
JP3063006B2 (ja) * | 1989-02-08 | 2000-07-12 | インテル・コーポレーション | マイクロプログラムされるコンピュータ装置及びマイクロコードシーケンスメモリをアドレツシングする方法 |
US5057997A (en) * | 1989-02-13 | 1991-10-15 | International Business Machines Corp. | Interruption systems for externally changing a context of program execution of a programmed processor |
CA2038264C (en) * | 1990-06-26 | 1995-06-27 | Richard James Eickemeyer | In-memory preprocessor for a scalable compound instruction set machine processor |
JPH0476626A (ja) * | 1990-07-13 | 1992-03-11 | Toshiba Corp | マイクロコンピュータ |
US5301312A (en) * | 1991-08-21 | 1994-04-05 | International Business Machines Corporation | Method and system for utilizing benign fault occurrence to measure interrupt-blocking times |
US5404558A (en) * | 1992-02-17 | 1995-04-04 | Sharp Kabushiki Kaisha | Data driven type information processor having a plurality of memory banks |
US5361356A (en) * | 1992-03-06 | 1994-11-01 | International Business Machines Corporation | Storage isolation with subspace-group facility |
US5469553A (en) * | 1992-04-16 | 1995-11-21 | Quantum Corporation | Event driven power reducing software state machine |
KR100309566B1 (ko) * | 1992-04-29 | 2001-12-15 | 리패치 | 파이프라인프로세서에서다중명령어를무리짓고,그룹화된명령어를동시에발행하고,그룹화된명령어를실행시키는방법및장치 |
US5481683A (en) * | 1992-10-30 | 1996-01-02 | International Business Machines Corporation | Super scalar computer architecture using remand and recycled general purpose register to manage out-of-order execution of instructions |
US5440703A (en) * | 1993-09-20 | 1995-08-08 | International Business Machines Corporation | System and method for saving state information in a multi-execution unit processor when interruptable instructions are identified |
US5497317A (en) * | 1993-12-28 | 1996-03-05 | Thomson Trading Services, Inc. | Device and method for improving the speed and reliability of security trade settlements |
TW260765B (ko) * | 1994-03-31 | 1995-10-21 | Ibm | |
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 |
US5555432A (en) * | 1994-08-19 | 1996-09-10 | Intel Corporation | Circuit and method for scheduling instructions by predicting future availability of resources required for execution |
-
1997
- 1997-03-31 US US08/829,671 patent/US5870582A/en not_active Expired - Fee Related
-
1998
- 1998-02-09 KR KR1019980003716A patent/KR19980079691A/ko active IP Right Grant
- 1998-03-23 JP JP10073720A patent/JPH10312282A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
US5870582A (en) | 1999-02-09 |
JPH10312282A (ja) | 1998-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR19980079691A (ko) | 데이터 처리 시스템의 자원 할당 방법 및 그 장치 | |
JP3424202B2 (ja) | プロセッサ内で命令を発行するための方法および装置 | |
US6728866B1 (en) | Partitioned issue queue and allocation strategy | |
JP3096451B2 (ja) | データを転送する方法およびプロセッサ | |
JP3093639B2 (ja) | プロセッサ内の資源割当て追跡方法及びそのシステム | |
US5913048A (en) | Dispatching instructions in a processor supporting out-of-order execution | |
JP3132755B2 (ja) | プロセッサのアーキテクチャ状態を維持するための方法および装置 | |
US5889982A (en) | Method and apparatus for generating event handler vectors based on both operating mode and event type | |
US5611063A (en) | Method for executing speculative load instructions in high-performance processors | |
KR100407013B1 (ko) | 1차 및 2차 송출큐를 갖는 마이크로프로세서 | |
EP0762270A2 (en) | Microprocessor with load/store operation to/from multiple registers | |
US5987600A (en) | Exception handling in a processor that performs speculative out-of-order instruction execution | |
KR100407014B1 (ko) | 명령어 히스토리 정보를 갖는 기본 블럭 캐쉬마이크로프로세서 | |
JP3689369B2 (ja) | 2次リオーダ・バッファ・マイクロプロセッサ | |
US5537560A (en) | Method and apparatus for conditionally generating a microinstruction that selects one of two values based upon control states of a microprocessor | |
US5740393A (en) | Instruction pointer limits in processor that performs speculative out-of-order instruction execution | |
JPH10154073A (ja) | データ依存性を管理する装置及び方法 | |
US5727177A (en) | Reorder buffer circuit accommodating special instructions operating on odd-width results | |
JP3207124B2 (ja) | カウント/リンク・レジスタ変更命令の投機実行をサポートする方法及び装置 | |
KR100310798B1 (ko) | 머신문맥동기화동작실행방법및프로세서 | |
JP3182741B2 (ja) | 分散命令完了方法及びプロセッサ | |
US5996063A (en) | Management of both renamed and architected registers in a superscalar computer system | |
US6473850B1 (en) | System and method for handling instructions occurring after an ISYNC instruction | |
US6311267B1 (en) | Just-in-time register renaming technique | |
JP2004038753A (ja) | プロセッサ及び命令制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
NORF | Unpaid initial registration fee |