KR101614865B1 - I/o 및 계산 오프로드를 위해 복수레벨 어드레스 변환을 포함하는 i/o 메모리 관리 유닛 - Google Patents

I/o 및 계산 오프로드를 위해 복수레벨 어드레스 변환을 포함하는 i/o 메모리 관리 유닛 Download PDF

Info

Publication number
KR101614865B1
KR101614865B1 KR1020127004960A KR20127004960A KR101614865B1 KR 101614865 B1 KR101614865 B1 KR 101614865B1 KR 1020127004960 A KR1020127004960 A KR 1020127004960A KR 20127004960 A KR20127004960 A KR 20127004960A KR 101614865 B1 KR101614865 B1 KR 101614865B1
Authority
KR
South Korea
Prior art keywords
guest
memory
page
address
translation
Prior art date
Application number
KR1020127004960A
Other languages
English (en)
Other versions
KR20120044369A (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 KR20120044369A publication Critical patent/KR20120044369A/ko
Application granted granted Critical
Publication of KR101614865B1 publication Critical patent/KR101614865B1/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/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
    • 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
    • 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/1009Address translation using page tables, e.g. page table structures
    • 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]
    • 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

Landscapes

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

Abstract

시스템 메모리에 대한 I/O 디바이스의 요청들을 제어하도록 구성된 입출력 메모리 관리 유닛(IOMMU)이 제공되며, 여기서 IOMMU는, 시스템 메모리에 저장된 변환 데이터를 이용하여 I/O 디바이스에 의해 발생된 요청과 관련된 어드레스를 변환하기 위해 2-레벨 게스트 변환을 수행할 수 있는 제어 로직을 포함한다. 변환 데이터는 다수의 엔트리들을 갖는 디바이스 테이블을 포함한다. 제어 로직은, 디바이스 식별자를 사용함으로써, 소정의 요청에 대한 디바이스 데이블 엔트리를 선택할 수 있고, 디바이스 식별자는 요청을 발생시키는 I/O 디바이스에 대응한다. 변환 데이터는 또한, 게스트 페이지 테이블들의 세트 및 네스티드 페이지 테이블들의 세트를 포함하는 I/O 페이지 테이블들의 제 1 세트를 포함할 수 있다. 소정의 요청에 대한 선택된 디바이스 테이블 엔트리는 게스트 변환 테이블들의 세트에 대한 포인터를 포함할 수 있고, 그리고 마지막 게스트 변환 테이블은 네스티드 페이지 테이블들의 세트에 대한 포인터를 포함한다.

Description

