KR101770496B1 - 다수의 상이한 어드레스 공간을 지원하는 프로세서에서의 효율적인 어드레스 변환 캐싱 - Google Patents

다수의 상이한 어드레스 공간을 지원하는 프로세서에서의 효율적인 어드레스 변환 캐싱 Download PDF

Info

Publication number
KR101770496B1
KR101770496B1 KR1020157033233A KR20157033233A KR101770496B1 KR 101770496 B1 KR101770496 B1 KR 101770496B1 KR 1020157033233 A KR1020157033233 A KR 1020157033233A KR 20157033233 A KR20157033233 A KR 20157033233A KR 101770496 B1 KR101770496 B1 KR 101770496B1
Authority
KR
South Korea
Prior art keywords
architecture
identifier
local
block
address translation
Prior art date
Application number
KR1020157033233A
Other languages
English (en)
Other versions
KR20160033654A (ko
Inventor
테리 파크스
콜린 에디
비스와나스 모한
존 디. 분다
Original Assignee
비아 얼라이언스 세미컨덕터 씨오., 엘티디.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 비아 얼라이언스 세미컨덕터 씨오., 엘티디. filed Critical 비아 얼라이언스 세미컨덕터 씨오., 엘티디.
Publication of KR20160033654A publication Critical patent/KR20160033654A/ko
Application granted granted Critical
Publication of KR101770496B1 publication Critical patent/KR101770496B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1045Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
    • G06F12/1063Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache the data cache being concurrently virtually addressed
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7839Architectures of general purpose stored program computers comprising a single central processing unit with memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/152Virtualized environment, e.g. logically partitioned system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/30Providing cache or TLB in specific location of a processing system
    • G06F2212/301In special purpose processing node, e.g. vector processor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]
    • G06F2212/683Invalidation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]
    • G06F2212/684TLB miss handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

프로세서는 변환-색인 버퍼(TLB) 및 맵핑 모듈을 포함한다. 상기 TLB는 상기 복수의 항목의 각 항목은 어드레스 변환과 유효 비트 벡터를 보유하도록 구성되고, 상기 유효 비트 벡터의 각 비트는, 각 어드레스 변환 상황에 대해, 상기 어드레스 변환이 만약 설정된 경우 유효이고, 만약 클리어한 경우 무효인 것을 나타낸다. 상기 TLB는 상기 복수의 항목의 상기 유효 비트 벡터의 비트들에 대응하는 비트들을 가지는 무효화 비트 벡터를 포함하고, 상기 무효화 비트 벡터의 설정 비트는 상기 복수의 항목의 각 항목의 상기 유효 비트 벡터의 상기 대응하는 비트를 동시에 클리어하는 것을 나타낸다. 상기 맵핑 모듈은 상기 무효화 비트 벡터를 생성한다.

Description

