KR101587361B1 - 다수의 순차적 어드레스 변환들을 위한 통합된 tlb 구조 - Google Patents

다수의 순차적 어드레스 변환들을 위한 통합된 tlb 구조 Download PDF

Info

Publication number
KR101587361B1
KR101587361B1 KR1020140129272A KR20140129272A KR101587361B1 KR 101587361 B1 KR101587361 B1 KR 101587361B1 KR 1020140129272 A KR1020140129272 A KR 1020140129272A KR 20140129272 A KR20140129272 A KR 20140129272A KR 101587361 B1 KR101587361 B1 KR 101587361B1
Authority
KR
South Korea
Prior art keywords
address
entry
cache
domain
guest
Prior art date
Application number
KR1020140129272A
Other languages
English (en)
Other versions
KR20150034662A (ko
Inventor
브라이언 더블유. 친
슈벤두 에스. 무커르지
윌슨 피. 스나이더 2세
마이클 션 베르토네
리차드 이. 케슬러
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 KR20150034662A publication Critical patent/KR20150034662A/ko
Application granted granted Critical
Publication of KR101587361B1 publication Critical patent/KR101587361B1/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/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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/151Emulated environment, e.g. virtual machine

Abstract

가상화를 지원하는 컴퓨터 시스템이 다수의 어드레스 공간들을 유지할 수도 있다. 각 게스트 운영 체제들은 게스트 가상 어드레스들 (GVA들) 을 채용하며, 이 GVA들은 게스트 물리적 어드레스들 (GPA들) 로 변환된다. 하나 이상의 게스트 운영 체제들을 관리하는 하이퍼바이저가 GPA들을 루트 물리적 어드레스들 (RPA들) 로 변환한다. MTLB는 다수의 어드레스 공간들 간의 변환사항들을 캐시하고, 이로써 고속 어드레스 변환 및 메모리 액세스를 가능하게 한다. MTLB는 다수의 상이한 캐시들로서 논리적으로 어드레스가능하며, 상이한 공간들을 각 논리적 캐시에 할당하도록 재구성될 수도 있다.

Description

다수의 순차적 어드레스 변환들을 위한 통합된 TLB 구조{Merged TLB Structure for Multiple Sequential Address Translations}
컴퓨터 시스템들에서, 가상화는 하드웨어 플랫폼, 운영 체제, 또는 메모리와 같은 컴퓨팅 리소스들이 호스트 머신으로 지칭되는 컴퓨터 시스템에 의해서 시뮬레이션되게 하는 프로세스이다. 통상적인 호스트 머신은 또한 게스트 머신들로 지칭되는 가상 머신들을 생성 및 실행하는 소프트웨어 또는 하드웨인 하이퍼바이저를 운영한다. 하드웨어 가상화를 통해서, 하이퍼바이저는 가상 하드웨어 운영 플랫폼을 각 게스트 머신에 제공한다. 가상 하드웨어 운영 플랫폼과 인터페이싱함으로써, 게스트 머신들은 호스트 머신의 컴퓨팅 리소스들에 액세스하여서 그들의 각각의 동작들을 실행할 수 있다. 이로써, 단일 호스트 머신은 가상화를 통해서 다수의 운영 체제들 또는 다른 소프트웨어를 동시에 지원할 수 있다.
통상적인 호스트 머신에서, 가상 운영 플랫폼은 "실제" 하드웨어 플랫폼으로서 게스트 머신들에 제공되며, 이는 하드웨어 플랫폼의 가상 특성이 게스트 머신들에게 인지될 필요가 없음을 의미한다. 또한, 호스트 머신은 컴퓨팅 리소스들을 액세스할 시에 게스트 머신들 간의 충돌들을 피해야 한다. 이러한 목적들을 달성하기 위해서, 호스트 머신은 게스트 소프트웨어와 통상적인 호스트 리소스들 간의 변환 방식 (translation scheme) 을 구현할 수도 있다. 예를 들어서, 메모리 리소스들에 대해서, 호스트 머신은 각각의 게스트 머신들에 제공된 가상 어드레스 공간들을 지원할 수도 있다. 가상 어드레스 공간은 게스트 머신에게 "실제" 물리적 어드레스 공간으로서 나타난다. 그러나, 호스트 머신은 가상 어드레스 공간과 호스트 머신의 메모리에 대응하는 물리적 어드레스 공간 간을 변환시킨다. 이로써, 호스트 머신은 다수의 게스트 머신들의 메모리 리소스들을 관리할 수 있다.
1. VIRTUAL MEMORY TRANSLATION WITH PRE-FETCH PREDICTION (US 2008/0276066 A1, 2008.11.06 공개)
본 발명의 예시적인 실시예들은 가상화 환경에서 어드레스 공간들 간의 변환사항들을 캐시하는 (caching) 시스템 및 방법들을 제공한다. 회로는 어드레스 도메인들 (address domains) 간의 변환사항들 (translations) 을 저장도록 구성된 캐시를 포함하며, 캐시는 제 1 논리적 부분 및 제 2 논리적 부분으로서 어드레스가능하다. 제 1 논리적 부분은 제 1 어드레스 도메인과 제 2 어드레스 도메인 간의 변환사항들을 저장하도록 구성되고, 제 2 논리적 부분은 제 2 어드레스 도메인과 제 3 어드레스 도메인 간의 변환사항들을 저장하도록 구성된다. 프로세서가 어드레스 요청을 캐시에 대해서 매칭시키고 대응하는 어드레스 결과를 출력하도록 구성된다. 또한, 레지스터가 제 1 논리적 부분과 제 2 논리적 부분 간의 경계 (boundary) 를 규정하도록 구성된다.
다른 실시예들에서, 프로세서는 제 2 어드레스 도메인 내의 어드레스를 갖는 대응하는 엔트리를 결정하도록 제 1 어드레스 도메인 내의 어드레스 요청을 제 1 논리적 부분 내의 엔트리들에 대해서 매칭시킬 수도 있다. 또한, 프로세서는 제 3 어드레스 도메인 내의 어드레스를 갖는 대응하는 엔트리를 결정하도록 제 1 논리적 부분 내에서 결정된 엔트리를 제 2 논리적 부분 내의 엔트리들에 대해서 매칭시킬 수도 있으며, 어드레스 결과는 제 3 어드레스 도메인 내의 어드레스를 포함한다. 프로세서는 제 3 어드레스 도메인 내의 어드레스를 갖는 대응하는 엔트리를 결정하도록 제 2 어드레스 도메인 내의 어드레스 요청을 제 2 논리적 부분 내의 엔트리들에 대해서 매칭시킬 수도 있으며, 어드레스 결과는 제 3 어드레스 도메인 내의 어드레스를 포함한다.
또 다른 실시예들에서, 캐시 내의 엔트리들의 적어도 서브세트는 인덱스 식별자를 포함하며, 인덱스 식별자에 기초하여서 캐시 내의 엔트리의 위치를 파악하도록 구성된 디코더를 더 포함할 수도 있다. 어드레스 요청은 인덱스 식별자의 표시값 (indication) 을 포함하며, 인덱스 식별자는 인덱스 식별자들의 시퀀스로서 구성되며, 시퀀스의 순서는 어드레스 요청의 소스에 종속된다.
또 다른 실시예들에서, 경계의 위치는 레지스터에 저장된 값에 따라서 변할 수도 있으며, 제 1 논리적 부분 및 제 2 논리적 부분 중 적어도 하나의 크기는 레지스터에 저장된 값에 따라서 변한다. 프로세서는 제 1 논리적 부분 및 제 2 논리적 부분 중 적어도 하나의 크기가 변화되는 것에 응답하여서 캐시 내의 엔트리들을 업데이트할 수도 있다.
제 1 어드레스 도메인은 게스트 가상 어드레스 도메인이고, 제 2 어드레스 도메인은 게스트 물리적 어드레스 도메인이고, 제 3 어드레스 도메인은 루트 물리적 어드레스 도메인일 수도 있다. 캐시 내의 각 엔트리는 엔트리가 제 1 논리적 부분 또는 제 2 논리적 부분의 멤버 (member) 인지를 표시하는 비트를 포함하며, 어드레스 요청은 요청된 엔트리에 대응하는 비트의 표시값을 포함한다.
또 다른 실시예들에서, 프로세서는 소정의 기간 동안에 다수의 매칭하는 엔트리들로부터 기인되는 예외를 억제하도록 구성될 수도 있으며, 소정의 기간은 예를 들어서 어드레스 요청을 전송하는 소스들 간에서 천이할 때에 발행할 수 있다. 캐시 내의 각 엔트리는 엔트리와 연관된 소스를 표시하는 비트를 포함한다. 프로세서는 어드레스 요청의 소스에 기초하여서 제 1 부분 및 제 2 부분으로의 액세스를 제어할 수도 있다.
또 다른 실시예들에서, 캐시는 제 3 논리적 부분으로서 어드레스가능하게 더 구성되며, 제 3 논리적 부분은 제 3 어드레스 도메인과 제 4 어드레스 도메인 간의 변환사항을 저장하도록 구성될 수도 있다. 레지스터는 제 2 논리적 부분과 제 3 논리적 부분 간의 경계를 규정할 수도 있다. 프로세서는 어드레스 요청 내의 하나 이상의 비트들과 같은 표시값에 기초하여서 제 1 논리적 부분 및 제 2 논리적 부분 중 선택된 하나 또는 둘을 탐색할 수도 있다.
다른 실시예들에서, 프로세서는, 어드레스 요청에 대하여 캐시 내의 미싱 엔트리 (missing entry) 를 검출하면, 미싱 엔트리에 대응하는 변환사항에 대한 요청을 출력할 수도 있다. 프로세서는, 미싱 엔트리에 대응하는 변환사항을 수신하면, 변환사항을 캐시 내에서, 캐시의 제 1 논리적 부분과 제 2 논리적 부분 중 선택된 것의 랜덤하게-결정된 엔트리 (randomly-determined entry) 로 입력할 수도 있다. 제 1 논리적 부분은 제 1 인덱스를 포함하고, 제 1 논리적 부분은 제 2 인덱스를 포함하며, 제 2 인덱스는 제 1 인덱스의 반전값 (inversion) 이다.
또 다른 실시예들에서, 회로는 어드레스 도메인들 (address domains) 간의 변환사항들 (translations) 을 저장도록 구성된 TLB (translation lookaside buffer) 을 포함할 수도 있으며, TLB는 게스트 TLB 및 루트 TLB로서 어드레스가능한다. 게스트 TLB는 게스트 가상 어드레스 (GVA) 도메인과 게스트 물리적 어드레스 (GPA) 도메인 간의 변환사항들을 저장하며, 루트 TLB는 GPA 도메인과 루트 물리적 어드레스 (RPA) 도메인 간의 변환사항들을 저장할 수 있다. 루트 TLB는 RVA (루트 가상 어드레스) 도메인과 RPA 간의 변환사항들을 저장할 수도 있다. 캐시 내의 각 엔트리는 이 엔트리가 게스트 TLB 또는 루트 TLB의 멤버인지를 표시하는 비트를 포함할 수도 있다. 회로는 어드레스 요청을 캐시에 대해서 매칭시키고 대응하는 어드레스 결과를 출력하도록 구성된 프로세서; 및 게스트 TLB와 루트 TLB 간의 경계 (boundary) 를 규정하도록 구성된 레지스터를 포함한다.
전술한 바는 첨부 도면들에서 예시된 바와 같이, 본 발명의 예시적인 실시예들의 다음의 보다 구체적인 설명으로부터 명백해질 것이며, 상이한 도면들에 걸쳐서 유사한 참조 부호들은 유사한 부분들을 지칭한다. 도면들은 반드시 크기에 맞게 도시된 것은 아니며, 대신에 본 발명의 실시예들을 예시함에 있어서 강조될 수도 있다.
도 1은 일 실시예에서 MTLB (merged translation lookaside buffer) 를 구현하는 컴퓨터 시스템의 블록도이다.
도 2는 MTLB의 파티셔닝의 블록도이다.
도 3은 MTLB의 블록도이다.
도 4는 일 실시예에서 MTLB을 사용하여 시스템 메모리를 액세스하는 프로세스를 예시하는 흐름도이다.
도 5는 MTLB 내의 엔트리의 블록도이다.
도 6은 MTLB 및 μTLB (micro-translation lookaside buffer) 를 구현하는 컴퓨터 시스템의 블록도이다.
도 7는 μTLB 내의 엔트리의 블록도이다.
도 8은 일 실시예에서 μTLB을 사용하여 시스템 메모리를 액세스하는 프로세스를 예시하는 흐름도이다.
도 9a 내지 도 9c는 μTLB 내로 입력된 콜랩스된 변환사항들 (collapsed translations) 을 예시하는 블록도이다.
도 10은 다른 실시예에서 TLB들의 세트와 가상 데이터 캐시를 예시하는 블록도이다.
도 11은 예시적인 데이터 캐시 태그의 블록도이다.
도 12는 다수의 캐시들에 걸쳐서 엔트리들을 유지하는 프로세스를 예시하는 흐름도이다.
도 13은 다른 실시예에서 어드레스 변환의 선택적 바이패스를 예시하는 블록도이다.
도 14는 어드레스 변환들을 선택적으로 바이패스하는 프로세스의 흐름도이다.
본 발명의 예시적인 실시예들의 설명은 다음과 같다.
가상화를 지원하는 컴퓨터 시스템은 다수의 어드레스 공간들을 유지할 수도 있다. 각 게스트 운영 체제는 GVA들 (guest virtual address) 을 채용하며, 이 GVA들은 GPA들 (guest physical address) 로 변환된다. GPA 공간은 특정된 게스트 머신에 할당된 물리적 메모리의 파티션을 지칭한다. 그러나, 메모리 할당에서의 보다 큰 유연성을 허용하기 위해서 (GPA 공간보다는) GVA 공간이 각 게스트 머신에 제공된다. 예를 들어서, 소정의 게스트 머신의 GVA 공간은 그것에 할당된 물리적 메모리 파티션보다 클 수도 있으며, 메모리 파티션이 전체가 가용 중일 때에 데이터가 하드 디스크에 저장될 수도 있다.
하이퍼바이저와 같은, 하나 이상의 게스트 운영 체제들을 관리하는 소프트웨어 시스템이 GPA들을 대응하는 RPA들 (root physical address) 로 변환한다. 또한 물리적 시스템 어드레스들 또는 머신 어드레스들로 지칭되는 RPA들은 호스트 컴퓨터의 물리적 메모리의 로케이션을 표시한다. 이로써, 게스트 머신에 의한 메모리 액세스를 완료하기 위해서, 2 개의 변환이 발생하는데, 즉 먼저 GVA가 GPA로 변환되고, 이어서 GPA가 RPA로 변환된다.
어드레스들이, 관련 어드레스 관계들을 저장하는 페이지 테이블을 판독 (워킹 (walking)) 함으로써, 초기에 어드레싱 도메인들 간에서 변환된다 (예를 들어서, 가상 어드레스에서 물리적 어드레스로 변환된다). TLB (translation lookaside buffer) 는 이러한 변환사항들을 캐싱하는데 (cache) 사용된다. 소정의 변환사항이 캐싱되면, 이어서 TLB가 이 소정의 변환사항을 요구하는 차후 메모리 액세스들을 동안에 액세스되며, 이로써 추가 페이지 테이블 워킹을 필요로 하지 않게 된다. 몇몇 가상화된 시스템들에서, TLB는 GVA에서 RPA로의 변환사항들을 캐싱할 수도 있다. 이와 달리, 2 개의 물리적 TLB들이, 즉 GVA에서 GPA로의 변환사항들을 저장하는 제 1 TLB 및 GPA에서 RPA로의 변환사항들을 저장하는 제 2 TLB가 사용될 수도 있다.
도 1은 일 실시예에서 MTLB (merged translation lookaside buffer) 를 구현하는 컴퓨터 시스템 (100) 의 블록도이다. 도시된 시스템 (100) 은 가상화를 통해서 다수의 게스트 머신들을 지원하는 호스트 머신의 일부일 수도 있다. 복수의 게스트들 (즉, 게스트 머신들) (104a-n) 은 각각의 게스트 운영 플랫폼 (미도시) 를 통해서 동작하며, 이 플랫폼들은 하이퍼바이저 (105) 에 의해서 관리되는 가상 하드웨어 플랫폼이다. 게스트들 (104a-n) 은 게스트 운영 플랫폼들에 의해서 제공된 게스트 가상 어드레스 (GVA) 공간을 통해서 간접적으로 물리적 시스템 메모리 (150) 에 액세스한다. 그러나, 메모리 시스템 (150) 은 RPA (root physical address) 공간을 통해서 어드레스된다. GVA는 먼저 게스트 물리적 어드레스 (GPA) 로 맵핑되고, 이어서 GPA는 소정의 게스트 (104a-n) 에 대해서 할당된 시스템 메모리 (150) 의 파티션에서의 RPA로 맵핑된다. 이로써, 게스트 (104a-n) 에 의한 메모리 액세스를 인에이블하기 (enable) 하기 위해서, GVA는 GPA로 변환되고, 이어서 GPA는 시스템 메모리 (150) 의 엔트리를 표시하는 RPA로 변환된다.
하드웨어 및 게스트 운영 플랫폼의 소프트웨어 일부를 포함할 수도 있는 메모리 제어기 (108) 는 시스템 메모리 (150) 에 액세스하기 위해서 게스트 (104a-n) 와 인터페이싱한다. 시스템 메모리 (150) 를 액세스하기 위해서, 메모리 제어기는 먼저 MTLB (merged translation lookaside buffer) (110) 를 액세스한다. MTLB (110) 는 2 개의 개별 TLB들, 즉 게스트 TLB (GTLB: guest TLB) (120) ("가상 태그 섹션") 및 루트 TLB (RTLB: root TLB) (130) ("물리적 태그 섹션") 으로서 논리적으로 어드레스가능한 단일 물리적 캐시, 버퍼, 세그먼트 레지스터, 시스템 레지스터, 또는 다른 저장 유닛을 포함할 수도 있다. GTLB (120) 은 GVA에서 GPA로의 변환사항을 저장하고, RTLB (130) 은 GPA에서 RPA로의 변환사항을 저장한다. 따라서, MTLB (110) 는 단일 물리적 구조를 공유하면서 2 개의 구별되는 논리적 TLB들로서 다른 구성요소들에게 나타날 수도 있다.
게스트 메모리 액세스 동안에, 메모리 제어기 (108) 는 게스트 (104a-n) 로부터 GVA를 수신하고, 이어서 메모리 제어기는 이 GVA를 GTLB (120) 내의 엔트리들과 매칭시켜서 대응하는 GPA를 결정할 수도 있다. 매칭이 발견되면, 메모리 제어기는 위치가 파악된 GPA를 RTLB (130) 내의 엔트리들과 매칭시켜서 대응하는 RPA를 결정할 수도 있다. 매칭하는 RPA를 사용하여서, 메모리 제어기는 게스트 (104a-n) 에 의한 판독 또는 기록 동작을 위해서 메모리 시스템 (150) 의 표시된 엔트리를 액세스한다.
GTLB (120) 내의 엔트리들은 초기에 게스트 (104a-n) 에 의해서 부가될 수도 있으며, 게스트 (104a-n) 는 시스템 메모리 (150) 에 저장된 페이지 테이블들 (140) 을 액세스한다. 페이지 테이블들 (140) 은 GVA 공간, GPA 공간 및 RPA 공간 간의 관계들을 저장하고, 이들 어드레스 공간들 간의 어드레스 변환사항들을 결정하기 위해서 "워킹"될 수도 있다. 이로써, 게스트 (104a-n) 는 GVA에서 GPA로의 변환사항을 결정하기 위해서 페이지 테이블들 (140) 을 워킹하고 이어서 이 변환사항을 GTLB (120) 에 저장하기 위해서 GTLB 인덱스를 통해서 GTLB (120) 에 액세스할 수도 있다. 마찬가지로, RTLB (130) 내의 엔트리들은 하이퍼바이저 (105) 에 의해서 초기에 부가될 수도 이 있으며, 하이퍼바이저는 시스템 메모리 (150) 에 저장된 페이지 테이블들 (140) 을 액세스한다. 하이퍼바이저는 GPA에서 RPA로의 변환사항을 결정하기 위해서 페이지 테이블들 (140) 을 워킹하고 이어서 이 변환사항을 RTLB (130) 에 저장하기 위해서 RTLB 인덱스를 통해서 RTLB (130) 에 액세스할 수도 있다. GTLB (120) 및 RTLB (130) 내로의 엔트리들은, GTLB (120) 또는 RTLB (130) 에서의 변환사항 룩업 시에 메모리 제어기 (108) 에 의하여 보고된 "미스 (miss)" 에 응답하여서, 상술한 바와 같이, 부가될 수도 있다.
MTLB (110) 의 구성 및 이 MTLB (110) 를 메모리 액세스 및 채우는 (populate) 동안의 시스템 (100) 의 동작이 도 2 내지 도 5를 참조하여서 이하에서 보다 상세하게 기술된다.
도 2는 MTLB (110) 의 캐시 (206) 의 블록도이다. 캐시 (206) 는 2 개 이상의 세그먼트들로 논리적으로 분할된 단일 물리적 구조 (예를 들어서, 메모리 또는 다른 저장 디바이스) 일 수도 있다. 이 예시적인 실시예에서, 캐시 (206) 는 GTLB (120) 및 RTLB (130) 를 수용하도록 2 개의 논리적 부분들로 분할된다. TLB 파티션 (212) 이 GTLB (120) 와 RTLB (130) 간의 분할을 규정한다. 다른 실시예들에서, 캐시 (206) 는 추가 어드레스 공간들 간의 변환사항들을 저장하는 TLB와 같은 추가 버퍼들을 수용하기 위해서 추가 세그먼트들로 분할될 수도 있다. 이러한 실시예에서, 추가 TLB 파티션들이 캐시 (206) 를 추가 세그먼트들로 분할하도록 구현될 수도 있다.
MTLB (110) 에 저장되거나 MTLB (110) 외부에 있는 프로그램가능한 레지스터 (미도시) 는 GTLB (120) 와 RTLB (130) 를 분할하는 TLB 파티션 (212) 의 위치를 규정한다. 따라서, 파티션 (212) 보다 작은 물리적 인덱스들을 갖는 모든 엔트리들은 RTLB (130) 을 포함하며, 파티션 (212) 보다 크거나 같은 물리적 인덱스들을 갖는 모든 엔트리들은 GTLB (120) 을 포함한다. GTLB (120) 와 RTLB (130) 간의 유연성 파티셔닝은 시스템 (예를 들어서, 시스템 (100)) 이, 고정된 개수의 총 변환 엔트리들이 주어지면, 이러한 구조들의 크기를 최적화할 수 있게 한다. TLB들 (120,130) 의 크기는 실시간으로 변할 수 있다. 또한, 컴퓨티 시스템이 비-가상화된 환경에서 사용되면, 루트 TLB가 전체 MTLB 캐시 (206) 를 차지하도록 파티션 (212) 이 설정될 수 있다. 이러한 구성에서, GTLB (120) 내에 0 엔트리들을 표현하는 값이 예비될 수 있다.
하이퍼바이저 (105) 및 게스트 (104a-n) (도 1) 와 같은 소프트웨어는 TLB들 (120,130) 을 2 개의 논리적으로 구별되는 TLB들로서 볼 수도 있으며, 각 TLB의 엔트리들은 각기 0으로부터 "G-Config -1" 및 "R-Config -1"까지 인덱스되며, 이들은 각 논리적 TLB (120,130) 의 크기에 대응한다. 예를 들어서, RTLB (130) 는 0으로부터 "R-Config -1"까지의 엔트리들을 갖는 것으로서 소프트웨어에게 나타나며, "R-Config -1"는 RTLB Size -1이다. GTLB (120) 는 0으로부터 "G-Config -1"까지의 엔트리들을 갖는 것으로서 소프트웨어에게 나타나며, "G-Config -1"는 GTLB Size -1이다. (GTLB Size + RTLB Size = MTLB Size). 도 2에 도시된 바와 같이, 캐시 (206) 내의 엔트리들의 시퀀스는 GTLB (120) 와 RTLB (130) 간에서 반전될 수도 있으며, 이는 GTLB (120) 는 위에서 아래로의 순서를 가지며, RTLB (130) 는 아래에서 위로의 순서를 가짐을 의미한다. 이러한 구성은, 오직 각 TLB (120, 130) 의 말단 엔트리들만이 변화되거나 무효화될 수도 있기 때문에, TLB 파티션 (212) 을 재위치시킴으로써 TLB (120, 130) 의 보다 용이한 재크기조절을 가능하게 한다. 몇몇 실시예들에서, RTLB (130) 는 한 개의 엔트리 내지 MTLB 캐시 (206) 내의 엔트리들의 총 개수의 크기를 가질 수도 있다. 이와 대조하여서, RTLB (130) 가 적어도 하나의 엔트리를 갖도록 요구될 수도 있기 때문에, GTLB (120) 는 한 개의 엔트리 내지 MTLB 캐시 (206) 내의 엔트리들의 총 개수 - 1의 크기를 가질 수도 있다.
도 3은 MTLB (110) 의 보다 상세한 블록도이다. MTLB (110) 는 도 1 및 도 2를 참조하여서 상술한 바와 같이 구성될 수도 있다. MTLB (110) 는 어드레스 요청 (예를 들어서, GVA에서 GPA로의 변환, 또는 GPA에서 RPA로의 변환) 의 매칭 결과를 제공하도록 메모리 제어기 (108) 와 인터페이싱하며, GTLB (120) 및 RTLB (130) 내의 엔트리들을 부가 및 개정하도록 게스트 (104a-n) 및 하이퍼바이저 (105) 와 더 인터페이싱한다. 게스트 (104a-n) 또는 게스트들의 대신에 하드웨어가 GVA에서 GPA로의 변환사항을 결정하도록 페이지 테이블 (예를 들어서, 도 1의 페이지 테이블 (140)) 을 워킹하고, 이어서 변환사항을 GTLB (120) 에 저장하도록 GTLB 인덱스를 통해서 GTLB (120) 에 액세스할 수 있다. 마찬가지로, RTLB (130) 내의 엔트리들은 하이퍼바이저 (105) 또는 하이퍼바이저 대신에 하드웨어에 의해서 부가 및 개정될 수도 있으며, 하이퍼바이저 (105) 또는 하이퍼바이저 대신에 하드웨어가 GPA에서 RPA로의 변환사항을 결정하기 위해서 페이지 테이블들 (140) 을 액세스할 수도 있다. GTLB (120) 및 RTLB (130) 내로의 엔트리들은, GTLB (120) 또는 RTLB (130) 에서의 변환사항 룩업 시에 메모리 제어기 (108) 에 의하여 보고된 "미스 (miss)" 에 응답하여서, 부가 또는 개정될 수도 있다.
GTLB (120) 및 RTLB (130) 으로의 액세스를 용이하게 하기 위해서, MTLB (110) 는 디코더 (334) 를 더 포함할 수도 있으며, 이 디코더는 소프트웨어 (게스트들 (104a-n) 또는 하이퍼바이저 (105)) 가 인덱스를 사용하여서 MTLB (110) 의 엔트리를 액세스할 수 있게 한다. MTLB (110) 내의 각 엔트리는 그러한 인덱스가 할당될 수도 있으며, 소프트웨어는 디코더 (334) 를 사용하여서 특정 엔트리를 판독 또는 기록할 수도 있다. 디코드 로직은 특정 MTLB 엔트리를 식별하기 위한 물리적 인덱스를 채용할 수도 있다. 게스트들 (104a-n) 은 GTLB (120) 로 기록하기 위한 게스트 논리 인덱스들을 생성하는 것으로 한정될 수도 있다. 하이퍼바이저 (105) (또는 루트 액세스를 갖는 다른 소프트웨어) 는 GTLB (120) 또는 RTLB (130) 로 기록하기 위한 게스트 논리 인덱스 또는 루트 논리적 인덱스 중 어느 일방을 생성할 수도 있다. 인덱스 변환기 (332) 는 게스트 인덱스들을 GTLB (120) 의 엔트리에 대응하는 물리적 인덱스로 변환하도록 구현될 수도 있다.
예시적인 실시예에서, GTLB (120) 및 RTLB (130) 로의 논리적 인덱스는 다음과 같이 구성될 수도 있다. 총 MTLB 크기는 2의 멱수일 수도 있으며, 루트 논리적 인덱스는 RTLB (130) 크기보다 작은 모든 루트 논리적 인덱스들에 대해서 물리적 인덱스 (즉, 물리적 캐시의 인덱스) 와 동일할 수도 있다. 게스트 논리적 인덱스는 GTLB (120) 크기보다 작은 모든 게스트 논리적 인덱스들에 대해서 물리적 인덱스로 변환될 수도 있다. 소프트웨어-기반 판독-전용 레지스터들이 GTLB (120) 및 RTLB (130) 의 크기를 표시할 수도 있으며, GTLB (120) 와 RTLB (130) 간의 파티션이 구성된 후에 자동으로 업데이트된다.
MTLB (110) 는 완전하게 연관성의 구조 (fully associative structure) 일 수도 있다. MTLB (110) 가 연관 매칭 로직을 사용하여서 하나의 물리적 TLB로서 구성되면, MTLB (110) 내의 탐색은 GTLB (120) 엔트리 또는 RTLB (130) 엔트리 중 어느 하나로 매칭되는 결과를 낳을 수 있다. 연관 로직이 GTLB (120) 엔트리와 RTLB (130) 엔트리를 구별하기 위해서, 각 엔트리는 Gt 비트로서 지칭되는 비트로 태깅될 수도 있다. Gt 비트가 1이면, 엔트리는 GTLB (120) 에 속하고; Gt 비트가 0이면, 엔트리는 RTLB (120) 에 속한다. 이로써, 모든 RTLB (130) 엔트리들은 0에 있는 Gt 비트를 가질 수도 있는 한편, 모든 GTLB (120) 엔트리들은 1에 있는 Gt 비트를 가질 수도 있다. RTLB (130) 에 대해서 연관 룩업이 요구되는 때에, MTLB (110) 에 전송된 탐색 값 (키) 은 제로로 설정된 Gt 비트를 갖는다. 마찬가지로, GTLB (120) 에 대해서 연관 룩업이 요구되는 때에, MTLB (110) 에 전송된 탐색 값 (키) 은 1로 설정된 Gt 비트를 갖는다.
랜덤 교체 (random replacement) 가 "랜덤 레지스터"를 사용하여서, MTLB 룩업 "미스"를 다루는 알고리즘의 일부로서 활용될 수도 있다. 랜덤 레지스터는 선택된 GTLB (120) 또는 RTLB (130) 의 부분 내에서 랜덤 엔트리를 선택할 수도 있다. 예를 들어서 도 2를 참조하면, 랜덤 교체는 각각의 TLB의 "와이어된 (wired)" 엔트리들 (즉, "G-와이어된" 엔트리 또는 "R-와이어된" 엔트리) 와 말단 엔트리 간의 세그먼트로 제약될 수도 있다.
다시 도 3을 참조하면 (그리고 도 1을 참조하면), 하이퍼바이저 (105) 가 게스트들 (104a-n) 간을 스위칭할 때에, 아웃고잉하는 (outgoing) 게스트 (예를 들어서, 게스트 (104a)) 에 속하는 게스트 TLB 엔트리들은 인커밍하는 (incoming) 게스트 (예를 들어서, 게스트 (104b)) 에 속하는 게스트 TLB 엔트리들에 의해서 교체되어야 한다. 하이퍼바이저 (105) 는 이러한 변경을 실행하기 위해서 MTLB (110) 를 관리할 수도 있다. MTLB (110) 가 완전하게 연관성의 구조일 수도 있기 때문에, 시스템은 다수의 엔트리들과 매칭할 수 있는, 매칭될 값 (키) 을 전송하는 것을 피해야 한다. 다수의 엔트리들과 매칭하는 것은 통상적으로 소프트웨어 에러로 간주되며 머신 체크 예외와 같은 오류를 발생하는 결과를 낳을 수도 있다. TLB로의 기록 동안에, 모든 엔트리들은 잠재적 충돌에 대해서 체크될 수도 있다. 충돌이 발견되면, 기록이 금지되고, 머신 체크 예외 (machine check exception) 가 생성된다. 게스트 운영 체제들을 변경하는 특정 경우에서, 아웃고잉하는 TLB 엔트리들이 인커밍하는 TLB 엔트리들에 의해서 교체되기 때문에 GTLB (120) 내의 다수의 엔트리들이 매칭할 수도 있는 것이 예상될 수도 있다. 즉, 인커밍하는 게스트 맵핑들은 아웃고잉하는 게스트 맵핑들과 동일하거나 유사한 게스트 가상 어드레스들을 가질 수 있다. 일단 아웃고잉하는 게스트 엔트리들이 인커밍하는 게스트 엔트리들에 의해서 완전히 교체되었다면, 이러한 임시적 상황은 해결될 수도 있기 때문에, 소프트웨어 제어 (예를 들어서, 하이퍼바이저 (105) 에 의해서 관리됨) 는 이 게스트 운영 체제 스위칭 동안에 머신 체크 예외를 억제하도록 제공될 수도 있다. 이 소프트웨어 제어는 게스트 TLB 내의 다수의 엔트리들이, 소프트웨어가 일 컨텍스트를 다른 컨텍스트로 변경하는 동안에, 가상 어드레스에 대해서 매칭될 수 있게 한다.
다시 도 2로 돌아가면, 하이퍼바이저 (105) (도 1) 와 같은 루트 소프트웨어가 시스템 구성 동안이 아니라, 실시간으로 파티션 (212) 의 로케이션을 규정하는 레지스터를 프로그래밍할 수도 있다. (예를 들어서, 실시간 동안의) 이러한 레지스터의 재프로그래밍은 GTLB (120) 및 RTLB (130) 의 크기를 식별하는 아키텍처적으로-가시적인 (architecturally-visible) 게스트 레지스터 및 루트 레지스터 내의 값들을 자동으로 업데이트할 수도 있다. 다른 구현예들에서, 이러한 업데이트는 루트 소프트웨어에 의해서 직접적으로 수행될 수 있다. RTLB (130) 크기가 커지고 GTLB (120) 크기가 축소되는 때에, GTLB (120) 에 속했던 몇몇 엔트리들이 이제 RTLB (130) 에 속하게 된다. 소프트웨어는 TLB 기록 인덱스 인스트럭션을 사용하여서 루트 맵핑으로 이러한 신규 엔트리들을 기록하거나, 엔트리들이 무효하다고 기록될 수도 있다. TLB 기록 인덱스 인스트럭션이 수행되는 때에, 이러한 엔트리들 각각 내의 Gt 비트는 엔트리들이 루트 엔트리들로서 적합하게 마킹되도록 재설정될 수 있다. Gt 비트를 변경하지 못하면 예측할 수 없는 거동이 발생할 수 있다. 이와 반대로, RTLB (130) 크기가 작아지고 GTLB (120) 크기가 커지게 되는 때에, 이전에 RTLB (130) 에 속했던 몇몇 엔트리들이 이제 GTLB (120) 에 속하게 된다. 루트 소프트웨어는 TLB 게스트 기록 인덱스 인스트럭션을 사용하여서 비충돌하는 게스트 맵핑으로 이러한 엔트리들을 기록하거나, 이 TLB 엔트리들이 무효하다고 기록될 수도 있다. TLB 게스트 기록 인덱스 인스트럭션이 수행되는 때에, 이러한 엔트리들 각각 내의 Gt 비트는 엔트리들이 게스트 엔트리들로서 적합하게 마킹되도록 설정될 수 있다. 다른 실시예에서, 소프트웨어 대신에, 하드웨어가 GTLB와 RTLB 간에서 엔트리들이 이동할 때에 Gt 비트를 적합하게 구성하도록 사용될 수도 있다.
하이퍼바이저 (105) 또는 다른 소프트웨어 또는 하드웨어는 GTLB (120) 내의 엔트리들의 벌크 무효화 (bulk invalidation) 를 제공하도록 더 구성될 수도 있다. 식별자로서 Gt 비트를 사용함으로써, 하이퍼바이저 (105) 는 모든 GTLB (120) 엔트리들을 신속하게 무효화할 수 있다. 이와 달리, 회로 또는 다른 하드웨어가 1로 설정된 Gt 비트를 갖는 모든 엔트리들을 무효화하도록 구성될 수도 있다. 이로써, 예를 들어서 게스트들 간의 스위칭 동안에, 루트 TLB 엔트리들에 영향을 주지 않으면서, 게스트 컨텍스트가 MTLB (110) 로부터 신속하게 소거될 수 있다. 일 실시예에서, 현 게스트 컨텍스트는 (또한, 가상 머신 ID 또는 VMID로도 지칭되는) 어드레스 공간 식별자를 포함하는 레지스터에 의해서 식별된다. 하이퍼바이저 (105) 는 현 게스트 컨텍스트를 스위칭할 때에 이 값을 변경할 수도 있으며, 소프트웨어가 이 값을 변경할 때에 (상술한 바와 같은) 하드웨어가 Gt 비트를 사용하여서 게스트 컨텍스트를 자동으로 무효화할 수도 있다.
다른 실시예들에서, MTLB는 다수의 게스트 TLB들을 수용하도록 3 개 이상의 논리적 TLB로 파티셔닝될 수도 있다. 다수의 게스트 컨텍스트는 정적으로 또는 동적으로 관리될 수도 있다. 정적 구성에서, 일 TLB 파티션 (예를 들어서, 도 2의 TLB 파티션 (212)) 대신에, 다수의 TLB 파티션들이 생성될 수도 있다. 이러한 실시예에서, 추가 게스트 TLB가 다음 게스트에 대해서 가용한다면, 게스트 TLB 내의 엔트리들이 게스트들 간을 스위칭할 때에 교체될 필요가 없을 수도 있다는 점을 제외하면, TLB 세그먼트들은 상술한 바와 같이 게스트 TLB들 및 루트 TLB들로서 관리될 수 있다. TLB 내의 게스트 컨텍스트들이 게스트들에 의해서 수적으로 초과하게 되면, 하나 이상의 게스트 TLB들이 삭제되고 필요한 바와 같이 신규 게스트 컨텍스트로 교체될 수 있다. TLB 파티션 크기들은 사전 규정된 시스템 레지스터 세트에 의해서 규정될 수 있다. 이와 달리, 다수의 게스트 컨텍스트들은 동적으로 관리될 수 있다. 예를 들어서, 각 TLB는 적합한 게스트 컨텍스트로 태깅되고 다른 소프트웨어 컨텍스트들로부터의 TLB 엔트리들 간에 분포될 수 있다 (interspersed).
도 4는 일 실시예에서 MTLB을 사용하여 시스템 메모리를 액세스하는 프로세스 (400) 를 예시하는 흐름도이다. 프로세스 (400) 는 성공적인 MTLB 룩업 및 룩업 "미스" 시의 MTLB에 대한 업데이트 양 시나리오를 포함한다. 도 1을 참조하면, 게스트 (104a) 는 GVA와 함께, 메모리 제어기에 메모리 액세스 요청 (예를 들어서, 시스템 메모리에 대한 기록 또는 판독) 을 전송한다 (405). 메모리 제어기 (108) 는 이 요청 및 GVA를 수신하며 (406), GVA에 대한 변환 매칭을 룩업하기 위해서 MTLB (110) 를 액세스한다 (410). 대응하는 GPA에 대한 매칭이 발견되면, 메모리 제어기는 대응하는 RPA의 위치를 파악하기 위해서 GPA를 더 매칭시키며, RPA가 리턴된다 (415). 이어서, 메모리 제어기 (108) 는 시스템 메모리의 대응하는 엔트리를 액세스하기 위해서 RPA를 사용하고 (416), 시스템 메모리 (150) 에 대한 기록 또는 판독 동작을 수행하기 위해서 게스트 (104a) 를 인에이블한다.
GPA 및 RPA 중 하나 또는 양자에 대한 매칭이 실패한 경우에 (즉, MTLB "미스"의 경우에), MTLB (110) 가 업데이트된다 (420). 그렇게 하기 위해서, 게스트 (104a) 및 하이퍼바이저 (105) (또는 게스트 (104a) 및 하이퍼바이저 (105) 대신에 하드웨어) 중 하나 또는 양자가 시스템 메모리 (150) 의 페이지 테이블들 (140) 을 액세스한다. 게스트 (104a) 및/또는 하이퍼바이저 (105) 는 필요한 GVA에서 GPA로의 변환사항 및/또는 GPA에서 RPA로의 변환사항을 결정하기 위해서 페이지 테이블들 (140) 을 워킹한다 (425). 이어서, 게스트 (104a) 및/또는 하이퍼바이저 (105) 는 이러한 변환사항(들)을 (예를 들어서, 도 3을 참조하여서 상술한 바와 같이) MTLB (110) 에 기록할 수도 있다 (430). MTLB (110) 가 업데이트되면, 메모리 제어기 (108) 는 다시 MTLB (110) 에 대한 매칭을 수행할 수도 있으며 대응하는 RPA가 리턴되면 (415) 메모리 액세스를 제공할 수도 있다 (416).
도 5는 도 1 내지 도 4를 참조하여서 상술한 바와 같은 MTLB와 같은 MTLB 내의 예시적인 엔트리 (500) 의 블록도이다. 엔트리는 가상부 (501) 및 물리부 (502) 를 가질 수도 있으며, 가상부 (501) 는 매칭될 어드레스 (506) 및 다른 정보를 포함하며, 물리부 (502) 는 결과적인 변환된 어드레스 (510) 및 다른 정보를 포함한다. 상술한 Gt 비트는 게스트 또는 루트 소프트웨어에 대해서 가시적이지 않는 추가 엔트리일 수도 있다. 가상부는 다음의 엔트리들을 포함할 수도 있다:
ASID[7:0] (505): 어드레스 공간 식별자 (Address space identifier (ASID)). Gt=1이면, 이 필드는 이 특정 변환에 대해서 게스트 ASID를 적용한다. Gt=0이면, 이 필드는 이 특정 변환에 대해서 루트 ASID를 적용한다. G =1 이면, 이 필드는 무시될 수도 있다.
VPN (506): 가상 페이지 넘버 (Virtual page number), 이는 GVA 또는 GPA 어드레스를 표시한다.
G (507): 글로벌 비트 (Global bit). Gt=1이면, 이 비트는 GVA에 대응하는 게스트 TLB 엔트리의 G 비트를 나타낸다. Gt=0 이면, 이 비트는 GPA 또는 RVA (Root Virtual Address) 중 어느 하나에 대응하는 루트 TLB 엔트리의 G 비트를 나타낸다.
물리부는 다음과 같은 엔트리들을 포함할 수도 있다:
PFN (510): 물리적 프레임 넘버 (Physical Frame Number), 이는 GPA 또는 RPA 어드레스의 물리적 페이지 넘버를 표시한다. Gt=1이면, 이 필드는 GPA를 나타낸다. Gt=0이면, 이 필드는 RPA를 나타낸다.
XI (511): 실행 금지, 이는 맵핑이 데이터를 포함하지만 인스트럭션들을 포함하지 않음을 표시한다. XI=1이면, 이 페이지 변환사항은 인스트럭션들에 대해서 사용될 수 없으며, 오직 데이터 변환사항들에 대해서만 사용될 수 있다. XI=0이면, 이 변환사항은 데이터 또는 인스트럭션들 중 어느 하나에 대해서 사용될 수 있다.
RI (512): 판독 금지. RI 비트는 특정 페이지가 판독되는 것을 금지하는데 사용될 수도 있다.
C[2:0] (513): 코히어런시 (Coherency) 속성들이 C 필드 내에 저장될 수도 있다. 이러한 속성들은 메모리 공간의 특성 (예를 들어서, 캐시가능함, 캐시되지 않음, 코히어런트함, 코히어런트하지 않음, I/O-공간, 등) 을 결정하는데 사용될 수 있다.
D (514): 더티 (Dirty) 비트. 더티 비트는 페이지가 이전에 기록되었는지의 여부를 표시한다.
V (515): 유효성 비트. 유효성 비트는 엔트리의 유효성 여부를 말한다.
도 6은 MTLB (610) 및 μTLB (micro-translation lookaside buffer) (615) 를 구현하는 컴퓨터 시스템 (600) 의 블록도이다. 시스템 (600) 은 도 1 내지 도 5을 참조하여서 상술된 시스템 (100) 과 유사하게 구성될 수도 있으며, μTLB (micro-translation lookaside buffer) (615) 가 추가된 것이다. μTLB (615) 추가는 GVA 공간과 RPA 공간 간의 콜랩스된 변환사항들 (collapsed translations) 을 캐시함으로써 보다 고속의 어드레스 변환을 제공할 수도 있다.
도시된 시스템 (600) 은 가상화를 통해서 다수의 게스트 머신들을 지원하는 호스트 머신의 일부일 수도 있다. 복수의 게스트들 (즉, 게스트 머신들) (604a-n) 은 각각의 게스트 운영 플랫폼들 (미도시) 을 통해서 동작하며, 이 플랫폼들은 하이퍼바이저 (605) 에 의해서 관리되는 가상 하드웨어 플랫폼들이다. 게스트들 (604a-n) 은 게스트 운영 플랫폼들에 의해서 제공되는 GVA 공간을 통해서 간접적으로 물리적 시스템 메모리 (650) 에 액세스한다. RPA 공간을 통해서 어드레스되는 시스템 메모리 (650) 에 액세스하기 위해서, GVA는 먼저 GPA로 맵핑되고, GPA가 이어서 소정의 게스트 (604a-n) 에 대해서 할당된 시스템 메모리 (650) 의 파티션에서의 RPA로 맵핑된다. 이로써, 게스트 (604a-n) 에 의한 메모리 액세스를 인에이블하기 위해서, GVA는 GPA로 변환되고, GPA는 이어서 시스템 메모리 (650) 의 엔트리를 표시하는 RPA로 변환된다.
MTLB (610) 는 도 1 내지 도 5의 MTLB (110) 를 참조하여서 상술한 바와 같이 구성될 수도 있다. 이로써, MTLB (610) 는 2 개의 구별되는 TLB들, 즉 게스트 TLB (GTLB) (620) 및 루트 TLB (RTLB) (630) 로서 논리적으로 어드레스가능한 단일 물리적 캐시를 포함할 수도 있다. GTLB (620) 는 GVA에서 GPA로의 변환사항들을 저장하고, RTLB (630) 는 GPA에서 RPA로의 변환사항들을 저장한다. 따라서, MTLB (610) 는 단일 물리적 구조를 공유하면서 2 개의 구별되는 논리적 TLB들로서 다른 구성요소들에게 나타날 수도 있다. GTLB (620) 내의 엔트리들은 초기에 게스트들 (604a-n) 에 의해서 부가될 수도 있으며, 게스트 (604a-n) 는 시스템 메모리 (650) 에 저장된 페이지 테이블들 (640) 을 액세스한다. 페이지 테이블들 (640) 은 GVA 공간, GPA 공간 및 RPA 공간 간의 관계들을 저장하고, 이들 어드레스 공간들 간의 어드레스 변환사항들을 결정하기 위해서 "워킹"될 수도 있다. 이로써, 게스트들 (604a-n) (또는 게스트를 대신하는 하드웨어) 은 GVA에서 GPA로의 변환사항을 결정하기 위해서 페이지 테이블들 (640) 을 워킹하고 이어서 이 변환사항을 GTLB (620) 에 저장하기 위해서 GTLB 인덱스를 통해서 GTLB (620) 에 액세스할 수도 있다. 마찬가지로, RTLB (630) 내의 엔트리들은 하이퍼바이저 (605) (또는 하이퍼바이저를 대신하는 하드웨어) 에 의해서 초기에 부가될 수도 이 있으며, 하이퍼바이저는 시스템 메모리 (650) 에 저장된 페이지 테이블들 (640) 을 액세스한다. 하이퍼바이저는 GPA에서 RPA로의 변환사항을 결정하기 위해서 페이지 테이블들 (640) 을 워킹하고 이어서 이 변환사항을 RTLB (630) 에 저장하기 위해서 RTLB 인덱스를 통해서 RTLB (630) 에 액세스할 수도 있다. GTLB (620) 및 RTLB (630) 내로의 엔트리들은, GTLB (620) 또는 RTLB (630) 에서의 변환사항 룩업 시에 메모리 제어기 (608) 에 의하여 보고된 "미스 (miss)" 에 응답하여서, 상술한 바와 같이, 부가될 수도 있다.
게스트 운영 플랫폼의 하드웨어 및 소프트웨어 부분을 포함할 수도 있는 메모리 제어기 (608) 는 시스템 메모리 (650) 에 액세스하기 위해서 게스트들 (604a-n) 과 인터페이싱한다. 시스템 메모리 (650) 에 액세스하기 위해서, 메모리 제어기는 먼저 μTLB (615) 에 액세스한다. μTLB (615) 는 GVA에서 RPA로의 변환사항들을 저장하는 캐시, 버퍼, 세그먼트 레지스터, 시스템 레지스터, 또는 다른 저장 유닛을 포함할 수도 있다. 게스트 메모리 액세스 동안에, 메모리 제어기 (608) 는 게스트 (604a-n) 로부터 GVA를 수신하고, 메모리 제어기는 이 GVA를, 대응하는 RPA를 결정하기 위해서 μTLB (615) 내의 엔트리들에 대해서 매칭한다. 매칭이 발견되면, 메모리 제어기 (608) 는 게스트 (604a-n) 에 의한 판독 또는 기록 동작을 위해서 시스템 메모리 (650) 의 표시된 엔트리를 액세스한다. 매칭이 발견되지 않으면, 메모리 제어기 (608) 는 대응하는 GVA에서 GPA로의 변환사항 및 GPA에서 RPA로의 변환사항을 결정하기 위해서 MTLB에 액세스할 수도 있다. 메모리 제어기는 이 2 개의 변환사항들을 단일 GVA에서 RPA로의 변환사항으로 또한 콜랩스하고 (collapse) 이 콜랩스된 변환사항으로 μTLB (615) 를 채울수도 있다.
μTLB (615) 구성 및 μTLB (615) 를 메모리 액세스하고 채우는 동안의 시스템 (600) 의 동작이 도 7 내지 도 9를 참조하여서 이하에서 더 상세하게 기술된다.
도 7은 도 6을 참조하여서 상술한 μTLB (615) 와 같은 μTLB 내의 예시적인 엔트리 (700) 의 블록도이다. 엔트리 (700) 는 다음의 세그먼트들을 포함할 수도 있다:
V (705): 유효성 비트. 유효성 비트는 엔트리의 유효성 여부를 표시한다.
Gt (706): Gt 비트는 엔트리가 게스트 (Gt = 1) 또는 루트 컨텍스트 (Gt = 0) 에 속하는지의 여부를 표시한다. Gt =0이면, VPN은 GPA 또는 RVA이다. Gt=1이면, VPN는 GVA 또는 GPA (맵핑되지 않은 게스트 어드레스들의 경우) 이다. Gt 비트 사용은 대응하는 가상 머신 ID (VMID) 를 각 μTLB 엔트리를 태그할 필요를 제거한다.
Mask (707): 이 비트는 특정 어드레스가 비교 시에 고려되어야 하는지 또는 무시되어야 하는지를 비교기에 표시한다.
G (708): 이는 글로벌 비트이다. Gt=1이면, 이 비트는 GVA에 대응하는 게스트 TLB 엔트리의 G 비트를 나타낸다. Gt=0이면, 이 비트는 GPA 또는 RVA에 대응하는 루트 TLB 엔트리의 G 비트를 나타낸다.
ASID (709): 이는 ASID 필드이다. Gt=1이면, 이 필드는 이 특정 변환에 대해서 게스트 ASID를 적용한다. 이 필드는 G=1이면 무시된다. Gt=0이면, 이 필드는 이 특정 변환에 대해서 루트 ASID를 적용한다. 이 필드는 G=1이면 무시된다.
VP (710): (GVA, GPA, 또는 RVA 대한) 가상 페이지 넘버 (Virtual page number).
ENTg[7:0] (711): ENTg은 이 변환의 소스를 식별하는 게스트 엔트리 넘버 또는 다른 고유 식별자이다. MTLB 기록 시에, 이 넘버는 유효한 변환사항들을 더 이상 나타내지 않을 수 있는 엔트리들을 선택적으로 무효화시키는데 사용된다. Gt=0이면, 이 비트는 사용되지 않는다. 루트 TLB 내에서의, Entg[7:0] == 0 은 게스트 TLB 내에 어떠한 게스트 변환사항도 존재하지 않음 (예를 들어서, 맵핑되지 않은 게스트 어드레스) 을 표시한다. ENTg 은 MTLB의 절대 엔트리 넘버 (0-255) 이며, 게스트에게 알려진 "인덱스"는 아니다.
ENTr[8:0] (712): ENTr는 이 변환의 소스를 식별하는 루트 엔트리 넘버 또는 다른 고유한 식별자이다. 이 필드는 Gt=0 및 Gt=1 모두에 대해서 설정될 수 있음이 주목된다. ENTr[8] 은 이 μTLB 엔트리가 MTLB 루트 엔트리를 가지지 않음을 표시하도록 설정된다. 이는 맵핑되지 않은 루트 어드레스들이 μTLB 내로 삽입되는 경우에 발생할 수 있다. ENTr 은 MTLB의 절대 엔트리 넘버 (0-255) 이며, 루트에게 알려진 "인덱스"는 아니다.
RP (713): 루트 페이지 넘버 (Root page number). 이 필드는 루트 TLB EntryLo0 또는 EntryLo1으로부터 카피되거나 (게스트 TLB로부터의) GPN 과 (루트 TLB로부터의) RP의 접합 (concatenation) 일 수도 있다.
GRI (714): 게스트 판독 금지. GRI 비트는 게스트 TLB 엔트리 RI 비트의 값을 반응한다. 이 필드는 Gt=0일 때에 무시된다.
RI (715): 판독 금지. RI는 루트 TLB RI 비트의 값을 반영한다. 이 필드는 Gt=0일 때에 고려되지 않는다.
GD (716): 게스트 더티 비트. GD 비트는 게스트 TLB 내의 D 비트의 값을 반영한다. 이 필드는 Gt=0일 때에 무시될 수도 있다.
D (717): 더티 비트. D 비트는 루트 TLB 내의 D 비트 값을 반영한다.
C (718): 코히어런시 비트. Gt=1일 때에, CCA가 게스트 TLB 엔트리로부터 취해진다. Gt=0일 때, 이는 루트 TLB 엔트리로부터 취해진다.
위의 값들은 이하에서 보다 상세하게 기술된다. 게스트 = 1 (즉, 게스트 룩업이 수행되고 있는 중임) 이면, 오직 Gt=1을 갖는 엔트리만이 룩업 시에 고려된다. 게스트 = 0 (즉, 루트 룩업이 수행되고 있는 중임) 이면, 오직 Gt=0을 갖는 엔트리만이 룩업 시에 고려된다.
다시 도 6을 참조하면, 어드레스 변환이 요구되는 때에, 메모리 제어기 (608) 는 μTLB (615) 를 액세스하고 "VP" 필드에 대한 매칭을 탐색한다. 매칭이 발견되면, 대응하는 RP가 루트 물리적 어드레스의 페이지 넘버 부분을 포함한다. 마스크 비트들은 VP 필드의 어느 비트들이 매칭되는지를 결정하고, RP의 어느 비트들이 루트 물리적 어드레스를 형성하는데 사용되는지를 결정한다. 미스가 발생하면, 하드웨어는 MTLB (610) 를 액세스하고, 변환될 어드레스 타입에 따라서, 1 룩업 (GPA에서 RPA로의 룩업) 또는 2 룩업들 (GVA에서 GPA로의 룩업 및 GPA에서 RPA로의 룩업) 을 수행한다.
다시 도 7로 돌아가면, 각 μTLB 엔트리 (700) 는 2 개에 달하는 변환 단계들의 결과들을 나타낼 수도 있다. 이러한 단계들 각각으로부터의 일부 정보는 μTLB 에 의해서 보존되어야 한다. 마스크 비트들 (707) 은 게스트 페이지 크기 및 루트 페이지 크기 중 보다 작은 것 (즉, 게스트 가상 대 게스트 물리적 페이지 크기 또는 게스트 물리적 대 루트 물리적 페이지 크기) 에 의해서 결정된다.
G 비트 (708) 는 "글로벌" 비트를 나타낸다. 글로벌 어드레스들은 ASID가 무시되는 것들이다. 맵핑이 GVA에서 RPA로의 맵핑이면, G 비트는 게스트 TLB로부터 카피된다 (즉, 게스트 변환). 맵핑이 GPA 또는 RVA에서 RPA로의 맵핑이면, G 비트는 루트 TLB로부터 카피된다 (즉, 루트 변환).
ASID 필드 (709) 가 가상 어드레스에 대한 어드레스 공간 식별자를 나타낸다. ASID 필드 (709) 는 상이한 컨텍스트들에 속하는 가상 어드레스들 간을 구별하는데 사용된다. 이 맵핑이 게스트 가상 어드레스에서 루트 물리적 어드레스로의 맵핑이면, ASID 필드 (709) 는 게스트 TLB로부터 카피된다 (즉, 게스트 변환). 이 맵핑이 GPA에서 RPA로의 맵핑이면, ASID 필드 (709) 는 루트 TLB로부터 카피된다 (즉, 루트 변환). 가상 페이지 넘버 (VP) 필드 (710) 는 변환된 가상 어드레스로부터 형성될 수도 있으며, 루프 페이지 넘버 (RP) 필드 (713) 는 (도 9a 내지 도 9c를 참조하여서, 이하에서 보다 더 상세하게 기술될) 게스트 변환사항과 루트 변환사항의 상대적 페이지 크기들에 따라서 형성될 수 있다.
판독 금지 (RI) (715) 는 특정 페이지가 판독되는 것을 금지하는데 사용될 수도 있다. 판독 허가는 이 비트에 대한 게스트 변환 값 및 루트 변환 값에 의존하기 때문에, 게스트 판독 금지 속성 및 루트 판독 금지 속성은 모두 μTLB (615) 내에서 캡처된다 (captured). GRI (게스트 판독 금지) 는 게스트 TLB로부터 카피될 수도 있다. 변환이 게스트 가상 어드레스 변환이 아니면, GRI 비트는 무시될 수도 있으며, RI 비트 (715) 는 루트 TLB 엔트리로부터 카피된다. 마찬가지로, D (더티) 비트 (717) 는 페이지가 이전에 기록되었는지의 여부를 표시한다. 비트 (717) 가 이 비트에 대한 대응하는 게스트 변환 값 및 루트 변환 값 양자에 의존하기 때문에, 게스트 D 비트 속성 및 루트 D 비트 속성 양자가 μTLB (615) 내에서 캡처된다.
C 비트 (718) 는 특정 페이지에 대한 코히어런시 정책과 연관될 수도 있다. GVA에서 RPA로의 맵핑이면, CCA 필드 (718) 는 게스트 TLB의 대응하는 엔트리로부터 카피될 수도 있다. 맵핑이 GPA에서 RPA로의 변환에 대한 것이면, C 필드 (718) 는 루트 TLB의 대응하는 엔트리로부터 카피될 수도 있다.
Figure 112014092018874-pat00001
표 1: μTLB 엔트리의 유효한 값들과 무효한 값들의 비교
표 1은 μTLB 엔트리의 가능한 값들을 제공하며, 값들의 유효한 조합들 및 μTLB 룩업 동안에 "예외"을 생성할 수 있는 값들의 조합을 표시한다. μTLB 를 액세스할 시에, 예외 조건이 게스트에서 발생할 수 있다 (예를 들어서, 인스트럭션 페치, 로딩 또는 저장 위반). 게스트 소프트웨어가 예외 조건들을 다룬 후에, 인스트럭션이 재실행될 수도 있다. 재실행 시에, 게스트 허가 체크는 통과되지만, 루트 TLB 보호 위반이 존재할 수도 있다. 이어서, 예외가 루트 컨텍스트에 알져질 것이다. μTLB 예외는 "미스"로서 고려될 수도 있으며, 도 8를 참조하여서 이하에서 기술될 바와 같이 다루어진다.
도 8은 일 실시예에서 μTLB을 사용하여 시스템 메모리를 액세스하는 프로세스 (800) 를 예시하는 흐름도이다. 프로세스 (800) 는 성공적인 μTLB 룩업 및 룩업 "미스" 시의 μTLB에 대한 업데이트 양 시나리오를 포함한다. 도 6을 참조하면, 게스트 (604a) 는 GVA와 함께, 메모리 제어기 (608) 에 메모리 액세스 요청 (예를 들어서, 시스템 메모리에 대한 기록 또는 판독) 을 전송한다 (805). 메모리 제어기 (608) 는 이 요청 및 GVA를 수신하며 (806), GVA에 대한 변환 매칭을 룩업하기 위해서 μTLB (615) 를 액세스한다 (810). 대응하는 RPA에 대한 매칭이 발견되면, RPA가 리턴된다 (815). 이어서, 메모리 제어기 (608) 는 시스템 메모리의 대응하는 엔트리를 액세스하기 위해서 RPA를 사용하고 (816), 시스템 메모리 (650) 에 대한 기록 또는 판독 동작을 수행하기 위해서 게스트 (604a) 를 인에이블한다.
GPA 또는 RVA에 대한 매칭이 실패한 경우에 (즉, μTLB "미스"의 경우에), μTLB (615) 가 업데이트된다 (820). 그렇게 하기 위해서, 메모리 제어기 (608) 는 μTLB "미스 제어기"로서 동작한다. (이와 달리, μTLB 미스 제어기는 메모리 제어기 (608) 와는 별도로 구성될 수도 있다). 메모리 제어기 (608) 는 대응하는 GVA에서 GPA로의 변환사항 및 GPA에서 RPA로의 변환사항을 검색하기 위해서 MTLB (610) 를 액세스할 수도 있다 (825). (이와 달리, 메모리 제어기 (608) 는 소정의 μTLB 엔트리가 GPA에서 RPA로의 변환사항이면 오직 GPA에서 RPA로의 변환사항만을 액세스할 수도 있다.) MTLB (610) 로부터의 대응하는 변환사항들을 사용하여서, 메모리 제어기는 유효한 GVA에서 RPA로의 변환사항을 생성하고, 이를 μTLB (615) 에 기록한다 (830). μTLB (615) 가 업데이트되면, 메모리 제어기 (608) 는 μTLB (615) 에 대한 GVA 매칭을 다시 수행하고, 대응하는 RPA를 리턴할 시에 (815) 메모리 액세스를 제공한다 (816).
도 7을 참조하여서 상술된 필드들을 포함하여서, μTLB 엔트리를 생성하기 위해서, 메모리 제어기 (608) 는 MTLB (610) 의 GTLB 및 RTLB 양자 내의 엔트리들의 필드들로부터 임포트 (import) 할 수도 있다. 도 5 및 도 7를 참조하면, μTLB 엔트리의 필드들은 다음과 같이 채워질 수도 있다:
V: 1 (하드웨어 유효 비트)
Gt: 1 (이는 게스트 맵핑임)
Mask : RootMask 크기 및 GuestMask 크기 중 최소로 설정
G : 게스트 TLB로부터 카피됨
ASID : 케스트 컨텍스트로부터 카피됨
VP: GVA
RP: RP
GRI: 게스트 TLB로부터 카피됨
RI: 루트 TLB로부터 카피됨
GD : 게스트 TLB로부터 카피됨
D: 루트 TLB로부터 카피됨
GXI: 게스트 TLB로부터 카피됨
XI : 루트 TLB로부터 카피됨
C: 게스트 TLB로부터 카피됨
ENTg[7:0]: 게스트 TLB 엔트리의 인덱스로 설정됨
ENTr[8:0]: 루트 TLB 엔트리의 인덱스로 설정됨
도 9a 내지 도 9c는 μTLB 내로 입력된 콜랩스된 변환사항들 (collapsed translations) 을 예시하는 블록도이다. 도 7을 참조하여서 상술한 바와 같이, μTLB 엔트리 (700) 내에서, 가상 페이지 넘버 (VP) 필드 (710) 는 변환되는 가상 어드레스로부터 형성될 수도 있으며, 루프 페이지 넘버 (RP) 필드 (713) 는 게스트 변환사항과 루트 변환사항의 상대적 페이지 크기들에 따라서 형성될 수 있다. VP 및 RP 생성은 게스트 TLB 및 루트 TLB의 상대적인 페이지 마스크들의 함수일 수도 있다. 고려할 3 가지 경우들, 즉 1) 루트 엔트리 및 게스트 엔트리가 동일한 페이지 크기를 갖는 경우, 2) 루트 엔트리가 게스트 엔트리보다 작은 페이지 크기를 갖는 경우, 및 3) 게스트 엔트리가 루트 엔트리보다 작은 페이지 크기를 갖는 경우가 존재한다.
도 9a는 변환 시에 사용된 루트 엔트리 및 게스트 엔트리가 동일한 페이지 크기를 갖는 경우의 콜랩스된 변환 (collapsed translation) 을 예시한다. 이러한 경우에, VP 및 RP 생성은 상대적으로 간단할 수도 있다. 마스크는 적절한 페이지 크기로 설정되고, VP는 GTLB의 VPN 필드 (506) 로부터 카피되고, RP는 루트 TLB의 PFN 필드 (510) 로부터 카피된다.
도 9b는 루트 엔트리가 게스트 엔트리보다 작은 페이지 크기를 갖는 경우의 (즉, GVA에서 GPA로의 변환이 GPA에서 RPA로의 변환의 페이지 크기보다 큰 페이지 크기를 특정한 경우의) 콜랩스된 변환 (collapsed translation) 을 예시한다. 이러한 경우에, VP 는 GVA와 GTLB의 VPN 필드 (506) 의 조합으로부터 생성될 수도 있다. 이로써, VP는 루트 TLB의 페이지 마스크를 사용하여서 GVA로 설정된다. RP는 루트 TLB의 PFN 필드 (510) 로부터 카피될 수도 있다.
도 9c는 게스트 엔트리가 루트 엔트리보다 작은 페이지 크기를 갖는 경우의 (즉, GVA에서 GPA로의 변환이 GPA에서 RPA로의 변환의 페이지 크기보다 작은 페이지 크기를 특정한 경우의) 콜랩스된 변환 (collapsed translation) 을 예시한다. 이러한 경우에, VP 는 게스트 TLB의 VPN 필드 (506) 로부터 취해질 수도 있다. RP는 GTLB의 PFN 필드 (510) 와 루트 TLB의 PFN 필드 (510) 의 접합 (concatenation) 일 수도 있다. 특히, 아래로 루트 페이지 크기까지의 상위 PA 비트들은 루트 TLB의 물리적 태그로부터 취해진다. 아래로 게스트 페이지 크기까지의 하위 비트들은 게스트 TLB의 물리적 태그 (GPA) 로부터 취해질 수도 있다.
다른 실시예들에서, μTLB 는 다수의 타입들의 변환들을 캐시할 수도 있다. 예를 들어서, μTLB 는 (상술한 바와 같은) GVA로부터 RPA로의 변환 및 GPA 또는 RVA (루트 가상 어드레스) 로부터 RPA로의 변환을 캐시할 수 있으며, RVA는 하이퍼바이저에 의해서 채용된 가상 메모리의 어드레스일 수 있다. GVA들과 GPA들 간의 에일리어스들 (aliases) (가능하게 상이한 루트 물리적 어드레스들 간의 유사한 어드레스들) 이 존재할 수 있기 때문에, μTLB 는 상술한 바와 같은 Gt 비트를 포함할 수 있다. 엔트리의 Gt 비트가 1이면, 이 엔트리의 VP는 게스트 가상 어드레스를 나타낸다. 마찬가지로, 엔트리의 Gt 비트가 0이면, 이 엔트리의 VP는 GPA 또는 RVA를 나타낸다. Gt 비트는, 하이퍼바이저에 의해서 소유된 맵핑들 (즉, GPA에서 RPA로의 변환들) 을 방해하지 않으면서 게스트들을 변경할 때에 게스트 변환들 (즉, GVA에서 GPA로의 변환들) 을 신속하게 무효화시키도록 하드웨어를 인에이블할 수도 있다.
또 다른 실시예들에서, μTLB 는 임의의 개수의 어드레스 도메인들 간의 변환을 캐시할 수도 있다. 예를 들어서, 일부 가상화 시스템들은 GPA 도메인과 RPA 도메인 간에서 구현될 수도 있는, SPA ("secure RPA") 와 같은, GVA 도메인, GPA 도메인과 RPA 도메인 간의 추가 어드레스 도메인을 구현할 수도 있다. 이러한 어드레싱 시스템을 수용하기 위해서, MTLB는 변환사항들을 저장하는 3 개 이상의 논리적 부분들을 포함할 수도 있다. SPA 도메인을 포함하는 특정 실례에서, MTLB는 GVA에서 GPA로의 변환사항을 저장하는 제 1 논리적 부분, GPA에서 SPA로의 변환사항을 저장하는 제 2 논리적 부분, 및 SPA에서 RPA로의 변환사항을 저장하는 제 2 논리적 부분을 포함할 수도 있다. 따라서, μTLB 는 GVA 도메인과 RPA 도메인 간의 변환사항들을 캐시하여서, 4 개의 어드레스 도메인들 간의 변환들을 콜랩스하도록 (collapsing) 구성될 수도 있다.
또 다른 실시예들에서, 변환들은 다중-레벨 변환 저장 계층 중 임의의 레벨에서 적용될 수도 있다. 각 저장 레벨은 직접적 변환 (즉, 2 개의 연속하는 어드레스 도메인들 간의 변환) 또는 콜랩스된 변환 (하나 이상의 중간의 어드레스 도메인들에 의해 분리된 2 개의 어드레스 도메인들 간의 변환) 을 적용할 수 있다. 특정 실례에서, 시스템은 4 개의 논리적 도메인들과 3 개의 저장 레벨들에 대해서 구성될 수도 있다. 세번째 저장 레벨 3은 제 1 어드레스 도메인에서 최종 어드레스 도메인으로의 콜랩스된 변환들을 적용할 수도 있다. 두번째 레벨은 제 1 논리적 도메인에서 제 2 논리적 도메인으로의 직접적 변환을 적용하고 제 2 논리적 도메인에서 마지막 논리적 도메인으로의 콜랩스된 변환들을 적용할 수도 있다. 마지막으로, 첫번째 레벨은 제 1 논리적 도메인에서 제 2 논리적 도메인으로의 직접적 변환, 제 2 논리적 도메인에서 제 3 논리적 도메인으로의 직접적 변환 및 제 3 논리적 도메인에서 제 4 논리적 도메인으로의 직접적 변환을 적용할 수도 있다.
도 10은 다른 실시예에서 복수의 TLB들 및 가상 데이터 캐시를 구현하는 컴퓨터 시스템 (1000) 의 일부를 예시하는 블록도이다. 시스템 (1000) 은 각기 도 1 및 도 6의 컴퓨터 시스템들 (100 및 600) 을 참조하여서 상술한 바와 같이 구성될 수 있다. 특히, 메모리 제어기 (1008), MTLB (1010) 및 μTLB (1015) 는 상술한 이러한 구성요소들과 유사하게 구성될 수도 있다. 시스템 (1000) 은 가상 데이터 캐시 (1035) 를 더 포함하며, 이 캐시는 MTLB (1010) 및 μTLB (1015) 과는 별도로 어드레스가능한 개별 하드웨어 캐시일 수도 있다. 데이터 캐시 (1035) 는 (시스템 메모리들 (150, 650) 와 같은) 시스템 메모리에서 표현된 값들을 저장하는데 사용될 수 있다. 데이터는 태그 (tag) 에 의해서 데이터 캐시 (1035) 내에서 위치가 파악된다. 데이터 캐시 (1035) 는 MTLB (1010) 및 μTLB (1015) 에 저장된 변환사항들과 연관된 태그들을 저장하도록 구성될 수도 있다. 데이터 캐시 (1035) 에 저장된 태그는 예를 들어서, μTLB (1015) 의 연관 엔트리의 필드들의 서브세트를 포함할 수도 있다. 데이터 캐시 (1035) 내에 이 데이터를 유지함으로써, 메모리 제어기와 같은 하드웨어는 메모리 액세스 동작에서의 변환 룩업 동안에 이러한 엔트리들로의 보다 고속 액세스라는 이점을 취할 수 있다. 예를 들어서, 데이터 캐시 (1035) 는 일부 또는 모든 변환 룩업들에 있어서 제 1 참조부로서 구성되고, 시스템은 μTLB (1015), MTLB (1010) 및 시스템 제어기 (150 또는 160) 와 같은 다른 구조부에 대한 참조를 피하도록 데이터 캐시로부터 데이터를 검색한다. 다른 실시예들에서, 데이터 캐시 내에 저장된 태그는 MTLB (1010) 및 μTLB (1015) 중 일부 또는 양자 내의 연관된 엔트리들의 필드들의 서브세트를 포함할 수도 있다.
도 11은 도 10을 참조하여서 상술한 데이터 캐시 (1035) 내에 저장될 수도 있는 예시적인 데이터 캐시 태그 (1100) 의 블록도이다. 이 예시적인 데이터 캐시 태그에서, 모든 필드들은 μTLB (예를 들어서, μTLB (1015)) 의 연관된 엔트리의 대응하는 필드들로부터 채워질 수도 있다. μTLB로부터 채워진 필드들은 Gt 비트 (1106), G 비트 (1108), ASID 필드 (1109), ENTg 필드 (1111), 및 ENTr 필드 (1112), D 비트 (1117), 및 VP 비트 (1119) 를 포함할 수도 있으며, 이들 각각은 도 5 및 도 7을 참조하여서 상술되었다. 데이터 캐시가 채워지고 엔트리들이 MTLB 및 μTLB 및 데이터 캐시 간에서 유지되게 하는 예시적인 프로세스들이 도 12를 참조하여서 이하에서 기술된다.
가상 어드레스와 루트 물리적 어드레스 간의 맵핑이 변경될 때에, 가상 어드레스와 루트 물리적 어드레스 간의 이전의 맵핑으로부터의 정보를 포함한 임의의 TLB 엔트리들은 TLB 내에서 교체되거나 무효화될 수도 있다. 이러한 교체는 하드웨어 수단 또는 소프트웨어 수단으로 수행될 수도 있다. 게스트 가상 어드레스에서 게스트 물리적 어드레스로의 맵핑이 소프트웨어에 의해서 변경되는 때에, 게스트 TLB는 업데이트될 수도 있다. μTLB 및 데이터 캐시 양자가 각기 어드레스 변환사항 또는 데이터 값을 캐시하도록 이전의 게스트 TLB 맵핑으로부터의 정보를 사용할 수도 있다. 어드레스 및 데이터 일관성을 유지하기 위해서, 이전의 맵핑과 연관된 임의의 μTLB 엔트리 또는 데이터 캐시 엔트리는 무효화될 수도 있다. 일 실시예에서, 이러한 무효화는 메모리 제어기와 같은 하드웨어에 의해서 수행될 수도 있다. ENTg 값 및 ENTr 값은 μTLB 엔트리 또는 데이터 캐시 태그를 형성하는데 사용된 TLB 엔트리들을 고유하게 식별하고 이로써 매칭하는 엔트리들을 식별할 때에 탐색될 수도 있다.
도 12는 다수의 캐시들에 걸쳐서 엔트리들을 유지하는 프로세스 (1200) 를 예시하는 흐름도이다. 도 10을 참조하면, GTLB (1020) 및 RTLB (1030) 으로의 엔트리들은 도 4를 참조하여서 상술한 바와 같이 채워지고 업데이트될 수도 있으며 (1205, 1210), μTLB (1015) 은 도 8를 참조하여서 상술한 바와 같이 채워지고 업데이트될 수도 있다 (1215). 또한, 메모리 제어기 (1008) 또는 다른 하드웨어는 소정의 μTLB 엔트리 (1220) 의 필드들의 선택된 서브세트를 엑스포트 (export) 함으로써 태그들을 데이터 캐시 (1035) 에 기록할 수도 있다. 채워진 MTLB, μTLB 및 데이터 캐시의 엔트리들을 사용하여서, 메모리 제어기 (1008) 는 도 4 및 도 8을 참조하여서 상술한 바와 같이 메모리 액세스 요청들에 응답하여서 변환 룩업들을 수행할 수도 있다 (1225).
메모리 제어기 (1008) 또는 다른 하드웨어는 엔트리를 다른 엔트리로의 교체, 엔트리 삭제, 또는 엔트리 무효화와 같은, MTLB 내의 엔트리들의 변화가 있는지에 대해서 MTLB (1010) 을 더 모니터링할 수도 있다 (1230). 이러한 변화가 검출되면, 메모리 제어기 (1008) 는 μTLB (1015) 및 데이터 캐시 (1035) 각각을 탐색하여서 변화된 엔트리에 대응하는 태그들 및 엔트리들의 위치를 파악한다 (1235). 이러한 엔트리들 및 태그들의 위치를 파악한 후에, 이들은 이들 각각의 "유효" 비트를 수정함으로써 무효화될 수 있다 (1240). MTLB (1010), μTLB (1015) 및 데이터 캐시 (1035) 에 걸쳐서 엔트리들을 유지하는 예시적인 실시예들이 이하에서 보다 상세하게 기술된다.
GTLB (1020) 엔트리가 교체되는 때에, 이 엔트리로부터 유도된 정보를 포함하는 임의의 μTLB (1015) 엔트리 또는 데이터 캐시 (1035) 엔트리는 무효화될 필요가 있을 수도 있다. (상술한) ENTg 필드와 같은 Tag 값들은 이러한 무효화를 위해서 사용될 수도 있다. 또한, GTLB 엔트리와 연관된 고유 식별자는 이 GTLB 엔트리로부터의 정보를 포함한 모든 μTLB 엔트리 및 데이터 캐시 엔트리를 찾는데 사용될 수도 있다. 일 실시예에서, 고유 식별자는 GTLB 엔트리의 물리적 인덱스일 수도 있다. 먼저, 1과 동일한 Gt를 갖는 μTLB 엔트리 및 데이터 캐시 엔트리의 탐색이 수행될 수도 있다. 교체되는 게스트 TLB의 물리적 인덱스과 그들의 ENTg 필드 상에서 매칭하는 모든 엔트리들이 메모리 제어기 또는 다른 하드웨어에 의해서 무효화될 수도 있다. 이 탐색은 순차적으로, 연관적으로 또는 이들의 일부 조합으로 수행될 수도 있다. ENTg 필드를 사용하는 것은 상이한 어드레스 폭들 (예를 들어서, 캐시 라인 크기 대 페이지 크기) 을 수용하도록 조절되어야 하는 가상 어드레스 태그들과 비교할 필요를 제거하고, 비교할 가상 어드레스 값을 구함으로써 무효화 태스크를 단순화시킬 수도 있다. ENTg 필드를 사용하는 것은 무효화를 위해서 CAM들에 의해서 요구되는 다이 면적을 최소화하고 어드레스 및 데이터 일관성을 유지하는데 필요한 태그들의 서브세트만으로 무효화를 좁힘으로써 가상 캐시의 사용을 가능하게 할 수도 있다. 다른 실시예에서, 벌크 무효화가 수행될 수도 있으며, 이로써 1과 동일한 Gt 비트를 갖는 모든 데이터 캐시 및 μTLB 태그들은 무효화된다. 다른 대안에서, 벌크 무효화가 수행될 수도 있으며, 이로써 그들의 Gt 비트 값과 상관 없이 모든 데이터 캐시 및 μTLB 태그들은 무효화된다.
RTLB (1030) 엔트리가 교체되는 때에, 이 엔트리로부터 유도된 정보를 포함하는 임의의 μTLB (1015) 엔트리 또는 데이터 캐시 (1035) 엔트리는 무효화될 필요가 있을 수도 있다. ENTr 필드와 같은 Tag 값들은 이러한 무효화를 위해서 사용될 수도 있다. 또한, RTLB 엔트리와 연관된 고유 식별자는 이 RTLB 엔트리로부터의 정보를 포함한 모든 μTLB 엔트리 및 데이터 캐시 엔트리를 찾는데 사용될 수도 있다. 일 실시예에서, 고유 식별자는 루트 TLB 엔트리의 물리적 인덱스일 수도 있다. 이어서, μTLB 엔트리 및 데이터 캐시 엔트리 탐색이 수행될 수도 있다. 교체되는 루트 TLB의 물리적 인덱스과 그들의 ENTr 필드 상에서 매칭하는 모든 엔트리들이 하드웨어에 의해서 무효화될 수도 있다. 이 탐색은 순차적으로, 연관적으로 또는 이들의 일부 조합으로 수행될 수도 있다. GTLB 교체 경우와 대조하여서, Gt 비트의 값은 상관성이 없다고 고려되는데 그 이유는 게스트 엔트리 및 루트 엔트리 모두가 루트 맵핑에 의존할 수도 있기 때문이다.
ENTr 필드가 엔트리들을 무효화시키기 위해서 구현되지 않는다면, 루트 TLB 엔트리를 제거하는 것은 데이터 캐시 및 μTLB 무효화의 몇몇 다른 형태를 요구할 수도 있다. 이와 달리, 전체 데이터 캐시 및 μTLB가 무효화될 수도 있다. 다른 대안에서, 가상 태그가 무효화를 위해서 매칭될 수도 있다. 그러나, 루트 TLB 엔트리 제거 시에, GVA 태그들을 사용하여서 게스트 엔트리들을 무효화하는 것은 추가 문제점들을 낳을 수 있다. 구체적으로, 몇몇 실시예들에서, 루트 TLB 엔트리의 GPA와 이에 맵핑하는 가능하게는 다수의 GVA들 간의 어떠한 역 맵핑 (reverse mapping) 도 존재하지 않는다. 이로써, 이러한 실시예들에서, 교체되는 루트 TLB와 매칭하는 GPA에 대해 맵핑하는 GVA들을 추론하는데 추가 구성요소들이 필요할 수도 있다.
도 13은 다른 실시예에서 어드레스 변환의 선택적 바이패스를 예시하는 블록도이다. 몇몇 컴퓨터 아키텍처에서, 가상 어드레스는 때로 어드레스 변환 (address translation) 을 바이패스하고 가상 어드레스로부터 물리적 어드레스로의 일부 고정된 어드레스 변형 (fixed addresse transformation) 을 경험할 수도 있다. 추가적으로, 몇몇 경우에서는, 가상 어드레스는 변환될 수도 있지만, 이 변환을 경험하는 영역은 I/O 어드레스와 같은 어드레스를 분류하는 속성과 같은, 일부 차별되는 속성을 갖는다. 예를 들어서, MIPS (Microprocessor without Interlocked Pipeline Stages) 아키텍처에서, 특정 가상 어드레스들은 대응하는 TLB 엔트리들을 구비하지 않는다. 대신에, 특정 범위의 가상 어드레스에 있어서, 이 어드레스는, 가상 어드레스의 LOB (low order bits) 가 물리적 어드레스가 되도록 마스크 (mask) 를 적용함으로써, 물리적 어드레스로 변형된다. 유사한 고정된-함수 변형들 (fixed-function transformation) 은 베이스 레지스터 (base register) 및 리미트 레지스터 (limit register) 또는 유사한 시스템들을 통해서 다른 아키텍처들에서도 가능하다.
다중-스테이지 어드레스 변환 시스템을 통한 가상화가 도입되는 때에, 맵핑되지 않는 또는 바이패스 가상 어드레스들의 가능성은 임의의 스테이지에서 발생할 수도 있다. 또한, 맵핑된 가상 어드레스들은 게스트 변환 프로세스에서 일부 특별한 속성들이 부여될 수도 있다. 2-스테이지 변환 방식을 사용하는 일 실시예에서, 맵핑되지 않은 어드레스는 RTLB에 제공된 GPA로서 또는 GTLB에 제공된 GVA로서 발생할 수 있다.
다중-스테이지 변환의 결과는 정상적으로 맵핑되지 않은 GVA가 RTLB에 의해서 맵핑된 GPA를 낳는다는 것이다. 추가적으로, 그것과 연관된 일부 특정 속성을 갖는 GVA는 GPA로 변환될 것이다. 게스트 운영 체제는 어드레스가 게스트 TLB에 의해서 맵핑되지 말아야 하지만 루트 TLB를 제어하지 않을 수도 있다는 것을 특정할 수도 있다. 따라서, 맵핑되지 않은 GVA는 맵핑된 GPA가 될 수도 있다. 일반적으로, 이는, RTLB가 GPA와 연관된 RPA에 대하여 최종 제어를 하는 하이퍼바이저에 의해서 제어되기 때문에, 적합할 것이다. 그러나, 몇몇 타입의 변환들에 있어서, GVA가 맵팽되지 않거나 일부 특정 속성을 갖는다면, 후속 어드레스 변환들을 바이패스하고 RPA가 GPA와 동일하게 되게 하는 것이 유리할 수도 있다.
따라서, 예시적인 실시예들은 수신된 어드레스 내의 표시값에 기초하여서 어드레스 변환의 적어도 일부를 선택적으로 바이패스하는 것을 제공할 수도 있다. 도 13은 메모리 제어기 (예를 들어서, 도 1의 메모리 제어기 (108)) 에 의해서 또는 다른 하드웨어 및/또는 소프트웨어에 의해서 구현될 수도 있는 바이패스 제어의 일 실례를 예시한다. GTLB 변환부 (1320) 는 상술한 바와 같은 GTLB 룩업에 대하여 필적하게 동작하는, GVA 입력에 대응하는 변환된 GPA를 제공할 수도 있다. 마찬가지로, RTLB 변환부 (1330) 는 상술한 바와 같은 RTLB 룩업에 대하여 필적하게 동작하는, GPA 입력에 대응하는 변환된 RPA를 제공할 수도 있다.
바이패스 제어는 어드레스의 속성 또는 다른 표시값에 기초하여서 GTLB 변환부 (1320) 및 RTLB 변환부 (1330) 중 하나 또는 양자에서의 변환을 선택적으로 바이패스하는 것을 제공할 수도 있다. 바이패스가 인에이블되면, 어드레스가 GTLB (1320) 대신에 고정된 변형부 (fixed transform) (1365) 에 의해서 및/또는 RTLB (1330) 대신에 고정된 변형부 (1366) 에 의해서 (어드레스 마스킹을 통해서) 변환될 수도 있다. 일 실시예에서, 특권을 갖는 소프트웨어의 제어 하에서 바이패스 비트 세트 (1370) 가 RTLB 변환부 (1330) 를 바이패스하는데 사용된다. 바이패스 결정부 (1360) 는 최초 GVA의 함수 및/또는 이 GVA의 속성들 및 바이패스 비트의 상태일 수도 있다. 예를 들어서, MIPS 아키텍처에서, KSEG0 (맵핑되지 않은 가상 어드레스 세그먼트) 내의 모든 GVA가 (고정된 변형부 (1365) 에서의 어드레스 마스킹을 통해서) GPA들로 변형되고, GPA들이 (고정된 변형부 (1366) 에서의 어드레스 마스킹을 통해서) RPA들로 변형되어서, GTLB 변환부 (1320) 및 RTLB 변환부 (1330) 모두를 바이패스하도록 비트가 규정될 수도 있다. 이러한 구성에서, 어드레스 마스크가 적용된 후에 GPA는 GVA와 동일하고, 추가 어드레스 마스크가 적용된 후에 RPA는 GPA와 동일할 것이다. 몇몇 실시예들에서, 어드레스 마스크는 GPA들과 RPA들 간에서 요구되지 않을 수도 있는데, 이는 GPA들이 RPA들과 동일함을 의미한다. 본 실례에서, 게스트 어드레스 공간은 메모리 공간 및 입출력 (I/O) 공간 양자를 포함한다. 이러한 어드레스 공간들 각각은 다수의 상이한 어드레스 공간들로 추가 분할될 수도 있다.
바이패스 결정부는, GVA가 대응하는 바이패스 비트 (1370) 와 연관된 어드레스 공간 내에 포함되면, RTLB 변환부 (1330) 가 바이패스되게 할 수도 있다. 바이패스 비트들 각각은 관련 어드레스 공간과 관련되는데, 이는 수신된 어드레스가 소정의 어드레스 공간에 속하고 바이패스 비트가 이 소정의 어드레스 공간에 대해서 인에이블되면 변환이 바이패스될 수도 있음을 의미한다. 예를 들어서, 바이패스 비트가 "1"로 설정되고 최초의 GVA가 대응하는 어드레스 공간 내에 상주하면, 바이패스 비트 (1370) 는 RTLB 변환부 (1330) 가 바이패스되게 할 수도 있다.
도 14는 어드레스 변환들을 선택적으로 바이패스하는 프로세스 (1400) 의 흐름도이다. GVA를 수신하면, 이 GVA가 GPA로 맵핑되는지 또는 맵핑되지 않은 어드레스 공간을 특정하는지의 여부가 결정된다 (1410). 메모리 제어기 (또는 다른 하드웨어 또는 소프트웨어) 가 이 결정에 따라서 GVA를 GPA로 변환 (translate) 또는 변형 (transform) 한다. GVA가 맵핑되지 않으면, 바이패스 비트 (예를 들어서, 도 13의 바이패스 비트 (1370)) 가 바이패스 인에이블 여부를 결정하기 위해서 참조된다 (1415). 어느 바이패스 비트를 사용할지는 GVA가 속한 어드레스 공간의 세그먼트에 의해서 결정될 수도 있다. 대응하는 바이패스 비트가 인에이블되면, (GPA를 어드레스 마스크를 사용하여서 변형하거나 하지 않으면서) RPA는 GPA와 동일하도록 생성될 수도 있다 (1440). GVA가 맵핑되지 않는 것이 아니거나 바이패스가 인에이블되지 않으면, 대신에 RTLB에 액세스함으로써 GPA는 RPA로 변환된다 (1435).
오직 GTLB만의 바이패스의 경우에 (즉, RTLB를 계속하여서 액세스하는 경우에), 게스트 운영 체제는 물리적 메모리에 직접적으로 액세스하도록 변환을 바이패스할 것을 결정할 수도 있다. 그러나, 하이퍼바이저가 이러한 직접적인 액세스를 금지할 수도 있으며 따라서 GPA (GTLB 바이패스로부터 기인됨) 가 계속 RPA로 변환되게 할 수 있다.
상술한 μTLB는 GVA들에서 RPA들로의 변환사항들을 캐시할 수도 있다. 따라서, 바이패스의 경우에, 바이패스 결과는 μTLB 내에 캐시되거나 캐시되지 않을 수도 있다. 그 결과가 μTLB 내에 캐시되지 않으면, μTLB 미스가 후속 액세스들에서 발생할 수도 있으며, 바이패스 결정 및 마스크가 반복될 수도 있다.
본 발명은 본 발명의 예시적인 실시예들을 참조하여서 특정하게 도시 및 기술되었지만, 형태 및 세부사항에서 다양한 변경이 첨부된 청구항들에 의해서 포함되는 본 발명의 범위 내에서 본 명세서에서 가능함이 본 기술 분야에게는 이해될 것이다.

