KR20230123985A - 입력-출력 디바이스에 의해 액세스가능한 메모리의페이지의 이송 - Google Patents

입력-출력 디바이스에 의해 액세스가능한 메모리의페이지의 이송 Download PDF

Info

Publication number
KR20230123985A
KR20230123985A KR1020237022115A KR20237022115A KR20230123985A KR 20230123985 A KR20230123985 A KR 20230123985A KR 1020237022115 A KR1020237022115 A KR 1020237022115A KR 20237022115 A KR20237022115 A KR 20237022115A KR 20230123985 A KR20230123985 A KR 20230123985A
Authority
KR
South Korea
Prior art keywords
memory
page
iommu
information
page table
Prior art date
Application number
KR1020237022115A
Other languages
English (en)
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 KR20230123985A publication Critical patent/KR20230123985A/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
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device

Landscapes

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

Abstract

전자 디바이스는 메모리, 입력-출력 메모리 관리 유닛(IOMMU), 소프트웨어 엔티티를 실행하는 프로세서, 및 페이지 이송 엔진을 포함한다. 소프트웨어 엔티티 및 페이지 이송 엔진은 메모리 내의 적어도 하나의 IO 디바이스에 의해 액세스가능한 메모리의 페이지를 이송하도록 준비하기 위한 동작을 수행하고, 소프트웨어 엔티티 및 페이지 이송 엔진은 수행되는 동작에 기초하여 메모리의 페이지에 대한 페이지 테이블 엔트리에서 이송 상태 정보를 설정한다. 메모리의 페이지를 이송하도록 준비하기 위한 동작이 완료될 때, 페이지 이송 엔진은 메모리에서 메모리의 페이지를 이송한다. IOMMU는 IOMMU의 하나 이상의 동작을 제어하기 위해 페이지 테이블 엔트리에서 이송 상태 정보를 사용한다.

Description

