KR20210130197A - 하이퍼바이저에 대한 조건부 산출 명령 - Google Patents

하이퍼바이저에 대한 조건부 산출 명령 Download PDF

Info

Publication number
KR20210130197A
KR20210130197A KR1020217030468A KR20217030468A KR20210130197A KR 20210130197 A KR20210130197 A KR 20210130197A KR 1020217030468 A KR1020217030468 A KR 1020217030468A KR 20217030468 A KR20217030468 A KR 20217030468A KR 20210130197 A KR20210130197 A KR 20210130197A
Authority
KR
South Korea
Prior art keywords
hypervisor
address
instruction
execution mode
processing circuitry
Prior art date
Application number
KR1020217030468A
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 KR20210130197A publication Critical patent/KR20210130197A/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
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • 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/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/151Emulated environment, e.g. virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/651Multi-level translation tables

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

장치는 프로세싱 회로부(16)를 포함하며, 이 프로세싱 회로부(16)는 프로세싱 회로부 상에서 실행되는 하나 이상의 가상 프로세서들을 관리하기 위한 하이퍼바이저의 실행을 위한 하이퍼바이저 실행 모드, 및 하이퍼바이저 실행 모드보다 적어도 하나의 특권이 덜 주어진 실행 모드를 갖는다. 적어도 하나의 특권이 덜 주어진 실행 모드에서 실행되는 하이퍼바이저에 대한 조건부 산출 명령에 응답하여, 명령 디코더(14)는 프로세싱 회로부(16)를 제어하여, 적어도 하나의 트랩 조건이 만족되는지 여부를 결정하고, 적어도 하나의 트랩 조건이 만족되는 것으로 결정될 때, 프로세싱 회로부를 하이퍼바이저 실행 모드로 전환하고; 하이퍼바이저 실행 모드에서 실행되는 명령들에 액세스가능한 적어도 하나의 저장 요소에, 적어도 하나의 트랩 조건이 여전히 만족되는지 여부를 추정하기 위한 스케줄링 힌트 정보의 적어도 하나의 아이템을 저장한다.

Description