다수의 상이한 어드레스 공간을 지원하는 프로세서에서의 효율적인 어드레스 변환 캐싱{EFFICIENT ADDRESS TRANSLATION CACHING IN A PROCESSOR THAT SUPPORTS A LARGE NUMBER OF DIFFERENT ADDRESS SPACES}
본 출원은 전체로 참조에 의해 여기 병합된, 2014년 7월 21일에 출원된 미국 가출원 제62/026,830호에 대한 우선권을 주장한다.
본 출원은 각각이 전체로서 참조에 의해 이로써 병합된, 각각이 2014년 11월 26일에 출원된 대응하게 지시된 국제 출원의 35 U.S,C. 371 하의 국내 단계 출원인, 여기에 동시에 출원된 다음의 미국 일반출원에 관련된다.
Figure 112016057552533-pct00026
본 발명은 공통 상황 항목의 동시 무효화를 지원하는 어드레스 변환 캐시에 관한 것이다.
현재 프로세서는 가상 메모리 능력을 지원한다. 가상 메모리 시스템은, 프로그램에 의해 사용되는 가상 어드레스를 메모리에 어드레스하기 위해 하드웨어에 의해 사용되는 물리적 어드레스로 맵핑하거나 변환한다. 가상 메모리는 프로그램으로부터 물리적 메모리가 단편화(fragmentation)된 것을 은닉하고, 프로그램 재위치를 촉진하고, 이용 가능한 실제 물리적 메모리보다 더 큰 메모리 어드레스 공간을 프로그램이 볼 수 있게 하는 이점을 제공한다. 이들 이점은 다수의 프로그램 또는 공정에 의한 프로세서의 시분할을 지원하는 현재 시스템에서 특히 유리하다.
운영 시스템은, 가상 어드레스를 물리적 어드레스로 맵핑하는, 페이지 테이블이라고 종종 언급되는 메모리 변환 테이블을 생성하고 이를 페이지된 가상 메모리 시스템에 유지한다. 변환 테이블은 테이블 계층 형태일 수 있고, 이들 중 일부는 가상 어드레스를 중간 테이블 어드레스로 맵핑한다. 프로그램이 가상 어드레스를 사용하여 메모리에 액세스할 때, 변환 테이블은, 가상 어드레스를 물리적 어드레스로 변환하기 위해 액세스되어야 하는데, 이는 페이지 테이블 워크(page table walk) 또는 테이블 워크라고 흔히 언급된다. 변환 테이블에 액세스하는 추가적인 메모리 액세스는, 최종적으로 메모리에 액세스하여 프로그램이 원하는 데이터 또는 명령을 획득하는데 상당한 지연을 초래할 수 있다.
현재 프로세서는 이 문제를 해결하고 성능을 개선시키기 위해 변환 색인 버퍼(translation-lookaside buffer: TLB)를 포함한다. TLB는 가상 어드레스-물리적 어드레스 변환을 캐싱(cache)하여 변환 테이블이 액세스되어야 하는 가능성을 크게 감소시키는 프로세서의 하드웨어 구조이다. 변환될 가상 어드레스는 TLB에서 룩업(looked up)되고, 가상 어드레스가 TLB에서 히트(hit)되면 TLB는 메모리 내 변환 테이블에 액세스하여, 테이블 워크를 수행하는데 요구되는 시간보다 훨씬 더 적은 시간에 물리적 어드레스를 제공한다. TLB의 효율(히트 율)은 프로세서 성능에 결정적이다.
각 공정 또는 상황(상황)은 자기 자신의 어드레스 공간과 연관된 어드레스 변환을 구비한다. 그리하여, 하나의 공정을 위한 TLB 항목은 다른 공정에서는 부정확할 수 있다. 즉, 하나의 공정을 위해 생성된 TLB 항목은 다른 공정에서는 실효성이 없을 수 있다. TLB 효율을 감소시킬 수 있는 하나의 현상은 프로세서가 하나의 공정을 실행하는 것으로부터 다른 공정을 실행하는 것으로 스위칭 할 때이다. 시스템은, 구 공정을 위해 TLB에 캐싱 된 어드레스 변환을 사용하는 것에 의해 새로운 공정의 가상 어드레스를 부정확하게 변환하는 실효성이 없는 TLB 항목을 사용하지 않는 것을 보장하여야 한다.
본 발명은 공통 상황 항목의 동시 무효화를 지원하는 어드레스 변환 캐시를 제공하기 위한 것이다. 본 발명에서 이루고자 하는 기술적 과제들은 이상에서 언급한 기술적 과제들로 제한되지 않으며, 언급하지 않은 또 다른 기술적 과제들은 아래의 기재로부터 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
일 측면에서 본 발명의 프로세서에 있어서, 아키텍쳐 가상 프로세서 식별자를 비-아키텍쳐 범용 식별자에 맵핑하고 아키텍쳐 처리 문맥 식별자를 비-아키텍쳐 로컬 식별자에 맵핑함으로써, 상기 비-아키텍쳐 범용 식별자와 상기 비-아키텍쳐 로컬 식별자가 상기 아키텍쳐 가상 프로세서 식별자와 상기 아키텍쳐 처리 문맥 식별자가 회수될 수 있는 영역으로부터의 하나 이상의 데이터 구조에서 엔트리(entry)를 유일하게(uniquely) 식별하기 위한 맵핑 모듈; 및 복수의 어드레스 변환을 가지는 변환-색인 버퍼(TLB);를 포함하고, 상기 복수의 어드레스 변환의 각 어드레스 변환은, 상기 어드레스 변환이 범용 어드레스 변환인 때, 상기 맵핑 모듈이 상기 가상 프로세서 식별자 중 하나를 맵핑한 상기 비-아키텍쳐 범용 식별자 중 하나의 표시가 상기 어드레스 변환에 태그되고; 그리고 상기 어드레스 변환이 로컬 어드레스 변환인 때, 상기 맵핑 모듈이 상기 처리 문맥 식별자 중 하나를 맵핑한 상기 비-아키텍쳐 로컬 식별자 중 하나의 표시가 상기 어드레스 변환에 태그될 수 있다.
다른 측면에서, 본 발명의 복수의 어드레스 변환을 갖는 변환-색인 버퍼(TLB)를 갖는 프로세서를 동작하는 방법에 있어서, 아키텍쳐 가상 프로세서 식별자를 비-아키텍쳐 범용 식별자에 맵핑하고 아키텍쳐 처리 문맥 식별자를 비-아키텍쳐 로컬 식별자에 맵핑함으로써, 상기 비-아키텍쳐 범용 식별자와 상기 비-아키텍쳐 로컬 식별자가 상기 아키텍쳐 가상 프로세서 식별자와 상기 아키텍쳐 처리 문맥 식별자가 회수될 수 있는 영역으로부터의 하나 이상의 데이터 구조에서 엔트리(entry)를 유일하게(uniquely) 식별하기 위한 맵핑 단계; 상기 복수의 어드레스 변환 중 각 어드레스 변환에 대해 : 상기 어드레스 변환이 범용 어드레스 변환인 때, 상기 맵핑 모듈이 상기 가상 프로세서 식별자 중 하나를 맵핑한 상기 비-아키텍쳐 범용 식별자 중 하나의 표시를 상기 어드레스 변환에 태그하는 단계; 그리고 상기 어드레스 변환이 로컬 어드레스 변환인 때, 맵핑 모듈이 상기 처리 문맥 식별자 중 하나를 맵핑한 상기 비-아키텍쳐 로컬 식별자 중 하나의 표시를 상기 어드레스 변환에 태그하는 단계를 포함할 수 있다.
또 다른 측면에서, 본 발명의 컴퓨팅 장치에서 이용하기 위한 적어도 하나의 비-일시적인 컴퓨터 사용 가능 매체에 인코드된 컴퓨터 프로그램에 있어서,
프로세서를 특정하기 위해, 상기 매체에 구현되는 컴퓨터 사용 가능 프로그램 코드를 포함하고, 상기 컴퓨터 사용 가능 프로그램 코드는, 아키텍쳐 가상 프로세서 식별자를 비-아키텍쳐 범용 식별자에 맵핑하고 아키텍쳐 처리 문맥 식별자를 비-아키텍쳐 로컬 식별자에 맵핑함으로써, 상기 비-아키텍쳐 범용 식별자와 상기 비-아키텍쳐 로컬 식별자가 상기 아키텍쳐 가상 프로세서 식별자와 상기 아키텍쳐 처리 문맥 식별자가 회수될 수 있는 영역으로부터의 하나 이상의 데이터 구조에서 엔트리(entry)를 유일하게(uniquely) 식별하기 위한 맵핑 모듈을 특정하는 제 1 프로그램 코드; 및 복수의 어드레스 변환을 가지는 변환-색인 버퍼(TLB)를 특정하기 위한 제 2 프로그램 코드;를 포함하고, 상기 복수의 어드레스 변환의 각 어드레스 변환은, 상기 어드레스 변환이 범용 어드레스 변환인 때, 상기 맵핑 모듈이 상기 가상 프로세서 식별자 중 하나를 맵핑한 상기 비-아키텍쳐 범용 식별자 중 하나의 표시가 상기 어드레스 변환에 태그되고; 그리고 상기 어드레스 변환이 로컬 어드레스 변환인 때, 상기 맵핑 모듈이 상기 처리 문맥 식별자 중 하나를 맵핑한 상기 비-아키텍쳐 로컬 식별자 중 하나의 표시가 상기 어드레스 변환에 태그될 수 있다.
본 발명은 공통 상황 항목의 동시 무효화를 지원하는 어드레스 변환 캐시를 제공할 수 있다. 본 발명에서 얻을 수 있는 효과는 이상에서 언급한 효과들로 제한되지 않으며, 언급하지 않은 또 다른 효과들은 아래의 기재로부터 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
도 1은 프로세서를 도시하는 블록도.
도 2는 도 1의 프로세서의 부분들을 보다 상세히 도시하는 블록도.
도 3은 TLB 내 항목을 도시하는 블록도.
도 4는, TLB의 항목을 덧붙이는(populate), 도 1의 프로세서의 동작을 도시하는 흐름도.
도 5는 히트가 룩업에서 발생하였는지 여부를 결정하는 TLB 내 로직을 도시하는 블록도.
도 6은 도 2의 TLB의 도 3의 항목의 LVAL 비트 벡터(bit vector)의 비트를 무효화(invalidate)하는데 사용되는 로직을 도시하는 블록도.
도 7은 도 1의 프로세서의 제어 레지스터(control register)를 도시하는 블록도.
도 8은 도 7의 제어 레지스터의 다양한 비트의 설정에 응답하여 맵핑 모듈의 동작을 도시하는 흐름도.
도 9는 도 2의 국부 상황 테이블을 보다 상세히 도시하는 블록도.
도 10은 도 2의 전체 상황 테이블을 보다 상세히 도시하는 블록도.
도 11은 다수의 공정 상황 식별자를 지원하는 프로세서의 아키텍처 특징을 디스에이블하는 명령을 수행하는, 도 1의 프로세서의 동작을 도시하는 흐름도.
도 12는 현재 어드레스 변환 상황을 변화시키는 명령을 수행하는, 도 1의 프로세서의 동작을 도시하는 흐름도.
도 13은 도 12, 도 19 및 도 21의 블록(1206, 1918 및 2106)에서 각각 호출된 MOV_CR3() 루틴을 수행하는, 도 1의 프로세서의 동작을 도시하는 흐름도.
도 14는 도 13, 도 16 및 도 17의 블록(1308, 1606 및 1722)에서 각각 호출된 할당_국부_상황() 루틴(ALLOCATE_LOCAL_CONTEXT() routine)을 수행하는, 도 1의 프로세서의 동작을 도시하는 흐름도.
도 15는 하이퍼바이저(hypervisor)로부터 게스트(guest)로 전이가 일어날 때 도 1의 프로세서의 동작을 도시하는 흐름도.
도 16은 MOVTOCR3NOVPID 루틴을 수행하는, 도 1의 프로세서의 동작을 도시하는 흐름도.
도 17은 MOVTOCR3VPID 루틴을 수행하는, 도 1의 프로세서의 동작을 도시하는 흐름도.
도 18은 도 17의 블록(1712)에서 호출된 할당_전체_상황() 루틴(ALLOCATE_GLOBAL_CONTEXT() routine)을 수행하는, 도 1의 프로세서의 동작을 도시하는 흐름도.
도 19는 하이퍼바이저로부터 게스트로 전이가 일어날 때 도 1의 프로세서의 동작을 도시하는 흐름도.
도 20은 시스템 관리 모드(system management mode: SMM)로 전이가 일어날 때 도 1의 프로세서의 동작을 도시하는 흐름도.
도 21은 SMM로부터 전이가 일어날 때 도 1의 프로세서의 동작을 도시하는 흐름도.
도 22는 공정 상황 식별자와 연관된 TLB 어드레스 변환을 무효화하는 명령을 수행하는 프로세서의 동작을 도시하는 흐름도.
도 23a 및 도 23b는 가상 프로세서 식별자와 연관된 TLB 어드레스 변환을 무효화하는 명령을 수행하는 프로세서의 동작을 도시하는 흐름도.
도 24는 확장된 페이지 테이블 포인터와 연관된 TLB 어드레스 변환을 무효화하는 명령을 수행하는 프로세서의 동작을 도시하는 흐름도.
용어 정리
어드레스 변환 상황(address translation context)은 제1 메모리 어드레스 공간으로부터 제2 메모리 어드레스 공간으로 메모리 어드레스의 변환을 인에이블하는 정보 세트이다. x86 ISA에서 어드레스 변환 상황의 일례는 CR3 레지스터(및 다른 제어 레지스터, 예를 들어, CR0과 CR4 및 관련된 모델 특정 레지스터(model specific register: MSR)), 페이지 테이블, 페이지 디렉토리, 페이지-디렉토리-포인터 테이블, PML4 테이블, 확장된 페이지 테이블 포인터(extended page table pointer: EPTP), 및/또는 선형 어드레스를 물리적 메모리 어드레스로 변환을 인에이블하는 확장된 페이지 테이블(extended page table: EPT)에 포함된 정보 세트일 수 있다. x86 ISA의 경우에, 변환은 프로세서 내 하드웨어에 의해 수행된다. 그러나, 다른 ISA(예를 들어, MIPS, SPARC)에서는 운영 시스템이 변환을 수행할 수 있다. ARM ISA에서 어드레스 변환 상황의 다른 예는 변환 테이블 베이스 레지스터(translation table base register: TTBR)(및 다른 제어 레지스터, 예를 들어, 변환 제어 레지스터(translation control register: TCR), 시스템 제어 레지스터(system control register: SCTLR) 및 Hyp 구성 레지스터(Hyp configuration register: HCR)) 및/또는 변환 테이블에 포함된 정보 세트일 수 있다.
어드레스 변환은 한 쌍의 메모리 어드레스이고, 여기서 한 쌍의 메모리 어드레스 중 제1 어드레스는 변환될 어드레스이고, 한 쌍의 메모리 어드레스 중 제2 어드레스는 변환된 어드레스이다.
국부 어드레스 변환(local address translation)은 단일 어드레스 변환 상황을 사용하여 변환될 어드레스를 변환된 어드레스로 변환하는 어드레스 변환이다.
전체 어드레스 변환(global address translation)은 다수의 어드레스 변환 상황을 사용하여 변환될 어드레스를 변환된 어드레스로 변환하는 어드레스 변환이다.
국부 메모리 페이지(local memory page) 또는 국부 페이지는 국부 어드레스 변환을 가지는 메모리 페이지이다.
전체 메모리 페이지(global memory page) 또는 전체 페이지는 전체 어드레스 변환을 가지는 메모리 페이지이다.
다양한 잘-알려진 명령 세트 아키텍처(instruction set architecture: ISA)는 TLB 효율을 개선시키도록 설계된 특징을 포함한다. 예를 들어, x86 ISA는 PCID, VPID 및 EPTP의 지원을 포함한다. 이것은 주어진 PCID, VPID 및/또는 EPTP와 연관된 TLB 항목을 무효화할 것을 프로세서에 명령하는 명령을 더 포함한다. 연관된 TLB 항목을 한번에 하나씩 무효화하는 프로세서를 구현하는 것은 특히 TLB가 상대적으로 커서 많은 항목이 무효화되어야 하는 경우 명령을 실행하는데 상대적으로 긴 시간을 요구할 수 있다. 유리하게는, 무효화를 요구하는 TLB의 항목을 동시에 무효화하는 것을 지원하는 실시예가 본 명세서에 설명된다.
나아가, 프로세서의 ISA에 의해 지원되는 전체 어드레스 변환 상황 공간에 요구되는 정보를 저장하는 각 TLB 항목에 많은 개수의 비트를 포함하는 것을 회피하기 위해, 큰 공간을 훨씬 더 작은 비-아키텍처 공간으로 맵핑하고 유리하게는 TLB 항목에 훨씬 더 적은 수의 비트를 포함하는 실시예가 설명된다. 그러나, 이것은, 새로운 어드레스 변환 상황이 더 작은 비-아키텍처 공간으로 맵핑되어야 할 때, 작은 비-아키텍처 공간으로부터 언맵핑(unmapped)되어야 하는 어드레스 변환 상황과 연관된 TLB 항목을 무효화할 것을 요구한다. 프로세서가 언맵핑되는 어드레스 변환 상황과 연관된 모든 TLB 항목을 유리하게는 동시에 무효화할 수 있는 실시예가 본 명세서에 설명된다. 유리하게는, 실시예는 국부 어드레스 변환과 전체 어드레스 변환의 특성을 고려하고, 2개의 유형의 TLB 항목을 무효화하는 효율성을 지원한다.
도 1을 참조하면, 프로세서(100)를 도시하는 블록도가 도시된다. 프로세서(100)는 명령 캐시(102), 마이크로코드(106)를 포함하는 명령 변환기(104), 실행 유닛(112), 아키텍처 레지스터(114), 메모리 서브시스템(122), 캐시 메모리 계층(118) 및 버스 인터페이스 유닛(116)을 포함한다. 다른 기능 유닛(미도시)은 특히, 변환 테이블 워크를 수행하여 가상 어드레스 - 물리적 어드레스 변환을 생성하는 테이블 워크 엔진; 분기 예측기(branch predictor); 재정렬 유닛(reorder unit); 재정렬 버퍼; 예약 스테이션(reservations station); 명령 스케줄러(instruction scheduler); 및 데이터 프리페치 유닛(data prefetch unit)을 포함할 수 있다. 일 실시예에서, 마이크로프로세서(100)는 프로그램 순서에서 벗어나 실행하기 위해 명령을 발행(issue)할 수 있다는 점에서 비순차 실행 마이크로아키텍처(out-of-order execution microarchitecture)를 구비한다. 일 실시예에서, 마이크로프로세서(100)는 클록 사이클마다 다수의 명령을 실행을 위한 실행 유닛(112)으로 발행할 수 있다는 점에서 수퍼스칼라(superscalar) 마이크로아키텍처를 구비한다. 일 실시예에서, 마이크로프로세서(100)는 x86 명령 세트 아키텍처(ISA)에 실질적으로 순응하지만, 다른 ISA들도 고려된다.
명령 캐시(102)는 버스 인터페이스 유닛(116)과 통신하는 시스템 메모리로부터 페치된 아키텍처 명령을 캐싱한다. 바람직하게는, TLB, 예를 들어, 도 2의 TLB(206)는 명령을 위한 어드레스 변환을 캐싱하는 명령 캐시(102)와 연관된다. 일 실시예에서, 명령 변환기(104)는 명령 캐시(102)로부터 페치된 아키텍처 명령을 마이크로프로세서(100)의 마이크로아키텍처의 마이크로명령 세트의 마이크로명령으로 변환한다. 실행 유닛(112)은 마이크로명령을 실행한다. 아키텍처 명령으로부터 변환되는 마이크로명령은 아키텍처 명령을 구현한다.
실행 유닛(112)은 아키텍처 레지스터(114)로부터 (또는 아마도 재정렬 버퍼 또는 순방향 버스(forwarding bus)로부터) 소스 피연산자(source operand)를 수신한다. 피연산자는 메모리 서브시스템(122)을 통해 메모리로부터 레지스터(114)로 로딩된다. 메모리 서브시스템(122)은 데이터를 캐시 메모리 계층(118)(예를 들어, 레벨-1 데이터 캐시, 레벨-2 캐시, 레벨-3 캐시)에 기록하고 이 계층으로부터 데이터를 판독한다. 바람직하게는, 각 캐시 메모리는 연관된 TLB, 예를 들어, 도 2의 TLB(206)를 구비한다. 캐시 미스(cache miss)가 캐시 계층(118)의 마지막 레벨 캐시에 일어나면, 데이터 또는 명령 캐시 라인은 버스 인터페이스 유닛(116)으로부터 요청되고, 이 버스 인터페이스 유닛은 시스템 메모리로부터 캐시 라인을 페치(fetch)한다.
메모리 서브시스템(122)(예를 들어, 테이블 워크 엔진)은 또한 시스템 메모리에서 변환 테이블(예를 들어, x86 ISA에서 페이징 구조라고 언급되는 것)에 액세스하여 페이지 테이블 워크를 수행하여 가상 어드레스 - 물리적 어드레스 변환을 생성하고, 이 어드레스 변환은 이후 도 4를 참조하여 아래에서 보다 상세히 설명된 바와 같이 프로세서(100)의 TLB, 예를 들어 도 2의 TLB(206)에 로딩된다. 변환 테이블은 페이지(예를 들어, x86 ISA 페이지 테이블)를 맵핑하거나 또는 변환 테이블 계층에서 다른 변환 테이블(예를 들어, x86 ISA 페이지 디렉토리, 페이지-디렉토리-포인터 테이블, PML4 테이블)을 참조하는 테이블을 포함할 수 있다. 변환 테이블은 가상화된 물리적 어드레스(가상화된 물리적 어드레스는 게스트 물리적 어드레스라고 언급되고, 변환 테이블은, 예를 들어, x86 ISA에서 확장된 페이지 테이블(EPT)이라고 언급된다)를 참된 물리적 어드레스(예를 들어, x86 ISA에서 호스트 물리적 어드레스라고 언급되는 어드레스)로 맵핑하는 테이블을 더 포함할 수 있다.
바람직하게는, 프로세서(100)는 마이크로코드(106) 또는 마이크로코드 루틴을 저장하도록 구성된 마이크로코드 메모리와, 마이크로코드의 명령을 마이크로코드 메모리로부터 페치하는 마이크로시퀀서(microsequencer)를 포함하는 마이크로코드 유닛을 포함한다. 일 실시예에서, 마이크로코드 명령은 마이크로명령이다; 일 실시예에서 마이크로코드 명령은 마이크로명령으로 변환된다. 마이크로코드(106)는 아키텍처 명령, 예를 들어, 특히 복잡한 아키텍처 명령의 일부를 구현한다. 일 실시예에서, 도 11, 도 12, 도 15, 도 21, 도 22, 도 23 및 도 24의 MOV CR4, MOV CR3, VMLAUNCH/VMRESUME, RSM, INVPCID, INVVPID 및 INVEPT 명령은, 각각, 마이크로코드(106)로 구현된다. 추가적으로, 마이크로코드(106)는 프로세서(100)의 다른 기능을 수행한다. 일 실시예에서, 마이크로코드(106)는 아래에서 보다 상세히 설명된 각각 도 19 및 도 20의 VM이 빠져나가는 것(exit)과 SMI를 처리한다.
도 2를 참조하면, 도 1의 프로세서(100)의 부분들을 도시하는 블록도가 보다 상세히 도시된다. 프로세서(100)는 변환 색인 버퍼(TLB)(206), 이 TLB(206)에 연결된 맵핑 모듈(204), 이 TLB(206)와 맵핑 모듈(204)에 연결된 메모리 서브시스템(122), 국부 상황 테이블(212) 및 이 맵핑 모듈(204)에 연결된 전체 상황 테이블(214)을 포함한다. 맵핑 모듈(204)은 마이크로코드, 하드웨어 상태 기계, 또는 이들의 조합을 포함한다. 맵핑 모듈(204)은 공정 상황 식별자(process context identifier: PCID)(252), 가상 프로세서 식별자(virtual process identifier: VPID), 및 확장된 페이지 테이블 포인터(extended page table pointer: EPTP)(256)를 수신한다. 맵핑 모듈(204)은 다양한 이벤트, 예를 들어, 현재 어드레스 변환 상황을 변화시키거나 및/또는 어드레스 변환 상황을 무효화하는 명령에 응답하여 PCID(252), VPID(254) 및 EPTP(256)를 수신하고, 이들 중 일부는 아래에서 설명된다. PCID(252), VPID(254) 및 EPTP(256)를 수신한 것에 응답하여, 맵핑 모듈(204)은 무효화 국부(INV_국부(LOCAL)) 비트 벡터(232) 및/또는 무효화 전체(INV_전체(GLOBAL)) 비트 벡터(234)를 각각 생성하는 것에 의해 TLB(206)에서 다수의 국부 어드레스 변환 및/또는 다수의 전체 어드레스 변환을 유리하게는 동시에 무효화할 수 있다. 이 동작은 도 6 내지 도 8을 참조하여 아래에서 더 설명되고, 예를 들어, 그 사용은 예를 들어 도 11, 도 13 내지 도 14, 도 16, 도 18 내지 도 20 및 도 22 내지 도 24를 참조하여 아래에서 설명된다.
추가적으로, PCID(252), VPID(254) 및 EPTP(256)를 수신한 것에 응답하여, 맵핑 모듈(204)은 현재 국부 상황 식별자(CUR_LID)(242) 및/또는 현재 전체 상황 식별자(CUR_GID)(244)를 업데이트할 수 있다. CUR_LID(242)와 CUR_GID(244)는 현재 어드레스 변환 상황을 식별한다. 구체적으로, 아래에서 보다 상세히 설명된 바와 같이 CUR_LID(242)는 현재 어드레스 변환 상황의 국부 메모리 페이지를 식별하고, CUR_GID(244)는 현재 어드레스 변환 상황의 전체 메모리 페이지를 식별한다. 바람직하게는, CUR_LID(242)는 인코드된 값이고, 디코더(262)는 CUR_LID(242)를 디코딩하고 룩업 국부 유효(룩업(LOOKUP)_LVAL) 디코딩된 원-핫(one-hot) 비트 벡터 272(즉, 하나의 비트는 설정되고, 다른 비트는 클리어(clear)이다)를 TLB(206)에 제공하고; CUR_GID(244)는 인코딩된 값이고, 디코더(264)는 CUR_GID(244)를 디코딩하고 룩업 전체 유효(룩업_GVAL) 디코딩된 원-핫 비트 벡터(274)를 TLB(206)에 제공한다. CUR_LID(242)와 CUR_GID(244)를 표현하는 다른 실시예도 고려된다. 예를 들어, 이들은 디코딩된 형태로 저장될 수 있고 디코더(262/264)를 요구함이 없이 TLB(206)에 직접 제공될 수 있다.
메모리 서브시스템(122)이 TLB(206) 내 메모리 페이지의 가상 어드레스의 룩업을 수행하기를 원할 때, 이 메모리 서브시스템은 룩업 어드레스(룩업_ADDR)(276)를 TLB(206)에 제공한다. 룩업_LVAL(272)과 룩업_GVAL(274)은 또한 TLB(206)에 제공되고 룩업에 포함된다. TLB(206)는 히트가 발생하였는지 여부를 히트 지시자(224)를 통해 나타내고, 만약 그렇다면, 변환된 어드레스(TRANSLATED_ADDR)(226)를 메모리 서브시스템(122)에 제공한다. 이 동작은 도 4를 참조하여 아래에서 보다 상세히 설명된다.
도 3을 참조하면, TLB(206) 내 항목(300)을 도시하는 블록도가 도시된다. 각 TLB(206) 항목(300)은 국부 유효 비트 벡터(LVAL)(302), 전체 유효 비트 벡터(GVAL)(304), 가상 페이지 어드레스(VPADDR)(306) 및 물리적 페이지 어드레스(PPADDR)(308)를 포함한다. 일 실시예에서, LVAL(302)은 4개의 비트를 포함하고, GVAL(304)은 4개의 비트를 포함한다. LVAL(302), GVAL(304) 및 VPADDR(306)은 집합적으로 항목(300)의 태그라고 언급된다. VPADDR(306)과 PPADDR(308)은 집합적으로 항목(300)의 어드레스 변환이라고 언급된다. 도시되지는 않았지만, 바람직하게는 TLB 항목(300)은 페이지와 연관된 허가를 명시하는 허가 비트를 더 포함한다.
일 실시예에서, 맵핑 모듈(204)은, (1) 모든 LID가 고유한 VPID:EPTP:PCID 조합(확장된 페이지 테이블 특징이 인에이블된 것), VPID:PCID 조합(확장된 페이지 테이블 특징이 디스에이블된 것), 또는 PCID(가상 프로세서 식별자 특징이 디스에이블된 것)로부터 맵핑되고; (2) 모든 GID는 고유한 VPID:EPTP 조합(확장된 페이지 테이블 특징이 인에이블된 것) 또는 VPID(확장된 페이지 테이블 특징이 디스에이블된 것)로부터 맵핑되고; (3) TLB(206) 항목(300)이 유효 전체 어드레스 변환인 경우(예를 들어, GVAL(304)은 0이 아니다), 이것은 유효 국부 어드레스 변환이 아니다(LVAL(302)은 0이다); 역으로, (4) TLB(206) 항목(300)이 유효 국부 어드레스 변환인 경우(예를 들어, LVAL(302)은 0이 아니다), 이것은 유효 전체 어드레스 변환이 아니라는 (GVAL(304)은 0이다) 것을 보장한다. 상기 보장의 일부 이점은 맵핑 모듈(204)이 (1) 모든 TLB(206) 전체 어드레스 변환을 동시에 무효화하고; 및 (2) 모든 TLB(206) 국부 어드레스 변환을 동시에 무효화할 수 있다는 것이다. 나아가, 맵핑 모듈(204)은 LID가 고유한 PCID로부터 맵핑되는 것을 보장하지 않는다. 즉, 동일한 PCID 값은 다수의 가상 프로세서에 의해 명시되어 다른 LID로 맵핑될 수 있다. 유사하게, 맵핑 모듈(204)은 다수의 LID를 주어진 GID와 연관시킬 수 있다. 그러나, 그 역은 참이 아니다, 즉, 맵핑 모듈(204)은 다수의 GID를 주어진 LID와 연관시키지 않는다. 그러나, 프로세서(100)의 동작 중 어느 점에서, 모든 LID는, 예를 들어, GID와 LID의 수(N으로 표시)가 동일한 실시예에서 및 단일 PCID를 각각 명시한 N개의 가상 프로세서가 존재하는 시점에서 고유한 GID에 대응할 수 있다.
도 4를 참조하면, TLB(206)의 항목(300)을 덧붙이는, 도 1의 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(402)에서 시작한다.
블록(402)에서, 메모리 서브시스템(122)은 TLB(206) 내 룩업_ADDR(276)의 미스를 검출하고 테이블워크를 수행하여 어드레스 변환을 생성한다. 즉, 메모리 서브시스템(122)은 현재 어드레스 변환 상황을 사용하여 미스된 룩업_ADDR(276)을 물리적 어드레스로 변환한다. 메모리 서브시스템(122)은 테이블워크를 수행하는 테이블워크 엔진(미도시)을 포함할 수 있다. 테이블워크는 프로세서(100)의 가상 기계 능력과 연관된 확장된 페이지 테이블(예를 들어, x86 ISA 가상 기계 확장(Virtual Machine eXtension: VMX) 확장된 페이지 테이블 포인터(EPTP) 및 확장된 페이지 테이블(EPT)) 뿐만 아니라 레거시(legacy) 페이징 구조(예를 들어, x86 ISA 페이지 디스크립터(descriptor) 베이스 어드레스, 페이지 디스크립터 테이블 및 페이지 테이블 항목)를 사용하는 부분을 포함할 수 있다. 흐름은 블록(404)으로 진행한다.
블록(404)에서, 메모리 서브시스템(122)은 대체할 항목(300)을 TLB(206)에서 선택한다. 일 실시예에서, TLB(206)는 세트-연관 캐시이고, TLB(206)의 각 세트는 가장 오래 전에 사용된(least recently used: LRU) 또는 의사-LRU 정보와 같은 대체 정보(replacement information)를 포함하고, 메모리 서브시스템(122)은 대체 정보에 의해 지시된 인덱스된 세트(indexed set)의 항목(300)을 대체를 위해 선택한다. 흐름은 판정 블록(406)으로 진행한다.
판정 블록(406)에서, 메모리 서브시스템(122)은 어드레스 변환이 전체 변환인지 또는 국부 변환인지 여부를 결정한다. 바람직하게는, 메모리 서브시스템(122)은 블록(402)에서 테이블워크를 수행할 때 현재 어드레스 변환 상황의 정보에 기초하여 결정을 한다. 만약 전체인 경우, 흐름은 블록(412)으로 진행하고; 그렇지 않은 경우, 흐름은 블록(408)으로 진행한다.
블록(408)에서, 메모리 서브시스템(122)은 블록(404)에서 선택된 TLB(206) 항목(300)에 0의 GVAL(304)를 덧붙이는데 그 이유는 어드레스 변환이 국부 어드레스 변환이고, LVAL(302)은 (CUR_LID(242)의 표현인) 룩업_LVAL(272)과 같고, VPADDR(306)은 미스된 룩업_ADDR(276)과 같고, PPADDR(308)은 변환된 어드레스, 즉, 블록(402)에서 테이블워크에 의해 생성된 물리적 어드레스와 같기 때문이다. 흐름은 블록(408)에서 종료한다.
블록(412)에서, 메모리 서브시스템(122)은 블록(404)에서 선택된 TLB(206) 항목(300)에 (CUR_GID(244)의 표현인) 룩업_GVAL(274)과 같은 GVAL(304), 0의 LVAL(302)를 덧붙이는데 그 이유는 어드레스 변환이 전체 어드레스 변환이고, VPADDR(306)은 미스된 룩업_ADDR(276)과 같고, PPADDR(308)은 변환된 어드레스, 즉, 블록(402)에서 테이블워크에 의해 생성된 물리적 어드레스와 같기 때문이다. 흐름은 블록(412)에서 종료한다.
도 5를 참조하면, 룩업에서 히트(224)가 일어났는지 여부를 결정하는 TLB(206) 내 로직(500)을 도시하는 블록도가 도시된다. (OR 함수(534)를 제외하고) 도 5에 도시된 로직(500)은 TLB(206)의 단일 항목(300)에 대응하며 이 항목(300)에 대해 히트(524)가 생성되었는지 여부를 결정한다. 그러나, 완전 연관(fully associative) 실시예에서는, 모든 항목(300)에 대해 이 로직(500)이 TLB(206) 내에 존재하지만, 간단성과 명료함을 위해 도시되지 않은 것이고, 세트 연관(set-associative) 실시예에서는, 방식(way)마다 이 로직(500)이 존재하는 것으로 이해된다. TLB(206)의 항목(300) 전부의 히트 지시자(524)는 OR 함수(534)에 의해 부울리안 OR 연산되어 도 1의 TLB(206) 히트 지시자(224)가 생성된다. 도 5 및 다른 도면에 도시된 다양한 부울리안 함수는, 합성(synthesized)되거나 또는 주문 설계(custom designed)될 수 있는 부울리안 게이트(예를 들어, AND 게이트, OR 게이트)에 대응할 수 있으나; 이 로직(500)은 도시된 부울리안 함수, 예를 들어, 와이어드 OR (wired-OR) 연산을 수행하는 것으로 알려진 다른 하드웨어 요소를 포함할 수 있고, 정적 또는 동적 로직을 포함하는 다양한 로직 유형으로 구현될 수 있는 것으로 이해된다. 유리하게는, 설명된 실시예는 기초 공정 기술 또는 로직 유형에 상관 없이 TLB(206)의 국부 어드레스 변환 및/또는 전체 어드레스 변환을 동시에 무효화할 수 있다.
로직(500)은, 항목(300)의 LVAL(302)과 룩업_LVAL(272)의 제1 비교 함수(522)를 포함하고 그 출력은 2개의 입력 중 제1 입력으로 부울리안 OR 함수(528)에 제공된다. 로직(500)은 항목(300)의 GVAL(304)과 룩업_GVAL(274)의 제2 비교 함수(524)를 더 포함하고 그 출력은 제2 입력으로 부울리안 OR 함수(528)에 제공된다. 부울리안 OR 함수(528)의 출력은 2개의 입력 중 제1 입력으로 부울리안 AND 함수(532)에 제공된다. 로직(500)은 항목(300)의 VPADDR(306)과 룩업_ADDR(276)의 제3 비교 함수(522)를 포함하고 그 출력은 제2 입력으로 부울리안 AND 함수(532)에 제공된다. 부울리안 AND 함수(532)의 출력은 히트 지시자(524)이고, 이 히트 지시자는, 룩업_LVAL(272)이 LVAL(302)과 매칭하고, 룩업_GVAL(274)이 GVAL(304)과 매칭하며, 룩업_ADDR(276)이 VPADDR(306)과 매칭하는 경우, 참이고, 그렇지 않은 경우, 거짓이다.
도 5로부터 볼 수 있는 바와 같이, TLB(206) 내 각 국부 어드레스 변환은 국부 상황 식별자의 표현인 각 LVAL(302)에 의해 식별되고; 각 전체 어드레스 변환은 전체 상황 식별자의 표현인 각 GVAL(304)에 의해 식별된다. 룩업_LVAL(272)과 룩업_GVAL(274)은 TLB(206) 룩업에 포함된다. 그러나, 히트가 일어나기 위해서는, 룩업_ADDR(276)과 VPADDR(306)이 매칭됨과 함께, 룩업_LVAL(272)이 LVAL(302)과 매칭될 것이 요구되거나 또는 룩업_GVAL(274)이 GVAL(304)과 매칭될 것이 요구되고, 이들 둘 모두가 매칭될 것이 요구되는 것이 아니고, 즉 전체 태그가 매칭될 것이 요구되는 것이 아니다. 따라서, 도 4 및 도 5를 참조하여 설명된 동작으로부터 볼 수 있는 바와 같이, TLB(206)로부터 오는 어드레스 변환을 사용하기 위해서는, VPADDR(306)로부터 PPADDR(308)을 변환하는데 사용되는 어드레스 변환 상황은 CUR_LID(242)와 연관된 어드레스 변환 상황이어야 하거나 또는 CUR_GID(244)와 연관된 다수의 어드레스 변환 상황 중 하나이어야 한다.
도 6을 참조하면, 도 2의 TLB(206)의 도 3의 항목(300)의 LVAL 비트 벡터(302)의 비트를 무효화하는데 사용되는 로직(600)을 도시하는 블록도가 도시된다. 도 6은 LVAL 비트 벡터(302)의 단일 비트를 도시한다. 비트를 저장하는 것은 플립플롭(flip-flop), 메모리 어레이 비트 셀, 또는 다른 비트 저장 디바이스일 수 있다. 부울리안 반전(invert)(NOT) 함수(604)는 LVAL 비트 벡터(302)의 비트에 대응하는 INV_국부 비트 벡터(232)의 비트를 수신한다. 예를 들어, INV_국부 비트 벡터(232)의 비트[2]는 LVAL 비트 벡터(302)의 비트[2]를 위한 반전 함수(604)에 의해 수신된다. 반전 함수(604)의 출력은 2개의 입력 중 제1 입력으로 부울리안 AND 함수(606)에 제공된다. 부울리안 AND 함수(606)의 제2 입력은 LVAL 비트 벡터(302)의 현재 값을 수신한다. 부울리안 AND 함수(606)의 출력은 LVAL 비트 벡터(302)의 새로운 값으로 클록된다. 따라서, 맵핑 모듈(204)은 INV_국부 비트 벡터(232)의 대응하는 비트를 설정하는 것에 의해 LVAL 비트 벡터(302)의 임의의 비트를 클리어할 수 있다.
도 6은 단일 비트에 대한 로직(600)을 도시하지만, 로직(600)은 TLB(206)의 각 항목(300)에 대한 LVAL 비트 벡터(302)의 각 비트에 대해 TLB(206) 내에 복제된다. 유리하게는, INV_국부 비트 벡터(232)의 비트를 설정하는 것에 의해, 맵핑 모듈(204)은 TLB(206)의 모든 항목(300)에 대해 LVAL 비트 벡터(302)의 대응하는 비트를 클리어한다. LVAL(302)의 각 비트 위치는 각 어드레스 변환 상황에 대한 모든 국부 어드레스 변환에 대해 유효 비트이므로, 무효화 로직(600)은 맵핑 모듈(204)이 각 어드레스 변환 상황에 대해 TLB(206) 내 모든 국부 어드레스 변환을 동시에 무효화할 수 있게 한다. 이것은 각 어드레스 변환 상황에 대해 TLB(206) 내 국부 어드레스 변환을 순차적으로 무효화하는 것보다 더 빠르기 때문에 유리하다. 사실, TLB(206)의 사이즈가 (예를 들어, 큰 마지막-레벨 TLB(206)를 위해) 성장함에 따라, 절감된 시간은 보다 상당할 수 있다.
추가적으로, TLB(206)는 TLB(206)의 각 항목(300)에 대한 GVAL 비트 벡터(304)의 각 비트에 대해 유사한 로직(600)을 포함하지만, 이 로직(600)은 INV_국부 비트 벡터(232)가 아니라 INV_전체 비트 벡터(234)의 대응하는 비트를 수신한다. 따라서, 유리하게는, INV_전체 비트 벡터(234)의 비트를 설정하는 것에 의해, 맵핑 모듈(204)은 TLB(206)의 모든 항목(300)에 대한 GVAL 비트 벡터(304)의 대응하는 비트를 클리어한다. GVAL(304)의 각 비트 위치는 각 어드레스 변환 상황에 대한 모든 전체 어드레스 변환에 대해 유효 비트이므로, 무효화 로직(600)은 맵핑 모듈(204)이 각 어드레스 변환 상황에 대해 TLB(206) 내 모든 전체 어드레스 변환을 동시에 무효화하고 전술된 국부 어드레스 변환 무효화와 유사한 성능 이점을 제공하게 한다.
도시되지는 않았으나, 로직(600)은 LVAL/GVAL 비트 벡터(302/304)의 각 비트에 대해 비트를 설정하거나 클리어하는 다른 기능을 포함한다. 예를 들어, 메모리 서브시스템(122)은, 예를 들어, 도 4의 블록(408 및 412)에서의 동작에 의해 요구되는 이진 상태로 비트를 기록할 수 있다. 추가적으로, 메모리 서브시스템(122)은 예를 들어 도 22 및 도 23의 블록(2214 또는 2308)에서의 동작에 의해 각각 요구되는 TLB(206)의 특정 설정과 방식의 LVAL 비트(302)를 클리어할 수 있다. 바람직하게는, 부울리안 AND 함수(606)의 출력을 다수의 입력 중 하나의 입력에서 수신하고, 도시되지는 않았으나 전술된 다른 로직의 출력을 다른 입력에서 수신하는 다중화 기능이 비트(302) 바로 전에 존재한다.
만약 필요한 경우, LVAL(302)과 GVAL(304)의 비트는 INV_국부 비트 벡터(232)와 INV_전체 비트 벡터(234) 내 비트를 각각 설정하는 것에 의해 동시에 클리어될 수 있는 것으로 이해된다. 예를 들어, 메모리 서브시스템(122)은 블록(1828, 2318, 2326, 2408 및 2414)에서 이것을 할 수 있다. 마지막으로, 만약 필요한 경우, LVAL(302) 및/또는 GVAL(304)의 모든 비트는 INV_국부 비트 벡터(232) 및/또는 INV_전체 비트 벡터(234) 내 모든 비트를 각각 설정하는 것에 의해 동시에 클리어될 수 있다. 예를 들어, 메모리 서브시스템(122)은 블록(1602, 1914 및 2004)에서 이것을 할 수 있다.
도 7을 참조하면, 도 1의 프로세서(100)의 제어 레지스터(700)를 도시하는 블록도가 도시된다. 일 실시예에서, 제어 레지스터(700)는 TLB(206) 어드레스 변환을 무효화하기 위하여 마이크로코드(106)에 의해 기록될 수 있다. 제어 레지스터(700)는 INV_국부 비트(702), INV_전체 비트(704), INV_모든_국부 비트(INV_ALL_LOCALS bit)(706), INV_모든_전체 비트(INV_ALL_GLOBALS bit)(708), 및 INV_모든 비트(INV_ALL bit)(712)를 포함한다. 이들 비트의 설정에 응답하여 맵핑 모듈(204)의 동작이 도 8을 참조하여 설명된다.
도 8을 참조하면, 도 7의 제어 레지스터(700)의 다양한 비트의 설정에 응답하여 맵핑 모듈(204)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(802)에서 시작한다.
블록(802)에서, 제어 레지스터(700)의 하나 이상의 비트가, 예를 들어, 마이크로코드(106)에 의해 설정된다. 흐름은 판정 블록(804)으로 진행한다.
판정 블록(804)에서, INV_국부 비트(702)가 설정되면, 흐름은 블록(806)으로 진행하고; 그렇지 않은 경우, 흐름은 판정 블록(814)으로 진행한다.
블록(806)에서, 맵핑 모듈(204)은 CUR_LID(242)를 디코딩하여 원-핫 비트 벡터 값을 생성하고, INV_국부 비트 벡터(232)에 값을 선언(assert)하고, 이것은, TLB(206)의 모든 항목(300)에 대해, INV_국부 비트 벡터(232) 내 하나의 설정 비트(set bit)에 대응하는 LVAL(302)의 비트를 클리어하여, 현재 어드레스 변환 상황을 사용하여 변환된 TLB(206)에 있는 모든 국부 어드레스 변환을 무효화한다. 흐름은 판정 블록(814)으로 진행한다.
판정 블록(814)에서, INV_전체 비트(704)가 설정되면, 흐름은 블록(816)으로 진행하고; 그렇지 않은 경우, 흐름은 판정 블록(824)으로 진행한다.
블록(816)에서, 맵핑 모듈(204)은 CUR_GID(244)를 디코딩하여 원-핫 비트 벡터 값을 생성하고, INV_전체 비트 벡터(234)에 값을 선언하고, 이것은, TLB(206)의 모든 항목(300)에 대해, INV_전체 비트 벡터(234) 내 하나의 설정 비트에 대응하는 GVAL(304)의 비트를 클리어하여, 현재 어드레스 변환 상황을 사용하여 변환된 TLB(206)에 있는 모든 전체 어드레스 변환을 무효화한다. 흐름은 판정 블록(824)으로 진행한다.
판정 블록(824)에서, INV_모든_국부 비트(706)가 설정된 경우, 흐름은 블록(826)으로 진행하고; 그렇지 않은 경우, 흐름은 판정 블록(834)으로 진행한다.
블록(826)에서, 맵핑 모듈(204)은 INV_국부 비트 벡터(232)의 모든 비트를 선언하고, 이것은, TLB(206)의 모든 항목(300)에 대해, LVAL(302)의 모든 비트를 클리어하여, 임의의 어드레스 변환 상황을 사용하여 변환된 TLB(206)에 있는 모든 국부 어드레스 변환을 무효화한다. 흐름은 판정 블록(834)으로 진행한다.
판정 블록(834)에서, INV_모든_전체 비트(708)가 설정된 경우, 흐름은 블록(836)으로 진행하고; 그렇지 않은 경우, 흐름은 판정 블록(844)으로 진행한다.
블록(836)에서, 맵핑 모듈(204)은 INV_전체 비트 벡터(234)의 모든 비트를 선언하고, 이것은, TLB(206)의 모든 항목(300)에 대해, GVAL(304)의 모든 비트를 클리어하여, 임의의 어드레스 변환 상황을 사용하여 변환된 TLB(206)에 있는 모든 전체 어드레스 변환을 무효화한다. 흐름은 판정 블록(844)으로 진행한다.
판정 블록(844)에서, INV_모든 비트(712)가 설정되면, 흐름은 블록(846)으로 진행하고; 그렇지 않은 경우, 흐름은 종료한다.
블록(846)에서, 맵핑 모듈(204)은 INV_국부 비트 벡터(232)의 모든 비트와 INV_전체 비트 벡터(234)의 모든 비트를 선언하고, 이것은, TLB(206)의 모든 항목(300)에 대해, LVAL(302)의 모든 비트와 GVAL(304)의 모든 비트를 클리어하여, 임의의 어드레스 변환 상황을 사용하여 변환된 TLB(206)에 있는 모든 어드레스 변환을 무효화한다. 흐름은 블록(846)에서 종료한다.
도 9를 참조하면, 도 2의 국부 상황 테이블(212)을 보다 상세히 도시하는 블록도가 도시된다. 각 항목은 유효 비트(906), 전체 상황 식별자(global context identifier)(GID)(904), 국부 상황 식별자(local context identifier)(LID)(902), 공정 상황 식별자(process context identifier: PCID)(908), 및 어드레스 변환 상황 베이스 어드레스(address translation context base address)(ATCB)(912)를 포함한다. 국부 상황 테이블(212)에 있는 각 항목에 대해, GID(904)는 매칭하는 GID(1004) 값을 가지는 도 10의 전체 상황 테이블(214)에서 연관된 항목을 가리킨다. 맵핑 모듈(204)은 국부 상황 테이블(212) 내 각 유효 항목이 고유한 LID(902) 값을 가지고 전체 상황 테이블(214) 내 각 유효 항목이 고유한 GID(1004) 값을 가지는 것을 보장한다. 예시적인 예에서, x86 ISA 실시예에서, PCID(908)는 x86 공정 상황 식별자(PCID)에 대응하고, ATCB(912)는 CR3 레지스터의 비트[63:12]에 대응하고, 이것은 페이지 디렉토리 베이스 어드레스를 명시한다. 일 실시예에서, CR3의 비트[63:36]는 사용되지 않는다. 도 9의 실시예에서, 국부 상황 테이블(212)은 4개의 항목을 포함하고, 각 LID(902)는 사이즈 4의 비-아키텍처 국부 상황 식별자 공간을 의미(implies)하는 2-비트 인코딩된 값이다. 일 실시예에서, 이것은 또한 최대 4개의 어드레스 변환 상황에 대한 어드레스 변환이 임의의 주어진 시간에서 TLB(206) 내에서 유효할 수 있다는 것을 의미한다. 그러나, 상이한 개수의 항목과 LID(902) 비트를 가지는 다른 실시예들도 고려된다. 일 실시예에서, 맵핑 모듈(204)은, 유효 비트(906)를 클리어하고, 고유한 값을 국부 상황 테이블(212) 항목 각각의 LID(902)에 배정하고, 나머지 필드를 0으로 하는(zeroing out) 것에 의해 국부 상황 테이블(212)을 초기화한다. 일 실시예에서, 맵핑 모듈(204)은 최상위 항목(topmost entry)이 가장 최근에 사용되고 바닥 항목(bottom entry)이 가장 오래 전에 사용된 스택으로 국부 상황 테이블(212) 항목을 유지한다. 가장 오래 전에 사용된 (바닥) 항목에 할당이 이루어진다. 맵핑 모듈(204)은 필요에 따라 이 항목을 상위 항목으로 만들고 다른 항목을 아래로 이동시키는 것에 의해 항목을 가장 최근에 사용된 항목으로 한다. 국부 상황 테이블(212)과 그 필드의 동작은 나머지 도면을 참조하여 아래에서 보다 상세히 설명된다.
도 10을 참조하면, 도 2의 전체 상황 테이블(214)을 보다 상세히 도시하는 블록도가 도시된다. 각 항목은 유효 비트(1006), 전체 상황 식별자(GID)(1004), 가상 프로세서 식별자(virtual processor identifier: VPID)(1008), 및 확장된 페이지 테이블 포인터(EPTP)(1012)를 포함한다. 예시적인 예로서, x86 ISA 실시예에서, VPID(1008)는 x86 VMX 가상 프로세서 식별자(VPID)에 대응하고, EPTP(1012)는 가상 기계 제어 구조(virtual machine control structure: VMCS)에 명시된 VMX EPTP에 대응한다. 도 10의 실시예에서, 전체 상황 테이블(214)은 4개의 항목을 포함하고, 각 GID(1004)는 사이즈 4의 비-아키텍처 전체 상황 식별자 공간을 의미하는 2-비트 인코딩된 값이다. 그러나, 상이한 개수의 항목과 GID(904) 비트를 가지는 다른 실시예들도 고려된다. 일 실시예에서, 맵핑 모듈(204)은, 유효 비트(1006)를 클리어하고, 고유한 값을 전체 상황 테이블(214) 항목 각각의 GID(1004)에 배정하고, 나머지 필드를 0으로 하는 것에 의해 전체 상황 테이블(214)을 초기화한다. 일 실시예에서, 맵핑 모듈(204)은 국부 상황 테이블(212)에 대해 전술된 방식과 유사한 스택으로 전체 상황 테이블(214) 항목을 유지한다. 전체 상황 테이블(214)과 그 필드의 동작은 나머지 도면을 참조하여 아래에 보다 상세히 설명된다. 본 명세서의 설명으로부터 볼 수 있는 바와 같이, LID와 GID의 연관은 프로세서(100)의 동작이 진행됨에 따라 변할 수 있다. 예를 들어, 도 9 및 도 10의 실시예에서, 주어진 GID는 1개 내지 4개의 연관된 LID를 구비할 수 있다. 그러나, 2개 이상의 LID가 GID와 연관된 경우, 이것은 가능한 현재 유효 GID의 개수를 감소시킨다. 예를 들어, 단 2개의 GID 각각이 2개의 연관된 LID를 구비하는 경우 이 단 2개의 GID만이 유효할 수 있다.
x86 ISA 실시예에서, 비-VMX 선형 어드레스 공간의 경우에, VPID와 EPTP는 0으로 설정되고; VMX 호스트의 경우에, VPID와 EPTP는 0으로 설정된다. 그리하여, 하나의 x86 ISA 실시예에서, 맵핑 모듈(204)은, 항상 유효하고(즉, V 비트(1006)는 설정 값으로 초기화되고 항상 설정으로 유지된다), 대체될 수 없고(예를 들어, 가장 오래 전에 사용된 항목이 될 수 없다), 그리고 VPID(1008)와 EPTP(1012)가 0으로 설정되어 항상 유지되기 때문에, 전체 테이블(214)의 하나의 항목(상위 항목, 항목 0)을 특수한 항목으로 취급한다. 유리하게는, 이것은 제한된 개수의 LID에 많은 수의 어드레스 변환 상황이 맵핑된 결과 수행되어야 하는 TLB(206) 어드레스 변환 무효화의 양을 감소시킨다. 일 실시예에서, 국부 상황 테이블(212)과 전체 상황 테이블(214)은 프로세서(100)의 프라이빗 메모리(private memory: PRAM)에 보유(hold)된다.
도 11을 참조하면, 다수의 공정 상황 식별자를 지원하는 프로세서(100)의 아키텍처 특징을 디스에이블하는 명령을 수행하는, 도 1의 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(1102)에서 시작한다.
블록(1102)에서, 프로세서(100)는 다수의 공정 상황 식별자를 지원하는 프로세서(100)의 아키텍처 특징을 디스에이블하는 명령을 만난다. 예시적인 예로서, x86 ISA 실시예에서, 명령은, x86 PCID 특징을 디스에이블하는, PCIDE 비트를 클리어하는 MOV CR4 명령이다. 흐름은 블록(1104)으로 진행한다.
블록(1104)에서, 블록(1102)에서 만난 명령에 응답하여, 맵핑 모듈(204)은 모든 유효 항목이 0이 아닌 PCID 값을 가지는지에 대해 국부 상황 테이블(212)을 검색한다. 흐름은 블록(1106)으로 진행한다.
블록(1106)에서, 블록(1104)에서 발견된 각 국부 상황 테이블(212) 항목에 대해, 맵핑 모듈(204)은, (1) 매칭하는 국부 상황 테이블(212) 항목의 LID(902)와 연관된 TLB(206) 내 국부 어드레스 변환을 (예를 들어, LID(902) 값을 디코딩하고, INV_국부 비트 벡터(232)에 디코딩된 값을 선언하는 것에 의해) 무효화하고, 및 (2) 매칭하는 국부 상황 테이블(212) 항목을 무효화한다. 이 실시예는 PCID 0은 항상 유효 값인 것이라고 가정하는데, 즉, PCID는 PCID 특징이 디스에이블될 때 0이라고 가정한다. 이것은 PCID 0과 연관된 TLB(206) 어드레스 변환을 변함없이 유지한다. 흐름은 블록(1106)에서 종료한다.
도 12를 참조하면, 현재 어드레스 변환 상황을 변화시키는 명령을 수행하는, 도 1의 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(1202)에서 시작한다.
블록(1202)에서, 프로세서(100)는 현재 어드레스 변환 상황을 변화시키는 명령을 만난다. 예시적인 예로서, x86 ISA 실시예에서, 명령은 MOV CR3 명령이다. 흐름은 블록(1204)으로 진행한다.
블록(1204)에서, 블록(1202)에서 만난 명령에 응답하여, 프로세서(100)는 특정 조건이 존재하는 경우 하이퍼바이저로 빠져나간다. 일 실시예에서, 명령은 마이크로코드(106)로 구현된다. 예시적인 예로서, x86 ISA 실시예에서, 하이퍼바이저는 VMX 호스트이고, 조건은, VMX 게스트가 MOV CR3 명령을 실행하였다는 것과, 에러가 있었거나 또는 VMX 제어부가 MOV CR3 명령에 응답하여 VM이 빠져나가는 것을 나타내는 것이다. 흐름은 블록(1206)으로 진행한다.
블록(1206)에서, 도 13을 참조하여 설명된, 본 명세서에서 MOV_CR3()으로 언급된 루틴이 호출된다. 블록(1206)에서 동작은 (본 명세서에 설명된 다른 동작과 같이) 루틴의 호출이라고 언급되지만, 도 11 내지 도 25에 설명된 기능은 하드웨어, 마이크로코드, 또는 하드웨어와 마이크로코드의 조합으로 구현될 수 있는 것으로 이해된다. 흐름은 블록(1206)에서 종료한다.
도 13을 참조하면, 도 12의 블록(1206)(및 각각 도 19 및 도 21의 블록(1918 및 2106))에서 호출된 MOV_CR3() 루틴(1300)을 수행하는, 도 1의 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(1304)에서 시작한다.
블록(1304)에서, 맵핑 모듈(204)은 MOV_CR3() 루틴(1300)에 입력으로 제공된 PCID 값에 유효 매칭이 있는지에 대해 국부 상황 테이블(212)을 검색한다. 루틴이 블록(1206)으로부터 호출될 때, PCID 입력 값은 블록(1202)의 명령에 의해 명시된 값이다. 루틴은 블록(1918) 또는 블록(2106)으로부터 호출될 때, PCID 입력 값은 하이퍼바이저의 PCID 값이고, 이 값은 x86 VMX 실시예의 경우에 0이다. 흐름은 판정 블록(1306)으로 진행한다.
블록(1306)에서, 맵핑 모듈(204)은 블록(1304)에서 매칭이 있었는지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(1322)으로 진행하고; 그렇지 않은 경우, 흐름은 블록(1308)으로 진행한다.
블록(1308)에서, 할당_국부_상황() 루틴이 호출되고, 이 루틴은 도 14를 참조하여 설명된다. 흐름은 블록(1312)으로 진행한다.
블록(1312)에서, 아키텍처 CR3 레지스터에는, MOV_CR3() 루틴으로 전달되는 CR3 레지스터 입력 값이 로딩된다. 블록(1206)으로부터 루틴이 호출될 때, CR3 입력 값은 블록(1202)의 명령에 의해 명시된 값이다. 루틴이 블록(1918) 또는 블록(2106)으로부터 호출될 때, CR3 입력 값은 하이퍼바이저의 CR3 값이다. 비-x86 실시예의 경우에, CR3 레지스터와 유사한 아키텍처 레지스터가 로딩된다. 흐름은 블록(1314)으로 진행한다.
블록(1314)에서, 맵핑 모듈(204)은 블록(1308)에서 할당된 국부 상황 테이블(212) 항목의 LID(902)와 GID(904)로 CUR_LID(242)와 CUR_GID(244)를 각각 업데이트한다. 이후 흐름은 블록(1316)에서 MOV_CR3() 루틴이 호출된 곳으로 리턴된다.
블록(1322)에서, 맵핑 모듈(204)은 매칭하는 국부 상황 테이블(212) 항목(즉, 블록(1304)에서 검색시 발견된 것)을 가장 최근에 사용된 항목으로 한다. 흐름은 블록(1324)으로 진행한다.
블록(1324)에서, 맵핑 모듈(204)은 매칭하는 국부 상황 테이블(212) 항목의 LID(902)와 GID(904)로 CUR_LID(242)와 CUR_GID(244)를 각각 업데이트한다. 흐름은 판정 블록(1326)으로 진행한다.
판정 블록(1326)에서, 맵핑 모듈(204)은 VM이 들어오거나 또는 빠져나가는(exit) 것에 응답하여 MOV_CR3() 루틴이 호출되었는지 여부를 결정한다. 만약 그렇다면, 흐름은 판정 블록(1328)으로 진행하고; 그렇지 않은 경우, 흐름은 블록(1334)으로 진행한다.
판정 블록(1328)에서, 맵핑 모듈(204)은 VPID 특징이 온(on)인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(1322)에서 MOV_CR3() 루틴이 호출된 곳으로 리턴하고; 그렇지 않은 경우, 흐름은 블록(1334)으로 진행한다.
블록(1334)에서, CR3 레지스터의 비트 63의 값이 0인 경우, 맵핑 모듈(204)은 (예를 들어, CUR_LID(242) 값을 디코딩하고 디코딩된 값을 INV_국부 비트 벡터(232)에 선언하는 것에 의해) CUR_LID(242) 값과 연관된 TLB(206) 내 국부 어드레스 변환을 무효화한다. 즉, 맵핑 모듈(204)은 현재 어드레스 변환 상황에 대한 국부 어드레스 변환을 무효화한다. 이후 흐름은 블록(1336)에서 MOV_CR3() 루틴이 호출된 곳으로 리턴한다.
도 14를 참조하면, 도 13의 블록(1308)(및 각각 도 16 및 도 17의 블록(1606 및 1722))에서 호출된 할당_국부_상황() 루틴(1400)을 수행하는, 도 1의 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(1404)에서 시작한다.
블록(1404)에서, 맵핑 모듈(204)은 할당할 국부 상황 테이블(212)에서 가장 오래 전에 사용된 항목을 결정한다. 가장 오래 전에 사용된 것과는 다른 대체 알고리즘을 사용하는 다른 실시예들도 고려된다. 흐름은 블록(1406)으로 진행한다.
블록(1406)에서, 맵핑 모듈(204)은 블록(1404)에서 할당된 국부 상황 테이블(212) 항목의 LID(902)와 연관된 TLB(206)에 있는 국부 어드레스 변환을 무효화한다. 즉, 맵핑 모듈(204)은 퇴출되고 있는(evicted) 어드레스 변환 상황에 대한 국부 어드레스 변환을 무효화한다. 흐름은 블록(1408)으로 진행한다.
블록(1408)에서, 맵핑 모듈(204)은 국부 상황 테이블(212) 항목에 대해 새로운 값을 연산한다. 특히, 맵핑 모듈(204)은, 값을 LID(902) 필드에 보유하고, 즉, 새로운 항목은 대체되는 항목의 LID(902) 값을 상속하고; 국부 상황 테이블(212) 항목을 적절한 전체 상황 테이블(214) 항목에 링크하는 CUR_GID(244) 값을 GID(904) 필드에 덧붙이고; 그리고 할당_국부_상황() 루틴으로 전달된 각 값을 PCID(908)와 ATCB(912) 필드에 덧붙인다. 루틴이 RSM에 응답하여 MOVTOCR3VPID, MOVTOCR3NOVPID 또는 MOV_CR3()으로부터 호출되면(도 21 참조), PCID 및 ACTB 값은 SMI에 의해 인터럽트된 공정의 값일 수 있다. VM이 들어오는 것에 응답하여 루틴이 MOVTOCR3VPID 또는 MOVTOCR3NOVPID로부터 호출되면(도 15 참조), PCID 및 ACTB 값은 제어가 전달되고 있는 가상 프로세서의 VMCS로부터 획득된 값이다. VM이 빠져나가는 것에 응답하여 루틴이 MOV_CR3()로부터 호출되면(도 19 참조), PCID 및 ACTB 값은 하이퍼바이저의 값이다. 루틴이 MOV CR3 명령에 응답하여 MOV_CR3()로부터 호출되면(도 12 참조), PCID 및 ACTB 값은 명령에 의해 명시된 값이다. 맵핑 모듈(204)은 블록(1404)에서 할당된 항목에 연산된 새로운 값을 로딩하고, 할당된 항목을 가장 최근에 사용된 항목으로 한다. 이후 흐름은 블록(1412)에서 할당_국부_상황() 루틴이 호출된 곳으로 리턴한다.
도 15를 참조하면, 하이퍼바이저로부터 게스트로 전이가 일어날 때 도 1의 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(1502)에서 시작한다.
블록(1502)에서, 하이퍼바이저로부터 게스트로 전이가 일어난다. 예시적인 예로서, x86 ISA 실시예에서, 전이는 VM이 들어오는 것이라고 언급되고, 이것은 VMX VMLAUNCH 또는 VMRESUME 명령의 실행에 응답하여 일어난다. 흐름은 블록(1504)으로 진행한다.
블록(1504)에서, 맵핑 모듈(204)은 새로운 PCIDE 값과, 새로운 PCID 값을 포함하는 CR3 레지스터의 새로운 값을 VMCS로부터 취한다. 흐름은 판정 블록(1506)으로 진행한다.
판정 블록(1506)에서, 맵핑 모듈(204)은 VPID 특징이 온인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(1508)으로 진행하고; 그렇지 않은 경우, 흐름은 블록(1512)으로 진행한다.
블록(1508)에서, 흐름은 루틴 MOVTOCR3VPID으로 전달되고, 이것은 도 17을 참조하여 설명된다.
블록(1512)에서, 흐름은 루틴 MOVTOCR3NOVPID으로 전달되고, 이것은 도 16을 참조하여 설명된다.
도 16을 참조하면, MOVTOCR3NOVPID 루틴(1600)을 수행하는, 도 1의 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(1602)에서 시작한다.
블록(1602)에서, 맵핑 모듈(204)은 TLB(206)의 모든 어드레스 변환을 무효화한다. 흐름은 블록(1604)으로 진행한다.
블록(1604)에서, 맵핑 모듈(204)은 국부 상황 테이블(212)과 전체 상황 테이블(214)을 초기화한다. 추가적으로, 맵핑 모듈(204)은 할당_국부_상황() 루틴으로 전달할 전체 상황 식별자의 임시 값을 0으로 설정한다(도 14 참조). 흐름은 블록(1606)으로 진행한다.
블록(1606)에서, 맵핑 모듈(204)은 할당_국부_상황() 루틴을 호출한다. 흐름은 블록(1608)으로 진행한다.
블록(1608)에서, 아키텍처 CR3 레지스터에는, 할당_국부_상황() 루틴으로 전달된 CR3 레지스터 입력 값이 로딩되고, 이 값은 SMI에 의해 인터럽트된 공정의 값(RSM의 경우) 또는 제어가 전달되고 있는 가상 프로세서의 VMCS로부터 획득된 값(VM이 들어오는 경우)일 수 있다. 흐름은 블록(1612)으로 진행한다.
블록(1612)에서, 맵핑 모듈(204)은 CUR_LID(242)와 CUR_GID(244)를 0 값으로 업데이트한다. 흐름은 블록(1612)에서 종료한다.
도 17을 참조하면, MOVTOCR3VPID 루틴(1700)을 수행하는, 도 1의 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(1712)에서 시작한다.
블록(1712)에서, 맵핑 모듈(204)은 할당_전체_상황() 루틴을 호출하고, 이것은 도 18을 참조하여 설명된다. 흐름은 블록(1714)으로 진행한다.
블록(1714)에서, PCIDE 비트가 0이라면, 맵핑 모듈(204)은 새로운 PCID 값을 0으로 설정한다. 흐름은 블록(1716)으로 진행한다.
블록(1716)에서, 맵핑 모듈(204)은 블록(1712)에서 호출을 통해 획득된 전체 상황 식별자와, 블록(1504)에서 획득된 새로운 PCID 값 또는 도 21의 블록(2116)으로부터 제어가 재개되는 VMX 게스트의 VMCS로부터 획득된 새로운 PCID 값 중 어느 하나인 새로운 PCID 값에 유효 매칭이 있는지에 대해 국부 상황 테이블(212)을 검색한다. 흐름은 판정 블록(1718)으로 진행한다.
판정 블록(1718)에서, 블록(1716)에서 검색시 발견된 매칭하는 항목이 있는 경우, 흐름은 블록(1724)으로 진행하고; 그렇지 않은 경우, 흐름은 블록(1722)으로 진행한다.
블록(1722)에서, 맵핑 모듈(204)은 할당_국부_상황() 루틴을 호출한다(도 14 참조). 흐름은 블록(1726)으로 진행한다.
블록(1724)에서, 맵핑 모듈(204)은 매칭하는 국부 상황 테이블(212) 항목을 가장 최근에 사용된 항목으로 한다. 맵핑 모듈(204)은 또한 새로운 국부 상황 식별자를 매칭하는 국부 상황 테이블(212) 항목의 LID(902)와 같게 한다. 흐름은 블록(1726)으로 진행한다.
블록(1726)에서, 아키텍처 CR3 레지스터에는, 블록(1504)에서 획득된 새로운 CR3 값 또는 도 21의 블록(2116)으로부터 제어가 재개되는 VMX 게스트의 VMCS로부터 획득된 새로운 CR3 값 중 어느 하나인 CR3 레지스터 값이 로딩된다. 흐름은 블록(1728)으로 진행한다.
블록(1728)에서, 맵핑 모듈(204)은 블록(1712)에서 획득된 새로운 전체 상황 식별자로 CUR_GID(244)를 업데이트하고, 블록(1722) 또는 블록(1724)에서 획득된 새로운 국부 상황 식별자로 CUR_LID(242)를 업데이트한다. 흐름은 블록(1728)에서 종료한다.
도 18을 참조하면, 도 17의 블록(1712)에서 호출된 할당_전체_상황() 루틴(1800)을 수행하는, 도 1의 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(1802)에서 시작한다.
블록(1802)에서, 맵핑 모듈(204)은 제어가 주어지고 있는 VMX 게스트의 VMCS로부터 VPID와 EPTP를 취한다. 흐름은 블록(1804)으로 진행한다.
블록(1804)에서, EPT 특징이 오프(off)이면, 맵핑 모듈(204)은 EPTP를 0으로 설정한다. 흐름은 블록(1806)으로 진행한다.
블록(1806)에서, 맵핑 모듈(204)은 VPID와 EPTP에 유효 매칭이 있는지에 대해 전체 상황 테이블(214)을 검색한다. 도 10을 참조하여 전술된 상위 항목이 특수한 항목인 실시예에서, 특수 항목은 재할당될 수 없고 특수 항목은 VMX 게스트와 연관되지 않을 수 있기 때문에 비-특수 항목만이 여기서 검색된다. 흐름은 판정 블록(1808)으로 진행한다.
판정 블록(1808)에서, 맵핑 모듈(204)은 블록(1806)에서 검색시 매칭이 발견되었는지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(1812)으로 진행하고; 그렇지 않은 경우, 흐름은 블록(1822)으로 진행한다.
블록(1812)에서, 맵핑 모듈(204)은 매칭하는 전체 상황 테이블(214) 항목을 가장 최근에 사용된 항목으로 한다. 흐름은 블록(1814)으로 진행한다.
블록(1814)에서, 맵핑 모듈(204)은 매칭하는 전체 상황 테이블(214) 항목의 GID(1004) 값으로 CUR_GID(244)를 업데이트한다. 흐름은 블록(1816)에서 할당_전체_상황() 루틴(1800)을 호출한 루틴으로 리턴한다.
블록(1822)에서, 맵핑 모듈(204)은 전체 상황 테이블(214)에서 효과적으로 퇴출될 가장 오래 전에 사용된 항목을 결정한다. 맵핑 모듈(204)은 퇴출되고 있는 항목의 GID(1004)의 값을 퇴출된_GID(EVICTED_GID) 변수에 배정한다. 흐름은 블록(1824)으로 진행한다.
블록(1824)에서, 맵핑 모듈(204)은 전체 상황 테이블(214) 항목에 대해 새로운 값을 연산한다. 특히, 맵핑 모듈(204)은 퇴출된_GID를 GID 필드(1004)에 덧붙이고, VPID(1008) 및 EPTP(1012) 필드에 할당_전체_상황() 루틴으로 전달된 각 값을 덧붙이고, 이 값은 SMI에 의해 인터럽트된 공정의 값(RSM의 경우) 또는 제어가 전달되고 있는 가상 프로세서의 VMCS으로부터 획득된 값(VM이 들어오는 경우)이다. 맵핑 모듈(204)은 이후 블록(1822)에서 할당된 항목을 연산된 새로운 값으로 로딩한다. 맵핑 모듈(204)은 할당된 항목을 가장 최근에 사용된 항목으로 한다. 흐름은 블록(1826)으로 진행한다.
블록(1826)에서, 맵핑 모듈(204)은 퇴출된_GID에 유효 매칭이 있는지에 대해 국부 상황 테이블(212)을 검색한다. 흐름은 블록(1828)으로 진행한다.
블록(1828)에서, 블록(1826)에서 발견된 국부 상황 테이블(212)의 각 항목에 대해, 맵핑 모듈(204)은 (1) 매칭하는 항목의 LID(902)와 연관된 TLB(206)에 있는 국부 어드레스 변환을 무효화하고; (2) (예를 들어, 퇴출된_GID 값을 디코딩하고, INV_전체 비트 벡터(234)에 디코딩된 값을 선언하는 것에 의해) 퇴출된_GID와 연관된 TLB(206)에 있는 전체 어드레스 변환을 무효화하고; 및 (3) 매칭하는 국부 상황 테이블(212) 항목을 무효화한다. 이후 흐름은 블록(1832)에서 할당_전체_상황() 루틴이 호출된 곳으로 리턴한다.
도 19를 참조하면, 하이퍼바이저로부터 게스트로 전이가 일어날 때 도 1의 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(1902)에서 시작한다.
블록(1902)에서, 게스트로부터 하이퍼바이저로 전이가 일어난다. 예시적인 예로서, x86 ISA 실시예에서, 전이는 VM이 빠져나가는 것이라고 언급되고, 이것은 특정 명령(이 명령 중 일부에서 VM이 빠져나가는 것은 제어 필드의 설정에 의존한다)과, 예외, 인터럽트, 태스크 스위치 및 선취 타이머 틱(preemption timer tick)과 같은 VMX 비-루트(non-root) 동작의 특정 이벤트의 실행에 응답하여 일어난다. 흐름은 블록(1904)으로 진행한다.
블록(1904)에서, 맵핑 모듈(204)은 하이퍼바이저의 PCID 값인 새로운 PCID 값을 포함하는 CR3 레지스터의 새로운 값을 VMCS로부터 취한다. 흐름은 판정 블록(1906)으로 진행한다.
블록(1906)에서, 맵핑 모듈(204)은 EPT 특징을 디스에이블하고(이 특징은 하이퍼바이저에 의해 사용되기 않으므로), 임시 전체 상황 식별자 변수를 0으로 설정하고, VPID를 0으로 설정하는데, 이들 값은 하이퍼바이저와 연관된 값이다. 흐름은 블록(1908)으로 진행한다.
블록(1908)에서, 아키텍처 CR3 레지스터에는, 블록(1904)에서 획득된 CR3 레지스터 값이 로딩된다. 흐름은 판정 블록(1912)으로 진행한다.
판정 블록(1912)에서, 맵핑 모듈(204)은 VPID 특징이 온인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(1918)으로 진행하고; 그렇지 않은 경우, 흐름은 블록(1914)으로 진행한다.
블록(1914)에서, 맵핑 모듈(204)은 TLB(206)의 모든 어드레스 변환을 무효화한다. 흐름은 블록(1916)으로 진행한다.
블록(1916)에서, 맵핑 모듈(204)은 국부 상황 테이블(212)을 초기화한다. 흐름은 블록(1918)으로 진행한다.
블록(1918)에서, MOV_CR3() 루틴에 호출이 이루어진다(도 13 참조). 흐름은 블록(1918)에서 종료한다.
도 20을 참조하면, 시스템 관리 모드(SMM)로 전이가 일어날 때 도 1의 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(2002)에서 시작한다.
블록(2002)에서, SMM으로 전이가 일어나고, 이것은 SMM 항목이라고도 언급된다. x86 ISA 실시예에서, 예를 들어, 전이는 시스템 관리 인터럽트(system management interrupt: SMI)를 통해 일어난다. 흐름은 블록(2004)으로 진행한다.
블록(2004)에서, 맵핑 모듈(204)은 TLB(206)에 있는 모든 어드레스 변환을 무효화한다. 흐름은 블록(2006)으로 진행한다.
블록(2006)에서, 맵핑 모듈(204)은 국부 상황 테이블(212)과 전체 상황 테이블(214)을 초기화한다. 흐름은 블록(2008)으로 진행한다.
블록(2008)에서, 맵핑 모듈(204)은 CUR_LID(242)와 CUR_GID(244)를 0 값으로 업데이트한다. 흐름은 블록(2008)에서 종료한다.
도 21을 참조하면, SMM으로부터 전이가 일어날 때 도 1의 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(2102)에서 시작한다.
블록(2102)에서, SMM으로부터 전이가 일어난다. x86 ISA 실시예에서, 예를 들어, 전이는 SMM (RSM) 명령으로부터 리턴을 실행하는 것을 통해 일어난다. 흐름은 판정 블록(2104)으로 진행한다.
판정 블록(2104)에서, 맵핑 모듈(204)은 VMX 특징이 턴오프(turn off)되는지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(2106)으로 진행하고; 그렇지 않은 경우, 흐름은 판정 블록(2112)으로 진행한다.
블록(2106)에서, MOV_CR3() 루틴에 호출이 이루어진다(도 13 참조). 흐름은 블록(2108)으로 진행한다.
블록(2108)에서, MOVTOCR3NOVPID로 점프가 이루어진다(도 16 참조). 흐름은 블록(2108)에서 종료한다.
판정 블록(2112)에서, 맵핑 모듈(204)은 SMM으로부터 하이퍼바이저로 리턴이 있는지 여부를 결정하고, 이 하이퍼바이저는 x86 ISA 실시예의 경우에 VMX 호스트이다. 만약 그렇다면, 흐름은 블록(2106)으로 진행하고; 그렇지 않은 경우, 흐름은 판정 블록(2114)으로 진행한다.
판정 블록(2114)에서, 맵핑 모듈(204)은 VPID 특징이 온인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(2116)으로 진행하고; 그렇지 않은 경우, 흐름은 블록(2108)으로 진행한다.
블록(2116)에서, MOVTOCR3VPID로 점프가 이루어진다(도 17 참조). 흐름은 블록(2116)에서 종료한다.
도 22를 참조하면, 공정 상황 식별자와 연관된 TLB(206) 어드레스 변환을 무효화하는 명령을 수행하는 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(2202)에서 시작한다.
블록(2202)에서, 프로세서(100)는 공정 상황 식별자와 연관된 TLB(206) 어드레스 변환을 무효화하는 명령을 만난다. 예를 들어, x86 ISA 실시예에서, 명령은 INVPCID 명령이다. 흐름은 블록(2204)으로 진행한다.
블록(2204)에서, 맵핑 모듈(204)은 현재 VPID에 유효 매칭이 있는지에 대해 전체 상황 테이블(214)을 검색한다. 매칭이 발견되지 않으면, 흐름은 종료한다. 그렇지 않은 경우, 맵핑 모듈(204)은 매칭하는 전체 상황 테이블(214) 항목의 GID(1004)를 임시 변수 THIS_GID에 배정한다. 흐름은 판정 블록(2206)으로 진행한다.
판정 블록(2206)에서, 맵핑 모듈(204)은 명령 유형(예를 들어, x86 INVPCID 명령의 레지스터 피연산자)이 0인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(2208)으로 진행하고; 그렇지 않은 경우, 흐름은 판정 블록(2216)으로 진행한다.
블록(2208)에서, 맵핑 모듈(204)은 INVPCID 명령에 명시된 PCID와 THIS_GID에 유효 매칭이 있는지에 대해 국부 상황 테이블(212)을 검색한다. 흐름은 판정 블록(2212)으로 진행한다.
판정 블록(2212)에서, 맵핑 모듈(204)은 매칭이 블록(2208)에서 발견되었는지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(2214)으로 진행하고; 그렇지 않은 경우, 흐름은 종료한다.
블록(2214)에서, 맵핑 모듈(204)은 블록(2208)에서 검색시 발견된 매칭하는 국부 상황 테이블(212) 항목의 LID(902)를 임시 변수 THIS_LID에 배정한다. 이후 맵핑 모듈(204)은, THIS_LID와 연관되고 INVPCID 명령에서 명시된 가상 어드레스(x86 ISA 실시예에서, 선형 어드레스)를 구비하는 TLB(206)에 있는 국부 어드레스 변환을 무효화한다. TLB(206)는 판독하거나 또는 기록할 TLB(206)의 행을 선택하는 인덱스 입력을 더 포함한다. 일 실시예에서, TLB(206)는 다수의 방식을 가지는 세트-연관 캐시이고, 추가적인 입력은 판독되거나 또는 기록될 방식을 명시한다. 일 실시예에서, 인덱스/방식 입력을 사용하여 무효화될 특정 항목(300)을 명시할 수 있다. 일 실시예에서, 메모리 서브시스템(122)이 가상 어드레스를 명시하는 마이크로코드 무효화 페이지 마이크로명령을 실행할 때, 메모리 서브시스템(122)은 가상 어드레스에 매칭이 있는지에 대해 TLB(206)를 프로브하고, 가상 어드레스와 히트하는 인덱스/방식을 수신한다. 메모리 서브시스템은 이후 히트하는 인덱스/방식에 있는 항목을 무효화한다. 추가적으로, 메모리 서브시스템(122)은 예를 들어 가장 오래 전에 사용된 항목의 인덱스/방식을 사용하여 TLB(206)에 항목을 할당한다. 흐름은 블록(2214)에서 종료한다.
판정 블록(2216)에서, 맵핑 모듈(204)은 유형이 1개인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(2218)으로 진행하고; 그렇지 않은 경우, 흐름은 판정 블록(2226)으로 진행한다.
블록(2218)에서, 맵핑 모듈(204)은 THIS_GID와 INVPCID 명령에 명시된 PCID에 유효 매칭이 있는지에 대해 국부 상황 테이블(212)을 검색한다. 흐름은 판정 블록(2222)으로 진행한다.
판정 블록(2222)에서, 맵핑 모듈(204)은 매칭이 블록(2218)에서 발견되었는지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(2224)으로 진행하고; 그렇지 않은 경우, 흐름이 종료한다.
블록(2224)에서, 맵핑 모듈(204)은 블록(2218)에서 검색시 발견된 매칭하는 국부 상황 테이블(212) 항목의 LID(902)를 임시 변수 THIS_LID에 배정한다. 맵핑 모듈(204)은 이후 THIS_LID와 연관된 TLB(206)에 있는 국부 어드레스 변환을 무효화한다. 흐름은 블록(2224)에서 종료한다.
판정 블록(2226)에서, 맵핑 모듈(204)은 유형이 2개인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(2228)으로 진행하고; 그렇지 않은 경우, 흐름은 판정 블록(2236)으로 진행한다.
블록(2228)에서, 맵핑 모듈(204)은 THIS_GID와 연관된 TLB(206)에 있는 전체 어드레스 변환을 무효화한다. 흐름은 블록(2238)으로 진행한다.
판정 블록(2236)에서, 맵핑 모듈(204)은 유형이 3개인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(2238)으로 진행하고; 그렇지 않은 경우, 흐름은 블록(2248)으로 진행한다.
블록(2238)에서, 맵핑 모듈(204)은 THIS_GID에 유효 매칭이 있는지에 대해 국부 상황 테이블(212)을 검색한다. 발견된 각 매칭하는 국부 상황 테이블(212) 항목에 대해, 맵핑 모듈(204)은 (1) 매칭하는 국부 상황 테이블(212) 항목의 LID(902)를 임시 변수 THIS_LID에 배정하고, 및 (2) THIS_LID와 연관된 TLB(206)에 있는 국부 어드레스 변환을 무효화한다. 흐름은 블록(2238)에서 종료한다.
블록(2248)에서, 맵핑 모듈(204)은 프로세서(100) 결함(fault)이 생성되게 하고, 이 결함은, 예를 들어, x86 ISA 실시예에서 일반적인 보호 결함이다. 흐름은 블록(2248)에서 종료한다.
도 23a 및 도 23b(집합적으로 도 23)를 참조하면, 가상 프로세서 식별자와 연관된 TLB(206) 어드레스 변환을 무효화하는 명령을 수행하는 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(2302)에서 시작한다.
블록(2302)에서, 프로세서(100)는 가상 프로세서 식별자와 연관된 TLB(206) 어드레스 변환을 무효화하는 명령을 만난다. x86 ISA 실시예에서, 예를 들어, 명령은 INVVPID 명령이다. 흐름은 판정 블록(2304)으로 진행한다.
판정 블록(2304)에서, 맵핑 모듈(204)은 명령 유형(예를 들어, x86 INVVPID 명령의 레지스터 피연산자)이 0인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(2306)으로 진행하고; 그렇지 않은 경우, 흐름은 판정 블록(2314)으로 진행한다.
블록(2306)에서, 맵핑 모듈(204)은 현재 VPID에 유효 매칭이 있는지에 대해 전체 상황 테이블(214)을 검색한다. 매칭이 발견되지 않으면, 흐름은 종료한다. 그렇지 않은 경우, 맵핑 모듈(204)은 매칭하는 전체 상황 테이블(214) 항목의 GID(1004)를 임시 변수 THIS_GID에 배정한다. 흐름은 블록(2308)으로 진행한다.
블록(2308)에서, 맵핑 모듈(204)은 THIS_GID와 연관된 전체 어드레스 변환을 무효화한다. 맵핑 모듈(204)은 또한 THIS_GID에 유효 매칭이 있는지에 대해 국부 상황 테이블(212)을 검색한다. 발견된 각 매칭하는 국부 상황 테이블(212) 항목에 대해, 맵핑 모듈(204)은 (1) 매칭하는 국부 상황 테이블(212) 항목의 LID(902)을 임시 변수 THIS_LID에 배정하고, 및 (2) THIS_LID와 연관되고 INVPCID 명령에서 명시된 가상 어드레스(x86 ISA 실시예에서 선형 어드레스)를 가지는 TLB(206)에 있는 국부 어드레스 변환을 무효화한다. 흐름은 블록(2308)에서 종료한다.
판정 블록(2314)에서, 맵핑 모듈(204)은 명령 유형이 1개인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(2316)으로 진행하고; 그렇지 않은 경우, 흐름은 판정 블록(2324)으로 진행한다.
블록(2316)에서, 맵핑 모듈(204)은 현재 VPID에 유효 매칭이 있는지에 대해 전체 상황 테이블(214)을 검색한다. 매칭이 발견되지 않는 경우, 흐름은 종료한다. 그렇지 않은 경우, 맵핑 모듈(204)은 매칭하는 전체 상황 테이블(214) 항목의 GID(1004)를 임시 변수 THIS_GID에 배정한다. 흐름은 블록(2318)으로 진행한다.
블록(2318)에서, 맵핑 모듈(204)은 THIS_GID와 연관된 전체 어드레스 변환을 무효화한다. 맵핑 모듈(204)은 또한 THIS_GID에 유효 매칭이 있는지에 대해 국부 상황 테이블(212)을 검색한다. 발견된 각 매칭하는 국부 상황 테이블(212) 항목에 대해, 맵핑 모듈(204)은 (1) 매칭하는 국부 상황 테이블(212) 항목의 LID(902)를 임시 변수 THIS_LID에 배정하고, 및 (2) THIS_LID와 연관된 TLB(206)에 있는 국부 어드레스 변환을 무효화한다. 흐름은 블록(2318)에서 종료한다.
판정 블록(2324)에서, 맵핑 모듈(204)은 명령 유형이 2개인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(2326)으로 진행하고; 그렇지 않은 경우, 흐름은 판정 블록(2334)으로 진행한다.
블록(2326)에서, 맵핑 모듈(204)은 0이 아닌 모든 VPID 값에 유효 매칭이 있는지에 대해 전체 상황 테이블(214)을 검색한다. 매칭이 발견되지 않는 경우, 흐름이 종료한다. 그렇지 않은 경우, 각 매칭하는 전체 상황 테이블(214) 항목에 대해, 맵핑 모듈(204)은 (1) 매칭하는 전체 상황 테이블(214) 항목의 GID(1004)를 임시 변수 THIS_GID에 배정하고; (2) THIS_GID와 연관된 전체 어드레스 변환을 무효화하고; 및 (3) THIS_GID에 유효 매칭이 있는지에 대해 국부 상황 테이블(212)을 검색하고, 발견된 각 매칭하는 국부 상황 테이블(212) 항목에 대해: (A) 매칭하는 국부 상황 테이블(212) 항목의 LID(902)를 임시 변수 THIS_LID에 배정하고, 및 (B) THIS_LID와 연관된 TLB(206)에 있는 국부 어드레스 변환을 무효화한다. 흐름은 블록(2326)에서 종료한다.
판정 블록(2334)에서, 맵핑 모듈(204)은 명령 유형이 3개인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(2336)으로 진행하고; 그렇지 않은 경우, 흐름은 블록(2342)으로 진행한다.
블록(2336)에서, 맵핑 모듈(204)은 현재 VPID에 유효 매칭이 있는지에 대해 전체 상황 테이블(214)을 검색한다. 매칭이 발견되지 않는 경우, 흐름은 종료한다. 그렇지 않은 경우, 맵핑 모듈(204)은 매칭하는 전체 상황 테이블(214) 항목의 GID(1004)를 임시 변수 THIS_GID에 배정한다. 흐름은 블록(2338)으로 진행한다.
블록(2338)에서, 맵핑 모듈(204)은 THIS_GID에 유효 매칭이 있는지에 대해 국부 상황 테이블(212)을 검색한다. 발견된 각 매칭하는 국부 상황 테이블(212) 항목에 대해, 맵핑 모듈(204)은 (1) 매칭하는 국부 상황 테이블(212) 항목의 LID(902)를 임시 변수 THIS_LID에 배정하고, 및 (2) THIS_LID와 연관된 TLB(206)에 있는 국부 어드레스 변환을 무효화한다. 흐름은 블록(2338)에서 종료한다.
블록(2342)에서, 맵핑 모듈(204)은 프로세서(100) 결함이 생성되게 하고, 이 결함은, 예를 들어, x86 ISA 실시예에서 일반적인 보호 결함이다. 흐름은 블록(2342)에서 종료한다.
도 24를 참조하면, 확장된 페이지 테이블 포인터와 연관된 TLB(206) 어드레스 변환을 무효화하는 명령을 수행하는 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(2402)에서 시작한다.
블록(2402)에서, 프로세서(100)는 확장된 페이지 테이블 포인터와 연관된 TLB(206) 어드레스 변환을 무효화하는 명령을 만난다. 예를 들어, x86 ISA 실시예에서, 명령은 INVEPT 명령이다. 흐름은 판정 블록(2404)으로 진행한다.
판정 블록(2404)에서, 맵핑 모듈(204)은 명령 유형(예를 들어, x86 INVEPT 명령의 레지스터 피연산자)이 1개인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(2406)으로 진행하고; 그렇지 않은 경우, 흐름은 판정 블록(2412)으로 진행한다.
블록(2406)에서, 맵핑 모듈(204)은 INVEPT 명령에 명시된 EPTP에 유효 매칭이 있는지에 대해 전체 상황 테이블(214)을 검색한다. 매칭이 발견되지 않으면, 흐름이 종료한다. 그렇지 않은 경우, 맵핑 모듈(204)은 매칭하는 전체 상황 테이블(214) 항목의 GID(1004)를 임시 변수 THIS_GID에 배정한다. 흐름은 블록(2408)으로 진행한다.
블록(2408)에서, 맵핑 모듈(204)은 THIS_GID와 연관된 전체 어드레스 변환을 무효화한다. 맵핑 모듈(204)은 또한 THIS_GID에 유효 매칭이 있는지에 대해 국부 상황 테이블(212)을 검색한다. 발견된 각 매칭하는 국부 상황 테이블(212) 항목에 대해, 맵핑 모듈(204)은 (1) 매칭하는 국부 상황 테이블(212) 항목의 LID(902)를 임시 변수 THIS_LID에 배정하고, 및 (2) THIS_LID와 연관된 TLB(206)에 있는 국부 어드레스 변환을 무효화한다. 흐름은 블록(2408)에서 종료한다.
판정 블록(2412)에서, 맵핑 모듈(204)은 명령 유형이 2개인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(2414)으로 진행하고; 그렇지 않은 경우, 흐름은 블록(2442)으로 진행한다.
블록(2414)에서, 맵핑 모듈(204)은 0이 아닌 모든 EPTP 값에 유효 매칭이 있는지에 대해 전체 상황 테이블(214)을 검색한다. 매칭이 발견되지 않는 경우, 흐름이 종료한다. 그렇지 않은 경우, 각 매칭하는 전체 상황 테이블(214) 항목에 대해, 맵핑 모듈(204)은, (1) 매칭하는 전체 상황 테이블(214) 항목의 GID(1004)를 임시 변수 THIS_GID에 배정하고; (2) THIS_GID와 연관된 전체 어드레스 변환을 무효화하고; 및 (3) THIS_GID에 유효 매칭이 있는지에 대해 국부 상황 테이블(212)을 검색하고, 발견된 각 매칭하는 국부 상황 테이블(212) 항목에 대해: (A) 매칭하는 국부 상황 테이블(212) 항목의 LID(902)를 임시 변수 THIS_LID에 배정하고, 및 (B) THIS_LID와 연관된 TLB(206)에 있는 국부 어드레스 변환을 무효화한다. 흐름은 블록(2414)에서 종료한다.
블록(2442)에서, 맵핑 모듈(204)은 프로세서(100) 결함이 생성되게 하고, 이것은, 예를 들어, x86 ISA 실시예에서 일반적인 보호 결함이다. 흐름은 블록(2442)에서 종료한다.
국부(및 전체) 상황 식별자 공간의 사이즈는 미리 결정된 사이즈(예를 들어, 4개)인 실시예가 설명되었으나, 국부(및 전체) 상황 식별자 공간의 사이즈가 성능, 사이즈 및 전력 소비와 같은 원하는 설계 목표에 따라 상이한 다른 실시예들도 고려된다. 추가적으로, 실시예가 단일 TLB에 대하여 설명되었으나, 설명된 메커니즘은 다수의 TLB를 가지는 프로세서에서 각 TLB에 대해 사용될 수 있는 것으로 이해된다. 나아가, 실시예가 TLB에 대해 설명되었으나, 본 명세서에 설명된 메커니즘은 페이징 구조 캐시, 예를 들어, x86 ISA의 PML4 캐시, PDPTE 캐시, 및 PDE 캐시와 같은 다른 변환 캐시 구조에 사용될 수도 있다. 더 나아가, 비트가 설정 또는 클리어 또는 0 또는 1의 특정 의미를 가지는 것으로 나타나는 실시예가 설명되었으나, 정-논리(positive-logic)와 부-논리(negative-logic) 구현이 사용될 수 있는 것으로 이해된다. 마지막으로, 다양한 실시예가 x86 ISA에 대해 설명되었으나, 큰 아키텍처 어드레스 변환 상황 공간을 더 작은 비-아키텍처 어드레스 변환 상황 공간으로 맵핑하고, 본 명세서에 설명된 어드레스 변환을 동시에 무효화하는 메커니즘이 ARM, MIPS 또는 Sun ISA와 같은 다른 ISA에서 사용될 수 있다.
본 발명의 다양한 실시예가 본 명세서에 설명되었으나, 이들 실시예는 단지 예시로서 비 제한적인 것으로 제시된 것으로 이해된다. 관련 컴퓨터 분야에서 통상의 지식을 가진 자라면 본 발명의 범위를 벗어남이 없이 본 명세서에 언급된 형태와 상세에 다양한 변형과 변경이 이루어질 수 있다는 것을 이해할 수 있을 것이다. 예를 들어, 소프트웨어는, 본 명세서에 설명된 장치 및 방법의, 예를 들어, 기능, 제조, 모델링, 시뮬레이션, 설명 및/또는 테스트를 구현할 수 있다. 이것은 일반 프로그래밍 언어(예를 들어, C, C++), 베릴로그(Verilog) HDL, VHDL 등을 포함하는 하드웨어 설명 언어(hardware description language: HDL), 또는 다른 이용가능한 프로그램을 사용하여 달성될 수 있다. 이러한 소프트웨어는 자기 테이프, 반도체, 자기 디스크, 또는 광 디스크(예를 들어, CD-ROM, DVD-ROM 등), 네트워크, 유선, 무선 또는 다른 통신 매체와 같은 임의의 알려진 컴퓨터 사용가능한 매체에 배치될 수 있다. 본 명세서에 설명된 장치와 방법의 실시예는 반도체 지식 재산 코어, 예를 들어, 마이크로프로세서 코어(예를 들어, HDL로 구현되거나 명시된 것)에 포함되고 집적 회로의 생산시 하드웨어로 변환될 수 있다. 추가적으로, 본 명세서에 설명된 장치와 방법은 하드웨어와 소프트웨어의 조합으로 구현될 수 있다. 따라서, 본 발명은 본 명세서에 설명된 예시적인 실시예 중 어느 것에 의해 제한되어서는 안되고, 이하 청구범위와 그 균등 범위에 따라서만 한정되어야 한다. 구체적으로, 본 발명은 일반 목적 컴퓨터에서 사용될 수 있는 마이크로프로세서 디바이스 내에서 구현될 수 있다. 마지막으로, 이 기술 분야에 통상의 지식을 가진 자라면 첨부된 청구범위에 의해 한정된 본 발명의 범위를 벗어남이 없이 본 개시된 개념과 특정 실시예를 사용하여 본 발명과 동일한 목적을 수행하는 다른 구조를 용이하게 설계하거나 변경할 수 있다는 것을 이해할 수 있을 것이다.