I/O 및 계산 오프로드를 위해 복수레벨 어드레스 변환을 포함하는 I/O 메모리 관리 유닛{I/O MEMORY MANAGEMENT UNIT INCLUDING MULTILEVEL ADDRESS TRANSLATION FOR I/O AND COMPUTATION OFFLOAD}
본 발명은 컴퓨터 시스템 분야에 관한 것으로, 특히 입력/출력(I/O) 디바이스를 위한 메모리 관리 유닛에 관한 것이다.
개인용 컴퓨터(Personal Computer, PC)들, 워크스테이션들, 서버들, 다양한 개인 휴대 정보 단말(Personal Digital Assistant, PDA) 디바이스들, 등을 포함하는 다양한 타입의 컴퓨터 시스템들이 현대 사회에서 아주 흔하게 사용된다. 전부는 아니더라도 대부분의 이러한 컴퓨터 시스템들은 메모리에 대한 프로세서 액세스를 위해 메모리 관리 기능을 구현하고 있다. 일반적으로, 메모리 관리 기능은, 다양한 메모리 보호(예를 들어, 판독 전용, 판독/기입, 특권 레벨 요건들 등)와 함께, 어드레스들을 각각의 프로세스에 의해 사용되는 가상 어드레스 공간으로부터 실제 시스템 메모리에 걸쳐있는 물리적 어드레스 공간으로 변환하는 것을 포함하고 있다. 메모리 관리 기능은 다양한 용도를 가지고 있는 바, 예를 들면, 각각의 프로세스에 의해 사용되는 메모리를 다른 프로세스들에 의한 비인증 액세스로부터 보호하는 것, 그리고 물리적 메모리 시스템이 크지 않을지라도 프로세스들에 의해 사용될 가상 공간은 크게 할 수 있는 것, 그리고 프로세스의 참여 없이, 이용가능한 물리적 메모리에 대한 가상 어드레스들의 재배치 등이 있다.
프로세서 어드레스들은 빈번하게 변환되지만, 컴퓨터 시스템에서의 입력/출력(I/O) 디바이스들에 의해 사용되는 어드레스들은 일반적으로 변환되지 않는다. 즉, I/O 디바이스들은 메모리에 액세스하기 위해 물리적 어드레스들을 사용한다. 대부분의 PC들과 같은 단일 운영 체계(Operating System, OS) 컴퓨터 시스템에서, OS는 다른 프로세스들(애플리케이션들 및 OS 서비스들)에 의한 I/O 디바이스들로의 액세스를 제어한다. 이에 따라, OS는 어떤 프로세스가 어떤 소정의 시점에서 소정의 디바이스에 액세스하는 지를 제어할 수 있고, 그리고 디바이스에 의해 액세스되는 어드레스들을 적어도 어느 정도 제어할 수 있다. 그러나, 이러한 메커니즘은, 다수의 게스트 OS들이 가상 머신 모니터 상에서 실행될 수 있는 가상 머신 시스템에서는 더 복잡하고 번거롭게 된다. 추가적으로, 디바이스가 물리적 어드레스들을 사용하는 것은, 악성 디바이스(혹은 악성 소프트웨어 에이전트에 의해 프로그래밍된 디바이스)가 자유롭게 메모리에 액세스할 수 있기 때문에, 시스템의 전체적 보안을 감소시킨다.
가상 시스템에서, 많은 애플리케이션들은 가상 메모리에서 실행될 수 있고, 반면 I/O 디바이스들은 물리적 메모리에 액세스한다. 일부 시스템들에서, 가상 머신 관리자는 I/O 디바이스에 의해 사용될 어드레스들을 인터셉트(intercept)하고 변환할 수 있다. 그러나, 이러한 방법은 번거로울 수 있으며 명령이 집중될 수 있어 시스템 성능을 저하시킬 수 있거나 혹은 계산 오프로드 엔진(computational offload engine)과 같은 I/O 디바이스를 사용함으로써 획득되는 어떤 혜택들을 적어도 감소시킬 수 있다.
복수 레벨 어드레스 변환(multilevel address translation)을 포함하는 IOMMU(Input/Output Memory Management Unit)의 다양한 실시예들이 개시된다. 일 실시예에서, IOMMU는 시스템 메모리에 대한 I/O 디바이스의 요청들을 제어하도록 구성된다. IOMMU는, 시스템 메모리에 저장된 변환 데이터를 이용하여 I/O 디바이스에 의해 발생된 요청과 관련된 어드레스를 변환하기 위해 2-레벨 게스트 변환(two-level guest translation)을 수행할 수 있는 제어 로직(control logic)을 포함한다. 변환 데이터는 다수의 엔트리(entry)들을 갖는 디바이스 테이블(device table)을 포함할 수 있다. 소정의 요청에 대한 디바이스 데이블 엔트리가 디바이스 식별자를 사용하여 제어 로직에 의해 선택될 수 있고, 디바이스 식별자는 요청을 발생시키는 I/O 디바이스에 대응한다. 변환 데이터는 또한, 게스트 페이지 테이블(guest page table)들의 세트 및 네스티드 페이지 테이블(nested page table)들의 세트를 포함하는 I/O 페이지 테이블들의 제 1 세트를 포함할 수 있다. 게스트 페이지 테이블들은, 예를 들어, 제어 레지스터 CR3 엔트리들과 유사한 것일 수 있는 엔트리들을 포함한다. 소정의 요청에 대한 선택된 디바이스 테이블 엔트리는 게스트 변환 테이블(guest translation table)들의 세트에 대한 포인터(pointer)를 포함할 수 있고, 그리고 마지막 게스트 변환 테이블은 네스티드 페이지 테이블들의 세트에 대한 포인터를 포함한다. IOMMU는 또한, 장래 요청들을 위해 사용될 수 있는 완료된 변환들을 저장하도록 구성될 수 있는 캐시 메모리(cache memory)를 포함할 수 있다.
하나의 특정 실시예에서, 변환 데이터는 또한, 호스트 변환 페이지 테이블들의 세트를 포함하는 I/O 페이지 테이블들의 제 2 세트를 포함할 수 있다. 제어 로직은, 만약 I/O 요청이 프로세스 식별자를 포함하고 있다면 I/O 페이지 테이블들의 제 1 세트를 사용하여 2-레벨 변환을 수행할 수 있고, 그리고 만약 I/O 요청이 프로세스 식별자를 포함하고 있지 않다면 I/O 페이지 테이블들의 제 2 세트를 사용하여 1-레벨 변환을 수행할 수 있다.
도 1은 컴퓨터 시스템의 일 실시예의 하이 레벨 뷰(hige level view)의 블록도이다.
도 2는 컴퓨터 시스템의 또 다른 실시예의 블록도이다.
도 3은 도 1의 I/O 변환 테이블들의 세트의 일 실시예를 나타낸 도면이다.
도 4는 도 3에 제시된 디바이스 테이블에 대한 디바이스 테이블 엔트리의 일 실시예를 나타낸 도면이다.
도 5는 게스트 가상 어드레스 변환 메커니즘의 보다 상세한 양상을 나타낸 도면이다.
도 6은 도 1 내지 도 5에 제시된 컴퓨터 시스템의 실시예들의 동작을 설명하는 흐름도이다.
본 발명은 다양하게 수정될 수 있고 대안적 형태를 가질 수 있으며, 그 특정 실시예들이 도면에서 예시적으로 제공됨과 아울러 본 명세서에서 상세히 설명된다. 그러나, 이러한 도면 및 이에 대한 상세한 설명은, 본 발명을 이렇게 개시되는 특정 형태로 한정시키려는 것이 아니며, 이와는 반대로, 첨부되는 특허청구범위에 의해 정의되는 바와 같이 본 발명의 사상 및 범위 내에 있는 모든 수정물, 등가물, 및 대안물을 포괄하도록 하려는 것임을 이해해야 한다. "할 수 있다"라는 어구는 본 명세서 전반에 걸쳐 허용적 의미(즉, 가능성을 갖는다, 가능하다)로 사용되는 것이지 강제적 의미(즉, 반드시 그래야만 한다)로 사용되는 것이 아님에 유의해야 한다.
이제 도 1을 참조하면, 컴퓨터 시스템(10)의 일 실시예의 간략화된 하이 레벨 뷰를 나타낸 블록도가 제시된다. 예시된 실시예에서, 시스템(10)은 하나 또는 그 이상의 프로세서들(12), (하나 또는 그 이상의 변환 룩어사이드 버퍼(Translation Lookaside Buffer, TLB)들(16)을 포함하는) 메모리 관리 유닛(Memory Management Unit, MMU)(14), 메모리 제어기(Memory Controller, MC)(18), 메모리(20), (하나 또는 그 이상의 I/O TLB(IOTLB)들(24)을 포함할 수 있는) 하나 또는 그 이상의 I/O 디바이스들(22), 그리고 (테이블 워커(table walker)(28), 캐시(cache)(30), 제어 레지스터(control register)들(32), 및 제어 로직(control logic)(34)을 포함할 수 있는) I/O MMU(IOMMU)(26)를 포함한다. 프로세서들(12)은 MMU(14)에 결합되고, MMU(14)는 메모리 제어기(18)에 결합된다. I/O 디바이스들(22)은 IOMMU(26)에 결합되고, IOMMU(26)는 메모리 제어기(18)에 결합된다. IOMMU(26) 내에는, 테이블 워커(28), 캐시(30), 제어 레지스터들(32), 및 제어 유닛(34)이 함께 결합되어 있다.
이후 더 설명되는 바와 같이, IOMMU(26)는 시스템(10)에서의 가상화를 간략하게 하기 위해 다양한 특징들을 포함할 수 있다. 아래에서 설명되는 것은, 가상 머신(virtual machine)들(이들은 기반이 되는 하드웨어 상에서 자신들의 실행을 스케쥴링함)을 관리하는 것, 다양한 시스템 리소스(system resource)들에 대한 액세스를 제어하는 것 등을 수행하는 가상 머신 모니터(Virtual Machine Monitor, VMM)에 관한 것이다. VMM들은 또한, 때때로 하이퍼바이저(hypervisor)들로 불리기도 함에 유의해야 한다. 예시된 실시예에서, 프로세서(들)(12)는 가상화된 환경에서 소프트웨어를 실행시킨다. 이에 따라, 세 개의 가상 머신들(100A, 100B, 및 100C)(예를 들어, VM 게스트 1 내지 3) 및 VMM(106)이 도시되어 있다. 소정의 실시예에서의 가상 머신들의 수는 달라질 수 있고, 그리고 가상 머신들이 사용자에 의해 개시 및 정지되는 그 사용 동안 동적으로 변할 수 있다. 예시된 실시예에서, 가상 머신(100A)은 하나 또는 그 이상의 게스트 애플리케이션들(102) 및 게스트 운영 체계(Operating System, OS)(104)를 포함한다. OS(104)는 "게스트(guest)" OS로 불리는 데, 왜냐하면 OS(104)가, 시스템(10)의 물리적 하드웨어가 아닌, VMM(106)에 의해 OS(104)용으로 생성된 가상 머신을 제어하기 때문이다. 유사하게, VM(100B)과 VM(100C) 각각도 또한, 하나 또는 그 이상의 게스트 애플리케이션들 및 게스트 OS를 포함할 수 있다.
일반적으로, 가상 머신들에서의 애플리케이션들은 게스트 가상 어드레스 공간을 사용하는바, 이에 따라 게스트 가상 어드레스(Guest Virtual Addresses, GVA)를 사용한다. 각각의 가상 머신에서의 게스트 OS는 가상 머신에서 GVA 대 GPA(Guest "Physical" Addresses, 게스트 "물리적" 어드레스) 맵핑(mapping)을 관리할 수 있다. 만약 게스트 OS가 VMM 없이 시스템(10) 하드웨어 상에서 직접 실행되고 있다면, 게스트 OS에 의해 발생된 물리적 어드레스는 실제로, 시스템(10)에서의 메모리 위치들의 시스템 물리적 어드레스(System Physical Addresses, SPA)일 것이다. 그러나, 가상 머신 환경에서, VMM(106)은 GPA로부터 SPA로의 맵핑을 관리할 수 있다. 따라서, 프로세서(12)가 메모리 요청들을 수행할 때, 게스트 OS(104)는 GVA 대 GPA 맵핑(이것은 VMM(106)에 의해 SPA로 더 맵핑될 수 있음)을 관리할 수 있다.
도 1에 예시된 바와 같이, I/O 디바이스들(22)로부터 메모리(20)로의 경로는 프로세서들(12)로부터 메모리(20)로의 경로로부터 적어도 부분적으로 분리되어 있다. 구체적으로, I/O 디바이스들(22)로부터 메모리(20)로의 경로는 MMU(14)을 통과하지 않으며, 대신에 IOMMU(26)를 통과한다. 이에 따라, MMU(14)는 I/O 디바이스들(22)로부터 나오는 메모리 요청들에 대해 메모리 관리를 제공할 수 없다. 일반적으로, 메모리 관리는 일 타입의 가상 어드레스(즉, 소프트웨어에 의해 사용될 수 있는 어드레스)를 물리적 어드레스(즉, 메모리 제어기에 의해 사용될 수 있는 어드레스)로 변환하는 어드레스 변환을 포함할 수 있다. 메모리 보호는, 특권 레벨 요건(privilege level requirements), 캐시가능성(cacheability) 및 캐시 제어(cache controls)(예를 들어, 라이트쓰루(writethrough) 혹은 라이트백(writeback)), 코히어런스(coherency) 등과 같은 다양한 다른 속성들과 함께, 어느 정도의 구분단위(예를 들어, 페이지)에서 메모리에 대한 판독 및/또는 기입 액세스를 제어할 수 있다. 임의 세트의 메모리 보호들은 다양한 실시예들에서 구현될 수 있다. 일부 실시예들에서, IOMMU(26)에 의해 구현되는 메모리 보호는 적어도 어떤 측면에 있어서, MMU(14)에 의해 구현되는 메모리 보호와는 다를 수 있다. 일 실시예에서, IOMMU(26)에 의해 구현되는 메모리 보호는, (비록 설명의 편의를 위해 도 1에서는 개별적으로 도시되었지만) IOMMU(26) 및 MMU(14)에 의해 사용되는 변환 데이터를 저장하는 변환 테이블들이 공유될 수 있도록, 정의될 수 있다. 다른 실시예들은, 필요에 따라, IOMMU(26)와 MMU(14) 간에 변환 테이블들을 공유하지 않을 수 있다.
일반적으로, I/O 디바이스들(22)은 메모리(20)에서의 메모리 위치에 액세스하기 위해 메모리 요청들(예를 들어, 메모리 판독 및 기입 요청들)을 발행하도록 구성될 수 있고, 일부 경우에 있어서는 변환 요청들을 발행하도록 구성될 수 있다. 메모리 요청들은 예를 들어, 직접 메모리 액세스(Direct Memory Access, DMA) 판독 혹은 기입 동작의 일부일 수 있다. DMA 동작은, 이러한 DMA 동작의 수행을 위해 I/O 디바이스들(22)을 직접적으로 또는 간접적으로 프로그래밍하는, 프로세서들(12)에 의해 실행되는 소프트웨어로 개시될 수 있다. 프로세서 상에서 실행되는 소프트웨어가 실행되고 있는 어드레스 공간에 따라, I/O 디바이스들(22)에는 메모리(20)에 액세스하기 위한 그 어드레스 공간에 대응하는 어드레스들이 제공될 수 있다. 예를 들어, 프로세서(12) 상에서 실행되는 게스트 애플리케이션(예를 들어, App(102))은 I/O 디바이스(22)에 GVA들을 제공할 수 있고, 프로세서(12) 상에서 실행되는 게스트 OS(예를 들어, OS(104))는 I/O 디바이스들(22)에 GPA들을 제공할 수 있다. 어느 경우에나, I/O 디바이스(22)가 메모리 액세스를 요청할 때, 게스트 어드레스들은 메모리 액세스를 위해 IOMMU(26)에 의해 대응하는 시스템 물리적 어드레스들(SPA)로 변환될 수 있고, 그리고 시스템 물리적 어드레스들은 액세스를 위해 메모리 제어기(18)에 제공될 수 있다. 즉, IOMMU(26)는 SPA에 대한 요청에서의 그 수신된 어드레스를 변경(즉, 변환)하기 위해 I/O 디바이스들(22)로부터 나오는 메모리 요청들을 수정할 수 있고, 그리고 메모리 요청은 메모리(20) 액세스를 위해 메모리 제어기(18)에 전달될 수 있다.
다양한 실시예에서, IOMMU(26)는, I/O 디바이스로부터 수신한 어드레스의 타입에 따라, 1-레벨 변환, 2-레벨 변환, 혹은 무변환을 제공할 수 있다. 특히, IOMMU(26)는 1-레벨 네스티드 변환(one-level nested translations) 혹은 2-레벨 게스트 변환(two-level guest translations)을 수행할 수 있다. 다시 말하면, IOMMU(26)는 GPA 대 SPA 변환(1-레벨)과 GVA 대 SPA 변환(2-레벨) 양쪽 모두를 제공할 수 있다. 따라서, 앞에서 언급된 바와 같이, 게스트 애플리케이션은 메모리 액세스가 요청될 때 I/O 디바이스에 GVA 어드레스를 직접 제공할 수 있고, 이에 따라 종래의 VMM 인터셉션(interception) 및 변환은 불필요하게 된다. 이러한 기능은 계산 오프로드(compute offload), 사용자 레벨 I/O, 및 가속화된 I/O 디바이스들과 같은 고급 계산 아키텍처(advanced computation architecture)들이 가상화 시스템에서 더 심리스(seamless)하게 사용될 수 있게 할 수 있다. 비록 1-레벨 변환, 2-레벨 변환, 무변환이 설명되었지만, 다른 실시예들에서는 추가적인 어드레스 공간들의 사용이 고려될 수 있음에 유의해야 한다. 이러한 실시예들에서, 추가적인 변환 레벨들(즉, 복수레벨 변환들)은 추가적인 어드레스 공간들을 수용하기 위해 IOMMU(26)에 의해 수행될 수 있다.
IOMMU(26)는, I/O 디바이스들(22)로부터의 변환 요청들 및 메모리의 어드레스들을 변환하기 위해, 메모리(20)에 저장된 I/O 변환 테이블들(36)의 하나 또는 그 이상의 세트들과 같은 다수의 데이터 구조들을 사용할 수 있다. 일반적으로, 변환 테이블들은 일 타입의 어드레스를 다른 타입의 어드레스로 변환하기 위해 사용될 수 있는 변환 데이터의 테이블들일 수 있다. 변환 테이블들은 임의의 방식으로 변환 데이터를 저장할 수 있다. 예를 들어, 일 실시예에서, I/O 변환 테이블들(36)은 x86 및 AMD64™ 명령 세트 아키텍처에서 정의된 것과 유사한 페이지 테이블들을 포함할 수 있다. 변환 레벨에 따라, 게스트 가상 어드레스 비트들 혹은 게스트 물리적 어드레스의 다양한 서브세트들이 테이블들의 레벨들을 인덱싱(indexing)하기 위해 사용될 수 있고, 그리고 각각의 레벨은 변환의 끝일 수 있거나(즉, 변환을 위해 실제 페이지 번호를 저장하는 것), 혹은 (어드레스 비트들의 또 다른 세트에 의해 인덱싱된) 또 다른 테이블을 가리킬 수 있다. 페이지는 변환의 단위일 수 있다(즉, 가상 페이지에서의 각각의 어드레스는 동일한 물리적 페이지로 변환됨). 페이지들은 4 킬로바이트(kilobytes)로부터 최대 메가바이트(Megabytes)까지 혹은 심지어 기가바이트(Gigabytes)까지 다양한 크기를 가질 수 있다.
추가적으로, I/O 변환 테이블들(36)은 I/O 디바이스들을 페이지 테이블들의 세트들로 (예를 들어, 디바이스 식별자들에 의해) 맵핑하는 (도 3에 도시된) 디바이스 테이블을 포함할 수 있다. 디바이스 식별자(ID)는 다양한 방식으로 정의될 수 있고, 그리고 디바이스가 부착된 주변장치 상호연결에 따라 달라질 수 있다. 예를 들어, PCI(Peripheral Component Interconnect) 디바이스들은 BDF(Bus number(버스 번호), Device number(디바이스 번호), 및 Function number(함수 번호))로부터 디바이스 ID를 형성할 수 있다. 하이퍼트랜스포트(HyperTransport™, HT) 디바이스들은 디바이스 ID를 형성하기 위해 버스 번호 및 유닛 ID를 사용할 수 있다. 아래에서 더 설명되는 바와 같이, 디바이스 테이블은 디바이스 ID에 의해 인덱싱된 복수의 엔트리들을 포함할 수 있고, 그리고 각각의 엔트리는, (대응하는 디바이스 ID를 갖는) 디바이스에 의해 사용되는 페이지 테이블들의 세트에 대한 포인터를 포함할 수 있다. 추가적으로, I/O 디바이스가 프로세스에 직접 할당되는 경우 혹은 사용자 프로세스와 동일한 어드레스 공간에서 계산을 실행할 수 있는 경우에, 프로세스 어드레스 공간은, 메모리 격리 보호(memory isolation protections)의 실시를 위해, 식별되어 IOMMU(26)에 제공된다. 일부 실시예들에서, 디바이스 테이블은 또한, 디바이스의 인터럽트(interrupt)들을 리맵핑(remapping)하기 위해 (도 3에 도시된) 인터럽트 리맵핑 테이블(interrupt remapping table)에 대한 포인터를 포함할 수 있다. 따라서, 일반적으로, 게스트 가상 어드레스 혹은 게스트 물리적 어드레스로부터 시스템 물리적 어드레스로의 변환은 하나 또는 그 이상의 변환 테이블들에서의 하나 또는 그 이상의 엔트리들에 저장될 수 있고, 엔트리들의 일부는 다른 변환들과 공유될 수 있다. 엔트리로부터 엔트리로 테이블들을 트래버싱(traversing) 혹은 "워킹(walking)"하는 것은 가상 어드레스를 위한 변환을 식별하는 것의 일부일 수 있다. 일 실시예에서, 변환 테이블들(36)은 앞에서 언급된 인터럽트 리맵핑 테이블을 포함할 수 있다.
구체적으로 살펴보면, 도 1에 예시된 IOMMU(26)는 소정의 메모리 요청에 대한 변환을 위해 I/O 변환 테이블들(36)을 검색하기 위한 테이블 워커(table walker)(28)를 포함할 수 있다. 테이블 워커(28)는, 변환 테이블들(36)로부터 변환 데이터를 판독하기 위해 메모리 요청들(예를 들어, 판독 메모리 요청들)을 발생시킬 수 있다. 변환 테이블 판독은 도 1에서 점선으로 된 화살표(38 및 40)로 제시되어 있다.
보다 더 빠른 변환이 용이하도록, IOMMU(26)는 일부 변환 데이터를 캐시할 수 있다. 예를 들어, 캐시(30)는 TLB와 유사한 캐시 형태일 수 있는바, 이것은 이전 변환의 결과를 캐시하고, 게스트 가상 및 게스트 물리적 페이지 번호들을 시스템 물리적 페이지 번호들 및 대응하는 변환 데이터로 맵핑한다. 만약 소정의 메모리 요청에 대한 변환이 캐시(30)에서 발견되지 않는다면, 테이블 워커(28)가 호출될 수 있다. 다양한 실시예들에서, 테이블 워커(28)는 하드웨어에서 구현될 수 있거나, 또는 마이크로제어기 혹은 다른 프로세서에서 구현될 수 있으며, 그리고 (예를 들어, IOMMU(26)의 판독전용 메모리(Read-Only Memory, ROM)에서의) 대응하는 실행 코드로 구현될 수 있다. 추가적으로, 페이지 테이블들 혹은 그 일부 그리고/또는 디바이스 테이블들 혹은 그 일부를 캐시하기 위해 다른 캐시들이 캐시(30)의 일부로서 포함될 수 있다. 이에 따라, IOMMU(26)는, 메모리(20)에 저장된 변환 데이터로부터 판독되거나 얻어지는 변환 데이터를 저장하기 위해 하나 또는 그 이상의 메모리들을 포함할 수 있다.
제어 로직(34)은, 소정의 메모리 요청에 대한 변환의 히트(hit)/미스(miss)를 검출하기 위해 캐시(30)에 액세스하도록 구성될 수 있고, 그리고 테이블 워커(28)를 호출할 수 있다. 제어 로직(34)은 또한, I/O 디바이스로부터의 메모리 요청을 변환된 어드레스로 수정하도록 구성될 수 있고, 그리고 이 요청을 메모리 제어기(18)에 업스트림으로 전달하도록 구성될 수 있다. 추가적으로, 제어 로직(34)은 제어 레지스터들(32)에 프로그래밍된 대로, IOMMU(26)에서의 다양한 기능을 제어할 수 있다. 예를 들어, 제어 레지스터들(32)은, 본 실시예에서, IOMMU(26)에 제어 커맨드들을 전달하기 위해 메모리 관리 소프트웨어에 대한 커맨드 큐(command queue)(42)가 될 메모리의 영역을 정의할 수 있다. 제어 로직(34)은 커맨드 큐(42)로부터 제어 커맨드들을 판독하고 제어 커맨드들을 실행하도록 구성될 수 있다. 유사하게, 제어 레지스터들(32)은 이벤트 로그 버퍼(event log buffer)(44)가 될 메모리의 또 다른 영역을 정의할 수 있다. 제어 로직(34)은 다양한 이벤트들을 검출할 수 있고, 이들을 이벤트 로그 버퍼(44)에 기입할 수 있다. 이벤트들은 IOMMU(26)의 변환들 및/또는 다른 기능들에 관해 제어 로직(34)에 의해 검출된 다양한 에러들을 포함할 수 있다. 제어 로직(34)은 또한, IOMMU(26)의 다른 특징들을 구현할 수 있다.
I/O 디바이스들(22)은, 컴퓨터 시스템(10)과 다른 디바이스들 간의 통신을 수행하고, 컴퓨터 시스템(10)에 휴먼 인터페이스(human interface)를 제공하고, 저장소(예를 들어, 디스크 드라이브(disk drive)들, 콤팩트 디스크(Compact Disc, CD) 혹은 디지털 비디오 디스크(Digital Video Disc, DVD) 드라이브들, 솔리드 스테이브 스토리지(solid state storage) 등)를 제공하고, 그리고/또는 컴퓨터 시스템(10)에 증진된 기능을 제공하는, 임의의 디바이스들을 포함할 수 있다. 예를 들어, I/O 디바이스들(22)은, 네트워크 인터페이스 카드, 통합 네트워크 인터페이스 기능, 모뎀, 비디오 가속기, 오디오 카드 혹은 통합 오디오 하드웨어, 하드 혹은 플로피 디스크 드라이브, 또는 드라이브 제어기, (키보드, 마우스, 태블릿 등과 같은) 사용자 입력 디바이스에 인터페이싱하는 하드웨어, 비디오 디스플레이용 비디오 제어기, 프린터 인터페이스 하드웨어, (PCI, PCI 익스프레스(PCI express, PCIe), PCI-X, USB, 파이어와이어(firewire), SCSI(Small Computer Systems Interface) 등과 같은) 하나 또는 그 이상의 주변장치 인터페이스에 대한 브리지(bridges), 사운드 카드, 그리고 (GPIB 혹은 필드 버스 인터페이스 카드(field bus interface cards) 등과 같은) 다양한 데이터 획득 카드 중 하나 혹은 그 이상을 포함할 수 있다. "주변장치 디바이스(peripheral device)"라는 용어는 또한, 어떤 I/O 디바이스들을 설명하는데 사용될 수 있다.
일부 경우에 있어서, I/O 디바이스들(22) 중 하나 혹은 그 이상은 IOTLB들(24)과 같은 IOTLB 및/또는 MMU(예를 들어, 도 2의 프라이빗(Private) MMU(23D))를 포함할 수 있다. 이러한 IOTLB들은, 이들이 IOMMU(26) 외부에 있기 때문에, "원격(remote) IOTLB들"로서 불릴 수 있다. 이러한 경우에, 이미 변환된 어드레스들은 특정 방식으로 마크(mark)될 수 있고, 이에 따라 IOMMU(26)는 메모리 요청을 다시 변환하려고 하지 않는다. 일 실시예에서, 변환된 어드레스들은 간단히 "사전변환된(pretranslated)" 것으로서 마크될 수 있다.
메모리 제어기(18)는 메모리(20)와 시스템(10)의 나머지 간의 인터페이싱을 위해 설계된 임의의 회로를 포함할 수 있다. 메모리(20)는 하나 또는 그 이상의 RAMBUS DRAM(RDRAM)들, 동기식 DRAM(Synchronous DRAM, SDRAM)들, DDR SDRAM, 스태틱(static) RAM 등과 같은 임의의 반도체 메모리를 포함할 수 있다. 메모리(20)는 시스템에 분산될 수 있고, 따라서 복수의 메모리 제어기들(18)이 존재할 수 있다.
MMU(14)는 프로세서(12)에서 나오는 메모리 요청들을 위해 메모리 관리 유닛을 포함할 수 있다. MMU는 테이블 워크 기능(table walk functionality)뿐만 아니라 TLB들(16)을 포함할 수 있다. MMU(14)에 의해 변환이 수행될 때, MMU(14)는 CPU 변환 테이블들(50)에 변환 메모리 요청들(예를 들어, 도 1에서 점선으로 된 화살표(46 및 48)로 도시됨)을 발생시킬 수 있다. CPU 변환 테이블들(50)은, 프로세서들(12)에 의해 구현되는 명령 세트 아키텍처에서 정의된 바와 같이, 변환 데이터를 저장할 수 있다.
프로세서들(12)은 임의의 원하는 명령 세트 아키텍처를 구현하는 임의의 프로세서 하드웨어를 포함할 수 있다. 일 실시예에서, 프로세서들(12)은 x86 아키텍처를 구현하며, 특히 AMD64™ 아키텍처를 구현한다. 다양한 실시예들이 슈퍼파이프라인(superpipeline)될 수 있고 그리고/또는 슈퍼스칼라(superscalar)일 수 있다. 하나 이상의 프로세서(12)를 포함하는 실시예들이 개별적으로 구현될 수 있거나, 혹은 칩 멀티프로세서(Chip MultiProcessors, CMP)로서 구현될 수 있고, 그리고/또는 칩 멀티쓰레드(Chip MultiThreaded, CMT)로서 구현될 수 있다.
시스템(10)은 시스템의 하이 레벨 기능을 예시하는바, 실제 물리적 구현은 많은 형태를 취할 수 있다. 예를 들어, MMU(14)는 각각의 프로세서(12)에 공통적으로 통합된다. 메모리(20)가 제시되는 경우, (메모리 어드레스 공간이, 물리적으로 개별의 메모리 제어기들에 결합된 복수의 물리적으로 개별의 메모리들로 맵핑되는) 일부 실시예들에서, 메모리 시스템은 분산형 메모리 시스템일 수 있다. IOMMU(26)는 I/O에서 나오는 메모리 요청들과 메모리(20) 간의 경로를 따라 어느 곳이든 위치할 수 있고, 하나 이상의 IOMMU가 존재할 수 있다. 또한, IOMMU들은 시스템의 서로 다른 부분에서 서로 다른 지점에 위치할 수 있다.
도 2는 프로세서 노드들 간에 하이퍼트랜스포트(HyperTransport™, HT) 코히어런트 링크들(61)을 사용하고 프로세서 노드들과 I/O 디바이스들 간에 HT I/O 링크들(예를 들어, 70A 및 70B)을 사용하는 시스템의 실시예의 일 예이다. 특히, 일 실시예에서, 다른 주변장치 상호연결들로의 브리지를 행하는 HT I/O 링크들(예를 들어, 71A)이 I/O 허브(hub)들과 I/O 디바이스들 간에 사용될 수 있다. 추가적으로, 임의의 다른 코히어런트 상호연결이 프로세서 노드들 간에 사용될 수 있고, 그리고/또는 임의의 다른 I/O 상호연결이 프로세서 노드들과 I/O 디바이스들 간에 사용될 수 있다. 예를 들어, I/O 링크들(71B, 71C 및 71D)은 다양한 실시예들에서 PCIe 링크들일 수 있다. 더욱이, 또 다른 예는 노스브리지(Northbridge)에 결합되는 프로세서들을 포함할 수 있는바, 이것은 종래 PC 설계에 있어서 메모리 및 하나 혹은 그 이상의 I/O 상호연결들에 또한 결합된다.
도 2에 도시된 실시예를 참조하면, 시스템(10a)은 프로세싱 노드들(60A-60B)을 포함하는바, 이들은 MMU들(14A-14B)을 또한 포함하는 프로세서들(12A-12B)을 각각 포함한다. 프로세서 노드들(60A-60B)은 또한 메모리 제어기들(18A-18B)을 포함한다. 프로세서들(12A-12B) 각각은 앞에서 언급된 바와 같이 프로세서(12)의 예일 수 있다. 유사하게, MMU들(14A-14B)과 메모리 제어기들(18A-18B) 각각은 도 1에 제시된 MMU(14)와 메모리 제어기(18)의 예들일 수 있다. 예시된 실시예에서, MMU 기능은 프로세서에 통합된다.
시스템(10a)은 메모리들(20A-20B)을 포함하는 분산형 메모리 시스템을 포함한다. 시스템 물리적 어드레스 공간은 메모리들(20A-20B)에 걸쳐 분산될 수 있다. 이에 따라, 소정의 어드레스를 특정하는 소정의 메모리 요청은 그 소정의 어드레스가 할당된 메모리(20A 혹은 20B)에 결합되는 메모리 제어기(18A 혹은 18B)에 라우팅된다.
I/O 디바이스들(예를 들어, 도 2에 예시된 바와 같이, I/O 허브들(62A-62B)에 결합된 I/O 디바이스들(22A-22D))로부터의 메모리 요청들은, 그 요청을 서비스할 메모리 제어기(18A-18B)에 도착하기 위해서 모두 동일한 경로를 취하지 않을 수 있다. 예를 들어, I/O 디바이스들(22A-22B)은 I/O 허브(62A)에 메모리 요청들을 전송할 수 있고, I/O 허브(62A)는 이 요청들을 프로세싱 노드(60A)에 전송한다. 만약 소정의 메모리 요청의 어드레스가 메모리(20B)에 할당된다면, 프로세싱 노드(60A)는 그 소정의 메모리 요청을 프로세싱 노드(60B)에 전송할 수 있고, 이에 따라 메모리 제어기(18B)는 이 요청을 수신하고 처리할 수 있다. I/O 디바이스들(22C-22D)은 메모리 요청을 I/O 허브(62B)에 전송할 수 있고, I/O 허브(62B)는 이 요청을 프로세싱 노드(60B)에 전송할 수 있다. 만약 소정의 메모리 요청의 어드레스가 메모리(20A)에 할당된다면, 프로세싱 노드(60B)는 소정의 메모리 요청을 프로세싱 노드(60A)에 전송할 수 있다.
IOMMU는 I/O에서 나오는 메모리 요청들과 메모리(20) 간의 경로를 따라 어느 곳이든 위치할 수 있다. 예시된 실시예에서, IOMMU들(26A-26B)은 I/O 허브들(62A-62B)에 포함된다. 따라서, 대응하는 허브에 결합된 I/O 디바이스에서 나오는 임의의 메모리 요청은 I/O 허브에서의 IOMMU에 의해 변환될 수 있다. 다른 실시예들에서 IOMMU는, I/O 디바이스들에서의 IOTLB들로부터 프로세싱 노드들(60A-60B) 내의 IOMMU들에 이르기까지, 혹은 심지어 메모리 제어기들(18A-18B)에서의 IOMMU들에 이르기까지, 상이한 장소에 위치할 수 있다. 또한, IOMMU들은 시스템의 상이한 부분에서 서로 다른 지점에 위치할 수 있다. 예를 들어, 일부 실시예들에서, I/O 디바이스들은 도시된 바와 같이 로컬 메모리(24D)를 포함할 수 있는 디바이스들일 수 있다. 따라서, I/O 디바이스(22D)는 또한, 로컬/프라이빗 MMU(23D)를 포함한다.
도 3을 참조하면, I/O 변환 테이블들(36)의 일 실시예를 나타낸 도면이 제시된다. 구체적으로, I/O 변환 테이블들(36)은 디바이스 테이블(36A), 인터럽트 리맵핑 테이블(36B), 및 I/O 페이지 테이블들의 두 세트(예를 들어, 36C 및 36D)를 포함할 수 있다. 도 3에는 또한, 제어 레지스터들(32) 중 하나(제어 레지스터(32A))가 도시된다. 제어 레지스터(32A)는 디바이스 테이블(36A)의 베이스 어드레스(base address)를 저장할 수 있다.
디바이스 테이블(36A)은 디바이스에 할당된 디바이스 ID에 의해 인덱싱된 복수의 엔트리들을 포함한다. 따라서, 소정의 디바이스는 디바이스 테이블(36A)에서의 엔트리들 중 하나에 대응한다(만약 디바이스가 복수의 디바이스 ID들을 갖지 않는다면, 혹은 디바이스가 브리지 디바이스에서 다른 것들과 함께 합쳐진 트래픽(traffic)을 갖지 않고 트래픽이 브리지의 디바이스 ID 하에서 전송되지 않는다면). 디바이스 테이블 엔트리는 다양한 데이터를 포함할 수 있다. 예시적인 디바이스 테이블 엔트리(325)의 일부가 도 4에 제시되고, 이하에서 상세히 설명된다.
소정의 디바이스 테이블 엔트리(325)는 I/O 페이지 테이블들(36C 및 36D)에 대한 포인터(이것은 화살표 301 및 302로 표시됨)를 포함할 수 있다. 이 포인터는 I/O 페이지 테이블들(36C 및 36D)에서의 변환 검색을 위한 시작 포인트인 페이지 테이블을 가리킬 수 있다. 도시된 바와 같이, 시작 페이지 테이블은, 앞에서 언급된 바와 같이, 계층적 방식으로, 다른 페이지 테이블들에 대한 포인터들을 포함할 수 있다. 이하에서 더 설명되는 바와 같이, 구현되는 변환 프로세스에 따라서, 일부 테이블들은 프로세스 식별자에 의해 인덱싱될 수 있고, 다른 테이블들은 게스트 가상 어드레스 혹은 변환될 게스트 물리적 어드레스의 다양한 비트들을 사용하여 인덱싱될 수 있다.
디바이스 테이블 엔트리(325)는 또한, (화살표 304로 표시되는) 인터럽트 리맵핑 테이블(36B)에 대한 포인터를 포함할 수 있다. 인터럽트 리맵핑 데이터는, 인터럽트 요청이 디바이스에 의해 전송되는 경우 사용될 수 있고, 그리고 인터럽트 ID에 의해 인덱싱될 수 있다. 인터럽트 ID는, 요청된 인터럽트를 식별하는 데이터를 포함할 수 있고, 그리고 인터럽트 요청을 전송하기 위해 사용되는 메커니즘에 근거하여 변할 수 있다.
하나의 디바이스 테이블(36A)이 도시되었지만 복수의 디바이스 테이블들이 필요한 경우 유지될 수 있음에 유의해야 한다. 제어 레지스터(32A)에서의 디바이스 테이블 베이스 어드레스는 다른 디바이스 테이블들을 가리키기 위해 변경될 수 있다. 더욱이, 디바이스 테이블들은, 앞에서 설명된 페이지 테이블들과 유사하게, 필요한 경우, 계층구조일 수 있다. 유사하게, 하나의 인터럽트 리맵핑 테이블(36B)이도시되었지만, 복수의 인터럽트 맵핑 테이블들(예를 들어, 디바이스 테이블(36A)에서 엔트리당 최대 하나)이 존재할 수 있다. 또한, 페이지 테이블들의 복수의 세트들(예를 들어, 디바이스 테이블(36A)에서 엔트리당 최대 하나)이 존재할 수 있다. 비록 서로 독립적일지라도, 다른 실시예들은 인터럽트 리맵핑 기능 없이 I/O 변환 기능을 구현할 수 있음에 유의해야 한다.
예시된 실시예에서, I/O 변환 테이블들(36C 및 36D)은 1-레벨 및 2-레벨 게스트 변환들의 다양한 결합을 지원할 수 있다. 점선을 표시된 바와 같이, 변환이 게스트(즉, 2-레벨) 변환(점선으로 표시됨)인 경우, 화살표(301)로 시작하는 경로를 따른다. 그러나, 게스트 변환이 유효하지 않은 경우라면, 화살표(302)로 시작하는 실선 경로를 따른다.
특히, GVA를 포함하는 변환 요청 혹은 메모리 액세스 요청이 I/O 디바이스로부터 수신되는 경우, 이 요청의 디바이스 ID에 대응하는 디바이스 테이블 엔트리가 액세스된다. 도 5의 설명과 함께 아래에서 더 상세히 설명되는 바와 같이, GCR3 테이블(307)의 베이스 어드레스에 대한 SPA 포인터(예를 들어, 301)가 사용되고, 그리고 프로세스 ID(예를 들어, PASID)는 GCR3 테이블(307)에 대한 인덱싱을 위해 사용될 수 있다. GCR3 테이블(307) 내의 엔트리는 GCR3 페이지 테이블(311)의 베이스에 대한 GPA 포인터를 포함할 수 있다. 그러나, 테이블들에서의 이러한 GPA 및 모든 후속 GPA 포인터들은, 예를 들어, 메모리에서의 그 다음 페이지 테이블에 액세스하기 위해, 테이블들(333 및 335)과 같은 페이지 테이블들의 세트 및 변환 로직을 사용하여 SPA로 변환될 수 있다. 이러한 변환 메커니즘이 도 3에서 GPA/SPA 변환 유닛들(309A, 309B, 309C 및 309D)로 나타나 있다. 요청의 GVA의 비트들 중 일부는 GCR3 페이지 테이블(311)에 대한 인덱싱을 위해 사용될 수 있다. 일 실시예에서, 311에서의 대응하는 엔트리는 페이지 맵 레벨 4(Page Map Level four, PML4) 페이지 테이블(313)의 베이스에 대한 GPA 포인터를 포함할 수 있다. 네스티드 페이지 테이블들 각각에서의 후속하는 어드레스들은 또한, 그 다음 테이블의 베이스 어드레스를 가리키는 GPA들일 수 있고, 또는 마지막 테이블(예를 들어, 315)의 경우, 엔트리는 물리적 메모리 페이지에 대한 GPA 포인터를 포함할 수 있다. 이러한 테이블들(예를 들어, 313, 315) 각각은 또한, I/O 요청의 GVA에 의해 인덱싱될 수 있다. GVA의 일부(예를 들어, 마지막 몇 개의 비트들)와 메모리(317)에서의 물리적 페이지의 SPA를 연결(concatenate)시킴으로써 최종 변환(SPA)이 획득될 수 있다.
따라서, 게스트 변환 테이블과 네스티드 변환 테이블 양쪽 모두가 2-레벨 게스트 변환에서 사용될 수 있다. 그러나, 만약 GPA가 I/O 디바이스에 의해 제공된다면, 호스트 변환 페이지 테이블들(36D)의 베이스 어드레스를 제공하는 포인터(302)를 사용함으로써 1-레벨 변환이 수행될 수 있다. 특히, 디바이스 테이블 엔트리에서의 게스트 정보는 무시되고, 그리고 (도 4에 제시된) 엔트리 정보를 라우팅하는 다른 페이지 테이블은, 대응하는 호스트 변환 페이지 테이블들에 액세스하기 위해 사용될 수 있다. 변환의 다양한 레벨에서, GPA의 비트들의 서로 다른 서브세트들은 각각의 연속하는 페이지 테이블에 대한 인덱싱을 위해 사용될 수 있다. 구체적으로, 포인터(302)는 PML4 페이지 테이블(333)의 베이스에 대한 SPA 포인터일 수 있다. 게스트 테이블들(36C)과는 대조적으로, 호스트 페이지 테이블들(36D)에서의 각각의 포인터는 그 다음 테이블의 베이스를 가리키는 SPA일 수 있다. PML4 페이지 테이블(333) 내의 GPA에 의해 인덱싱된 엔트리는 PML3/2 페이지 테이블(335)의 베이스에 대한 SPA 포인터를 포함한다. 실제 페이지 테이블 레벨(즉, 3 또는 2)에 따라, 페이지 테이블(335)의 엔트리에서의 포인터는 그 다음 테이블에 대한 SPA 포인터일 수 있거나 물리적 메모리 페이지(337)의 SPA일 수 있다. 따라서, GPA의 일부(예를 들어, 마지막 몇 개의 비트들)와 메모리(337)에서의 물리적 페이지의 SPA를 연결시킴으로써 최종 변환(SPA)이 획득될 수 있다.
메모리 격리를 보존하기 위해, 일 실시예에서, 각각의 후속 페이지 테이블에 액세스하는 경우, 허가(permission)들이 점검될 수 있으며, 그리고 만약 허가 불일치가 존재한다면, 혹은 페이지가 존재하지 않는다면, IOMMU(26)는 변환 및/또는 검색(lookup)을 중단시킬 수 있고, 그리고 페이지 폴트(page fault)를 내부적으로 발행할 수 있으며 에러를 로그(log)할 수 있다. 다른 실시예들에 있어서, 각각의 스테이지에서, IOMMU는 간단히 임의의 에러들을 축적할 수 있고, 그리고 변환의 끝에서 변환을 버릴 수 있으며, 페이지 폴트를 발행할 수 있고, 에러를 로그할 수 있으며, 또는 이들의 어떤 결합을 수행할 수 있다.
도 4를 참조하면, 예시적인 디바이스 테이블 엔트리의 일 실시예를 나타낸 도면이 제시된다. 도 4의 실시예에 제시된 필드(field)들은 인터럽트 리맵핑 및/또는 어드레스 변환에 관한 것일 수 있고 다양한 실시예들에서 다른 필드들이 다른 목적을 위해 제공될 수 있음에 유의해야 한다. 예시된 실시예에서, 디바이스 테이블 엔트리(325)는 256 비트 엔트리이다. 그러나, 다른 실시예들은 이러한 필드들 및 다른 필드들의 슈퍼세트(superset)들, 이러한 필드들의 서브세트들, 또는 다른 필드들과 결합된 서브세트들을 구현할 수 있다. 결과적으로, 디바이스 테이블 엔트리(325)는, 필요에 따라서, 임의 개수의 비트들일 수 있다. 필드는 하나 혹은 그 이상의 비트들을 포함할 수 있고, 그 인코딩에는 IOMMU(26)에 의해 해석될 때 특정 의미가 할당된다. 만약 본 실시예에 있어서 필드가 단일 비트라면, 이것은 비트로서 불릴 수 있다. 그러나, 다른 실시예에서는 유사한 목적으로 복수 비트 필드들이 사용될 수 있다. 본 실시예에 있어서, 도 4에서의 비트 범위를 갖는 복수 비트 필드들이 제시된다.
어떤 특정 인터럽트가 차단되는지 아니면 수정 없이 통과되는지 여부를 제어하기 위해 예비 및 기타 필드에는 다양한 특정 인터럽트 제어 비트들이 제공될 수 있다. 인터럽트 테이블 포인터 필드(IntTablePtr)는 앞에서 언급된 인터럽트 리맵핑 테이블의 베이스 어드레스를 저장할 수 있다. 인터럽트 테이블 길이(IntTableLen)는 인터럽트 테이블의 크기를 특정한다. 인터럽트 테이블 길이 필드는 몇몇 가능한 길이(예를 들어, 일 실시예에 있어서, 2의 거듭제곱인 1-2048 엔트리들)를 위해 인코딩될 수 있다. 만약 I/O 페이지 폴트가 인터럽트 메시지에 대해 검출된다면, IG 비트는 이벤트 로그 버퍼(44)에서의 이벤트 로그 엔트리들의 생성 여부를 표시하기 위해 사용될 수 있다. 인터럽트 유효(Interrupt Valid, IV) 비트는 인터럽트 관련 필드들의 유효 여부를 표시할 수 있다. 필드가 유효하지 않다면, IOMMU(26)는 모든 인터럽트들을 수정 없이 통과시킬 수 있다.
게스트 CR3(GCR3) 테이블 루트 포인터(GCR3TableRtPtr) 필드는 I/O 디바이스에 대한 게스트 CR3 테이블의 SPA를 포함할 수 있다. 주변장치 페이지 서비스 요청(Peripheral Page service Request, PPR) 비트는, 주변장치가 IOMMU로 하여금 주변장치 페이지 서비스 요청 로그 엔트리들로의 변환을 행하게 하는 주변장치 페이지 서비스 요청을 발행할 수 있는지 여부를 표시하거나 혹은 이 요청이 에러로서 처리되는지 여부를 표시한다. 비록 예시된 실시예에서 GCR3TableRtPtr이 다수의 필드들로 분할되어 있지만, 다른 실시예들에서 GCR3TableRtPtr은 하나의 연속된 필드일 수 있거나 또는 필요에 따라 서로 다르게 분할될 수 있음에 유의해야 한다.
SysMgt 필드는 시스템 관리 범위에서 통신의 후속 제어를 제공하기 위해 인코딩될 수 있다. 구체적으로 살펴보면, 일 실시예에서, SysMgt 필드는, 해당 범위에서 요청들을 차단하기 위해; 해당 범위 내의 요청들을 수정 없이 (기입 전용으로 포스팅시켜) 전달하기 위해; INTx 메시지들에 맵핑되는 요청들을 수정 없이 (기입 전용으로 포스팅시켜) 전달하기 위해; 또는 I/O 페이지 테이블들을 사용하여 요청들을 변환하기 위해, 인코딩될 수 있다. IoCtl 필드는 I/O 공간 범위에서의 통신의 후속 제어를 제공하기 위해 인코딩될 수 있다. 구체적으로 살펴보면, 일 실시예에서, IoCtl 필드는, 해당 범위에서 요청들을 차단하기 위해; 요청들을 수정 없이 전달하기 위해; 또는 I/O 페이지 테이블들을 사용하여 요청들을 변환하기 위해, 인코딩될 수 있다. 그러나, 일 실시예에서, 이러한 필드들(예를 들어, SysMgt, IoCtl)의 일부는 단지 GPA-SPA 변환에만 관련될 수 있고 GVA-SPA 변환에는 적용되지 않을 수 있다.
도메인 ID는, 서로 다른 디바이스들이 그들의 변환 데이터를 구분하도록 IOMMU(26)에서의 캐시(30) 엔트리들 및 임의의 다른 캐시 엔트리들에 태그(tag)를 붙일 때 사용된다. 만약 디바이스들이 변환 테이블들을 공유한다면, 이들은 캐시 엔트리들을 공유하기 위해 동일한 도메인 ID를 가질 수 있다. 도메인 ID는 전적으로 소프트웨어의 제어하에 있고, 따라서 변환 데이터를 공유하기 위해 I/O 디바이스들을 하나의 도메인으로 그룹화하거나 또는 디바이스들을 분리시키기 위해 소프트웨어(예를 들어, 가상 머신 모니터, 또는 비가상 머신 구현에서의 운영 체계)를 제어함에 있어서 유연성을 허용할 수 있다. 예를 들어, 소정의 가상 머신에 할당된 디바이스들은 동일한 도메인 ID를 가질 수 있고, 그리고 서로 다른 도메인 ID들이 서로 다른 가상 머신들을 위해 사용될 수 있다. 따라서, 분리된 디바이스들과 그룹화된 디바이스들의 어떤 결합이 또한 생성될 수 있다.
일 실시예에서, 게스트 CR3 레벨(GLX) 비트는, IOMMU에 의해 수행될, GCR3 검색의 타입(즉, 1-레벨 혹은 2-레벨 GCR3 테이블들)을 특정한다. 게스트 변환 유효(GV) 비트는, 2-레벨(즉, 네스티드 및 게스트 레벨) 변환이 수행되는지 아니면 1-레벨(예를 들어, 호스트) 변환이 수행되는지 여부를 결정한다. 일 실시예에서, GV 비트가 클리어(clear)될 때, GLX 비트 및 GCR3TableRtPtr 필드들은 무시된다.
페이지 테이블 포인터(PageTablePtr)는 호스트 변환 페이지 테이블들(36D)에 대한 포인터이다. 이러한 포인터는 I/O 디바이스들이 GPA를 제공할 때 사용될 수 있다. 모드 필드(mode field)(Mode)는 디바이스의 I/O 페이지 테이블들의 깊이를 표시하기 위해 그리고 변환이 전체적으로 디스에이블되었는지 여부를 표시하기 위해 코딩될 수 있다. 예를 들어, SPA를 제공함과 아울러 요청들을 사전변환된 것으로서 마크하는 디바이스들에 대해, 대응하는 디바이스 엔트리는, 변환을 디스에이블시키기 위해 이 필드가 인코딩되게 할 수 있다. 다른 인코딩들은, 이러한 엔트리에 맵핑되는 요청들을 위해 변환이 시작돼야 하는 페이지 테이블 계층구조에서의 레벨을 표시할 수 있다. TV 비트는 페이지 변환 데이터의 유효 여부를 표시하고, 그리고 V 비트는 엔트리(80)의 유효 여부를 표시한다.
도 5를 참조하면, 게스트 가상 어드레스 변환 메커니즘의 보다 상세한 양상을 나타낸 도면이 제시된다. 앞에서 설명된 바와 같이, 디바이스 테이블(36A)은 다수의 엔트리들(DTE)을 포함할 수 있고, 그 각각은 GCR3TableRtPtr 필드를 포함한다. 만약 해당 엔트리에 대한 게스트 변환이 유효하다면, 이 필드는 메모리에서의 게스트 CR3 테이블(501)에 대한 SPA 포인터를 포함할 것이다. 제시된 바와 같이, GCR3 테이블(501)은 디바이스의 요청과 관련된 PASID 값에 의해 인덱싱될 수 있다. 앞에서 언급된 바와 같이, 디바이스 PASID는 사용된 I/O 상호연결의 타입에 따라 다야한 방식으로 획득될 수 있다. 제시된 바와 같이, GCR3 테이블(501)은 두 개의 엔트리들을 가지고 있는바, 각각은, 앞에서 설명된 바와 같이 게스트 페이지 테이블들(503 및 505)에 대한 GPA 포인터일 수 있는, GCR3 베이스 포인터를 포함한다. 예시된 실시예에서, 게스트 페이지 테이블들(503 및 505)은 I/O 요청의 GVA에 의해 인덱싱될 수 있다. 더욱이, 게스트 페이지 테이블들(503 및 505)에서의 각각의 유효 엔트리는 각각의 페이지 맵 레벨 4 테이블의 베이스 어드레스에 대한 GPA 포인터를 포함할 수 있다.
일 실시예에서, GCR3 테이블(501)은 메모리에서 연속이어야 한다. 따라서, 많은 수의 PASID들을 갖는 시스템에서, 메모리 관리는 번거로운 것일 수 있다. 이에 따라, 대안적 실시예에서, GCR3 테이블들은 계층적 방식으로 구현될 수 있다. 예를 들어, 하나 혹은 그 이상의 제 2 레벨 GCR3 테이블들(미도시)이 사용될 수 있다. 이러한 실시예에서, 제 1 레벨 GCR3 테이블은 GCR3 베이스 테이블일 수 있고, 그리고 PASID 비트들의 제 1 서브세트를 사용하여 인덱싱될 수 있다. 제 1 레벨 GCR3 테이블에서의 소정의 엔트리는 각각의 제 2 레벨 GCR3 테이블에 대한 GPA 포인터를 포함할 수 있다. 제 2 레벨 GCR3 테이블들은 PASID의 제 2 서브세트를 사용하여 인덱싱될 수 있다. 제 2 레벨 GCR3 테이블들의 각각의 엔트리는 테이블(503 또는 505)과 같은 게스트 페이지 테이블에 대한 GPA 포인터를 포함할 수 있다. 따라서, 1-레벨 GCR3 테이블을 구현할지 아니면 2-레벨 GCR3 테이블을 구현할지에 관한 선택은 사용중에 있는 PASID들의 수에 따라 달라질 수 있다. 다양한 실시예들에서, PASID 비트들의 서브세트들은, 필요한 경우, 오버랩(overlap)하지 않을 수 있거나 오버랩할 수 있음에 유의해야 한다.
도 6을 참조하면, 도 1 내지 도 5에 도시된 시스템의 실시예들의 동작 양상을 설명하는 흐름도가 제시된다. 도 1 내지 도 6을 모두 함께 고려하면, 도 6의 흐름도는 블록(601)에서 시작하며, 여기서 IOMMU(26)는 I/O 요청을 수신한다. 예를 들어, 요청은, 예를 들어, VM 애플리케이션들 중 하나에 대한, DMA 액세스와 같은 I/O 메모리 액세스 요청일 수 있다. 대안적으로, 요청은, 예를 들어, 원격 IOTLB를 갖는 I/O 디바이스에 의한, 변환 요청일 수 있다. 만약 요청이 메모리 요청이 아니라면, 동작은 블록(604)에 제시된 바와 같이 진행할 수 있다. 그러나, 만약 요청이 메모리 요청이라면, IOMMU(26)는 요청이 사전변환된 것으로 마크되었는지 여부를 결정할 수 있다(블록(602))(예를 들어, 온보드(onboard) MMU를 갖는 I/O 디바이스의 경우에서와 같이). 그러한 경우에, 어드레스는 SPA일 수 있고, 그리고 어떠한 변환도 필요 없다. 만약 요청이 사전변환된 것으로서 마크된다면, IOMMU(26)는 메모리 제어기(18)에 요청을 제공할 수 있다(블록(603)).
블록(602)을 다시 참조하면, 만약 요청이 사전변환된 것으로서 마크되지 않았다면 혹은 만약 요청이 변환 요청이라면, IOMMU(26)는 변환을 위해 캐시(30) 내에서 검색을 수행할 수 있다(블록(604)). 만약 변환이 존재한다면, IOMMU(26)는 요청자에게 변환을 제공할 수 있거나, 또는 그 요청과 함께 변환을 메모리 제어기(18)에 제공할 수 있다(블록(603)).
그러나, 만약 변환이 캐시(30)에 존재하지 않는다면(블록(604)), 제어 로직(34)과 함께 테이블 워커(28)는 I/O 변환 테이블들(36)에 액세스할 수 있다. 특히, 테이블 워커(28)는 메모리(20)에서의 디바이스 테이블 베이스 어드레스를 얻기 위해 디바이스 테이블 베이스 레지스터(32A)에 액세스할 수 있다. 테이블 워커(28)는 디바이스 테이블(36A)에 대한 인덱싱을 위해 디바이스 ID를 사용할 수 있다(블록(605)). 만약 요청에 PASID 값이 포함되어 있다면(블록(606)), 테이블 워커(28)는 메모리에서 GCR3 테이블들을 찾기 위해 디바이스 테이블 엔트리에서의 GCR3 제어 비트들 및 GCR3TableRtPtr 어드레스를 사용하여 2-레벨 게스트 변환을 수행할 수 있다(블록(607)). 앞에서 설명된 바와 같이, GCR3TableRtPtr 어드레스는 일 실시예에서 SPA일 수 있다. 테이블 워커(28)는, GCR3 테이블들의 인덱싱을 위해, GPA 포인터들을 사용하여 대응하는 GCR3 및 게스트 테이블들 그리고 PASID의 위치를 지정할 수 있다. 블록(614)에 제시된 바와 같이, 그리고 앞에서 설명된 바와 같이, 각각의 GPA 포인터는 예를 들어, 호스트 변환 페이지 테이블들(36D)을 사용하여 IOMMU(26)에 의해 변환될 수 있다. 요청의 GVA 비트들의 일부 서브세트는 게스트 페이지 테이블(들)을 인덱싱하기 위해 사용될 수 있다. 마지막 게스트 페이지 테이블은 호스트 페이지 맵 레벨 4 테이블들의 베이스 어드레스에 대한 GPA 포인터를 포함할 수 있다. 일 실시예에서, 각각의 연속하는 게스트 테이블이 액세스됨에 따라, 허가들이 점검되고, 그리고 임의의 실패한 허가들은 페이지 폴트 혹은 다른 에러들을 발생시킬 수 있다(블록(608)).
그 다음에, 테이블 워커(28)는 각각의 이전 테이블의 각각의 엔트리 내의 GPA 포인터들을 사용하여 호스트 변환 테이블들(36D)을 연속적으로 찾을 수 있다. 페이지 테이블들의 다양한 레벨들에서, 요청의 GVA 비트들의 서로 다른 서브세트들은 각각의 호스트 변환 페이지 테이블에 대한 인덱싱을 위해 사용될 수 있다. 앞에서 설명된 바와 같이, 마지막 페이지 테이블이 액세스되면, 대응하는 엔트리는 메모리에서의 물리적 페이지의 GPA를 포함할 수 있다. 제어 로직(34)은 GPA를 SPA로 변환할 수 있다(블록(609)). 그 다음에, 제어 로직(34)은, 최종 변환 어드레스를 획득하기 위해, 물리적 메모리 페이지의 SPA를 GVA의 마지막 몇 개의 비트들과 연결할 수 있다(블록(610)). 제어 로직(34)은, 만약 요청이 메모리 요청이라면, 요청과 함께 메모리 제어기(18)에 변환 어드레스를 제공할 수 있다. 대안적으로, 제어 로직(34)은, 만약 요청이 변환 요청이라면, 요청하는 I/O 디바이스에 변환을 제공할 수 있다. 제어 로직(34)은 또한, 장래 변환 검색에서의 사용을 위해 캐시(30) 내에 변환을 저장할 수 있다(블록(611)).
블록(606)을 다시 참조하면, 만약 요청이 PASID를 포함하지 않는다면, 요청에서의 어드레스는 GPA이다. 이러한 경우에, 제어 로직(34)은 메모리에서의 호스트 변환 페이지 테이블들(36D)을 찾기 위해 디바이스 테이블 엔트리에서의 PageTableRtPtr 어드레스를 사용하여 1-레벨 변환을 수행할 수 있다(블록(612)). 앞에서 설명된 것과 유사한 방식으로, 테이블 워커(28)는 I/O 디바이스에 대해 호스트 페이지 맵 레벨 4 테이블들의 베이스 어드레스에 대한 SPA 포인터를 사용할 수 있다. 게스트 변환과 대조적으로, 호스트 변환 페이지 테이블들에서, 다음 페이지 테이블/메모리 물리적 페이지에 대한 각각의 포인터는 SPA이다. 따라서, 테이블 워커(28)는 각각의 이전 테이블의 각각의 엔트리 내의 SPA 포인터들을 사용하여 호스트 변환 테이블들을 연속적으로 찾을 수 있다. 호스트 페이지 테이블들의 각각의 레벨에서, 요청의 GPA 비트들의 서로 다른 서브세트들은 각각의 호스트 변환 페이지 테이블에 대한 인덱싱을 위해 사용될 수 있다. 앞에서 설명된 바와 같이, 마지막 페이지 테이블이 액세스되면, 대응하는 엔트리가 메모리에서의 물리적 페이지의 SPA를 포함할 수 있다(블록(613)). 제어 로직(34)은, 최종 변환 어드레스를 획득하기 위해, 물리적 메모리 페이지의 SPA를 요청의 GPA의 마지막 몇 개의 비트들과 연결할 수 있다(블록(610)). 앞에서 설명된 바와 같이 동작은 블록(611)과 함께 계속될 수 있다.
앞서의 실시예들은 하드웨어로 혹은 소프트웨어로 혹은 이들 모두의 결합으로 구현될 수 있다. 추가적으로, 앞서의 하드웨어 컴포넌트들 중 다양한 컴포넌트들은 먼저, 하드웨어 정의 언어(hardware definition language)로 기입된 소프트웨어를 사용하여 설계될 수 있다. 이에 따라, 앞서의 실시예들을 구현하기 위해 사용된 명령들 중 임의의 명령어는 다양한 타입의 저장소에 저장될 수 있다. 따라서, 다양한 실시예들은 또한, 앞서의 설명에 따라 구현된 명령들 및/또는 데이터를 컴퓨터 판독가능 저장 매체 상에 저장하는 것을 포함할 수 있다. 일반적으로 말하면, 컴퓨터 판독가능 저장 매체는, 자기 혹은 광학 매체들(예를 들어, 디스크, CD-ROM, DVD), 휘발성 혹은 비휘발성 매체들(RAM(예를 들어, SDRAM, DDR SDRAM, RDRAM, SRAM 등), ROM과 같은 것), 등과 같은 저장 매체들 혹은 메모리 매체들을 포함할 수 있다.
비록 앞서의 실시예들이 매우 상세하게 설명되었지만, 본 발명의 기술분야에서 숙련된 자들에게는 이러한 앞서의 개시내용이 충분히 파악되는 경우 수많은 변형 및 수정이 가능하다는 것이 명백하게 될 것이다. 다음의 특허청구범위는 이러한 변형 및 수정 모두를 포괄하는 것으로 해석되도록 의도된 것이다.

