KR101017451B1 - 그래픽 데이터의 메모리 어드레스 리맵핑을 위한 장치 및 방법 - Google Patents

그래픽 데이터의 메모리 어드레스 리맵핑을 위한 장치 및 방법 Download PDF

Info

Publication number
KR101017451B1
KR101017451B1 KR1020087030723A KR20087030723A KR101017451B1 KR 101017451 B1 KR101017451 B1 KR 101017451B1 KR 1020087030723 A KR1020087030723 A KR 1020087030723A KR 20087030723 A KR20087030723 A KR 20087030723A KR 101017451 B1 KR101017451 B1 KR 101017451B1
Authority
KR
South Korea
Prior art keywords
graphics
memory
vmm
data
virtual machine
Prior art date
Application number
KR1020087030723A
Other languages
English (en)
Other versions
KR20090026286A (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 KR20090026286A publication Critical patent/KR20090026286A/ko
Application granted granted Critical
Publication of KR101017451B1 publication Critical patent/KR101017451B1/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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4403Processor initialisation
    • 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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • 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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/152Virtualized environment, e.g. logically partitioned system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Controls And Circuits For Display Device (AREA)
  • Image Input (AREA)

Abstract

가상 기계를 지원하기 위한 가상 기계 모니터를 구현하는 컴퓨팅 환경의 그래픽 데이터 직접 메모리 액세스(DMA) 요청의 GPA를 트랜슬레이팅하기 위한, 게스트 물리적 어드레스(GPA) 대 호스트 물리적 어드레스(HPA) 새도우 트랜슬레이션 테이블들을 생성, 업데이트 및 사용하는 방법 및 장치가 개시된다. 이 요청은, 가상 기계 모니터에 대하여 투명하게, 하나 이상의 가상 기계로부터 컴퓨팅 환경의 렌더 혹은 디스플레이 경로를 통해 전송될 수 있다. 이러한 생성, 업데이트 및 사용은, 기존의 글로벌 및 페이지 디렉토리 테이블로 전송되는 엔트리들을 검출하고 검출된 엔트리들로부터 새도우 테이블 엔트리들을 포킹 오프하고 GPA들을 새도우 테이블 엔트리들을 위한 HPA들로 변환하는 메모리 컨트롤러에 의해 수행될 수 있다.
가상 기계, 게스트 물리적 어드레스, 호스트 물리적 어드레스, 트랜슬레이팅, 새도우 테이블 엔트리

Description

그래픽 데이터의 메모리 어드레스 리맵핑을 위한 장치 및 방법{AN APPARATUS AND METHOD FOR MEMORY ADDRESS RE-MAPPING OF GRAPHICS DATA}
가상 기계 아키텍처(virtual machine architecture)는 물리적 기계를 논리적으로 파티셔닝(partitioning)하여, 그 기계의 기초 하드웨어가 시간 공유되고 독립적으로 동작하는 하나 이상의 가상 기계(virtual machine; VM)처럼 보이게 한다. 가상 기계 모니터(virtual machine monitor; VMM)는 컴퓨터 상에서 동작하여 다른 소프트웨어에 대해 하나 이상의 VM의 앱스트랙션(abstraction)을 용이하게 해준다. 각 VM은 자급식 플랫폼(self-contained platform)으로서 기능하여 자신의 운영 체제(OS) 및 애플리케이션 소프트웨어를 실행시킬 수 있다. VM에서 실행되는 소프트웨어를, 본원에서는 집합적으로 "게스트 소프트웨어(guest software)"로 칭한다.
VMM 환경은, 실제 시스템 상에서 실행되는 소프트웨어가 게스트 소프트웨어에 대한 가상 시스템 또는 VM의 거의 완벽한 에뮬레이션을 제공할 수 있게 해주는 하드웨어 및 시스템-제어 인스트럭션들을 제공한다. 이러한 환경의 이점에는, 예를 들면 하나의 물리적 기계 상에서 다수의 운영 체제를 실행시킬 수 있는 능력; CPU 및 하드웨어 자원 활용의 개선이 포함된다.
가상화 기술은, 플랫폼이 하나의 기계 혹은 컴퓨팅 시스템(혹은 환경) 상에서의 다수의 파티션들(partitions)의 실행을 지원할 수 있게 해준다. 이들 파티션 들은 서로 분리되어 있어서, 견고성이 증가한다는 이점을 제공한다. 이 파티션들은, 메모리 등의, 플랫폼 자원의 "리얼 뷰(real view)"를 갖는 소프트웨어 가상화 계층으로 표현될 수 있는, VMM의 상부 상에서 실행된다. 따라서, 이 메모리의 리얼 뷰는 "호스트 물리적 어드레스들(host physical addresses)" 또는 HPA들(예를 들면, 호스트 어드레스들)로서 표현될 수 있다. 각 파티션 혹은 VM은, "게스트 물리적 어드레스들(guest physical addresses)" 또는 "GPA"로서 표현될 수 있는 메모리의 "가상화 뷰(virtualized view)"를 갖는다.
게스트 소프트웨어는 VM에서가 아니라 전용 컴퓨터 상에서 실행되는 것처럼 동작하기를 기대한다. 즉, 게스트 소프트웨어는, 각종 이벤트들을 제어하고 컴퓨터(예를 들면, 물리적 기계) 상의 하드웨어 자원들로의 액세스 권한을 가질 것을 기대한다. 물리적 기계의 하드웨어 자원들은, 하나 이상의 프로세서, 프로세서들 상에 상주하는 자원들(예를 들면, 제어 레지스터들, 캐시들 및 그 밖의 것들), 메모리(예를 들면, 그래픽 인스트럭션들 및/또는 데이터 등의, 어드레스에서의 메모리에 상주하는 인스트럭션들 및/또는 데이터), 그래픽 디바이스들 및/또는 컨트롤러들(예를 들면, 그래픽 회로들, 그래픽 칩셋들, 그래픽 카드들 등), 및 물리적 기계 내에 상주하는 그 밖의 자원들(예를 들면, 입/출력 디바이스들)을 포함할 수 있다. 이벤트들에는, VMM 환경에서 그래픽 이미지를 디스플레이하기 위한, 그래픽 데이터의 렌더링 및 디스플레잉(displaying)이 포함될 수 있다. 이러한 이미지에는 화소 이미지, 인코딩된 이미지, 비디오 이미지 또는 프레임, 정적 이미지, 포토 이미지, 애니메이팅된 이미지, 영화 등이 포함될 수 있다.
따라서, VMM은, 하나 이상의 VM의 앱스트랙션을 다른 소프트웨어("게스트 소프트웨어", "게스트들" 또는 단순히 "게스트")에게 제공한다. VMM은 동일하거나 혹은 서로 다른 앱스트랙션을 각종 게스트들에게 제공할 수 있다. 각 게스트는, 그 사용이 가능해지는, VM에 제공되는 하드웨어 플랫폼의 완전한 설비를 기대한다. 예를 들면, 게스트는, VM 내에 제공되는 프로세서 및 플랫폼의 아키텍처에 따라 모든 레지스터들, 캐시들, 구조체들, I/O 디바이스들, 메모리, 그래픽 디바이스들/컨트롤러들 등에 대한 액세스 권한을 가질 것을 기대한다. 또한, 각 게스트는, VMM이 예를 들어 게스트의 그래픽 인스트럭션들(예를 들어 그래픽 주소들을 포함함) 및/또는 데이터를 처리하여 디스플레이 또는 모니터 상에 그래픽 이미지들을 디스플레이함으로써 각종 이벤트들을 처리할 것을 기대할 수 있다.
예를 들어, 몇몇 경우에서는 VMM은 입/출력(I/O) 디바이스 지원을 위해 디바이스들의 가상화에 의존할 수 있다. 통상적으로, I/O 디바이스들은 VMM에 의해 가상화되며, VMM은 플랫폼 상의 실제 하드웨어를 직접 제어한다. 이들 경우에, VMM은, VM에 노출되는 I/O 디바이스들을 에뮬레이팅한다. VMM은 하드웨어와 직접 통신하기 때문에, VMM은 지원되는 모든 디바이스들에 대한 드라이버들을 캐링(carrying)한다. 모든 드라이버들을 캐링하는 것으로 인해 VMM 코드 또는 소프트웨어가, 바람직하지 못하게 방대한 양의 코드를 블로팅(bloat)하거나 혹은 가지게 되어 복잡성이 증가하게 된다.
본 발명의 각종 실시예들은, 첨부된 도면 내에서 예로서 예시되는 것이며 이 에 제한되는 것은 아니다.
도 1A는 일 실시예에 따른, 가상화된 환경에서의 통합된 그래픽 렌더 경로를 나타낸 블럭도.
도 1B는 일 실시예에 따른, 가상화된 환경에서의 개별적인 그래픽 렌더 경로를 나타낸 블럭도.
도 2는 통합된 그래픽 디바이스 또는 개별적인 그래픽 컨트롤러 환경에 따른, 메모리 내의 어드레스에 저장되고 디스플레이 또는 모니터 상에 디스플레이하기 위한 그래픽 데이터를 나타낸 블럭도.
도 3은 일 실시예에 따른, 개선된 스케줄러 모델에서의 그래픽 데이터 경로를 나타낸 블럭도.
도 4는 일 실시예에 따른, 직접 메모리 액세스(direct memory access; DMA) 리맵핑 3 레벨 워크(walk)를 나타낸 블럭도.
도 5는 일 실시예에 따른, 3 레벨 워크를 이용한, VMM에서의 그래픽 데이터 경로들을 나타낸 블럭도.
도 6A는 일 실시예에 따른, 가상 기계 모니터(VMM) 환경 내의 통합된 그래픽 디바이스를 나타낸 블럭도.
도 6B는 일 실시예에 따른, 가상 기계 모니터(VMM) 환경 내의 개별적인 그래픽 디바이스를 나타낸 블럭도.
도 7은 일 실시예에 따른, 새도우(shadow) 글로벌 게스트 트랜슬레이션 테이블(GTT)을 생성하기 위한 환경을 나타낸 블럭도.
도 8은 새도우 글로벌 GTT를 생성하기 위한 프로세스의 흐름도.
도 9는 일 실시예에 따른, 새도우 게스트 퍼 프로세스 페이지 디스플레이(per process page display; PPPD)를 생성하기 위한 환경을 나타낸 블럭도.
도 10은 일 실시예에 따른, 새도우 게스트 PPPD를 생성하기 위한 프로세스의 흐름도.
도 11은 새도우 테이블들을 유지하기 위한 환경의 블럭도.
도 12는 일 실시예에 따른, 그래픽 렌더 및 디스플레이 데이터 경로들을 나타낸 블럭도.
도 13은 일 실시예에 따른 그래픽 디스플레이 경로 업데이트 및 디스플레이 경로를 나타낸 블럭도.
도 14는 일 실시예에 따른 그래픽 렌더 경로 업데이트 및 렌더 경로를 나타낸 블럭도.
본 발명의 하나 이상의 실시예는 일반적으로 컴퓨터 시스템 설계와 관련된다. 보다 구체적으로는, 실시예들의 하나 이상은, 가상화된 환경에서 그래픽 이미지들을 디스플레이하기 위해 그래픽 데이터를 렌더링하고 디스플레이하는 방법 및 장치와 관련된다. 예를 들면, 전술한 바와 같이, VMM이, VM들에 노출되는 IO 디바이스들을 에뮬레이팅하고, VMM이, 지원되는 모든 디바이스들에 대한 드라이버들을 캐링하는 경우, 모든 드라이버들을 캐링하는 것은, VMM 코드 또는 소프트웨어가 바람직하지 못하게 방대한 양의 코드를 블로팅하거나 가지게 하여 복잡성이 증가될 수 있다. 인텔사(미국 캘리포니아주의 산타클라라 소재의 인텔사)는, 게스트 VM들이 IO 디바이스들을 직접 구동시켜서 VMM(예를 들어, 인텔의 VT-d 기술 - Intel ® Virualization Technology for Directed I/O Architecture Specification, Intel Corporation, published February 2006, Order Number: D51397-001 참조)으로부터 드라이버들을 제거할 수 있게 해주는 것을 지원하는 통제된 입/출력(IO) 아키텍처를 위한 가상화 기술을 개발하였다.
따라서, 본원에서의 설명은, 각 게스트 애플리케이션의 그래픽 인스트럭션들(예를 들어, 그래픽 어드레스들을 포함함) 및 데이터에 따라 다수의 가상 기계들 상에서 실행되는 다수의 게스트 애플리케이션들의 그래픽 이미지들을 디스플레이하기 위한 방법들 및 장치들을 포함한다. 예를 들면, 그래픽 가상 기계(VM)(이는 VM 운영 체제, 및 그래픽 VM에서 실행되는 다른 그래픽 애플리케이션 등의 다른 애플리케이션들을 포함할 수 있음), 그래픽 컨트롤러들 및/또는 그래픽 디바이스들은, 예를 들어 게스트의 그래픽 인스트럭션들 및/또는 데이터를 처리하여서 디스플레이 상에 그래픽 이미지들을 디스플레이함으로써 각종 애플리케이션 프로그램 그래픽 요구를 처리하는데에 이용될 수 있다. 게스트의 그래픽 인스트럭션들 및/또는 데이터를 처리하는 것에는, 예를 들어 그래픽 인스트럭션들 및/또는 데이터를 메모리 내의 물리적 어드레스들(예를 들어 물리적 어드레스는 게스트 애플리케이션으로부터의 그래픽 어드레스에 대응함)에 기입하고 그래픽 인스트럭션들 및/또는 데이터를 메모리의 물리적 어드레스들로부터 판독함으로써 그래픽 인스트럭션들 및/또는 데이터에 액세스하는 것이 포함될 수 있다.
이하의 설명에서는, 보다 철저한 이해를 제공하기 위해, 가상 기계 모니터(VMM) 환경 구현물, 신호 및 버스의 크기 및 명칭, 시스템 컴포넌트들, 하드웨어, 프로세서들, 회로, 디바이스들, 그래픽 디바이스들, 그래픽 컨트롤러들, 메모리들, 운영 체제들, VM들의 타입 및 상호관련성, 및 논리적 파티셔닝/통합 선택 사항 등의 수많은 특정 상세사항들이 제시된다. 그러나, 본 기술 분야에 통상의 지식을 가진 자라면, 본 발명은 이러한 특정 상세사항없이도 실시될 수 있음을 알 것이다. 다른 예에서는, 본 발명을 불명확하게 하는 것을 방지하기 위해 제어 구조들 및 게이트 레벨 회로들(예를 들면, 회로)를 상세하게는 도시하지 않았다. 본 기술 분야에 통상의 지식을 가진 자라면, 본원에 포함된 설명을 이용하여 과도한 실험없이도 적절한 논리 회로를 구현할 수 있을 것이다.
이하의 설명에서는, 본 발명의 특징을 기술하기 위해 소정의 용어가 이용된다. 예를 들면, "디바이스", "칩", "칩셋" 및/또는 "회로"라는 용어들은, 하드웨어, 프로세서에 의해 실행될 애플리케이션 프로그램, 컴퓨터 운영 체제, 프로세서에 의해 실행될 인스트럭션들, 및/또는 하나 이상의 기능을 수행하도록 구성된 소프트웨어를 포함하는 기계 판독가능 매체를 나타낼 수 있다. 예를 들면, "디바이스들", "컨트롤러들", 칩", "칩셋", 및/또는 "회로"의 예에는, 전자 하드웨어, 논리 회로, 프로세서들, 메모리, 집적 회로, 칩, 칩셋, "카드", 전자 하드웨어 및/또는 소프트웨어를 갖는 인쇄 회로 기판, 펌웨어, 유한 상태 머신 또는 심지어는 조합 로직이 포함될 수 있지만, 이에 한정되거나 제한되는 것은 아니다. 집적 회로는, 마이크로프로세서, ASIC(application specific integrated circuit), 디지털 신호 처리기, 마이크로-컨트롤러 등과 같은 프로세서의 형태를 취할 수 있다. 몇몇 경우, 본원에서 설명되는 바와 같은 회로, 그래픽 디바이스, 그래픽 컨트롤러, 및/또는 칩셋은, 그래픽 회로, 그래픽 칩셋, 그래픽 카드, 그래픽 메모리, 그래픽 VM, 그래픽 VM 운영 체제, 통합된 그래픽 디바이스, 개별적 그래픽 컨트롤러, 렌더 엔진, 디스플레이 엔진 등일 수 있으며 혹은 이를 포함할 수 있다. 또한, 본원에서 몇몇 경우에, "그래픽 데이터"라는 용어는 그래픽 인스트럭션 및 데이터를 나타내는 데에 이용될 수 있다.
또한, 테이블로 입력되는 엔트리의 액세싱, 수신, 검출, 감지, 또는 그 인식은, 엔트리가 실제로 테이블에 저장되지 않을 때를 포함하여, 테이블로의 엔트리의 입력의 시도 전, 혹은 시도 동안, 혹은 시도 후의, 그 엔트리의 하드웨어 및/또는 소프트웨어 감지를 포함할 수 있다. 몇몇 경우에, 다른 어드레스를 고려하는 하나의 어드레스의 트랜슬레이팅, 변환, 구축, 또는 생성(예를 들면, 그래픽 어드레스(예를 들면, 게스트 애플리케이션으로부터의 인스트럭션 또는 요청 내에 포함된 가상 어드레스)를 GPA 또는 호스트 물리적 어드레스(HPA)로 트랜슬레이팅 혹은 변환하는 것)은, 동일하거나 혹은 관련된 프로세스들, 장치들, 및/또는 시스템들을 나타낼 수 있다. 예를 들면, GPA 또는 HPA는, GPA 또는 HPA와 그래픽 어드레스 간의 관계(예를 들면, 메모리 어드레스 변환)에 따라 그래픽 어드레스로부터 생성, 트랜슬레이팅, 변환, 또는 구축될 수 있다.
도 1A는 일 실시예에 따른, 가상화된 환경에서의 통합된 그래픽 렌더 경로를 나타낸 블럭도이다. 도 1A는, 가상 기계 운영 체제(130), 가상 기계 운영 체 제(140) 및 하드웨어(110)에 결합되거나 혹은 이들 사이에 결합된 가상 기계 모니터(VMM)(120)를 포함하는 VMM 환경(100)을 도시한다. 도 1A는 또한, 하드웨어(110)의 메모리 컨트롤러(115)의 그래픽 디바이스(116)에 결합된 그래픽 VM(150)(이는 VM 운영 체제, 및 그래픽 VM에서 실행되는 다른 그래픽 애플리케이션 등의 다른 애플리케이션을 포함할 수 있음)을 도시한다. 그래픽(또는 "Gfx") VM(150)은, 통제된 IO에 대한 인텔의 가상화 기술에 의해 제공되는 메카니즘을 이용하여(예를 들어, 인텔의 VT-d 기술을 이용하여) Gfx 디바이스(116)를 직접 구동할 수 있다. 디바이스(116)는 그래픽 컨트롤러(예를 들어, 도 1B 및 도 6B의 컨트롤러(118) 참조)의 기능을 수행할 수 있다. 환경(100)은 예를 들어, 데스크탑 컴퓨터, 랩탑 컴퓨터, 핸드헬드 컴퓨팅 디바이스, 퍼스널 컴퓨터(PC), 워크스테이션, 컴퓨터 서버, 네트워크화된 컴퓨터, 전자 기기, 계산 기기 등으로 구현될 수 있다. 또한, 메모리 컨트롤러(115), 또는 본원에 개시되는 다른 메모리 컨트롤러는, 이 환경 또는 컴퓨터의 프로세서(예를 들면, CPU(101))와 동일한 칩 혹은 다른 칩 내에(혹은 그 위에) 있을 수 있다. 몇몇 경우들에서, 메모리 컨트롤러는, 프로세서를 포함하지 않는 칩 또는 칩셋 내에(혹은 그 위에) 있을 수 있다.
통합된 그래픽 경로는, VMM에 액세스하지 않고, 게스트 물리적 어드레스(GPA)를 이용하여 직접 메모리 액세스(DMA) 요청을 발행하고, 메모리 컨트롤러로 하여금 GPA들을 메인 메모리의 물리적 메모리 어드레스들 또는 호스트 물리적 어드레스들(HPA)로 트랜슬레이팅하게 함으로써 그래픽 데이터에 액세스할 수 있는 경로일 수 있다. 예를 들면, 디바이스(116) 및/또는 메모리 컨트롤러(115)는, 그래픽 VM(150)을 이용하거나 액세스하지 않고/않거나 VMM(120)에 액세스하지 않고(예를 들면, 운영 체제들(130, 140)이 VMM(120)을 통해 그래픽 컨트롤러(116)에 액세스하는 동안, 그 요청을 VMM 내의 그래픽 드라이버에 전송하지 않거나 혹은 그래픽 드라이버 기능을 위해 VMM(120)에 액세스하는 일이 없이), 운영 체체(130 및/또는 140)로부터의 직접 메모리 액세스(DMA) 요청의 GPA들을 HPA들로 "독립적으로" 트랜슬레이팅하여 메모리의 물리적 어드레스(예를 들면, 도 2에 도시된 바와 같은, 메모리(360)의 HPA(362))로부터 그래픽 데이터를 직접 액세싱할 수 있다. 따라서, 그래픽 VM(150)은 그래픽 컨트롤러(116)와 통신하여서, VMM(120)에서의 그래픽 드라이버들을 요구하지 않고도, 운영 체제(130, 140)의 그래픽 요구를 만족시킬 수 있다. 통합된 부분은, 메모리 컨트롤러(115)와 함께 통합되거나 혹은 메모리 컨트롤러(115)의 일부로서 통합된, 통합된 그래픽 디바이스(116) 등의 하나 이상의 통합된 그래픽 디바이스를 포함할 수 있다. MC(150)는 메모리 컨트롤러 디바이스 회로를 포함하거나 혹은 메모리 컨트롤러 디바이스 회로로서 표현될 수 있으며, 이하의 도 6A에서 보다 상세히 설명될 수 있다.
하드웨어(110)는 하드웨어 디바이스(112) 및 하나 이상의 추가의 하드웨어 디바이스(예를 들면, 하드웨어 디바이스(114))를 포함한다. 하드웨어(110)는 또한 중앙 처리 장치(CPU)(101) 및 메모리(102)를 포함한다. CPU(101)는 기본 입출력 시스템(BIOS)(103)에 결합된다.
VMM(120)은 직접 구동 및/또는 제어를 행하기 위한 디바이스를 위한 드라이버(122), 및 하나 이상의 다른 드라이버(예를 들면, 드라이버(124))를 포함한다. 운영 체제(130)는 운영 체제 드라이버들(134)을 포함하며, 애플리케이션(132) 등의 하나 이상의 애플리케이션을 실행시킬 수 있다. 마찬가지로, 운영 체제(140)는 운영 체제 드라이버들(144)을 포함하며, 애플리케이션(142) 등의 하나 이상의 애플리케이션을 실행시킬 수 있다.
CPU(101)는, VMM(120)과 VMM(120) 상에서 실행되는 각종 가상 기계들과 그래픽 VM(150)을 지원하는데 필요한 처리를 수행할 수 있는 프로세서 등의 프로세서일 수 있다. CPU(101)는 환경(100)의 중앙 처리 장치(CPU)일 수 있으며, 이에 따라 이 환경의 전체 동작을 제어 및 조정할 수 있다. 소정의 실시예들에서, CPU(101)는, 메모리(102)에 저장된 운영 체제 등의 소프트웨어를 실행시킴으로써 이를 달성한다. CPU(101)의 프로세서는, 하나 이상의 프로그램가능 범용 또는 특수 목적 마이크로프로세서, 디지털 신호 처리기(DSP), 프로그램가능 컨트롤러, ASIC, PLD(programmable logic device) 등, 혹은 이러한 디바이스의 조합일 수 있으며, 혹은 이를 포함할 수 있다. 마찬가지로, 메모리(102)는, 예를 들어 메모리(102)의 어드레스들(예를 들면, HPA들을 이용하여 어드레싱된 어드레스들)에 인스트럭션들 및/또는 데이터를 저장함으로써, CPU(101), 그래픽 VM(150), 디바이스(116), 및/또는 컨트롤러(115) 상에서 동작하고, 이들에 의해 트랜슬레이팅되고, 검출되고, 감지되고, 수신되고/되거나 액세싱될 인스트럭션들 및/또는 데이터를 저장할 수 있다. 메모리(102)는 환경(100)의 "메인 메모리"이거나 혹은 이를 포함할 수 있다. 메모리(102)는, 임의의 형태의 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 플래시 메모리 등, 혹은 이러한 디바이스들의 조합을 나타낸다. 메모리(102)는 RAM, DRAM(dynamic RAM), SDRAM(standard dynamic RAM), DDRRAM(double data rate RAM), 및 DDR2RAM(double data rate version 2 RAM) 등의 각종 유형의 메모리를 포함할 수 있다. 예를 들면, 메모리(102)는, 본 기술 분야에 알려진 바와 같은 메모리 칩들, 집적 회로들, RAM 유형들의 하나 이상의 뱅크일 수 있다. CPU(101)는 어드레스 및 데이터 버스를 통해 메인 메모리(102)에 직접 액세스할 수 있다. 하드웨어(110) 및 디바이스들(112-114)은, 환경(100) 내에 설치될 수 있는, 키보드, 대용량 저장장치 컨트롤러, 네트워크 인터페이스, 마우스, 사운드 카드 등과 같은 물리적 디바이스들을 나타낼 수 있다. BIOS(103)는, 예를 들어 메모리(102) 또는 별개의 비휘발성 메모리(도시하지 않음)에 저장될 수 있는 소프트웨어 인스트럭션들을 나타낼 수 있다.
그래픽 디바이스(116)는, 통합된 그래픽 디바이스(예를 들면, MC(115) 등의 메모리 컨트롤러와 함께 통합되며 그래픽 디스플레이 기능을 수행하는 디바이스)일 수 있다. 또한, 통합된 그래픽은, MC(115)와 디바이스(116) 사이에 "글루 로직(glue logic)", 입/출력 인터페이스들, 및/또는 버스가 없거나 혹은 이들을 배제시킨 시스템 또는 디바이스를 나타낼 수 있다. 몇몇 경우들에서, 디바이스(116)는, (예를 들어, 도 1B 및 도 6B의 컨트롤러(118)에 비해), 개별적인 그래픽 컨트롤러보다 비용이 적게 들고/들거나 더 적은 전자 회로를 포함할 수 있다.
대부분의 실시예들에서, 호스트 하드웨어 물리적 메모리 어드레스들 또는 메모리 내의 물리적 어드레스들(예를 들어, 도 2의 어드레스들(362) 참조))은, 직접 메모리 액세스(DMA)를 이용할 때, 메인 메모리 내의 그래픽 데이터를 액세스하는 데에 이용될 필요가 있다. 이러한 판독 또는 기록은, 메모리에 액세스하는 것 및/또는 메모리에 행해질 엔트리를 검출하는 것(예를 들면, 메모리의 물리적 어드레스들에 데이터를 기록하고 이들로부터 데이터를 판독하는 것)으로서 표현될 수 있으며, 이는 애플리케이션들(132) 중의 하나의 애플리케이션(예를 들면, 가상 기계 내의 애플리케이션)에 따라 행해지거나 혹은 이에 의해 유발될 수 있다. 대부분의 가상화된 환경에서, 디바이스에 의해 발행되는 DMA 요청에서의 어드레스들은, Gfx 어드레스 리맵핑 테이블들(예를 들어, GTT 혹은 GART(Graphics Address Re-Mapping Table))에 의해 GPA들로 트랜슬레이팅되는 그래픽 어드레스들일 것이지만, 만족될 DMA 요청에 대해서는, 디바이스(116)(또는 도 1B 및 도 6B의 컨트롤러(118))에 의해, 이들 GPA들은 HPA들로 트랜슬레이팅되어야 한다.
BIOS 소프트웨어(예를 들면, BIOS(103))는, 예를 들어 시스템 부팅시 혹은 셧다운 상태로부터의 초기화 처리 동안, 휘발성 메모리 구조체가 테스트되고 컨피규어링되기 전에, 초기에 파워 온될 때(혹은 리셋 동작 후), 컴퓨터 시스템(예를 들면, CPU(101)를 통한 환경(100))을 제어한다. 따라서, BIOS는 부팅 시퀀스 동안 본원에서 개시된 바와 같은 트랜슬레이션 테이블들(예를 들면, 새도우 테이블들)의 저장을 위해 메모리(102)의 "숨겨진(hidden)" 혹은 "은밀한(stolen) 부분을 확보할 수 있다.
BIOS 소프트웨어는 비휘발성 메모리 내에 저장되거나 혹은 펌웨어로서 저장될 수 있다. 펌웨어는, 판독 전용 메모리(ROM), 플래시 메모리 등의 비휘발성 메모리 내에 저장되는 프로세서 루틴(예를 들면, 소프트웨어)을 칭한다. 이들 메모 리 구조체는, 전원이 차단된 경우에도 자신에게 저장된 코드를 유지한다. 펌웨어가 비휘발성 메모리에 저장되더라도, 펌웨어는 휘발성 메모리에 카피되거나 새도윙(shadowed)될 수 있다.
애플리케이션들(132)은, 시스템(130)의 제어하에서 로딩 및/또는 실행될 수 있는 프로그램들을 나타낸다. OS 및 드라이버들(134)은 VMM에 의해 제공되는 가상 플랫폼과 인터페이싱한다. 몇몇 경우들에서, 드라이버들(134)은, 시스템(130)으로 하여금 이들이 실제의 비가상 시스템(예를 들면, 물리적 시스템)처럼 동작하는 것을 가상으로 허용하는, CPU, 메모리 및 하드웨어를 포함하거나 그래픽 디바이스 및 하드웨어를 포함하는 기계 등의 가상 기계를 VMM(120)이 나타내거나 제공하는 운영 체제 그래픽 드라이버일 수 있다.
마찬가지로, 애플리케이션들(142)은, 시스템(140)의 제어 하에서 로딩 및/또는 실행될 수 있는 프로그램들을 나타낸다. 애플리케이션들(132, 142)에 대한 인스트럭션들 및 데이터는 메모리(102)(예를 들면, 메모리(102)의 물리적 어드레스)에 저장될 수 있다.
운영 체제(130 및/또는 140)는, 본 기술 분야에 알려진 바와 같은 DOS(disk operating system), 윈도우, 유닉스, 리눅스, OS/2, OS/9, Xenx 등의 통상의 OS를 포함하거나 이런 OS일 수 있다. 예를 들면, 운영 체제는, 워싱톤주 레드몬드 소재의 마이크로소프트사에 의한 WINDOWS XP®, 또는 다른 WINDOWS® 운영 체제 등의 운영 체제를 포함할 수 있다. 운영 체제(130 및/또는 140)는 또한, 캘리포니아주 쿠퍼티노 소재의 애플 컴퓨터에 의한 MACINTOSH® 운영 체제를 포함할 수 있다.
또한, 그래픽 VM, 운영 체제(예를 들면, 그래픽 VM(150)) 및/또는 그래픽 디바이스들 각각은, 예를 들어 자원들의 동작 및 할당을 제어함으로써 도 1-14의 디바이스 및 처리를 제어하는 하나 이상의 소프트웨어 프로그램 집합을 포함하거나 혹은 이들 집합일 수 있다. 애플리케이션 프로그램들(132, 142)은, 사용자에게 디스플레이될 그래픽, 그래픽 객체, 이미지, 그래픽 프레임, 및/또는 비디오를 갖는 하나 이상의 소프트웨어 프로그램의 집합일 수 있다.
VMM(120)은, 컴퓨터 시스템을 에뮬레이팅하는 가상 기계 모니터이며; 도시된 바와 같이, 이는 자신의 제어하에서 실행되고 있는 소프트웨어에 대해, 실제 시스템 하드웨어와 유사한 인터페이스를 제공한다. VMM(120)은 물리적 기계를 논리적으로 파티셔닝하여서, 이 기계의 기초 하드웨어(110)가 시간 공유되고 독립적으로 동작하는 하나 이상의 가상 기계(예를 들면, 운영 체제(130, 140))인 것처럼 보이게 한다. VMM(120)은 VM 환경을 생성하고 컴퓨터 상에서 실행되어, 다른 소프트웨어에 대해 하나 이상의 VM의 앱스트랙션을 용이하게 할 수 있다. 각 VM은 자급식 플랫폼으로서 기능하여, 그 자신의 운영 체제(OS) 및 애플리케이션 소프트웨어를 실행시킨다. VM에서 실행되는 소프트웨어는 본원에서는 "게스트 소프트웨어"로서 집합적으로 칭해진다. 예를 들면, VMM(120)은, 예를 들어 CPU(101), 메모리(102), 하드웨어(110) 또는 그와 유사한 디바이스들 중 하나 이상의 발생(incidence)을 나타내기 위해 인터페이스를 제공할 수 있다. VM 내부에서 실행되는 소프트웨어는 종종 "게스트 소프트웨어"로 불리운다.
일부 실시예들에 따르면, 그래픽 디바이스(116), 메모리 컨트롤러(215), 및 그래픽 컨트롤러(118) 중 임의의 하나 이상의 조합이 그래픽 경로로서 간주될 수 있다. 본원에서 정의되는 바와 같이, 그래픽 "칩셋"은, MC(115), 디바이스(116) 및/또는 컨트롤러(118)를 포함할 수 있다. 예를 들면, 그래픽 칩셋은, 통합된 실시예의 경우(예를 들면, 도 1A 및 도 6A), MC(115) 및 디바이스(116)일 수 있다. 대안적으로는, 그래픽 칩셋은, 통합되지 않은 실시예의 경우(예를 들면, 도 1B 및 도 6B), MC(115) 및 디바이스(118)일 수 있다. 예를 들어 그래픽 디바이스(예를 들면, 그래픽 디바이스(116))가 메모리 컨트롤러(예를 들면, MC(115))의 일부로서 통합되는 몇몇 경우들이 "통합된 그래픽"으로 표현될 수 있다(예를 들면, 그래픽 디바이스가, 도 1A 및 도 6A에 도시된 바와 같은 디바이스(116) 등의 통합된 그래픽 디바이스인 경우임). 대안적으로는, 그래픽 디바이스(예를 들면, 그래픽 디바이스(118))가 메모리 컨트롤러(예를 들면, MC(215))의 일부로서 통합되지 않은 몇몇 경우들은, "개별적 그래픽"으로서 표현될 수 있다(예를 들면, 그래픽 디바이스가, 도 1B 및 도 6B에 도시된 바와 같은 디바이스(118) 등의, 메모리 컨트롤러의 일부가 아니거나 혹은 메모리 컨트롤러와 통합되지 않은 경우임).
도 1B는 일 실시예에 따른, 가상화된 환경 내의 개별적 그래픽 렌더 경로를 나타내는 블럭도이다. 예를 들면, 도 1B는, 가상 기계 운영 체제(130), 가상 기계 운영 제체(140) 및 하드웨어(110)에 결합되거나 혹은 이들 사이에 결합된 가상 기계 VMM(120)을 포함하는 VMM 환경(200)을 도시한다. 도 1B는 또한, 하드웨어(110)의 메모리 컨트롤러(215)(이는 개별적 그래픽 컨트롤러(118)에 결합됨)에 결합된 가상 기계 그래픽 VM(150)을 도시한다. 컨트롤러(118)는, 본 기술 분야에 알려진 바와 같이 그래픽 디바이스 또는 컨트롤러의 기능을 수행할 수 있다. 환경(200)은, 예를 들면, 데스크탑 컴퓨터, 랩탑 컴퓨터, 핸드 헬드 컴퓨팅 디바이스, 퍼스널 컴퓨터(PC), 워크스테이션, 전자기기, 계산 기기 등으로 구현될 수 있다.
도 1B는, 그래픽 컨트롤러(118), CPU(101), 및 그래픽 VM(150) 사이에 결합된 메모리 컨트롤러(215)를 도시한다. MC(215)는 메모리 컨트롤러 디바이스 회로를 포함하거나 혹은 메모리 컨트롤러 디바이스 회로로서 표현될 수 있으며, 이하의 도 6B에서 추가적으로 설명된다. 개별적 그래픽 디바이스(118)는, 운영 체제(130, 140, 혹은 150)로부터의 DMA 요청의 GPA들을, VMM을 이용하지 않고(예를 들면, 운영 체제들(130, 140)이 VMM(120)을 통해 그래픽 컨트롤러(118)에 액세스하는 동안, 그 요청을 VMM 내의 그래픽 드라이버에 전송하지 않거나, 혹은 그래픽 드라이버 기능을 위해 VMM(120)에 액세스하지 않고), 메모리의 물리적 어드레스로부터의 그래픽 데이터에 직접 액세스하기 위한 HPA들(예를 들면, 도 2에 도시된 바와 같은 메모리(360)의 HPA들(362))로 독립적으로 트랜슬레이팅할 수 있다. 따라서, 그래픽 VM(150)은, VMM(120) 내에 그래픽 드라이버를 요구하지 않고도, 그래픽 VM(150) 및 컨트롤러(118)를 이용하여 운영 제제(130, 140)의 그래픽 요구를 만족시키기 위한 오더(order) 등의 그래픽 컨트롤러(118)와 통신할 수 있다. 개별적 부분은, 메모리 컨트롤러(215)와는 개별적이거나 혹은 메모리 컨트롤러(215)의 일부가 아닌 개별적 그래픽 컨트롤러(118) 등의 하나 이상의 개별적 그래픽 디바이스를 포함할 수 있다.
일부 실시예들에서는, 그래픽 디바이스(예를 들면, 그래픽 디바이스(116) 및 /또는 컨트롤러(118))는 그래픽 VM(예를 들면, 그래픽 VM(150))에 직접 할당된다. 이러한 직접 할당(예를 들면, VMM(120)을 통해 그래픽 VM(150)과 디바이스(116) 사이에서 통신되는 그래픽 데이터를 전송하지 않음)은, 할당된 그래픽으로서 표현될 수 있다. 또한, 할당된 그래픽 또는 직접 할당은, 그래픽 VM이 그래픽 디바이스 또는 컨트롤러를 직접 구동시킬 수 있는 것 및/또는 그래픽 VM 내의 드라이버들이 VMM을 거치거나 이를 이용하지 않고 그래픽 디바이스 또는 컨트롤러의 하드웨어 또는 회로를 프로그래밍할 수 있는 것을 포함할 수 있다.
칩셋 또는 컨트롤러(118)는, 개별적 그래픽 카드 내에 포함될 수 있으며/있거나 메모리로부터 그래픽 데이터를 판독하고 스크린, 디스플레이 또는 모니터 상에 디스플레이될 그래픽 데이터를, 비디오 등의 이미지로서 제공할 수 있다. 그래픽 컨트롤러(118)는 개별적 그래픽 디바이스(예를 들어, 컨트롤러 MC(215) 등의 메모리 컨트롤러와 통합되지 않고 그래픽 디스플레이 기능을 수행하는 디바이스)일 수 있다. 또한, 개별적 그래픽은, MC(215)와 컨트롤러(118) 사이에 "글루 로직", 입/출력 인터페이스, 및/또는 버스를 가지거나 포함하는 시스템 혹은 디바이스를 표현할 수 있다. 컨트롤러(118)는, 컨트롤러(118)가 환경(200) 내의 개별적 컨트롤러이며 개별적 그래픽 컨트롤러로서 MC(215)와 상호작용하거나 통신한다는 점을 제외하고는, 디바이스(116)에 대해 본원에서 설명된 것과 동일한 기능을 수행할 수 있다. 이에 대응하여, MC(215)는, MC(215)가 환경(200) 내의 개별적 컨트롤러(118)를 이용하며 통합된 그래픽 디바이스를 포함하지 않는다는 점을 제외하고는, MC(115)에 대해 본원에서 설명된 것과 동일한 기능을 수행할 수 있다.
도 1B의 다른 구성요소들은, 이들이 환경(200) 내에 있으며 디바이스(116) 대신에 (예를 들어, MC(215)를 통해) 컨트롤러(118)와 상호작용하거나 혹은 통신한다는 점을 제외하고는 도 1A 및 도 6A에 대해 위에서 설명된 것일 수 있다. 예를 들면, 메모리(102)는, CPU(101), 그래픽 VM(150), MC(215), 및/또는 컨트롤러(118) 상에서 동작되어 이에 의해 트랜슬레이팅, 검출, 및/또는 액세싱될 인스트럭션들 및/또는 데이터를 저장할 수 있다.
현재의 그래픽 디바이스들(예를 들면, 디바이스(116 또는 118))은 그래픽 어드레스 트랜슬레이션 테이블을 이용하여 (예를 들어, DMA의) 그래픽 어드레스들을 물리적 어드레스들로 변환한다. 그래픽 디바이스가 VM에 할당되면, 트랜슬레이션 테이블들은 그래픽 VM 내의 드라이브들에 의해 구축될 수 있다. 그래픽 드라이버들은 메모리의 게스트(GPA) 뷰만을 가지기 때문에, 이 테이블을 탐색함으로써 얻어진 어드레스는 GPA 어드레스를 생성하며, (예를 들면, 렌더링되거나 혹은 디스플레이될 그래픽 데이터의) 메모리 액세스 전에 HPA로 트랜슬레이팅되어져야 한다.
예를 들면, 도 2는 일 실시예에 따른 그래픽 데이터 경로를 나타내는 블럭도이다. 도 2는, 모니터(310)에 결합되어 있는 그래픽 디바이스/컨트롤러(316)에 결합된 메모리(360)를 포함하는 환경(300)을 도시하고 있다. 모니터(310)는, 본 기술 분야에 알려진 바와 같은 컴퓨터 또는 비디오 모니터 등의 디스플레이 또는 모니터일 수 있다. 디바이스/컨트롤러(316)는 디바이스(116) 또는 컨트롤러(118)를 나타낼 수 있다. 렌더 엔진(317)은 그래픽 데이터를 렌더링하는 데에 이용될 수 있으며, 디스플레이 엔진(319)은 (렌더 엔진에 의해 렌더링된) 데이터를 디스플레 이하는 데에 이용될 수 있다. 또한, 엔진(317, 319)은, 그래픽 어드레스들을 물리적 어드레스들로 변환하기 위한 트랜슬레이션 테이블들을 이미 포함하고 있는 디스플레이 데이터 경로 및 렌더 데이터 경로를 이용할 수 있다. 메모리(360)는, (예를 들어, HPA 어드레스들에 그래픽 데이터를 저장함으로써) 그래픽 데이터(370, 372, 374, 376, 378) 등의 그래픽 데이터를 저장하기 위한 호스트 물리적 어드레스(HPA)(362)를 이용한다. 메모리(360)는 메모리이거나 메모리를 포함할 수 있으며, 메모리(120)에 대해 전술한 바와 같은 데이터를 포함할 수 있다. 또한, 그래픽 데이터(370, 372, 374, 376, 378)는 그래픽 인스트럭션들 및/또는 데이터일 수 있다. 예를 들면, 데이터(370-378) 중 임의의 것이, 애플리케이션들(132 및/또는 142) 중 임의의 애플리케이션에 대한 그래픽 데이터일 수 있다. 따라서, 인접한 위치에 있거나 혹은 어드레스들(362) 중의 어드레스들에 있는 데이터는 동일한 애플리케이션으로부터 온 것이 아닐 수 있다. 데이터(370-378)는, 4,096(4K) 바이트 혹은 다른 바이트 수의 그래픽 데이터 블럭 등의 데이터 "블럭"일 수 있다.
도시한 바와 같이, 렌더 엔진(317)은, 예를 들어 렌더링된 그래픽 데이터를 메모리(360)의 HPA(362)에 기록하고 렌더링된 그래픽 데이터를 메모리(360)의 HPA(362)로부터 판독하기 위해 HPA(362)를 이용함으로써, (예를 들면, MC(115 또는 215)를 통하여) 메모리(360)에 저장된 그래픽 데이터에 액세스할 수 있다. 또한, 디스플레이 엔진(319)은, 예를 들어 렌더링된 그래픽 데이터를 메모리(360)의 HPA(362)로부터 판독하기 위해 HPA(362)를 이용함으로써, (예를 들어 MC(115 또는 215)를 통하여) 메모리(360) 내에 저장된 그래픽 데이터에 액세스할 수 있다. 엔 진(319)은, (예를 들면, 메모리(360)로부터 렌더링된 그래픽 데이터를 판독한 후) 예를 들어 비디오 피드(video feed), 이미지, 픽실레이팅된(pixilated) 이미지 또는 프레임 등을 디스플레이함으로써, 모니터(310) 상에 렌더링된 그래픽 데이터를 디스플레이할 수 있다. 예를 들면, 몇몇 경우에, 애플리케이션들(132)은, 렌더 엔진(317)에 의해 렌더링되고 어드레스들(362)에 저장될 그래픽 데이터를 포함할 수 있다. 이 렌더링된 데이터는 디스플레이 엔진(319)에 의해 나중에 액세스 및 처리되고 디스플레이(310) 상에 디스플레이되도록 처리될 수 있다.
일부 실시예들에서, 데이터 블럭들(370-378)에 대한 어드레스들은, 메인 메모리 내의 그래픽 데이터에 액세스하기 위해 DMA 디바이스에 의해 이용되는 호스트 하드웨어 물리적 메모리 어드레스들 또는 메모리 내의 물리적 어드레스들이다. 예를 들면, DMA 요청은, CPU(101)를 이용하지 않고 메모리(102)로부터 데이터를 판독하거나 메모리(102)에 데이터를 기록하기 위해 하드웨어 디바이스(112) 등의 디바이스로부터 직접 MC(115) 및/또는 디바이스(116)에 의해 수신되는 요청일 수 있다. 이 판독 혹은 기록은, 메모리에 액세싱하는 것으로 표현될 수 있으며, 이는 애플리케이션들(132) 중 하나의 애플리케이션에 따라 행해지거나 혹은 이에 의해 유발될 수 있다. 그러나, 그래픽 디바이스가 VM에 할당되는 가상화된 환경에서, DMA 요청에서의 어드레스들은 디바이스(116)에 의해 만족될 DMA 요청을 위한 GPA들일 수 있으며, 이들 GPA들은 HPA들로 트랜슬레이팅되어야 한다. 도 2에 대해 설명된 것과 유사한 개념이 도 1B 및 도 6B의 MC(215) 및 컨트롤러(118)(예를 들면, 환경(200))에 적용된다.
다른 실시예들도 고려될 수 있지만, 그래픽 디바이스(116)는, 렌더 데이터 경로 및 디스플레이 데이터 경로 등의 두 개의 주요 데이터 경로들을 포함할 수 있다. 예를 들면, 도 3은 일 실시예에 따른, 개선된 스케줄러 모델 내의 그래픽 데이터 경로를 나타내는 블럭도이다. 본원에 설명되는 개선된 스케줄러는, 워싱톤주 레드몬드 소재의 마이크로소프트사에 의한 마이크로소프트 어드밴스드 스케줄러(Microsoft Advanced Scheduler)의 기능 등의 기능을 포함할 수 있다. 개선된 스케줄러는 MC(115)가 지원하는 기능이거나 혹은 이를 포함할 수 있다. 또한, 개선된 스케줄러는 그래픽 메모리 관리자 운영 체제 소프트웨어 또는 애플리케이션이거나 혹은 이를 포함할 수 있다. 구체적으로는, 개선된 스케줄러는 운영 체제, 혹은 그래픽 VM(150) 등의 그래픽 VM의 일부일 수 있다. 도 3은 비가상화된 환경 내의 디스플레이 경로(410) 및 렌더 경로(420)를 포함하는 환경(400)을 도시한다. 디스플레이 엔진(219)은 그래픽 어드레스들을 이용하여 데이터에 액세스한다. 그래픽 어드레스들은 글로벌(global) GTT(264)에 의해 HPA들로 트랜슬레이팅된다. 렌더 엔진(217)은 두 개의 레벨의 계층적 페이지 테이블 룩업을 이용하여 그래픽 어드레스들을 HPA들로 트랜슬레이팅한다. 그래픽 VM(150)이 가상 어드레스들을 이용하여 디바이스(116)를 프로그래밍하고 메모리(360) 내에 저장된 그래픽 데이터는 물리적 어드레스들(362)(예를 들어, 도 2 참조) 내에 저장되기 때문에 테이블들(264, 266, 268)이 필요하다. 따라서, 데이터 경로들(410, 420)은 트랜슬레이션 테이블들을 포함하여서, 그래픽 어드레스들로부터 물리적 어드레스들(예를 들면, HPA들)로 바꾼다. 그래픽 디바이스의 VM으로의 직접 할당이 행해지는 가상화된 환 경에서, GTT(264) 및 페이지 디렉토리(266)는, 그래픽 VM(예를 들어, 그래픽 VM(150))에 의해 (예를 들어 그들의 엔트리들이 부팅 동안 생성되게 함으로써) 구축되거나 생성되기 때문에, 이들은 GPA 내에 엔트리들을 포함한다. 따라서, 이들 GPA 어드레스들은, 메모리(360)로부터 그래픽 데이터에 정확하게 액세스하기 위해 HPA 어드레스들로 트랜슬레이팅되어야 한다. 도 3에 대해 설명된 것과 유사한 개념이 도 1B 및 도 6B의 MC(215) 및 컨트롤러(118)(예를 들면, 환경(200))에 적용된다.
도 3 및 도 6은, 마이크로소프트 어드밴스 스케줄러의 기능 등의 개선된 스케줄러 기능을 만족시킬 수 있는 트랜슬레이션 테이블들(264, 266, 268, 272, 274, 278)을 도시하지만, 이들 테이블들에 대해 본원에서 개시된 개념들은 각종 다른 트랜슬레이션 테이블 기능 또는 규격에도 적용될 수 있다.
실시예들에 따르면, DMA 리맵핑 명세(specification)는 멀티 레벨 페이지 테이블 워크(multi-level page table walk)를 이용하여 GPA 어드레스들을 HPA로 트랜슬레이팅할 수 있다. 워크에 요구되는 레벨들의 수는, 지원될 필요가 있는 어드레스 공간의 크기에 따라 달라진다. 예를 들면, 32비트의 경우, 3 레벨 페이지 테이블 워크가 요구된다. 39+ 비트의 어드레스 공간을 지원하는 더 큰 시스템들의 경우, 4 레벨 워크가 요구된다. 예를 들면, 도 4는 일 실시예에 따른 DMA 리맵핑 3 레벨 워크를 나타내는 블럭도이다. 도 4는 3 레벨 워크(580)(이는 테이블(580)로 칭해질 수도 있음)에 의해 트랜슬레이팅 또는 리맵핑될 DMA 요청(510)을 전송하는 그래픽 디바이스(1160)를 포함하는 환경(500)을 도시한다. 이 예에서, 요청(510) 은 GPA(512) 및 요청자-ID(514)(예를 들면, 버스, 디바이스, 펑션)를 포함한다. GPA(512)는, 애플리케이션들(132)로부터 수신된 어드레스 등의 가상 메모리 어드레스를 나타낼 수 있다. 컨텍스트 엔트리는 요청을, 이용될 적절한 페이지 테이블 또는 트랜슬레이션으로 맵핑한다.
GPA(512)는, 2, +9, +9, +12 비트 룩업으로 분할될 수 있는 32비트를 갖는다. 첫 번째 룩업인 룩업(532)은 페이지(542) 내의 GPA(512)의 첫 번째 2비트를 이용하여 룩업한다. 두 번째 룩업인 룩업(534)은 페이지(544) 내의 다음 9비트를 이용하여 룩업한다. 세 번째 룩업인 룩업(536)은 페이지(546) 내의 다음 9비트를 룩업한다. 나머지 룩업인 룩업(538)은 4킬로바이트 페이지(550) 내의 나머지 12비트를 룩업한다. 중간 레벨 각각에서의 룩업(538)의 12비트는, 페이지(550)가 4킬로바이트 이하의 크기를 갖는 것을 허용함을 알 수 있다. 3 레벨 워크(580)는 4킬로바이트 페이지 입도(granularity)에서의 리맵핑을 제공하고 이와 동시에 페이지 테이블들이 4킬로바이트 페이지 자체에 맞춤화되는 것을 허용하도록 설계될 수 있다. 예를 들면, 워크(580)는, 전술한 바와 같이 데이터(370-378)의 32비트 가상 어드레스들 또는 GPA들, 혹은 그 블럭들을 트랜슬레이팅할 수 있다.
일부 실시예들에서, 3 레벨 워크(580)가 시스템 초기화 또는 부팅시, 혹은 애플리케이션의 로딩시, VMM(120)에 의해 (예를 들어, 페이지 테이블들(542, 544, 546, 550)을 구축함으로써) 생성되거나 구축될 수 있다. 또한, 테이블(580)은 예를 들어 환경(100)을 구현하는 컴퓨팅 시스템(예를 들면, 컴퓨팅 디바이스), 및/또는 (예를 들면, BIOS(103)에 따른) CPU(101)의 부팅 또는 초기화시에 MC(115) 및/ 또는 VMM에 의해 생성되거나 구축될 수 있다. 도 4에 대해 설명된 것과 유사한 개념이 도 1B 및 도 6B의 MC(215) 및 컨트롤러(118)(예를 들면, 환경(200))에도 적용된다.
현재의 그래픽 및 물리적 어드레스 트랜슬레이션(예를 들면, 테이블(264, 266, 268))의 상부 상에서 경로(410, 420)에서 필요한 경우 3 레벨 DMA 리맵 워크를 수행함으로써, 이들 경로들에 심각한 레이턴시 문제를 도입할 수 있음을 알 것이다. 예를 들면, 도 5는, 일 실시예에 따라 3 레벨 워크를 이용하는, 본 발명의 실시예들에 적용하기 전의 가상화된 환경 내의 그래픽 데이터 경로를 나타낸 블럭도이다. 도 5는, 경로(410)에서, 디스플레이 요청(602)을 글로벌 GTT(264)에 전송하는 디스플레이 엔진(219)을 포함하는 환경(600)을 도시하는데, 이 글로벌 GTT(264)는 GPA 어드레스(612)를 3 레벨 워크(580)에 출력하며, 3 레벨 워크(580)는 HPA 트랜슬레이션(614)을 메모리(360)에 전송한다. 도 5는 또한, 경로(420)에서, 렌더 요청(604)을 페이지 디렉토리(266)에 전송하는 렌더 엔진(217)을 도시하는데, 이 페이지 디렉토리(266)는 GPA 어드레스(622)를 3 레벨 워크(580)에 출력하며, 3 레벨 워크(580)는 HPA 트랜슬레이션(624)을 퍼 프로세스(per process) GTT(268)에 출력하며, 퍼 프로세스 GTT(268)는 GPA 어드레스(626)를 3 레벨 워크(580)에 출력하며, 3 레벨 워크(580)는 HPA 트랜슬레이션(628)을 메모리(360)에 전송한다.
또한, 도 2에 도시된 바와 같이, 디바이스/컨트롤러(316)는 메모리(360)의 물리적 어드레스들의 리얼 뷰(real view)를 가지지 않는다. 따라서, 그래픽 VM(150)에 의해 프로그래밍된 GPA 요청들은 HPA들로 트랜슬레이팅 또는 변환되어서 메모리(360)의 HPA들(362)에서의 그래픽 데이터에 정확하게 액세스해야 한다.
보다 구체적으로는, 도 5에서, 디스플레이 요청(602)은, 글로벌 GTT(264)에 전송되거나 혹은 글로벌 GTT(264)에서 룩업된 애플리케이션들(132)로부터의 그래픽 어드레스 집합을 이용하는 DMA 요청일 수 있다. 그러면, GTT(264)는 GPA 트랜슬레이션(612)을 출력하거나 전송한다(여기서, 그래픽 VM(150)은 메모리의 리얼 뷰를 가지지 않기 때문에, GPA들이 메모리의 HPA들인 것으로 생각한다). 다음으로, 3 레벨 워크(580)는 트랜슬레이션(612)을 HPA(614)로 변환하고 트랜슬레이션(614)을 메모리(360)에 송신 또는 전송한다. 테이블(264)에서 요구되는 트랜슬레이션 외에도, 경로(410)는 워크(580)에서 추가의 3 레벨 워크를 포함함에 주목한다.
또한, 렌더 요청(604)은, 페이지 디렉토리(266)에 전송되거나 혹은 이 페이지 디렉토리(266)에서 룩업되는 애플리케이션들(132)로부터의 그래픽 어드레스들을 이용하는 DMA 요청일 수 있다. 그러면, 디렉토리(266)는 GPA 트랜슬레이션(622)을 테이블의 다음 레벨에 대한 포인트로 송신 또는 전송한다(다시, 그래픽 VM(150)은, GPA 엔트리들을 갖는 테이블을 생성한다). 그러나, 이는 GPA이어서, 이는 HPA로 트랜슬레이팅될 수 있다. 다음으로, 3 레벨 워크(580)는 트랜슬레이션(622)을 HPA 트랜슬레이션(624)으로 변환하고 트랜슬레이션(624)을 퍼 프로세스 GTT(268)에 송신 또는 전송한다. 퍼 프로세스(268)는 GPA 트랜슬레이션(626)을 송신 또는 전송한다. 다음으로, 3 레벨 워크(580)는 트랜슬레이션(626)을 HPA 트랜슬레이션(628)으로 변환하고 트랜슬레이션(628)을 메모리(360)에 송신 또는 전송한다. 테이 블(266, 268)에서의 트랜슬레이션들 외에도, 경로(420)는 6개의 추가적인 워크 쓰루(walk through)를 요구함에 주목한다.
도 5에 대해 설명한 바와 유사한 개념이 도 1B 및 도 6B의 MC(215) 및 컨트롤러(118)(예를 들면, 환경(200))에도 적용된다. 예를 들면, 요청(602, 604)은 엔진(229, 227) 각각에 의해 생성될 수 있다.
현재의 구현물은, 인텔의 VT-d 기술에 의해 정의된 바와 같다. 일부 실시예들에서는 멀티 레벨 테이블을 이용하여 GPA로부터의 어드레스를 HPA로 변환한다(예를 들어, 32비트 어드레스를 트랜슬레이팅하기 위해서는, 3 레벨 테이블이 이용될 수 있다). 그래픽 디바이스 또는 컨트롤러는 엄격한 레이턴시 요건을 갖는 고성능 디바이스일 수 있음을 알 수 있다. 이 레이턴시 요건을 만족시키지 못하면, 디스플레이 분열, 프레임 또는 렌더링의 드롭이 발생될 수 있어서, 모니터 또는 디스플레이 상에 사용자가 볼 수 있는 이미지 결함이 디스플레이되게 된다. 따라서, 새도우 테이블들은 GPA들을 HPA들로 트랜슬레이팅하는 보다 효율적인 방식을 제공할 수 있다.
일부 실시예들에 따르면, 도 5의 테이블 및 워크 쓰루는, 다수의 레벨 워크 쓰루를 제거하거나 감소시키도록 결합될 수 있으며 더 높은 성능을 갖는 구현물을 제공할 수 있다. 예를 들면, 퍼 프로세스 GTT(268)와 메모리(360) 사이의 3 레벨 워크는 단일 레벨 리맵핑 테이블로 대체될 수 있다. 또한, 그 테이블과 메모리(360) 사이의 글로벌 GTT(264) 및 3 레벨 워크(580)를 결합시키는 하나의 새도우 테이블이 생성될 수 있다. 마찬가지로, 페이지 디렉토리(266)와 테이블(268) 사이 에 페이지 디렉토리(266)와 3 레벨 워크를 결합시키는 다른 새도우 테이블이 생성될 수 있다. 따라서, 이들 새도우 테이블들은 엔진(219, 217) 각각으로부터 경로(410) 및 경로(420)에서 수신되는 가상 어드레스들(그래픽 어드레스들)을 HPA들로 직접 변환할 수 있다.
실시예들에 따르면, 환경(100)은, 애플리케이션들(132 및/또는 142)로부터의 그래픽 데이터에 액세스하기 위한 요청들(예를 들면, DMA 요청들)의 가상 메모리 어드레스들 또는 게스트 물리적 어드레스들(GPA들)을, 그래픽 데이터가 메모리(102) 내에 저장되거나 위치되는 호스트 하드웨어 물리적 메모리 어드레스들(예를 들면, HPA들)로 트랜슬레이팅하기 위한 트랜슬레이션 테이블들의 엔트리들을 생성하는 데에 이용될 수 있다. 예를 들면, 도 6A는 일 실시예에 따른, VMM 환경 내의 통합된 그래픽 디바이스를 나타낸 블럭도이다. 도 6A는, CPU(101), 그래픽 컨트롤러(116), 입/출력 컨트롤러(211)(예를 들면, IO 메모리 컨트롤러), 및 메모리(260) 사이에 결합되는 메모리 컨트롤러(115)를 나타낸다. 메모리(260)는 메모리(102) 및/또는 메모리(360)와 동일한 메모리일 수 있으며, 혹은 메인 메모리일 수 있으며, 혹은 RAM 메모리일 수 있으며, 혹은 다른 메모리일 수 있다.
도 6A는, 렌더 엔진(217), 및 디스플레이 엔진(219)을 갖는 그래픽 디바이스(116)를 포함하는 MC(115)를 도시한다. 렌더 엔진(217)은 그래픽 데이터를 렌더링하는 데에 이용될 수 있으며, 디스플레이 엔진(219)은 (렌더 엔진에 의해 렌더링된) 데이터를 디스플레이하는 데에 이용될 수 있다. 또한, 엔진(217, 219)은, 그래픽 어드레스들을 물리적 어드레스들로 변환하기 위한 트랜슬레이션 테이블들을 이미 포함하는 디스플레이 데이터 경로 및 렌더 데이터 경로를 이용할 수 있다. 몇몇 경우들에서, 엔진(217, 219)은 메모리(260)에 저장된 하나 이상의 트랜슬레이션 테이블들을 이용하거나 혹은 이를 포함할 수 있다. 또한, 엔진(217, 219)은 엔진(317, 319)을 나타낼 수 있다.
예를 들면, 메모리(260)는 그래픽 VM 할당된 메모리(262) 및/또는 사전 할당된 새도우 메모리(270)를 포함할 수 있다. 메모리(262)는, 게스트 글로벌 게스트 트랜슬레이션 테이블(GTT)(264)(이는 테이블(264)로 칭해질 수도 있음), 게스트 퍼 프로세스 페이지 디렉토리(PPPD)(266)(이는 테이블(266)로 칭해질 수도 있음), 및 퍼 프로세스 GTT(268)(이는 테이블(268) 및/또는 PPGTT로 칭해질 수도 있음) 등의 테이블들을 포함한다. 테이블들(264, 266, 268)은 그래픽 어드레스들을 게스트 물리적 어드레스들로 트랜슬레이팅하는 데에 이용될 수 있다. 메모리(262)에 저장되는 테이블들은, 예를 들어 (예를 들면, BIOS(103)에 따라) 환경(100)을 구현하는 컴퓨팅 시스템, 및/또는 CPU(101)의 부팅 또는 초기화시에, 그래픽 드라이버들에 의해 생성되거나 혹은 구축될 수 있다. 메모리(262)에 저장되는 테이블들은 또한, 애플리케이션들(132 또는 142) 중 하나의 애플리케이션의 로딩 또는 실행 동안 그래픽 드라이버들에 의해 생성될 수 있다. 몇몇 경우들에서, "로딩" 및 "론칭"은, 예를 들어 프로세서에 의해 컴퓨터 프로그램이 프로세서에 의해 개시되고 메인 메모리 내에 로딩될 때의, 동일한 기능 또는 발생을 나타낼 수 있다. 마찬가지로, 때때로, "수행" 및 "실행"은, 예를 들어 프로세서에 의해 메모리에 로딩된 컴퓨터 프로그램이 실행되어 그 프로그램에 따른 기능(예를 들어, 그래픽 데이터의 디스플 레이 및 렌더링을 포함함)을 수행할 때의, 동일한 기능 또는 발생을 나타낼 수 있다. 이러한 드라이버들은, 예를 들어 소프트웨어, 애플리케이션 프로그램, 애플리케이션 코드가 되는 것에 의해, 그래픽 VM(150)의 일부가 될 수 있다. 또한, 이러한 드라이버들은, 기계(예를 들면, 프로세서)에 의해 실행될 수 있으며 이 기계로 하여금 드라이버들에 대해 본원에서 개시된 기능들을 수행하고/하거나 본원에서 개시된 테이블들(예를 들면, 새도우 테이블들)을 생성하고/하거나 사용하게 하는, 기계-액세스가능 매체 내에 저장된 인스트럭션들일 수 있다. 또한, 이러한 드라이버들은, 데이터의 처리 및/또는 디스플레이를 수행하라는, 애플리케이션으로부터 하드웨어로의 커맨드를 포함할 수 있다. 예를 들면, 드라이버들은 MC(115), MC(215), 디바이스(116), 컨트롤러(118), 및/또는 메모리(260)로 하여금 본원에서 설명된 바와 같은 기능들을 수행하게 할 수 있다.
예를 들면, 메모리(270)는, 새도우 글로벌 GTT(272)(이는 테이블(272)로서 칭해질 수 있음), 새도우 게스트 PPPD(274)(이는 테이블(274)로서 칭해질 수 있음), 및/또는 단일 레벨 DMA 리맵(278)(이는 테이블(278)로서 칭해질 수 있음) 등의 각종 새도우 트랜슬레이션 테이블들을 포함할 수 있다. 테이블들(272, 274, 278)은, (예를 들어 DMA 요청에 따라) 그래픽 데이터를 렌더링하고/하거나 디스플레이하는 동안, 테이블들(264, 266, 268) 각각을 대체하거나 이들 대신에 기능할 수 있다. 몇몇 경우들에서, 테이블들(272, 274, 278) 중 하나 또는 둘만이 존재하고/존재하거나 그래픽을 디스플레이하는 데에 이용될 수 있다. 일부 실시예들에 따르면, 메모리(260)는 메모리(262)만을, 메모리(270)만을, 혹은 메모리(262) 및 메모 리(270)를 포함할 수 있다.
메모리(270)의 테이블들(예를 들면, 인접하거나 혹은 인접하지 않는 테이블들(272, 274 및/또는 278))을 위한 메모리 저장장치 위치, 어드레스, 및/또는 공간이, (예를 들면, 할당된 메모리를 VMM에 보고하지 않고 BIOS(103)에 따라) 환경(100)을 구현하는 시스템 및/또는 CPU(101)의 부팅 또는 초기화시 등에 확보되거나 혹은 메모리(260)에 미리 할당되어 있을 수 있다. 구체적으로는, 메모리(270)의 테이블들을 위한 공간은, 환경(100)을 구현하는 시스템 및/또는 CPU(101)의 부팅 또는 초기화시에, BIOS(103) 및/또는 VMM(120)에 의해 확보되거나 혹은 메모리(260)에 미리 할당되어 있을 수 있다.
일부 실시예들에 따르면, 부팅 동안, BIOS는, 그래픽 어드레스 대 HPA 트랜슬레이션 테이블을 저장하기에 충분한 공간을 확보할 뿐만 아니라, PPPD 엔트리들을 HPA로 미리 트랜슬레이팅하기 위한 트랜슬레이션 테이블(예를 들면, 테이블(274))을 저장하기에 충분한 저장장치를 확보할 수 있다. 미리 트랜슬레이팅된 테이블(274)은, 새도우 게스트 PPPD(274) 등의 PPPD 엔트리를 탐색한 후 인라인 리맵핑 워크가 요구되지 않음을 보장한다. 테이블(274)의 크기는, 특정 수(예를 들면, 100, 200, 300, 400, 1000 또는 이들의 임의의 조합)의 애플리케이션을 지원하도록 제한될 수 있다. 테이블(278)의 생성은 또한 이하에서 도 9를 참조하여 상세히 설명된다. 마찬가지로, 부팅시, 또는 VM 애플리케이션(예를 들면, 애플리케이션(132))의 그래픽 프로그램의 초기화시에, BIOS는, 데이터를 GPA들로부터 HPA들로 트랜슬레이팅하기 위한 단일 레벨의 DMA 리맵 테이블(예를 들면, 리맵(278))을 저 장하기에 충분한 공간을 확보하기 위한 엔트리를 포함할 수 있다.
예를 들면, 테이블(278)은, GPA들을 HPA들로 트랜슬레이팅하기 위한 테이블의 동작 또는 기능과 유사한 동작 또는 기능(예를 들어 도 4의 3 레벨 워크(580)에 의해 수행되는 기능과 동일한 기능)을 수행할 수 있다. 따라서, 리맵(278)은 단일 레벨 리맵핑 테이블(예를 들면, 4K 바이트 페이지 내에는 더 이상 포함될 수 없는 테이블)일 수 있으며, 인접하는 메모리 내에 위치될 수 있다. 인접하는 테이블(예를 들면, 단일 레벨 룩업 테이블)을 가짐으로써, 멀티 레벨 테이블의 레벨들의 워킹 쓰루에 의해 유발되는 레이턴시를 방지하여, 그래픽 데이터의 렌더링 및/또는 디스플레이 동안 GPA 대 HPA의 더 빠르고 더 효율적인 트랜슬레이션 또는 변환의 이점을 제공하게 된다. 인접하는 메모리는, 에지 또는 바운더리를 공유하고 접촉하고 있는, 메모리 내의 어드레스들 또는 위치들이 이웃하고, 인접하고, 끊김없이 연결되고/되거나 바로 인접해 있는 것으로 표현될 수 있다. 예를 들면, 메모리 내의 연속적인 어드레스들은, 하나의 어드레스 뒤에 다른 어드레스가 뒤따라오는 어드레스들일 수 있다. 대안적으로는, 테이블 데이터 부분을 포함하지 않는 프레그먼트화된 순서 또는 위치를 갖는 로케이션에 저장된 어드레스들 또는 로케이션들은, 인접하지 않은 메모리로서 나타낼 수 있다. 테이블(272, 274)은 인접한 메모리 내에 위치되거나 저장될 수 있다(예를 들면, 이들 테이블들 중 하나 이상은 각각 메모리(260)의 인접한 메모리 로케이션에 저장될 수 있다). 또한, 테이블(278)은, 테이블들(272 또는 274)로부터 분리되어 있거나 혹은 이들과 인접하지 않은 메모리의 로케이션들 또는 어드레스들 내에 있을 수 있다. 몇몇 경우에, 테이 블(272)을 저장하는 메모리의 어드레스는 테이블(274)을 저장하는 메모리의 어드레스에 인접해 있지만, 테이블(272)에 대한 어드레스와 테이블(274)에 대한 어드레스는 테이블(278)에 대한 어드레스에 인접해 있지 않다. 테이블(278)의 크기는, 그래픽 VM(예를 들면, 디바이스(116))의 그래픽 어드레스 공간에 따라 달라질 것이다. 예를 들면, 테이블(278)은 각 4K 바이트 페이지당 8K 바이트 엔트리를 포함할 수 있으며, 이에 따라 테이블(278)은, 4기가바이트 그래픽 어드레스 공간에 대한 트랜슬레이션을 제공하기 위하여 메모리(270) 내에 8메가바이트의 인접한 테이블을 요구할 수 있다. 메모리(270)의 모든 테이블들에 대한 공간은, 시스템 BIOS에 의해 할당될 수 있으며 전술한 바와 같이 VMM 또는 VM에 보고되지 않을 수 있다.
메모리(270)는 또한 테이블(278)에 의해 표현되는 GPA 대 HPA 트랜슬레이션 테이블을 포함할 수 있다. 테이블(278)은 1, 2, 3, 혹은 4 레벨 테이블일 수 있다. 테이블(278)(예를 들면, 테이블(278)이 도 4의 3 레벨 워크(580)를 나타내는 경우)은, (예를 들면, BIOS(103)에 따라) 환경(100)을 구현하는 컴퓨팅 시스템, 및/또는 CPU(101)의 부팅 또는 초기화시에, (예를 들면, MC(115 또는 215)의 처리 또는 액세스를 행하지 않고) VMM에 의해 생성될 수 있다.
테이블(278)은, (예를 들면, BIOS(103)에 따라) 환경(100)을 구현하는 컴퓨팅 시스템, 및/또는 CPU(101)의 부팅 또는 초기화시 등에 VMM에 의해 생성되거나 구축될 수 있다. 또한, 테이블들(272, 274)은 하드웨어(예를 들면, MC(115 또는 215))에 의해 생성될 수 있다. 몇몇 경우에, 테이블(272 또는 274)(예를 들면, 새도우 테이블들)의 엔트리들은, MC(115) 또는 MC(215)의 회로 또는 하드웨어(예를 들면, 검출 회로)가 그래픽 VM(150)에 의해 생성되는 대응하는 테이블(264 또는 266)(예를 들면, 논-새도우(non-shadow) 테이블들)의 엔트리의 생성을 검출 또는 감지할 때 생성될 수 있다. 일부 실시예들에 따르면, MC(115) 또는 MC(215)의 회로 또는 하드웨어는 테이블(262)의 논-새도우 엔트리의 생성을 감지하고 테이블(272)의, 대응하거나 혹은 이와 연관된 엔트리를 생성한다(예를 들면, 트랜슬레이팅된 HPA 엔트리는, 테이블(262)의 엔트리 또는 업데이트와 동일한, 테이블(272) 내의 로케이션 또는 어드레스에 위치된다). 마찬가지로, 몇몇 경우에, MC(115) 또는 MC(215)의 회로 또는 하드웨어는 테이블(264)의 논-새도우 엔트리의 생성을 감지하고, 테이블(274)의, 대응하거나 연관된 엔트리를 생성한다(예를 들면, 트랜슬레이팅된 HPA 엔트리는, 테이블(264)의 엔트리 또는 업데이트와 동일한, 테이블(274) 내의 로케이션 또는 어드레스에 위치된다).
또한, 테이블들(264, 266, 268, 272, 274 및/또는 278)은, 예를 들어 VM 애플리케이션 또는 애플리케이션들(132) 중 하나의 애플리케이션 등의 애플리케이션(예를 들면, 그래픽 애플리케이션, 또는 디스플레이 또는 모니터 상에 이미지를 디스플레하기 위한 그래픽 인스트럭션들을 포함하는 애플리케이션)의 론칭, 로딩, 초기화, 및/또는 실행 동안 등의, 환경(100)을 구현하는 컴퓨팅 시스템의 동작 동안 업데이트될 수 있다. 예를 들면, 그래픽 VM(150) 및/또는 그래픽 VM(150)의 드라이버들은, 메모리(270) 내의 애플리케이션들(132) 중의 하나의 애플리케이션이 론칭될 때, 테이블들(272, 274 및/또는 278)을 업데이트할 수 있다.
몇몇 경우들에서, 테이블(272 또는 274)(예를 들면, 새도우 테이블들)로의 엔트리들은, MC(115) 또는 MC(215)의 회로 또는 하드웨어가 그래픽 VM(150)에 의해 대응하는 테이블(264 또는 266)의 엔트리의 업데이트(예를 들면, 새로운 엔트리의 생성, 또는 테이블(264 또는 266)의 기존의 엔트리 위에 논-새도운 테이블들을 기입)를 감지할 때 업데이트될 것이다. 일부 실시예들에 따르면, MC(115) 또는 MC(215)의 회로 또는 하드웨어는 테이블(264) 내에 존재하는 논-새도우 엔트리의 업데이트를 감지하며 테이블(272)의, 대응하거나 혹은 연관된 엔트리를 업데이트한다(예를 들면, 트랜슬레이팅된 HPA 엔트리는 테이블(264)의 업데이트와 동일한, 테이블(272) 내의 로케이션에 위치된다). 예를 들면, 테이블(264) 내의 엔트리는, 메모리(예를 들면 1005) 내의 하나의 기본 어드레스(예를 들면, 1000)로부터 동일한 양(예를 들면, 플러스 5)의 어드레스만큼 오프셋될 수 있으며, 테이블(272) 내의 엔트리는, 메모리(예를 들면 2005) 내의 다른 기본 어드레스(예를 들면, 2000)로부터 동일한 양의(예를 들면, 플러스 5) 어드레스만큼 오프셋된다. 마찬가지로, 몇몇 경우에, MC(115) 또는 MC(215)의 회로 또는 하드웨어는 테이블(266) 내에 존재하는 논-새도우 엔트리의 업데이트를 감지하고 테이블(274)의, 대응하거나 관련된 엔트리를 업데이트한다(예를 들면, 트랜슬레이팅된 HPA 엔트리는 테이블(266)에 대한 업데이트와 동일한, 테이블(274) 내의 로케이션에 위치된다). 따라서, 테이블들(274, 266)은 동일하게 인덱싱될 수 있다.
몇몇 경우들에서, 그래픽 VM(150)은, 워싱톤주의 레드몬드 소재의 마이크로소프트사에 의한 마이크로소프트 어드밴스드 스케줄러로부터의 기능 또는 기능의 일부를 포함하는 개선된 스케줄러 등의 개선된 스케줄러를 포함할 수 있다. 예를 들면, 어드밴스드 스케줄러 아키텍처에 따른 그래픽 VM은, 애플리케이션이 론칭될 때 테이블들(264, 266, 268)을 생성, 저장, 및/또는 업데이트할 수 있다. 트랜슬레이션 테이블들(264, 266, 268, 272, 274 및/또는 278)은, 마이크로소프트 어드밴스 스케줄러 기능 등의 개선된 스케줄러의 기능을 만족시킬 수 있다. 또한, 트랜슬레이션 테이블들(264, 266, 268, 272, 274 및/또는 278)은, 개선된 스케줄러의 기능이 아닌, 본 기술 분야에 공지된 다른 규격을 만족시킬 수 있다.
실시예들에 따르면, 그래픽 VM(150)은, 시스템들(130, 140)이 VMM(120)을 통해 그래픽 디바이스(116)에 액세스하는 동안, VMM(120)을 이용하거나 이에 액세스하지 않고 그래픽 디바이스(116)에 액세스할 수 있다. 구체적으로는, MC(115)는 테이블(272)의 엔트리들을 이용하여, 애플리케이션에 의해 이용되는 가상 어드레스(그래픽 어드레스)를, 메인 메모리 내의 그래픽 데이터의 호스트 하드웨어 물리적 메모리 어드레스(예를 들면, HPA)로 트랜슬레이팅할 수 있다. 마찬가지로, MC(115)는, 테이블(274)을 이용하여, 퍼 프로세스 페이지 디렉토리의 가상 어드레스(그래픽 어드레스)로부터 메인 메모리 내의 그래픽 데이터의 호스트 하드웨어 물리적 메모리 어드레스(예를 들면, HPA)로 트랜슬레이팅하기 위한 테이블(274)의 엔트리들을 생성할 수 있다.
도 1A 및 도 6A는 통합된 그래픽 디바이스에 대한 실시예들을 나타내고 있지만, 본원에서 개시된 개념들은 각종 다른 그래픽 디바이스, 칩셋, 회로, 하드웨어, 렌더 경로, 및/또는 디스플레이 경로에 적용된다. 예를 들면, 개별적 그래픽 경로는 환경(100)의 통합된 경로와 유사한 메카니즘을 이용할 수 있다. 개별적 그래픽 경로는, VMM에 액세스하지 않고/않거나 그래픽 VM에 액세스하지 않고, 게스트 물리적 어드레스(GPA)를 이용하여 DMA 요청을 발행하고 그래픽 컨트롤러 및/또는 메모리 컨트롤러로 하여금 GPA들을 호스트 물리적 어드레스들(HPA들) 또는 메인 메모리의 물리적 메모리 어드레스들로 트랜슬레이팅하게 함으로써 그래픽 데이터에 액세스할 수 있는 경로일 수 있다.
실시예들에 따르면, 환경(200)은, 애플리케이션들(132 및/또는 142)로부터의 그래픽 데이터를 액세스하는 요청(예를 들면, DMA 요청)의 가상 메모리 어드레스들 또는 게스트 물리적 어드레스들을를, 그래픽 데이터가 메모리(102) 내에 저장되거나 위치되어 있는 호스트 하드웨어 물리적 메모리 어드레스들(예를 들면, HPA들)로 트랜슬레이팅하기 위한 트랜슬레이션 테이블들의 엔트리들을 생성하는 데에 이용될 수 있다. 예를 들면, 도 6B는, 일 실시예에 따른, 가상 기계 모니터(VMM) 환경 내의 개별적 그래픽 디바이스를 나타내는 블럭도이다. 도 6B는 그래픽 컨트롤러(118), CPU(101), 입/출력 컨트롤러(211)(예를 들면, IO 메모리 컨트롤러), 및 메모리(260) 사이에 결합된 메모리 컨트롤러(215)를 나타낸다. 메모리(260)는 메모리(102)와 동일한 메모리일 수 있으며/있거나 메모리(102)와 동일한 기능을 수행할 수 있다. 또한, 메모리(260)는 메인 메모리일 수 있으며, 혹은 RAM 메모리일 수 있으며, 혹은 다른 메모리일 수 있다.
도 6B는 렌더 엔진(227), 및 디스플레이 엔진(229)을 갖는 그래픽 컨트롤러(118)에 결합되어 있는 MC(215)를 나타낸다. 렌더 엔진(227)은 그래픽 데이터를 렌더링하는 데에 이용될 수 있으며, 디스플레이 엔진(229)은 (렌더 엔진에 의해 렌 더링된) 데이터를 디스플레이하는 데에 이용될 수 있다. 또한, 엔진(227, 229)은, 그래픽 어드레스들을 물리적 어드레스들로 변환하기 위한 트랜슬레이션 테이블들을 이미 포함하고 있는 디스플레이 데이터 경로 및 렌더 데이터 경로를 이용할 수 있다. 몇몇 경우에, 엔진(227, 229)은 메모리(260) 내에 저장된 하나 이상의 트랜슬레이션 테이블들을 이용하거나 혹은 이를 포함할 수 있다. 렌더 엔진(227) 및 디스플레이 엔진(229)은, 렌더 엔진(227) 및 디스플레이 엔진(229)이 환경(200) 내의 개별적인 컨트롤러의 일부이며 개별적인 렌더 엔진 및 개별적인 디스플레이 엔진으로서 MC(215)와 상호작용하거나 통신한다는 점을 제외하고는, 렌더 엔진(217) 및 디스플레이 엔진(219)에 대해 본원에서 설명된 것과 동일한 기능을 수행할 수 있다. 또한, 엔진(227, 229)은 엔진(317, 319)을 나타낼 수 있다.
도 6B의 다른 컴포넌트들은, 이들이 환경(200) 내에 있으며 디바이스(116), 렌더 엔진(217), 및 디스플레이 엔진(219) 대신에, (예를 들어 MC(215)를 통해) 컨트롤러(118), 렌더 엔진(227), 및 디스플레이 엔진(229)과 상호작용하거나 통신한다는 점을 제외하고는, 도 1A 및 도 6A에 대하여 본원에서 설명된 것일 수 있다.
실시예들에 따르면, 환경(200), 그래픽 VM(150), VMM(120), 하드웨어(110), CPU(101), 메모리(102), BIOS(103), 시스템들(130, 140), 및 MC(215)는, 환경(200)에 대한 이들 테이블들의 생성과 본원 및 도 1A와 도 1B에 대하여 본원에서 설명한 바와 같이, 테이블(264), 테이블(266), 테이블(268), 새도우 글로벌 GTT(272), 새도우 게스트 PPPD(274), 및/또는 단일 레벨 DMA 리맵(278)을 생성, 업데이트 및 이용하기 위한 메모리 공간을 확보할 수 있다.
실시예들에 따르면, 그래픽 VM(150)은, 시스템들(130, 140)이 VMM(120)을 통해 그래픽 디바이스(118)에 액세스하는 동안, VMM(120)을 이용하거나 이에 액세스하지 않고 그래픽 디바이스(118)를 액세스할 수 있다. 일반적으로, 그래픽 컨트롤러는, VMM(120)이 GPA 대 HPA의 트랜슬레이션을 제공할 것을 요구하지 않고, 그래픽 VM(150)으로부터 커맨드 인스트럭션들(예를 들면, GPA를 포함하는 인스트럭션들)(예를 들면, 그래픽 인스트럭션들)을 수신하고 메모리 내의 데이터(예를 들면, 그래픽 데이터)를 액세스할 수 있게 되기를 원한다(예를 들면, 이는 시스템 및/또는 그래픽 경로에 대해 보다 효율적임). 예를 들면, 디바이스(118)는, VMM(120)에 액세스하지 않고 운영 체제(130 및/또는 140)와 통신하기 위한, 그래픽 컨트롤러 등의 개별적 그래픽 컨트롤러일 수 있다. 이를 달성하기 위해, 컨트롤러(118) 및/또는 MC(215)는 GPA들로부터 HPA들로 트랜슬레이팅하기 위한 트랜슬레이션 테이블들의 엔트리들을 이용하기 위한 회로, 하드웨어, 소프트웨어 및/또는 로직을 포함할 수 있다. 구체적으로는, 컨트롤러(118) 및/또는 MC(215)는 테이블(272)의 엔트리들을 이용하여, 그래픽 트랜슬레이션 테이블 내의 애플리케이션에 의해 이용되는 가상 어드레스(그래픽 어드레스)를, 메인 메모리 내의 그래픽 데이터의 호스트 하드웨어 물리적 메모리 어드레스로 트랜슬레이팅할 수 있다. 마찬가지로, 컨트롤러(118) 및 MC(215)는 테이블(274)을 이용하여, 퍼 프로세스 페이지 디렉토리의 가상 어드레스(예를 들면, GPA)를 메인 메모리 내의 그래픽 데이터의 호스트 하드웨어 물리적 메모리 어드레스로 트랜슬레이팅하기 위한 테이블(274)의 엔트리들을 생성할 수 있다.
도 1A, 1B, 6A 및 6B에 도시된 바와 같이, 환경(100 또는 200)은, IO 디바이스가 VM에 직접 할당되고 그 후 그 디바이스에 대한 디바이스 드라이버들이 VMM(120)으로부터 이동하여 컨트롤링 VM으로 이동될 때, 입/출력 디바이스들(예를 들면, 디바이스(112, 114 또는 116))을 가상 기계(예를 들면, 시스템(130, 140 또는 150))로 직접 할당하는 것을 허용한다. 예를 들면, 그래픽 디바이스(116) 또는 컨트롤러(118)를 그래픽 VM(150)에 직접 할당함으로써, (예를 들면, 드라이버(122) 등의 드라이버가 됨으로써) 통상적으로 VMM(120) 내에 있을 수 있는 모든 그래픽 드라이버들이 그 대신에 그래픽 VM(150)으로 이동될 수 있다. 그러나, VM은 메모리의 가상화된 뷰를 가지기 때문에(예를 들면, 그래픽 VM(150)이 메모리(102)의 가상화된 뷰를 가지기 때문에), 디바이스 드라이버들, 또는 VM(예를 들면, 그래픽 VM(150)) 내의 드라이버들은 GPA를 이용하여 IO 디바이스(예를 들면, 디바이스(116) 및/또는 컨트롤러(118))를 프로그래밍한다. 정확한 데이터로의 액세스를 얻기 위해, MC(115 또는 215)(예를 들면, 그래픽 칩셋의 일부)가, IO 디바이스에 의해 발행된 어드레스를 GPA로부터 HPA로 트랜슬레이팅하는 데에 요구될 수 있다. 보다 구체적으로는, 메모리의 그 "가상화된 뷰"로 인해, 각 파티션 또는 VM은 GPA들을 갖는 DMA 요청을 전송할 수 있다. 그러나, 그래픽 디바이스(예를 들면, 디바이스(116) 및/또는 그래픽 컨트롤러(118))는 "가상화된 뷰"(예를 들면, 물리적 메모리 어드레스들의 뷰)를 가지기 때문에, 그래픽 디바이스들이 그 요청을 정확하게 만족시키기 위해서는, GPA들은 HPA들로 트랜슬레이팅되어야 한다.
이 트랜슬레이션은, 디바이스(116) 또는 컨트롤러(118)가, GPA들을 갖는 그 래픽 VM(150)을 통해 시스템(130)으로부터 DMA 요청들을 수신할 때, MC(115 또는 215)에 의해 수행될 수 있다. 이들 DMA 요청들의 어드레스들은, 테이블들(264 또는 266) 내에서 DMA 요청에 의해 지시되는 어드레스에 대응하는, 테이블(272 또는 274) 내의 메모리 어드레스를 지시하는 MC(115 또는 215)에 의해 트랜슬레이팅된다. 따라서, 테이블들(264 또는 266) 및 3 레벨 워크(또는 다른 GPA 대 HPA 테이블)를 이용하여 GPA를 HPA로 변환하거나 트랜슬레이팅하는 대신에, 테이블(272 또는 274)을 이용하여 DMA의 GPA들이 HPA들로 트랜슬레이팅된다. 그러면, 그래픽 데이터는 렌더 및/또는 디스플레이 엔진에 의해 메모리 내에 보다 신속하고 효율적으로 액세스된다.
구체적으로는, 그래픽 VM(150)은, 그래픽 VM(150)이 MC(115 또는 215)를 통해 메모리(260)에 액세스하기 때문에, 메모리(260)의 물리적 어드레스들의 게스트 뷰를 갖는다. 따라서, 애플리케이션들(132)로부터의 DMA 요청들의 GPA들은 여전히 메모리 컨트롤러, 그래픽 디바이스, 및/또는 이들의 조합에 의해 HPA들로 트랜슬레이팅되거나 변환되어서 메모리(260)로부터의 그래픽 데이터에 정확하게 액세스해야 한다.
새도우 테이블들의 엔트리들은, 게스트 테이블들(264, 266)이 생성되거나 업데이트될 때마다 (예를 들어, GPA로부터 HPA로) DMA 리맵핑되며, 이에 따라 HPA 엔트리들을 포함하게 된다. 예를 들면, 도 7은 일 실시예에 따른, 새도우 글로벌 GTT를 생성하는 환경을 나타낸 블럭도이다. 도 7은, GPA GTT 엔트리를 게스트 GTT에 인스톨하려고 시도하는 그래픽 VM(150)을 갖는 환경(700)을 도시한다. 예를 들 면, 그래픽 VM(150)은 (예를 들어, 애플리케이션들(132)로부터의 DMA 요청에 의해 사용될 데이터로서 오프셋 및 그래픽 어드레스를 포함하는) 엔트리(710)를 인스톨할 수 있다. (오프셋, GPA 데이터)(712)에서 제공되는 GPA 데이터를 이용하여 (오프셋, GPA 데이터)(712)에서 지정된 로케이션에서 테이블(264)이 생성, 저장, 인스톨 또는 업데이트된다.
그래픽 VM(150)은 메모리(260)의 물리적 어드레스들의 리얼 뷰를 갖지 않기 때문에, 테이블(264)의 (오프셋, GPA 데이터)(712)의 데이터 부분(예를 들면, (오프셋, GPA 데이터)(712)는 오프셋 및 GPA를 데이터로서 포함함)는, 그 어드레스(예를 들면, GPA(712))의 데이터가 애플리케이션들(132)로부터의 DMA 요청에 의해 액세스될 때마다, HPA들로 트랜슬레이팅되거나 변환되어서 메모리로부터의 그래픽 데이터에 정확하게 액세스할 필요가 있을 것이다. 이러한 수많은 변환을 수행하는 대신에, (오프셋, GPA 데이터)(712)를 적절한 HPA로 트랜슬레이팅하거나 변환하고, 그 변환을 테이블 내의 동일한 대응하는 위치의 새도우 테이블에 저장함으로써 보다 효율적인 시스템이 설정될 수 있다. 애플리케이션들(132)로부터의 DMA 요청이 경로(410)에 의해 처리될 때마다, 테이블(264)에서 룩업(예를 들면, 변환 혹은 트랜슬레이션)을 수행한 후 테이블(580)에서 다른 룩업을 수행하는 대신에, 새도우 테이블에서 단일 레벨 룩업이 수행되어서 보다 신속하고 효과적으로 DMA 요청을 HPA 어드레스로 변환할 수 있다.
따라서, 환경(700)은, MC(115)에 의해 업데이트의 데이터 부분이 트랜슬레이팅되는 (오프셋, HPA 데이터)(714)로 트랜슬레이팅되거나 변환되는 (오프셋, GPA 데이터)(712)를 나타내는데, 이는 테이블 내의 대응하는 동일한 위치에서 새도우 글로벌 GTT 테이블(272)에 저장된다. 따라서, (오프셋, GPA 데이터)(712)는, 두 개의 로케이션으로 전송되거나, 혹은 MC(115)에 의해 "포크(foked)"되어서 테이블(264) 및 테이블(272)을 업데이트하는 것으로 도시된다. MC(115)는, 이 트랜슬레이션 또는 변환을 수행하기 위한 회로 등의 룩업 회로를 포함하거나 혹은 룩업 회로로 나타낼 수 있다(또한 도 8 참조). 이제, 실행시에(예를 들면, VM 상에서의 그래픽 애플리케이션의 실행 동안), 애플리케이션들(132)로부터의 DMA 요청이 경로(410)에 의해 처리될 때마다, 테이블(264)에서 룩업(예를 들면, 변환 또는 트랜슬레이션)을 수행한 후 테이블(580)에서 다른 룩업을 수행하는 대신에, 새도우 테이블(272)에서의 단일 레벨 룩업이 수행되어서 보다 신속하고 효율적으로, DMA 요청을 HPA 어드레스로 변환할 수 있다. 구체적으로는, 새도우 테이블 GTT(272)는 이제, (예를 들어, 새도우 테이블 내의 대응하는 어드레스를 룩업하여 (HPA 데이터)(714)를 획득함으로써) DMA 요청의 그래픽 어드레스를 (HPA 데이터)(714)로 변환 또는 트랜슬레이팅하기 위한 단일 레벨 룩업을 수행하는 데에 이용될 수 있다. 보다 상세한 설명을 위해 도 12를 참조한다.
또한, 도 8은 일 실시예에 따라 새도우 글로벌 GTT를 생성하는 프로세스의 흐름도이다. 도 8은, 환경(700)에 대응할 수 있으며/있거나 새도우 글로벌 GTT의 엔트리를 생성하는 프로세스 등의 프로세스(800)를 도시한다. 도 8은, Gfx VM이 GPA GTT 엔트리를 게스트 GTT에 인스톨하는 것을 시도하는 블럭(810)을 포함하는 프로세스(800)를 도시한다. 예를 들면, 그래픽 VM(150)은 (예를 들어, 그래픽 애 플리케이션 또는 디바이스 드라이버로부터) 그래픽 어드레스 엔트리를 수신하거나 액세스하고 이를 글로벌 GTT를 위한 GPA 엔트리로 변환할 수 있다. 블럭 810은, 그래픽 VM 또는 운영 체제가, 도 7에 대해 전술한 바와 같이 엔트리(710)를 수신하거나 이에 액세스하는 것을 포함할 수 있다. 또한, 블럭 810은, 엔트리(710)로부터 글로벌 GTT(264)의 (오프셋, GPA 데이터)(712)를 생성, 트랜슬레이팅, 변환 또는 구축하는 그래픽 VM(150)에 대한 설명을 포함할 수 있다. 블럭 820에서, (오프셋, GPA 데이터)(712) 및 테이블(264)에 대해 전술한 바와 같이, Gfx VM에 의해 제공된(예를 들면, 액세스 및 변환된) GPA 엔트리가 게스트 GTT에 저장된다.
다음으로, 블럭 830에서, Gfx VM에 의해 인스톨된 GPA 엔트리가 검출되고(예를 들면 액세스되거나 포크 오프(forked off)되고) HPA 엔트리로 트랜슬레이팅된다(예를 들면, GPA 데이터 부분은 HPA로 트랜슬레이팅되지만, (오프셋, GPA 데이터)(712)로부터의 인덱스, 오프셋, 또는 로케이션은 변하지 않는다). 블럭 830은, MC(115)가, Gfx VM(150) 또는 그 밖의 것에 의해(예를 들어, GTT에 대한 메인 메모리 내에 엔트리들을 저장하는 다른 엔티티에 의해) 글로벌 GTT(264)에 추가되는 엔트리들을 검출하는 것을 포함할 수 있다. 블럭 830은 또한, MC(115)가, 도 7에 대해 전술한 바와 같이, 3 레벨 워크(580)(또는 단일 레벨 리맵(278) 등의 다른 GPA 대 HPA 트랜슬레이션)를 이용하여 (오프셋, GPA 데이터)(712)를 (HPA 데이터)(714)로 트랜슬레이팅하는 것을 포함할 수 있다. 블럭 830에서의 트랜슬레이션은, (예를 들어 리맵 테이블(278)을 이용하여) 데이터를 GPA들에서 HPA들로 트랜슬레이팅하기 위한 DMA 리맵으로서 표현될 수 있다.
엔트리(710) 및/또는 (오프셋, GPA 데이터)(712)는, 환경(100)의 부팅 및 초기화시에, 혹은 애플리케이션들(132 또는 142) 중의 하나의 애플리케이션의 로딩 또는 실행시에 인스톨될 수 있다. 마찬가지로, MC(115)는, 예를 들어 소프트웨어, 펌웨어, 로직, 회로, 트랩, 스탑(stops) 및/또는 적절한 디바이스 또는 프로세스를 이용하여, 글로벌 GTT(264)에 대한 메모리에 삽입되거나 생성되거나 저장되는 (오프셋, GPA 데이터)(712)를 검출하거나 감지할 수 있다. 블럭 830은 3 레벨 워크에 의한 트랜슬레이션을 포함할 수 있으며 도 7은 3 레벨 워크(580)를 도시하지만, 다른 적절한 GPA 대 HPA 트랜슬레이션(예를 들면, 테이블(278)과 같은 단일 레벨 워크)이 이용될 수도 있다.
블럭 840에서, HPA 엔트리가 새도우 글로벌 GTT에 저장된다. 블럭 840은, (HPA 데이터)(714)가, 도 7에 대해 전술한 바와 같이, 게스트 GTT와 동일한 대응하는 위치에서 새도우 글로벌 GTT(272)에 저장되는 것을 포함할 수 있다. 블럭 840 및/또는 도 7은, 예를 들어 도 6A 또는 도 6B의 테이블(272)에 대해 전술한 바와 같이 새도우 테이블을 생성하거나 구축하기 위한 엔트리를 저장하는 것을 포함할 수 있다.
도 7-8에 대해 설명한 바와 유사한 개념이 도 1B 및 도 6B의 MC(215) 및 컨트롤러(118)(예를 들면, 환경(200))에 적용된다. 도 9는 일 실시예에 따른, 새도우 게스트 퍼 프로세스 페이지 디스플레이(PPPD)를 생성하기 위한 환경을 나타낸 블럭도이다. 도 9는, GPA PPPD 엔트리를 게스트 PPPD에 인스톨하려고 시도하는 그래픽 VM(150)을 갖는 환경(900)을 도시한다. 예를 들면, 그래픽 VM(150)은 (예를 들어, 애플리케이션들(132)로부터의 DMA 요청에 의해 이용될 데이터로서 오프셋 및 그래픽 어드레스를 포함하는) 엔트리(910)를 PPPD에 인스톨할 수 있다. 엔트리(910)의 오프셋 및 그래픽 어드레스 데이터는 요청(604) 내에 포함될 수 있다. 그래픽 VM(150)은 엔트리(910)로부터 페이지 디렉토리(266)의 (오프셋, GPA 데이터)(912)를 생성, 트랜슬레이팅, 변환 또는 구축한다. 테이블(266)은, (오프셋, GPA 데이터)(912)에서 공급된 GPA 데이터를 이용하여 (오프셋, GPA 데이터)(912)에서 지정된 로케이션에서 생성, 저장, 인스톨 또는 업데이트된다.
도 7에 대해 전술한 바와 유사하게, 그래픽 VM(150)은 메모리(260)의 물리적 어드레스들의 리얼 뷰를 가지지 않기 때문에, 그 어드레스(예를 들면, GPA(912))의 데이터가 애플리케이션들(132)로부터의 DMA 요청에 의해 액세스될 때마다, (오프셋, GPA 데이터)(912)의 데이터 부분은 HPA들로 트랜슬레이팅 또는 변환되어서 메모리로부터의 그래픽 데이터에 정확하게 액세스할 필요가 있을 것이다. 이에 따라, 다시, 실행시에 이러한 수많은 변환을 수행하는 대신에, 적절한 HPA로 (오프셋, GPA 데이터)(912)를 트랜슬레이팅 또는 변환하고, 그 변환을 테이블 내의 대응하는 동일한 위치에서 새도우 테이블 내에 저장함으로써 보다 효율적인 시스템이 설정될 수 있다. 애플리케이션들(132)로부터의 DMA 요청이 경로(420)에 의해 처리될 때마다, 테이블(266)에서 룩업을 수행한 후 테이블(580)에서 다른 룩업을 수행하는 대신에, 새도우 테이블(274)이 이용되어 단일 레벨 룩업을 수행하여서 그래픽 어드레스를 HPA로 변환 혹은 트랜슬레이팅할 수 있다.
따라서, 환경(900)은 MC(115)에 의해 (HPA 데이터)(924)로 트랜슬레이팅되거 나 혹은 변환된 (오프셋, GPA 데이터)(912)를 도시하는데, 이는, 테이블(266)에서의 대응하는 동일한 위치에서 테이블(274) 내에 저장(예를 들면, 저장, 인스톨, 혹은 업데이트)된다. (오프셋, GPA 데이터)(912)는, 두 개의 로케이션으로 전송되거나, 혹은 테이블(266)에 전송됨으로써 "포크(forked)"되고, 검출, 액세스 및/또는 MC(115)로 전송되는 것으로 도시된다. MC(115)는, 예를 들어 이 트랜슬레이션 또는 변환을 수행하기 위한 회로(또한 도 10 참조)를 포함함으로써 룩업 회로를 포함하거나 룩업 회로로 표현될 수 있다. DMA 요청이 경로(420)에 의해 처리될 때마다, 테이블(266)에서 룩업을 수행한 후 테이블(580)에서 다른 룩업을 수행하는 대신에, 새도우 테이블(274)에서 단일 레벨 룩업이 수행되어서 그래픽 어드레스를 HPA로 보다 신속하고 효율적으로 변환하거나 트랜슬레이팅할 수 있다. 보다 상세한 설명을 위해 도 12를 참조한다.
또한, 도 10은 일 실시예에 따른, 새도우 게스트 PPPD를 생성하기 위한 프로세스의 흐름도이다. 도 10은, 환경(900)에 대응하거나 혹은 대응하지 않을 수 있으며/있거나 새도우 게스트 PPPD의 엔트리를 생성하는 프로세스 등의 프로세스(1000)를 도시한다. 도 10은, Gfx VM이 GPA PPPD 엔트리를 게스트 PPPD에 인스톨하려고 시도하는 블럭(1010)을 포함하는 프로세스(1000)를 도시한다. 예를 들면, 그래픽 VM(150)은 (예를 들어, 그래픽 애플리케이션 또는 디바이스 드라이버로부터의) 그래픽 어드레스 엔트리를 액세스(또는 검출)하고 이를 게스트 PPPD에 대한 GPA 엔트리로 변환할 수 있다. 블럭 1010은, 그래픽 VM 또는 운영 체제가, 블럭 810 및/또는 도 9에 대해 전술한 바와 같이 엔트리(910)를 수신하거나 이에 액 세스하는 것을 포함할 수 있다. 또한, 블럭 1010은, 엔트리(910)로부터 테이블(266)의 (오프셋, GPA 데이터)(912)를 생성, 트랜슬레이팅, 변환, 또는 구축하는 그래픽 VM(150)에 대해 전술한 설명을 포함할 수 있다. 블럭 1020에서, 예를 들어 (오프셋, GPA 데이터)(912) 및 테이블(266)에 대해 설명한 바와 같이, Gfx VM에 의해 제공된(예를 들면, 액세스 및 변환된) GPA 엔트리가 게스트 페이지 디렉토리 내에 저장된다.
다음으로, 블럭 1030에서, Gfx VM에 의해 인스톨된 GPA 엔트리가 검출(예를 들면, 액세스 또는 포크 오프)되고 HPA 엔트리로 트랜슬레이팅된다(예를 들면, GPA 데이터 부분은 HPA로 트랜슬레이팅되지만, (오프셋, GPA 데이터)(912)로부터의 인덱스, 오프셋, 또는 로케이션은 변경되지 않는다). 블럭 1030은, MC(115)가, 페이지 디렉토리(266)에 추가되는 엔트리들을 검출하고/하거나 Gfx VM(150) 또는 그 밖의 것(예를 들면, 페이지 디렉토리에 대해 메인 메모리에 엔트리들을 저장하는 다른 엔티티)에 의해 메모리에 기록되거나 입력되는 엔트리들을 검출하는 것을 포함할 수 있다. 블럭(1030)은 또한, MC(115)가, 도 9에 대해 전술한 바와 같이, 3 레벨 워크(580)(또는 단일 레벨 리맵(278) 등의 다른 GPA 대 HPA 트랜슬레이션)를 이용하여 (오프셋, GPA 데이터)(912)를 (HPA 데이터)(924)로 트랜슬레이팅하는 것을 포함할 수 있다. 블럭 1030에서의 트랜슬레이션은, (예를 들어, 리맵 테이블(278)을 이용하여) 데이터를 GPA들로부터 HPA들로 트랜슬레이팅하기 위한 DMA 리맵으로서 표현될 수 있다.
엔트리(910) 및/또는 (오프셋, GPA 데이터)(912)는, 환경(100)의 부팅 혹은 초기화시에, 혹은 애플리케이션들(132 또는 142) 중의 하나의 애플리케이션의 로딩 또는 실행 시에, 그래픽 VM(150)에 의해 인스톨(예를 들면 액세스)될 수 있다. 마찬가지로, MC(115)는, 예를 들어 소프트웨어, 펌웨어, 로직, 회로, 트랩, 스탑 및/또는 적절한 디바이스 또는 프로세스를 이용하여 페이지 디렉토리(266)에 대한 메모리 내에 삽입, 생성 또는 저장되는 (오프셋, GPA 데이터)(912)를 검출 또는 감지할 수 있다. 블럭 1030은 3 레벨 워크를 이용하는 트랜슬레이션을 포함할 수 있으며 도 9는 3 레벨 워크(580)를 도시하지만, 다른 적절한 GPA 대 HPA 트랜슬레이션(예를 들면, 테이블(278)과 같은 단일 레벨 워크)이 이용될 수도 있다.
블럭 1040에서, HPA 엔트리가 새도우 게스트 PPPD에 저장된다. 블럭 1040은, (HPA 데이터)(924)가, 도 9에 대해 전술한 바와 같이, 새도우 테이블 내의 대응하는 위치에서 새도우 게스트 PPPD(274)에 저장되는 것을 포함할 수 있다. 블럭 1040 및/또는 도 9는, 예를 들어 도 6A 또는 도 6B의 테이블(274)에 대해 전술한 바와 같이 새도우 테이블을 생성하거나 구축하기 위해 엔트리를 저장하는 것을 포함할 수 있다.
일부 실시예들에 따르면, 환경(900) 및/또는 프로세스(1000)는 단일 레벨 DMA 리맵을 생성하기 위한 것이 아니라 새도우 게스트 PPPD를 생성하기 위한 것인 블럭들을 포함할 수 있다. 대안적으로, 일부 실시예들은 (예를 들어 도 6A 및 도 6B에 도시되고/되거나 도 9-10에는 도시되지 않은 바와 같이) 새도우 게스트 PPPD를 생성하지 않고 단일 레벨 DMA 리맵을 생성하는 것을 포함할 수 있다. 또한, 블럭들 810 및 1020에서 Gfx VM에 의해 변환된 GPA 엔트리를 새도우 글로벌 GTT 및/ 또는 새도우 게스트 PPPD에 저장(예를 들면, GPA를 논-새도우 테이블들에 기입)하는 것은 일부 실시예들에서 선택적인 것이다. 또한, 몇몇 경우들에서는 논-새도우 테이블들은 존재하지 않는다. MC는 테이블로 시도되는 기입을 감지하고 MC에 의해 및/또는 가상적으로 성공적인 기입의 표시가 제공될 수 있다(예를 들면, 논-새도우 테이블은, 성공적인 기입을 가리키지만 그 데이터를 저장하지는 않는 가상 테이블이다). 몇몇 경우들에서, 존재하지 않는 테이블로의 기입은 MC로의 기입일 수 있다.
도 9-10에 대해 설명한 바와 유사한 개념이 도 1B 및 도 6B의, MC(215) 및 컨트롤러(118)(예를 들면, 환경(200))에 적용된다. 이러한 경우, MC(215)는, 이 트랜슬레이션 또는 변환을 수행하기 위한 회로 등의 룩업 회로를 포함하거나 룩업 회로로서 표현될 수 있다.
도 11은 새도우 테이블들을 유지하거나 업데이트하기 위한 환경의 블럭도이다. 도 11은 그래픽 VM(150), 메모리(260), 및 새도우 메모리(270)를 포함하는 환경(1100)을 도시한다. 그래픽 VM(150)은 글로벌 GTT 업데이트(1110) 및/또는 프로세스 페이지 디렉토리 업데이트(1120)를 생성하거나 발생시킬 수 있다. 업데이트들(1110 및/또는 1120)은, 업데이트들(1110, 1120)이 환경(100)의 컴퓨팅 시스템의 부팅 혹은 초기화 후에 발생될 수 있다는 점을 제외하고는, (오프셋, GPA 데이터)(712 및/또는 912)와 각각 유사할 수 있다. 업데이트들(1110, 1120)은 또한 언제라도 테이블 내에 이미 존재하고 있는 엔트리를 업데이트하는 것으로 나타낼 수 있다. 업데이트(1110, 1120)는, 예를 들어 이들이 메모리(260) 내의 테이블들(264 또는 266)을 업데이트하도록 전송되거나 기록되거나 혹은 이용될 때, MC(115)에 의해 감지되거나 검출될 수 있다.
실시예들에 따르면, MC(115)는 단일 레벨 리맵을 이용하여, 메모리(270)의 테이블(272 및/또는 274)에 기입되거나 혹은 입력될 새도우 테이블 업데이트들 또는 엔트리들을 생성한다. 예를 들면, 단일 레벨 리맵은, 단일 레벨 DMA 리맵(278) 등의 테이블을 이용하여 GPA 어드레스들을 HPA 어드레스들로 트랜슬레이팅할 수 있다. 대안적으로, 다른 실시예들에서는, 검출에 응답하여, MC(115)는 소정의 실시예에 따라 멀티 레벨 워크(580)를 이용하여 메모리(270) 내의 테이블(272 및/또는 274)에 기입되거나 혹은 입력될 새도우 테이블 업데이트 또는 엔트리를 생성한다.
마찬가지로, VMM(120)은 메모리(260) 내의 테이블(268)에 전송되거나 혹은 기록될 엔트리들(1125)을 생성할 수 있다. 실시예들에 따르면, 하드웨어는 퍼 프로세스 GTT 테이블들을 새도잉하지 않아서 이들이 GPA에 남아 있을 수 있다. 이에 따라, 몇몇 경우에, 엔트리들(1125)은 3 레벨 워크(580)를 이용하여 트랜슬레이팅되어 메모리의 액세스 전에 HPA 어드레스들을 생성할 필요가 있다. 이 프로세스는, 도 6A, 6B, 및/또는 도 4에 대한 GPA 대 HPA 테이블 각각의 생성에 대하여 전술한 바와 유사할 수 있다.
도 11에 대해 설명된 바와 유사한 개념이 도 1B 및 도 6B의 MC(215) 및 컨트롤러(118)(예를 들면, 환경(200))에 적용된다.
도 12는 일 실시예에 따른, 그래픽 렌더 및 디스플레이 데이터 경로들을 나타내는 블럭도이다. 도 12는, 디스플레이 경로 등의 경로(1210)와, 렌더 경로 등 의 경로(1220)를 포함하는 환경(1200)을 도시한다. 경로(1210)는, 경로(1210)가 테이블(264) 및 워크(580) 대신에 테이블(272)을 이용한다는 점을 제외하고는, 도 5의 경로(410)와 유사한 경로일 수 있다. 마찬가지로, 경로(1220)는, 경로(1220)가 디렉토리(266) 및 워크(580) 대신에 테이블(274)을 사용하고 워크(580) 대신에 리맵(278)을 이용할 수도 있다는 점을 제외하고는, 도 5의 경로(420)와 유사한 렌더 경로일 수 있다. 환경(1200)은, 렌더링된 요청(604)을 새도우-게스트 PPPD(274)에 전송하는 (예를 들면, 그래픽 디바이스(116)의) 렌더 엔진을 포함한다. 요청(604)은 테이블(274)에 의해 트랜슬레이션(1224)으로 트랜슬레이팅된다.
단일 레벨 트랜슬레이션을 행하기 위해 테이블(274)을 이용하면 도 3, 6, 및 9의 디렉토리(266) 및 워크(580)를 이용하는 것보다 훨씬 효율적임을 알 수 있다. 트랜슬레이션(1224)은, 도 5의 HPA(624), 혹은 도 9의 (HPA 데이터)(924), 또는 테이블(274)의 엔트리를 이용하여 트랜슬레이팅된 요청에 대응할 수 있다. 또한, 트랜슬레이션(1224)은 도 7의 트랜슬레이션(714)에 대응할 수 있다. 테이블(274)을 이용한 트랜슬레이션은, 도 6A 또는 도 6B에 도시된 바와 같이, 메모리(270)를 이용하여 MC(115)에 의해 수행될 수 있다. 트랜슬레이션(1224)은 그러면, 퍼 프로세스 GTT(268)에 전송되는 룩업일 수 있다. 테이블(268)에서, 룩업은 GPA(1226)를 제공한다. GPA(1226)는 도 5의 GPA(626) 또는 도 9의 924, 혹은 테이블(268)의 엔트리에 대응할 수 있다. 그러면, 트랜슬레이션(1226)은 단일 레벨 DMA 리맵(278)에 전송된다. GPA(1226)는 리맵(278)에 의해 트랜슬레이션(1228)으로 트랜슬레이팅된다. 트랜슬레이션(1228)은 도 5의 HPA(628), 혹은 테이블(268 또는 278)에 의 해 트랜슬레이팅된 HPA이거나 혹은 이에 대응할 수 있다. 트랜슬레이션(1228)로의 GPA(628)의 트랜슬레이션은, 도 6A 및 도 6B에 도시된 바와 같이, 메모리(270)에 저장된 단일 레벨 DMA 리맵(예를 들면, 리맵(278))을 이용하여 MC(115)에 의해 수행될 수 있다. 트랜슬레이션(1228)은, 예를 들어 도 2의 데이터 액세스를 위해 메모리(360)에 전송될 수 있다.
리맵(278)을 이용한, 트랜슬레이션(1228)으로의 GPA(1226)의 트랜슬레이션은, 도 5의 워크(580)를 이용한, HPA(628)로의 GPA(626)의 트랜슬레이팅에 대하여 전술한 프로세스보다 더욱 효율적이다(예를 들면, 리맵(278)은 단일 레벨 또는 단일 룩 트랜슬레이션이며, 반면에 워크(580)는 3 레벨 트랜슬레이션임). 대안적으로는, 일부 실시예들에서, GPA(1226)를 메모리(360)에 대한 적절한 트랜슬레이션으로 트랜슬레이팅하는 데에 리맵(278)이 아닌 리맵 또는 트랜슬레이션이 이용될 수도 있다. 예를 들면, 3 레벨 워크(580)가 리맵(278) 대신에 이용될 수 있다.
그러면, 트랜슬레이션(1228)은, 예를 들어 도 2에 대해 전술한 바와 같이, HPA들(362)에서 그래픽 데이터(370 또는 374)를 어드레싱함으로써 메모리(360) 내의 데이터를 액세스(예를 들면 그래픽 데이터를 판독하거나 기입함)하는 데에 이용된다.
또한, 환경(1200)에서, (예를 들면, 그래픽 디바이스(116)의) 디스플레이 엔진은 디스플레이 요청(602)을 새도우 글로벌 GTT(272)에 전송할 수 있다. 테이블(272)은, 예를 들어 도 3, 5, 또는 9에서 테이블(272)을 이용하기 위해 설명된 바와 같이, 트랜슬레이션(1214)으로 요청(602)을 트랜슬레이팅할 수 있다. 트랜슬 레이션(1214)은 도 5의 HPA(614) 또는 도 9의 (HPA 데이터)(924)에 대응할 수 있다. 또한, 트랜슬레이션(1214)은 도 7의 (HPA 데이터)(714)를 이용하는 트랜슬레이션에 대응할 수 있다. 요청(602)을 트랜슬레이션(1214)으로 트랜슬레이팅하기 위해 테이블(272)을 이용하는 것은, 도 5에 대해 전술한 바와 같은 테이블(264) 및 워크(580)를 이용하는 것보다 효율적이며 빠를 수 있음을 알 수 있다. 트랜슬레이션(1214)은, 도 6A 또는 도 6B에 도시된 바와 같이, MC(115)에 의해 메모리(270)에 저장된 테이블(272)을 이용하여 요청(602)으로부터 트랜슬레이팅될 수 있다. 트랜슬레이션(1214)은, 예를 들면 도 2의 데이터 액세스를 위해 메모리(360)에 전송될 수 있다.
테이블들(272, 274)은 VM(예를 들면, 시스템(130 또는 140), 또는 애플리케이션들(132 또는 142)) 및/또는 VMM(예를 들면, VMM(120))에 구조적으로 보이지 않을 수 있다(예를 들면, 볼 수 없거나 혹은 노출되어 있지 않다). 실시예들에 따르면, 테이블(278)은 항상 VMM(예를 들면, VMM(120))에게 구조적으로 보여질 수 있다(예를 들면, 노출되어 있다). 또한, 테이블들(272, 274, 278)은, MC(115 또는 215), 디바이스(116), 및/또는 컨트롤러(118) 등의 하드웨어 또는 칩셋에 보여질 수 있다. 메모리 내의 테이블, 엔트리, 데이터 또는 로케이션은, 그 엔티티에 보고되고, 그 엔티티에 의해 존재하는 것으로 알려지고, 그 엔티티에 노출되고, 그 엔티티에 의해 액세스가능하고, 그 엔티티에 기록될 수도 있고, 그 엔티티로부터 판독될 수도 있고/있거나 그 엔티티에 의해 조작될 수도 있는 경우, VM, VMM, 회로, OS 및/또는 다른 엔티티에 보여질 수 있는 것으로 간주될 수 있다. 메모리 내 의 테이블, 엔트리, 데이터, 또는 로케이션은, 그 엔티티에 보고되지 않고, 그 엔티티에 의해 존재하는 것으로 알려지지 않고, 그 엔티티에 노출되지 않고, 그 엔티티에 의해 액세스가능하지 않고, 그 엔티티에 기록되지 않을 수 있고, 그 엔티티로터 판독되지 않을 수 있고/있거나 그 엔티티에 의해 조작되지 않을 수 있는 경우, VM, VMM, 회로, OS 및/또는 다른 엔티티에 보여지지 않고, 그로부터 감춰지고/지거나 그로부터 은닉되는 것으로 간주될 수 있다.
MC(115)는 VM 또는 VMM에게 투명하게 테이블(272, 274) 및/또는 리맵(278)을 이용하여 트랜슬레이션을 생성할 수 있다. MC(115 또는 215)는 또한, VM 또는 VMM에 투명하게 테이블(272, 274 및/또는 278)에 엔트리들을 생성하거나 혹은 업데이트할 수 있다. 테이블(272, 274)의 생성, 업데이트, 및 사용은, GTT ADDR(예를 들면, Global Translation Table Address) 애퍼처(aperture)로의 기록을 검출하거나 감지하고 새도우 테이블 엔트리, 업데이트, 혹은 사용을 포킹 오프(forking off)하는 MC(115 또는 215)에 의해, 투명하게 수행될 수 있다. 사용을 포킹 오프하는 것은 , 테이블(272, 274, 및/또는 278)을 사용하는 것을 포함할 수 있다. 엔트리 또는 업데이트를 포킹 오프하는 것은, 엔트리 또는 업데이트를 테이블(272, 274 및/또는 278)에 전송하거나 기록하는 것을 포함할 수 있다. 또한, 엔트리 또는 데이터를 트랜슬레이팅하는 것, 엔트리 또는 데이터를 탐색하는 것, 또는 테이블(272, 274 및/또는 278) 또는 디스플레이 또는 렌더 그래픽 데이터를 사용하는 것은, 엔트리가 있는 어드레스 또는 로케이션과 동일하거나, 혹은 대응하는 테이블(264, 266 및/또는 268) 내에 있을 수 있는 로케이션 또는 어드레스에서의 테이블(272, 274, 및/또는 278) 내의 엔트리 또는 데이터를 (예를 들어 기본 및/또는 오프셋 어드레스를 이용하여) 인덱싱하는 것을 포함할 수 있다.
도 12에 대해 설명한 바와 유사한 개념이, 도 1B 및 도 6B의 MC(215) 및 컨트롤러(118)(예를 들면, 환경(200))에 적용된다.
도 13은 일 실시예에 따른, 그래픽 디스플레이 경로 업데이트 및 디스플레이 경로를 나타낸 블럭도이다. 도 13은 디스플레이 업데이트 경로(1310) 및 디스플레이 경로(1320)를 포함하는 환경(1300)을 도시한다. 경로들(1310)은, 도 11에 대해 설명한 바와 같은 환경(1100)의 부분들에 대응할 수 있다. MC(115)에 의해 포킹되어 엔트리를 게스트 글로벌 GTT(264)에 전송하고 다른 엔트리를 단일 레벨 리맵(278)에 전송하는 글로벌 GTT 업데이트(1110)을 포함하는 경로들(1310)이 도시된다. 단일 레벨 리맵(278)으로부터, 예를 들어 테이블(272)의 엔트리를 업데이트하기 위해 새도우 게스트 글로벌 GTT(272)에 업데이트가 전송된다.
경로(1320)는 도 12의 경로(1210)에 대한 설명에 대응할 수 있으며, 도 3의 경로(410)와 동일한 기능을 제공할 수 있다. 요청(602)을 테이블(272)에 전송하는 MC(115)의 디스플레이 엔진(219)을 포함하는 경로(1320)가 도시되어 있다. 테이블(272)은 요청을 트랜슬레이팅하고 이를 트랜슬레이션(1214)으로서 메모리(360)에 전송한다.
도 13에 대해 설명한 바와 유사한 개념이 도 1B 및 도 6B의 MC(215) 및 컨트롤러(118)(예를 들면, 환경(200))에 적용된다.
또한, 도 14는 일 실시예에 따른, 그래픽 렌더 경로 업데이트 및 렌더 경로 를 나타내는 블럭도이다. 도 14는, 렌더 업데이트 경로들(1410) 및 렌더 경로(1420)를 포함하는 환경(1400)을 도시한다. 경로들(1410)은 도 11의 환경(1100)의 부분들에 대응할 수 있다. 경로들(1410)은, 업데이트를 게스트 퍼 프로세스 페이지 디렉토리(266)에 대한 하나의 업데이트, 및 단일 레벨 리맵(278)에 전송되는 다른 업데이트에 포킹하는 MC(115)에 입력되는 퍼 프로세스 페이지 디렉토리 업데이트(1120)를 포함한다. 단일 레벨 리맵(278)으로부터, 업데이트의 트랜슬레이션이 새도우 퍼 프로세스 페이지 디렉토리(274)에 전송된다. 업데이트(1120)는 도 9의 업데이트(오프셋, GPA 데이터)(912)에 대응할 수 있다.
경로들(1410)은 또한, MC(115)에 의해 수신되고 퍼 프로세스 GTT(268)에 포워드되는 퍼 프로세스 GTT 업데이트들(1125)을 포함한다. 업데이트(1125)는, 도 6A, 6B 및 도 4에 대해 설명한 바와 같은 업데이트 테이블(278)과 유사한 업데이트일 수 있다.
렌더 경로(1420)는, MC(215)의 렌더 엔진(217)이 렌더 요청(604)을 테이블(274)에 전송하고, 테이블(274)이 트랜슬레이션(1224)을 테이블(268)에 전송하고 테이블(268)이 트랜슬레이션(1226)을 테이블(278)에 전송하고 테이블(278)이 트랜슬레이션(1228)을 메모리(360)에 전송하는 것을 포함하도록 도시되어 있다. 경로(1428)는 도 12의 경로(1220)에 대응할 수 있다.
도 14에 대해 설명한 바와 유사한 개념이 도 1B 및 도 6B의 MC(215) 및 컨트롤러(118)(예를 들면, 환경(200))에 적용된다.
그래픽 VM(예를 들면, 그래픽 VM(150)), VMM(120), MC(115) 및/또는 그래픽 디바이스들(예를 들면, 디바이스(116) 및/또는 컨트롤러(118))는, 도 1-14에 대해 전술한 바와 같은 기능을 수행하는 적절한 전자 또는 컴퓨터 하드웨어 및 소프트웨어를 포함할 수 있다. 또한, 본 발명의 범주로부터 벗어나지 않고 도 1-14에 예시된 디바이스들 및 방법들에 더 많거나 혹은 더 적은 디바이스들 및/또는 프로세스들이 포함될 수 있으며, 본원에서 도시되고 설명된 블럭들의 구성에 의해 어떠한 특정 순서도 암시되지 않음을 알 것이다. 또한, 도 1-14와 관련하여 설명된 방법들 및 디바이스들은 기계 실행가능 인스트럭션들(예를 들면, 소프트웨어)로 구현될 수 있음을 알 것이다. 이 인스트럭션들은, 설명된 동작들 및 프로세스들을 수행하기 위한 인스트럭션들을 이용하여 프로그래밍된 범용 혹은 특수 목적 프로세서를 기동시키는 데에 이용될 수 있다. 대안적으로는, 이들 동작들 및 프로세스들은, 동작들을 수행하기 위한, 배선에 의해 접속된 로직을 포함하는 특정 하드웨어 구성요소들, 혹은 프로그래밍된 컴퓨터 구성요소들 및 커스텀 하드웨어 구성요소들의 임의의 조합에 의해 수행될 수 있다. 이 방법들은, 이 방법들을 수행하기 위해 컴퓨터(혹은 그 밖의 전자 장치들)를 프로그래밍하는 데에 이용될 수 있는 인스트럭션들이 저장된 기계 판독가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품으로서 제공될 수 있다. 이 명세서의 목적들을 위해, "기계 판독가능 매체"라는 용어는, 그 기계에 의한 실행을 위한 인스트럭션들의 시퀀스를 저장하거나 인코딩할 수 있으며 그 기계로 하여금 본 발명의 방법들 중 임의의 하나를 수행하게 하는 임의의 매체를 포함하도록 취해질 것이다. "기계 판독가능 매체"라는 용어는 이에 따라, 고상 메모리, 광학 및 자기 디스크, 및 반송파 신호를 포함하지만 이에 제한되지는 않는 것으로 취해질 것이다. 또한, 본 기술 분야에서는 소프트웨어란 조치를 취하거나 결과를 유발하는 하나의 형태 또는 다른 형태(예를 들어, 프로그램, 절차, 프로세스, 애플리케이션, 모듈, 로직...)를 통상적으로 칭한다. 이러한 표현은 단지, 컴퓨터에 의한 소프트웨어의 실행이 컴퓨터의 프로세서로 하여금 액션을 수행하거나 결과를 생성하게 함을 나타내는 약칭식 표현일 뿐이다. 몇몇 경우에, 본원에서 개시되는 환경은, PC, 혹은 컴퓨터 서버(예를 들면, 하나 이상의 클라이언트 컴퓨터에, 예를 들어 디스플레이될 데이터를 제공하기 위한 서버) 상에서 구현될 수 있다.
전술한 명세서에서, 특정 실시예들이 개시되었다. 그러나, 특허청구범위에서 제시되는 바와 같은, 실시예들의 더 넓은 정신 및 범주로부터 벗어나지 않고 각종 변경들 및 수정들이 행해질 수 있다. 따라서, 명세서 및 도면들은 제한적인 의미가 아니라 예시적인 것으로 간주되어야 한다.