입력-출력 디바이스에 의해 액세스가능한 메모리의 페이지의 이송
관련 기술
일부 전자 디바이스는, 데이터가 저장되는(여기서 "데이터"는 프로그램 코드 명령어, 계산 동작에 대한 그리고 이로부터의 입력 또는 결과 데이터, 상수 값 등과 같은 정보에 대한 일반적인 용어로서 사용됨) 메모리와 함께, 계산, 제어, 메모리 액세스 및 다른 동작을 수행하는 프로세서(예를 들어, 중앙 처리 유닛 등)를 포함한다. 그러한 전자 디바이스 중 다수는 또한 입력-출력(IO) 디바이스, 이를테면, 네트워크 인터페이스 디바이스, 디스크 제어기 등을 포함한다. IO 디바이스는 다양한 동작을 수행하기 위해 프로세서 및 메모리와 상호작용할 수 있다. 예를 들어, 네트워크 인터페이스 디바이스는 네트워크를 통해 수신된 데이터를 메모리에 저장할 수 있고, 이어서, 메모리에 저장된 데이터가 프로세싱을 대기하고 있음을 프로세서에 시그널링할 수 있다.
일부 경우에서, 전자 디바이스의 메모리에 저장된 데이터는 데이터에 액세스하는 것이 비효율적인 방식으로 메모리에 저장될 수 있다. 예를 들어, 메모리는 2개의 상이한 유형의 메모리의 조합을 사용하여 구현될 수 있으며, 메모리 유형 중 하나는 액세스가 더 빠르지만 더 비싼 유형의 메모리이고, 다른 하나는 액세스가 더 느리지만 덜 비싼 유형의 메모리이다. 이러한 메모리에서, 빈번하게 액세스될 때, 높은 우선순위 및/또는 시간-임계적 데이터가 더 느린 유형의 메모리에 저장될 때, 비효율성이 발생할 수 있거나, 또는 그 반대의 경우도 마찬가지이다. 다른 예로서, 데이터가 불균일한 메모리 액세스(NUMA) 전자 디바이스의 원격 소켓 내의 메모리의 일부와 같은 메모리의 원격 부분에 저장될 때, 비효율성이 발생할 수 있다.
메모리 내의 데이터에 액세스할 때의 비효율성이 전자 디바이스의 전체 성능에 영향을 미칠 수 있기 때문에, 일부 전자 디바이스는 데이터가 메모리의 보다 적절한 위치에 저장되도록 메모리 내의 데이터를 동적으로 재배치 또는 "이송"시키기 위한 이송 메커니즘을 포함한다. 예를 들어, 메모리 내의 데이터는 메모리 관리 및 이송을 위해 특정된 크기(예를 들어, 4 KiB, 2 MiB 등)의 인접 데이터 블록 또는 "메모리의 페이지"로 조직화될 수 있다. 이송 메커니즘은 메모리의 페이지의 액세스를 모니터링하고, 메모리의 페이지의 액세스의 특정 패턴 또는 특성에 기초하여 메모리의 페이지를 선택적으로 이송할 수 있다. 예를 들어, 전술된 2개의 상이한 유형의 메모리를 갖는 전자 디바이스에서, 더 느린 속도 유형의 메모리에 저장된 메모리의 페이지가 충분히 자주 액세스되고 있을 때, 이송 메커니즘은 메모리의 페이지를 더 낮은 속도 유형의 메모리로부터 더 높은 속도 유형의 메모리로 이송할 수 있다. 일부 전자 디바이스에서, 이송 메커니즘은 메모리의 페이지를 자동으로 그리고 자체적으로 이송하며, 따라서 메모리의 페이지는 메모리의 페이지에 대한 액세스를 이용하여 액세스하는 엔티티(예를 들어, 프로세서, IO 디바이스 등) 각각에 이송에 관한 정보를 통신하지 않고 이송될 수 있다. 다시 말해서, 이송 메커니즘은, 액세스하는 엔티티 각각이 반드시 이송에 대한 직접적인 지식을 갖지 않고, 그에 대해 승인하지 않고/않거나, 이송의 당사자가 되는 것이 없이, "장면 뒤에서" 메모리의 페이지를 이송한다.
일부 전자 디바이스에서, 일부 또는 모든 IO 디바이스는 메모리의 페이지를 이송하는 것에 대한 지원을 제공하지 않는다. 예를 들어, IO 디바이스는, 메모리의 페이지가 이송됨에 따라 메모리의 페이지가 일시적으로 이용불가능한 것으로 발견될 때 발생할 수 있는 결함(예를 들어, 페이지 결함 등)을 처리하기 위한 소프트웨어 및/또는 하드웨어 지원을 포함하지 않는 더 오래되거나 더 간단한 IO 디바이스일 수 있다. 그러한 IO 디바이스에 액세스가능한 메모리의 페이지가 이송되어야 하고, 이송 동안 IO 디바이스가 메모리의 페이지 또는 메모리의 페이지와 연관된 정보(예를 들어, 어드레스 변환 정보 등)에 액세스하려고 시도하는 경우, 전자 디바이스 내의 IO 디바이스 및/또는 다른 기능 블록 및 디바이스(예를 들어, 프로세서 등)는 충돌하거나, 에러를 경험하거나, 또는 예상치 못한 또는 바람직하지 않은 방식으로 동작할 수 있다.
도 1은 일부 실시예에 따른 전자 디바이스를 예시하는 블록도를 나타낸다.
도 2는 일부 실시예에 따른 전자 디바이스의 운영 체제 및 기능 블록 및 디바이스를 예시하는 블록도를 나타낸다.
도 3은 일부 실시예에 따른 전자 디바이스의 하이퍼바이저 및 기능 블록 및 디바이스를 예시하는 블록도를 나타낸다.
도 4는 일부 실시예에 따른 페이지 테이블을 예시하는 블록도를 나타낸다.
도 5는 일부 실시예에 따른 페이지 테이블 엔트리 내의 메타데이터를 예시하는 블록도를 나타낸다.
도 6은 일부 실시예에 따른 이송 상태를 예시하는 상태도를 나타낸다.
도 7은 일부 실시예에 따른 메모리의 페이지를 이송하기 위한 프로세스를 예시하는 흐름도를 나타낸다.
도면 및 설명 전체에 걸쳐, 유사한 참조 번호는 동일한 도면 요소를 지칭한다.
하기 설명은 당업자가 설명된 실시예를 제조하고 사용할 수 있게 하기 위해 제시되며, 특정 응용 및 그 요건의 맥락에서 제공된다. 설명된 실시예에 대한 다양한 수정은 당업자에게 쉽게 명백할 것이며, 본원에 기재된 일반적인 원리는 다른 실시예 및 적용에 적용될 수 있다. 따라서, 설명된 실시예는 도시된 실시예로 제한되지 않으나, 본원에 설명된 원리 및 특징과 일치하는 가장 넓은 범위에 따른다.
용어
하기의 설명에서, 실시예를 설명하기 위해 다양한 용어가 사용된다. 다음은 용어 중 하나에 대한 단순화되고 일반적인 설명이다. 이러한 용어는 명확성 및 간결성을 위해 본원에서 언급되지 않은 상당한 추가적인 양태를 가질 수 있고, 이에 따라 본 설명은 이러한 용어를 제한하는 것으로 의도되지 않는다는 것을 유의한다.
기능 블록: 기능 블록은 집적 회로 회로부, 이산 회로부 등과 같은 관련 회로부의 세트를 지칭한다. 회로부는 회로부 내의 회로 요소에서 적어도 하나의 특성을 공유한다는 것에서 "상호관련"된다. 예를 들어, 회로부는 특정 집적 회로 칩, 기판, 회로 보드, 또는 그 일부에 포함되거나, 그 위에 제조되거나, 또는 다른 방식으로 결합될 수 있고, 특정 동작(예를 들어, 계산 동작, 제어 동작, 메모리 동작 등)의 수행에 수반될 수 있으며, 공통 제어 요소 및/또는 공통 클록 등에 의해 제어될 수 있다. 기능 블록의 회로부는 단일 회로 요소(예를 들어, 단일 집적 회로 로직 게이트 또는 이산 회로 요소)로부터 수백만 또는 수십억 회로 요소(예를 들어, 집적 회로 메모리)까지의 임의의 수의 회로 요소를 가질 수 있다. 일부 실시예에서, 기능 블록은 프로그램 코드를 실행하지 않고 동작을 수행하는 회로부를 사용하여 "하드웨어에서" 동작을 수행한다.
데이터: 데이터는, 메모리에 저장될 수 있고/있거나 계산, 제어, 및/또는 다른 동작에서 사용될 수 있는 정보를 나타내는 일반적인 용어이다. 데이터는 실제 데이터(예를 들어, 계산 또는 제어 동작의 결과, 프로세싱 회로부의 출력, 계산 또는 제어 동작에 대한 입력, 변수 값, 센서 값 등), 파일, 프로그램 코드 명령어, 제어 값 및/또는 다른 정보 데이터와 같은 정보를 포함한다. 데이터는, 데이터를 메모리에 로딩하는 것, 이송 등과 같은 동작을 위해 전술된 유형의 정보 중 하나 이상을 포함하는 논리 블록(예를 들어, 4 KiB 또는 2 MiB 메모리의 페이지 등)으로 조직화될 수 있다.
액세스: 메모리(예를 들어, 메인 메모리, 캐시 메모리 등)에 저장된 데이터와의 상호작용에 적용되는 액세스 또는 "메모리 액세스"는 데이터 및 대응하는 메타데이터 및/또는 제어 값에 대한, 이에 관한, 이를 사용하여, 및/또는 이와 함께 수행될 수 있는 모든 형태의 상호작용을 나타낸다. 예를 들어, 액세스는 메모리로부터의 데이터의 판독 또는 로드, 메모리로의 데이터의 기록 또는 저장, 메모리 내의 데이터의 무효화 또는 삭제, 메모리 내의 데이터에 대한 메타데이터의 판독 또는 기록, 상태의 변화, 일관성 상태 또는 메모리 내의 데이터에 대한 허용 등을 포함할 수 있다. 주어진 기능 블록 또는 디바이스에 대해 특정 유형의 메모리 액세스가 허용/허가될 때, 데이터는 주어진 기능 블록 또는 디바이스에 대해 "액세스가능"하다.
가상 메모리
설명된 실시예에서, 전자 디바이스는 전자 디바이스에서 실행되는 소프트웨어 엔티티(예를 들어, 애플리케이션 프로그램, 운영 체제, 디바이스 드라이버, 가상 머신 등)에 의한 또는 입력-출력(IO) 디바이스(예를 들어, 네트워크 인터페이스 디바이스, 주변 컴포넌트 인터페이스 익스프레스(PCIe) 버스 디바이스, 디스크 제어기 등)에 의한 데이터 액세스를 처리하기 위해 가상 메모리 기법을 사용한다. 일반적으로, 소프트웨어 엔티티 또는 IO 디바이스에 의해 데이터가 초기에 액세스될 때, 데이터를 포함하는 주어진 크기(예를 들어, 4 KiB, 2 MiB 등)의 메모리의 블록 또는 페이지는 대용량 저장소(예를 들어, 디스크 드라이브 또는 비휘발성 반도체 메모리)로부터 전자 디바이스 내의 메모리 (예를 들어, 메인 메모리) 내의 이용가능한 물리적 위치로 복사되거나 (예를 들어, 계산 또는 다른 동작 등의 결과를 저장하기 위해) 메모리의 페이지가 메모리에 새로 생성된다. 소프트웨어 엔티티 및 IO 디바이스가 메모리 내의 페이지의 물리적 위치를 추적하도록 요구되는 것을 회피하기 위해, 전자 디바이스는 소프트웨어 엔티티 또는 IO 디바이스에 대한 페이지의 물리적 위치를 추적한다. 소프트웨어 엔티티 및 IO 디바이스는, 메모리 내의 데이터의 물리적 위치에 기초한 어드레스(또는 물리적 어드레스)를 사용하여 메모리에 액세스하는 대신에, 대응하는 소프트웨어 엔티티 또는 IO 디바이스에 특정된 로컬 어드레스 공간인 가상 어드레스 공간 내의 "가상" 어드레스를 사용하여 메모리에 액세스한다. 소프트웨어 엔티티 또는 IO 디바이스의 관점에서, 가상 어드레스는 데이터가 메모리에 저장되는 실제 물리적 위치를 나타내고, 그에 따라 가상 어드레스를 사용하여 소프트웨어 엔티티 및 IO 디바이스에 의해 메모리 액세스가 이루어진다. 그러나, 가상 어드레스는 데이터가 메모리의 페이지에 저장되는 물리적 위치의 물리적 어드레스에 직접 맵핑되지 않을 수 있다. 페이지의 물리적 위치를 추적하는 것의 일부로서, 전자 디바이스는 메모리 액세스 요청에서 소프트웨어 엔티티 및 IO 디바이스에 의해 사용되는 가상 어드레스를, 데이터가 실제로 위치되는 물리적 어드레스로 변환한다. 이어서, 전자 디바이스는 물리적 어드레스를 사용하여 소프트웨어 엔티티 및 IO 디바이스에 대한 메모리 액세스를 수행한다.
전술된 가상 어드레스에서 물리적 어드레스로의 변환을 가능하게 하기 위해, 전자 디바이스는 페이지 테이블을 포함한다. 페이지 테이블은, 메모리에 저장된 데이터의 페이지에 대한 가상 어드레스 대 물리적 어드레스 변환 정보 및 다른 정보를 갖는 엔트리 또는 "페이지 테이블 엔트리"를 포함하는, 전자 디바이스의 메모리에 저장된 기록이다. 다시 말해서, 페이지 테이블은 메모리에 존재하는 데이터의 각각의 페이지에 대한 가상 어드레스 대 대응하는 물리적 어드레스의 맵핑을 포함한다. 주어진 가상 어드레스에서 메모리에 액세스하기 위한 요청을 소프트웨어 엔티티 또는 IO 디바이스로부터 수신할 시에, 전자 디바이스는 페이지 테이블 워크(walk)를 수행함으로써 페이지 테이블로부터 대응하는 물리적 어드레스 정보를 획득하고, 그 동안 페이지 테이블은 가상 어드레스와 연관된 물리적 어드레스를 제공하는 페이지 테이블 엔트리에 대해 검색된다. 예를 들어, 주어진 가상 어드레스에서 메모리에 액세스하기 위한 요청을 운영 체제로부터 수신할 시에, 전자 디바이스의 중앙 처리 유닛(CPU) 코어 내의 메모리 관리 유닛(MMU)은 페이지 테이블로부터 대응하는 물리적 어드레스 정보를 획득하기 위해 페이지 테이블 워크를 수행할 수 있고, 물리적 어드레스 정보를 사용하여 메모리 액세스를 프로세싱할 수 있다. 다른 예로서, 주어진 가상 어드레스에서 메모리에 액세스하기 위한 요청을 IO 디바이스로부터 수신할 시에, 전자 디바이스의 입력-출력 메모리 관리 유닛(IOMMU)은 페이지 테이블로부터 대응하는 물리적 어드레스 정보를 획득하기 위해 페이지 테이블 워크를 수행할 수 있고, 물리적 어드레스 정보를 사용하여 메모리 액세스를 프로세싱할 수 있다.
전술된 페이지 테이블 워크가 비교적 느리기 때문에, 페이지 테이블 워크를 수행하는 것을 회피하는 것이 바람직하다. 따라서, 전자 디바이스는 페이지 테이블 워크 동안 획득된 어드레스 변환 정보(즉, 페이지 테이블 엔트리에 기초한 정보)의 제한된 수의 사본을 저장하기 위해 사용되는 로컬 캐시인 변환 색인 버퍼(TLB)를 포함한다. 예를 들어, CPU는 소프트웨어 엔티티에 대한 메모리 액세스에 사용되는 페이지 테이블 엔트리(또는 페이지 테이블 엔트리 자체의 사본)에 기초하여 정보의 사본을 로컬로 저장하는 데 사용되는 TLB를 포함할 수 있다. 다른 예로서, IOMMU는 IO 디바이스에 대한 메모리 액세스에 사용되는 페이지 테이블 엔트리(또는 페이지 테이블 엔트리 자체의 사본)에 기초하여 정보의 사본을 로컬로 저장하는 데 사용되는 TLB를 포함할 수 있다. 동작 동안, CPU 코어 또는 IOMMU는 먼저 가상 어드레스에서 물리적 어드레스로의 변환을 수행하기 위해 대응하는 TLB로부터 캐싱된 페이지 테이블 엔트리를 획득하려고 시도한다. 대응하는 페이지 테이블 엔트리의 사본이 TLB에 존재하지 않을 때(즉, "미스(miss)"가 발생할 때), CPU 코어 또는 IOMMU는 원하는 페이지 테이블 엔트리를 획득하기 위해 페이지 테이블 워크를 수행한다. 이어서, CPU 코어 또는 IOMMU는 후속 사용을 위해 개개의 TLB에 획득된 페이지 테이블 엔트리의 사본을 캐싱할 수 있다.
일부 실시예에서, IOMMU 및 IO 디바이스는 PCI 익스프레스(PCIe) 어드레스 변환 서비스(ATS)와 같은 어드레스 변환을 위한 통신 프로토콜을 지원한다. ATS의 경우, 입력-출력(IO) 디바이스는, 각각의 IO 디바이스가 페이지 테이블 엔트리(또는 페이지 테이블 엔트리 자체)에 기초하여 사본 정보를 저장하기 위해 사용하는 개개의 로컬 캐시 또는 "어드레스 변환 캐시"(ATC)를 포함할 수 있다. 일반적으로, IO 디바이스가 페이지 테이블 엔트리에 기초한 정보의 로컬 사본(또는, 더 간단히, 전체 페이지 테이블 엔트리의 사본)을 원할 때, IO 디바이스는 페이지 테이블 엔트리에 기초하여 IOMMU로부터 정보를 요청한다. IOMMU는 IO 디바이스가 정보를 갖도록 허용된 것을 보장하기 위해 체크하고, 이어서, 페이지 테이블 엔트리에 기초하여 정보를 IO 디바이스에 제공한다. 다음으로, IO 디바이스는 후속 사용을 위해 페이지 테이블 엔트리에 기초하여 정보를 ATC에 저장한다. 따라서, ATC를 사용하면, IO 디바이스는 IOMMU로부터의 페이지 테이블 엔트리에 기초하여 정보를 반복적으로 요청할 필요성을 회피할 수 있다.
메모리의 페이지의 이송
설명된 실시예에서, 메모리의 페이지는 메모리 내에서 이송될 수 있다. 이송을 위해, 메모리 내의 제1 위치로부터 메모리 내의 제2 위치로 페이지가 재배치되도록 메모리의 페이지가 메모리 내에서 물리적으로 이동된다. 예를 들어, 메모리의 페이지가 8 KiB 메모리의 페이지이고 초기에 어드레스 A 내지 A + 8 KiB-1에 위치되면, 페이지는 어드레스 B 내지 B + 8 KiB-1로 이송될 수 있다. 일부 실시예에서, 메모리의 페이지는 메모리의 페이지 및/또는 메모리 자체에 더 적합한 메모리 내의 위치로 메모리의 페이지를 재배치하기 위해 이송된다. 예를 들어, 메모리의 자주 액세스되는 또는 더 높은 우선순위 페이지는 더 느린 액세스 속도를 갖는 제1 유형의 메모리로부터 더 빠른 액세스 속도를 갖는 제2 유형의 메모리로 또는 그 반대로 이송될 수 있다. 다른 예로서, 메모리 내의 메모리 회로부에 대한 마모를 회피하기 위해 메모리의 페이지가 메모리 내에서 이송될 수 있다. 또 다른 예로서, 메모리의 페이지는 액세스되고 있는 메모리의 다른 페이지에 더 근접하게 메모리의 페이지를 위치시키기 위해 메모리에서 이송될 수 있다. 또 다른 예로서, 일부 실시예에서, 메모리는 불균일한 메모리 액세스(NUMA)를 위해 구성되며, 메모리의 다수의 부분 각각은 개개의 프로세싱 노드에 근접하게 위치되고, 메모리의 페이지는 노드 내의 메모리의 부분 사이에서 이송될 수 있다.
일부 실시예에서, 메모리의 페이지를 이송하는 결정은, 메모리의 페이지가 이송될 조건을 식별하는 하나 이상의 이송 규칙(즉, 가이드라인, 표준, 임계치 등)에 기초하여 전자 디바이스의 소프트웨어 엔티티 및/또는 기능 블록 또는 디바이스에 의해 이루어진다. 예를 들어, 전자 디바이스 내의 프로세서에 의해 실행되는 운영 체제 또는 하이퍼바이저는 메모리의 페이지에 대해 이루어지는 액세스의 빈도 또는 유형에 기초하여 메모리의 페이지가 이송될 것이라고 결정할 수 있다. 다른 예로서, 프로세서의 메모리 관리 유닛 기능 블록은 메모리의 페이지에 대한 메모리 액세스 요청에서 식별된 우선순위에 기초하여 메모리의 페이지가 더 느린 액세스 메모리로부터 더 빠른 액세스 메모리로 이송될 것이라고 결정할 수 있다.
프로세서가 메모리 내의 메모리의 페이지를 이송할 수 있지만, 즉 메모리 내의 메모리의 페이지의 개별 바이트를 물리적으로 이동시킬 수 있지만, 이송을 수행하기 위해 프로세서를 사용하는 것은 다른 동작(예를 들어, 계산 동작, 다른 유형의 메모리 액세스 등)에 더 양호하게 사용되는 프로세서 자원을 소비할 수 있다. 따라서, 일부 실시예에서, 메모리의 페이지의 이송은 프로세서로부터 페이지 이송 엔진 기능 블록 또는 디바이스(메모리 내에서 메모리의 페이지를 물리적으로 이동시키기 위한 동작을 수행하는 직접 메모리 액세스(DMA) 기능 블록을 포함할 수 있음)로 분담된다. 메모리의 페이지 및 메모리 내의 목적지 위치의 식별이 주어지면, 페이지 이송 엔진은 메모리의 페이지의 이송을 수행할 수 있고 이를 수행하도록 최적화될 수 있다.
개요
설명된 실시예에서, 전자 디바이스는 프로세서 및 하나 이상의 입력-출력(IO) 디바이스를 포함한다(여기서 IO 디바이스는 기능 블록 또는 실제 디바이스, 이를테면 네트워크 인터페이스, 디스크 제어기, 그래픽 처리 유닛 등을 포함할 수 있음). 전자 디바이스는 또한 프로세서 및/또는 IO 디바이스에 의한 사용을 위해 데이터를 저장하기 위해 사용되는 메모리를 포함한다. 전자 디바이스는 메모리에 저장된 데이터를 복사, 이동, 및 그렇지 않으면 처리하기 위한 동작을 수행하는 적어도 하나의 페이지 이송 엔진 기능 블록을 더 포함한다. 이러한 동작의 일부로서, 페이지 이송 엔진은 메모리의 페이지(예를 들어, 4 KiB 메모리의 페이지)를 이송하는 것과 연관된 동작을 수행하며, 이는 이송 규칙에 따라 메모리 내에서 메모리의 페이지를 재배치하는 것을 수반한다. 전자 디바이스는 또한 IO 디바이스에 의한 메모리 액세스를 관리하는 입력-출력 메모리 관리 유닛(IOMMU)을 포함한다. 설명된 실시예에서, IOMMU는, IO 디바이스에 대해 액세스가능한 그리고 이송될 또는 이송되고 있는 메모리의 페이지의 IO 디바이스 액세스를 제어할 뿐만 아니라, 메모리의 이러한 페이지에 대한 페이지 테이블 엔트리로부터의 정보의 사용을 제어하기 위한 동작을 수행한다. IOMMU에 의해 수행되는 동작은, IO 디바이스가 이송되고 있던 메모리의 페이지에 액세스(또는 메모리의 누락된 페이지에 직면)했고/했거나 메모리의 이러한 페이지에 대한 페이지 테이블 엔트리로부터 부정확한 정보를 사용한 경우 발생할 수 있는 에러 또는 실패를 IO 디바이스, 및 더 일반적으로는 전자 디바이스가 경험하지 않는 것을 보장하는 것을 목적으로 한다.
설명된 실시예에서, 페이지 테이블은 이송되고 있는 메모리의 페이지 및 개개의 페이지 테이블 엔트리의 액세스를 제어하는 것을 돕기 위해 사용되는 페이지 테이블 엔트리에 이송 정보를 포함한다. 페이지 테이블 엔트리는, 전술된 변환 정보 및 메타데이터와 함께, 이송 상태 정보를 포함한다. 이송 상태 정보는 페이지 테이블 엔트리와 연관된 메모리의 페이지를 이송하기 위한 준비가 이루어지고 있는지 또는 메모리의 페이지가 이송되고 있는지(또는 이송되지 않는지)의 표시를 포함한다. 예를 들어, 일부 실시예에서, 이송 상태 정보는 2개의 비트를 포함하며, 2개의 비트의 각각의 가능한 조합은 이송 상태의 세트 중에서 대응하는 이송 상태를 식별한다. 00으로 식별되는 제1 또는 "비-이송" 이송 상태에서, 메모리의 페이지는 이송되지 않고 있다. 01 및 10에 의해 각각 식별되는 제2 및 제3 이송 상태에서, 메모리의 페이지를 이송하기 위한 대응하는 준비가 이루어지고 있다. 11로 식별된 제4 이송 상태에서, 메모리의 페이지를 이송하기 위한 최종 준비가 이루어지고 있거나, 또는 메모리의 페이지가 이송되는 프로세스에 있다(즉, 메모리에서 실제로 재배치되고 있음).
일부 실시예에서, 프로세서는, 페이지 이송 엔진과 조합하여, 이송을 위한 메모리의 페이지를 준비하고 메모리의 페이지의 이송을 처리하기 위한 동작 중 적어도 일부를 수행하는 소프트웨어 엔티티를 실행한다. 예를 들어, 소프트웨어 엔티티는 하이퍼바이저, 운영 체제, 애플리케이션 프로그램 등일 수 있거나 이를 포함할 수 있다. 메모리의 페이지를 이송하도록 준비하기 위해 소프트웨어 엔티티 및/또는 페이지 이송 엔진에 의해 수행되는 동작 중에서 메모리의 페이지에 대한 이송 상태 정보를 설정하는 것이 있다. 예를 들어, 전자 디바이스의 기능 블록 및 디바이스가 전술된 이송 상태 각각을 진행함에 따라, 소프트웨어 엔티티 또는 페이지 이송 엔진은 그에 따라 이송 상태 정보를 설정할 수 있다. 소프트웨어 엔티티 및/또는 페이지 이송 엔진에 의해 수행되는 다른 동작은 IOMMU 또는 IO 디바이스의 캐시에 저장된 페이지를 이송하기 위해 페이지 테이블 엔트리로부터의 정보의 기존 사본을 무효화하는 것이다. 페이지 이송 엔진에 의해 수행되는 추가 동작은, 메모리의 페이지를 이송한 후, 메모리의 페이지에 대한 메모리 내의 새로운 위치를 식별하기 위해 메모리의 페이지에 대한 페이지 테이블 엔트리를 업데이트하는 것, 및 비-이송 이송 상태를 나타내기 위해 페이지 테이블 엔트리에서 이송 상태 정보를 설정하는 것이다.
일부 실시예에서, IOMMU는 페이지 테이블 엔트리 내의 이송 상태 정보에 기초하여 메모리의 페이지 및 페이지 테이블 엔트리에 대한 액세스 제한을 강제한다. 예를 들어, 메모리의 페이지를 이송하기 위한 준비가 이루어지고 있거나 메모리의 페이지가 이송되고 있음을 이송 상태 정보가 나타낼 때, IOMMU는 IOMMU 자체 및 IO 디바이스가 로컬 캐시에서 페이지 테이블 엔트리로부터의 정보의 사본을 저장하거나 사용하는 것을 방지할 수 있다. 다른 예로서, 메모리의 페이지가 이송을 위해 준비되고 있거나 또는 이송되고 있음을 페이지 테이블 엔트리 내의 이송 정보가 나타낼 때, IOMMU는 메모리의 페이지의 액세스가 그에 따라 처리되는 것을 보장할 수 있다. 즉, IOMMU는, 메모리의 페이지가 이송되기 전에 메모리의 페이지의 기존의 메모리 액세스가 완료되는 것 및 메모리의 페이지가 이송된 후까지 메모리의 페이지의 새롭게 직면된 메모리 액세스가 중단(즉, 홀딩, 버퍼링 등)되는 것을 보장할 수 있다. 대조적으로, 메모리의 페이지가 비-이송 이송 상태에 있음(그리고 이에 따라 이송되고 있지 않음)을 페이지 테이블 엔트리 내의 이송 정보가 나타낼 때, IOMMU는 메모리의 페이지 및 페이지 테이블 엔트리의 정상 액세스를 허용할 수 있다.
일부 실시예에서, IO 디바이스 중 일부 또는 전부는, IO 디바이스가 IOMMU로부터 IO 디바이스 내의 로컬 캐시 또는 "어드레스 변환 캐시(ATC)"에서의 엔트리에서 로컬로 캐싱될 페이지 테이블 엔트리로부터의 정보를 요청할 수 있는 표준인 PCI 익스프레스(PCIe) 어드레스 변환 서비스와 같은 어드레스 변환 서비스(ATS)를 지원한다. IO 디바이스 내의 캐시에서 페이지 테이블 엔트리로부터의 정보의 사본을 저장하는 것을 방지하기 위한 전술된 동작의 일부로서, IOMMU는 이송될 또는 이송되고 있는 메모리의 페이지와 연관된 페이지 테이블 엔트리로부터의 정보에 대한 ATS 요청을 거절/거부할 수 있다. 예를 들어, 일부 실시예에서, IOMMU는 메모리의 페이지가 존재하지 않음을 요청 IO 디바이스에 통지함으로써 ATS 요청에 응답할 수 있으며, 이는 IO 디바이스로 하여금 메모리의 페이지를 IO 페이지 테이블에 존재하게 하기 위한 동작을 진행하게 한다. 다른 예로서, IOMMU는 메모리의 페이지에 액세스하기 위해 변환되지 않은 어드레스가 사용되어야 하고 따라서 IO 페이지 테이블 엔트리로부터의 정보가 IO 디바이스에 제공되지 않을 것임을 요청 IO 디바이스에게 통지할 수 있다.
전술된 동작은, IO 디바이스에 대해 액세스가능한 그리고 이송을 위해 준비되고 있거나 또는 이송되고 있는 메모리의 페이지에 대해 수행되지만, 다른 유형의 메모리의 페이지는 이송 동안 상이하게 처리될 수 있다. 예를 들어, 일부 실시예에서, IO 디바이스에 대해 액세스가능하지 않지만 대신 프로세서에 대해서만 액세스가능한 메모리의 페이지는, 페이지를 개개의 페이지 테이블 엔트리에서 "존재하지 않음"으로서 마킹하고 프로세서 내의 캐시(즉, 변환 색인 버퍼) 내의 메모리의 이러한 페이지에 대한 페이지 테이블 정보의 임의의 사본을 무효화함으로써 이송될 수 있다. 이러한 경우, 프로세서는 (예를 들어, 페이지 결함 등을 통해) 누락된 페이지를 처리하기 위한 메커니즘을 포함한다. 또한, 이송을 위해 준비되고 있지 않거나 또는 이송되고 있지 않은 메모리의 페이지 및 이들 개개의 페이지 테이블 엔트리는, 심지어 IO 디바이스에 대해 액세스 가능한 경우에도, 메모리 액세스 순서화 규칙 등을 고려하더라도, 정상적으로 액세스될 수 있다.
IO 디바이스에 대해 액세스가능한 메모리의 페이지의 이송을 처리함으로써, 설명된 실시예는, 자체적으로 메모리의 이송 페이지를 적절하게 처리하지 않을 수 있는 IO 디바이스의 존재에도 불구하고, 그러한 메모리의 페이지가 메모리 내에서 더 자유롭게 이송될 수 있게 한다. 이러한 메모리의 페이지를 이송하는 것은 메모리의 페이지가 메모리 내의 바람직한 위치에 있음을 보장하는 데 도움이 될 수 있다. 이는 메모리의 동작을 개선할 수 있고, 이는 결국, 메모리 내의 메모리의 페이지를 사용하는 IO 디바이스 및 프로세서의 동작을 개선한다.
전자 디바이스
도 1은 일부 실시예에 따른 전자 디바이스(100)를 예시하는 블록도를 나타낸다. 도 1에서 볼 수 있는 바와 같이, 전자 디바이스(100)는 프로세서(102), 메모리(104), 대용량 저장소(106), 입력-출력(IO) 디바이스(108 내지 110), 입력-출력(IO) 허브(112) 및 페이지 이송 엔진(114)을 포함한다. 프로세서(102), 메모리(104), 대용량 저장소(106), IO 디바이스(108 내지 110), IO 허브(112) 및 페이지 이송 엔진(114)은 모두 "하드웨어"로, 즉, 대응하는 집적 회로부, 이산 회로부 및/또는 디바이스를 사용하여 구현된다. 예를 들어, 일부 실시예에서, 프로세서(102), 메모리(104), 대용량 저장소(106), IO 디바이스(108 내지 110), IO 허브(112) 및 페이지 이송 엔진(114)은 하나 이상의 반도체 칩 상의 집적 회로부에서 구현되거나, 이산 회로부 및/또는 디바이스와 조합하여 하나 이상의 반도체 칩 상의 집적 회로부의 조합으로 구현되거나, 또는 이산 회로부 및/또는 디바이스로 구현된다. 도 1에서, 전자 디바이스(100)는 다양한 도면 요소가 더 쉽게 구별될 수 있게 하기 위해 부분적으로 음영 처리된다.
프로세서(102)는 전자 디바이스(100)에서 계산, 메모리 액세스, 제어 및/또는 다른 동작을 수행하는 기능 블록이다. 프로세서(102)는 코어(116 내지 118)를 포함하며, 이들 각각은 하나 이상의 중앙 처리 유닛(CPU) 코어, 그래픽 처리 유닛(GPU) 코어, 내장된 프로세서, 주문형 집적 회로(ASIC) 및/또는 다른 계산 기능 블록을 포함한다.
프로세서(102)는 다양한 동작을 수행하기 위해 코어(116 내지 118)에 의해 사용될 수 있는 데이터의 사본을 저장하기 위해 사용되는 기능 블록인 캐시 메모리 또는 "캐시"를 포함한다. 도 1에서 볼 수 있는 바와 같이, 프로세서(102)의 캐시는 코어(116 내지 118)의 레벨-1(L1) 캐시(120 내지 122)(L1(120) 및 L1(122))를 각각 포함한다. L1 캐시(120 내지 122) 각각은 데이터를 저장하기 위한 메모리 회로부 및 메모리 회로부에 저장된 데이터의 액세스를 처리하기 위한 제어 회로부를 포함한다. 프로세서(102)는 또한, 데이터를 저장하기 위한 메모리 회로부 및 메모리 회로부에 저장된 데이터의 액세스를 처리하기 위한 제어 회로부를 각각 포함하는 공유 레벨 2(L2) 캐시(124) 및 레벨 3(L3) 캐시(126)를 포함한다.
프로세서(102)는 전자 디바이스(100)에서 보안-관련 동작을 수행하기 위해 사용되는 기능 블록인 플랫폼 보안 프로세서(PSP)(128)를 포함한다. 예를 들어, 일부 실시예에서, PSP(128)는 CPU 코어, ASIC, 및/또는 마이크로제어기를 포함한다. PSP(128)는 프로세서(102) 내의 다른 기능 블록 및 디바이스 및/또는 프로세서(102)에 의해 실행되는 소프트웨어 엔티티의 특정된 악의적인 또는 잘못된 거동에 대해 안전하도록 설계된 회로부를 포함한다. 따라서, PSP(128)는 그러한 거동에 민감한 다른 기능 블록, 디바이스 및/또는 소프트웨어 엔티티의 동작을 보안하기 위해 사용될 수 있다. 다시 말해서, PSP(128)는 전자 디바이스(100)에서 신뢰되는 실행 환경을 가능하게 하는 것과 연관된 동작을 수행할 수 있다. 이를 위해, PSP(128)는 암호화/복호화(예를 들어, 키 생성, 데이터의 암호화/복호화 등), 하드웨어 및/또는 소프트웨어 엔티티의 등록 및/또는 인증, 액세스 허가 검증 등을 위한 동작을 수행할 수 있다. 일부 실시예에서, PSP(128)는 IO 디바이스(108 내지 110)에 대해 액세스가능한 페이지의 이송을 처리하기 위해 본 명세서에 설명된 동작 중 적어도 일부를 수행한다. 예를 들어, 소프트웨어 엔티티는 메모리의 페이지를 PSP(128)로 이송하기 위한 요청을 통신할 수 있고, 이어서 이는, 후속 프로세싱을 위해 메모리의 페이지를 페이지 이송 엔진(114)으로 이송하기 위한 요청을 포워딩하기 전에 메모리의 페이지의 이동이 허용되는 것(즉, 소프트웨어 엔티티가 메모리의 특정 페이지를 메모리 등의 목적지 위치로 이동시키도록 허용되는 것)을 검증한다.
메모리(104)는 전자 디바이스(100)의 다른 기능 블록에 대한 데이터를 저장하기 위해 사용되는 기능 블록이다. 예를 들어, 일부 실시예에서, 메모리(104)는 전자 디바이스(100) 내의 "메인" 메모리이다. 메모리(104)는 데이터를 저장하기 위한 메모리 회로부 및 메모리 회로부에 저장된 데이터의 액세스를 처리하기 위한 제어 회로부를 포함한다.
일부 실시예에서, 메모리(104)는, 메모리(104) 내의 어드레스가능한 위치의 세트의 상이한 부분이 메모리 유형 각각에 있도록 배열되는 2개 이상의 상이한 유형의 메모리를 포함한다. 예를 들어, 일부 실시예에서, 어드레스가능한 위치 중 절반은 제1 유형의 메모리에 있고, 따라서 제1 유형의 메모리 회로부를 사용하여 구현되고, 어드레스가능한 위치 중 절반은 제2 유형의 메모리에 있으며, 따라서 제2 유형의 메모리 회로부를 사용하여 구현된다. 2개의 유형의 메모리의 사용은 메모리(130)의 유형 및 메모리(132)의 유형을 통해 도 1에 예시된다. 예를 들어, 메모리(130)의 유형은 5세대 DDR5 DRAM(double data rate synchronous dynamic random access memory)일 수 있거나, 또는 다른 유형의 메모리 및 유형의 메모리(132)는 3D 크로스포인트(3D XPoint) 메모리 또는 다른 유형의 메모리일 수 있다. 각각의 유형의 메모리는 개개의 메모리 특성을 갖는다. 예를 들어, 메모리 특성은 액세스 속도/레이턴시, 액세스 대역폭, 데이터 보호/검증/에러 정정, 신뢰성/고장 사이의 평균 시간, 전력 소비, 열 생성, 데이터 어드레스가능성(예를 들어, 바이트 또는 블록 어드레스가능성), 데이터 호환성/규격, 금전적 비용, 설계 복잡성 등을 포함할 수 있다.
대용량 저장소(106)는 전자 디바이스(100)의 다른 기능 블록 및 디바이스에 의한 사용을 위한 데이터를 저장하는 기능 블록 및/또는 디바이스이다. 예를 들어, 대용량 저장소(106)는 반도체 메모리, 디스크 드라이브, 광학 드라이브 등일 수 있거나 이들을 포함할 수 있다. 대용량 저장소(106)는, 대용량 저장소(106)에 대한 전력이 셧오프(또는 달리 감소)됨에도 불구하고 저장된 데이터를 유지하는 회로부 및/또는 디바이스를 포함하고 따라서 데이터에 대한 비휘발성 "장기" 저장소로서 기능한다. 런타임 시에(즉, 전자 디바이스(100)가 동작할 때), 데이터의 사본이 대용량 저장소(106)로부터 획득되고, 전자 디바이스(100)의 기능 블록에 의한 후속 사용을 위해 휘발성 메모리(104)(및 가능하게는 하나 이상의 캐시)에 저장된다. 예를 들어, 데이터는 주어진 크기의 블록 또는 페이지(예를 들어, 4 KiB, 2 MiB, 1 GiB 등)의 대용량 저장소(106)로부터 획득/판독될 수 있고, 페이지는 "메모리의 페이지"로서 메모리(104)에 저장될 수 있다. 또한, 전자 디바이스(100)의 다른 기능 블록 및 디바이스에 의해 생성되는 메모리의 페이지는 (예를 들어, 계산 결과, 파일, 구성 값 등을 저장하기 위해) 메모리(104)에 저장되고 결국 대용량 저장소(106)에 기록될 수 있다. 메모리(104)에 저장되어 있는 동안, 메모리의 페이지는 메모리의 페이지 및/또는 그 안의 데이터에 대한 액세스 규칙 및 허가에 따라 다른 기능 블록 및 디바이스에 대해 액세스가능할 수 있다.
프로세서(102)로 돌아가면, 메모리 관리 유닛(MMU)(134)은 메모리 액세스 요청 및 페이지 테이블로부터의 정보에 대한 요청을 처리하는 기능 블록이다. 프로세서(102)의 기능 블록에 의해 데이터가 액세스될 때, 기능 블록은 메모리 액세스 요청을 MMU(134)에 전송한다. 예를 들어, 코어(116)에 의해 실행되는 소프트웨어 엔티티(예를 들어, 프로그램, 운영 체제 등)는 코어(116) 내의 프로세싱 회로부 내의 로드/저장 유닛으로 하여금 (예를 들어, 데이터의 로드 또는 저장 등을 위해) 메모리 액세스 요청을 MMU(134)에 전송하게 할 수 있다. 이어서, MMU(134)는 메모리 액세스 요청의 충족 또는 해결을 위해 대응하는 메모리 액세스 요청을 L2 캐시(124), L3 캐시(126) 및 메모리(104) 중 하나 이상에 전송한다. 예를 들어, 데이터가 로딩될 것이라면, MMU(134)는 L2 캐시(124), L3 캐시(126) 또는 메모리(104)로부터 데이터를 획득하고 데이터를 요청 기능 블록에 포워딩할 수 있다. 이는, 데이터가 메모리(104)에 이미 존재하지 않는다면, 대용량 저장소(106)로부터 메모리(104)로 데이터를 포함하는 메모리의 하나 이상의 페이지를 로딩하는 것을 의미할 수 있다.
MMU(134)는 페이지 테이블 워크를 통해 페이지 테이블로부터 어드레스 변환 정보 및 다른 정보를 획득하는 것에 관련된 동작을 수행하는 기능 블록인 테이블 워커(TW)(136)를 포함한다. 예를 들어, 위에서 더 상세히 설명된 바와 같이, 일부 실시예에서, 전자 디바이스(100)는 가상 메모리를 사용하여, 소프트웨어 엔티티(예를 들어, 코어(116 내지 118)에 의해 실행됨)가 물리적 어드레스로 변환되는 가상 어드레스를 사용하여 메모리에 액세스할 수 있게 한다. 가상 어드레스를 갖는 소프트웨어 엔티티로부터 메모리 액세스 요청을 수신할 시에, 테이블 워커(136)는 데이터가 메모리(104)에 위치되는 페이지에 대한 물리적 어드레스로 가상 어드레스를 변환하기 위한 페이지 테이블 워크 동작을 수행한다. 페이지 테이블 워크 동작 동안, 테이블 워커(136)는 또한, 각각의 메모리 액세스를 요청하고 있는 기능 블록 및/또는 소프트웨어 엔티티가 이러한 액세스를 수행하도록 허용되는 것, 즉, 물리적 어드레스 등에서 메모리에 액세스하도록 허용되는 것, 및 변환에 사용된 페이지 테이블 및 다른 기록이 변조되거나 허용불가능하게 수정되지 않았다는 것을 보장하기 위해 페이지 테이블 엔트리 및/또는 다른 기록을 체크할 수 있다. 일부 실시예에서, 테이블 워커(136)는 또한 페이지의 이송을 처리하기 위해 본 명세서에 설명된 동작의 일부로서 페이지 테이블 엔트리의 이송 상태 정보를 체크한다.
전술된 페이지 테이블의 예는 도 1에서 페이지 테이블(148)로서 도시된다. 일반적으로, 페이지 테이블(148)은 메모리(104)에 현재 저장된 데이터의 각각의 페이지에 대한 가상 어드레스 대 물리적 어드레스 변환 정보 및 다른 정보를 갖는 엔트리 또는 "페이지 테이블 엔트리"를 갖는 기록이다. 페이지 테이블(148)은 각각의 페이지 테이블 엔트리에, 본 명세서에 설명된 바와 같이 메모리의 페이지의 이송을 처리하기 위해 사용되는 개개의 이송 상태 정보를 포함한다. 도 1에서 단일 엔티티로서 도시되지만, 일부 실시예에서, 페이지 테이블(148)은 가상 어드레스 대 물리적 어드레스 변환을 수행하기 위해 조합하여 사용되는 다수의 별개의 페이지 서브-테이블이거나 이를 포함한다. 또한, 일부 실시예에서, 페이지 테이블(148)은, 가상 머신 및 IO 디바이스 등에 대한 가상 어드레스 대 물리적 어드레스 변환을 수행하기 위해 사용되는, 즉, 게스트 가상 어드레스, 호스트 가상 어드레스 및 호스트 물리적 어드레스에 대한 다수의 변환을 수행하기 위해 사용되는 페이지 테이블(예를 들어, 호스트 페이지 테이블, IOMMU 페이지 테이블 등)의 계층구조를 포함하거나 그에 포함된다. 예를 들어, 일부 실시예에서, 페이지 테이블(148)은 프로세서(102) 상에서 실행되는 소프트웨어 엔티티에 대한 가상 어드레스 대 물리적 어드레스 변환(및 다른 동작)을 수행하기 위해 프로세서(102)에 의해 사용되는 호스트 페이지 테이블 및 IO 디바이스(108 내지 110)에 대한 가상 어드레스 대 물리적 어드레스 변환(및 다른 동작)을 수행하기 위해 IOMMU(140)에 의해 사용되는 IOMMU 페이지 테이블을 포함한다. 명확성을 위해, 본 명세서의 예에서는 단일 페이지 테이블이 사용되지만, 본 명세서에서 설명된 동작에 대한 대응하는 조정과 함께 일부 실시예에서, 다수의 페이지 테이블, 페이지 테이블의 계층구조 및/또는 별개의 페이지 테이블이 사용될 수 있다.
MMU(134)는 페이지 테이블 엔트리로부터 획득된 정보의 사본을 저장하기 위해 사용되는 기능 블록인 변환 색인 버퍼(TLB)(138)를 포함한다. TLB(138)는 테이블 워커(136)에 의해(또는 다른 소스로부터) 페이지 테이블 워크 동안 획득된 페이지 테이블 엔트리 또는 그 부분의 사본을 저장하는 캐시에 대한 메모리 회로부를 포함한다. 페이지 테이블 워크를 수행하는 것을 회피하기 위해, 가능할 때, MMU(134)는 TLB(138)로부터 어드레스 변환 정보 및/또는 다른 페이지 테이블 엔트리 정보를 획득한다. 그러나, 어드레스 변환 정보 및/또는 다른 페이지 테이블 엔트리 정보가 TLB(138)에 존재하지 않으면, 테이블 워커(136)는 정보를 획득하기 위해 테이블 워크를 수행한다. 일부 실시예에서, TLB(138) 내의 특정 정보는 본 명세서에 설명된 바와 같이 대응하는 페이지가 이송되기 전에 무효화된다.
입력-출력(IO) 디바이스(108 내지 110)는 전자 디바이스(100)의 프로세서(102) 및 다른 기능 블록 및 디바이스와 상호작용하는 기능 블록 또는 디바이스이다. 따라서, 프로세서(102) 및 다른 기능 블록은 IO 디바이스(108 내지 110)로부터 "입력" 데이터를 수신하거나 또는 그에 "출력" 데이터를 전송할 수 있다. IO 디바이스(108 내지 110)는 또한 전자 디바이스(100) 외부의 기능 블록 또는 디바이스와 상호작용할 수 있다. 예를 들어, 입력-출력 디바이스(108 내지 110)는 네트워크 인터페이스 디바이스, 디스크 제어기, 대응하는 유선 또는 무선 버스 또는 인터페이스(예를 들어, 주변 제어기 인터페이스 익스프레스(PCIe) 버스, Universal Serial Bus(USB), WiFi 네트워크 등)에 결합된 디바이스, 그래픽 처리 유닛 등을 포함할 수 있다. IO 디바이스(108 내지 110) 각각에 의해 수행되는 특정 동작은 각각의 IO 디바이스의 성질에 좌우된다. 예를 들어, IO 디바이스(108)가 디스크 제어기이면, IO 디바이스(108)는 디스크(예를 들어, 대용량 저장소(106))로부터 데이터를 검색하고 데이터를 메모리(104)에 기록할 수 있거나 또는 그 반대일 수 있다. 다른 예로서, IO 디바이스(110)가 네트워크 인터페이스 디바이스인 경우, IO 디바이스(110)는 (도시되지 않은) 네트워크를 통해 수신된 데이터를 메모리(104)에 저장하고, 네트워크를 통해 수신 디바이스에 송신될 데이터를 메모리(104)로부터 획득하고, 프로세서(102)에 데이터를 제공하거나 그로부터 데이터를 획득하는 것 등을 할 수 있다.
IO 허브(112)는 IO 디바이스(108 내지 110)와 전자 디바이스(100) 내의 다른 기능 블록 사이의 인터페이싱을 위한 동작을 수행하는 기능 블록 또는 디바이스이다. 즉, IO 허브(112)는 IO 디바이스(108 내지 110)와 프로세서(102), 메모리(104) 등과 같은 기능 블록 사이에서 통신 및 다른 데이터를 라우팅하기 위한 동작을 수행한다. IO 허브(112)에 의해 라우팅되는 특정 통신 및 통신을 라우팅하기 위해 수행되는 동작은 IO 디바이스(108 내지 110)의 성질에 좌우되지만, 메모리 액세스, 데이터 통신, 제어 및 구성 통신 등을 포함할 수 있다.
IO 허브(112)는 IO 디바이스(108 내지 110)에 의한 메모리 액세스를 처리하기 위한 동작을 수행하는 기능 블록인 입력-출력 메모리 관리 유닛(IOMMU)(140)을 포함한다. 메모리(104) 내의 데이터가 IO 디바이스에 의해 액세스될 때, IO 디바이스는 대응하는 메모리 액세스 요청을 송신한다. IOMMU(140)는 IO 디바이스로부터의 메모리 액세스 요청을 인터셉트하고, 요청을 내부적으로 프로세싱하여 메모리 액세스 요청이 진행될 수 있는지 여부를 결정하고, 이어서 (메모리 액세스 요청이 진행될 수 있다고 가정하여) 데이터에 액세스하기 위해 대응하는 요청을 메모리(104)에 전송한다.
IO 디바이스(108 내지 110)로부터의 메모리 액세스 요청을 프로세싱하기 위해 IOMMU(140)에 의해 수행되는 동작 중에서 (즉, 메모리 액세스 요청에서 IO 디바이스(108 내지 110)에 의해 사용되는 가상 어드레스와 연관된 메모리 내의 물리적 어드레스를 획득하기 위해) IO 디바이스(108 내지 110)에 대한 메모리 액세스에 대한 어드레스 변환을 수행하는 것이 있다. IOMMU(140)는 페이지 테이블로부터 어드레스 변환을 획득하는 것과 관련된 동작(예를 들어, 페이지 테이블 워크 등)을 수행하는 기능 블록인 입력-출력 테이블 워커(IOTW)(142)를 포함한다. 입력-출력 테이블 워커(142)에 의해 수행되는 동작은, (프로세서(102)보다는) IO 디바이스(108 내지 110)로부터의 메모리 액세스에 대한 것이지만, 테이블 워커(136)에 의해 수행되는 동작과 유사하다. 일부 실시예에서, 어드레스 변환을 수행하는 것과 함께, 입력-출력 테이블 워커(142)는 또한 IO 디바이스(108 내지 110)로부터의 메모리 액세스가 메모리의 페이지에서 허용되는지 여부 및/또는 메모리의 페이지가 본 명세서에서 설명된 바와 같이 이송되고 있는지 여부를 결정하기 위해 이송 상태 정보와 같은 메타데이터 및 페이지 정보를 체크한다. 이러한 실시예에서, 입력-출력 테이블 워커(142)는 부적절한 메모리 액세스 또는 이송되고 있는 페이지에 대한 메모리 액세스를 회피하기 위해 메모리 액세스를 차단하거나 달리 처리할 수 있다. 일부 실시예에서, 입력-출력 테이블 워커(142)는 IOMMU(140)와 연관된 페이지 테이블, 호스트 페이지 테이블 및/또는 소프트웨어 엔티티와(예를 들어, 하이퍼바이저, 가상 머신 등과) 연관된 네스팅된 페이지 테이블을 포함하는 페이지 테이블의 계층구조를 사용하고, 따라서 그 안에서 테이블 워크를 수행한다.
IOMMU(140)는 또한 페이지 테이블 엔트리로부터 획득된 정보의 사본을 저장하기 위해 사용되는 기능 블록인 변환 색인 버퍼(TLB)(144)를 포함한다. TLB(144)는 테이블 워커 입력-출력 테이블 워커(142)에 의해(또는 다른 소스로부터) 페이지 테이블 워크 동안 획득된 페이지 테이블 엔트리 또는 그 부분의 사본을 저장하는 캐시에 대한 메모리 회로부를 포함한다. 페이지 테이블 워크를 수행하는 것을 회피하기 위해, 가능할 때, IOMMU(140)는 TLB(144)로부터 어드레스 변환 정보 및/또는 다른 페이지 테이블 엔트리 정보를 획득한다. 그러나, 어드레스 변환 정보 및/또는 다른 페이지 테이블 엔트리 정보가 TLB(144)에 존재하지 않으면, 입력-출력 테이블 워커(142)는 정보를 획득하기 위해 테이블 워크를 수행한다. 일부 실시예에서, TLB(144) 내의 특정 정보는 본 명세서에 설명된 바와 같이 대응하는 페이지가 이송되기 전에 무효화된다.
일부 실시예에서, IO 디바이스(108 내지 110) 중 일부 또는 전부는 페이지 테이블 엔트리로부터 획득된 정보의 사본을 저장하기 위한 로컬 캐시를 포함한다. 예를 들어, 일부 실시예에서, IO 디바이스(108 내지 110) 및 IOMMU(140) 중 일부 또는 전부는 어드레스 변환 서비스(ATS)에 대한 지원을 제공하며, 그 하에서 IOMMU(140)는 페이지 테이블 엔트리로부터 획득된 정보의 사본을 그 안에서의 캐시를 위해 IO 디바이스(108 내지 110)에 제공할 수 있다. 이러한 캐시의 예는 IO 디바이스(108)에서 어드레스 변환 캐시(ATC)(146)로서 도시된다. ATC(146)는 입력-출력 테이블 워커(142)에 의해(또는 다른 소스로부터) 페이지 테이블 워크 동안 획득된 페이지 테이블 엔트리 또는 그 부분의 사본을 저장하는 캐시에 대한 메모리 회로부를 포함한다. 페이지 테이블 워크를 수행하는 것을 회피하기 위해, 가능할 때, IO 디바이스(108)는 ATC(146)로부터 어드레스 변환 정보 및/또는 다른 페이지 테이블 엔트리 정보를 획득한다. 그러나, 어드레스 변환 정보 및/또는 다른 페이지 테이블 엔트리 정보가 ATC(146)에 존재하지 않으면, 입력-출력 테이블 워커(142)는 정보를 획득하기 위해 테이블 워크를 수행한다(또는 TLB(144)로부터 캐싱된 정보를 사용한다). 일부 실시예에서, ATC(146) 내의 특정 정보는 본 명세서에 설명된 바와 같이 대응하는 페이지가 이송되기 전에 무효화된다.
일부 실시예에서, 도 1에서 단일 엔티티로서 도시되지만, IOMMU(140)는 다수의 별개의 IOMMU(예를 들어, IOMMU 기능 블록의 다수의 인스턴스)를 포함한다. 예를 들어, 일부 실시예에서, 전자 디바이스(100)는 적어도 2개의 IOMMU 기능 블록을 포함하고, 각각의 IOMMU 기능 블록은 전자 디바이스(100) 내의 IO 디바이스의 세트의 서브세트에 의한 메모리 액세스를 제어한다. 이러한 실시예에서, IOMMU는 함께 또는 "마스터" IOMMU 또는 다른 기능 블록을 통해 작동하여, IOMMU가 본 명세서에 설명된 바와 같은 메모리의 페이지를 이송하는 것의 존재를 포함하여 페이지 테이블 내의 정보를 사용하고 있고 IO 디바이스에 대한 메모리에 적절히 액세스하고 있음을 보장한다. 예를 들어, IOMMU는, 주어진 IOMMU가 페이지 테이블 엔트리 내의 정보에 액세스하는 것, IO 디바이스로부터의 메모리 액세스가 진행되도록 허용하는 것 등과 같은 동작을 수행하기 전에 모든 IOMMU가 동기화되는 것을 보장하기 위해, 모든 IOMMU가 접속된 통신 링크 상에서, TLB 무효화, 메모리 액세스 완료 또는 중단 등의 요청 및 확인응답을 브로드캐스트할 수 있다.
페이지 이송 엔진(114)은 메모리(104) 내의 데이터에 액세스하는 것과 연관된 동작을 수행하는 기능 블록이다. 페이지 이송 엔진(114)은 전자 디바이스(100)의 다른 기능 블록으로부터 메모리 액세스 동작을 분담시키기 위해 사용될 수 있다. 예를 들어, 일부 실시예에서, 페이지 이송 엔진(114)은 코어(116 내지 118)를 대신하여 메모리 액세스를 분담시키고 이에 따라 수신 및 수행하며, 이는 코어(116 내지 118)가 자체적으로 메모리 액세스 동작을 수행하는 것을 회피할 수 있게 한다. 일부 실시예에서, 페이지 이송 엔진(114)은 다른 기능 블록 중에서, 메모리(104) 내에서 메모리의 페이지를 이동시키기 위한 동작을 수행하는 하나 이상의 직접 메모리 액세스(DMA) 기능 블록을 포함한다. 페이지 이송 엔진(114)에 의해 수행되는 메모리 액세스 동작 중에서 메모리(104) 내의 메모리의 페이지를 "이송"하는 것이 있다. 이송의 경우, 코어(116 내지 118) 중 하나로부터(예를 들어, 코어(116) 등에 의해 실행되는 운영 체제로부터) 또는 메모리의 페이지 및 메모리의 페이지가 저장될 메모리 내의 새로운 위치를 식별하는 PSP(128)와 같은 다른 소스로부터 요청을 수신할 때, 페이지 이송 엔진(114)은 메모리의 페이지를 새로운 위치로 이동시킨다(즉, 하나 이상의 데이터 이동 동작에서 메모리의 페이지 내의 개별 비트/바이트를 새로운 위치로 물리적으로 이동시킨다). 메모리의 페이지를 이송하는 것과 함께, 페이지 이송 엔진(114)은 본 명세서에서 설명된 바와 같이 IO 디바이스에 대해 액세스가능한 메모리의 페이지의 이송을 처리하기 위한 동작을 수행한다.
일부 실시예에서, 도 1에서 단일 엔티티로서 도시되지만, 페이지 이송 엔진(114)은 다수의 별개의 페이지 이송 엔진(예를 들어, 페이지 이송 엔진 기능 블록의 다수의 인스턴스)을 포함한다. 예를 들어, 일부 실시예에서, 페이지 이송 엔진(114)은 적어도 2개의 페이지 이송 엔진을 포함하고, 각각의 페이지 이송 엔진은, 명세서에 설명된 바와 같이 메모리의 페이지를 이송하는 것을 포함하여 전자 디바이스(100)의 다른 기능 블록을 대신하여 메모리 액세스를 수행하도록 배열된다. 이러한 실시예에서, 페이지 이송 작업/요청은 분배 방식에 따라 (예를 들어, 라운드 로빈, 메모리 어드레스 또는 메모리 내의 위치 등에 의해) 2개 이상의 페이지 이송 엔진 중에서 분배되고, 페이지 이송 엔진은 특정된 메모리 액세스 등을 회피하기 위해 액세스를 조정할 수 있다.
일부 실시예에서, 통신 경로는 기능 블록 사이의 화살표 방향 라인에 의해 도시된 바와 같이 전자 디바이스(100)의 기능 블록 사이에 결합된다. 통신 경로는 가능하게는 제어기, 패브릭 요소(예를 들어, 스위치, 라우터 등) 등과 함께 하나 이상의 버스, 와이어, 가이드 및/또는 다른 접속을 포함한다. 통신 경로는 커맨드, 데이터, 제어 신호 및/또는 기능 블록 사이의 다른 정보를 라우팅하기 위해 사용된다. 예를 들어, 일부 실시예에서, IO 허브(112), 프로세서(102)(예를 들어, MMU(134)), 및 메모리(104) 사이에 상호접속 패브릭이 결합된다. 명확성을 위해 일부 통신 경로는 도 1에 도시되지 않음에 유의한다.
도 1에 전자 디바이스(100)가 특정 수 및 배열의 기능 블록 및 디바이스를 갖는 것으로 도시되지만, 일부 실시예에서, 전자 디바이스(100)는 상이한 수 및/또는 배열의 기능 블록 및 디바이스를 포함한다. 예를 들어, 일부 실시예에서, 프로세서(102)는 상이한 수의 코어를 포함한다. 다른 예로서, 일부 실시예에서, 상이한 수 및/또는 배열의 캐시가 프로세서(102)에 존재한다. 또 다른 예로서, 일부 실시예에서, IO 디바이스(108)는 어드레스 변환 캐시를 포함하지 않거나, 또는 IO 디바이스(108 내지 110) 둘 모두가 변환 캐시를 포함한다. 일반적으로, 설명된 실시예에서, 전자 디바이스(100)는 본 명세서에 설명된 동작을 수행하기에 충분한 수 및/또는 배열의 기능 블록을 포함한다.
도 1에 도시된 바와 같은 전자 디바이스(100) 및 프로세서(102)는 예시 목적을 위해 간략화되었다. 그러나, 일부 실시예에서, 전자 디바이스(100) 및/또는 프로세서(102)는 본 명세서에 설명된 동작 및 다른 동작을 수행하기 위한 추가적인 또는 상이한 요소 및 메커니즘을 포함한다. 예를 들어, 전자 디바이스(100) 및/또는 프로세서(102)는 전력 기능 블록 또는 디바이스, 인간 인터페이스 기능 블록 또는 디바이스 등을 포함할 수 있다.
일부 실시예에서, 도 1에서 별개로 도시된 기능 블록은 함께 구현된다. 예를 들어, 일부 실시예에서, IO 허브(112) 및 IO 디바이스(108 내지 110) 중 일부 또는 전부는 프로세서(102)에/와 통합되는데, 이를테면, 동일한 집적 회로 칩 상에 제작된다. 즉, 이러한 실시예의 경우, IO 허브(112) 및 IO 디바이스(108 내지 110)는 (예를 들어, "시스템 온 칩"으로서 또는 다른 형태로서) 프로세서(102)와 통합될 수 있다. 대안적으로, 일부 실시예에서, 다른 기능 블록의 일부로서 도시된 기능 블록은 별개일 수 있다. 예를 들어, 일부 실시예에서, 플랫폼 보안 프로세서(128)는 프로세서(102)와 별개로 구현된다.
전자 디바이스(100)는 계산 동작을 수행하는 임의의 전자 디바이스일 수 있거나 그에 포함될 수 있다. 예를 들어, 전자 디바이스(100)는 데스크톱 컴퓨터, 랩톱 컴퓨터, 웨어러블 전자 디바이스, 태블릿 컴퓨터, 스마트폰, 서버, 인공 지능 장치, 가상 또는 증강 현실 장비, 네트워크 기기, 장난감, 오디오-시각적 장비, 가정 기기, 제어기, 차량 등 및/또는 이들의 조합이거나 이에 포함될 수 있다.
운영 체제
일부 실시예에서, 하나 이상의 소프트웨어 엔티티는 메모리 내에서 메모리의 IO 디바이스 액세스가능 페이지의 이송을 처리하기 위한 동작을 수행하기 위해 전자 디바이스의 기능 블록과 상호작용한다. 이러한 실시예 중 일부에서, 하나 이상의 소프트웨어 엔티티는 운영 체제이거나 이를 포함한다. 도 2는 일부 실시예에 따른 전자 디바이스의 운영 체제 및 기능 블록 및 디바이스를 예시하는 블록도를 나타낸다. 도 2는 단순화되고, 일반적으로 전자 디바이스 하드웨어와 운영 체제의 관계를 도시함에 유의한다. 일부 실시예에서, 도 2에 도시된 요소 중 일부 또는 전부는 존재하지 않고/않거나 상이하게 배열된다.
도 2에서 확인될 수 있는 바와 같이, 운영 체제(200)는 프로그램(204 내지 208)의 세트와 전자 디바이스 하드웨어(202) 사이(즉, 프로세서(102) 등과 같은 전자 디바이스(100)의 기능 블록과 디바이스 사이)에서 인터페이싱한다. 예를 들어, 운영 체제(200)는 운영 체제, 이를테면, Redmond, WA의 Microsoft로부터의 Windows®, Cupertino, CA의 Apple, Inc.로부터의 macOS® 등일 수 있고, 프로그램(204 내지 208)은 각각 생산성 애플리케이션, 과학적 컴퓨팅 애플리케이션, 웹 브라우저 등일 수 있다. IOMMU(210)는 IO 디바이스(212)와 전자 디바이스 하드웨어(202)(예를 들어, 메모리(104) 등) 사이에서 인터페이싱한다. 일부 실시예에서, 도 2의 기능 블록 및 디바이스, 즉, 전자 디바이스 하드웨어(202), IOMMU(210) 및 IO 디바이스(212)는 도 1에 도시된 바와 같이, 각각 전자 디바이스(100)의 하드웨어(예를 들어, 프로세서(102), 메모리(104), 페이지 이송 엔진(114), 등), IOMMU(140) 및 IO 디바이스(108 내지 110)와 유사하다.
가상 머신 및 하이퍼바이저
일부 실시예에서, 하나 이상의 소프트웨어 엔티티는 메모리 내에서 메모리의 IO 디바이스 액세스가능 페이지의 이송을 처리하기 위한 동작을 수행하기 위해 전자 디바이스의 기능 블록과 상호작용한다. 이러한 실시예 중 일부에서, 하나 이상의 소프트웨어 엔티티는 하이퍼바이저이거나 이를 포함한다. 일반적으로, 일부 실시예에서, 전자 디바이스 내의 프로세서는 하나 이상의 가상 머신을 실행한다. 가상 머신은 소프트웨어 프로그램을 실행하기 위한 지원을 제공하기 위해 전자 디바이스의 프로세서 및 다른 기능 블록 및 디바이스(예를 들어, 메모리, IO 디바이스 등)를 에뮬레이트하거나 또는 달리 인터페이싱하는 소프트웨어 엔티티이다. 예를 들어, 가상 머신은, 게스트 운영 체제로 지칭되는 운영 체제의 하나 이상의 인스턴스를 실행하기 위한 지원을 제공할 수 있다. 결국, 게스트 운영 체제는 애플리케이션, 데이터베이스 등과 같은 다른 소프트웨어 프로그램을 실행하기 위한 지원을 제공한다. 일부 실시예에서, 프로세서는 또한, 가상 머신의 실행을 제어/관리하기 위한 동작을 수행하는 소프트웨어 엔티티인 하이퍼바이저를 실행한다. 예를 들어, 하이퍼바이저는 가상 머신을 시작 및 초기화하고, 가상 머신에 의한 전자 디바이스의 기능 블록 및 디바이스의 액세스를 제어하는 것을 보조(예를 들어, 가상 머신이 액세스하도록 허용되는 메모리 및/또는 IO 디바이스의 영역을 지시하는 것 등)하고, 가상 머신을 종료하거나 닫는 것 등을 할 수 있다. 도 3은 일부 실시예에 따른 전자 디바이스의 하이퍼바이저 및 기능 블록 및 디바이스를 예시하는 블록도를 나타낸다. 도 3은 단순화되고, 일반적으로 전자 디바이스 하드웨어와 하이퍼바이저의 관계를 도시함에 유의한다. 일부 실시예에서, 도 3에 도시된 요소 중 일부 또는 전부는 존재하지 않고/않거나 상이하게 배열된다.
도 3에서 볼 수 있는 바와 같이, 3개의 가상 머신(VM)(300 내지 304)이 있으며, 이들 각각 상에서, 개개의 게스트 운영 체제(GUEST OS)(306 내지 310) 및 하나 이상의 프로그램(PRGRMS)(312 내지 316)을 실행한다. 하이퍼바이저(318)는 호스트 운영 체제(320)와 가상 머신(300 내지 304) 사이를 인터페이싱한다. 호스트 운영 체제(320)는 전자 디바이스 하드웨어(322)와 하이퍼바이저(318) 사이를 인터페이싱한다. IOMMU(324)는 IO 디바이스(326)와 전자 디바이스 하드웨어(322) 사이를 인터페이싱한다. 일부 실시예에서, 도 3의 기능 블록 및 디바이스, 즉, 전자 디바이스 하드웨어(322), IOMMU(324) 및 IO 디바이스(326)는 도 1에 도시된 바와 같이, 각각 전자 디바이스(100)의 하드웨어(예를 들어, 프로세서(102), 메모리(104), 페이지 이송 엔진(114), 등), IOMMU(140) 및 IO 디바이스(108 내지 110)와 유사하다.
페이지 테이블 엔트리
설명된 실시예에서, 전자 디바이스의 기능 블록 및 디바이스(예를 들어, 프로세서(102), IOMMU(140) 등)는 가상 어드레스 대 물리적 어드레스 변환을 수행하기 위해 그리고 다른 동작을 위해 하나 이상의 페이지 테이블을 사용한다. 도 4는 일부 실시예에 따른 페이지 테이블(400)을 예시하는 블록도를 나타낸다. 도 4에서 볼 수 있는 바와 같이, 페이지 테이블(400)은 다수의 페이지 테이블 엔트리(402)(이들 중 하나는 파선을 사용하여 강조 표시됨)를 포함하고, 이들 각각은 대응하는 메타데이터(406)와 함께 가상 어드레스(VA) 대 물리적 어드레스(PA) 변환(404)을 저장할 수 있다. 일부 실시예에서, 도 1의 페이지 테이블(148)은 페이지 테이블(400)과 유사하게 내부적으로 배열된다.
일반적으로, 메모리의 페이지(즉, 4 KiB, 2 MiB 등과 같은 특정 크기의 메모리의 블록, 섹션 또는 부분)가 대용량 저장소(106)로부터 검색되어 메모리(104)에 저장되거나 또는 메모리(104)에 새롭게 생성됨에 따라, 대응하는 페이지 테이블 엔트리(402)는 가상 어드레스 대 물리적 어드레스 변환(404) 및 메타데이터(406)와 함께 페이지 테이블(400)에 추가된다. 따라서, 메모리의 페이지가 메모리(104)에서 이용가능하다면, 페이지 테이블(400)은 대응하는 페이지 테이블 엔트리(402)를 포함해야 한다. 페이지 테이블 엔트리(402)는 전술된 바와 같이 메모리 내의 페이지의 물리적 어드레스와 메모리의 페이지에 액세스하기 위한 소프트웨어 엔티티(예를 들어, 프로그램, 펌웨어, 운영 체제 등) 및 디바이스에 의해 사용되는 가상 어드레스 사이의 관계를 추적하는 것을 가능하게 하기 위해 페이지 테이블(400)에 추가된다.
일부 실시예에서, 페이지 테이블(400)의 각각의 페이지 테이블 엔트리(402)의 가상 어드레스 대 물리적 어드레스 변환(404)은 하나 이상의 가상 어드레스와 연관된 메모리 내의 대응하는 페이지의 물리적 어드레스를 결정하기 위해 사용될 수 있는 정보를 포함한다. 즉, 각각의 가상 어드레스 대 물리적 어드레스 변환(404)은 개개의 가상 어드레스를 사용하여 소프트웨어 엔티티 및/또는 디바이스에 의해 어드레스되는 메모리의 페이지에 대한 메모리(104) 내의 위치를 식별하는 데 사용될 수 있는 정보를 포함한다. 예를 들어, 일부 실시예에서, 각각의 가상 어드레스 대 물리적 어드레스 변환(404)은 하나 이상의 가상 어드레스 중 일부 또는 전부를 갖는 제1 필드(예를 들어, 각각의 가상 어드레스의 M개의 비트 중 N, 여기서 N<=M) 및 하나 이상의 가상 어드레스가 맵핑/매칭되는 물리적 어드레스의 일부 또는 전부를 갖는 제2 필드를 포함한다.
메타데이터(406)는 대응하는 가상 어드레스 대 물리적 어드레스 변환(404)과 연관되고, 이를 특성화하고, 제어하고 그리고/또는 달리 관련되는 정보를 포함한다. 메모리의 페이지에 대한 변환 정보가 페이지 테이블(400)의 페이지 테이블 엔트리(402)에 추가됨에 따라, 메타데이터가 획득, 생성 등이 되고 그 페이지 테이블 엔트리(402)에 추가된다. 도 5는 일부 실시예에 따른 페이지 테이블 엔트리 내의 메타데이터(406)를 예시하는 블록도를 나타낸다. 도 5에서 볼 수 있는 바와 같이, 메타데이터(406)는 유효성(500), 허가(502), 제어(504) 및 이송 상태 정보(MIG STATE INF)(506)를 포함한다. 유효성(500)은 페이지 테이블 페이지 테이블 엔트리(402), 그 페이지 테이블 페이지 테이블 엔트리(402)에서의 가상 어드레스 대 물리적 어드레스 변환(404) 및/또는 메모리(104) 내의 대응하는 메모리의 페이지의 유효성과 관련된 하나 이상의 값을 포함한다. 예를 들어, 유효성(500)은 페이지 테이블 엔트리(402)가 자체적으로 유효한지/액세스가능한지 여부 및/또는 메모리(104) 내의 대응하는 페이지가 유효한지/액세스가능한지 여부를 나타내는 하나 이상의 비트를 포함할 수 있다.
허가(502)는 메모리(104) 내의 대응하는 페이지에 대한 액세스 허가와 관련된 하나 이상의 값을 포함한다. 예를 들어, 허가(502)는 메모리(104) 내의 대응하는 페이지가 판독-전용 또는 판독-기록 허가 세트를 갖는지 여부, 페이지가 특정 특권(관리자, 사용자, 커널 등)으로만 액세스가능한지 여부 및/또는 다른 허가 정보를 나타내는 하나 이상의 비트를 포함할 수 있다.
제어(504)는 메모리(104) 내의 페이지 테이블 엔트리(402) 및/또는 대응하는 페이지의 사용과 관련된 하나 이상의 값을 포함한다. 예를 들어, 제어(504)는 페이지 크기 표시자, 더티(dirty) 표시자(메모리(104)의 대응하는 페이지가 수정되어 대용량 저장소(106)의 연관된 메모리의 블록과 일치하지 않을 때), 액세스된 표시자(메모리(104) 내의 페이지가 한 번 이상 액세스되었을 때), 라이트-스루(write-through) 표시자(메모리(104) 내의 페이지에 대한 수정이 대용량 저장소(106) 상의 연관된 메모리의 블록에 즉시 반영될 때), 및/또는 다른 값을 포함할 수 있다.
이송 상태 정보(506)는 연관된 페이지를 이송하기 위한 준비가 이루어지고 있는지 또는 연관된 페이지가 이송되고 있는지 여부를 나타내는 하나 이상의 값을 포함한다. 예를 들어, 일부 실시예에서, 이송 상태 정보는 대응하는 메모리의 페이지에 대한 각각의 가능한 이송 상태를 고유하게 식별하기에 충분한 비트의 수를 포함한다. 예를 들어, 6개의 이송 상태가 존재하고, 제1 이송 상태는 이송되고 있지 않은 페이지에 대한 것이고, 제6 이송 상태는 활성으로 이송되고 있는 페이지에 대한 것이고, 4개의 중간 이송 상태는 메모리의 페이지를 이송하도록 준비하기 위한 다양한 준비 동작에 대한 것인 경우, 이송 상태 정보는 3비트로 저장될 수 있다. 페이지 테이블 엔트리에 액세스하는 기능 블록 또는 디바이스는 이송 상태 정보(506)를 사용하여 메모리의 페이지에 대해 어떤 동작이 허용되는지(또는 허용되지 않는지) 및/또는 대응하는 페이지 테이블 페이지 테이블 엔트리(402) 내의 정보를 결정할 수 있다. 예를 들어, 일부 실시예에서, 메모리의 페이지를 이송하기 위한 준비가 이루어지고 있거나 메모리의 페이지가 이송되고 있음을 이송 상태가 나타낼 때, 액세스하는 기능 블록 또는 디바이스는 페이지 테이블 엔트리로부터의 정보의 사본이 로컬 캐시에 캐싱되도록 허용되지 않고/않거나 메모리의 페이지에 대한 메모리 액세스 중 일부 또는 전부가 제한된다고 결정할 수 있다.
일부 실시예에서, 가상 어드레스 대 물리적 어드레스 변환(404) 및 메타데이터(406) 중 하나 또는 둘 모두는 페이지 테이블(400)에 추가된 후에 수정/변경, 업데이트 등이 될 수 있다. 예를 들어, 페이지가 메모리(104) 내의 제1 위치로부터 제2 위치로 이동될 때, 대응하는 페이지 테이블 엔트리(402) 내의 가상 어드레스 대 물리적 어드레스 변환(404)이 업데이트될 수 있다. 다른 예로서, 메타데이터(406)가 허가(502)(예를 들어, 판독/기록 허가)를 포함하는 실시예에서, 허가(502)는 메모리(104) 내의 대응하는 페이지에 대한 판독 전용, 판독-기록 등의 허가를 나타내도록 업데이트될 수 있다. 또 다른 예로서, 이송 상태 정보(506)는 기능 블록 및 디바이스가 메모리의 페이지를 이송하기 위한 이송 상태를 통해 진행할 때 업데이트될 수 있다.
앞서 설명된 바와 같이, 특정된 가상 어드레스에 대한 물리적 어드레스 정보 또는 메타데이터를 획득하려고 시도할 때, MMU(134), IOMMU(140) 또는 전자 디바이스(100)의 다른 엔티티는 페이지 테이블 워크를 수행할 수 있다. 페이지 테이블 워크 동안, MMU(134), IOMMU(140) 등은, 그러한 페이지 테이블 엔트리(402)가 존재한다면, 페이지 테이블 엔트리(402)를 찾기 위해 페이지 테이블(400)을 검색하며, 여기서 대응하는 가상 어드레스 대 물리적 어드레스 변환(404)이 유지된다. 이러한 페이지 테이블 엔트리(402)에 직면하면, MMU(134), IOMMU(140) 등은 페이지 테이블 엔트리(402)로부터, (즉, 페이지 테이블 엔트리(402)에서의 가상 어드레스 대 물리적 어드레스 변환(404)으로부터) 특정된 가상 어드레스에 대한 물리적 어드레스 또는 메타데이터를 획득한다. MMU(134), IOMMU(140) 등이 대응하는 페이지 테이블 엔트리(402)를 발견할 수 없다면, 에러-처리 동작이 수행된다(예를 들어, 페이지 결함이 방출되고 후속하여 프로세싱되는 것 등). 설명된 실시예에서, 전자 디바이스 내의 기능 블록 및 디바이스(예를 들어, IOMMU, 페이지 이송 엔진 등)는 IO 디바이스가 대응하는 메모리의 페이지의 이송으로 인해 누락된 또는 이용불가능한 페이지 테이블 엔트리 또는 대응하는 메모리의 페이지에 대한 문제에 직면하는 것을 방지하기 위한 동작을 수행한다. 예를 들어, 일부 실시예에서, 메모리 액세스 요청에 대한 가상 어드레스 대 물리적 어드레스 변환을 결정할 때, 입력-출력 테이블 워커(142)는, 가상 어드레스 대 물리적 어드레스의 변환(404)이 IOMMU(140) 및/또는 IO 디바이스(108 내지 110)에 의해 캐싱되는 것이 허용되는지 여부 및/또는 메모리 액세스가 현재 이송 상태로 인해 중단되어야 하는지를 결정하기 위해 개개의 페이지 테이블 엔트리(402) 내의 이송 상태 정보(506)를 체크한다.
특정 수의 페이지 테이블 엔트리(402)를 갖는 페이지 테이블(400)이 도시되지만, 일부 실시예는 상이한 수의 페이지 테이블 엔트리(402)(도 4에서 생략 부호로 도시됨)를 포함한다. 또한, 페이지 테이블 엔트리(402) 및 메타데이터(406)가 특정 배열 및 유형의 정보와 함께 도시되지만, 일부 실시예에서, 페이지 테이블 엔트리(402) 및 메타데이터(406) 중 하나 또는 둘 모두는 상이한 정보를 포함한다. 예를 들어, 일부 실시예에서, 전술된 메타데이터의 적어도 일부는 페이지 테이블 엔트리(402) 이외의 위치에 저장된다. 예를 들어, 일부 실시예에서, 이송 상태 정보를 저장하기 위해 별개의 인-메모리 데이터 구조가 사용된다. 일반적으로, 페이지 테이블(400)은 전자 디바이스의 기능 블록 및 디바이스가 본 명세서에 설명된 바와 같이 가상 어드레스 대 물리적 어드레스 변환 정보 및 메타데이터를 저장 및 검색하는 것을 가능하게 하기에 충분한 정보를 포함한다.
페이지 테이블(400)이 단일 페이지 테이블로서 도시되지만, 일부 실시예에서, 페이지 테이블(400)은 상이하게 조직화된다. 예를 들어, 일부 실시예에서, 페이지 테이블(400)은 계층구조로 배열된 2개 이상의 서브-테이블을 사용하여 구현된다. 이들 실시예에서, 각각의 서브-테이블의 검색은, 가상 어드레스 대 물리적 어드레스 변환(404) 및 메타데이터(406)가 대응하는 페이지 테이블 엔트리(402)에 저장되는 최종 서브-테이블에 도달될 때까지, 검색하는 기능 블록 또는 디바이스를 계층구조의 다음 서브-테이블로 지향시킨다.
이송 상태
일부 실시예에서, 메모리의 페이지를 이송하기 위한 준비가 이루어지고, 이어서 메모리의 페이지가 이송될 때, 전자 디바이스의 기능 블록, 디바이스 및/또는 소프트웨어 엔티티(예를 들어, IOMMU(140), 페이지 이송 엔진(114), 프로세서(102), 운영 체제(200) 및/또는 하이퍼바이저(318))는 이송 상태의 세트 중에서의 이송 상태를 통해 진행한다. 초기 비-이송 이송 상태 외에도, 이송 상태 각각에서, 메모리의 페이지를 이송하도록 준비하기 위한 그리고/또는 메모리의 페이지를 이송하기 위한 개개의 동작이 수행된다. 이송될 또는 이송되고 있는 메모리의 페이지의 및/또는 개개의 페이지 테이블 엔트리 내의 정보의 액세스에 대한 요청은 메모리의 페이지의 현재 이송 상태에 기초하여 전자 디바이스 내의 기능 블록 및 디바이스(예를 들어, IOMMU(140), 페이지 이송 엔진(114) 등)에 의해 처리된다. 일반적으로, 각각의 이송 상태의 동작이 수행되는 동안 기능 블록 및 디바이스가 계속해서 정확하게 동작하는 방식으로 요청이 처리된다. 예를 들어, IO 디바이스(예를 들어, IO 디바이스(108 내지 110)) 및/또는 프로세서(예를 들어, 프로세서(102))는 이송하는 메모리의 페이지 및/또는 개개의 페이지 테이블 엔트리의 액세스로부터 발생할 수 있는 에러 및 결함으로부터 보호된다.
도 6은 일부 실시예에 따른 이송 상태를 예시하는 상태도를 나타낸다. 일반적으로, 도 6에 도시된 이송 상태는, 전자 디바이스(예를 들어, 전자 디바이스(100))의 기능 블록, 디바이스 및/또는 소프트웨어 엔티티가 메모리의 페이지를 이송하기 위한 준비가 이루어지고 이어서 메모리의 페이지가 이송되는 것으로 진행될 수 있게 하는 이송 상태의 예이다. 특정 수 및 배열의 이송 상태 및 이송 상태 사이의 전환이 도 6에 도시되지만, 일부 실시예에서, 상이한 수 및/또는 배열의 이송 상태가 사용될 수 있고/있거나 이송 상태 사이의 상이한 전환이 사용될 수 있다.
도 6에서, 이송 상태 사이의 전환은 이송 상태 사이의 화살표 방향 라인을 사용하여 도시된다. 이송 상태 사이의 제1 세트의 전환은 더 두꺼운 라인을 사용하여 도시되는 한편, 이송 상태 사이의 다른 전환은 더 얇은 라인을 사용하여 도시된다. 다음의 설명에서, 이송 상태 사이의 제1 세트의 전환이 설명되고, 이어서, 이송 상태 사이의 다른 전환이 설명된다. 그러나, 상이한 라인 두께의 사용은 단지, 이송 상태 및 이송 상태 사이의 전환을 설명할 때 명확성을 위한 것임에 유의한다.
도 6에서 볼 수 있는 바와 같이, 이송 상태는 이송 상태(MS)(600 내지 606)를 포함한다. "비-이송" 이송 상태인 이송 상태(600)에서, 메모리의 페이지는 이송되고 있지 않으며, 따라서 메모리 내의 현재 위치에 유지될 것이다. 따라서 이송 상태(600)는 메모리의 페이지가 이송될 때까지 메모리의 페이지가 유지되는 이송 상태이다(그리고 더 일반적으로, 메모리의 페이지는 메모리의 페이지가 이송될 때까지 유지됨). 이송 상태(600)에서, 메모리의 페이지에 대한 페이지 테이블 엔트리의 이송 상태 정보(예를 들어, 이송 상태 정보(506))는 메모리의 페이지를 이송 상태(600)에 있는 것으로 표현하거나 식별하는 비트 시퀀스, 값 등으로 설정된다. 예를 들어, 이송 상태 정보가 2개의 비트를 포함한다고 가정하면, 이송 상태 정보(MS)는 이송 상태(600)를 표현하거나 식별하기 위해 00으로 설정될 수 있다.
이송 상태(600)에서, 페이지 테이블 엔트리의 이송 상태 정보가 메모리의 페이지를 이송 상태(600)에 있는 것으로 식별하기 때문에, IOMMU는 IO 디바이스로부터의 메모리의 페이지 및 페이지 테이블 엔트리의 개개의 정보의 액세스가 정상적으로 진행하도록 허용한다. 즉, 메모리의 페이지를 이송하기 위한 준비가 이루어지지 않고 있고 메모리의 페이지가 이송되고 있지 않기 때문에, 메모리의 페이지 및 페이지 테이블 엔트리 내의 정보의 액세스는 IOMMU에 의해 방지되거나, 중단되거나 또는 달리 제한되지 않는다. 즉, 이송 상태(600)에서, IOMMU는 페이지 테이블 엔트리로부터의 정보를 정상적으로 사용하고 메모리의 페이지의 메모리 액세스를 정상적으로 수행한다.
그러나, 일부 실시예에서, 메모리의 페이지 및 개개의 페이지 테이블 엔트리의 액세스가 이송 상태(600)에서 메모리의 페이지의 이송으로 인해 제한되지 않지만, 메모리의 페이지 및 페이지 테이블 엔트리 내의 정보의 액세스와 관련된 다른 제한은 여전히 강제될 수 있다. 예를 들어, 메모리의 페이지가 IO 디바이스에 대해 통상적으로 액세스가능하지 않은 메모리의 개인 페이지인 것으로 인해 메모리의 페이지가 IO 디바이스에 대해 액세스가능하지 않은 경우, 이송 상태(600)에 있는 것은 이러한 액세스 제한을 변경하지 않는다.
소프트웨어 엔티티(예를 들어, 하이퍼바이저, 운영 체제 등)로부터 또는 플랫폼 보안 프로세서(예를 들어, PSP(128))로부터 포워딩된 메모리의 페이지를 이송하라는 요청에 직면할 때, 기능 블록, 디바이스 및 소프트웨어 엔티티는 (이송 상태(600 및 602) 사이의 두꺼운 화살표 방향 라인을 통해 도시된 바와 같이) 이송 상태(602)로 진행한다. 이송 상태(602)에 진입할 때, 소프트웨어 엔티티는 메모리의 페이지에 대한 페이지 테이블 엔트리의 이송 상태 정보를, 이송 상태(602)를 표현하거나 식별하는 비트 시퀀스, 값 등으로 설정한다. 예를 들어, 이송 상태 정보가 2개의 비트를 포함한다고 가정하면, 이송 상태 정보는 이송 상태(602)를 표현하거나 식별하기 위해 01로 설정될 수 있다.
이송 상태(602)에서, 메모리 내의 메모리의 페이지를 이송하기 위한 초기 준비가 이루어진다. 준비는, IOMMU가, IOMMU 및/또는 IO 디바이스 내의 로컬 캐시(예를 들어, TLB(144), ATC(146) 등)에서 메모리의 페이지에 대한 페이지 테이블 엔트리로부터 정보의 새로운 사본의 캐싱(즉, 저장)을 방지하는 것을 포함한다. 일반적으로, 메모리의 페이지의 후속 이송은 메모리의 페이지가 메모리의 새로운 물리적 어드레스에 위치되는 것으로 인해 페이지 테이블 엔트리로부터의 정보의 사본을 부정확하게 렌더링할 것이기 때문에, 페이지 테이블 엔트리로부터의 정보의 사본은 메모리의 페이지가 이송되고 페이지 테이블 엔트리가 업데이트될 때까지 IOMMU 또는 IO 디바이스의 로컬 캐시에 저장되는 것이 방지된다. 따라서, 이송 상태(602)에서, 페이지 테이블 엔트리 내의 이송 상태 정보가 메모리의 페이지를 이송 상태(602)에 있는 것으로 식별하기 때문에, IOMMU는 IOMMU 자체 내의 로컬 캐시에서 이러한 사본을 캐싱하기 위해 그리고/또는 IO 디바이스 내의 로컬 캐시에의 저장을 위해 IO 디바이스에 이러한 사본을 제공하기 위해 페이지 테이블 엔트리로부터 정보의 사본을 획득하지 않을 것이다.
일부 실시예에서, 페이지 테이블 엔트리로부터의 정보의 사본을 IO 디바이스에 제공하지 않을 때, IOMMU는 페이지 테이블 엔트리로부터의 정보의 사본에 대한 IO 디바이스로부터의 ATS 요청을 거부한다. 예를 들어, 일부 실시예에서, IOMMU는 메모리의 페이지가 존재하지 않음을 요청 IO 디바이스에 통지함으로써 ATS 요청에 응답할 수 있으며, 이는 IO 디바이스로 하여금 페이지를 존재하게 하기 위한 동작을 진행하게 한다. 다른 예로서, IOMMU는 메모리의 페이지에 액세스하기 위해 변환되지 않은 어드레스가 사용되어야 하고 그에 따라 페이지 테이블 엔트리로부터의 정보를 요청 IO 디바이스에 제공하지 않음을 요청 IO 디바이스에게 통지할 수 있다.
이송 상태(602)에서, 소프트웨어 엔티티는 또한 IOMMU로 하여금, IO 디바이스의 로컬 캐시, 예를 들어, 어드레스 변환 캐시(ATC) 내의 페이지 테이블 엔트리로부터의 정보의 임의의 기존 사본을 무효화하게 한다. 이들 엔트리를 무효화함으로써, IO 디바이스의 로컬 캐시에서 페이지 테이블 엔트리로부터의 정보의 사본의 후속적인 무효화 및/또는 수정이 회피된다. 그러나, 이송 상태(602) 및 후속 이송 상태에서 메모리 액세스를 수행하기 위해 여전히 필요할 수 있는 IOMMU 내의 로컬 캐시의 페이지 테이블 엔트리로부터의 정보의 사본이 이송 상태(602)로 유지되고, 결국 후속 이송 상태(즉, 이송 상태(604))에서 무효화됨에 유의한다.
이송 상태(602)에서, 그리고 후속 이송 상태(즉, 이송 상태(604 및 606))와 대조적으로, IOMMU는 IO 디바이스로부터 메모리의 페이지로의 메모리 액세스가 제한 없이 진행되는 것을 허용한다. 다시 말해서, IO 디바이스로부터의 기존의/미해결 메모리 액세스 및 새롭게 직면되는 메모리 액세스 둘 모두가 진행되도록 허용된다. 메모리 액세스가 진행되도록 허용하는 것은, IO 디바이스의 동작을 불필요하게 지연시키지 않으면서 (메모리의 페이지가 미해결 메모리 액세스로 이송되지 않아야 하기 때문에) 메모리의 페이지의 이송을 위한 준비로 메모리의 페이지의 메모리 액세스를 클리어 업/완료한다.
이송 상태(602)로부터, 기능 블록, 디바이스 및 소프트웨어 엔티티는 (이송 상태(602 및 604) 사이의 두꺼운 화살표 방향 라인을 통해 도시된 바와 같이) 이송 상태(604)로 진행한다. 예를 들어, 이송 상태(602)의 동작을 수행한 후, 소프트웨어 엔티티는 엔트리가 이송 상태(604)가 되게 하기 위해 페이지 이송 엔진이 메모리의 페이지를 이송하도록 요청할 수 있다. 이송 상태(604)에 진입할 때, 페이지 이송 엔진은 메모리의 페이지에 대한 페이지 테이블 엔트리의 이송 상태 정보를, 이송 상태(604)를 표현하거나 식별하는 비트 시퀀스, 값 등으로 설정한다. 예를 들어, 이송 상태 정보가 2개의 비트를 포함한다고 가정하면, 이송 상태 정보는 이송 상태(604)를 표현하거나 식별하기 위해 10으로 설정될 수 있다.
이송 상태(604)에서, 메모리 내의 메모리의 페이지를 이송하기 위한 준비가 계속 이루어진다. 준비는 IOMMU가 IO 디바이스로부터 메모리의 페이지로 새롭게 직면된 제1 유형의 메모리 액세스를 중단시키는 것을 포함한다. 예를 들어, 일부 실시예에서, 제1 유형의 메모리 액세스는, 응답을 초래하지 않는 기록, 무효화 등과 같은 제2 유형의 메모리 액세스와는 반대로, 메모리로부터 요청 IO 디바이스로의 응답(예를 들어, 리턴된 데이터 등)을 초래하는 판독, 비교 및 스와핑 등과 같은 메모리 액세스를 포함한다. 따라서, 이송 상태(604)에서, 페이지 테이블 엔트리 내의 이송 상태 정보가 메모리의 페이지를 이송 상태(604)에 있는 것으로 식별하기 때문에, IOMMU는 메모리의 페이지의 이송이 완료될 때까지(예를 들어, 이송 상태(600)로의 리턴까지) 제1 유형의 새롭게 직면된 메모리 액세스를 중단시킨다. 예를 들어, IOMMU는 (예를 들어, IO 디바이스로부터의 메모리 액세스 요청에 대한 정보를 저장함으로써) 버퍼, 메모리 요소 등에 제1 유형의 새롭게 직면된 메모리 액세스를 홀딩하고, 후속적으로, 메모리의 페이지의 이송이 완료된 후, 홀딩된 메모리 액세스를 버퍼, 메모리 요소 등으로부터 해제할 수 있다. 그러나, 이송 상태(604)로의 진입 전에 진행 중이던 제1 유형의 기존의/미해결 메모리 액세스는 완료되도록 허용되며, 기존의/미해결 둘 모두 및 새롭게 직면된 제2 유형의 메모리 액세스는 진행되도록 허용됨에 유의한다. 일부 실시예에서, 제1 유형의 새롭게 직면된 메모리 액세스는, 제1 유형과 제2 유형의 메모리 액세스 사이에서 발생할 수 있는 충돌, 데드로크 조건, 및/또는 다른 문제를 회피하기 위해 제2 유형의 새롭게 직면된 메모리 액세스와 별개로 중단된다(이는 후술되는 바와 같이, 이송 상태(606)에서 중단됨).
이송 상태(604)에서, 페이지 이송 엔진은 IOMMU 내의 로컬 캐시 내의 페이지 테이블 엔트리로부터의 정보의 임의의 기존의 사본을 무효화한다(IO 디바이스 내의 로컬 캐시 내의 페이지 테이블 엔트리로부터의 정보의 기존 사본이 이송 상태(602)에서 이전에 무효화되었음을 상기한다). 예를 들어, 페이지 이송 엔진은 IOMMU로 하여금 로컬 캐시 내의 페이지 테이블 엔트리로부터의 정보의 임의의 기존 사본을 무효화하게 하는 무효화 요청을 IOMMU에 발행할 수 있다. 이송 상태(604)에서, IOMMU는 또한 이송 상태(602)에 대해 전술된 바와 같이 IOMMU 및/또는 IO 디바이스가 메모리의 페이지에 대한 페이지 테이블 엔트리로부터의 정보의 사본을 로컬 캐시에 저장하는 것을 계속 방지한다.
이송 상태(604)로부터, 기능 블록, 디바이스 및 소프트웨어 엔티티는 (이송 상태(604 및 606) 사이의 두꺼운 화살표 방향 라인을 통해 도시된 바와 같이) 이송 상태(606)로 진행한다. 예를 들어, 페이지 이송 엔진은 이송 상태(604)에서 IOMMU 내의 로컬 캐시에서 페이지 테이블 엔트리로부터의 정보의 임의의 기존 사본의 무효화를 완료한 후에 이송 상태(606)에 진입할 수 있다. 이송 상태(606)에 진입할 때, 페이지 이송 엔진은 메모리의 페이지에 대한 페이지 테이블 엔트리의 이송 상태 정보를, 이송 상태(606)를 표현하거나 식별하는 비트 시퀀스, 값 등으로 설정한다. 예를 들어, 이송 상태 정보가 2개의 비트를 포함한다고 가정하면, 이송 상태 정보는 이송 상태(606)를 표현하거나 식별하기 위해 11로 설정될 수 있다.
이송 상태(606)에서, 메모리 내의 메모리의 페이지를 이송하기 위한 준비가 완료되고, 이어서 메모리의 페이지가 이송된다. 동작은 IOMMU가 IO 디바이스로부터 메모리의 페이지로 모든 새롭게 직면된 메모리 액세스를 중단시키는 것을 포함한다. 따라서, 이송 상태(606)에서, 페이지 테이블 엔트리 내의 이송 상태 정보가 메모리의 페이지를 이송 상태(606)에 있는 것으로 식별하기 때문에, IOMMU는 메모리의 페이지의 이송이 완료될 때까지(예를 들어, 이송 상태(600)로의 리턴까지) 제1 유형 및 제2 유형 둘 모두의 새롭게 직면된 메모리 액세스를 중단시킨다. 예를 들어, IOMMU는 (예를 들어, IO 디바이스로부터의 메모리 액세스 요청에 대한 정보를 저장함으로써) 버퍼, 메모리 요소 등에 제1 유형 및 제2 유형 둘 모두의 새롭게 직면된 메모리 액세스를 홀딩하고, 후속적으로, 메모리의 페이지의 이송이 완료된 후, 홀딩된 메모리 액세스를 버퍼, 메모리 요소 등으로부터 해제할 수 있다. 이송 상태(606)에서, IOMMU는 또한 이송 상태(602)에 대해 전술된 바와 같이 IOMMU 및/또는 IO 디바이스가 메모리의 페이지에 대한 페이지 테이블 엔트리로부터의 정보의 사본을 로컬 캐시에 저장하는 것을 계속 방지한다.
이송 상태(606)에서, IO 디바이스로부터의 모든 새롭게 직면되는 메모리 액세스가 중단되지만, 기존의/미해결 메모리 액세스는 완료된다. 다시 말해서, 이송 상태(606)로의 진입 전에 진행 중이던 모든 나머지 메모리 액세스가 완료된다. 모든 기존의/미해결 메모리 액세스는, 이송 동안 메모리의 페이지의 어떠한 메모리 액세스도 메모리의 페이지에 액세스하지 않도록 완료된다(이는, 오래된/부정확한 데이터가 액세스될 수 있기 때문이다).
기존의/미해결 메모리 액세스가 완료되고, 따라서 메모리의 페이지를 이송하기 위한 준비에서 메모리의 페이지에 대한 모든 나머지 액세스가 중단된 후에, 메모리의 페이지를 이송하기 위한 준비가 완료된다. 따라서, 페이지 이송 엔진은 메모리 내의 메모리의 페이지를 이송한다. 예를 들어, 페이지 이송 엔진은 메모리의 제1 위치/물리적 어드레스로부터 메모리 내의 제2 위치/물리적 어드레스(예를 들어, 메모리의 페이지를 이송하기 위한 요청에서 특정된 위치)로 메모리의 페이지를 이동시킬 수 있다. 일부 실시예에서, 메모리에서의 이동은 제1 유형의 메모리(예를 들어, 더 느린 액세스 유형의 메모리)로부터 제2 유형의 메모리(예를 들어, 더 빠른 액세스 유형의 메모리)로 또는 그 반대로 이루어진다. 이송 상태(606)가 단일 이송 상태로서 도시되지만, 다른 예에서, 이송 상태는, 제2 유형의 기존의/미해결 메모리 액세스가 완료되는 이송 상태(606A), 및 메모리에서 메모리의 페이지가 이송/이동되고 메모리의 페이지를 이송 상태(600)로 리턴하기 위한 준비에서 (아래에서 설명되는 바와 같은) 클린업 동작이 수행되는 606B로 분할될 수 있다.
메모리의 페이지를 이송한 후에, 페이지 이송 엔진은 메모리의 페이지가 저장된 물리적 어드레스(즉, 메모리 내의 제2 위치의 물리적 어드레스)를 식별하기 위해 페이지 테이블 엔트리를 업데이트한다(또는 다른 기능 블록 또는 소프트웨어 엔티티가 업데이트되게 한다). 페이지 테이블 엔트리를 업데이트함으로써, 페이지 이송 엔진은 메모리의 페이지에 대한 가상 어드레스 대 물리적 어드레스 변환 정보를 업데이트하여, 전자 디바이스 내의 소프트웨어 엔티티 및 디바이스에 의해 사용되는 가상 어드레스는 메모리의 페이지가 저장된 물리적 어드레스로 정확하게 맵핑될 수 있다. 페이지 이송 엔진은 또한 메모리 내의 제2 위치에 기초하여 (필요한 경우) 페이지 테이블 엔트리에 임의의 연관된 메타데이터를 설정한다.
메모리의 페이지가 성공적으로 이송되었기 때문에, 기능 블록, 디바이스 및 소프트웨어 엔티티는 (이송 상태(606 및 600) 사이의 두꺼운 화살표 방향 라인을 통해 도시된 바와 같이) 이송 상태(600)로 리턴한다. 이송 상태(600)로 리턴하는 것의 일부로서, 페이지 이송 엔진은 메모리의 페이지에 대한 페이지 테이블 엔트리의 이송 상태 정보를, 이송 상태(600)를 표현하거나 식별하는 비트 시퀀스, 값 등으로 설정한다. 예를 들어, 이송 상태 정보가 2개의 비트를 포함한다고 가정하면, 이송 상태 정보는 이송 상태(600)를 표현하거나 식별하기 위해 00으로 설정될 수 있다. 전술된 바와 같이, 이송 상태(600)는 "비-이송" 이송 상태이다. 페이지 테이블 엔트리의 이송 상태 정보가 메모리의 페이지를 이송 상태(600)에 있는 것으로 식별하기 때문에, IOMMU는 IO 디바이스로부터의 메모리의 페이지 및 페이지 테이블 엔트리의 개개의 정보의 액세스가 정상적으로 진행하도록 허용한다. 즉, 메모리의 페이지를 이송하기 위한 준비가 이루어지지 않고 있고 메모리의 페이지가 이송되고 있지 않기 때문에, 메모리의 페이지 및 페이지 테이블 엔트리 내의 정보의 액세스는 IOMMU에 의해 방지되거나, 중단되거나 또는 달리 제한되지 않는다.
이송 상태(600)로 리턴할 시에, IOMMU는 이송 상태(604 및 606) 동안 이전에 중단되었던 메모리의 페이지에 대한 제1 유형 및 제2 유형의 중단된 메모리 액세스를 해제한다. 예를 들어, 일부 실시예에서, IOMMU는 중단된 메모리 액세스가 IOMMU에 의해 유지되는 동안 페이지 테이블 엔트리를 폴링/주기적으로 판독한다. 페이지 테이블 엔트리가 메모리의 페이지를 이송 상태(600)에 있는 것으로 식별한다는 것을 IOMMU가 발견할 때, IOMMU는, 중단된 메모리 액세스가 저장된 버퍼 또는 메모리 요소로부터 선입 선출 순서로 중단된 메모리 액세스를 획득하기 시작하고 메모리 액세스 각각을 수행한다.
일부 실시예에서, IOMMU는 메모리의 페이지의 다른 새롭게 직면된 메모리 액세스 전에 중단된 메모리 액세스 각각을 수행한다(그 자체가 홀딩되고 그리고 후속적으로, 이들이 수신된 순서 또는 다른 순서로 해제될 수 있음). 또한, IOMMU는 페이지 테이블 엔트리로부터의 정보를 로컬 캐시에 캐싱하는 것을 재개한다. 다시 말해서, IOMMU는 자체적으로 페이지 테이블 엔트리로부터의 정보의 사본을 캐싱할 수 있고, 페이지 테이블 엔트리로부터의 정보의 사본을 요청 IO 디바이스에 제공할 수 있다. 페이지 이송 엔진은 또한, 메모리의 페이지가 성공적으로 이송되었음을 나타내는 응답을 요청 소프트웨어 엔티티에 리턴한다. 이것은 메모리의 페이지의 이송을 완료한다.
도 6의 예의 경우, 이송 시도가 성공적이며, 따라서 페이지를 이송할 준비를 한 다음 페이지를 이송하기 위한 모든 동작이 성공적이라고 가정된다. 그러나, 동작 중 하나가 실패하거나 또는 바람직하지 않은 또는 예상치 못한 조건 또는 에러에 직면하면, 페이지의 이송이 종료될 수 있다. 이송이 종료될 때, 기능 블록, 디바이스 및 소프트웨어 엔티티는 현재 이송 상태(이송 상태(602 내지 606) 중 임의의 이송 상태일 수 있음)로부터 이송 상태(600)로 리턴한다. 이는 이송 상태(602 내지 604)와 이송 상태(600) 사이의 대응하는 얇은 화살표 방향 라인 및 이송 상태(606)와 이송 상태(600) 사이의 두꺼운 화살표 방향 라인을 통해 도시된다. 메모리의 페이지의 이송을 종료할 시에, 소프트웨어 엔티티, 페이지 이송 엔진 또는 다른 기능 블록 또는 디바이스는 메모리의 페이지에 대한 페이지 테이블 엔트리의 이송 상태 정보를, 이송 상태(600)를 표현하거나 식별하는 비트 시퀀스, 값 등으로 복원한다. 예를 들어, 이송 상태 정보가 2개의 비트를 포함한다고 가정하면, 이송 상태 정보는 이송 상태(600)를 표현하거나 식별하기 위해 00으로 설정될 수 있다. 메모리의 페이지를 이송시키는 데 실패함에 따라 이송 상태(600)로 리턴할 때, IOMMU는 메모리 페이지의 임의의 중단된 메모리 액세스를 해제하고, IOMMU 및 IO 디바이스 내의 로컬 캐시에서 페이지 테이블 엔트리로부터 정보의 사본을 캐싱하는 것을 재개하고, 더 일반적으로는, 메모리의 페이지를 이송하기 위한 준비의 효과를 제거한다.
일부 실시예에서, 메모리의 페이지를 이송하고 로컬 캐시 내의 개개의 페이지 테이블 엔트리로부터 정보를 캐싱하는 메모리 액세스에 대한 제한에도 불구하고, 메모리의 비-이송 페이지 및 이들의 개개의 페이지 테이블 엔트리에 대한 액세스는 정상적으로 수행된다. 즉, 메모리의 비-이송 페이지를 이송하기 위한 준비가 이루어지지 않고 있고, 비-이송 페이지가 이송되지 않을 것이기 때문에, 메모리의 비-이송 페이지 및 개개의 페이지 테이블 엔트리 내의 정보의 액세스는 IOMMU에 의해 방지되거나, 중단되거나 또는 달리 제한되지 않는다. 즉, IOMMU는 이러한 페이지 테이블 엔트리로부터의 정보를 정상적으로 사용하고 메모리의 이러한 페이지의 메모리 액세스를 정상적으로 수행한다. 일부 실시예에서, 비-이송 페이지에 대한 이송 상태 정보는 비-이송 페이지가 이송 상태(600)에 있음을 나타내도록 설정된다. 그러나, 메모리의 비-이송 페이지의 특정 메모리 액세스는, 메모리의 페이지의 이송에 기초한 순서화 이유 및/또는 다른 이유로 보류될 수 있지만, 메모리 내의 메모리의 비-이송 페이지 및 개개의 페이지 테이블 엔트리가 정확한 상태로 유지되는 한 일반적으로 진행될 수 있다.
일부 실시예에서, 기능 블록, 디바이스, 및 소프트웨어 엔티티는 상이한 순서로 이송 상태 사이에서 전환할 수 있다. 예를 들어, 일부 실시예에서, 이송 상태는, 이송 상태 사이의 얇은 화살표 방향 라인에 의해 도시된 바와 같이 스킵될 수 있다. 예를 들어, 일부 실시예에서, 프로세서에만 액세스가능한(그리고 그에 따라 IO 디바이스에 액세스가능하지 않은) 메모리의 페이지는 이송 상태(600)로부터 이송 상태(606)로 직접 전환될 수 있다. 이러한 실시예에서, 프로세서는 메모리의 누락 페이지를 처리하기 위한 페이지 결함 메커니즘을 포함하며, 소프트웨어 엔티티 및/또는 페이지 이송 엔진은 단순히 메모리의 페이지를 개개의 페이지 테이블 엔트리에서 누락된 것으로 마킹하고 메모리의 페이지의 이송을 진행할 수 있다. 일부 실시예에서, 프로세서는 IOMMU와 상이한 페이지 테이블을 사용하고, 따라서 메모리의 페이지는 프로세서의 페이지 테이블에서의 이송 동안 "누락"으로서 마킹될 수 있으며, 이는 메모리의 페이지가 프로세서의 페이지 결함 메커니즘을 사용하여 프로세서에 의해 처리되게 한다. 그러나, 일부 실시예에서, 프로세서는 IOMMU와 동일한 페이지 테이블을 사용하지만, 프로세서 및 IOMMU에 대해 상이한 이용가능한 표시자를 갖는다. 이들 실시예에서, 프로세서의 이용가능한 표시자는, 메모리의 페이지가 프로세서의 페이지 결함 메커니즘을 사용하여 프로세서에 의해 처리되게 하도록 설정될 수 있는 한편, 메모리의 페이지는 본 명세서에서 설명된 바와 같이 처리될 IOMMU에 대해 (메모리 액세스를 중단시키는 것 등을 통해) "이용가능한" 상태로 유지된다.
도 6에 도시된 예의 경우, 메모리의 단일 페이지만이 이송되지만, 일부 실시예에서, 메모리의 다수의 페이지를 이송하고/하거나 메모리의 다수의 페이지를 이송하기 위한 준비가 병렬로 발생할 수 있다. 즉, 메모리의 각각의 페이지에 대한 전술된 이송 상태 정보를 사용하여, 메모리의 2개 이상의 페이지를 이송하기 위한 준비 및/또는 메모리의 2개 이상의 페이지를 이송하는 것은 동일하거나 유사한 시간에, 동시에 등으로 수행될 수 있다. 이러한 경우, 메모리의 개별 페이지는 상이한 이송 상태에 있을 수 있고, 따라서 메모리의 페이지의 이송은 동적으로 시작될 수 있고(예를 들어, 이는 메모리의 각각의 페이지가 이송될 것이라고 소프트웨어 엔티티가 결정하는 것 등 때문임) 메모리의 다수의 페이지를 이송하고/하거나 메모리의 다른 페이지를 이송하기 위한 준비와 병렬로 완료될 수 있음에 유의한다. 따라서, 메모리의 각각의 페이지는 자신의 페이지 테이블 엔트리를 통해 이송 상태 중 하나에 있거나 또는 비-이송 상태에 있는 것으로 개별적으로 식별가능하며, 메모리의 페이지 및/또는 개개의 페이지 테이블 엔트리의 액세스를 처리하기 위한 동작은 본 명세서에서 설명된 바와 같이 수행된다.
메모리의 이송 페이지를 처리하기 위한 프로세스
설명된 실시예에서, 소프트웨어 엔티티(예를 들어, 하이퍼바이저(318), 운영 체제(200) 등) 및 페이지 이송 엔진(예를 들어, 페이지 이송 엔진(114))은 메모리의 페이지의 메모리 액세스 및 연관된 페이지 테이블 엔트리를 제어하기 위한 동작을 수행하는 한편, 메모리의 페이지를 이송하기 위한 준비가 이루어지고, 메모리의 페이지는 메모리(예를 들어, 메모리(104))로 이송된다. 도 7은 일부 실시예에 따른 메모리의 페이지를 이송하기 위한 프로세스를 예시하는 흐름도를 나타낸다. 도 7은 일부 실시예에서 요청자에 의해 수행되는 동작의 일반적인 예로서 제시된다. 그러나, 일부 실시예에서, 요청자는 상이한 동작을 수행하고/하거나 상이한 순서로 동작을 수행한다.
도 7에서 볼 수 있는 바와 같이, 프로세스는, 메모리, 소프트웨어 엔티티 및 페이지 이송 엔진에서 메모리의 IO 디바이스 액세스가능 페이지를 이송하도록 준비하기 위한 동작을 수행하는 동안, 수행되고 있는 동작에 기초하여 메모리의 페이지에 대한 페이지 테이블 엔트리 내의 이송 상태 정보를 설정할 때 시작한다(단계(700)). 일반적으로, 이러한 동작의 경우, 소프트웨어 엔티티 및 페이지 이송 엔진이 메모리의 페이지(예를 들어, 4 KiB 메모리의 페이지)를 이송하도록 준비하기 위한 개개의 동작을 수행할 때, 소프트웨어 엔티티 및 페이지 이송 엔진은 현재(current/present) 이송 상태를 나타내기 위해 메모리의 페이지에 대한 페이지 테이블 엔트리 내의 이송 정보를 업데이트한다. 전술된 바와 같이, 이송 상태(602 내지 606)에서, 소프트웨어 엔티티 및/또는 페이지 이송 엔진은 메모리의 페이지를 이송하도록 준비하기 위한 동작을 수행하고, 이어서, 이송 상태(606)(이는, 전술된 바와 같이, 제2 유형의 기존의/미해결 메모리 액세스가 완료되는 이송 상태(606A), 및 메모리에서 메모리의 페이지가 이송/이동되고 클린업 동작이 수행되는 606B로 분할될 수 있음)에서, 페이지 이송 엔진은 메모리의 페이지를 이송하기 위한 동작을 수행한다. 따라서, 수행되고 있는 동작에 기초하여 메모리의 페이지에 대한 페이지 테이블 엔트리에서 이송 상태 정보를 설정하는 것은 메모리의 페이지에 대한 이송 상태를 식별하기 위해 이송 상태를 설정하는 것을 수반한다. 예를 들어, 메모리의 페이지를 이송하기 위한 요청을 수신한 후, 메모리의 페이지의 이송을 준비하기 위한 초기 동작을 수행하는 동안(또는 그 전에), 소프트웨어 엔티티는 이를테면 이송 상태를, 이송 상태(602)를 나타내는 비트 시퀀스 또는 값으로 설정함으로써 이송 상태 정보를 이송 상태(602)를 설정할 수 있다.
일부 실시예에서, 소프트웨어 엔티티 및 IO 디바이스에 의해 수행되는 특정 동작은 메모리의 페이지에 대한 현재 이송 상태에 좌우된다. 예를 들어, 일부 실시예에서, 소프트웨어 엔티티에 의해 수행되는 동작 중에서 적어도 하나의 IO 디바이스의 캐시 내의 페이지 테이블 엔트리로부터 정보의 임의의 기존 사본을 (IOMMU에 대한 대응하는 커맨드를 통해) 무효화하기 위한 동작이 있다. 일부 실시예에서, 소프트웨어 엔티티는 이송 상태(602)에서 이러한 동작을 수행한다. 다른 예로서, 일부 실시예에서, 페이지 이송 엔진에 의해 수행되는 동작 중에서 IOMMU의 캐시 내의 페이지 테이블 엔트리로부터 정보의 임의의 기존 사본을 무효화하기 위한 동작이 있다. 일부 실시예에서, 페이지 이송 엔진은 이송 상태(604)에서 이러한 동작을 수행한다. 또 다른 예로서, 일부 실시예에서, 페이지 이송 엔진에 의해 수행되는 동작 중에서 메모리의 페이지를 이송하기 전에 IOMMU에 의해 중단되지 않는 메모리의 페이지에 대한 임의의 메모리 액세스를 완료하기 위한 동작이 있다. 일부 실시예에서, 페이지 이송 엔진은 이송 상태(602 내지 606)에서 이러한 동작을 수행한다. 이러한 동작이 소프트웨어 엔티티 및 페이지 이송 엔진에 의해 수행되는 특정 시퀀스/순서는 도 6에 대해 위에서 설명되었다.
IOMMU는 페이지 테이블 엔트리 내의 이송 상태 정보에 기초하여 페이지 테이블 엔트리로부터의 정보의 사용을 제어한다(단계(702)). 이러한 동작을 위해, IOMMU(또는 오히려, IOMMU 테이블 워커)는, 테이블 워크를 수행할 시에, 이송 상태 정보를 획득하고, 이송 상태 정보의 현재 값을 체크한다. 메모리의 페이지를 이송하기 위한 준비가 이루어지고 있고/있거나 메모리의 페이지가 이송되고 있음을 이송 상태 정보가 나타낼 때, IOMMU는 페이지 테이블로부터의 정보의 사용을 제한한다. 예를 들어, 이송 상태(602 내지 606)에서, IOMMU는 IOMMU 자체 내의 또는 IO 디바이스의 캐시 내의 페이지 테이블 엔트리로부터의 정보의 사본의 캐싱을 방지할 수 있다. 대조적으로, 이송 상태(600)에서와 같이 페이지가 이송되고 있지 않음을 이송 상태 정보가 나타낼 때, IOMMU는 페이지 테이블로부터의 정보를 정상적으로 사용할 수 있다. 따라서, 비-이송 이송 상태에서, IOMMU는 자체적으로 페이지 테이블 엔트리로부터의 정보의 사본을 캐싱할 수 있고, (임의의 다른 기존 액세스 제한을 조건으로) 페이지 테이블 엔트리로부터의 정보의 사본을 IO 디바이스에 제공할 수 있다.
IOMMU는 또한 페이지 테이블 엔트리 내의 이송 상태 정보에 기초하여 메모리의 페이지의 메모리 액세스의 성능을 제어한다(단계(704)). 이러한 동작의 경우, 전술된 바와 같이, IOMMU는 페이지 테이블 엔트리로부터 이송 상태 정보를 획득하고, 이송 상태 정보의 현재 값을 체크한다. 메모리의 페이지를 이송하기 위한 준비가 이루어지고 있고/있거나 메모리의 페이지가 이송되고 있음을 이송 상태 정보가 나타낼 때, IOMMU는 메모리의 페이지에 대한 메모리 액세스를 제한할 수 있다. 예를 들어, 이송 상태(604 내지 606)에서, IOMMU는 메모리의 페이지에 대한 특정된 새롭게 직면되는 메모리 액세스를 중단시킬 수 있지만, 기존의 메모리 액세스는 메모리의 페이지가 이송되기 전에 완료로 진행하도록 허용된다. 대조적으로, 페이지가 이송 상태(600 내지 602)와 같은 다른 이송 상태에 있음을 이송 상태 정보가 나타낼 때, IOMMU는 메모리의 페이지에 대한 모든 메모리 액세스가 정상적으로 진행되도록 허용할 수 있다. 따라서, 이러한 이송 상태에서, IOMMU는 임의의 다른 기존의 액세스 제한을 조건으로, 통상적인 방식으로 메모리의 페이지에 대한 메모리 액세스를 수행한다.
도 7이 메모리의 페이지를 이송하기 위한 준비가 이루어질 때 상태 정보를 설정하고 사용하는 예를 제시하지만, 일부 실시예에서, 이송 상태 정보는 일반적으로 페이지 테이블 엔트리에 존재하고, 다른 경우에서(즉, 다른 이송 상태에서) 개개의 페이지 테이블 엔트리 내의 메모리의 페이지 및 정보의 액세스를 "제어"하기 위해 사용된다. 예를 들어, 도 7에서 설명된 준비가 완료되고 메모리의 페이지가 실제로 이송되고 있는(즉, 메모리 내의 하나의 위치로부터 다른 위치로 이동되는 프로세스에 있는) 메모리의 페이지의 경우, 이송 상태 정보는 개개의 페이지 테이블 엔트리 내의 메모리의 페이지 및 정보의 액세스를 제어하기 위해 IOMMU에 의해 사용된다. 일부 실시예에서, 메모리의 페이지의 이송은 개개의 페이지 테이블 엔트리 내의 메모리의 페이지 및 정보의 액세스에 대한 전술된 제어를 이용하여 이송 상태(606)에서 수행된다. 다른 예로서, 이송되고 있지 않은, 그리고 그에 따라 메모리의 페이지를 이송하기 위한 어떠한 준비도 이루어지지 않는 메모리의 페이지의 경우, 이송 상태 정보는 개개의 페이지 테이블 엔트리 내의 메모리의 페이지 및 정보의 액세스를 제어하기 위해 IOMMU에 의해 사용된다. 일부 실시예에서, 메모리의 비-이송 페이지에 대한 동작은 개개의 페이지 테이블 엔트리 내의 메모리의 페이지 및 정보의 액세스에 대한 전술된 제어(또는 그의 결여)를 이용하여 이송 상태(600)에서 수행된다.
일부 실시예에서, 적어도 하나의 전자 디바이스(예를 들어, 전자 디바이스(100) 등)는 본 명세서에 설명된 동작 중 일부 또는 전부를 수행하기 위해 비일시적 컴퓨터 판독가능 저장 매체에 저장된 코드 및/또는 데이터를 사용한다. 보다 구체적으로, 적어도 하나의 전자 디바이스는 컴퓨터 판독가능 저장 매체로부터 코드 및/또는 데이터를 판독하고, 기술된 동작을 수행할 때 코드를 실행하고/하거나 데이터를 사용한다. 컴퓨터 판독가능 저장 매체는 전자 디바이스에 의해 사용하기 위한 코드 및/또는 데이터를 저장하는 임의의 디바이스, 매체, 또는 이들의 조합일 수 있다. 예를 들어, 컴퓨터 판독가능 저장 매체는 플래시 메모리, 랜덤 액세스 메모리(예를 들어, eDRAM, RAM, SRAM, DRAM, DDR4 SDRAM 등), 비휘발성 RAM(예를 들어, 위상 변화 메모리, 강유전체 랜덤 액세스 메모리, 스핀 전달 토크 랜덤 액세스 메모리, 자기저항 랜덤 액세스 메모리 등)을 포함하는 휘발성 및/또는 비휘발성 메모리, 판독 전용 메모리(ROM), 및/또는 자기 또는 광학 저장 매체(예를 들어, 디스크 드라이브, 자기 테이프, CD, DVD 등)를 포함할 수 있지만, 이에 제한되지 않는다.
일부 실시예에서, 하나 이상의 하드웨어 모듈은 여기에 설명된 동작을 수행한다. 예를 들어, 하드웨어 모듈은 하나 이상의 중앙 처리 유닛(CPU)/CPU 코어, 그래픽 처리 유닛(GPU)/GPU 코어, 주문형 집적 회로(ASIC) 칩, 필드 프로그래밍 가능 게이트 어레이(FPGA), 압축기 또는 인코더, 계산 유닛, 내장된 프로세서, 가속 처리 유닛 (APU), 제어기, 요청기, 완료기, 네트워크 통신 링크, 및/또는 다른 기능 블록을 포함할 수 있지만, 이에 제한되지는 않는다. 이러한 하드웨어 모듈 내의 회로부(예를 들어, 집적 회로 요소, 별개의 회로 요소 등)가 활성화될 때, 회로부는 동작 중 일부 또는 전부를 수행한다. 일부 실시예에서, 하드웨어 모듈은, 명령(프로그램 코드, 펌웨어 등)을 실행할 때, 동작을 수행하는 실행 파이프라인, 계산 또는 프로세싱 유닛 등과 같은 범용 회로부를 포함한다. 일부 실시예에서, 하드웨어 모듈은 동작을 수행하는 목적-특정 또는 전용 회로부를 포함하며, 가능하게는 "하드웨어에서" 및 명령을 실행하지 않고 동작 중 일부 또는 전부를 수행하는 회로부를 포함한다.
일부 실시예에서, 본원에 설명된 기능 블록 및 회로 요소 중 일부 또는 전부를 나타내는 데이터 구조(예를 들어, 전자 디바이스(100) 또는 그의 일부 부분)는, 기능 블록 및 회로 요소를 포함하는 하드웨어를 제조하기 위해 전자 디바이스에 의해 판독될 수 있고 직접적으로 또는 간접적으로 사용될 수 있는 데이터베이스 또는 다른 데이터 구조를 포함하는 비일시적 컴퓨터 판독가능 저장 매체에 저장된다. 예를 들어, 데이터 구조는 Verilog 또는 VHDL과 같은 고레벨 설계 언어(HDL)에서의 하드웨어 기능의 거동 레벨 설명 또는 레지스터-전송 레벨 (RTL) 설명일 수 있다. 설명은 전술한 기능 블록 및 회로 요소를 포함하는 하드웨어의 기능을 나타내는 합성 라이브러리로부터 트랜지스터/회로 요소의 목록을 포함하는 넷리스트를 생성하기 위해 설명을 합성할 수 있는 합성 도구에 의해 판독될 수 있다. 이어서 넷리스트는 마스크에 적용될 기하학적 형상을 설명하는 데이터 세트를 생성하도록 배치 및 라우팅될 수 있다. 그 후, 마스크는 전술한 기능 블록 및 회로 요소에 대응하는 반도체 회로 또는 회로(예를 들어, 집적 회로)를 생성하기 위해 다양한 반도체 제조 단계에서 사용될 수 있다. 대안적으로, 컴퓨터 액세스 가능 저장 매체 상의 데이터베이스는, 원하는 바에 따라, 넷리스트(합성 라이브러리를 갖거나 갖지 않음) 또는 데이터 세트, 또는 그래픽 데이터 시스템(GDS) II 데이터일 수 있다.
이 설명에서, 변수 또는 비특정 값 (즉, 특정 값의 특정 인스턴스 없이 값의 일반적인 설명) 은 N, M 및 X와 같은 문자로 표시된다. 본 명세서에서 이러한 설명에서 상이한 위치에서 유사한 문자를 사용하는 것에도 불구하고, 각각의 경우의 변수 및 비특정 값은 반드시 동일하지는 않으며, 즉, 일반적인 변수 및 명시되지 않은 값의 일부 또는 전부에 대해 의도된 상이한 가변 양 및 값이 있을 수 있다. 즉, 이 설명에서 변수 및 명시되지 않은 값을 나타내기 위해 사용되는 N의 특정 인스턴스 및 임의의 다른 문자는 반드시 서로 관련되는 것은 아니다.
본 명세서에서 사용된 바와 같은 표현 "등(et cetera 또는 etc.)"은 및/또는(and/or)인 경우를 제시하도록 의도되며, 즉, 그 등(etc.)과 연관된 목록 내의 요소 "중 적어도 하나"의 등가물을 제시한다. 예를 들어, "전자 디바이스가 제1 동작, 제2 동작 등을 수행한다"라는 문장에서, 전자 디바이스는 제1 동작, 제2 동작 및 기타 동작 중 적어도 하나를 수행할 수 있다. 또한, 등(etc.)과 연관된 목록 내의 요소는 단지 예의 세트 중에서의 예일뿐이며, 예 중 적어도 일부는 일부 실시예에서 나타나지 않을 수 있다.
실시예의 전술한 설명은 예시 및 설명의 목적으로만 제시되었다. 이들은 총망라하거나 실시예를 개시된 형태로 제한하려는 것이 아니다. 따라서, 많은 수정 및 변경이 당업자에게 명백할 것이다. 또한, 상기 개시내용은 실시예를 제한하려는 의도가 아니다. 실시예의 범위는 첨부된 청구범위에 의해 정의된다.