Claims (45)

  1. 어드레스 도메인들 (address domains) 간의 변환사항들 (translations) 을 저장도록 구성된 캐시 (cache) 로서, 상기 캐시는 제 1 논리적 부분 및 제 2 논리적 부분으로서 어드레스가능하며, 상기 제 1 논리적 부분은 제 1 어드레스 도메인과 제 2 어드레스 도메인 간의 변환사항들을 저장하도록 구성되고, 상기 제 2 논리적 부분은 상기 제 2 어드레스 도메인과 제 3 어드레스 도메인 간의 변환사항들을 저장하도록 구성된, 상기 캐시;
    어드레스 요청을 상기 캐시에 대해서 매칭시키고 대응하는 어드레스 결과를 출력하도록 구성된 프로세서; 및
    상기 제 1 논리적 부분과 상기 제 2 논리적 부분 간의 경계 (boundary) 를 규정하도록 구성된 레지스터를 포함하는,
    회로.
  2. 제 1 항에 있어서,
    상기 프로세서는 상기 제 2 어드레스 도메인 내의 어드레스를 갖는 대응하는 엔트리를 결정하도록 상기 제 1 어드레스 도메인 내의 어드레스 요청을 상기 제 1 논리적 부분 내의 엔트리들에 대해서 매칭시키게 더 구성된,
    회로.
  3. 제 2 항에 있어서,
    상기 프로세서는 상기 제 3 어드레스 도메인 내의 어드레스를 갖는 대응하는 엔트리를 결정하도록 상기 제 1 논리적 부분 내에서 결정된 엔트리를 상기 제 2 논리적 부분 내의 엔트리들에 대해서 매칭시키게 더 구성되며,
    상기 어드레스 결과는 상기 제 3 어드레스 도메인 내의 어드레스를 포함하는,
    회로.
  4. 제 1 항에 있어서,
    상기 프로세서는 상기 제 3 어드레스 도메인 내의 어드레스를 갖는 대응하는 엔트리를 결정하도록 상기 제 2 어드레스 도메인 내의 어드레스 요청을 상기 제 2 논리적 부분 내의 엔트리들에 대해서 매칭시키게 더 구성되며,
    상기 어드레스 결과는 상기 제 3 어드레스 도메인 내의 어드레스를 포함하는,
    회로.
  5. 제 1 항에 있어서,
    상기 캐시 내의 엔트리들의 적어도 서브세트는 인덱스 식별자를 포함하며,
    상기 인덱스 식별자에 기초하여서 상기 캐시 내의 엔트리의 위치를 파악하도록 구성된 디코더를 더 포함하는,
    회로.
  6. 제 5 항에 있어서,
    상기 어드레스 요청은 상기 인덱스 식별자의 표시값 (indication) 을 포함하는,
    회로.
  7. 제 6 항에 있어서,
    상기 인덱스 식별자는 인덱스 식별자들의 시퀀스로서 구성되며, 상기 시퀀스의 순서는 상기 어드레스 요청의 소스에 종속되는,
    회로.
  8. 제 1 항에 있어서,
    상기 경계의 위치는 상기 레지스터에 저장된 값에 따라서 변하는,
    회로.
  9. 제 8 항에 있어서,
    상기 제 1 논리적 부분 및 상기 제 2 논리적 부분 중 적어도 하나의 크기는 상기 레지스터에 저장된 값에 따라서 변하는,
    회로.
  10. 제 9 항에 있어서,
    상기 프로세서는 상기 제 1 논리적 부분 및 상기 제 2 논리적 부분 중 적어도 하나의 크기가 변화되는 것에 응답하여서 상기 캐시 내의 엔트리들을 업데이트하도록 더 구성되는,
    회로.
  11. 제 1 항에 있어서,
    상기 제 1 어드레스 도메인은 게스트 가상 어드레스 도메인이고,
    상기 제 2 어드레스 도메인은 게스트 물리적 어드레스 도메인이고,
    상기 제 3 어드레스 도메인은 루트 물리적 어드레스 도메인인,
    회로.
  12. 제 1 항에 있어서,
    상기 캐시 내의 각 엔트리는 상기 엔트리가 상기 제 1 논리적 부분 또는 상기 제 2 논리적 부분의 멤버 (member) 인지를 표시하는 비트를 포함하는,
    회로.
  13. 제 12 항에 있어서,
    상기 어드레스 요청은 요청된 엔트리에 대응하는 상기 비트의 표시값을 포함하는,
    회로.
  14. 제 1 항에 있어서,
    상기 프로세서는 소정의 기간 동안에 다수의 매칭하는 엔트리들로부터 기인되는 예외를 억제하도록 구성되는,
    회로.
  15. 제 14 항에 있어서,
    상기 소정의 기간은 상기 어드레스 요청을 전송하는 소스들 간의 천이를 포함하는,
    회로.
  16. 제 1 항에 있어서,
    상기 캐시 내의 각 엔트리는 상기 엔트리와 연관된 소스를 표시하는 비트를 포함하는,
    회로.
  17. 제 1 항에 있어서,
    상기 프로세서는 상기 어드레스 요청의 소스에 기초하여서 상기 제 1 부분 및 상기 제 2 부분으로의 액세스를 제어하도록 구성되는,
    회로.
  18. 제 1 항에 있어서,
    상기 캐시는 제 3 논리적 부분으로서 어드레스가능하게 더 구성되며,
    상기 제 3 논리적 부분은 상기 제 3 어드레스 도메인과 제 4 어드레스 도메인 간의 변환사항을 저장하도록 구성되며,
    상기 레지스터는 상기 제 2 논리적 부분과 상기 제 3 논리적 부분 간의 경계를 규정하도록 더 구성되는,
    회로.
  19. 제 1 항에 있어서,
    상기 프로세서는 상기 어드레스 요청 내의 표시값에 기초하여서 상기 제 1 논리적 부분 및 상기 제 2 논리적 부분 중 선택된 하나 또는 둘을 탐색하도록 더 구성되는,
    회로.
  20. 제 1 항에 있어서,
    상기 프로세서는, 상기 어드레스 요청에 대하여 상기 캐시 내의 미싱 엔트리 (missing entry) 를 검출하면, 상기 미싱 엔트리에 대응하는 변환사항에 대한 요청을 출력하도록 더 구성되는,
    회로.
  21. 제 20 항에 있어서,
    상기 프로세서는, 상기 미싱 엔트리에 대응하는 상기 변환사항을 수신하면, 상기 변환사항을 상기 캐시 내에서, 상기 캐시의 상기 제 1 논리적 부분과 상기 제 2 논리적 부분 중 선택된 것의 랜덤하게-결정된 엔트리 (randomly-determined entry) 로 입력하도록 더 구성되는,
    회로.
  22. 제 1 항에 있어서,
    상기 제 1 논리적 부분은 제 1 인덱스를 포함하고, 상기 제 1 논리적 부분은 제 2 인덱스를 포함하며, 상기 제 2 인덱스는 상기 제 1 인덱스의 반전값 (inversion) 인,
    회로.
  23. 메모리 아키텍처 내에서 어드레스 변환사항들을 캐시하는 방법으로서,
    제 1 어드레스 도메인과 제 2 어드레스 도메인 간의 변환사항들을 캐시의 제 1 논리적 부분에 저장하는 단계;
    상기 제 2 어드레스 도메인과 제 3 어드레스 도메인 간의 변환사항들을 상기 캐시의 제 2 논리적 부분에 저장하는 단계;
    레지스터 값을 통해서, 상기 제 1 논리적 부분과 상기 제 2 논리적 부분 간의 경계 (boundary) 를 규정하는 단계; 및
    어드레스 요청을 상기 캐시에 대해서 매칭시키고 대응하는 어드레스 결과를 출력하는 단계를 포함하는,
    어드레스 변환사항 캐시 방법.
  24. 제 23 항에 있어서,
    상기 어드레스 요청을 매칭시키는 것은, 상기 제 2 어드레스 도메인 내의 어드레스를 갖는 대응하는 엔트리를 결정하도록 상기 제 1 어드레스 도메인 내의 어드레스 요청을 상기 제 1 논리적 부분 내의 엔트리들에 대해서 매칭시키는 것을 포함하는,
    어드레스 변환사항 캐시 방법.
  25. 제 24 항에 있어서,
    상기 제 3 어드레스 도메인 내의 어드레스를 갖는 대응하는 엔트리를 결정하도록 상기 제 1 논리적 부분 내에서 결정된 엔트리를 상기 제 2 논리적 부분 내의 엔트리들에 대해서 매칭시키는 단계를 더 포함하며,
    상기 어드레스 결과는 상기 제 3 어드레스 도메인 내의 어드레스를 포함하는,
    어드레스 변환사항 캐시 방법.
  26. 제 23 항에 있어서,
    상기 어드레스 요청을 매칭시키는 것은, 상기 제 3 어드레스 도메인 내의 어드레스를 갖는 대응하는 엔트리를 결정하도록 상기 제 2 어드레스 도메인 내의 어드레스 요청을 상기 제 2 논리적 부분 내의 엔트리들에 대해서 매칭시키는 것을 포함하며,
    상기 어드레스 결과는 상기 제 3 어드레스 도메인 내의 어드레스를 포함하는,
    어드레스 변환사항 캐시 방법.
  27. 제 23 항에 있어서,
    상기 캐시 내의 엔트리들의 적어도 서브세트는 인덱스 식별자를 포함하며,
    상기 인덱스 식별자에 기초하여서 상기 캐시 내의 엔트리의 위치를 파악하는 단계를 더 포함하는,
    어드레스 변환사항 캐시 방법.
  28. 제 27 항에 있어서,
    상기 어드레스 요청은 상기 인덱스 식별자의 표시값 (indication) 을 포함하는,
    어드레스 변환사항 캐시 방법.
  29. 제 28 항에 있어서,
    상기 인덱스 식별자는 인덱스 식별자들의 시퀀스로서 구성되며, 상기 시퀀스의 순서는 상기 어드레스 요청의 소스에 종속되는,
    어드레스 변환사항 캐시 방법.
  30. 제 23 항에 있어서,
    상기 경계의 위치를 상기 레지스터에 저장된 값에 따라서 변화시키는 단계를 더 포함하는,
    어드레스 변환사항 캐시 방법.
  31. 제 30 항에 있어서,
    상기 제 1 논리적 부분 및 상기 제 2 논리적 부분 중 적어도 하나의 크기를 상기 레지스터에 저장된 값에 따라서 변화시키는 단계를 더 포함하는,
    어드레스 변환사항 캐시 방법.
  32. 제 31 항에 있어서,
    상기 제 1 논리적 부분 및 상기 제 2 논리적 부분 중 적어도 하나의 크기가 변화되는 것에 응답하여서 상기 캐시 내의 엔트리들을 업데이트하는 단계를 더 포함하는,
    어드레스 변환사항 캐시 방법.
  33. 제 23 항에 있어서,
    상기 제 1 어드레스 도메인은 게스트 가상 어드레스 도메인이고,
    상기 제 2 어드레스 도메인은 게스트 물리적 어드레스 도메인이고,
    상기 제 3 어드레스 도메인은 루트 물리적 어드레스 도메인인,
    어드레스 변환사항 캐시 방법.
  34. 제 23 항에 있어서,
    상기 캐시 내의 각 엔트리는 상기 엔트리가 상기 제 1 논리적 부분 또는 상기 제 2 논리적 부분의 멤버 (member) 인지를 표시하는 비트를 포함하는,
    어드레스 변환사항 캐시 방법.
  35. 제 34 항에 있어서,
    상기 어드레스 요청은 요청된 엔트리에 대응하는 상기 비트의 표시값을 포함하는,
    어드레스 변환사항 캐시 방법.
  36. 제 23 항에 있어서,
    소정의 기간 동안에 다수의 매칭하는 엔트리들로부터 기인되는 예외를 억제하는 단계를 더 포함하는,
    어드레스 변환사항 캐시 방법.
  37. 제 36 항에 있어서,
    상기 소정의 기간은 상기 어드레스 요청을 전송하는 소스들 간의 천이를 포함하는,
    어드레스 변환사항 캐시 방법.
  38. 제 23 항에 있어서,
    상기 캐시 내의 각 엔트리는 상기 엔트리와 연관된 소스를 표시하는 비트를 포함하는,
    어드레스 변환사항 캐시 방법.
  39. 제 23 항에 있어서,
    상기 어드레스 요청의 소스에 기초하여서 상기 제 1 부분 및 상기 제 2 부분으로의 액세스를 제어하는 단계를 더 포함하는,
    어드레스 변환사항 캐시 방법.
  40. 제 23 항에 있어서,
    상기 제 3 어드레스 도메인과 제 4 어드레스 도메인 간의 변환사항을 제 3 논리적 부분에 저장하는 단계; 및
    상기 제 2 논리적 부분과 상기 제 3 논리적 부분 간의 경계를 규정하는 단계를 더 포함하는,
    어드레스 변환사항 캐시 방법.
  41. 제 23 항에 있어서,
    상기 어드레스 요청 내의 표시값에 기초하여서 상기 제 1 논리적 부분 및 상기 제 2 논리적 부분 중 선택된 하나 또는 둘을 탐색하는 단계를 더 포함하는,
    어드레스 변환사항 캐시 방법.
  42. 제 23 항에 있어서,
    상기 어드레스 요청에 대하여 상기 캐시 내의 미싱 엔트리 (missing entry) 를 검출하면, 상기 미싱 엔트리에 대응하는 변환사항에 대한 요청을 출력하는 단계를 더 포함하는,
    어드레스 변환사항 캐시 방법.
  43. 제 42 항에 있어서,
    상기 미싱 엔트리에 대응하는 상기 변환사항을 수신하면, 상기 변환사항을 상기 캐시 내에서, 상기 캐시의 상기 제 1 논리적 부분과 상기 제 2 논리적 부분 중 선택된 것의 랜덤하게-결정된 엔트리 (randomly-determined entry) 로 입력하는 단계를 더 포함하는,
    어드레스 변환사항 캐시 방법.
  44. 제 23 항에 있어서,
    상기 제 1 논리적 부분은 제 1 인덱스를 포함하고, 상기 제 1 논리적 부분은 제 2 인덱스를 포함하며, 상기 제 2 인덱스는 상기 제 1 인덱스의 반전값 (inversion) 인,
    어드레스 변환사항 캐시 방법.
  45. 어드레스 도메인들 (address domains) 간의 변환사항들 (translations) 을 저장도록 구성된 TLB (translation lookaside buffer) 로서, 상기 TLB는 게스트 TLB 및 루트 TLB로서 어드레스가능하며, 상기 게스트 TLB는 게스트 가상 어드레스 (GVA) 도메인과 게스트 물리적 어드레스 (GPA) 도메인 간의 변환사항들을 저장하도록 구성되고, 상기 루트 TLB는 상기 GPA 도메인과 루트 물리적 어드레스 (RPA) 도메인 간의 변환사항들을 저장하도록 구성되며, 상기 TLB 내의 각 엔트리는 상기 엔트리가 상기 게스트 TLB 또는 상기 루트 TLB의 멤버인지를 표시하는 비트를 포함하는, 상기 TLB;
    어드레스 요청을 상기 TLB에 대해서 매칭시키고 대응하는 어드레스 결과를 출력하도록 구성된 프로세서; 및
    상기 게스트 TLB와 상기 루트 TLB 간의 경계 (boundary) 를 규정하도록 구성된 레지스터를 포함하는,
    회로.