Claims (21)

  1. 그래픽 데이터의 게스트 물리적 어드레스들(guest physical addresses; GPA)을 직접 메모리 액세스(direct memory access; DMA) 요청의 호스트 물리적 어드레스들(host physical addresses; HPA)로 변환하기 위한 단일 레벨 룩업 테이블(single level lookup table)을 생성하기 위한, 가상 기계 모니터(virtual machine monitor; VMM)를 갖는 가상화된 환경 내의 메모리 컨트롤러 회로
    를 포함하며,
    상기 단일 레벨 룩업 테이블은 상기 회로에는 보여지며, 그래픽 가상 기계에는 보여지지 않는 장치.
  2. 제1항에 있어서,
    상기 단일 레벨 룩업 테이블은, 컴퓨팅 시스템의 렌더 경로에서 그래픽 데이터를 리맵핑(remapping)하기 위한 복수의 엔트리들을 포함하며, 상기 컴퓨팅 시스템은, 직접 메모리 액세스(DMA) 요청들을 상기 렌더 경로에 전송하기 위한 애플리케이션을 가상 기계 상에서 실행시키는 장치.
  3. 제1항에 있어서,
    상기 단일 레벨 룩업 테이블은, 컴퓨팅 시스템의 디스플레이 경로에서 그래픽 데이터를 리맵핑하기 위한 복수의 엔트리들을 포함하며, 상기 컴퓨팅 시스템은, 직접 메모리 액세스(DMA) 요청들을 상기 디스플레이 경로에 전송하기 위한 애플리케이션을 가상 기계 상에서 실행시키는 장치.
  4. 제1항에 있어서,
    상기 단일 레벨 룩업 테이블은 상기 회로에는 보여지며 상기 VMM에는 보여지지 않으며, 상기 단일 레벨 룩업 테이블은, 디스플레이 경로의 글로벌(global) 게스트 트랜슬레이션 테이블(guest tranlation table; GTT)의 새도우 테이블(shadow table)과, 렌더 경로의 퍼 프로세스 페이지 디스플레이(per process page display; PPPD) 트랜슬레이션 테이블의 새도우 테이블 중 하나이며, 상기 메모리 컨트롤러 회로는, 메모리 내에 상기 단일 레벨 룩업 테이블을 기입하기 위한 회로를 더 포함하는 장치.
  5. 제1항에 있어서,
    상기 회로는, 상기 단일 레벨 룩업 테이블을 생성하고 인접하는 메모리 내에 상기 단일 레벨 룩업 테이블을 저장하고 상기 단일 레벨 룩업 테이블을 이용하기 위한 그래픽 회로, 그래픽 칩 셋, 혹은 메모리 컨트롤러(memory controller; MC)를 포함하는 장치.
  6. 제5항에 있어서,
    상기 인접하는 메모리를 상기 VMM에 보고하지 않고, 상기 인접하는 메모리를 사전할당(pre-allocate)하기 위한 기본 입출력 시스템(BIOS)을 더 포함하는 장치.
  7. 제1항에 있어서,
    상기 단일 레벨 룩업 테이블은, 컴퓨팅 시스템의 부팅 동안, 혹은 상기 VMM 상의 제2 가상 기계에서 론칭되는 애플리케이션의 론칭 동안 생성되는 장치.
  8. 제1항에 있어서,
    상기 메모리 컨트롤러 회로는, 제1 메모리 어드레스 트랜슬레이션을 제2 메모리 어드레스 트랜슬레이션과 결합시킴으로써 상기 단일 레벨 룩업 테이블의 엔트리를 생성하는 회로를 더 포함하는 장치.
  9. 제8항에 있어서,
    상기 제1 메모리 어드레스 트랜슬레이션은, 상기 VMM 상의 제2 가상 기계 상에서 론칭되는 애플리케이션에 의해 전송될 제1 가상 메모리 어드레스를, 상기 VMM에 의해 이용되는 GPA로 트랜슬레이팅하기 위한 것이며, 상기 제2 메모리 어드레스 트랜슬레이션은, 상기 VMM에 의해 이용되는 상기 GPA를 상기 HPA로 트랜슬레이팅하기 위한 것인 장치.
  10. 제9항에 있어서,
    상기 제1 가상 메모리 어드레스는, 메인 메모리 내에 저장된 그래픽 데이터에 액세스하기 위해, 상기 VMM 상의 제2 가상 기계에서 론칭되는 애플리케이션에 의해 생성될 어드레스를 포함하는 장치.
  11. 제8항에 있어서,
    상기 VMM 상의 제2 가상 기계에서 론칭되는 애플리케이션에 의해 생성될 엔트리를 검출하기 위한 검출 회로를 더 포함하는 장치.
  12. 제11항에 있어서,
    상기 생성될 엔트리는, 디스플레이 경로의 글로벌 트랜슬레이션 테이블(GTT), 렌더 경로의 퍼 페이지 디렉토리(PPD) 트랜슬레이션 테이블, 및 상기 렌더 경로의 퍼 프로세스 글로벌 트랜슬레이션 테이블(per process global translation table; PPGTT) 중 하나를 생성하거나 업데이트하기 위한 엔트리를 포함하는 장치.
  13. 제8항에 있어서,
    상기 메모리 컨트롤러 회로는, 생성되는 상기 엔트리의 데이터 또는 오프셋과, GPA를 HPA로 리맵핑하기 위한 룩업 테이블로부터의 데이터 또는 오프셋을 결합시켜서 상기 단일 레벨 룩업 테이블의 엔트리를 생성하기 위한 회로를 더 포함하는 장치.
  14. 제1항에 있어서,
    상기 메모리 컨트롤러 회로는, 인접한 메모리 내에 상기 단일 레벨 룩업 테이블을 저장하기 위한 회로를 더 포함하며,
    상기 단일 레벨 룩업 테이블을 이용하여, 상기 VMM 상의 가상 기계에서 실행되는 애플리케이션의 그래픽 데이터의 GPA 어드레스들을 HPA 어드레스들로 변환하는 그래픽 칩 셋을 더 포함하는 장치.
  15. 컴퓨터 서버로서,
    가상 기계 모니터(VMM) 상의 제1 가상 기계에서 론칭되는 애플리케이션에 의해 생성될 엔트리를 검출하기 위한 검출 회로;
    상기 생성될 엔트리로부터의 데이터 또는 오프셋과, 상기 VMM에 의해 생성될 엔트리로부터의 데이터 또는 오프셋을 결합시켜, 게스트 어드레스를 호스트 어드레스로 변환하기 위한 단일 레벨 룩업 테이블의 엔트리를 생성하는 룩업 회로; 및
    제1 메모리 어드레스 트랜슬레이션 테이블 내의 애플리케이션에 의해 생성될 엔트리를 메인 메모리에 저장하고, 제2 메모리 어드레스 트랜슬레이션 테이블 내에 저장된 상기 VMM에 의해 생성될 엔트리를 상기 메인 메모리에 저장하고, 상기 단일 레벨 룩업 테이블의 엔트리를 상기 메인 메모리에 저장하기 위한 메모리 컨트롤러 회로
    를 포함하는 컴퓨터 서버.
  16. 제15항에 있어서,
    그래픽 디스플레이 엔진과 그래픽 렌더 엔진 중 하나의 DMA 요청의 게스트 어드레스를, 상기 요청을 상기 VMM에 전송하지 않고, 상기 단일 레벨 룩업 테이블을 이용하여 호스트 물리적 어드레스(HPA)로 트랜슬레이팅하기 위한 그래픽 디바이스 회로 또는 그래픽 컨트롤러 회로를 더 포함하는 컴퓨터 서버.
  17. 제15항에 있어서,
    상기 단일 레벨 룩업 테이블이 그래픽 가상 기계, 상기 VMM, 혹은 상기 제1 가상 기계에서 론칭되는 애플리케이션에 보여지지 않게 하고, 상기 단일 레벨 룩업 테이블이 개별적 그래픽 카드 및 통합된 그래픽 칩 셋 중 하나에게 보여지게 하는 메모리 컨트롤러 회로를 더 포함하는 컴퓨터 서버.
  18. 컴퓨팅 시스템으로서,
    메인 메모리에 결합된 프로세서; 및
    상기 프로세서 및 상기 메모리에 결합된 그래픽 가상 기계 및 가상 기계 모니터(VMM)를 갖는 가상화된 환경 내의 그래픽 칩셋 ― 상기 칩셋은, 그래픽 데이터의 게스트 물리적 어드레스들(GPA)을 직접 메모리 액세스(DMA) 요청의 호스트 물리적 어드레스들(HPA)로 변환하기 위한 단일 레벨 룩업 테이블을 생성하기 위한 메모리 컨트롤러를 포함하며, 상기 그래픽 가상 기계는 상기 메모리 컨트롤러에게는 보여지지만, 상기 VMM에게는 보여지지 않으며, 상기 단일 레벨 룩업 테이블은 상기 메모리 컨트롤러에게는 보여지며, 상기 그래픽 가상 기계 혹은 상기 VMM에게는 보여지지 않음 ―
    을 포함하는 컴퓨팅 시스템.
  19. 제18항에 있어서,
    상기 그래픽 칩셋은, 상기 VMM에 액세스하지 않고, 상기 VMM 상에서 실행되는 그래픽 가상 기계와 통신하기 위한 통합된 그래픽 디바이스와 개별적 그래픽 컨트롤러 중 하나인 컴퓨팅 시스템.
  20. 제19항에 있어서,
    상기 그래픽 가상 기계는 소프트웨어 애플리케이션이며, 상기 통합된 그래픽 디바이스 또는 상기 개별적 그래픽 컨트롤러는 그래픽 가상 기계 실행 동안 상기 VMM에 액세스하지 않는 컴퓨팅 시스템.
  21. 제20항에 있어서,
    상기 그래픽 가상 기계는, 가상 애플리케이션으로부터 상기 DMA 요청을 수신하며, 상기 테이블을 이용하여 GPA로부터 HPA로 트랜슬레이팅될 상기 요청을 상기 칩셋으로 전송하는 컴퓨팅 시스템.