Claims (20)

  1. 프로세서에 있어서,
    아키텍쳐 가상 프로세서 식별자를 비-아키텍쳐 범용 식별자에 맵핑하고 아키텍쳐 처리 문맥 식별자를 비-아키텍쳐 로컬 식별자에 맵핑함으로써, 상기 비-아키텍쳐 범용 식별자와 상기 비-아키텍쳐 로컬 식별자가 상기 아키텍쳐 가상 프로세서 식별자와 상기 아키텍쳐 처리 문맥 식별자가 회수될 수 있는 영역으로부터의 하나 이상의 데이터 구조에서 엔트리(entry)를 유일하게(uniquely) 식별하기 위한 맵핑 모듈; 및
    복수의 어드레스 변환을 가지는 변환-색인 버퍼(TLB);를 포함하고, 상기 복수의 어드레스 변환의 각 어드레스 변환은,
    상기 어드레스 변환이 범용 어드레스 변환인 때, 상기 맵핑 모듈이 상기 가상 프로세서 식별자 중 하나를 맵핑한 상기 비-아키텍쳐 범용 식별자 중 하나의 표시가 상기 어드레스 변환에 태그되고; 그리고
    상기 어드레스 변환이 로컬 어드레스 변환인 때, 상기 맵핑 모듈이 상기 아키텍쳐 처리 문맥 식별자 중 하나를 맵핑한 상기 비-아키텍쳐 로컬 식별자 중 하나의 표시가 상기 어드레스 변환에 태그되는 것을 특징으로 하는 프로세서.
  2. 제 1 항에 있어서,
    상기 프로세서에 의해 지원되는 상기 아키텍쳐 처리 문맥 식별자의 공간은 상기 프로세서에 의해 지원되는 비-아키텍쳐 로컬 식별자의 공간보다 크고; 그리고
    상기 맵핑 모듈은 상기 비-아키텍쳐 로컬 식별자의 표시가 태그된 상기 변환-색인 버퍼의 모든 어드레스 변환을 무효화함으로써 새로운 아키텍쳐 처리 문맥 식별자를 상기 비-아키텍쳐 로컬 식별자에 맵핑하기 위해 비-아키텍쳐 로컬 식별자를 재사용하는 것을 특징으로 하는 프로세서.
  3. 제 1 항에 있어서,
    상기 프로세서에 의해 지원되는 상기 아키텍쳐 가상 프로세서 식별자의 공간은 상기 프로세서에 의해 지원되는 상기 비-아키텍쳐 범용 식별자의 공간보다 크고;
    상기 맵핑 모듈은 상기 비-아키텍쳐 로컬 식별자 각각을 비-아키텍쳐 범용 식별자에 결부시키며; 그리고
    상기 맵핑 모듈은 상기 비-아키텍쳐 범용 식별자의 표시가 태그된 상기 변환-색인 버퍼의 모든 어드레스 변환을 무효화하고 상기 비-아키텍쳐 범용 식별자에 연관된 비-아키텍쳐 로컬 식별자의 표시가 태그된 상기 변환-색인 버퍼의 모든 어드레스 변환을 무효화함으로써 새로운 아키텍쳐 가상 프로세서 식별자를 상기 비-아키텍쳐 범용 식별자에 맵핑하기 위해 비-아키텍쳐 범용 식별자를 재사용하는 것을 특징으로 하는 프로세서.
  4. 제 1 항에 있어서,
    상기 아키텍쳐 가상 프로세서 식별자는 x86 명령어 세트 아키텍쳐 가상 프로세서 식별자(VPIDs)인 것을 특징으로 하는 프로세서.
  5. 제 1 항에 있어서,
    상기 아키텍쳐 처리 문맥 식별자는 x86 명령어 세트 아키텍쳐 처리 문맥 식별자(PCIDs)인 것을 특징으로 하는 프로세서.
  6. 제 1 항에 있어서,
    상기 변환-색인 버퍼 범용 어드레스 변환에 태그된 상기 비-아키텍쳐 범용 식별자의 상기 표시는 원(one)-핫 비트 벡터를 포함하고, 상기 변환-색인 버퍼 로컬 어드레스 변환에 태그된 비-아키텍쳐 로컬 식별자의 상기 표시는 원-핫 비트 벡터를 포함하는 것을 특징으로 하는 프로세서.
  7. 제 1 항에 있어서,
    멀티플 연관된 아키텍쳐 연장된 페이지 테이블 포인터를 갖는 상기 가상 프로세서 식별자에 대해, 상기 맵핑 모듈은 아키텍쳐 가상 프로세서 식별자를 맵핑하고 : 아키텍쳐 연장된 페이지 테이블 포인터는 상기 비-아키텍쳐 범용 식별자와 쌍을 이루는 것을 특징으로 하는 프로세서.
  8. 제 1 항에 있어서,
    상기 아키텍쳐 가상 프로세서 식별자를 상기 비-아키텍쳐 범용 식별자에 맵핑하는 것을 유지하는 로컬 문맥 테이블을 더 포함하는 것을 특징으로 하는 프로세서.
  9. 제 1 항에 있어서,
    상기 아키텍쳐 처리 문맥 식별자를 상기 비-아키텍쳐 로컬 식별자에 맵핑하는 것을 유지하는 로컬 문맥 테이블을 더 포함하는 것을 특징으로 하는 프로세서.
  10. 제 1 항에 있어서,
    상기 맵핑 모듈은 상기 프로세서의 마이크로코드를 포함하는 것을 특징으로 하는 프로세서.
  11. 복수의 어드레스 변환을 갖는 변환-색인 버퍼(TLB)를 갖는 프로세서를 동작하는 방법에 있어서,
    아키텍쳐 가상 프로세서 식별자를 비-아키텍쳐 범용 식별자에 맵핑하고 아키텍쳐 처리 문맥 식별자를 비-아키텍쳐 로컬 식별자에 맵핑함으로써, 상기 비-아키텍쳐 범용 식별자와 상기 비-아키텍쳐 로컬 식별자가 상기 아키텍쳐 가상 프로세서 식별자와 상기 아키텍쳐 처리 문맥 식별자가 회수될 수 있는 영역으로부터의 하나 이상의 데이터 구조에서 엔트리(entry)를 유일하게(uniquely) 식별하기 위한 맵핑 단계;
    상기 복수의 어드레스 변환 중 각 어드레스 변환에 대해 :
    상기 어드레스 변환이 범용 어드레스 변환인 때, 맵핑 모듈이 상기 가상 프로세서 식별자 중 하나를 맵핑한 상기 비-아키텍쳐 범용 식별자 중 하나의 표시를 상기 어드레스 변환에 태그하는 단계; 그리고
    상기 어드레스 변환이 로컬 어드레스 변환인 때, 맵핑 모듈이 상기 아키텍쳐 처리 문맥 식별자 중 하나를 맵핑한 상기 비-아키텍쳐 로컬 식별자 중 하나의 표시를 상기 어드레스 변환에 태그하는 단계를 포함하는 것을 특징으로 하는 프로세서 동작 방법.
  12. 제 11 항에 있어서,
    상기 프로세서에 의해 지원되는 상기 아키텍쳐 처리 문맥 식별자의 공간은 상기 프로세서에 의해 지원되는 비-아키텍쳐 로컬 식별자의 공간보다 크고; 그리고
    상기 비-아키텍쳐 로컬 식별자의 표시가 태그된 상기 변환-색인 버퍼의 모든 어드레스 변환을 무효화함으로써 새로운 아키텍쳐 처리 문맥 식별자를 상기 비-아키텍쳐 로컬 식별자에 맵핑하기 위해 비-아키텍쳐 로컬 식별자를 재사용하는 것을 특징으로 하는 프로세서 동작 방법.
  13. 제 11 항에 있어서,
    상기 프로세서에 의해 지원되는 상기 아키텍쳐 가상 프로세서 식별자의 공간은 상기 프로세서에 의해 지원되는 상기 비-아키텍쳐 범용 식별자의 공간보다 크고;
    상기 비-아키텍쳐 로컬 식별자 각각을 비-아키텍쳐 범용 식별자에 결부시키며; 그리고
    상기 비-아키텍쳐 범용 식별자의 표시가 태그된 상기 변환-색인 버퍼의 모든 어드레스 변환을 무효화하고 상기 비-아키텍쳐 범용 식별자에 연관된 비-아키텍쳐 로컬 식별자의 표시가 태그된 상기 변환-색인 버퍼의 모든 어드레스 변환을 무효화함으로써 새로운 아키텍쳐 가상 프로세서 식별자를 상기 비-아키텍쳐 범용 식별자에 맵핑하기 위해 비-아키텍쳐 범용 식별자를 재사용하는 것을 특징으로 하는 프로세서 동작 방법.
  14. 제 11 항에 있어서,
    상기 아키텍쳐 가상 프로세서 식별자는 x86 명령어 세트 아키텍쳐 가상 프로세서 식별자(VPIDs)인 것을 특징으로 하는 프로세서 동작 방법.
  15. 제 11 항에 있어서,
    상기 아키텍쳐 처리 문맥 식별자는 x86 명령어 세트 아키텍쳐 처리 문맥 식별자(PCIDs)인 것을 특징으로 하는 프로세서 동작 방법.
  16. 제 11 항에 있어서,
    상기 변환-색인 버퍼 범용 어드레스 변환에 태그된 상기 비-아키텍쳐 범용 식별자의 상기 표시는 원-핫 비트 벡터를 포함하고, 상기 변환-색인 버퍼 로컬 어드레스 변환에 태그된 비-아키텍쳐 로컬 식별자의 상기 표시는 원-핫 비트 벡터를 포함하는 것을 특징으로 하는 프로세서 동작 방법.
  17. 제 11 항에 있어서,
    멀티플 연관된 아키텍쳐 연장된 페이지 테이블 포인터를 갖는 가상 프로세서 식별자에 대해, 상기 아키텍쳐 가상 프로세서 식별자를 비-아키텍쳐 범용 식별자에 맵핑 하는 단계는 아키텍쳐 가상 프로세서 식별자를 맵핑하는 것을 포함하고 : 아키텍쳐 연장된 페이지 테이블 포인터는 상기 비-아키텍쳐 범용 식별자와 쌍을 이루는 것을 특징으로 하는 프로세서 동작 방법.
  18. 제 11 항에 있어서,
    상기 맵핑하는 단계 및 상기 태그하는 단계는 상기 프로세서의 마이크로코드에 의해 수행되는 것을 특징으로 하는 프로세서 동작 방법.
  19. 컴퓨팅 장치에서 이용하기 위한 적어도 하나의 비-일시적인 컴퓨터 사용 가능 매체에 인코드된 컴퓨터 프로그램에 있어서,
    프로세서를 특정하기 위해, 상기 매체에 구현되는 컴퓨터 사용 가능 프로그램 코드를 포함하고, 상기 컴퓨터 사용 가능 프로그램 코드는,
    아키텍쳐 가상 프로세서 식별자를 비-아키텍쳐 범용 식별자에 맵핑하고 아키텍쳐 처리 문맥 식별자를 비-아키텍쳐 로컬 식별자에 맵핑함으로써, 상기 비-아키텍쳐 범용 식별자와 상기 비-아키텍쳐 로컬 식별자가 상기 아키텍쳐 가상 프로세서 식별자와 상기 아키텍쳐 처리 문맥 식별자가 회수될 수 있는 영역으로부터의 하나 이상의 데이터 구조에서 엔트리(entry)를 유일하게(uniquely) 식별하기 위한 맵핑 모듈을 특정하는 제 1 프로그램 코드; 및
    복수의 어드레스 변환을 가지는 변환-색인 버퍼(TLB)를 특정하기 위한 제 2 프로그램 코드;를 포함하고, 상기 복수의 어드레스 변환의 각 어드레스 변환은,
    상기 어드레스 변환이 범용 어드레스 변환인 때, 상기 맵핑 모듈이 상기 가상 프로세서 식별자 중 하나를 맵핑한 상기 비-아키텍쳐 범용 식별자 중 하나의 표시가 상기 어드레스 변환에 태그되고; 그리고
    상기 어드레스 변환이 로컬 어드레스 변환인 때, 상기 맵핑 모듈이 상기 아키텍쳐 처리 문맥 식별자 중 하나를 맵핑한 상기 비-아키텍쳐 로컬 식별자 중 하나의 표시가 상기 어드레스 변환에 태그되는 것을 특징으로 하는 컴퓨터 프로그램.
  20. 제 19 항에 있어서,
    적어도 하나의 비-일시적인 컴퓨터 사용 가능 매체는 디스크, 테입 또는 다른 마그네틱의 셋트, 옵틱 또는 전자식 저장 매체 중에서 선택되는 것을 특징으로 하는 컴퓨터 프로그램.
