번역 룩사이드 버퍼

Translation lookaside buffer

Translation Lookaside Buffer(TLB; 변환 룩사이드 버퍼)는 가상 메모리에서 물리 메모리로의 최근 변환을 저장하는 메모리 캐시입니다.사용자 메모리 [1]위치에 액세스하는 데 걸리는 시간을 줄이기 위해 사용됩니다.주소 변환 캐시라고 불립니다.칩의 메모리 관리 유닛(MMU)의 일부입니다.TLB는 CPUCPU 캐시 사이, CPU 캐시와 메인 메모리 사이, 또는 멀티 레벨 캐시의 다른 레벨 사이에 존재할 수 있습니다.데스크톱, 노트북 및 서버 프로세서의 대부분은 메모리 관리 하드웨어에 1개 이상의 TLB를 포함하고 있으며 페이지 가상 메모리 또는 세그먼트 가상 메모리를 사용하는 프로세서에는 거의 항상 포함되어 있습니다.

TLB는 Content-Addressable Memory(CAM; 콘텐츠어드레스 가능 메모리)로서 실장되는 경우가 있습니다.CAM 검색 키는 가상 주소이며 검색 결과는 물리 주소입니다.요청된 주소가 TLB에 존재하는 경우 CAM 검색은 신속하게 일치하고 취득된 물리 주소를 사용하여 메모리에 액세스할 수 있습니다.이것은 TLB 히트라고 불립니다.요청된 주소가 TLB에 없는 경우 이는 누락이며 페이지 워크라고 불리는 프로세스로 페이지테이블을 검색함으로써 변환이 진행됩니다.페이지 워크는 여러 메모리 위치의 내용을 읽고 이를 사용하여 물리적 주소를 계산하는 것이므로 프로세서 속도에 비해 시간이 오래 걸립니다.페이지 워크에 의해 물리 주소가 결정되면 가상 주소와 물리 주소의 매핑이 TLB에 입력됩니다.파워를 들어 PC604는 데이터 로드 및 [2]저장을 위한 쌍방향 세트 어소시에이트 TLB를 가진다.일부 프로세서는 명령 및 데이터 주소 TLB가 다릅니다.

개요

TLB의[3] 일반 작업

TLB에는 페이지 테이블엔트리와 세그먼트테이블 엔트리가 포함된 고정 수의 슬롯이 있습니다.페이지 테이블엔트리는 가상 주소를 물리 주소와 중간 테이블주소에 매핑하고 세그먼트테이블 엔트리는 가상 주소를 세그먼트주소, 중간 테이블주소 및 페이지 테이블주소에 매핑합니다.가상 메모리는 프로세스에서 볼 수 있는 메모리 공간입니다.이 공간은 보통 고정 크기의 페이지(페이지 메모리 내)로 분할되거나 가변 크기의 세그먼트(세그먼트 메모리 내)로 분할됩니다.일반적으로 메인 메모리에 저장되어 있는 페이지테이블은 물리 메모리에서 가상 페이지가 저장되어 있는 위치를 추적합니다.이 방법에서는 2개의 메모리액세스(페이지 테이블엔트리에 1개, 바이트에 1개)를 사용하여 바이트에 액세스합니다.먼저 페이지 테이블에서 프레임 번호를 검색합니다.둘째, 페이지 오프셋이 있는 프레임 번호는 실제 주소를 제공합니다.따라서 간단한 가상 메모리 스킴은 메모리 액세스 시간을 2배로 늘리는 효과가 있습니다.따라서 TLB는 페이지 테이블 방식으로 메모리 위치에 액세스하는 데 걸리는 시간을 단축하기 위해 사용됩니다.TLB는 페이지테이블의 캐시로 페이지테이블 콘텐츠의 서브셋만을 나타냅니다.

물리 메모리 주소를 참조하면, TLB는 CPU와 CPU 캐시 사이, CPU 캐시와 프라이머리 스토리지 메모리 사이, 또는 멀티 레벨 캐시 레벨 사이에 존재할 수 있습니다.배치에 따라 캐시가 물리적 주소 지정을 사용할지 또는 가상 주소 지정을 사용할지가 결정됩니다.캐시가 가상으로 주소 지정되면 요구가 CPU에서 캐시로 직접 전송되고 TLB는 캐시 누락 시에만 액세스됩니다.캐시가 물리적으로 주소 지정되면 CPU는 모든 메모리 동작에 대해 TLB 룩업을 수행하고 그 결과 생성된 물리 주소가 캐시에 전송됩니다.