Claims (30)

  1. 메모리에 대한 입출력(Input/Output, I/O) 디바이스의 요청들을 제어하도록 되어 있는 입출력 메모리 관리 유닛(Input/Output Memory Management Unit, IOMMU)으로서, 상기 IOMMU는,
    상기 메모리에 저장된 변환 데이터(translation data)를 이용하여 I/O 디바이스에 의해 발생된 요청과 관련된 어드레스를 변환하기 위해 2-레벨 게스트 변환(two-level guest translation)을 수행하도록 되어 있는 제어 로직(control logic)을 포함하고,
    상기 변환 데이터는,
    디바이스 테이블(device table)에서의 하나 이상의 디바이스 테이블 엔트리(device table entry)들과, 그리고
    게스트 페이지 테이블(guest page table)들의 세트 및 네스티드 페이지 테이블(nested page table)들의 세트를 포함하는 페이지 테이블들의 제 1 세트를 포함하고,
    여기서, 소정의 요청에 대한 디바이스 테이블 엔트리는 디바이스 식별자에 근거하여 선택되며,
    소정의 요청에 대한 선택된 디바이스 테이블 엔트리는 게스트 페이지 테이블(guest page table)들의 세트에 대한 포인터(pointer)를 포함하고, 소정의 게스트 페이지 테이블은 네스티드 페이지 테이블들의 세트에 대한 포인터를 포함하며,
    상기 게스트 페이지 테이블들의 세트에 대한 포인터는 시스템 물리적 어드레스(SPA)를 포함하고, 상기 SPA는 컴퓨터 시스템의 프로세서에서 실행되는 가상 메모리 모니터(VMM)에 의해 맵핑되는 어드레스 공간에 대응하며, 상기 메모리에서의 물리적 메모리 페이지에 액세스하기 위해 소정의 SPA가 사용되며, 그리고
    상기 네스티드 페이지 테이블들의 세트에 대한 포인터는 게스트 물리적 어드레스(GPA)를 포함하고, 상기 GPA는 상기 컴퓨터 시스템의 프로세서 상의 가상 머신(VM)에서 실행되는 게스트 운영 체계(guest operating system)에 의해 맵핑되는 어드레스 공간에 대응하며, 상기 제어 로직은 또한, 상기 메모리에서의 물리적 메모리 페이지에 액세스하기 위해 상기 GPA를 SPA로 변환하도록 되어 있는 것을 특징으로 하는 입출력 메모리 관리 유닛.
  2. 제1항에 있어서,
    상기 게스트 페이지 테이블들의 적어도 일부는, 각각의 다음 게스트 페이지 테이블(next guest page table)에 대한 포인터를 포함하는 적어도 하나의 엔트리를 포함하는 것을 특징으로 하는 입출력 메모리 관리 유닛.
  3. 제1항에 있어서,
    상기 게스트 페이지 테이블들의 세트의 마지막 게스트 페이지 테이블(last guest page table)은, 상기 네스티드 페이지 테이블들의 세트의 각각의 제 1 페이지 테이블에 대한 포인터를 포함하는 적어도 하나의 엔트리를 포함하는 것을 특징으로 하는 입출력 메모리 관리 유닛.
  4. 제1항에 있어서,
    상기 제어 로직에 결합되어 완료된 변환들을 저장하도록 되어 있는 캐시 메모리(cache memory)를 더 포함하는 것을 특징으로 하는 입출력 메모리 관리 유닛.
  5. 제1항에 있어서,
    상기 소정의 요청에 대한 디바이스 테이블 엔트리는 또한, 호스트 변환 페이지 테이블들의 세트를 포함하는 I/O 페이지 테이블들의 제 2 세트에 대한 제 2 포인터를 포함하는 것을 특징으로 하는 입출력 메모리 관리 유닛.
  6. 제5항에 있어서,
    상기 호스트 변환 페이지 테이블들의 적어도 일부는 다음에 오는 연속하는 호스트 변환 페이지 테이블에 대한 포인터를 갖는 엔트리들을 포함하고, 각각의 포인터는 상기 VMM에 의해 맵핑(mapping)되는 상기 어드레스 공간에 대응하는 각각의 SPA를 포함하는 것을 특징으로 하는 입출력 메모리 관리 유닛.
  7. 삭제
  8. 삭제
  9. 삭제
  10. 제1항에 있어서,
    상기 네스티드 페이지 테이블들의 세트의 마지막 페이지 테이블은, 상기 메모리에서의 각각의 물리적 페이지에 대응하는 어드레스를 갖는 포인터를 포함하는 적어도 하나의 엔트리를 포함하는 것을 특징으로 하는 입출력 메모리 관리 유닛.
  11. 제10항에 있어서,
    상기 메모리에서의 각각의 물리적 페이지에 대응하는 어드레스를 갖는 포인터는 GPA를 포함하는 것을 특징으로 하는 입출력 메모리 관리 유닛.
  12. 제11항에 있어서,
    상기 제어 로직은 또한, 상기 메모리에서의 각각의 물리적 페이지에 대응하는 GPA 포인터를 상기 각각의 물리적 페이지의 SPA로 변환하도록 되어 있는 것을 특징으로 하는 입출력 메모리 관리 유닛.
  13. 제12항에 있어서,
    상기 제어 로직은 또한, 최종 변환 어드레스를 제공하기 위해, I/O 요청과 관련된 어드레스의 비트(bit)들의 서브세트를 상기 각각의 물리적 페이지의 SPA와 연결(concatenate)하도록 되어 있는 것을 특징으로 하는 입출력 메모리 관리 유닛.
  14. 시스템으로서,
    프로세서와;
    상기 프로세서에 결합되어 변환 데이터를 저장하도록 되어 있는 메모리와, 여기서 상기 변환 데이터는,
    하나 이상의 엔트리들을 포함하는 디바이스 테이블과; 그리고
    게스트 페이지 테이블들의 세트 및 네스티드 페이지 테이블들의 세트를 포함하는 페이지 테이블들의 세트를 포함하고;
    상기 메모리에 액세스하기 위한 요청을 발생시키도록 되어 있는 적어도 하나의 입출력(I/O) 디바이스와; 그리고
    상기 적어도 하나의 I/O 디바이스 및 상기 메모리에 결합되는 입출력 메모리 관리 유닛(IOMMU)을 포함하여 구성되며,
    상기 IOMMU는, 상기 변환 데이터를 이용하여 상기 I/O 디바이스에 의해 발생된 요청과 관련된 어드레스를 변환하기 위해 2-레벨 게스트 변환을 수행하도록 되어 있고, 상기 IOMMU는,
    디바이스 식별자에 근거하여 소정의 요청에 대한 디바이스 테이블 엔트리를 선택하고;
    선택된 디바이스 테이블 엔트리로부터의 포인터를 사용하여 게스트 페이지 테이블들의 세트에 액세스하고; 그리고
    네스티드 페이지 테이블들의 세트에 액세스하기 위해 게스트 페이지 테이블로부터의 포인터를 사용하도록 되어 있으며,
    상기 메모리는 복수의 어드레스 공간들로 맵핑되며, 상기 복수의 어드레스 공간들은, 상기 프로세서에서 실행되는 가상 메모리 모니터(VMM)에 의해 맵핑되는 어드레스 공간에 대응하는 시스템 물리적 어드레스(SPA), 상기 프로세서 상의 가상 머신(VM)에서 실행되는 게스트 운영 체계에 의해 맵핑되는 어드레스 공간에 대응하는 게스트 물리적 어드레스(GPA), 그리고 상기 프로세서 상의 가상 머신(VM)에서 실행되는 게스트 애플리케이션에 의해 맵핑되는 어드레스 공간에 대응하는 게스트 가상 어드레스(GVA)를 포함하는 것을 특징으로 하는 시스템.
  15. 제14항에 있어서,
    상기 IOMMU는, 최종 변환 어드레스를 획득하기 위해, 제 1 게스트 변환 레벨에서 상기 디바이스 테이블 및 상기 게스트 페이지 테이블들의 세트를 사용하고 제 2 게스트 변환 레벨에서 상기 네스티드 페이지 테이블들의 세트를 사용하도록 되어 있는 것을 특징으로 하는 시스템.
  16. 제15항에 있어서,
    I/O 요청과 관련된 어드레스는 GVA를 포함하고, 상기 IOMMU는 상기 2-레벨 게스트 변환을 사용하여 상기 GVA를 SPA로 변환하도록 되어 있는 것을 특징으로 하는 시스템.
  17. 삭제
  18. 제14항에 있어서,
    게스트 페이지 테이블들의 세트에 대한 포인터는 SPA를 포함하고, 상기 메모리에서의 물리적 메모리 페이지에 액세스하기 위해 소정의 SPA가 사용되는 것을 특징으로 하는 시스템.
  19. 제14항에 있어서,
    상기 네스티드 페이지 테이블들의 세트에 대한 포인터는 GPA를 포함하고, 상기 IOMMU는 또한, 상기 메모리에서의 물리적 메모리 페이지에 액세스하기 위해 상기 GPA를 SPA로 변환하도록 되어 있는 것을 특징으로 하는 시스템.
  20. 제14항에 있어서,
    상기 IOMMU는 또한, I/O 요청과 관련된 프로세스 식별자를 사용하여 상기 게스트 페이지 테이블들의 세트의 적어도 일부에 대한 인덱싱(indexing)을 행하고, 그리고 상기 I/O 요청과 관련된 GVA를 사용하여 상기 게스트 페이지 테이블들의 세트의 또 다른 일부에 대한 인덱싱을 행하도록 되어 있는 것을 특징으로 하는 시스템.
  21. 제20항에 있어서,
    상기 I/O 디바이스에 의해 발생된 요청이 상기 프로세스 식별자를 포함하는 것에 응답하여, 상기 IOMMU는 상기 I/O 디바이스에 의해 발생된 요청과 관련된 GVA를 변환하기 위해 상기 2-레벨 게스트 변환을 수행하도록 되어 있는 것을 특징으로 하는 시스템.
  22. 제20항에 있어서,
    상기 I/O 디바이스에 의해 발생된 요청이 상기 프로세스 식별자를 포함하지 않는 것에 응답하여, 상기 IOMMU는 상기 I/O 디바이스에 의해 발생된 요청과 관련된 어드레스를 변환하기 위해 1-레벨 게스트 변환을 수행하도록 되어 있고, 상기 어드레스는 GPA를 포함하는 것을 특징으로 하는 시스템.
  23. 컴퓨터 시스템의 메모리에 대한 입출력(I/O) 요청들을 제어하는 방법으로서,
    상기 컴퓨터 시스템의 메모리에 변환 데이터를 저장하는 단계와, 여기서 상기 변환 데이터는,
    디바이스 테이블에서의 하나 이상의 디바이스 테이블 엔트리들과; 그리고
    게스트 페이지 테이블들의 세트 및 네스티드 페이지 테이블들의 세트를 포함하는 페이지 테이블들의 제 1 세트를 포함하고;
    제어 로직이, 디바이스 식별자에 근거하여 소정의 요청에 대한 디바이스 테이블 엔트리를 선택함으로써, 그리고 선택된 디바이스 테이블 엔트리로부터의 포인터를 사용하여 게스트 페이지 테이블들의 세트에 액세스함으로써, I/O 요청에서 수신된 어드레스에 관해 2-레벨 게스트 변환의 제 1 변환 레벨을 수행하는 단계와; 그리고
    상기 제어 로직이, 네스티드 페이지 데이터 구조들의 세트에 액세스하기 위해 게스트 페이지 테이블로부터의 포인터를 사용함으로써 상기 2-레벨 게스트 변환의 제 2 변환 레벨을 수행하는 단계를 포함하며,
    상기 제어 로직은 상기 I/O 요청에서 프로세스 식별자를 수신하는 것에 응답하여 상기 2-레벨 게스트 변환을 수행하고,
    상기 제어 로직은 프로세스 식별자를 포함하지 않는 I/O 요청을 수신하는 것에 응답하여, 1-레벨 변환을 수행하며,
    상기 프로세스 식별자를 포함하지 않는 I/O 요청에서 수신된 어드레스는 게스트 물리적 어드레스(GPA)를 포함하고, 상기 GPA는 상기 컴퓨터 시스템의 프로세서 상의 가상 머신(VM)에서 실행되는 게스트 운영 체계에 의해 맵핑되는 어드레스 공간에 대응하는 것을 특징으로 하는 컴퓨터 시스템의 메모리에 대한 입출력 요청들을 제어하는 방법.
  24. 제23항에 있어서,
    상기 I/O 요청에서 수신된 어드레스는 게스트 가상 어드레스(GVA)를 포함하고, 상기 GVA는 상기 컴퓨터 시스템의 프로세서 상의 가상 머신(VM)에서 실행되는 게스트 애플리케이션에 의해 맵핑되는 어드레스 공간에 대응하는 것을 특징으로 하는 컴퓨터 시스템의 메모리에 대한 입출력 요청들을 제어하는 방법.
  25. 삭제
  26. 제23항에 있어서,
    상기 제어 로직이 완료된 변환들을 캐시 메모리에 저장하는 것을 더 포함하는 것을 특징으로 하는 컴퓨터 시스템의 메모리에 대한 입출력 요청들을 제어하는 방법.
  27. 삭제
  28. 삭제
  29. 컴퓨터 시스템 상에서 실행가능한 프로그램에 의해 운용되는 데이터 구조를 포함하는 컴퓨터 판독가능 저장 매체로서, 상기 프로그램은, 상기 데이터 구조에 의해 기술되는 회로가 포함된 집적 회로를 제조하는 프로세스의 일부를 수행하기 위해, 상기 데이터 구조를 운용하고, 상기 데이터 구조에서 기술되는 회로는,
    메모리에 저장된 변환 데이터를 이용하여 I/O 디바이스에 의해 발생된 요청과 관련된 어드레스를 변환하기 위해 2-레벨 게스트 변환을 수행하도록 되어 있는 제어 로직을 포함하고,
    상기 변환 데이터는,
    디바이스 테이블에서의 하나 이상의 디바이스 테이블 엔트리들과, 그리고
    게스트 페이지 테이블들의 세트 및 네스티드 페이지 테이블들의 세트를 포함하는 페이지 테이블들의 제 1 세트를 포함하고,
    여기서, 소정의 요청에 대한 디바이스 테이블 엔트리는 디바이스 식별자에 근거하여 선택되며,
    소정의 요청에 대한 선택된 디바이스 테이블 엔트리는 게스트 페이지 테이블들의 세트에 대한 포인터를 포함하고, 게스트 페이지 테이블은 네스티드 페이지 테이블들의 세트에 대한 포인터를 포함하며,
    상기 게스트 페이지 테이블들의 세트에 대한 포인터는 시스템 물리적 어드레스(SPA)를 포함하고, 상기 SPA는 컴퓨터 시스템의 프로세서에서 실행되는 가상 메모리 모니터(VMM)에 의해 맵핑되는 어드레스 공간에 대응하며, 상기 메모리에서의 물리적 메모리 페이지에 액세스하기 위해 소정의 SPA가 사용되며, 그리고
    상기 네스티드 페이지 테이블들의 세트에 대한 포인터는 게스트 물리적 어드레스(GPA)를 포함하고, 상기 GPA는 상기 컴퓨터 시스템의 프로세서 상의 가상 머신(VM)에서 실행되는 게스트 운영 체계(guest operating system)에 의해 맵핑되는 어드레스 공간에 대응하며, 상기 제어 로직은 또한, 상기 메모리에서의 물리적 메모리 페이지에 액세스하기 위해 상기 GPA를 SPA로 변환하도록 되어 있는 것을 특징으로 하는 컴퓨터 판독가능 저장 매체.
  30. 입출력 메모리 관리 유닛(IOMMU)으로서,
    상기 입출력 메모리 관리 유닛(IOMMU)은, 메모리에 저장된 변환 데이터를 이용하여 I/O 디바이스에 의해 발생된 요청과 관련된 게스트 어드레스를 변환하기 위해 복수-레벨의 계층적 변환(multi-level hierarchical translation)을 수행하도록 되어 있는 제어 로직을 포함하고,
    상기 게스트 어드레스는, 프로세서 상의 게스트 가상 머신에서 실행되는 게스트 애플리케이션에 의해 맵핑되는 게스트 가상 어드레스 공간에 대응하며,
    상기 변환 데이터는,
    디바이스 데이터 구조에서의 하나 이상의 디바이스 테이블 엔트리들과, 그리고
    게스트 페이지 데이터 구조들의 세트 및 네스티드 페이지 데이터 구조들의 세트를 포함하는 페이지 데이터 구조들의 제 1 세트를 포함하고,
    상기 제어 로직은 또한,
    상기 요청을 발생시키는 I/O 디바이스에 대응하는 디바이스 식별자에 근거하여 소정의 요청에 대한 디바이스 데이터 구조 엔트리를 선택하고;
    선택된 디바이스 데이터 구조 엔트리로부터의 포인터를 사용하여 게스트 변환 데이터 구조들의 세트에 액세스하고; 그리고
    네스티드 페이지 데이터 구조들의 세트에 액세스하기 위해 게스트 페이지 데이터 구조로부터의 포인터를 사용하도록 되어 있으며,
    게스트 페이지 테이블들의 세트에 대한 포인터는 시스템 물리적 어드레스(SPA)를 포함하고, 상기 SPA는 컴퓨터 시스템의 프로세서에서 실행되는 가상 메모리 모니터(VMM)에 의해 맵핑되는 어드레스 공간에 대응하며, 상기 메모리에서의 물리적 메모리 페이지에 액세스하기 위해 소정의 SPA가 사용되며, 그리고
    네스티드 페이지 테이블들의 세트에 대한 포인터는 게스트 물리적 어드레스(GPA)를 포함하고, 상기 GPA는 상기 컴퓨터 시스템의 프로세서 상의 가상 머신(VM)에서 실행되는 게스트 운영 체계(guest operating system)에 의해 맵핑되는 어드레스 공간에 대응하며, 상기 제어 로직은 또한, 상기 메모리에서의 물리적 메모리 페이지에 액세스하기 위해 상기 GPA를 SPA로 변환하도록 되어 있는 것을 특징으로 하는 입출력 메모리 관리 유닛.