KR1020157033233A 2014-07-21 2014-11-26 다수의 상이한 어드레스 공간을 지원하는 프로세서에서의 효율적인 어드레스 변환 캐싱 KR101770496B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201462026830P 2014-07-21 2014-07-21
US62/026,830 2014-07-21
PCT/IB2014/003084 WO2016012830A1 (en) 2014-07-21 2014-11-26 Efficient address translation caching in processor that supports large number of different address spaces

Publications (2)

Publication Number Publication Date
KR20160033654A KR20160033654A (ko) 2016-03-28
KR101770496B1 true KR101770496B1 (ko) 2017-09-05

Family

ID=55162551

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020157033139A KR101770495B1 (ko) 2014-07-21 2014-11-26 공통 상황 항목의 동시 무효화를 지원하는 어드레스 변환 캐시
KR1020157033233A KR101770496B1 (ko) 2014-07-21 2014-11-26 다수의 상이한 어드레스 공간을 지원하는 프로세서에서의 효율적인 어드레스 변환 캐싱

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020157033139A KR101770495B1 (ko) 2014-07-21 2014-11-26 공통 상황 항목의 동시 무효화를 지원하는 어드레스 변환 캐시

Country Status (7)

Country Link
US (3) US9760496B2 (ko)
EP (2) EP3172673B1 (ko)
JP (1) JP6081672B2 (ko)
KR (2) KR101770495B1 (ko)
CN (3) CN105993004B (ko)
TW (3) TWI592867B (ko)
WO (3) WO2016012832A1 (ko)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101770495B1 (ko) * 2014-07-21 2017-08-22 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 공통 상황 항목의 동시 무효화를 지원하는 어드레스 변환 캐시
US9697137B2 (en) 2014-11-14 2017-07-04 Cavium, Inc. Filtering translation lookaside buffer invalidations
US9684606B2 (en) * 2014-11-14 2017-06-20 Cavium, Inc. Translation lookaside buffer invalidation suppression
US9672159B2 (en) * 2015-07-02 2017-06-06 Arm Limited Translation buffer unit management
US10509729B2 (en) * 2016-01-13 2019-12-17 Intel Corporation Address translation for scalable virtualization of input/output devices
US10042691B2 (en) 2016-04-26 2018-08-07 International Business Machines Corporation Operation of a multi-slice processor implementing exception handling in a nested translation environment
US10540292B2 (en) 2016-06-08 2020-01-21 Google Llc TLB shootdowns for low overhead
GB2551226A (en) 2016-06-08 2017-12-13 Google Inc TLB shootdowns for low overhead
US10108554B2 (en) * 2016-12-05 2018-10-23 Intel Corporation Apparatuses, methods, and systems to share translation lookaside buffer entries
US10922114B2 (en) * 2016-12-12 2021-02-16 Intel Corporation System and method to improve nested virtual machine monitor performance
US10496311B2 (en) 2017-01-19 2019-12-03 International Business Machines Corporation Run-time instrumentation of guarded storage event processing
US10579377B2 (en) 2017-01-19 2020-03-03 International Business Machines Corporation Guarded storage event handling during transactional execution
US10452288B2 (en) 2017-01-19 2019-10-22 International Business Machines Corporation Identifying processor attributes based on detecting a guarded storage event
US10732858B2 (en) 2017-01-19 2020-08-04 International Business Machines Corporation Loading and storing controls regulating the operation of a guarded storage facility
US10496292B2 (en) 2017-01-19 2019-12-03 International Business Machines Corporation Saving/restoring guarded storage controls in a virtualized environment
US10725685B2 (en) 2017-01-19 2020-07-28 International Business Machines Corporation Load logical and shift guarded instruction
US11409551B2 (en) 2017-02-27 2022-08-09 Red Hat, Inc. Emulating VPID correctly for a nested hypervisor
US10228981B2 (en) 2017-05-02 2019-03-12 Intel Corporation High-performance input-output devices supporting scalable virtualization
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US11061575B2 (en) 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10725822B2 (en) 2018-07-31 2020-07-28 Advanced Micro Devices, Inc. VMID as a GPU task container for virtualization
US11221957B2 (en) 2018-08-31 2022-01-11 International Business Machines Corporation Promotion of ERAT cache entries
US10769076B2 (en) 2018-11-21 2020-09-08 Nvidia Corporation Distributed address translation in a multi-node interconnect fabric
US11663118B2 (en) * 2021-03-10 2023-05-30 Infineon Technologies Ag Address vectors for data storage elements
US20220414016A1 (en) * 2021-06-23 2022-12-29 Advanced Micro Devices, Inc. Concurrent processing of memory mapping invalidation requests
US11947992B2 (en) 2022-05-09 2024-04-02 Alipay (Hangzhou) Information Technology Co., Ltd. Methods and apparatuses for managing TLB cache in virtualization platform
CN114595164B (zh) * 2022-05-09 2022-08-16 支付宝(杭州)信息技术有限公司 在虚拟化平台中管理tlb高速缓存的方法和装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6212613B1 (en) 1999-03-22 2001-04-03 Cisco Technology, Inc. Methods and apparatus for reusing addresses in a computer

