KR20140057405A - I/o 디바이스에 의해 메모리에 액세스하는 것을 금지하는 보호 모드를 갖는 입력/출력 메모리 관리 유닛 - Google Patents

I/o 디바이스에 의해 메모리에 액세스하는 것을 금지하는 보호 모드를 갖는 입력/출력 메모리 관리 유닛 Download PDF

Info

Publication number
KR20140057405A
KR20140057405A KR1020147010694A KR20147010694A KR20140057405A KR 20140057405 A KR20140057405 A KR 20140057405A KR 1020147010694 A KR1020147010694 A KR 1020147010694A KR 20147010694 A KR20147010694 A KR 20147010694A KR 20140057405 A KR20140057405 A KR 20140057405A
Authority
KR
South Korea
Prior art keywords
memory
management unit
address translation
devices
iommu
Prior art date
Application number
KR1020147010694A
Other languages
English (en)
Other versions
KR101471108B1 (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 KR20140057405A publication Critical patent/KR20140057405A/ko
Application granted granted Critical
Publication of KR101471108B1 publication Critical patent/KR101471108B1/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/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/145Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being virtual, e.g. for virtual blocks or segments before a translation mechanism
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1491Protection against unauthorised use of memory or access to memory by checking the subject access rights in a hierarchical protection system, e.g. privilege levels, memory rings
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • G06F21/79Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/82Protecting input, output or interconnection devices
    • G06F21/85Protecting input, output or interconnection devices interconnection devices, e.g. bus-connected or in-line devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2129Authenticate client device independently of the user

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Storage Device Security (AREA)

Abstract

I/O 디바이스에 의해 메모리에 액세스하는 것을 금지하는 보호 모드를 갖는 입력/출력 메모리 관리 유닛. 메모리 관리 유닛은 복수의 I/O 디바이스로부터 메모리 액세스 요청을 수신하도록 구성된다. 메모리 관리 유닛은 이 유닛이 (I/O 디바이스로부터) 메모리 액세스 요청을 메모리 어드레스 변환 데이터의 동일한 세트에 맵핑하는 것에 의해 복수의 I/O 디바이스에 의한 메모리 액세스를 금지하는 보호 모드를 구현한다. 메모리 관리 유닛이 보호 모드에 있지 않은 경우, 이 유닛은 복수의 I/O 디바이스로부터 메모리 액세스 요청을 메모리 어드레스 변환 데이터의 상이한 각 세트에 맵핑한다. 따라서, 상기 메모리 관리 유닛은 일반적으로 요구되는 더 적은 (예를 들어, 무(none)) 어드레스 변환 테이블을 사용하여 I/O 디바이스에 의해 메모리에 액세스되는 것을 금지할 수 있다.

Description

I/O 디바이스에 의해 메모리에 액세스하는 것을 금지하는 보호 모드를 갖는 입력/출력 메모리 관리 유닛{INPUT/OUTPUT MEMORY MANAGEMENT UNIT WITH PROTECTION MODE FOR PREVENTING MEMORY ACCESS BY I/O DEVICES}
많은 컴퓨터 시스템 설계에서 보안이 중요한 고려사항이다. 예를 들어, 데스크탑 컴퓨터에서 전자 문서에 액세스하기를 원하는 유저는 일부 악의적인 행위자가 이 문서를 열어 문서 컨텐츠를 판독하거나 및/또는 변경하기를 원치 않을 수 있다. 그러나, 컴퓨팅 환경이 바이러스, 스파이웨어, 또는 심지어 버그와 같은 악의적인 소프트웨어를 포함하는 경우, 문서 컨텐츠는 누설되거나 및/또는 변경될 수 있다.
악의적인 행위자에 대항하여 보호하기 위하여, 유저는 컴퓨팅 환경이 알려진 신뢰성 있는(trusted) 소프트웨어만을 포함하기를 원할 수 있다. 예를 들어, 데스크탑 컴퓨터에서 문서를 여는 유저는 컴퓨팅 환경이 알려진 신뢰성 있는 코드만을 실행하고, 악의적인 소프트웨어가 문서 컨텐츠를 누설하거나 및/또는 변경하지 못하기를 원할 수 있다. 다른 예에서, 투표 기계(voting machine)의 유저는 이 기계가 신뢰성 있는 투표-기계 소프트웨어만을 실행하고, 이 소프트웨어가 변개되어 유저의 투표를 변경하거나 허가받지 않은 자가 투표를 보기를 원하지 않을 수 있다.
일부 시스템은 신뢰성 있는 소프트웨어만이 로딩되는 것을 보장하는 신뢰성 있는 초기화 프로시저(initialization procedure)를 지원하는 하드웨어를 제공한다. 예를 들어, CPU(central processing unit) 명령 세트는 신뢰성 있는 부트스트랩(bootstrap)을 구현하는데 사용될 수 있는 SKINIT와 같은 보안 커널 초기화 명령을 포함할 수 있다. 신뢰성 있는 부트스트랩을 구현하기 위해, 보안 커널 초기화 명령은 메모리의 작은 부분을 보호하고 이후 신뢰성 있는 소프트웨어를 이 보호된 부분으로 로딩할 수 있다. 본 명세서에서 신뢰성 있는 부트(TBOOT) 시퀀스라고 지칭되는 신뢰성 있는 소프트웨어는 추가적인 신뢰성 있는 소프트웨어를 안전한 방식으로 로딩하는 소프트웨어 구성을 설정(set)할 수 있다. 예를 들어, SKINIT 명령은, 인터럽트(interrupt)를 디스에이블링(disabling)하고, 주변 디바이스로부터 이 보호된 메모리 영역으로의 직접 메모리 액세스(direct memory access: DMA)를 디스에이블링하고, SKINIT 명령을 실행하는 것을 제외하고는 모든 코어를 디스에이블링하는 것에 의해 메모리의 64K 영역을 보호하는 보안 커널 초기화 명령이다. 이 64K 영역이 보호된 경우, SKINIT는 TBOOT 시퀀스를 이 보호 영역으로 로딩할 수 있다. 일부 경우에, SKINIT 명령은 시스템 컴포넌트(예를 들어, 신뢰성 있는 처리 모듈)이 변경되거나 손상됨이 없이 TBOOT 시퀀스를 안전하게 로딩할 수 있을지 여부를 검증하는데 차후 사용될 수 있는 TBOOT 시퀀스의 체크섬(checksum)을 저장하도록 명령할 수 있다.
메모리 관리 유닛은 복수의 입력/출력(I/O) 디바이스로부터 메모리 액세스의 요청을 수신하도록 구성된다. 메모리 관리 유닛은 이 유닛이 (I/O 디바이스로부터) 메모리 액세스 요청을 메모리 어드레스 변환 데이터의 동일한 세트에 맵핑하는 것에 의해 복수의 I/O 디바이스에 의한 메모리 액세스를 금지하는 보호 모드를 구현한다. 메모리 관리 유닛이 보호 모드에 있지 않은 경우, 이 유닛은 복수의 I/O 디바이스로부터 메모리 액세스 요청을 메모리 어드레스 변환 데이터의 상이한 각 세트에 맵핑한다. 따라서, 메모리 관리 유닛은 일반적으로 요구되는 것보다 더 적은 어드레스 변환 테이블을 사용하여 I/O 디바이스에 의해 메모리에 액세스하는 것을 금지할 수 있다. 여러 실시예에서, 메모리 어드레스 변환 데이터는 하나 이상의 메모리 어드레스 변환 테이블을 사용하여 메모리에 및/또는 하나 이상의 하드웨어 레지스터(register)에 저장될 수 있다.
일부 실시예에서, 소프트웨어는 메모리 관리 유닛을 사용하여 신뢰성 있는 초기화 프로시저를 구현할 수 있다. 보안 초기화 프로시저는 시스템 메모리의 일 부분이 복수의 I/O 디바이스에 의해 직접 메모리에 액세스하는 것을 금지하는 보안 커널 초기화 명령을 실행할 수 있다. 이 프로시저는 메모리의 보호된 부분 내에 하나 이상의 어드레스 변환 테이블의 일 세트를 생성할 수 있으며, 이 변환 테이블은 메모리 액세스를 금지한다. 소프트웨어는 이 보호 모드에서 메모리 관리 유닛이 실행되도록 구성하여, 메모리 관리 유닛이 I/O 디바이스로부터 메모리 액세스 요청을 메모리 액세스를 금지하는 하나 이상의 어드레스 변환 테이블의 세트에 맵핑하는 것에 의해 I/O 디바이스에 의한 메모리 액세스를 금지할 수 있다. 보호 모드에서 실행되지 않은 경우, 메모리 관리 유닛은 복수의 I/O 디바이스로부터 I/O 요청을 하나 이상의 메모리 어드레스 변환 테이블의 상이한 각 세트에 맵핑하도록 구성된다.
도 1은 일부 실시예에 따라 메모리 액세스 파라미터 주입(injection)을 수행하도록 구성된 입력/출력 메모리 관리 유닛(IOMMU)을 포함하는 컴퓨터 시스템의 하이 레벨 뷰를 도시하는 블록도;
도 2는 본 명세서에 설명된 바와 같이 IOMMU-제공된 메모리 보호를 구현하도록 구성된 시스템의 블록도;
도 3은 일부 실시예에 따라 보호 모드를 구현하도록 구성된 IOMMU를 동작시키는 방법을 도시하는 흐름도;
도 4는 일부 실시예에 따라 본 명세서에 설명된 바와 같이 보호 모드를 구현할 수 있는 IOMMU를 사용하여 신뢰성 있는 부트 프로시저를 시작하는 방법을 도시하는 흐름도;
도 5는 일부 실시예에 따라 본 명세서에 설명된 바와 같이 메모리 액세스 파라미터 주입을 수행하도록 구성된 컴퓨터 시스템을 도시하는 블록도.
본 명세서는 "일 실시예" 또는 "실시예"라는 언급을 포함한다. "일 실시예에서" 또는 "실시예에서"라는 어구의 표현은 반드시 동일한 실시예를 나타내는 것은 아니다. 특정 특징, 구조, 또는 특성은 본 발명에 따라 임의의 적절한 방식으로 조합될 수 있다.
용어. 이하 문단은 본 명세서(첨부된 청구범위를 포함하여)에서 발견되는 용어에 대한 정의 및/또는 문맥을 제공한다:
"포함하는". 이 용어는 개방형 용어이다. 첨부된 청구범위에 사용된 바와 같이, 이 용어는 추가적인 구조 또는 단계를 배제하지 않는다. "하나 이상의 프로세서 유닛 ...을 포함하는 장치"라고 언급된 청구범위를 고려해 보자. 이 청구범위는 이 장치가 추가적인 컴포넌트(예를 들어, 네트워크 인터페이스 유닛, 그래픽 회로 등)를 포함하는 것을 배제하지 않는다.
"~하도록 구성된". 여러 유닛, 회로, 또는 다른 컴포넌트는 태스크(task) 또는 태스크들을 수행"하도록" 구성된 바와 같이 설명되거나 청구될 수 있다. 이러한 문맥에서, "~ 하도록 구성된"은 유닛/회로/컴포넌트가 동작 동안 태스크 또는 태스크들을 수행하는 구조(예를 들어, 회로)를 포함하는 것을 나타내는 것에 의해 구조를 언급하는데 사용된다. 그리하여, 유닛/회로/컴포넌트는 지정된 유닛/회로/컴포넌트가 현재 동작하고 있지 않은 경우에도 (예를 들어, 온(on) 이 아닌 경우에도) 태스크를 수행하도록 구성된 것이라고 말할 수 있다. "~하도록 구성된"이라는 언어와 함께 사용되는 유닛/회로/컴포넌트는 하드웨어 - 예를 들어, 회로, 동작을 구현하도록 실행가능한 프로그램 명령을 저장하는 메모리 등을 포함한다. 유닛/회로/컴포넌트가 하나 이상의 태스크를 수행하도록 "구성된" 것이라고 언급하는 것은 이 유닛/회로/컴포넌트에 대해 35 U.S.C. §112, 제6절을 명시적으로 상기하려고 의도된 것이 아니다. 추가적으로, "~ 하도록 구성된"이라는 것은 소프트웨어 및/또는 펌웨어(예를 들어, FPGA 또는 소프트웨어를 실행하는 일반-목적 프로세서)에 의해 조작되어 해당 태스크(들)를 수행할 수 있는 방식으로 동작하는 일반 구조(예를 들어, 일반 회로)를 포함할 수 있다. "~하도록 구성된"이라는 것은 하나 이상의 태스크를 구현하거나 수행하도록 적응된 디바이스(예를 들어, 집적 회로)를 제조하는 제조 프로세스(예를 들어, 반도체 제조 시설)를 적응하는 것을 더 포함할 수 있다.
"제1", "제2" 등. 본 명세서에 사용된 바와 같이, 이들 용어는 이들이 명사에 선행하는 라벨로 사용되는 것일 뿐, 임의의 유형의 순서(ordering)(예를 들어, 공간적, 시간적, 논리적 등)를 의미하는 것이 아니다. 예를 들어, 8개의 처리 요소 또는 코어를 구비하는 프로세서에서, "제1" 및 "제2" 처리 요소라는 용어는 8개의 처리 요소 중 임의의 2개를 나타내는데 사용될 수 있다. 다시 말해, "제1" 및 "제2" 처리 요소는 논리적 처리 요소 0 및 1로 제한되지 않는다.
"~에 기초하여". 본 명세서에 사용된 바와 같이, 이 용어는 결정에 영향을 미치는 하나 이상의 인자(factor)를 기술하는데 사용된다. 이 용어는 결정에 영향을 미칠 수 있는 추가적인 인자를 배제하지 않는다. 즉, 결정은 이들 인자에만 기초하거나 또는 이들 인자에 적어도 부분적으로 기초하여 이루어질 수 있다. "B에 기초하여 A를 결정하는" 어구를 고려해 보자. B는 A의 결정에 영향을 미치는 하나의 인자일 수 있는 것이지만, 이러한 어구는 A의 결정이 C에 기초하는 것을 배제하는 것이 아니다. 다른 경우에, A는 B에만 기초하여 결정될 수 있다.
일부 컴퓨터 시스템은 신뢰성 있는 부트 동작을 지원하는 하드웨어를 제공한다. 예를 들어, SKINIT 명령은 메모리의 64K 영역이 여러 프로세서 및 주변 디바이스에 의해 액세스되는 것을 금지하며, 신뢰성 있는 프로그램 시퀀스(TBOOT)를 이 보호 영역으로 로딩하며, TBOOT가 안전한 방식으로 다른 신뢰성 있는 소프트웨어를 로딩할 수 있게 한다.
현대 소프트웨어 및 하드웨어 시스템이 사이즈 및 복잡성이 성장하고 있어서, SKINIT 명령에 의해 보호되는 메모리의 64K 영역은 유효 TBOOT 시퀀스를 저장하는 데에는 너무 작아졌다. 예를 들어, 일부 현대 시스템은 메모리 액세스 요청에 지정된 가상 메모리 어드레스를 시스템 물리적 어드레스로 변환하는 것에 의해 메모리 제한을 강제하도록 구성된 I/O 메모리 관리 유닛(IOMMU)을 통해 주변 디바이스로 하여금 메모리 액세스(예를 들어, DMA)를 수행할 수 있게 한다. 이러한 IOMMU의 일례는 전체 내용이 본 명세서에 참조 문헌으로 병합된 I/O 및 연산 오프로드를 위한 다중레벨 어드레스 변환을 포함하는 I/O 메모리 관리 유닛(I/O Memory Management Unit Including Multilevel Address Translation for I/O and Computation Offload )에 관한 미국 특허 공개 2011/0023027에 개시되어 있다. 이러한 시스템에서, TBOOT 시퀀스는 IOMMU에 I/O 변환 테이블을 생성하여 테이블에 원하는 메모리 제한을 강제하는 것에 의해 IOMMU이 메모리 액세스 동작을 차단하도록 이론적으로 구성할 수 있다. 그러나, I/O 변환 테이블은 상당한 메모리를 요구할 수 있어서, SKINIT 명령에 의해 보호된 64K 영역 내에 이들 데이터 구조에 맞추는 것이 곤란하거나 불가능할 수 있다. 예를 들어, 16-비트 버스/디바이스/기능 식별자(BDF)를 사용하여 주변 디바이스를 식별하는 IOMMU는 최대 65536개의 주변 디바이스에 각 변환 테이블을 요구할 수 있다. 각 디바이스가 1바이트를 초과하는 메모리를 요구하기 때문에, 64K의 메모리만을 구비하는 TBOOT 시퀀스는 IOMMU이 모든 주변 디바이스로부터의 메모리 액세스 동작을 제한하도록 구성할 만큼 충분한 자원을 가지지 못할 수 있다.
일부 실시예에 따르면, IOMMU는 IOMMU가 상당한 저장 면적을 요구함이 없이 주변 디바이스에 의해 메모리에 액세스되는 것을 디스에이블하는 보호 모드에서 동작하도록 소프트웨어에 의해 구성될 수 있다. 일부 실시예에서, IOMMU는 요청이 동일한 디바이스로부터 온 것처럼 모든 인입되는 메모리 액세스 요청을 IOMMU이 처리할 것을 명령하도록 설정될 수 있는 보호 플래그를 포함할 수 있다. 예를 들어, IOMMU가 각 BDF 식별자를 사용하여 디바이스를 식별하는 경우, 보호 플래그가 설정된 IOMMU는 어느 디바이스가 이 요청을 송신했는지에 상관없이 이 요청이 BDF 0으로부터 온 것처럼 모든 인입되는 DMA 요청을 처리할 수 있다. 디폴트 BDF 값(예를 들어, 0)에 대응하는 IOMMU 디바이스 테이블 엔트리는 IOMMU의 능력 중 어느 것을 사용하여 프로그래밍될 수 있고 임의의 기능 서브세트로 제한될 필요는 없다. IOMMU는 BDF 0에 대응하는 단일 세트의 테이블을 사용하여 모든 메모리 액세스 요청을 변환할 수 있다. 따라서, 모든 관련 I/O 변환 테이블은 단일 페이지에 저장될 수 있고, 일부 실시예에서, 이 페이지의 처음 8 바이트 내지 16 바이트 후에 있는 임의의 메모리는 비-IOMMU 목적으로 사용될 수 있다.
일부 실시예에서, 메모리 액세스를 금지하는 테이블 세트(예를 들어, 상기 BDF 0에 대응하는 것)는 메모리에 저장된 테이블로 구현될 수 있다. 그러나, 여러 실시예에서 이러한 테이블(또는 이 내에 포함된 정보)의 일부 또는 전부는 다른 저장 메커니즘을 사용하여 저장될 수 있다. 예를 들어, 일부 실시예에서, IOMMU는 메모리-맵핑된 입력/출력(MMIO) 공간에서 보일 수 있는 하나 이상의 레지스터에 변환 데이터를 저장할 수 있다. 따라서, 변환 정보의 메모리 면적은 제로로 감소될 수 있다. 후술하는 실시예들 중 많은 것이 메모리 액세스를 금지하는 변환 데이터를 저장하는 메모리를 사용하는 것이지만, 여러 실시예에서, 변환 데이터의 일부나 전부는 IOMMU 레지스터와 같은 다른 메커니즘을 사용하여 저장될 수 있는 것으로 이해된다. 변환 데이터 라는 용어는 본 명세서에서 일반적으로 시스템 내 어디에 데이터가 저장되어 있는지에 상관없이 메모리 어드레스 변환을 결정하는데 사용된 임의의 데이터를 말하는데 일반적으로 사용된다.
보호 모드에서 동작할 때 IOMMU에 의해 요구되는 변환 테이블의 사이즈를 감소시키는 것에 의해, 전술한 메커니즘은 TBOOT 시퀀스가 작은 IOMMU 데이터 구조(예를 들어, 페이지 테이블)를 사용하게 하여 메모리 전부가 주변 디바이스에 의해 액세스되는 것을 금지한다. 보호 모드에서 IOMMU의 보호 하에, TBOOT 시퀀스는 SKINIT의 보호 한계를 초과하는 보다 복잡한 IOMMU 데이터 구조 및/또는 페이지 테이블을 설정할 수 있다. 이러한 구조 및 테이블이 생성된 경우, 소프트웨어는 보호 플래그를 설정해제(unset)하는 것에 의해 IOMMU를 정상 동작으로 리턴시킬 수 있다.
도 1은 일부 실시예에 따라 메모리 액세스 파라미터 주입을 수행하도록 구성된 IOMMU을 포함하는 컴퓨터 시스템의 하이-레벨 뷰를 도시하는 블록도이다. 도시된 실시예에서, 시스템(10)은 하나 이상의 프로세서(12), 메모리 관리 유닛(MMU(14)), 메모리 제어기(MC(18)), 메모리(20), 하나 이상의 주변 I/O 디바이스(22), 및 IOMMU(26)를 포함한다. MMU(14)는 하나 이상의 변환 룩어사이드 버퍼(translation lookaside buffer: TLB)(16)를 포함하고, 주변 I/O 디바이스(22)는 하나 이상의 I/O TLB(IOTLB)(24)를 포함한다. 도시된 실시예에 따르면, I/O MMU(IOMMU)(26)는 테이블 워커(table walker)(28), 캐시(30), 제어 레지스터(32), 및 제어 로직(34)을 포함한다. 프로세서(12)는 메모리 제어기(18)에 연결된 MMU(14)에 연결된다. I/O 디바이스(22)는 메모리 제어기(18)에 연결된 IOMMU(26)에 연결된다. IOMMU(26) 내에서, 테이블 워커(28), 캐시(30), 제어 레지스터(32), 및 제어 유닛(34)은 함께 연결된다.
시스템(10)은 시스템의 하이-레벨 기능을 도시하며, 실제 물리적 구현은 많은 형태를 취할 수 있다. 예를 들어, MMU(14)는 각 프로세서(12)에 통합될 수 있다. 메모리(20)가 도시되어 있지만, 메모리 시스템은, 일부 실시예에서, 메모리 어드레스 공간이 물리적으로 별개의 메모리 제어기에 연결된 다수의 물리적으로 별개의 메모리로 맵핑된 분산된 메모리 시스템일 수 있다. IOMMU(26)는 I/O-소싱된(sourced) 메모리 요청과 메모리(20) 사이 경로를 따라 어디엔가 배치될 수 있고, 하나를 초과하는 IOMMU가 있을 수 있다. 더 나아가, IOMMU는 시스템의 상이한 부분에서 상이한 지점에 위치될 수 있다.
프로세서(12)는 임의의 원하는 명령 세트 아키텍처를 구현하는 임의의 프로세서 하드웨어를 포함할 수 있다. 일 실시예에서, 프로세서(12)는 x86 아키텍처, 및 보다 구체적으로 AMD64TM 아키텍처를 구현한다. 여러 실시예는 수퍼파이프라이닝(superpipelined)되거나 및/또는 수퍼스칼라(superscalar)일 수 있다. 하나를 초과하는 프로세서(12)를 포함하는 실시예는 이산적으로 구현되거나, 또는 칩 다중프로세서(chip multiprocessor: CMP) 및/또는 칩 다중 쓰레드(chip multithreaded: CMT)로 구현될 수 있다.
메모리 제어기(18)는 메모리(20)와 시스템(10)의 나머지 부분 사이를 인터페이싱하도록 설계된 임의의 회로를 포함할 수 있다. 메모리(20)는 하나 이상의 램버스 DRAM(RDRAM), 동기적 DRAM(SDRAM), DDR SDRAM, 정적 RAM 등과 같은 임의의 반도체 메모리를 포함할 수 있다. 메모리(20)는 시스템에서 분산될 수 있어서, 다수의 메모리 제어기(18)가 존재할 수 있다.
MMU(14)는 프로세서(12)에 의해 소싱된 메모리 요청을 위한 메모리 관리 유닛을 포함할 수 있다. MMU는 변환 룩어사이드 버퍼(TLB)(16), 및 테이블 워크 기능을 포함할 수 있다. 변환이 MMU(14)에 의해 수행될 때, MMU(14)는 CPU 변환 테이블(50)에 변환 메모리 요청(예를 들어, 도 1에서 점선 화살표(46 및 48)로 도시된)을 생성할 수 있다. CPU 변환 테이블(50)은 프로세서(12)에 의해 구현된 명령 세트 아키텍처에 한정된 것으로 변환 데이터를 저장할 수 있다.
I/O 디바이스(22)는 컴퓨터 시스템(10)과 다른 디바이스들 사이에 통신하고, 휴먼 인터페이스를 컴퓨터 시스템(10)에 제공하고, 저장매체(예를 들어 디스크 드라이브, 콤팩트 디스크(CD) 또는 디지털 비디오 디스크(DVD) 드라이브, 솔리드 스테이트 저장매체 등)를 제공하며, 및/또는 개선된 기능을 컴퓨터 시스템(10)에 제공하는 임의의 디바이스를 포함할 수 있다. 예를 들어, I/O 디바이스(22)는 네트워크 인터페이스 카드, 통합된 네트워크 인터페이스 기능, 모뎀, 비디오 가속기, 오디오 카드 또는 통합된 오디오 하드웨어, 하드 또는 플로피 디스크 드라이브 또는 드라이브 제어기, 키보드, 마우스, 태블릿 등과 같은 유저 입력 디바이스와 인터페이싱하는 하드웨어, 비디오 디스플레이를 위한 비디오 제어기, 프린터 인터페이스 하드웨어, 주변 컴포넌트 인터페이스(PCI), PCI 익스프레스(PCIe), PCI-X, USB, 파이어와이어(firewire), SCSI(작은 컴퓨터 시스템 인터페이스) 등과 같은 하나 이상의 주변 인터페이스로의 브리지, 사운드 카드, 및 일반-목적 인터페이스 버스(GPIB) 또는 필드 버스 인터페이스 카드 등과 같은 여러 데이터 획득 카드 중 하나 이상을 포함할 수 있다. "주변 디바이스"라는 용어는 일부 I/O 디바이스를 기술하는데 사용될 수도 있다.
일부 경우에, I/O 디바이스(22) 중 하나 이상은 IOTLB(24) 및/또는 MMU와 같은 입력/출력 변환 룩어사이드 버퍼(IOTLB)를 포함할 수 있다. 이들 IOTLB는 IOMMU(26)의 외부에 있어서 "원격 IOTLB"라고 지칭될 수 있다. 이 경우에, 이미 변환된 어드레스는 일부 방식으로 마킹(marked)되어 IOMMU(26)가 메모리 요청을 다시 변환하는 시도를 하지 않도록 할 수 있다. 일 실시예에서, 변환된 어드레스는 "미리 변환된" 것으로 간단히 마킹될 수 있다.
아래에 더 설명된 바와 같이, IOMMU(26)는 시스템(10)에서 가상화를 간략화하는 여러 특징을 포함할 수 있다. 후술하는 설명은, 가상 기계를 관리하고(기본 하드웨어(underlying hardware)에서의 실행을 스케줄링하고), 여러 시스템 자원에 액세스를 제어하며, 및/또는 다른 기능을 제공하는 가상 기계 모니터(virtual machine monitor: VMM)를 말할 수 있다. VMM 및 하이퍼바이저(hypervisor)라는 용어는 본 명세서에서 상호 교환 가능하게 사용된다.
도시된 실시예에서, 프로세서(들)(12)는 가상화된 환경에서 소프트웨어를 실행하도록 구성된다. 따라서, 도 1은 VMM(106)에서 실행되는 3개의 가상 기계(100A, 100B, 및 100C)(즉, VM 게스트 1-3)를 도시한다. 주어진 실시예에서 가상 기계의 수는 상이한 시간에서 변할 수 있고, 가상 기계가 유저에 의해 시작하고 종료하기 때문에 사용 동안 동적으로 변할 수 있다. 도시된 실시예에서, 가상 기계(100A)는 하나 이상의 게스트 애플리케이션(102) 및 이 애플리케이션(102)을 실행하고 이 애플리케이션에 서비스를 제공하고 및/또는 이 애플리케이션 중 실행 애플리케이션을 관리하도록 구성된 게스트 운영 시스템(OS)(104)을 포함한다. OS(104)는 이 OS(104)가 시스템(10)의 물리적 하드웨어에 의해서가 아니라 VMM(106)에 의해 생성된 가상 기계를 제어하는 것이어서 "게스트" OS라고 지칭된다. 유사하게, VM(100B) 및 VM(100C)은 하나 이상의 게스트 애플리케이션 및 게스트 OS를 각각 더 포함할 수 있다.
가상 기계에서 애플리케이션은 가상 기계의 가상 어드레스 공간, 및 그리하여 게스트 가상 어드레스(guest virtual address: GVA)를 사용한다. 가상 기계의 게스트 OS는 IOMMU(26)에서 설정(예를 들어, 페이지 테이블)을 관리하여 IOMMU가 가상 기계의 GVA를 동일한 가상 기계에 특정된 게스트 물리적 어드레스(guest physical address: GPA)에 맵핑할 수 있게 한다. 게스트 OS가 시스템 하드웨어에서 직접 실행되고 있는 경우, VMM이 개입됨이 없이, OS 설정이 생성하는 물리적 어드레스는 시스템(10)에 대한 시스템 물리적 어드레스(system physical address: SPA)일 수 있다. 그러나, 게스트 OS가 가상 기계에서 실행되고 있어서, 이 게스트 OS는 게스트-특정 GVA로부터 동일한 게스트에 특정된 GPA로 변환하는 설정만을 제공할 수 있다. 그리하여, 일부 실시예에서, 가상 기계 모니터(예를 들어, VMM(106))는 여러 게스트 기계의 GPA를 기본 시스템의 대응하는 SPA로 맵핑하는 IOMMU 내 설정을 관리할 수 있다. 따라서, I/O 디바이스(22)가 게스트(100A)의 GVA를 지정하는 메모리 액세스 요청을 수행하는 경우, IOMMU(26)는 VMM(106) 및 게스트 OS(104)로부터 설정을 사용하여 GVA를 SPA로 변환할 수 있다.
도 1에 도시된 바와 같이, I/O 디바이스(22)로부터 메모리(20)로 가는 경로는 프로세서(12)에서 메모리(20)로 가는 경로와는 적어도 부분적으로 분리된다. 구체적으로, I/O 디바이스(22)로부터 메모리(20)로 가는 경로는 MMU(14)를 통해 가는 것이 아니라, IOMMU(26)를 통해 간다. 따라서, MMU(14)는 I/O 디바이스(22)로부터 소싱된 메모리 요청에 대해 메모리 관리를 제공하지 않을 수 있다.
일반적으로, 메모리 관리는 어드레스 변환 및 메모리 보호를 제공할 수 있다. 어드레스 변환은 가상 어드레스를 물리적 어드레스로 (예를 들어, 전술한 바와 같이 GVA를 SPA로) 변환한다. 메모리 보호 기능은 특권 레벨 요구조건, 캐시 능력 및 캐시 제어(예를 들어, 라이트쓰루(writethrough) 또는 라이트백(writeback)), 코히런시(coherency), 비-실행(no-execute: NX) 플래그 등과 같은 여러 다른 메모리 액세스 파라미터와 함께 일부 입도(granularity) 레벨(예를 들어, 페이지)에서 메모리에 판독 및/또는 기록 액세스를 제어할 수 있다. 임의의 세트의 메모리 보호는 여러 실시예에서 구현될 수 있다. 일부 실시예에서, IOMMU(26)에 의해 구현된 메모리 보호는 적어도 일부 측면에서 MMU(14)에 의해 구현된 메모리 보호와는 상이할 수 있다. 일 실시예에서, IOMMU(26)에 의해 구현되는 메모리 보호는 IOMMU(26) 및 MMU(14)에 의해 사용되는 변환 데이터를 저장하는 변환 테이블이 공유될 수 있도록 한정될 수 있다(설명의 편의를 위하여 도 1에는 별개로 도시되어 있다). 다른 실시예에서, 변환 테이블들은 별개일 수 있고 여러 범위로 IOMMU(26) 및 MMU(14) 사이에 공유되지 않을 수 있다.
I/O 디바이스(22)는 직접 메모리 액세스(DMA), 어드레스 변환 서비스(ATS) 액세스, 페이지 요청 인터페이스(PRI) 액세스, 및/또는 메모리(20)에 액세스하는 다른 유형의 동작과 같은 메모리 액세스 요청을 발행하도록 구성될 수 있다. 일부 동작 유형은 서브유형들로 더 분할될 수 있다. 예를 들어, DMA 동작은 판독, 기록, 또는 인터로킹된(interlocked) 동작일 수 있다. 그러나, DMA라는 용어는 일반적으로 본 명세서에서 I/O 디바이스로부터 임의의 메모리 액세스 요청을 말하는데 사용될 수 있다. 메모리 액세스 동작은 하나 이상의 프로세서(12)에서 실행되는 소프트웨어에 의해 개시될 수 있다. 소프트웨어는 DMA 동작을 수행하도록 직접 또는 간접으로 I/O 디바이스(22)를 프로그래밍할 수 있다.
소프트웨어는 소프트웨어가 실행되는 어드레스 공간에 대응하는 어드레스를 I/O 디바이스(22)에 제공할 수 있다. 예를 들어, 프로세서(12)에서 실행되는 게스트 애플리케이션(예를 들어, 앱 102)은 GVA를 I/O 디바이스(22)에 제공할 수 있는 반면, 프로세서(12)(예를 들어, OS(104))에서 실행되는 게스트 OS는 GPA를 I/O 디바이스(22)에 제공할 수 있다.
I/O 디바이스(22)가 메모리 액세스를 요청하는 경우, 게스트 어드레스(GVA 또는 GPA)는 IOMMU(26)에 의해 대응하는 시스템 물리적 어드레스(SPA)로 변환될 수 있다. IOMMU는 메모리(20)에 액세스하기 위해 메모리 제어기(18)에 SPA를 제시할 수 있다. 즉, IOMMU(26)는 I/O 디바이스(22)에 의해 소싱된 메모리 요청을 변경하여 요청에 있는 수신된 어드레스를 SPA로 변경(즉, 변환)하고, 이후 이 SPA를 메모리 제어기(18)에 전달하여 메모리(20)에 액세스할 수 있다.
여러 실시예에서, IOMMU(26)는 I/O 디바이스로부터 수신하는 어드레스의 유형에 따라 1개의-레벨, 2개의-레벨 또는 무(no) 변환을 제공할 수 있다. 예를 들어, GPA를 수신한 것에 응답하여, IOMMU(26)는 GPA-SPA(1개의-레벨) 변환을 제공할 수 있고, GVA를 수신한 것에 응답하여, IOMMU(26)는 GVA-SPA(2개의-레벨) 변환을 제공할 수 있다. 그리하여, 게스트 애플리케이션은 메모리 액세스를 요청할 때 GVA 어드레스를 직접 I/O 디바이스에 제공하여, 종래의 VMM 인터셉션(interception) 및 변환을 불필요하게 할 수 있다. 1개의-레벨, 2개의-레벨, 또는 무 변환이 설명되었으나, 다른 실시예에서, 추가적인 어드레스 공간이 사용될 수 있는 것으로 고려된다. 이 실시예에서, 추가적인 변환 레벨(즉, 다중레벨 변환)은 IOMMU(26)에 의해 수용되어 추가적인 어드레스 공간을 수용할 수 있다.
도 1에 도시된 IOMMU(26)은 주어진 메모리 요청에 대해 변환할 I/O 변환 테이블(36)을 검색하는 테이블 워커(28)를 포함할 수 있다. 테이블 워커(28)는 변환 테이블(36)로부터 변환 데이터를 판독하는 메모리 요청을 생성할 수 있다. 변환 테이블 판독은 도 1에서 점선 화살표(38 및 40)로 도시된다.
보다 신속한 변환을 제공하기 위해, IOMMU(26)는 일부 변환 데이터를 캐싱할 수 있다. 예를 들어, 캐시(30)는 TLB와 유사한 캐시 형태일 수 있어서 이전의 변환 결과를 캐싱하여, 게스트 가상 및 게스트 물리적 페이지 번호를 시스템 물리적 페이지 번호 및 대응하는 변환 데이터로 맵핑할 수 있다. 주어진 메모리 요청에 대한 변환이 캐시(30)에서 발견되지 않는 경우, 테이블 워커(28)가 호출될 수 있다. 여러 실시예에서, 테이블 워커(28)는 하드웨어로, 또는 마이크로제어기 또는 다른 프로세서 및 (예를 들어, IOMMU(26) 내 판독-전용 메모리(ROM)에) 대응하는 실행가능한 코드로 구현될 수 있다. 다른 캐시들이 캐시(30)의 일부로서 페이지 테이블, 또는 그 일부, 및/또는 디바이스 테이블, 또는 그 일부를 캐싱하기 위해 포함될 수 있다. 따라서, IOMMU(26)는 메모리(20)에 저장된 변환 데이터로부터 판독하거나 이 변환 데이터로부터 유도되는 변환 데이터를 저장하는 하나 이상의 메모리를 포함할 수 있다.
제어 로직(34)은 캐시(30)에 액세스하여 주어진 메모리 요청에 대한 변환의 히트/미스(hit/miss)를 검출하도록 구성될 수 있고, 테이블 워커(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)의 다른 특징을 더 구현할 수 있다.
일부 실시예에서, 제어 레지스터(32)는 소프트웨어에 의해 IOMMU를 보호 모드에 두도록 사용될 수 있는 하나 이상의 보호 플래그 및/또는 필드를 포함할 수 있다. 본 명세서에 설명된 많은 실시예는 소프트웨어에 의해 IOMMU를 보호 모드로 두도록 설정되고 IOMMU를 정상 동작으로 리턴하도록 설정해제될 수 있는 보호 플래그(예를 들어, 일 비트)를 사용한다. 그러나, 여러 다른 실시예에서, 유사한 기능은 플래그 및/또는 필드의 조합으로 구현될 수 있다.
도 2는 본 명세서에 설명된 바와 같이 IOMMU-제공된 메모리 보호를 구현하도록 구성된 시스템의 블록도이다. 일부 실시예에서, 시스템(200)은 도 1의 I/O 디바이스(들)(22), IOMMU(26), 및 메모리(20)에 대응할 수 있다. 유사(analogy)를 제공하기 위하여, 시스템(200)의 일부 컴포넌트는 시스템(20)의 유사한 컴포넌트에 대응하는 번호를 사용하여 라벨링된다. 그러나, 이러한 컴포넌트에 의해 제공되는 기능은 특정 구현 상세에 따라 2개의 시스템에 걸쳐 변할 수 있다.
도시된 실시예에 따르면, 시스템(200)은 도 1의 I/O 디바이스(22) 중 하나에 대응할 수 있는 I/O 디바이스(205)를 포함한다. I/O 디바이스(205)는 IOMMU(26)에 메모리 액세스 요청(예를 들어, DMA)을 하도록 구성될 수 있다. 전술한 바와 같이, 주변 디바이스로부터 메모리 액세스 요청은 특정 메모리 액세스 요청이 유래한 특정 디바이스를 나타내는 BDF 번호와 같은 디바이스 식별자를 포함할 수 있다. 예를 들어, 디바이스(205)로부터 메모리 액세스 요청은 디바이스 ID(207)로 태그된다.
IOMMU(26)는 IOMMU(26)의 메모리 액세스 요청을 작동시키고, 메모리 어드레스 변환을 수행하고, 메모리 보호를 구현하며, 및/또는 여러 다른 기능을 구현하도록 구성될 수 있는 제어 로직(34)을 포함한다. 제어 로직(32)의 기능은 제어 레지스터(32) 중 여러 것에 저장된 값에 따라 달라질 수 있다.
메모리 변환을 수행하기 위해, IOMMU(26)는 메모리(20)에 저장된 여러 변환 테이블에 액세스를 요구할 수 있다. 하나의 이러한 테이블은 메모리 액세스 요청을 할 수 있는 각 I/O 디바이스를 위한 각 엔트리를 포함할 수 있는 디바이스 테이블(225)일 수 있다. IOMMU(26)는 디바이스 테이블이 저장된 메모리(20)의 메모리 어드레스를 저장할 수 있는 디바이스 테이블 베이스 레지스터(215)에 저장된 메모리 어드레스를 사용하여 디바이스 테이블을 찾도록(locate) 구성될 수 있다. 따라서, 메모리 어드레스를 변환할 때, IOMMU는 베이스 레지스터(215)로부터 테이블의 메모리 어드레스를 판독하는 것에 의해 디바이스 테이블을 찾을 수 있다.
일부 실시예에서, 디바이스 테이블(예를 들어, 225)은 메모리 액세스 요청을 할 수 있는 각 I/O 디바이스에 대해 각 디바이스 테이블 엔트리(device table entry: DTE)를 포함할 수 있다. 도시된 실시예에서, 디바이스 테이블(225)은 디바이스 테이블 엔트리(DTE)(230)를 포함한다. 일반적인 동작(예를 들어, 비-보호 모드)에서, 각 DTE는 각 주변 디바이스에 대응한다. 예를 들어, 각 DTE는 디바이스에 대응하는 각 디바이스 식별자(예를 들어, 디바이스 ID(207))에 대응할 수 있다. DTE는 이 디바이스로부터 메모리 액세스 요청의 메모리 어드레스를 변환하는데 사용할 수 있는 포인터 및/또는 다른 데이터 구조를 포함할 수 있다.
디바이스 테이블(225)은 BDF 번호와 같은 디바이스 식별자에 의해 인덱싱될 수 있다. 따라서, IOMMU 제어 로직은 주어진 메모리 액세스 요청의 일부로 수신된 디바이스 식별자를 사용하여, 요청 디바이스에 대응하는 DTE를 찾을 수 있다. 예를 들어, 도시된 실시예에서, I/O 디바이스(205)는 IOMMU와 통신할 때 디바이스 ID(207)를 포함할 수 있다. I/O 디바이스(205)로부터 메시지를 수신한 것에 응답하여, IOMMU는 디바이스 ID(207)를 사용하여 디바이스 테이블(225)에서 디바이스마다 DTE(235)의 대응하는 DTE를 찾을 수 있다.
상이한 실시예에서, 디바이스 식별자는 상이한 방식으로 한정될 수 있고, 디바이스가 부착된 주변 상호연결에 기초할 수 있다. 예를 들어, 주변 컴포넌트 상호연결(PCI) 디바이스는 버스 번호, 디바이스 번호 및 기능 번호(BDF)로부터 디바이스 ID를 형성할 수 있는 반면, HyperTransportTM (HT) 디바이스는 버스 번호 및 유닛 ID을 사용하여 디바이스 ID를 형성할 수 있다.
각 DTE는 대응하는 디바이스로부터 메모리 어드레스를 변환하는데 IOMMU이 사용할 수 있는 변환 테이블(예를 들어, 테이블(240))의 세트에 하나 이상의 포인터를 포함할 수 있다. 포인터 및 변환 테이블(240)의 특정 번호 및/또는 유형은 실시예에 따라 변할 수 있고, 다중-레벨 변환을 구현하는 여러 변환 및/또는 페이지 테이블을 포함할 수 있다. 예를 들어, 포인터는 변환 테이블(240)에서 변환을 검색하는 시작점인 페이지 테이블을 나타낼 수 있다. 시작 페이지 테이블은 계층적인 방식으로 다른 페이지 테이블에 포인터를 포함할 수 있다. 일부 테이블은 프로세스 어드레스 공간 식별자(process address space identifier: PASID)와 같은 프로세스 식별자에 의해 인덱싱될 수 있는 반면, 다른 테이블은 변환될 어드레스(예를 들어, GVA 또는 GPA)의 여러 비트를 사용하여 인덱싱될 수 있다. 따라서, 변환 테이블(240)은 하나 또는 2개의-레벨의 여러 변환을 지원할 수 있다.
일부 실시예에서, DTE(230)는 제한된 DTE에 맵핑하는 임의의 디바이스로부터 메모리 액세스 동작을 디스에이블하도록 구성될 수 있는 제한된 DTE를 포함할 수 있다. 예를 들어, 일부 실시예에서, 제한된 DTE는 대응하는 디바이스에 의해 메모리에 액세스하는 것을 명시적으로 금지하는 여러 제어 플래그를 포함할 수 있다. 다른 실시예에서, 제한된 DTE, 또는 제한된 DTE에 의해 지시된 (240)의 메모리 테이블은, DTE에 대응하는 디바이스가 신뢰성 있는 부트 시퀀스를 위협하지 않는 메모리의 작은, 또는 심지어 제로 사이즈인 부분에만 액세스할 수 있는 것을 나타낼 수 있다. 제한된 DTE에 맵핑하는 디바이스의 메모리 액세스를 금지하는 여러 다른 메커니즘이 가능하다.
일부 실시예에서, 소프트웨어(예를 들어, 220)는 IOMMU가 모든 메모리 액세스 요청을 제한된 DTE(230)에 맵핑하는 보호 모드에서 IOMMU가 실행하도록 구성할 수 있다. 여러 실시예에서, 소프트웨어(220)는 운영 시스템, 가상 운영 시스템, 가상 기계 모니터, TBOOT 시퀀스, 및/또는 다른 소프트웨어에 대응할 수 있다. 도 2에서, 소프트웨어(220)는 보호 플래그(210)를 제어 레지스터(32)에 설정하는 것에 의해 보호 모드에서 IOMMU(26)가 실행하도록 구성한다.
보호 모드에서 실행하는 동안, IOMMU(26)는 모든 메모리 액세스 요청을 제한된 DTE에 맵핑하여, 주변 디바이스에 의해 메모리에 액세스하는 것을 효과적으로 금지할 수 있다. 모든 메모리 액세스 요청을 동일한 DTE(즉, 제한된 DTE)에 맵핑하므로, IOMMU가 보호 모드에서 실행되는 동안, 디바이스 테이블(225)은 제한된 DTE만을 포함할 필요가 있다. 그러므로, 신뢰성 있는 부트 초기화 동안 디바이스 테이블 데이터 구조를 저장하는데 필요한 메모리 면적은 작다. 예를 들어, 일부 실시예에서, TBOOT 시퀀스는 단 하나의 엔트리, 즉 제한된 DTE만을 포함하는 디바이스 테이블(225)을 생성할 수 있다. 이러한 테이블은 (230)에 디바이스마다 다른 DTE를 포함할 필요가 없으므로, 이 테이블은 상대적으로 작고, SKINIT 명령에 의해 생성된 보호된 64K 메모리 영역 내에 맞출 수 있다. 제한된 DTE가 생성되면, TBOOT 시퀀스는 모든 주변 메모리 액세스를 디스에이블하도록 보호 플래그(210)를 설정할 수 있다.
도 3은 일부 실시예에 따라 보호 모드를 구현하도록 구성된 IOMMU를 동작시키는 방법을 도시하는 흐름도이다. 도 3의 방법은 도 1의 IOMMU(26)와 같은 IOMMU에 의해 실행될 수 있다.
방법(300)은 IOMMU가 (305)에서와 같이 I/O 디바이스로부터 메모리 액세스 요청을 수신할 때 시작한다. 여러 상황에서, 이 요청은 메모리 데이터를 판독 및/또는 기록하는 DMA 요청에 대응할 수 있다. 이 요청은 가상 어드레스 공간에 지정될 수 있는 적어도 하나의 메모리 어드레스(예를 들어, 데이터를 판독 또는 기록할 어드레스)를 포함할 수 있다. 이 요청은 BDF 번호와 같은 디바이스 식별자를 더 포함할 수 있다.
(310)에서, IOMMU는 보호 모드에서 실행되고 있는지 여부를 결정할 수 있다. 일부 실시예에서, IOMMU는 (310)에서 결정을 하기 위해 보호 플래그(210)(도 2에 도시)와 같은 하나 이상의 보호 플래그를 조사할 수 있다. 예를 들어, 보호 플래그(210)가 설정되어 있으면, IOMMU는 결정(310)에서 IOMMU가 보호 모드에 있는 것으로 결정할 수 있다.
IOMMU가 (310)에서 예로 지시된 바와 같이 보호 모드에 있는 것으로 결정하면, 이는 요청의 디바이스 식별자를 디폴트 값으로 설정할 수 있다. 예를 들어, (315)에서, IOMMU는 BDF 값을 0과 같은 디폴트 값으로 설정한다. 다른 실시예에서, 상이한 디폴트 값이 사용될 수 있고 및/또는 BDF 값과는 다른 식별자를 사용하여 디바이스를 식별할 수 있다.
(320)에서, IOMMU가 요청과 연관된 BDF 번호에 대응하는 DTE를 판독할 수 있다. IOMMU가 (310)에서 아니오로 지시된 바와 같이 보호 모드에서 실행되고 있지 않으면, BDF 번호는 DMA 요청을 하는 I/O 디바이스에 대응할 수 있다. 이러한 경우에, IOMMU는 DTE가 I/O 디바이스에 대응하는 것을 (320에서) 식별 및 판독할 수 있다. 그러나, IOMMU가 ((310)에서 예로 지시된 바와 같이) 보호 모드에서 실행되고 있으면, BDF 번호는 (315)에서 디폴트 값(예를 들어, 0)으로 설정되었다. 그러므로, 이러한 경우에, IOMMU는 (320에서) 제한된 DTE를 식별 및 판독할 수 있다.
(325)에서, IOMMU는 (320)으로부터 DTE를 사용하여 (305)의 DMA 요청이 허용되는지 여부를 결정할 수 있다. 전술한 바와 같이, 제한된 DTE는 제한된 DTE로 맵핑하는 임의의 디바이스로부터 메모리 액세스 동작을 디스에이블하도록 구성될 수 있다. 상이한 실시예에서, 제한된 DTE는 메모리 액세스를 명시적으로 금지하는 제어 플래그, 디바이스가 메모리의 작은 또는 제로 사이즈 부분에만 액세스할 수 있는 것을 나타내는 변환 테이블로의 포인터, 및/또는 DMA 액세스가 신뢰성 있는 부트 프로세스와 간섭하지 않게 하는 다른 메커니즘을 포함할 수 있다.
IOMMU가 (325)에서 예로 표시된 바와 같이 DMA 동작이 허용되는 것으로 결정하면, IOMMU는 (330)에서와 같이 DMA의 하나 이상의 어드레스를 변환하고, (335)에서와 같이 DMA 동작을 수행한다. 전술한 바와 같이, DMA 요청에서 발견된 어드레스를 변환하는 것은 I/O 변환 테이블(36) 및/또는 테이블(240)과 같은 하나 이상의 변환 테이블을 분석하는 것을 포함할 수 있다.
전술한 바와 같이, 일부 실시예에서, IOMMU는 이 변환 데이터를 하나 이상의 메모리-기반 변환 테이블에 저장하는 것이 아니라 보호 모드를 구현하는 변환 데이터를 저장하는 하드웨어 레지스터를 사용할 수 있다. 보호 모드를 구현하기 위해, 이러한 IOMMU는 메모리(315 및/또는 320에서와 같이)로부터가 아니라 하드웨어 레지스터로부터 변환 데이터를 판독하는 것에 의해 (310에서 예로 표시된 바와 같이) 보호 모드에 있는 것으로 결정한 것에 응답할 수 있다. 레지스터로부터 변환 데이터를 판독한 후, 방법은 (325)에서 재개할 수 있다.
IOMMU가 DMA 동작이 (325)에서 아니오로 표시된 바와 같이 허용되지 않는 것으로 결정하면, IOMMU는 (340)에서와 같이 메모리 액세스 동작을 거부할 수 있다. 여러 실시예에서, 동작을 거부하는 것은 상이한 방식으로 수행될 수 있다. 예를 들어, 일부 실시예에서, 메모리 액세스 요청을 거부하는 것은 에러 코드를 요청 디바이스에 리턴하는 것을 포함할 수 있다. 여러 실시예에서, IOMMU가 여러 코드 또는 무 코드(no code)를 주변 디바이스에 리턴하는 것과 같이 다른 동작을 수행할 수 있다.
도 4는 일부 실시예에 따라 본 명세서에 설명된 바와 같이 보호 모드를 구현할 수 있는 IOMMU를 사용하여 신뢰성 있는 부트 프로시저를 시작하는 방법을 도시하는 흐름도이다. 여러 실시예에서, 방법(400)은 소프트웨어에 의해, 예를 들어 운영 시스템, 게스트 운영 시스템, 가상 기계, TBOOT 시퀀스, 및/또는 다른 소프트웨어에 의해 수행될 수 있다.
방법(400)은 (405)에서와 같이 메모리의 일 부분을 보호하는 것으로 시작한다. 예를 들어, 소프트웨어는 전술한 바와 같이 64K의 메모리를 보호하도록 구성된 SKINIT 명령과 같은 특수-목적 명령을 실행하는 것에 의해 메모리의 일 부분을 보호할 수 있다.
(410)에서, 소프트웨어는 TBOOT 시퀀스를 (405)에서 보호된 메모리 부분에 로딩한다. (415)에서, TBOOT 시퀀스는 메모리(예를 들어, 225)의 보호된 부분에 디바이스 테이블을 생성하고 디바이스 테이블에 제한된 DTE를 포함한다. 제한된 DTE는 디바이스 테이블에만 있는 DTE일 수 있고, DTE에 맵핑하는 디바이스가 DMA 액세스를 수행하는 것을 금지하는 하나 이상의 플래그, 필드, 및/또는 포인터를 포함할 수 있다.
(420)에서, 소프트웨어는 IOMMU의 보호 플래그를 설정한다. 보호 플래그는 시스템(200)의 보호 플래그(210)에 대응할 수 있다. 보호 플래그를 설정하는 것은 IOMMU에 보호 모드에서 실행하기 시작하게 명령할 수 있다. 보호 모드에서 실행하는 동안, IOMMU는 어느 디바이스가 실제로 요청을 송신하였는지에 상관없이 IOMMU가 수신한 모든 메모리 액세스 요청에 대해 디폴트 디바이스 식별자를 취할 수 있다. 일부 실시예에서, 디폴트 디바이스 식별자는 (415)에서 생성된 제한된 DTE에 대응할 수 있다. 이 실시예에서, 제한된 DTE가 제한된 DTE에 맵핑하는 주변 디바이스에 의해 메모리에 액세스되는 것을 금지하도록 구성되고, 보호 모드에서 실행되는 IOMMU는 모든 디바이스를 제한된 DTE에 맵핑하므로, 어느 디바이스도 IOMMU가 보호 모드에 있는 동안 DMA 동작을 수행하지 못할 수 있다.
(425)에서, TBOOT 시퀀스 또는 이 TBOOT 시퀀스에 의해 로딩된 다른 소프트웨어와 같은 소프트웨어는, 여러 주변 디바이스에 의해 DMA에 대한 액세스를 조절하도록 구성된 추가적인 변환 테이블을 형성할 수 있다. 예를 들어, (425)에서, 소프트웨어는 디바이스 테이블에서 추가적인 DTE를 생성할 수 있다. 각 추가적인 DTE는 각 주변 디바이스에 대응할 수 있고 각 디바이스로부터 DMA 동작의 어드레스를 변환하도록 구성된 하나 이상의 변환 테이블로의 포인터를 포함할 수 있다. (425)에서 형성된 변환 테이블은 대응하는 주변 디바이스가 메모리의 여러 신뢰성 있는 부분에 액세스하는 것을 디스에이블하는 제한을 포함할 수 있다.
소프트웨어가 (425)에서와 같이 주변으로부터 DMA 메모리 액세스를 제어하도록 구성된 변환 테이블을 형성하면, 소프트웨어는 (430)에서와 같이 보호 플래그를 설정해제할 수 있다. 보호 플래그가 설정해제되면, IOMMU는 비-보호 모드에서 실행하는 것으로 리턴할 수 있다. 비-보호 모드에서 실행하면, IOMMU는 요청이 태그된 디바이스 식별자(즉, 요청 디바이스의 식별자)를 결정하고, 이 디바이스 식별자에 대응하는 하나 이상의 변환 테이블(예를 들어, 425에 형성된 것)을 찾아, 찾은 테이블을 사용하여 메모리 액세스 요청에 지정된 하나 이상의 메모리 어드레스를 변환하는 것에 의해 인입하는 메모리 액세스 요청을 처리할 수 있다.
도 5는 일부 실시예에 따라 본 명세서에 설명된 바와 같이 메모리 액세스 파라미터 주입을 수행하도록 구성된 컴퓨터 시스템을 도시하는 블록도이다. 컴퓨터 시스템(500)은 퍼스널 컴퓨터 시스템, 데스크탑 컴퓨터, 랩탑 또는 노트북 컴퓨터, 메인프레임 컴퓨터 시스템, 휴대용 컴퓨터, 워크스테이션, 네트워크 컴퓨터, 소비자 디바이스, 애플리케이션 서버, 저장 디바이스, 스위치, 모뎀, 라우터 등과 같은 주변 디바이스, 또는 일반적으로 임의의 유형의 컴퓨팅 디바이스를 포함하나 이로 제한되지 않는 여러 유형의 디바이스 중 어느 것에 대응할 수 있다.
컴퓨터 시스템(500)은 하나 이상의 프로세서(560)를 포함할 수 있고, 이들 프로세서 중 어느 것은 다수의 물리적 및/또는 논리적 코어를 포함할 수 있다. 임의의 프로세서(560)는 도 1의 프로세서(12)에 대응할 수 있고 VMM 및/또는 다수의 게스트 운영 시스템을 실행할 수 있다. 컴퓨터 시스템(500)은 도 1의 I/O 디바이스(22)에 대응할 수 있는 하나 이상의 주변 디바이스(550), 및 도 1의 IOMMU(26)에 대응할 수 있는 본 명세서에 설명된 바와 같은 IOMMU 디바이스(555)를 더 포함할 수 있다.
도시된 실시예에 따르면, 컴퓨터 시스템(500)은 하나 이상의 프로세서(560) 위에 있는 다수의 처리 코어 사이에 공유될 수 있는 하나 이상의 공유된 메모리(510)(예를 들어, 캐시, SRAM, DRAM, 적층 메모리, RDRAM, EDO RAM, DDR 5 RAM, SDRAM, 램버스 RAM, EEPROM 등에서 하나 이상)를 포함한다. 일부 실시예에서, 프로세서(560) 중 상이한 것들은 상이한 레이턴시 및/또는 대역폭 특성으로 공유된 메모리(510)에 액세스하도록 구성될 수 있다. 메모리(510)의 일부나 전부는 도 1의 메모리(20)에 대응할 수 있다.
하나 이상의 프로세서(560), 주변 디바이스(들)(550), 및 공유된 메모리(510)는 상호연결부(540) 및 상호연결부(541)를 통해 연결될 수 있다. 여러 실시예에서, 시스템은 도 5에 도시되지 않은 더 적거나 추가적인 컴포넌트를 포함할 수 있다. 추가적으로, 도 5에 도시된 상이한 컴포넌트는 추가적인 컴포넌트로 조합되거나 더 분리될 수 있다.
일부 실시예에서, 공유된 메모리(510)는 플랫폼 네이티브 바이너리, 임의의 인터프리트 언어, 예를 들어 Java™ 바이트-코드로, 또는 임의의 다른 언어, 예를 들어 C/C++, Java™ 등으로 또는 이들의 임의의 조합으로 인코딩될 수 있는 프로그램 명령(520)을 저장할 수 있다. 프로그램 명령(520)은 OS(524)에서 실행되도록 구성된 VMM(528), 임의의 개수의 가상 기계, TBOOT 시퀀스(526), 임의의 개수의 운영 시스템(524)(게스트 또는 종래의), 및 임의의 개수의 애플리케이션(522)(게스트 또는 종래의)과 같은 소프트웨어를 구현하는 프로그램 명령을 포함한다. 임의의 소프트웨어(522-528)는 단일 또는 다중-스레드될 수 있다. 여러 실시예에서, OS(524) 및/또는 VMM(528)는 본 명세서에 설명된 바와 같이 보호 플래그(557)를 IOMMU(555)에 설정하여 IOMMU(555)를 실행되는 보호 모드에 둘 수 있다.
도시된 실시예에 따르면, 공유된 메모리(510)는 IOMMU(555)를 통해 프로세서(560) 중 몇몇 및/또는 주변 디바이스(550) 중 몇몇에 의해 액세스될 수 있는 데이터 구조(530)를 포함한다. 데이터 구조(530)는 여러 I/O 변환 테이블(예를 들어, 도 3에서 325 및 도 1에서 36)을 포함할 수 있다. 프로세서(560) 중 몇몇은 공유된 메모리(510)의 여러 컴포넌트를 국부 캐시에 캐싱하고 캐시 코히런스 프로토콜에 따라 메시지를 교환하는 것에 의해 이들 캐시에 있는 데이터를 조정(coordinate)할 수 있다.
소프트웨어(522-528)를 구현하는데 사용된 것과 같은 프로그램 명령(520)은 컴퓨터-판독가능한 저장 매체에 저장될 수 있다. 컴퓨터-판독가능한 저장 매체는 기계(예를 들어, 컴퓨터)에 의해 판독가능한 형태(예를 들어, 소프트웨어, 처리 애플리케이션)로 정보를 저장하는 임의의 메커니즘을 포함할 수 있다. 컴퓨터-판독가능한 저장 매체는 자기 저장 매체(예를 들어, 플로피 디스크); 광 저장 매체(예를 들어, CD-ROM); 광-자기 저장 매체; 판독 전용 메모리(ROM); 랜덤 액세스 메모리(RAM); 소거가능한 프로그래밍가능한 메모리(예를 들어, EPROM 및 EEPROM); 플래쉬 메모리; 프로그램 명령을 저장하는데 적절한 전기적, 또는 다른 유형의 매체를 포함할 수 있으나 이들로 제한되는 것은 아니다.
전술한 바와 같이 컴퓨터-판독가능한 저장 매체는 일부 실시예에서 프로그램에 의해 판독된 명령을 저장하는데 사용되고, 하나 이상의 프로세서(550)를 포함하는 하드웨어를 제조하는데 직접 또는 간접으로 사용될 수 있다. 예를 들어, 이 명령은 베릴로그(Verilog) 또는 VHDL와 같은 하이 레벨 설계 언어(HDL)로 하드웨어 기능의 거동-레벨 또는 레지스터-전달 레벨(register-transfer level: RTL) 디스크립션(description)을 기술하는 하나 이상의 데이터 구조를 기술할 수 있다. 이 디스크립션은 합성 도구에 의해 판독될 수 있고, 이 합성 도구는 이 디스크립션을 합성하여 네트리스트(netlist)를 생성할 수 있다. 이 네트리스트는 프로세서(500)의 기능을 나타내는 (예를 들어, 합성 라이브러리에 한정된) 게이트의 세트를 포함할 수 있다. 네트리스트는 이후 마스크에 적용될 기하학적 형상을 기술하는 데이터 세트를 생성하도록 배치되고 라우팅될 수 있다. 마스크는 여러 반도체 제조 단계에 사용되어 프로세서(50 및/또는 550)에 대응하는 반도체 회로 또는 회로들을 생성할 수 있다. 대안적으로, 데이터베이스는 원하는 대로 (합성 라이브러리를 가지고 있거나 없이) 네트리스트 또는 데이터 세트일 수 있다.
특정 실시예들이 위에서 설명되었으나, 이들 실시예는, 단일 실시예만이 특정 특징에 대해 설명되어 있는 경우에도, 본 발명의 범위를 제한하도록 의도된 것은 아니다. 본 명세서에 제공된 특징의 예들은, 달리 언급되지 않는 한, 본 발명을 제한하는 것이 아니라 예시하는 것이다. 상기 상세한 설명은 본 발명의 이익을 가지는 이 기술 분야에 통상의 지식을 가진 자에게 명백할 수 있는 대안, 변형, 및 균등물을 포함하는 것으로 의도된다.
본 발명의 범위는 본 명세서에서 해결된 문제의 전부나 어느 것을 완화시키든 아니든 간에 본 명세서에 개시된 (명시적으로든 또는 암시적으로든) 임의의 특징 또는 특징의 조합, 또는 이들의 임의의 일반화를 포함한다. 따라서, 새로운 청구항이 본 출원(또는 이의 우선권을 주장하는 출원) 과정 동안 이들 특징의 임의의 조합으로 형성될 수 있다. 특히, 첨부된 청구범위를 참조하여, 종속항에 있는 특징은 독립항의 특징과 조합될 수 있고, 각 독립항에 있는 특징은 첨부된 청구범위에 나열된 특정 조합으로만 나열되는 것은 아니라 임의의 적절한 방식으로 조합될 수 있다.

Claims (33)

  1. 장치로서,
    복수의 I/O 디바이스로부터 메모리 액세스 요청을 수신하고 보호 모드를 구현하도록 구성된 메모리 관리 유닛을 포함하되;
    상기 보호 모드에서 실행되는 동안, 상기 메모리 관리 유닛은 각 상기 메모리 액세스 요청을 메모리 어드레스 변환 데이터의 동일한 세트에 맵핑하는 것에 의해 상기 복수의 I/O 디바이스에 의해 메모리에 액세스되는 것을 금지하도록 구성되고;
    상기 보호 모드에서 실행되지 않는 동안, 상기 메모리 관리 유닛은 상이한 메모리 액세스 요청을 메모리 어드레스 변환 데이터의 상이한 각 세트에 맵핑하는 것에 의해 상기 복수의 I/O 디바이스로부터 메모리 액세스 요청을 허용하도록 구성된 것인 장치.
  2. 제1항에 있어서, 상기 메모리 어드레스 변환 데이터의 적어도 일부는 하나 이상의 메모리 어드레스 변환 테이블을 사용하여 메모리에 또는 하드웨어 레지스터에 저장되는 것인 장치.
  3. 제1항에 있어서, 상기 메모리 관리 유닛은 소프트웨어가 상기 메모리 관리 유닛의 보호 플래그를 설정하는 것에 응답하여 상기 보호 모드에 진입하도록 구성가능한 것인 장치.
  4. 제1항에 있어서, 상기 메모리 액세스 요청을 상기 메모리 어드레스 변환 데이터의 동일한 세트에 맵핑하는 것은 상기 메모리 액세스 요청을 디폴트 디바이스 식별자 값(default device identifier value)으로 태그하는 것을 포함하는 것인 장치.
  5. 제4항에 있어서, 상기 디폴트 디바이스 식별자 값은 디바이스 테이블에서 제한된 엔트리에 대응하고, 상기 제한된 엔트리는 상기 디바이스가 시스템 메모리에 액세스하는 것이 허용되지 않는 것을 나타내는 것인 장치.
  6. 제4항에 있어서, 상기 디폴트 디바이스 식별자 값은 디바이스 테이블에서 제한된 엔트리에 대응하고, 상기 제한된 엔트리는 상기 IOMMU가 모든 메모리 어드레스를 상기 시스템 메모리의 동일한 제한된 부분에 맵핑하는 어드레스 변환 데이터를 사용하여 상기 디바이스로부터 메모리 액세스 요청을 변환하여야 하는 것을 나타내는 것인 장치.
  7. 제6항에 있어서, 상기 시스템 메모리의 제한된 부분은 제로 사이즈인 것인 장치.
  8. 제6항에 있어서, 상기 메모리의 제한된 부분은 신뢰성 있는 부트 프로시저(trusted boot procedure)를 구현하는데 사용된 부분 외부에 있는 것인 장치.
  9. 제1항에 있어서, 상기 메모리 관리 유닛은 상기 I/O 디바이스 중 하나로부터 메모리 액세스 요청을 수신한 것에 응답하여 에러 코드를 리턴하는 것에 의해 상기 메모리에 액세스하는 것을 금지하도록 구성된 것인 장치.
  10. 처리 시스템에서 메모리 관리 유닛을 사용하여 메모리를 보호하는 컴퓨터-구현 방법으로서, 상기 실행하는 것은,
    상기 메모리 관리 유닛이, 보호 모드에서 실행하는 동안,
    I/O 디바이스로부터 메모리 액세스 요청을 수신하는 단계;
    상기 요청을 수신한 것에 응답하여, 상기 메모리 관리 유닛이 각 상기 요청을 상기 메모리 어드레스 변환 데이터의 동일한 세트에 맵핑하는 것에 의해 상기 요청된 메모리에 액세스하는 것을 금지하는 단계;
    상기 메모리 관리 유닛이, 비보호 모드에서 실행되는 동안,
    2개 이상의 상기 I/O 디바이스로부터 다른 메모리 액세스 요청을 수신하는 단계;
    상기 2개 이상의 상기 I/O 디바이스 각각에 대해 메모리 어드레스 변환 데이터의 각 세트를 결정하는 단계; 및
    상기 다른 요청 각각에 대해, 상기 요청을, 상기 다른 요청을 한 상기 I/O 디바이스에 대응하는 메모리 어드레스 변환 데이터의 세트에 맵핑하는 단계를 포함하는 것인 방법.
  11. 제10항에 있어서, 상기 메모리 어드레스 변환 데이터의 적어도 일부는 하나 이상의 메모리 어드레스 변환 테이블을 사용하여 메모리에 저장되거나 하드웨어 레지스터에 저장되는 것인 방법.
  12. 제10항에 있어서, 소프트웨어가 상기 메모리 관리 유닛의 보호 플래그를 설정하는 것에 응답하여 상기 메모리 관리 유닛이 상기 보호 모드에 진입하는 단계를 더 포함하는 방법.
  13. 제10항에 있어서, 상기 메모리 액세스 요청을 상기 메모리 어드레스 변환 데이터의 동일한 세트에 맵핑하는 단계는 상기 메모리 액세스 요청을 디폴트 디바이스 식별자 값으로 태그하는 단계를 포함하는 것인 방법.
  14. 제13항에 있어서, 상기 디폴트 디바이스 식별자 값은 디바이스 테이블에서 제한된 엔트리에 대응하고, 상기 제한된 엔트리는 상기 디바이스가 시스템 메모리에 액세스하는 것이 허용되지 않는 것을 나타내는 것인 방법.
  15. 제13항에 있어서, 상기 디폴트 디바이스 식별자 값은 디바이스 테이블에서 제한된 엔트리에 대응하고, 상기 제한된 엔트리는 상기 IOMMU가 모든 메모리 어드레스를 상기 시스템 메모리의 동일한 제한된 부분에 맵핑하는 어드레스 변환 데이터를 사용하여 상기 디바이스로부터 메모리 액세스 요청을 변환하여야 하는 것을 나타내는 것인 방법.
  16. 제15항에 있어서, 상기 시스템 메모리의 제한된 부분은 제로 사이즈인 것인 방법.
  17. 제15항에 있어서, 상기 메모리의 제한된 부분은 신뢰성 있는 부트 프로시저를 구현하는데 사용된 부분 외부에 있는 것인 방법.
  18. 컴퓨터 시스템에서 실행가능한 프로그램에 의해 동작되는 데이터 구조를 포함하는 비-일시적인 컴퓨터 판독가능한 저장 매체로서, 상기 프로그램은 상기 데이터 구조에서 동작하여 상기 데이터 구조에 의해 기술된 회로를 포함하는 집적 회로를 제조하는 프로세스의 일 부분을 수행하며, 상기 데이터 구조에 기술된 회로는,
    복수의 I/O 디바이스로부터 메모리 액세스 요청을 수신하고 보호 모드를 구현하도록 구성된 메모리 관리 유닛을 포함하되;
    상기 보호 모드에서 실행되는 동안, 상기 메모리 관리 유닛은 각 상기 메모리 액세스 요청을 메모리 어드레스 변환 데이터의 동일한 세트에 맵핑하는 것에 의해 상기 복수의 I/O 디바이스에 의해 메모리에 액세스되는 것을 금지하도록 구성되고;
    상기 보호 모드에서 실행되지 않는 동안, 상기 메모리 관리 유닛은 상이한 메모리 액세스 요청을 메모리 어드레스 변환 데이터의 상이한 각 세트에 맵핑하는 것에 의해 상기 복수의 I/O 디바이스로부터 메모리 액세스 요청을 허용하도록 구성된 것인 컴퓨터 판독가능한 저장 매체.
  19. 제18항에 있어서, 상기 메모리 어드레스 변환 데이터의 적어도 일부는 하나 이상의 메모리 어드레스 변환 테이블을 사용하여 메모리에 또는 하드웨어 레지스터에 저장되는 것인 컴퓨터 판독가능한 매체.
  20. 제18항에 있어서, 상기 저장 매체는 HDL, 베릴로그, 또는 GDSII 데이터를 저장하는 것인 컴퓨터 판독가능한 저장 매체.
  21. 제18항에 있어서, 상기 메모리 액세스 요청을 상기 메모리 어드레스 변환 데이터의 동일한 세트에 맵핑하는 것은 상기 메모리 액세스 요청을 디폴트 디바이스 식별자 값으로 태그하는 것을 포함하는 것인 컴퓨터 판독가능한 저장 매체.
  22. 신뢰성 있는 초기화 프로시저를 구현하도록 컴퓨터 시스템에 의해 실행가능한 프로그램 명령을 저장하는 비-일시적인, 컴퓨터-판독가능한 저장 매체로서, 상기 프로시저는 보호 모드에서 실행하도록 메모리 관리 유닛을 구성하는 동작을 포함하고, 상기 보호 모드에 있는 동안, 상기 메모리 관리 유닛은 복수의 I/O 디바이스로부터 메모리 액세스 요청을 메모리 어드레스 변환 데이터의 동일한 세트에 맵핑하는 것에 의해 복수의 I/O 디바이스에 의해 메모리에 액세스되는 것을 금지하며, 상기 보호 모드에 있지 않는 동안, 상기 메모리 관리 유닛은 상기 복수의 I/O 디바이스로부터 I/O 요청을 메모리 어드레스 변환 데이터의 상이한 각 세트에 맵핑하도록 구성된 것인 컴퓨터 판독가능한 저장 매체.
  23. 제22항에 있어서, 상기 메모리 어드레스 변환 데이터의 적어도 일부는 하나 이상의 어드레스 변환 테이블을 사용하여 또는 하드웨어 레지스터에 저장되는 것인 컴퓨터 판독가능한 저장 매체.
  24. 제22항에 있어서, 상기 신뢰성 있는 초기화 프로시저는,
    하나 이상의 주변 디바이스에 의해 직접 메모리 액세스로부터 시스템 메모리의 일 부분을 보호하도록 보안 커널 초기화 명령을 실행하는 동작; 및
    상기 메모리의 보호된 부분 내에 하나 이상의 어드레스 변환 테이블의 세트를 생성하는 동작을 더 포함하는 저장 매체.
  25. 제22항에 있어서, 상기 신뢰성 있는 초기화 프로시저를 구현하도록 실행가능한 상기 프로그램 명령은 운영 시스템, 게스트 운영 시스템, 또는 가상 기계 모니터의 일부인 것인 컴퓨터 판독가능한 저장 매체.
  26. 제22항에 있어서, 보호 모드에서 실행하도록 상기 메모리 관리 유닛을 구성하는 동작은 상기 메모리 관리 유닛의 보호 플래그를 설정하는 동작을 포함하는 것인 컴퓨터 판독가능한 저장 매체.
  27. 신뢰성 있는 초기화 프로시저를 구현하는 컴퓨터-구현 방법으로서,
    복수의 I/O 디바이스에 의해 직접 메모리 액세스로부터 시스템 메모리의 일 부분을 보호하도록 보안 커널 초기화 명령을 실행하는 동작;
    상기 메모리의 보호된 부분 내에 하나 이상의 어드레스 변환 테이블의 세트를 생성하는 동작으로서, 상기 하나 이상의 메모리 어드레스 변환 테이블의 세트는 메모리 액세스를 금지하는 것인, 상기 생성하는 동작; 및
    보호 모드에서 실행하도록 메모리 관리 유닛을 구성하는 동작을 포함하며, 상기 보호 모드에 있는 동안, 상기 메모리 관리 유닛은 상기 복수의 I/O 디바이스로부터 메모리 액세스 요청을 상기 하나 이상의 메모리 어드레스 변환 테이블의 세트에 맵핑하여 상기 복수의 I/O 디바이스에 의해 메모리에 액세스되는 것을 금지하여 메모리에의 액세스를 금지하며, 상기 보호 모드에 있지 않는 동안, 상기 메모리 관리 유닛은 상기 복수의 I/O 디바이스로부터 I/O 요청을 하나 이상의 메모리 어드레스 변환 테이블의 상이한 각 세트로 맵핑하도록 구성된 것인 방법.
  28. 제27항에 있어서, 상기 메모리 액세스 요청을 상기 메모리 어드레스 변환 데이터의 동일한 세트에 맵핑하는 동작은 상기 메모리 액세스 요청을, 디바이스 테이블에서 제한된 엔트리에 대응하는 디폴트 디바이스 식별자 값으로 태그하는 동작을 포함하며, 상기 제한된 엔트리는 상기 디바이스가 시스템 메모리에 액세스하는 것이 허용되지 않는 것을 나타내는 것인 방법.
  29. 제27항에 있어서, 상기 메모리 액세스 요청을 상기 메모리 어드레스 변환 데이터의 동일한 세트에 맵핑하는 동작은 상기 메모리 액세스 요청을 디바이스 테이블에서 제한된 엔트리에 대응하는 디폴트 디바이스 식별자 값으로 태그하는 동작을 포함하며, 상기 제한된 엔트리는 상기 IOMMU가 모든 메모리 어드레스를 상기 시스템 메모리의 동일한 제한된 부분에 맵핑하는 어드레스 변환 데이터를 사용하여 상기 디바이스로부터 메모리 액세스 요청을 변환하여야 하는 것을 나타내는 것인 방법.
  30. 제29항에 있어서, 상기 시스템 메모리의 제한된 부분은 제로 사이즈인 것인 방법.
  31. 제29항에 있어서, 상기 메모리의 제한된 부분은 신뢰성 있는 부트 프로시저를 구현하는데 사용된 부분 외부에 있는 것인 방법.
  32. 제27항에 있어서, 상기 신뢰성 있는 초기화 프로시저를 구현하도록 실행가능한 상기 프로그램 명령은 운영 시스템, 게스트 운영 시스템, 또는 가상 기계 모니터의 일부인 것인 컴퓨터-구현 방법.
  33. 제27항에 있어서, 상기 보호 모드에서 실행하도록 상기 메모리 관리 유닛을 구성하는 동작은 상기 메모리 관리 유닛의 보호 플래그를 설정하는 동작을 포함하는 것인 컴퓨터 판독가능한 저장 매체.
KR1020147010694A 2011-09-25 2012-09-24 I/o 디바이스에 의해 메모리에 액세스하는 것을 금지하는 보호 모드를 갖는 입력/출력 메모리 관리 유닛 KR101471108B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/244,571 US8631212B2 (en) 2011-09-25 2011-09-25 Input/output memory management unit with protection mode for preventing memory access by I/O devices
US13/244,571 2011-09-25
PCT/US2012/056898 WO2013044223A1 (en) 2011-09-25 2012-09-24 Input/output memory management unit with protection mode for preventing memory access by i/o devices

Publications (2)

Publication Number Publication Date
KR20140057405A true KR20140057405A (ko) 2014-05-12
KR101471108B1 KR101471108B1 (ko) 2014-12-09

Family

ID=47023085

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147010694A KR101471108B1 (ko) 2011-09-25 2012-09-24 I/o 디바이스에 의해 메모리에 액세스하는 것을 금지하는 보호 모드를 갖는 입력/출력 메모리 관리 유닛

Country Status (6)

Country Link
US (1) US8631212B2 (ko)
EP (1) EP2758884B1 (ko)
JP (1) JP5690024B2 (ko)
KR (1) KR101471108B1 (ko)
CN (1) CN103842976B (ko)
WO (1) WO2013044223A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018182772A1 (en) * 2017-03-29 2018-10-04 Advanced Micro Devices, Inc. Monitoring of memory page transitions between a hypervisor and a virtual machine

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9152570B2 (en) * 2012-02-27 2015-10-06 Vmware, Inc. System and method for supporting finer-grained copy-on-write page sizes
US10223506B2 (en) * 2012-04-04 2019-03-05 Rackspace Us, Inc. Self-destructing files in an object storage system
EP2936494B1 (en) * 2012-12-19 2019-07-03 Hewlett-Packard Enterprise Development LP Nvram path selection
US9323932B2 (en) * 2012-12-19 2016-04-26 Advanced Micro Devices, Inc. Protecting memory contents during boot process
US9015374B2 (en) 2013-07-09 2015-04-21 Advanced Micro Devices, Inc. Virtual interrupt filter
US9734341B1 (en) * 2014-04-18 2017-08-15 Symantec Corporation Systems and methods for protecting computing systems from peripheral devices
US9632953B2 (en) 2014-06-03 2017-04-25 Qualcomm Incorporated Providing input/output virtualization (IOV) by mapping transfer requests to shared transfer requests lists by IOV host controllers
US9690720B2 (en) 2014-06-03 2017-06-27 Qualcomm Incorporated Providing command trapping using a request filter circuit in an input/output virtualization (IOV) host controller (HC) (IOV-HC) of a flash-memory-based storage device
EP2983088A1 (en) 2014-08-06 2016-02-10 Airbus Defence and Space GmbH Memory protection unit
US10552619B2 (en) * 2015-07-20 2020-02-04 Intel Corporation Technologies for secure trusted I/O access control
US9626300B2 (en) * 2015-07-27 2017-04-18 Google Inc. Address caching in switches
US10055136B2 (en) 2015-07-29 2018-08-21 Red Hat Israel, Ltd. Maintaining guest input/output tables in swappable memory
US9767320B2 (en) 2015-08-07 2017-09-19 Qualcomm Incorporated Hardware enforced content protection for graphics processing units
US10102391B2 (en) * 2015-08-07 2018-10-16 Qualcomm Incorporated Hardware enforced content protection for graphics processing units
US10664179B2 (en) 2015-09-25 2020-05-26 Intel Corporation Processors, methods and systems to allow secure communications between protected container memory and input/output devices
US9927984B2 (en) * 2015-10-14 2018-03-27 Samsung Electronics Co., Ltd. Electronic system with interface control mechanism and method of operation thereof
CN107038128B (zh) * 2016-02-03 2020-07-28 华为技术有限公司 一种执行环境的虚拟化、虚拟执行环境的访问方法及装置
US10678702B2 (en) * 2016-05-27 2020-06-09 Advanced Micro Devices, Inc. Using multiple memory elements in an input-output memory management unit for performing virtual address to physical address translations
US10140214B2 (en) 2016-08-29 2018-11-27 Red Hat Israel, Ltd. Hypervisor translation bypass by host IOMMU with virtual machine migration support
US10176122B2 (en) * 2016-10-19 2019-01-08 Advanced Micro Devices, Inc. Direct memory access authorization in a processing system
KR20180066601A (ko) 2016-12-09 2018-06-19 삼성전자주식회사 메모리 시스템의 구동 방법
WO2019088978A1 (en) 2017-10-30 2019-05-09 Hewlett-Packard Development Company, L.P. Secure hardware initialization
US10860474B2 (en) 2017-12-14 2020-12-08 Micron Technology, Inc. Multilevel addressing
CN108446137A (zh) * 2018-02-26 2018-08-24 国民技术股份有限公司 通道寄存器初始化方法、装置及dma设备、终端
US11157635B2 (en) * 2018-04-08 2021-10-26 Qualcomm Incorporated Secure interface disablement
US10929302B2 (en) 2018-06-08 2021-02-23 International Business Machines Corporation MMIO addressing using a translation table
US11321240B2 (en) 2018-06-08 2022-05-03 International Business Machines Corporation MMIO addressing using a translation lookaside buffer
US11143684B2 (en) * 2019-03-25 2021-10-12 Lg Energy Solution, Ltd. Diagnostic system for a vehicle electrical system
US11392511B2 (en) * 2019-09-25 2022-07-19 Intel Corporation Secure address translation services using a permission table
US11100010B2 (en) * 2019-09-26 2021-08-24 Arm Limited Apparatus and method for handling memory access requests
GB2593716B (en) * 2020-03-31 2022-08-10 Advanced Risc Mach Ltd Controlling memory access in a data processing systems with multiple subsystems
KR102348256B1 (ko) * 2020-05-11 2022-01-07 한국과학기술원 정형 검증을 이용한 i/o 커널 구현의 강화
US20220100532A1 (en) * 2020-09-25 2022-03-31 Intel Corporation Technology for transferring iommu ownership to a new version of system software
US11526451B2 (en) * 2020-12-23 2022-12-13 Intel Corporation Secure address translation services using bundle access control
US11860792B2 (en) * 2021-05-04 2024-01-02 Red Hat, Inc. Memory access handling for peripheral component interconnect devices

Family Cites Families (66)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR119649A (ko) 1975-03-24
US4550368A (en) 1982-07-02 1985-10-29 Sun Microsystems, Inc. High-speed memory and memory management system
JPS61206043A (ja) 1985-03-11 1986-09-12 Hitachi Ltd 仮想計算機システムにおける割込制御方法
US4802085A (en) 1987-01-22 1989-01-31 National Semiconductor Corporation Apparatus and method for detecting and handling memory-mapped I/O by a pipelined microprocessor
JP2510605B2 (ja) 1987-07-24 1996-06-26 株式会社日立製作所 仮想計算機システム
EP0447145B1 (en) 1990-03-12 2000-07-12 Hewlett-Packard Company User scheduled direct memory access using virtual addresses
JP3307085B2 (ja) 1993-12-10 2002-07-24 ソニー株式会社 通信方法及び電子機器
US6631435B1 (en) 1996-02-02 2003-10-07 Sony Corporation Application programming interface for data transfer and bus management over a bus structure
US5826084A (en) 1997-03-25 1998-10-20 Texas Instruments Incorporated Microprocessor with circuits, systems, and methods for selectively bypassing external interrupts past the monitor program during virtual program operation
US5987557A (en) 1997-06-19 1999-11-16 Sun Microsystems, Inc. Method and apparatus for implementing hardware protection domains in a system with no memory management unit (MMU)
JP3264319B2 (ja) 1997-06-30 2002-03-11 日本電気株式会社 バスブリッジ
US5949436A (en) 1997-09-30 1999-09-07 Compaq Computer Corporation Accelerated graphics port multiple entry gart cache allocation system and method
US5956516A (en) 1997-12-23 1999-09-21 Intel Corporation Mechanisms for converting interrupt request signals on address and data lines to interrupt message signals
US6119204A (en) 1998-06-30 2000-09-12 International Business Machines Corporation Data processing system and method for maintaining translation lookaside buffer TLB coherency without enforcing complete instruction serialization
US6065088A (en) 1998-08-31 2000-05-16 International Business Machines Corporation System and method for interrupt command queuing and ordering
US6938094B1 (en) 1999-09-17 2005-08-30 Advanced Micro Devices, Inc. Virtual channels and corresponding buffer allocations for deadlock-free computer system operation
US6888843B2 (en) 1999-09-17 2005-05-03 Advanced Micro Devices, Inc. Response virtual channel for handling all responses
US6629207B1 (en) * 1999-10-01 2003-09-30 Hitachi, Ltd. Method for loading instructions or data into a locked way of a cache memory
US6412043B1 (en) * 1999-10-01 2002-06-25 Hitachi, Ltd. Microprocessor having improved memory management unit and cache memory
US6553460B1 (en) * 1999-10-01 2003-04-22 Hitachi, Ltd. Microprocessor having improved memory management unit and cache memory
US6598128B1 (en) * 1999-10-01 2003-07-22 Hitachi, Ltd. Microprocessor having improved memory management unit and cache memory
EP1139222A1 (en) 2000-03-31 2001-10-04 Texas Instruments Incorporated Prefetch for TLB cache
US6622193B1 (en) 2000-11-16 2003-09-16 Sun Microsystems, Inc. Method and apparatus for synchronizing interrupts in a message passing queue oriented bus system
US20020083254A1 (en) 2000-12-22 2002-06-27 Hummel Mark D. System and method of implementing interrupts in a computer processing system having a communication fabric comprising a plurality of point-to-point links
US6886171B2 (en) 2001-02-20 2005-04-26 Stratus Technologies Bermuda Ltd. Caching for I/O virtual address translation and validation using device drivers
JP3594082B2 (ja) 2001-08-07 2004-11-24 日本電気株式会社 仮想アドレス間データ転送方式
US8051301B2 (en) * 2001-11-13 2011-11-01 Advanced Micro Devices, Inc. Memory management system and method providing linear address based memory access security
US6804741B2 (en) 2002-01-16 2004-10-12 Hewlett-Packard Development Company, L.P. Coherent memory mapping tables for host I/O bridge
US7058768B2 (en) * 2002-04-17 2006-06-06 Microsoft Corporation Memory isolation through address translation data edit control
US6986006B2 (en) 2002-04-17 2006-01-10 Microsoft Corporation Page granular curtained memory via mapping control
US6725289B1 (en) 2002-04-17 2004-04-20 Vmware, Inc. Transparent address remapping for high-speed I/O
WO2003090052A2 (en) * 2002-04-18 2003-10-30 Advanced Micro Devices Inc. A computer system including a secure execution mode - capable cpu and a security services processor connected via a secure communication path
EP1495401B1 (en) 2002-04-18 2007-01-24 Advanced Micro Devices, Inc. Initialization of a computer system including a secure execution mode-capable processor
US7155379B2 (en) 2003-02-25 2006-12-26 Microsoft Corporation Simulation of a PCI device's memory-mapped I/O registers
US7010633B2 (en) * 2003-04-10 2006-03-07 International Business Machines Corporation Apparatus, system and method for controlling access to facilities based on usage classes
US7281075B2 (en) 2003-04-24 2007-10-09 International Business Machines Corporation Virtualization of a global interrupt queue
US7073043B2 (en) 2003-04-28 2006-07-04 International Business Machines Corporation Multiprocessor system supporting multiple outstanding TLBI operations per partition
US7177967B2 (en) 2003-09-30 2007-02-13 Intel Corporation Chipset support for managing hardware interrupts in a virtual machine system
US7552436B2 (en) 2003-11-25 2009-06-23 International Business Machines Memory mapped input/output virtualization
US7209994B1 (en) 2004-05-11 2007-04-24 Advanced Micro Devices, Inc. Processor that maintains virtual interrupt state and injects virtual interrupts into virtual machine guests
US8843727B2 (en) 2004-09-30 2014-09-23 Intel Corporation Performance enhancement of address translation using translation tables covering large address spaces
US7444493B2 (en) 2004-09-30 2008-10-28 Intel Corporation Address translation for input/output devices using hierarchical translation tables
JP2006133889A (ja) 2004-11-02 2006-05-25 Sharp Corp プログラムを更新するための方法、プログラムおよび装置
DE112005002949T5 (de) * 2004-11-24 2007-12-27 Discretix Technologies Ltd. System, Verfahren und Vorrichtung zur Sicherung eines Betriebssystems
US20060195848A1 (en) 2005-02-25 2006-08-31 International Business Machines Corporation System and method of virtual resource modification on a physical adapter that supports virtual resources
US20060200616A1 (en) 2005-03-02 2006-09-07 Richard Maliszewski Mechanism for managing resources shared among virtual machines
US7428626B2 (en) 2005-03-08 2008-09-23 Microsoft Corporation Method and system for a second level address translation in a virtual machine environment
US7260663B2 (en) 2005-04-07 2007-08-21 International Business Machines Corporation System and method for presenting interrupts
US7225287B2 (en) 2005-06-01 2007-05-29 Microsoft Corporation Scalable DMA remapping on a computer bus
US7487327B1 (en) 2005-06-01 2009-02-03 Sun Microsystems, Inc. Processor and method for device-specific memory address translation
US20060288130A1 (en) 2005-06-21 2006-12-21 Rajesh Madukkarumukumana Address window support for direct memory access translation
US20060294277A1 (en) 2005-06-24 2006-12-28 Tetrick Raymond S Message signaled interrupt redirection
US7480784B2 (en) 2005-08-12 2009-01-20 Advanced Micro Devices, Inc. Ensuring deadlock free operation for peer to peer traffic in an input/output memory management unit (IOMMU)
US7793067B2 (en) 2005-08-12 2010-09-07 Globalfoundries Inc. Translation data prefetch in an IOMMU
US7516247B2 (en) 2005-08-12 2009-04-07 Advanced Micro Devices, Inc. Avoiding silent data corruption and data leakage in a virtual environment with multiple guests
US7543131B2 (en) 2005-08-12 2009-06-02 Advanced Micro Devices, Inc. Controlling an I/O MMU
US20070067505A1 (en) 2005-09-22 2007-03-22 Kaniyur Narayanan G Method and an apparatus to prevent over subscription and thrashing of translation lookaside buffer (TLB) entries in I/O virtualization hardware
US7447820B2 (en) 2005-09-30 2008-11-04 Intel Corporation Retargeting of platform interrupts
US7548999B2 (en) 2006-01-17 2009-06-16 Advanced Micro Devices, Inc. Chained hybrid input/output memory management unit
US7653803B2 (en) 2006-01-17 2010-01-26 Globalfoundries Inc. Address translation for input/output (I/O) devices and interrupt remapping for I/O devices in an I/O memory management unit (IOMMU)
US7849287B2 (en) 2006-11-13 2010-12-07 Advanced Micro Devices, Inc. Efficiently controlling special memory mapped system accesses
US7873770B2 (en) 2006-11-13 2011-01-18 Globalfoundries Inc. Filtering and remapping interrupts
US7707383B2 (en) 2006-11-21 2010-04-27 Intel Corporation Address translation performance in virtualized environments
US8099541B2 (en) 2008-01-22 2012-01-17 Globalfoundries Inc. Minivisor entry point in virtual machine monitor address space
US8578483B2 (en) * 2008-07-31 2013-11-05 Carnegie Mellon University Systems and methods for preventing unauthorized modification of an operating system
US8386745B2 (en) 2009-07-24 2013-02-26 Advanced Micro Devices, Inc. I/O memory management unit including multilevel address translation for I/O and computation offload

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018182772A1 (en) * 2017-03-29 2018-10-04 Advanced Micro Devices, Inc. Monitoring of memory page transitions between a hypervisor and a virtual machine
KR20190125985A (ko) * 2017-03-29 2019-11-07 어드밴스드 마이크로 디바이시즈, 인코포레이티드 하이퍼바이저 및 가상 머신 간 메모리 페이지 이행의 모니터링

Also Published As

Publication number Publication date
JP5690024B2 (ja) 2015-03-25
KR101471108B1 (ko) 2014-12-09
US20130080726A1 (en) 2013-03-28
JP2014531672A (ja) 2014-11-27
EP2758884B1 (en) 2018-07-25
CN103842976A (zh) 2014-06-04
WO2013044223A1 (en) 2013-03-28
US8631212B2 (en) 2014-01-14
EP2758884A1 (en) 2014-07-30
CN103842976B (zh) 2016-01-20

Similar Documents

Publication Publication Date Title
KR101471108B1 (ko) I/o 디바이스에 의해 메모리에 액세스하는 것을 금지하는 보호 모드를 갖는 입력/출력 메모리 관리 유닛
US8386745B2 (en) I/O memory management unit including multilevel address translation for I/O and computation offload
US20130080714A1 (en) I/o memory translation unit with support for legacy devices
US9720843B2 (en) Access type protection of memory reserved for use by processor logic
EP2891067B1 (en) Virtual input/output memory management unit wihtin a guest virtual machine
EP2537097B1 (en) Storing secure mode page table data in secure and non-secure regions of memory
US9535849B2 (en) IOMMU using two-level address translation for I/O and computation offload devices on a peripheral interconnect
US11907542B2 (en) Virtualized-in-hardware input output memory management
US20130262736A1 (en) Memory types for caching policies
US20100011147A1 (en) Virtualizing an IOMMU
US20130254491A1 (en) Controlling a processor cache using a real-time attribute
JP5433349B2 (ja) データプロセッサ
US11783064B2 (en) Techniques to provide hardware enforced protection environment for a system management mode
US20230409494A1 (en) Technique for constraining access to memory using capabilities
KR20240004738A (ko) 캐퍼빌리티를 사용하여 메모리에 대한 액세스를 제약하기 위한 기술
e Silva Arm TrustZone: Evaluating the Diversity of the Memory Subsystem
WO2023067295A1 (en) Technique for handling sealed capabilities

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

Payment date: 20171027

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20191029

Year of fee payment: 6