KR1020087030723A 2006-06-30 2007-06-22 그래픽 데이터의 메모리 어드레스 리맵핑을 위한 장치 및 방법 KR101017451B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/480,663 US7868897B2 (en) 2006-06-30 2006-06-30 Apparatus and method for memory address re-mapping of graphics data
US11/480,663 2006-06-30

Publications (2)

Publication Number Publication Date
KR20090026286A KR20090026286A (ko) 2009-03-12
KR101017451B1 true KR101017451B1 (ko) 2011-02-25

Family

ID=38876129

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087030723A KR101017451B1 (ko) 2006-06-30 2007-06-22 그래픽 데이터의 메모리 어드레스 리맵핑을 위한 장치 및 방법

Country Status (6)

Country Link
US (5) US7868897B2 (ko)
EP (1) EP2035936B1 (ko)
KR (1) KR101017451B1 (ko)
CN (1) CN101484883B (ko)
AT (1) ATE549680T1 (ko)
WO (1) WO2008005722A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101716715B1 (ko) 2016-12-27 2017-03-15 주식회사 티맥스클라우드 가상 머신 환경의 네트워크 입출력 장치 가상화 방법 및 장치

Families Citing this family (77)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102006052384A1 (de) * 2006-11-07 2008-05-08 BÖGRA Technologie GmbH Lagerschalenpaar und Verfahren zu seiner Herstellung
US8527673B2 (en) * 2007-05-23 2013-09-03 Vmware, Inc. Direct access to a hardware device for virtual machines of a virtualized computer system
US8140781B2 (en) * 2007-12-31 2012-03-20 Intel Corporation Multi-level page-walk apparatus for out-of-order memory controllers supporting virtualization technology
US20100235386A1 (en) * 2009-03-13 2010-09-16 Cox Communications, Inc. Multi-user file system for multi-room digital video recording
US8806144B2 (en) 2009-05-12 2014-08-12 Stec, Inc. Flash storage device with read cache
US9723319B1 (en) * 2009-06-01 2017-08-01 Sony Interactive Entertainment America Llc Differentiation for achieving buffered decoding and bufferless decoding
US8566511B2 (en) * 2009-07-23 2013-10-22 Stec, Inc. Solid-state storage device with multi-level addressing
WO2011011016A1 (en) * 2009-07-24 2011-01-27 Hewlett-Packard Development Company, L.P. Virtual-machine-based application-service provision
US8572610B2 (en) * 2009-12-09 2013-10-29 General Electric Company Patient monitoring system and method of safe operation with third party parameter applications
US9558051B1 (en) 2010-05-28 2017-01-31 Bormium, Inc. Inter-process communication router within a virtualized environment
US9104837B1 (en) 2012-06-18 2015-08-11 Bromium, Inc. Exposing subset of host file systems to restricted virtual machines based on upon performing user-initiated actions against host files
US9767274B2 (en) 2011-11-22 2017-09-19 Bromium, Inc. Approaches for efficient physical to virtual disk conversion
US9116733B2 (en) 2010-05-28 2015-08-25 Bromium, Inc. Automated provisioning of secure virtual execution environment using virtual machine templates based on requested activity
US8752047B2 (en) 2010-05-28 2014-06-10 Bromium, Inc. Automated management of virtual machines to process untrusted data based on client policy information
US10310696B1 (en) 2010-05-28 2019-06-04 Bromium, Inc. Supporting a consistent user interface within a virtualized environment
US9386021B1 (en) 2011-05-25 2016-07-05 Bromium, Inc. Restricting network access to untrusted virtual machines
US9239909B2 (en) 2012-01-25 2016-01-19 Bromium, Inc. Approaches for protecting sensitive data within a guest operating system
US8972980B2 (en) * 2010-05-28 2015-03-03 Bromium, Inc. Automated provisioning of secure virtual execution environment using virtual machine templates based on requested activity
US9148428B1 (en) 2011-05-25 2015-09-29 Bromium, Inc. Seamless management of untrusted data using virtual machines
US9135038B1 (en) 2010-05-28 2015-09-15 Bromium, Inc. Mapping free memory pages maintained by a guest operating system to a shared zero page within a machine frame
US10095530B1 (en) 2010-05-28 2018-10-09 Bromium, Inc. Transferring control of potentially malicious bit sets to secure micro-virtual machine
US9269122B2 (en) * 2010-10-11 2016-02-23 Hewlett-Packard Development Company, L.P. First and second software stacks and discrete and integrated graphics processing units
US9921860B1 (en) 2011-05-25 2018-03-20 Bromium, Inc. Isolation of applications within a virtual machine
US10546118B1 (en) 2011-05-25 2020-01-28 Hewlett-Packard Development Company, L.P. Using a profile to provide selective access to resources in performing file operations
US8839245B1 (en) 2012-06-18 2014-09-16 Bromium, Inc. Transferring files using a virtualized application
US10846396B1 (en) 2011-05-25 2020-11-24 Hewlett-Packard Development Company, L.P. Downloading data in a dedicated virtual machine
WO2013009300A1 (en) * 2011-07-12 2013-01-17 Hewlett-Packard Development Company, L.P. Tracing operations in a cloud system
CN102999393B (zh) * 2011-09-13 2016-03-02 联想(北京)有限公司 一种数据传输的方法、装置及电子设备
US9245108B1 (en) 2012-03-13 2016-01-26 Bromium, Inc. Dynamic adjustment of the file format to identify untrusted files
US11023088B2 (en) 2012-06-18 2021-06-01 Hewlett-Packard Development Company, L.P. Composing the display of a virtualized web browser
US9384026B1 (en) 2012-06-18 2016-07-05 Bromium, Inc. Sharing and injecting cookies into virtual machines for retrieving requested web pages
US9201850B1 (en) 2012-06-18 2015-12-01 Bromium, Inc. Composing the display of a virtualized web browser
US9727534B1 (en) 2012-06-18 2017-08-08 Bromium, Inc. Synchronizing cookie data using a virtualized browser
US10095662B1 (en) 2012-06-18 2018-10-09 Bromium, Inc. Synchronizing resources of a virtualized browser
US9734131B1 (en) 2012-06-18 2017-08-15 Bromium, Inc. Synchronizing history data across a virtualized web browser
TWI479422B (zh) * 2013-01-25 2015-04-01 Wistron Corp 電腦系統及其繪圖處理方法
US9405642B2 (en) 2013-01-29 2016-08-02 Red Hat Israel, Ltd. Providing virtual machine migration reliability using an intermediary storage device
US10241814B2 (en) * 2013-01-29 2019-03-26 Red Hat Israel, Ltd. Virtual machine memory migration by storage
KR101821633B1 (ko) 2013-03-14 2018-03-08 삼성전자주식회사 메모리 시스템
US9292328B2 (en) 2013-05-24 2016-03-22 Bromium, Inc. Management of supervisor mode execution protection (SMEP) by a hypervisor
US20150058519A1 (en) * 2013-08-22 2015-02-26 International Business Machines Corporation Detection of hot pages for partition hibernation
US9104600B2 (en) * 2013-08-22 2015-08-11 International Business Machines Corporation Merging direct memory access windows
US8719374B1 (en) 2013-09-19 2014-05-06 Farelogix, Inc. Accessing large data stores over a communications network
US9679143B2 (en) * 2013-11-06 2017-06-13 Avago Technologies General Ip (Singapore) Pte. Ltd. Updated IO memory management unit identity settings for DMA remapping
US9390033B2 (en) 2013-11-13 2016-07-12 Sandisk Technologies Llc Method and system for communicating with non-volatile memory via multiple data paths
US9430411B2 (en) 2013-11-13 2016-08-30 Sandisk Technologies Llc Method and system for communicating with non-volatile memory
US9377968B2 (en) 2013-11-13 2016-06-28 Sandisk Technologies Llc Method and system for using templates to communicate with non-volatile memory
US10599565B2 (en) 2013-12-24 2020-03-24 Hewlett-Packard Development Company, L.P. Hypervisor managing memory addressed above four gigabytes
US10430614B2 (en) 2014-01-31 2019-10-01 Bromium, Inc. Automatic initiation of execution analysis
US10412046B2 (en) * 2014-06-17 2019-09-10 Nxp Usa, Inc. Method of, and a device for updating a multiple-processing entity packet management system, and associated computer program product
WO2016003646A1 (en) * 2014-06-30 2016-01-07 Unisys Corporation Enterprise management for secure network communications over ipsec
US9680873B1 (en) 2014-06-30 2017-06-13 Bromium, Inc. Trusted network detection
WO2016003434A1 (en) * 2014-06-30 2016-01-07 Hewlett-Packard Development Company, L.P. Virtual machine device access
US10311122B1 (en) 2014-08-22 2019-06-04 Bromium, Inc. On-demand unprotected mode access
US9690928B2 (en) * 2014-10-25 2017-06-27 Mcafee, Inc. Computing platform security methods and apparatus
GB2535823B (en) * 2014-12-24 2021-08-04 Intel Corp Hybrid on-demand graphics translation table shadowing
US9495303B2 (en) * 2015-02-03 2016-11-15 Intel Corporation Fine grained address remapping for virtualization
US10242422B2 (en) 2015-03-26 2019-03-26 Intel Corporation Computing methods and apparatuses with graphics and system memory conflict check
US10116519B2 (en) 2015-03-27 2018-10-30 Yodiwo Ab Programmable distributed management system of interconnected things and applications
WO2016205975A1 (en) * 2015-06-26 2016-12-29 Intel Corporation Apparatus and method to improve scalability of graphics processor unit (gpu) virtualization
KR20170020012A (ko) * 2015-08-13 2017-02-22 삼성전자주식회사 콘텐츠 보안 처리 방법 및 이를 지원하는 전자 장치
WO2017166205A1 (en) * 2016-03-31 2017-10-05 Intel Corporation High density virtual machine container with copy-on-dma-write
US9798597B1 (en) 2016-09-26 2017-10-24 International Business Machines Corporation Verifying selective purging of entries from translation look-aside buffers
CN108255569B (zh) * 2016-12-28 2021-12-31 华为技术有限公司 一种虚拟机调用定制化硬件的方法及装置
US10367639B2 (en) 2016-12-29 2019-07-30 Intel Corporation Graphics processor with encrypted kernels
US10908939B2 (en) * 2017-01-31 2021-02-02 Intel Corporation Efficient fine grained processing of graphics workloads in a virtualized environment
EP3355188B1 (en) 2017-01-31 2021-08-25 OpenSynergy GmbH Instrument display on a car dashboard by checking frames of a gui by a realtime os
CN106998365B (zh) * 2017-04-20 2021-02-12 阔地教育科技有限公司 音视频处理器、智能教学装置、智能教学系统及方法
US10417733B2 (en) * 2017-05-24 2019-09-17 Samsung Electronics Co., Ltd. System and method for machine learning with NVMe-of ethernet SSD chassis with embedded GPU in SSD form factor
CN107341115B (zh) * 2017-06-30 2021-07-16 联想(北京)有限公司 虚拟机内存访问方法、系统和电子设备
CN109509139B (zh) * 2017-09-14 2023-06-27 龙芯中科技术股份有限公司 顶点数据处理方法、装置及设备
CN107741863A (zh) * 2017-10-08 2018-02-27 深圳市星策网络科技有限公司 一种显卡的驱动方法和装置
US11372787B2 (en) * 2017-12-09 2022-06-28 Intel Corporation Unified address space for multiple links
US10706493B2 (en) * 2017-12-29 2020-07-07 Intel Corporation Apparatus and method for display virtualization using mapping between virtual and physical display planes
US11809888B2 (en) 2019-04-29 2023-11-07 Red Hat, Inc. Virtual machine memory migration facilitated by persistent memory devices
JP7238178B2 (ja) * 2020-02-04 2023-03-13 キオクシア株式会社 メモリ装置及びメモリ装置を制御する方法
CN114201269B (zh) * 2022-02-18 2022-08-26 阿里云计算有限公司 内存换页方法、系统及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5077654A (en) 1987-12-11 1991-12-31 Hitachi, Ltd. Virtual machine system which translates virtual address from a selected virtual machine into real address of main storage
US5088031A (en) 1985-02-20 1992-02-11 Hitachi, Ltd. Virtual machine file control system which translates block numbers into virtual addresses then into real addresses for accessing main storage
US6895491B2 (en) 2002-09-26 2005-05-17 Hewlett-Packard Development Company, L.P. Memory addressing for a virtual machine implementation on a computer processor supporting virtual hash-page-table searching
US6907600B2 (en) 2000-12-27 2005-06-14 Intel Corporation Virtual translation lookaside buffer

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4456954A (en) 1981-06-15 1984-06-26 International Business Machines Corporation Virtual machine system with guest architecture emulation using hardware TLB's for plural level address translations
JP2839201B2 (ja) * 1990-07-30 1998-12-16 株式会社日立製作所 仮想計算機システム
US5426748A (en) * 1992-01-03 1995-06-20 International Business Machines Corporation Guest/host extended addressing method and means with contiguous access list entries
US7900017B2 (en) * 2002-12-27 2011-03-01 Intel Corporation Mechanism for remapping post virtual machine memory pages
US7111145B1 (en) * 2003-03-25 2006-09-19 Vmware, Inc. TLB miss fault handler and method for accessing multiple page tables
US7467381B2 (en) * 2003-12-16 2008-12-16 Intel Corporation Resource partitioning and direct access utilizing hardware support for virtualization
US8274518B2 (en) * 2004-12-30 2012-09-25 Microsoft Corporation Systems and methods for virtualizing graphics subsystems
US7428626B2 (en) * 2005-03-08 2008-09-23 Microsoft Corporation Method and system for a second level address translation in a virtual machine environment
US7363463B2 (en) * 2005-05-13 2008-04-22 Microsoft Corporation Method and system for caching address translations from multiple address spaces in virtual machines
CN1313927C (zh) * 2005-06-16 2007-05-02 北京航空航天大学 智能卡运行环境的控制方法
US7499057B2 (en) * 2005-09-09 2009-03-03 Microsoft Corporation Address translation in an integrated graphics environment

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5088031A (en) 1985-02-20 1992-02-11 Hitachi, Ltd. Virtual machine file control system which translates block numbers into virtual addresses then into real addresses for accessing main storage
US5077654A (en) 1987-12-11 1991-12-31 Hitachi, Ltd. Virtual machine system which translates virtual address from a selected virtual machine into real address of main storage
US6907600B2 (en) 2000-12-27 2005-06-14 Intel Corporation Virtual translation lookaside buffer
US6895491B2 (en) 2002-09-26 2005-05-17 Hewlett-Packard Development Company, L.P. Memory addressing for a virtual machine implementation on a computer processor supporting virtual hash-page-table searching

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101716715B1 (ko) 2016-12-27 2017-03-15 주식회사 티맥스클라우드 가상 머신 환경의 네트워크 입출력 장치 가상화 방법 및 장치