하버드 아키텍처 또는 변경된 하버드 아키텍처에서는 명령 및 데이터를 위한 별도의 가상 주소 공간 또는 메모리 액세스 하드웨어가 존재할 수 있습니다.이것에 의해, 액세스 타입 마다 다른 TLB, Instruction Translation Lookaside Buffer(ITLB) 및 Data Translation Lookaside Buffer(DTLB; 데이터 변환 Lookaside 버퍼)가 생기는 일이 있습니다.별도의 데이터와 지침 TLB를 [4]통해 다양한 이점이 입증되었다.

TLB는 고속 검색 하드웨어 캐시로 사용할 수 있습니다.그림은 TLB의 동작을 나타내고 있습니다.TLB의 각 엔트리는 태그와 값의 두 부분으로 구성됩니다.착신 가상 주소의 태그가 TLB 의 태그와 일치하면, 대응하는 값이 반환됩니다.TLB 룩업은 일반적으로 명령 파이프라인의 일부이기 때문에 검색이 빠르고 성능 저하가 발생하지 않습니다.그러나 명령 파이프라인 내에서 검색할 수 있으려면 TLB가 작아야 합니다.

물리 주소 지정 캐시의 일반적인 최적화는 캐시 액세스와 병행하여 TLB 룩업을 실행하는 것입니다.하드웨어는 가상 메모리 참조마다 TLB를 체크하여 페이지 번호가 유지되고 있는지 여부를 확인합니다.[Yes]의 경우 TLB 히트이며 변환이 이루어집니다.프레임 번호가 반환되어 메모리에 액세스하기 위해 사용됩니다.페이지 번호가 TLB에 없는 경우 페이지 테이블을 확인해야 합니다.CPU에 따라서는, 하드웨어 또는 operating system의 인터럽트를 사용해 자동적으로 실행할 수 있습니다.프레임 번호를 취득하면, 메모리 액세스에 사용할 수 있습니다.또, 페이지 번호와 프레임 번호를 TLB 에 추가해, 다음에 참조할 때에 신속히 검출할 수 있도록 하고 있습니다.TLB가 이미 가득 찬 경우 적절한 블록을 선택하여 교체해야 합니다.Last Reently Used(LRU; 최소 사용), First In, First Out(FIFO; 선입선출) 등 다양한 치환 방법이 있습니다.캐시 및 TLB와 관련된 가상 주소 지정에 대한 자세한 내용은 캐시 문서의 주소 변환 섹션을 참조하십시오.

퍼포먼스에 미치는 영향

흐름도는[5] 변환 룩사이드버퍼의 동작을 나타내고 있습니다.알기 쉽게 하기 위해 페이지 장애 루틴은 언급하지 않습니다.

CPU는 명령 캐시 누락, 데이터 캐시 누락 또는 TLB 누락에 대해 메인 메모리에 액세스해야 합니다.세 번째 경우(가장 간단한 경우)는 원하는 정보 자체는 실제로 캐시에 있지만 가상에서 물리로의 변환 정보는 TLB에 없습니다.메모리 계층의 저속한 레벨에 액세스 할 필요가 있기 때문에, 모두 저속입니다.따라서 TLB가 제대로 기능하는 것이 중요합니다.실제로 TLB 미스는 명령이나 데이터 캐시 미스에 비해 비용이 많이 들 수 있습니다.이는 메인 메모리에서 로드되는 것뿐만 아니라 페이지 워크가 필요하기 때문에 여러 메모리 액세스가 필요하기 때문입니다.

이 흐름도는 TLB의 동작에 대해 설명하고 있습니다.TLB 미스일 경우 CPU는 페이지테이블 엔트리를 체크합니다.현재의 비트가 설정되어 있는 경우, 페이지는 메인 메모리에 있고, 프로세서는 페이지 테이블 엔트리로부터 프레임 번호를 취득해 물리 [6]주소를 형성할 수 있다.또한 프로세서는 새로운 페이지 테이블 엔트리를 포함하도록 TLB를 업데이트합니다.마지막으로 현재 비트가 설정되어 있지 않으면 원하는 페이지가 메인 메모리에 없고 페이지 폴트가 발행된다.다음으로 페이지 장애 인터럽트가 호출되어 페이지 장애 처리 루틴이 실행됩니다.

