KR101963725B1 - 자기 수정 코드에 하드웨어 지원을 제공하는 방법 및 장치 - Google Patents

자기 수정 코드에 하드웨어 지원을 제공하는 방법 및 장치 Download PDF

Info

Publication number
KR101963725B1
KR101963725B1 KR1020167031653A KR20167031653A KR101963725B1 KR 101963725 B1 KR101963725 B1 KR 101963725B1 KR 1020167031653 A KR1020167031653 A KR 1020167031653A KR 20167031653 A KR20167031653 A KR 20167031653A KR 101963725 B1 KR101963725 B1 KR 101963725B1
Authority
KR
South Korea
Prior art keywords
code
guest
cache
hardware buffer
processor
Prior art date
Application number
KR1020167031653A
Other languages
English (en)
Other versions
KR20160145696A (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 KR20160145696A publication Critical patent/KR20160145696A/ko
Application granted granted Critical
Publication of KR101963725B1 publication Critical patent/KR101963725B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/45525Optimisation or modification within the same instruction set architecture, e.g. HP Dynamo

Abstract

자기 수정 게스트 코드에 지원을 제공하기 위한 방법 및 장치가 개시된다. 장치는 메모리, 하드웨어 버퍼, 및 프로세서를 포함한다. 프로세서는 게스트 코드를 네이티브 코드로 변환하고 게스트 코드에 상당하는 변환된 네이티브 코드를 프로세서의 코드 캐시 부분에 저장하도록 구성된다. 프로세서는 또한 각각의 코드 캐시 내의 변환된 코드의 위치를 추적하기 위해 구성된 하드웨어 버퍼를 유지하도록 구성된다. 하드웨어 버퍼는 코드 캐시 내의 변환된 코드의 각각의 위치와 연관된 메모리 내의 각각의 위치로의 각각의 액세스에 기초하여 업데이트된다. 프로세서는 또한 하드웨어 버퍼를 액세스한 이후에 메모리 위치를 수정하는 요청을 실행하도록 구성된다.

Description

자기 수정 코드에 하드웨어 지원을 제공하는 방법 및 장치{METHOD AND APPARATUS FOR PROVIDING HARDWARE SUPPORT FOR SELF-MODIFYING CODE}
관련 출원의 상호참조
본 출원은 "METHOD AND APPARATUS FOR PROVIDING HARDWARE SUPPORT FOR SELF MODIFYING CODE(자기 수정 코드에 하드웨어 지원을 제공하는 방법 및 장치)"라는 명칭으로, 2014년 05월 12일자로 출원한 대리인 사건 관리 번호 SMII-207인, 공동 소유의 미국 가출원 제61/991,951호의 우선권 및 이득을 주장하며, 이 출원의 전체 내용은 본 명세서에서 참조 문헌으로서 인용된다.
배경기술
자기 수정 코드(self modifying code, SMC)는 일부 소프트웨어 코드가 실행하기 이전에 자체의 일부를 수정하는 최적화 기술이다. SMC는 자바 프로그래밍 언어와 같은 저스트-인-타임(JIT) 컴파일 시스템에 사용될 수 있다. 코드 변환을 사용하는 시스템에서, 게스트 코드(guest code)의 자기 수정은, 게스트 코드 수정(guest code modification, GCM)이 검출되어야 하고 코드 캐시 내의 대응하는 변환된 트레이스가 새로운 코드에 기초하여 무효 또는 재생되어야 하기 때문에, 특정 과제를 제시한다.
GCM의 검출은 발생할 수 있는 코너 케이스(corner case)이기 때문에 도전이 될 수 있다. 코너 케이스는 미세하게 인터리브된 코드 및 기록 가능한 데이터를 포함할 수 있으며, 예를 들어, 별도의 명령어 및 데이터 경로를 갖는 하버드 프로세서에 대해, GCM은 코드가 캐시 가능한 메모리에 저장되어 있다면, 코드 수정을 표시하기 위해 게스트 아키텍처에 특정 코드 시퀀스를 요구할 수 있다.
코너 케이스는 코드 위치가 중앙 처리 유닛(central processing unit, CPU)과 상이한 메모리 마스터에 의해 기록될 때를 더 포함할 수 있다. 예를 들어, 일부 직접 메모리 액세스(direct memory access, DMA) 프로세스는 코드를 실행하기 전에 외부 주변기기로부터 코드를 다운로드한다. 종종, DMA 메모리 기록 동작이 CPU에 가시화될 수 있고 고려될 수 있도록 입력/출력 메모리 관리 유닛(Input/Output Memory Management Unit, IOMMU)이 제공된다.
자기 수정 게스트 코드 및 함께 GCM으로서 알려진 게스트 코드의 DMA 수정을 처리할 필요성이 있다. 실시예는 코드 캐시에 저장된 코드의 트레이스에 대응하는 메모리 영역에 대한 변경을 식별하기 위해 구성된다. 실시예는 또한 코드 캐시에서 변환된 코드의 위치를 추적하기 위해 구성될 수 있다. 자기 수정 코드가 존재할 수 있는 경우 데이터의 페치가 지원될 수 있다. 자기 수정 코드의 검출과 코드 캐시 내 코드의 트레이스의 대체가 실행되는 동안 수행이 향상된다.
실시예는 자기 수정 코드에 필요한 지원을 제공하기 위한 장치로서 구현된다. 장치는 메모리, 하드웨어 버퍼, 및 프로세서를 포함한다. 프로세서는 게스트 코드를 네이티브 코드로 변환하고 변환된 게스트 코드를 프로세서의 코드 캐시 부분에 저장하도록 구성된다. 프로세서는 또한 코드 캐시 내의 변환된 코드의 각각의 위치를 추적하기 위해 구성된 하드웨어 버퍼를 유지하도록 구성된다. 하드웨어 버퍼는 코드 캐시 내의 변환된 코드의 각각의 위치와 연관된 메모리 내의 각각의 위치로의 각각의 액세스에 기초하여 업데이트된다. 프로세서는 또한 하드웨어 버퍼를 액세스한 이후에 메모리 위치를 수정하는 요청을 실행하도록 구성된다.
전술한 내용은 요약이며, 필요에 따라, 세부 사항의 단순화, 일반화, 생략을 포함하며, 결과적으로, 본 기술에 통상의 지식을 가진 자라면 개요는 단지 예시적일 뿐이며 제한하기 위한 것이 아니라는 것을 인식할 것이다. 다른 측면, 발명의 특징 및 본 발명의 장점은 특허 청구 범위에 의해 정의된 것처럼 아래에 설명하는 비제한적인 상세한 설명에서 자명해질 것이다.
본 개시의 다른 관점은 첨부된 도면을 참조하여 단지 예로서 주어진 다음의 설명으로부터 명백해질 것이다.
도 1은 다양한 실시예에 따른, 게스트 명령어 블록이 네이티브 변환 블록으로 변환되는 블록-기반 변환 프로세스를 도시한 다이어그램을 도시한다.
도 2는 다양한 실시예에 따라 게스트 명령어 블록과 이에 대응하는 네이티브 변환 블록이 캐시 내에 저장되는 방식을 예시하는 예시적인 하드웨어 가속 변환 시스템의 다이어그램을 도시한다.
도 3은 다양한 실시예에 따른, 시스템의 페이지 사이즈보다 작은 조밀도(granularity)로 게스트 코드를 추적하기 위한 시스템의 예시적인 컴포넌트를 도시한다.
도 4a 및 도 4b는 다양한 실시예에 따른, 코드 캐시 내의 변환된 코드의 위치를 추적하기 위한 예시적인 전자 컴포넌트 제어 프로세스의 플로우차트를 도시한다.
도 5는 다양한 실시예를 포함하는 예시적인 계산 시스템의 블록도이다.
다음 상세한 설명에는 특정 방법 순서, 구조, 요소 및 연결과 같은 복수의 특정 세부 사항이 기재되어 있다. 그러나 이러한 특정 세부 사항 및 다른 특정 세부 사항은 본 발명의 실시예를 실행하기 위해 이용될 필요가 없다는 것을 이해해야 한다. 다른 상황에서는 공지된 구조, 요소 또는 연결이 생략되거나, 특히, 본 설명을 불필요하게 모호하게 하는 것을 피하기 위해 상세히 설명되지 않는다.
명세서 내에서 “일 실시예” 또는 “실시예”라고 말하는 것은 실시예와 관련하여 설명된 특정한 특징, 구조 또는 특성이 본 발명의 적어도 하나의 실시예에 포함된다는 것을 의미하는 것으로 의도된다. 명세서 내의 여러 곳에서 "일 실시예에서"라는 문구가 출현한다 하여 모두 동일한 실시예를 말하는 것은 아니며, 또한 다른 실시예의 상호 배타적으로 별개 또는 대안의 실시예라는 것도 아니다. 임의의 청구된 실시예는 본 개시의 "개체" 또는 "실시예"를 반드시 모두 포함하는 것이 아니라는 것을 유의해야 한다.
또한, 일부 실시예에 의해 나타날 수 있지만 다른 실시예에 의해 나타나지 않는 다양한 특징들이 설명된다. 유사하게, 일부 실시예의 요구 조건이 될 수 있지만 다른 실시예에서는 그렇지 않은 다양한 요구 사항이 설명되어 있다.
다음에 설명되는 상세한 설명의 일부는 컴퓨터 메모리 내의 데이터 비트에 대한 절차, 단계, 로직 블록, 처리, 및 동작의 다른 부호적 표면의 측면에서 제공된다. 이러한 설명 및 표현은 데이터 처리 기술에서 통상의 지식을 가진 자가 자기들의 작업의 실체를 본 기술에서 통상의 지식을 가진 자에게 가장 효과적으로 전달하기 위해 사용되는 수단이다. 본 명세서에서 절차, 컴퓨터 실행 단계, 로직 블록, 프로세스 등은 일반적으로 원하는 결과에 이르는 자체 일관성 있는 단계 또는 명령어의 시퀀스라고 이해된다. 이러한 단계는 물리적 양의 물리적 조작을 필요로 하는 단계이다. 통상적으로, 필수적인 것은 아니지만, 물리적 양은 컴퓨터 판독 가능한 저장 매체의 전기 또는 자기 신호의 형태를 취하며, 저장, 전달, 결합, 비교될 수 있고, 그렇지 않으면, 컴퓨터 시스템에서 조작될 수 있다. 이러한 신호를 비트, 값, 요소, 심볼, 문자, 용어, 숫자 등으로서 지칭하는 것은 주로 공통으로 사용한다는 이유 때문에 편리하다고 입증된 것이다.
그러나 이러한 용어 및 유사한 용어 모두는 적당한 물리적인 양과 연관되고, 이들 양에 적용되는 단지 편리한 표시라는 것을 명심해야 한다. 다음과 같은 설명으로부터 명백해지는 것처럼 달리 구체적으로 명시되지 않는 한, 본 발명의 전체에서, "처리" 또는 "액세스" 또는 "기록" 또는 "저장" 또는 "복제" 등과 같은 용어를 사용하는 설명은 컴퓨터 시스템의 레지스터와 메모리 및 다른 컴퓨터 판독 가능한 매체 내에 물리적 (전자) 양으로서 표현되는 데이터를 컴퓨터 시스템 메모리 또는 레지스터 또는 다른 그러한 정보 저장, 전송 또는 디스플레이 디바이스 내의 물리적 양으로서 유사하게 표현되는 다른 데이터로 조정 및 변환하는 컴퓨터 시스템, 또는 유사한 전자 계산 디바이스의 동작 및 프로세스를 지칭한다는 것으로 인식된다.
이제 본 개시의 다양한 실시예에 대해 상세하게 참조될 것이며, 본 개시의 예는 첨부된 도면에 예시되어 있다. 그뿐만 아니라, 본 개시의 상세한 설명에서, 복수의 특정 세부 사항은 본 개시의 완전한 이해를 제공하기 위해 설명된다. 그러나 본 개시는 이러한 특정 세부 사항 없이도 실시될 수 있다는 것이 이해될 것이다. 다른 예에서, 널리 알려진 방법, 절차, 컴포넌트, 및 회로는 본 개시의 관점을 불필요하게 모호하게 되지 않도록 상세히 설명되지 않는다.
실시예는 코드 캐시에 저장된 코드의 트레이스에 대응하는 메모리 영역에 대한 변경을 식별하기 위해 구성된다. 실시예는 또한 코드 캐시 내의 변환된 코드의 위치를 추적하기 위해 구성될 수 있다. 자기 수정 코드의 검출 및 코드 캐시 내의 코드의 트레이스의 교체가 실행되면서 수행은 향상된다.
도면은 다양한 실시예에 의해 사용되는 컴포넌트를 예시한다. 비록 특정 컴포넌트가 도면에 개시되어 있지만, 이러한 컴포넌트는 예시적인 것이라는 것을 인식해야 한다. 즉, 실시예는 다양한 다른 컴포넌트 또는 도면에 인용된 컴포넌트의 변형을 갖는 것이 바람직하다. 도면의 컴포넌트는 제공된 것 이외의 다른 컴포넌트와 함께 동작할 수 있고, 도면의 모든 컴포넌트가 실시예의 목표를 달성하기 위해 필요한 것이 아니라는 것을 인식해야 한다.
도 1은 다양한 실시예에 따른, 게스트 명령어 블록이 네이티브 변환 블록으로 변환되는 블록-기반 변환 프로세스를 도시한 다이어그램을 도시한다. 도 1에 예시된 바와 같이, 대응하는 복수의 네이티브 변환 블록(102)으로 변환되는 복수의 게스트 명령어 블록(101)이 도시되어 있다.
본 발명의 실시예는 게스트 명령어 블록의 명령어를 대응하는 네이티브 변환 블록의 명령어로 변환하는 기능을 한다. 각 블록(101)은 게스트 명령어로 구성된다. 이러한 게스트 명령어는 많은 다른 게스트 명령어 아키텍처(예를 들어, 자바, 자바스크립트, x86, MIPS, SPARC, 등)로 구성될 수 있다. 복수의 게스트 명령어 블록은 하나 이상의 대응하는 네이티브 변환 블록으로 변환될 수 있다. 이러한 변환은 명령어 단위로 발생한다.
도 2는 다양한 실시예에 따른, 게스트 명령어 블록과 이에 대응하는 네이티브 변환 블록이 캐시 내에 저장되는 방식을 예시하는 예시적인 하드웨어 가속 변환 시스템(200)의 다이어그램을 도시한다. 도 2에 예시된 바와 같이, 변환 룩 어사이드 버퍼(conversion look aside buffer, CLB)(206)는 게스트 및 네이티브 블록 사이의 어드레스 맵핑을 캐시하는데 사용되어, 가장 빈번하게 발생하는 네이티브 변환 블록이 낮은 지연 가용성을 통해 프로세서(208)에 액세스된다.
도 2의 다이어그램은 빈번하게 발생하는 네이티브 변환 블록이 고속의 낮은 지연 캐시, 즉 변환 룩 어사이드 버퍼(206) 내에 유지되는 방식을 예시한다. 도 2에 도시된 컴포넌트는 훨씬 높은 레벨의 수행을 제공하는 하드웨어 가속 변환 처리를 구현한다.
게스트 페치 로직 유닛(202)은 게스트 명령어를 시스템 메모리(201)로부터 페치하는 하드웨어-기반 게스트 명령어 페치 유닛으로서 기능을 한다. 소정의 애플리케이션의 게스트 명령어는 시스템 메모리(201) 내에 상주한다. 프로그램을 시작할 때, 하드웨어-기반 게스트 페치 로직 유닛(202)은 게스트 명령어를 게스트 페치 버퍼(203)에 프리페치하기 시작한다. 게스트 페치 버퍼(207)는 게스트 명령어를 누산하고 이를 게스트 명령어 블록으로 조립한다. 이러한 게스트 명령어 블록은 변환 테이블(204)을 사용하여 대응하는 네이티브 변환 블록으로 변환된다. 변환된 네이티브 명령어는 네이티브 변환 블록이 완료될 때까지 네이티브 변환 버퍼(205) 내에 누산된다. 네이티브 변환 블록은 네이티브 캐시(207)에 전송되고, 맵핑은 변환 룩 어사이드 버퍼(206)에 저장된다. 이후 네이티브 캐시(207)는 네이티브 명령어를 실행을 위한 프로세서(208)에 제공하는데 사용된다. 일 실시예에서, 게스트 페치 로직 유닛(202)에 의해 구현되는 기능은 게스트 페치 로직 상태 머신에 의해 생성된다.
이러한 프로세스가 계속되므로, 변환 룩 어사이드 버퍼(206)는 게스트 블록의 네이티브 블록과의 어드레스 맵핑으로 채워진다. 변환 룩 어사이드 버퍼(206)는, 보다 빈번하게 발생하는 블록 맵핑이 버퍼 내에 유지되는 반면에, 드물게 발생하는 블록 맵핑이 버퍼로부터 제거되는 것을 보장하기 위하여, 하나 이상의 알고리즘(예를 들어, 가장 최근에 사용 등)을 사용한다. 이러한 방식에서, 핫 네이티브 변환 블록 맵핑은 변환 룩 어사이드 버퍼(206) 내에 저장된다. 또한, 이러한 타겟 블록은 단일의 맵핑된 네이티브 블록 내에 스티칭되기 때문에, 네이티브 블록 내의 완전히 예측된 먼 게스트 분기는 새로운 맵핑을 CLB에 삽입할 필요가 없고, 그래서 CLB 구조에 대해 소용량 효율을 보존할 수 있다는 것을 주목해야 한다. 그뿐만 아니라, 일 실시예에서, CLB(206)는 단지 엔딩 게스트만을 네이티브 어드레스 맵핑에 저장하도록 구성된다. 이러한 국면 또한 CLB의 소용량 효율을 보존한다.
게스트 페치 로직(202)은 게스트 명령어 블록으로부터의 어드레스가 네이티브 변환 블록으로 이미 변환되었는지를 결정하기 위해 변환 룩 어사이드 버퍼(206)를 고려한다. 전술한 바와 같이, 본 발명의 실시예는 변환 처리를 위한 하드웨어 가속을 제공한다. 이에 따라, 게스트 페치 로직(202)은 기존의 네이티브 변환 블록 맵핑에 필요한 변환 룩 어사이드 버퍼(206)를 고려한 다음에 게스트 어드레스를 새로운 변환을 위해 시스템 메모리(201)로부터 페치할 것이다.
일 실시예에서, 변환 룩 어사이드 버퍼는 게스트 어드레스 범위 또는 개별 게스트 어드레스에 의해 인덱스된다. 게스트 어드레스 범위는 네이티브 변환 블록으로 변환되었던 게스트 명령어 블록의 어드레스의 범위이다. 변환 룩 어사이드 버퍼에 의해 저장된 네이티브 변환 블록 맵핑은 그 맵핑의 대응하는 게스트 명령어 블록의 대응하는 게스트 어드레스 범위를 통해 인덱스된다. 따라서, 게스트 페치 로직은 게스트 어드레스를 게스트 어드레스 범위 또는 맵핑이 변환 룩 어사이드 버퍼(206)에 유지되는 변환된 블록의 개별 게스트 어드레스와 비교하여, 기존의 네이티브 변환 블록이 네이티브 캐시(207) 또는 도 3의 코드 캐시에 저장된 무언가의 내부에서 상주하는지를 결정할 수 있다. 기존의 네이티브 변환 블록이 네이티브 캐시 또는 코드 캐시 중 어느 하나의 캐시에 있다면, 대응하는 네이티브 변환 명령어는 이러한 캐시로부터 직접 프로세서에 전달된다.
이러한 방식으로, 핫 게스트 명령어 블록(예를 들어, 빈번하게 수행되는 게스트 명령어 블록)은 고속의 낮은 지연의 변환 룩 어사이드 버퍼(206) 내에 유지되는 대응하는 핫 네이티브 변환 블록 맵핑을 갖는다. 블록이 터치될 때, 적당한 교체 정책은 핫 블록 맵핑이 변환 룩 어사이드 버퍼에 남아 있는 것을 보장한다. 이러한 이유로, 게스트 페치 로직(202)은 요청된 게스트 어드레스가 사전에 변환되었는지를 빠르게 확인할 수 있고, 사전에 변환된 네이티브 명령어를 프로세서(208)에 의해 수행하기 위해 직접 네이티브 캐시(207)에 전달할 수 있다. 이러한 국면은, 시스템 메모리로의 이동이 40 내지 50 사이클 이상을 취할 수 있기 때문에, 많은 사이클을 절약한다. 이들이러한 속성(예를 들어, CLB, 게스트 분기 시퀀스 예측, 게스트 및 네이티브 분기 버퍼, 이전의 네이티브 캐싱)은 본 발명의 실시예의 하드웨어 가속 기능이 게스트 애플리케이션의 애플리케이션 수행을 비교 가능한 네이티브 애플리케이션의 애플리케이션 수행의 80% 내지 100% 내에서 성취할 수 있다.
일 실시예에서, 게스트 페치 로직(202)은 프로세서(208)로부터의 게스트 명령어 요청과 무관한 변환을 위한 게스트 명령어를 계속하여 프리페치한다. 네이티브 변환 블록은 블록이 덜 빈번하게 사용되는 경우 시스템 메모리(201) 내의 변환 버퍼 "코드 캐시" 내에서 누적될 수 있다. 변환 룩 어사이드 버퍼(206)는 또한 가장 빈번하게 사용되는 맵핑을 유지한다. 따라서, 요청된 게스트 어드레스가 변환 룩 어사이드 버퍼 내의 게스트 어드레스에 맵핑하지 않는다면, 게스트 페치 로직은 시스템 메모리(201)를 체크하여 게스트 어드레스가 시스템 메모리에 저장된 네이티브 변환 블록에 대응하는지를 결정하기 위해 할 수 있다.
일 실시예에서, 변환 룩 어사이드 버퍼(206)는 캐시로서 구현되며, 고 레벨의 캐시 및 시스템 메모리(201)에 저장된 훨씬 큰 변환 버퍼와의 일관성을 유지하기 위해 캐시 일관성 프로토콜을 사용한다. 변환 룩 어사이드 버퍼(206) 내에 저장된 네이티브 명령어 맵핑은 또한 높은 레벨의 캐시 및 시스템 메모리(201)에 라이트 백(write back)될 수 있다. 시스템 메모리에 라이트 백은 일관성을 유지한다. 따라서, 캐시 관리 프로토콜은 핫 네이티브 변환 블록 맵핑이 변환 룩 어사이드 버퍼(206) 내에 저장되고, 콜드 네이티브 변환 맵핑 블록이 시스템 메모리(201)에 저장되는 것을 보장하는데 사용될 수 있다. 이에 따라, 훨씬 큰 형태의 변환 버퍼(206)가 시스템 메모리(201)에 상주한다.
일 실시예에서, 도 2의 아키텍처는 복수의 상이한 명령어 아키텍처를 입력으로서 수신할 수 있는 플렉시블 변환 프로세스를 사용하는 가상 명령어 집합 프로세서/컴퓨터를 구현한다. 이러한 가상 명령어 집합 프로세서에서, 프로세서의 프런트 엔드는, 훨씬 높은 레벨의 수행을 제공하기 위해 하드웨어 가속 변환 처리를 사용하면서, 제어되는 소프트웨어가 될 수 있도록 구현된다. 이러한 구현을 사용하여, 다른 게스트 아키텍처는 각기 훨씬 높은 레벨의 수행을 누리기 위해 하드웨어 가속의 이득을 받으면서 처리되고 변환될 수 있다. 게스트 아키텍처의 예는 자바, 자바스크립트, x86, MIPS, SPARC 등을 포함한다. 일 실시예에서, "게스트 아키텍처"는 (예를 들어, 네이티브 애플리케이션/매크로-오퍼레이션으로부터) 네이티브 명령어일 수 있고, 변환 프로세스는 최적화 네이티브 명령어(예를 들어, 최적화된 네이티브 명령어/마이크로-오퍼레이션)을 생성한다. 소프트웨어 제어 프런트 엔드는 프로세서에서 실행하는 애플리케이션에 큰 정도의 유연성을 가능하게 할 수 있다. 전술한 것처럼, 하드웨어 가속은 게스트 애플리케이션의 게스트 명령어의 실행에 가까운 네이티브 하드웨어 속도를 달성할 수 있다.
코드 캐시 내의 변환된 코드를 추적
동일 또는 다른 명령어 집합 아키텍처(Instruction Set Architecture, ISA)에서, 게스트(예를 들어, 소스) 코드를 네이티브(예를 들어, 타겟) 코드로 변환하는 이진 변환을 사용하는 아키텍처는 DMA를 통해 I/O 디바이스에 의해 자기 참조 코드, 자기 수정 코드, 및 크로스 코드 수정의 문제를 처리해야 한다. 실시예는 게스트 코드의 진실 및 거짓 자기 수정 및 게스트 코드의 DMA 수정을 처리하도록 구성된다.
게스트 코드의 DMA 수정에 관련된 상황을 처리할 때, 명령어가 변환되어 코드 캐시에 유지되는 경우에 게스트 페이지를 쓰기 방지(write protect)하도록 기록할 수 있다. 그러나 쓰기 방지된 페이지는, IOMMU를 사용하지 않는 시스템에서, DMA 디바이스에 의한 수정으로 인해 코드 캐시 내의 게스트 코드의 카피를 오래되지 않게 할 수 없다. 또한, 게스트 페이지 조밀도에서 쓰기 방지는 코드가 동일한 페이지 내의 데이터와 혼합되는 경우, 또는 빅 페이지가 드문드문 변환될 때, 수행에 상당한 영향을 미친다.
도 3은 다양한 실시예에 따른, 시스템의 페이지 사이즈보다 작은 조밀도로 게스트 코드를 추적하기 위한 시스템의 예시적인 컴포넌트를 도시한다. 도 3은 코드를 실행하고, 자기 수정 코드를 실행하며, 자기 수정 코드에 응답하여 코드 캐시를 유지하기 위한 컴포넌트를 도시한다. 시스템(300)은 다른 도면에 존재하는 다른 컴포넌트를 더 포함할 수 있다는 것을 주목한다.
프로세서(302)는 메모리(310)에 저장된 프로그램 및/또는 코드를 실행하도록 구성된다. 프로세서(302)는 프레즌트 인 코드 캐시 버퍼(Present in Code Cache Buffer, PCB)(308), PCB 연관 레지스터(314), 캐시(320), 자기 수정 코드(SMC) 검출 모듈(330), 및 실행 기능 모듈(350)을 포함한다. 메모리(310)는 프레즌트 인 코드 캐시 테이블(PCT)(312)을 포함한다. 실행 기능 모듈(350)은 하나 이상의 처리 코어 및 명령어를 페치하기 위한 기능을 포함할 수 있다.
SMC 검출 모듈(330)은 자기 수정 코드에 의해 코드로의 수정을 검출 및/또는 결정하도록 구성된다. 일부 실시예에서, SMC 검출 모듈(330)은 실행 기능 모듈(350)과 통신하여 자기 수정 코드가 자체적으로 수정할 때를 결정한다.
실행 기능 모듈(350)은 프로세서(302)가 캐시(320) 및/또는 메모리(310)로부터 액세스되는 프로그램 및/또는 코드를 실행할 수 있도록 구성될 수 있다. 캐시(320)는 코드 캐시(322) 및 데이터 캐시(324)를 포함한다. 코드 캐시(322)는 프로세서(302)의 수행을 증가시키기 위해 메모리(310)로부터의 코드를 캐시하도록 구성된다. 데이터 캐시(324)는 프로세서(302)의 수행을 증가시키기 위해 메모리(310)로부터의 데이터를 캐시하도록 구성된다.
일부 실시예에서, 코드 캐시(322) 및 데이터 캐시(322)는 결합되고, 이에 의해, 캐시(320)는 함께 저장된 코드 및 데이터를 포함한다. 예를 들어, 코드 및 데이터는 캐시(320)에서 인터리브될 수 있다.
실시예는 가장 작은 페이지 사이즈보다 더 작은 조밀도로 게스트 코드를 추적하도록 구성되며, 이에 의해, 게스트 코드의 추적 및 보호를 개선한다. 이러한 보다 작은 조밀도로, 예를 들어, MMU의 캐시 라인의 사이즈는 변환된 게스트 코드 페이지로 저장소에 저장할 수 없을 수 있다. 실시예는 코드 캐시(322)내의 변환된 코드를 맵핑 및 추적을 위해 프레즌트 인 코드 캐시 테이블(Present in Code Cache Table, PCT)(312)을 사용한다. 저장 또는 DMA 쓰기(DMA write)는 저장 또는 DMA 쓰기가 전체적으로 가시적일 수 있기 이전에 PCT(312)를 참조한다.
일부 실시예에서, 메모리 상주 구조인 PCT(312)의 액세스와 연관된 메모리 지연을 숨기기 위하여, 더 작은 캐시 버전의 PCT(312)가 프로세서(302)에 저장되며 프레즌트 인 코드 캐시 버퍼(PCB)(308)로서 공지되어 있다. 저장 또는 DMA 쓰기가 소정의 페이지 어드레스(page address, PA)로 발생할 때, 액세스는 PCB(308)에서 수행된다. 액세스가 PCB(308)에서 수행되지 못할 때, 액세스는 PCT(312)에서 수행된다. PCB(308) 및/또는 PCT(312)를 찾는 동안, 변환된 캐시 라인이 저장되어야 한다면, 원하는 방법(eager method)으로 알려진 어떤 저장을 수행하는 스레드/코어를 예외로 하는 옵션을 제공한다. 시스템 레지스터에서 스레드/코어의 예외 타겟 ID를 저장함으로써 저장을 실행하는 스레드/코어와는 다른 스레드/코어에 대한 예외를 조정할 수 있다는 것이 주목된다.
일부 실시예에서, 게스트 분기가 PCB(308) 및/또는 PCT(312)일 때, 원치 않는 방법(lazy method)으로 알려진 어떤 방법에서, 나중에 예외가 생길 수 있다. 또한, 참조 및 수정 모두 다에 대해 임의의 예외를 제한할 수 있다.
변환된 페이지(예를 들어, 4K 페이지) 내 캐시 라인에 저장 또는 DMA 쓰기 시에, PCB(308)에 엔트리가 부가되며 이 엔트리는 수정된 것으로 표시된다. 일부 실시예에서, 변환되지 않은 데이터 또는 게스트 코드로의 저장은 매 저장마다 PCT(312)로 진행하지 않는다. 변환되지 않은 데이터 또는 게스트 코드에 대한 각각의 저장 시에 PCB(308)로의 액세스는 PCB(308)가 캐시(예를 들어, L2 캐시) 내 각각의 페이지(예를 들어, 4K 페이지)를 맵핑하기 위한 크기가 되고 PCB(308)가 PCB(308) 내의 PCT(312)의 히트(hit) 및 미스(miss) 정보를 캐시하는 경우라면 피할 수 있다.
코드 캐시(322)는 다양한 사이즈일 수 있다. 예를 들어, 게스트 코드는 사이즈가 최대 64 MB가 될 수 있다. 일부 실시예에서, 게스트 캐시 라인은, 게스트 캐시 라인이 속하고 PCT(312)에서 맵핑되지 않은 게스트 페이지(예를 들어, 4K 페이지) 없이, 코드 캐시(322) 내의 변환된 네이티브 명령어를 갖지 않을 것이다. 다시 말해서, 게스트 캐시 라인은 게스트 캐시 라인이 속하고 PCT(312)에서 맵핑된 게스트 페이지와 함께 코드 캐시(322) 내의 변환된 캐시 라인을 가질 것이다. 예를 들어, 코드 캐시(322) 내의 각 64 바이트 캐시 라인은 유일한 게스트 코드 4K 페이지로 될 수 있고, PCT(312)는 100만 엔트리(예를 들어, 64MB/64B)를 갖는다. PCT(312)는 여러 방식으로 코드 캐시(322)의 구성을 가능하게 하는 크기를 가질 수 있다. 표 1은 프레즌트 인 코드 캐시 테이블 엔트리(Present in Code cache Table entry, PCTE)(예를 들어, 변환 테이블 엔트리(translation table entry, TTE)와 유사할 수 있음)로서 공지된 PCT(312)의 엔트리의 비트 레이아웃을 도시한다.
Figure 112016110538661-pct00001
일부 실시예에서, PCT(312)의 여러 PCTE는 단일 캐시 라인으로 그룹화되고, 이에 따라, 캐시 라인의 페치에 응답하여 여러 PCTE의 캐싱이 가능해진다. 예를 들어, 4개의 연속된 PCTE는 하나의 64B 캐시 라인으로 그룹화될 수 있고, 그룹을 페치할 때, 4개의 연속된 PCTE는 단일 L2 캐시 라인으로 캐싱된다. PCT(312)는 N 세트 어쏘시에이티브(N way set associative) 방법인 해시 테이블 또는 캐시로서 메모리에 구성될 수 있다.
일부 실시예에서, 변환이 게스트 분기에 가시적이도록 엔트리를 CLB/CLT에 삽입하기 이전에, 엔트리는 소프트웨어에 의해 PCT(312)에 삽입된다. PCT(312)는 PCB(308)로부터 라이트 백할 때 수정된 비트를 1로 설정하는 하드웨어를 이용하는 소프트웨어에 의해 유지될 수 있다. PCT(312)의 업데이트는 소프트웨어 또는 하드웨어 또는 이들의 조합에 의해 처리될 수 있다. PCT(312)의 업데이트는 캐시들에 기초하여 하드웨어에 의해 캐시될 수 있으며, 하나의 스레드/코어에 의한 업데이트는 다른 스레드/코어에 가시적일 수 있다. 일부 실시예에서, PCB(308)와 연관된 로직은 PCTE의 수정된 비트(예를 들어, 0을 1로 천이)를 업데이트하며, 소프트웨어는 PCTE의 각 비트를 업데이트할 수 있다. 하드웨어 및 소프트웨어 모두에 의한 동시적 업데이트에 의한 데이터 손상을 방지하기 위하여, PCTE의 수정된 비트에 일곱 개의 상위 비트가 예약될 수 있다. 이것은 동일한 캐시 라인에 소프트웨어 업데이트와의 충돌 없이 수정된 비트에 하드웨어에 의한 바이트 쓰기를 가능하게 한다.
PCB 관련 레지스터(314)는 PCT 태그 레지스터(PCT Tag Register, PCTTR)를 포함할 수 있다. 일부 실시예에서, 번역기 또는 컨버터는 PCTTR 레지스터가 하드웨어(예를 들어, 프로세서(302))에 PCT(312)의 태그 및 인덱스 비트를 표시하도록 프로그래밍한다. 표 2는 PCTTR의 예시적인 필드를 나타낸다.
Figure 112016110538661-pct00002
일부 실시예에서, 페이지 어드레스 마스크(Page Address Mask, PAM)는 연속되지 않은 1을 갖지 않도록 구성된다. PAM 필드는 PCTE 태그(예를 들어, PCTE.Tag[39:12] & PAM[39: 12])에서 발견된 페이지 어드레스 값에 대한 마스크로서 작용한다. 예를 들어, PAM[39:12] == 0xFFF_FF00인 경우, PAM[19:12]은 PCT(312)로의 인덱스로서 작용하고, PAM[39:20]은 PCT(312) 내의 태그 비트이다. 그러므로 PCT(312)에 PCTE를 넣을 때, 컨버터는 PCTE.Tag[101:82]에 PAM[39:20] 비트를 프로그래밍한다. PCTE.Tag[81:74] 비트는 염두에 두지 않는다.
PCB 연관 레지스터(314)는 PCT 구성 레지스터(PCT Configuration Register, PCTCR)을 포함할 수 있다. GCM은 본 명세서에서 예외를 말하는 데 사용된다. 표 3은 PCTCR의 예시적인 필드를 나타낸다.
Figure 112016110538661-pct00003
일부 실시예에서, SETV 및 BETV가 1인 경우, 예외는 SET 및 BET 필드에서 프로그래밍된 스레드/코어에 대해 (PCTE.A 필드에 적응하여) 발생된다. 그렇지 않으면, 예외는 저장 또는 분기가 실행되는 스레드/코어에 대해 (PCTE.A 필드에 적응하여) 발생된다. 일부 실시예에서, DETV 필드는 항상 1이다. 예외는 DET 필드에서 프로그래밍된 스레드/코어에 대해 (PCTE.A 필드에 적응하여) 발생된다. SEV가 제로인 경우, 저장에 대해 어떠한 예외도 대해 발생되지 않는다. BEV가 제로인 경우, 분기에 대해 어떠한 예외도 발생되지 않는다. DEV가 제로인 경우, DMA 액세스(예를 들어, DMA 저장)에 대해 어떠한 예외도 발생되지 않는다. DMAGCMEN가 제로인 경우, 로직은 PCB(308) 및/또는 PCT(312)를 찾지 않고, DMA 액세스를 처리하는 것이 가능해진다. GCMEN가 제로인 경우, (예를 들어, 어레이 및 로직을 포함하는) PCB(308)에는 전원이 차단될 수 있다.
일부 실시예에서, PCB(308)는 칩(예를 들어, 프로세서(302)의 일부) 상에 존재하며, 저장 및 게스트 분기에 따라 PCT(312)의 PCTE를 캐시하는 스레드/코어 관용적(agnostic) 구조이다. PCB(308)는 확장된 시스템 레지스터를 통해 제공된 유지보수 동작 내내 소프트웨어에 가시적일 수 있다.
MMU로부터 얻은 페이지 어드레스를 사용하여, 저장은 PCB(308) 내의 엔트리를 찾는다. 만일 액세스가 PCB(308)에서 히트이며 매칭 캐시 라인이 1로 설정된 C(변환된) 비트를 갖는다면, 저장은 Mo(Mold)가 이전에 1이 아닌 경우 Mn(Mnew)을 1로 설정할 것이다.
만일 저장이 PCB(308)에서 미스이면, PCT 워크(PCT walk, PCTW)는 PCT(312)로부터 PCTE를 페치하기 시작한다. PCTW를 완료할 때, 만일 매칭 PCTE가 발견되면, PCTE는 있는 그대로 PCB(308)에 인스톨되며, 그렇지 않으면, 새로운 엔트리는 PCB(308)에서 C, Mnew, 및 Mold 비트가 0으로 설정되어 생성된다. PCB(308)에 PCTE를 인스톨하는 프로세스에서, 만일 대체되는 엔트리가 1로 설정된 Mn 비트를 갖는다면, 라이트 백이 필요할 수 있다.
적재(load)는 PCB(308)와의 직접적인 상호작용을 갖지 않을 수 있다는 것을 주목해야 한다. 그러나 적재가 PCB(308)에 최근 액세스했던 페이지(예를 들어, 4K 페이지)에 대해 PCTE를 페치함으로써, 적재와 저장 사이의 참조의 지역성을 이용할 수 있다.
DMA 쓰기 및 읽기는 프로세서(302)의 프로세서 코어를 통해 메인 메모리에 라우팅될 수 있다. 이러한 DMA 쓰기는 PCB(308)를 스누프하여 M 비트를 설정할 수 있으며, 선택적으로는 원하는 예외를 만들 수 있다.
일부 실시예에서, 게스트 분기는 CLB 및 PCB(308) 내 엔트리를 (예를 들어, TLB 룩업으로부터 취득한 게스트 물리 어드레스를 이용하여) 병렬로 검색한다. CLB, CLT와, PCB(308)와, PCT(312) 사이에는 소정의 게스트 물리 어드레스에 대해 일관된 관점이 있을 것으로 예상된다. 예를 들어, 엔트리는 CLB/CLT에서 히트, PCT(312)에서 미스 또는 PCT(312)에서 히트일 수 없으며, C 비트는 1로 설정되지 않는다.
게스트 분기가 PCB(308)에서 미스이면, 심지어 CLB에서 미스가 있을 수 있어도 PCTW는 개시된다.
PCTW가 완료되면, PCTE는 PCB(308)에 인스톨될 수 있다(예를 들어, 동일한 타겟으로의 미래의 게스트 분기의 수행을 증가시킨다). PCTE를 PCB(308)에 인스톨하는 프로세스에서, 대체되는 엔트리가 1로 설정된 Mn 비트를 갖는다면, 라이트 백이 필요할 수 있다.
일부 실시예에서, 게스트 분기는 트랩하거나, PCTE.A 비트와 함께 PCB(308)의 PCTE.M[new] 및 PCTE.M[old]에 기초하지도 않는다.
실시예는 분기 명령어를 지원하도록 구성된다. 분기 명령어는 게스트 수정으로 인하여 변환이 진부한지를 확인하기 위해 PCB(308) 및/또는 PCT(312)에서 검색한다. 분기 명령어는 TLB 룩업을 초기화하고 뒤이어 PCB(308) 및/또는 PCT(312)의 검색이 이어진다. 예를 들어, 검색의 결과가 PCB(308)에서 미스이면, PCTW는 PCTE를 PCT(312)로부터 페치하기 시작한다.
PCTW가 완료되면, PCTE는 PCB(308)에 인스톨될 수 있다(예를 들어, 동일한 트레이스로의 미래의 분기 명령어에 대한 수행을 높여준다). PCTE를 PCB(308)에 인스톨하는 프로세스에서, 만일 대체되는 엔트리가 1로 설정된 Mn 비트를 갖는다면, 라이트 백이 필요할 수 있다.
일부 실시예에서, PCB(308)는 PCT 히트 및 미스 정보를 저장한다. 이것은 대부분의 저장은 변환되지 않은 데이터 또는 코드 중 어느 하나이며, 그와 같은 저장은 PCT(312)에서 미스가 될 것이라는 사실에 기초한다. PCT(312)에서 미스되리라 예상되는 대부분의 저장에 대해 PCT 검색을 수행하기 위해, PCB(308)는 PCT 히트 및 미스 정보를 캐시하는데 사용된다. 이것은 동일한 페이지(예를 들어, 4K 페이지)에 저장하는 것에 응답하여 미래의 PCT 룩업의 회피를 가능하게 해준다.
예를 들어, PCB(308)는 L2 캐시에 상주하는 가능한 4K 페이지를 매번 맵핑하도록 구성되기 때문에, PCB(308)는 L2 캐시와 동일한 개수의 방식을 갖는 캐시로서 구성될 수 있다(예를 들어, L2 캐시의 각각의 방식에서 최대 32 4K 페이지가 있을 수 있다).
일부 실시예에서, PCB(308)는 각 방향에 32 엔트리를 갖는 8-웨이 어쏘시에이티브 캐시이다. 각 엔트리는 PCT 히트 및 미스 정보를 4K 페이지에 제공한다. PA[16:12] 비트는 설정을 선택하기 위한 인덱스 비트이다. 표 4는 예시적인 PCB 엔트리(PCBE)의 레이아웃을 도시한다.
Figure 112016110538661-pct00004
* y 값은 PCTE.Tag에서 찾은 것과 동일할 수 있다. 어드레스의 40b까지 지원하는 대규모 물리 어드레스 확장(Large Physical Address Extension, LPAE) 시스템에서는 y가 39이다.
일부 실시예에서, PCB(308)는 시스템 레지스터와 함께 소프트웨어를 통해 유지될 수 있다. PCBE는 PA에 기초하여 무효화될 수 있다. 예를 들어, 변환이 진부하거나 새로운 트레이스가 생성될 때, 소프트웨어는 PCB의 엔트리를 무효화할 수 있다. PCBE는 PA에 기초하여 정리(clean)될 수 있다. 예를 들어, 만일 Mold 및 Mnew가 설정되고 엔트리가 유효하면, PCBE는 메모리(310)에 기록되고, PCT(312) 및 PCBE는 계속해서 유효하다. 이러한 동작은 컨버터가 PCT(312) 내 PA에 대해 임의의 유지에 앞서 PCTE를 PCBE와 동기화하게 한다. PCBE는 PA에 기초하여 정리될 수 있으며 무효화될 수 있다. 예를 들어, 만일 Mold 및 Mnew가 설정되고 엔트리가 유효하다면, PCBE는 메모리(310)에 기록되고, PCBE는 무효화된다. 각 PCBE 엔트리는 초기화 동안 또는 컨버터가 코드 캐시(322)를 정리할 때 무효화될 수 있다. 수정된 엔트리는 메모리(310) 및 PCT(312)에 라이트 백되지 않을 수 있음을 주목해야 한다. 각 PCBE는 정리되고 무효화될 수 있다. 예를 들어, 이러한 동작은 PCB(308) 내 수정된 엔트리가 PCT(312)에 라이트 백되게 하고, 그런 다음 PCB(308) 내 각 엔트리가 무효화되게 한다.
PCB 연관 레지스터(314)는 PCB 유지 레지스터(PCB Maintenance Register, PCBMR)를 포함할 수 있다. 표 5는 PCBMR의 필드를 도시한다. 일부 실시예에서, 유지가 인덱스 기반인 경우, PA[16:12]는 WAY 비트와 함께 인덱스 비트로서 사용된다.
Figure 112016110538661-pct00005
PCB 연관 레지스터(314)는 PCT 베이스 어드레스 레지스터(PCT Base Address Register, PCTBAR)를 포함할 수 있다. 표 6은 PCTBAR의 필드를 나타낸다.
Figure 112016110538661-pct00006
PCB 연관 레지스터(314)는 GCM 신드롬 0 레지스터(GCM Syndrome 0 Register, GCMSOR)를 포함할 수 있다. 표 7은 GCMSOR의 필드를 나타낸다.
Figure 112016110538661-pct00007
PCB 연관 레지스터(314)는 GCM 신드롬 1 레지스터(GCM Syndrome 1 Register, GCMS1R)를 포함할 수 있다. 표 8은 GCMS1R의 필드를 나타낸다.
Figure 112016110538661-pct00008
실시예는, 이것으로 제한되는 것은 아니지만, 게스트 명령어 분기(Guest Instruction Branch, GIB) 상호작용, PCT 유지, 및 PCB 프리페치에 관한 트레이스를 중단시키는 것을 비롯한 다양한 기술을 사용하여 코너 케이스를 처리하도록 구성된다.
일부 실시예에서, 게스트 분기는 코드 캐시의 오래된 코드를 검출하는데 사용된다. 컨버터는 게스트 분기와 접했을 때 트레이스를 중단하고 단일의 트레이스를 계속한다.
일부 실시예에서, PCT(312)는 소프트웨어에 의해 적재 및 저장을 이용하여 유지된다. PCB(308)의 로직은 수정된 PCBE를 PCT(308)에 라이트 백할 수 있다.
일부 실시예에서, 각 PCBE는 4K 페이지에 맵핑한다. 만일 더 큰 게스트 페이지 사이즈가 채용된다면, PCB 로직은 PCTE를 다음 순서의 4K 페이지에 대해서, PCB(308)에서 히트한 각각의 적재 또는 저장마다 순차적으로 프리페치할 수 있다.
도 4를 참조하면, 플로우차트(400)는 본 명세서에 설명한 것처럼, 데이터를 보호하기 위한 다양한 실시예에 의해 사용되는 예시적인 기능을 예시한다. 특정 기능 블록("블록")이 플로우차트(400)에서 개시되어 있지만, 이와 같은 단계는 예시적이다. 즉, 실시예는 플로우차트(400)에서 인용된 여러 다른 블록 또는 변형 블록을 수행하는데 적합하다. 플로우차트(400)의 블록은 제안된 것과 다른 순서로 수행될 수 있으며, 플로우차트(400)의 블록 모두가 수행되어야 할 필요는 없다는 것을 인식해야 한다.
도 4a 및 도 4b는 다양한 실시예에 따른 코드 캐시 내의 변환된 코드의 위치를 추적하기 위한 예시적인 전자 컴포넌트 제어 프로세스의 플로우차트를 도시한다. 도 4a 및 도 4b는, 일부 실시예와 관련하여, 변환된 코드가 PCB 및 PCT를 가진 코드 캐시에 있는지를 추적하기 위한 프로세스(400)를 도시한다. 프로세스(400)가 PCB 및 PCT에 대해 설명하고 있지만, 프로세스(400)는 동일한 기능을 갖는 다른 데이터 구조 및 구성으로 실행될 수 있다는 것을 인식해야 한다.
블록(402)에서, 게스트 명령어가 액세스된다. 일부 실시예에서, 게스트 명령어는, 본 명세서에 설명된 바와 같이, 게스트 명령어를 네이티브 명령어로 변환하는 컨버터에 의해 액세스된다.
블록(404)에서, 게스트 명령어가 분기인지가 결정된다. 게스트 명령어가 분기 명령어가 아닌 경우, 블록(406)이 수행된다. 게스트 명령어가 분기 명령어인 경우, 블록(450)이 수행된다.
블록(406)에서, 게스트 명령어가 게스트 물리 어드레스의 저장인지가 결정된다. 게스트 명령어가 게스트 물리 어드레스의 저장인 경우, 블록(408)이 수행된다. 게스트 명령어가 게스트 물리 어드레스의 저장이 아닌 경우, 블록(440)이 수행된다.
블록(408)에서, PCB에 미스가 있는지가 결정된다. PCB에서 미스는 페이지 또는 게스트 명령어의 어드레스에 기초하여 결정될 수 있다. PCB에서 미스가 있다면, 블록(410)이 수행된다. PCB에서 미스가 없다면, 블록(422)이 수행된다.
블록(410)에서, PCT에 미스가 있는지가 결정된다. PCT에서 미스는 페이지 또는 게스트 명령어의 어드레스에 기초하여 결정될 수 있다. PCT에서 미스가 있다면, 블록(420)이 수행된다. PCT에서 미스가 없다면, 블록(441)이 수행된다.
블록(412)에서, PCB 엔트리는 축출을 위해 선택된다. 축출을 위한 PCB 엔트리의 선택은 본 명세서에 설명된 것처럼, 최소한 최근 사용 원리에 기초할 수 있다.
블록(414)에서, 선택된 PCB 엔트리의 축출이 수행된다. 블록(416)에서, PCT로부터 캐시 라인 크기 선택이 페치된다. 본 명세서에 설명된 바와 같이, 캐시 라인 규모의 선택은 여러 PCT 엔트리(예를 들어, 4개의 PCTE)를 포함할 수 있다.
블록(418)에서, PCT로부터의 엔트리는 PCB에(예를 들어, 축출된 PCB 엔트리의 위치)에 저장된다.
블록(420)에서, 변환된 게스트 명령어가 수행된다. 일부 실시예에서, 코드 캐시는 게스트 명령어 변환의 일부로서 업데이트된다. 그 다음 블록(402)은 다음 게스트 명령어에 대해 수행될 수 있다.
블록(422)에서, 본 명세서에 설명된 바와 같이, 위치가 변환된 코드를 갖는지가 결정된다. 위치가 변환된 코드를 갖는 경우, 블록(424)이 수행된다. 위치가 변환된 코드를 갖지 않는 경우, 블록(420)이 수행된다.
블록(424)에서, 본 명세서에 설명된 것처럼 예외가 발생된다. 이는 원하는 방법이라고 알려져 있다. 일부 실시예에서, 예외가 발생되지 않는다. 일부 실시예에서, 예외가 발생되면, 코드 변환이 정지되어 다른 것 중에서도, 코드 캐시의 업데이트 및/또는 메모리의 액세스가 가능해진다.
블록(426)에서, 게스트 명령어의 어드레스에 연관된 코드 캐시 라인은 무효화된다. 예를 들어, 무효화는, 본 명세서에 설명된 것처럼, PCB 및/또는 PCT의 오래된 수정 표시자인 것으로 결정되는 코드 캐시 라인에 기초할 수 있다.
블록(428)에서, PCT에서 미스가 있는지가 결정된다. PCT에서 미스는 페이지 또는 게스트 명령어의 어드레스에 기초하여 결정될 수 있다. PCT에서 미스가 있다면, 블록(420)이 수행된다. PCT에서 미스가 없다면, 블록(430)이 수행된다.
블록(430)에서, 게스트 명령어가 변환된다. 일부 실시예에서, 코드 캐시는 게스트 명령어 변환의 일부로서 업데이트된다.
블록(432)에서, 본 명세서에서 설명된 바와 같이, PCB 및/또는 PCT가 업데이트되어, 저장 명령어의 수행을 코드 캐시 내의 게스트 물리 어드레스 및 연관된 위치에 반영한다. 예를 들어, PCB 및/또는 PCT는 요청이 코드 캐시 라인을 수정한 것을 반영하기 위해 업데이트될 수 있다. 그 다음 블록(402)은 다음 게스트 명령어에 대해 실행될 수 있다.
블록(440)에서, 게스트 명령어에 기초하여 변환된 명령어가 수행된다. 그 다음 블록(402)은 다음 게스트 명령어에 대해 실행될 수 있다.
도 4b를 참조하면, 블록(450)에서, 분기 명령어는 게스트 분기 명령어로 대체된다.
블록(452)에서, 본 명세서에 설명된 것처럼, 위치가 변환된 코드를 갖는지가 결정된다. 위치가 변환된 코드를 갖는다면, 블록(460)이 수행된다. 위치가 변환된 코드를 갖지 않는다면, 블록(454)이 수행된다.
블록(454)에서, 게스트 분기 명령어가 변환된다(예를 들어, 네이티브 분기 명령어로 변환된다). 블록(456)에서, 변환된 게스트 분기 명령어의 위치에 있는 코드가 수행된다.
블록(460)에서, 게스트 분기 명령어의 위치(예를 들어, 어드레스)가 수정되었는지가 결정된다. 게스트 분기 명령어의 위치의 내용이 수정되었는지가 PCB 및/또는 PCT의 액세스에 기초하여 결정된다. 위치의 내용이 수정되었다면, 도 4a의 블록(424)이 수행된다. 이것은 원하지 않는 방법이라고 알려졌다. 위치의 내용이 수정되지 않은 경우, 블록(462)이 수행된다.
블록(462)에서, 게스트 분기 명령어의 위치가 액세스된다. 위치는 코드 캐시 또는 메모리로부터 액세스될 수 있다.
블록(464)에서, 게스트 분기 명령어의 위치에 있는 코드가 실행된다.
도 5는 다양한 실시예를 포함하는 예시적인 계산 시스템(500)의 블록도이다. 계산 시스템(500)은 컴퓨터 판독 가능한 명령어를 수행할 수 있는 임의의 단일 또는 멀티-프로세서 계산 디바이스 또는 시스템을 넓게 표현한다. 계산 시스템(500)의 예는, 제한하지 않고, 워크스테이션, 랩톱, 클라이언트 측 단말기, 서버, 슈퍼컴퓨터, 분산형 계산 시스템, 휴대용 디바이스 또는 임의의 다른 계산 시스템 또는 디바이스를 포함한다. 대부분의 기본 구성에서, 계산 시스템(500)은 적어도 하나의 프로세서(514) 및 시스템 메모리(516)를 포함할 수 있다.
프로세서(514)는 일반적으로 데이터를 처리하거나 명령어를 해석 및 수행할 수 있는 임의의 유형 또는 형태의 처리 유닛을 나타낸다. 특정 실시예에서, 프로세서(514)는 소프트웨어 애플리케이션 또는 모듈로부터 명령어를 수신할 수 있다. 이러한 명령어는 프로세서(514)로 하여금 본 명세서에 설명 및/또는 예시된 하나 이상의 실시예의 기능을 수행하게 할 수 있다. 예를 들어, 프로세서(514)는, 단독으로 또는 다른 요소와 결합하여, 본 명세서에 설명된 식별, 결정, 사용, 구현, 변환, 추적, 수신, 이동 및 제공하기 중 하나 이상을 수행할 수 있거나 그리고/또는 수행하기 위한 수단일 수 있다. 또한, 프로세서(514)는 본 명세서에 설명 및/또는 예시된 임의의 다른 단계, 방법, 프로세스를 수행할 수 있거나 그리고/또는 실행하기 위한 수단일 수 있다.
시스템 메모리(516)는 일반적으로 데이터 및/또는 다른 컴퓨터 판독 가능한 명령어를 저장할 수 있는 임의의 유형의 또는 임의의 형태의 휘발성 또는 비휘발성 저장 디바이스를 나타낸다. 시스템 메모리(516)의 예는, 제한하지 않고, RAM, ROM, FLASH 메모리, 또는 임의의 다른 적절한 메모리 디바이스를 포함한다. 요구하지 않지만, 특정 실시예에서, 계산 시스템(500)은 휘발성 메모리 유닛(예를 들어, 시스템 메모리(516)) 및 비휘발성 저장 디바이스(예를 들어, 1차 저장 디바이스(532)) 모두 다를 포함할 수 있다.
계산 시스템(500)은 또한 프로세서(514) 및 시스템 메모리(516) 이외에 하나 이상의 컴포넌트 또는 요소를 포함할 수 있다. 예를 들어, 도 5의 실시예에서, 계산 시스템(500)은 각기 통신 기반시설(512)을 통해 상호 연결될 수 있는, 메모리 컨트롤러(518), I/O 컨트롤러(520) 및 통신 인터페이스(522)를 포함한다.
통신 기반시설(512)은 일반적으로 계산 디바이스의 하나 이상의 컴포넌트 사이의 통신을 용이하게 할 수 있는 임의 유형 또는 임의의 형태의 기반시설을 나타낸다. 통신 기반시설(512)의 예는, 제한하지 않고, 통신 버스(예를 들어, ISA, PCI, PCIe, 또는 유사한 버스) 및 네트워크를 포함한다. 일 실시예에서, 시스템 메모리(516)는 전용 메모리 버스를 통해 통신한다.
메모리 컨트롤러(518)는 일반적으로 메모리 또는 데이터를 처리할 수 있거나 계산 시스템(500)의 하나 이상의 컴포넌트 사이의 통신을 제어할 수 있는 임의의 유형 또는 형태의 디바이스를 나타낸다. 예를 들어, 메모리 컨트롤러(518)는 통신 기반시설(512)을 통해 프로세서(514), 시스템 메모리(516) 및 I/O 컨트롤러(520) 사이의 통신을 제어할 수 있다. 메모리 컨트롤러는, 단독으로 또는 다른 요소와 결합하여, 본 명세서에서 설명된 하나 이상의 동작 또는 특징을 수행할 수 있거나 그리고/또는 수행하기 위한 수단일 수 있다.
I/O 컨트롤러(520)는 일반적으로 계산 디바이스의 입력 및 출력 기능을 조정 및/또는 제어할 수 있는 임의의 유형 또는 형태의 모듈을 나타낸다. 예를 들어, I/O 컨트롤러(520)는 프로세서(514), 시스템 메모리(516), 통신 인터페이스(522), 디스플레이 어댑터(526), 입력 인터페이스(530) 및 저장 인터페이스(534)와 같은 계산 시스템(500)의 하나 이상의 요소 사이에 데이터를 제어하거나 전송을 용이하게 할 수 있다. I/O 컨트롤러(520)는, 단독으로 또는 다른 요소와 결합하여, 예를 들어, 본 명세서에서 설명된 하나 이상의 동작을 수행하는데 사용될 수 있으며 그리고/또는 수행하기 위한 수단일 수 있다. 또한, I/O 컨트롤러(520)는 본 명세서에서 설명된 다른 동작 및 특징을 수행하는데 사용될 수 있으며 그리고/또는 수행하기 위한 수단일 수 있다.
통신 인터페이스(522)는 예를 들어 계산 시스템(500)과 하나 이상의 추가적인 디바이스 사이의 통신을 용이하게 할 수 있는 임의의 유형 또는 형태의 통신 디바이스 또는 어댑터를 넓게 표현한다. 예를 들어, 통신 인터페이스(522)는 계산 시스템(500)과 추가적인 계산 시스템을 포함하는 개인 또는 공용 네트워크 사이의 통신을 용이하게 할 수 있다. 통신 인터페이스(522)의 예는, 제한하지 않고, 유선 네트워크 인터페이스(예를 들어, 네트워크 인터페이스 카드), 무선 네트워크 인터페이스(예를 들어, 무선 네트워크 인터페이스 카드), 모뎀 및 임의의 다른 적절한 인터페이스를 포함한다. 일 실시예에서, 통신 인터페이스(522)는 인터넷과 같은 네트워크와의 직접 링크를 통해 원격 서버와의 직접 연결을 제공한다. 또한, 통신 인터페이스(522)는 예를 들어, 로컬 영역 네트워크(예를 들어, 이더넷 네트워크), 개인 영역 네트워크, 전화 또는 케이블 네트워크, 셀룰러 전화 연결, 위성 데이터 연결 또는 임의의 다른 적당한 연결을 통해 간접적으로 연결을 제공할 수 있다.
통신 인터페이스(522)는 또한 외부 버스 또는 통신 채널을 통해 계산 시스템(500)과 하나 이상의 추가적인 네트워크 또는 저장 디바이스 사이의 통신을 용이하게 하도록 구성된 호스트 어댑터를 나타낸다. 호스트 어댑터의 예는, 제한하지 않고, SCSI 호스트 어댑터, USB 호스트 어댑터, IEEE(전기 전자 기술자 협회) 594 호스트 어댑터, SATA(Serial Advanced Technology Attachment) 및 외부 SATA(eSATA) 호스트 어댑터, ATA(Advanced Technology Attachment) 및 PATA(Parallel ATA) 호스트 어댑터, 파이버 채널 인터페이스 어댑터, 이더넷 어댑터 등을 포함한다. 또한, 통신 인터페이스(522)는 계산 시스템(500)이 분산된 계산 또는 원격 계산에 종사할 수 있게 할 수 있다. 예를 들어, 통신 인터페이스(522)는 원격 디바이스로부터 명령어를 수신할 수 있거나 수행을 위해 원격 디바이스에 명령어를 전송할 수 있다. 통신 인터페이스(522)는, 단독으로 또는 다른 요소와 결합하여, 본 개시에 설명된 하나 이상의 동작을 실행할 수 있으며 그리고/또는 실행하기 위한 수단일 수 있다. 통신 인터페이스(522)는 또한 본 개시에 설명된 다른 동작 및 특징을 수행하기 위해 사용될 수 있으며 그리고/또는 수행하기 위한 수단일 수 있다.
도 5에 예시된 바와 같이, 계산 시스템(500)은 또한 디스플레이 어댑터(526)를 통해 통신 기반시설(512)에 결합된 적어도 하나의 디스플레이 디바이스(524)를 포함할 수 있다. 디스플레이 디바이스(524)는 일반적으로 디스플레이 어댑터(526)에 의해 전달되는 정보를 가시적으로 디스플레이할 수 있는 임의의 유형 또는 형태의 디바이스를 나타낸다. 유사하게, 디스플레이 어댑터(526)는 일반적으로 디스플레이 디바이스(524)에 디스플레이를 위해 통신 기반시설(512)(또는 본 기술에 공지된 프레임 버퍼로부터)로부터의 그래픽, 텍스트 및 다른 데이터를 전달하도록 구성된 임의의 유형 또는 형태의 디바이스를 나타낸다.
도 5에 예시된 바와 같이, 계산 시스템(500)은 또한 입력 인터페이스(530)를 통해 통신 기반시설(512)에 연결된 적어도 하나의 입력 디바이스(528)를 포함할 수 있다. 입력 디바이스(528)는 일반적으로 컴퓨터 또는 사람이 발생한 입력을 계산 시스템(500)에 제공할 수 있는 임의의 유형 또는 형태의 입력 디바이스를 나타낸다. 입력 디바이스(528)의 예는, 제한하지 않고, 키보드, 포인팅 디바이스, 음성 인식 디바이스, 또는 임의의 다른 입력 디바이스를 포함한다. 일 실시예에서, 입력 디바이스(528)는, 단독으로 또는 다른 요소와 결합하여, 본 명세서에 개시된 하나 이상의 동작을 수행하는데 사용될 수 있으며 그리고/또는 수행하기 위한 수단이 될 수 있다. 또한, 입력 디바이스(528)는 본 개시에 설명된 다른 동작 및 특징을 수행하는데 사용될 수 있으며 그리고/또는 수행하기 위한 수단이 될 수 있다.
도 5에 예시된 바와 같이, 계산 시스템(500)은 저장 인터페이스(534)를 통해 통신 기반시설(512)에 연결된 1차 저장 디바이스(532) 및 백업 저장 디바이스(533)를 포함할 수 있다. 저장 디바이스(532 및 533)는 일반적으로 데이터 및/또는 다른 컴퓨터 판독 가능한 명령어를 저장할 수 있는 임의의 유형 또는 형태의 저장 디바이스 또는 매체를 나타낸다. 예를 들어, 저장 디바이스(532 및 533)는 자기 디스크 드라이브(예를 들어, 소위 하드 드라이브), 고체 상태 디스크, 플로피 디스크 드라이브, 자기 테이프 드라이브, 광 디스크 드라이브, FLASH 드라이브 등일 수 있다. 저장 인터페이스(534)는 일반적으로 저장 디바이스(532 및 533)와 계산 시스템(500)의 다른 컴포넌트 사이의 데이터를 전달하기 위한 임의의 유형 또는 형태의 인터페이스 또는 디바이스를 나타낸다.
도 5를 계속 참조하면, 저장 디바이스(532 및 533)는 컴퓨터 소프트웨어, 데이터, 또는 다른 컴퓨터 판독 가능한 정보를 저장하도록 구성된 분리 가능한 저장 유닛으로부터 또는 분리 가능한 저장 유닛에 기록하도록 구성될 수 있다. 적당한 분리 가능한 저장 유닛의 예는, 제한하지 않고, 플로피 디스크, 자기 테이프, 광 디스크, FLASH 메모리 디바이스 등을 포함한다. 저장 디바이스(532 및 533)는 또한 컴퓨터 소프트웨어, 데이터, 또는 다른 컴퓨터 판독 가능한 명령어로 하여금 계산 시스템(500)에 로딩될 수 있도록 할 수 있는 다른 유사한 구조 또는 디바이스를 포함할 수 있다. 예를 들어, 저장 디바이스(532 및 533)는 소프트웨어, 데이터, 또는 다른 컴퓨터 판독 가능한 정보를 판독 및 기록하도록 구성될 수 있다. 저장 디바이스(532 및 533)는 또한 계산 시스템(500)의 일부일 수 있거나, 다른 인터페이스 시스템을 통해 액세스되는 별도의 디바이스일 수 있다.
저장 디바이스(532 및 533)는, 단독으로 또는 다른 요소와 결합하여, 본 명세서에 개시된 하나 이상의 동작을 수행하는데 사용될 수 있으며, 그리고/또는 수행하기 위한 수단일 수 있다. 저장 디바이스(532 및 533)는 또한 본 개시에 설명된 다른 동작 및 특징을 실행하는데 사용될 수 있으며, 그리고/또는 실행하기 위한 수단일 수 있다.
많은 다른 디바이스 또는 서브시스템이 계산 시스템(500)에 연결될 수 있다. 이와 반대로, 도 5에 예시된 모든 컴포넌트 및 디바이스는 본 명세서에 설명된 실시예를 실행하기 위해 제공될 필요는 없다. 전술한 참조된 디바이스 및 서브시스템은 또한 도 5에 도시된 것과 다른 방식으로 상호 연결될 수도 있다. 계산 시스템(500)은 또한 임의의 개수의 소프트웨어, 펌웨어 및/또는 하드웨어 구성을 사용할 수 있다. 예를 들어, 본 명세서에 개시된 본 예의 실시예는 컴퓨터 판독 가능한 매체에 컴퓨터 프로그램(또한, 컴퓨터 소프트웨어, 소프트웨어 애플리케이션, 컴퓨터 판독 가능한 명령어, 또는 컴퓨터 제어 로직으로서 언급)으로서 인코딩될 수 있다.
컴퓨터 프로그램을 포함하는 컴퓨터 판독 가능한 매체는 계산 시스템(500)에 로딩될 수 있다. 컴퓨터 판독 가능한 매체에 저장된 모든 또는 일부의 컴퓨터 프로그램은 시스템 메모리(516) 및/또는 저장 디바이스(532 및 533)의 여러 부분에 저장될 수 있다. 프로세서(514)에 의해 실행될 때, 계산 시스템(500)에 로딩된 컴퓨터 프로그램은 프로세서(514)로 하여금 본 명세서에 설명된 그리고/또는 예시된 실시예의 기능을 수행하도록 하며 그리고/또는 수행하기 위한 수단이 될 수 있다. 추가로 또는 대안으로, 본 명세서에 설명 및/또는 예시된 예의 실시예는 펌웨어 및/또는 하드웨어에 의해 구현될 수 있다. 예를 들어, 계산 시스템(500)은 본 명세서에 개시된 하나 이상의 실시예를 구현하도록 적응된 ASIC으로 구성될 수 있다.
전술한 개시가 특정 블록도, 플로우차트, 및 예를 이용하여 다양한 실시예를 기술하였지만, 본 명세서에서 설명된 그리고/또는 예시된 각 블록도의 컴포넌트, 플로우차트의 단계, 동작 및/또는 컴포넌트는 넓은 범위의 하드웨어, 소프트웨어, 또는 펌웨어(또는 이들의 결합) 구성을 사용하여 개별적 및/또는 집합적으로 구현될 수 있다. 또한, 다른 컴포넌트 내에 포함된 컴포넌트의 임의의 개시는, 많은 다른 아키텍처가 동일한 기능을 달성하기 위해 구현될 수 있기 때문에, 예시로서 고려되어야 한다.
설명의 목적을 위해 전술한 설명은 특정 실시예를 참조하여 설명되었다. 그러나 전술한 예시적인 논의는 하나도 빠짐없다거나 본 개시를 개시된 것과 그대로의 형태로 제한하려는 의도는 아니다. 많은 변경 및 변형이 전술한 교시의 관점에서 가능하다. 실시예는 본 개시의 원리 및 그 실제 응용을 설명하기 위하여 선택되고 설명되었으며, 이에 따라 본 기술에서 통상의 지식을 가진 자라면 고려된 특정 사용에 적합해질 수 있는 본 개시 및 여러 변형 예를 이용하여 다양한 실시예를 최적하게 활용할 수 있다.
그러므로 본 개시에 따른 실시예가 설명된다. 본 개시는 특정 실시예에서 설명되었지만, 본 개시는 그러한 실시예에 한정되는 것으로 해석되지 않아야 하며, 아래의 특허 청구 범위에 따라 해석되어야 한다는 것을 인식하여야 한다.

Claims (20)

  1. 메모리와,
    하드웨어 버퍼와,
    코어 세트를 포함하는 프로세서를 포함하되,
    상기 프로세서는,
    게스트 코드를 네이티브 코드로 변환하고,
    변환된 게스트 코드를 상기 프로세서의 코드 캐시 부분에 저장하고,
    코드 캐시 내의 변환된 코드의 각각의 위치를 추적하도록 구성된 상기 하드웨어 버퍼를 유지 - 상기 하드웨어 버퍼는 상기 코드 캐시 내의 변환된 게스트 코드의 각각의 위치와 연관된 상기 메모리 내의 각각의 위치로의 각각의 액세스에 기초하여 업데이트됨 - 하고,
    상기 하드웨어 버퍼에 액세스한 이후에 상기 각각의 액세스와 연관된 상기 메모리 내의 각각의 위치를 수정하는 요청을 실행하도록 구성되고,
    상기 프로세서는 상기 요청이 변환된 게스트 코드를 포함하는 상기 코드 캐시 내의 위치와 연관된 메모리 내의 위치를 수정하기 위한 것이면 예외(exception)를 발생하도록 구성되고, 상기 메모리는, 게스트 코드에 대한 수정들, 게스트 코드에 대한 수정들에 응답하여 취해지는 예외의 유형, 및 상기 게스트 코드가 네이티브 코드로 변환되었는지 여부를 추적하는 것을 포함하는, 상기 코드 캐시 내에 존재하는 변환된 코드를 추적하는 것을 위한 상기 하드웨어 버퍼와 연관된 테이블을 포함하는,
    장치.
  2. 삭제
  3. 제 1 항에 있어서,
    상기 하드웨어 버퍼는 상기 하드웨어 버퍼와 연관된 상기 테이블의 캐시로서 작용하도록 구성되며, 상기 하드웨어 버퍼는 상기 하드웨어 버퍼와 연관된 상기 테이블의 데이터의 서브세트를 포함하는
    장치.
  4. 삭제
  5. 제 1 항에 있어서,
    상기 프로세서는 게스트 코드 분기에 응답하여 예외를 발생하도록 구성되는
    장치.
  6. 제 1 항에 있어서,
    상기 요청은 자기 수정 코드(self modifying code)에 의한 저장인
    장치.
  7. 제 1 항에 있어서,
    상기 요청은 직접 메모리 액세스(direct memory access, DMA) 쓰기인
    장치.
  8. 제 1 항에 있어서,
    상기 프로세서는 상기 하드웨어 버퍼를 포함하는
    장치.
  9. 메모리와,
    하드웨어 버퍼, 코드 캐시 및 코어 세트를 포함하는 프로세서를 포함하되,
    상기 프로세서는,
    게스트 코드를 네이티브 코드로 변환하고,
    변환된 게스트 코드를 상기 프로세서 내의 코드 캐시에 저장하고,
    코드 캐시 내의 변환된 코드의 각각의 위치를 추적하도록 구성된 상기 하드웨어 버퍼를 유지 - 상기 하드웨어 버퍼는 상기 코드 캐시 내의 변환된 게스트 코드의 각각의 위치와 연관된 상기 메모리 내의 각각의 위치로의 각각의 액세스에 기초하여 업데이트됨 - 하고,
    상기 코드 캐시 내에 존재하는 변환된 코드를 추적하기 위한 상기 하드웨어 버퍼와 연관된 테이블을 유지 - 상기 메모리는 상기 하드웨어 버퍼와 연관된 상기 테이블을 포함함 - 하고,
    상기 하드웨어 버퍼에 액세스한 이후에 상기 각각의 액세스와 연관된 상기 메모리 내의 각각의 위치를 수정하는 요청을 실행하도록 구성되고,
    상기 프로세서는 상기 요청이 변환된 게스트 코드를 포함하는 상기 코드 캐시 내의 위치와 연관된 메모리 내의 위치를 수정하기 위한 것이면 예외를 발생하도록 구성되고, 상기 메모리는, 게스트 코드에 대한 수정들, 게스트 코드에 대한 수정들에 응답하여 취해지는 예외의 유형, 및 상기 게스트 코드가 네이티브 코드로 변환되었는지 여부를 추적하는 것을 포함하는, 상기 코드 캐시 내에 존재하는 변환된 코드를 추적하는 것을 위한 상기 하드웨어 버퍼와 연관된 테이블을 포함하는,
    시스템.
  10. 제 9 항에 있어서,
    상기 하드웨어 버퍼는 상기 하드웨어 버퍼와 연관된 상기 테이블의 캐시로서 작용하도록 구성되며, 상기 하드웨어 버퍼는 상기 하드웨어 버퍼와 연관된 상기 테이블의 데이터의 서브세트를 포함하는
    시스템.
  11. 삭제
  12. 제 9 항에 있어서,
    상기 프로세서는 게스트 코드 분기에 응답하여 예외를 발생하도록 구성되는
    시스템.
  13. 제 9 항에 있어서,
    상기 요청은 자기 수정 코드에 의한 저장인
    시스템.
  14. 제 9 항에 있어서,
    상기 요청은 직접 메모리 액세스(DMA) 쓰기인
    시스템.
  15. 게스트 코드를 변환하기 위한 시스템으로서,
    메모리와,
    하드웨어 버퍼, 코드 캐시 및 코어 세트를 포함하는 프로세서를 포함하되,
    상기 프로세서는,
    게스트 코드를 네이티브 코드로 변환하고,
    변환된 게스트 코드를 상기 프로세서 내의 코드 캐시에 저장하고,
    코드 캐시 내의 변환된 코드의 각각의 위치를 추적하도록 구성된 상기 하드웨어 버퍼를 유지 - 상기 하드웨어 버퍼는 상기 코드 캐시 내의 변환된 게스트 코드의 각각의 위치와 연관된 상기 메모리 내의 각각의 위치로의 각각의 액세스에 기초하여 업데이트되고, 상기 하드웨어 버퍼는 자기 수정 코드에 응답하여 업데이트됨 - 하고,
    상기 코드 캐시 내에 존재하는 변환된 코드를 추적하기 위한 상기 하드웨어 버퍼와 연관된 테이블을 유지 - 상기 메모리는 상기 하드웨어 버퍼와 연관된 상기 테이블을 포함함 - 하고,
    상기 하드웨어 버퍼에 액세스한 이후에 상기 각각의 액세스와 연관된 상기 메모리 내의 각각의 위치를 수정하는 요청을 실행하도록 구성되고,
    상기 프로세서는 상기 요청이 변환된 게스트 코드를 포함하는 상기 코드 캐시 내의 위치와 연관된 메모리 내의 위치를 수정하기 위한 것이면 예외를 발생하도록 구성되고, 상기 메모리는, 게스트 코드에 대한 수정들, 게스트 코드에 대한 수정들에 응답하여 취해지는 예외의 유형, 및 상기 게스트 코드가 네이티브 코드로 변환되었는지 여부를 추적하는 것을 포함하는, 상기 코드 캐시 내에 존재하는 변환된 코드를 추적하는 것을 위한 상기 하드웨어 버퍼와 연관된 테이블을 포함하는,
    게스트 코드 변환 시스템.
  16. 제 15 항에 있어서,
    상기 하드웨어 버퍼는 상기 하드웨어 버퍼와 연관된 상기 테이블의 캐시로서 작용하도록 구성되며, 상기 하드웨어 버퍼는 상기 하드웨어 버퍼와 연관된 상기 테이블의 데이터의 서브세트를 포함하는
    게스트 코드 변환 시스템.
  17. 삭제
  18. 제 15 항에 있어서,
    상기 프로세서는 게스트 코드 분기에 응답하여 예외를 발생하도록 구성되는
    게스트 코드 변환 시스템.
  19. 제 15 항에 있어서,
    상기 요청은 저장인
    게스트 코드 변환 시스템.
  20. 제 15 항에 있어서,
    상기 요청은 직접 메모리 액세스(DMA) 쓰기인
    게스트 코드 변환 시스템.
KR1020167031653A 2014-05-12 2015-05-12 자기 수정 코드에 하드웨어 지원을 제공하는 방법 및 장치 KR101963725B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201461991951P 2014-05-12 2014-05-12
US61/991,951 2014-05-12
PCT/US2015/030411 WO2015175555A1 (en) 2014-05-12 2015-05-12 Method and apparatus for providing hardware support for self-modifying code

Publications (2)

Publication Number Publication Date
KR20160145696A KR20160145696A (ko) 2016-12-20
KR101963725B1 true KR101963725B1 (ko) 2019-04-01

Family

ID=54367921

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167031653A KR101963725B1 (ko) 2014-05-12 2015-05-12 자기 수정 코드에 하드웨어 지원을 제공하는 방법 및 장치

Country Status (6)

Country Link
US (1) US9946538B2 (ko)
EP (1) EP3143496B1 (ko)
JP (1) JP2017516228A (ko)
KR (1) KR101963725B1 (ko)
CN (1) CN106796506B (ko)
WO (1) WO2015175555A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9627038B2 (en) 2013-03-15 2017-04-18 Intel Corporation Multiport memory cell having improved density area
US20140281116A1 (en) 2013-03-15 2014-09-18 Soft Machines, Inc. Method and Apparatus to Speed up the Load Access and Data Return Speed Path Using Early Lower Address Bits
US9436476B2 (en) 2013-03-15 2016-09-06 Soft Machines Inc. Method and apparatus for sorting elements in hardware structures
US9582322B2 (en) 2013-03-15 2017-02-28 Soft Machines Inc. Method and apparatus to avoid deadlock during instruction scheduling using dynamic port remapping
CN104679480A (zh) * 2013-11-27 2015-06-03 上海芯豪微电子有限公司 一种指令集转换系统和方法
JP2017516228A (ja) 2014-05-12 2017-06-15 インテル・コーポレーション 自己書き換えコードのハードウェアサポートを提供する方法及び装置
JP6234640B2 (ja) * 2015-05-28 2017-11-22 三菱電機株式会社 シミュレーション装置及びシミュレーション方法及びシミュレーションプログラム
US9798670B1 (en) * 2016-04-20 2017-10-24 Via Alliance Semiconductor Co., Ltd. System and method of determining memory ownership on cache line basis for detecting self-modifying code including modification of a cache line with an executing instruction
CN106933538B (zh) * 2016-04-20 2019-03-01 上海兆芯集成电路有限公司 侦测自修正程序码的处理器与方法
CN106919367B (zh) * 2016-04-20 2019-05-07 上海兆芯集成电路有限公司 侦测自修正程序码的处理器与方法
CN106933537B (zh) * 2016-04-20 2019-03-08 上海兆芯集成电路有限公司 侦测自修正程序码的处理器与方法
US11193803B2 (en) 2018-02-02 2021-12-07 Analog Devices International Unlimited Company Measurement system
CN109890082B (zh) * 2019-03-08 2022-05-24 中国航空工业集团公司洛阳电光设备研究所 一种时间触发的tt帧报文传输方法
CN114416450B (zh) * 2022-01-18 2022-09-27 深圳市百泰实业股份有限公司 一种pcba生产测试管理方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080216073A1 (en) * 1999-01-28 2008-09-04 Ati International Srl Apparatus for executing programs for a first computer architechture on a computer of a second architechture
US20120198157A1 (en) * 2011-01-27 2012-08-02 Soft Machines, Inc. Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
US20140059262A1 (en) * 2012-08-21 2014-02-27 Lenovo (Singapore) Pte. Ltd. Task scheduling in big and little cores

Family Cites Families (92)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5053952A (en) 1987-06-05 1991-10-01 Wisc Technologies, Inc. Stack-memory-based writable instruction set computer having a single data bus
US5630157A (en) 1991-06-13 1997-05-13 International Business Machines Corporation Computer organization for multiple and out-of-order execution of condition code testing and setting instructions
US5265260A (en) 1991-06-26 1993-11-23 International Business Machines Corporation High performance sort hardware for a database accelerator in a data processing system
US5826055A (en) 1991-07-08 1998-10-20 Seiko Epson Corporation System and method for retiring instructions in a superscalar microprocessor
US5539911A (en) 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
DE69308548T2 (de) 1992-05-01 1997-06-12 Seiko Epson Corp Vorrichtung und verfahren zum befehlsabschluss in einem superskalaren prozessor.
IL110181A (en) 1994-06-30 1998-02-08 Softchip Israel Ltd Install microprocessor and peripherals
US5651124A (en) 1995-02-14 1997-07-22 Hal Computer Systems, Inc. Processor structure and method for aggressively scheduling long latency instructions including load/store instructions while maintaining precise state
US5751982A (en) 1995-03-31 1998-05-12 Apple Computer, Inc. Software emulation system with dynamic translation of emulated instructions for increased processing speed
US5870584A (en) 1995-09-20 1999-02-09 Fore Systems, Inc. Method and apparatus for sorting elements
US5826073A (en) * 1995-10-06 1998-10-20 Advanced Micro Devices, Inc. Self-modifying code handling system
US5784638A (en) 1996-02-22 1998-07-21 International Business Machines Corporation Computer system supporting control transfers between two architectures
US5892934A (en) 1996-04-02 1999-04-06 Advanced Micro Devices, Inc. Microprocessor configured to detect a branch to a DSP routine and to direct a DSP to execute said routine
KR19990076967A (ko) 1996-11-04 1999-10-25 요트.게.아. 롤페즈 처리 장치 및 메모리내의 명령 판독
US5905876A (en) 1996-12-16 1999-05-18 Intel Corporation Queue ordering for memory and I/O transactions in a multiple concurrent transaction computer system
US6052777A (en) 1997-06-25 2000-04-18 Sun Microsystems, Inc. Method for delivering precise traps and interrupts in an out-of-order processor
US6049868A (en) 1997-06-25 2000-04-11 Sun Microsystems, Inc. Apparatus for delivering precise traps and interrupts in an out-of-order processor
JPH1124929A (ja) 1997-06-30 1999-01-29 Sony Corp 演算処理装置およびその方法
US5870575A (en) 1997-09-22 1999-02-09 International Business Machines Corporation Indirect unconditional branches in data processing system emulation mode
US6061785A (en) 1998-02-17 2000-05-09 International Business Machines Corporation Data processing system having an apparatus for out-of-order register operations and method therefor
US6167508A (en) 1998-06-02 2000-12-26 Compaq Computer Corporation Register scoreboard logic with register read availability signal to reduce instruction issue arbitration latency
US6412067B1 (en) 1998-08-11 2002-06-25 Intel Corporation Backing out of a processor architectural state
US6385676B1 (en) 1999-07-12 2002-05-07 Hewlett-Packard Company Coherent ordering queue for computer system
US6557095B1 (en) 1999-12-27 2003-04-29 Intel Corporation Scheduling operations using a dependency matrix
US6615300B1 (en) 2000-06-19 2003-09-02 Transmeta Corporation Fast look-up of indirect branch destination in a dynamic translation system
US6711672B1 (en) 2000-09-22 2004-03-23 Vmware, Inc. Method and system for implementing subroutine calls and returns in binary translation sub-systems of computers
US6826681B2 (en) 2001-06-18 2004-11-30 Mips Technologies, Inc. Instruction specified register value saving in allocated caller stack or not yet allocated callee stack
US6851011B2 (en) 2001-08-09 2005-02-01 Stmicroelectronics, Inc. Reordering hardware for mass storage command queue
US6964043B2 (en) 2001-10-30 2005-11-08 Intel Corporation Method, apparatus, and system to optimize frequently executed code and to use compiler transformation and hardware support to handle infrequently executed code
US20030115578A1 (en) * 2001-12-18 2003-06-19 Igor Liokumovich PC platform simulation system employing efficient memory access simulation in a direct execution environment
US6813704B1 (en) 2001-12-20 2004-11-02 Lsi Logic Corporation Changing instruction order by reassigning only tags in order tag field in instruction queue
US6898699B2 (en) 2001-12-21 2005-05-24 Intel Corporation Return address stack including speculative return address buffer with back pointers
US7032101B2 (en) 2002-02-26 2006-04-18 International Business Machines Corporation Method and apparatus for prioritized instruction issue queue in a processor
US7113510B2 (en) 2002-03-01 2006-09-26 Xinming Allen Lin Hardware self-sorting scheduling queue
US6779092B2 (en) 2002-05-15 2004-08-17 Hewlett-Packard Development Company, L.P. Reordering requests for access to subdivided resource
US7127592B2 (en) 2003-01-08 2006-10-24 Sun Microsystems, Inc. Method and apparatus for dynamically allocating registers in a windowed architecture
GB0309056D0 (en) 2003-04-22 2003-05-28 Transitive Technologies Ltd Block translation optimizations for program code conversion
US7536682B2 (en) 2003-04-22 2009-05-19 International Business Machines Corporation Method and apparatus for performing interpreter optimizations during program code conversion
JP4186768B2 (ja) 2003-09-16 2008-11-26 沖電気工業株式会社 マルチポート半導体メモリ
US7096345B1 (en) 2003-09-26 2006-08-22 Marvell International Ltd. Data processing system with bypass reorder buffer having non-bypassable locations and combined load/store arithmetic logic unit and processing method thereof
US7373637B2 (en) 2003-09-30 2008-05-13 International Business Machines Corporation Method and apparatus for counting instruction and memory location ranges
US7290253B1 (en) 2003-09-30 2007-10-30 Vmware, Inc. Prediction mechanism for subroutine returns in binary translation sub-systems of computers
US7315935B1 (en) 2003-10-06 2008-01-01 Advanced Micro Devices, Inc. Apparatus and method for port arbitration in a register file on the basis of functional unit issue slots
US7441101B1 (en) 2003-12-10 2008-10-21 Cisco Technology, Inc. Thread-aware instruction fetching in a multithreaded embedded processor
US7434031B1 (en) 2004-04-12 2008-10-07 Sun Microsystems, Inc. Execution displacement read-write alias prediction
US8443171B2 (en) 2004-07-30 2013-05-14 Hewlett-Packard Development Company, L.P. Run-time updating of prediction hint instructions
US7647589B1 (en) * 2005-02-07 2010-01-12 Parallels Software International, Inc. Methods and systems for safe execution of guest code in virtual machine context
US8195922B2 (en) 2005-03-18 2012-06-05 Marvell World Trade, Ltd. System for dynamically allocating processing time to multiple threads
US7461237B2 (en) 2005-04-20 2008-12-02 Sun Microsystems, Inc. Method and apparatus for suppressing duplicative prefetches for branch target cache lines
JP4912016B2 (ja) 2005-05-23 2012-04-04 ルネサスエレクトロニクス株式会社 半導体記憶装置
US20070033385A1 (en) 2005-08-02 2007-02-08 Advanced Micro Devices, Inc. Call return stack way prediction repair
US7483332B2 (en) 2005-08-11 2009-01-27 Texas Instruments Incorporated SRAM cell using separate read and write circuitry
US8024522B1 (en) 2005-09-28 2011-09-20 Oracle America, Inc. Memory ordering queue/versioning cache circuit
US20070186081A1 (en) 2006-02-06 2007-08-09 Shailender Chaudhry Supporting out-of-order issue in an execute-ahead processor
JPWO2007091541A1 (ja) 2006-02-08 2009-07-02 株式会社ルネサステクノロジ 半導体記憶装置
US7478190B2 (en) 2006-02-10 2009-01-13 University Of Utah Technology Commercialization Office Microarchitectural wire management for performance and power in partitioned architectures
US20080126771A1 (en) 2006-07-25 2008-05-29 Lei Chen Branch Target Extension for an Instruction Cache
US7716460B2 (en) 2006-09-29 2010-05-11 Qualcomm Incorporated Effective use of a BHT in processor having variable length instruction set execution modes
CN101627365B (zh) 2006-11-14 2017-03-29 索夫特机械公司 多线程架构
US7721076B2 (en) 2006-12-18 2010-05-18 Intel Corporation Tracking an oldest processor event using information stored in a register and queue entry
US7783869B2 (en) 2006-12-19 2010-08-24 Arm Limited Accessing branch predictions ahead of instruction fetching
TW200833002A (en) 2007-01-31 2008-08-01 Univ Nat Yunlin Sci & Tech Distributed switching circuit having fairness
US7813163B2 (en) 2007-09-05 2010-10-12 International Business Machines Corporation Single-ended read and differential write scheme
TWI346338B (en) 2007-10-23 2011-08-01 Nat Univ Tsing Hua Access unit for a static random accesss memory
US8782384B2 (en) 2007-12-20 2014-07-15 Advanced Micro Devices, Inc. Branch history with polymorphic indirect branch information
US7945764B2 (en) 2008-01-11 2011-05-17 International Business Machines Corporation Processing unit incorporating multirate execution unit
US8015362B2 (en) * 2008-02-15 2011-09-06 International Business Machines Corporation Method and system for handling cache coherency for self-modifying code
TWI368165B (en) 2008-08-13 2012-07-11 Faraday Tech Corp Processor and method for recovering global history shift register and return address stack thereof
GB2463278B (en) 2008-09-05 2012-05-16 Advanced Risc Mach Ltd Scheduling control within a data processing system
US7848131B2 (en) 2008-10-19 2010-12-07 Juhan Kim High speed ferroelectric random access memory
US8074060B2 (en) 2008-11-25 2011-12-06 Via Technologies, Inc. Out-of-order execution microprocessor that selectively initiates instruction retirement early
US8219784B2 (en) 2008-12-09 2012-07-10 International Business Machines Corporation Assigning and pre-decoding group ID and tag ID prior to dispatching instructions in out-of-order processor
US8078854B2 (en) 2008-12-12 2011-12-13 Oracle America, Inc. Using register rename maps to facilitate precise exception semantics
US8332854B2 (en) 2009-05-19 2012-12-11 Microsoft Corporation Virtualized thread scheduling for hardware thread optimization based on hardware resource parameter summaries of instruction blocks in execution groups
US8799879B2 (en) * 2009-06-30 2014-08-05 Oracle America, Inc. Method and apparatus for protecting translated code in a virtual machine
US8281110B2 (en) 2009-07-15 2012-10-02 Via Technologies, Inc. Out-of-order microprocessor with separate branch information circular queue table tagged by branch instructions in reorder buffer to reduce unnecessary space in buffer
US8217813B2 (en) 2010-04-29 2012-07-10 Advanced Micro Devices, Inc. System and method for low-latency data compression/decompression
CN102262590B (zh) 2010-05-31 2014-03-26 国际商业机器公司 一种用于对硬件加速器的请求队列重排的方法和系统
US8959094B2 (en) 2010-05-28 2015-02-17 Oracle International Corporation Early return of partial sort results in a database system
US20110320784A1 (en) 2010-06-24 2011-12-29 International Business Machines Corporation Verification of processor architectures allowing for self modifying code
US20120117335A1 (en) 2010-11-10 2012-05-10 Advanced Micro Devices, Inc. Load ordering queue
WO2012103367A2 (en) * 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
US8516197B2 (en) * 2011-02-11 2013-08-20 International Business Machines Corporation Write-through cache optimized for dependence-free parallel regions
WO2012135041A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9690583B2 (en) 2011-10-03 2017-06-27 International Business Machines Corporation Exploiting an architected list-use operand indication in a computer system operand resource pool
CN105122206B (zh) 2013-03-15 2018-11-09 英特尔公司 用于支持推测的访客返回地址栈仿真的方法和装置
US20140281116A1 (en) 2013-03-15 2014-09-18 Soft Machines, Inc. Method and Apparatus to Speed up the Load Access and Data Return Speed Path Using Early Lower Address Bits
US9627038B2 (en) 2013-03-15 2017-04-18 Intel Corporation Multiport memory cell having improved density area
US9436476B2 (en) 2013-03-15 2016-09-06 Soft Machines Inc. Method and apparatus for sorting elements in hardware structures
US9582322B2 (en) 2013-03-15 2017-02-28 Soft Machines Inc. Method and apparatus to avoid deadlock during instruction scheduling using dynamic port remapping
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
JP2017516228A (ja) 2014-05-12 2017-06-15 インテル・コーポレーション 自己書き換えコードのハードウェアサポートを提供する方法及び装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080216073A1 (en) * 1999-01-28 2008-09-04 Ati International Srl Apparatus for executing programs for a first computer architechture on a computer of a second architechture
US20120198157A1 (en) * 2011-01-27 2012-08-02 Soft Machines, Inc. Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
US20140059262A1 (en) * 2012-08-21 2014-02-27 Lenovo (Singapore) Pte. Ltd. Task scheduling in big and little cores

Also Published As

Publication number Publication date
US20150324213A1 (en) 2015-11-12
US9946538B2 (en) 2018-04-17
KR20160145696A (ko) 2016-12-20
CN106796506B (zh) 2019-09-27
EP3143496B1 (en) 2021-07-14
EP3143496A4 (en) 2018-01-24
WO2015175555A1 (en) 2015-11-19
CN106796506A (zh) 2017-05-31
EP3143496A1 (en) 2017-03-22
JP2017516228A (ja) 2017-06-15

Similar Documents

Publication Publication Date Title
KR101963725B1 (ko) 자기 수정 코드에 하드웨어 지원을 제공하는 방법 및 장치
US10802987B2 (en) Computer processor employing cache memory storing backless cache lines
US11650926B2 (en) Virtual cache synonym detection using alias tags
CN107111455B (zh) 电子处理器架构以及缓存数据的方法
US10884751B2 (en) Method and apparatus for virtualizing the micro-op cache
US9519588B2 (en) Bounded cache searches
KR20010006757A (ko) Dma 및 l1/l2 캐시 성능을 향상시키기 위한 방법,장치 및 컴퓨터 프로그램 제품
US20200264984A1 (en) Partial caching of media address mapping data
US9135184B2 (en) Load-through fault mechanism
US11847064B2 (en) Buffer and methods for address translations in a processor
US20140082252A1 (en) Combined Two-Level Cache Directory
US20140289469A1 (en) Processor and control method of processor
US11500774B2 (en) Virtual cache tag renaming for synonym handling
US9727484B1 (en) Dynamic cache memory management with translation lookaside buffer protection
US9836405B2 (en) Dynamic management of virtual memory blocks exempted from cache memory access
US20170220479A1 (en) Dynamic cache memory management with cache pollution avoidance
US20230418758A1 (en) Tag processing for external caches
US9396125B1 (en) Dynamic management of memory ranges exempted from cache memory access
US9495306B1 (en) Dynamic management of a processor state with transient cache memory
US9311233B2 (en) Load-through fault mechanism

Legal Events

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