Family Cites Families (59)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0690688B2 (ja) * 1990-10-20 1994-11-14 富士通株式会社 変換バッファを具備する情報処理装置
US5430850A (en) 1991-07-22 1995-07-04 Massachusetts Institute Of Technology Data processing system with synchronization coprocessor for multiple threads
US5845331A (en) 1994-09-28 1998-12-01 Massachusetts Institute Of Technology Memory system including guarded pointers
US5926642A (en) * 1995-10-06 1999-07-20 Advanced Micro Devices, Inc. RISC86 instruction set
US5715427A (en) 1996-01-26 1998-02-03 International Business Machines Corporation Semi-associative cache with MRU/LRU replacement
US6041396A (en) * 1996-03-14 2000-03-21 Advanced Micro Devices, Inc. Segment descriptor cache addressed by part of the physical address of the desired descriptor
US5953520A (en) 1997-09-22 1999-09-14 International Business Machines Corporation Address translation buffer for data processing system emulation mode
US6047363A (en) * 1997-10-14 2000-04-04 Advanced Micro Devices, Inc. Prefetching data using profile of cache misses from earlier code executions
JP2000020399A (ja) * 1998-06-30 2000-01-21 Hitachi Ltd 仮想計算機システム
US8074055B1 (en) 1999-01-28 2011-12-06 Ati Technologies Ulc Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code
US8121828B2 (en) 1999-01-28 2012-02-21 Ati Technologies Ulc Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions
US6490671B1 (en) * 1999-05-28 2002-12-03 Oracle Corporation System for efficiently maintaining translation lockaside buffer consistency in a multi-threaded, multi-processor virtual memory system
US6412043B1 (en) * 1999-10-01 2002-06-25 Hitachi, Ltd. Microprocessor having improved memory management unit and cache memory
US6470437B1 (en) * 1999-12-17 2002-10-22 Hewlett-Packard Company Updating and invalidating store data and removing stale cache lines in a prevalidated tag cache design
US6604187B1 (en) 2000-06-19 2003-08-05 Advanced Micro Devices, Inc. Providing global translations with address space numbers
US6510506B2 (en) * 2000-12-28 2003-01-21 Intel Corporation Error detection in cache tag array using valid vector
US7073044B2 (en) * 2001-03-30 2006-07-04 Intel Corporation Method and apparatus for sharing TLB entries
US6662289B1 (en) * 2001-05-15 2003-12-09 Hewlett-Packard Development Company, Lp. Method and apparatus for direct conveyance of physical addresses from user level code to peripheral devices in virtual memory systems
US6681311B2 (en) * 2001-07-18 2004-01-20 Ip-First, Llc Translation lookaside buffer that caches memory type information
US7089396B2 (en) 2002-10-10 2006-08-08 International Business Machines Corporation Method and profiling cache for management of virtual memory
US7363462B2 (en) 2003-04-04 2008-04-22 Sun Microsystems, Inc. Performing virtual to global address translation in processing subsystem
US7284100B2 (en) * 2003-05-12 2007-10-16 International Business Machines Corporation Invalidating storage, clearing buffer entries, and an instruction therefor
KR100591755B1 (ko) * 2003-07-22 2006-06-22 삼성전자주식회사 복수의 스레드를 동시에 처리하는 장치 및 방법
US7167970B2 (en) * 2004-05-24 2007-01-23 Sun Microsystems, Inc. Translating loads for accelerating virtualized partition
US7234038B1 (en) 2004-05-28 2007-06-19 Sun Microsystems, Inc. Page mapping cookies
US7551614B2 (en) * 2004-12-14 2009-06-23 Hewlett-Packard Development Company, L.P. Aggregation over multiple processing nodes of network resources each providing offloaded connections between applications over a network
US8522253B1 (en) * 2005-03-31 2013-08-27 Guillermo Rozas Hardware support for virtual machine and operating system context switching in translation lookaside buffers and virtually tagged caches
US20070005933A1 (en) * 2005-06-29 2007-01-04 Kopec Brian J Preventing multiple translation lookaside buffer accesses for a same page in memory
US20080005528A1 (en) 2006-06-30 2008-01-03 Morris Robert P Methods, Systems, and Computer Program Products for Using a Structured Data Storage System to Provide Access to Addressable Entities in Virtual Address Space
US20080005529A1 (en) 2006-06-30 2008-01-03 Morris Robert P Methods, Systems, and Computer Program Products for Providing Access to Addressable Entities Using a Non-Sequential Virtual Address Space
US7484073B2 (en) * 2006-07-12 2009-01-27 Microsoft Corporation Tagged translation lookaside buffers in a hypervisor computing environment
US7555628B2 (en) * 2006-08-15 2009-06-30 Intel Corporation Synchronizing a translation lookaside buffer to an extended paging table
US7490191B2 (en) 2006-09-22 2009-02-10 Intel Corporation Sharing information between guests in a virtual machine environment
US7836258B2 (en) * 2006-11-13 2010-11-16 International Business Machines Corporation Dynamic data cache invalidate with data dependent expiration
US8099559B2 (en) 2007-09-11 2012-01-17 International Business Machines Corporation System and method for generating fast instruction and data interrupts for processor design verification and validation
JP2009146344A (ja) * 2007-12-18 2009-07-02 Hitachi Ltd 計算機仮想化装置のtlb仮想化方法および計算機仮想化プログラム
US7937556B2 (en) 2008-04-30 2011-05-03 Oracle America, Inc. Minimizing TLB comparison size
JP5300407B2 (ja) 2008-10-20 2013-09-25 株式会社東芝 仮想アドレスキャッシュメモリ及び仮想アドレスキャッシュ方法
CN101398768B (zh) * 2008-10-28 2011-06-15 北京航空航天大学 一种分布式虚拟机监视器系统的构建方法
CN101794214B (zh) * 2009-02-04 2013-11-20 世意法(北京)半导体研发有限责任公司 使用多块物理寄存器映射表的寄存器重命名系统及其方法
US8443156B2 (en) 2009-03-27 2013-05-14 Vmware, Inc. Virtualization system using hardware assistance for shadow page table coherence
US8533437B2 (en) * 2009-06-01 2013-09-10 Via Technologies, Inc. Guaranteed prefetch instruction
US8412911B2 (en) 2009-06-29 2013-04-02 Oracle America, Inc. System and method to invalidate obsolete address translations
US8301865B2 (en) 2009-06-29 2012-10-30 Oracle America, Inc. System and method to manage address translation requests
US8930635B2 (en) 2009-12-14 2015-01-06 International Business Machines Corporation Page invalidation processing with setting of storage key to predefined value
US8386749B2 (en) * 2010-03-16 2013-02-26 Advanced Micro Devices, Inc. Address mapping in virtualized processing system
US9003171B2 (en) 2010-06-23 2015-04-07 Apple Inc. Page fault prediction for processing vector instructions
US8527736B1 (en) * 2010-09-07 2013-09-03 Adtran, Inc. Systems and methods for improving address translation speed
EP2668565B1 (en) * 2011-01-27 2019-11-06 Intel Corporation Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
US8880851B2 (en) * 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
JP2013097671A (ja) * 2011-11-02 2013-05-20 Fujitsu Ltd アドレス変換装置、アドレス変換装置の制御方法及び演算処理装置
CN104246692B (zh) * 2012-03-30 2018-02-23 英特尔公司 用于实时指令跟踪的系统和方法
US8856789B2 (en) * 2012-09-06 2014-10-07 Assured Information Security, Inc. Facilitating execution of a self-modifying executable
US10310973B2 (en) * 2012-10-25 2019-06-04 Nvidia Corporation Efficient memory virtualization in multi-threaded processing units
US9311239B2 (en) * 2013-03-14 2016-04-12 Intel Corporation Power efficient level one data cache access with pre-validated tags
US9507597B2 (en) 2013-06-10 2016-11-29 Via Alliance Semiconductor Co., Ltd. Selective accumulation and use of predicting unit history
WO2014209269A1 (en) 2013-06-24 2014-12-31 Intel Corporation A protected memory view for nested page table access by virtual machine guests
CN104424034A (zh) 2013-09-04 2015-03-18 华为技术有限公司 硬件资源访问方法及装置
KR101770495B1 (ko) * 2014-07-21 2017-08-22 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 공통 상황 항목의 동시 무효화를 지원하는 어드레스 변환 캐시

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6212613B1 (en) 1999-03-22 2001-04-03 Cisco Technology, Inc. Methods and apparatus for reusing addresses in a computer