KR1020140129272A 2013-09-26 2014-09-26 다수의 순차적 어드레스 변환들을 위한 통합된 tlb 구조 KR101587361B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/038,156 US9639476B2 (en) 2013-09-26 2013-09-26 Merged TLB structure for multiple sequential address translations
US14/038,156 2013-09-26

Publications (2)

Publication Number Publication Date
KR20150034662A KR20150034662A (ko) 2015-04-03
KR101587361B1 true KR101587361B1 (ko) 2016-01-20

Family

ID=52692040

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140129272A KR101587361B1 (ko) 2013-09-26 2014-09-26 다수의 순차적 어드레스 변환들을 위한 통합된 tlb 구조

Country Status (4)

Country Link
US (1) US9639476B2 (ko)
KR (1) KR101587361B1 (ko)
CN (1) CN104516833B (ko)
HK (1) HK1207439A1 (ko)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9208103B2 (en) 2013-09-26 2015-12-08 Cavium, Inc. Translation bypass in multi-stage address translation
US9645941B2 (en) 2013-09-26 2017-05-09 Cavium, Inc. Collapsed address translation with multiple page sizes
US9268694B2 (en) 2013-09-26 2016-02-23 Cavium, Inc. Maintenance of cache and tags in a translation lookaside buffer
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
US9830275B2 (en) * 2015-05-18 2017-11-28 Imagination Technologies Limited Translation lookaside buffer
US10007435B2 (en) * 2015-05-21 2018-06-26 Micron Technology, Inc. Translation lookaside buffer in memory
KR102473665B1 (ko) 2015-07-28 2022-12-02 삼성전자주식회사 스토리지 디바이스 및 스토리지 가상화 시스템
KR102329924B1 (ko) 2015-10-27 2021-11-23 삼성전자 주식회사 전자 장치 및 이의 메모리 관리 방법
US10534715B2 (en) 2016-04-22 2020-01-14 International Business Machines Corporation Operation of a multi-slice processor implementing a unified page walk cache
US10048881B2 (en) * 2016-07-11 2018-08-14 Intel Corporation Restricted address translation to protect against device-TLB vulnerabilities
US10282305B2 (en) 2016-07-18 2019-05-07 International Business Machines Corporation Selective purging of entries of structures associated with address translation in a virtualized environment
US10169243B2 (en) 2016-07-18 2019-01-01 International Business Machines Corporation Reducing over-purging of structures associated with address translation
US10176006B2 (en) 2016-07-18 2019-01-08 International Business Machines Corporation Delaying purging of structures associated with address translation
US10241924B2 (en) 2016-07-18 2019-03-26 International Business Machines Corporation Reducing over-purging of structures associated with address translation using an array of tags
US10802986B2 (en) 2016-07-18 2020-10-13 International Business Machines Corporation Marking to indicate memory used to back address translation structures
US10248573B2 (en) 2016-07-18 2019-04-02 International Business Machines Corporation Managing memory used to back address translation structures
US10176110B2 (en) 2016-07-18 2019-01-08 International Business Machines Corporation Marking storage keys to indicate memory used to back address translation structures
US10162764B2 (en) 2016-07-18 2018-12-25 International Business Machines Corporation Marking page table/page status table entries to indicate memory used to back address translation structures
US10180909B2 (en) 2016-07-18 2019-01-15 International Business Machines Corporation Host-based resetting of active use of guest page table indicators
US10168902B2 (en) 2016-07-18 2019-01-01 International Business Machines Corporation Reducing purging of structures associated with address translation
US10176111B2 (en) 2016-07-18 2019-01-08 International Business Machines Corporation Host page management using active guest page table indicators
US10223281B2 (en) 2016-07-18 2019-03-05 International Business Machines Corporation Increasing the scope of local purges of structures associated with address translation
US10241931B2 (en) * 2016-07-29 2019-03-26 Advanced Micro Devices, Inc. Controlling access to pages in a memory in a computing device
US10353826B2 (en) 2017-07-14 2019-07-16 Arm Limited Method and apparatus for fast context cloning in a data processing system
US10565126B2 (en) 2017-07-14 2020-02-18 Arm Limited Method and apparatus for two-layer copy-on-write
US10489304B2 (en) 2017-07-14 2019-11-26 Arm Limited Memory address translation
US10467159B2 (en) * 2017-07-14 2019-11-05 Arm Limited Memory node controller
US10534719B2 (en) * 2017-07-14 2020-01-14 Arm Limited Memory system for a data processing network
US10613989B2 (en) 2017-07-14 2020-04-07 Arm Limited Fast address translation for virtual machines
US10592424B2 (en) 2017-07-14 2020-03-17 Arm Limited Range-based memory system
US10884850B2 (en) 2018-07-24 2021-01-05 Arm Limited Fault tolerant memory system
US11232042B2 (en) * 2019-11-15 2022-01-25 Microsoft Technology Licensing, Llc Process dedicated in-memory translation lookaside buffers (TLBs) (mTLBs) for augmenting memory management unit (MMU) TLB for translating virtual addresses (VAs) to physical addresses (PAs) in a processor-based system

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120246381A1 (en) 2010-12-14 2012-09-27 Andy Kegel Input Output Memory Management Unit (IOMMU) Two-Layer Addressing

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5940872A (en) * 1996-11-01 1999-08-17 Intel Corporation Software and hardware-managed translation lookaside buffer
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
CN100390817C (zh) * 2003-06-10 2008-05-28 大唐微电子技术有限公司 动态逻辑分区并控制访问权限的ic智能卡及其实现方法
US8356158B2 (en) 2003-07-15 2013-01-15 Broadcom Corporation Mini-translation lookaside buffer for use in memory translation
US20050080934A1 (en) 2003-09-30 2005-04-14 Cota-Robles Erik C. Invalidating translation lookaside buffer entries in a virtual machine (VM) system
US7206903B1 (en) * 2004-07-20 2007-04-17 Sun Microsystems, Inc. Method and apparatus for releasing memory locations during transactional execution
US7444493B2 (en) * 2004-09-30 2008-10-28 Intel Corporation Address translation for input/output devices using hierarchical translation tables
EP1736887A3 (fr) 2005-05-31 2009-04-22 Stmicroelectronics Sa Repertoire de pages memoire
US7788464B2 (en) * 2006-12-22 2010-08-31 Microsoft Corporation Scalability of virtual TLBs for multi-processor virtual machines
US8024547B2 (en) 2007-05-01 2011-09-20 Vivante Corporation Virtual memory translation with pre-fetch prediction
US7941631B2 (en) * 2007-12-28 2011-05-10 Intel Corporation Providing metadata in a translation lookaside buffer (TLB)
US8166249B2 (en) 2008-03-10 2012-04-24 International Business Machines Corporation Performing a least recently used (LRU) algorithm for a co-processor
US9239799B2 (en) 2008-06-26 2016-01-19 Qualcomm Incorporated Memory management unit directed access to system interfaces
US8275971B2 (en) * 2008-08-27 2012-09-25 International Business Machines Corporation Method and apparatus for managing software controlled cache of translating the physical memory access of a virtual machine between different levels of translation entities
US8595464B2 (en) 2011-07-14 2013-11-26 Oracle International Corporation Dynamic sizing of translation lookaside buffer for power reduction
WO2013101168A1 (en) 2011-12-30 2013-07-04 Intel Corporation Translation lookaside buffer for multiple context compute engine
US20130179642A1 (en) * 2012-01-10 2013-07-11 Qualcomm Incorporated Non-Allocating Memory Access with Physical Address
US20140006681A1 (en) * 2012-06-29 2014-01-02 Broadcom Corporation Memory management in a virtualization environment
US9645941B2 (en) 2013-09-26 2017-05-09 Cavium, Inc. Collapsed address translation with multiple page sizes
US9268694B2 (en) 2013-09-26 2016-02-23 Cavium, Inc. Maintenance of cache and tags in a translation lookaside buffer
US9208103B2 (en) 2013-09-26 2015-12-08 Cavium, Inc. Translation bypass in multi-stage address translation

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120246381A1 (en) 2010-12-14 2012-09-27 Andy Kegel Input Output Memory Management Unit (IOMMU) Two-Layer Addressing