하이퍼바이저에 대한 조건부 산출 명령
본 발명은 데이터 프로세싱의 분야에 관한 것이다.
가상화된 데이터 프로세싱 시스템에서, 하이퍼바이저는 물리적 프로세싱 회로부 상에서 실행되는 하나 이상의 가상 프로세서들을 관리할 수 있다. 가상 프로세서들은 하나 이상의 물리적 프로세서 코어들을 포함할 수 있는 물리적 프로세싱 플랫폼의 리소스들 상에 하이퍼바이저에 의해 맵핑될 수 있다. 하이퍼바이저는 다수의 가상 머신들의 실행을 지원할 수 있으며, 이때 각각의 가상 머신은 하이퍼바이저가 그 가상 머신에 대한 주어진 개수의 가상 프로세서들을 생성할 것을 요청할 수 있고, 각각의 가상 프로세서는 물리적 프로세서 코어의 거동을 에뮬레이트한다. 하이퍼바이저는 주어진 가상 프로세서에 의해 요구되는 가상 리소스들과 하드웨어에 실제로 제공된 물리적 리소스들 사이의 맵핑을 관리할 수 있을 뿐만 아니라, 각자의 가상 프로세서들의 스케줄링을 제어하여, 각각의 가상 프로세서에 프로세싱 리소스를 언제 할당할지를 제어할 수 있다.
적어도 일부 예들은, 데이터 프로세싱을 수행하는 프로세싱 회로부; 및 데이터 프로세싱을 수행하기 위해 프로세싱 회로부를 제어하기 위한 명령들을 디코딩하는 명령 디코더를 포함하는 장치를 제공하고; 여기서 프로세싱 회로부는 프로세싱 회로부 상에서 실행되는 하나 이상의 가상 프로세서들을 관리하기 위한 하이퍼바이저의 실행을 위한 하이퍼바이저 실행 모드, 및 하이퍼바이저 실행 모드보다 적어도 하나의 특권이 덜 주어진 실행 모드를 갖고; 상기 적어도 하나의 특권이 덜 주어진 실행 모드에서 실행되는 하이퍼바이저에 대한 조건부 산출 명령(conditional yield to hypervisor instruction)에 응답하여, 명령 디코더는 프로세싱 회로부를 제어하여, 적어도 하나의 트랩 조건이 만족되는지 여부를 결정하도록, 그리고 적어도 하나의 트랩 조건이 만족되는 것으로 결정될 때: 프로세싱 회로부를 하이퍼바이저 실행 모드로 전환하도록; 그리고 하이퍼바이저 실행 모드에서 실행되는 명령들에 액세스가능한 적어도 하나의 저장 요소에, 적어도 하나의 트랩 조건이 여전히 만족되는지 여부를 추정하기 위한 스케줄링 힌트 정보의 적어도 하나의 아이템을 저장하도록 구성된다.
적어도 일부 예들은 프로세싱 회로부를 포함하는 장치를 위한 데이터 프로세싱 방법을 제공하며, 프로세싱 회로부는 프로세싱 회로부 상에서 실행되는 하나 이상의 가상 프로세서들을 관리하기 위한 하이퍼바이저의 실행을 위한 하이퍼바이저 실행 모드, 및 하이퍼바이저 실행 모드보다 적어도 하나의 특권이 덜 주어진 실행 모드를 갖고, 상기 방법은: 상기 적어도 하나의 특권이 덜 주어진 실행 모드에서 실행되는 하이퍼바이저에 대한 조건부 산출 명령을 디코딩하는 단계; 및 하이퍼바이저에 대한 조건부 산출 명령을 디코딩하는 것에 응답하여: 적어도 하나의 트랩 조건이 만족되는지 여부를 결정하는 단계, 및 적어도 하나의 트랩 조건이 만족되는 것으로 결정될 때: 프로세싱 회로부를 하이퍼바이저 실행 모드로 전환하는 단계; 및 하이퍼바이저 실행 모드에서 실행되는 명령들에 액세스가능한 적어도 하나의 저장 요소에, 적어도 하나의 트랩 조건이 여전히 만족되는지 여부를 추정하기 위한 스케줄링 힌트 정보의 적어도 하나의 아이템을 저장하는 단계를 포함한다.
적어도 일부 예들은 명령들의 실행을 위한 명령 실행 환경을 제공하기 위해 호스트 데이터 프로세싱 장치를 제어하기 위한 컴퓨터 프로그램을 제공하며; 컴퓨터 프로그램은: 명령 실행 환경에서 실행되는 타깃 코드의 명령들을 디코딩하여, 타깃 코드의 명령들에 대응하는 데이터 프로세싱을 수행하기 위해 호스트 데이터 프로세싱 장치를 제어하기 위한 명령 디코딩 프로그램 로직을 포함하고, 명령 실행 환경은 명령 실행 환경에서 실행되는 하나 이상의 가상 프로세서들을 관리하기 위한 하이퍼바이저의 실행을 위한 하이퍼바이저 실행 모드, 및 하이퍼바이저 실행 모드보다 적어도 하나의 특권이 덜 주어진 실행 모드를 갖고, 상기 적어도 하나의 특권이 덜 주어진 실행 모드에서 실행되는 타깃 코드의 하이퍼바이저에 대한 조건부 산출 명령에 응답하여, 명령 디코딩 프로그램 로직은 호스트 데이터 프로세싱 장치를 제어하여, 적어도 하나의 트랩 조건이 만족되는지 여부를 결정하도록, 그리고 적어도 하나의 트랩 조건이 만족되는 것으로 결정될 때: 명령 실행 환경을 하이퍼바이저 실행 모드로 전환하도록; 그리고 하이퍼바이저 실행 모드에서 실행되는 타깃 코드의 명령들에 액세스가능한 적어도 하나의 데이터 구조에, 적어도 하나의 트랩 조건이 여전히 만족되는지 여부를 추정하기 위한 스케줄링 힌트 정보의 적어도 하나의 아이템을 저장하도록 구성된다.
전술된 컴퓨터 프로그램을 저장하는 저장 매체가 제공될 수 있다. 저장 매체는 비일시적 저장 매체일 수 있다.
본 발명의 추가 태양들, 특징들 및 이점들은 첨부 도면과 관련하여 읽혀질 실시예들의 하기의 설명으로부터 명백해질 것이다.
도 1은 데이터 프로세싱 시스템의 일례를 개략적으로 도시한다.
도 2는 하이퍼바이저 모드를 포함한 상이한 특권(privilege)의 상이한 실행 모드들의 일례를 도시한다.
도 3은 프로세서 코어의 아키텍처 레지스터들 중 일부 아키텍처 레지스터의 일례를 도시한다.
도 4는 2-스테이지 어드레스 변환의 일례를 도시한다.
도 5는 부하 전용(load exclusive) 명령을 프로세싱하는 방법을 도시하는 흐름도이다.
도 6은 전용 모니터에 의한 추적된 어드레스에 대한 액세스들의 추적을 도시하는 흐름도이다.
도 7은 하이퍼바이저에 대한 조건부 산출 명령의 일례를 도시한다.
도 8은 하이퍼바이저에 대한 조건부 산출 명령을 프로세싱하는 방법을 도시하는 흐름도이다.
도 9는 하이퍼바이저에 대한 조건부 산출 명령에 대해 트랩 조건들이 만족되는지 여부를 결정하기 위한 단계들을 더 상세히 도시하는 흐름도이다.
도 10은 하이퍼바이저에 대한 조건부 산출 명령에 응답하여 스케줄링 힌트 정보를 저장하기 위한 단계들을 더 상세히 도시하는 흐름도이다.
도 11은 사용될 수 있는 시뮬레이터 예를 도시한다.
일부 프로세싱 작업부하들에서, 현재 실행 중인 프로세스는, 일부 이벤트가 발생하거나, 또는 메모리 내의 주어진 어드레스에서의 데이터 값이 특정 값으로 설정되는 것과 같은 일정 조건이 만족될 때까지 순방향 진행을 행하지 못할 수도 있다. 예를 들어, 이는 로크 변수가 메모리 내의 데이터 구조에 대한 액세스를 제어하는 데 사용되고 있는 경우일 수 있으며, 여기서 하나의 프로세스는, 다른 프로세스가 더 이상 동일한 데이터 구조를 사용하고 있지 않음을 나타내기 위해 로크 변수가 또 다른 프로세스에 의해 클리어될 때까지 그 데이터 구조를 사용하기를 기다려야 할 수 있다. 이는 데이터 구조에 대한 업데이트들이 극히 작게(atomically) 이루어짐을 보장하기 위해 전용 액세스를 시행하는 데 유용할 수 있다.
가상화된 시스템에서, 일부 조건이 만족되기를 여전히 기다리고 있는 프로세스는, 하이퍼바이저가 가능하다면 상이한 가상 프로세서를 리스케줄링할 수 있게 하도록 하이퍼바이저에 대한 프로세싱 회로부의 제어를 자발적으로 산출하여, 산출된 가상 프로세서가 기다리고 있는 시간에 유용한 작업을 위해 물리적 프로세싱 리소스들이 사용될 수 있게 할 수 있다. 그러나, 하이퍼바이저가 다음에 어느 가상 프로세서를 스케줄링할지를 아는 것은 비교적 어려울 수 있는데, 이는 각각의 가상 프로세서의 정확한 작업부하가 대체적으로 하이퍼바이저에 의해 알려지지 않기 때문이다. 하이퍼바이저가 실행을 위해, 현재 완전한 진행을 행할 수 없는 가상 프로세서를 선택하는 데 있어서 이점이 거의 없을 수 있다.
일부 프로세싱 작업부하들은 큐잉(queue)된 로킹 메커니즘들을 사용할 수 있으며, 여기서 프로세서들은 그들이 공유 리소스에 액세스할 수 있는 순서를 관리하기 위해 큐 구조를 사용할 수 있다. 하이퍼바이저가 큐잉된 로킹을 사용하는 가상 프로세서들을 스케줄링하고 있는 경우, 가상 프로세서들을, 그들이 큐에 도달한 순서로 스케줄링하여 물리적 프로세싱 리소스가 낭비되지 않도록 함으로써 순방향 진행을 행할 수 없게 될 가상 프로세서를 구동시키는 것이 중요할 수 있다. 유사하게, 로크가 기록자에 의해 이미 보유된 경우에 그 로크에 의해 제어되는 변수를 판독하기를 기다리고 있는 가상 프로세서를 스케줄링하는 것은 거의 의미가 없다.
이러한 문제를 해결하기 위한 하나의 접근법은 반가상화(para-virtualisation)를 사용하는 것일 수 있으며, 여기서 하이퍼바이저는 로크들 또는 큐들과 같은 동시 데이터 구조들을 구현하기 위한 서비스들을 제공하거나, 또는 심지어 특정 가상 프로세서에 대한 지시된 산출을 위한 서비스를 제공할 수 있다. 이들 접근법들에 있어서, 가상 머신 및 하이퍼바이저는 메모리 내의 공유 데이터 구조(예컨대, 큐)를 통해 서로 통신할 수 있으며, 이는 하이퍼바이저가 주어진 가상 프로세서가 순방향 진행을 행할 가능성이 있는지 여부를 결정할 수 있도록 로킹을 추적하는 데 사용될 수 있다. 그러나, 이러한 접근법은 다수의 단점들을 갖는다. 먼저, 이러한 접근법은 상이한 하이퍼바이저 구현물들 사이에서 본질적으로 이식가능하지 않은데(non-portable), 이는 주어진 가상 머신 코드가, 그것이 실행되어야 하는 특정 하이퍼바이저에 의해 제공되는 특정 형태의 제어 데이터 구조와 상호작용하기 위한 명령들을 포함할 필요가 있을 것이기 때문이다. 따라서, 새로운 동시 알고리즘이 구현될 때마다, 이는 주어진 가상 머신의 코드의 확장을 요구할 것이다. 또한, 이러한 접근법은 가상 머신 코드와 하이퍼바이저 코드의 개발자들 사이의 협력을 필요로 할 것이며, 이는 복잡성 및 개발 비용들을 증가시킬 수 있다. 또한, 이러한 반가상화는 성능 관점에서 불리할 수 있는데, 이는, 하드웨어에 의해 제공된 프로세싱 리소스의 사용을 위해 경쟁하는 다른 가상 프로세서들이 비교적 적은 불충분하게 가입된 시스템(under-subscribed system)에서 중요한 오버헤드를 추가할 수 있는, 하이퍼바이저에 대한 비조건부 트랩에 의존할 수 있기 때문이다. 또한, 일부 아키텍처들에서, 하이퍼바이저에 대한 명시적 호출들은 사용자 모드 코드에 대해 허용되지 않을 수 있고, 따라서, 종종, 애플리케이션-레벨 소프트웨어는 결국 이들 반가상화된 인터페이스들을 사용하지 못할 수 있다. 또한, 그러한 동시 데이터 구조들에 대한 액세스는 하이퍼바이저 및 가상 머신 둘 모두로부터의 추가적인 어드레스 변환 오버헤드를 필요로 할 수 있다.
하기에서 논의되는 기법에서, 주어진 가상 프로세서가, 하이퍼바이저에 대한 프로세싱 회로부의 제어를 조건부로 산출할 수 있게 하고, 또한, 하이퍼바이저가 아직 동일한 가상 프로세서를 리스케줄링하고자 시도하는 것이 효율적인지 여부를 결정할 수 있게 할 수 있는 스케줄링 힌트 정보를 하이퍼바이저에 전달할 수 있게 하는 하이퍼바이저에 대한 조건부 산출 명령을 위한 아키텍처 지원이 제공된다. 이는, 상기에 논의된 바와 같이 하이퍼바이저 및 가상 프로세서가 메모리 구조를 통해 상호작용할 필요성을 회피시키고, 따라서, 코드의 이식가능성을 개선하는 것을 돕고, 상기에 논의된 성능 비용들을 감소시킨다.
따라서, 장치는 프로세싱 회로부에 의해 실행되는 하나 이상의 가상 프로세서들을 관리하기 위한 하이퍼바이저의 실행을 위한 하이퍼바이저 실행 모드, 및 하이퍼바이저 실행 모드보다 특권이 덜 주어진 적어도 하나의 실행 모드를 갖는 프로세싱 회로부를 가질 수 있다. 명령 디코더는, 적어도 하나의 특권이 덜 주어진 실행 모드에서 실행될 때, 적어도 하나의 트랩 조건이 만족되는지 여부를 결정하기 위해 프로세싱 회로부를 제어하는 하이퍼바이저에 대한 조건부 산출 명령의 디코딩을 지원할 수 있다. 적어도 하나의 트랩 조건이 만족되는 것으로 결정될 때, 프로세싱 회로부는, 하이퍼바이저 모드로 전환하도록, 그리고 하이퍼바이저 모드에서 실행되는 명령들에 대해 액세스가능한 적어도 하나의 저장 요소에, 적어도 하나의 트랩 조건이 여전히 만족되는지 여부를 추정하기 위한 스케줄링 힌트 정보의 적어도 하나의 아이템을 저장하도록 제어된다. 따라서, 아키텍처 레벨에서 하이퍼바이저에 대한 스케줄링 힌트 정보의 전달을 지원함으로써, 스케줄링 힌트들을 제공하기 위해 가상 머신 및 하이퍼바이저가 메모리를 통해 상호작용할 필요가 없으며, 이는 반가상화에 의해 상기에서 논의된 문제들을 제거한다.
하이퍼바이저에 대한 조건부 산출 명령에 응답하여 프로세싱 회로부에 의해 반환되는 스케줄링 힌트 정보는, 하이퍼바이저가, 트랩 조건이 여전히 만족될 것인지 여부의 추정을 행할 수 있게 할 수 있는 임의의 정보를 포함할 수 있다. 예를 들어, 스케줄링 힌트 정보는 트랩 조건이 만족되는지 여부를 평가하기 위해 가상 프로세서가 사용하고 있던 값들을 포함할 수 있다. 예를 들어, 적어도 하나의 트랩 조건이 적어도 하나의 레지스터 내의 값들에 기초하여 평가되어야 했다면, 적어도 하나의 레지스터 내의 값들은 하이퍼바이저가 그들 데이터 값들을 테스트하고 그 조건을 평가하게 할 수 있는 하이퍼바이저의 명령들에 대해 액세스가능한 위치로 복사될 수 있다.
그러나, 실제로, 특권이 덜 주어진 실행 모드들에 대해 액세스가능한 레지스터들은 또한 하이퍼바이저 실행 모드에 액세스가능할 수 있고, 따라서, 그들 레지스터들의 값들을 레지스터들 사이에 실제로 복사할 필요가 없을 수 있다. 대신에, 일부 예들에서, 스케줄링 힌트 정보는 하이퍼바이저에 대한 조건부 산출 명령에 의해 특정되는 적어도 하나의 레지스터 특정자의 표시를 포함할 수 있다. 레지스터 특정자의 크기는 종종, 레지스터 자체 내의 비트들의 개수보다 더 작을 수 있고, 따라서, 이러한 접근법은 에너지를 절약할 수 있는 기록될 비트의 개수를 감소시킬 수 있다.
일부 시스템들에서, 아키텍처는 상이한 레지스터 폭들의 레지스터들을 지원할 수 있고, 따라서, 이 경우에 스케줄링 힌트 정보는 또한, 적어도 하나의 레지스터 특정자에 의해 특정된 적어도 하나의 레지스터의 레지스터 폭의 표시를 포함할 수 있고, 따라서, 하이퍼바이저는 레지스터의 얼마나 많은 비트들을 체크할지를 결정할 수 있을 것이다.
예를 들어, 이들 레지스터들은 가상 프로세서에 의해 사용되어 메모리 시스템 내의 주어진 메모리 어드레스의 마지막으로 보인 값을 추적할 수 있는데, 이는, 그것이, 가상 프로세서가 이어서 코드의 다음 섹션으로 진행할 수 있음을 나타내는 소정 값으로 변경되었는지 여부를 결정하도록 폴링(polling)될 수 있다. 어느 레지스터들이 폴링된 변수의 마지막으로 보인 값을 저장하는지의 표시를 반환함으로써, 이는 하이퍼바이저가, 폴링된 변수가 마지막으로 보인 값으로부터 변경되었는지 여부를 체크할 수 있게 할 수 있으며, 이 시점에서는, 이제, 이전에 실행된 가상 프로세서를 다시 한번 리스케줄링하고자 시도할 가치가 있을 수 있다. 폴링된 변수가 여전히 마지막으로 보인 값과 동일하지만, 이는, 트랩 조건이 여전히 만족될 가능성이 있고, 따라서, 폴링된 변수의 값이 변경될 때까지 가상 프로세서를 리스케줄링하는 것이 아무 의미도 없을 것임을 나타낼 것이다. 따라서, 일부 예들에서, 하이퍼바이저에 대한 조건부 산출 명령은 코드의 시퀀스에 포함될 수 있고, 여기서 그것은 폴링된 변수의 값을 주어진 목적지 레지스터 내로 로딩하는 소정 명령을 따르고, 이어서, 하이퍼바이저에 대한 조건부 산출 명령은 폴링된 변수를 저장하는 데 사용되는 목적지 레지스터의 레지스터 특정자를 특정할 수 있다. 이는 하이퍼바이저에 대한 조건부 산출 명령에 대한 단 하나의 예시적인 용례이고, 동일한 명령이 또한 다른 정보를 다시 하이퍼바이저에 전달하는 데 사용될 수 있음이 이해될 것이며, 여기서 트랩 조건이 만족되는지 여부를 결정하는 데 유용한 정보를 저장하는 레지스터는 그의 레지스터 특정자가 스케줄링 힌트 정보로서 하이퍼바이저로 전달되게 하여, 하이퍼바이저가 그 레지스터로부터 값을 자체적으로 판독할 수 있게 한다.
일부 예들에서, 스케줄링 힌트 정보는 하이퍼바이저에 대한 조건부 산출 명령에 의해 특정된 복수의 레지스터 특정자들의 표시를 포함할 수 있다. 일부 경우들에 있어서, 트랩 조건이 이전에 실행된 가상 프로세서에 대해 여전히 만족될 가능성이 있는지 여부를 평가하기 위해 다수의 상이한 값들이 하이퍼바이저에 대해 이용가능해지게 하는 것이 유용할 수 있다. 예를 들어, 일부 경우들에 있어서, 메모리 내의 변수의 폴링은 변수의 어느 부분이 체크되어야 하는지를 특정하는 마스크 값에 의해 한정될 수 있다. 예를 들어, 메모리 내의 주어진 리소스에 대한 액세스를 제어하는 데 사용되는 로크 변수는, 로크를 유지하는 프로세스의 아이덴티티를 특정하는 필드뿐만 아니라, 로크가 현재 설정되어 있는지 또는 클리어되어 있는지를 나타내는 필드를 포함하는 다수의 필드들을 포함할 수 있다. 폴링이, 로크가 설정되어 있는지 또는 클리어되어 있는지를 나타내는 필드의 변화들에만 응답함을 보장하기 위해 마스크가 사용될 수 있다. 따라서, 그러한 마스크가 하이퍼바이저에 대해 이용가능해지게 하는 것이 유용할 수 있고, 이는 폴링된 변수의 마지막으로 보인 값을 유지하는 레지스터의 레지스터 특정자에 더하여 마스크 레지스터의 레지스터 특정자를 전달함으로써 행해질 수 있다. 다시, 이는 단지 하나의 용례이며, 대체적으로, 하이퍼바이저에 대한 조건부 산출 명령은, (이전의 명령들에 의해 그들 레지스터들의 어떤 내용들이 제공되었는지에 관계없이) 임의의 2개 이상의 레지스터 특정자들이 하이퍼바이저 실행 모드에 대해 액세스가능한 위치 내로 복사될 수 있게 하는 인코딩을 가질 수 있다.
하이퍼바이저 실행 모드에서 실행되는 명령들에 대해 액세스가능한 적어도 하나의 저장 요소는 적어도 하나의 레지스터일 수 있다. 일부 경우들에 있어서, 스케줄링 힌트 정보가 기록되는 레지스터는 하이퍼바이저 실행 모드보다 특권이 덜 주어진 실행 모드에서 실행되는 다른 명령들에 대해 액세스불가능한 레지스터일 수 있다. 이는, 프로세싱 시스템 상에서 구동되는 다른 가상 머신들 또는 애플리케이션들이, 하이퍼바이저에 대한 산출을 트리거시킨 가상 머신의 기능에 대한 식견을 얻을 수 있는 것을 회피시킬 수 있다. 이는, 보안이 우려되는 일부 구현예들에서 중요할 수 있다.
일례에서, 하이퍼바이저에 대한 조건부 산출 명령은, 일정 클래스의 하나 이상의 이벤트들 중 하나의 이벤트가 발생한 것으로 나타내질 때까지 기다릴 것을 프로세싱 회로부에 명령하기 위한 WFE(wait-for-event) 명령을 포함할 수 있다. 프로세싱 회로부는, 그 클래스의 하나 이상의 이벤트들 중 하나의 이벤트가 발생한 것으로 나타내질 때 적어도 하나의 트랩 조건이 만족되지 않는다고 결정할 수 있다. 그 클래스의 이벤트들은 인터럽트 또는 예외의 발생, 디버그 인터럽션의 발생과 같은 다양한 액션들, 또는 중단점(breakpoint) 또는 감시점(watchpoint)과 같은 다른 진단 이벤트, 또는 전용 모니터에 의해 추적되는 추적된 어드레스에 대한 메모리 액세스의 검출을 포함할 수 있다. 대체적으로, 프로세싱 회로부는 이들 이벤트들 중 어느 것도 발생하지 않은 경우에 WFE 명령에 응답하여 하이퍼바이저에 트랩핑될 수 있다. 이들 이벤트들 중 하나의 이벤트가 발생한 경우, WFE 명령은 하이퍼바이저에 트랩핑되지 않을 수 있고, 가상 프로세서는 후속 명령들의 프로세싱을 계속할 수 있다.
이는, 그 클래스의 이벤트가 전용 모니터에 의해 추적되는 추적된 어드레스에 대한 메모리 액세스의 검출을 포함하는 경우에 특히 유용할 수 있다. 이는, 상기에서 논의된 바와 같이, 로크들 또는 큐 구조들을 수반하는 작업부하들이 공유 리소스들에 대한 액세스를 관리할 수 있게 하는 데 유용할 수 있다. 이러한 접근법에 의해, 추적될 주어진 어드레스가 전용 모니터에 할당될 수 있으며, 이는 이어서 다른 프로세서 코어들 또는 다른 스레드들에 의해 행해진 메모리 액세스들을 모니터링할 수 있다. 추적된 어드레스에 대한 메모리 액세스가 검출되는 경우, 이것은 이벤트로서 시그널링될 수 있다. WFE 명령에 직면하게 되고 이벤트들(추적된 어드레스에 대한 메모리 액세스를 포함함) 중 하나가 발생했다는 표시가 검출되는 경우, WFE 명령은 하이퍼바이저에 트랩핑되지 않는데, 이는, 추적된 어드레스가 이제, 트랩 조건이 만족되지 않게 할 값으로 업데이트되어, 가상 프로세서가 계속해서 순방향 진행을 행할 수 있도록 하는 기회가 있기 때문이다. 발생한 이벤트가 트랩핑을 회피시키기 위해 필요한 값으로의 추적된 어드레스에 대응하는 메모리 위치의 업데이트가 아닌 경우, WFE 명령을 실행하고자 하는 후속 시도가 이어서 한번 더 트랩핑할 수 있다. 이러한 접근법에 의해, WFE 명령은, WFE가 아직 일어나지 않은 경우들에 있어서, 하이퍼바이저에 대한 프로세서의 제어를 조건부로 산출하는 데 효과적으로 사용될 수 있다. 상기에서 논의된 접근법에 의해, 그러한 WFE 명령은, 하이퍼바이저가, 트랩 조건이 여전히 만족되는지 여부를 추정할 수 있게 하기 위한 스케줄링 힌트 정보의 적어도 하나의 아이템을 또한 반환하도록 확장될 수 있다.
예를 들어, 스케줄링 힌트 정보의 적어도 하나의 아이템은 WFE 명령을 실행할 시에 전용 모니터에 의해 추적되는 추적된 어드레스에 대응하는 힌트 어드레스를 포함할 수 있다. 이러한 힌트 어드레스는, 상기에서 논의된 바와 같이, 하이퍼바이저에 대한 조건부 산출 명령에 의해 특정된 하나 이상의 레지스터들의 레지스터 특정자에 더하여 기록될 수 있다. 힌트 어드레스를 기록함으로써, 이는, 하이퍼바이저가, 힌트 어드레스 자체와 연관된 데이터 값을 체크하고, 그 힌트 어드레스에서의 값이 변경되었는지 여부를 결정할 수 있게 하여, 그것이 이를 그의 스케줄링 결정에 고려할 수 있게 한다. 힌트 어드레스에서의 데이터 값이 그의 이전에 보인 값으로부터 변경되지 않은 경우들에 있어서, 동일한 가상 프로세서를 다시 리스케줄링할 가치가 없음이 하이퍼바이저에 의해 결정될 수 있다.
일부 시스템들은, 가상 어드레스들과 중간 어드레스들 사이의 맵핑을 나타내는 제1 어드레스 변환 데이터, 및 중간 어드레스들과 물리적 어드레스들 사이의 맵핑을 나타내는 제2 어드레스 변환 데이터에 기초하여, 프로세싱 회로부에 의해 실행되는 명령에 의해 특정된 가상 어드레스를 가상 어드레스에 대응하는 메모리 위치를 식별하는 물리적 어드레스로 변환하기 위해 어드레스 변환 회로부가 제공되는 2-스테이지 어드레스 변환을 사용할 수 있다. 그러한 2-스테이지 어드레스 변환은 가상화된 시스템에서 유용할 수 있는데, 그 이유는 제1 어드레스 변환 데이터가 가상 머신 소프트웨어에 의해 설정되고 제2 어드레스 변환 데이터가 하이퍼바이저에 의해 설정되어, 각각의 가상 머신이, 그것이 프로세싱 하드웨어 상에서 구동되는 유일한 운영 체제였던 경우와 같이 동일한 방식으로 메모리에 대한 액세스를 관리할 수 있게 할 수 있는 한편, 제2 어드레스 변환 데이터가 하이퍼바이저에 의해 사용되어, 상이한 가상 머신들로부터의 중간 어드레스들 대 상이한 물리적 어드레스들의 충돌을 맵핑시킬 수 있기 때문이다.
그러한 2-스테이지 어드레스 변환 스킴에서, 상기에서 논의된 추적된 어드레스는 물리적 어드레스일 수 있다. 그러나, WFE 명령에 응답하여, 스케줄링 힌트 정보는 추적된 어드레스에 대응하는, 중간 어드레스로서 반환되는 힌트 어드레스를 포함할 수 있다. 이는, 하이퍼바이저가 전형적으로, 중간 어드레스를 물리적 어드레스의 경우보다 더 효율적으로 기존의 맵핑의 하이퍼바이저 가상 어드레스로 변환할 수 있기 때문에 유용할 수 있다.
스케줄링 정보가 추적된 어드레스에 대응하는 중간 어드레스를 포함해야 하는 경우들에 있어서, 스케줄링 힌트 정보는 또한, 추적된 어드레스에 대응하는 중간 어드레스가 WFE 명령에 응답하여 하이퍼바이저 실행 모드로 전환할 시에 이용가능한지 여부에 따라 설정되는 유효 표시를 포함할 수 있다. 일부 경우들에 있어서, WFE 명령을 실행할 시에, 추적된 어드레스에 대응하는 중간 어드레스는 변환 색인 버퍼 또는 다른 어드레스 변환 캐시 내에 캐싱되지 않을 수 있고, 중간 어드레스를 그렇게 얻는 것은 가상 어드레스와 중간 어드레스 사이의 맵핑을 제공하는 페이지 테이블 구조들이 중간 어드레스를 식별하기 위해 순회(walk)되는 동안 약간의 시간이 걸릴 수 있다. 중간 어드레스가 이용가능하지 않지만, 달리, 하이퍼바이저 실행 모드에 대한 트랩핑을 가능하게 하도록 트랩 조건들이 만족되는 경우들에 있어서, 중간 어드레스를 포함하는 전체 스케줄링 힌트 정보가 하이퍼바이저에 대해 이용가능해질 수 없는 경우에도, 하이퍼바이저 실행 모드에 트랩핑하는 것이 결국 더 효율적일 수 있다. 이는, 하이퍼바이저 실행 모드에 대한 트랩핑이 이어서, 하이퍼바이저가 상이한 가상 프로세서를 리스케줄링할 기회를 제공할 것이기 때문인데, 이는, 중간 어드레스가 이용가능해질 때까지 하이퍼바이저 실행 모드에 대한 트랩핑이 지연되었다면 가능하지 않을 것이다. 중간 어드레스에 대한 지식의 결여가, 하이퍼바이저가 이전에 트랩핑된 동일한 가상 프로세서를 이어서 즉시 리스케줄링하는 결과를 가져오는 경우에도, 이는 단순히, 중간 어드레스를 기다리는 동안 트랩핑이 결국 지연된 경우와 같이 동일한 지연 패널티일 것이다. 따라서, 중간 어드레스가 아직 이용가능하지 않은 경우에도 트랩핑함으로써, 이는, 다른 가상 프로세서가 실행될 기회를 부여함으로써 성능을 개선할 수 있는데, 이는 이전에 산출하는 가상 프로세서보다 순방향 진행을 행할 가능성이 더 클 수 있지만, 중간 어드레스가 이용가능할 때, 이어서, 스케줄링 힌트 정보에서 이를 이용가능하게 하는 것은 다음으로 어느 가상 프로세서를 스케줄링하는지에 대한, 하이퍼바이저에 의한 더 많은 정보(informed)의 결정을 허용할 수 있다.
일부 아키텍처들에서, 전용 모니터의 설정은 타깃 어드레스를 특정하는 부하 전용 명령에 응답하여 이루어질 수 있으며, 이에 응답하여 명령 디코더가 프로세싱 회로부를 제어하여 소정 목적지 레지스터 내로 타깃 어드레스에 저장된 데이터 값의 부하를 트리거하고, 또한 타깃 어드레스를 추적된 어드레스로서 설정하도록 전용 모니터를 트리거한다.
상기에서 논의된 바와 같이 2-스테이지 어드레스 변환을 사용하는 시스템에서, 어드레스 변환 회로부는 가상 어드레스, 중간 어드레스 및/또는 물리적 어드레스 사이의 어드레스 맵핑의 부분들을 캐싱하기 위한 변환 캐시를 가질 수 있다. 일부 접근법들은 분할 변환 캐시들을 사용할 수 있는데, 여기서 가상 어드레스와 중간 어드레스 사이의 맵핑을 제공하는 제1 어드레스 변환 데이터의 엔트리들을 캐싱하기 위해 제1 어드레스 변환 캐시가 제공되고, 중간 어드레스들과 물리적 어드레스들 사이의 맵핑들을 제공하는 제2 어드레스 변환 데이터의 부분들을 캐싱하기 위해 제2 개별 변환 캐시가 제공된다.
그러나, 다른 구현예들은 가상 어드레스로부터 물리적 어드레스로의 직접 맵핑을 저장하기 위한 캐시 엔트리들을 갖는 조합된 변환 캐시를 사용하여, 중간 어드레스를 바이패스할 수 있다. 따라서, 그러한 조합된 변환 캐시가 업데이트될 때, 업데이트된 엔트리에서 특정된 정보는, 가상 어드레스들과 중간 어드레스들 사이의 맵핑을 제어하는 제1 어드레스 변환 데이터, 및 중간 어드레스들과 물리적 어드레스들 사이의 맵핑을 제어하는 제2 어드레스 변환 데이터 둘 모두에 의존할 것이다.
분할 변환 캐시 접근법을 사용하는 시스템들에서, WFE 명령에 직면하고 뒤이어 주어진 타깃 어드레스가 전용 모니터에 의해 추적되게 했던 부하 전용 명령의 이전 실행이 뒤따를 때, 추적된 어드레스에 대응하는 중간 어드레스는 분할 변환 캐시들 중 제1 어드레스 변환 캐시 내에 여전히 캐싱될 수 있을 가능성이 더 크다.
그러나, 조합된 변환 캐시를 사용하는 시스템들에서, 조합된 변환 캐시의 캐시 엔트리들이 가상 어드레스들로부터 물리적 어드레스들로의 직접 맵핑을 저장하기 때문에, 중간 어드레스가 스케줄링 힌트 정보에 포함되기 위해 이용가능할 가능성이 더 작을 수 있다. 따라서, 그러한 시스템에서, 조합된 변환 캐시가 부하 전용 명령의 타깃 어드레스에 대응하는 가상-대-물리적 어드레스 맵핑을 저장하는 캐시 엔트리를 이미 포함할 때에도, 부하 전용 명령이 제1 어드레스 변환 데이터의 검색을 트리거하여 부하 전용 명령의 타깃 어드레스에 대응하는 중간 어드레스를 얻는 것이 유용할 수 있다. 예를 들어, 어드레스 변환 회로부는 이러한 방식으로 부하 전용 명령들의 타깃 어드레스들에 대응하는 다수의 중간 어드레스들을 캐싱하기 위한 소량의 추가적인 캐시 저장소를 가질 수 있다. 요구되는 가상 대 물리적 어드레스 맵핑이 어드레스 변환 캐시에서 이미 이용가능할 때 그러한 중간 어드레스가 부하 전용 명령을 자체적으로 제공하기 위해 요구되지 않을 것이지만, 추가적인 중간 어드레스 검색을 트리거하는 것이 유용할 수 있는데, 그 이유는, 이것이, 후속 WFE 명령이 이어서 실행되는 경우, 추적된 어드레스에 대응하는 중간 어드레스가 어드레스 변환 회로부에 대해 이용가능할 가능성이 더 크고, 따라서, 중간 어드레스가 상기에서 논의된 바와 같이 스케줄링 힌트 정보로서 반환될 수 있을 가능성이 더 크다는 것을 의미하기 때문이다. 따라서, 조합된 변환 캐시를 사용하는 마이크로아키텍처 구현예들에서, 부하 전용 명령에 대한 직접적인 가상-대-물리적 어드레스 맵핑이 이미 이용가능한지 여부와는 관계없이 중간 어드레스 검색을 트리거하는 것은 하이퍼바이저에 대한 성능을 개선할 수 있는데, 그 이유는, 그것이 가상 프로세서를 스케줄링하는 것에 대해 더 양호한 결정들을 행할 수 있도록 스케줄링 힌트 정보의 일부로서 중간 어드레스를 수신할 가능성이 더 크기 때문이다.
그럼에도 불구하고, 하이퍼바이저에 대한 조건부 산출 명령, 및 WFE 명령의 특정 예는 또한, 제1 스테이지 및 제2 스테이지 어드레스 맵핑들에 각각 전용되는 분할 어드레스 변환 캐시들을 사용하는 마이크로아키텍처들에서 사용될 수 있다는 것이 이해될 것이다.
일부 예들에서, 스케줄링 힌트 정보의 적어도 하나의 아이템은, WFE 명령을 실행할 시에 전용 모니터가 추적된 어드레스로서 임의의 어드레스를 추적하고 있었는지 여부에 따라 설정되는 유효 표시를 포함할 수 있다. 이러한 표시는 중간 어드레스가 상기에서 논의된 바와 같이 이용가능한지 여부를 나타내는 유효 표시와 동일할 수 있거나, 또는 별개의 표시일 수 있다. 전용 모니터에 의해 어떠한 어드레스도 추적되지 않은 경우에 무효 표시를 반환함으로써, 이것은, 가상 프로세서를 리스케줄링할지 여부를 결정할 때 힌트 어드레스를 고려하지 않아야 함을 하이퍼바이저에 플래깅할 수 있다. 예를 들어, 때때로 WFE 명령들은 메모리 내의 어드레스의 폴링을 처리하는 것 이외의 목적들을 위해 사용될 수 있고, 따라서, 하이퍼바이저에 이용가능한 전용 모니터에 의해 어드레스가 추적되게 하는 것이 항상 요구되는 것은 아닐 수 있고, 따라서, 유효 표시는, 전용 모니터에 의해 추적된 어드레스에 대응하는 저장 비트들이 그의 스케줄링 결정을 행할 때 하이퍼바이저에 의해 체크되어야 하는지 여부를 한정하는 데 유용할 수 있다.
일부 경우들에 있어서, 적어도 하나의 트랩 조건이 하이퍼바이저에 대한 조건부 산출 명령에 대해 만족되는지 여부는 하이퍼바이저 제어 레지스터에 저장된 트랩 제어 표시자에 의존할 수 있는데, 이는 하이퍼바이저에 대한 조건부 산출 명령이 하이퍼바이저를 추적해야 하는지 여부를 나타낸다. 따라서, 일부 경우들에 있어서, 각각 만족되어야 하는 다수의 형태들의 트랩 조건이 있을 수 있는데, 예컨대, 트랩 조건들의 전체 세트는, 트랩 조건 표시자가 하이퍼바이저에 대한 조건부 산출 명령이 트랩핑해야 함을 나타내는 것, 및 프로세싱 회로부가 WFE 명령에 응답하여 일정 클래스의 하나 이상의 이벤트들 중 어느 것도 발생한 것으로 나타내지지 않았다고 결정하는 것 둘 모두의 경우에 만족될 수 있다.
하이퍼바이저 제어 레지스터를 사용하여 하이퍼바이저에 대한 조건부 산출 명령에 응답하여 하이퍼바이저에 대한 트랩핑을 디스에이블시키는 능력은 유용할 수 있는데, 그 이유는 때때로, 가상 프로세서가 주어진 물리적 플랫폼 상에서 구동되는 유일한 가상 프로세서일 수 있기 때문이며, 그 경우에 있어서, 하이퍼바이저에 대한 조건부 산출 명령이 트랩핑하지 않고, 그 대신, 트랩 없이 가상 프로세서 자체 내에서 계속해서 프로세싱하는 것이 더 효율적일 수 있는데, 이는 가상 프로세서가 기다리고 있는 이벤트가 아직 일어나지 않은 경우에도, 하드웨어에서 제공된 프로세싱 리소스를 이용할 수 있는 임의의 다른 가상 프로세서가 없을 수 있기 때문이다.
보다 구체적으로, 하이퍼바이저 제어 레지스터는 제1 값 및 제2 값 중 하나를 갖는 트랩 제어 표시자를 저장할 수 있다. 전술된 WFE 명령 예에서, 트랩 제어 표시자가 제1 값을 가질 때, 프로세싱 회로부는 일정 클래스의 이벤트들 중 임의의 이벤트가 발생한 것으로 나타내지는지 여부에 관계없이 적어도 하나의 트랩 조건이 만족되지 않는다고 결정할 수 있다. 트랩 제어 표시자가 제2 값을 가질 때, 프로세싱 회로부는 요구되는 클래스의 하나 이상의 이벤트들 중 임의의 이벤트가 발생했는지 여부에 기초하여 적어도 하나의 트랩 조건이 만족되는지 여부를 결정할 수 있다. 따라서, 트랩 제어 표시자가 제2 값을 가질 때, 그 클래스의 이벤트들 중 어느 것도 발생한 것으로 나타나지 않은 경우에는 적어도 하나의 트랩 조건이 만족된 것으로 간주되는 한편, 그 클래스의 하나 이상의 이벤트들 중 하나의 이벤트가 발생한 것으로 나타내진 경우에는 적어도 하나의 트랩 조건이 만족되지 않는다.
도 1은 다수의 프로세서 코어들(4)을 포함하는 데이터 프로세싱 시스템(2)의 일례를 개략적으로 도시한다. 이러한 예에서, 시스템은 2개의 프로세서 코어들을 갖는 다중 프로세서 시스템이지만, 다른 예들은 더 많은 수의 프로세서 코어들을 가질 수 있거나 또는 단일 프로세서 코어만을 제공할 수 있다. 다수의 프로세서 코어들(4)이 제공되는 경우, 그들은 각자의 코어들 내의 캐시들(8) 사이의 코히어런스(coherency)를 관리할 수 있는 상호접속부(6)를 통해 서로 통신할 수 있다. 프로세서 코어들(4)은 공유 캐시(10) 및 메인 메모리(12)를 포함할 수 있는 공유 메모리 시스템에 대한 액세스를 공유할 수 있다. 각각의 프로세서 코어(4)는, 명령 캐시 또는 메모리로부터 페칭(fetch)된 명령들을 디코딩하고, 데이터 프로세싱 동작들을 수행하도록 프로세싱 회로부(16)를 제어하기 위한 제어 신호들을 생성하기 위한 명령 디코더(14)를 포함할 수 있다. 각각의 코어(4)는 프로세싱 회로부(16)에 의해 프로세싱된 피연산자들을 저장하기 위한 그리고 프로세싱 회로부(16)의 동작을 제어하기 위한 제어 값들을 저장하기 위한 레지스터들(18)을 가질 수 있다. 각각의 코어는 또한, 가상 및 물리적 메모리 어드레스들 사이를 변환하기 위한 어드레스 변환 회로부로서 작용하는 메모리 관리 유닛(memory management unit, MMU)(20), 및 시스템의 다른 부분들에 의한 특정 어드레스들에 대한 액세스를 추적하기 위한 전용 모니터(22)를 가질 수 있는데, 이들 둘 모두는 아래에서 더 상세히 설명될 것이다.
도 1에서, 프로세서 코어들(4) 각각의 일반적인 구성이 동일한 것으로 도시되어 있지만, 동일한 시스템 내의 상이한 코어들 사이에 여전히 마이크로아키텍처 차이들이 있을 수 있어서, 각각의 코어가 동일한 것이 필수적인 것은 아님이 이해될 것이다. 예를 들어, 하나의 프로세서 코어(4)는 다른 코어(4) 내의 프로세싱 회로부(16)보다 더 큰 처리량의 명령들이 가능할 수 있는 프로세싱 회로부(16)를 가질 수 있거나, 또는 하나의 코어는 다른 코어보다 더 큰 캐시 용량을 가질 수 있다.
도 2에 도시된 바와 같이, 프로세싱 시스템은 가상화를 지원하는 아키텍처를 가질 수 있으며, 여기서 다수의 가상 머신들은 하이퍼바이저의 제어 하에서 동일한 물리적 플랫폼 상에서 실행될 수 있다. 각각의 가상 머신은, 가상 머신이, 존재하는 유일한 운영 체제인 고유(native) 운영 체제였던 경우와 같이 동일한 방식으로 가상 머신 하에서 구동되는 다수의 애플리케이션들의 실행을 관리할 수 있지만, 하이퍼바이저는 상이한 가상 머신들의 스케줄링을 관리할 수 있고, 가상 머신에 의해 예상되는 가상 리소스들(메모리, 주변장치 등) 사이의, 물리적 플랫폼(2)에 의해 실제로 제공되는 물리적 리소스들 상으로의 맵핑을 관리할 수 있다. 가상 머신은, 하이퍼바이저가, 주어진 물리적 프로세서 코어의 존재를 각각이 에뮬레이트하는 주어진 수의 가상 프로세서(VP)들을 확립하기 위한 리소스들을 생성할 것을 요청할 수 있지만, 여기서 가상 프로세서(VP)들은 하드웨어에서 제공된 물리적 플랫폼의 물리적 코어들 상에 각각이 맵핑되어, 하드웨어에서 실제로 제공되는 것보다 더 많은 수의 가상 프로세서들이 제공될 수 있게 한다. (가상 머신 하에서 구동되는 애플리케이션들과 함께) 각각의 가상 머신은 소정 수의 가상 프로세서들을 요청하여(예컨대, VM0은 가상 프로세서들(VP0 내지 VP3)의 생성을 요청할 수 있고, VM1은 가상 프로세서들(VP4, VP5)의 생성을 요청할 수 있고, 등등일 수 있음), 주어진 가상 머신의 관점에서, 그것이 소정 수의 프로세서 코어들을 갖는 다중-프로세서-코어 플랫폼 상에서 실행되고 있도록 할 수 있지만, 이들은 실제로 하드웨어 내의 상이한 수의 물리적 코어들 상에 맵핑될 수 있다.
그러한 가상화를 지원하기 위해, 프로세서 코어들(4)은 도 2의 예에서 EL2, EL1, EL0으로 라벨링된 상이한 특권 레벨들의 다수의 실행 모드들을 지원하는 프로세서 아키텍처에 따라 동작할 수 있다. 이러한 예에서, EL0은 최소 특권 동작 상태이고, EL2는 최대 특권 동작 상태이다. 일부 예들에서, EL2보다 훨씬 더 큰 특권의 추가 실행 모드들, 예를 들어 안전한 동작 세계와 덜 안전한 동작 세계 사이의 분할을 제어하기 위한 안전한 모니터 소프트웨어를 실행하기 위한 안전한 모니터 실행 모드가 있을 수 있다.
각각의 실행 모드에서, 프로세싱 회로부(16)는 레지스터들(18)에 저장된 바와 같은 아키텍처 상태의 소정 서브세트에 액세스할 수 있다. 대체적으로, 더 낮은 특권 모드(privilege mode)에 액세스가능한 임의의 상태는 또한, 그 모드보다 특권이 더 주어진 다른 모드들에 액세스가능할 수 있다. 따라서, EL1에서, 프로세싱 회로부(16)에 의해 실행되는 명령들은 EL0에 액세스가능한 임의의 레지스터 상태에 액세스할 수 있지만, 그에 더하여, 또한, EL0에서 동작할 때 프로세서에 액세스가능하지 않은 일부 추가적인 레지스터들에 액세스할 수 있다. 유사하게, EL2에서 동작할 때, 프로세서 코어는 EL0 및 EL1 중 하나에서 동작할 때 프로세서에 액세스가능하지 않은 소정 레지스터들에 액세스할 수 있다. 상이한 실행 모드들 사이의 전환들은 예외들 및 예외 리턴들에 기초할 수 있는데, 이때 예외는 특권이 덜 주어진 상태로부터 특권이 더 주어진 상태로의 전환을 트리거하고, 그 예외의 처리로부터 복귀할 때 특권이 덜 주어진 실행 모드로의 복귀를 프로세싱한다. 예외들은, 하이퍼바이저에 대한 조건부 산출 명령의 실행 또는 메모리 폴트(memory fault)와 같은, 주어진 실행 상태에서 구동되는 소프트웨어에 의해 야기된 이벤트들에 의해 또는 외부 이벤트들에 의해 야기될 수 있다.
도 3은 특정 아키텍처에 따라 프로세서 코어(4)에 제공된 레지스터들(18)의 서브세트의 일례를 도시한다. 이는 제공될 수 있는 레지스터 상태 중 단지 일부이고, 레지스터들(18)은 또한 도 3에 도시되지 않은 다른 아키텍처 레지스터들, 예컨대, 부동소수점 값들을 저장하기 위한 부동소수점 레지스터들 또는 다른 제어 값들을 저장하기 위한 추가 시스템 레지스터들을 포함할 수 있음이 이해될 것이다.
도 3에 도시된 바와 같이, 레지스터들(18)은 실행 모드들 중 임의의 실행 모드에서 실행되는 명령들에 대체적으로 액세스가능한 범용 레지스터들(30)의 세트를 포함할 수 있다. 이들은, 명령들이, 그들 명령들에 대한 피연산자들을 식별하기 위해 사용하거나 명령의 결과가 기록될 수 있는 목적지 레지스터들로서 사용하기 위해 이용가능할 수 있는 소정 수의 범용 레지스터들(X0 내지 X12)을 포함할 수 있다. 범용 레지스터들 중 일부는 프로세서의 동작을 제어하기 위한 특수 목적들을 제공할 수 있다. 예를 들어, 레지스터(X13)는, 예를 들어 예외들 및 예외 리턴들에 응답하여 레지스터 상태를 스태킹 또는 언스태킹(unstacking)하는 데 사용될 수 있는 메모리 내의 대응하는 스택 데이터 구조의 어드레스를 제공하는 스택 포인터 레지스터로서 작용할 수 있다. 레지스터(X14)는 다른 기능을 프로세싱한 후에 프로세싱이 반환할 수 있는 반환 어드레스를 저장하는 링크 레지스터로서 작용할 수 있다. 레지스터(X15)는 현재 실행 지점을 표현하는 어드레스를 나타내는 프로그램 카운터로서 작용할 수 있다.
레지스터들(18)은 또한, 프로세싱 회로부(16)의 동작을 제어하는 데 사용되는 제어 값들을 저장할 수 있는 다수의 시스템 레지스터들(32)을 포함할 수 있다. 도 3은 메모리 폴트를 트리거하는 어드레스들에 대한 정보를 기록하기 위한 폴트 어드레스 레지스터(fault address register, FAR)(34), 발생했을 수 있는 예외들에 대한 정보를 기록하기 위한 뱅킹된 예외 상태 레지스터들(36, 38)의 쌍, 및 하이퍼바이저의 액션을 제어하기 위한 그리고 어느 이벤트들이 하이퍼바이저에 대한 트랩을 트리거하는지를 제어하기 위한 제어 정보를 저장하기 위한 하이퍼바이저 제어 레지스터(40)를 포함할 수 있는 이들 레지스터들의 서브세트를 도시한다.
예를 들어, 메모리 폴트들은 현재 실행되는 프로세스들이 액세스가 요청되었던 메모리의 주어진 영역에 액세스하도록 허용되지 않을 때, 또는 등록된 어드레스에 대한 대응하는 가상 대 물리적 어드레스 맵핑이 여전히 정의되지 않은 경우에 발생할 수 있다. 메모리 폴트를 트리거하는 메모리 액세스에 응답하여, 폴트를 야기한 어드레스는 FAR(34)로 기록되어, 폴트가 EL1에서 가상 머신에 대해 또는 EL2에서 하이퍼바이저에 대해 트랩을 트리거할 때, 감독 코드가 FAR(32)로부터 폴트에 대한 이유를 식별할 수 있게 하고, 이어서, 페이지 테이블 구조에 새로운 엔트리를 할당하는 것과 같은 액션을 취하여, 폴트가 다시 발생하지 않도록 어드레스가 맵핑될 수 있게 할 수 있다.
예외 상태 레지스터들(36, 38)은, EL1에서 실행되는 동안 예외가 발생하는 경우에 레지스터(36)(ESR_EL2)가 사용되어, 예외의 원인에 대한 정보가, 이어서 적절한 액션을 취할 수 있는 EL2에서 실행되는 하이퍼바이저에 이용가능하게 하도록 뱅킹된다. 예를 들어, 예외에 대한 이유를 식별하는 예외 상태 식별자가 예외 상태 레지스터(36)에 저장될 수 있다. 유사하게, EL0에서 실행 중인 동안 예외가 발생하는 경우, EL1에 대응하는 예외 상태 레지스터(38)에 예외에 대한 정보가 기록될 수 있다. 예외 상태 레지스터들을 뱅킹한다는 것은, 일련의 네스트된(nested) 예외들이 발생하는 경우(EL0으로부터 EL1로의 전환을 트리거하는 예외에 뒤이어 EL1로부터 EL2로의 다른 예외가 이어지는 경우), 일단 하이퍼바이저가 EL2에서 예외를 처리했다면, 이어서, EL1에서 실행되는 가상 머신으로 복귀할 시에, 가상 머신이 제2 예외 상태 레지스터(38)(ESR_EL1)의 내용에 기초하여 EL0에서 이전에 발생한 예외에 대한 이유를 여전히 결정할 수 있을 것임을 의미한다.
하이퍼바이저 제어 레지스터(40)는 다수의 상이한 유형들의 이벤트들이 프로세싱 회로부를 트리거하여 하이퍼바이저 모드 EL2로 전환할 수 있는지 여부를 특정하는 다수의 비트들을 포함할 수 있다. 이들 이벤트들 중 하나는 EL0 및 EL1 중 하나에서 실행되는 WFE 명령들이 하이퍼바이저 실행 모드 EL2로의 전환을 트리거할지 여부를 제어하는 트랩 제어 표시자(42)일 수 있다. 하이퍼바이저 구성 레지스터(hypervisor configuration register, HCR)(40)는 또한, 하이퍼바이저의 동작에 영향을 주거나 또는 하이퍼바이저에 대한 트랩을 필요로 하는 상황들을 정의하는 다수의 다른 제어 정보를 포함할 수 있음이 이해될 것이다.
도 3에 도시된 바와 같이, 레지스터들(18)은 또한, 다수의 소정 클래스의 이벤트들 중 하나의 이벤트가 발생한 경우에 설정되는 이벤트 레지스터(44)를 포함할 수 있다. 이벤트 레지스터(44)는 소프트웨어에 직접 보이지 않을 수 있다. 이벤트 레지스터가 설정되게 할 수 있는 이벤트들은 소정 인터럽트들 또는 예외들, 중단점들 또는 감시점들과 같은 특정 디버그 이벤트들, 또는 하기에서 논의되는 바와 같이 전용 모니터(22)에 의해 어드레스를 끌어당기는(attract) 메모리 액세스의 검출을 포함할 수 있다.
도 4에 도시된 바와 같이, 주어진 프로세서 코어(4) 내의 MMU(20)는 2-스테이지 어드레스 변환 프로세스에 따라 어드레스 변환들을 관리할 수 있다. 가상 머신은 가상 어드레스(VA)로부터 중간 물리적 어드레스(IPA)로의 맵핑을 정의하기 위해 메모리 시스템 내에 저장되는 스테이지 1 페이지 테이블들(50)을 정의할 수 있다. 가상 머신은, 그것이 구동 중인 유일한 운영 체제임을 가정하여, 그리고 중간 물리적 어드레스들이 실제로 메모리 시스템 내의 대응하는 위치들을 직접 식별하는 물리적 어드레스들이라고 가정하여 설계되었을 수 있다. 그러나, 하이퍼바이저는 중간 물리적 어드레스들을, 실제로 메모리 시스템 내의 대응하는 위치를 식별하는 물리적 어드레스들에 맵핑하는 것을 제어하는 스테이지 2 페이지 테이블들(52)을 설정할 수 있다. 이는, 하이퍼바이저가, 메모리 내의 상이한 변수들을 참조하도록 상이한 가상 머신들에 의해 사용되는 IPA들을 상이한 물리적 어드레스들에 맵핑시켜서 충돌을 회피시킬 수 있게 할 수 있다.
도 1에 도시된 바와 같이, MMU는, 페이지 테이블들(50, 52)의 부분들이 매번 메모리로부터 판독되어야하는 경우보다 더 빠른 액세스를 위해, 그 부분들을 캐싱하기 위한 적어도 하나의 어드레스 변환 캐시(21)(변환 색인 버퍼 또는 TLB로도 알려져 있음)를 포함할 수 있다. 일부 시스템들에서, TLB(21)는 분할 TLB일 수 있는데, 여기서 스테이지 1 및 스테이지 2 페이지 테이블(50, 52)의 부분들을 각각 캐싱하기 위해 별개의 스테이지 1 및 스테이지 2 TLB들이 제공된다. 그러나, 다른 시스템들은 TLB의 각각의 캐시 엔트리가 스테이지 1 및 스테이지 2 페이지 테이블들(50, 52)로부터 판독된 엔트리들의 조합으로부터 도출되는, VA로부터 TA로의 직접 맵핑을 저장하는 통합 TLB(21)를 사용하여, 물리적 어드레스가 주어진 가상 어드레스에 대해 통합 TLB에 이미 캐싱된 경우에 물리적 어드레스가 더 빠르게 위치될 수 있게 할 수 있다.
도 1에 도시된 바와 같이, 주어진 프로세서 코어(4)는 메모리 내의 소정 어드레스에 대한 액세스들을 모니터링하는 데 사용될 수 있는 전용 모니터(22)를 갖는다. 도 1이 프로세서 코어(4) 자체 내에 제공되는 전용 모니터(22)를 도시하지만, 다른 예들에서, 전용 모니터는 상호접속부(6) 내에 제공될 수 있다. 따라서, 대체적으로, 코어(4)는 모니터링될 어드레스가 등록될 수 있는 구조를 제공하는 전용 모니터(22)에 액세스한다. 일단 어드레스가 전용 모니터(22)에서 추적되는 것으로 등록되었다면, 전용 모니터 하드웨어(22)는 추적된 어드레스가 액세스되었는지 여부를 검출하기 위해 데이터 프로세싱 시스템의 다른 부분들에 의해 이루어진 메모리 액세스들의 어드레스들을 체크할 수 있다. 예를 들어, 전용 모니터(22)는 다른 프로세서 코어(4)에 의한 메모리에 대한 액세스들에 의해 트리거되는, 상호접속부(6)로부터 수신된 스누프(snoop)들을 인터셉트할 수 있으며, 스누프 요청에 나타내진 어드레스가 전용 모니터(22)에 기록된 추적된 어드레스와 매칭되는 경우, 전용 모니터는 이벤트를 시그널링할 수 있고, 이는 도 3에 도시된 이벤트 레지스터(44)의 설정을 트리거할 수 있다.
도 5에 도시된 바와 같이, 전용 모니터(22)에 의해 추적될 어드레스의 설정은 명령 디코더(14)에 의해 디코딩된 부하 전용 명령에 응답하여 수행될 수 있다. 단계(100)에서, 부하 전용 명령에 직면하게 된다. 부하 전용 명령은 목적지 레지스터, 및 가상 어드레스일 수 있는 메모리 어드레스 #add를 식별하기 위한 하나 이상의 파라미터들을 특정할 수 있다. 예를 들어, 어드레스는 기본 레지스터 및 오프셋 또는 기본 레지스터 및 즉시 값, 또는 임의의 다른 어드레싱 모드를 통해 식별될 수 있다. 부하 전용 명령에 응답하여, 단계(102)에서, 프로세싱 회로부(16)는 가상 어드레스 #add에 대응하는 물리적 어드레스를 모니터링될 추적된 어드레스로서 설정하도록 전용 모니터(22)를 트리거한다. 임의의 다른 어드레스가 이전에 추적되고 있던 경우, 이것은 폐기될 수 있는데, 이는 일부 예들에서, 한 번에 하나의 어드레스를 추적하기 위한 공간만이 있을 수 있기 때문이다. 단계(104)에서, 부하 전용 명령에 응답하여, 프로세싱 회로부(16)는 또한, 특정된 어드레스 #add에 대응하는 메모리 내의 어드레스로부터 목적지 레지스터(Xd)로 데이터 값의 부하를 트리거하도록 제어된다.
도 6은 전용 모니터(22)에 의한 메모리 액세스들의 추적을 예시하는 흐름도를 도시한다. 단계(110)에서, 전용 모니터(22)는, 예를 들어, 그 메모리 액세스 요청에 의해 트리거되는 스누프 요청을 인터셉트함으로써, 주어진 어드레스에 대한 메모리 액세스가 요청됨을 검출한다. 단계(112)에서, 전용 모니터는 메모리 액세스에 의해 특정된 어드레스를 모니터링되기 위해 등록된 추적된 어드레스와 비교하고, 그들이 동일한지 여부를 결정한다. 그렇지 않은 경우, 추적이 계속되고, 방법은 단계(110)로 복귀하여 다음 메모리 액세스를 검출한다. 메모리 액세스의 어드레스가 추적된 어드레스와 매칭되는 경우, 단계(114)에서, 이벤트 레지스터(44)를 업데이트함으로써 이벤트가 시그널링된다.
전용 모니터를 설정하기 위한 부하 전용 명령의 사용은 거동들을 폴링하는 것을 가능하게 하는 데 유용할 수 있으며, 여기서 주어진 가상 머신(또는 가상 머신 하에서 구동 중인 애플리케이션)은 부하 전용 명령, 및 뒤에 이어진, 이벤트가 시그널링될 때까지 어떠한 다른 액션도 필요하지 않음을 프로세싱 회로부(16)에게 나타낼 수 있는 WFE 명령을 사용하여 공유 메모리 내의 변수를 폴링할 수 있다. 예를 들어, 그러한 가상 머신은 하기와 같은 폴링 루프를 포함할 수 있다:
MOV X2, #0xFF00 // 비트 15:8을 폴링할 것임
SEVL // 트랩핑을 즉시 회피시키기 위해 로컬 이벤트를 전송함
loop:
WFE // 어떠한 이벤트도 계류 중이 아닌 경우,
// 하이퍼바이저에 대해 트랩핑함
LDXR X0, [X1] // X1은 공유 메모리 내의 변수의
// 게스트 가상 어드레스를 보유함
AND X0, X0, X2 // 마스크를 사용하여 변수의 요구되는 부분을 분리시킴
CBNZ X0, loop // 변수를 0과 비교하고, 변수가 0이 아닐 때까지 루핑함
따라서, 루프가 실행되는 제1 시간에, WFE 명령은 이벤트가 발생했음을 검출하는데, 그 이유는 후속 부하 전용 명령이 적어도 한번 실행될 것임을 보장하기 위해 그것이 로컬 이벤트를 트리거하는 데 사용되었던 SEVL 명령 바로 뒤에 오기 때문이다. 이어서, 부하 전용 명령은 메모리로부터 공유 변수를 판독하고, AND 명령은 레지스터(X2) 내의 마스크에 기초하여 반환 값을 마스킹하고, 조건부 분기 명령(CBNZ)은 마스크 값이 0이 아닌 경우에 마커 "loop"로 다시 분기할 것이다. 따라서, 이는, 공유 메모리 내의 변수의 값이 0으로 변경될 때까지 루프가 계속해서 이리저리 루핑하는 일례인데, 예를 들어, 이는 어떠한 다른 프로세스도 이제, 메모리 내의 일부 연관 데이터 구조에 대한 액세스를 통제하는 로크를 보유하지 않음을 나타낼 수 있다. 이때, 가상 머신 또는 애플리케이션을 실행시키는 가상 프로세서는, 이어서, 그 데이터 구조를 실제로 사용하는 코드에 대한 루프를 넘어서 진행할 수 있을 것이다.
가상 머신 또는 애플리케이션을 실행시키는 가상 프로세서가 구동 중인 유일한 가상 프로세서인 시스템들에서, WFE 명령은, 단순히, 이벤트가 시그널링될 때까지 프로세싱 회로부(16)가 실행을 일시정지하게 할 수 있는데, 이 시점에서 공유 메모리 내의 값이 변경되었는지 여부가 체크된다. 그러나, 가상화된 시스템에서, 단순히 가상 프로세서가 일시정지할 수 있게 하는 것은 비효율적일 수 있는데, 이는 이벤트가 시그널링되기를 기다리는 시간에, 하이퍼바이저가, 이전 가상 프로세서가 이벤트가 발생하기를 기다리고 있는 기간 내의 프로세서 시간에 따라 일부 유용한 작업을 할 수 있는 다른 가상 프로세서를 리스케줄링할 수 있기 때문이다. 따라서, 어떠한 이벤트도 계류 중이 아닌 경우들에 있어서 하이퍼바이저에 대해 트랩핑하도록 WFE 명령들을 구성하는 것이 바람직할 수 있다. 이는, 관련 클래스의 이벤트들 중 어느 것도 발생하지 않은 경우들에 있어서 WFE 명령이 하이퍼바이저에 대한 트랩을 트리거해야 함을 나타내기 위해, 하이퍼바이저 구성 레지스터(40) 내에 TWE 플래그(42)를 설정함으로써 행해질 수 있다.
그러나, WFE 명령이 하이퍼바이저에 대한 트랩을 트리거하는 경우에도, 하이퍼바이저는 이어서 다음에 어느 가상 프로세서를 스케줄링할지를 결정할 필요가 있다. 이를테면, 가상 프로세서(VP0)가 상기의 예에서와 같이 폴링 루프 내의 WFE 명령으로 인해 막 트랩핑되었다면, 하이퍼바이저가 단순히 VP0을 다시 선택하고 메모리 내의 폴링된 변수가 변경되지 않은 경우, 이는 단순히 가상 프로세서가 다시 트랩핑하게 할 것이고, 따라서, 어떠한 순방향 진행도 이루어지지 않고 프로세서 시간이 낭비된다. 하이퍼바이저가 순방향 진행을 행할 수 있는 다른 가상 프로세서들(VP1 내지 VPn) 중 하나를 선택하는 것이 더 양호할 수 있다. 그러나, 하이퍼바이저는 각각의 가상 머신 내에서 수행되는 정밀한 동작들의 시인성(visibility)을 거의 갖지 않을 수 있고, 따라서, 하이퍼바이저에 대한 트랩이 메모리 내의 공유 변수를 폴링하고 있는 루프 내에서 WFE 명령에 의해 야기되었는지 여부를 알 수 없다. 큐 메커니즘을 사용하여 다수의 상이한 가상 프로세서들 사이에서 소정 순서로 공유 데이터에 대한 액세스를 처리하는 일부 작업부하들에서, 이러한 문제는 심지어 더 중요할 수 있는데, 그 이유는 이를테면, 가상 프로세서들이 큐에서 VP1, VP2, VP0의 순서로 있는 경우, VP들 중 임의의 것이 공유 변수를 사용하여 순방향 진행을 행하기 위해, 하이퍼바이저가 다음에 VP1을 선택해야 하기 때문이며, 이는 VP0도 VP2도, 그들이 큐에서 VP1 뒤에 있는 경우에는 진행을 행할 수 없을 것이기 때문이다. 그러나, 기존의 기법들에서는, 하이퍼바이저가, 그들이 공유 로크 구조 또는 큐에 대한 액세스로 인해 어느 가상 프로세서가 유지될 가능성이 최소인지를 결정할 수 있게 하는 정보에 액세스하는 것이 어렵다. 하나의 접근법은 반가상화일 수 있지만, 그러한 접근법에 대한 단점들은 상기에서 논의된 바와 같이 이식가능성의 결여 및 성능의 손실이다.
도 7에 도시된 바와 같이, 본 출원에서, WFE 명령이 소스 피연산자들로서 한 쌍의 레지스터 인수들(Xa, Xb)을 취하도록 확장되지만, 달리, 트랩핑 거동이 WFE 명령에 대해 상기에서 논의된 바와 같은 것인 대안적인 접근법이 제안된다. 따라서, 하이퍼바이저 제어 레지스터(40)의 TWE 비트(42)가 적절한 값으로 설정되는 경우들에 있어서, WFE 명령은 관련 이벤트들 중 어느 것도 이벤트 레지스터(44)에서 시그널링되지 않았을 때 하이퍼바이저에 대한 트랩을 트리거할 것이다. 그러나, WFE 명령이 EL2로의 트랩을 행할 때, 이것은 하이퍼바이저에 대한 스케줄링 힌트 정보의 반환을 트리거하는데, 이는 하이퍼바이저에 액세스가능한 시스템 레지스터들(32) 중 일부 내에서 하이퍼바이저에 액세스가능하게 된다. 예를 들어, WFE 명령에 의해 특정된 레지스터 번호들(Xa, Xb)의 레지스터 번호들, 및 그들의 레지스터 폭의 표시는 하이퍼바이저 실행 모드 EL2와 연관된 예외 상태 레지스터(36)에 기록될 수 있다. 또한, 전용 모니터(22)가 추적된 어드레스를 현재 추적하고 있었고 중간 물리적 어드레스가 그의 TLB(21) 내의 MMU(20)에 대해 이용가능한 경우, 폴트 어드레스 레지스터(34)는 전용 모니터(22)에 의해 추적되고 있는 물리적 어드레스에 대응하는 중간 물리적 어드레스를 나타내도록 업데이트될 수 있거나, 또는 전용 모니터(22)가 임의의 어드레스를 현재 추적하지 않고 있거나 추적된 물리적 어드레스에 대응하는 중간 물리적 어드레스가 이용가능하지 않은 경우, 폴트 어드레스 레지스터(34)는 그것이 실제 중간 물리적 어드레스를 표현하지 않음을 나타내기 위해 무효 표시로 설정될 수 있다. 예를 들어, 이러한 무효 표시는 메모리 내의 실제 어드레스에 대응하지 않는 어드레스 값일 수 있다. 예를 들어, 어드레스 공간의 일부분은 실제 메모리 위치들에 대응하지 않는 특수한 값들을 위해 예약될 수 있고, 무효 표시는 그들 특수한 값들 중 하나일 수 있다.
이러한 새로운 명령에 의해, 가상 머신 또는 애플리케이션은, 부하 전용 명령, 뒤이어, 변수가 아직 원하는 값에 도달하지 않았다면 새로운 WFE 명령을 사용하여 공유 메모리 내의 변수를 폴링할 수 있다. 변수가 동시에 업데이트되지 않았고 따라서 이벤트가 발생되지 않은 경우, 새로운 명령은 하이퍼바이저 제어 레지스터(40) 내의 트랩 제어부들이 적절히 설정되는 경우에 하이퍼바이저로 트랩핑한다. 가상 머신 또는 애플리케이션은 WFE 명령에서 2개의 레지스터 인수들(Xa, Xb)을 사용하여, 관찰된 공유 변수의 마지막 값, 및 폴링되고 있던 비트들을 특정하는 임의의 마스크를 하이퍼바이저로 전달할 수 있다.
예를 들어, 전술된 코드 시퀀스의 수정된 버전이 본 명세서에서 새로운 명령을 사용하여 보여진다:
MOV X2, #0xFF00 // 비트 15:8을 폴링할 것임
SEVL // 트랩핑을 즉시 회피시키기 위해 로컬 이벤트를 전송함
loop:
WFE X0, X2 // 어떠한 이벤트도 계류 중이 아닌 경우,
// 하이퍼바이저에 대해 트랩핑하여,
// 마지막으로 보인 값 및 마스크를 제공함
LDXR X0, [X1] // X1은 공유 메모리 내의 변수의
// 게스트 가상 어드레스를 보유함
AND X0, X0, X2 // 마스크를 사용하여 변수의 요구되는 부분을 분리시킴
CBNZ X0, loop // 변수를 0과 비교하고, 변수가 0이 아닐 때까지 루핑함
따라서, WFE 명령이 트랩핑한다면, 하이퍼바이저는, 폴트 어드레스 레지스터(34)를 판독함으로써 X1 내의 가상 어드레스에 대한 중간 물리적 어드레스를 취출할 수 있고, 이어서, (예컨대, 기존의 맵핑들 사이의 알려진 오프셋들에 기초하여) 동일한 기본 물리적 페이지에 대한 그 자신의 가상 맵핑을 획득할 수 있다. 이러한 맵핑이 제위치에 있다면, 동일한 가상 프로세서를 다시 리스케줄링할지 여부를 결정하는 것은 하기의 예와 같은 코드를 사용할 수 있다:
LDR X0, [X1] // X1은 공유 메모리 내의 변수의
// 하이퍼바이저 가상 어드레스를 보유함
EOR X0, X0, X2 // X2는 게스트(VM)로부터 제1 WFE 인수로서 전달되었음
AND X0, X0, X3 // X3은 게스트로부터 제2 WFE 인수로서 전달되었음
여기서, AND 명령에 기인한 X0이 0인 경우, 가상 프로세서는 리스케줄되어서는 안 되는데, 이는 폴링되는 비트들이 변경되지 않았으므로 폴링 루프의 다음 반복 시에 트랩할 가능성이 있기 때문이다. 이러한 접근법은 상기에서 논의된 바와 같이 반가상화에 의해 기술된 문제들을 겪지 않으며, WFE 명령들이 트랩핑되지 않은 고유 환경에서 수정 없이 올바르게 작업할 것이다.
상기에 나타낸 특정 소프트웨어 시퀀스들이 전술된 WFE 명령에 대한 단지 하나의 예시적인 용례임이 이해될 것이다. 아키텍처 레벨에서 제공된 동일한 WFE 명령은 소프트웨어 프로그래머들에 의해 다른 방식들로 사용되어, 예컨대 레지스터들(Xa, Xb)에서 식별된 바와 같은 다른 스케줄링 힌트 정보를 하이퍼바이저에 전달하여, 따라서, 이들 레지스터들이 상기의 예에서와 같이 폴링된 변수의 마지막으로 보인 값 및 마스크를 나타낼 필요가 없다. 그들 레지스터들이 마지막 보인 값 및 마스크를 제공하는지 여부는, 명령 디코더(40)에 의해 지원되는 명령 세트 아키텍처의 요구되는 기능이라기보다는, WFE 명령 이전에 어떤 명령들이 실행되었는지에 의존할 것이다.
일부 예들에서, WFE 명령에 의해 제공되는 스케줄링 힌트 정보는 동일한 가상 머신에 의해 소유되는 가상 프로세서들 사이에서 선택하기 위한 스케줄링 결정들을 행할 때 사용될 수 있지만, 하나의 가상 머신에 의해 소유된 가상 프로세서와 상이한 가상 머신에 의해 소유된 가상 프로세서 사이에서 전환하기 위한 스케줄링 결정들은 WFE 명령에 의해 제공되는 스케줄링 힌트 정보에 독립적일 수 있다. 이는, 비교적, 상이한 가상 머신들의 가상 프로세서들이 공유 메모리 구조에 대한 액세스를 공유할 가능성이 없을 수 있기 때문이다. 임의의 경우에 소프트웨어 개발자들이 WFE 명령에 의해 반환된 스케줄링 힌트 정보에 대한 다른 용도들을 찾을 수 있다는 것이 이해될 것이다 - 하기에서 논의되는 WFE 명령의 아키텍처 기능은 이러한 스케줄링 힌트 정보의 어떤 후속 사용이 이루어지는지를 규정하지 않음.
WFE 명령의 아키텍처 기능은 이제 도 8과 관련하여 하기에서 논의된다. WFE 명령은 하이퍼바이저에 대한 조건부 산출 명령의 일례이며, 이는 소정 트랩 조건들이 만족되는 경우에 하이퍼바이저 실행 모드로의 전환을 트리거할 수 있다. 단계(200)에서, 명령 디코더(40)는 하이퍼바이저에 대한 조건부 산출 명령을 디코딩하고, 디코딩된 명령은 실행될 프로세싱 회로부(16)로 전달된다. 명령 실행은, 명령의 디코딩이 실행되고 있는 명령보다 앞서 다수의 사이클들을 발생할 수 있도록 파이프라인화된다는 것이 이해될 것이다. 디코딩된 하이퍼바이저에 대한 조건부 산출 명령을 직면한 것에 응답하여, 단계(202)에서, 프로세싱 회로부(16)는 현재 실행 모드가 하이퍼바이저 모드 또는 하이퍼바이저 모드보다 임의의 더 높은 특권 모드인지 여부를 결정하고, 그러한 경우에, 단계(204)에서, 프로세싱 회로부(16)는 현재 실행 모드에서 유지될 수 있다. 예를 들어, 하이퍼바이저 실행 모드 EL2에서 실행되는 WFE 명령들은, 단순히, 실행 모드의 임의의 전환보다는, 이벤트가 시그널링될 때까지 프로세서가 기다리게 될 수 있다.
하이퍼바이저에 대한 조건부 산출 명령이 실행된 현재 모드가 하이퍼바이저 실행 모드 EL2(예컨대, 명령은 EL0 또는 EL1에서 실행됨)보다 특권이 덜 주어진 실행 모드인 경우, 단계(206)에서, 프로세싱 회로부는 하이퍼바이저 모드로 트랩핑하기 위해 요구되는 임의의 트랩 조건들이 만족되는지 여부를 결정한다. 이들은 하기의 도 9와 관련하여 더 상세히 논의될 것이다. 임의의 트랩 조건이 만족되지 않는 경우, 다시, 단계(204)에서, 프로세싱 회로부는 현재 실행 모드에서 유지된다.
단계(206)에서, 요구된 트랩 조건(들)이 만족되는 경우, 단계(208)에서, 프로세싱 회로부는 하이퍼바이저 실행 모드 EL2로 전환하여, 하이퍼바이저가 스텝-인(step in)할 수 있도록 하고, 상이한 가상 프로세서를 리스케줄링하는 것이 유용할 수 있는지 여부를 결정하여, 그 가상 프로세서의 순방향 진행이 이전 가상 프로세서에 의해 요구된 트랩 조건들이 더 이상 만족되지 않기를 기다리는 시간에 행해질 수 있도록 한다. 단계(210)에서, 하이퍼바이저 모드로 전환할 시, 스케줄링 힌트 정보는 하이퍼바이저 모드에서 명령들에 액세스가능한 적어도 하나의 저장 요소에 저장된다. 스케줄링 힌트 정보의 저장은 하기의 도 10에 더 상세히 도시된다. 아키텍처 레벨에서 스케줄링 힌트 정보가 하이퍼바이저에 액세스가능해지게 하여, 가상 머신과 하이퍼바이저 사이에서 통신하기 위해 메모리 내의 공유 데이터 구조들을 사용하여 명시적 메모리 액세스 명령들이 일부 메시지들을 결집(marshal)시킬 필요 없이, 하드웨어가 소정 레지스터들 또는 하이퍼바이저에 액세스가능한 다른 저장 요소들에 힌트 정보를 자동으로 저장하게 함으로써, 이것은 상기에서 논의된 이유들로 성능 및 이식가능성을 개선한다.
도 9는 트랩 조건들이 만족되는지 여부를 결정하기 위한 단계(206)를 더 상세히 도시한다. 단계(220)에서, 프로세싱 회로부는 트랩 제어 표시자(42)(이는 하이퍼바이저에 대한 조건부 산출 명령(WFE)이 트랩핑되는지 여부를 통제함)가 제1 값으로 설정되는지 또는 제2 값으로 설정되는지를 결정한다. 이러한 예에서, 트랩 제어 표시자(42)는 하이퍼바이저 구성 레지스터(40)의 대응하는 비트가 0으로 설정될 때 제1 값을 갖고, 그 비트가 1로 설정될 때 제2 값을 갖지만, 다른 예는 그 반대일 수 있다. 트랩 제어 표시자가 제1 값을 갖는 경우, 이어서, 단계(222)에서, 트랩 조건들은 이벤트 레지스터(44)에서 임의의 이벤트가 시그널링되었는지 여부에 관계없이 만족되지 않는 것으로 결정된다. 따라서, 트랩 제어 표시자가 제1 값으로 설정될 때, WFE 명령은 하이퍼바이저에 트랩핑하지 않을 것이다. 이는, 예를 들어, 하이퍼바이저가 현재 단지 하나의 가상 프로세서만을 관리하고 있는 경우, 하이퍼바이저가 추적을 디스에이블시킬 수 있게 하는 데 유용할 수 있다.
트랩 제어 표시자가 제2 값을 갖는 경우, 단계(224)에서, 프로세싱 회로부는 이벤트가 시그널링되었음을 나타내기 위해 이벤트 레지스터(44)가 설정되었는지 여부를 결정한다. 이벤트는 상기에서 언급된 일정 클래스의 이벤트들 중 임의의 것일 수 있는데, 특히, 전용 모니터(22)가 추적된 어드레스에 대한 액세스를 검출한 경우에 일정 이벤트가 시그널링되었을 수 있다. 이벤트가 시그널링된 경우, 다시, 방법은 단계(222)로 진행하며, 여기서 트랩 조건들은 만족되지 않은 것으로 결정된다. 한편, 이벤트가 시그널링되지 않은 경우, 방법은 단계(224)로부터 단계(226)로 진행하며, 여기서 요구되는 트랩 조건들은 만족되는 것으로 결정되고, 따라서, 이 경우에, WFE 명령 또는 다른 유형의 하이퍼바이저에 대한 조건부 산출 명령은 도 8의 단계(208)에서 하이퍼바이저 모드로의 전환을 트리거할 것이다.
도 10은 도 8의 단계(210)를 더 상세히 도시한다. 단계(240)에서, 프로세싱 회로부는, 하이퍼바이저에 액세스가능한 시스템 레지스터들 중 하나에 하이퍼바이저에 대한 조건부 산출 명령에 의해 특정된 한 쌍의 레지스터들(Xa, Xb)의 레지스터 폭 및 레지스터 특정자들을 기록한다. 특히, 이것이 EL2에 대응하는 예외 상태 레지스터(36)에 기록되는 것이 유용할 수 있다. 단계(242)에서, 프로세싱 회로부(16)는 전용 모니터가 현재 클리어한지(어떠한 어드레스들도 추적하지 않음) 여부를 검출하고, 그러한 경우, 단계(244)에서, 무효 표시가 폴트 어드레스 레지스터(34) 내에 설정된다. 전용 모니터가 현재 설정되어 있는 경우, 단계(246)에서, 전용 모니터(22)에 등록된 추적된 물리적 어드레스에 대응하는 중간 물리적 어드레스가 그의 TLB(21) 내의 MMU(20)에 이용가능한지 여부가 검출되고, 그렇지 않은 경우, 다시, 단계(244)에서, 무효 표시가 폴트 어드레스 레지스터(34)에 설정된다.
전용 모니터가 현재 설정되어 있고, 추적된 물리적 어드레스에 대한 중간 물리적 어드레스가 TLB(21)에 현재 이용가능한 경우, 단계(248)에서, 추적된 물리적 어드레스에 대응하는 중간 물리적 어드레스가 폴트 어드레스 레지스터(34)에 기록되고, 유효 표시가 설정된다. 일부 경우들에 있어서, 유효 표시는, 단순히, 폴트 어드레스 레지스터 내의 어드레스가 실제 어드레스에 대응할 수 없는 다수의 무효 어드레스 값들 중 하나라는 것일 수 있다. 대안적으로, 별개의 유효 비트가 폴트 어드레스 레지스터 내의 어드레스를 한정할 수 있다. 유사하게, 단계(244)에서, 무효 표시는 실제 어드레스에 대응할 수 없는 금지된 어드레스 값일 수 있거나, 또는 별도의 무효 표시에 의해 표시될 수 있다. 도 10이, 전용 모니터가 현재 클리어한 경우들 및 중간 물리적 어드레스가 현재 이용가능하지 않은 경우들 둘 모두에 대해 동일한 무효 표시가 사용되는 예를 도시하지만, 다른 예들에서, 2개의 별개의 무효 표시자들이 이들 2개의 상황들을 구별할 수 있다.
MMU(20)의 TLB(21)가 별개의 스테이지 1 및 스테이지 2 TLB 구조들을 갖는 분할 TLB로서 구현되는 시스템들에서, 비교적, 추적된 물리적 어드레스에 대응하는 IPA는 WFE 명령들이 실행된 시간에 TLB(21)에서 이용가능할 가능성이 있을 수 있는데, 그 이유는 본 명세서에서 상기에 나타낸 유형의 루프에서 WFE 명령이 사용되는 경우에, 그것이 (그것이 이미 TLB 내에 있지 않았다면) 그 중간 물리적 어드레스에 대한 어드레스 맵핑이 TLB에 로딩되게 할 부하 전용 명령 직후에 이어질 것이기 때문이다.
그러나, TLB(21)가 스테이지 1 및 스테이지 2 페이지 테이블들(50, 52)로부터의 엔트리들을, 가상 어드레스로부터 물리적 어드레스로 어드레스들을 직접 맵핑한 단일 통합 엔트리로 조합하는 조합된 TLB로서 구현되는 예들에서, 부하 전용 명령이 이미 할당된 조합된 TLB 엔트리에서 히트(hit)되는 경우, 중간 물리적 어드레스를 획득하기 위해, 부하 전용 명령은 스테이지 1 페이지 테이블(50)의 어드레스 검색을 정상적으로 트리거하지 않을 것이다. 그러나, 부하 전용 명령이 이러한 방식으로 처리된 경우, 이는 후속 WFE 명령이 사용될 때 추적된 어드레스에 대응하는 IPA가 단계(246)에서 이용가능하게 될 가능성이 더 적어지게 할 수 있다.
따라서, 조합된 TLB를 사용하는 마이크로아키텍처에서, 부하 전용 명령을 제공하는 데 필요하지 않은 경우에도, 스테이지 1 테이블 순회를 트리거하는 것이 유용할 수 있다. 따라서, 도 5의 방법에서, 부하 전용 명령에 직면할 때, 이어서, 타깃 어드레스가 조합된 TLB(21)에서 캐싱된 어드레스 맵핑을 이미 갖고 있지 않았을 때, 페이지 테이블 순회가 트리거되어, 스테이지 1 페이지 테이블들(50)로부터 중간 물리적 어드레스를 획득하고, 후속으로, 스테이지 2 페이지 테이블들(52)로부터 물리적 어드레스를 획득할 뿐만 아니라, 조합된 가상 어드레스 대 물리적 어드레스 맵핑을 조합된 TLB(21)에 기록한다. 이때, MMU(21)는 또한 MMU(20)의 소정 저장 영역 내에 중간 물리적 어드레스를 기록할 수 있는데, 이는 후속 WFE 명령이 스케줄링 힌트 정보를 위해 그것을 필요로 하는 경우이다. 또한, 부하 전용 명령이 TLB의 이미 할당된 엔트리에 대해 히트하고 중간 물리적 어드레스가 MMU(21) 내에서 이미 이용가능하지 않은 경우들에 있어서, 부하 전용 명령이 조합된 TLB 내에서 이미 제공된 물리적 어드레스에 기초하여 제공될 수 있다 하더라도, 그럼에도 불구하고, 부하 전용 명령은 스테이지 1 페이지 테이블들(50)의 스테이지 1 페이지 테이블 순회를 트리거하여, 대응하는 중간 물리적 어드레스를 획득할 수 있고, 이어서, 이는, 물리적 어드레스가 이미 캐싱되었기 때문에 부하 전용 명령을 직접 처리할 필요가 없다 하더라도, 후속하는 하이퍼바이저에 대한 조건부 산출 명령에 의한 사용을 위해 기록될 수 있다. 부하 전용 명령에 응답하여 중간 물리적 어드레스 검색을 트리거함으로써, 이는, WFE 명령에 직면할 때, 도 10의 단계(246)에서, 중간 물리적 어드레스가 이용가능할 가능성이 더 커지게 할 수 있다. 따라서, 유용한 스케줄링 힌트 정보가 하이퍼바이저에 제공될 수 있을 가능성이 더 큰데, 이는 하이퍼바이저가 그것을 스케줄링 결정이 되게 할 때 가상 프로세서들의 스케줄링의 효율을 개선하는 것을 도울 수 있다.
여분의 IPA 검색의 이러한 트리거링은 아키텍처의 필수적인 부분이 아니라는 것이 이해될 것인데, 그 이유는, 이것이 필요하든 아니든, 마이크로아키텍처 구현에 의존하기 때문이다. 예를 들어, 여분의 IPA 검색은 스테이지 1 및 스테이지 2 어드레스 변환들에 전용되는 분할 TLB들을 갖는 시스템들에서 필요하지 않을 수 있다. 또한, 조합된 TLB를 사용하는 시스템에서도, 일부 마이크로아키텍처 설계자들은 (덜 유용한 하이퍼바이저 스케줄링 힌트 정보의 대가로) 불필요한 IPA 액세스를 트리거하는 것을 회피시킴으로써 부하 전용 명령을 구현하는 복잡성을 감소시키고 전력을 절감할 것을 선택할 수 있다. 그럼에도 불구하고, 그러한 IPA 검색을 트리거함으로써, 이는 그렇게 하기를 원하는 그들 마이크로아키텍처들에서 하이퍼바이저의 성능을 개선할 수 있다.
도 11은 사용될 수 있는 시뮬레이터 구현예를 도시한다. 전술된 실시예들은 관심 기법들을 지원하는 특정 프로세싱 하드웨어를 동작시키기 위한 장치 및 방법들과 관련하여 본 발명을 구현하지만, 컴퓨터 프로그램의 사용을 통해 구현되는 본 명세서에서 기술되는 실시예들에 따라 명령 실행 환경을 제공하는 것이 또한 가능하다. 그러한 컴퓨터 프로그램들은, 그들이 하드웨어 아키텍처의 소프트웨어 기반 구현을 제공하는 한, 종종 시뮬레이터들로 지칭된다. 다양한 시뮬레이터 컴퓨터 프로그램들은 에뮬레이터들, 가상 머신들, 모델들, 및 동적 이진 변환기(dynamic binary translator)들을 포함한 이진 변환기들을 포함한다. 전형적으로, 시뮬레이터 구현이 호스트 프로세서(330) 상에서 구동되어, 호스트 운영 체제(320)를 선택적으로 구동하여, 시뮬레이터 프로그램(310)을 지원할 수 있다. 일부 배열물들에서, 하드웨어와 제공된 명령 실행 환경 사이에 다수의 시뮬레이션 층들이 있을 수 있고/있거나, 동일한 호스트 프로세서 상에 제공된 다수의 별개의 명령 실행 환경들이 있을 수 있다. 이력상, 강력한 프로세서들이 합리적인 속도로 실행되는 시뮬레이터 구현들을 제공하는 데 요구되었지만, 그러한 접근법은 호환성 또는 재사용 이유들을 위해 다른 프로세서에 고유한 코드를 구동하려는 요구가 있을 때와 같은 소정 상황들에서 정당화될 수 있다. 예를 들어, 시뮬레이터 구현은 호스트 프로세서 하드웨어에 의해 지원되지 않는 추가적인 기능을 명령 실행 환경에 제공할 수 있거나, 또는 상이한 하드웨어 아키텍처와 전형적으로 연관된 명령 실행 환경을 제공할 수 있다. 시뮬레이션의 개요가 문헌["Some Efficient Architecture Simulation Techniques", Robert Bedichek, Winter 1990 USENIX Conference, Pages 53 - 63]에서 주어진다.
실시예들이 특정 하드웨어 구성물들 또는 특징부들을 참조하여 전술되었음을 고려한 결과로, 시뮬레이션된 실시예에서, 동등한 기능이 적합한 소프트웨어 구성물들 또는 특징부들에 의해 제공될 수 있다. 예를 들어, 특정 회로부는 시뮬레이션된 실시예에서 컴퓨터 프로그램 로직으로서 구현될 수 있다. 유사하게, 레지스터 또는 캐시와 같은 메모리 하드웨어가 시뮬레이션된 실시예에서 소프트웨어 데이터 구조로서 구현될 수 있다. 전술된 실시예들에서 언급된 하드웨어 요소들 중 하나 이상의 하드웨어 요소들이 호스트 하드웨어(예를 들어, 호스트 프로세서(330)) 상에 존재하는 배열물들에서, 일부 시뮬레이션된 실시예들은, 적합한 경우, 호스트 하드웨어를 사용할 수 있다.
시뮬레이터 프로그램(310)은 컴퓨터 판독가능 저장 매체(이는 비일시적 매체일 수 있음) 상에 저장될 수 있고, 타깃 코드(300)(이는 애플리케이션들, 운영 체제들, 및 하이퍼바이저를 포함할 수 있음)에 프로그램 인터페이스(명령 실행 환경)를 제공하는데, 이는 시뮬레이터 프로그램(310)에 의해 모델링되는 하드웨어 아키텍처의 애플리케이션 프로그램 인터페이스와 동일하다. 따라서, 전술된 하이퍼바이저에 대한 조건부 산출 명령을 포함하는, 타깃 코드(300)의 프로그램 명령들은 시뮬레이터 프로그램(310)을 사용하여 명령 실행 환경 내로부터 실행될 수 있어서, 상기에서 논의된 장치(2)의 하드웨어 특징부들을 실제로 갖지 않는 호스트 컴퓨터(330)가 이들 특징부들을 에뮬레이트할 수 있게 할 수 있다. 시뮬레이터 프로그램(310)은, 전술된 명령 디코더(14), 전용 모니터(22) 및 MMU(20)에 기능적으로 대응하는, 명령 디코딩 프로그램 로직(312), 전용 모니터 프로그램 로직(316) 및 어드레스 변환 프로그램 로직(318), 및 장치(2)의 아키텍처 레지스터들(18)을 에뮬레이트하기 위해 레지스터 에뮬레이팅 데이터 구조(314)(호스트 하드웨어(330)의 메모리에 저장됨)를 관리하기 위한 프로그램 로직을 가질 수 있다.
본 출원에서, "...하도록 구성된"이라는 말은 장치의 요소가 정의된 동작을 수행할 수 있는 구성을 갖는다는 것을 의미하도록 사용된다. 이러한 문맥에서, "구성"은 하드웨어 또는 소프트웨어의 상호접속의 배열 또는 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가질 수 있거나, 프로세서 또는 다른 프로세싱 디바이스가 기능을 수행하도록 프로그래밍될 수 있다. "하도록 구성된"은, 장치 요소가, 정의된 동작을 제공하기 위해 어떤 방식으로든 변경될 필요가 있음을 암시하지 않는다.
본 발명의 예시적인 실시예들이 첨부 도면들을 참조하여 본 명세서에 상세히 설명되었지만, 본 발명은 그러한 정확한 실시예들로 제한되지 않는다는 것 그리고 첨부된 청구범위에 의해 정의되는 바와 같은 본 발명의 범주 및 사상으로부터 벗어나지 않으면서 당업자에 의해 다양한 변경들, 및 수정들이 이루어질 수 있다는 것이 이해될 것이다.