페이지 작업 세트가 TLB에 맞지 않으면 TLB 스레싱이 발생합니다.TLB 스레싱은 TLB 누락이 빈번하게 발생하고 새로 캐시된 각 페이지가 곧 다시 사용될 페이지를 대체하여 명령 또는 데이터 캐시의 스레싱과 동일한 방식으로 성능을 저하시킵니다.명령 캐시 또는 데이터 캐시 스레싱이 발생하지 않더라도 TLB 스레싱이 발생할 수 있습니다.이는 TLB 스레싱이 다른 크기의 단위로 캐시되기 때문입니다.명령 및 데이터는 전체 페이지가 아닌 작은 블록(캐시 라인)으로 캐시되지만 주소 검색은 페이지 수준에서 수행됩니다.따라서 코드와 데이터 작업세트가 캐시에 들어가더라도 작업세트가 여러 페이지에 걸쳐 fragment화되어 있는 경우 가상 주소 작업세트가 TLB에 맞지 않아 TLB 스레싱이 발생할 수 있습니다.따라서 TLB의 적절한 사이징을 위해서는 대응하는 명령 및 데이터 캐시의 크기뿐만 아니라 여러 페이지에 걸쳐 이러한 명령 및 데이터 캐시가 어떻게 단편화되어 있는지를 고려해야 합니다.

다중 TLB

캐시와 마찬가지로 TLB에는 여러 레벨이 있을 수 있습니다.CPU는 여러 개의 TLB를 사용하여 구축할 수 있습니다.예를 들어, 고속의 작은 L1 TLB(잠재적으로는 완전 관련지어짐)와 다소 느린 큰 L2 TLB가 있습니다.Instruction-TLB(ITLB) 및 Data-TLB(DTLB)를 사용하는 경우 CPU에는 3개의 TLB(ITLB1, DTLB1, TLB2) 또는4개의 TLB를 설정할 수 있습니다.

예를 들어, 인텔의 Nehalem마이크로 아키텍처 64엔트리로 2/4 MiB 페이지, L1ITLB4KiB 페이지에 128항목 2/4 MiB 페이지에 4자 연대 그리고 14완전히 결합 항목을 사용하여(그 ITLB의 이 두 부분 정적으로 2실들 사이에 가로놓인)[7]4KiB 페이지와 32항목과 a에 대한 4세트 어소시에이티브 L1DTLB다 꿈이기 때 문데 내512 엔트리 L2 TLB를 4KiB 페이지([8]양쪽 모두 4방향 어소시에이션)[9]에 송신했습니다.

일부 TLB에는 작은 페이지와 큰 페이지에 대한 개별 섹션이 있을 수 있습니다.

TLB 미스 처리

TLB 미스를 처리하기 위한 두 가지 방식은 최신 아키텍처에서 일반적으로 볼 수 있습니다.

  • 하드웨어 TLB 관리를 사용하면 CPU는 자동으로 페이지테이블(를 들어 x86의 CR3 레지스터 사용)을 조사하여 지정된 가상 주소에 유효한 페이지테이블 엔트리가 있는지 여부를 확인합니다.엔트리가 존재하는 경우 엔트리는 TLB에 삽입되어 TLB 액세스가 재시도됩니다.이번에는 액세스가 히트하고 프로그램은 정상적으로 진행됩니다.CPU는 페이지 테이블에서 가상 주소에 대한 유효한 엔트리를 찾을 수 없는 경우 페이지 장애 예외를 발생시킵니다.이 예외는 운영 체제에서 처리해야 합니다.일반적으로 페이지 장애 처리에는 요청된 데이터를 물리적 메모리에 가져오고, 장애가 발생한 가상 주소를 올바른 물리적 주소에 매핑하는 페이지 테이블 엔트리를 설정하고, 프로그램을 재개하는 작업이 포함됩니다.하드웨어 관리 TLB에서는 TLB 엔트리의 포맷이 소프트웨어에서는 표시되지 않으며 프로그램의 호환성을 잃지 않고 CPU에서 CPU로 변경될 수 있습니다.
  • 소프트웨어 관리 TLB에서는 TLB 미스 예외가 생성되며 페이지 테이블을 읽고 소프트웨어 변환을 실행하는 운영체제코드가 원인이 됩니다.그런 다음 운영체제는 변환을 TLB에 로드하고 TLB 누락의 원인이 된 명령에서 프로그램을 재시작합니다.하드웨어 TLB 관리와 마찬가지로 페이지 테이블에서 유효한 변환이 검출되지 않은 경우 페이지 장애가 발생하고 있으며 이에 따라 OS가 처리해야 합니다.소프트웨어 관리 TLB가 있는 CPU 명령어세트에는 TLB 내의 임의의 슬롯에 엔트리를 로드할 수 있는 명령이 있습니다.TLB 엔트리의 형식은 Instruction Set Architecture(ISA;[10] 명령 집합 아키텍처)의 일부로 정의됩니다.

