도 1은 프로세서(10)의 일 실시예를 예시하는 블록도이다. 다른 실시예들도 가능하며 고려된다. 도 1의 실시예에서는, 상기 프로세서(10)는 명령 캐시(12), 실행 코어(14), 데이터 캐시(16), 외부 인터페이스 유닛(18), 메모리 관리 유닛(memory management unit:MMU)(20) 및 레지스터 파일(22)을 포함한다. 예시된 실시예에서, 상기 MMU(20)는 세그먼트 레지스터들의 세트(24), 제 1 제어 레지스터(26), 제 2 제어 레지스터(28), 국부 기술자 테이블 레지스터(local descriptor table register: LDTR)(30) 및 전체 기술자 테이블 레지스터(global descriptor table register: GDTR)(32)를 포함한다. 상기 명령 캐시(12)는 상기 외부 인터페이스 유닛(18), 상기 실행 코어(14) 및 상기 MMU(20)에 결합된다. 상기 실행 코어(14)는 상기 MMU(20), 상기 레지스터 파일(22) 및 상기 데이터 캐시(16)에 더 결합된다. 상기 데이터 캐시(16)는 상기 MMU(20) 및 상기 외부 인터페이스 유닛(18)에 더 결합된다. 상기 외부 인터페이스 유닛(18)은 상기 MMU(20) 및 상기 외부 인터페이스에 더 결합된다.
일반적으로, 상기 프로세서(10)는 x86 아키텍쳐와 호환가능하고, 64 비트 처리를 지원하기 위해 추가적인 아키텍쳐 특징들을 포함하는 프로세서 아키텍쳐를 채용한다. 상기 프로세서(10)는 현재 실행되는 코드에 대응하는 코드 세그먼트 기술자 내에 저장된 정보에 응답하여, 또한 하나 또는 그 이상의 제어 레지스터들 내에 저장된 하나 또는 그 이상의 인에이블 지시들에 응답하여 동작 모드를 확립하도록 구성된다. 여기서 이용되는 바와 같이, "동작 모드"는 프로그램가능하게 선택가능한 다양한 프로세서 속성들을 위한 디폴트값들을 특정한다. 예를 들면, 상기 동작 모드는 디폴트 오퍼랜드(operand) 크기 및 디폴트 주소 크기를 특정할 수 있다. 명령의 인코딩이 상기 디폴트를 오버라이드하지 않는 한, 상기 디폴트 오퍼랜드 크기는 명령의 오퍼랜드 내의 비트들의 수를 특정한다. 명령의 인코딩이 상기 디폴트를 오버라이드하지 않는 한, 상기 디폴트 주소 크기는 명령의 메모리 오퍼랜드의 주소에서의 비트들의 수를 특정한다. 상기 디폴트 주소 크기는 적어도 메모리 오퍼랜드들의 가상 주소의 크기를 특정하고, 물리적 주소의 크기도 특정할 수 있다. 대안적으로, 상기 물리적 주소의 크기는 상기 디폴트 주소 크기로부터 독립적일 수 있고, 대신에 이하에 설명되는 LME 비트에 의존할 수 있고(예를 들면, 상기 물리적 주소는, 상기 LME 비트들이 소거되면 32비트일 수 있고, 상기 LME 비트가 세트되면, 32비트보다 더 크고 64비트보다 작은 구현-의존의 크기일 수 있고), 또는 다른 제어 비트(예를 들면 다른 제어 레지스터 내의 물리적 주소 확장 비트, 또는 PAE 비트)에 의존할 수 있다. 여기에서, "가상 주소(virtual address)"는 메모리에 액세스하기 위해 실제로 사용되는 주소인 "물리적 주소"로 주소 변환 메커니즘(예를 들어, 페이징 메커니즘)에 의해 변환되기 전에 생성되는 주소이다. 또한, 여기서 사용되는 바와 같이, "세그먼트 기술자"는 메모리의 세그먼트에 대한 상태 및 액세스 제어를 정의하기 위해 소프트웨어에 의해 형성되고, 상기 프로세서에 의해 사용되는 데이터 구조이다. "세그먼트 기술자 테이블"은 다수의 엔트리들을 갖는 메모리 내의 테이블이고, 각 엔트리는 세그먼트 기술자를 저장할 수 있다.
예시되는 실시예에서는, 상기 MMU(20)는 동작 모드를 생성하고, 상기 동작 모드를 실행 코어(14)에 전송한다. 상기 실행 코어(14)는 상기 동작 모드를 이용하여 명령들을 실행한다. 더 구체적으로, 상기 실행 코어(14)는, 특정 명령의 인코딩이 상기 디폴트 오퍼랜드 크기를 오버라이드하지 않는 한, (상기 메모리 오퍼랜드들이 캐시가능하고 데이터 캐시(16)에 히트하면(hit) 상기 데이터 캐시(16)를 통하여, 또는 상기 메모리 오퍼랜드들이 캐시불가능하거나 데이터 캐시(16)를 놓치면(miss) 상기 외부 인터페이스 유닛(18)을 통하여) 상기 레지스터 파일(22) 또는 메모리로부터 상기 디폴트 오퍼랜드 크기를 갖는 오퍼랜드들을 인출하고, 상기 디폴트 오퍼랜드 크기를 오버라이드하는 경우 오버라이딩 오퍼랜드 크기가 사용된다. 유사하게, 상기 실행 코어(14)는 메모리 오퍼랜드들의 주소들을 생성하고, 여기서, 특정 명령의 인코딩이 상기 디폴트 주소 크기를 오버라이드하지 않는 한, 상기 주소는 상기 디폴트 주소 크기를 갖고, 상기 디폴트 주소 크기를 오버라이드하는 경우 상기 오버라이드 주소 크기가 사용된다. 다른 실시예들에서, 상기 동작 모드를 이용하는 프로세서들(10)의 부분들(예를 들면, 실행 코어(14))에서 상기 동작 모드를 생성하기 위해 이용되는 정보는 국부적으로 섀도우(shadow)될 수 있고, 상기 동작 모드는 상기 국부적인 섀도우 카피(shadow copy)들로부터 결정될 수 있다.
상술된 바와 같이, 상기 MMU(20)는 실행되는 코드에 대응하는 코드 세그먼트 기술자에 응답하여, 또한 제어 레지스터들 내의 하나 이상의 값들에 응답하여 상기 동작 모드를 생성한다. 상기 코드 세그먼트 기술자로부터의 정보는 상기 세그먼트 레지스터들(24)(CS 즉, 코드 세그먼트(code segment)로 지시되는 레지스터) 중의 하나에 저장된다. 또한, 상기 제어 레지스터(26)는 상기 디폴트 주소 크기가 32비트보다 큰 동작 모드("32/64 모드")와, 32비트 및 16비트 동작 모드들을 위한 특정의 호환가능 모드들을 인에이블하기 위해 이용되는 인에이블 지시(LME)를 저장한다. 상기 디폴트 오퍼랜드 크기는 32/64 모드에서는 32비트일 수 있지만, 원한다면 명령들은 64 비트 오퍼랜드 크기로 상기 디폴트 32 비트 오퍼랜드 크기를 오버라이드할 수 있다. 상기 LME 지시가 인에이블 상태이면, 32비트 모드 및 16 비트 모드에 더하여 32/64 모드가 이용될 수 있다. 상기 LME 지시가 디스에이블 상태이면, 32/64 모드는 디스에이블된다. 일 실시예에서, 32/64 모드에서의 상기 디폴트 주소 크기는 구현-종속적일 수 있지만, 64비트 이하의 임의의 값이어도 된다. 또한, 상기 가상 주소의 크기는 소정의 구현에서는 그 구현에서의 물리적 주소의 크기와 다를 수 있다.
주목할 사항으로서, 인에이블 지시들은 인에이블 상태가 비트의 세트 상태이고, 디스에이블 상태가 비트의 소거 상태인 비트들로서 여기에 설명될 수 있다. 그러나, 다수의 비트들이 사용되는 인코딩 및 상기 인에이블 상태가 소거 상태이고 디스에이블 상태가 세트 상태인 인코딩을 포함하는 다양한 인코딩이 가능하다. 따라서, 본 설명의 나머지 부분은 상기 제어 레지스터(26) 내의 상기 LME 지시를, 상기 인에이블된 상태가 세트이고 상기 디스에이블된 상태가 소거인 LME 비트로서 지칭할 수 있다. 그러나, 상술한 바와 같이, 상기 LME 지시의 다른 인코딩도 고려된다.
상기 세그먼트 레지스터(24)는 상기 프로세서(10)에 의해 실행되는 코드에 의해 현재 사용되는 상기 세그먼트 기술자들로부터의 정보를 저장한다. 상술된 바와 같이, CS는 세그먼트 레지스터들(24) 중의 하나이고, 메모리의 코드 세그먼트를 특정한다. 상기 코드 세그먼트는 실행되는 코드를 저장한다. 다른 세그먼트 레지스터들은 다양한 데이터 세그먼트들을 정의할 수 있다(예를 들면, SS 세그먼트 레지스터에 의해 정의된 스택 데이터 세그먼트 및 DS, ES, FS와 GS 세그먼트 레지스터들에 의해 정의된 최대 4개의 데이터 세그먼트들). 도 1은 선택자 필드(24AA)와 기술자 필드(24AB)를 포함하는 예시적인 세그먼트 레지스터(24A)의 내용을 예시한다. 상기 선택자 필드(24AA)는 상기 실행 코어(14)에 의해 실행되는 소정의 세그먼트 로드 명령에 응답하여 특정 세그먼트를 활성화시키기 위해 세그먼트 선택자로 로딩된다. 상기 세그먼트 선택자는 메모리의 세그먼트 기술자 테이블에서 상기 세그먼트 기술자를 식별한다. 특히, 상기 프로세서(10)는 2개의 세그먼트 기술자 테이블, 즉 로컬 기술자 테이블 및 글로벌 기술자 테이블을 채용할 수 있다. 상기 로컬 기술자 테이블의 베이스 주소는 상기 LDTR(30) 내에 저장된다. 유사하게, 상기 글로벌 기술자 테이블의 베이스 주소는 GDTR(32) 내에 저장된다. 상기 세그먼트 선택자 내의 비트(테이블 지시 비트)는 상기 기술자 테이블을 선택하고, 상기 세그먼트 선택자의 잔여 부분은 상기 선택된 테이블로의 인덱스로서 사용된다. 명령이 세그먼트 선택자를 상기 세그먼트 레지스터들(24) 중의 하나에 로딩하면, 상기 MMU(20)는 대응하는 세그먼트 기술자를 상기 선택된 세그먼트 기술자 테이블로부터 판독하고, 상기 세그먼트 기술자로부터의 정보를 상기 세그먼트 기술자 필드(예를 들어, 상기 세그먼트 레지스터(24A)를 위한 세그먼트 기술자 필드(24AB))에 저장한다. 상기 세그먼트 기술자 필드 내에 저장되는 정보는 원한다면 모든 세그먼트 기술자를 포함하는, 임의의 적절한 상기 세그먼트 기술자의 서브세트를 포함할 수 있다. 또한, 원한다면 상기 세그먼트 기술자 또는 다른 소스들로부터 도출된 다른 정보가 상기 세그먼트 기술자 필드에 저장될 수 있다. 예를 들어, 일 실시예는 상기 코드 세그먼트 기술자로부터 동작 모드 지시들을 디코딩할 수 있고, 상기 동작 모드 지시들의 원래 값들이 아닌 상기 디코딩된 값을 저장할 수 있다. 명령에 의해 CS가 세그먼트 선택자로 로딩되면, 상기 코드 세그먼트가 변화할 수 있고, 따라서, 상기 프로세서(10)의 동작 모드도 변화할 수 있다. 세그먼트 기술자 테이블들이 이하에 상세하게 설명된다.
일 실시예에서, 상기 CS 세그먼트 레지스터만이 32/64 모드에서 사용된다. 상기 데이터 세그먼트 레지스터들은 무시된다. 16 및 32 비트 모드에서, 상기 코드 세그먼트와 데이터 세그먼트들이 활성화될 수 있다. 또한, 상기 제어 레지스터(28) 내의 제 2 인에이블 지시(PE)는 상기 MMU(20)의 동작에 영향을 미친다. 상기 PE 인에이블 지시를 이용하여 보호 모드를 인에이블시킬 수 있고, 여기서는 세그먼테이션 및/또는 페이징 주소 변환 메커니즘이 이용될 수 있다. 상기 PE 인에이블 지시가 디스에이블 상태에 있는 경우, 세그먼테이션 및 페이징 메커니즘은 디스에이블되고, 상기 프로세서(10)는 "실제 모드(real mode)"에 있을 수 있다(여기서는, 상기 실행 코어(14)에 의해 생성된 주소들은 물리적 주소들이다). 상기 LME 지시와 유사하게, 상기 PE 지시는 인에이블 상태가 세트된 비트이고, 디스에이블 상태가 소거된 비트인 비트일 수 있다. 그러나, 상술한 바와 같이 다른 실시예들도 고려될 수 있다.
주목할 사항으로서, 원한다면 상기 MMU(20)는 추가적인 하드웨어 메커니즘들을 채용할 수 있다. 예를 들면, 상기 MMU(20)는 가상 주소들로부터 물리적 주소들로의 페이징 주소 변환을 실현하기 위한 페이징 하드웨어를 포함할 수 있다. 상기 페이징 하드웨어는 페이지 변환들을 저장하기 위한 변환 룩어사이드 버퍼(translation lookaside buffer: TLB)를 포함할 수 있다.
상기 제어 레지스터들(26, 28)은 아키텍트된(architected) 제어 레지스터들로서 구현될 수 있다(예를 들면, 상기 제어 레지스터(26)는 CR4이고, 상기 제어 레지스터(28)는 CR0일 수 있다). 대안적으로, 상기 제어 레지스터들 중의 하나 또는 둘다는 모델 특정 레지스터들로서 구현되어 32/64 모드에 간섭하지 않고 상기 아키텍트된 제어 레지스터들의 다른 사용들을 가능하게 한다.
일반적으로, 상기 명령 캐시(12)는 명령 바이트들을 저장하기 위한 고속 캐시 메모리이다. 상기 실행 코어(14)는 실행을 위해 상기 명령 캐시(12)로부터 명령들을 인출한다. 상기 명령 캐시(12)는 직접 매핑(mapping), 세트 연관 및 완전 연관 구성들을 포함하는, 적절한 모든 캐시 구성을 채용한다. 명령 인출(fetch)을 명령 캐시(12)에서 놓치면, 상기 명령 캐시(12)는 상기 외부 인터페이스 유닛(18)과 통신하여 놓친 캐시 라인을 상기 명령 캐시(12)에 채워넣을 수 있다. 또한, 상기 명령 캐시(12)는 상기 MMU(20)와 통신하여 상기 명령 캐시(12)로부터 인출된 가상 주소들을 위한 물리적 주소 변환들을 수신할 수 있다.
상기 실행 코어(14)는 상기 명령 캐시(12)로부터 인출된 명령들을 실행한다. 상기 실행 코어(14)는 상기 레지스터 파일(22)로부터 레지스터 오퍼랜드들을 인출하고 상기 레지스터 파일(22) 내의 목적지 레지스터들을 갱신한다. 상기 레지스터 오퍼랜드들의 크기는 동작 모드와, 특정 명령에 대한 동작 모드의 전부의 오버라이드에 의해 제어된다. 유사하게, 상기 실행 코어(14)는 상기 메모리 오퍼랜드들의 캐시성(casheability) 및 상기 데이터 캐시(16)에서의 히트에 의존하여, 상기 데이터 캐시(16)로부터 메모리 오퍼랜드들을 인출하고, 상기 데이터 캐시(16) 내의 목적지 메모리 로케이션(location)들을 갱신한다. 상기 메모리 오퍼랜드들의 크기는 유사하게, 상기 동작 모드와 특정 명령을 위한 상기 동작 모드의 전부의 오버라이드에 의해 제어된다. 또한, 상기 실행 코어(14)에 의해 생성된 상기 메모리 오퍼랜드들의 주소들의 크기는 상기 동작 모드와 특정 명령을 위한 상기 동작 모드의 전부의 오버라이드에 의해서 제어된다.
상기 실행 코어(14)는 적절한 구조를 채용할 수 있다. 예를 들면, 상기 실행 코어(14)는 슈퍼파이프라인(superpipelined) 코어, 슈퍼스칼라(superscalar) 코어 또는 이들의 조합일 수 있다. 상기 실행 코어(14)는 설계상의 선택에 따라 순서를 벗어난(out of order) 투기적(speculative) 실행 또는 순서에 따른(in order) 실행을 채용할 수 있다.
상기 레지스터 파일(22)은 상기 프로세서(10)의 동작 모드 및 특정 명령에 대한 모두의 오버라이드에 의해 지시되는 바와 같이, 64비트, 32비트, 16비트 또는 8비트 레지스터로서 액세스될 수 있는 64비트 레지스터들을 포함할 수 있다. 일 실시예에 대한 레지스터 포맷이 도 7에 관련되어 이하에 설명된다. 상기 레지스터 파일(22)에 포함되는 레지스터들은 LEAX, LEBX, LECX, LEDX, LEDI, LESI, LESP 및 LEBP 레지스터들을 포함할 수 있다. 상기 레지스터 파일(22)은 LEIP 레지스터를 더 포함할 수 있다. 대안적으로, 상기 실행 코어(14)는 상기 레지스터 파일(22) 내의 모든 레지스터가 아키텍트된 레지스터로 매핑될 수 있는 레지스터 리네이밍(renaming)의 형태를 채용할 수 있다. 상기 레지스터 파일(22) 내의 레지스터들의 수는 이와 같은 실시예에 대해 구현-의존적일 수 있다.
상기 데이터 캐시(16)는 데이터를 저장하도록 구성된 고속 캐시 메모리이다. 상기 데이터 캐시(16)는 직접-매핑, 세트 연관, 완전 연관 구성들을 포함하는 적절한 모든 캐시 구성을 채용할 수 있다. 데이터 인출 또는 갱신을 상기 데이터 캐시(16)에서 놓치면, 상기 데이터 캐시(16)는 외부 인터페이스 유닛(18)과 통신하여 상기 놓친 캐시 라인을 상기 데이터 캐시(16)에 채울 수 있다. 또한, 상기 데이터 캐시(16)가 라이트백 캐시 폴리시(writeback caching policy)를 채용하면, 상기 데이터 캐시(16)로부터 버려지는(cast out) 갱신된 캐시 라인들이 상기 외부 인터페이스 유닛(18)에 전달되어 메모리에 재기록된다. 상기 데이터 캐시(16)는 상기 MMU(20)와 통신하여 상기 데이터 캐시(16)에 제공되는 가상 주소들을 위한 물리적 주소 변환들을 수신할 수 있다.
상기 외부 인터페이스 유닛(18)은 상기 프로세서(10)의 외부 시스템의 부분들과 통신한다. 상기 외부 인터페이스 유닛(18)은 상술된 바와 같이, 명령 캐시(12) 및 데이터 캐시(16)를 위해 캐시 라인들을 전달하고, 상기 MMU(20)와 통신할 수 있다. 예를 들면, 상기 외부 인터페이스 유닛(18)은 상기 MMU(20) 대신에 상기 세그먼트 기술자 테이블들 및/또는 페이징 테이블들에 액세스할 수 있다.
주목할 사항으로서, 상기 프로세서(10)는 원한다면, 통합 레벨 2(L2) 캐시를 포함할 수 있다. 또한, 상기 외부 인터페이스 유닛(18)은 상기 시스템과의 통신에 더하여, 백사이드 캐시(backside cache)와 통신하도록 구성될 수 있다.
도 2는 32/64 모드를 위한 코드 세그먼트 기술자의 일 실시예의 블록도를 도시한다. 다른 실시예들이 가능하고 고려된다. 도 2의 실시예에서, 상기 코드 세그먼트 기술자(40)는 최하위 4바이트의 상방에 최상위 4 바이트가 예시되는 8바이트를 포함한다. 상기 최상위 4바이트는 상기 최하위 4바이트보다 수적으로 큰 주소에 저장된다. 4 바이트의 각 그룹의 최상위 비트는 도 2(및 이하의 도 3)의 비트 31로 나타나고, 상기 최하위 비트는 비트 0으로 나타난다. 상기 4 바이트 내의 짧은 수직 라인들은 각 비트의 경계를 정하고, 긴 수직 라인들도 비트의 경계를 정하지만, 이는 또한 필드의 경계를 정한다(도 2 및 도 3).
이하의 도 3에 나타나는 32비트 및 16비트 코드 세그먼트 기술자들과 달리, 상기 코드 세그먼트 기술자(40)는 베이스 주소 또는 리미트(limit)를 포함하지 않는다. 상기 프로세서(10)는 (32비트 및 16비트 모드들에서 채용되는 세그먼트화된 선형 주소 공간이기 보다는) 32/64비트 모드를 위해 플랫(flat) 가상 주소 공간을 채용한다. 따라서, 그 외의 경우에는 상기 베이스 주소 및 리미트를 저장하는 코드 세그먼트 기술자(40)의 일부분들은 상기 세그먼트 기술자(40)에 예약된다. 주목할 사항으로서, 세그멘테이션(segmentation)을 통하여 제공되는 가상 주소는 본 명세서에서 "선형 주소(linear address)"로 지칭될 수 있다. 상기 용어 "가상 주소"는 세그먼트화되지 않는 아키텍쳐에서 생성되는 다른 가상 주소들 및 선형 주소들을 포함하는, 메모리를 주소지정하기 위해 실제로 사용되는 물리적 주소로 변환 메커니즘을 통해 변환되는 모든 주소를 포함한다.
상기 세그먼트 기술자(40)는 D 비트(42), L 비트(44)(32/64 모드 코드 세그먼트를 위해 1로 세트됨), 사용가능 비트(available bit: AVL)(46), 현재(present: P) 비트(48), 기술자 특권 레벨(descriptor privilege level: DPL)(50) 및 타입 필드(52)를 포함한다. 이하의 도 5에 개시된 바와 같이, 상기 D 비트(42)와 L 비트(44)는 상기 프로세서(10)의 동작 모드를 결정하기 위해 사용된다. 상기 AVL 비트(46)는 시스템 소프트웨어(예를 들면, 운영 시스템)에 의한 사용을 위해 이용될 수 있다. 상기 P 비트(48)는 상기 세그먼트가 메모리에 존재하는지의 여부를 나타내기 위해 사용된다. 상기 P 비트(48)가 세트되면, 상기 세그먼트가 존재하고 상기 세그먼트로부터 코드가 인출될 수 있다. 만약 상기 P 비트(48)가 소거되면, 상기 세그먼트는 존재하지 않고, 예외가 발생하여 (예를 들면, 디스크 저장 장치로부터 또는 네트워크 접속을 통해) 상기 세그먼트가 메모리로 로드된다. 상기 DPL은 상기 세그먼트의 특권 레벨을 나타낸다. 상기 프로세서(10)는 (DPL 필드 내에 0 내지 3으로서 인코딩되고, 레벨 0이 가장 높은 특권 레벨인) 4개의 특권 레벨들을 채용한다. 소정의 명령들과 프로세서 자원들(예를 들면, 구성 레지스터 및 제어 레지스터)은 가장 높은 특권 레벨에서만 실행 가능하거나 액세스 가능할 수 있고, 더 낮은 특권 레벨들에서 이들의 명령들을 실행하거나 상기 자원들에 액세스를 시도함으로써, 결과적으로 예외가 발생한다. 상기 코드 세그먼트(40)로부터의 정보가 상기 CS 세그먼트 레지스터에 로딩되면, 상기 DPL은 상기 프로세서(10)의 현재 특권 레벨(current privilege level: CPL)이 된다. 상기 타입 필드(52)는 세그먼트의 타입을 인코딩한다. 코드 세그먼트들에서는, 상기 타입 필드(52)의 최상위 비트 2 비트들이 세트될 수 있고(시스템 세그먼트로부터 코드 또는 데이터 세그먼트를 구별하는 최상위 비트와, 데이터 세그먼트로부터 코드 세그먼트를 구별하는 두번째의 최상위 비트), 나머지 비트들은 추가적인 세그먼트 타입 정보(예를 들면, 실행 전용, 실행 및 판독, 실행 및 판독 전용, 컨포밍(conforming) 및 상기 코드 세그먼트가 액세스되었는지 여부)를 인코딩할 수 있다.
주목할 사항으로서, 상기 코드 세그먼트 기술자에서의 여러 지시들은 정의의 의미를 갖는 세트 또는 소거 값들을 갖는 비트들로서 설명되지만, 다른 실시예들은 반대의 인코딩을 채용할 수 있고, 다수의 비트들을 사용할 수 있다. 따라서, 예를 들면, 상기 D 비트(42)와 L 비트(44) 각각은 상술한 인에이블 지시와 유사하게, 소망에 따라 하나 이상의 비트들인 동작 모드 지시의 일 실시예일 수 있다.
도 3은 32 및 16 비트 호환가능 모드를 위한 코드 세그먼트 기술자(54)의 일실시예의 블록도이다. 다른 실시예들도 가능하고 고려된다. 도 2의 실시예와 유사하게, 상기 코드 세그먼트 기술자(54)는 최하위 4바이트 상방에 최상위 4바이트가 예시되는 8바이트를 포함한다.
상기 코드 세그먼트 기술자(54)는 상술한 코드 세그먼트 기술자(40)와 유사하게, D 비트(42), L 비트(44), AVL 비트(46), P 비트(48), DPL(50) 및 타입 필드(52)를 포함한다. 또한, 상기 코드 세그먼트 기술자(54)는 베이스 주소 필드(참조 번호 56A, 56B 및 56C), 리미트 필드(참조 번호 57A 및 57B) 및 G 비트(58)를 포함한다. 상기 베이스 주소 필드는 (상기 LEIP 레지스터에 저장되는) 논리 인출 주소(logical fetch address)에 부가되는 베이스 주소를 저장하여 명령의 선형 주소를 형성하고, 이것은 그 후에 임의로 페이징 변환 메커니즘을 통해 물리적 주소로 변환될 수 있다. 상기 리미트 필드는 상기 세그먼트의 크기를 정의하는 세그먼트 리미트를 저장한다. 상기 세그먼트 리미트보다 더 큰 논리 주소의 바이트에 액세스하려는 시도는 허용되지 않고, 예외를 발생시킨다. 상기 G 비트(58)는 상기 세그먼트 리미트 필드의 스케일링(scaling)을 결정한다. 상기 G 비트(58)가 세트되면, 상기 리미트는 4K바이트 페이지로 스케일링된다(예를 들면 12개의 최하위 0들이 상기 리미트 필드 내의 상기 리미트에 부가된다). 상기 G 비트(58)가 소거되면, 상기 리미트는 그대로 사용된다.
주목할 사항으로서, 32/64 모드가 상기 제어 레지스터(26) 내의 상기 LME 비트를 통해 인에이블되지 않는 때의 32 및 16비트 모드들을 위한 코드 세그먼트 기술자들은, 상기 L 비트가 예약되어 0으로 정의되는 점을 제외하면 상기 코드 세그먼트 기술자(54)와 유사한 것일 수 있다. 또한, 주목할 사항으로서, 일 실시예에 따른 32 및 16비트 모드들(상기 LME 비트가 세트된 호환가능 모드와 상기 LME 비트가 소거된 모드 양쪽)에서, 상기 데이터 세그먼트들이 사용된다. 상기 데이터 세그먼트 기술자들은 상기 D 비트(42)가 상기 세그먼트의 상한을 지시하도록 정의되거나, 또는 (스택 세그먼트들에 대한) 디폴트 스택 크기를 정하도록 정의되는 점을 제외하면, 상기 코드 세그먼트 기술자(54)와 유사한 것일 수 있다.
도 4는 상기 제어 레지스터(26) 내의 상기 LME 비트 및, 상기 32/64 모드와 32 및 16 비트 모드들을 구현하는 고도의 유연성을 가능하게 하기 위한 상기 호환가능 모드들의 예시적인 사용을 나타내는 도면이다. 박스(60)는 상기 LME 비트가 세트되는 경우의 예시적인 동작을 나타내고, 박스(62)는 상기 LME 비트가 소거되는 경우의 예시적인 동작을 나타낸다.
상기 박스(60)에 도시된 바와 같이, 상기 LME 비트가 세트되는 경우 지원되는 상기 호환가능 모드들은 64비트 운영 시스템(즉, 32비트를 초과하는 가상 및 물리적 주소 공간들 및/또는 64비트의 데이터 오퍼랜드를 이용하도록 설계되는 운영 시스템)이 32비트 응용 프로그램(즉, 32비트 오퍼랜드 크기 및 주소 크기를 사용하여 기록되는 응용 프로그램)으로 동작할 수 있게 할 수 있다. 상기 운영 시스템을 위한 코드 세그먼트는 도 2에 도시되는 상기 32/64 모드 코드 세그먼트 기술자(40)에 의해 정의될 수 있기 때문에, 상기 L 비트가 세트될 수 있다. 따라서, 상기 운영 시스템은 (예를 들면 세그먼트 기술자 테이블들과 페이징 변환 테이블들을 포함하는) 상기 운영 시스템에 의해 유지되는 데이터 구조들과 운영 시스템 코드를 위해 확장된 가상 주소 공간과 물리적 주소 공간을 이용할 수 있다. 상기 운영 시스템은 또한, 상기 디폴트 32비트 오퍼랜드 크기를 오버라이드하는 명령 인코딩들을 사용하여 32/64 모드로 정의된 64비트 데이터 타입을 사용할 수 있다. 또한, 상기 운영 시스템은 상기 세그먼트 기술자 테이블 내의 하나 또는 그 이상의 호환가능 모드 세그먼트 기술자들(소거된 L비트, 세트된 D비트, 예를 들어, 도 2에 도시되는 세그먼트 기술자(54))을 확립하고, 또한 상기 호환가능 모드 세그먼트들 중의 하나로 분기함으로써 32비트 응용 프로그램을 실행할 수 있다. 유사하게, 상기 운영 시스템은 상기 세그먼트 기술자 테이블 내의 하나 또는 그 이상의 16비트 호환가능 모드 세그먼트 기술자들(소거된 L비트, 세트된 D비트, 예를 들어, 도 2에 도시되는 세그먼트 기술자(54))을 확립하고, 또한 상기 호환가능 모드 세그먼트들 중의 하나로 분기함으로써 16비트 응용 프로그램을 실행할 수 있다. 따라서, 64비트 운영 시스템은 상기 호환가능 모드에서 현존하는 32비트 및 16비트 응용 프로그램들을 실행할 수 있는 능력을 보유한다. 특정 응용 프로그램은 상기 확장된 능력들이 상기 프로그램을 위해 요구되면 32/64 비트로 이동될 수 있거나, 또는 32비트나 16비트 그대로일 수 있다.
상기 프로세서(10)가 상기 32비트 응용 프로그램을 실행하는 동안, 상기 프로세서(10)의 동작 모드는 32비트이다. 따라서, 상기 응용 프로그램은 일반적으로, (예를 들면, 상기 운영 시스템이 32비트 운영 시스템인 경우) 상기 LME 비트가 소거된 상태로 32비트 모드에서 실행되는 것과 유사한 형태로 실행될 수 있다. 그러나, 상기 응용 프로그램은 운영 시스템 서비스를 호출하고, 예외를 경험하거나, 또는 종료할 수 있다. 이들 경우의 각각에서, 상기 프로세서(10)는 (도 4의 화살표(64)에 도시된 것과 같이) 운영 시스템 코드의 실행으로 복귀할 수 있다. 상기 운영 시스템 코드는 32/64모드에서 동작하기 때문에, 상기 운영 시스템 서비스 루틴, 예외 핸들러(handler) 등의 주소는 32비트를 초과할 수 있다. 따라서, 상기 프로세서(10)는 상기 운영 시스템 코드로 복귀하기 전에 32비트보다 더 큰 주소를 생성할 필요가 있을 수 있다. 상기 LME 비트는 비록 현재 운영 모드가 32비트일지라도, 상기 운영 시스템이 32/64모드로 동작할 수 있음을 나타내는 지시를 상기 프로세서(10)에 제공하고, 따라서, 상기 프로세서(10)는 운영 시스템 호출과 예외들을 위해 보다 큰 주소 공간을 제공할 수 있다.
일 실시예에서, 인터럽트 세그먼트 기술자 테이블에 저장된 인터럽트 세그먼트 기술자들을 사용하여 예외들이 처리된다. 상기 LME가 세트되면, 상기 인터럽트 세그먼트 기술자들은 상기 예외를 처리하는 운영 시스템 루틴의 64비트 주소를 포함하는 16바이트 엔트리들일 수 있다. 상기 LME 비트가 소거되면, 상기 인터럽트 세그먼트 기술자들은 32비트 주소를 포함하는 8바이트 엔트리들일 수 있다. 따라서, 상기 프로세서(10)는 상기 LME 지시에 응답하는 상기 인터럽트 기술자 테이블에 액세스한다(즉, 상기 LME 비트가 세트되면 16바이트를 판독하고, 상기 LME 비트가 소거되면 8바이트 엔트리를 판독한다). 따라서, 비록 상기 응용 프로그램이 32비트 호환가능 모드로 실행하는 동안에도, 예외들은 상기 64비트 운영 시스템에 의해 처리된다. 또한, 상기 프로세서(10)는 만약 상기 LME 비트가 소거되면, 32비트(또는 16비트) 운영 시스템을 지원한다.
유사하게, 상기 프로세서(10) 내의 호출 메커니즘은 상기 LME 비트의 상태에 기초하여 다른 방식으로 동작할 수 있다. 상기 운영 시스템은 전형적으로는 상기 응용 프로그램보다 더 높은 특권 레벨로 실행하기 때문에, 상기 응용 프로그램으로부터 상기 운영 시스템으로의 전환(transfer)은 신중하게 제어되어 상기 응용 프로그램은 허용된 운영 시스템 루틴들의 실행만이 가능하다는 것을 확실히 한다. 보다 일반적으로, 특권 레벨의 변화는 조심스럽게 제어된다. 일 실시예에서, 상기 프로세서(10)는 운영 시스템 호출을 행하기 위해 적어도 2개의 메커니즘들을 지원할 수 있다. 하나의 방법은 상기 세그먼트 기술자 테이블들 내의 호출 게이트를 통하는 것이다(하기에서 보다 상세하게 기술된다). 다른 방법은 상기 프로세서(10)에 의해 지원되는 SYSCALL 명령으로, 상기 명령은 상기 운영 시스템 루틴의 주소의 소스로서 모델 특정 레지스터를 사용한다. 상기 모델 특정 레지스터들의 갱신은 특권화된 동작이고, 따라서 더 높은 특권 레벨에서 실행되는 코드(예를 들면 운영 시스템 코드)만이 상기 SYSCALL 명령에 의해 사용되는 상기 모델 특정 레지스터 내에 주소를 확립할 수 있다. 상기 SYSCALL 방법에서는, 제 2 모델 특정 레지스터는 상기 운영 시스템 루틴의 주소의 최상위 32비트들을 저장하도록 정의될 수 있다. 따라서, 상기 LME 비트가 세트되면, 상기 주소는 상기 2개의 모델 특정 레지스터들로부터 판독될 수 있다. 상기 LME 비트가 소거되면, 상기 주소는 최하위 32비트를 저장하는 상기 모델 특정 레지스터로부터 판독될 수 있다. 대안적으로, 상기 SYSCALL 명령에 의해 사용된 모델 특정 레지스터는 64비트로 확장될 수 있고, 상기 주소는 상기 LME 비트의 상태에 기초하여 32비트(상기 모델 특정 레지스터의 최하위 32비트) 또는 64비트일 수 있다.
상술된 바와 같이, 상기 LME 비트를 세팅시킴으로써 상기 운영 시스템은 64비트이고 하나 또는 그 이상의 응용 프로그램은 64비트가 아닌 (예를 들면 도시되는 바와 같이 32비트 또는 상기 설명과 유사한 형태로 동작하는 16비트인) 시스템에서 프로세서(10)가 동작할 수 있게 한다. 또한, 상기 박스(62)에 나타난 바와 같이, 상기 LME 비트를 소거함으로써 x86 아키텍쳐와 호환가능한 32비트 또는 16비트 모드들에서 상기 프로세서(10)가 동작할 수 있게 된다. 상술된 바와 같이, 예외 및 운영 시스템 호출을 처리하기 위한 메커니즘은 세트되거나 소거되는 상기 LME 비트를 처리하도록 설계되고, 따라서, 비록 상기 프로세서(10)가 32/64모드에서 동작할 수 있을지라도, 상기 32비트 및 16비트 모드들은 변경되지 않고 동작할 수 있다. 또한, 상기 LME 비트가 소거된 경우 x86 호환가능 16비트 및 32비트 모드들을 제공함으로써, (이들 모드들에서 예약되는 상기 L 비트를 무시함으로써), 상기 프로세서(10)는 상기 L 비트가 32/64모드 이외의 다른 목적을 위해 정의되는 시스템에서 동작하고, 상기 LME 비트가 세트되면 여전히 32/64 모드를 지원할 수 있다. 따라서, 32비트 운영 시스템및 32비트 또는 16비트 응용 프로그램들을 채용하는 시스템은, 상기 프로세서(10)를 채용할 수 있다. 계속해서, 상기 시스템은 상기 프로세서(10)를 변경할 필요 없이 64비트 운영 시스템으로 업그레이드될 수 있다.
상기 LME 비트가 세트된 상태로 동작하는 64비트 운영 시스템 및 64 비트 응용 프로그램들은 도 4에 예시되지 않는다. 상기 64비트 운영 시스템과 32비트 응용 프로그램을 위해 설명된 운영 시스템 루틴을 호출하기 위한 메커니즘은, 상기 64비트 응용 프로그램에 동일하게 적용할 수 있다. 또한, 64비트의 오프셋을 지원하는 호출 게이트들이 지원된다(이는 이하에 상세하게 설명된다).
도 5는 프로세서(10)의 일 실시예에 따른, 상기 LME 비트, 상기 코드 세그먼트 기술자 내의 상기 L 비트 및 상기 코드 세그먼트 기술자 내의 상기 D 비트의 상태들과, 상기 프로세서(10)의 대응하는 동작 모드를 예시하는 테이블(70)을 도시한다. 다른 실시예들도 가능하고 고려된다. 상기 테이블(70)이 나타내는 바와 같이, 상기 LME 비트가 소거되면, 상기 L 비트가 예약된다(0으로 정의된다). 그러나, 상기 프로세서(10)는 상기 LME 비트가 소거되면 상기 L 비트를 돈 케어(don't care)로 취급한다. 따라서, 상기 LME 비트가 소거되면 상기 x86 호환가능 16비트 및 32비트 모드들이 상기 프로세서(10)에 의해 제공될 수 있다. 상기 LME 비트가 세트되고 상기 코드 세그먼트 내의 L 비트가 소거되면, 호환가능 동작 모드가 상기 프로세서(10)에 의해 확립되고, 상기 D 비트는 16비트 또는 32비트 모드를 선택한다. 상기 LME 비트 및 L 비트가 세트되고 상기 D 비트가 소거되면, 상기 프로세서(10)를 위해 32/64모드가 선택된다. 마지막으로, 만약 상기 LME, L 및 D 비트들이 모두 세트되면 선택될 모드가 예약된다.
도 6에 설명되고 나타나는 바와 같이, 상기 32/64 동작 모드는 (실시예에 의존하지만 최대 64 비트의) 32비트들을 초과하는 디폴트 주소 크기 및 32비트의 디폴트 오퍼랜드 크기를 포함한다. 32비트의 디폴트 오퍼랜드 크기는 특정 명령의 인코딩을 통하여 64비트로 오버라이드된다. 프로그램에 의해 행해지는 다수의 데이터 조작에 있어서 32비트로 충분한 프로그램들을 위해 평균 명령 길이를 최소화하도록, 32비트의 디폴트 오퍼랜드 크기가 선택된다(왜냐하면 64비트로 오버라이드하는 것은 명령 인코딩에 명령 프리픽스를 포함하는 것을 수반하고, 이에 의해 명령 길이가 증대될 수 있기 때문이다). (현재 존재하는 프로그램들 중 상당한 수일 수 있는) 이와 같은 프로그램들에서는, 64비트 오퍼랜드 크기로 이동함으로써, 상기 프로그램에 의해 달성되는 실행 성능이 실제로 감소될 우려가 있다(즉, 실행 시간이 증가된다). 부분적으로, 상기 감소는 64비트 값들이 저장되는 경우에 상기 프로그램에 의해 사용되는 데이터 구조의 메모리 내의 크기가 두 배로 되는 것에 기인할 수 있다. 32비트가 충분하다면, 이들의 데이터 구조는 32비트 값들을 저장한다. 따라서, 상기 데이터 구조가 액세스되는 경우에 액세스되는 바이트의 수는, 32비트값들로도 충분한 경우에 64비트값들이 사용되면 증가하고, 상기 증가된 메모리 대역폭(및 각 값에 의해 점유되는 증가된 캐시 공간)에 의해, 실행시간이 증가할 우려가 있다. 따라서, 상기 디폴트 오퍼랜드 크기로서 32비트들이 선택되고, 특정의 명령의 인코딩을 통해 디폴트가 오버라이드될 수 있다.
도 6은 특정 명령을 위한 동작 모드를 오버라이드하기 위한 명령 프리픽스들을 사용하는 일 실시예를 나타낸다. 다른 실시예들도 가능하고 고려된다. 상기 실행 코어(14)는 상기 테이블(72)에 따라 특정 명령을 위한 주소 크기와 오퍼랜드 크기를 결정한다. 도 6에 도시된 실시예에서, 명령 프리픽스 바이트(상기 주소 크기 오버라이드 프리픽스 바이트)가 상기 디폴트 주소 크기를 오버라이드시키기 위해 사용되고, 다른 명령 프리픽스 바이트(상기 오퍼랜드 크기 오버라이드 프리픽스 바이트)가 상기 디폴트 오퍼랜드 크기를 오버라이드시키기 위해 사용된다. 상기 주소 크기 오버라이드 프리픽스 바이트는 67(16진수)로 인코딩되고, 상기 오퍼랜드 크기 오버라이드 프리픽스 바이트는 66(16진수)으로 인코딩된다. 상기 특정 명령에서의 오버라이드 프리픽스의 수에 의해 상기 테이블의 열이 형성된다. 상기 테이블의 행들은 동작 모드 및 대응하는 열에서의 오버라이드 프리픽스들의 수에 기초하여, 상기 특정 명령의 오퍼랜드 크기 및 주소 크기를 나타낸다. 오버라이드 프리픽스들의 수는 대응하는 타입의 오버라이드 프리픽스의 수를 나타낸다(예를 들면, 주소 크기의 행들은 주소 크기 오버라이드 프리픽스의 수에 기초한 주소 크기이고, 상기 오퍼랜드 크기의 행들은 오퍼랜드 크기 오버라이드 프리픽스들의 수에 기초한 오퍼랜드 크기이다).
오버라이드 프리픽스들의 수에서 "0"으로 라벨링된 열은 각 동작 모드에 대한 디폴트 오퍼랜드 크기 및 주소 크기를 나타낸다. 주목할 사항으로서, 상기 32비트 모드의 행 및 16비트 모드의 행은 호환가능 모드들(LME 세트)과 표준 모드들(LME 소거)을 나타낸다. 또한, 상기 디폴트 주소 크기는 32/64모드에서는 64비트이지만, 주소 비트의 실제의 수는 상술된 바와 같이 실시예에 의존한 것일 수 있다.
상기 테이블(72)에 도시된 바와 같이, 32/64비트 모드 내에 하나의 주소 크기 오버라이드 프리픽스를 포함함으로써 상기 주소 크기가 64비트(소정의 구현에 있어서 64비트들보다 더 작고 32비트보다 더 큰)로부터 32비트로 변화한다. 또한, 32/64 비트 모드 내에 하나의 오퍼랜드 크기 오버라이드 프리픽스를 포함함으로써, 오퍼랜드 크기가 32비트로부터 64비트로 변화한다. (예를 들면 "C" 프로그래밍 언어로 단(short) 정수 데이터 형태를 지원하기 위해) 16 비트 오퍼랜드에 대해서도 제공되는 것이 바람직하다. 따라서, 32/64모드 내에 2개의 오퍼랜드 크기 오버라이드 프리픽스들을 포함함으로써, 16비트의 오퍼랜드 크기가 선택된다. 2개 이상의 오퍼랜드 크기 오버라이드 프리픽스들을 포함함으로써 결과적으로, 2개의 오퍼랜드 크기 오버라이드 프리픽스들을 포함하는 경우와 동일한 오퍼랜드 크기가 얻어진다. 유사하게, 하나 이상의 주소 크기 오버라이드 프리픽스를 포함함으로써 결과적으로, 하나의 주소 크기 오버라이드 프리픽스를 포함하는 경우와 동일한 주소 크기가 얻어진다.
상기 32비트 모드들에 대해, 하나의 오버라이드 프리픽스를 포함함으로써, 상기 디폴트 32비트 크기가 16비트로 토글링(toggling)되고, 하나 이상의 오버라이드 프리픽스를 포함하는 것은 하나의 오버라이드 프리픽스를 포함하는 것과 동일한 효과를 갖는다. 유사하게, 16비트 모드에서는, 하나의 오버라이드 프리픽스를 포함함으로써 상기 디폴트 16비트 크기가 32비트로 토글링되고, 하나 이상의 오버라이드 프리픽스를 포함하는 것은 하나의 오버라이드 프리픽스를 포함하는 것과 동일한 효과를 갖는다.
도 7은 상기 LEAX 레지스터(74)의 일 실시예를 예시하는 도면을 도시한다. 상기 레지스터 파일(22) 내의 다른 레지스터들도 유사할 수 있다. 다른 실시예들도 가능하고 고려된다. 도 7의 실시예에서는, 상기 레지스터(74)가 64비트를 포함하고, 최상위 비트는 비트 63으로 라벨링되고, 최하위 비트는 비트 0으로 라벨링된다. 도 7은 (A 레지스터가 오퍼랜드로서 선택된 경우) 명령의 오퍼랜드 크기에 기초하여 액세스되는 상기 LEAX 레지스터의 부분들을 예시한다. 더 구체적으로, 상기 오퍼랜드 크기가 64비트이면(도 7에서 "LEAX"로 라벨링된 브레이스(brace)에 의해 나타낸 바와 같이) 레지스터(74)의 전체가 액세스된다. 상기 오퍼랜드 크기가 32비트이면, (도 7에서 "EAX" 로 라벨링된 브레이스에 의해 나타낸 바와 같이) 레지스터(74)의 비트 31:0이 액세스된다. 상기 오퍼랜드 크기가 16비트이면, (도 7에서 "AX"로 라벨링된 브레이스에 의해 나타낸 바와 같이) 상기 레지스터의 비트 16:0이 액세스된다. 상술한 오퍼랜드 크기들은 상기 동작 모드 및 임의의 오버라이드 프리픽스를 포함하는 것에 기초하여 선택될 수 있다. 그러나, 8비트 레지스터(도 7에서의 AH 또는 AL)에 액세스하는 소정의 명령 오피코드(opcode)들이 정의된다.
도 8은 글로벌 기술자 테이블(80)과 로컬 기술자 테이블(82)의 일 실시예의 블록도가 도시된다. 다른 실시예들도 가능하고 고려된다. 도 8에 나타나고 상술된 바와 같이, 글로벌 기술자 테이블(80)의 베이스 주소는 GDTR(32)에 의해 제공되고, 로컬 기술자 테이블(82)의 베이스 주소는 LDTR(30)에 의해 제공된다. 따라서, 상기 가상 주소 공간 내에서 글로벌 기술자 테이블(80)과 로컬 기술자 테이블(82)을 임의적으로 위치시키는 것을 지원하기 위해, GDTR(32)와 LDTR(30)은 64비트 베이스 주소들을 저장할 수 있다. 상기 LME 비트가 소거되면, 상기 베이스 주소의 최하위 32비트는 상기 기술자 테이블들을 위치시키는데 사용된다.
글로벌 기술자 테이블(80)과 로컬 기술자 테이블(82)은 모두 다양한 타입의 세그먼트 기술자들을 저장하도록 구성된다. 예를 들면, 32/64모드 코드 세그먼트 기술자(84, 86 및 90)와 호환가능 모드 기술자들(92 및 94)이 도 8에 도시된다. 기술자들(84 ~ 94) 각각은 대응하는 기술자 테이블 내의 엔트리를 점유하고, 여기서 엔트리는 하나의 세그먼트 기술자(예를 들면, 도 2 및 도 3에 도시된 실시예들에서의 8바이트)를 저장할 수 있다. 글로벌 기술자 테이블(80) 내의 다른 타입의 기술자는 로컬 기술자 테이블 기술자(96)이고, 이것은 상기 로컬 기술자 테이블(82)을 위해 시스템 세그먼트를 정의하고 상기 LDTR(30)에 저장된 베이스 주소를 제공한다. 상기 LDTR(30)은 글로벌 기술자 테이블(80) 내의에 기술자(96)를 위치시키는 세그먼트 선택자를 오퍼랜드로서 갖는 LLDT 명령을 이용하여 초기화된다. 상기 글로벌 기술자 테이블(80)은 원한다면, 다른 로컬 기술자 테이블들을 위치시키는 다수의 LDT 기술자들을 저장할 수 있다. 상기 LME 비트가 세트이면 상기 LDT 기술자(96)는 64비트 오프셋을 저장하기 때문에, 상기 LDT 기술자(96)는 상기 글로벌 기술자 테이블(80) 내에 2개의 엔트리들을 점유할 수 있다. 상기 LME 비트가 소거이면, 상기 LDT 기술자(96)는 상기 글로벌 기술자 테이블(80)에 단일 엔트리를 점유할 수 있다. 유사하게, 각각의 태스크(task)는 기술자 테이블들(80 및 82) 중의 하나에서의 태스크 상태 세그먼트(task state segment: TSS) 기술자를 갖고 태스크에 관련하는 특정의 정보를 저장할 수 있다. 따라서, TSS 기술자는 2개의 엔트리들을 점유하여 TSS 정보가 상기 64 비트 주소 공간의 어느 곳에도 저장될 수 있게 한다.
상기 로컬 기술자 테이블 및 글로벌 기술자 테이블은 또한, 호출 게이트 기술자를 저장할 수 있다. 예를 들면, 도 8은 호출 게이트 기술자들(100, 102 및 104)을 나타낸다. 상기 호출 게이트 기술자들은 64비트 오프셋을 지원하고, 따라서 대응하는 기술자 테이블 내에 2개의 엔트리들을 점유할 수 있다. 예시적인 32/64 호출 게이트 기술자가 이하의 도 9에 예시된다.
상기 세그먼트 기술자 테이블들(80 및 82)을 8바이트로 유지하고, 64비트 오프셋을 포함하는 기술자들을 위해 2개의 엔트리들을 사용함으로써, 16 및 32 비트 모드들을 위한 기술자들은 64비트 오프셋을 포함하는 기술자들과 동일한 테이블들 내에 저장될 수 있다. 따라서, 호환가능 모드들에서 동작하는 응용들은 상기 64비트 운영 시스템들과 동일한 세그먼트 기술자 테이블들에 적절한 기술자들을 가질 수 있다.
일반적으로, 호출 게이트들을 이용하여 더 작은 특권 레벨을 갖는 코드 세그먼트와 더 큰 특권 레벨을 갖는 코드 세그먼트(예를 들면 운영 시스템 루틴을 호출하는 응용 프로그램) 사이의 천이가 관리된다. 상기 더 작은 특권을 갖는 코드는 호출 또는, 타겟으로서 세그먼트 선택자(및, 이 경우에는 무시되지만, 상기 세그먼트로의 오프셋)를 특정하는 다른 분기 명령을 포함한다. 상기 세그먼트 선택자는 상기 기술자 테이블들 내의 호출 게이트 기술자를 식별하고, 상기 호출 게이트 기술자는 더 큰 특권 레벨 코드를 실행하는데 필요한 최소의 특권 레벨을 포함한다. 상기 프로세서(10)가 상기 호출 또는 다른 분기 명령을 실행하는 경우, 상기 프로세서(10)는 상기 세그먼트 선택자로 상기 기술자 테이블들을 인덱스하고 상기 호출 게이트를 위치시킨다. 만약 상기 프로세서(10)의 현재 특권 레벨과, (상기 세그먼트 선택자의 일부분이고 특권 검사 목적을 위해 현재 특권 레벨을 낮추는데 사용되는) 요청자(requestor) 특권 레벨 양쪽이 충분한 특권을 반영하면(예를 들면, 상기 특권 레벨들은 상기 호출 게이트 기술자 내의 최소 특권 레벨과 수적으로 동일하거나 더 작으면), 상기 호출이 진행할 수 있다. 상기 호출 게이트 기술자는 상기 타겟 세그먼트(더 높은 특권 레벨을 갖는 코드 세그먼트)를 위한 세그먼트 선택자와, 코드 인출이 개시되는 타겟 세그먼트 내의 오프셋을 포함한다. 상기 프로세서(10)는 상기 호출 게이트 기술자로부터 상기 세그먼트 선택자와 오프셋을 추출하고, 상기 타겟 세그먼트 기술자를 판독하여 더 큰 특권 레벨을 갖는 코드를 인출하기 시작한다. 반면에, 만약 현재 특권 레벨 또는 요청자 특권 레벨 중 어느 하나가 상기 호출 게이트 기술자 내의 최소 특권 레벨보다 더 작은 특권 레벨이면(예를 들면, 상기 현재 또는 요청자 특권 레벨이 상기 최소 특권 레벨보다 수적으로 더 크면), 상기 프로세서(10)는 상기 호출 게이트 기술자에 액세스한 후, 상기 타겟 기술자에 액세스하지 않고, 예외를 시그널링한다. 따라서, 더 높은 특권 레벨에서의 코드 실행에 대한 액세스는 조심스럽게 제어된다.
상술된 바와 같이, 상기 호출 게이트 기술자는 타겟 세그먼트 선택자 및 상기 세그먼트 내의 오프셋을 포함한다. 상기 타겟 세그먼트 기술자에 대한 참조는 도 8에서 호출 게이트 기술자로부터 다른 기술자로의 화살표로 나타난다. 예를 들면, 상기 호출 게이트 기술자(100)는 모드 기술자(90)를 참조하고, 상기 호출 게이트 기술자(102)는 32/64 모드 기술자(86)를 참조하고, 상기 호출 게이트 기술자(104)는 32/64 모드 기술자(84)를 참조한다. 도 8에 예시된 바와 같이, 호출 게이트 기술자는 기술자 테이블 중의 하나에 저장될 수 있고, 다른 테이블 또는 동일한 테이블에서의 기술자를 참조할 수 있다. 또한, 호출 게이트 기술자는 32/64 모드 기술자 또는 호환가능 모드 기술자의 어느 하나를 참조할 수 있다.
일반적으로, 상기 프로세서(10)가 세그먼트 선택자를 사용하여 상기 기술자 테이블들 중의 하나로부터 기술자를 판독하면, 하나의 기술자 테이블 엔트리가 판독된다. 그러나, 상기 LME 비트가 세트되어, 상기 프로세서(10)에 의해 상기 엔트리가 호출 게이트 기술자, LDT 기술자 또는 TSS 기술자인 것이 검출되면, 상기 프로세서(10)는 상기 테이블 내의 다음에 계속되는 엔트리를 판독하여 상기 기술자의 나머지를 얻는다. 따라서, 호출 게이트 기술자들, LDT 기술자들 및 TSS 기술자들은 상기 테이블 엔트리들의 크기를 재정의하지 않고, 또한 하나의 엔트리를 점유하는 기술자들을 위해 상기 테이블이 어떻게 관리되는지를 재정의하지 않고, 다른 크기의 호환가능 모드 기술자들(또는 표준 모드 기술자들)과 함께 테이블 내에 공존할 수 있다. 또한, TSS 기술자, LDT 기술자 및 호출 게이트 기술자의 제 2 부분은 세그먼트 기술자로서 액세스될 수 있기 때문에, 이하의 도 9에 도시된 바와 같이, 기술자가 기술자 테이블에 저장되면 제 2 부분 내에서의 기술자의 타입 필드일 수 있는 기술자의 부분이 무효 타입으로 세트된다. 대안적으로, 기술자 테이블 판독이 수행되는 때마다, 상기 프로세서(10)는 2개의 연속하는 엔트리들을 기술자 테이블로부터 판독할 수 있고, 상기 제 1 엔트리가 호출 게이트, LDT 기술자 타입, 또는 TSS 기술자 타입이면 제 2 엔트리가 사용될 수 있다.
주목할 사항으로서, 임의의 동작 모드(32/64모드, 32비트 호환가능 모드, 또는 16비트 호환가능 모드)에서의 동작하는 코드는 상기 LME 비트가 세트되면 호출 게이트 기술자를 참조할 수 있다. 따라서, 32 비트 또는 16 비트 응용은 비록 상기 루틴의 주소가 상기 32 비트 또는 16비트 주소 공간의 외부에 있어도, 상기 호출 게이트 메커니즘을 이용하여 운영 시스템 루틴을 호출할 수 있다. 또한, 호출 게이트 기술자는 임의의 동작 모드를 갖는 코드 세그먼트를 참조할 수 있다. 상기 운영 시스템은 (32비트 타겟 세그먼트에 대하여) 상기 호출 게이트 내의 오프셋의 최상위 32비트가 0이거나 또는, (16비트 타겟 세그먼트에 대하여) 상기 호출 게이트 내의 오프셋의 최상위 48비트가 0인 것을 보증할 수 있다.
도 9는 호출 게이트 기술자(120)의 일 실시예의 블록도를 도시한다. 다른 실시예들도 가능하고 고려된다. 도 2 및 3과 유사하게, 최하위 바이트의 상방에 최하위 바이트가 나타난다. 4바이트의 각 그룹의 최상위 비트는 비트(31)로 나타나고, 최하위 비트는 비트(0)로 나타난다. 상기 4 바이트 내의 짧은 수직 라인들은 각 비트의 경계를 정하고, 긴 수직 라인들은 비트의 경계를 정하고 또한 필드의 경계를 정한다. 상술된 바와 같이, 호출 게이트 기술자는 기술자 테이블 내에 2개의 엔트리들을 점유한다. 도 9의 수평 점선에 의해 호출 게이트 기술자(120)는 (상기 점선 위의) 상부와 (상기 점선의 아래의) 하부로 분할된다. 상기 하부는 상기 호출 게이트의 세그먼트 선택자에 의해 인덱스되는 엔트리 내에 저장되고, 상기 상부는 다음에 계속되는 엔트리 내에 저장된다.
상기 호출 게이트 기술자(120)는 타겟 세그먼트 선택자(필드(122)), 오프셋(필드(124A, 124B, 124C), 현재(P) 비트(126), 기술자 특권 레벨(DPL)(128), 타입 필드(130) 및 의사-타입 필드(132)를 포함한다. 상기 P 비트는 상술한 P 비트(48)와 유사하다. 상기 타겟 세그먼트 선택자는 (더 큰 특권 레벨을 갖는) 상기 타겟 세그먼트 기술자가 저장되는 상기 기술자 테이블들 중 하나의 엔트리를 식별한다. 상기 오프셋은 코드 인출이 개시되는 주소를 식별한다. 32/64모드에서는, 상기 코드 세그먼트가 베이스 주소를 갖지 않고, 또한 플랫 선형 주소지정이 이용되기 때문에, 상기 오프셋은 코드 인출이 시작되는 주소이다. 다른 모드들에서, 상기 오프셋은 상기 타겟 세그먼트 기술자에 의해 정의된 세그먼트 베이스에 부가되어 코드 인출이 개시되는 주소가 생성된다. 상술한 바와 같이, 상기 오프셋은 본 실시예에서 64비트를 포함할 수 있다.
상기 DPL(128)은 (현재 특권 레벨 및 요청된 특권 레벨 양쪽에서) 호출 루틴이 가져야 하는 최소 특권 레벨을 저장하고, 이것은 호출 게이트를 성공적으로 통과할 수 있고, 상기 타켓 세그먼트 기술자 내에서 특정되는 특권 레벨에서 호출된 루틴을 실행할 수 있다.
상기 타입 필드(130)는 호출 게이트 기술자 타입으로 코딩된다. 일 실시예에서, 상기 타입은 x86 아키텍쳐에서 정의되는 32비트 호출 게이트 타입으로서 코딩된다. 대신하여, 다른 인코딩이 사용될 수 있다. 최종적으로, 상기 의사-타입 필드(132)가 무효 타입(예를 들어, 0)으로 코딩되어 호출 게이트 기술자(120)의 상반분을 저장하는 세그먼트 테이블 엔트리를 식별하는 세그먼트 선택자가 제공되면, 프로세서(10)에 의해 예외가 시그널링되는 것이 보증된다.
주목할 사항으로서, LDT 기술자(96)의 하반분은 상기 32비트 LDT 기술자와 유사하고, 상기 LDT 기술자(96)의 상반분은 호출 게이트 기술자(120)의 상반분과 유사하다.
도 10은 상기 프로세서(10)에 의해 실행되는 명령들에 대한 명령 포맷(140)의 블록도이다. 다른 실시예들도 가능하고 고려된다. 도 10의 실시예에서, 상기 명령 포맷(140)은 프리픽스 필드(142), 오피코드 필드(144), 모드(mod) R/M(레지스터/메모리) 필드(146), SIB(scale index base) 필드(148), 변위 필드(150) 및 즉시(immediate) 필드(152)를 포함한다. 상기 오피코드 필드(144)를 제외한 상기 필드들 각각은 임의적이다. 따라서, 상기 명령 포맷(140)은 가변 길이 명령을 정의할 수 있다.
상기 프리픽스 필드(142)는 상기 명령에 대한 임의의 명령 프리픽스들을 위해 사용된다. 상술한 바와 같이, 오퍼랜드 크기 오버라이드 프리픽스 및 주소 크기 오버라이드 프리픽스는 명령으로 인코딩되어 프로세서(10)의 동작 모드를 오버라이드할 수 있다. 이들 오버라이드 프리픽스들은 프리픽스 필드(142)에 포함된다. 상술한 바와 같이, 상기 오퍼랜드 크기 오버라이드 프리픽스 및 주소 크기 오버라이드 프리픽스 각각은 바이트 단위로 상기 프리픽스 필드(142) 내에 포함될 수 있다.
상기 오피코드 필드(144)는 상기 명령의 오피코드(즉, 상기 명령 세트 내의 어느 명령이 실행되는지)를 포함한다. 일부의 명령들에서는, 오퍼랜드들이 상기 오피코드 필드(144) 내에 특정될 수 있다. 다른 명령들에서, 상기 오피코드의 일부가 상기 모드 R/M 필드(146) 내에 포함될 수 있다. 또한, 소정의 오피코드들이 오퍼랜드로서 8비트 또는 16비트 레지스터를 특정한다. 따라서 오피코드 인코딩은 상기 프로세서(10)의 동작 모드에 의해 나타나는 디폴트들을 오버라이드하도록 기능할 수 있다.
상기 모드 R/M 필드(146) 및 SIB 필드(148)는 상기 명령의 오퍼랜드들을 지시한다. 상기 변위 필드(150)는 변위 정보를 포함하고, 상기 즉시 필드(152)는 즉시 오퍼랜드를 포함한다.
컴퓨터 시스템
도 11은 버스 브리지(202)를 통하여 다양한 시스템 구성요소들에 결합되는 프로세서(10)를 포함하는 컴퓨터 시스템(200)의 일 실시예의 블록도를 도시한다. 다른 실시예들이 가능하고 고려된다. 도시된 시스템에서, 주 메모리(204)는 메모리 버스(206)를 통하여 상기 버스 브리지(202)에 결합되고, 그래픽 콘트롤러(208)는 AGP 버스(210)를 통하여 상기 버스 브리지(202)에 결합된다. 마지막으로, 복수의 PCI 디바이스들(212A-212B)이 PCI 버스(214)를 통하여 상기 버스 브리지(202)에 결합된다. EISA/ISA 버스(220)를 통하여 하나 또는 그 이상의 EISA 또는 ISA 디바이스들(218)로의 전기적 인터페이스를 수용하도록 2차 버스 브리지(216)가 더 제공될 수 있다. 상기 프로세서(10)는 CPU 버스(224)를 통하여 상기 버스 브리지(202)에 결합되고, 임의의 L2 캐시(228)에 결합된다. 또한, 상기 CPU 버스(224)와 상기 L2 캐시(228)에 대한 인터페이스는 함께, 외부 인터페이스 유닛(18)이 결합할 수 있는 외부 인터페이스를 포함할 수 있다.
상기 버스 브리지(202)는 상기 프로세서(10), 주 메모리(204)와, 그래픽 콘트롤러(208) 및 상기 PCI 버스(214)에 접속되는 디바이스들 간의 인터페이스를 제공한다. 상기 버스 브리지(202)에 접속되는 상기 디바이스들 중의 하나로부터 동작이 수신되면, 상기 버스 브리지(202)는 상기 동작의 타겟(예를 들면 특정 디바이스 또는 PCI 버스(214)의 경우에는, 상기 타겟이 PCI 버스(214) 상에 있는 것)을 식별한다. 상기 버스 브리지(202)는 상기 동작을 상기 타겟 디바이스로 라우팅(routing)한다. 상기 버스 브리지(202)는 일반적으로, 상기 소스 디바이스에 의해 사용되는 프로토콜로부터 상기 타겟 디바이스 또는 버스에 의해 사용되는 프로토콜로 동작을 변환한다.
ISA/EISA 버스에 대한 인터페이스를 상기 PCI 버스(214)에 제공하는 것에 더하여, 원한다면, 2차 버스 브리지(216)가 더 부가적인 기능을 통합한다. 상기 2차 버스 브리지(216)의 외부에 있거나 또는 통합된 입력/출력 콘트롤러(도시되지 않음)가 상기 컴퓨터 시스템(200) 내에 포함될 수 있고, 원한다면, 키보드 및 마우스(222)와 다양한 직렬 및 병렬 포트들에 동작 지원을 제공할 수 있다. 다른 실시예에서는, 외부 캐시 유닛(도시되지 않음)이 상기 프로세서(10)와 버스 브리지(202) 사이의 상기 CPU 버스(224)에 더 결합될 수 있다. 대안적으로는, 상기 외부 캐시는 상기 버스 브리지(202)에 결합될 수 있고, 외부 캐시를 위한 캐시 제어 로직은 상기 버스 브리지(202)에 통합될 수 있다. 상기 L2 캐시(228)는 또한, 상기 프로세서(10)에 대한 백사이드 구성으로 도시된다. 주목할 사항으로서, 상기 L2 캐시(228)는 상기 프로세서(10)로부터 분리될 수 있거나, 상기 프로세서(10)를 갖는 카트리지(예를 들면 슬롯1 또는 슬롯A)에 집적될 수 있거나 상기 프로세서(10)를 갖는 반도체 기판상에 집적된다.
상기 주 메모리(204)는 응용 프로그램이 저장되고, 그로부터 상기 프로세서(10)가 주로 실행되는 메모리이다. 적절한 주 메모리(204)는 DRAM을 포함한다. 예를 들면, SDRAM(동기 DRAM) 또는 램버스(Rambus) DRAM(RDRAM)의 복수의 뱅크들이 적합할 수 있다.
상기 PCI 디바이스들(212A-212B)은 예를 들면 네트워크 인터페이스 카드들, 비디오 가속기들, 오디오 카드들, 하드 또는 플로피 디스크 드라이브들 또는 드라이브 콘트롤러들, SCSI(Small Computer Systems Interface) 어댑터들 및 전화카드들과 같은 다양한 주변 디바이스들로 예시된다. 유사하게 상기 ISA 디바이스(218)는 예를 들면 모뎀, 사운드 카드, GPIB 또는 필드 버스 인터페이스와 같은 다양한 데이터 수집 카드들 등의 다양한 종류의 주변 디바이스들로 예시된다.
상기 그래픽 콘트롤러(208)는 디스플레이(226) 상의 텍스트와 이미지의 렌더링(rendering)을 제어하기 위해 제공된다. 상기 그래픽 콘트롤러(208)는 상기 주 메모리(204)로 및 상기 주 메모리(204)로부터 효율적으로 시프트될 수 있는 3차원 데이터 구조를 렌더링하기 위한 기술분야에 잘 알려진 전형적인 그래픽 가속기를 구체화할 수 있다. 따라서, 상기 그래픽 콘트롤러(208)는 상기 버스 브리지(202) 내의 타겟 인터페이스로의 액세스를 요청하고 수신하여 상기 주 메모리(204)로의 액세스를 획득할 수 있다는 점에서 AGP 버스(210)의 마스터일 수 있다. 전용 그래픽 버스는 상기 주 메모리(204)로부터의 데이터의 신속한 검색에 대응한다. 소정의 동작들에서, 상기 그래픽 콘트롤러(208)는 상기 AGP 버스(210) 상에서 PCI 프로토콜 트랜잭션을 생성하도록 구성될 수 있다. 따라서, 상기 버스 브리지(202)의 AGP 인터페이스는 PCI 프로토콜 타겟 및 개시자(initiator) 트랜잭션들뿐만 아니라 AGP 프로토콜 트랜잭션을 지원하는 기능을 포함한다. 상기 디스플레이(226)는 이미지 또는 텍스트가 표시될 수 있는 모든 전자 디스플레이이다. 디스플레이(226)는 음극선관("CRT"), 액정 디스플레이("LCD") 등을 포함한다.
주목할 사항으로서, 상기 AGP, PCI, 및 ISA 또는 EISA 버스들이 상술된 설명에서 예로서 이용되지만, 다른 버스 아키텍쳐가 대체될 수 있다. 상기 컴퓨터 시스템(200)이 추가적인 프로세서들(예를 들면 상기 컴퓨터 시스템(200)의 임의의 구성요소로서 도시되는 프로세서(10a))를 포함하는 다중처리 컴퓨터 시스템일 수 있음을 유의해야 한다. 상기 프로세서(10a)는 상기 프로세서(10)와 유사하다. 특히, 상기 프로세서(10a)는 상기 프로세서(10)의 동일 카피일 수 있다. 상기 프로세서(10a)는 독립된 버스를 통하여 상기 버스 브리지(202)에 접속되거나 (도 11에 도시된 바와 같이), 상기 CPU 버스(224)를 상기 프로세서(10)와 공유한다. 또한, 상기 프로세서(10a)는 상기 L2 캐시(228)와 유사한 형태의 임의의 L2 캐시(228a)에 결합될 수 있다.
도 12는 컴퓨터 시스템(300)의 다른 실시예를 도시한다. 다른 실시예들이 가능하고 고려된다. 도 12의 실시예에서, 상기 컴퓨터 시스템(300)은 여러 처리 노드들(312A, 312B, 312C, 312D)을 포함한다. 각 처리 노드는 각각의 처리 노드(312A-312D) 내에 포함되는 메모리 콘트롤러(316A-316D)를 통하여 각각의 메모리(314A-314D)에 결합된다. 또한, 상기 처리 노드들(312A-312D)은 상기 처리 노드들(312A-312D) 간에 통신하는데 사용되는 인터페이스 로직을 포함한다. 예를 들면, 상기 처리 노드(312A)는 처리 노드(312B)와 통신을 행하기 위한 인터페이스 로직(318A), 상기 처리 노드(312C)와 통신을 행하기 위한 인터페이스 로직(318B), 및 다른 처리 노드(도시되지 않음)와 통신을 행하기 위한 제 3 인터페이스 로직(318C)을 포함한다. 유사하게, 상기 처리 노드(312B)는 인터페이스 로직(318D, 318E, 318F)을 포함하고, 상기 처리 노드(312C)는 인터페이스 로직(318G, 318H, 318I)을 포함하고, 상기 처리 노드(312D)는 인터페이스 로직(318J, 318K, 318L)을 포함한다. 상기 처리 노드(312D)는 인터페이스 로직(318L)을 통하여 복수의 입력/출력 디바이스들(예를 들면, 데이지 체인 구성의 디바이스들(320A-320B))과 통신하도록 결합된다. 다른 처리 노드들도 유사한 방식으로 다른 I/O 디바이스들과 통신할 수 있다.
상기 처리 노드들(312A-312D)은 내부-처리 노드 통신을 위한 패킷-기반 링크(packet-based link)를 구현한다. 상기 실시예에서, 상기 링크는 단방향 라인들의 세트로서 구현된다(예를 들면, 라인들(324A)은 상기 처리 노드(312A)로부터 상기 처리 노드(312B)로 패킷들을 전송하는데 사용되고, 라인들(324B)은 상기 처리 노드(312B)로부터 상기 처리 노드(312A)로 패킷들을 전송하는데 사용된다). 도 12에 도시된 바와 같이 다른 라인들의 세트(324C-324H)는, 다른 처리 노드들 간에 패킷들을 전송하는데 사용된다. 일반적으로 라인들(324)의 각각의 세트는 하나 또는 그 이상의 데이터 라인들과, 상기 데이터 라인들에 대응하는 하나 또는 그 이상의 클록 라인들 및, 전송되는 패킷의 타입을 나타내는 하나 또는 그 이상의 제어 라인들을 포함할 수 있다. 상기 링크는 처리 노드들 간의 통신을 위한 캐시 코히런트(coherent) 방식으로 또는 처리 노드와 I/O 디바이스(또는 상기 PCI 버스 또는 ISA 버스 등의 종래 구조의 I/O 버스로의 버스 브리지) 간의 통신을 위해 비-코히런트 방식으로 동작된다. 또한, 상기 링크는 도시된 바와 같은 I/O 디바이스들 간의 데이지-체인 구조를 이용하여 비-코히런트 방식으로 동작된다. 주목할 사항으로서, 하나의 처리 노드로부터 다른 처리 노드로 전송되는 패킷은 하나 또는 그 이상의 중간 노드를 통하여 전달된다. 도 12에 도시된 바와 같이, 예를 들면, 상기 처리 노드(312A)에 의해 상기 처리 노드(312D)로 전송되는 패킷은 상기 처리 노드(312B) 또는 처리 노드(312C)를 통하여 전달된다. 임의의 적절한 라우팅 알고리즘이 사용될 수 있다. 상기 컴퓨터 시스템(300)의 다른 실시예들은 도 12에 도시된 실시예에서보다 더 많거나 더 적은 처리 노드들을 포함할 수 있다.
일반적으로, 상기 패킷들은 노드들 간에 라인들(324) 상의 하나 또는 그 이상의 비트 타임으로서 전송될 수 있다. 비트 타임은 대응하는 클록 라인들 상의 상기 클록 신호의 상승 에지 또는 하강 에지이다. 상기 패킷들은 트랜잭션을 개시하기 위한 커맨드(command) 패킷들과, 캐시 코히런트를 유지하기 위한 프로브 패킷들과 상기 프로브들과 커맨드들에 응답하는 응답 패킷들을 포함할 수 있다.
메모리 콘트롤러 및 인터페이스 로직에 더하여, 상기 처리 노드들(312A-312D)은 하나 또는 그 이상의 프로세서들을 포함할 수 있다. 대체로, 처리 노드는 적어도 하나의 프로세서를 포함하고, 원한다면 메모리와 통신하기 위한 메모리 콘트롤러 및 다른 로직을 임의로 포함할 수 있다. 특히, 각 처리 노드들(312A-312D)은 프로세서(10)의 하나 이상의 카피를 포함할 수 있다. 외부 인터페이스 유닛(18)은 상기 메모리 콘트롤러(316)뿐만 아니라 상기 노드 내의 상기 인터페이스 로직(318)을 포함할 수 있다.
상기 메모리들(314A-314D)은 적절한 임의의 메모리 디바이스들을 포함할 수 있다. 예를 들면, 메모리(314A-314D)는 하나 또는 그 이상의 램버스 DRAM(RDRAM), 동기 DRAM(SDRAM), 스태틱 RAM 등을 포함할 수 있다. 상기 컴퓨터 시스템(300)의 주소 공간은 메모리들(314A-314D) 내에서 분할된다. 처리 노드(312A-312D) 각각은 어느 주소가 어느 메모리(314A-314D)에 매핑되고, 따라서 어느 처리 노드(312A-312D)에 있는 특정 어드레스를 위한 메모리 요청이 라우팅되어야 하는지를 판단하기 위해 이용되는 메모리 맵을 포함할 수 있다. 일 실시예에서, 상기 컴퓨터 시스템(300) 내의 주소에 대한 코히런시 포인트(coherency point)는 상기 주소에 대응하는 메모리 저장 바이트들에 결합된 메모리 콘트롤러(316A-316D)이다. 달리 말하면, 상기 메모리 콘트롤러(316A-316D)는 대응하는 메모리(314A-314D)로의 메모리 액세스 각각이 캐시 코히런트 방식으로 발생함을 보증하는 것을 담당한다. 상기 메모리 콘트롤러(316A-316D)는 상기 메모리들(314A-314D)에 대한 인터페이싱을 위한 제어 회로를 구비한다. 또한, 상기 메모리 콘트롤러(316A-316D)는 메모리 요청들을 대기하기 위한 요청 큐(queue)들을 포함할 수 있다.
일반적으로, 상기 인터페이스 로직(318A-318L)은 상기 링크로부터 패킷을 수신하고, 상기 링크로 전송되어야 하는 패킷들을 버퍼링하는 다양한 버퍼들을 포함할 수 있다. 상기 컴퓨터 시스템(300)은 패킷들을 전송하기 위한 적절한 흐름 제어 메커니즘을 채용할 수 있다. 예를 들면, 일 실시예에서, 각 인터페이스 로직(318)은 상기 인터페이스 로직이 접속되는 링크의 다른 단부의 수신기 내에 각 타입 버퍼의 수의 카운트를 저장한다. 상기 인터페이스 로직은, 상기 수신 인터페이스 로직이 상기 패킷을 저장하는 프리 버퍼(free buffer)를 갖지 않는 한 패킷을 전송하지 않는다. 수신 버퍼가 전방에 패킷을 라우팅함으로써 비어있게 됨에 따라, 상기 수신 인터페이스 로직은 상기 버퍼가 비어있음을 나타내는 메시지를 상기 전송 인터페이스 로직에 전송한다. 이러한 메커니즘은 "쿠폰-기반(coupon-based)" 시스템으로 지칭될 수 있다.
상기 I/O 디바이스들(320A-320B)은 적절한 임의의 I/O 디바이스들일 것이다. 예를 들면, 상기 I/O 디바이스들(320A-320B)은 네트워크 인터페이스 카드들과, 비디오 가속기들과, 오디오 카드, 하드 또는 플로피 디스크 드라이브들 또는 드라이브 콘트롤러들, SCSI 어댑터 및 전화 카드들, 모뎀들, 사운드 카드들 및 GPIB 또는 필드 버스 인터페이스 카드들과 같은 다양한 데이터 수집 카드들을 포함할 수 있다.
수많은 변형들과 변경들이 본 명세서를 충분히 이해한 당업자에게 명백해질 것이다. 하기의 청구범위는 이러한 변형들과 변경들을 포함하도록 의도되었다.