Claims (17)

  1. 장치로서,
    데이터 프로세싱을 수행하는 프로세싱 회로부; 및
    상기 데이터 프로세싱을 수행하기 위해 상기 프로세싱 회로부를 제어하기 위한 명령들을 디코딩하는 명령 디코더를 포함하고;
    상기 프로세싱 회로부는 상기 프로세싱 회로부 상에서 실행되는 하나 이상의 가상 프로세서들을 관리하기 위한 하이퍼바이저의 실행을 위한 하이퍼바이저 실행 모드, 및 상기 하이퍼바이저 실행 모드보다 적어도 하나의 특권이 덜 주어진 실행 모드를 갖고;
    상기 적어도 하나의 특권이 덜 주어진 실행 모드에서 실행되는 하이퍼바이저에 대한 조건부 산출 명령(conditional yield to hypervisor instruction)에 응답하여, 상기 명령 디코더는 상기 프로세싱 회로부를 제어하여,
    적어도 하나의 트랩 조건이 만족되는지 여부를 결정하도록, 그리고
    상기 적어도 하나의 트랩 조건이 만족되는 것으로 결정될 때:
    상기 프로세싱 회로부를 상기 하이퍼바이저 실행 모드로 전환하도록; 그리고
    상기 하이퍼바이저 실행 모드에서 실행되는 명령들에 액세스가능한 적어도 하나의 저장 요소에, 상기 적어도 하나의 트랩 조건이 여전히 만족되는지 여부를 추정하기 위한 스케줄링 힌트 정보의 적어도 하나의 아이템을 저장하도록 구성되는, 장치.
  2. 제1항에 있어서, 상기 스케줄링 힌트 정보는 상기 하이퍼바이저에 대한 조건부 산출 명령에 의해 특정된 적어도 하나의 레지스터 특정자의 표시를 포함하는, 장치.
  3. 제2항에 있어서, 상기 스케줄링 힌트 정보는 상기 적어도 하나의 레지스터 특정자에 의해 특정된 적어도 하나의 레지스터의 레지스터 폭의 표시를 포함하는, 장치.
  4. 제2항 또는 제3항에 있어서, 상기 스케줄링 힌트 정보는 상기 하이퍼바이저에 대한 조건부 산출 명령에 의해 특정된 복수의 레지스터 특정자들의 표시를 포함하는, 장치.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서, 상기 하이퍼바이저에 대한 조건부 산출 명령은, 일정 클래스의 하나 이상의 이벤트들 중 하나의 이벤트가 발생한 것으로 나타내질 때까지 기다릴 것을 상기 프로세싱 회로부에 명령하기 위한 WFE(wait-for-event) 명령을 포함하고;
    상기 프로세싱 회로부는, 상기 클래스의 하나 이상의 이벤트들 중 하나의 이벤트가 발생한 것으로 나타내질 때 상기 적어도 하나의 트랩 조건이 만족되지 않는다고 결정하도록 구성되는, 장치.
  6. 제5항에 있어서, 상기 클래스의 하나 이상의 이벤트들이 전용 모니터에 의해 추적되는 추적된 어드레스에 대한 메모리 액세스의 검출을 포함하는, 장치.
  7. 제6항에 있어서, 스케줄링 힌트 정보의 상기 적어도 하나의 아이템은 상기 WFE 명령을 실행할 시에 상기 전용 모니터에 의해 추적되는 상기 추적된 어드레스에 대응하는 힌트 어드레스를 포함하는, 장치.
  8. 제7항에 있어서, 가상 어드레스와 중간 어드레스 사이의 맵핑을 나타내는 제1 어드레스 변환 데이터, 및 상기 중간 어드레스와 상기 물리적 어드레스 사이의 맵핑을 나타내는 제2 어드레스 변환 데이터에 기초하여, 상기 프로세싱 회로부에 의해 실행되는 명령에 의해 특정된 가상 어드레스를, 상기 가상 어드레스에 대응하는 메모리 위치를 식별하는 물리적 어드레스로 변환하기 위한 어드레스 변환 회로부를 포함하고;
    상기 추적된 어드레스는 물리적 어드레스이고, 상기 힌트 어드레스는 상기 추적된 어드레스에 대응하는 상기 중간 어드레스인, 장치.
  9. 제8항에 있어서, 상기 스케줄링 힌트 정보는 상기 추적된 어드레스에 대응하는 상기 중간 어드레스가 상기 하이퍼바이저 실행 모드로 전환할 시에 이용가능한지 여부에 따라 설정되는 유효 표시를 포함하는, 장치.
  10. 제6항 내지 제9항 중 어느 한 항에 있어서, 타깃 어드레스를 특정하는 부하 전용 명령에 응답하여, 상기 명령 디코더는 상기 프로세싱 회로부를 제어하여, 상기 타깃 어드레스를 상기 추적된 어드레스로서 설정하기 위해 상기 전용 모니터를 트리거하도록 구성되는, 장치.
  11. 제10항에 있어서, 가상 어드레스와 중간 어드레스 사이의 맵핑을 나타내는 제1 어드레스 변환 데이터, 및 상기 중간 어드레스와 상기 물리적 어드레스 사이의 맵핑을 나타내는 제2 어드레스 변환 데이터에 기초하여, 상기 프로세싱 회로부에 의해 실행되는 명령에 의해 특정된 가상 어드레스를, 상기 가상 어드레스에 대응하는 메모리 위치를 식별하는 물리적 어드레스로 변환하기 위한 어드레스 변환 회로부를 포함하고;
    상기 어드레스 변환 회로부는 가상-대-물리적 어드레스 맵핑을 각각 저장하기 위한 복수의 캐시 엔트리들을 포함하는 조합된 변환 캐시를 포함하고;
    상기 조합된 변환 캐시가 상기 부하 전용 명령의 상기 타깃 어드레스에 대응하는 상기 가상-대-물리적 어드레스 맵핑을 저장하는 캐시 엔트리를 이미 포함할 때에도, 상기 부하 전용 명령에 응답하여, 상기 어드레스 변환 회로부는 상기 타깃 어드레스에 대응하는 상기 중간 어드레스를 획득하기 위해 상기 제1 어드레스 변환 데이터의 검색(look up)을 트리거하도록 구성되는, 장치.
  12. 제6항 내지 제11항 중 어느 한 항에 있어서, 스케줄링 힌트 정보의 상기 적어도 하나의 아이템은, 상기 WFE 명령을 실행할 시에 상기 전용 모니터가 상기 추적된 어드레스로서 임의의 어드레스를 추적하고 있었는지 여부에 따라 설정되는 유효 표시를 포함하는, 장치.
  13. 제1항 내지 제12항 중 어느 한 항에 있어서, 상기 하이퍼바이저에 대한 조건부 산출 명령이 상기 하이퍼바이저에 트랩되어야 하는지 여부를 나타내는 트랩 제어 표시자를 저장하기 위한 하이퍼바이저 제어 레지스터를 포함하고;
    상기 하이퍼바이저에 대한 조건부 산출 명령에 응답하여, 상기 프로세싱 회로부는 상기 트랩 제어 표시자에 따라 상기 적어도 하나의 트랩 조건이 만족되는지 여부를 결정하도록 구성되는, 장치.
  14. 제5항 내지 제12항 중 어느 한 항에 있어서, 제1 값 및 제2 값 중 하나를 갖는 트랩 제어 표시자를 저장하기 위한 하이퍼바이저 제어 레지스터를 포함하고;
    상기 트랩 제어 표시자가 상기 제1 값을 가질 때, 상기 프로세싱 회로부는, 상기 클래스의 하나 이상의 이벤트들 중 하나의 이벤트가 발생한 것으로 나타내지는지 여부와 관계없이 상기 적어도 하나의 트랩 조건이 만족되지 않는다고 결정하도록 구성되고;
    상기 트랩 제어 표시자가 상기 제2 값을 가질 때, 상기 프로세싱 회로부는, 상기 클래스의 하나 이상의 이벤트들 중 어떤 이벤트도 발생한 것으로 나타내지지 않을 때 상기 적어도 하나의 트랩 조건이 만족된다고 결정하도록 구성되는, 장치.
  15. 프로세싱 회로부를 포함하는 장치를 위한 데이터 프로세싱 방법으로서, 상기 프로세싱 회로부는 상기 프로세싱 회로부 상에서 실행되는 하나 이상의 가상 프로세서들을 관리하기 위한 하이퍼바이저의 실행을 위한 하이퍼바이저 실행 모드, 및 상기 하이퍼바이저 실행 모드보다 적어도 하나의 특권이 덜 주어진 실행 모드를 갖고, 상기 방법은,
    상기 적어도 하나의 특권이 덜 주어진 실행 모드에서 실행되는 하이퍼바이저에 대한 조건부 산출 명령을 디코딩하는 단계; 및
    상기 하이퍼바이저에 대한 조건부 산출 명령을 디코딩하는 것에 응답하여:
    적어도 하나의 트랩 조건이 만족되는지 여부를 결정하는 단계, 및
    상기 적어도 하나의 트랩 조건이 만족되는 것으로 결정될 때:
    상기 프로세싱 회로부를 상기 하이퍼바이저 실행 모드로 전환하는 단계; 및
    상기 하이퍼바이저 실행 모드에서 실행되는 명령들에 액세스가능한 적어도 하나의 저장 요소에, 상기 적어도 하나의 트랩 조건이 여전히 만족되는지 여부를 추정하기 위한 스케줄링 힌트 정보의 적어도 하나의 아이템을 저장하는 단계를 포함하는, 방법.
  16. 명령들의 실행을 위한 명령 실행 환경을 제공하기 위해 호스트 데이터 프로세싱 장치를 제어하기 위한 컴퓨터 프로그램으로서, 상기 컴퓨터 프로그램은:
    상기 명령 실행 환경에서 실행되는 타깃 코드의 명령들을 디코딩하여, 상기 타깃 코드의 상기 명령들에 대응하는 데이터 프로세싱을 수행하기 위해 상기 호스트 데이터 프로세싱 장치를 제어하기 위한 명령 디코딩 프로그램 로직을 포함하고, 상기 명령 실행 환경은 상기 명령 실행 환경에서 실행되는 하나 이상의 가상 프로세서들을 관리하기 위한 하이퍼바이저의 실행을 위한 하이퍼바이저 실행 모드, 및 상기 하이퍼바이저 실행 모드보다 적어도 하나의 특권이 덜 주어진 실행 모드를 갖고,
    상기 적어도 하나의 특권이 덜 주어진 실행 모드에서 실행되는 상기 타깃 코드의 하이퍼바이저에 대한 조건부 산출 명령에 응답하여, 상기 명령 디코딩 프로그램 로직은 상기 호스트 데이터 프로세싱 장치를 제어하여,
    적어도 하나의 트랩 조건이 만족되는지 여부를 결정하도록, 그리고
    상기 적어도 하나의 트랩 조건이 만족되는 것으로 결정될 때:
    상기 명령 실행 환경을 상기 하이퍼바이저 실행 모드로 전환하도록; 그리고
    상기 하이퍼바이저 실행 모드에서 실행되는 상기 타깃 코드의 명령들에 액세스가능한 적어도 하나의 데이터 구조에, 상기 적어도 하나의 트랩 조건이 여전히 만족되는지 여부를 추정하기 위한 스케줄링 힌트 정보의 적어도 하나의 아이템을 저장하도록 구성되는, 컴퓨터 프로그램.
  17. 제16항의 컴퓨터 프로그램을 저장하는 저장 매체.