MIPS 아키텍처는 소프트웨어 관리형 [11]TLB를 지정합니다.SPARC V9 아키텍처에서는 SPARC V9를 실장할 때 MMU, 소프트웨어 관리형 TLB를 탑재한 MMU 또는 하드웨어 관리형 [12]TLB를 탑재한 MMU를 실장할 수 있습니다.UltraSPARC 아키텍처는 소프트웨어 관리형 TLB를 지정합니다.

Itanium 아키텍처에서는 소프트웨어 또는 하드웨어 관리 TLB [14]중 하나를 사용할 수 있습니다.

Alpha 아키텍처의 TLB는 운영 체제가 아닌 PALcode로 관리됩니다.프로세서의 PAL 코드는 프로세서 고유 및 운영체제 고유할 수 있기 때문에 TLB 형식 및 TLB 제어 명령을 아키텍처에 [15]의해 지정할 필요 없이 PAL 코드의 버전에 따라 운영체제마다 다른 페이지 테이블 형식을 구현할 수 있습니다.

표준 TLB

TLB의 [16]일반적인 퍼포먼스레벨은 다음과 같습니다.

  • 사이즈: 12 비트– 4,096 엔트리
  • 히트 타임: 0.5~1 클럭 사이클
  • 미스 패널티: 10 ~100 클럭 사이클
  • 미스 레이트: 0.01~1 % (스퍼스/그래프 어플리케이션의 경우 20~40 %)