Also Published As

Publication number Publication date
US9639476B2 (en) 2017-05-02
KR20150034662A (ko) 2015-04-03
CN104516833B (zh) 2018-02-06
CN104516833A (zh) 2015-04-15
HK1207439A1 (en) 2016-01-29
US20150089116A1 (en) 2015-03-26

Similar Documents

Publication Publication Date Title
KR101587361B1 (ko) 다수의 순차적 어드레스 변환들을 위한 통합된 tlb 구조
KR101598353B1 (ko) 다중-스테이지 어드레스 변환에서의 변환 바이패스
US10042778B2 (en) Collapsed address translation with multiple page sizes
US11074191B2 (en) Linear to physical address translation with support for page attributes
US9268694B2 (en) Maintenance of cache and tags in a translation lookaside buffer
CN110998549B (zh) 地址转换缓存
US7917725B2 (en) Processing system implementing variable page size memory organization using a multiple page per entry translation lookaside buffer
KR20170100003A (ko) 가상 주소들을 사용하여 액세스된 캐시
CN112753024B (zh) 基于外部存储器的转换后备缓冲器
KR20140110070A (ko) 물리적 어드레스들을 통해 비-할당 메모리 액세스
US20160140042A1 (en) Instruction cache translation management
CN108459975B (zh) 用于有效使用地址转换缓存的技术
JP2009512943A (ja) 多階層の変換索引緩衝機構(TLBs)フィールドの更新
US11847064B2 (en) Buffer and methods for address translations in a processor
CN112639750A (zh) 用于控制存储器存取的装置及方法
WO2021048523A1 (en) Translation lookaside buffer invalidation

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
FPAY Annual fee payment

Payment date: 20181226

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20200103

Year of fee payment: 5