Also Published As

Publication number Publication date
CN105993004A (zh) 2016-10-05
CN105993003A (zh) 2016-10-05
EP2997478A1 (en) 2016-03-23
CN105993005B (zh) 2019-06-04
US9760496B2 (en) 2017-09-12
EP2997478A4 (en) 2017-06-07
JP6081672B2 (ja) 2017-02-15
TW201617898A (zh) 2016-05-16
EP3172673A4 (en) 2018-03-28
JP2016527652A (ja) 2016-09-08
US9727480B2 (en) 2017-08-08
US20160041922A1 (en) 2016-02-11
TWI592867B (zh) 2017-07-21
CN105993003B (zh) 2019-04-09
EP3172673B1 (en) 2020-09-02
US20160179701A1 (en) 2016-06-23
EP2997478B1 (en) 2019-03-13
TWI605339B (zh) 2017-11-11
CN105993005A (zh) 2016-10-05
KR20160033653A (ko) 2016-03-28
US9842055B2 (en) 2017-12-12
WO2016012830A1 (en) 2016-01-28
TW201610683A (zh) 2016-03-16
WO2016012832A1 (en) 2016-01-28
CN105993004B (zh) 2019-04-02
KR101770495B1 (ko) 2017-08-22
TWI581098B (zh) 2017-05-01
US20160179688A1 (en) 2016-06-23
WO2016012831A1 (en) 2016-01-28
KR20160033654A (ko) 2016-03-28
EP3172673A1 (en) 2017-05-31
TW201610837A (zh) 2016-03-16

Similar Documents

Publication Publication Date Title
KR101770496B1 (ko) 다수의 상이한 어드레스 공간을 지원하는 프로세서에서의 효율적인 어드레스 변환 캐싱
US8386749B2 (en) Address mapping in virtualized processing system
US10078597B2 (en) System and method of distinguishing system management mode entries in a translation address cache of a processor
US9335943B2 (en) Method and apparatus for fine grain memory protection
TWI531912B (zh) 具有用於多上下文計算引擎的轉譯後備緩衝之處理器、用於致能多執行緒以存取於處理器中之資源之系統和方法
JP5506049B2 (ja) 部分的なエミュレーション環境におけるソース命令セットアーキテクチャ(isa)コードから、変換済みコードへの遷移
KR100369923B1 (ko) 데이타처리장치
CN107735775B (zh) 用于使用与指针相关联的范围信息来执行指令的装置和方法
WO2016055828A1 (en) Cache system with primary cache and overflow fifo cache
CN111164581A (zh) 用于修补页的系统、方法和装置

Legal Events

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