Claims (25)

  1. 전자 디바이스로서,
    메모리;
    입력-출력 메모리 관리 유닛(IOMMU);
    소프트웨어 엔티티를 실행하는 프로세서; 및
    페이지 이송 엔진을 포함하고,
    상기 소프트웨어 엔티티 및 상기 페이지 이송 엔진은 적어도 하나의 IO 디바이스에 의해 액세스가능한 메모리의 페이지를 상기 메모리에서 이송하도록 준비하기 위한 동작을 수행하도록 구성되고, 상기 소프트웨어 엔티티 및 상기 페이지 이송 엔진은 수행되는 상기 동작에 기초하여 상기 메모리의 페이지에 대한 페이지 테이블 엔트리에서 이송 상태 정보를 설정하고;
    상기 IOMMU는 상기 IOMMU의 하나 이상의 동작을 제어하기 위해 상기 페이지 테이블 엔트리에서 상기 이송 상태 정보를 사용하도록 구성되는, 전자 디바이스.
  2. 제1항에 있어서, 상기 IOMMU의 상기 하나 이상의 동작을 제어하기 위해 상기 페이지 테이블 엔트리 내의 상기 이송 상태 정보를 사용할 때, 상기 IOMMU는,
    상기 페이지 테이블 엔트리로부터의 정보의 사용; 및
    상기 메모리의 페이지의 메모리 액세스 중 적어도 하나를 제어하는, 전자 디바이스.
  3. 제2항에 있어서, 상기 메모리의 페이지에 대한 상기 페이지 테이블 엔트리에서 이송 상태 정보를 설정할 때, 상기 소프트웨어 엔티티 및 상기 페이지 이송 엔진은,
    상기 소프트웨어 엔티티 및 상기 페이지 이송 엔진에 의해, 상기 이송 상태 정보를, 상기 IOMMU에 의해 판독될 때, 상기 IOMMU로 하여금,
    상기 페이지 테이블 엔트리로부터의 정보의 사본을 상기 IOMMU의 캐시에 저장하지 않고;
    상기 적어도 하나의 IO 디바이스의 캐시에 저장되도록 상기 페이지 테이블 엔트리로부터의 정보의 사본을 상기 적어도 하나의 IO 디바이스에 제공하지 않음으로써 상기 페이지 테이블 엔트리로부터의 정보의 사용을 제어하게 하는 값으로 설정하도록 구성되는, 전자 디바이스.
  4. 제3항에 있어서, 상기 메모리의 페이지를 이송하기 위한 준비를 위한 상기 동작을 수행할 때, 상기 소프트웨어 엔티티 및 상기 페이지 이송 엔진은,
    상기 소프트웨어 엔티티에 의해, 상기 적어도 하나의 IO 디바이스 내의 캐시에서 상기 페이지 테이블 엔트리로부터의 정보의 임의의 기존 사본을 무효화하고;
    상기 페이지 이송 엔진에 의해, 상기 IOMMU 내의 캐시에서 상기 페이지 테이블 엔트리로부터의 정보의 임의의 기존 사본을 무효화하도록 구성되는, 전자 디바이스.
  5. 제3항에 있어서, 상기 페이지 테이블 엔트리로부터의 정보의 사본을 상기 적어도 하나의 IO 디바이스에 제공하지 않을 때, 상기 IOMMU는, 상기 적어도 하나의 IO 디바이스로부터의 어드레스 변환 서비스(ATS) 요청에 응답하여 상기 페이지 테이블 엔트리로부터의 정보의 사본을 상기 적어도 하나의 IO 디바이스에 제공하지 않도록 구성되는, 전자 디바이스.
  6. 제2항에 있어서, 상기 메모리의 페이지에 대한 상기 페이지 테이블 엔트리에서 이송 상태 정보를 설정할 때, 상기 페이지 이송 엔진은,
    상기 이송 상태 정보를, 상기 IOMMU에 의해 판독될 때, 상기 IOMMU로 하여금,
    상기 메모리의 페이지에 대한 제1 유형의 새롭게 직면된 메모리 액세스를 중단시키지만, 상기 메모리의 페이지에 대한 상기 제1 유형 및 제2 유형의 기존의 메모리 액세스 및 상기 제2 유형의 새롭게 직면된 메모리 액세스가 진행되도록 허용함으로써 상기 메모리의 페이지의 메모리 액세스의 성능을 제어하게 하는 제1 값으로 설정하도록 구성되는, 전자 디바이스.
  7. 제6항에 있어서, 상기 메모리의 페이지에 대한 상기 페이지 테이블 엔트리에서 이송 상태 정보를 설정할 때, 상기 페이지 이송 엔진은,
    상기 이송 상태 정보를, 상기 IOMMU에 의해 판독될 때, 상기 IOMMU로 하여금,
    상기 메모리의 페이지에 대한 상기 제1 유형 및 상기 제2 유형 둘 모두의 새롭게 직면된 메모리 액세스를 중단시키지만, 상기 메모리의 페이지에 대한 상기 제1 유형 및 상기 제2 유형의 기존의 메모리 액세스가 완료되도록 허용함으로써 상기 메모리의 페이지의 메모리 액세스의 성능을 제어하게 하는 제2 값으로 설정하도록 구성되는, 전자 디바이스.
  8. 제7항에 있어서, 상기 메모리의 페이지를 이송하기 위한 준비를 위한 상기 동작을 수행할 때, 상기 페이지 이송 엔진은,
    중단되지 않는 상기 메모리의 페이지에 대한 상기 제1 유형 및 상기 제2 유형의 임의의 메모리 액세스가 상기 메모리의 페이지를 이송하기 전에 완료되는 것을 보장하도록 구성되는, 전자 디바이스.
  9. 제2항에 있어서, 상기 페이지 이송 엔진은, 상기 메모리의 페이지를 이송하기 위한 동작을 수행하도록 추가로 구성되고, 상기 동작은,
    상기 메모리의 페이지를 상기 메모리 내의 제1 위치로부터 제2 위치로 이동시키는 것; 및
    상기 이동이 완료된 후,
    상기 메모리의 페이지를 상기 메모리 내의 상기 제2 위치에 저장된 것으로서 식별하기 위해 상기 페이지 테이블 엔트리 내의 정보를 업데이트하는 것; 및
    상기 이송 상태 정보를, 상기 IOMMU에 의해 판독될 때, 상기 IOMMU로 하여금 상기 페이지 테이블 엔트리로부터의 정보를 정상적으로 사용하여 재개하게 하는 값으로 설정하고 상기 메모리의 페이지의 메모리 액세스를 정상적으로 수행하는 것을 포함하는, 전자 디바이스.
  10. 제9항에 있어서,
    상기 메모리는 2개 이상의 상이한 유형의 메모리를 포함하고, 각각의 유형의 메모리는 상이한 메모리 특성을 갖고;
    메모리 내의 제1 위치로부터 상기 메모리 내의 제2 위치로 상기 메모리의 페이지를 이동시키는 것은 상기 메모리의 유형 중 제1 유형으로부터 상기 메모리의 유형 중 제2 유형으로 상기 메모리의 페이지를 이동시키는 것을 수반하는, 전자 디바이스.
  11. 제2항에 있어서, 상기 소프트웨어 엔티티는, 이송되고 있지 않은 메모리의 다른 페이지에 대한 다른 페이지 테이블 엔트리 내의 이송 상태 정보를, 상기 IOMMU에 의해 판독될 때, 상기 IOMMU로 하여금 상기 페이지 테이블 엔트리로부터의 정보를 정상적으로 사용하고 상기 메모리의 페이지의 메모리 액세스를 정상적으로 수행하게 하는 값으로 설정하도록 추가로 구성되는, 전자 디바이스.
  12. 제1항에 있어서, 상기 소프트웨어 엔티티는 운영 체제 또는 하이퍼바이저 중 하나인, 전자 디바이스.
  13. 제1항에 있어서, 상기 전자 디바이스에 결합되거나 포함된 상기 적어도 하나의 IO 디바이스를 더 포함하는, 전자 디바이스.
  14. 전자 디바이스 내의 메모리에서 메모리의 페이지를 이송하기 위한 방법으로서,
    적어도 하나의 IO 디바이스에 의해 액세스가능한 메모리의 페이지를 상기 메모리에서 이송하도록 준비하기 위한 동작을 수행하는 단계로서, 상기 수행하는 단계는 수행되는 상기 동작에 기초하여 상기 메모리의 페이지에 대한 페이지 테이블 엔트리에서 이송 상태 정보를 설정하는 단계를 포함하는, 단계; 및
    상기 전자 디바이스 내의 IOMMU의 하나 이상의 동작을 제어하기 위해 상기 페이지 테이블 엔트리에서 상기 이송 상태 정보를 사용하는 단계를 포함하는, 방법.
  15. 제14항에 있어서, 상기 IOMMU의 상기 하나 이상의 동작을 제어하기 위해 상기 페이지 테이블 엔트리 내의 상기 이송 상태 정보를 사용하는 단계는,
    상기 페이지 테이블 엔트리로부터의 정보의 사용; 및
    상기 메모리의 페이지의 메모리 액세스 중 적어도 하나를 제어하는 단계를 포함하는, 방법.
  16. 제15항에 있어서, 상기 메모리의 페이지에 대한 상기 페이지 테이블 엔트리에서 이송 상태 정보를 설정하는 단계는,
    상기 이송 상태 정보를, 상기 IOMMU에 의해 판독될 때, 상기 IOMMU로 하여금,
    상기 페이지 테이블 엔트리로부터의 정보의 사본을 상기 IOMMU의 캐시에 저장하지 않고;
    상기 적어도 하나의 IO 디바이스의 캐시에 저장되도록 상기 페이지 테이블 엔트리로부터의 정보의 사본을 상기 적어도 하나의 IO 디바이스에 제공하지 않음으로써 상기 페이지 테이블 엔트리로부터의 정보의 사용을 제어하게 하는 값으로 설정하는 단계를 포함하는, 방법.
  17. 제16항에 있어서, 상기 메모리의 페이지를 이송하도록 준비하는 단계는,
    상기 적어도 하나의 IO 디바이스 내의 캐시에서 상기 페이지 테이블 엔트리로부터의 정보의 임의의 기존 사본을 무효화하는 단계; 및
    상기 IOMMU 내의 캐시에서 상기 페이지 테이블 엔트리로부터의 정보의 임의의 기존 사본을 무효화하는 단계를 포함하는, 방법.
  18. 제16항에 있어서, 상기 페이지 테이블 엔트리로부터의 정보의 사본을 상기 적어도 하나의 IO 디바이스에 제공하지 않는 단계는, 상기 적어도 하나의 IO 디바이스로부터의 어드레스 변환 서비스(ATS) 요청에 응답하여 상기 페이지 테이블 엔트리로부터의 정보의 사본을 상기 적어도 하나의 IO 디바이스에 제공하지 않는 단계를 포함하는, 방법.
  19. 제15항에 있어서, 상기 메모리의 페이지에 대한 상기 페이지 테이블 엔트리에서 이송 상태 정보를 설정하는 단계는,
    상기 이송 상태 정보를, 상기 IOMMU에 의해 판독될 때, 상기 IOMMU로 하여금,
    상기 메모리의 페이지에 대한 제1 유형의 새롭게 직면된 메모리 액세스를 중단시키지만, 상기 메모리의 페이지에 대한 상기 제1 유형 및 제2 유형의 기존의 메모리 액세스 및 상기 제2 유형의 새롭게 직면된 메모리 액세스가 진행되도록 허용함으로써 상기 메모리의 페이지의 메모리 액세스의 성능을 제어하게 하는 제1 값으로 설정하는 단계를 포함하는, 방법.
  20. 제19항에 있어서, 상기 메모리의 페이지에 대한 상기 페이지 테이블 엔트리에서 이송 상태 정보를 설정하는 단계는,
    상기 이송 상태 정보를, 상기 IOMMU에 의해 판독될 때, 상기 IOMMU로 하여금,
    상기 메모리의 페이지에 대한 상기 제1 유형 및 상기 제2 유형 둘 모두의 새롭게 직면된 메모리 액세스를 중단시키지만, 상기 메모리의 페이지에 대한 상기 제1 유형 및 상기 제2 유형의 기존의 메모리 액세스가 완료되도록 허용함으로써 상기 메모리의 페이지의 메모리 액세스의 성능을 제어하게 하는 제2 값으로 설정하는 단계를 포함하는, 방법.
  21. 제20항에 있어서, 상기 메모리의 페이지를 이송하도록 준비하는 단계는,
    중단되지 않는 상기 메모리의 페이지에 대한 상기 제1 유형 및 상기 제2 유형의 임의의 메모리 액세스가 상기 메모리의 페이지를 이송하기 전에 완료되는 것을 보장하는 단계를 포함하는, 방법.
  22. 제15항에 있어서,
    상기 메모리의 페이지를 이송하기 위한 동작을 수행하는 단계를 더 포함하고, 상기 동작은,
    상기 메모리의 페이지를 상기 메모리 내의 제1 위치로부터 제2 위치로 이동시키는 것; 및
    상기 이동이 완료된 후,
    상기 메모리의 페이지를 상기 메모리 내의 제2 위치에 저장된 것으로서 식별하기 위해 상기 페이지 테이블 엔트리 내의 정보를 업데이트하는 것; 및
    상기 이송 상태 정보를, 상기 IOMMU에 의해 판독될 때, 상기 IOMMU로 하여금 상기 페이지 테이블 엔트리로부터의 정보를 정상적으로 사용하여 재개하게 하는 값으로 설정하고 상기 메모리의 페이지의 메모리 액세스를 정상적으로 수행하는 것을 포함하는, 방법.
  23. 제22항에 있어서,
    상기 메모리는 2개 이상의 상이한 유형의 메모리를 포함하고, 각각의 유형의 메모리는 상이한 메모리 특성을 갖고;
    메모리 내의 제1 위치로부터 상기 메모리 내의 제2 위치로 상기 메모리의 페이지를 이동시키는 것은 상기 메모리의 유형 중 제1 유형으로부터 상기 메모리의 유형 중 제2 유형으로 상기 메모리의 페이지를 이동시키는 것을 수반하는, 방법.
  24. 제15항에 있어서,
    이송되고 있지 않은 메모리의 다른 페이지에 대한 다른 페이지 테이블 엔트리 내의 이송 상태 정보를, 상기 IOMMU에 의해 판독될 때, 상기 IOMMU로 하여금 상기 페이지 테이블 엔트리로부터의 정보를 정상적으로 사용하고 상기 메모리의 페이지의 메모리 액세스를 정상적으로 수행하게 하는 값으로 설정하는 단계를 더 포함하는, 방법.
  25. 제14항에 있어서, 상기 소프트웨어 엔티티는 운영 체제 또는 하이퍼바이저 중 하나인, 방법.
