KR102599484B1 - 진보된 오퍼레이팅 시스템 지원을 갖는 프로세서 - Google Patents

진보된 오퍼레이팅 시스템 지원을 갖는 프로세서 Download PDF

Info

Publication number
KR102599484B1
KR102599484B1 KR1020177037787A KR20177037787A KR102599484B1 KR 102599484 B1 KR102599484 B1 KR 102599484B1 KR 1020177037787 A KR1020177037787 A KR 1020177037787A KR 20177037787 A KR20177037787 A KR 20177037787A KR 102599484 B1 KR102599484 B1 KR 102599484B1
Authority
KR
South Korea
Prior art keywords
mode
processor
interrupt
logic
computer processor
Prior art date
Application number
KR1020177037787A
Other languages
English (en)
Other versions
KR20180033467A (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 KR20180033467A publication Critical patent/KR20180033467A/ko
Application granted granted Critical
Publication of KR102599484B1 publication Critical patent/KR102599484B1/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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • 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
    • 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/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/45541Bare-metal, i.e. hypervisor runs directly on hardware
    • 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/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets
    • 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

Abstract

컴퓨터 프로세서는 복수의 하드웨어 스레드들을 포함할 수 있다. 컴퓨터 프로세서는 하드웨어 스레드의 상태에 대한 상태 프로세서 로직을 더 포함할 수 있다. 상태 프로세서 로직은, 복수의 하드웨어 스레드들 중 각각의 하드웨어 스레드에 복제된 상태를 포함하는 스레드-별 로직 및 복수의 하드웨어 스레드들 중 각각의 하드웨어 스레드와는 독립적일 수 있는 공통의 로직을 포함할 수 있다. 컴퓨터 프로세서는, 복수의 하드웨어 스레드들 중 오직 하나의 하드웨어 스레드로부터의 명령들을 단일 스레디드 모드로 실행하기 위한 단일 스레디드 모드 로직을 더 포함할 수 있다. 컴퓨터 프로세서는, 복수의 하드웨어 스레드들 중 하나 초과의 하드웨어 스레드로부터의 명령들을 제2 모드에서 동시에 실행하기 위한 제2 모드 로직을 더 포함할 수 있다. 컴퓨터 프로세서는 제1 모드와 제2 모드 사이에서 전환하기 위해 전환 모드 로직을 더 포함할 수 있다.

Description

진보된 오퍼레이팅 시스템 지원을 갖는 프로세서
[0001] 본 출원은, 2016년 5월 16일자로 출원된 U.S. 특허 출원 제15/155,570호를 우선권으로 주장하며, 이 특허 출원은 2015년 6월 9일자로 출원된 U.S. 가특허 출원 제62/172,860호를 우선권으로 주장하며, 이 출원들의 개시내용들은 그 전체가 인용에 의해 본원에 포함된다.
[0002] 본 개시내용의 실시예들은 컴퓨터 프로세서에 관한 것으로, 특히, 진보된 오퍼레이팅 시스템 지원을 갖는 컴퓨터 프로세서에 관한 것이다.
[0003] 오퍼레이팅 시스템은 몇몇 책임들을 갖는다. 오퍼레이팅 시스템은 프로세스들을 서로 격리시킬 필요가 있다. 구체적으로, 오퍼레이팅 시스템은 다수의 프로그램들이 서로 간섭하지 않고 구동하도록 허용할 필요가 있다. 특히, 프로세스는 오류 또는 악성 프로그램이 다른 프로세스들을 관찰하거나 이들에 손상을 야기하는 것을 방지해야만 한다.
[0004] 오퍼레이팅 시스템은 공유 시스템 리소스들에 대한 액세스를 조정할 필요가 있다. 일반적으로, 이는, 프로그램이 리소스들에 직접 액세스하는 것을 방지함으로써 행해지고; 그 대신에, 프로그램은 오퍼레이팅 시스템에 대한 요청을 행하고, 오퍼레이팅 시스템은 그 요청을 수락하거나 또는 거부할 수 있다. 오퍼레이팅 시스템이 요청을 수락하면, 대부분의 상황들에서, 오퍼레이팅 시스템은 프로그램 대신에 요청을 실행할 것이다.
[0005] 이러한 임무들을 달성하기 위해, 오퍼레이팅 시스템은, 오퍼레이팅 시스템이 프로세서를 낮은 특권 실행 모드 ― 이 모드에서, 프로세서에 의해 실행되는 명령들은 특정 리소스들에 액세스할 수 없음 ― 에 있도록 허용하는 특징들을 프로세서로부터 요구한다. 오퍼레이팅 시스템은, 프로세서가 리소스들에 액세스할 수 있는 더 높은 특권 실행 모드로 제어된 방식으로 프로세서가 전환될 수 있게 하는 메커니즘을 가질 수 있다.
[0006] 예시적인 예로서, 메모리 위치는 다수의 프로세스들 사이에서 공유된다. 다수의 프로세스들은 메모리 위치에 기록될 수 있지만, 오직 적절한 값 만을 기록할 수 있다. 이를 달성하기 위한 하나의 방법은, 기록들에 대해 메모리 위치를 포함하는 페이지를 보호하기 위해 가상-현실 변환 메커니즘을 사용하는 것이다. 낮은 특권 프로그램이 메모리 위치에 기록하기 시도할 때, 프로세서는 기록-보호 예외를 취한 다음, 기록되는 값이 적절한지 여부를 결정하는 더 높은 특권을 가진 적절한 예외 처리기에 제어를 트랜스퍼하여, 만약 적절하다면, 그 값을 메모리 위치에 기록한다.
[0007] 오리지널 프로그램 코드가 그렇게 할 수 없지만, 예외 처리기 코드가 메모리 위치를 기록하도록 허용하는 메커니즘이 필요하다. 이는 통상적으로, 예외가 취해질 때 프로세서의 허가들을 증가시킴으로써 달성된다.
[0008] 이제, 오퍼레이팅 시스템 제어들을 우회하여 메모리 위치에 부적절한 값을 기록하도록 시도하는 프로그램을 기록하는 것이 바람직한 것으로 가정한다. 몇몇 잠재적인 공격 수단들이 존재한다.
[0009] 프로그램은 자신의 기록 허가를 제공하기 위해 페이지 보호를 변경하도록 시도할 수 있다. 그러나, 페이지 허가들을 제어하는 구조들 및 프로세서 상태는, 자체적으로 보호되고, 오직 프로세서들의 특권들이 증가한 후에만 액세스될 수 있다.
[0010] 프로그램은, 동일한 메모리 위치에 맵핑되지만 이번에는 기록 허가들을 갖는 새로운 가상 페이지를 부가하도록 시도할 수 있다. 그러나, 맵핑들을 제어하는 구조들 및 프로세서 상태는 보호된다.
[0011] 프로그램은, 관련 프로세서 상태를 직접 수정함으로써 자신의 특권들을 증가시키도록 시도할 수 있다. 그러나, 특권을 제어하는 프로세서 상태는, 보호되고, 프로그램에 의해 직접 수정되는 것에 대해 보호된다.
[0012] 프로그램은, 부적절한 값을 기록할 제어를 프로그램 코드에 추후에 트랜스퍼하는 특권 에스컬레이션(privilege escalation)을 야기한 후 명령을 실행함으로써 자체 특권들을 증가시키도록 시도할 수 있다. 그러나, 오직 제한된 수의 특권 에스컬레이션 경로들만이 이용가능하며, 이 경로들 각각은 미리결정된 명령 어드레스에 제어를 트랜스퍼한다. 에스컬레이션 경로들의 목적지를 제어하는 프로세서 상태는 보호되며, 오직 적절한 허가들을 통해서만 수정될 수 있다.
[0013] 프로그램은, 특권 에스컬레이션의 타겟인 오퍼레이팅 코드를 자체 소유의 것으로 중복기록하도록 시도한 후, 프로세서가 증가된 특권들을 가진 프로그램의 코드를 실행하게 하는 특권 에스컬레이션을 야기할 수 있다. 그러나, 오퍼레이팅 시스템 코드를 포함하는 페이지들은 적어도 기록-보호되어, 프로세서가 특권들을 갖는 모드에서 프로그램이 이미 구동하고 있지 않는 한, 코드를 중복기록하는 것은 불가능하게 된다.
[0014] 따라서, 오퍼레이팅 시스템 보호들은, 메모리 위치들 및 프로세서 상태의 제한된 세트에만 오직 액세스할 수 있고 그리고/또는 수정할 수 있는, 프로세서를 실행시키기 위한 더 낮은 특권 모드를 갖고; 그리고 프로세서의 허가들을 동시에 에스컬레이팅하여 실행 위치들의 제어된 세트에 제어를 트랜스퍼하는 방법을 사용하는 메커니즘들을 사용하여 적절하게 구현될 수 있다.
[0015] 프로그램이 실행하고 있는 동안 제어가 오퍼레이팅 시스템에 트랜스퍼되어야 하는 2개의 상황들이 존재한다. 하나의 상황은, 외부 인터럽트(이를테면, I/O 디바이스 인터럽트) 또는 내부 예외(이를테면, 페이지-테이블 미스)가 오퍼레이팅 시스템에 의해 처리되어야 하는 비자발적인 상황이다. 이러한 비자발적인 트랜스퍼들은 예외들 또는 인터럽트들로서 알려져 있다. 다른 상황은, 프로그램이 대신 일부 기능(이를테면, I/O)을 수행하기 위해 오퍼레이팅 시스템을 필요한 자발적인 상황이다. 이러한 종류들의 자발적인 트랜스퍼들은 시스템 호출(system call)들로 지칭된다.
[0016] 프로세서는 시스템 호출들을 구현하기 위한 메커니즘을 제공할 필요가 있다. 꽤 자주 이것은 특정 어드레스(또는 일 세트의 어드레스들 중 하나의 어드레스)로 제어를 트랜스퍼하고 그리고 동시에 특권을 증가시키는 특수 명령이다. 프로그램이 이 메커니즘을 사용하여 권한이 없는 특권들로의 액세스를 획득하는 것을 방지하기 위해, 시스템 호출의 잠재적인 타겟들은 오퍼레이팅 시스템에 의해 셋업되어, 증가된 특권들 없이는 수정될 수 없다. 시스템 호출들의 모든 잠재적인 타겟들에서의 코드는, 오퍼레이팅 시스템에 의해 셋업되고, 오직 제한된 수의 기능들만을 수행한다. 게다가, 오퍼레이팅 시스템은, 프로그램이 이 기능들을 수행하기 전에 그를 수행할 권한이 있는지(entitled to) 알아보도록 체크한다. 시스템 호출의 모든 잠재적인 타겟들에서의 코드는 프로그램에 의해 기록들에 대해 보호되어, 프로그램이 권한이 없는(not entitled to) 이러한 액션을 수행하도록 수정될 수 없다.
[0017] 예외들 및 인터럽트들 둘 모두는, 프로그램의 정상 흐름이 인터럽트되고 제어가 특수한 인터럽트(또는 예외) 핸들링 코드로 디버팅되는 것을 야기하는 예외적인 이벤트들을 설명하는데 사용된다. 용어들은 종종 상호교환가능하게 사용되지만; 그러나 일반적으로, 인터럽트는 실행중인 프로그램 외부의 이벤트이고, 예외는 프로그램의 실행으로 인해 야기된 이벤트이다.
[0018] 인터럽트들의 일부 예들은: 입력/출력 디바이스 인터럽트들(input/output device interrupts) ― 여기서, 인터럽트 처리기 코드는, 일반적으로 입력 액션의 결과들을 적절한 프로그램 버퍼들로 카피하거나 또는 펜딩 프로그램 요청들로부터 더 많은 출력 임무들을 스케줄링하는, 입력 또는 출력 이벤트에 대응하기 위한 액션을 취할 것임 ―; 타이머 인터럽트들(timer interrupts) ― 타이머 인터럽트의 속성에 따라, 인터럽트 처리기 코드가 포함할 수 있는 몇몇 액션들을 취할 수 있음 ―; 와치독 인터럽트(watchdog interrupt) ― 잠재적으로 실행중인(running) 프로세스를 종결하는 것을 포함하는 응급 클린업(emergency cleanup)을 야기함 ―; 타임-슬라이스 인터럽트(time-slice interrupt) ― 실행중인 프로세스가 스위칭 아웃되는 콘텍스트가 되도록 야기하여 다른 프로세스가 스위칭 인되는 콘텍스트로 되도록 야기함 ― ; 이벤트 인터럽트(event interrupt) ― 프로그램의 타이머 이벤트 큐에 이벤트가 부가되도록 야기함 ― 이다.
[0019] 예외들의 몇몇 예들은: 0으로 나누기(divide-by-zero) ― 정수 나누기 명령들을 갖는 프로세서들에 대한 것임 ―; 부동 소수점 명령 예외(floating point instruction exception) ― 여기서, IEEE 표준은 부동 소수점 하드웨어에 의해 검출되어야만 하는 몇몇 예외들을 정의함 ―; 불법적인 명령 예외(illegal instruction exception); 및, 데이터/명령 디버그 ― 유저들이, 하드웨어가 모니터링할 특정 어드레스들 또는 어드레스 범위들을 특정하고, 프로그램이 이러한 어드레스들 중 하나에 액세스하고/이를 실행하도록 시도할 때, 프로그램이 예외를 취함 ― 이다. 이는 프로그램 거동을 디버깅하는데 도움이 된다.
[0020] 전술한 예들은 오퍼레이팅 시스템 개입을 갖든 또는 갖지 않든 통상적으로 처리될 수 있다. 오퍼레이팅 시스템 개입을 확실하게 요구하는 다른 것들, 이를테면, 페이지-테이블 미스(page-table miss)이 존재하며; 하드웨어가 소프트웨어 관리된 변환 색인 버퍼(software managed translation lookaside buffer)들 또는 하드웨어 관리된 변환 색인 버퍼(TLB; translation look-aside buffer)들을 갖는지 여부에 따라, 이 예외는 오퍼레이팅-시스템에게 페이지들의 가상-실제 매핑을 업데이트하기 위해 다른 것들을 수행하도록 요구한다. 그러나, 이는 오퍼레이팅 시스템이 인보크되는 것이 필요하다.
[0021] 그런다음, 그레이 영역인 일부 상황들이 존재한다. 원하는 거동에 따라, 오퍼레이팅 시스템이 수반될 필요가 있을 수 있거나, 또는 어떠한 판독/기록/실행 허가도 없이; 그리고 특권 명령을 실행하는 것을 포함하여, 유저 코드로 완전히 처리될 수 있다.
[0022] 대부분의 비-임베디드 애플리케이션들에서, 유저 프로그램은 가상 ― 실제 페이지 변환이 인에이블된 상태로 실행된다. 이는, 가상 모드로 지칭된다. 대조적으로, 변환이 디스에이블되고 그리고 모든 프로세서 어드레스들이 실제 물리적 어드레스들이 되는 것으로 가정된다면, 프로세서는 실제 모드로 실행중인 것으로 언급된다.
[0023] 예외에서, 일부 프로세서들은 실제 모드로 전환된다. 다른 프로세서들은, 유저 프로그램이 실행중인 모드에서 계속 실행된다.
[0024] 일반적으로 유저 및 슈퍼-유저로 지칭되는 2개 특권 레벨들을 갖는 것이 충분한 것으로 발견되었다. 유저 특권 레벨에서 실행중일 때, 프로세서는 오직 일부 사전-구성된 메모리 영역들 및 일부 레지스터들에 대한 액세스를 갖고; 구체적으로, 프로세서는 프로세서가 자신의 액세스를 증가시키도록 허용하는 임의의 상태 또는 리소스들로의 액세스를 갖지 않는다. 수퍼-유저 특권 레벨에서 실행중일 때, 프로세서는 메모리를 포함하여 모든 상태에 액세스할 수 있다.
[0025] 2-특권 레벨 모델에서, 유저 모드로 실행중인 프로그램이 예외를 취할 때, 프로그램은 자신의 특권 레벨을 수퍼-유저로 전환하고, 미리정의된 어드레스로부터 코드 실행을 시작한다.
[0026] 일부 프로세서들은 다수의 레벨들의 특권들을 가지며, 각각은 다른 레벨들의 특권을 부여한다. 예를 들어, x86 아키텍처는 4개의 보호 링들을 정의한다. 그러나, 이러한 부가적인 보호 레벨들에는 몇가지 이점이 존재할 수 있지만, 2개의 특권 레벨들이 충분하다는 것이 입증되었다.
[0027] 제어가 사용자 코드에서 예외 처리 코드로 트랜스퍼된 후, 범용 레지스터들의 일부와 같은 기존의 프로세서 상태의 일부는 예외 처리 코드에 의해 사용될 수 있도록 저장될 필요가 있다. 예외 처리 코드가 실행된 후, 제어가 다시 유저 코드로 전달되기 전에, 저장된 상태가 복원된다.
[0028] 레지스터 상태를 저장하는 코드는, 그 상태가 저장되기 전에 저장하는 어떠한 상태도 방해해서는 안된다. 이는, 꽤 달성하기 어려울 수 있다. 하나의 솔루션은, 프로세서가 상태의 일부를 예외 프로세스의 일부로서 저장하게 하는 것이다.
[0029] 다른 솔루션은, 오직 오퍼레이팅 시스템이 예외 처리 코드를 위해 예비하는, 수퍼-유저 모드에서만 액세스가능한 여분의 레지스터들을 갖는 것이다. 이는, 상태를 메모리에 저장하기 위해 저장 명령들의 시퀀스에 의해 기본 어드레스로서 사용될 수 있는 부가적인 레지스터, 이를테면, 시스템 스택 포인터일 수 있다. 다른 가능성은, 사용자 상태의 일부를 이러한 여분의 레지스터들로 카피하고, 그런다음 자유로운 상태를 사용하여 메모리 저장 어드레스들을 셋업하고 그리고 사용자 상태를 메모리에 저장하는 것이다.
[0030] 예외 처리기(exception handler)가 예외를 처리한 후, 프로세서는 프로그램이 인터럽트되었던 시점에서 실행을 재개할 필요가 있을 수 있다. 이는, 예외가 취해졌던 시점에서 후술하는 정보: 정규 프로세싱이 재개되는 명령 어드레스 ― 이는 일반적으로 인터럽트되었던 명령의 또는 다음 명령의 어드레스임 ―; 및 예외를 취하는 부분으로서 수정된 임의의 상태의 오리지널 값 ― 이는 일반적으로 예외의 시점에서 프로세서 특권들의 오리지널 값들을 포함함 ― 이 저장되어야만 하도록 요구한다.
[0031] 예외 리턴 프로세스의 일부로서, 동시에 프로세서 특권들을 저장된 값으로 복원하고 저장된 명령 어드레스에서 실행을 재개할 메커니즘이 존재한다. 이는, 일반적으로, 리턴-프롬-인터럽트(return-from-interrupt) 또는 리턴-프롬-예외(return-from-exception) 명령을 통해 수행된다.
[0032] 동일한 메커니즘이 또한 새로운 프로세스를 시작하기 위해 오퍼레이팅 시스템에 의해 사용된다. 새로운 프로세스의 시작 포인트는 명령 저장 위치에 저장되고, 프로그램의 초기 특권들은 특권 저장 위치에 저장되며, 예외 시퀀스로부터의 리턴이 실행된다. 이 시점에서, 새로운 프로세스가 원하는 특권 레벨의 원하는 어드레스에서 시작된다.
[0033] 일부 프로세서들 상에서, 인터럽트가 취해질 때, 모든 추가 인터럽트들은 디스에이블된다. 통상적으로, 이러한 프로세서상에서, 인터럽트 핸들링 코드가 행하는 첫 번째 작업은 사용자 상태 및 저장된 인터럽트 리턴 어드레스/상태를 저장하는 것이다. 이러한 값들을 저장한 후, 프로세서는 인터럽트들을 재-인에이블한다. 인터럽트들을 재-인에이블하기 전에 인터럽트 리턴 어드레스/상태를 저장할 필요가 있으며, 그렇지 않고, 제2 인터럽트가 발생한다면, 이는 이러한 값들을 중복기록하고, 제1 인터럽트에 대한 인터럽트 처리기는 인터럽트 핸들링 이후에 어디로 리턴할지 결정할 수 없게 될 것이다.
[0034] 대조적으로, 다른 프로세서들은 인터럽트를 취할 때 인터럽트들을 디스에이블하지 않는다. 이러한 프로세서들 상에서, 모든 필요한 상태를 저장한 제1 인터럽트 이전에 제 2 인터럽트가 전적으로 수락될 가능성이 있다. 이러한 프로세서들은 통상적으로 인터럽트 리턴 어드레스/상태 정보를 저장하기 위한 다수의 장소들을 갖는다. 프로세서는 이러한 값들을 스택 상으로 푸시할 수 있다. 대안적으로, 프로세서는, 몇 가지 내포된(nested) 인터럽트들을 지원할 수 있으며, 이러한 수의 인터럽트들을 지원하기 위해 충분한 레지스터 상태를 가질 수 있다.
[0035] 인터럽트들 및 예외들은 통상적으로 우선순위에 따라 오더(order)된다. 예를 들어, 페이지 미스 예외는 통상적으로 I/O 인터럽트 보다 더 높은 우선순위를 갖는다. 보류중인(pending) 다수의 인터럽트가 존재한다면, 프로세서는 통상적으로 더 높은 우선순위의 인터럽트를 먼저 처리할 것이다. 보류중인 다수의 인터럽트들이 존재하는 대부분의 일반적인 경우는, 인터럽트들이 약간의 시간 동안 디스에이블되었을 때 발생하며; 인터럽트들이 재-인에이블되었을 때, 서비스에 이용가능한 다수의 인터럽트들이 존재할 수 있다.
[0036] 모든 인터럽트들이 실행을 시작하는 오직 하나의 어드레스를 갖는 프로세서들 상에서, 프로세서가 인터럽트를 취하는 방식에는 어떠한 차이도 존재하지 않으며; 인터럽트를 취한 후, 인터럽트 처리기는 가장 높은 우선순위의 보류중인 인터럽트를 결정하여 이것을 먼저 처리할 것이다. 상이한 인터럽트들에 대한 상이한 어드레스들을 갖는 프로세서 상에서, 프로세서는 가장 높은 우선순위의 보류중인 인터럽트를 결정하여 그 인터럽트에 대한 제어를 인터럽트 처리기 어드레스에 트랜스퍼할 것이다.
[0037] 내포된 인터럽트들을 갖는 일부 프로세서들 상에서, 인터럽트에 대한 인터럽트 처리기는 더 높은 우선순위를 갖는 인터럽트에 의해 인터럽트될 수 있다. 이는, 프로세서가 인터럽트를 현재 처리하고 있다고 하더라도, 더 높은 우선순위 임무들이 처리되도록 허용한다.
[0038] 적절한 보호를 갖는 오퍼레이팅 시스템을 구현하기 위해 2개의 레벨들의 특권들을 갖는 것이 충분하다. 그러나, 다수의 오퍼레이팅 시스템들이 수정 없이 동일한 프로세스 상에서 실행될 수 있는 가상화를 구현하는 것이 바람직하게 된다. 이를 달성하는 하나의 방법은, 다른 레벨의 특권들을 갖는 것이다. 이는, 하이퍼바이저(더욱 구체적으로, 네이티브(native) 또는 베어(bare)-메탈 하이퍼바이저로도 또한 알려져 있는, 타입-1 하이퍼바이저)의 구현을 허용한다.
[0039] 이 경우에서, 3개의 특권 레벨들 ― 유저, 수퍼-유저 및 하이퍼바이저가 존재한다. 하이퍼바이저 특권 레벨은 모든 머신 리소스들에 대한 액세스를 갖지만, 수퍼-유저는 자신이 모든 리소스들에 대한 액세스를 갖는다는 착각(illusion)을 갖는다. 그러나, 수퍼-유저가 특정 리소스들에 액세스하기 시도할 때, 액세스는 하이퍼바이저 상태에 대한 예외를 야기할 것이다. 이 시점에서, 하이퍼바이저는 요청을 인터셉트하여, 이를, 오퍼레이팅 시스템이 프로세서 상에서 실행중인 단독 오퍼레이팅 시스템인 것으로의 착각을 유지하는 방식으로 실행할 것이다.
[0040] 예로서, 가상 페이지 맵핑 프로세스를 고려한다. 오퍼레이팅 시스템의 관점으로부터, 오퍼레이팅 시스템은 유저의 가상 페이지들을 맵핑하는 실제 메모리의 일정량을 갖는다. 실제로, 이러한 “실제 메모리”는 사실상 하이퍼바이저 층에 의해 실제 물리 메모리에 추가로 맵핑된다. 오퍼레이팅 시스템이 가상 메모리 페이지를 “실제” 메모리 페이지에 맵핑하기 시도할 때, 이러한 시도는 하이퍼바이저 층으로의 인터럽트를 야기한다. 하이퍼바이저 층은, 이러한 “실제” 메모리를 일부 물리적 메모리 페이지로 맵핑하고, 맵핑 테이블들을 업데이트하여, 오퍼레이팅 시스템의 사용자 프로그램이 가상 페이지에 액세스하기 시도할 때, 이는 하이퍼바이저에 의해 할당된 물리적 페이지에 액세스할 것이다.
[0041] 멀티-스레디드 프로세서들은, 다수의 유저 프로세스들에 대한 상태를 동시에 홀딩할 수 있는 프로세스들이다.
[0042] 구현에 따라, 프로세서는 이러한 유저 프로세스들 각각으로부터의 명령들을 다양한 상이한 방식들로 실행할 수 있다. 일반적으로, 이러한 명령들은 2개의 타입들: 상이한 프로세스들로부터의 명령들이 동시에 실행하는 동시(simultaneous); 및 한 번에 오직 하나의 스레드로부터의 명령들만이 실행하는 일시(temporal) 중 하나로 그룹화된다.
[0043] 동시 멀티스레딩에서, 특권 상태는 통상적으로 또한 스레드들로 하여금 특권 레벨에서 동시에 실행하는 것을 가능하게 허용하도록 복제된다. 이는, 마치 프로세서 상에 다수의 코어들이 존재하는 것처럼 보이게 하여, 오퍼레이팅 시스템들이 통상적으로 이들을 멀티-프로세서들의 특수한 경우로 취급한다.
[0044] 일시적 멀티스레딩, 특히, 대략적인 멀티프레딩(coarse-grained multithreading)에서, 한 번에 오직 하나의 스레드만이 특권 모드로 실행하게 되는데, 그래서 특권 상태의 오직 하나의 카피만이 필요하다. 오퍼레이팅 시스템은 매우 빠른 콘텍스트 전환을 갖는 것일지라도 프로세서를 단일 프로세서로서 취급할 수 있다.
[0045] 진보된 오퍼레이팅 시스템 지원을 갖는 컴퓨터 프로세서를 제공함으로써, 위에서 설명된 문제들이 해결되고, 당업계에서 기술적 해결책이 달성된다. 컴퓨터 프로세서는 복수의 하드웨어 스레드들을 포함할 수 있다. 컴퓨터 프로세서는 하드웨어 스레드의 상태에 대한 상태 프로세서 로직을 더 포함할 수 있다. 상태 프로세서 로직은, 복수의 하드웨어 스레드들 중 각각의 하드웨어 스레드에 복제된 상태를 포함할 수 있는 스레드-별 로직 및 복수의 하드웨어 스레드들 중 각각의 하드웨어 스레드와는 독립적일 수 있는 공통의 로직을 포함할 수 있다. 컴퓨터 프로세서는, 복수의 하드웨어 스레드들 중 오직 하나의 하드웨어 스레드로부터의 명령들을 단일 스레디드 모드로 실행하기 위한 단일 스레디드 모드 로직을 더 포함할 수 있다. 컴퓨터 프로세서는, 복수의 하드웨어 스레드들 중 하나 초과의 하드웨어 스레드로부터의 명령들을 제2 모드에서 동시에 실행하기 위한 제2 모드 로직을 더 포함할 수 있다. 컴퓨터 프로세서는 제1 모드와 제2 모드 사이에서 전환하기 위해 전환 모드 로직을 더 포함할 수 있다.
[0046] 상태 프로세서 로직은, 모든 하드웨어 스레드들에 공통인 상태들의 부분이, 오직 단일 스레디드 모드 로직이 단일 스레디드 모드에서 명령들을 실행할 때에만, 액세스가능하도록 허용할 수 있다. 전환 모드 로직은 인터럽트를 취함으로써 단일 스레디드 모드와 제2 모드 사이에서 전환할 수 있다. 인터럽트를 취하는 것은, 전환 모드 로직이, 복수의 하드웨어 스레드들의 모든 하드웨어 스레드들에 대한 현재 리턴 어드레스를 프로세서 상태 레지스터에 저장하게 하고, 복수의 하드웨어 스레드들 중 하나를 제외한 모든 액티브 하드웨어 스레드를 중단(halt)하게 하고, 그리고 액티브 하드웨어 스레드가 인터럽트 처리기 어드레스로부터의 실행을 시작하게 할 수 있다.
[0047] 컴퓨터 프로세서는, 단일 스레디드 모드로 실행될 때, 저장된 리턴 어드레스에서 저장된 프로세서 상태로 실행을 재개하기 위한 명령들을 갖는 복수의 하드웨어 스레드들의 하드웨어 스레드들 모두를 호출하는 프로세싱 로직을 더 포함할 수 있다. 프로세싱 로직은, 제2 모드의 재개를 야기하도록 설계된 명령을 실행시킴으로써 활성화될 수 있다.
[0048] 컴퓨터 프로세서는, 상태 프로세서 로직이 단일 스레디드 모드로 실행하는 동안 인액티브 하드웨어 스레드들의 상태를 검사하여 수정하기 위한 프로세싱 로직을 더 포함할 수 있다.
[0049] 컴퓨터 프로세서는, 공통 로직, 및 하드웨어 스레드의 복제 상태를 적어도 2개의 그룹들의 상태로 분할하고, 스레드에 대한 특권 레벨을 결정하고 ― 상태의 그룹들 중 적어도 하나는 제1 특권 레벨에서 액세스불가함 ―, 그리고 특권 레벨들 사이에서 전환하는 특권 로직을 더 포함할 수 있다. 컴퓨터 프로세서는, 하드웨어 스레드의 복제 상태를 적어도 2개의 그룹들의 상태로 분할하고, 스레드에 대한 특권 레벨을 결정하고 ― 상태의 그룹들 중 적어도 하나는 제1 특권 레벨에서 액세스불가함 ―, 그리고 특권 레벨들 사이에서 전환하는 특권 로직을 더 포함할 수 있다.
[0050] 더 많이 제한적인 특권 레벨로부터 더 적게 제한적인 특권 레벨로의 전환은, 동시에 특권 레벨을 변경하고 그리고 컴퓨터 프로세서의 실행 포인트를 미리결정된 로케이션으로 변경하는 인터럽트를 사용하여 실행될 수 있다. 더 많이 제한적인 특권 레벨로부터 더 적게 제한적인 특권 레벨로의 전환은, 동시에 특권 레벨을 변경하고 그리고 컴퓨터 프로세서의 실행 포인트를 미리결정된 로케이션으로 변경하는 명령을 실행하기 위해 프로세싱 로직에 의해 발생할 수 있다.
[0051] 본 발명은 이하의 도면들과 함께 고려되는 하기에 제시된 예시적인 실시예의 상세한 설명으로부터 더욱 쉽게 이해될 수 있다.
[0052] 도 1은 프로세서의 2개의 스레디드 구현을 위한 레지스터 조직의 블록도이다.
[0053] 도 2는 제어 레지스터 비트 필드들의 테이블이다.
[0054] 도 3은, 도 1의 프로세서가, 실행 파이프라인에서 하이퍼바이저 레벨, 모든-스레드 인터럽트, 및 그 결과 액션들을 취할지 여부를 어떻게 결정하는지 예시하는 프로세스 흐름이다.
[0055] 도 4는, 스레드들 중 하나가 인터럽트되어야 하는지 결정하기 위해 도 1의 프로세서가 각각의 스레드를 별도로 어떻게 체크하는지 예시하는 프로세스 흐름이다.
[0056] 도 5는, 본 개시내용의 예들이 동작할 수 있는 진보된 오퍼레이팅 시스템 지원을 갖는 컴퓨터 프로세서의 아키텍쳐의 블록도이다.
[0057] 본 개시내용의 실시예들은, 현대의 프로세서 상에서 오퍼레이팅 시스템들의 구현에 관련된 몇몇 문제점들을 다루는 컴퓨터 프로세서의 아키텍쳐 및 구현을 도입한다. 이들은, 트랩 명령들에 의해 오퍼레이팅 시스템 루틴들을 구현하는 규격들을 추상화하는 것(abstracting), 하이퍼바이저들을 허용하기 위해 특권들의 부가적인 레벨들을 도입하는 것, 모든 스레드들을 인터럽트하는 인터럽트들 대 오직 하나의 스레드만을 인터럽트하는 인터럽트들을 구별하는 것, 및 하드웨어 스레드들 사이에서 리소스들의 공유의 제어를 허용하는 제어들을 구현하는 것을 포함한다.
[0058] 인터럽트들 및 예외들은 레벨들로 지칭되는 상이한 그룹들로 조직된다. 각각의 레벨은 우선순위에 의해 조직화된 다수의 인터럽트들/예외들을 갖는다.
[0059] 인터럽트들은 레벨에 의해 내포된다. 더 높은 우선순위 레벨에 속하는 인터럽트는 더 낮은 레벨의 우선순위 레벨에 속하는 실행 인터럽트 처리기를 인터럽트할 수 있을 뿐만 아니라 인터럽팅 유저 코드를 인터럽트할 수 있다. 인터럽트가 취해질 때, 명시적으로 재-인에이블될 때까지 인터럽트는 동일한 또는 더 낮은 레벨의 인터럽트들의 모든 인터럽트들을 차단한다.
[0060] 각각의 인터럽트/예외는, 인터럽트에 의해 결정되는 상이한 엔트리 포인트 및 인터럽트의 레벨에 대한 기본 레지스터로 제어를 전달한다. 인터럽트들이 0에서 시작하도록 넘버링된다. i-번째 인터럽트는, 어떤 수의 명령들의 i배 오프셋 + 기본 레지스터의 값에서 인터럽트 처리기에 제어를 전달한다. 명령들의 수가 64가 되도록 선택되고 각각의 명령이 4 바이트라면, 인터럽트 i는 기본 + 256*i로 분기할 것이다.
[0061] 시스템 호출들은 (소프트웨어 생성되는) 예외의 등가물을 야기하는 명령에 의해 구현된다. 이들은 그 자신의 인터럽트 레벨을 형성한다. 이는, 가장 낮은 우선순위 레벨, 레벨 0이다.
[0062] 제안된 아키텍처의 기본 예외 처리 성분들은 다른 프로세서들에서 발견되는 성분들과 유사하다. 레지스터들은: PSC(Process Status and Control Register) ― 이 레지스터는 특권 레벨, 변환 모드 및 인터럽트 인에이블/디스에이블을 포함하는 현재 프로세서 상태에 관한 정보를 홀딩함 ― 를 포함한다.
[0063] 관련된 PSC의 다양한 비트들은: 유저 ― 세팅(set)될 때, 프로세서는 유저 모드로 실행되고 레지스터들을 제어하는 액세스는 디스에이블됨 ― 이다. 클리어(clear)될 때, 프로세서는 수퍼-유저 모드에 있고; ienn ― 세팅될 때, 인터럽트 레벨 n으로부터의 인터럽트들이 취해질 수 있음 ― 이다. 클리어될 때, 인터럽트들은 취해지지 않을 것이다. 각각의 인터럽트 레벨에 대한 하나의 비트가 존재한다.
[0064] 레지스터들은: PSSn(Process Status Save Registers) ― 인터럽트/예외/시스템 호출에 대해, 이러한 레지스터들은 인터럽트 이전에 PSC 레지스터의 값을 홀딩함 ― 을 더 포함한다. 내포된 인터럽트의 각각의 레벨에 대해 하나씩 IRAn(Interrupt Return Address Registers) ― 인터럽트/예외/시스템 호출에 대해, 이러한 레지스터들은 인터럽트 리턴 어드레스를 홀딩함 ― 가 존재한다. 내포된 인터럽트의 각각의 레벨에 대한 것; IBAn(Interrupt Base Address Registers) ― 이러한 레지스터들은 각각의 인터럽트 레벨에 대한 기본 어드레스를 식별함 ―; 및 스크래치 레지스터들 ― 이들은 오직 특권 모드에서만 액세스가능한 레지스터들임 ― 이 존재한다. 이러한 레지스터들을 통해 행해질 수 있는 것은 오직 범용 레지스터들로/로부터 값들을 카피하는 것이다. 이 레지스터들은 프로세스 정보를 홀딩하고 그리고 유저 상태의 저장을 부트스트랩하도록 사용된다.
[0065] 트랩 명령은 시스템 호출들을 구현하는데 사용된다. 그 포맷은: trap num이다.
[0066] 여기서, num은 인터럽트 수이다. 명령 어드레스 PC에서의 트랩이 실행될 때, 이하의 액션들이 발생한다:
[0067] IRA0 <- PC+4 ; 트랩을 처리한 후, 다음으로 리턴.
[0068] ; 명령. 4 바이트 명령들.
[0069] PSS0 <- PSC
[0070] PSC.user <- 0 ; 수퍼 유저 특권 레벨로 전환
[0071] PSC.ien0 <- 0 ; 인터럽트들이 디스에이블되는 트랩들
[0072] PC <- IBA0 + num*256 ; 이에 기초한 인터럽트 처리기 어드레스
[0073] ; 트랩 번호
[0074] 트랩들이 인터럽트 레벨 0을 형성하기 때문에, 수반되는 IRA/PSS/IBA는 레벨 0과 연관된 것들이다. PSC 유저 비트가 클리어되어, 수퍼-유저 모드에서 프로세서를 실행한다. 또한, 추가 트랩들(레벨 0에서의 인터럽트들)이 디스에이블된다.
[0075] 다른 인터럽트들은 하드웨어에 의해, 인터럽팅 명령(예컨대, 로드 상의 페이지 결함)을 실행함으로써 초기화되거나, 또는 외부 신호(예컨대, I/O 보류)에 의해 트리거된다. 거동은, 레벨들에 의해 야기되는 차이들을 제외하고는, 트랩의 거동과 동일하다. 상이한 IRA/PSS/IBA들이 사용될 것이다. 더 많은 수의 인터럽트 비트들이 클리어되어 모든 더 낮은 레벨의 인터럽트들을 디스에이블할 것이다. 또한, 리턴 어드레스는 인터럽트의 속성에 의해 결정될 것이며; 현재 실행중인 명령의 어드레스일 수 있다.
[0076] 예컨대, 레벨 2의 인터럽트 수 num를 실행한 후 액션들의 하나의 가능한 세트는:
[0077] IRA2 <- PC ; 하나의 가능성 ― 재-실행
[0078] ; 인터럽트 처리 이후의 명령
[0079] PSS2 <- PSC
[0080] PSC.user <- 0 ; 수퍼 유저 특권 레벨로 전환
[0081] PSC.ien0 <- 0 ; 인터럽트들이 디스에이블되는 트랩들
[0082] PSC.ien1 <- 0 ; 인터럽트들이 디스에이블되는 레벨 1
[0083] PSC.ien2 <- 0 ; 인터럽트들이 디스에이블되는 레벨 2
[0084]
[0085] PC <- IBA2 + num*256 ; 이에 기초한 인터럽트 처리기 어드레스
[0086] ; 인터럽트 번호.
[0087]
[0088] retfi 명령은 인터럽트들로부터 리턴을 구현하는데 사용된다. 그 포맷은:
[0089] retfin
[0090] 여기서, n은 인터럽트 레벨이다. retfi가 실행될 때, 이하의 액션들이 발생한다:
[0091] PC <- IRAn
[0092] PSC <- PSSn
[0093] 오직 수퍼-유저 모드에서만 액세스가능한 다양한 레지스터들은 총괄하여 SPR(special purpose registers)로 지칭된다. 일반적으로, 이러한 레지스터들은 프로세서의 거동을 제어하는 데 사용되며, 이들에 기록하는 것은 부작용들을 가질 수 있다. 위에서 언급된 PSC,IRA,PSS 및 IBA 레지스터들은 모든 특수 목적 레지스터들이다.
[0094] 이러한 특수 목적 레지스터들은 판독 및/또는 기록될 필요가 있다. 이는 일반적으로, 특수 목적 레지스터로/로부터 범용 레지스터로/로부터 값들을 카피하는 명령에 의해 행해진다. 일부 아키텍처들은 특수 목적 레지스터들의 각각의 클래스에 대한 별도의 명령을 갖고; 여기에는 2개의 명령들, SPR에서 GPR로 값들을 트랜스퍼하기 위한 명령, 및 GPR이 SPR로 트랜스퍼하기 위한 명령이 존재한다. 이들은:
[0095] rsetspr $rN,SPR ; 값을 SPR로부터 GPR N으로 카피
[0096] sprsetr $rN,SPR ; 값을 GPR N로부터 SPR로 카피
[0097] 알려져 있는 수많은 변동들이 존재한다. 이들 중 일부는: 인터럽트 벡터 어드레스들의 표이다. 인터럽트 n에 대한 인터럽트 처리기 어드레스를 찾기 위해, 이들은 표의 n-번째 엔트리에 저장된 명령 어드레스; 모든 인터럽트들의 공통 어드레스, 또는 동일한 레벨의 모든 인터럽트들을 사용한다. 인터럽트가 취해질 때, 인터럽트 번호는 레지스터에 저장된다. 인터럽트 처리 코드는, 처리되고 있는 인터럽트를 결정하기 위해 그 레지스터를 판독하고; 인터럽트 리턴 어드레스/상태를 레지스터들에 저장하는 것 대신에 이들을 메모리 내 스택 상으로 푸시하고; 오직 인터럽트의 하나의 레벨만을 갖고; 그리고 인터럽트 인에이블, 유저 모드, 및 변환 인에이블 비트들은 동일한 레지스터에 있다. 다른 아키텍처들에서, 비트들은 다수의 레지스터들에 걸쳐 분산될 수 있으며 상이하게 제어될 수 있다.
[0098] 하이퍼바이저의 목적은, 다수의 오퍼레이팅 시스템들이 하나의 프로세서 상에서 동시에 실행하도록 허용하면서, 이들 각각에게 이들이 유일하게 실행중인 오퍼레이팅 시스템이라는 착각을 주는 것이다. 이상적으로, 이것은 오퍼레이팅 시스템에 대한 임의의 수정을 요구하지 않아야 하며 ― 하이퍼바이저에 따라(on top of) 실행하는 코드는 하이퍼바이저 없이 실행하는 코드와 동일해야 한다.
[0099] 이러한 착각을 보존하기 위해, 하이퍼바이저는 보호들을 변경할 임의의 액션들을 트랩할 필요가 있다. 또한, 다수의 오퍼레이팅 시스템들에 걸쳐 공유될 상태를 수정하는 임의의 액션들을 인터셉트해야 할 것이다. 예를 들어, 하이퍼바이저는 오퍼레이팅 시스템에 의해 행해지는 페이지 표에 대한 임의의 변화들을 인터셉트하고 그리고 이들을 실제 맵핑으로 대체할 필요가 있다. 유사하게, 오퍼레이팅 시스템으로부터 I/O 요청들을 인터셉트하고, 그리고 하드웨어 상에서 실행중인 다른 오퍼레이팅 시스템들로부터 모든 다른 요청들에 따라 이 요청들을 스케줄링할 필요가 있다.
[00100] PSC 레지스터는 하이퍼바이저 모드를 제어하는 비트를 갖는다. 비트가 0일 때, CPU는 프로세서 내 모든 레지스터들로의 액세스를 갖는 하이퍼바이저 모드에 있다.
[00101] 프로세서가 이미 하이퍼바이저 모드에 있지 않은 경우에 sprsetr 또는 retfi 명령을 사용함으로써 하이퍼바이저 비트를 0으로 클리어하기 위한 임의의 시도는 인터럽트를 야기할 것이다.
[00102] 인터럽트들은 2개의 카테고리들로 분할 될 것이며 ― 이 카테고리들은 프로세서 특권을 하이퍼바이저 모드로 올리는 것, 및 특권을 수퍼-유저 모드로 올리는 것이다. 하이퍼바이저 레벨 인터럽트들은, 인터럽트 처리기가 인터럽트 처리기 거동을 가상화하기 위해 몇몇 액션을 취할 필요가 있는 이러한 상황들을 위해 예비되어야 한다.
[00103] 프로세서-전반 상태에 대한 액세스를 요구하지 않는 인터럽트는 수퍼-유저-모드 인터럽트로서 가장 잘 처리된다. 이 예로서, 부동-소수점 또는 디버그 예외가 수퍼-유저 레벨에서 명료하게 처리될 수 있다. 반대로, 공유된 I/O 디바이스에 대한 I/O 예외는 하이퍼바이저 레벨에서 처리될 필요가 있을 것이고, 이에 하이퍼바이저는 I/O를 다룰 수 있다.
[00104] 유연성을 부가하기 위해, 프로세서는, 인터럽트/예외가 하이퍼바이저 모드에서 또는 수퍼-유저 모드에서 처리될지 여부를 나타내기 위해 레지스터를 사용할 수 있다.
[00105] 하이퍼바이저 인터럽트들은 수퍼-유저 인터럽트들보다 더 높은 레벨일 것이다.
[00106] 공유 프로세서 상태에 영향을 주거나 또는 특정 보호들을 변경할 SPR은, 수퍼-유저 모드에 있을 때 프로세서에 의해 직접 액세스될 수 없다. 그 대신에, 이러한 SPR들에 액세스하기 위해 rsetspr/sprsetr 명령을 사용하는 시도는, 프로세서가 하이퍼바이저 모드로 전환되는 예외를 야기할 것이다.
[00107] 공유 상태에 영향을 주는 다른 명령들은 또한, 비-하이퍼바이저 모드로 실행되는 경우에 인터럽트들을 야기할 필요가 있을 것이다. 이들은 캐시 거동에 영향을 주는 명령들, 특히 캐시 잠금 및 플러시 명령들을 포함한다.
[00108] 프로세서 특정 제어 정보를 홀딩하는 CSC(CPU status and control) 레지스터가 존재한다. 이 레지스터는, 프로세스에 대한 제어 정보, 즉, 프로세스들이 스왑 인 그리고 스왑 아웃됨에 따라서, 또는 유저 프로그램들로부터 오퍼레이팅 시스템으로 제어가 이동함에 따라서 변경될 정보를 홀딩하도록 의도되는 PSC와는 상이하다.
[00109] CSC 레지스터의 하이퍼 비트는, 프로세서가 3 레벨들의 특권으로 실행되는지 또는 2 레벨들의 특권으로 실행되는지를 제어한다. 비트가 클리어될 때, 수퍼-유저 및 하이퍼바이저 모드들은 동일하다.
[00110] 이 기능은, 부가적인 하이퍼바이저 기능이 필요하지 않은 경우들에 유용하다.
[00111] 제안된 아키텍쳐는 단일-스레디드 코어로서 또는 멀티-스레디드 코어로서 구현될 수 있다. 구현이 멀티-스레디드인 경우, 구현은 이전에 논의된 전통적인 접근방식들 중 하나를 사용할 수 있다. 대안적으로, 이 섹션에서 설명된 접근방식을 사용할 수 있다.
[00112] 제안된 아키텍처는, 대칭적인 멀티-스레딩을 오직 제한된 범위로만 사용한다. 유저 스페이스 레지스터는, 이들이 특수 목적 레지스터의 서브세트인 것처럼 복제된다. 복제된 특수 목적 레지스터들은, 유저 프로그램 특정 임무들을 처리하기 위해 오퍼레이팅 시스템에 의해 공통으로 요구되는 것들이다. 이들은: 예외들이 스레드-별(per-thread)로 처리되고; 그리고 인터럽트 리턴&상태 저장 레지스터들이 되도록 허용하기 위해, 프로그램 및 오퍼레이팅 시스템 둘 모두에 대해 시간 기반 인터럽트들을 스케줄링하기 위한 타이머들; 데이터&명령 디버그 레지스터들; 스크래치 레지스터들을 포함할 것이다.
[00113] 다른 특수-목적 레지스터들에 액세스하지 않고 일반적으로 처리될 수 있는 특정 인터럽트들 및 예외들은 스레드-별 인터럽트들에 의해 처리된다. 이들은 트랩 명령들에 의해 야기된 소프트웨어 예외들을 포함한다.
[00114] 스레드-별 인터럽트에 직면될 때, 다른 스레드들은 변경되지 않고 계속해서 실행된다. 인터럽트를 취하는 스레드는 수퍼-유저 모드로 전환되고, 제어는 적절한 인터럽트 처리기 어드레스에 트랜스퍼된다.
[00115] 상태의 특정 양상들을 수정하는 것은 모든 스레드들에 영향을 줄 것이다. 예를 들어, 페이지-테이블들, 또는 변환 색인 버퍼(translation look aside buffer)들을 변경하는 것은 다수의 스레드들에 잠재적으로 영향을 줄 것이다. 그러나, 대개 일반적으로, 다수의 카피들이 아니라, 프로세서 상에 이 상태의 오직 하나의 카피만이 존재할 것이다. 이러한 리소스들의 액세스 및 제어를 간략화하기 위해, 이러한 복제되지 않은 리소스들의 수정을 요구하는 수정될 인터럽트가 도착할 때, 프로세서 상의 하나를 제외한 모든 스레드들은 보류된다(suspended). 보류되지 않은 스레드는 수퍼-유저 모드로 전환될 것이며, 제어는 적절한 인터럽트 처리기에 전달된다. 이는, 모든-스레드 인터럽트로 지칭된다.
[00116] 프로세서가 모든-스레드 예외 이후에 실행을 재개할 때, 보류되지 않은 스레드는 단일 스레디드 경우에서와 같이 저장된 프로그램 상태 및 명령 어드레스들에 기반하여 실행을 재개한다. 일 구현에서, 다른 스레드들은 이들이 보류되었던 지점들에서 실행을 재개할 것이다.
[00117] 모든 스레드들을 보류하는 대안적인 방식은, 각각의 보류된 스레드에 대한 인터럽트 리턴 어드레스/프로세스 상태 저장 레지스터들을 저장하는 것이다. 스레드가 모든-스레드 인터럽트로 인해 보류될 때, 그 현재 프로세스 상태 및 실행될 다음 명령의 어드레스가 IRA/PSS 레지스터 쌍에 저장된다.
[00118] 또한, 보류되지 않은 스레드가, 보류된 스레드들 각각에 대해 IRA/PSS 쌍을 판독하고 수정하게 하기 위한 수단이 존재할 수 있다. IRA를 수정함으로써, 스레드가 재개될 때, 이는 다른 어드레스에서 재개될 것이다.
[00119] 더 많은 유연성을 제공하기 위해, 제안된 아키텍처는, 보류되지 않은 스레드들로 하여금, 모든-스레드 인터럽트에 있으면서, 보류된 스레드들을 포함하는 모든 스레드들에 대한 상태를 검열하고 수정하게 하는 수단을 갖는다.
[00120] 현재 아키텍처에서, 특수 레지스터는, 프로세서가 실행중인 콘텍스트의 아이덴티티를 홀딩한다. 상이한 스레드를 포인팅하도록 스레드 식별자 레지스터의 값을 변경시킴으로써, 프로세서는 그 상이한 스레드의 콘텍스트에서 실행을 시작할 것인데 ― 즉, 프로세서는 스레드 식별자 레지스터에 의해 포인팅된 스레드로부터의 명령들을 판독 및 기록할 것이다. 따라서, 실행 명령들은 그 스레드로부터의 레지스터들을 판독 및 기록할 것이다.
[00121] 특권 핸들링은 약간의 복잡성을 갖는다. 스레드-id가 보류된 스레드로 세팅될 때, PSC로의 판독들 및 기록들은 보류된 스레드의 PSC에 영향을 줄 것이다. 그러나, 심지어는 이 모드에서 조차도, 프로세서는 여전히 오리지널 특권 레벨에서 실행될 필요가 있다. 이는: 프로세서가 그 특권을 제어하는데 사용되는 PSC가 오리지널 스레드의 PSC임을 보장함으로써, 또는 모든-스레드 인터럽트 레벨에 대한 별도의 PSC를 가짐으로써 달성될 수 있다.
[00122] 공유된 스크래치 레지스터들 이외에도, 공유되지 않은 스크래치 레지스터들이 존재한다. 이러한 공유되지 않은 스크래치 레지스터들은 별도의 레지스터들이거나 또는 스크래치 레지스터들의 몇몇 서브세트일 수 있다. 이러한 레지스터들이 공유되지 않기 때문에, 이들은 심지어는 스레드-id가 변경된 후에도 값들을 홀딩하도록 모든-스레드 인터럽트 처리기에 의해 사용될 수 있다.
[00123] 이러한 레지스터는 또한 보류된 스레드들의 상태의 유출(spilling)을 부트-스트랩하는 데 사용될 수 있다.
[00124] 설명되고 있는 하이퍼바이저와 멀티-스레드 인터럽트 모델 사이에는 시너지가 존재한다. 모든 하이퍼바이저 인터럽트들은 모든-스레드 인터럽트들로서 취급될 것이다(반대의 경우도 마찬가지임). 이는, 다수의 스레드들에 영향을 줄 수 있는 상태를 수정하는 것이 필요한 상황들이 또한 상태 변경이 다수의 오퍼레이팅 시스템들에 영향을 주는 상황들이기 때문에, 명백한 확장이다.
[00125] 결과적으로, 하이퍼바이저 아키텍처와 멀티-스레디드 구현의 결합 모델에서, 하이퍼바이저 인터럽트가 취해질 때마다, 이는 모든-스레드 인터럽트로서 취급된다.
[00126] 멀티-스레딩에서, 일반적으로 스레드들의 상태는 서로 격리되어야 한다. 그러나, 특정 애플리케이션들, 이를테면, 실시간 프로세싱에서, 스레드들이 서로 협력할 수 있는 것이 유리할 것이다.
[00127] 이 모델에서, 협력 스레드들의 수는 하드웨어에 의해 지원될 수 있는 스레드들의 최대 수 미만이거나 또는 그와 동일한 것으로 가정된다. 게다가, 모든 이러한 스레드들은 동시에 프로세서에 있을 것으로 가정된다.
[00128] 이러한 스레드들의 협력을 강화하기 위한 한가지 방법은, 이들이 레지스터들을 사용하여 서로 통신할 수 있게 하는 것이다. 일 세트의 통신 레지스터들, 및 어떤 스레드들이 이들에 액세스하기 위해 허용될 것인지 특정하는 마스크가 존재할 것이다.
[00129] 레지스터들은, 이들에 몇몇 방식들 중 하나의 방식들로 기록함으로써 스레드에 의해 수정될 수 있는데; 이들 방식들은: 직접 기록 ― 여기서, 레지스터는 값으로 중복기록됨 ―; 1로 세팅 ― 레지스터의 비트들이 1로 세팅됨, 여기서 값은 1이며, 이것은 “또는(or)”과 동일함 ―; 1로 클리어됨 ― 레지스터의 비트들은 클리어되며, 여기서 기록되는 값은 1이고, 이는 and-with-complement의 등가임 ― 이다.
[00130] 이러한 레지스터들은, 스레드들이 스레드에서 스레드로 값들을 빠르게 통과시킬 수 있게 할 것이다. 1로 클리어/세팅하는 능력은, 스레드들이 배리어들 및 다른 동기화 프리미티브(synchronization primitive)들을 구현할 수 있게 한다.
[00131] 스레드들의 협력을 강화하는 다른 방식은, 실용적인 경우, 서로의 리소스들에 액세스할 수 있게 하는 것이다. 예를 들어, 스레드들은 데이터-디버그 레지스터들을 공유할 수 있어서, 임의의 스레드들이 모니터링된 어드레스를 판독/기록한다면, 예외를 취한다. 이는, 공통 리소스들의 풀(pool)을 증가시키고, 이 리소스들이 중앙집중형 로케이션으로부터 관리될 수 있게 한다.
[00132] 이 섹션에서, 2-스레디드 프로세서 구현은 통합 하이퍼바이저 및 모든-스레드 인터럽트/예외 지원으로 설명된다. 이 설명으로부터, 더 많은 수의 스레드들을 지원하기 위해 이 설계를 어떻게 스케일링 업하는지 또는 이 설계를 단일-스레디드 구현으로 어떻게 스케일링 다운하는지가 명백할 것이다.
[00133] 제안된 구현에서의 레지스터들의 조직이 도 1에 도시된다. 레지스터들은 특권 레벨 ― 유저(102), 수퍼-유저(104, 106), 하이퍼바이저 ― 에 의해 그리고 이들이 스레드-특정(108, 110)인지 또는 공통(112)인지에 의해 조직된다.
[00134] 유저/스레드의 경우, 이들은 일반적인 유저 상태 레지스터들이다. 도 1은 오직 범용 레지스터들(114a-114n)만을 도시하지만, 명령 세트 아키텍처에 따라, 부동-소수점 레지스터들과 같은, 다른 레지스터들이 존재할 수 있다.
[00135] 수퍼-유저/스레드의 경우: 이들은 프로세스들의 거동을 제어하기 위해 오퍼레이팅 시스템에 의해 사용되는 레지스터들(116a-116n)이다. 이러한 레지스터들(116a-116n)로의 액세스는, 프로세스가 다른 프로세스들과 간섭하는 것을 방지하기 위해 제한되는 것이 필요하다. 그러나, 이러한 레지스터들을 수정하는 것은, 둘 모두의 스레드들에 공통인 리소스들에 영향을 주지 않을 것이다. 그러한 이유로, 이러한 레지스터들(116a-116n)로의 액세스는 하이퍼바이저 레벨로 제한될 필요는 없다. 이 그룹에서의 레지스터들(116a-116n)은: 수퍼-유저 레벨 인터럽트 제어 레지스터들; 존재할 수 있거나 또는 존재하지 않을 수 있는 레지스터 그룹들의 예들로서 디버그/타이머/스크래치 레지스터들; 및 구현되는 명령 세트 아키텍쳐에 따라 도시되지는 않았지만 적절할 수 있는 다른 레지스터들을 포함한다.
[00136] 하이퍼바이저/스레드의 경우: 이들은 하이퍼바이저에 의한 스레드의 거동을 관리하기 위해 필요한 스레드-별 레지스터들(118a-118n)이다. 이하의 레지스터들: PSC ― 프로그램 상태 제어; IAR2 ― 하이퍼바이저 레벨 인터럽트 리턴; 및 PSS2 ― 하이퍼바이저 레벨 프로그램 상태 저장이 도시된다.
[00137] 하이퍼바이저/공통의 경우: 이들은 프로세서의 거동을 제어하기 위해 하이퍼바이저에 의해 필요한 레지스터들(120a-120n)이다. 이들은 스레드들의 수와는 독립적이다. 인터럽트 제어 레지스터들을 포함하는 레지스터들(120a-120n)의 이하의 그룹들이 도시된다. 이들은: HSC ― 프로세서가 하이퍼바이저 모드로 실행 중일 때 액티브인 변환 모드, 캐싱 모드, 및 다른 제어들을 정의하는 하이퍼바이저 레벨 제어 레지스터 ―; IAB2 ― 하이퍼바이저 레벨 인터럽트 어드레스 베이스 ―; ILC ― 각각의 인터럽트에 대해, 수퍼-유저인지 또는 하이퍼바이저 인터럽트인지 결정하는 인터럽트 레벨 제어 ―; THID ― 스레드-별 상태가 액세스되는 중인 스레드를 특정하는 스레드 식별자 ― ; CAC ― 협력 액세스 제어, 여기서 이 레지스터는 통신 레지스터들에 대한 다양한 스레드들에 의한 액세스 권한들 및 다른 스레드들의 잠재적으로 공유된 레지스터들을 제어함―; 아키텍처 및 구현의 세부사항에 따라, 존재할 수 있거나 또는 존재하지 않을 수 있는 레지스터 그룹들의 예들로서 도시된 타이머/TLB 제어(122); 구현되는 명령 세트 아키텍처에 따라, 도시되지 않았지만 적절할 수 있는 다른 레지스터들을 포함한다.
[00138] 수퍼-유저/공통의 경우: 이들은 스레드들 사이에서 통신하는 데 사용되는 레지스터들(124a-124n)이다. 이러한 레지스터들(124a-124n)이 스레드-간 성능을 개선시키는데 사용되기 때문에, 이들은 모든 스레드들이 실행중인 동안 액세스가능해야만 한다. 레지스터들(124a-124n)은 보호의 레벨을 부가시키기 위해 수퍼-유저 레벨에서 액세스가능한 것으로서 도시되었다. 그러나, 하이퍼바이저 CAC 레지스터에 특정된 액세스 제어들에 기반하여, 이들이 유저-레벨에서 액세스가능하게 하는 것이 동일하게 가능하다.
[00139] 가능한 레지스터들의 다른 그룹핑이 존재하는데 ― 이들 레지스터들은, 스레드들이 협력 스레드들이었다면 잠재적으로 공유될 수 있다. 공유를 위한 잠재적인 후보들로서 타이머, 디버그, 및 스크래치 레지스터들이 식별된다. 공유된 레지스터들은, 구현에 기반하여, 다른 레지스터들, 또는 이들의 서브-세트를 포함할 수 있다. 게다가, 단지 공유 또는 비 공유를 특정하는 대신 CAC 레지스터는, 세트들 각각에 대한 공유를 별도로 특정할 수 있다.
[00140] PSC 및 HSC의 비트-필드들 중 일부는 도 2에 도시된다. 비트 필드들은: NHYP (HSC 전용): 하이퍼바이저 모드 제어. 이것이 0이면, 프로세서는 하이퍼바이저/단일-스레디드 모드에 있음; ITHID(HSC 전용) ― 하이퍼바이저 모드로의 인터럽트와 연관된 스레드의 스레드 식별자; TRANS ― 명령/데이터 페이지 변환 제어들; CACHE ― 명령/데이터 캐시 제어들; IEN0/IEN1/IEN2 ― 인터럽트 인에이블들; FPEN ― 부동 소수점 인터럽트 인에이블; DEBUG ― 디버그 비교 및 인터럽트 인에이블들; 및 PROCID(PSC 전용) ― 실행중인 프로세스의 프로세스 식별자임 ―를 포함한다. 일반적으로 변환 키의 일부로서 페이지 변환 메커니즘에 의해 사용된다.
[00141] 명백하게 상이한 설계들은 제어 레지스터들에 대한 상이한 콘텐츠들 및 레이아웃들을 가질 수 있다.
[00142] 도 3은, 프로세서가 하이퍼바이저 레벨, 모든-스레드 인터럽트, 및 결과 액션들을 취할지를 결정하게 하는 프로세스(300)를 예시한다. 요약하면: 블록(302)에서, 하이퍼바이저 인터럽트들이 디스에이블되면(즉, HSC.ien2 = 0), 블록(304)에서, 인터럽트들은 존재하지 않을 수 있다. 블록(306)에서, 프로세서는 가장 높은 우선순위로부터 가장 낮은 우선순위로 모든 인터럽트들을 먼저 검토하여, 이들이 액티브인지 그리고 이들이 모든-스레드 인터럽트들인지 체크한다. 도시된 특정 경우에서, 인터럽트에 대응하는 ILC 레지스터의 비트들이, 그것이 하이퍼바이저/모든-스레드 인터럽트인지 또는 스레드-별 인터럽트인지를 표시한다. 다른 구현들은, 어느 레벨에서든 특정 인터럽트들을 하드-와이어링할 수 있거나, 또는 인터럽트의 종류를 결정하기 위한 다른 메커니즘들을 가질 수 있다. 블록(308)에서, 어떠한 모든-스레드 인터럽트들도 취해지지 않는 경우, 블록(310)에서, 프로세서가 단일-스레디드/하이퍼바이저 모드로 실행된다면, 어떠한 스레드-별 인터럽트들도 존재하지 않을 수 있으며; 그렇지 않으면, 블록(312)에서, 프로세서는 그 스레드에 대한 임의의 인터럽트들이 존재하는지를 결정하기 위해 각각의 스레드를 검토할 것이다. 블록(308)에서, 모든-스레드 인터럽트가 취해진다면, 블록(314)에서, 인터럽트 루틴을 실행하기 위한 스레드가 선택된다. 일부 경우들에서, 선택은 명백할 수 있는데: 예를 들어, 인터럽트가 일부 스레드 페이지-결함으로부터의 명령에 의해 야기된다면 그 스레드는 분명한 선택이다. 다른 경우들에서, 선택은 간단하지 않다. 예컨대, 스레드들 중 어느 하나가 I/O 인터럽트를 처리할 수 있다. 그 경우, 하드웨어는 임의로 선택될 수 있는데, 항상 2개의 스레드들 중 하나를 선택하며, 다른 제어 레지스터들에 기반하여 선택할 수 있는 식이다. 블록(316)에서, 스레드를 결정한 후, 둘 모두의 스레드들에 대한 PC & PSC는 IAR2/PSS2에 각각 저장되고, HSC는 셋업되고, 최종적으로 선택된 스레드의 PC는 인터럽트 처리기 어드레스로 세팅된다.
[00143] 모든-스레드 인터럽트들을 프로세싱한 후, 프로세서는 단일-스레드 모드로 실행되지 않으며 어떠한 인터럽트도 취해지지 않았다고 가정하면, 프로세서는 스레드들 중 어느 하나가 인터럽트되는지를 결정하기 위해 각각의 스레드를 별도로 체크할 것이다. 이 프로세스에 대한 플로우-차트(400)는 도 4에 도시된다. 요약하면: 블록(402)에서, 그 스레드에 대한 수퍼-유저 인터럽트들이 디스에이블되면(즉, PSC.ien1 = 0), 블록(404)에서, 그 스레드에 대한 인터럽트들은 존재하지 않을 수 있다. 블록(406)에서, 프로세서는 가장 높은 우선순위로부터 가장 낮은 우선순위로 모든 인터럽트들을 먼저 검토하며, 도시된 구현의 ILC에 기반하여, 이들이 액티브인지 그리고 이들이 스레드-별 인터럽트들인지 확인하기 위해 체크한다. 블록(408)에서, 스레드-별 인터럽트가 취해지면, 블록(410)에서, 스레드에 대한 PC & PSC는 IAR1/PSS1에 각각 저장되고, PSC가 셋업되며, 최종적으로 PC는 인터럽트 처리기 어드레스로 세팅된다.
[00144] 공통 액세스 제어 로직은, 2개의 스레드들과 2개 초과의 스레드들 사이에서 변한다. 2개의 스레드들의 경우, CAC는 오직 공유가 인에이블되는지 여부를 표시할 필요가 있으며; 만약 인에이블된다면, 둘 모두의 스레드들은 서로의 상태를 관찰할 것이다. 그러나, 2개 초과의 스레드들이 존재한다면, CAC는 또한 어떤 스레드들 사이에 무엇이 공유되는지 표시해야만 한다. 예를 들어, 4개의 스레드들이 존재한다면, 스레드들 0 & 1은 일부 상태를 공유하고 스레드들 2 & 3은 일부 다른 상태를 공유하는 것이 바람직할 수 있지만, 0/1는 2/3과 공유하지 않는다.
[00145] 이를 달성하기 위한 간단한 방법은, 각각의 공유된 리소스에 대한 N-비트 필드를 갖는 것이며, 여기서 N은 스레드들의 수이다. 비트 포지션 T의 “1”은, 스레드 T가 그 리소스에 대한 액세스를 갖는 것을 나타낼 것이다. 따라서, 위의 경우에서, 프로세서는 2개의 통신 레지스터들, 0 & 1을 갖는 것으로 가정한다. 이 경우, CAC는 8개의 비트들을 가질 것이고, 0:3은 통신 레지스터 0으로의 액세스를 제어하고, 4:7은 통신 레지스터 1로의 액세스를 제어한다. 비트들 11000011을 기록하는 것은, 스레드들 0 & 1에 통신 레지스터 0으로의 액세스를 제공하고, 스레드들 2 & 3에 통신 레지스터 2로의 액세스를 제공할 것이다.
[00146] 도 5는, 본 개시내용의 예들이 동작할 수 있는 진보된 오퍼레이팅 시스템 지원을 갖는 컴퓨터 프로세서(500)의 블록도이다. 컴퓨터 프로세서(500)는 복수의 하드웨어 스레드들(502a-502n)을 포함할 수 있다. 컴퓨터 프로세서(500)는 하드웨어 스레드(예컨대, 502a)의 상태에 대한 상태 프로세서 로직(504)을 더 포함할 수 있다. 상태 프로세서 로직(504)은, 복수의 하드웨어 스레드들(502a-502n) 중 각각의 하드웨어 스레드에 복제된 상태를 포함할 수 있는 스레드-별 로직(506) 및 복수의 하드웨어 스레드들(502a-502n) 중 각각의 하드웨어 스레드와는 독립적인 공통의 로직(508)을 포함할 수 있다. 컴퓨터 프로세서(500)는, 복수의 하드웨어 스레드들(502a-502n) 중 오직 하나의 하드웨어 스레드(예컨대, 502a)로부터 단일 스레디드 모드에서 명령들을 실행하기 위한 단일 스레디드 모드 로직(510)을 더 포함할 수 있다. 컴퓨터 프로세서(500)는, 복수의 하드웨어 스레드들(502a-502n) 중 하나 초과의 하드웨어 스레드로부터의 명령들을 제2 모드로 동시에 실행하기 위한 제2 모드 로직(512)을 더 포함할 수 있다. 컴퓨터 프로세서(500)는 제1 모드와 제2 모드 사이에서 전환하기 위해 전환 모드 로직(514)을 더 포함할 수 있다.
[00147] 상태 프로세서 로직(504)은, 모든 하드웨어 스레드들(502a-502n)에 공통인 상태의 부분이, 오직 단일 스레디드 모드 로직(510)이 단일 스레디드 모드에서 명령들을 실행할 때에만, 액세스가능하게 할 수 있다. 전환 모드 로직(514)은 인터럽트를 취함으로써 단일 스레디드 모드와 제2 모드 사이에서 전환할 수 있다. 인터럽트를 취하는 것은, 전환 모드 로직(514)이, 복수의 하드웨어 스레드들(502a-502n)의 모든 하드웨어 스레드들에 대한 복수의 프로세스 상태 레지스터들(516a-516n)을 포함하는 프로세스 상태 레지스터(예컨대, 516a)에 현재 리턴 어드레스를 저장하게 하고, 복수의 하드웨어 스레드들(502a-502n) 중 하나의 액티브 하드웨어 스레드(예컨대, 502a)를 제외한 모두를 중단하게 하고, 그리고 액티브 하드웨어 스레드(예컨대, 502a)가 인터럽트 처리기(518)의 인터럽트 처리기 어드레스로부터의 실행을 시작하게 할 수 있다.
[00148] 컴퓨터 프로세서(500)는, 단일 스레디드 모드로 실행될 때, 저장된 리턴 어드레스에서 저장된 프로세서 상태로 실행을 재개하도록 실행하기 위한 명령들을 갖는 복수의 하드웨어 스레드들(502a-502n) 중 하드웨어 스레드들 모두를 호출하는 프로세싱 로직(520)을 더 포함할 수 있다. 프로세싱 로직(520)은, 제2 모드의 재개를 야기하도록 설계된 명령을 실행시킴으로써 활성화될 수 있다.
[00149] 컴퓨터 프로세서(500)는, 상태 프로세서 로직(504)이 단일 스레디드 모드로 실행하는 동안 인액티브 하드웨어 스레드들의 상태를 검사하여 수정하기 위한 프로세싱 로직(520)을 더 포함할 수 있다.
[00150] 컴퓨터 프로세서(500)는, 공통 로직(508) 및 하드웨어 스레드(예컨대, 502a)의 복제 상태를 적어도 2개의 그룹들의 상태로 분할하고, 스레드에 대한 특권 레벨을 결정하고 ― 상태의 그룹들 중 적어도 하나는 제1 특권 레벨에서 액세스불가함 ―, 그리고 특권 레벨들 사이에서 전환하는 특권 로직(522)을 더 포함할 수 있다. 컴퓨터 프로세서(500)는, 하드웨어 스레드(예컨대, 502a)의 복제 상태를 적어도 2개의 그룹들의 상태로 분할하고, 스레드에 대한 특권 레벨을 결정하고 ― 상태의 그룹들 중 적어도 하나는 제1 특권 레벨에서 액세스불가함 ―, 그리고 특권 레벨들 사이에서 전환하는 특권 로직(522)을 더 포함할 수 있다.
[00151] 더 많이 제한적인 특권 레벨로부터 더 적게 제한적인 특권 레벨로의 전환은, 동시에 특권 레벨을 변경하고 그리고 컴퓨터 프로세서(500)의 실행 포인트를 미리결정된 로케이션으로 변경하는 인터럽트를 사용하여 실행될 수 있다. 더 많이 제한적인 특권 레벨로부터 더 적게 제한적인 특권 레벨로의 전환은, 동시에 특권 레벨을 변경하고 그리고 컴퓨터 프로세서(500)의 실행 포인트를 미리결정된 로케이션으로 변경하는 명령을 실행하기 위해 프로세싱 로직(520)에 의해 발생할 수 있다.
[00152] 이전의 설명에서, 다수의 세부사항들이 설명된다. 그러나, 본 개시내용이 이들 특정 세부사항들 없이도 실시될 수 있다는 것은 본 개시내용의 이점을 갖는 당업자에게는 명백할 것이다. 일부 예시들에서, 잘-알려진 구조들 및 디바이스들은, 본 개시내용을 불명료하게 하는 것을 회피하기 위해 세부적으로 도시되지 않고 블록도 형태로 도시된다.
[00153] 상세한 설명의 몇몇 부분들은, 컴퓨터 메모리 내의 데이터 비트들에 대한 연산들의 알고리즘들 및 심볼 표현들과 관련하여 제시되었다. 이들 알고리즘 설명들 또는 표현들은, 당업자들의 작업의 본질을 다른 당업자들에게 가장 효율적으로 전달하기 위하여 데이터 프로세싱 분야의 당업자들에 의해 사용되는 수단이다. 알고리즘은 본원에서 그리고 일반적으로, 원하는 결과를 유도하는 단계들의 자체-일관성있는 시퀀스인 것으로 고려된다. 단계들은 물리 량들의 물리적 조작들을 요구하는 것들이다. 일반적으로, 반드시 필요한 것은 아니지만, 이러한 양들은 저장, 트랜스퍼, 결합, 비교 또는 그렇지 않으면 조작될 수 있는 전기 또는 자기 신호들의 형태를 취한다. 원칙적으로 일반적인 사용의 이유들 때문에, 비트들, 값들, 엘리먼트들, 심볼들, 문자들, 용어들, 숫자들 등으로서 그러한 신호들을 지칭하는 것이 종종 편리한 것으로 증명된다.
[00154] 그러나, 이들 또는 유사한 용어들 모두가 적절한 물리 양들과 연관될 것이며, 단지 이들 양에 적용되는 편리한 라벨들일 뿐임을 염두에 두어야 한다. 후술하는 논의로부터 명백한 바와 같이 달리 상세하게 나타내지 않으면, 설명 전반에 걸쳐, “세그멘팅(segmenting)”, “분석(analyzing)”, “결정(determining)”, “인에이블(enabling)”, “식별(identifying)”, “수정(modifying)” 등과 같은 용어들을 활용하는 논의들은, 컴퓨터 시스템의 레지스터들 및 메모리들 내의 물리(예컨대, 전자) 양들로서 표현된 데이터를, 컴퓨터 시스템 메모리들 또는 레지스터들 또는 다른 그러한 정보 저장, 송신 또는 디스플레이 디바이스들 내에서 물리 양들로서 유사하게 표현된 다른 데이터로 조작 및 변환하는 컴퓨터 시스템, 또는 유사한 전자 컴퓨팅 디바이스의 액션들 및 프로세스들을 지칭한다는 것이 인식된다.
[00155] 본 개시내용은 또한 본원의 동작들을 수행하기 위한 장치에 관한 것이다. 이 장치는 요구되는 목적들을 위해 특수하게 구성될 수 있거나, 또는 이는 컴퓨터에 저장된 컴퓨터 프로그램에 의해 선택적으로 활성화되거나 또는 재구성되는 범용 컴퓨터를 포함할 수 있다. 이러한 컴퓨터 프로그램은, 플로피 디스크들, 광학 디스크들, CD-ROM들, 및 자기-광학 디스크들, ROM(read-only memory)들, RAM(random access memory)들, EPROM들, EEPROM들, 자기 또는 광학 카드들, 또는 전자 명령들을 저장하기에 적합한 임의의 타입의 매체를 포함하는 임의의 타입의 디스크와 같은(그러나, 이들에 제한되지 않음), 컴퓨터 판독가능 저장 매체에 저장될 수 있다.
[00156] “예시적” 또는 “예시적인”이라는 단어들은 예, 예시, 또는 예증으로서 기능하는 것을 의미하도록 본원에서 사용된다. “예시적” 또는 “예시적인” 것으로서 본원에 설명된 임의의 양상 또는 설계는 다른 양상들 또는 설계들에 비해 반드시 바람직하거나 유리한 것으로서 해석될 필요는 없다. 오히려, “예시적” 또는 “예시적인”이라는 단어들의 사용은 견고한 방식으로 개념들을 제시하도록 의도된다. 본 출원서에 사용된 것과 같이, “또는”이라는 용어는 배타적인 “또는”이 아닌 포괄적인 “또는”을 의미하도록 의도된다. 즉, 달리 특정되거나 또는 문맥상 명확하지 않으면, “X는 A 또는 B를 포함한다”는 본래의 포괄적인 치환들 중 임의의 치환을 의미하도록 의도된다. 즉, X가 A를 포함하거나, X가 B를 포함하거나; 또는 X가 A 및 B 둘 모두를 포함하면, “X는 A 또는 B를 포함한다”는 위의 예시들 중 임의의 예시 하에서 충족된다. 이에 더해, 본 출원 및 첨부된 청구항들에서 사용된 바와 같은 단수 표현들은 달리 명시되지 않거나 단수 형태로 지시되는 것으로 문맥상 명확하지 않으면, “하나 또는 그 초과”를 의미하도록 일반적으로 해석되어야 한다. 더욱이, 명세서 전반에 걸친 “실시예” 또는 “일 실시예” 또는 “구현” 또는 “일 구현”이라는 용어의 사용은, 이와 같이 설명되지 않는 한 동일한 실시예 또는 구현을 의미하는 것으로 의도되지 않는다.
[00157] "일 실시예" 또는 "실시예"에 대한 명세서 전반에 걸친 참조는, 그 실시예들과 관련하여 설명된 특정한 피쳐, 구조, 또는 특성이 적어도 하나의 실시예에 포함된다는 것을 의미한다. 따라서, 본 설명 전반의 다양한 곳들에서의 문구 “일 실시예에서" 또는 "실시예에서"의 출현들 모두는 반드시 동일한 실시예를 지칭하는 것은 아니다. 이에 더해, 용어 “또는”은 배타적인 “또는”보다는 포괄적인 “또는” 을 의미하도록 의도된다.
[00158] 전술한 설명이 제한적인 것이 아닌 예시적인 것으로 의도된다는 것을 이해해야 한다. 위의 설명을 판독하고 이해하면, 많은 다른 예들이 당업자들에게 명백할 것이다. 이에 따라, 본 개시내용의 범위는, 첨부된 청구항들을 참조하여, 이러한 청구항들이 부여되는 등가물들의 전체 범위에 따라 결정되어야 한다.

Claims (21)

  1. 하이퍼바이저(hypervisor)에 의해 지원되는 복수의 오퍼레이팅 시스템들을 구동하는 컴퓨터 프로세서로서,
    복수의 하드웨어 스레드들;
    복수의 하드웨어 스레드들 중 제1 하드웨어 스레드의 상태를 저장하기 위한 상태 프로세서 로직 ― 상기 상태 프로세서 로직은,
    상기 복수의 하드웨어 스레드들에 복제된 상태를 저장하기 위한, 상기 제1 하드웨어 스레드에 지정된 스레드-별 레지스터들(per thread registers); 및
    상기 복수의 하드웨어 스레드들의 수에 독립적인 정보를 저장하기 위한 공통 레지스터들을 포함하며,
    상기 스레드-별 레지스터들은 유저(user) 특권과 관련된 제1 그룹의 레지스터들, 슈퍼 유저(super-user) 특권과 관련된 제2 그룹의 레지스터들, 및 하이퍼바이저 특권과 관련된 제3 그룹의 레지스터들을 포함하고, 상기 공통 레지스터들은 상기 슈퍼 유저 특권과 관련된 제4 그룹의 레지스터들 및 상기 하이퍼바이저 특권과 관련된 제5 그룹의 레지스터들을 포함함 ―;
    상기 복수의 하드웨어 스레드들 중 상기 제1 하드웨어 스레드로부터의 명령들을 단일 스레디드 모드에서 실행하기 위한 단일 스레디드 모드 로직;
    상기 복수의 하드웨어 스레드들 중 하나보다 많은 하드웨어 스레드들로부터의 명령들을 제2 모드에서 동시에 실행하기 위한 제2 모드 로직;
    상기 단일 스레디드 모드와 상기 제2 모드 사이에서 전환하기 위한 전환 모드 로직; 및
    상기 하나보다 많은 하드웨어 스레드들에 의해 공유되는 장치로 향하는 상기 제2 모드에서 생성된 인터럽트(interrupt)를 수신하고 인터럽트 처리기가 상기 생성된 인터럽트를 가상현실화할 필요가 있다고 결정하는 것에 대한 응답으로, 상기 슈퍼 유저 특권에서 구동하고 있는 상기 제1 하드웨어 스레드를 하이퍼바이저 특권으로 전환하는 특권 회로
    를 포함하는,
    컴퓨터 프로세서
  2. 제1 항에 있어서,
    상기 상태 프로세서 로직은, 상기 단일 스레디드 모드에서 상기 복수의 하드웨어 스레드들 모두에 공통된 상태를 액세스가능하도록 허용하고,
    상기 복수의 오퍼레이팅 시스템들 각각은 상기 유저 특권 및 상기 슈퍼 유저 특권을 지원하는,
    컴퓨터 프로세서.
  3. 제1 항에 있어서,
    상기 전환 모드 로직은 인터럽트를 취함으로써 상기 단일 스레디드 모드와 상기 제2 모드 사이에서 전환하는,
    컴퓨터 프로세서.
  4. 제3 항에 있어서,
    상기 인터럽트를 취하는 것은, 상기 전환 모드 로직으로 하여금:
    상기 하나보다 많은 하드웨어 스레드들 각각과 관련된 대응하는 프로세스 상태 레지스터에 현재 리턴 어드레스를 저장하게 하고;
    상기 복수의 하드웨어 스레드들 중 하나의 액티브 하드웨어 스레드를 제외한 모든 하드웨어 스레드들을 중단하게 하고; 그리고
    상기 액티브 하드웨어 스레드가 인터럽트 처리기 어드레스로부터 실행을 시작하게 하는,
    컴퓨터 프로세서.
  5. 제1 항에 있어서,
    상기 단일 스레디드 모드가 상기 제2 모드로 전환될 때, 상기 복수의 하드웨어 스레드들 중 실행하기 위한 명령들을 갖는 하드웨어 스레드들 각각이 대응하는 저장된 리턴 어드레스에서 저장된 프로세서 상태로 실행을 재개하도록 하는 프로세싱 로직을 더 포함하는,
    컴퓨터 프로세서.
  6. 제5 항에 있어서,
    상기 프로세싱 로직은, 상기 제2 모드의 재개를 야기하도록 설계된 명령을 실행시킴으로써 활성화되는,
    컴퓨터 프로세서.
  7. 제1 항에 있어서,
    상기 상태 프로세서 로직이 상기 단일 스레디드 모드에서 구동되는 동안 인액티브 하드웨어 스레드들의 상태를 검사하여 수정하기 위한 프로세싱 로직을 더 포함하는,
    컴퓨터 프로세서.
  8. 제 1 항에 있어서,
    상기 특권 회로는:
    상기 제1 하드웨어 스레드와 관련된 공통 레지스터들을 적어도 2개의 그룹들로 분할하고;
    상기 제1 하드웨어 스레드에 대한 특권 레벨을 결정하고 ― 상기 그룹들 중 적어도 하나의 그룹은 상기 유저 특권 또는 상기 슈퍼 유저 특권의 제1 특권 레벨에서 액세스불가함 ―; 그리고
    상기 제1 특권 레벨과 상기 하이퍼바이저의 제2 특권 레벨 사이에서 전환하는,
    컴퓨터 프로세서.
  9. 삭제
  10. 제8 항에 있어서,
    더 많이 제한적인 특권 레벨로부터 더 적게 제한적인 특권 레벨로의 전환은, 동시에 상기 특권 레벨을 변경하고 상기 컴퓨터 프로세서의 실행 포인트를 미리결정된 로케이션으로 변경하는 인터럽트를 사용하여 실행되는,
    컴퓨터 프로세서.
  11. 제8 항에 있어서,
    더 많이 제한적인 특권 레벨로부터 더 적게 제한적인 특권 레벨로의 전환은, 동시에 상기 특권 레벨을 변경하고 상기 컴퓨터 프로세서의 실행 포인트를 미리결정된 로케이션으로 변경하는 명령을 실행하기 위해 프로세싱 로직에 의해 발생하는,
    컴퓨터 프로세서.
  12. 오퍼레이팅 시스템 지원을 갖는 컴퓨터 프로세서에 의한 방법으로서,
    복수의 오퍼레이팅 시스템들을 지원하기 위해 하이퍼바이저를 실행하는 단계;
    상기 컴퓨터 프로세서와 관련된 상태 프로세서 로직에서, 복수의 하드웨어 스레드들 중 제1 하드웨어 스레드의 상태를 저장하는 단계 ― 상기 상태 프로세서 로직은,
    상기 복수의 하드웨어 스레드들에 복제된 상태를 저장하기 위한, 상기 제1 하드웨어 스레드에 지정된 스레드-별 레지스터들; 및
    상기 복수의 하드웨어 스레드들의 수에 독립적인 정보를 저장하기 위한 공통 레지스터들을 포함하며,
    상기 스레드-별 레지스터들은 유저 특권과 관련된 제1 그룹의 레지스터들, 슈퍼 유저 특권과 관련된 제2 그룹의 레지스터들, 및 하이퍼바이저 특권과 관련된 제3 그룹의 레지스터들을 포함하고, 상기 공통 레지스터들은 상기 슈퍼 유저 특권과 관련된 제4 그룹의 레지스터들 및 상기 하이퍼바이저 특권과 관련된 제5 그룹의 레지스터들을 포함함 ―;
    단일 스레디드 모드 로직에 의해, 상기 복수의 하드웨어 스레드들 중 상기 제1 하드웨어 스레드로부터의 명령들을 단일 스레디드 모드에서 실행하는 단계;
    제2 모드 로직에 의해, 상기 복수의 하드웨어 스레드들 중 하나보다 많은 하드웨어 스레드들로부터의 명령들을 제2 모드에서 동시에 실행하는 단계;
    전환 모드 로직에 의해, 상기 단일 스레디드 모드와 상기 제2 모드 사이에서 전환하는 단계; 및
    특권 회로에 의해, 상기 하나보다 많은 하드웨어 스레드들에 의해 공유되는 장치로 향하는 상기 제2 모드에서 생성된 인터럽트를 수신하고 인터럽트 처리기가 상기 생성된 인터럽트를 가상현실화할 필요가 있다고 결정하는 것에 대한 응답으로, 상기 슈퍼 유저 특권에서 구동하고 있는 상기 하드웨어 스레드를 하이퍼바이저 특권으로 전환하는 단계
    를 포함하는,
    오퍼레이팅 시스템 지원을 갖는 컴퓨터 프로세서에 의한 방법.
  13. 제12 항에 있어서,
    상기 상태 프로세서 로직에 의해, 상기 단일 스레디드 모드 로직이 상기 단일 스레디드 모드에서 명령들을 실행하고 있을 때 상기 복수의 하드웨어 스레드들 모두에 공통된 상태를 액세스 가능하도록 허용하는 단계를 더 포함하고,
    상기 복수의 오퍼레이팅 시스템들 각각은 상기 유저 특권 및 상기 슈퍼 유저 특권을 지원하는,
    오퍼레이팅 시스템 지원을 갖는 컴퓨터 프로세서에 의한 방법.
  14. 제12 항에 있어서,
    상기 전환 모드 로직에 의해, 인터럽트를 취함으로써 상기 단일 스레디드 모드와 상기 제2 모드 사이에서 전환하는 단계를 더 포함하는,
    오퍼레이팅 시스템 지원을 갖는 컴퓨터 프로세서에 의한 방법.
  15. 제14 항에 있어서,
    상기 인터럽트를 취하는 것은, 상기 전환 모드 로직으로 하여금:
    상기 하나보다 많은 하드웨어 스레드들 각각과 관련된 대응하는 프로세서 상태 레지스터에서 현재 리턴 어드레스를 저장하게 하고
    상기 복수의 하드웨어 스레드들 중 하나의 액티브 하드웨어 스레드를 제외한 모든 하드웨어 스레드들을 중단하게 하고; 그리고
    상기 액티브 하드웨어 스레드가 인터럽트 처리기 어드레스로부터 실행을 시작하게 하는,
    오퍼레이팅 시스템 지원을 갖는 컴퓨터 프로세서에 의한 방법.
  16. 제12 항에 있어서,
    프로세싱 로직에 의해, 상기 단일 스레디드 모드가 상기 제2 모드로 전환될 때, 실행하기 위한 명령들을 갖는 상기 복수의 하드웨어 스레드들 각각이 대응하는 저장된 리턴 어드레스에서 저장된 프로세서 상태로 실행을 재개하도록 하는 명령을 프로세싱하는 단계를 더 포함하는,
    오퍼레이팅 시스템 지원을 갖는 컴퓨터 프로세서에 의한 방법.
  17. 제12 항에 있어서,
    프로세싱 로직에 의해, 상기 상태 프로세서 로직이 상기 단일 스레디드 모드에서 구동하는 동안 인액티브 하드웨어 스레드들의 상태를 검사하여 수정하는 단계를 더 포함하는,
    오퍼레이팅 시스템 지원을 갖는 컴퓨터 프로세서에 의한 방법.
  18. 제 12 항에 있어서,
    상기 특권 회로에 의해, 상기 제1 하드웨어 스레드와 관련된 상기 공통 레지스터들을 적어도 2개의 그룹들로 분할하는 단계;
    상기 제1 하드웨어 스레드에 대한 특권 레벨을 결정하는 단계 ― 상기 그룹들 중 적어도 하나의 그룹은 상기 유저 특권 또는 상기 슈퍼 유저 특권의 제1 특권 레벨에서 액세스불가함 ―; 및
    상기 제1 특권 레벨과 상기 하이퍼바이저 특권의 제2 특권 레벨 사이에서 전환하는 단계를 더 포함하는,
    오퍼레이팅 시스템 지원을 갖는 컴퓨터 프로세서에 의한 방법.
  19. 삭제
  20. 제18 항에 있어서,
    동시에 상기 특권 레벨을 변경하고 상기 컴퓨터 프로세서의 실행 포인트를 미리결정된 로케이션으로 변경하는 인터럽트를 사용하여, 더 많이 제한적인 특권 레벨로부터 더 적게 제한적인 특권 레벨로 전환하는 단계를 더 포함하는,
    오퍼레이팅 시스템 지원을 갖는 컴퓨터 프로세서에 의한 방법.
  21. 제18 항에 있어서,
    동시에 상기 특권 레벨을 변경하고 상기 컴퓨터 프로세서의 실행 포인트를 미리결정된 로케이션으로 변경하는 명령을 프로세싱 로직에 의해 실행하여, 더 많이 제한적인 특권 레벨로부터 더 적게 제한적인 특권 레벨로 전환하는 단계를 더 포함하는,
    오퍼레이팅 시스템 지원을 갖는 컴퓨터 프로세서에 의한 방법.
KR1020177037787A 2015-06-09 2016-05-17 진보된 오퍼레이팅 시스템 지원을 갖는 프로세서 KR102599484B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201562172860P 2015-06-09 2015-06-09
US62/172,860 2015-06-09
US15/155,570 US10908909B2 (en) 2015-06-09 2016-05-16 Processor with mode support
US15/155,570 2016-05-16
PCT/US2016/032853 WO2016200567A1 (en) 2015-06-09 2016-05-17 Processor with advanced operating system support

Publications (2)

Publication Number Publication Date
KR20180033467A KR20180033467A (ko) 2018-04-03
KR102599484B1 true KR102599484B1 (ko) 2023-11-06

Family

ID=57504341

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177037787A KR102599484B1 (ko) 2015-06-09 2016-05-17 진보된 오퍼레이팅 시스템 지원을 갖는 프로세서

Country Status (5)

Country Link
US (1) US10908909B2 (ko)
EP (1) EP3308270A4 (ko)
KR (1) KR102599484B1 (ko)
CN (1) CN107851036B (ko)
WO (1) WO2016200567A1 (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11120106B2 (en) * 2016-07-30 2021-09-14 Endgame, Inc. Hardware—assisted system and method for detecting and analyzing system calls made to an operating system kernel
US11151251B2 (en) 2017-07-13 2021-10-19 Endgame, Inc. System and method for validating in-memory integrity of executable files to identify malicious activity
US11151247B2 (en) 2017-07-13 2021-10-19 Endgame, Inc. System and method for detecting malware injected into memory of a computing device
US10664181B2 (en) 2017-11-14 2020-05-26 International Business Machines Corporation Protecting in-memory configuration state registers
US10642757B2 (en) 2017-11-14 2020-05-05 International Business Machines Corporation Single call to perform pin and unpin operations
US10761983B2 (en) 2017-11-14 2020-09-01 International Business Machines Corporation Memory based configuration state registers
US10901738B2 (en) 2017-11-14 2021-01-26 International Business Machines Corporation Bulk store and load operations of configuration state registers
US10592164B2 (en) 2017-11-14 2020-03-17 International Business Machines Corporation Portions of configuration state registers in-memory
US10496437B2 (en) 2017-11-14 2019-12-03 International Business Machines Corporation Context switch by changing memory pointers
US10552070B2 (en) 2017-11-14 2020-02-04 International Business Machines Corporation Separation of memory-based configuration state registers based on groups
US10698686B2 (en) 2017-11-14 2020-06-30 International Business Machines Corporation Configurable architectural placement control
US10635602B2 (en) 2017-11-14 2020-04-28 International Business Machines Corporation Address translation prior to receiving a storage reference using the address to be translated
US10761751B2 (en) 2017-11-14 2020-09-01 International Business Machines Corporation Configuration state registers grouped based on functional affinity
US10558366B2 (en) 2017-11-14 2020-02-11 International Business Machines Corporation Automatic pinning of units of memory
US11119972B2 (en) * 2018-05-07 2021-09-14 Micron Technology, Inc. Multi-threaded, self-scheduling processor
US11119782B2 (en) * 2018-05-07 2021-09-14 Micron Technology, Inc. Thread commencement using a work descriptor packet in a self-scheduling processor
US11126587B2 (en) * 2018-05-07 2021-09-21 Micron Technology, Inc. Event messaging in a system having a self-scheduling processor and a hybrid threading fabric
US10552323B1 (en) 2018-09-10 2020-02-04 Apple Inc. Cache flush method and apparatus
US11106463B2 (en) * 2019-05-24 2021-08-31 Texas Instruments Incorporated System and method for addressing data in memory
US11886605B2 (en) * 2019-09-30 2024-01-30 Red Hat, Inc. Differentiated file permissions for container users
US11580037B2 (en) * 2020-06-19 2023-02-14 Microsoft Technology Licensing, Llc Privilege level assignments to groups

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030033509A1 (en) 2001-08-07 2003-02-13 Sun Microsystems, Inc. Architectural reuse of registers for out of order simultaneous multi-threading
US20040215939A1 (en) 2003-04-24 2004-10-28 International Business Machines Corporation Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes
US20060195683A1 (en) 2003-08-28 2006-08-31 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US20080034190A1 (en) 2001-12-31 2008-02-07 Dion Rodgers Method and apparatus for suspending execution of a thread until a specified memory access occurs
US20150301953A1 (en) 2014-04-17 2015-10-22 International Business Machines Corporation Managing translation of a same address across multiple contexts using a same entry in a translation lookaside buffer

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5684948A (en) * 1995-09-01 1997-11-04 National Semiconductor Corporation Memory management circuit which provides simulated privilege levels
US6567839B1 (en) 1997-10-23 2003-05-20 International Business Machines Corporation Thread switch control in a multithreaded processor system
GB0516474D0 (en) 2005-08-10 2005-09-14 Symbian Software Ltd Pre-emptible context switching in a computing device
US7493436B2 (en) * 2006-10-26 2009-02-17 International Business Machines Corporation Interrupt handling using simultaneous multi-threading
US9069598B2 (en) * 2012-01-06 2015-06-30 International Business Machines Corporation Providing logical partions with hardware-thread specific information reflective of exclusive use of a processor core
US9672164B2 (en) * 2012-05-31 2017-06-06 Nxp Usa, Inc. Methods and systems for transitioning between a user state and a supervisor state based on a next instruction fetch address
US8850577B2 (en) 2012-07-24 2014-09-30 Adobe Systems Incorporated Method and apparatus for preventing an IDT-based security sandbox from causing a kernel panic when using a call gate
US9507597B2 (en) 2013-06-10 2016-11-29 Via Alliance Semiconductor Co., Ltd. Selective accumulation and use of predicting unit history

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030033509A1 (en) 2001-08-07 2003-02-13 Sun Microsystems, Inc. Architectural reuse of registers for out of order simultaneous multi-threading
US20080034190A1 (en) 2001-12-31 2008-02-07 Dion Rodgers Method and apparatus for suspending execution of a thread until a specified memory access occurs
US20040215939A1 (en) 2003-04-24 2004-10-28 International Business Machines Corporation Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes
US20090144737A1 (en) 2003-04-24 2009-06-04 International Business Machines Corporation Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes
US20060195683A1 (en) 2003-08-28 2006-08-31 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US20150301953A1 (en) 2014-04-17 2015-10-22 International Business Machines Corporation Managing translation of a same address across multiple contexts using a same entry in a translation lookaside buffer

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Freescale Semiconductor, EREF: A Programmer’s Reference Manual for Freescale Power Architecture Processors. 2014년

Also Published As

Publication number Publication date
CN107851036A (zh) 2018-03-27
EP3308270A1 (en) 2018-04-18
US20160364236A1 (en) 2016-12-15
EP3308270A4 (en) 2019-07-03
WO2016200567A1 (en) 2016-12-15
CN107851036B (zh) 2021-11-30
KR20180033467A (ko) 2018-04-03
US10908909B2 (en) 2021-02-02

Similar Documents

Publication Publication Date Title
KR102599484B1 (ko) 진보된 오퍼레이팅 시스템 지원을 갖는 프로세서
Hedayati et al. Hodor:{Intra-Process} isolation for {High-Throughput} data plane libraries
US10613858B2 (en) Method and system to provide user-level multithreading
KR100667146B1 (ko) 가상 머신 아키텍처 내에서의 제어 레지스터 액세스가상화 성능 개선
US9129106B2 (en) Systems and methods for secure in-VM monitoring
US7171539B2 (en) Apparatus and method for controlling access to a memory
RU2265880C2 (ru) Новый режим процессора для ограничения функционирования гостевого программного обеспечения, выполняющегося на виртуальной машине, поддерживаемой монитором виртуальной машины
US7539853B2 (en) Handling interrupts in data processing of data in which only a portion of a function has been processed
US6895491B2 (en) Memory addressing for a virtual machine implementation on a computer processor supporting virtual hash-page-table searching
US11720356B2 (en) Range checking instruction for setting a status value indicative of whether a first address and second address identified by the instruction correspond to the same memory attribute entry
US7543126B2 (en) Apparatus, system, and method for implementing protected virtual memory subcontexts
GB2395583A (en) Diagnostic data capture control for multi-domain processors
GB2396713A (en) Controlling access to a memory unit
GB2411254A (en) Monitoring control for multi-domain processors
EP1563380A2 (en) Virtual to physical memory address mapping within a system having a secure domain and a non-secure domain
GB2396451A (en) Delivering data processing requests to a suspended operating system
IL167597A (en) Virtual to physical memory address mapping within a system having a secure domain and a non-secure domain
KR20220045211A (ko) 캐패빌리티 기입 어드레스 추적
IL168336A (en) Control of access to a memory by a device
US8091090B2 (en) Method for providing scratch registers for use by a virtual-machine monitor
JP2023547065A (ja) ケイパビリティを使用してメモリへのアクセスを制約するための技法
GB2395313A (en) Thread switching between multiple operating systems running on the same processor
CN111737656A (zh) 面向应用程序的特权硬件资源访问方法及电子设备
IL167188A (en) Exception types within a secure processing system
TW202340955A (zh) 使用能力約束記憶體存取之技術

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