Also Published As

Publication number Publication date
US8477145B2 (en) 2013-07-02
US20120139927A1 (en) 2012-06-07
EP2035936A4 (en) 2009-07-08
KR20090026286A (ko) 2009-03-12
CN101484883B (zh) 2013-01-30
US7868897B2 (en) 2011-01-11
US9817770B2 (en) 2017-11-14
US8154555B2 (en) 2012-04-10
US20080001958A1 (en) 2008-01-03
EP2035936A1 (en) 2009-03-18
ATE549680T1 (de) 2012-03-15
US20160147668A1 (en) 2016-05-26
US20110037770A1 (en) 2011-02-17
EP2035936B1 (en) 2012-03-14
CN101484883A (zh) 2009-07-15
US20130298124A1 (en) 2013-11-07
US9223603B2 (en) 2015-12-29
WO2008005722A1 (en) 2008-01-10

Similar Documents

Publication Publication Date Title
KR101017451B1 (ko) 그래픽 데이터의 메모리 어드레스 리맵핑을 위한 장치 및 방법
US11023385B2 (en) System and method for one step address translation of graphics addresses in virtualization
US7499057B2 (en) Address translation in an integrated graphics environment
CA3116380A1 (en) Faster access of virtual machine memory backed by a host computing device's virtual memory
US7120778B2 (en) Option ROM virtualization
US20180336158A1 (en) Systems and methods for data transfer with coherent and non-coherent bus topologies and attached external memory
US8135899B1 (en) Expansion of virtualized physical memory of virtual machine
CN109582435B (zh) 用于灵活的虚拟功能队列分配的方法以及设备
US20090265708A1 (en) Information Processing Apparatus and Method of Controlling Information Processing Apparatus
JP2013546111A (ja) 仮想化によるスマートデバイスの直接的共有
US20170277632A1 (en) Virtual computer system control method and virtual computer system
EP2874066B1 (en) Method in a memory management unit and a memory management unit, for managing address translations in two stages

Legal Events

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

Payment date: 20140203

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20150130

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20160127

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20170201

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20180201

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20190129

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20200129

Year of fee payment: 10