KR20210035911A - 객체 특정 가상 어드레스 공간으로부터 물리적 어드레스 공간으로의 메모리 어드레스 변환을 위한 보안 구성 - Google Patents

객체 특정 가상 어드레스 공간으로부터 물리적 어드레스 공간으로의 메모리 어드레스 변환을 위한 보안 구성 Download PDF

Info

Publication number
KR20210035911A
KR20210035911A KR1020217008284A KR20217008284A KR20210035911A KR 20210035911 A KR20210035911 A KR 20210035911A KR 1020217008284 A KR1020217008284 A KR 1020217008284A KR 20217008284 A KR20217008284 A KR 20217008284A KR 20210035911 A KR20210035911 A KR 20210035911A
Authority
KR
South Korea
Prior art keywords
memory
domain
processor
address
virtual address
Prior art date
Application number
KR1020217008284A
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 KR20210035911A publication Critical patent/KR20210035911A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • G06F12/1018Address translation using page tables, e.g. page table structures involving hashing techniques, e.g. inverted page tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • 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/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/145Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being virtual, e.g. for virtual blocks or segments before a translation mechanism
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • 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
    • 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/45587Isolation or security of virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Power Engineering (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

가상 어드레스를 사용하여 이루어진 메모리 액세스 보안과 관련된 시스템, 장치 및 방법이 설명된다. 예를 들어, 컴퓨터 프로세서에 결합된 메모리는 미리 정의된 비 하이어러키 도메인의 루틴 명령을 저장할 수 있다. 컴퓨터 프로세서는 다른 도메인에 대해 별도의 테이블을 저장할 수 있다. 가상 어드레스는 객체 식별자와 객체 식별자에 의해 표현된 객체 내 위치의 오프셋으로 구성된다. 적어도 가상 어드레스의 객체 식별자는 프로세서가 명령을 실행하는 현재 도메인의 테이블에 인덱스를 생성하기 위해 해시된다. 인덱스를 사용하여 테이블로부터 검색된 엔트리는 객체 식별자에 의해 표현된 객체에 대한 보안 구성을 제공한다. 프로세서는 가상 어드레스를 사용하는 명령 실행에 대한 응답으로 보안 구성에 따라 메모리 액세스를 보호한다.

Description

객체 특정 가상 어드레스 공간으로부터 물리적 어드레스 공간으로의 메모리 어드레스 변환을 위한 보안 구성
관련 출원들
본 출원은 "객체 특정 가상 어드레스 공간으로부터 물리적 어드레스 공간으로의 메모리 어드레스 변환을 위한 보안 구성"이라는 제목으로, 2019 년 7 월 23 일에 출원된, 미국 특허 출원 일련 번호 16/520,311, "객체 특정 가상 어드레스 공간으로부터 물리적 어드레스 공간으로의 메모리 어드레스 변환을 위한 보안 구성"이라는 제목으로, 2018 년 9 월 21 일에 출원된, 미국 가특허 출원 일련 번호 62/734,896, "객체 특정 가상 어드레스 공간으로부터 물리적 어드레스 공간으로의 메모리 어드레스 변환"이라는 제목으로, 2018 년 8 월 30 일에 출원된, 미국 가특허 출원 일련 번호 62/725,092, "실행 도메인에 대한 페이지 테이블 엔트리에 지정된 허가를 통한 메모리 액세스 제어"라는 제목으로, 2018 년 8 월 30일에 출원된, 미국 가특허 출원 일련 번호 62/724,896, "실행 도메인에 대한 페이지 테이블 엔트리의 보안 구성"이라는 제목으로, 2018 년 8 월 30일에 출원된, 미국 가특허 출원 일련 번호 62/724,913, "실행 도메인에 기반한 프로세서 레지스터에 대한 액세스 제어"라는 제목으로, 2018 년 8 월 30일에 출원된, 미국 가특허 출원 일련 번호 62/724,929, "컴퓨터 프로세서에서 실행되는 명령에 대한 도메인 레지스터"라는 제목으로, 2018 년 8 월 30일에 출원된, 미국 가특허 출원 일련 번호 62/724,999, "컴퓨터 프로세서에서 명령을 실행하는 도메인 교차"라는 제목으로, 2018 년 8 월 30일에 출원된, 미국 가특허 출원 일련 번호 62/725,030의 출원일에 대한 이익을 주장하고, 이들 출원의 전체 개시는 본 출원에 참조로 통합된다.
기술분야
본 출원에 개시된 적어도 일부 실시예는 전반적으로 컴퓨터 아키텍처 및 보다 상세하게는, 객체 특정 가상 메모리 어드레스로부터 물리적 메모리 어드레스로의 메모리 어드레스 변환에 관한 것이지만 이에 한정되지는 않는다.
컴퓨터용으로 프로그래밍된 명령은 계층으로 구조화될 수 있다. 하나의 계층은 다른 계층에 자원과 서비스를 제공할 수 있다. 예를 들어, 하이퍼바이저(hypervisor)는 컴퓨터의 하드웨어 컴포넌트에 구현되는 가상 머신을 생성하거나 프로비저닝(provision)할 수 있다. 운영 체제(operating system)는 자원 및 미리 정의된 아키텍처를 가진 컴퓨터에서 사용할 수 있는 자원을 사용하여 서비스를 제공할 수 있다. 운영 체제에서 작동하는 컴퓨터 자원 또는 컴퓨터는 실제 컴퓨터 하드웨어 컴포넌트거나 하이퍼바이저가 제공하는 가상 컴퓨터 컴포넌트일 수 있다. 애플리케이션은 운영 체제에서 제공하는 서비스 및 자원을 사용하여 애플리케이션 특정 기능을 제공할 수 있다.
실시예는 유사한 도면 번호가 유사한 엘리먼트를 나타내는 첨부 도면들의 도면에서 제한이 아니라 예로서 예시된다.
도 1은 일부 실시예에 따른 컴퓨터 프로세서의 동작을 제어하도록 구성된 레지스터 세트를 갖는 컴퓨터 프로세서를 도시한다.
도 2는 일부 실시예에서 동작 하이퍼바이저(operating hypervisor)가 없는 어드레스 변환 테이블의 테이블 베이스(table base)의 식별을 예시한다.
도 3은 일부 실시예에서 동작 하이퍼바이저의 존재하에 어드레스 변환 테이블의 테이블 베이스의 식별을 예시한다.
도 4는 개별 도메인에 대한 별개의 어드레스 변환 테이블을 예시한다.
도 5는 가상 어드레스를 변환하기 위해 어드레스 변환 테이블로부터 엔트리를 검색하는 기술을 도시한다.
도 6은 도메인 레지스터에 따라 자원에 적용되는 보안 동작을 제어하는 시스템을 도시한다.
도 7은 실행 도메인에 대한 보안 구성을 갖는 페이지 테이블 엔트리를 예시한다.
도 8은 보안 동작을 제어하는 도메인 레지스터를 갖는 컴퓨터 시스템을 도시한다.
도 9는 객체 특정 가상 메모리 어드레스를 변환하는 방법을 도시한다.
도 10은 가상 어드레스에 의해 식별된 메모리 위치에 액세스하기 위한 보안 구성을 식별하는 시스템을 도시한다.
도 11은 가상 어드레스를 사용하여 이루어진 메모리 액세스를 위한 보안 파라미터를 예시한다.
도 12는 가상 어드레스를 사용하여 이루어진 메모리 액세스 요청에 응답하여 보안 동작을 수행하는 방법을 도시한다.
본 개시는 객체 특정 가상 어드레스를 물리적 어드레스로 변환하도록 구성된 컴퓨터 프로세서 및/또는 메모리 관리 유닛 (MMU : emory management unit)을 포함한다. 예를 들어, 명령 실행의 상이한 도메인 (예를 들어, 하이퍼바이저, 운영 체제, 애플리케이션), 상이한 가상 머신, 동일한 프로그램의 다른 운영/실행 프로세스 및/또는 다른 객체에 대해 다른 가상 메모리 공간이 생성될 수 있다. 컴퓨터 프로세서는 현재 가상 머신을 식별하기 위한 가상 머신 레지스터(virtual machine register) 및/또는 현재 실행 도메인을 식별하기 위한 도메인 레지스터(domain register)를 가질 수 있다. 메모리 관리 유닛 (MMU)은 페이지 테이블 또는 페이지 디렉토리 위치를 찾기 위해 가상 메모리 공간의 식별과 관련된 정보를 조합할 수 있다 (예를 들어, 해싱(hashing), 인덱싱(indexing) 및/또는 멀티플렉싱(multiplexing)을 통해). 이러한 정보의 예는 가상 머신 식별자, 도메인 식별자, 프로세서 식별자, 가상 메모리 어드레스에 제공된 객체 식별자, 객체 식별자에 의해 표현된 객체 내의 오프셋 부분 등을 포함한다. 페이지 테이블 또는 페이지 디렉토리는 가상 메모리 어드레스를 물리적 메모리 어드레스로 변환하는데 사용될 수 있다. 예를 들어, 가상 메모리 어드레스의 일부는 일련의 페이지 테이블 또는 페이지 디렉토리에서 인덱스로 직접 사용될 수 있고, 여기서 시리즈의 다음 페이지 테이블 또는 페이지 디렉토리는 인덱스를 사용하여 현재 테이블 또는 페이지 디렉토리로부터 검색된 엔트리에 의해 식별된다. 대안으로 또는 조합하여, 가상 메모리 어드레스의 적어도 일부를 해시하여 테이블에서 엔트리를 검색하기 위한 인덱스를 생성할 수 있고, 여기서 엔트리는 다음 페이지 테이블 또는 페이지 디렉토리를 식별하거나 물리적 어드레스의 세트의 베이스를 제공하거나 또는 물리적 어드레스를 직접 제공한다.
전통적인 시스템에서, 다른 계층의 명령 (예를 들어, 사용자 애플리케이션 대 운영 체제)에는 상이한 레벨의 권한(privilege) 및/또는 신뢰가 주어질 수 있다. 일반적으로, 보호 링은 링 하이어러키(hierarchy of ring)를 기반으로 오류 및 악의적인 행동으로부터 데이터와 기능을 보호하기 위해 컴퓨터에 구성 및 구현되었다. 링은 가장 많은 권한이 있는(most privileged) (따라서, 가장 신뢰할 수 있는) 내지 최소 권한이 있는 (따라서, 가장 덜 신뢰할 수 있는) 하이어러키에서 정적으로 배열된다. 예를 들어, 하이어러키에는 권한이 가장 많은 운영 체제 커널링, 디바이스 드라이버 링 및 최소 권한이 있는 애플리케이션 링이 포함될 수 있다. 하위 권한 링의 프로그램 또는 루틴은 하이어러키에서 상위 권한 링의 자원 및 서비스에 액세스하기 위해 개별 특수 하드웨어 강제 제어 게이트에 의해 제한될 수 있다. 링 사이의 게이트 액세스는 보안을 향상시킬 수 있다.
본 개시의 기술에서, 컴퓨터 시스템을 위해 프로그래밍된 명령 또는 루틴은 하이퍼바이저의 도메인, 운영 체제의 도메인, 애플리케이션의 도메인과 같은 미리 정의된 비 하이어러키 도메인의 세트로 분류될 수 있다. 다른 도메인에서 사용되는 어드레스는 다른 어드레스 변환 테이블을 사용하여 변환될 수 있으므로 다른 도메인의 가상 어드레스 공간이 서로 격리(isolate)될 수 있다. 하이퍼바이저가 존재하는 경우 (예를 들어, 컴퓨터 시스템에서 가장 낮은 레벨의 머신 아키텍처를 운영하고 제어하는 경우) 하이퍼바이저가 관리하는 다른 가상 머신에서 사용되는 어드레스도 다른 어드레스 테이블을 사용하여 변환될 수 있다; 따라서, 상이한 가상 머신의 가상 어드레스 공간도 서로 격리될 수 있다. 또한, 실행중인 다른 프로세스의 가상 어드레스 공간도 옵션으로 서로 격리될 수 있다. 예를 들어, 가상 머신 레지스터는 프로세서가 명령을 실행하고 있는 현재 가상 머신의 식별자를 저장하도록 구성될 수 있다; 프로세서의 메모리 관리 유닛의 어드레스 변환 기능은 특정 가상 머신의 특정 도메인에서 루틴 실행을 위한 어드레스 변환을 수행하기 위해 가상 머신 레지스터에 저장된 식별자, 도메인 레지스터에 저장된 식별자 및/또는 하이퍼바이저 상태 레지스터에 저장된 상태 표시에 따라 구성될 수 있다.
도 1은 일부 실시예에 따른 컴퓨터 프로세서 (169)의 동작을 제어하도록 구성된 레지스터 (183) 세트를 갖는 컴퓨터 프로세서 (169)를 도시한다. 레지스터 세트 (183)는 적어도 도메인 레지스터 (117), 가상 머신 레지스터 (231) 및/또는 하이퍼바이저 상태 레지스터 (223)를 포함할 수 있다.
도메인 레지스터 (117)는 프로세서 (169)에서 실행되고 있는 명령의 현재 도메인의 식별자 또는 표시를 저장하도록 구성된다.
예를 들어, 도 1의 컴퓨터 프로세서 (169)는 물리적 메모리 (109)에 결합될 수 있다. 물리적 메모리 (109)는 컴퓨터 시스템을 위해 프로그래밍된 다양한 루틴에 대한 데이터 및 명령을 저장할 수 있다. 루틴은 하이퍼바이저 (102)의 도메인 (101), 운영 체제 (104)의 도메인 (103), 애플리케이션(106)의 도메인(105) 등과 같이 미리 정의된 다양한 비 하이어러키 도메인 (101, 103, …, 105)으로 분류될 수 있다.
예를 들어, 하이퍼바이저 (102)의 루틴은 도메인 A (101)로 분류될 수 있다; 운영 체제 (104)의 루틴은 다른 도메인 B (103)로 분류될 수 있다; 및 애플리케이션 (106)의 루틴은 추가 도메인 C (105)로 분류될 수 있다. 하이퍼바이저 또는 VMM (가상 머신 모니터)은 가상 머신을 생성하고 관리한다. 하이퍼바이저는 물리적 메모리 및 입력/출력 (I/O)과 같은 기본 기능을 제어할 수 있다.
컴퓨터 프로세서 (169)는 동작 하이퍼바이저 (102)와 함께 또는 동작 하이퍼바이저 없이 옵션으로 사용될 수 있다. 하이퍼바이저 (102)가 작동하지 않거나도 1의 컴퓨터 시스템에 존재하지 않을 때, 운영 체제 (104)는 전체 컴퓨터 시스템을 제어할 수 있다. 하이퍼바이저 (102)가 도 1의 컴퓨터 시스템에서 작동하거나 존재할 때, 하이퍼바이저 (102)는 하나 이상의 가상 머신을 프로비저닝할 수 있다; 각각의 가상 머신은 운영 체제 (104)의 인스턴스를 실행할 수 있다; 가상 머신에서 실행되는 운영 체제 (104)는 하이퍼바이저 (102)에 의해 프로비저닝된 가상 머신의 자원을 제어할 수 있지만 가상 머신에 프로비저닝되지 않은 자원을 제어할 수 없다. 따라서, 하이퍼바이저 (102)가 존재하거나 컴퓨터 시스템에서 작동하는 경우, 컴퓨터 시스템에서 호스팅되는 가상 머신의 운영 체제는 하이퍼바이저 (102)가 존재하지 않거나 작동하지 않을 때 운영 체제에 의해 제어되는 컴퓨터 시스템의 일부를 제어할 수 없다. 예를 들어, 하이퍼바이저 (102)가 메모리 (109)의 일부를 가상 머신에 프로비저닝할 때, 가상 머신에서 실행중인 운영 체제 (104)는 의사 물리적(pseudo-physical) 메모리 어드레스를 통해 메모리 (109)의 일부에 액세스할 수 있고, 여기서 운영 체제 (104)는 가상 머신에 하이퍼바이저 (102)에 의해 할당된 메모리 (109)의 부분에 실제로 매핑되는 물리적 메모리 어드레스로서 의사 물리적 메모리 어드레스를 취급할 수 있다.
예를 들어, 도 1의 컴퓨터 시스템은 작동/실행중인 하이퍼바이저 (102)가없는 모드에서 전원을 켜거나 부트 스트랩(bootstrap)될 수 있다. 그러한 모드에서, 운영 체제 (104)는 하드웨어 자원 (예를 들어, 프로세서 (169) 및 메모리 (109))을 직접 제어한다. 대안으로, 도 1의 컴퓨터 시스템은 컴퓨터 시스템이 작동/실행중인 하이퍼바이저 (102)를 갖는 모드에서 시작될 수 있다; 하이퍼바이저 (102)는 하나 이상의 가상 머신을 생성하고 관리할 수 있다; 각각의 가상 머신은 운영 체제 (104)의 사본을 실행할 수 있으며, 여기서 운영 체제 (104)는 개별 가상 머신에 대해 하이퍼바이저 (102)에 의해 프로비저닝된 하드웨어 자원을 제어할 수 있다.
일부 인스턴스에서, 프로세서 (189)는 하이퍼바이저 (102)를 갖는 메모리 (109)와 결합되고; 컴퓨터 시스템은 동작 하이퍼바이저 (102)의 유무에 관계없이 옵션으로 부트 스트랩될 수 있다. 다른 인스턴스에서, 프로세서 (189)는 하이퍼바이저 (102)를 갖지 않는 메모리에 옵션으로 결합될 수 있고 따라서, 하이퍼바이저 (102)를 실행할 수 없다.
하이퍼바이저 상태 레지스터 (233)는 하이퍼바이저 (102)가 컴퓨터 시스템에 존재하는지 여부의 표시자를 저장하도록 구성된다. 예를 들어, 하이퍼바이저 상태 레지스터 (233)는 하이퍼바이저 (102)의 결여를 표시하기 위해 전원을 켜는 동안 초기화된 값을 가질 수 있다. 하이퍼바이저 (102)가 부트 스트랩 프로세스 동안 실행을 위해 로드되면, 하이퍼바이저 상태 레지스터 (233)는 동작 하이퍼바이저 (102)의 존재를 나타내도록 설정된다. 하이퍼바이저 상태 레지스터 (233)의 콘텐츠는 프로세서 (189)가 하이퍼바이저 (102)가 존재하는지 여부에 따라 메모리 관리 디바이스 (MMU) (181)의 어드레스 변환 (235)과 같은 동작을 커스터마이즈(customize) 할 수 있도록 한다.
예를 들어, 하이퍼바이저 상태 레지스터 (233)가 하이퍼바이저 (102)가 존재하지 않음을 표시할 때, 컴퓨터 시스템에서 실행되는 운영 체제 (104)는 자원 관리 및/또는 서비스를 위해 하이퍼바이저 (102)에 의존하지 않는다. 하이퍼바이저 (102)의 도메인 (101)은 프로세서 (169)에서의 명령 실행에 적용되지 않는다; 운영 체제 (104)는 전체 물리적 메모리 (109)와 같은 자원에 대한 풀 액세스(full access)가 제공된다.
그러나, 하이퍼바이저 상태 레지스터 (233)가 하이퍼바이저 (102)가 존재 함을 나타낼 때, 가상 머신에서 실행되는 운영 체제 (104)는 가상 머신을 위한 하이퍼바이저 (102)에 의해 프로비저닝된 자원 및/또는 서비스로 제한된다. 따라서, 하이퍼바이저 (102)의 도메인 (101)은 프로세서 (169)에서의 명령 실행과 관련이 있다. 예를 들어, 운영 체제 (104)의 루틴에서 수행되는 특정 동작은 하이퍼바이저 (102)에서 대응하는 동작을 트리거할 수 있다.
일반적으로, 도메인 레지스터 (117)에 의해 표시된 현재 실행 도메인이 하이퍼바이저 (102)의 도메인 (101)과 다르더라도 하이퍼바이저 (102)가 존재할 수 있다. 예를 들어, 프로세서 (169)는 도메인 (105)에서 애플리케이션 (106)을 실행하고 운영 체제 (104)에 의존하여 메모리 (109)에 액세스할 수 있다; 하이퍼바이저 (102)는 메모리 (109)에 액세스할 때 운영 체제 (104)를 운영 체제 (104)가 실행중인 가상 머신에 하이퍼바이저 (102)에 의해 프로비저닝되는 부분으로 제한할 수 있다. 따라서, 도메인 (105)에서의 애플리케이션 (106)의 실행은 운영 체제 (104)의 도메인 (103)에서의 실행 및/또는 하이퍼바이저 (102)의 도메인 (101)에서의 실행으로 시프트될 수 있다.
일반적으로, 하이퍼바이저 상태 레지스터 (223)의 콘텐츠는 하이퍼바이저 (102)가 존재하는지 여부를 나타내며, 이는 도메인 (103, …, 105)이 하이퍼바이저 (102) 또는 가상 머신의 제약내에서 작동하는지 여부의 표시이다.
하이퍼바이저 (102)가 존재할 때, 가상 머신 레지스터 (231)는 프로세서 (169)가 현재 도메인(예를 들어, 101, 103, … 또는 105)에서 루틴을 실행하고 있는 현재 가상 머신의 식별자를 저장할 수 있다. 예를 들어, 프로세서 (169)가 운영 체제 (104)의 도메인 (103)에서 루틴을 실행하는 경우, 가상 머신 레지스터 (231)는 루틴이 실행되고 있는 가상 머신의 식별자를 프로세서(169)에 저장한다. 예를 들어, 프로세서 (169)가 애플리케이션 (106)의 도메인 (105)에서 루틴을 실행하고 있을 때, 가상 머신 레지스터 (231)는 애플리케이션이 실행되고 있는 가상 머신의 식별자를 저장한다.
일부 구현예에서, 가상 머신 레지스터 (231) 및 하이퍼바이저 상태 레지스터 (233)는 조합될 수 있다. 예를 들어, 가상 머신 레지스터 (231)가 미리 결정된 값 (예를 들어, 0)을 가질 때, 가상 머신 레지스터 (231)는 컴퓨터 시스템에 하이퍼바이저가 존재하지 않음을 표시하고; 가상 머신 레지스터 (231)가 미리 결정된 값과 다른 값을 가질 때, 가상 머신 레지스터 (231)의 콘텐츠는 프로세서 (169)가 현재 명령을 실행하고 있는 가상 머신을 고유하게 식별한다.
일부 구현예에서, 가상 머신 레지스터 (231) 및 하이퍼바이저 상태 레지스터 (233)는 별개의 레지스터이고 및/또는 다른 도메인 (예를 들어, 101, 103, …, 105)에 대해 다른 액세스 권한을 갖는다. 예를 들어, 하이퍼바이저 상태 레지스터 (233)는 부트 스트랩 프로세스에서 컴퓨터 시스템을 다시 시작하지 않고 변경할 수 없다. 예를 들어, 하이퍼바이저 상태 레지스터 (233)는 하이퍼바이저 (102)의 도메인 (101)에 의해 액세스될 수 있지만 운영 체제의 도메인 (103) 및/또는 애플리케이션의 도메인 (105)에 의해 액세스되지 않는다; 가상 머신 레지스터 (231)는 하이퍼바이저 (102)의 도메인 (101)과 운영 체제 (104)의 도메인 (103) 둘 모두에 의해 액세스될 수 있다.
도 1의 프로세서 (169)는 어드레스 변환 (235)의 기능을 구현하는 메모리 관리 유닛 (MMU) (181)을 포함한다. 프로세서 (169)는 하이퍼바이저 상태 레지스터 (233)의 콘텐츠(content)에 기초하여 어드레스 변환 (235)을 구성할 수 있다.
예를 들어, 하이퍼바이저 상태 레지스터 (233)가 하이퍼바이저 (102)의 부재를 나타내는 제 1 값 (예를 들어, 0)을 갖는 경우, 프로세서 (169)는 가상 머신 레지스터 (231)를 사용하지 않고 기능하도록 어드레스 변환 (235)을 구성한다. 하이퍼바이저 상태 레지스터 (233)가 하이퍼바이저 (102)의 존재를 나타내는 제 2 값 (예를 들어, 1)을 가질 때, 프로세서 (169)는 가상 머신 레지스터 (231)를 사용하여 기능하도록 어드레스 변환 (235)을 구성하여 해당 어드레스 변환은 가상 머신에 대해 특정된다.
도 1의 프로세서 (169)는 산술 논리 유닛과 같은 실행 유닛 (예를 들어, 185)가 있다. 프로세서 (169)는 메모리 (109)의 일부의 프록시(proxy)로서 내부 캐시 (187)를 포함할 수 있다. 도메인 레지스터 (117), 가상 머신 레지스터 (231) 및 하이퍼바이저 상태 레지스터 (233)에 추가로, 프로세서 (169)는 실행을 위한 명령, 명령의 피연산자(operand)로서 데이터, 및/또는 명령 실행의 결과를 홀딩하기 위한 다른 레지스터 (183)를 가질 수 있다.
일반적으로, 루틴은 메모리 (109)에 저장된 미리 프로그래밍된 명령 세트를 포함할 수 있다. 루틴은 또한 입력 데이터, 출력 데이터 및/또는 메모리 (109)에 저장된 임시 데이터를 가질 수 있다. 루틴은 서비스 및/또는 자원에 대해 다른 루틴을 인보크(invoke)하거나 호출(call)할 수 있다. 호출 루틴과 호출된 루틴은 동일한 도메인 또는 다른 도메인(예를 들어, 101, 103, …, 105)에 있을 수 있다.
옵션으로, 도메인 레지스터 (117)의 콘텐츠는 아래에서 더 논의되는 바와 같이 프로세서 (189)에서 보안 동작을 제어할 수 있다.
일 구현예에서, 프로세서 (169)를 갖는 컴퓨터 시스템이 초기에 전원이 켜질 때 (부트 스트랩), 프로세서 (169)는 부트 스트랩 프로세스의 일부로서 하이퍼바이저 (102) 또는 운영 체제 (104) (만약 하이퍼바이저가 사용되지 않는 경우)의 루틴을 자동으로 실행하도록 구성된다. 따라서, 도메인 레지스터 (117)는 초기에 하이퍼바이저 (102)의 도메인 (101) 또는 운영 체제 (104)의 도메인 (103)을 나타내도록 설정된다. 후속하여, 실행 제어는 목적지 도메인(destination domain)을 식별하는 명령을 사용하여 한 도메인에서 다른 도메인으로 이동할 수 있다; 도메인 레지스터 (117)의 콘텐츠는 이러한 명령의 프로세싱에 따라 업데이트될 수 있다. 도메인 교차(domain crossing)에 대한 몇 가지 예와 세부 사항은 "컴퓨터 프로세서에서 명령을 실행하는 도메인 교차"라는 제목으로 2018 년 8 월 30 일에 출원된 미국 특허 출원 일련 번호 62/725,030에서 찾아질 수 있고, 이 출원의 전체 개시는 본 출원에 참조로 통합된다.
대안으로 또는 조합하여, 현재 실행중인 루틴의 도메인은 메모리 어드레스, 루틴의 저장된 속성 등에 기초하여 식별될 수 있다. 예를 들어, 컴퓨터 프로세서 (169)의 도메인 레지스터 (117)에 현재 도메인 (123)을 특정하는 일부 기술은 "컴퓨터 프로세서에서 실행되는 명령에 대한 도메인 레지스터"라는 제목으로 2018 년 8 월 30 일에 출원된 미국 특허 출원 일련 번호 62/724,999에서 찾을 수 있고, 이 출원의 전체 개시는 본 출원에 참조로 통합된다.
일부 인스턴스에서, 현재 도메인은 실행을 위한 루틴의 명령을 로드하는데 사용되는 메모리 어드레스로부터 식별될 수 있다.
예를 들어, 가상 메모리 어드레스 (예를 들어, 도 5에 도시된 195)는 프로세서 (169)에 대해 미리 결정된 폭 (예를 들어, 미리 결정된 비트 수)을 가질 수 있다. 메모리 어드레스는 객체 ID를 나타내는 부분 (예를 들어, 도 5에 도시된 199) 및 객체 ID (예를 들어, 199)에 의해 표시된 객체 내에 오프셋을 나타내는 부분 (예를 들어, 도 5에 도시된 196)을 포함할 수 있다. 예를 들어, 루틴은 어드레스에 위치된 객체일 수 있다; 어드레스의 객체 ID는 명령 및/또는 루틴의 특정 속성을 식별하는데 사용될 수 있다; 현재 도메인은 속성으로부터 결정될 수 있다.
예를 들어, 미리 결정된 값 (예를 들어, 0)의 정적 객체 ID는 운영 체제 (104)의 커널 객체를 나타내기 위해 사용될 수 있다. 따라서, 메모리 어드레스에 지정된 정적 객체 ID를 사용하여 루틴 실행을 위한 현재 도메인을 식별할 수 있다. 컴퓨터 프로세서가 실행 명령을 로드하기 위한 메모리 어드레스의 정적 객체 ID에 대한 일부 세부 사항 및 예는 "객체 기반 메모리 액세스의 정적 식별"이라는 제목으로 2018 년 7 월 6 일에 출원된 미국 특허 출원 일련 번호 16/028,840 에서 찾을 수 있고, 이 출원의 전체 개시는 본 출원에 참조로 통합된다.
일부 예들에서, 메모리 어드레스 및/또는 메모리 어드레스의 객체 ID (예를 들어, 199)는 객체 유형을 나타내는 부분 (예를 들어, 도 5에 예시된 198)을 포함할 수 있다. 예를 들어, 0에서 3까지의 값의 객체 유형 (198)을 사용하여 운영 체제의 커널 객체를 식별할 수 있다. 예를 들어, 4에서 5 사이의 값의 객체 유형 (198)을 사용하여 오프셋이 상이한 폭의 어드레스 (예를 들어, 128 비트를 갖는 메모리 어드레스 내에 포함된 64 비트 어드레스 또는 32 비트 어드레스)임을 지정할 수 있다. 예를 들어, 6 내지 7 값의 객체 유형 (198)을 사용하여 객체 ID의 미리 결정된 부분이 PGAS (Partitioned Global Address Space)의 객체 또는 로컬 객체의 식별자로 해석되도록 지정할 수 있다. 예를 들어, 32 값의 객체 유형 (198)을 사용하여 객체 ID의 나머지 부분이 서버에 정의된 객체의 식별자 (예를 들어, 197)로 해석되도록 지정할 수 있다. 예를 들어, 객체 이름 서버는 객체 ID, 객체의 액세스 제어 파라미터 및/또는 객체의 다른 속성으로 표시되는 객체의 이름을 나타내는 데이터를 저장할 수 있다.
예를 들어, 실행을 위해 루틴을 로드하는데 사용되는 메모리 어드레스의 객체 ID (199)는 객체 이름 서버에 저장된 속성을 가질 수 있다; 속성을 사용하여 메모리 어드레스로부터 로드된 루틴의 현재 도메인을 결정하거나 추론할 수 있다.
일부 인스턴스에서, 프로세서 (169)에서 실행될 루틴은 루틴과 관련하여 저장된속성을 가질 수 있다(예를 들어, 루틴 실행을 호출하기 위한 엔트리 테이블의 명령 물리적 어드레스의 결정을 위해 메모리 (109), 페이지 테이블 엔트리). 루틴이 실행을 위해 로드될 때, 루틴의 속성은 루틴 실행을 위한 현재 도메인을 결정하는데 사용된다.
일 실시예에서, 하이퍼바이저 상태 레지스터 (233)가 하이퍼바이저의 부재를 나타낼 때, 프로세서 (169)는 도 2에 따라 어드레스 변환 테이블의 테이블 베이스를 식별하도록 메모리 관리 유닛 (MMU) (181)을 구성한다. 그러나, 하이퍼바이저 상태 레지스터 (233)가 하이퍼바이저 (102)의 존재를 나타낼 때, 프로세서 (169)는 도 3에 따라 어드레스 변환 테이블의 테이블 베이스를 식별하도록 메모리 관리 유닛 (MMU) (181)을 구성한다. 도 5는 가상 어드레스를 물리적 어드레스로 변환하기 위해 어드레스 변환 테이블로부터 엔트리를 검색하는 기술을 도시한다.
도 2는 일부 실시예에서 동작 하이퍼바이저가 없는 어드레스 변환 테이블의 테이블 베이스 (249)의 식별을 예시한다.
도 2에서, 별도의 테이블 베이스 레지스터 (241, 243, …, 245)는 각각 다른 도메인 (101, 103, …, 105)에 대해 구성된다.
프로세서 (169)의 도메인 레지스터 (117)는 프로세서 (169)가 현재 명령을 실행하고 있는 현재 도메인의 식별자를 저장한다. 도메인 레지스터 (117)는 멀티플렉서 (247)에 결합되어 어드레스 변환에 사용되는 어드레스 변환 테이블의 테이블 베이스 (249)로 선택한다. 테이블 베이스 (249)는 메모리 관리 유닛 (MMU) (181)에서 어드레스 변환 (235)을 수행하기 위해 사용될 어드레스 변환 테이블의 메모리 위치를 식별한다 (예를 들어, 도 5 및/또는 도 7와 관련하여 이하에서 논의되는).
도 2는 다수의 테이블 베이스 레지스터 (241, 243, …, 245)를 갖는 프로세서의 예를 도시한다.
대안으로 또는 조합하여, 각각의 도메인 (101, 103, … 또는 105)은 각각의 도메인 (101, 103, …, 또는 105)에서 명령 실행에 사용되는 도메인 특정 레지스터의 값을 저장하도록 구성된 별도의 메모리 영역을 가질 수 있다.
예를 들어, 각각의 도메인 (101, 103, … 또는 105)은 실행이 일시적으로 다른 도메인으로 전환되기 전에 마지막으로 실행된 명령을 실행하는 동안 사용된 레지스터의 도메인 특정 값을 저장하는 별도의 메모리 영역을 가질 수 있다 (예를 들어, 다른 도메인에서 루틴을 실행하기 위한 도메인 호출 명령을 통해). 특정 도메인 (예를 들어, 101)에 특정한 레지스터의 값을 저장하기 위한 이러한 별개의 메모리 영역은 개별 도메인 (예를 들어, 101)에서 명령 실행을 위해 액세스 가능하지만 다른 도메인 (예를 들어, 105)에서 명령 실행을 위해 액세스할 수 없다. 다른 도메인 (예를 들어, 101)은 주어진 도메인 (예를 들어, 105)의 레지스터 값 영역에 액세스하는 것이 방지되므로, 주어진 도메인 (예를 들어, 105)의 레지스터 상태는 다른 도메인(예를 들어, 101)에 실행으로부터 격리되고 보호된다.
예를 들어, 특정 도메인 (예를 들어, 101)의 레지스터의 도메인 특정 값을 위한 메모리 영역은 프로세서에서 실행되는 명령의 프로그램 카운터 (PC) 값, 명령 실행을 위한 스택의 스택 포인터 (SP : stack pointer) 값, 스택의 프레임 포인터 (FP : frame pointer) 값, 스택에 대한 인수 포인터 (AP : argument pointer)의 값 및/또는 프로세서 상태 워드 (PSW : processor status word)의 값 등을 저장할 수 있다. 특정 도메인 (예를 들어, 101)에 대한 테이블 기반 레지스터의 값은 특정 도메인 (예를 들어, 101)의 레지스터 값 영역에도 저장될 수 있다. 이러한 구현예에서는 도메인 (101, 103, …, 105)에 대해 별개의 레지스터 (241, 243, …, 245)를 구성할 필요가 없다. 단일 레지스터를 사용하여 도메인 레지스터 (117)에 표시된 대로 현재 도메인 (예를 들어, 101, 103, …, 105)에 대한 테이블 베이스를 저장할 수 있다; 그리고 실행이 새로운 도메인에 들어갈 때, 레지스터는 새로운 도메인의 레지스터 값 영역에 이전에 저장된 테이블 베이스를 사용하여 업데이트될 수 있다. 대안으로, 도메인 레지스터 (117)의 콘텐츠는 어드레스 변환 테이블의 베이스 (249)를 조회(look up)하기 위해 테이블 베이스 테이블의 인덱스로 사용될 수 있다.
일 실시예에서, 도메인 (101)이 하이퍼바이저 (102)에 대해 특별히 구성될 때, 하이퍼바이저 상태 레지스터 (233)에 의해 표시되는 하이퍼바이저의 부재는 프로세서 (169)가 하이퍼바이저 (102)의 도메인 (101)에 대한 테이블 베이스 레지스터를 스킵할 수 있도록 한다; 하이퍼바이저 (102)의 도메인 (101)은 프로세서 (169)의 후속 동작과 관련이 없게 된다 (예를 들어, 후속 전원 공급/부트 스트랩 프로세스(bootstrap process) 동안 하이퍼바이저 상태 레지스터 (233)가 변경될 때까지).
도 3은 일부 실시예에서 동작 하이퍼바이저 (102)의 존재하에 어드레스 변환 테이블의 테이블 베이스 (249)의 식별을 예시한다.
도 3에서, 중간 베이스 (248)는 멀티플렉서 (247)에 의해 테이블 베이스 레지스터 (241, 243, …, 245)으로부터의 출력으로 선택된다. 중간 베이스 (248)는 어드레스 변환 테이블의 테이블 베이스 (249)를 생성하기 위해 가상 머신 레지스터 (231)의 콘텐츠와 추가로 조합된다.
일반적으로, 각각의 실행 도메인 (101, 103, …, 105) 및 도 1의 컴퓨터 시스템에서 호스팅되는 각각의 가상 머신에 대해, 운영 체제 (104)에 의해 할당된 가상 어드레스를 물리적 어드레스로 변환하기 위해 별도의 어드레스 변환 테이블이 생성될 수 있다. 동작 하이퍼바이저 (102)가 컴퓨터 시스템에 있을 때, 운영 체제 (104)가 의사 어드레스가 물리적 어드레스인 것처럼 가상 메모리 어드레스에 대한 의사 어드레스(pseudo-address)를 할당한다는 점에서 가상 머신에서 실행되는 운영 체제 (104)는 의사 물리적 어드레스를 사용하는데, 이는 운영 체제 (104)는 하이퍼바이저 (102)에 의해 제공된 가상 머신을 물리적 머신과 구분할 수 없기 때문이다. 하이퍼바이저 (102)는 가상 머신에서 실행되는 운영 체제 (104)에 의해 할당된 의사 물리적 어드레스를 컴퓨터 시스템 (예를 들어, 도 1에 예시됨)의 메모리 (109)의 물리적 어드레스로 변환할 수 있다.
바람직하게는, 하이퍼바이저 (102)는 가상 메모리 어드레스의 페이지및 물리적 어드레스의 페이지를 매핑하는 페이지 테이블 엔트리 생성시 변환을 수행한다. 가상 머신에서 실행되는 운영 체제 (104)는 의사 물리적 어드레스에서 작동하기 때문에, 운영 체제에 의해 지정된 페이지 테이블 엔트리는 가상 메모리 어드레스 페이지를 의사 물리적 어드레스 페이지에 매핑한다. 하이퍼바이저 (102)는 가상 머신에 할당된 물리적 어드레스 페이지로 의사 물리적 어드레스의 페이지를 변환할 수 있어서 페이지 테이블 엔트리는 가상 어드레스를 가상 머신에 할당된 물리적 어드레스로 직접 변환하는데 후속하여 사용될 수 있다. 하이퍼바이저 (102)에 의해 수정된 이러한 페이지 테이블 엔트리는 가상 어드레스의 사용시에 가상 머신의 의사 물리적 어드레스를 물리적 메모리 (109)에 대한 물리적 어드레스로 개별적으로 변환할 필요를 제거함으로써 동작 하이퍼바이저 (102)의 존재하에서 메모리 액세스 성능을 향상시킬 수 있다.
예를 들어, 운영 체제 (104)가 가상 메모리 페이지를 의사 물리적 메모리 페이지에 매핑하기 위해 페이지 테이블 엔트리를 생성하는 명령을 실행할 때, 명령은 하이퍼바이저 (102)가 의사 물리적 메모리 페이지를 물리적 메모리 페이지로 변환하고 가상 메모리 페이지를 변환된 물리적 메모리 페이지에 매핑하기 위해 페이지 테이블 엔트리를 수정하도록 트랩핑(trap)될 수 있다. 후속하여, 페이지 테이블 엔트리를 사용하여 가상 메모리 페이지를 물리적 메모리 페이지로 직접 변환할 수 있다.
가상 머신 레지스터 (231)의 콘텐츠는 테이블을 통해 베이스 (248)와 조합되어 가상 머신 레지스터 (231)에 의해 식별된 가상 머신에 특정한 베이스 (249)를 조회할 수 있다. 대안으로, 가상 머신 레지스터 (231)의 콘텐츠는 도 5와 관련하여 이하에서 추가로 논의되는 어드레스 변환 테이블 (249)의 가상 머신 특정 엔트리를 검색하기 위해 베이스 (248)에서 테이블로 인덱싱하기 위해 해시 함수 (예를 들어, 도 5에 예시된 (121))에 대한 입력의 일부로 사용될 수 있다.
예를 들어, 특정 도메인 (예를 들어, (103))에 대해, 프로세서 (169)는 컴퓨터 시스템에서 호스팅되는 가상 머신의 테이블 베이스 테이블을 저장할 수 있다. 도메인 (예를 들어, 103)의 테이블 베이스 레지스터 (예를 들어, 243)는 가상 머신에 대한 테이블 베이스 테이블의 베이스 (248)를 저장할 수 있다. 가상 머신 레지스터 (231)의 콘텐츠는 가상 머신 레지스터 (231)에 의해 식별된 가상 머신에 대하여 그리고 도메인 (예를 들어, 103)에 대해 지정된 어드레스 변환 테이블의 베이스 (249)를 조회하기 위해 베이스 (248)에서 테이블로의 인덱스로 사용될 수 있다.
도 3은 다수의 테이블 베이스 레지스터 (241, 243, …, 245)를 갖는 프로세서의 예를 도시한다.
대안으로 또는 조합하여, 각각의 도메인 (101, 103, …, 또는 105)은 도 2와 관련하여 상기에서 논의된 바와 같이, 개별 도메인 (101, 103, …, 또는 105)에서 명령 실행에 사용되는 레지스터의 도메인 특정 값을 저장하도록 구성된 별도의 메모리 영역을 가질 수 있다. 테이블 베이스 레지스터 (241, 243, …, 245)의 값은 각각의 도메인의 레지스터 값 영역 (예를 들어, 101, 103, …, 105)에 저장될 수 있다. 이러한 구현예에서는, 도메인 (101, 103, …, 105)에 대해 개별적으로 별도의 레지스터 (241, 243, …, 245)를 구성할 필요가 없다. 단일 레지스터를 사용하여 각각의 도메인 (예를 들어, 101, 103, …, 105)의 레지스터 값 영역에서 검색된 베이스(248)를 저장할 수 있다. 일부 구현예에서, 베이스 (248)는 어드레스 변환 테이블의 베이스 (249)를 획득하고 어드레스 변환 (235)을 위한 베이스 (249)를 홀딩하도록 해당 레지스터를 업데이트하기 위해 가상 머신 레지스터 (231)의 콘텐츠와 추가로 조합된다. 대안으로, 가상 머신 레지스터 (231)의 콘텐츠가 변경될 때 개별 도메인 (예를 들어, 101, 103, …, 105)의 레지스터 값 영역에서 베이스 (248)를 다시 로드할 필요가 없도록 어드레스 변환 테이블의 중간 베이스 (248) 및 베이스 (249)를 저장하는데 별도의 레지스터가 사용된다. 도메인 (101, 103, …, 105)의 레지스터 값 영역은 가상 머신 레지스터 (231) 및/또는 도메인 레지스터 (117)의 변경에 응답하여 프로세서 (169)의 효율적인 상태 변경을 가능하게 하기 위해 내부 캐시 (187)에 캐싱될 수 있다. 대안으로, 도메인 레지스터 (117)의 콘텐츠와 가상 머신 레지스터 (231)의 콘텐츠는 어드레스 변환 테이블의 베이스 (249)를 조회하기 위해 테이블 베이스 테이블의 인덱스로 조합될 수 있다.
도 4는 각각의 도메인 (101, …, 105)에 대한 별도의 어드레스 변환 테이블 (217, …, 227)을 예시한다.
도 4에서, 도메인 레지스터 (117)는 도 1의 프로세서 (169)에 명령 실행의 현재 도메인의 식별자를 저장할 수 있다. 예를 들어, 도메인 레지스터 (117)의 콘텐츠는 도메인 A (101) 또는 도메인 C (105)를 식별할 수 있다.
각각의 도메인 (101, …, 105)은 각각의 어드레스 변환 테이블 (217, …, 227)의 메모리 위치를 식별하는 대응하는 테이블 베이스 (219, …, 229)를 갖는다.
예를 들어, 하이퍼바이저 상태 레지스터 (233)가 컴퓨터 시스템에 동작 하이퍼바이저 (102)가 없음을 나타내는 경우, 테이블 베이스 (219, …, 229)는 도 2와 관련하여 상기에서 논의된 바와 같이, 개별 도메인 (101, …, 105)의 레지스터 값 영역으로부터 로드될 수 있고 및/또는 각각의 레지스터 (241, …, 245)로부터 검색될 수 있다.
하이퍼바이저 상태 레지스터 (233)가 컴퓨터 시스템에서 동작 하이퍼바이저 (102)의 존재를 나타낼 때, 테이블 베이스 (219, …, 229)는 개별 도메인 (101, …, 105)의 레지스터 값 영역으로부터 가상 머신 레지스터 (231)에 의해 식별되는 특정 가상 머신에 대해 로드될 수 있고, 도 3과 관련하여 상기에서 논의된 것과 유사한 방식으로, 개별 레지스터 (241, …, 245)로부터 검색된 테이블 베이스를 사용하여 특정 가상 머신을 검색할 수 있다.
대안으로, 하이퍼바이저 상태 레지스터 (233)가 컴퓨터 시스템에서 동작 하이퍼바이저 (102)의 존재를 나타내는 경우, 테이블 베이스 (219, …, 229)는 개별 도메인(101, …, 105)의 레지스터 값 영역으로부터 로드될 수 있다; 가상 머신 레지스터 (231)의 콘텐츠는 테이블 베이스 (219, …, 229)에서 어드레스 변환 테이블 (217, …, 227)로의 인덱스를 생성하는데 사용될 수 있다.
도 4에서, 각각의 어드레스 변환 테이블 (217, … 또는 227)은 개별 테이블 (217, … 또는 227)이 갖는 엔트리의 수/카운트(count) (211, … 또는 221)를 저장한다. 수/카운트 (211, … 또는 221)는 프로세서 (169)가 어드레스 변환 테이블 (217, … 또는 227)에 사용된 인덱스가 수/카운트 (211, … 또는 221)로 정의된 유효한 경계(bound) 내에 있는지 여부를 확인할 수 있도록 한다.
가상 어드레스를 물리적 어드레스로 변환하는 동안, 가상 어드레스를 물리적 어드레스로 변환하는 엔트리를 검색하기 위해 가상 어드레스로부터 및/또는 가상 어드레스에 대한 인덱스가 생성된다. 도 5는 어드레스 변환 (235)에서 인덱스 생성의 예를 예시한다.
도 5는 가상 어드레스 (195)를 변환하기 위해 어드레스 변환 테이블 (217)로부터 엔트리(250)를 검색하는 기술을 도시한다.
가상 어드레스 (195)는 객체 ID (199), 객체 유형 (198) 및 오프셋(offset) (196)을 포함할 수 있다. 예를 들어, 가상 어드레스 (195)는 128 비트의 폭을 가질 수 있다; 가상 어드레스 (195)의 다수의 비트 (예를 들어, 59 또는 58)를 사용하여 객체 ID (199)를 저장할 수 있다, 객체 유형 (198)을 저장하기 위해 가상 어드레스 (195)의 다른 비트 수 (예를 들어, 5 또는 6)를 사용할 수 있다, 가상 어드레스의 나머지 비트 (예를 들어, 64)는 유형 (198) 및 ID (199)를 갖는 객체에 대한 오프셋 (196)을 저장하는데 사용될 수 있다. 예를 들어, 가상 어드레스 (195)는 도메인 (예를 들어, 105)에서 루틴의 프로그래머 또는 사용자가 구성, 프로그래밍 및/또는 볼 때 메모리 (109)에 저장된 어드레스일 수 있다.
도 5에서, 객체 ID (199)에 해시 (121)를 적용하여 인덱스 (125)를 생성한다. 인덱스 (125)는 객체 ID (199)보다 적은 수의 비트를 가지므로 테이블 (217)로부터 엔트리 (예를 들어, 213, …, 215)를 조회하기 위한 어드레스 변환 테이블 (217)의 크기를 줄인다. 그러나, 다수의 엔트리가 동일한 인덱스로 해시되는 경우 해시 충돌(hash collision)이 발생할 수 있다. 체이닝(chaining)은 해시 충돌을 해결하는 기술 중 하나이다. 충돌로 인한 인덱스는 키-값(key-value) 쌍의 리스트(list)/체인을 검색하는데 사용될 수 있다. 인덱스로 해시된 각각의 아이템(item)은 리스트에서 대응하는 키-값 쌍의 키로 구성될 수 있다; 아이템에 대한 조회 결과는 대응하는 키-값 쌍의 값으로 구성될 수 있다. 동일한 인덱스로 해시된 아이템 중 하나의 조회 결과를 검색하기 위해, 인덱스를 통해 식별된 키-값 쌍의 리스트/체인을 검색하여 키가 아이템과 일치하는 키-값 쌍을 찾을 수 있다. 일치하는 키-값 쌍의 값은 조회 결과를 제공한다. 인덱스 (125)에 대한 해시 충돌이 없는 경우, 어드레스 변환 테이블 (217)의 인덱스 (125)에 있는 엔트리 (예를 들어, 213, … 또는 215)는 결과 엔트리(250)로서 검색될 수 있다. 인덱스 (125)에 대한 해시 충돌이 있을 때, 어드레스 변환 테이블 (217)의 인덱스 (125)에 있는 엔트리 (예를 들어, 213, …, 215)는 충돌 체인 (260)을 식별한다. 충돌 체인 (260)은 동일한 인덱스 (125)로 해시된 (121) 객체 ID (예를 들어, 261, 263)에 대한 엔트리 (예를 들어, 262, 264, …)를 보여주는 리스트/체인을 가지고 있다. 충돌 체인 (260)은 해시 (121) 이전의 객체 ID (199)와 일치하는 객체 ID (예를 들어, 261 또는 263)에 대해 지정된 엔트리 (예를 들어, 262 또는 264) 위치를 찾기 위해 검색될 수 있다. 위치 검색된(located) 엔트리(예를 들어, 262 또는 264)는 결과 엔트리 (250)로서 예시된다.
일반적으로, 해시 (121)는 객체 ID (199), 옵션으로 객체 유형 (198), 오프셋의 일부, 가상 머신 레지스터 (231)의 콘텐츠, 및/또는 프로세서 (169)에서 실행중인 현재 프로세스의 프로세서 ID 및/또는 도메인 레지스터 (117)의 콘텐츠와 같은 다른 정보의 조합에 적용될 수 있다. 일부 인스턴스에서, 도메인 레지스터 (117)의 콘텐츠 및/또는 가상 머신 레지스터 (231)의 콘텐츠는 인덱스 (125)를 생성하기 위해 해시 (121)의 결과에 첨부/추가될 수 있다.
인덱스 (125)를 사용하여 어드레스 변환 테이블 (217)로부터 검색된 전형적인 엔트리 (250)는 어드레스 변환 (235)에서 후속 동작을 위한 필드를 가질 수 있다. 예를 들어, 유효한 필드 (251)는 엔트리 (250)가 어드레스 변환에 유효한지 여부를 나타내는 값을 가질 수 있다; 유형 필드 (253)는 엔트리를 사용하여 수행될 변환 유형을 나타내는 값을 가질 수 있다; 페이지 크기 필드 (255)는 페이지 테이블 엔트리의 결정을 위한 메모리 페이지 크기를 나타내는 값을 가질 수 있다; 어드레스 필드 (257); 기타 등. 예를 들어, 엔트리 (250)는 페이지 테이블 구조를 식별하는 필드 및/또는 엔트리 (250)에 대응하는 메모리 영역에 액세스하기 위한 보안 구성을 지정하는 필드 (예를 들어, 도 6에 예시된 107)를 더 포함할 수 있다. 대안으로, 엔트리 (250)는 테이블을 식별하는 필드를 더 포함할 수 있다; 오프셋의 해시 (196) 또는 오프셋의 일부 (196)는 물리적 어드레스 (159)의 영역 (137)의 베이스 (157), 또는 가상 어드레스 (195)에 대응하는 물리적 어드레스 (159) 또는 테이블 구조 (예를 들어, 페이지 테이블 (151) 또는 도 7에 예시된 페이지 테이블 (151)로 이어진 페이지 디렉토리)를 식별하는 엔트리를 검색하기 위해 테이블에서 인덱스로 사용될 수 있다.
어드레스 변환 테이블 (217)의 엔트리 (250)에 제공된 어드레스 (257)는 페이지 테이블 또는 페이지 디렉토리의 메모리 어드레스일 수 있다. 오프셋 (196)의 적어도 일부는 가상 페이지 번호 및 페이지 테이블 또는 페이지 디렉터리의 인덱스로 사용되어 다음 페이지 테이블 또는 페이지 디렉터리를 조회할 수 있다. 다음 페이지 테이블 또는 페이지 디렉토리를 조회하는 프로세스는 오프셋 (196)에서 마지막 가상 페이지 번호를 사용하여 조회된 엔트리가 페이지 테이블 엔트리 (예를 들어, 도 7에 예시된 153) 위치를 찾는데 사용될 때까지 반복될 수 있다. 페이지 테이블 엔트리 (153)에서 식별된 물리적 메모리 페이지의 베이스 (157)는 오프셋 (196)의 나머지 부분 (예를 들어, 도 7에 예시된 오프셋 (147)과 같이)과 조합되어 물리적 어드레스 (예를 들어, 도 7에 예시된 159)를 생성할 수 있다.
옵션으로, 인덱스 (125)를 사용하여 조회된 어드레스 (257)가 물리적 어드레스가 되도록 해시 (121)가 전체 가상 어드레스 (195)에 적용될 수 있다. 이러한 구현예에서, 엔트리 (250)는 페이지 테이블 엔트리로서 고려될 수 있고 메모리 어드레스에 대한 보안 구성 (예를 들어, 도 6에 예시된 107)을 포함할 수 있다. 그러나 이러한 구현예는 큰 어드레스 변환 테이블 (217)이 필요할 수 있다.
대안으로, 해시 (121)는 객체 ID (199), 옵션으로 객체 유형 (198) 및 오프셋의 일부 (196)의 조합에 적용될 수 있으며; 인덱스 (125)를 사용하여 조회된 어드레스 (257)는 물리적 어드레스 페이지의 베이스 (예를 들어, 도 7에 예시된 157)이다. 오프셋 (196)의 나머지 부분은 베이스 (예를 들어, 도 7에 예시된 바와 같이)와 조합되어 물리적 어드레스 (예를 들어, 159)를 생성할 수 있다. 이러한 구현예에서, 어드레스 변환 테이블 (217)은 페이지 테이블 (예를 들어, 도 7에 예시된 151)으로서 고려될 수 있다; 해싱 (121)으로부터 인덱스 (125)를 생성하는데 사용되는 어드레스 (195)의 부분은 엔트리 ID (예를 들어, 도 7에 예시된 145) 또는 가상 페이지 번호 (VPN : virtual page number)로 간주될 수 있다; 및 엔트리 (250)는 페이지 테이블 엔트리 (예를 들어, 도 7에 도시된 153)로 간주될 수 있고 메모리 어드레스에 대한 보안 구성 (예를 들어, 107)을 옵션으로 포함할 수 있다.
대안으로, 해시 (121)는 객체 ID (199), 옵션으로 객체 유형 (198) 및 오프셋의 일부 (196)의 조합에 적용될 수 있으며; 인덱스 (125)를 사용하여 조회된 엔트리 (250)의 어드레스 (257)는 페이지 테이블의 물리적 어드레스 (예를 들어, 도 7에 예시된 153)이다. 엔트리 (250)가 페이지 테이블 (예를 들어, 153)을 식별하기 때문에, 해싱 (121)으로부터 인덱스 (125)를 생성하는데 사용되는 어드레스 (195)의 부분은 테이블 ID (예를 들어, 도 7에 예시된 143)로 간주될 수 있다. 오프셋 (196)의 일부는 페이지 테이블 (예를 들어, 153)에서 엔트리 ID (145) 또는 가상 페이지 번호 (VPN)로 사용되어 메모리 영역 (137) 또는 메모리 페이지의 베이스 (157)를 함유하는 페이지 테이블 엔트리 (예를 들어, 153)을 조회할 수 있다; 및 오프셋 (196)의 나머지 부분은 베이스 (157)와 조합되어 물리적 어드레스 (159)를 생성할 수 있다.
대안으로, 해시 (121)는 객체 ID (199), 옵션으로 객체 유형 (198) 및 오프셋의 일부 (196)의 조합에 적용될 수 있다; 인덱스 (125)을 사용하여 조회된 엔트리 (250)의 어드레스 (257)는 페이지 디렉토리의 어드레스다. 오프셋 (196)은 하나 이상의 페이지 디렉토리 또는 페이지 테이블에 대해 하나 이상의 가상 페이지 번호를 가질 수 있다. 오프셋 (196)의 가상 페이지 번호 (VPN)는 후속 페이지 디렉토리 또는 페이지 테이블의 베이스를 조회하기 위해 페이지 디렉토리로 인덱싱하는데 사용된다. 오프셋 (196)의 마지막 가상 페이지 번호 (VPN)는 메모리 영역 (137)의 베이스 (157)를 함유하는 페이지 테이블 엔트리 (153)를 검색하기 위해 페이지 테이블 (예를 들어, 153)로 인덱싱하는데 사용된다. 이러한 구현예에서, 마지막 가상 페이지 번호 (VPN) 이전의 가상 페이지 번호 (VPN)를 포함하는 어드레스 (195)의 리딩 부분(leading portion)은 테이블 ID (143)로 간주될 수 있다.
일부 인스턴스에서, 동일한 인덱스 (125)를 생성하기 위해 상이한 객체 ID가 해시될 때, 충돌 체인 (260)은 각각의 객체 ID와 연관된 고유 어드레스(unique address)를 식별하기 위해 사용될 수 있다. 이러한 상황에서, 어드레스 (257)는 충돌 체인 (260)을 저장하는 테이블, 리스트 또는 체인을 식별하는데 사용될 수 있으며, 여기서 객체 ID(199)에 대한 어드레스 변환을 위한 고유 엔트리 (예를 들어, 262 또는 264)는 위치가 찾아질 수 있다. 충돌 체인 (260)에서 조회된 고유 엔트리 (예를 들어, 262 또는 264)은 충돌없이 어드레스 변환 테이블 (217)로부터 직접 조회된 엔트리 (250)와 유사한 구조를 가질 수 있다.
일부 구현예에서, 도 1에 도시된 컴퓨터 시스템에서 실행되는 상이한 프로세스는 다른 가상 어드레스 공간을 가질 수 있으므로 어드레스 변환 테이블 (217)에서 다른 엔트리를 가질 수 있다. 이러한 상황에서, 프로세스 ID는 인덱스 (125)를 생성하기 위해 해시 (121)에 대한 어드레스 (195)의 일부와 조합될 수 있다. 옵션으로, 객체 ID (199)는 프로세스 ID를 포함하거나 표시한다.
일부 구현예에서, 상이한 가상 머신은 어드레스 변환 테이블 (217)에서 검색된 다른 페이지 테이블 또는 페이지 디렉토리를 사용한다. 따라서, 가상 머신 레지스터 (231)의 콘텐츠는 객체 ID (199) 및/또는 가상 어드레스 (195)의 추가 부분과 조합되어 해시 (121)의 기능을 통해 인덱스 (125)를 생성할 수 있다.
컴퓨터 프로세서 (169)의 도메인 레지스터 (117)는 컴퓨터 프로세서 (169)에서 현재 실행되고 있는 루틴의 도메인 식별자를 저장하는데 사용될 수 있다. 예를 들어, 도메인 교차(domain crossing)를 유발하는 명령의 실행시, 명령이 성공적으로 프로세싱된 후 명령에 지정된 도메인 식별자를 저장하도록 도메인 레지스터 (117)의 콘텐츠가 업데이트될 수 있다. 도메인 레지스터의 콘텐츠는 프로세서 (169)의 다양한 보안 동작을 제어할 수 있다.
예를 들어, 명령의 실행이 가상 메모리 어드레스를 사용하여 식별된 메모리 위치에 액세스하기 위한 요청을 초래할 때, 가상 메모리 어드레스는 하나 이상의 페이지 테이블을 사용하여 물리적 메모리 어드레스로 변환될 수 있다. 도메인 레지스터의 콘텐츠는 페이지 테이블 엔트리로부터 현재 도메인에서 이루어진 메모리 액세스에 대한 허가 비트(permission bit)를 선택하는데 사용될 수 있다. 선택된 허가 비트는 가상 메모리 어드레스에 의해 식별되는 메모리 유닛에 액세스하기 위한 요청의 프로세싱을 제어할 수 있다.
예를 들어, 가상 메모리 어드레스를 갖는 루틴을 실행하기 위한 호출이 있을 때, 도메인 레지스터의 콘텐츠는 가상 메모리 어드레스를 물리적 메모리 어드레스로 변환하는데 사용되는 페이지 테이블 엔트리로부터 보안 비트를 선택하는데 사용될 수 있다. 보안 비트는 도메인 레지스터에 의해 식별된 현재 도메인에 대한 서비스를 제공하는 루틴을 실행하기 위해 선택된다. 선택된 보안 비트는 호출된 루틴(called routine)과 호출 루틴(calling routine) 사이에서 자원 및/또는 데이터를 분리하는 보안 작업을 제어한다.
예를 들어, 명령의 실행이 권한있는 레지스터(privileged register)에 액세스하기 위한 요청을 생성할 때, 도메인 레지스터의 콘텐츠는 예를 들어, 권한있는 레지스터를 액세스하기 위해 현재 도메인에 대한 허가 비트를 허가 레지스터로부터 선택하는데 사용될 수 있다. 허가 비트는 권한있는 레지스터에 액세스하기 위한 요청의 수락 또는 거부를 제어할 수 있다.
도 6은 도메인 레지스터 (117)에 따라 자원 (예를 들어, 131)에 적용되는 보안 동작을 제어하는 시스템을 도시한다.
도 6에서, 도메인 레지스터 (117)에 지정된 현재 도메인 (123)을 기반으로 보안 제어(119)가 구현되고, 보안 구성(107)은 미리 정의된 도메인 (101, 103, …, 105)에 대해 개별적으로 별도로 지정된 설정 (111, 113, …, 115)을 갖는다. 보안 제어 (119)는 권한있는 레지스터 (133), 호출된 루틴 (135), 메모리 영역 (137) 등일 수 있는 자원 (131)에 적용된다.
보안 구성 (107)은 도메인 (101, 103, …, 105) 간의 정적 하이어러키(hierarchy)에 의존하지 않고 개별적으로 도메인 (101, 103, …, 105)에 대한 설정 (111, 113, …, 115)을 가질 수 있다.
프로세서 (169)에서 루틴을 실행하는 동안, 도메인 레지스터 (117)는 보안 제어 (119)가 현재 도메인 (123)과 일치하는 도메인 (예를 들어, 101, 103, … 또는 105)과 미리 관련된 설정 (예를 들어, 111, 113, … 또는 115)을 선택하도록 한다. 선택된 설정 (예를 들어, 111, 113, … 또는 115)은 보안 제어 (119)에서 자원 (131)에 대한 보안 작업을 커스터마이즈(customize)하는데 사용된다.
예를 들어, 프로세서 (169)에서 루틴의 명령 실행이 메모리 영역 (137)에 대한 메모리 액세스를 요청하는 경우, 현재 도메인 (123)과 일치하는 미리 관련된 도메인 (예를 들어, 101, 103, …, 105)을 갖는 선택된 설정 (예를 들어, 111, 113, … 또는 115)은 메모리 액세스가 허용되는지 여부를 결정하기 위해 보안 제어 (119)에 의해 사용된다.
예를 들어, 메모리 (109)의 상이한 영역 (예를 들어, 137)은 상이한 보안 구성 (예를 들어, 107)으로 구성될 수 있다; 각각의 보안 구성 (예를 들어, 107)은 상이한 도메인 (101, 103, …, 105)에 대해 상이한 허가 (예를 들어, 111, 113, …, 115)을 포함할 수 있다. 보안 구성 (107)은 예를 들어, 가상 메모리 어드레스의 논리적 대 물리적 어드레스 변환에 사용되는 페이지 테이블 엔트리에서 지정될 수 있어서 메모리 영역의 구조는 도 7과 관련하여 이하에서 추가로 논의되는 바와 같이 메모리 페이지 구조에 대응할 수 있다.
예를 들어, 물리적 메모리 (109)는 다수의 영역으로 분할될 수 있다; 각각의 영역 (예를 들어, 137)은 메모리 관리를 위한 물리적 메모리 (109)의 페이지, 또는 물리적 메모리 (109)의 페이지 세트일 수 있다.
예를 들어, 전형적인 메모리 영역 (137)은 미리 정의된 도메인 (101, 103, …, 105)의 세트에 대해 지정된 각각의 보안 구성 (107)을 가질 수 있다. 보안 구성 (107)은 개별적으로 도메인 (101, 103, …, 105)에 대한 허가 (예를 들어, 111, 113, …, 115)을 명시적으로 식별한다. 따라서, 메모리 영역 (137)에 액세스하는 루틴의 특권은 도메인 (102, 103, …, 105)의 하이어러키에 의존하지 않는다.
일 예에서, 현재 도메인 (123)에서 실행되는 루틴이 명령의 판독, 기록 또는 실행을 위해 메모리 영역 (137)에 대한 메모리 액세스를 유발할 때, 도메인 레지스터 (117)는 보안 제어 (119)가 현재 도메인 (123)에 대응하는 설정 (111, 113, … 또는 115)에 지정된 허가를 확인하도록 한다. 현재 도메인 (123)에서 루틴의 명령을 실행하여 특정 유형의 동작 (예를 들어, 판독, 기록, 실행)에 대한 메모리 영역 (137)에 대한 액세스를 차단 (또는 거부)할지 여부가 동작 유형 및 메모리 영역 (137)에 대한 현재 도메인 (123)에 따라 선택되는 개별 허가 비트 에 기초하여 결정될 수 있다. 메모리 영역 (137)에 대한 메모리 액세스 허가의 일부 세부 사항 및 예는 "실행 도메인에 대한 페이지 테이블 엔트리에 지정된 허가를 통한 메모리 액세스 제어"라는 제목으로 2018 년 8 월 30 일에 출원된 미국 특허 출원 일련 번호 62/724,896에서 찾아질 수 있고, 이 출원의 전체 개시는 참조로 본 출원에 참조로 통합된다.
일반적으로, 동일한 도메인 (예를 들어, 103)의 상이한 루틴은 다른 메모리 영역에 구성될 수 있으며, 따라서 동일한 도메인 (예를 들어, 103)에 대해 상이한 허가 및 보안 설정을 갖도록 구성될 수 있다.
또한, 루틴은 데이터의 다른 부분을 다른 메모리 영역 (예를 들어, 137)에 저장하도록 구성될 수 있으며 따라서 동일한 도메인 (예를 들어, 101, 103, … 또는 105)로부터 액세스하기 위한 상이한 허가를 갖도록 구성될 수 있다.
다른 예에서, 현재 도메인 (123)에서 실행되는 루틴이 실행을 위해 메모리 영역 (137)에 저장된 호출된 루틴 (135)을 호출하는 경우, 도메인 레지스터 (117)는 보안 제어 (119)가 현재 도메인 (123)에 대응하는 설정 (111, 113, … 또는 115)에 지정된 허가를 확인하도록 한다. 호출 루틴 (135)에 대해 호출 루틴의 자원을 보호하고 및/또는 호출 루틴에 대해 호출 루틴 (135)의 자원을 보호하기 위해 보안 조치를 배치할지 여부는 현재 도메인 (123) 및 메모리 영역 (137)에 대해 지정된 개별 허가 비트에 기초하여 결정될 수 있다.
보안 조치는 샌드 박싱(sandboxing)을 포함할 수 있다. 일반적으로 샌드 박싱은 특정 시스템 자원 및/또는 다른 명령/프로그램 세트에서 명령 세트 (예를 들어, 애플리케이션)의 실행을 격리하는 컴퓨터 보안 조치를 포함한다. 예를 들어, 호출 루틴과 호출된 루틴이 스택과 관련된 별도의 스택 및 제어 레지스터를 사용하도록 구성된 섀도우 스택 구조(shadow stack structure)를 사용하여 샌드 박싱을 구현될 수 있고, 호출 루틴은 호출된 루틴에 할당된 스택에 액세스하는 것을 방지할 수 있으며 호출된 루틴은 호출 루틴에 할당된 스택에 액세스하는 것을 방지할 수 있다. 섀도우 스택 구조에 대한 몇 가지 세부 사항과 예는 "실행 도메인에 대한 페이지 테이블 엔트리의 보안 구성"이라는 제목으로 2018 년 8 월 30 일에 출원된 미국 특허 출원 일련 번호 62/724,913에서 찾아질 수 있고, 이 출원의 전체 개시는 본 출원에 참조로 통합된다.
예를 들어, 전형적인 메모리 영역 (137)의 보안 구성 (107)은 미리 정의된 도메인의 세트 (예를 들어, 101, 103, …, 105) 각각에 대해 지정된 샌드 박싱 설정 (예를 들어, 111, 113, …, 115)을 가질 수 있다. 샌드 박싱 구성 (107)은 영역 (137)에 저장된 호출된 루틴 (135)을 실행하기 위한 호출을 위해 샌드 박싱 동작이 필요한지 여부를 명시적으로 식별한다. 다른 도메인 (101, 103, …, 105)에서 실행된 루틴으로부터 동일한 루틴 (135)을 실행하기 위한 호출은 상이한 설정 (111, 113, …, 115)을 가질 수 있다; 및 설정 (111, 113, …, 115)은 개별 도메인 (101, 103, …, 105)의 호출에 샌드 박싱이 필요한지 여부를 지정한다 (예를 들어, 호출된 루틴 (135)과 호출 루틴을 서로 보호하기 위해). 따라서, 미리 정의된 도메인 (102, 103, …, 105) 하이어러키에 의존하지 않고, 도메인 레지스터 (117)에서 식별된 현재 도메인 (123)과 개개의 도메인 (101, 103, …, 105)에 대해 구성된 명시적 설정 (예를 들어, 111, 113, …, 115)을 기반으로, 샌드 박스 동작은 메모리 영역 (137)에 저장된 호출된 루틴 (135)의 실행을 위해 선택적으로 적용될 수 있다.
예를 들어, 현재 도메인 (123)의 호출 루틴은 호출된 루틴 (135)을 호출할 수 있다. 메모리 영역 (137)에 저장된 호출된 루틴 (135)을 실행하기 위한 호출에 대해 샌드 박싱 동작을 인보크할지 여부는 메모리 영역 (137)에 대한 현재 도메인 (123)과 일치하는 개별 도메인 (예를 들어, 101, 103, … 또는 105)에 대해 지정된 샌드 박스 설정 (예를 들어, 111, 113, … 또는 115)에 기초하여 결정될 수 있다. 따라서, 샌드 박싱 동작은 호출된 루틴 (135)의 도메인과 현재 호출하는 도메인 (123) 사이의 상대적 하이어러키와 관계없이 인보크될 수 있다.
메모리 영역 (137)에 저장된 루틴에 대한 샌드 박스 설정 (107)은 예를 들어, 가상 메모리 어드레스의 논리적 대 물리적 어드레스 변환에 사용되는 페이지 테이블 엔트리에서 지정될 수 있어서, 메모리 영역의 구조는 도 7와 관련하여 이하에서 추가로 논의되는 메모리 페이지 구조에 대응할 수 있다.
다른 예에서, 현재 도메인 (123)에서 실행되는 루틴이 권한있는 레지스터 (133)에 대한 액세스를 요청하면, 도메인 레지스터 (117)는 보안 제어 (119)가 권한있는 레지스터 (133)에 대한 설정 (111, 113, … 또는 115)에 지정된 허가를 확인하도록 한다. 액세스 허용 또는 차단 여부는 현재 도메인 (123) 및 권한있는 레지스터 (133)에 대해 지정된 개별 허가 비트에 기초하여 결정될 수 있다.
예를 들어, 권한있는 레지스터 (133)는 상이한 도메인 (101, 103, …, 105)에 대해 상이한 허가 (111, 113, …, 115)를 가질 수 있다. 현재 도메인 (123)에서 실행된 명령이 권한있는 레지스터 (133)에 대한 액세스를 요청하면, 도메인 레지스터 (117)는 보안 제어 (119)가 액세스를 제어하는 현재 도메인 (123)에 대응하는 개별 허가 (예를 들어, 111, 113, … 또는 115)을 선택하도록 한다.
레지스터 (133)는 도메인(102, 103, …, 105)에 대한 미리 정의된 하이어러키 신뢰도에 의존하지 않고 도메인 (101, 103, …, 105) (예를 들어, 비 하이어러키)에 대해 개별적으로 지정된 명시적 권한 (111, 113, …, 115)을 가질 수 있다.
일부 인스턴스에서, 권한있는 레지스터 (133)는 판독, 기록, 실행 등과 같은 다양한 유형의 동작을 위해 액세스될 수 있다. 권한있는 레지스터 (133)에 액세스하기 위해 특정 도메인(예를 들어, 101, 103, …, 또는 105)에 대한 허가 (예를 들어, 111, 113, … 또는 115)는 각각의 유형의 동작 (예를 들어, 판독, 기록 및/또는 실행)에 대해 별도의 허가 비트를 가질 수 있다.
보안 구성 (107)은 하나의 도메인 (예를 들어, 101, 103, …, 105)에서 실행되는 명령이 다른 유형의 동작 (예를 들어, 기록)에 대해서가 아니라, 하나의 유형의 동작 (예를 들어, 판독)에 대해 레지스터 (133)에 액세스하도록 허용하도록 구성될 수 있다.
설사 허용되지 않은 도메인 (예를 들어, 101)이 기존 보호 링에서 허용된 도메인 (예를 들어, 103)보다 더 많은 권한을 가질 수 있을 때라도 (따라서 신뢰할 수 있는 경우에도), 보안 구성 (107)은 도메인 (예를 들어, 103)에 대한 하나의 허가 설정 (예를 들어, 113)을 통해 하나의 도메인 (예를 들어, 103)에서 실행되는 명령이 레지스터 (예를 들어, 133)에 액세스할 수 있지만 그러나 다른 도메인 (예를 들어, 101)에서 실행되는 동일한 명령이 해당 도메인 (예를 들어, 101)에 대한 다른 동시 설정 (예를 들어, 111)을 통해 레지스터 (133)에 액세스하는 것을 금지하도록 구성될 수 있다.
일 구현예에서, 보안 구성 (107)은 권한있는 레지스터 (133)를 위한 프로세서에 하드와이어링(hardwire)된다. 다른 구현예에서, 보안 구성 (107)은 컴퓨터 시스템의 시작/부팅 프로세스 동안 프로세서의 레지스터 (133)에 대한 펌웨어를 통해 설정될 수 있다. 추가 구현예에서, 보안 구성 (107)은 컴퓨터 시스템의 정상 동작 동안 권한있는 소프트웨어를 통해 변경될 수 있다.
예를 들어, 권한있는 레지스터 (133)에 대한 보안 구성 (107)은 프로세서 (169)가 한 도메인 (예를 들어, 101)에서 프로그램을 실행하는 것에서 다른 도메인 (예를 들어, 103)에서 프로그램을 실행하는 것으로 스위칭될 때 변경될 수 있다.
예를 들어, 권한있는 레지스터 (133)에 대한 보안 구성 (107)은 컴퓨터 시스템이 실행중인 하나의 루틴에서 다른 루틴으로 스위칭될 때 요청에 따라 변경될 수 있으며, 여기서 루틴은 동일한 도메인 (예를 들어, 101)에 있을 수 있다.
예를 들어, 권한있는 레지스터 (133)에 대한 보안 구성 (107)은 권한있는 레지스터에 저장된 허가 비트를 사용하여 권한있는 레지스터 (133)에 대한 액세스를 제어하는 허가 레지스터에 구성될 수 있다; 및 허가 레지스터의 콘텐츠는 현재 계산에 대한 컴퓨터 시스템의 보안 레벨을 조정/커스터마이즈하기 위해 인증 프로세스(authorized process)에 의해 업데이트될 수 있다. 대안으로, 다른 도메인 (101, 103, …, 105)에 대한 허가 비트는 개별적으로 도메인 (101, 103, …, 105)에 대응하는 별도의 레지스터에 지정될 수 있다. 허가 레지스터의 일부 세부 사항과 예는 "실행 도메인을 기반으로 하는 프로세서 레지스터에 대한 액세스 제어"라는 제목으로 2018 년 8 월 30 일에 출원된 미국 특허 출원 일련 번호 62/724,929에서 찾아질 수 있고, 이 출원의 전체 개시는 본 출원에 참조로 통합된다.
도 6의 보안 제어 시스템은 미리 정의된 신뢰 도메인 하이어러키 (즉, 비 하이어러키)에 의존하지 않으며, 기존 보호 링보다 더 나은 유연성과 세밀한 제어 세분성(granularity)을 제공할 수 있다.
도 7은 실행 도메인 (예를 들어, 101, 103, …, 105)에 대한 보안 구성 (107)을 갖는 페이지 테이블 엔트리 (153)를 예시한다.
예를 들어, 페이지 테이블 엔트리의 보안 구성 (107)은 페이지 테이블 엔트리 (153)에 의해 식별된 메모리 영역 (137)에 액세스하기 위한 허가 및/또는 페이지 테이블 엔트리 (153)으로 식별된 메모리 영역(137)에 저장된 루틴을 호출하기 위한 샌드 박싱 구성일 수 있다.
가상 어드레스 공간 (127)의 전형적인 가상 어드레스 (141)는 페이지 테이블 (151)을 사용하여 물리적 어드레스 공간 (129)의 대응하는 물리적 어드레스 (159)로 변환될 수 있다. 일반적으로, 가상 어드레스 공간 (127)을 물리적 어드레스 공간 (129)에 매핑하기 위해 다수의 페이지 테이블 (예를 들어, 151)이 사용될 수 있다.
가상 어드레스 (141)는 테이블 ID (143), 엔트리 ID (145) 및 오프셋 (147)을 포함할 수 있다. 테이블 ID (143)는 가상 어드레스 (141) 및 물리적 어드레스 (159)로 식별되는 메모리 유닛을 포함하는 페이지에 대한 페이지 테이블 엔트리(153)를 포함하는 페이지 테이블 (151)을 식별하는데 사용될 수 있다. 엔트리 ID (145)는 페이지 테이블 엔트리 (153) 위치를 효율적으로 찾기 위한 페이지 테이블 (151)에 대한 인덱스로 사용된다. 페이지 테이블 엔트리 (153)는 물리적 어드레스 (159)의 베이스 (157)를 제공한다. 동일한 메모리 페이지의 물리적 어드레스는 동일한 베이스 (157)를 공유한다. 따라서, 베이스 (157)는 메모리 (109)에서 영역 (137)을 식별한다. 가상 어드레스 (141)의 오프셋 (147)은 메모리 (109)의 페이지 또는 영역 (137)에서 대응하는 오프셋 (147)으로 사용된다. 베이스 (157)와 오프셋 (147)의 조합은 가상 어드레스 (141)에 대응하는 물리적 어드레스 (159)를 제공한다.
도 7에서, 페이지 테이블 엔트리 (153)는 페이지 또는 영역 (137)에 대한베이스 (157) 뿐만 아니라 페이지 또는 메모리 영역 (137)에 대한 보안 구성 (107) 예컨대, 베이스 (157)에 대응하는 메모리 영역 (137)으로 데이터 판독 허가, 메모리 영역(137)에 데이터 기록 허가, 메모리 영역(137)에 저장된 명령 실행 허가, 메모리 영역 (137)에 저장된 루틴 호출을 위한 샌드 박싱 요구 사항 등도 지정한다. 보안 구성 (107)은 도 1 및 도 6에 예시된 미리 정의된 비 하이어러키 도메인 (101, 103, …, 105)에 대해 개별적으로 별개의 설정 (111, 113, …, 115)을 가질 수 있다. 도메인 레지스터 (117)의 현재 도메인 (137)은 설정 (111, 113, …, 115) 중 어느 것이 메모리 영역(137)에 저장된 루틴 (135)에 대한 현재 호출 또는 현재 메모리 액세스에 사용되는 지를 제어한다.
옵션으로, 페이지 테이블 엔트리 (153)는 물리적 메모리 페이지의 다른 속성 (155) 예컨대, 페이지의 데이터가 유효한지 여부, 페이지가 메인 메모리에 있는지 여부, 페이지가 더티 (dirty)인지 여부 (예를 들어, 물리적 메모리 페이지의 데이터 변경이 아직 메모리 영역(137)에 비해 장기 메모리/스토리지 디바이스로 플러시(flush)되지 않았다)와 같은 것을 지정할 수 있다. 예를 들어, 속성 (155)은 페이지가 컴퓨터의 메인 메모리에 있는지 또는 컴퓨터의 스토리지 디바이스에 있는지를 나타내는 페이지 폴트 비트(page fault bit)를 포함할 수 있다. 보안 구성 (107)의 허가가 메모리 페이지에 대한 현재 액세스를 허용하고 페이지 폴트 비트가 페이지가 현재 컴퓨터의 메인 메모리에 없음을 나타내면, 메모리 관리 디바이스 (181)는 페이지 테이블 엔트리 (153)에 의해 식별된 페이지에 대한 액세스를 가능하게 하기 위해 스토리지 디바이스로부터 컴퓨터의 메인 메모리로 페이지를 스왑(swap)할 수 있다. 그러나, 보안 구성 (107)의 허가가 현재 실행 도메인의 페이지에 대한 현재 액세스를 거부하는 경우, 페이지 폴트 비트를 평가하거나 및/또는 페이지 테이블 엔트리(153)에 대응하는 페이지에서 스왑할 필요가 없다.
일반적으로, 테이블 ID (143)는 페이지 테이블 (151) 위치를 찾기 위해 사용되는 다수의 필드로 분할될 수 있다. 예를 들어, 테이블 ID (143)는 최상위 페이지 테이블을 식별하는 최상위 테이블 ID와 베이스 (157)를 함유하는 페이지 테이블 엔트리 (153)를 식별하기 위해 페이지 테이블 (151)로 인덱싱되는 엔트리 ID (145)와 유사한 방식으로, 페이지 테이블 (151)의 식별자를 포함하는 페이지 테이블 엔트리를 검색하기 위해 최상위 페이지 테이블에 대한 인덱스로 사용되는 최상위 테이블 엔트리 ID를 포함할 수 있다.
일반적으로, 엔트리 ID (145)는 페이지 테이블 (151)에서 가상 페이지 번호로 간주될 수 있다; 및 가상 페이지 번호 (예를 들어, 145)는 베이스 (157)를 함유하는 페이지 테이블 엔트리 (153)를 조회하기 위해 페이지 테이블 (151)에서 사용될 수 있다.
예를 들어, 테이블 ID (143)는 페이지 테이블 (예를 들어, 151)의체인을 식별하는데 사용될 수 있는 가상 페이지 번호 세트를 포함할 수 있다. 각각의 가상 페이지 번호는 다음 레벨 페이지 테이블 (또는 페이지 디렉토리)의 아이덴티티 또는 베이스를 포함하는 페이지 테이블 엔트리 (또는 페이지 디렉토리 엔트리)를 식별하기 위해 페이지 테이블 (또는 페이지 디렉토리)의 인덱스로 사용된다.
일부 인스턴스에서, 컴퓨터에서 다른 실행중인 프로세스는 다른 가상 어드레스 공간 (예를 들어, 127)을 가질 수 있다; 실행중인 프로세스의 프로세스 ID는 최상위 페이지 테이블 (또는 페이지 디렉터리)을 결정하는데 사용될 수 있다. 일부 인스턴스에서, 가상 어드레스 (141) 일부의 해시, 프로세스 ID 및/또는 컴퓨터 시스템에서 호스팅되는 가상 머신의 아이덴티피케이션을 사용하여 최상위 페이지 테이블 (또는 페이지 디렉토리)을 찾을 수 있다. 일부 인스턴스에서, 해시가 페이지 테이블 엔트리를 조회하기 위한 인덱스 또는 키로 사용된다. 페이지 테이블 엔트리 (153)가 어떻게 위치된 지에 관계없이 (예를 들어, 다수의 페이지 테이블을 통한 인덱싱을 통해, 인덱스 또는 키로 해시를 사용하여) 페이지 테이블 엔트리 (153)의 콘텐츠는 도 7에 예시된 방식으로, 상이한 도메인 (101, 103, …, 105)에 대한 보안 구성 (107)을 제공하여 페이지/메모리 영역 (137) 및/또는 베이스 (157)에 대응하는 메모리 영역 (137)에 저장된 루틴에 액세스하도록 구성될 수 있다.
도 7에서, 페이지 또는 영역 (137)에 대한 보안 구성 (107)은 최하위 레벨(bottom-level) 페이지 테이블 (151)에 지정되며, 여기서, 최하위 레벨 페이지 테이블 (151)의 페이지 테이블 엔트리 (153)는 물리적 어드레스 (159)의 베이스(157)를 제공한다.
대안으로 또는 조합하여, 상위 레벨 페이지 테이블 (또는 페이지 디렉토리)은 페이지 테이블 엔트리 (또는 페이지 디렉토리 엔트리)에 대한 보안 구성을 가질 수도 있다. 예를 들어, 페이지 테이블 (151)을 식별하는 페이지 테이블 엔트리 (또는 페이지 디렉토리 엔트리)는 페이지 테이블 (151)의 모든 페이지에 대한 보안 구성을 가질 수 있다; 따라서, 페이지 테이블 엔트리의 도메인 허가 데이터는 페이지 테이블 (151)에 의해 정의된 메모리 영역에 적용 가능하다. 페이지 테이블 (151)로 이어지는 페이지 테이블 엔트리 체인의 보안 구성 및 최하위 레벨 페이지 테이블 엔트리 (153)의 보안 구성 (107)의 하이어러키는 논리 AND 연산 또는 논리 OR 연산을 통해 조합될 수 있다.
예를 들어, 도메인 (예를 들어, 101, 103, …, 105)에서 실행되는 루틴은 최하위 레벨 테이블 엔트리 (153)을 포함하여 베이스 (157)로 이어지는 페이지 테이블 엔트리 체인의 모든 허가 비트가 액세스를 허용하는 값을 갖는 경우, 베이스 (157)에 의해 식별된 페이지에 액세스하도록 허용될 수 있다. 대안으로, 도메인 (예를 들어, 101, 103, …, 105)에서 실행되는 루틴은 최하위 레벨 테이블 엔트리 (153)을 포함하여 베이스 (157)로 이어지는 페이지 테이블 엔트리 체인의 임의의 허가 비트가 액세스를 허용하는 값을 갖는 경우, 베이스 (157)에 의해 식별된 페이지에 액세스하도록 허용될 수 있다.
예를 들어, 도메인 (예를 들어, 101, 103, …, 105)에서 실행중인 루틴은 최하위 레벨 테이블 엔트리 (153)을 포함하여 베이스(157)로 이어지는 페이지 테이블 엔트리의 체인의 임의의 허가 비트가 액세스를 거부하는 값을 경우, 베이스 (157)에 의해 식별된 페이지에 대한 액세스가 거부될 수 있다. 대안으로, 도메인 (예를 들어, 101, 103, …, 105)에서 실행되는 루틴은 최하위 테이블 엔트리 (153)를 포함하는 베이스 (157)로 이어지는 페이지 테이블 엔트리의 체인의 모든 허가 비트가 액세스를 거부하는 값을 갖는 경우에만, 베이스(157)에 의해 식별된 페이지에 대한 액세스를 거부할 수 있다.
예를 들어, 최하위 레벨이 아닌 페이지 테이블 엔트리 (또는 페이지 디렉토리 엔트리)가 메모리 액세스가 금지된 것을 나타낼 때, 가상 어드레스 (141)에서 물리적 어드레스 (159)로 변환하는 동작은 가상 어드레스 (141)와 관련된 메모리 액세스를 거부하기 위해 중단될 수 있다. 거부에 대한 응답으로, 거부를 핸들링하도록 지정된 소프트웨어에 대한 트랩(trap)이 사용된다.
예를 들어, 보안 구성 (107)은 도메인 세트 (101, 103, …, 105) 각각에 대한 샌드 박스 설정 비트 세트 (예를 들어, 111, 113, …, 115)를 포함할 수 있다. 도메인 레지스터 (117)의 현재 도메인 (123)에 해당하는 샌드 박스 설정 비트 (예를 들어, 111, 113, … 또는 115)가 제 1 값 (예를 들어, 1 또는 0)을 갖도록 설정되면, 현재 도메인 (123)의 루틴에서 영역 (137)에 저장된 호출된 루틴 (135)으로의 현재 호출은 호출 루틴과 호출된 루틴 (135)을 서로로부터 보호하기 위해 샌드 박싱 동작을 사용하도록 구현된다 (예를 들어, 섀도우 스택을 사용하여 스택 사용에서 호출자(caller)와 피호출자(callee)를 분리한다). 도메인 레지스터 (117)의 현재 도메인 (123)에 해당하는 샌드 박스 설정 비트 (예를 들어, 111, 113, … 또는 115)가 제 2 값 (예를 들어, 0 또는 1)을 갖도록 설정되면, 현재 도메인 (123)의 루틴에서 메모리 영역 (123)에 저장된 호출된 루틴 (135)으로의 호출은 호출자와 피 호출자를 서로 격리하기 위해 (예를 들어, 섀도우 스택을 사용하지 않고) 샌드 박스 동작을 사용하지 않고 구현된다.
옵션으로, 보안 구성 (예를 들어, 107)은 상위 레벨 페이지 테이블 (디렉토리)가 아니라, 최하위 레벨 페이지 테이블 (151)에 지정된다.
도 8은 보안 동작을 제어하는 도메인 레지스터 (117)를 갖는 컴퓨터 시스템을 도시한다.
예를 들어, 도 8의 컴퓨터 시스템은 도 1 및 도 6에 도시된 미리 정의된 도메인 (101, 103, …, 105)의 루틴에 의해 도 7의 페이지 테이블 엔트리 (153)에 의해 식별되는 메모리 영역에 액세스하기 위한 보안 구성 (107)을 저장하는 페이지 테이블 (예를 들어, 151)을 옵션으로 가질 수 있다. 추가로, 도 8의 컴퓨터 시스템은 도메인 교차를 가능하게 하고 보안하기 위해 도 1 및 2의 도메인 액세스 테이블 (217, …, 227)을 옵션으로 가질 수 있다.
예를 들어, 도 8의 컴퓨터 시스템은 도 1 및 도 6에 도시된 미리 정의된 도메인 (101, 103, …, 105)에 대한 권한있는 레지스터 (133)에 액세스하기 위한 보안 구성 (107)을 저장하는 하나 이상의 허가 레지스터를 가질 수 있다.
프로세서 (169)의 도메인 레지스터 (117)는 현재 도메인 (123)의 식별자를 저장한다. 도메인 레지스터 (117)의 콘텐츠는 현재 도메인 (123)에 대응하는 보안 구성 (107)의 적용 가능한 설정 세트를 선택한다.
도 8의 컴퓨터 시스템은 하나 이상의 버스 (163)를 통해 메모리 시스템 (161)에 결합된 호스트 시스템 (165)을 갖는다. 메모리 시스템 (161)은 메모리 컴포넌트 (171, …, 173)를 갖는다.
예를 들어, 버스 (163)는 하나 이상의 메모리 모듈에 연결되는 메모리 버스를 포함할 수 있고 및/또는 하나 이상의 스토리지 디바이스에 연결되는 주변 인터넷을 포함할 수 있다. 일부 메모리 컴포넌트 (171, …, 173)는 랜덤 액세스를 제공할 수 있다; 일부 메모리 컴포넌트 (171, …, 173)는 영구 스토리지 성능을 제공할 수 있다. 일부 메모리 컴포넌트 (171, …, 173)는 메모리 컴포넌트에 대한 전원 공급이 일시적으로 차단될 때, 메모리 컴포넌트에 저장된 데이터가 손상 및/또는 소거된다는 점에서 휘발성일 수 있다. 일부 메모리 컴포넌트 (171, …, 173)는 메모리 컴포넌트가 전력없이 장기간 저장된 콘텐츠를 보유할 수 있다는 점에서 비 휘발성일 수 있다.
일반적으로, 메모리 시스템 (161)은 또한 메모리 디바이스로 지칭될 수 있다. 메모리 디바이스의 예로는 메모리 버스를 통해 중앙 프로세싱 유닛 (CPU)에 연결된 메모리 모듈이 있다. 메모리 모듈의 예는 듀얼 인라인 메모리 모듈 (DIMM), 소형 아웃 라인 DIMM (SO-DIMM), 비 휘발성 듀얼 인라인 메모리 모듈 (NVDIMM) 등을 포함한다. 메모리 디바이스의 또 다른 예는 주변 상호 연결 (예를 들어, 입력/출력 버스, 스토리지 영역 네트워크)을 통해 중앙 프로세싱 유닛 (CPU)에 연결된 스토리지 디바이스이다. 저장 디바이스의 예는 SSD (Solid-State Drive), 플래시 드라이브, USB (Universal Serial Bus) 플래시 드라이브 및 HDD (하드 디스크 드라이브)를 포함한다. 일부 인스턴스에서, 메모리 디바이스는 메모리 기능과 저장 기능 둘 모두를 제공하는 하이브리드 메모리/스토리지 시스템이다.
메모리 컴포넌트 (171, …, 173)는 상이한 유형의 비 휘발성 메모리 컴포넌트 및/또는 휘발성 메모리 컴포넌트의 임의의 조합을 포함할 수 있다. 비 휘발성 메모리 컴포넌트의 예는 단일 레벨 셀 (SLC) 또는 멀티 레벨 셀 (MLC) (예를 들어, 트리플 레벨 셀 (TLC) 또는 쿼드 레벨 셀 (QLC))과 같은 하나 이상의 메모리 셀 어레이가 있는 네거티브-앤드(and) (NAND) 유형 플래시 메모리를 포함된다. 일부 인스턴스에서, 특정 메모리 컴포넌트는 메모리 셀의 SLC 부분과 MLC 부분 둘 모두를 포함할 수 있다. 각각의 메모리 셀은 호스트 시스템 (165)에 의해 사용되는 하나 이상의 데이터 비트 (예를 들어, 데이터 블록)를 저장할 수 있다. 대안으로 또는 조합하여, 메모리 컴포넌트 (171, … 또는 173)는 휘발성 메모리의 유형을 포함할 수 있다. 일부 인스턴스에서, 메모리 컴포넌트 (171, … 또는 173)는 RAM (Random Access Memory), ROM (Read-Only Memory), DRAM (Dynamic Random Access Memory), 동기식 동적 랜덤 액세스 메모리 (SDRAM), 상 변화 메모리 (PCM), 자기 랜덤 액세스 메모리 (MRAM), 스핀 전송 토크 (STT)-MRAM, 강유전성 랜덤 액세스 메모리 (FeTRAM), 강유전성 RAM (FeRAM), 전도성 브리징 RAM (CBRAM), 저항성 랜덤 액세스 메모리 (RRAM), 산화물 기반 RRAM (OxRAM), 네거티브-오어(or) (NOR) 플래시 메모리, 전기적 소거 가능 프로그래밍 가능 판독 전용 메모리(EEPROM), 나노 와이어 기반 비 휘발성 메모리, 멤리스터 기술이 통합된 메모리, 및/또는 비 휘발성 메모리 셀의 교차점 어레이를 포함할 수 있지만 이에 한정되지는 않다. 비 휘발성 메모리의 교차점 어레이는 스택형 교차 그리드 데이터 액세스 에레이와 함께 벌크 저항의 변화를 기반으로 비트 저장을 수행할 수 있다. 또한, 많은 플래시 기반 메모리와 달리, 교차점 비 휘발성 메모리는 제 자리에 기록 동작을 수행할 수 있으며, 여기서 비 휘발성 메모리 셀은 비 휘발성 메모리 셀을 미리 삭제하지 않고도 프로그래밍될 수 있다.
일반적으로, 호스트 시스템 (165)은 하나 이상의 메모리 컴포넌트 (171, …, 173)를 포함하는 물리적 메모리 (109)로서 메모리 시스템 (161)을 이용할 수 있다. 호스트 시스템 (165)은 실행을 위해 메모리 시스템 (161)으로부터 명령을 로드하고, 메모리 시스템 (161)에 저장될 데이터를 제공하고, 메모리 시스템 (161)으로부터 검색될 데이터를 요청할 수 있다.
도 8에서, 호스트 시스템 (165)은 메모리 관리 유닛 (MMU) (181) 및 프로세서 (169)를 포함한다. 프로세서 (169)는 산술 논리 유닛과 같은 실행 유닛 (예를 들어, 185)을 갖는다. 프로세서 (169)는 실행을 위한 명령, 명령의 피연산자로서의 데이터, 및/또는 명령 실행의 결과를 홀딩하는 레지스터 (183, 예를 들어, 133)를 갖는다. 프로세서 (169)는 메모리 시스템 (161)의 일부의 프록시로서 내부 캐시 (187)를 가질 수 있다.
일부 인스턴스에서, 호스트 시스템 (165)은 중앙 프로세싱 유닛 (CPU)의 다수의 프로세싱 코어와 동일한 실리콘 다이에 통합된 다수의 프로세서 (예를 들어, 169)를 포함할 수 있다.
프로세서 (169)에서 실행되도록 프로그래밍된 루틴은 초기에 메모리 시스템 (161)에 저장될 수 있다. 루틴은 하이퍼바이저 (102), 운영 체제 (104) 및 애플리케이션 (106)에 대한 명령을 포함할 수 있다. 메모리 시스템 (161)에 초기에 저장된 루틴은 실행 유닛 (185)에서의 실행을 위해 내부 캐시 (187) 및/또는 레지스터 (183, 예를 들어, 133)에 로드될 수 있다.
루틴의 실행 인스턴스는 하이퍼바이저 (102), 운영 체제 (104) 및 애플리케이션 (106)의 실행 (167)을 형성한다. 일부 인스턴스에서, 하이퍼바이저 (102)가 사용되지 않는다; 운영 체제 (104)는 하이퍼바이저 없이 하드웨어 컴포넌트 (예를 들어, 메모리 시스템 (161), 주변 입력/출력 디바이스 및/또는 네트워크 인터페이스 카드)를 제어한다.
하이퍼바이저 (102), 운영 체제 (104) 및/또는 애플리케이션 (106)의 실행 (167)은 하나 이상의 가상 메모리 공간 (예를 들어, 127)에 정의된 가상 메모리 어드레스 (예를 들어, 141)를 사용하여 메모리 (137)에 액세스한다 (예를 들어, 메모리 컴포넌트 (171, …, 173)). 실행에 사용된 가상 메모리 어드레스 (예를 들어, 141)를 메모리 컴포넌트 (예를 들어, 171, …, 173)의 물리적 메모리 어드레스 (예를 들어, 159)로 변환하기 위해 적어도 하나의 페이지 테이블 (151) (예를 들어, 도 7에 예시됨)이 사용될 수 있다.
도 1에 예시된 바와 같이, 하이퍼바이저 (102), 운영 체제 (104) 및 애플리케이션 (106)의 루틴의 실행은 복수의 도메인 (101, 103, …, 105)으로 구조화될 수 있다. 페이지 테이블 엔트리 (153)에 의해 식별되는 각각의 실행 도메인 (101, 103, …, 105) 및 메모리 영역 (137)에 대해, 페이지 테이블 엔트리 (153)는 판독, 기록, 실행 등과 같은 미리 정의된 유형의 동작에서 영역 (137)에 액세스하기 위한 보안 구성 비트 세트 (예를 들어, 111, 113, …,115)를 식별한다. 해당 보안 구성 (예를 들어, 107)의 구성 비트는 각각의 실행 도메인 (예를 들어, 101)으로부터 대응하는 유형의 메모리 액세스를 제어하고 및/또는 호출 루틴 및 호출된 루틴 (예를 들어, 135)을 격리하기 위한 샌드 박싱 동작을 제어한다.
권한있는 레지스터 (133)의 보안 구성 (107)은 별도의 허가 레지스터에 저장될 수 있다. 각각의 허가 레지스터는 도메인 (예를 들어, 101, 103, …, 105)과 미리 연관되어 있다. 허가 레지스터는 해당 도메인 (예를 들어, 101, 103, … 또는 105)에서 권한 레지스터 (133)에 액세스하기 위한 허가 비트를 저장한다. 다른 권한있는 레지스터 (예를 들어, 133)에 대해 권한 레지스터의 다른 허가 비트가 구성될 수 있다. 일부 인스턴스에서, 권한있는 레지스터 (133)는 상이한 유형의 액세스 (예를 들어, 판독, 기록, 실행)에 대한 허가 레지스터에서 다수의 허가 비트를 가질 수 있다.
대안으로, 권한있는 레지스터 (133)에 대한 허가 비트는 동일한 허가 레지스터에 지정될 수 있다. 또한, 상이한 권한있는 레지스터 (예를 들어, 133)에 대한 허가 비트는 동일한 허가 레지스터의 다른 부분에 저장될 수 있다.
도 9는 객체 특정 가상 메모리 어드레스를 변환하는 방법을 도시한다.
예를 들어, 도 9의 방법은 도 1 또는 8의 컴퓨터 시스템에서 수행될 수 있다. 도 9의 방법은 도 2-5 및 7의 어드레스 변환 기술 및/또는 도 6-8의 보안 기술의 조합으로 수행될 수 있다.
블록 (301)에서, 메모리 (109)는 적어도 미리 정의된 도메인 세트 (101, 103, …, 105)의 루틴의 명령을 저장한다.
예를 들어, 미리 정의된 도메인 세트는 하이퍼바이저를 위한 도메인, 운영 체제를 위한 도메인, 애플리케이션을 위한 도메인, 또는 이들의 임의의 조합 중 적어도 하나를 포함할 수 있다.
블록 (303)에서, 메모리 (109)에 결합된 컴퓨터 프로세서 (169)는 복수의 가상 머신에서 루틴을 실행한다.
블록 (305)에서, 컴퓨터 프로세서 (169)는 복수의 가상 머신의 현재 가상 머신에서 그리고 미리 정의된 도메인 (101, 103, …, 105) 중 현재 실행 도메인 (123)에서 가상 어드레스 (195 또는 141)를 사용하는 명령을 실행한다.
예를 들어, 현재 실행 도메인 (123)은 프로세서 (169)의 도메인 레지스터 (117)에 의해 식별될 수 있다; 현재 가상 머신은 프로세서 (169)의 가상 머신 레지스터 (231)에 의해 식별될 수 있다.
도 5에 예시된 바와 같이, 가상 어드레스는 객체 식별자 (199)와 객체 식별자 (199)가 나타내는 객체 내 위치의 오프셋 (196)을 갖는다.
블록 (307)에서, 컴퓨터 프로세서 (169)는 인덱스 (125)를 생성하기 위해 적어도 가상 어드레스 (195 또는 141)에 제공된 객체 식별자 (199)를 해시한다.
블록 (309)에서, 컴퓨터 프로세서 (169)의 메모리 관리 유닛 (MMU) (181)은 인덱스 (125)에서 엔트리 (250)를 어드레스 변환 테이블 (217)로부터 검색하여 가상 어드레스 (195 또는 141)를 물리적 어드레스 (159)로 변환한다.
예를 들어, 컴퓨터 프로세서 (169)는 상이한 도메인 (예를 들어, 101, …, 103) 및/또는 상이한 가상 머신에 대해 별도의 어드레스 변환 테이블 (예를 들어, 217, … 227)을 저장할 수 있다. 도메인 레지스터 (117)의 콘텐츠 및/또는 가상 머신 레지스터 (231)의 콘텐츠는 어드레스 변환 테이블 (217)을 선택하는데 사용될 수 있다.
다른 인스턴스에서, 다른 도메인 (예를 들어, 101, …, 103) 및/또는 다른 가상 머신은 어드레스 변환 테이블 (217)을 공유할 수 있지만 어드레스 변환 테이블 (217)에서 다른 엔트리를 사용할 수 있다. 이러한 인스턴스에서, 도메인 레지스터 (117)의 콘텐츠 및/또는 가상 머신 레지스터 (231)의 콘텐츠는 객체 식별자 (199) 및/또는 오프셋 (196)의 일부와 조합될 수 있으며, 조합은 인덱스 (125)를 생성하기 위해 해시 (121)된다.
인덱스 (125)가 해싱 (121)으로부터 매핑된 서로 다른 값의 충돌에 해당하는 경우, 어드레스 변환 테이블 (217)의 인덱스 (125)에 있는 엔트리 (250)는 해싱(121)의 모호성을 해결할 충돌 체인을 식별할 수 있다.
옵션으로, 가상 어드레스 (예를 들어, 195)의 객체 ID (예를 들어, 199)로 표현되는 객체에 대한 보안 구성 (107)은 도 10에 예시된 바와 같이, 어드레스 변환 테이블 (예를 들어, 217)로부터 조회된 엔트리 (예를 들어, 250)에 지정될 수 있다.
도 10은 가상 어드레스 (195)에 의해 식별된 메모리 위치에 액세스하기 위한 보안 구성 (107)을 식별하는 시스템을 도시한다.
도 10에서, 객체 ID (199)로 식별되는 객체와 관련된 보안 구성 (예를 들어, 107)은 어드레스 변환 테이블 (217)의 엔트리 (예를 들어, 250)에 지정되어 있다. 어드레스 변환 테이블 (217) 또는 연관된 충돌 체인 (260)에서 검색된 각각의 엔트리 (예를 들어, 250)는 객체 ID (199) (또는 객체의 일부)로 식별된 객체를 저장하는 메모리 영역 (137)을 나타내거나 이에 대응한다. 보안 구성 (107)은 객체와 관련된 자원 (131)에 액세스 및/또는 사용하기 위한 보안 설정을 가질 수 있다.
예를 들어, 보안 구성 (107)은 다양한 메모리 동작 예컨대, 객체 ID (199)로 표시되는 객체의 임의의 부분을 판독하는 것, 객체 ID (199)로 표시되는 객체의 임의의 부분에 기록하는 것, 객체의 임의의 부분을 실행 명령으로 로드하는 것, 등을 위해 객체에 액세스할 때 현재 도메인 (123)에서 실행중인 명령의 허가를 지정할 수 있다. 예를 들어, 실행을 위해 객체 ID (199)를 갖는 객체의 루틴을 로드하기 위해 가상 메모리 어드레스 (195)가 사용될 때, 호출 루틴 및 호출된 루틴 (예를 들어, 135)을 격리하기 위한 샌드 박싱 요구 사항을 보안 구성 (107)은 포함할 수 있다.
도 5와 관련하여 상기에서 논의된 바와 같이, 가상 어드레스 (195)는 객체 ID (199), 객체 유형 (198) 및 오프셋 (196)을 포함할 수 있다. 예를 들어, 가상 어드레스 (195)는 128 비트의 폭을 가질 수 있다; 가상 어드레스 (195)의 비트 수 (예를 들어, 59 또는 58)는 객체 ID (199)를 저장하는데 사용될 수 있고, 가상 어드레스 (195)의 다른 비트 수 (예를 들어, 5 또는 6)는 객체 유형 (198)을 저장하는데 사용될 수 있고, 및 가상 어드레스의 나머지 비트 (예를 들어, 64)는 유형 (198) 및 ID (199)를 가진 객체에 대한 오프셋 (196)을 저장하는데 사용될 수 있다. 예를 들어, 가상 어드레스 (195)는 도메인 (예를 들어, 105)에서 루틴의 프로그래머 또는 사용자가 구성, 프로그래밍 및/또는 볼 때 메모리 (109)에 저장된 어드레스일 수 있다.
도 10에서, 인덱스 (125)를 생성하기 위해 객체 ID (199)에 해시 (121)가 적용된다. 인덱스 (125)는 객체 ID (199)보다 비트 수가 적기 때문에, 다수의 아이템이 동일한 인덱스로 해시될 때, 해시 충돌이 발생할 수 있다.
인덱스 (125)에 대한 해시 충돌이 없는 경우, 어드레스 변환 테이블 (217)의 인덱스 (125)에 있는 엔트리 (예를 들어, 213, … 또는 215)는 결과 엔트리 (250)로서 검색될 수 있다.
인덱스 (125)에 대한 해시 충돌이 있을 때, 어드레스 변환 테이블 (217)의 인덱스 (125)에 있는 엔트리 (예를 들어, 213, … 또는 215)는 충돌 체인 (260)을 식별한다. 충돌 체인 (260)은 동일한 인덱스 (125)로 해시된 (121) 객체 ID (예를 들어, 261, 263)에 대한 엔트리 (예를 들어, 262, 264, …)을 보여주는 리스트/체인을 가지고 있다. 충돌 체인 (260)은 해시 (121) 이전의 객체 ID (199)와 일치하는 객체 ID (예를 들어, 261 또는 263)에 대해 지정된 엔트리 (예를 들어, 262 또는 264) 위치를 찾기 위해 검색될 수 있다. 검색된 엔트리 (예를 들어, 262 또는 264)은 결과 엔트리 (250)로 예시된다.
인덱스 (125)를 사용하여 어드레스 변환 테이블 (217)로부터 검색된 전형적인 엔트리 (250)는 어드레스 변환 (235)에서 후속 작업 전에 평가될 수 있는 보안 구성 (107)을 가질 수 있다.
일 실시예에서, 어드레스 변환 테이블 (217)은 도메인 레지스터 (117)에 의해 식별된 현재 도메인 (123)에 대해 지정된다. 도메인 레지스터 (117)는 도 4에 도시된 바와 같이 사용되어, 도 10에 예시된 결과 엔트리(250)를 조회하는 동작에 사용되는 어드레스 변환 테이블 (217)로서 개개의 어드레스 변환 테이블 (예를 들어, 217, … 또는 227)의 테이블 베이스 (예를 들어, 219, … 또는 229)를 선택할 수 있다. 이러한 실시예에서, 보안 구성 (107)은 현재 도메인 (123)에 대한 설정 (111, 113, … 또는 115)을 갖지만 다른 도메인에 대한 설정은 갖지 않는다.
대안으로, 어드레스 변환 테이블 (217)이 특정 도메인 (101, 103, …, 105)에 대해 특정하지 않은 경우, 보안 구성 (107)은 도 6에 예시된 바와 같이, 개별적으로 도메인 (101, 103, …, 105)에 대한 설정 (111, 113, … 및 115)을 포함할 수 있다; 도메인 레지스터 (117)는 현재 도메인 (123)에 해당하는 설정 (예를 들어, 111, 113, … 또는 115)을 선택적으로 적용하는데 사용될 수 있다.
일반적으로, 보안 구성 (107)은 현재 도메인 (123)에서 실행중인 명령이 판독, 기록, 실행 등을 위해 객체 ID (199)를 갖는 객체에 액세스할 수 있는지 여부를 옵션으로 지정할 수 있다. 또한, 보안 구성 (107)은 옵션으로 프로세서 (169)를 실행하는 현재 루틴 및 현재 루틴에 의해 호출되는 객체 ID (199)를 갖는 객체의 루틴을 격리하는 것이 (예를 들어, 섀도우 스택 구조 사용하여) 필요한지 여부를 지정할 수 있다.
일부 인스턴스에서, 보안 구성 (107)은 프로세서 (169)에서 현재 실행중인 임의의 명령에 적용 가능하다. 다른 인스턴스에서, 보안 구성 (107)은 프로세서 (169)의 도메인 레지스터 (117)에 의해 식별된 현재 도메인 (123)에서, 가상 머신 레지스터(231)에 의해 식별되는 현재 가상 머신에서, 프로세스 ID로 식별되는 실행중인 프로그램의 현재 인스턴스, 현재 사용자 계정, 가상 어드레스 (195)에 액세스하기 위해 실행되는 명령을 포함하는 현재 객체 또는 임의의 조합에서 실행되는 임의의 명령에 적용될 수 있다.
엔트리 (250)는 엔트리 (250)가 유효한지 여부를 나타내는 값을 갖는 유효 필드(valid field) (251)를 포함할 수 있다. 엔트리 (250)가 유효하고 보안 구성 (107)이 가상 어드레스 (195)를 사용하여 만들어진 현재 액세스를 허용하면, 프로세서 (169)는 어드레스 변환을 위해 다른 필드를 추가로 평가할 수 있다.
예를 들어, 엔트리 (250)는 엔트리를 이용하여 수행될 변환의 유형을 나타내는 값을 갖는 유형 필드 (253), 페이지 테이블 엔트리의 결정을 위한 메모리 페이지 크기를 나타내는 값을 갖는 페이지 크기 필드 (255), 객체 ID (199)를 갖는 객체의 오프셋 (196)을 물리적 어드레스 (159)로 변환하기 위한 페이지 테이블 또는 페이지 디렉토리의 어드레스를 갖는 어드레스 필드 (257)를 포함하거나 식별할 수 있다. 페이지 테이블 엔트리 (153) (또는 페이지 디렉토리 엔트리)는 페이지 테이블 엔트리 (153) (또는 페이지 디렉토리 엔트리)에 의해 제어/표현되는 메모리 영역 (137)에 대응하는 객체의 일부에 대해 유사한 보안 구성 (107)을 가질 수 있다.
일반적으로, 적용 가능한 보안 구성 (107)은 서로 다른 크기의 메모리 영역에 대해 다수의 위치에 지정될 수 있다. 예를 들어, 어드레스 변환 테이블 (217) 및/또는 충돌 체인 (260)으로부터 검색된 엔트리 (250)는 객체 ID (199)로 표현되는 전체 객체에 적용 가능한 보안 구성 (107)을 지정할 수 있다; 물리적 어드레스 세트 (예를 들어, 159)의 베이스 (157)를 포함하는 페이지 테이블 엔트리 (153)는 베이스 (157)의 물리적 어드레스 세트 (예를 들어, 159)에 적용 가능한 보안 구성 (107)을 지정할 수 있다. 유사하게, 페이지 테이블 (151)을 식별하는 페이지 디렉토리 엔트리는 페이지 테이블 (151)에 의해 정의된 물리적 어드레스의 발송에 적용 가능한 보안 구성을 지정할 수 있다.
적용 가능한 보안 구성 (107)이 서로 다른 크기의 메모리 영역에 대해 다수의 위치에 지정되면, 가장 큰 메모리 영역에 대해 지정된 보안 구성 (107)이 다른 메모리 영역에 대해 지정된 보안 구성 (107)을 대체할 수 있다. 따라서, 메모리 영역 중 가장 큰 영역에 대해 지정된 적용 가능한 보안 구성 (107)이 발견되면, 프로세서 (169)는 다른 메모리 영역에 대해 지정된 보안 구성 (107)의 처리를 스킵할 수 있다.
대안으로, 적용 가능한 보안 구성 (107)이 서로 다른 크기의 메모리 영역에 대해 다수의 위치에 지정될 때, 메모리 영역 중 가장 작은 메모리 영역에 대해 지정된 보안 구성 (107)은 다른 메모리 영역에 대해 지정된 보안 구성 (107)을 대체할 수 있다.
대안으로, 적용 가능한 보안 구성 (107)이 서로 다른 크기의 메모리 영역에 대해 다수의 위치에서 지정될 수 있는 경우, 적용 가능한 메모리 영역의 보안 구성 (107) 중 임의의 것에 지정된 액세스에 대한 금지는 액세스 요청이 거부되는 것을 유발할 수 있다.
어드레스 변환 테이블 (217)의 엔트리 (250)에 제공된 어드레스 (257)는 페이지 테이블 또는 페이지 디렉토리의 메모리 어드레스일 수 있다. 오프셋 (196)의 적어도 일부는 가상 페이지 번호 및 페이지 테이블 또는 페이지 디렉터리의 인덱스로 사용되어 다음 페이지 테이블 또는 페이지 디렉터리를 조회할 수 있다. 일부 인스턴스에서, 오프셋 (196)의 일부가 해시되어 페이지 테이블 또는 페이지 디렉토리에 대한 인덱스를 생성하여 다음 페이지 테이블 또는 페이지 디렉토리를 조회한다. 다음 페이지 테이블 또는 페이지 디렉토리를 조회하는 프로세스는 오프셋 (196)에서 마지막 가상 페이지 번호를 사용하여 조회된 엔트리가 페이지 테이블 엔트리 (예를 들어, 도 7에 도시된 153) 위치를 찾는데 사용될 때까지 반복될 수 있다. 페이지 테이블 엔트리 (153)에서 식별된 물리적 메모리 페이지의 베이스 (157)는 오프셋 (196)의 나머지 부분 (예를 들어, 도 7에 예시된 오프셋 (147)과 같이)과 조합되어 물리적 어드레스 (예를 들어, 도 7에 예시된 159)를 생성할 수 있다.
도 5와 관련하여 상기에서 논의된 바와 같이, 해시 (121)는 객체 ID (199), 옵션으로 객체 유형 (198), 오프셋의 일부, 가상 머신 레지스터 (231)의 콘텐츠 및/또는 다른 정보 예컨대, 프로세서 (169)에서 실행중인 현재 프로세스의 프로세서 ID 및/또는 도메인 레지스터 (117)의 콘텐츠의 조합에 적용될 수 있다. 일부 인스턴스에서, 도메인 레지스터 (117)의 콘텐츠 및/또는 가상 머신 레지스터 (231)의 콘텐츠는 인덱스 (125)를 생성하기 위해 해시 (121)의 결과에 첨부/추가될 수 있다.
도 11은 가상 어드레스 (195)를 사용하여 이루어진 메모리 액세스를 위한 보안 파라미터를 예시한다.
예를 들어, 도 11에 예시된 보안 구성 (107)의 보안 파라미터는 도 10에 도시된 어드레스 변환 테이블 (217) 및/또는 그와 연관된 충돌 체인 (260)으로부터 검색된 엔트리에도 지정될 수 있다.
도 10에서, 프로세서 (169)가 메모리 위치에 액세스하기 위해 가상 어드레스 (195)를 사용할 때, 프로세서 (169)는 보안 구성 (107)을 식별한다 (예를 들어, 도 10에 예시된 기술을 사용함). 보안 구성 (107)은 경계 체크 필드 (bound check field) (331)를 가질 수 있다.
보안 구성 (107)은 가상 어드레스 (195)의 오프셋 (196)에 대한 경계 체크를 수행 (322)하기 위한 요구 사항을 식별하는 경계 체크 필드 (331)를 가질 수 있다. 경계 체크 필드 (331)가 미리 결정된 값 (예를 들어, 1)을 가질 때, 프로세서 (169)는 오프셋 (196)이 객체 길이 (333)에 의해 정의된 유효한 오프셋의 경계에 있는지 여부를 결정하기 위해 객체 길이 (333)와 오프셋 (196)을 비교한다. 예를 들어, 오프셋 (196)이 객체 길이 (333)보다 크면, 프로세서 (169)는 메모리 액세스를 거부할 수 있다; 거부에 대한 응답으로, 거부를 처리하도록 지정된 소프트웨어에 대한 트랩을 사용할 수 있다. 경계 체크 필드 (331)가 다른 미리 결정된 값 (예를 들어, 0)을 가질 때, 프로세서 (169)는 오프셋 (196)에 대한 경계 체크 수행을 스킵하고 (323) 및/또는 객체 길이를 무시할 수 있다 (333).
보안 구성 (107)은 보안 구성 (107)에 지정된 허가 (343, 345, …, 347)을 강제하기 위한 요구 사항을 식별하는 허가 체크 필드(permission check field) (341)를 가질 수 있다. 허가 체크 필드 (341)가 미리 정해진 값 (예를 들어, 1)을 갖는 경우, 프로세서 (169)는 가상 어드레스 (195)를 통해 요청된 메모리 동작 유형에 대응하는 허가 비트 (예를 들어, 343, 345, …, 347)를 확인한다. 예를 들어, 메모리 판독 동작을 일으키는 명령에 가상 어드레스 (195)가 사용되면, 판독 허가 (343)가 확인된다. 메모리 기록 동작을 일으키는 명령에 가상 어드레스 (195)가 사용되면, 기록 허가 (345)가 확인된다. 메모리 위치에서 명령의 실행을 유발하는 명령에 가상 어드레스 (195)가 사용되면, 실행 허가 (347)가 확인된다. 개별 허가 비트가 가상 어드레스 (195)를 통해 요청된 현재 메모리 액세스 유형을 금지하는 경우, 프로세서 (169)는 메모리 액세스를 거부할 수 있다; 거부에 대한 응답으로 거부를 처리하도록 지정된 소프트웨어에 대한 트랩을 사용할 수 있다. 그러나, 허가 체크 필드 (341)가 다른 미리 결정된 값 (예를 들어, 0)을 갖는 경우, 프로세서 (169)는 허가 (343, 345, …, 347)를 강제하지 않고 가상 어드레스 (195)의 어드레스 변환 (236)을 진행할 수 있다.
옵션으로, 프로세서 (169)는 현재 객체의 명령이 프로세서 (169)에서 실행 중일 때 현재 객체의 객체 ID를 저장하는 객체 레지스터 (321)를 포함할 수 있다. 예를 들어, 실행을 위해 객체 ID (199)를 갖는 객체의 명령을 로드하기 위해 가상 어드레스 (195)가 사용되는 경우, 객체 레지스터 (321)는 객체 ID (199)를 갖는 객체의 명령 실행 중에 객체 ID (199)를 저장한다.
옵션으로, 가상 어드레스 (195)가 메모리에 액세스하는데 사용될 때, 보안 구성 (107)은 객체 ID (199)를 가진 객체에 액세스하기 위해 객체 레지스터 (321)에 의해 식별된 객체에 대한 허가 (예를 들어, 343, 345, …, 347)을 포함할 수 있다. 예를 들어, 엔트리 (250)를 통해 식별된 보안 구성 (107)은 객체 세트에 대한 허가 테이블을 포함할 수 있다. 허가 테이블로부터, 프로세서는 객체 레지스터로 식별된 객체에 지정된 허가를 조회할 수 있다. 허가 테이블은 어드레스 변환 테이블로부터 엔트리 (250) 위치를 찾기 위해 해시 (121)를 사용하는 것과 유사한 방식으로 객체 ID의 해시를 사용하여 객체에 지정된 허가를 조회할 수 있다.
일부 구현예에서, 허가 테이블이 주어진 객체에 대한 허가를 지정하지 않을 때, 디폴트 허가 (예를 들어, 343, 345, …, 347)는 가상 어드레스(195)를 사용하여 메모리 액세스 요청을 하는 객체에 대해 사용될 수 있다. 다른 구현예에서, 허가 테이블이 주어진 객체에 대한 허가를 지정하지 않으면 메모리 액세스가 거부된다. 추가 구현예에서, 디폴트 허가 (예를 들어, 343, 345, …, 347) 및/또는 허가 테이블이 액세스를 금지하는 허가 비트를 가지지 않는 한, 메모리 액세스가 허용된다.
옵션으로, 보안 구성 (107)은 가상 어드레스 (195)에 의해 식별된 메모리 위치에 저장된 데이터의 암호화 동작을 위한 키 (335)를 포함할 수 있다. 예를 들어, 메모리 위치에 저장된 아이템은 암호화되거나 스크램블(scramble)된 형식일 수 있다; 키 (335)는 데이터 아이템을 복호화하거나 언스크램블링(unscramble)하는데 사용될 수 있다. 프로세서 (169) 내에서 데이터를 보호하는 일부 예와 세부 사항은 "컴퓨터 프로세서의 데이터 보호"라는 제목으로 2018 년 8 월 3 일에 출원된 미국 특허 일련 번호 16/054,913 및 "컴퓨터 프로세서의 키 관리"라는 제목으로 2018 년 9 월 18 일에 출원된 미국 특허 출원 일련 번호 16/134,387에서 찾아질 수 있고, 이들 출원의 전체 개시가 본 출원에 참조로 통합된다.
옵션으로, 보안 구성 (107)은 객체 ID (199)를 갖는 객체에 대한 샌드 박스 설정을 포함할 수 있다. 샌드 박스 설정이 미리 결정된 값을 가질 때, 가상 어드레스 (195)를 통해 호출된 루틴은 섀도우 스택 구조를 사용하여 호출 루틴과 격리되어야 하며, 여기서 호출 루틴과 호출된 루틴에 대해 별도의 호출 스택이 사용된다; 그렇지 않으면, 동일한 호출 스택을 사용하여 호출 루틴과 호출된 루틴을 실행할 수 있다. 섀도우 스택 구조에 대한 일부 세부 사항과 예는 "실행 도메인에 대한 페이지 테이블 엔트리의 보안 구성"이라는 제목으로 2018 년 8 월 30 일에 출원된 미국 특허 출원 일련 번호 62/724,913에서 찾아질 수 있고, 이 출원의 전체 개시는 본 출원에 참조로 통합된다.
도 12는 가상 어드레스를 사용하여 이루어진 메모리 액세스 요청에 응답하여 보안 동작을 수행하는 방법을 도시한다.
예를 들어, 도 12의 방법은 도 1 또는 도 8의 컴퓨터 시스템에서 수행될 수 있다. 도 9의 방법은 도 2 - 5, 7, 및 9의 어드레스 변환 기술 및/또는 도 6 - 8 및 10 - 11의 보안 기술의 조합으로 수행될 수 있다.
블록 (351)에서, 컴퓨터 시스템 (예를 들어, 도 1 또는 8에 예시된)은 적어도 미리 정의된 도메인 세트 (예를 들어, 101, 103, …, 105)의 루틴의 명령을 메모리 (109)에 저장한다. 도메인 (예를 들어, 101, 103, …, 105)에는 미리 정의된 신뢰 레벨 및/또는 하이어러키가 없다.
블록 (353)에서, 컴퓨터 시스템의 프로세서 (169)는 미리 정의된 도메인 (예를 들어, 101, 103, …, 105) 중 현재 실행 도메인 (123)에서 가상 어드레스 (예를 들어, 195 또는 141)를 사용하는 명령을 실행한다. 가상 어드레스 (195)는 객체 식별자 (199)와 객체 식별자 (199)에 의해 표현된 객체 내 위치의 오프셋 (196)을 갖는다. 가상 어드레스 (195)는 메모리 (109)로부터 로드되는 루틴에 프로그래밍되고 저장될 수 있다.
블록 (355)에서, 프로세서 (169)는 도메인 세트 (예를 들어, 101, 103, …, 105) 중에서 현재 실행 도메인 (123)에 대응하는 테이블 (217)을 식별한다. 예를 들어, 도 4에 예시된 기술은 현재 실행 도메인 (123)의 식별자를 저장하는 도메인 레지스터 (117)를 사용하여 테이블 (217)을 식별하는데 사용될 수 있다.
블록 (357)에서, 프로세서 (169)는 인덱스 (125)를 생성하기 위해 적어도 가상 어드레스 (195)에 제공된 객체 식별자 (199)를 해시 (121)한다.
블록 (359)에서, 프로세서 (169)는 인덱스 (125)를 사용하여 엔트리 (250)를 테이블 (217)로부터 검색한다. 엔트리 (250)는 객체 식별자 (199)에 의해 표현된 객체에 특정한 보안 구성 (107)을 포함하거나 식별한다.
블록 (359)에서, 프로세서 (169)는 보안 구성 (250)에 기초하여 가상 어드레스 (195)를 사용하는 명령의 실행을 통해 이루어진 메모리 액세스를 보호한다.
일 예에서, 보안 구성 (250)은 객체 길이 (333)를 식별하고; 프로세서 (169)는 오프셋 (196)을 객체 길이 (333)와 비교하여 가상 어드레스 (195)를 사용하는 명령의 실행으로 인한 메모리 액세스가 거부되어야 하는지 여부를 결정한다. 예를 들어, 오프셋 (196)이 객체 길이 (333)에 의해 식별된 경계를 초과한다는 결정에 응답하여, 프로세서는 가상 어드레스 (195)와 연관된 메모리 액세스 요청을 거부할 수 있다.
일부 구현예에서, 보안 구성 (250)은 바운드 체크 필드 (331)를 포함한다.바운드 체크 필드 (331)가 미리 결정된 값 (예를 들어, 1 또는 0)을 가질 때, 프로세서 (169)는 바운드 체크 (323)를 위해 오프셋 (196)을 객체 길이 (333)와 비교하고; 그렇지 않으면, 프로세서 (169)는 오프셋 (196)과 객체 길이 (333)의 비교를 스킵할 수 있다.
다른 예에서, 보안 구성은 현재 실행 도메인 (123)에 대한 메모리 액세스 유형에 대한 허가 비트 (예를 들어, 343, 345, … 또는 347)를 포함한다. 프로세서 (169)는 허가 비트의 값에 따라 가상 어드레스 (195)와 관련된 메모리 액세스 요청을 거부할 수 있다. 예를 들어, 허가 비트 (예를 들어, 343, 345, …, 347)를 미리 정해진 값 (예를 들어, 1 또는 0)으로 설정하여 도메인 세트(101, 103, …, 105) 중 현재 실행 도메인 (123)에 대한 메모리 액세스 유형을 금지할 수 있다; 허가 비트(예를 들어, 343, 345, … 또는 347)의 다른 값은 메모리 액세스 유형을 금지하지 않는다. 메모리 액세스 유형의 예는 가상 어드레스로부터 데이터 판독, 가상 어드레스에 데이터 기록, 가상 어드레스에 저장된 명령 실행 또는 임의의 조합을 포함한다.
일부 구현예에서, 보안 구성 (250)은 허가 체크 파일 (341)을 포함한다. 허가 체크 필드 (341)가 미리 결정된 값 (예를 들어, 1 또는 0)을 가질 때, 프로세서 (169)는 허가 비트 (예를 들어, 343, 345, …, 또는 347)를 확인하고; 그렇지 않으면, 프로세서 (169)는 허가 비트 (예를 들어, 343, 345, … 또는 347) 체크를 스킵할 수 있다.
추가 예에서, 보안 구성은 가상 메모리 어드레스 (195)에서 메모리 (109)에 저장된 아이템에 대한 암호화 동작을 위한 키 (335)를 포함하거나 식별한다. 예를 들어, 아이템은 암호화되거나 스크램블링된 형식으로 저장될 수 있다; 키 (335)는 명령 실행 중에 계산을 위해 아이템을 복호화하는데 사용되고 및/또는 명령 실행 결과는 가상 메모리 어드레스 (195)에서 메모리 (109)에 저장하기 위한 키 (335)에 따라 암호화된다.
또 다른 예에서, 보안 구성은 샌드 박스 설정을 포함한다. 가상 어드레스가 호출 루틴의 명령에 의해 호출된 호출된 루틴의 메모리 위치를 식별하면, 프로세서 (169)는 샌드 박스 설정에 따라 호출 루틴의 실행과 호출된 루틴의 실행을 선택적으로 격리할 수 있다. 예를 들어, 샌드 박스 설정이 미리 결정된 값을 가질 때, 프로세서 (169)는 호출 루틴과 호출된 루틴에 대해 별도의 호출 스택을 사용한다; 그렇지 않으면, 프로세서 (169)는 호출 루틴의 실행 및 호출된 루틴의 실행을 위해 동일한 호출 스택을 사용할 수 있다.
본 출원에 개시된 기술은 적어도 프로세서가 메모리로부터 분리되고 프로세서가 통신 버스 및/또는 컴퓨터 네트워크를 통해 메모리 및 스토리지 디바이스와 통신하는 컴퓨터 시스템에 적용될 수 있다. 추가로, 본 출원에 개시된 기술은 프로세싱 능력이 메모리/스토리지 내에 통합되는 컴퓨터 시스템에 적용될 수 있다. 예를 들어, 전형적인 프로세서의 실행 유닛 및/또는 레지스터를 포함하는 프로세싱 회로는 메모리 디바이스 내에서 프로세싱을 수행하기 위해 메모리 매체의 집적 회로 및/또는 집적 회로 패키지 내에서 구현될 수 있다. 따라서, 상기에서 논의되고 도면에 도시된 프로세서 (예를 들어, 101)는 폰 노이만 아키텍처(von Neumann architecture)의 중앙 프로세싱 유닛일 필요는 없다. 프로세서는 폰 노이만 아키텍처에 따라 별도로 구성된 메모리와 중앙 프로세싱 유닛 사이의 데이터 이동 레이턴시로 인한 스루풋 제한의 결과로 컴퓨팅 성능을 제한하는 폰 노이만 병목 현상(bottleneck)을 극복하기 위해 메모리 내에 통합된 유닛일 수 있다.
본 개시의 설명 및 도면은 예시적이며 한정하는 것으로 해석되어서는 안 된다. 철저한 이해를 제공하기 위해 수많은 특정 세부 사항이 설명되어 있다. 그러나, 일부 인스턴스에서는, 설명을 모호하게 하는 것을 피하기 위해 잘 알려져 있거나 통상적인 세부 사항은 설명되지 않는다. 본 개시의 하나 또는 실시예에 대한 언급은 반드시 동일한 실시예에 대한 언급은 아니다; 그리고 그러한 언급은 적어도 하나를 의미한다.
전술한 명세서에서, 본 개시는 구체적인 예시적인 실시예들을 참조하여 설명되었다. 이하의 청구 범위에 설명된 보다 넓은 취지 및 범위를 벗어나지 않고 다양한 수정이 이루어질 수 있음이 명백할 것이다. 따라서, 명세서 및 도면은 제한적인 의미가 아닌 예시적인 의미로 간주되어야 한다.

Claims (20)

  1. 컴퓨터 시스템에 있어서,
    적어도 복수의 미리 정의된 도메인의 루틴의 명령을 저장하도록 구성된 메모리; 및
    상기 메모리와 결합되고, 상기 루틴을 실행하도록 구성된 프로세서;를 포함하되,
    현재 실행 도메인에서 명령의 실행에 사용되는 가상 어드레스는 객체 식별자(object identifier) 및 상기 객체 식별자에 의해 표현되는 객체 내의 위치의 오프셋(offset)을 포함하고; 및
    상기 프로세서에서 상기 명령의 실행에 사용되는 상기 가상 어드레스에 응답하여 상기 프로세서는 상기 현재 실행 도메인에 대한 상기 객체의 보안 구성(security configuration)을 식별하도록 추가로 구성된, 컴퓨터 시스템.
  2. 제 1 항에 있어서, 상기 프로세서는 적어도 상기 객체 식별자를 인덱스(index)로 해시(hash)하고 상기 인덱스를 상기 현재 실행 도메인에 대한 어드레스 변환 테이블에 적용하여 상기 보안 구성을 검색하도록 구성된, 컴퓨터 시스템.
  3. 제 2 항에 있어서, 상기 복수의 미리 정의된 도메인은 하이퍼바이저(hypervisor)를 위한 도메인, 운영 체제를 위한 도메인, 또는 애플리케이션을 위한 도메인, 또는 이들의 임의의 조합 중 적어도 하나를 포함하고; 상기 도메인은 미리 정의된 신뢰 레벨을 가지고 있지 않고; 상기 가상 어드레스는 상기 메모리로부터 로드된 루틴에 프로그래밍되고 저장되는, 컴퓨터 시스템.
  4. 제 3 항에 있어서, 상기 보안 구성은 객체 길이를 식별하고; 상기 프로세서는 오프셋을 상기 객체 길이와 비교하도록 더 구성된, 컴퓨터 시스템.
  5. 제 4 항에 있어서, 상기 프로세서는 상기 오프셋이 상기 객체 길이에 의해 식별된 경계(bound)를 초과한다는 결정에 응답하여 상기 가상 어드레스와 연관된 메모리 액세스 요청을 거부하도록 구성된, 컴퓨터 시스템.
  6. 제 4 항에 있어서, 상기 보안 구성은 필드(field)를 포함하고; 상기 프로세서는 제 1 미리 결정된 값을 갖는 필드에 응답하여 상기 오프셋을 상기 객체 길이와 비교하도록 더 구성된, 컴퓨터 시스템.
  7. 제 6 항에 있어서, 상기 프로세서는 상기 제 1 미리 결정된 값과 상이한 제 2 미리 결정된 값을 갖는 필드에 응답하여 상기 오프셋을 상기 객체 길이와 비교하는 것을 스킵(skip)하도록 더 구성된, 컴퓨터 시스템.
  8. 제 4 항에 있어서, 상기 보안 구성은 상기 현재 실행 도메인에 대한 메모리 액세스 유형에 대한 허가 비트(permission bit)를 포함하고; 상기 프로세서는 상기 허가 비트의 값에 기초하여 상기 가상 어드레스와 연관된 메모리 액세스 요청을 거부하도록 더 구성된, 컴퓨터 시스템.
  9. 제 8 항에 있어서, 상기 메모리 액세스 유형은 상기 가상 어드레스로부터 데이터를 판독하거나, 상기 가상 어드레스에 데이터를 기록하거나, 상기 가상 어드레스에 저장된 명령을 실행하거나, 이들의 임의의 조합인, 컴퓨터 시스템.
  10. 제 8 항에 있어서, 상기 보안 구성은 필드를 포함하고; 상기 프로세서는 제 1 미리 결정된 값을 갖는 필드에 응답하여 상기 허가 비트를 체크하도록 더 구성된, 컴퓨터 시스템.
  11. 제 10 항에 있어서, 상기 프로세서는 상기 제 1 미리 결정된 값과 상이한 제 2 미리 결정된 값을 갖는 상기 필드에 응답하여 상기 허가 비트의 체크를 스킵하도록 구성된, 컴퓨터 시스템.
  12. 제 4 항에 있어서, 상기 보안 구성은 상기 가상 메모리 어드레스에 저장된 아이템(item)에 대한 암호화 동작을 위한 키(key)를 포함하는, 컴퓨터 시스템.
  13. 제 4 항에 있어서, 상기 가상 어드레스는 호출 루틴(calling routine)의 명령에 의해 호출되는 호출된 루틴(called routine)의 메모리 위치를 식별하고; 상기 보안 구성은 설정(setting)을 포함하고; 상기 프로세서는 상기 설정에 기초하여 상기 호출 루틴의 실행 및 상기 호출된 루틴의 실행을 격리하도록 구성된, 컴퓨터 시스템.
  14. 제 13 항에 있어서, 상기 프로세서는 상기 설정이 제 1 미리 결정된 값을 가질 때 상기 호출 루틴 및 상기 호출된 루틴에 대해 별도의 호출 스택(call stack)을 사용하도록 구성된, 컴퓨터 시스템.
  15. 제 3 항에 있어서, 상기 프로세서는 상기 도메인 중 상기 현재 실행 도메인의 식별자에 따라 상기 어드레스 변환 테이블의 테이블 베이스(table base)를 선택하도록 구성된, 컴퓨터 시스템.
  16. 제 15 항에 있어서, 상기 어드레스 변환 테이블의 인덱스에서의 엔트리(entry)는 페이지 테이블 또는 페이지 디렉토리의 물리적 어드레스를 지정하도록 구성되고; 상기 프로세서는 상기 가상 어드레스를 물리적 어드레스로 변환하기 위해 상기 페이지 테이블 또는 페이지 디렉토리를 사용하도록 더 구성된, 컴퓨터 시스템.
  17. 방법에 있어서,
    적어도 복수의 미리 정의된 도메인의 루틴의 명령을 메모리에 저장하는 단계;
    상기 메모리에 결합된 프로세서에 의해 상기 미리 정의된 도메인 중 현재 실행 도메인에서 가상 어드레스를 사용하는 명령을 실행하는 단계로서, 상기 가상 어드레스는 객체 식별자와 상기 객체 식별자에 의해 표현된 상기 객체 내 위치의 오프셋을 갖도록 구성된, 상기 실행하는 단계; 및
    상기 프로세서에서 명령의 실행에 사용되는 상기 가상 어드레스에 응답하여 상기 현재 실행 도메인에 대한 상기 객체의 보안 구성을 프로세서에 의해 식별하는 단계를 포함하는, 방법.
  18. 제 17 항에 있어서,
    상기 현재 실행 도메인을 기반으로 테이블을 식별하는 단계;
    인덱스를 생성하기 위해 적어도 상기 가상 어드레스에 제공된 객체 식별자를 해싱하는 단계(hashing); 및
    상기 인덱스에서 엔트리를 상기 테이블로부터 검색하는 단계로서, 상기 엔트리는 상기 보안 구성을 함유하는, 상기 검색하는 단계를 더 포함하는, 방법.
  19. 컴퓨터 프로세서에 있어서,
    복수의 미리 정의된 도메인의 명령을 실행하도록 구성된 적어도 하나의 실행 유닛; 및
    상기 미리 정의된 도메인 중 현재 실행 도메인에서 명령을 수행하는 동안 가상 어드레스를 물리적 어드레스로 변환하는 메모리 관리 유닛을 포함하되, 상기 가상 어드레스는 객체 식별자 및 상기 객체 식별자에 의해 표현된 상기 객체 내의 위치의 오프셋으로 구성되고;
    상기 메모리 관리 유닛은 현재 실행 도메인에 기초하여 테이블을 식별하도록 구성되고, 상기 프로세서로부터 상기 명령의 실행에 사용되는 상기 가상 어드레스에 응답하여 상기 현재 실행 도메인에 대한 상기 객체의 보안 구성을 상기 테이블로부터 수신하도록 구성된, 컴퓨터 프로세서.
  20. 제 19 항에 있어서, 상기 메모리 관리 유닛은 상기 인덱스를 생성하고 상기 인덱스를 사용하여 엔트리를 검색하기 위해 상기 가상 어드레스에 제공된 적어도 상기 객체 식별자를 해시하도록 구성되고; 상기 엔트리는 상기 객체의 보안 구성을 식별하는, 컴퓨터 프로세서.
KR1020217008284A 2018-08-30 2019-08-23 객체 특정 가상 어드레스 공간으로부터 물리적 어드레스 공간으로의 메모리 어드레스 변환을 위한 보안 구성 KR20210035911A (ko)

Applications Claiming Priority (17)

Application Number Priority Date Filing Date Title
US201862724999P 2018-08-30 2018-08-30
US201862724896P 2018-08-30 2018-08-30
US201862724913P 2018-08-30 2018-08-30
US201862725030P 2018-08-30 2018-08-30
US201862724929P 2018-08-30 2018-08-30
US201862725092P 2018-08-30 2018-08-30
US62/724,929 2018-08-30
US62/725,092 2018-08-30
US62/725,030 2018-08-30
US62/724,913 2018-08-30
US62/724,999 2018-08-30
US62/724,896 2018-08-30
US201862734896P 2018-09-21 2018-09-21
US62/734,896 2018-09-21
US16/520,311 US20200073822A1 (en) 2018-08-30 2019-07-23 Security Configuration for Memory Address Translation from Object Specific Virtual Address Spaces to a Physical Address Space
US16/520,311 2019-07-23
PCT/US2019/048006 WO2020046754A1 (en) 2018-08-30 2019-08-23 Security configuration for memory address translation from object specific virtual address spaces to a physical address space

Publications (1)

Publication Number Publication Date
KR20210035911A true KR20210035911A (ko) 2021-04-01

Family

ID=69640031

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217008284A KR20210035911A (ko) 2018-08-30 2019-08-23 객체 특정 가상 어드레스 공간으로부터 물리적 어드레스 공간으로의 메모리 어드레스 변환을 위한 보안 구성

Country Status (5)

Country Link
US (1) US20200073822A1 (ko)
EP (1) EP3844651A4 (ko)
KR (1) KR20210035911A (ko)
CN (1) CN112639779A (ko)
WO (1) WO2020046754A1 (ko)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11275587B2 (en) 2018-05-02 2022-03-15 Micron Technology, Inc. Static identifications in object-based memory access
US11481241B2 (en) 2018-08-30 2022-10-25 Micron Technology, Inc. Virtual machine register in a computer processor
US10942863B2 (en) 2018-08-30 2021-03-09 Micron Technology, Inc. Security configurations in page table entries for execution domains using a sandbox application operation
US11182507B2 (en) 2018-08-30 2021-11-23 Micron Technology, Inc. Domain crossing in executing instructions in computer processors
US10915465B2 (en) 2018-08-30 2021-02-09 Micron Technology, Inc. Memory configured to store predefined set of domain registers for instructions being executed in computer processors
US11914726B2 (en) 2018-08-30 2024-02-27 Micron Technology, Inc. Access control for processor registers based on execution domains
US10915457B2 (en) 2018-08-30 2021-02-09 Micron Technology, Inc. Memory access control through permissions specified in page table entries for execution domains
US11500665B2 (en) 2018-08-30 2022-11-15 Micron Technology, Inc. Dynamic configuration of a computer processor based on the presence of a hypervisor
US11544069B2 (en) 2018-10-25 2023-01-03 Micron Technology, Inc. Universal pointers for data exchange in a computer system having independent processors
US20230418767A1 (en) * 2022-06-28 2023-12-28 Apple Inc. PC-Based Memory Permissions

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6470436B1 (en) * 1998-12-01 2002-10-22 Fast-Chip, Inc. Eliminating memory fragmentation and garbage collection from the process of managing dynamically allocated memory
US6393544B1 (en) * 1999-10-31 2002-05-21 Institute For The Development Of Emerging Architectures, L.L.C. Method and apparatus for calculating a page table index from a virtual address
GB2448149B (en) * 2007-04-03 2011-05-18 Advanced Risc Mach Ltd Protected function calling
US8375195B2 (en) * 2009-03-05 2013-02-12 Oracle America, Inc. Accessing memory locations for paged memory objects in an object-addressed memory system
GB2482700A (en) * 2010-08-11 2012-02-15 Advanced Risc Mach Ltd Memory access control
US11755201B2 (en) * 2015-01-20 2023-09-12 Ultrata, Llc Implementation of an object memory centric cloud
US9910611B2 (en) * 2015-05-29 2018-03-06 Intel Corporation Access control for memory protection key architecture
US20160381050A1 (en) * 2015-06-26 2016-12-29 Intel Corporation Processors, methods, systems, and instructions to protect shadow stacks

Also Published As

Publication number Publication date
CN112639779A (zh) 2021-04-09
US20200073822A1 (en) 2020-03-05
EP3844651A1 (en) 2021-07-07
WO2020046754A1 (en) 2020-03-05
EP3844651A4 (en) 2022-05-18

Similar Documents

Publication Publication Date Title
US11481241B2 (en) Virtual machine register in a computer processor
US11620239B2 (en) Domain register for instructions being executed in computer processors
US11182507B2 (en) Domain crossing in executing instructions in computer processors
US11500665B2 (en) Dynamic configuration of a computer processor based on the presence of a hypervisor
KR20210035911A (ko) 객체 특정 가상 어드레스 공간으로부터 물리적 어드레스 공간으로의 메모리 어드레스 변환을 위한 보안 구성
KR102570757B1 (ko) 실행 도메인에 대한 페이지 테이블 엔트리에 보안 구성
US11436156B2 (en) Memory access control through permissions specified in page table entries for execution domains
CN112639736A (zh) 处理器寄存器的基于执行域的存取控制

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E601 Decision to refuse application