평균 유효 메모리 사이클 m +(- ) + m{ m + ( 1 - p )h +pm } cycles로 됩니다서 m { m 메모리 에 필요한 사이클 수 p { p 미스 ,h { h 사이클의 히트 타임입니다.TLB 히트에는 1클럭 사이클, 미스에는 30클럭 사이클, 메모리 판독에는 30클럭 사이클, 미스 레이트가 1%인 경우 유효 메모리사이클 레이트는 평균 30 × + { 30 + \1 + 0.\ 30 (.29 클럭/[17]메모리 액세스당)입니다.

주소 공간 스위치

어드레스 공간 스위치에서는 (스레드 간은 아니지만) 프로세스 간에 컨텍스트를 전환할 때 발생하는 것처럼 가상에서 물리로의 매핑이 다르기 때문에 일부 TLB 엔트리가 무효가 될 수 있습니다.이 문제를 해결하는 가장 간단한 방법은 TLB를 완전히 플러시하는 것입니다.즉, 스위치 후에는 TLB가 비어 있어 메모리 참조가 누락되기 때문에 최대 속도로 동작할 때까지 시간이 걸립니다.새로운 CPU는 엔트리의 대상 프로세스를 표시하는 보다 효과적인 전략을 사용합니다.즉, 두 번째 프로세스가 짧은 시간 동안만 실행되고 첫 번째 프로세스로 돌아가도 TLB에 유효한 엔트리가 남아 있기 때문에 [18]새로고침에 걸리는 시간이 단축됩니다.

다른 방법으로는 컨텍스트스위치에서의 TLB의 플래시를 회피할 수 있습니다.(a) 단일 주소 공간 운영시스템은 모든 프로세스에 대해 동일한 가상에서 물리로의 매핑을 사용합니다.(b) 일부 CPU에는 프로세스 ID 레지스터가 있으며 하드웨어는 현재 프로세스 ID와 일치하는 경우에만 TLB 엔트리를 사용합니다.

예를 들어 Alpha 21264에서는 각 TLB 엔트리에 Address Space Number(ASN; 주소 공간 번호)가 태그 부착되어 현재 작업과 일치하는 ASN을 가진 TLB 엔트리만 유효하다고 간주됩니다.인텔 Pentium Pro의 다른 예로는 레지스터 CR4의 페이지 글로벌 활성화(PGE) 플래그 및 페이지 디렉토리 또는 페이지 테이블 엔트리의 글로벌(G) 플래그를 사용하여 자주 사용하는 페이지가 태스크 스위치 상의 TLB 또는 레지스터 CR3 로드에서 자동으로 비활성화되는 것을 방지할 수 있습니다.2010년 Westmere 마이크로아키텍처(architecture) 이후 인텔 64 프로세서는 12비트 프로세스 컨텍스트 식별자(PCID)를 지원하므로 여러 선형 주소 공간에 TLB 엔트리를 유지할 수 있으며 현재 PCID와 일치하는 엔트리만 주소 [19][20]변환에 사용됩니다.

소프트웨어 관리 대상 TLB에서는 TLB의 선택적 플러싱이 옵션이지만 일부 하드웨어 TLB(Intel 80386의 TLB 등)에서는 주소 공간 스위치 상의 TLB의 완전한 플러싱만이 유일한 옵션입니다.기타 하드웨어 TLB(인텔 80486 이후의 x86 프로세서의 TLB, ARM 프로세서의 TLB 등)를 사용하면 가상 주소에 의해 색인화된TLB에서 개개의 엔트리를 플러시 할 수 있습니다.

TLB 플러시는 프로세스가 다른 프로세스의 메모리 페이지에 저장된 데이터에 액세스할 수 없도록 프로세스 간에 메모리를 분리하는 데 중요한 보안 메커니즘이 될 수 있습니다.메모리의 분리는 특권 운영체제 커널 프로세스와 사용자 프로세스 간의 전환 중에 특히 중요합니다.는 멜트다운 보안 취약성에 의해 강조된 것입니다.Kernel Page-Table Isolation(KPTI; 커널 페이지 테이블 분리) 의 경감 전략은 성능에 영향을 미치는 TLB 플러시에 크게 의존하고 있으며 PCID [21]등의 하드웨어 지원 선택적 TLB 엔트리 관리를 통해 큰 이점을 얻을 수 있습니다.

가상화 및 x86 TLB

서버 통합을 위한 가상화의 등장으로 x86 아키텍처를 보다 쉽게 가상화하고 x86 [22][23]하드웨어 상에서 가상 머신의 성능을 향상시키기 위해 많은 노력을 기울였습니다.

일반적으로 x86 TLB 내의 엔트리는 특정 주소 공간에 관련지을 수 없습니다.이는 암묵적으로 현재의 주소 공간을 가리킵니다.따라서 콘텍스트스위치 등 주소 공간에 변화가 있을 때마다 TLB 전체를 플래시해야 합니다.각 TLB 엔트리와 소프트웨어의 주소 공간을 관련짓는 태그를 유지하고 TLB 검색 및 TLB 플러시 중에 이 태그를 비교하는 것은 매우 비용이 많이 듭니다.특히 x86 TLB는 매우 짧은 레이텐시로 동작하도록 설계되어 하드웨어에서 완전히 동작하기 때문입니다.2008년에 인텔(Nehalem)[24]과 AMD(SVM)[25]는 모두 TLB 엔트리의 일부로서 태그를 도입해, 검색중에 태그를 체크하는 전용 하드웨어를 도입했습니다.이러한 태그가 완전하게[needs update?] 이용되는 것은 아니지만, 장래적으로는[when?] 이러한 태그가 모든 TLB 엔트리가 속하는 주소 공간을 식별할 수 있을[by whom?] 것으로 예상됩니다.따라서 콘텍스트스위치는 TLB 플래시를 발생시키지 않고 현재 주소 공간의 태그를 새로운 작업의 주소 공간의 태그로 변경합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Arpaci-Dusseau, Remzi H.; Arpaci-Dusseau, Andrea C. (2014), Operating Systems: Three Easy Pieces [Chapter: Faster Translations (TLBs)] (PDF), Arpaci-Dusseau Books
  2. ^ S. Peter Song; Marvin Denman; Joe Chang (1994). "The PowerPC 604 RISC Microprocessor" (PDF). IEEE Micro.
  3. ^ Silberschatz, Galvin, Gagne, Abraham, Peter B. , Greg (2009). Operating Systems Concepts. United States of America: John Wiley & Sons. INC. ISBN 978-0-470-12872-5.{{cite book}}: CS1 maint: 여러 이름: 작성자 목록(링크)
  4. ^ Chen, J. Bradley; Borg, Anita; Jouppi, Norman P. (1992). "A Simulation Based Study of TLB Performance". SIGARCH Computer Architecture News. 20 (2): 114–123. doi:10.1145/146628.139708.
  5. ^ Stallings, William (2014). Operating Systems: Internals and Design Principles. United States of America: Pearson. ISBN 978-0133805918.
  6. ^ Solihin, Yan (2016). Fundamentals of Parallel Multicore Architecture. Boca Raton, FL: Taylor & Francis Group. ISBN 978-0-9841630-0-7.
  7. ^ "Inside Nehalem: Intel's Future Processor and System". Real World Technologies.
  8. ^ "Intel Core i7 (Nehalem): Architecture By AMD?". Tom's Hardware. 14 October 2008. Retrieved 24 November 2010.
  9. ^ "Inside Nehalem: Intel's Future Processor and System". Real World Technologies. Retrieved 24 November 2010.
  10. ^ J. Smith와 R.Nair. 가상 머신:시스템 및 프로세스를 위한 다목적 플랫폼(컴퓨터 아키텍처 및 설계 분야의 Morgan Kaufmann 시리즈).Morgan Kaufmann Publishers Inc, 2005.
  11. ^ Welsh, Matt. "MIPS r2000/r3000 Architecture". Archived from the original on 14 October 2008. Retrieved 16 November 2008. If no matching TLB entry is found, a TLB miss exception occurs
  12. ^ SPARC International, Inc. The SPARC Architecture Manual, Version 9. PTR Prentice Hall.
  13. ^ Sun Microsystems. UltraSPARC Architecture 2005. Draft D0.9.2, 19 June 2008. Sun Microsystems.
  14. ^ IA-64 커널> 변환 룩사이드버퍼의 가상 메모리
  15. ^ Compaq Computer Corporation. Alpha Architecture Handbook (PDF). Version 4. Compaq Computer Corporation.
  16. ^ David A. Patterson; John L. Hennessy (2009). Computer Organization And Design. Hardware/Software interface. 4th edition. Burlington, MA 01803, USA: Morgan Kaufmann Publishers. p. 503. ISBN 978-0-12-374493-7.{{cite book}}: CS1 유지보수: 위치(링크)
  17. ^ "Translation Lookaside Buffer (TLB) in Paging". GeeksforGeeks. 26 February 2019. Retrieved 10 February 2021.
  18. ^ Ulrich Drepper (9 October 2014). "Memory part 3: Virtual Memory". LWN.net.
  19. ^ David Kanter (17 March 2010). "Westmere Arrives". Real World Tech. Retrieved 6 January 2018.
  20. ^ Intel Corporation (2017). "4.10.1 Process-Context Identifiers (PCIDs)". Intel 64 and IA-32 Architectures Software Developer's Manual (PDF). Vol. 3A: System Programming Guide, Part 1.
  21. ^ Gil Tene (8 January 2018). "PCID is now a critical performance/security feature on x86". Retrieved 23 March 2018.
  22. ^ D. 에이브람슨, J. 잭슨, S. Muthrasanallur, G. Neiger, G. Regnier, R. Sankaran, I. Schoinas, R.얼릭, B.Vembu와 J.비거트.다이렉트 I/O용 인텔 버추얼라이제이션 테크놀로지인텔 테크놀로지 저널, 10 (03) : 179 ~192 。
  23. ^ 고도의 마이크로 디바이스AMD Secure Virtual Machine Architecture 레퍼런스 매뉴얼Advanced Micro Devices, 2008.
  24. ^ G. 나이거, A. 산토니, F.렁, D로저스, 그리고 R.Uhlig. 인텔 버추얼라이제이션 테크놀로지:효율적인 프로세서 가상화를 위한 하드웨어 지원인텔 테크놀로지 저널, 10(3)
  25. ^ 고도의 마이크로 디바이스AMD Secure Virtual Machine Architecture 레퍼런스 매뉴얼Advanced Micro Devices, 2008.

외부 링크