KR1020217030468A 2019-02-28 2020-01-07 하이퍼바이저에 대한 조건부 산출 명령 KR20210130197A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1902709.3 2019-02-28
GB1902709.3A GB2581821B (en) 2019-02-28 2019-02-28 Conditional yield to hypervisor instruction
PCT/GB2020/050025 WO2020174209A1 (en) 2019-02-28 2020-01-07 Conditional yield to hypervisor instruction

Publications (1)

Publication Number Publication Date
KR20210130197A true KR20210130197A (ko) 2021-10-29

Family

ID=66377396

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217030468A KR20210130197A (ko) 2019-02-28 2020-01-07 하이퍼바이저에 대한 조건부 산출 명령

Country Status (7)

Country Link
US (1) US11842195B2 (ko)
EP (1) EP3931686A1 (ko)
JP (1) JP2022522740A (ko)
KR (1) KR20210130197A (ko)
CN (1) CN113474754A (ko)
GB (1) GB2581821B (ko)
WO (1) WO2020174209A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114020330B (zh) * 2021-11-04 2023-11-03 苏州睿芯集成电路科技有限公司 Risc-v处理器验证中模式切换的方法、电子设备以及存储介质

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5463778A (en) * 1989-11-16 1995-10-31 Texas Instruments Incorporated User controlled trap handler
US7694304B2 (en) * 2003-08-28 2010-04-06 Mips Technologies, Inc. Mechanisms for dynamic configuration of virtual processor resources
US7784060B2 (en) * 2003-11-06 2010-08-24 Intel Corporation Efficient virtual machine communication via virtual machine queues
US7584344B2 (en) * 2006-05-02 2009-09-01 Freescale Semiconductor, Inc. Instruction for conditionally yielding to a ready thread based on priority criteria
GB2487575B (en) * 2011-01-28 2017-04-12 Advanced Risc Mach Ltd Controlling generation of debug exceptions
EP3244307A1 (en) * 2012-03-29 2017-11-15 INTEL Corporation Architecture and method for managing interrupts in a virtualized environment
WO2014081608A1 (en) * 2012-11-20 2014-05-30 Unisys Corporation Optimized execution of virtualized software using securely partitioned virtualization system with dedicated resources
US9697031B2 (en) * 2013-10-31 2017-07-04 Huawei Technologies Co., Ltd. Method for implementing inter-virtual processor interrupt by writing register data in a single write operation to a virtual register
US9606825B2 (en) * 2014-05-20 2017-03-28 Red Hat Israel, Ltd Memory monitor emulation for virtual machines
US10067768B2 (en) * 2014-07-18 2018-09-04 Nvidia Corporation Execution of divergent threads using a convergence barrier
US9864708B2 (en) * 2014-12-16 2018-01-09 Vmware, Inc. Safely discovering secure monitors and hypervisor implementations in systems operable at multiple hierarchical privilege levels
US10963280B2 (en) * 2016-02-03 2021-03-30 Advanced Micro Devices, Inc. Hypervisor post-write notification of control and debug register updates
US10019282B1 (en) * 2016-07-21 2018-07-10 Parallels International Gmbh Virtual machine exit processing accelerator
US10243746B2 (en) * 2017-02-27 2019-03-26 Red Hat, Inc. Systems and methods for providing I/O state protections in a virtualized environment
US10592281B1 (en) * 2017-09-28 2020-03-17 Amazon Technologies, Inc. Wait optimizer for recording an order of first entry into a wait mode by a virtual central processing unit