KR1020237022115A 2020-12-29 2021-12-09 입력-출력 디바이스에 의해 액세스가능한 메모리의페이지의 이송 KR20230123985A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/136,989 US11726693B2 (en) 2020-12-29 2020-12-29 Migrating pages of memory accessible by input-output devices
US17/136,989 2020-12-29
PCT/IB2021/061534 WO2022144646A1 (en) 2020-12-29 2021-12-09 Migrating pages of memory accessible by input-output devices

Publications (1)

Publication Number Publication Date
KR20230123985A true KR20230123985A (ko) 2023-08-24

Family

ID=82117059

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237022115A KR20230123985A (ko) 2020-12-29 2021-12-09 입력-출력 디바이스에 의해 액세스가능한 메모리의페이지의 이송

Country Status (6)

Country Link
US (1) US11726693B2 (ko)
EP (1) EP4272081A1 (ko)
JP (1) JP2024503259A (ko)
KR (1) KR20230123985A (ko)
CN (1) CN116745752A (ko)
WO (1) WO2022144646A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11625175B1 (en) * 2021-06-29 2023-04-11 Amazon Technologies, Inc. Migrating virtual resources between non-uniform memory access (NUMA) nodes

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120023302A1 (en) * 2010-07-20 2012-01-26 Ibm Corporation Concurrent Atomic Operations with Page Migration in PCIe
US20120246381A1 (en) * 2010-12-14 2012-09-27 Andy Kegel Input Output Memory Management Unit (IOMMU) Two-Layer Addressing
US9355041B2 (en) * 2013-03-14 2016-05-31 Nvidia Corporation Frame buffer access tracking via a sliding window in a unified virtual memory system
US10585805B2 (en) * 2016-07-29 2020-03-10 Advanced Micro Devices, Inc. Controlling access to pages in a memory in a computing device
WO2018176393A1 (en) * 2017-03-31 2018-10-04 Intel Corporation Techniques for virtual machine transfer and resource management
US10365824B2 (en) * 2017-04-24 2019-07-30 Advanced Micro Devices, Inc. Silent active page migration faults