KR1020127004960A 2009-07-24 2010-07-24 I/o 및 계산 오프로드를 위해 복수레벨 어드레스 변환을 포함하는 i/o 메모리 관리 유닛 KR101614865B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/508,882 US8386745B2 (en) 2009-07-24 2009-07-24 I/O memory management unit including multilevel address translation for I/O and computation offload
US12/508,882 2009-07-24

Publications (2)

Publication Number Publication Date
KR20120044369A KR20120044369A (ko) 2012-05-07
KR101614865B1 true KR101614865B1 (ko) 2016-04-29

Family

ID=43012690

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127004960A KR101614865B1 (ko) 2009-07-24 2010-07-24 I/o 및 계산 오프로드를 위해 복수레벨 어드레스 변환을 포함하는 i/o 메모리 관리 유닛

Country Status (7)

Country Link
US (1) US8386745B2 (ko)
EP (1) EP2457166B1 (ko)
JP (1) JP2013500525A (ko)
KR (1) KR101614865B1 (ko)
CN (1) CN102473139B (ko)
IN (1) IN2012DN00934A (ko)
WO (1) WO2011011769A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11042394B2 (en) 2017-10-13 2021-06-22 Electronics And Telecommunications Research Institute Method for processing input and output on multi kernel system and apparatus for the same