Also Published As

Publication number Publication date
GB2581821A (en) 2020-09-02
CN113474754A (zh) 2021-10-01
US20220121445A1 (en) 2022-04-21
WO2020174209A1 (en) 2020-09-03
US11842195B2 (en) 2023-12-12
JP2022522740A (ja) 2022-04-20
EP3931686A1 (en) 2022-01-05
GB2581821B (en) 2021-06-30
GB201902709D0 (en) 2019-04-17

Similar Documents

Publication Publication Date Title
US10061588B2 (en) Tracking operand liveness information in a computer system and performing function based on the liveness information
KR101673435B1 (ko) 공동 설계 프로세서에서 격리된 실행 환경의 생성
JP6095682B2 (ja) プログラム・イベント記録イベントのランタイム計装イベントへの変換
US8429669B2 (en) Virtual machine switching control by prefetching information out of and updating a set of processor control information based on a bitmap having update status
RU2265880C2 (ru) Новый режим процессора для ограничения функционирования гостевого программного обеспечения, выполняющегося на виртуальной машине, поддерживаемой монитором виртуальной машины
JP6099060B2 (ja) 低特権状態からのランタイム・インストルメンテーション・ファシリティの動作の制御
US8104035B2 (en) Program for controlling a virtual computer and computer system for virtulization technology
JP6138142B2 (ja) 被管理ランタイムのためのハードウェア・ベース・ランタイム計装機構
Agesen et al. The evolution of an x86 virtual machine monitor
JP6195572B2 (ja) ランタイム計装制御の状況の決定のためのコンピュータ・プログラム、方法、およびシステム
KR101589857B1 (ko) 런-타임 계측 리포팅
Varanasi Implementing Hardware-supported Virtualization in OKL4 on ARM
CN110574009B (zh) 用于管理对能力的使用的设备和方法
KR101640769B1 (ko) 가상화 시스템 및 그것의 명령어 실행 방법
US11119778B2 (en) Apparatus and method for controlling execution of instructions
JP6153534B2 (ja) 命令オペレーション・コードによるランタイム計装間接サンプリング
US11842195B2 (en) Conditional yield to hypervisor instruction
Faravelon Acceleration of memory accesses in dynamic binary translation