Also Published As

Publication number Publication date
WO2022144646A1 (en) 2022-07-07
JP2024503259A (ja) 2024-01-25
EP4272081A1 (en) 2023-11-08
US20220206700A1 (en) 2022-06-30
CN116745752A (zh) 2023-09-12
US11726693B2 (en) 2023-08-15

Similar Documents

Publication Publication Date Title
CN109564522B (zh) 控制对计算装置的存储器中的页的访问
US10509736B2 (en) Controlling access by IO devices to pages in a memory in a computing device
JP5214611B2 (ja) 仮想マシン環境におけるゲスト間での情報の共有
US7516247B2 (en) Avoiding silent data corruption and data leakage in a virtual environment with multiple guests
US7543131B2 (en) Controlling an I/O MMU
US10169244B2 (en) Controlling access to pages in a memory in a computing device
US7480784B2 (en) Ensuring deadlock free operation for peer to peer traffic in an input/output memory management unit (IOMMU)
US10430221B2 (en) Post-copy virtual machine migration with assigned devices
EP3433742A1 (en) Using multiple memory elements in an input-output memory management unit for performing virtual address to physical address translations
KR20230159879A (ko) 입출력 디바이스에 의해 액세스가능한 메모리 페이지 마이그레이션
US20220308756A1 (en) Performing Memory Accesses for Input-Output Devices using Encryption Keys Associated with Owners of Pages of Memory
KR20230123985A (ko) 입력-출력 디바이스에 의해 액세스가능한 메모리의페이지의 이송
CN113272789A (zh) 由输入输出存储器管理单元进行的域标识符和装置标识符转译
KR20220017949A (ko) 입력-출력 메모리 관리 유닛에 의한 게스트 운영 체제 버퍼 및 로그 액세스
KR20220001016A (ko) 게스트 운영체제에 입출력 메모리 관리 유닛 레지스터 복사본을 제공하는 방법