Families Citing this family (94)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9606936B2 (en) * 2010-12-16 2017-03-28 Advanced Micro Devices, Inc. Generalized control registers
WO2012103253A2 (en) * 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103245A2 (en) 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
KR101612594B1 (ko) 2011-01-27 2016-04-14 소프트 머신즈, 인크. 프로세서의 변환 룩 어사이드 버퍼를 이용하는 게스트 명령-네이티브 명령 레인지 기반 매핑
WO2012103373A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Variable caching structure for managing physical storage
US8943296B2 (en) 2011-04-28 2015-01-27 Vmware, Inc. Virtual address mapping using rule based aliasing to achieve fine grained page translation
US9767039B2 (en) 2011-07-18 2017-09-19 Vmware, Inc. Increasing granularity of dirty bit information in hardware assisted memory management systems
US9916257B2 (en) * 2011-07-26 2018-03-13 Intel Corporation Method and apparatus for TLB shoot-down in a heterogeneous computing system supporting shared virtual memory
US20130042238A1 (en) 2011-08-12 2013-02-14 International Business Machines Corporation Optimized Virtual Function Translation Entry Memory Caching
US8954704B2 (en) 2011-08-12 2015-02-10 International Business Machines Corporation Dynamic network adapter memory resizing and bounding for virtual function translation entry storage
US8645663B2 (en) * 2011-09-12 2014-02-04 Mellanox Technologies Ltd. Network interface controller with flexible memory handling
US8631212B2 (en) * 2011-09-25 2014-01-14 Advanced Micro Devices, Inc. Input/output memory management unit with protection mode for preventing memory access by I/O devices
US8719464B2 (en) * 2011-11-30 2014-05-06 Advanced Micro Device, Inc. Efficient memory and resource management
US9378150B2 (en) 2012-02-28 2016-06-28 Apple Inc. Memory management unit with prefetch ability
US9081507B2 (en) * 2012-03-14 2015-07-14 Symantec Corporation Shared storage access management systems and methods
US9507639B2 (en) * 2012-05-06 2016-11-29 Sandisk Technologies Llc Parallel computation with multiple storage devices
US9256545B2 (en) 2012-05-15 2016-02-09 Mellanox Technologies Ltd. Shared memory access using independent memory maps
US8761189B2 (en) 2012-06-28 2014-06-24 Mellanox Technologies Ltd. Responding to dynamically-connected transport requests
US8938602B2 (en) * 2012-08-02 2015-01-20 Qualcomm Incorporated Multiple sets of attribute fields within a single page table entry
US9424199B2 (en) 2012-08-29 2016-08-23 Advanced Micro Devices, Inc. Virtual input/output memory management unit within a guest virtual machine
US8745276B2 (en) 2012-09-27 2014-06-03 Mellanox Technologies Ltd. Use of free pages in handling of page faults
US8914458B2 (en) 2012-09-27 2014-12-16 Mellanox Technologies Ltd. Look-ahead handling of page faults in I/O operations
US9639464B2 (en) 2012-09-27 2017-05-02 Mellanox Technologies, Ltd. Application-assisted handling of page faults in I/O operations
US9298642B2 (en) 2012-11-01 2016-03-29 Mellanox Technologies Ltd. Sharing address translation between CPU and peripheral devices
US10380030B2 (en) * 2012-12-05 2019-08-13 Arm Limited Caching of virtual to physical address translations
DE102013022169A1 (de) 2013-03-14 2014-09-18 Nvidia Corporation Fehlerpuffer zur verfolgung von seitenfehlern in einem vereinheitlichten virtuellen speichersystem
US9767036B2 (en) * 2013-03-14 2017-09-19 Nvidia Corporation Page state directory for managing unified virtual memory
CN105122206B (zh) 2013-03-15 2018-11-09 英特尔公司 用于支持推测的访客返回地址栈仿真的方法和装置
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
US10324863B2 (en) 2013-06-24 2019-06-18 Intel Corporation Protected memory view for nested page table access by virtual machine guests
US10229043B2 (en) * 2013-07-23 2019-03-12 Intel Business Machines Corporation Requesting memory spaces and resources using a memory controller
US9547603B2 (en) * 2013-08-28 2017-01-17 Wisconsin Alumni Research Foundation I/O memory management unit providing self invalidated mapping
US9436823B1 (en) * 2013-12-17 2016-09-06 Google Inc. System and method for detecting malicious code
CN104750623B (zh) * 2013-12-31 2017-11-24 华为技术有限公司 一种内存虚拟化的方法及装置
US10642501B1 (en) * 2014-01-10 2020-05-05 MIPS Tech, LLC Hardware virtualized input output memory management unit
US10114760B2 (en) * 2014-01-14 2018-10-30 Nvidia Corporation Method and system for implementing multi-stage translation of virtual addresses
US9852100B2 (en) 2014-02-26 2017-12-26 Red Hat Israel, Ltd. Guest-programmable location of advanced configuration and power interface (ACPI) tables in virtualized systems
US9727503B2 (en) 2014-03-17 2017-08-08 Mellanox Technologies, Ltd. Storage system and server
US9696942B2 (en) 2014-03-17 2017-07-04 Mellanox Technologies, Ltd. Accessing remote storage devices using a local bus protocol
FR3019919B1 (fr) * 2014-04-14 2016-05-06 Inria Inst Nat De Rech En Informatique Et En Automatique Procede de synthese automatique de circuits, dispositif et programme d'ordinateur associes
US10031857B2 (en) 2014-05-27 2018-07-24 Mellanox Technologies, Ltd. Address translation services for direct accessing of local memory over a network fabric
US10120832B2 (en) 2014-05-27 2018-11-06 Mellanox Technologies, Ltd. Direct access to local memory in a PCI-E device
US9710381B2 (en) 2014-06-18 2017-07-18 International Business Machines Corporation Method and apparatus for cache memory data processing
KR102218715B1 (ko) * 2014-06-19 2021-02-23 삼성전자주식회사 채널별로 데이터를 보호할 수 있는 반도체 장치
GB201415796D0 (en) * 2014-09-07 2014-10-22 Technion Res & Dev Foundation Logical-to-physical block mapping inside the disk controller: accessing data objects without operating system intervention
US11775443B2 (en) * 2014-10-23 2023-10-03 Hewlett Packard Enterprise Development Lp Supervisory memory management unit
US9619401B2 (en) * 2015-02-20 2017-04-11 Wisconsin Alumni Research Foundation Efficient memory management system for computers supporting virtual machines
US9710393B2 (en) 2015-06-25 2017-07-18 Intel Corporation Dynamic page table edit control
US9665373B2 (en) 2015-06-26 2017-05-30 Intel Corporation Protecting confidential data with transactional processing in execute-only memory
US10063376B2 (en) 2015-10-01 2018-08-28 International Business Machines Corporation Access control and security for synchronous input/output links
US10120818B2 (en) 2015-10-01 2018-11-06 International Business Machines Corporation Synchronous input/output command
JP6579916B2 (ja) * 2015-10-28 2019-09-25 株式会社日立製作所 仮想計算機間の通信経路制御方法および計算機システム
GB2545170B (en) * 2015-12-02 2020-01-08 Imagination Tech Ltd GPU virtualisation
US9424155B1 (en) * 2016-01-27 2016-08-23 International Business Machines Corporation Use efficiency of platform memory resources through firmware managed I/O translation table paging
US20170220466A1 (en) * 2016-01-30 2017-08-03 Intel Corporation Sharing a guest physical address space among virtualized contexts
US10515023B2 (en) * 2016-02-29 2019-12-24 Intel Corporation System for address mapping and translation protection
US10671419B2 (en) 2016-02-29 2020-06-02 Red Hat Israel, Ltd. Multiple input-output memory management units with fine grained device scopes for virtual machines
US10037288B2 (en) * 2016-04-01 2018-07-31 Intel Corporation Memory protection at a thread level for a memory protection key architecture
US9898227B2 (en) 2016-04-27 2018-02-20 International Business Machines Corporation Synchronous input/output virtualization
US10148581B2 (en) 2016-05-30 2018-12-04 Mellanox Technologies, Ltd. End-to-end enhanced reliable datagram transport
CN106155933B (zh) * 2016-07-06 2019-02-05 乾云众创(北京)信息科技研究院有限公司 一种基于KSM及Pass-through相结合的虚拟机内存共享方法
US10048881B2 (en) * 2016-07-11 2018-08-14 Intel Corporation Restricted address translation to protect against device-TLB vulnerabilities
US10209900B2 (en) * 2016-09-19 2019-02-19 Fungible, Inc. Buffer allocation and memory management using mapping table
CN106502721B (zh) * 2016-09-26 2019-11-15 华为技术有限公司 一种命令卸载方法、装置及物理机
WO2018176360A1 (en) * 2017-03-31 2018-10-04 Intel Corporation Scalable interrupt virtualization for input/output devices
US10534719B2 (en) * 2017-07-14 2020-01-14 Arm Limited Memory system for a data processing network
US10592424B2 (en) 2017-07-14 2020-03-17 Arm Limited Range-based memory system
US10353826B2 (en) 2017-07-14 2019-07-16 Arm Limited Method and apparatus for fast context cloning in a data processing system
US10467159B2 (en) * 2017-07-14 2019-11-05 Arm Limited Memory node controller
US10565126B2 (en) 2017-07-14 2020-02-18 Arm Limited Method and apparatus for two-layer copy-on-write
US10613989B2 (en) 2017-07-14 2020-04-07 Arm Limited Fast address translation for virtual machines
US10489304B2 (en) 2017-07-14 2019-11-26 Arm Limited Memory address translation
WO2019124450A1 (ja) * 2017-12-20 2019-06-27 日本電気株式会社 入出力実行装置、デバイス仮想化システム、入出力実行方法、および、記録媒体
CN110096457B (zh) * 2018-01-31 2023-05-23 联发科技股份有限公司 硬件控制系统及硬件控制方法
CN110134325A (zh) * 2018-02-09 2019-08-16 晨星半导体股份有限公司 存储器控制装置及存储器控制方法
US10884850B2 (en) 2018-07-24 2021-01-05 Arm Limited Fault tolerant memory system
US11243891B2 (en) 2018-09-25 2022-02-08 Ati Technologies Ulc External memory based translation lookaside buffer
US10769076B2 (en) 2018-11-21 2020-09-08 Nvidia Corporation Distributed address translation in a multi-node interconnect fabric
US11036649B2 (en) 2019-04-04 2021-06-15 Cisco Technology, Inc. Network interface card resource partitioning
US11226904B2 (en) 2019-04-26 2022-01-18 Hewlett Packard Enterprise Development Lp Cache data location system
US10909053B2 (en) * 2019-05-27 2021-02-02 Advanced Micro Devices, Inc. Providing copies of input-output memory management unit registers to guest operating systems
US10853263B1 (en) 2019-07-23 2020-12-01 Ati Technologies Ulc Unified kernel virtual address space for heterogeneous computing
GB2594258B (en) 2020-04-20 2022-07-20 Advanced Risc Mach Ltd Variable nesting control parameter for table structure providing access control information for controlling access to a memory system
US11461299B2 (en) 2020-06-30 2022-10-04 Hewlett Packard Enterprise Development Lp Key-value index with node buffers
US11556513B2 (en) 2020-06-30 2023-01-17 Hewlett Packard Enterprise Development Lp Generating snapshots of a key-value index
US11461240B2 (en) 2020-10-01 2022-10-04 Hewlett Packard Enterprise Development Lp Metadata cache for storing manifest portion
US20240020241A1 (en) * 2020-12-24 2024-01-18 Intel Corporation Apparatus and method for address pre-translation to enhance direct memory access by hardware subsystems
US11940933B2 (en) 2021-03-02 2024-03-26 Mellanox Technologies, Ltd. Cross address-space bridging
US11934658B2 (en) 2021-03-25 2024-03-19 Mellanox Technologies, Ltd. Enhanced storage protocol emulation in a peripheral device
US11934333B2 (en) 2021-03-25 2024-03-19 Mellanox Technologies, Ltd. Storage protocol emulation in a peripheral device
US11726666B2 (en) 2021-07-11 2023-08-15 Mellanox Technologies, Ltd. Network adapter with efficient storage-protocol emulation
CN114201269B (zh) * 2022-02-18 2022-08-26 阿里云计算有限公司 内存换页方法、系统及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070168643A1 (en) * 2006-01-17 2007-07-19 Hummel Mark D DMA Address Translation in an IOMMU
US20090187697A1 (en) * 2008-01-22 2009-07-23 Serebrin Benjamin C Execute-Only Memory and Mechanism Enabling Execution From Execute-Only Memory for Minivisor

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04308953A (ja) * 1991-04-05 1992-10-30 Kyocera Corp 仮想アドレス計算機装置
US6856420B1 (en) * 2000-07-31 2005-02-15 Hewlett-Packard Development Company, L.P. System and method for transferring data within a printer
US7444493B2 (en) 2004-09-30 2008-10-28 Intel Corporation Address translation for input/output devices using hierarchical translation tables
US8843727B2 (en) * 2004-09-30 2014-09-23 Intel Corporation Performance enhancement of address translation using translation tables covering large address spaces
US7428626B2 (en) * 2005-03-08 2008-09-23 Microsoft Corporation Method and system for a second level address translation in a virtual machine environment
WO2006127613A2 (en) * 2005-05-24 2006-11-30 Marathon Technologies Corporation Symmetric multiprocessor fault tolerant computer system
US7225287B2 (en) 2005-06-01 2007-05-29 Microsoft Corporation Scalable DMA remapping on a computer bus
US7543131B2 (en) 2005-08-12 2009-06-02 Advanced Micro Devices, Inc. Controlling an I/O MMU
US7793067B2 (en) 2005-08-12 2010-09-07 Globalfoundries Inc. Translation data prefetch in an IOMMU
US7548999B2 (en) 2006-01-17 2009-06-16 Advanced Micro Devices, Inc. Chained hybrid input/output memory management unit
US7734842B2 (en) * 2006-03-28 2010-06-08 International Business Machines Corporation Computer-implemented method, apparatus, and computer program product for managing DMA write page faults using a pool of substitute pages
US7636800B2 (en) * 2006-06-27 2009-12-22 International Business Machines Corporation Method and system for memory address translation and pinning
US7873770B2 (en) 2006-11-13 2011-01-18 Globalfoundries Inc. Filtering and remapping interrupts
US7849287B2 (en) 2006-11-13 2010-12-07 Advanced Micro Devices, Inc. Efficiently controlling special memory mapped system accesses
US7707383B2 (en) * 2006-11-21 2010-04-27 Intel Corporation Address translation performance in virtualized environments
JP4852012B2 (ja) * 2007-07-09 2012-01-11 株式会社東芝 画像を処理する装置、画像の更新を検出する方法およびプログラム
US8045828B2 (en) * 2007-07-09 2011-10-25 Kabushiki Kaisha Toshiba Apparatus for processing images, and method and computer program product for detecting image updates
US8607013B2 (en) * 2007-10-30 2013-12-10 Vmware, Inc. Providing VMM access to guest virtual memory
US8055827B2 (en) * 2009-01-26 2011-11-08 Advanced Micro Devices, Inc. Guest interrupt controllers for each processor to aid interrupt virtualization
US9535849B2 (en) * 2009-07-24 2017-01-03 Advanced Micro Devices, Inc. IOMMU using two-level address translation for I/O and computation offload devices on a peripheral interconnect
US8244978B2 (en) * 2010-02-17 2012-08-14 Advanced Micro Devices, Inc. IOMMU architected TLB support

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070168643A1 (en) * 2006-01-17 2007-07-19 Hummel Mark D DMA Address Translation in an IOMMU
US20090187697A1 (en) * 2008-01-22 2009-07-23 Serebrin Benjamin C Execute-Only Memory and Mechanism Enabling Execution From Execute-Only Memory for Minivisor

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11042394B2 (en) 2017-10-13 2021-06-22 Electronics And Telecommunications Research Institute Method for processing input and output on multi kernel system and apparatus for the same

Also Published As

Publication number Publication date
EP2457166B1 (en) 2018-08-22
US8386745B2 (en) 2013-02-26
CN102473139B (zh) 2015-05-20
US20110023027A1 (en) 2011-01-27
EP2457166A1 (en) 2012-05-30
JP2013500525A (ja) 2013-01-07
IN2012DN00934A (ko) 2015-04-03
WO2011011769A1 (en) 2011-01-27
CN102473139A (zh) 2012-05-23
KR20120044369A (ko) 2012-05-07

Similar Documents

Publication Publication Date Title
KR101614865B1 (ko) I/o 및 계산 오프로드를 위해 복수레벨 어드레스 변환을 포함하는 i/o 메모리 관리 유닛
KR101575827B1 (ko) 주변장치 상호연결에서 i/o 및 계산 오프로드 디바이스들을 위해 2-레벨 어드레스 변환을 사용하는 iommu
US7809923B2 (en) Direct memory access (DMA) address translation in an input/output memory management unit (IOMMU)
US7917726B2 (en) Using an IOMMU to create memory archetypes
US7882330B2 (en) Virtualizing an IOMMU
US7873770B2 (en) Filtering and remapping interrupts
US7849287B2 (en) Efficiently controlling special memory mapped system accesses
KR101471108B1 (ko) I/o 디바이스에 의해 메모리에 액세스하는 것을 금지하는 보호 모드를 갖는 입력/출력 메모리 관리 유닛
JP4772795B2 (ja) 大アドレス容量に及ぶ変換テーブルを用いた、アドレス変換の性能向上
US20130080714A1 (en) I/o memory translation unit with support for legacy devices
US9720773B2 (en) Managing reuse information in caches
US20160259732A1 (en) Managing reuse information for memory pages
US10013360B2 (en) Managing reuse information with multiple translation stages
US9471509B2 (en) Managing address-independent page attributes
WO2023064590A1 (en) Software indirection level for address translation sharing

Legal Events

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