KR20200023379A - 영역 실행 컨텍스트 마스킹 및 세이빙 - Google Patents

영역 실행 컨텍스트 마스킹 및 세이빙 Download PDF

Info

Publication number
KR20200023379A
KR20200023379A KR1020207001454A KR20207001454A KR20200023379A KR 20200023379 A KR20200023379 A KR 20200023379A KR 1020207001454 A KR1020207001454 A KR 1020207001454A KR 20207001454 A KR20207001454 A KR 20207001454A KR 20200023379 A KR20200023379 A KR 20200023379A
Authority
KR
South Korea
Prior art keywords
region
area
memory
exception
given
Prior art date
Application number
KR1020207001454A
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 KR20200023379A publication Critical patent/KR20200023379A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/062Securing storage systems
    • G06F3/0622Securing storage systems in relation to access
    • 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
    • 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/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/1425Protection 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 physical, e.g. cell, word, block
    • 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/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • 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/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1491Protection against unauthorised use of memory or access to memory by checking the subject access rights in a hierarchical protection system, e.g. privilege levels, memory rings
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0637Permissions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • 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
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/481Exception handling
    • 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
    • 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/1052Security improvement

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Human Computer Interaction (AREA)
  • Storage Device Security (AREA)
  • Separation Of Suspended Particles By Flocculating Agents (AREA)
  • Bidet-Like Cleaning Device And Other Flush Toilet Accessories (AREA)
  • Pharmaceuticals Containing Other Organic And Inorganic Compounds (AREA)

Abstract

메모리 액세스 회로(26)는 메모리 영역에 대한 소유권을 집행한다. 주어진 메모리 영역은 다수의 영역으로부터 지정된 소유자 영역과 관련되며, 각 영역은 처리 회로(8)에 의해 실행되는 적어도 하나의 소프트웨어 프로세스의 일부에 대응한다. 더 많은 특권 예외 레벨에서 소스 영역에서 타겟 영역으로의 영역 전환에 응답하여, 소스 영역과 관련된 아키텍처 상태의 서브세트의 상태 마스킹은 상태가 목표 영역에 액세스할 수 없게 하도록 하기 위해 수행된다. 영역 전환에 따른 플러시 커맨드에 응답하여, 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 아직 세이브되지 않은 아키텍처 상태 데이터의 서브세트 중 임의의 것이 세이브되도록 보장된다.

Description

영역 실행 컨텍스트 마스킹 및 세이빙
본 기술은 데이터 처리의 분야에 관한 것이다.
특정 메모리 영역에 대한 액세스 권한을 집행하기 위한 메모리 액세스 제어 기술을 제공하는 것이 알려져 있다. 일반적으로 이들은 특권 레벨을 기반으로 하므로, 더 높은 특권 레벨에서 실행되는 프로세스는 메모리 영역들에 액세스하는 것에서 특권이 더 적은 프로세스를 제외할 수 있다.
적어도 몇몇 예는,
복수의 예외 레벨 중 하나에서 소프트웨어 프로세스들을 처리하는 처리 회로와,
주어진 메모리 영역이 복수의 영역들 중에서 지정된 소유자 영역과 관련되며, 각 영역이 적어도 하나의 소프트웨어 프로세스의 적어도 일부에 대응하고, 소유자 영역이 소유자 영역보다 특권이 더 많은 예외 레벨에서 처리된 소프트웨어 프로세스에 의해 주어진 메모리 영역에 대한 액세스를 방지할 권리가 있는, 복수의 메모리 영역에 대한 소유권을 집행하는 메모리 액세스 회로를 구비하는 장치를 제공하고,
소스 영역보다 특권이 더 많은 예외 레벨에서 처리되도록 상기 소스 영역으로부터 타겟 영역으로의 영역 전환에 응답하여, 상기 처리 회로는, 상기 소스 영역과 관련된 아키텍처 상태 데이터의 서브세트가 타겟 영역에 액세스할 수 없게 하도록 상태 마스킹을 수행하도록 구성되고,
영역 전환에 따른 플러시 커맨드에 응답하여, 상기 처리 회로는 상기 소스 영역에 의해 소유된 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 아직 세이브되지 않은 아키텍처 상태 데이터의 상기 서브세트 중 임의의 것이 상기 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 세이브되는 것을 보장하도록 구성된다.
적어도 몇몇 예는,
복수의 예외 레벨 중 하나에서 소프트웨어 프로세스들을 처리하기 위한 수단과,
주어진 메모리 영역이 복수의 영역 중에서 지정된 소유자 영역과 관련되며, 각 영역이 적어도 하나의 소프트웨어 프로세스의 적어도 일부에 대응하고, 소유자 영역이 소유자 영역보다 특권이 더 많은 예외 레벨에서 처리된 소프트웨어 프로세스에 의해 주어진 메모리 영역에 대한 액세스를 방지할 권리가 있는, 복수의 메모리 영역에 대한 소유권을 집행하기 위한 수단을 구비하는 장치를 제공하고,
소스 영역보다 특권이 더 많은 예외 레벨에서 처리되도록 소스 영역으로부터 타겟 영역으로의 영역 전환에 응답하여, 상기 처리 수단은, 소스 영역과 관련된 아키텍처 상태 데이터의 서브세트가 타겟 영역에 액세스할 수 없게 하도록 상태 마스킹을 수행하도록 구성되고,
영역 전환에 따른 플러시 커맨드에 응답하여, 상기 처리 수단은 소스 영역에 의해 소유된 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 아직 세이브되지 않은 아키텍처 상태 데이터의 상기 서브세트 중 임의의 것이 상기 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 세이브되는 것을 보장하도록 구성된다.
적어도 몇몇 예는, 데이터 처리 방법으로서,
복수의 예외 레벨 중 하나에서 소프트웨어 프로세스들을 처리하는 단계와,
주어진 메모리 영역이 복수의 영역 중에서 지정된 소유자 영역과 관련되며, 각 영역이 적어도 하나의 소프트웨어 프로세스의 적어도 일부에 대응하고, 소유자 영역이 소유자 영역보다 특권이 더 많은 예외 레벨에서 처리된 소프트웨어 프로세스에 의해 주어진 메모리 영역에 대한 액세스를 방지할 권리가 있는, 복수의 메모리 영역에 대한 소유권을 집행하는 단계와,
소스 영역보다 특권이 더 많은 예외 레벨에서 처리되도록 소스 영역으로부터 타겟 영역으로의 영역 전환에 응답하여, 소스 영역과 관련된 아키텍처 상태 데이터의 서브세트가 타겟 영역에 액세스할 수 없게 하도록 상태 마스킹을 수행하는 단계와,
영역 전환에 따른 플러시 커맨드에 응답하여, 소스 영역에 의해 소유된 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 아직 세이브되지 않은 아키텍처 상태 데이터의 상기 서브세트 중 임의의 것이 상기 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 세이브되는 것을 보장하는 단계를 포함하는, 데이터 처리 방법을 제공한다.
적어도 몇몇 예는, 명령 실행 환경을 제공하도록 호스트 데이터 처리 장치를 제어하기 위한 컴퓨터 프로그램으로서,
복수의 예외 레벨 중 하나에서 소프트웨어 프로세스들을 처리하는 처리 프로그램 로직과,
주어진 메모리 영역이 복수의 영역 중에서 지정된 소유자 영역과 관련되며, 각 영역이 적어도 하나의 소프트웨어 프로세스의 적어도 일부에 대응하고, 소유자 영역이 소유자 영역보다 특권이 더 많은 예외 레벨에서 처리된 소프트웨어 프로세스에 의해 주어진 메모리 영역에 대한 액세스를 방지할 권리가 있는, 복수의 메모리 영역에 대한 소유권을 집행하는 메모리 액세스 프로그램 로직을 구비하는 컴퓨터 프로그램을 제공하고,
소스 영역보다 특권이 더 많은 예외 레벨에서 처리되도록 소스 영역으로부터 타겟 영역으로의 영역 전환에 응답하여, 상기 처리 프로그램 로직은, 소스 영역과 관련된 아키텍처 상태 데이터의 서브세트가 타겟 영역에 액세스할 수 없게 하도록 상태 마스킹을 수행하도록 구성되고,
영역 전환에 따른 플러시 커맨드에 응답하여, 상기 처리 프로그램 로직은 소스 영역에 의해 소유된 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 아직 세이브되지 않은 아키텍처 상태 데이터의 상기 서브세트 중 임의의 것이 상기 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 세이브되는 것을 보장하도록 구성된다.
저장 매체는 컴퓨터 프로그램을 저장할 수 있다. 저장 매체는 비일시적 저장매체일 수 있다.
본 기술의 다른 양태, 특징 및 이점은 첨부 도면을 참조하여 판독되는 다음의 실시 예의 설명으로부터 명백해질 것이다.
도 1은 제1 메모리 및 제2 메모리 내에 저장된 메모리 영역을 이용하는 복수의 처리 요소를 포함하는 데이터 처리 시스템을 개략적으로 도시한다.
도 2는 실행된 복수의 프로세스, 이들 프로세스와 관련된 특권 레벨, 및 어떤 프로세스가 주어진 메모리 영역을 소유하고 그에 따라 그 주어진 메모리 영역에 대한 액세스를 제어할 독점권을 갖는지를 제어하는 이들 프로세스와 관련된 영역들(realms) 사이의 관계를 개략적으로 도시한다.
도 3은 영역 관리(realm management) 유닛 및 메모리 관리 유닛에 의해 관리되는 메모리 영역을 개략적으로 도시한다.
도 4는 주어진 메모리 영역을 제1 메모리에서 제2 메모리로 이출하기 위해 실행되는 일련의 프로그램 명령을 개략적으로 도시한다.
도 5는 페이지 이출(page export)을 개략적으로 나타내는 흐름도이다.
도 6은 어떤 이출 커맨드가 어떤 다른 이출 커맨드를 중단시킬 수 있는지를 제어하기 위한 제어 계층 내에서의 복수의 영역(realms) 및 이들의 관계를 개략적으로 도시한다.
도 7은 페이지 이출을 개략적으로 나타내는 흐름도이다.
도 8은 주어진 메모리 영역에 대해 오버랩 이출 동작을 수행하는 제1 이출 커맨드 소스 및 제2 이출 커맨드 소스를 개략적으로 도시한다.
도 9는 메모리에 저장된 처리 요소 및 영역 관리 제어 데이터의 보다 상세한 예를 도시한다.
도 10은 부모 영역(parent realm)이 다양한 자식 영역(child realms)의 속성을 설명하는 영역 디스크립터(realm descriptors)를 정의할 수 있는 영역(realms)의 계층구조의 예를 도시한다.
도 11 및 12는 영역 계층(realm hierarchy)의 두 가지 상이한 예를 도시한다.
도 13은 자식 영역의 영역 디스크립터(realm descriptors)를 기록하기 위해 부모 영역에 의해 유지되는 영역 디스크립터 트리의 예를 도시한다.
도 14는 대응하는 레벨의 영역 디스크립터 트리에 각각 인덱스를 제공하는 다수의 가변 길이 비트 부분으로 구성된 로컬 영역 식별자(local realm identifier)의 예를 도시한다.
도 15는 영역 계층구조에서 각 영역(realm)에 대한 로컬 및 글로벌 영역 식별자의 예를 도시한다.
도 16은 영역 디스크립터의 내용의 예를 도시한다.
도 17은 상이한 영역 라이프사이클(realm lifecycle) 상태를 나타내는 테이블이다.
도 18은 영역(realm)의 라이프사이클 상태의 변화를 나타내는 상태 머신 다이어그램이다.
도 19는 주어진 메모리 영역에 대한 소유권 테이블의 엔트리의 내용을 도시 한 테이블이다.
도 20은 소유자 이외의 영역(realms)이 그 영역(region))에 액세스할 수 있도록 제어하기 위해 주어진 메모리 영역에 대해 설정될 수 있는 가시성 속성을 나타내는 표이다.
도 21은 영역 관리 유닛에 의한 배타적 액세스를 위해 예약된 RMU-프라이빗 메모리 영역에 대응하는 상태를 포함하는, 메모리 영역에 대한 상이한 라이프사이클 상태의 예를 도시한다.
도 22는 주어진 메모리 영역에 대한 라이프사이클 상태의 천이를 나타내는 상태 머신이다.
도 23은 주어진 메모리 영역의 소유권이 어떻게 부모 영역과 그 자식 영역 사이를 통과할 수 있는지를 나타낸다.
도 24는 소유자 영역(owner realm)에 의해 설정된 권한에 근거하여 메모리 액세스에 대한 직교 레벨의 제어를 제공하는 영역 관리 유닛 레벨 및 특권 레벨에 의존하는 메모리 제어 속성을 정의하는 페이지 테이블에 근거하여 제공된 메모리 액세스 제어를 개략적으로 도시한다.
도 25는 변환 색인 버퍼(translation lookaside buffer)의 예를 도시한다.
도 26은 페이지 테이블 및 RMU 테이블에 의거하여 메모리에 대한 액세스를 제어하는 방법을 나타내는 흐름도이다.
도 27은 상이한 예외 레벨에서 실행되는 프로세스에 액세스 가능한 상태를 도시한다.
도 28은 영역(realm)에 진입하거나 예외로부터 복귀하는 방법을 나타내는 흐름도이다.
도 29는 영역(realm)을 나가거나 예외를 취하는 방법을 나타내는 흐름도이다.
도 30은 자식 영역으로의 진입 및 부모 영역으로의 리턴의 예를 도시한다.
도 31은 네스티드 영역 퇴장(nested realm exit) 및 네스티드 영역 진입의 예를 도시한다.
도 32는 영역(realm)으로부터 퇴장 시 영역 실행 컨텍스트(realm execution context)의 느린 세이빙(lazy saving)을 사용하는 예를 도시한다.
도 33은 상이한 자식 영역이 입력되기 전에 이전에 이미 퇴장된 자식 영역과 연관된 상태의 서브세트가 메모리에 저장되도록 하기 위해 플러시 커맨드를 사용하는 예를 도시한다.
도 34는 서브-영역(sub-realms)의 부모 영역과 연관된 프로세스 내의 특정 어드레스 범위에 대응하는 서브-영역의 사용을 도시한다.
도 35는 사용될 수 있는 시뮬레이터 예를 도시한다
도 1은 대용량 기억장치로서 기능하는 오프 칩 플래시 메모리와 같은, 별도의 비휘발성 메모리(6)에 연결된 시스템 온 칩 집적회로(4)를 포함하는 데이터 처리 시스템(2)을 개략적으로 도시한다. 시스템 온 칩 집적회로(4)는 (이 예시적인 실시 예에서) 2개의 범용 프로세서(CPU) 8, 10 및 그래픽 처리 유닛(GPU)(12)의 형태의 복수의 처리 요소를 구비한다. 실제로, 추가 범용 프로세서, 그래픽 처리 유닛, DMA(direct memory access) 유닛, 코프로세서 및 메모리 어드레스 공간 내의 메모리 영역(memory region)에 액세스하는 역할을 하고 이들 메모리 영역 내에 저장된 데이터에 대해 데이터 처리 동작을 수행하는 다른 처리 요소와 같은 많은 상이한 형태의 처리 요소가 제공될 수 있다.
범용 프로세서 8, 10 및 그래픽 처리 유닛(12)은 온 칩 메모리(16) 및 외부 메모리(6)(외부 메모리 인터페이스(18)를 통해)와 메모리 트랜잭션을 수행하는 상호접속 회로(14)에 연결된다. 메모리(16)가 도 1에서 온 칩이지만, 다른 실시 예들에서 메모리(16)는 대신 오프 칩 메모리로서 구현될 수 있다. 온 칩 메모리(16)는 전체 메모리 어드레스 공간 내의 복수의 메모리 영역에 대응하는 데이터를 저장한다. 이들 메모리 영역은 메모리 페이지에 대응하고, 주어진 시간에 온 칩 메모리(16) 내에 어떤 메모리 영역(페이지)이 존재하는지를 제어하는 관리 동작에 종속되며, 이 프로세스는 이들 메모리 영역 내에 저장된 데이터 및 이들 메모리 영역과 연관된 다른 파라미터에 액세스할 수 있다. 보다 구체적으로, 이 예시적인 실시 예에서, 각각의 처리 요소 8, 10, 12는 영역 관리 유닛 20, 22, 24 및 범용 메모리 관리 유닛 26, 28, 30을 구비한다. 범용 메모리 관리 유닛 26, 28, 30은 어드레스 매핑(예를 들면, 가상 어드레스와 중간 물리 어드레스, 또는 물리 어드레스 사이의 매핑), 주어진 메모리 영역에 액세스할 수 있는 프로세스에 대한 특권 레벨 제한(privilege level constraints), 주어진 메모리 영역(예를 들면, 캐시가능성, 디바이스 메모리 상태 등) 내의 데이터의 저장 특성 및 메모리의 영역의 다른 특성과 같은 메모리 영역의 동작의 측면을 제어하는 역할을 한다.
영역 관리 유닛 20, 22, 24는 복수의 메모리 영역의 소유권을 집행하는 역할을 하는 데이터를 관리함으로써, 주어진 메모리 영역은 복수의 프로세스 중에서 지정된 주어진 소유 프로세스(또는 소유자 "영역")를 갖는다(프로세스 또는 영역은, 예를 들어, 모니터 프로그램, 하이퍼바이저 프로그램, 게스트 운영 체제 프로그램, 애플리케이션 프로그램 등, 또는 이러한 프로그램의 특정 서브-부분 중 하나임). 주어진 메모리 영역에 대한 주어진 소유 프로세스(소유자 영역(owner realm))는 주어진 메모리 영역 내에 저장된 주어진 자신의 데이터에 대한 액세스를 제어하는 독점권을 갖는다. 특히, 소유자 프로세스는 소유자 프로세스보다 더 큰 특권 레벨에서 실행되는 프로세스에 의해 자신의 메모리 영역에 액세스하지 못하게 할 권리가 있다.
따라서, 복수의 메모리 영역은 복수의 소유자 영역으로 분할된다. 각각의 영역(realm)은 적어도 하나의 소프트웨어 프로세스의 적어도 일부에 대응하고, 다수의 메모리 영역의 소유권이 할당된다. 소유 프로세스/영역은 해당 영역의 메모리 영역에 저장된 데이터에 대한 액세스를 제어하는 독점권을 갖는다. 어느 메모리 영역이 각 영역에 매핑된 메모리인지의 관리 및 제어는 소유자 영역 자체 이외의 프로세스에 의해 수행된다. 이 배열을 사용하면 하이퍼바이저와 같은 프로세스가 해당 하이퍼바이저가 관리하는 각 게스트 가상 머신(게스트 운영 체제)이 소유한 영역 내에 어느 메모리 영역(메모리 페이지)이 포함되는지를 제어할 수 있지만 하이퍼바이저 자체는 주어진 영역에 할당된 메모리 영역 내에 저장된 데이터에 실제로 액세스할 권한이 없다. 따라서, 예를 들어, 게스트 운영 체제는 그 게스트 운영 체제의 영역 내에, 즉 그 게스트 운영 체제가 소유한 메모리 영역 내에 저장된 데이터를 그것의 관리 하이퍼바이저로부터 비공개로 유지할 수 있다.
메모리 어드레스 공간을 영역으로 분할하고, 그 영역의 소유권을 제어하는 것은 각각의 처리 요소 8, 10, 12와 연관된 영역 관리 유닛 20, 22, 24을 통해 관리되며, 범용 메모리 관리 유닛 26, 28, 30에 의해 제공되는 보다 통상적인 형태의 제어와 직교하는 제어 프로세스이다. 따라서 영역 관리 유닛 20, 22, 24은 메모리 어드레스 공간의 메모리 영역의 소유권을 집행하는 메모리 액세스 회로를 제공한다. 일부 경우에, 영역 소유권을 집행하는 메모리 액세스 회로는 또한 MMU 26, 28, 30의 일부를 포함할 수 있다(예를 들어, MMU 26, 28, 30의 TLB는 RMU 20, 22, 24에 의해 제공된 영역 제어에 근거하여 액세스를 제어하기 위한 일부 제어 데이터를 포함할 수 있어, 두 개의 별도 구조에 액세스할 필요가 없다). 이 예시적인 실시 예에서, 처리 요소 8, 10, 12의 각각은 그 자신의 영역 관리 유닛 20, 22, 24을 포함하고; 이것은 성능 목적에 유리하다. 그러나, 보다 일반적으로 소유권을 집행하는 메모리 액세스 회로는 영역 관리 유닛의 단일 인스턴스(instance), 존재하는 모든 영역 관리 유닛 20, 22, 24의 조합, 또는 존재하는 이들 영역 관리 유닛 20, 22, 24의 서브세트를 포함할 수 있다. 따라서, 소유권을 집행하는 메모리 액세스 회로는 상이한 처리 요소 8, 10, 12와 관련하여 시스템 온 칩 집적 회로(4) 전체에 걸쳐 분포되거나, 한 위치에서 또는 일부 다른 구성에서 함께 수집될 수 있다.
범용 프로세서 8, 10를 포함하는 처리 요소는 프로그램 명령을 디코딩 및 실행하는 각각의 디코딩 및 실행 회로 32, 34를 포함하는 것으로 도시되어 있다. 이 프로그램 명령에는 메모리 어드레스 공간의 서로 다른 소유권 영역 내에서 메모리 영역의 관리를 제어하는 기능을 하는 커맨드(영역 관리 커맨드 또는 RMU 커맨드)가 포함된다. 예로서, 실행된 프로그램 명령들은 영역 관리 유닛 커맨드로서 지정된 프로그램 명령들을 포함할 수 있고, 이들 프로그램 명령은 그들이 관련 영역 관리 유닛 20, 22, 24에 의해 실행(작동)될 수 있도록 프로그램 명령 스트림 내에서 발견될 때 관련 영역 관리 유닛 20, 22, 24으로 보내진다. 영역 관리 유닛 커맨드의 예에는 새로운 영역을 초기화하거나 기존 영역을 무효화하는 커맨드, 메모리 영역을 특정 영역에 할당하는 커맨드, 특정 영역에서 메모리 영역을 제거하는 커맨드, 메모리 영역에 포함된 데이터를 제1 메모리(16)로부터 제2 메모리(6)로 이출하기 위한 커맨드가 포함되는데, 이출된 데이터에 대해서는 암호화 및 다른 프로세스가 수행되어 제2 메모리 (6) 내에서 보호된다. 추가의 영역 관리 유닛 커맨드는 이입된 데이터에 대해 수행되는 관련 해독 및 검증 동작과 함께 제2 메모리(6)로부터 제1 메모리(16)로 데이터를 다시 이입하기 위해 제공된다.
메모리 영역으로부터 데이터의 이러한 이출 및 이입(exports and imports)과 관련하여, 온 칩 메모리(16)와 같은 제1 메모리는 시스템 온 칩 집적회로(4) 내의 영역 관리 유닛 20, 22, 24에 의해 밀접하게 관리되고 그에 따라 이들 영역 관리 유닛 20, 22, 24은 소유권을 집행하고 주어진 메모리 영역 내의 데이터에 대한 액세스를 그 메모리 영역을 소유하는 프로세스, 또는 소유 프로세스가 액세스 권한을 부여한 프로세스들로 제한할 수 있다는 것을 이해할 것이다. 그러나, 제2 메모리인 외부의 비휘발성 메모리(6)와 같이, 그 메모리 영역 내의 데이터가 이출될 때, 영역 관리 유닛 20, 22, 24에 의해 제공되는 액세스에 대한 제어는 더 이상 유효하지 않으며 따라서 데이터는 어떤 다른 방식으로의 보호를 필요로 한다. 이것은 메모리 영역 내에서 데이터를 이출하기 전에 암호화한 다음, 온 칩 메모리(16)로 다시 이입할 때 비밀 키로 해당 데이터를 해독함으로써 달성된다.
이출 프로세스는 이출된 데이터의 특성을 지정하는 메타데이터의 생성을 동반할 수 있다. 이러한 메타데이터는 제1 메모리(온 칩 메모리(16))의 메타데이터 메모리 영역 내에 별도로 저장될 수 있으며, 여기서 영역 관리 유닛 20, 22, 24에 대해 개인용으로 유지되어(즉, 이러한 영역 관리 유닛 20, 22, 24에만 액세스가능하고 기존 프로세스 중의 어느 것에도 가능하지 않다) 데이터가 온 칩 메모리(16)로 다시 이입될 때, 메타데이터는 그 이입된 데이터에 대해 판독될 수 있고, 메타데이터로 표현된 데이터의 특성은 이입된 데이터의 특성에 대해 검사되어 그 이입된 데이터의 무결성(예를 들면, 체크섬(checksums), 데이터 크기, 서명 등)을 보장할 수 있다.
영역 관리 유닛 20, 22, 24의 개인 데이터(이출된 영역(region)/페이지를 특징으로 하는 상기 메타데이터를 포함함)는 (예를 들어, 온 칩 메모리(16) 내에 공간을 확보하기 위해) 온 칩 메모리(16)로부터 오프 칩 비휘발성 메모리(6)로 이출될 필요가 있을 수 있으며, 이러한 상황에서 RMU 프라이빗 메타데이터 자체는 그것의 보호를 위해 암호화될 수 있으며, 암호화되어 이출된 메타데이터가 사용을 위해 온 칩 메모리(16)로 다시 이입될 때 검사 및 검증될 수 있도록 하기 위해 이출된 메타데이터를 특징으로 하는 새로운 메타데이터가 온 칩 메모리(16) 내에 유지될 수 있다(그러한 유지된 메타데이터는 이출된 메타데이터보다 크기가 상당히 작다).
메모리 영역의 특성 및 메모리 영역 내에 저장된 데이터를 기술하는 이러한 메타데이터는 분기 패턴을 갖는 메타데이터 메모리 영역 트리와 같은, 계층 구조의 일부로서 배열될 수 있다. 이러한 메타데이터 메모리 영역 트리의 형태는 영역 관리 유닛 20, 22, 24에 의해 소유된 메타데이터 영역으로서 기능하도록 메모리 어드레스 공간의 상이한 영역(regions)이 등록됨에 따라 소프트웨어 제어 하에서 결정될 수 있다. 이러한 메모리 영역들의 등록(registering)을 제어하는 소프트웨어는 메타데이터를 저장하는 역할을 하는 메모리 영역들 사이의 관계를 할당, 할당 해제 및 제어할 수 있지만, 그러한 소프트웨어 자체는 어느 프로세스는 그러한 데이터에 액세스할 수 있는지를 제어할 수 있다는 의미에서 이들 메모리 영역 내에 포함된 데이터를 소유하지 않는다는 것이 인식될 것이다. 영역 관리 유닛 20, 22, 24에 전용인 메모리 영역들(즉, 메모리 관리 회로)의 경우, 그러한 액세스 권한은 영역 관리 유닛 20, 22, 24 자체 및 그러한 RMU 프라이빗 데이터는 어떤 다른 프로세스와도 공유되지 않을 것이다.
주어진 메모리 영역 내에 저장된 주어진 데이터가 이출될 때, 관련 메모리 영역은 무효화되어 콘텐츠에 액세스할 수 없게 된다. 이 페이지를 재사용하기 위해, 그 주어진 메모리 영역이 또 다른 프로세스에서 사용하기 위해 해제될 때 이전 컨텐츠가 또 다른 프로세스에 액세스할 수 없도록 이전 컨텐츠와 상관없는 다른 데이터와 메모리 영역을 겹쳐 쓰는 클린 커맨드(Clean command)를 사용하여, 페이지가 "유효(Valid)"하게 된다. 예를 들어, 주어진 메모리 영역의 콘텐츠는 모두 0 값으로 기록되거나, 고정된 값으로 기록되거나, 임의의 값으로 기록되어 메모리 영역의 원래 콘텐츠를 덮어쓸 수 있다. 다른 예들에서, 이출된 메모리 영역의 콘텐츠의 덮어쓰기는 후속 클린 커맨드가 아니라, 이출 커맨드 자체에 의해 트리거될 수 있다. 어느 쪽이든, 주어진 메모리 영역이 주어진 소유 프로세스 이외의 프로세스에 액세스 가능하게 되기 전에, 이출되는 주어진 소유 데이터는 주어진 소유 데이터와 상관없는 값으로 덮어쓰기 될 수 있다. 주어진 프로세스에 의해 소유된 주어진 메모리 영역이 이출될 때, 이출 프로세스의 일부로서, 이출을 수행하기 위해 영역 명령을 실행하는 영역 관리 유닛 20, 22, 24은 주어진 프로세스로부터 관련 메모리 영역의 소유권을 취하고, (예를 들어, 영역(region) RMU-Private을 만든다), 다른 모든 프로세스(및 다른 영역 관리 유닛)에 대해 해당 메모리 영역의 액세스를 잠그고(lock), (암호화, 메타데이터 생성 및 덮어쓰기 포함하는) 이출 동작을 수행한 다음, 그 메모리 영역에 대한 액세스를 잠금 해제하며, 그 메모리 영역의 소유권을 해제한다. 따라서, 그 커맨드가 수행되고 있는 동안 이출 또는 이입을 진행 중인 메모리 영역은 관련 영역 관리 유닛에 비공개로 유지될 수 있다.
도 2는 복수의 프로세스(프로그램/스레드(threads)), 복수의 예외 레벨(권한 레벨), 보안 및 비보안 프로세서 도메인, 및 주어진 메모리 영역의 소유권을 나타내는 복수의 영역들 간의 관계를 개략적으로 도시한다. 도시된 바와 같이, 특권 레벨의 계층은 예외 레벨 EL0에서 예외 레벨 EL3까지 확장된다(예외 레벨 EL3이 최고 레벨의 특권을 갖는다). 시스템의 작동 상태는 예를 들어 영국 케임브리지의 ARM® Limited에서 제공하는 TrustZone® 아키텍처를 사용하는 프로세서에서, 보안 도메인과 비보안 도메인으로 표시되는 것처럼 보안 작동 상태와 비보안 작동 상태로 구분될 수 있다.
도 2에 도시된 바와 같이, 메모리 액세스 회로(영역 관리 유닛 20, 22, 24 및 관련 제어 소프트웨어(예를 들어, 영역 관리 유닛 중 하나를 실행하는 밀리코드(millicode))는 실행 환경 내에서 복수의 영역을 관리한다. 주어진 메모리 영역(메모리 페이지)은 특정 영역에 의해 소유된다. 영역은 그 내부에 자식 영역을 갖고, 이들 자식 영역 내에 손자 영역을 가질 수 있다(예를 들어, 영역 A(부모), 영역 B(자식) 및 영역 C(손자) 참조). 영역 A에 소유권이 부여된 메모리 영역은 영역 A가 소유한 프로세스의 제어 하에 차례로 소유권을 영역 A에서 영역 B로 전달할 수 있다. 따라서, 부모 영역은 그 자신의 자식 영역(들)에 영역(regions)의 소유권을 부여할 수 있다. 이러한 자식 영역은 그들 부모 영역에서 받은 메모리 영역의 소유권을 차례로 전달하여 원래 영역, 즉 영역 A의 손자 영역인 그들 자신의 자식 영역(예를 들면, 영역 C)이 소유할 수 있다. 주어진 영역 내의 프로세스는 동일한 특권 레벨 또는 상이한 특권 레벨에서 실행될 수 있다. 많은 실제 경우에는 영역과 특권 레벨은 영역 간 이동을 위한 편리한 메커니즘으로서 대응할 수 있고 그들 자신이 시스템을 상이한 권한 레벨(예외 레벨) 사이에서 이동시키는 예외의 사용을 수반할 수 있지만, 프로세스가 속하는 영역은 프로세스의 특권 레벨에 대한 직교 파라미터이다.
도 2에 도시된 영역들 사이의 관계는 상이한 영역들 사이의 자식/부모 관계를 나타내며, 이것은 메모리 영역 관리를 위한 커맨드들의 다수의 상이한 소스가 서로 경쟁할 때 시스템의 동작을 제어하기 위한 제어 계층을 발생시키는 데 사용될 수 있다. 따라서, 예를 들어, 상술한 바와 같이 메모리 영역들을 이출하기 위한 이출 커맨드의 경우에, 제1 이출 커맨드는 영역 B 내의 운영 체제 커널(36)과 같은, 제1 이출 커맨드 소스로부터 주어진 영역 관리 유닛(메모리 액세스 회로)에 의해 수신될 수 있다. 그 후, 영역 A 내에서 실행되는 하이퍼바이저 프로그램(38)과 같은, 제2 커맨드 소스로부터 제2 이출 커맨드가 주어진 영역 관리 유닛에 의해 수신될 수 있다. 이 예에서, 제2 이출 커맨드 소스인 하이퍼바이저 프로그램(38)은, 하이퍼바이저 프로그램(38)에 의해 발행된 제2 이출 커맨드가 운영 체제 커널(36)에 의해 발행된 제1 이출 커맨드의 처리를 중단시키도록 부모 영역과 자식 영역 사이의 관계에 의해 설립된 제어 계층 내에서 더 높은 우선 순위를 갖는다. 하이퍼바이저(38)에 의해 발행된 것과 같은, 제2 이출 커맨드가 완료하면, 운영 체제 커널(36)에 의해 발행된 것과 같은, 제1 이출 커맨드가 재개될 수 있다.
이 예에서 제2 이출 커맨드의 우선 순위가 더 높으므로 제1 이출 커맨드의 작동이 중단된다. 그러나, 예를 들어, 제2 이출 커맨드가 영역 C 내의 애플리케이션 프로그램(40)으로부터 시작된 경우, 이것은 영역들 간의 관계에 의해 설립된 제어 계층 내에서 우선 순위가 낮으므로 애플리케이션 프로그램(40)으로부터의 그러한 제2 이출 커맨드는 운영 체제 커널(36)로부터의 제1 이출 커맨드의 동작을 중단시키지 않고, 제1 이출 커맨드가 완료할 때까지 오히려 그 자체가 수행되는 것을 차단할 것이다. 따라서, 페이징 동작들(이출 및 이입 동작)은 영역 계층 구조와 관련될 수 있는, 제어 계층 구조에 따라 서로를 방해하거나 방해하지 않을 수 있다는 의미에서 서로로부터 보호될 수 있다. 다른 예시적인 실시 예에서는, 제어 계층 구조는 특권 레벨에 대응할 수 있다.
도 3은 온 칩 메모리(16) 내에 저장된 복수의 메모리 페이지(메모리 영역)에 대해 상이한 관리 동작을 각각 수행하는 영역 관리 유닛(20) 및 범용 메모리 관리 유닛(26)을 개략적으로 도시한다. 도시된 바와 같이, 영역 관리 유닛(24)은 각 디스크립터(descriptor)가 영역의 속성을 지정하는 복수의 영역 디스크립터(42)를 사용한다. 영역 관리 유닛(24)은 또한 물리적 어드레스에 의해 인덱스된 엔트리(entries)를 포함하는 영역 그래뉼(granule) 테이블(또는 소유권 테이블)을 유지할 수 있으며, 대응하는 메모리 영역에 대한 정보를 포함하는 각 엔트리는 메모리 영역이 속하는 영역의 표시를 포함하며, 즉, 그 영역은, 그 자체가 실제로 그 메모리 영역을 소유하는지 아닌지 여부를 제어하지 않더라도 그 영역 내에서 데이터를 제어하기 위한 액세스를 제어하는 독점권을 갖는다. 영역 디스크립터 및 영역 그래뉼 테이블 엔트리는 메모리(16)에 저장될 수 있지만, RMU 자체에 캐시될 수도 있다. 따라서, 도 3에 도시된 바와 같이, 상이한 메모리 영역은 영역 명칭 RA, RB, RC, RD 및 RE로 나타낸 것처럼 상이한 소유 영역을 갖는다. 메모리 영역들 중 일부는 또한 영역 관리 유닛(20)에 의해 소유되며 RMU-Private로서 표시된다. 이러한 RMU-프라이빗 영역(private regions)은 다른 메모리 영역의 특성을 기술하는 메타데이터를 저장하거나, 이출되거나 이입되는 메모리 영역을 임시로 저장하거나, 또는 영역 관리 유닛(20) 자체의 다른 목적을 위해 사용될 수 있다. RMU 프라이빗 영역은 여전히 대응하는 소유자 영역(에 대한 개인)에 의해 소유될 수 있지만, 소유자 영역이 발행한 범용 읽기/쓰기 액세스에 액세스할 수 없다(대신에 RMU(20)에 발행된 RMU 커맨드가 RMU(20)를 트리거하여 RMU 프라이빗 영역을 변경하는 데 필요할 수 있다).
메모리 영역의 어드레싱은 관련된 특정 시스템에 따라 가상, 중간 물리적 또는 물리적 어드레스에 의한 것일 수 있다. 영역 관리 유닛(20) 및 범용 메모리 관리 유닛(26)은 따라서 수신된 어드레스(가상 메모리 어드레스이든 중간 메모리 어드레스이든)를, 관련된 온 칩 메모리(16) 내의 메모리 영역을 보다 직접적으로 나타내는, 물리적 어드레스와 같은 어드레스로 변환할 수 있는 변환 데이터를 저장할 수 있다. 이러한 어드레스 변환 데이터는 변환 색인 버퍼(translation look aside buffer) 및 다른 분산 제어 메커니즘을 사용하여 시스템 온 칩 집적 회로(4) 내에서 관리 및 분산될 수 있다.
도 4는 메모리 영역의 이출 동작과 관련된 프로그램 명령을 개략적으로 도시한다. 이들 프로그램 명령은 프로그램 명령 스트림 내에 나타나고 전체 회로 내의 상이한 요소에 의해 실행(작동)될 수 있다. 예를 들어, 영역 관리 유닛 커맨드는 각각의 영역 관리 유닛 12, 22, 24에 의해 실행된다. 가상 어드레스 언매핑(unmapping) 명령(VUMAP) 및 변환 색인 버퍼 무효화 명령(TLBI)과 같은 명령들은 시스템 온 칩 집적 회로(4) 내에서 브로드캐스트되고 시스템 내의 위치들로부터의 명령들에 의해 명시된 것처럼 변환 데이터의 사용을 전체적으로 제거하는 역할을 한다(일부 예들에서는, 전용 가상 어드레스 언매핑 명령이 제공되지 않을 수 있고, 대신 가상 어드레스의 언매핑이 특수 언매핑 명령을 사용하지 않고, 메모리에 저장을 수행하여 변환 테이블 항목을 수정함으로써 수행될 수 있지만). 배리어 명령 DSB는 도 4에 도시된 커맨드 시퀀스 내에 삽입되고, 이전의 가상 어드레스 언매핑 명령(또는 등가의 저장 명령) 및 변환 색인 버퍼 무효화 명령이 시스템의 모든 부분에 의해 완료되었다는 확인이 수신될 때까지 그 시퀀스의 처리를 정지시키는 역할을 한다. 따라서, 영역 관리 시스템 자체 이외의 시스템 내에서 주어진 메모리 영역에 대한 가상 어드레스 변환의 제거는 가상 어드레스 언매핑 명령(또는 등가의 저장 명령), 변환 색인 버퍼 무효화 명령 및 대응하는 배리어 명령의 시퀀스에 의해 달성될 수 있다. 주어진 메모리 영역(페이지)에 대한 가상 어드레스 변환 데이터를 언매핑(및 효과적으로 제거)함으로써, 그러한 메모리 영역은 그 메모리 영역에 저장된 데이터의 이출 동작이 수행될 때 시스템 내의 다른 곳에서는 사용되지 않을 것을 보장할 수 있다.
배리어 명령(DSB)이 시스템 내에서 가상 어드레스 변환 데이터의 퍼징(purging)이 완료되었음을 확인하는 승인을 수신하면, 영역 관리 유닛에 대한 이출 커맨드가 영역 관리 유닛에 의해 실행된다. 영역 관리 유닛에 의해 주어진 프로세스로부터 수신된 이러한 이출 커맨드의 실행은 지정된 주어진 메모리 영역에 대하여 복수의 커맨드 동작을 포함하는 커맨드 시퀀스(영역 관리 유닛 내에 내장된 밀리코드에 대응함)의 성능을 트리거한다. 이들 커맨드 목표는, 예를 들어, 도 4에 도시된 바와 같이, 어드레스 변환 데이터를 수집하고, 메모리 영역을 잠그고, 데이터를 암호화하고, 데이터를 외부에 저장하며, 메모리 영역과 관련된 메타데이터를 기록하고, 메모리 영역을 잠금 해제하는 단계를 포함할 수 있다.
영역 관리 유닛에 의해 커맨드 시퀀스의 일부로서 수행된 어드레스 변환 수집 단계는 관련된 액세스 동작을 완료하는 데 필요한 액세스 제어 데이터를 영역 관리 유닛에 수집한다. 이것은, 이출 동작이 진행 중이면 이출 동작을 완료하는 데 필요한 파라미터나 데이터, 예를 들면 이출 프로세스에 필요한 어드레스 변환 데이터, 속성 데이터 또는 기타 데이터의 비가용성(non availability)으로 인한 것일 수 있는 등, 이출 동작이 중단될 가능성이 줄어드는 것을 보장한다. 액세스 제어 데이터의 메모리 액세스 회로(영역 관리 유닛)를 검색하여 메모리 액세스 회로 내에 저장하는 예로서, 어드레스 변환 단계는 이출 동작을 완료하는 데 필요할 수 있는 모든 필요한 어드레스 변환 데이터(예를 들어, 가상-중간 물리적 어드레스(또는 물리적 어드레스) 매핑 데이터)를 검색하는 역할을 한다.
일단 어드레스 변환 데이터가 검색되었으면, 영역 관리 유닛은 관련 영역(region)과 관련된 락 플래그를 잠금 상태로 설정하는 역할을 한다. 이 락 플래그는 관련 영역에 대한 영역 속성(region attribute) 데이터(42) 내에 저장될 수 있다. 대안적으로, 락 플래그는 임의의 다른 프로세스 또는 영역 관리 유닛에 의해 덮어쓰기 될 수 없도록 이출 동작을 수행하고 있는 영역 관리 유닛에 전용인 메모리 영역 내에 저장될 수 있다. 락 플래그를 잠금 상태로 설정하기 위해, 영역 관리 유닛은 현재 다른 영역 관리 유닛이 관련된 메모리 영역을 잠금 상태 그 자체로 유지하고 있지 않다고 결정해야 한다. 따라서, 다른 곳에 저장된 데이터를 제어하는 어떤 영역(region)의 락 플래그 값의 폴링(polling)이 수행되고, 영역(region)이 다른 곳에 잠겨있지 않음을 나타내는 결과가 리턴되면 락 플래그가 잠금 상태로 설정된다. 영역(region)이 다른 곳에 잠겨 있으면, 이출 동작이 실패하고 해당 이출 동작을 지시한 프로세스에 오류가 보고된다. 일단 잠금(lock)이 획득되면, 주어진 메모리 영역 내의 데이터는 암호화되어 외부의 비휘발성 메모리(6)와 같은, 시스템 온 칩 집적 회로의 외부에 저장된다. 전술한 바와 같이, 암호화된 데이터를 특징짓는 메타데이터(또는 암호화 전에 주어진 데이터)는 나중에 이출된 데이터를 유효하게 하는 데 사용될 수 있도록 영역 관리 유닛 프라이빗 영역(private region) 내에 생성 및 저장된다. 마지막으로, 락 플래그를 잠금 상태에서 잠금 해제 상태로 전환함으로써 이출 커맨드를 수행하는 영역 관리 유닛에 의해 관련된 메모리 영역이 잠금 해제된다. 메모리 액세스 회로(영역 관리 유닛)의 하드웨어 메커니즘에 의해 강화된 잠금의 사용은 락 플래그가 잠금 상태일 때 수신될 수 있는 추가 처리 요소로부터의 다른(제2) 액세스 커맨드의 진행을 차단하는 역할을 한다.
도 5는 페이지(메모리 영역(memory region)) 이출을 개략적으로 나타내는 흐름도이다. 단계 44에서, 영역 관리(region management) 유닛 20, 22, 24 내부 이외의 시스템 내의 다른 곳에서 페이지의 사용을 제거(purge)하는 역할을 하는 프로그램 명령(VUMAP, TLBI, DSB)이 실행된다. 이것은 이출되어야 하는 영역(region)을 가리키는 변환 데이터를 무효화하고 퍼징함으로써 달성될 수 있다. 이 변환 데이터가 제거되면, 또 다른 프로세스 또는 처리 요소가 해당 영역(region)에 액세스하기를 원하는 경우, 변환 데이터를 다시 페치(refetch)하려고 시도할 것이다. 변환 데이터를 다시 페치하는 것을 시도할 때, 영역(region)을 재사용하고자 하는 프로세스 또는 처리 요소는, 관련 영역(region)이 페이지 이출을 수행하고자 하는 영역 관리 유닛 20, 22, 24만이 그 데이터에 액세스할 권한이 있는 RMU 프라이빗 상태에 놓이게 되므로 관련 변환 데이터를 취득하지 못할 것이다.
제거 요청이 단계 44에서 발행된 경우, 처리는 단계 46에서 프로그램 시퀀스 내에서 배리어 명령 DSB를 넘어서 계속되는 것이 안전하다는 (영역 관리 유닛 이외의) 다른 지점에서 어드레스 데이터가 무효화되었다는 것을 나타내는 이들 제거 요청으로부터 응답이 수신될 때까지 대기한다(응답이 수신될 때까지 배리어 명령 DSB는 처리 요소 8, 10, 12를 정지시킨다). 단계 48에서는, 영역 관리 유닛 이출 초기화 명령이 실행된다. 이 이출 초기화 명령은, 커맨드 시퀀스가 중단되어야 하는 이출 동작에 대응하는 커맨드 시퀀스의 현재 부분적으로 완료된 상태를 나타내는 컨텍스트 데이터를 저장하기 위해 커맨드 컨텍스트 버퍼(CCB)가 설정되는 RMU 프라이빗으로서 설정된 메모리 영역에 대한 포인터를 포함한다. 대안적인 예시적인 실시 예에서, 영역 관리 유닛 자체는 커맨드 컨텍스트 버퍼(CCB)에 대한 포인터 생성을 담당할 수 있다. 단계 50은 이출 커맨드 단계 48 내의 포인터로 나타낸 커맨드 컨텍스트 버퍼가 비어 있는지를 판정한다. 커맨드 컨텍스트 버퍼가 비어 있으면, 단계 52는 이것을 RMU-프라이빗 영역으로서 설정한다. 단계 50에서의 커맨드 컨텍스트 버퍼가 비어 있지 않으면, 이것은 단계 48에서 실행되는 이출 초기화 명령이 이전에 중단된 이출 동작을 다시 시작하려고 시도하고 있음을 나타낸다. 이 경우, 처리는 단계 54로 진행하여, 포인터가 가리킨 커맨드 컨텍스트 버퍼의 내용이, 부분적으로 완료된 상태 데이터가 CCB에 저장되었을 때 저장되었던 연관된 메타데이터를 사용하여 검증된다. 검증이 통과되면, 단계 56은 커맨드 컨텍스트 버퍼의 내용을 사용하여 이출 커맨드의 부분적으로 완료된 상태, 예를 들면 어떤 부분적으로 암호화된 데이터, 암호화가 진행된 원래 데이터 내의 위치에 대한 포인터, 부분적으로 완료된 커맨드의 추가 속성 등을 복원하는 역할을 한다. 단계 48에서 커맨드에 의해 지시된 이출 동작의 초기화 후에, 처리는 단계 52를 포함하는 경로 또는 영역 관리 유닛 이출 커맨드를 실행하기 위한 명령이 도달되는 단계 58에 도달하기 위한 단계 54 및 56을 포함하는 경로로 진행한다. 이 커맨드가 도달되면, 영역 관리 유닛 20, 22, 24는 메모리 영역 내의 데이터의 일부에 대해 암호화를 수행하고 이것을 목적지(destination) 내에 저장한다(이는 또한 단계 48에서 RMU 이출 초기화 명령 내에 지정된 포인터이다). 단계 60은 단계 48 및 58에서 실행되는 명령을 발행한 커맨드 소스보다 우선순위가 높은 커맨드 소스로부터의 인터럽트(interrupt)가 수신되었는지를 판정한다. 이러한 우선순위가 높은 커맨드는 앞에서 설명한 대로 제어 계층(예를 들면, 영역 계층, 우선순위 계층 등) 내에서 우선순위가 높은 위치의 소스에서 비롯된다. 이러한 높은 우선순위 인터럽트가 수신되면, 처리는 단계 62로 진행하여, 이출 커맨드가 정지되고 단계 48 및 58에서 실행된 명령을 발행한 커맨드 소스로 에러 코드가 리턴된다. 단계 64는 커맨드 컨텍스트 버퍼에 커맨드의 부분적으로 완료된 상태를 저장하는 역할을 한다. 단계 66은 이후에 검색될 때 커맨드 컨텍스트 버퍼 내에 저장된 부분적으로 완료된 상태를 검증하는데 사용하기 위해 커맨드 컨텍스트 버퍼 메타데이터를 RMU-Private 메모리 영역에 저장한다. 단계 68은 "부분적으로 이출된" 상태에서와 같이 부분적으로 완료된 이출 커맨드를 받았으며 그러한 부분적 이출을 수행하는 프로세스를 나타내는 메모리 영역을 표시하는 역할을 한다. 이렇게 하면 나중에 해당 이출을 다시 시작하는 데 도움이 된다.
단계 60에서의 판정이 인터럽트가 없는 것이면, 처리는 단계 70으로 진행하여 메모리 영역의 이출이 완료되었는지에 관한 판정이 이루어진다. 이출이 완료되지 않았으면, 처리는 단계 58로 되돌아간다. 이출이 완료되었으면, 처리는 단계 72로 진행하여 비어 있는 (그것의 저장된 데이터가 그것으로부터 이출된) 메모리 영역은 원래 저장된 데이터와 상관없는 데이터(예를 들어, 제로화되고, 어떤 다른 고정 번호로 설정되며, 램덤 데이터로 채워짐 등)로 덮어쓰기 된다. 그런 다음 처리가 종료된다.
상기 논의된 예시적인 실시 예에서, CCB는 예를 들어 초기화 명령 내에서, 연관된 포인터에 의해 지정된 별도의 개인 메모리 영역으로서 제공된다. 그러나, 다른 예시적인 실시 예에서는, CCB는 별도의 메모리 영역으로서 제공되는 것이 아니라, 커맨드에 의해 생성된 결과 데이터가 저장되어 있는 목적지 메모리 영역과 같이, 중단될 수 있는 커맨드에 의해 이미 사용된 메모리 영역의 일부로서 제공될 수 있다. 중단될 수 있는 이출 커맨드의 경우에, 이출된 암호화된 데이터는 이출이 수행되고 있는 동안 RMU 프라이빗 메모리 영역인 목적지 메모리 영역 내에 저장된다. CCB는 예를 들어 암호화된 데이터로 채워지고 있는 동안 이러한 목적지 영역(destination region)의 끝 부분으로서 제공될 수 있다. CCB 내에 저장된 컨텍스트 데이터의 무결성(integrity)은 이출 조작이 수행되고 있는 동안 RMU 프라이빗인 목적지 영역에 의해 보장된다.
또 다른 예시적인 실시 예에서, CCB는 영역 디스크립터(RD)의 일부로서 제공될 수 있고; 이 경우, 컨텍스트 데이터에 대해 이용 가능한 저장 공간은 RD에서 이용 가능한 공간에 의해 제한될 수 있고, 그래서 지원되는 인터럽트 가능한 병렬 커맨드의 수는 RD와 함께 이용 가능한 저장 공간에 의해 각각의 CCB로서 기능하도록 제한될 수 있다. CCB는 별도로 또는 메모리 영역의 일부로서 또는 다른 목적으로도 사용된 리소스로서 제공될 수 있다.
도 6은 다른 소스로부터 부분적으로 완료된 커맨드를 중단/차단하기 위해 상이한 커맨드 소스에서 어떤 커맨드가 허용되는지 판정하는 영역과 제어 계증 간의 관계를 개략적으로 나타낸 것이다. 설명된 예에는 세 가지 레벨의 네스티드 영역(nested realms)이 포함된다. 부모 영역 M은 예외 레벨 EL3에 대응한다. 자식 영역 N은 예외 레벨 EL2에 대응한다. 영역 N 내에 있는 2개의 손자 영역은 영역 O과 영역 P를 포함하며 둘 다 예외 레벨 EL1이다. 이 예에서, 예외 레벨 우선 순위 및 네스티드 계층(nested hierarchy)의 영역 내에서의 상대적 위치 둘 모두는 영역 M이 그 영역 N보다 우선 순위가 높고 영역 N이 영역 O 및 영역 P 둘 보다 우선 순위가 높은 제어 계층의 순서(ordering)를 제공한다. 영역 O 및 영역 P는 우선 순위가 같다.
도 7은 RMU 이입 커맨드에 후속하는 페이지(메모리 영역) 이입 동작을 개략적으로 나타내는 흐름도이다. 단계 74는 데이터가 이입될 수 있는 빈 페이지(메모리 영역)를 획득하고 클린(clean)하는 역할을 한다. 단계 76은 그것의 연관된 저장된 메타데이터(RMU-프라이빗 영역에 저장됨)를 사용하여 이입되어야 하는 암호화된 데이터를 검증한다. 이 검증이 성공하지 않으면, 오류가 발생한다. 성공적인 검증에 이어서, 단계 78은 암호화된 데이터를 해독하는 역할을 하고 단계 80은 해독된 데이터를 단계 74에서 취득한 메모리 페이지에 저장하는 역할을 한다. 일단 메모리 페이지가 해독된 데이터로 채워져 있으면, 그것은 소유 영역(프로세스)에 공개(released)될 수 있다. 취득되어 채워진 페이지는 페이지 이입 프로세스 중에 메모리 관리 회로(영역 관리 유닛 20, 22, 24)에 독점적으로 이용 가능하도록 잠금된다.
도 8은 상이한 커맨드 소스와 병렬로 발생할 수 있는 두 개의 이출 커맨드를 개략적으로 나타낸 것이다. 일련의 명령 중 하나는 가상 머신(예를 들면, 게스트 운영 체제)에 해당하는 프로세스에서 시작된다. 다른 커맨드 소스는 가상 머신과 비교하여 더 높은 레벨의 특권(또는 영역 계층 내에서 잠재적으로 더 높은 레벨)의 하이퍼바이저이다. 따라서, 하이퍼바이저로부터의 이출 커맨드는 가상 머신을 대신하여, 영역 관리 유닛 20, 22, 24에 의해 수행되는 부분적으로 완료된 이출 커맨드를 중단할 수 있다. 하이퍼바이저 대신 이출이 완료되면, 가상 머신 대신 이출이 다시 시작될 수 있다.
이 예에서, 영역 관리 유닛 20, 22, 24에 대한 커맨드는, 메모리 액세스 회로가 이출 동작에 대응하는 커맨드 시퀀스가 완료되었다고 보고할 때까지 반복적으로 실행되는 조합된 초기화 및 실행 커맨드일 수 있다. 이전에 논의된 예에서, 이출 커맨드는 커맨드 시퀀스가 완료되었다고 메모리 액세스 회로가 보고할 때까지 반복적으로 실행되는 후속 이출 실행 코맨드 뒤에 오는 다른 포인터 및 커맨드 컨텍스트 버퍼에 대한 포인터를 명시하는 이출 초기화 커맨드로 형성될 수 있다. 다른 예시적인 실시 예들에서, 이출 동작은 결합된 초기화 및 실행 커맨드가 중단되면 발행되는 실행 계속 커맨드 및 결합된 초기화 및 실행 커맨드(인터럽트 가능)에 의해 제어될 수 있다.
커맨드 컨텍스트 버퍼는 이 데이터를 나중에 복원할 수 있도록 부분적으로 완료된 커맨드 시퀀스를 나타내는 부분적으로 완료된 상태를 저장하는 데 사용된다. 이런 식으로, 시스템은, 인터럽트를 서비스할 수 있기 전에 전체 이출 동작이 완료될 때까지 기다릴 필요가 없다. 또한, 부분적으로 완료된 상태가 유지되므로, 이출 동작이 초기 지점에서 다시 시작될 필요가 없으므로 반복적으로 중단되더라도 이출 동작을 통한 순방향 진행이 보장된다.
도 9는 도 1의 처리 요소 8, 10, 12 중 하나 및 메모리 액세스를 제어하기 위해 메모리(16)에 저장된 제어 데이터의 보다 상세한 예를 도시한다. 설명의 편의를 위해, 도 9는 처리 요소(8)로서 CPU 0을 도시하지만, 처리 요소는 또한 GPU(12)의 CPU 1(10) 또는 데이터 처리 장치(2) 내의 어떤 다른 처리 요소일 수 있음을 이해할 것이다. 도 9에 도시한 바와 같이, 처리 요소(8)는 처리 회로(32)(이것은 상기 설명한 디코딩 및 실행 로직을 포함할 수 있다), 메모리 관리 유닛(26)을 포함하는데, 이는 변환 테이블(translation tables)의 엔트리를 캐싱하기 위한 하나 이상의 변환 색인 버퍼(100)(공유된 MMU-RMU TLB 구조가 사용되는 경우 RMU(20)로부터의 영역 기반 제어 데이터가 추가될 수 있음)와, TLB(100)에 대한 데이터의 할당을 제어하고 메모리에 대한 워크 액세스(walk accesses)를 트리거하여 주어진 메모리 액세스가 수행될 수 있는지 여부를 제어하는 데 사용되는 필요한 데이터를 찾는 테이블 워크 유닛(102)을 포함할 수 있다. 처리 요소(8)는, 또한 예를 들어 위에서 논의된 페이징(이출/이입) 동작에서 사용하기 위해, 데이터를 암호화 또는 복호화하기 위한 암호화 동작을 수행할 수 있는 암호화 유닛(104)을 포함할 수 있다. 처리 요소(8)는 또한 메모리(16)로부터 판독된 데이터 또는 명령을 캐시할 수 있는 다수의 캐시(110)를 포함한다. 처리 회로(32) 또는 테이블 워크 유닛(102)에 의해 트리거된 메모리에 대한 액세스가 캐시에서 누락되면, 데이터가 메인 메모리(16)로부터 위치될 수 있다.
처리 요소(8)는 또한 전술한 바와 같은 영역 관리 유닛(20)을 포함한다. 일부 실시 예들에서, 영역 관리 유닛(RMU)(20)은 하드웨어 회로로서 제공될 수 있다. 그러나, 이하에서 논의되는 RMU 동작 중 일부는, 예를 들어 상이한 메모리 영역에 대한 다수의 액세스가 수행되어야 하는 경우, 순전히 하드웨어적으로 구현하기가 비교적 복잡할 수 있다. 따라서, 일부 예들에서, RMU(20)는 데이터 처리 장치(2) 내에 저장될 수 있고 범용 처리 회로(32)를 사용하여 실행될 수 있는 프로그램 코드를 사용하여 구현될 수 있다. 메모리(16)에 기록될 수 있고 재기록이 가능한 범용 소프트웨어와 달리, RMU 소프트웨어(millicode)는 데이터 처리 장치에 비교적 영구적으로 설치되어 제거될 수 없으며, 처리 시스템에 의해 제공되는 플랫폼의 일부로서 간주될 수 있다. 예를 들어 RMU 프로그램 코드는 ROM(read only memory) 내에 저장될 수 있다. 따라서, RMU는 하드웨어 유닛을 포함하거나, 영역 관리 소프트웨어를 실행하는 처리 회로(32)를 포함할 수 있으며, 이는 처리 회로(32)에 의해 실행되는 범용 소프트웨어에 포함된 RMU 커맨드에 의해 실행되도록 트리거된다. 일부 예에서, RMU(20)는 하드웨어 및 소프트웨어의 조합을 사용하여 구현될 수 있고, 예를 들면, 더 빠른 처리를 위해 하드웨어 회로를 사용하여 몇몇 더 간단한 기능을 구현할 수도 있지만, 밀리코드를 사용하여 더 복잡한 기능을 구현할 수도 있다. 따라서, RMU에 대한 그 다음의 레퍼런스(references)는 하드웨어 또는 소프트웨어 또는 둘의 조합을 지칭할 수 있다는 것이 이해될 것이다.
도 9에 도시된 바와 같이, 메모리(16)는 메모리에 대한 액세스를 제어하기 위해 MMU(26) 및 RMU(20)에 의해 사용되는 다수의 제어 정보를 저장할 수 있다. 이들은 어느 프로세스가 주어진 메모리 영역에 액세스할 수 있는지를 제어하기 위한 메모리 액세스 속성뿐만 아니라, 가상 어드레스를 물리적 어드레스로 변환하기 위한 어드레스 매핑 정보를 정의하는, 변환 테이블(페이지 테이블이라고도 함)(120)을 포함한다. 변환 테이블(120)은 도 2와 관련하여 위에서 논의된 예외 레벨에 근거해서 정의될 수 있으므로, 특권이 더 많은 예외 레벨에서 실행되는 프로세스는 특권이 더 적은 예외 레벨에서 실행되는 프로세스가 대응하는 메모리 영역에 액세스할 수 있는지 여부를 제어하는 권한(permissions)을 설정할 수 있다.
또한, MMU 페이지 테이블(120)에 대한 직교 방식으로 메모리 액세스를 제어하기 위해 다수의 영역 관리 테이블 또는 영역 제어 정보(122)가 제공되어, 특권이 더 적은 프로세스가 특권이 더 많은 프로세스가 액세스되는지를 제어할 수 있도록 한다(영역 제어는 서비스될 메모리 액세스 요청을 위해서, 두 가지 유형의 액세스 제어 검사를 모두 통과해야 할 수도 있다는 점에서 MMU 제어와 직교한다). 영역 관리 테이블을 사용하면, 주어진 메모리 영역을 소유하는 소유자 프로세스(영역(relm))는 특권이 더 많은 예외 레벨에서 실행되는 프로세스를, 해당 메모리 영역에 액세스하는 것으로부터 제외시킬 권리가 있다. 영역 관리 데이터(realm management data)는 주어진 영역(realm)의 속성을 기술하는 영역 디스크립터(124)를 포함한다. 각 영역(realm)은 처리 회로(32)에 의해 실행되는 적어도 하나의 소프트웨어 프로세스의 적어도 일부에 대응한다. 일부 영역은 둘 이상의 프로세스에 대응할 수 있는 반면에, 다른 영역(realms)은 주어진 소프트웨어 프로세스의 서브 부분에만 대응할 수 있다. 영역(realm)은 또한 메모리 어드레스 공간의 주어진 영역(region)에 매핑되는 것으로 볼 수 있다(처리 회로(32)는 메모리 어드레스 공간의 대응하는 영역(region) 내에 있는 프로그램 명령을 실행할 때 주어진 영역 내에서 실행된다). 따라서, 영역(realm)은 소프트웨어 프로세스의 세트 또는 소프트웨어 프로세스의 일부, 또는 메모리 어드레스 공간의 영역(area)으로 볼 수 있다. 이들 두 가지 관점은 동일하다. 설명의 편의를 위해, 이후의 설명은 영역(realm)을 적어도 하나의 소프트웨어 프로세스의 적어도 일부라고 지칭하지만, 메모리 영역(memory region)의 모음으로서의 영역(realm)의 대응하는 관점은 동일하게 유효하다(이 경우, 영역(realm)으로/으로부터의 "진입(entry)" 및 "퇴장(exit)"은 영역(realm)에 대응하는 메모리 어드레스의 일부에 도달/떠나는 프로그램 실행에 대응할 수 있다).
영역 관리 데이터(122)는 또한 영역 퇴장 또는 진입 시에 주어진 영역과 관련된 아키텍처 상태를 저장 및 복원하는데 사용될 수 있는 영역 실행 컨텍스트 영역(realm execution context regions)(126)을 포함한다. 영역 관리 데이터는 또한 메모리 어드레스 공간의 각 영역(region)에 대해 어느 영역이 그 메모리 영역(memory region)에 대한 소유자 영역(owner realm)인지를 정의하는 영역 그래뉼 테이블(또는 소유권 테이블)(128)을 포함한다. 주어진 메모리 영역의 소유자 영역은 다른 영역(특권이 더 많은 프로세스를 포함)을 해당 메모리 영역 내에 저장된 데이터에 액세스하지 못하게 할 권리가 있다. 이 영역 관리 데이터 사용에 대해서는 아래에서 더 자세히 설명한다. 일반적으로, 영역 관리 유닛(20) 및 MMU(26)는 그 영역에 의해 소유된 메모리 영역에 대한 소유자 영역에 의해 정의된 소유권을 집행하는 메모리 액세스 회로로 볼 수 있다. 이것은 예를 들어, 상이한 당사자에 의해 제공된 다수의 가상 머신(36)이 클라우드 서버 오퍼레이터에 의해 제공된 하이퍼바이저(38)의 제어 하에서 실행될 수 있는 클라우드 플랫폼에 특히 유용할 수 있다. 가상 머신 중 하나를 제공하는 당사자는 그들의 데이터 및 코드가 하이퍼바이저에 액세스하기를 원하지 않을 수 있다. 특권이 적은 예외 레벨에서 실행하는 영역이 특권이 더 많은 예외 레벨이 그것의 데이터나 명령에 액세스하는 것을 배제할 수 있는 영역의 개념을 도입함으로써, 이것에 의해 물리적 하드웨어를 다른 당사자가 제공한 코드와 공유할 수 있는 클라우드 서비스에 소프트웨어를 설치하는 코드 개발자의 신뢰도를 높일 수 있는 블라인드 하이퍼바이저(blind hypervisor)를 제공할 수 있다.
도 10에 도시된 바와 같이, 영역은 루트 영역(root realm)(130) 이외의 각 영역이 초기화 커맨드를 실행함으로써 자식 영역을 초기화한 대응하는 부모 영역을 갖는 자식 영역인 영역 계층에 따라 RMU(20)에 의해 관리된다. 루트 영역(130)은 예를 들어 가장 특권이 있는 예외 레벨(EL3)에서 실행되는 모니터 코드 또는 시스템 펌웨어와 관련된 영역일 수 있다. 설명을 쉽게 하기 위해, 도 10의 예와 이후에 논의된 초기 예는 각 자식 영역이 그 부모 영역보다 낮은 특권 레벨에서 실행되는 경우를 나타낸다. 그러나, 아래에서 설명하겠지만 부모와 동일한 예외 레벨에서 실행되는 서브 영역(sub-realm)을 설정할 수도 있다.
일반적으로, MMU(26)에 의해 제공되는 메모리 액세스 제어의 영역 관리 부분에 대해, 자식 영역은 그 부모 영역이 소유한 임의의 메모리 영역에 대한 디폴트 액세스를 갖는다. 마찬가지로, 주어진 영역의 모든 자손(descendant)은 주어진 영역의 소유 메모리 영역에 액세스할 수 있다고 가정한다. 그러나, 영역 관리 제어는 예외 레벨에 근거하여 변환 테이블(120)에 의해 제공되는 제어와 직교하므로, 더 높은 특권 레벨에서 실행되는 프로세스는 여전히 변환 테이블(120)의 파라미터를 설정함으로써 더 적은 특권 코드가 그 데이터에 액세스하는 것을 배제할 수 있다. 따라서, 일반적으로 주어진 자식 영역은 그것의 부모 영역이 주어진 자식 영역이 소유한 주어진 메모리 영역에 저장된 데이터에 액세스하는 것을 배제할 권리가 있다. 자식 영역이 부모 영역이 주어진 메모리 영역에 액세스하는 것을 실제로 배제하는지 여부는 소유권 테이블(128)에 설정된 제어 속성에 근거하여 설정될 수 있다(디폴트는 부모 영역이 자식 영역의 소유 영역에 액세스할 수 없지만, 자식 영역이 그에 따라 가시성 속성(visibility attributes)을 설정하여 부모 영역에 대한 액세스 권한을 부여하도록 선택할 수 있다는 것일 수 있다). 여러 형제 영역(동일한 부모 영역을 공유하는 상이한 자식 영역)이 있는 경우, 주어진 자식 영역은 형제 영역이 주어진 자식 영역이 소유한 주어진 메모리 영역에 저장된 데이터에 액세스하는 것을 배제할 수 있다. 또한, 소유권 테이블(128)에 설정된 가시성 속성은 형제 영역이 서로의 데이터에 액세스할 수 있는 정도를 제어할 수 있다. 대안으로, 형제 영역에 의한 액세스는 부모 가시성 속성에 근거하여 제어될 수 있어서, 자식 영역이 그 부모 영역에 페이지를 보이게 하면, 동일한 페이지가 그 형제 영역 및 형제 영역의 추가 자손에게도 보이게 될 수 있다. 일부 경우에, 소유권 테이블(128)은 주어진 소유자 프로세스가 어떤 영역 하에서 실행되는 임의의 프로세스가 자신의 소유 메모리 영역 내의 데이터에 액세스할 수 있게 하는 글로벌 가시성 속성을 가질 수 있다.
도 10에 도시된 바와 같이, 각 영역(140)은 주어진 영역에서 나갈 때, 레지스터 값과 같은, 영역의 구조적 상태를 저장하는데 사용될 수 있는 하나 이상의 영역 실행 컨텍스트(REC) 메모리 영역(126)과 관련된다. 주어진 영역에 제공된 REC(126)의 수는 주어진 영역 하에서 얼마나 많은 실행의 스레드(threads)가 동작하는지에 따라 달라질 수 있다. 예를 들어, 처음 초기화될 때의 영역은 단일의 최초 REC 영역(126)으로 설정될 수 있지만, 영역은 그 영역에 의해 소유된 다른 메모리 영역을, 필요에 따라 추가의 REC로서 작동하도록 구성할 수 있다. REC 메모리 영역은 실행 상태가 해당 REC에 저장된 대응하는 영역에 의해 소유된다.
각 영역은 영역 디스크립터(124)에 속성이 기술된 영역의 부모 영역에 의해 소유되는 메모리 영역에 저장되는 영역 디스크립터(124)와 관련된다. 주어진 영역 생성에서 정의될 수 있는 자식 영역의 수의 유연성(flexibility)에 대해서, 영역 디스크립터는 영역 디스크립터 트리(RDT)라고 불리는 트리 구조를 사용하여 관리되는데, 이는 나중에 더 상세히 설명될 것이다. 영역 디스크립터(124)는 보안을 보장하기 위해 영역에 진입 또는 퇴장할 때 RMU(20)에 의해 검사될 수 있는 영역의 속성을 정의하는데 사용될 수 있다. 영역 디스크립터는 또한 다양한 라이프사이클 상태를 통한 영역의 진행을 추적하여, 영역에 대한 특정 RMU 커맨드의 실행이 특정 라이프사이클 상태로 제한되어, 영역이 안전한 방식으로 작성되고 무효화되는 것을 보장할 수 있다.
도 11과 12는 가능한 영역 계층의 두 가지 다른 예를 나타낸다. 도 11의 예에서, 도 2에 도시된 프로세스의 각각은 그 자신의 영역이 정의되어 있다. 따라서, 루트 영역(130)은 예외 레벨 EL3에서 동작하는 모니터 소프트웨어 또는 펌웨어에 대응한다. 루트 영역은 2개의 자식 영역(142)을 정의하는데, 하나는 보안 EL1에서 동작하는 보안 운영 체제에 대응하고 다른 하나는 EL2에서의 하이퍼바이저에 대응한다. 하이퍼바이저는 EL1에서 상이한 게스트 운영 체제에 대응하는 손자 영역(144)을 정의하고, 이들 게스트 운영 체제의 각각은 최소 특권 예외 레벨 EL0에서 실행되는 애플리케이션에 대응하는 추가의 증손(great-grandchild) 영역(146)을 정의한다. 유사하게, 영역(142)에서의 보안 운영 체제는 상이한 보안 애플리케이션에 대응하는 손자 영역(148)을 정의할 수 있다. 계층 구조에서의 부모 영역은 현재 소유하고 있는 메모리 페이지의 소유권을 (아래에 설명된 것과 같이 Granule.Add 커맨드를 사용하여) 새로운 자식 영역으로 전달하거나, 해당 페이지 중 하나를 유효하지 않게 만들 수 있고, 그것을 자식의 가상 어드레스 공간에 매핑하고, 자식 영역이 페이지 소유권(클레임(Claim)) 커맨드를 실행하여 페이지의 소유권을 주장할 수 있도록 한다. 메모리 어드레스 공간의 지정된 페이지가 커맨드를 발행한 부모 영역에 의해 아직 소유되지 않은 경우 페이지 소유권 커맨드가 거부될 수 있다.
도 12에 도시된 바와 같이, 모든 특권 레벨에서 프로세스가 별도의 영역을 갖는 것은 필수가 아니므로, 도 12에서 점선으로 표시된 특권 레벨 경계 중 일부는 영역 경계에 대응하지 않을 수도 있다. 예를 들어, 도 12에서, 애플리케이션(150) 및 그 운영 체제는 예외 레벨 EL2에서 동작하는 하이퍼바이저 영역(142)과 동일한 영역 내에서 실행되므로, 단일 영역은 양쪽 EL2 하이퍼바이저 코드, EL1에서 동작하는 운영 체제 및 EL0에서의 애플리케이션을 스팬(span)한다. 다른 한편, 동일한 하이퍼바이저 하에서의 상이한 애플리케이션(152)은 자신의 개별 영역이 정의될 수 있다. 이 경우 영역 경계는 EL1과 EL0 사이이며 EL2-EL1 영역 경계는 없다(양쪽 하이퍼바이저와 운영 체제는 동일한 영역에서 실행될 수 있다). 또 다른 운영 체제의 경우, 별도의 EL1 영역(154)이 정의될 수 있으며, 이 영역은 운영 체제와 동일한 영역 내에서 실행되는 일부 애플리케이션, 및 자신의 전용 영역을 갖는 다른 애플리케이션을 다시 가질 수 있다. 마찬가지로, 보안 측면에서도, 도 12에서의 보안 OS 및 애플리케이션은 EL3 루트 영역 내에서 완전히 실행되므로, 보안 측면에서 작동할 때는 영역 경계가 없다. 따라서, 영역의 정확한 구성은 실행중인 프로세스의 요구에 따라 주어진 시스템에 대해 런 타임(run time)에 결정될 수 있다. 소프트웨어는 (낮은 레벨의 펌웨어에 대한 경우일 수도 있는) 작고 고정된 수의 자식 영역만 필요한지 또는 많은 영역이나 다양한 영역 수가 필요한지(예를 들어, 알 수 없는 수의 게스트 가상 머신을 관리할 수 있는 클라우드 플랫폼의 하이퍼바이저에 유용할 수 있음)를 런타임에 결정할 수 있다.
주어진 부모 영역에 대한 영역 디스크립터(124)는 (해당 부모 영역의 다수의 자식 영역에 대한 영역 관리 데이터를 정의하는 영역 관리 트리의 예인) 영역 디스크립터 트리에 따라 관리된다. 트리는 다양한 수의 레벨을 가지고 있다. 도 13은 특정 부모 영역에 의해 관리되는 이러한 영역 디스크립터 트리(160)의 예를 도시한다. 트리(160)는 각각이 다수의 영역 디스크립터 트리 엔트리(RDTE)(164)를 포함하는 다수의 영역 디스크립터 트리 그래뉼(RDTG)(162)을 포함한다. 각 RDTE(164)는 부모 영역의 주어진 자식 영역에 대한 영역 디스크립터(166) 또는 다음 레벨의 영역 디스크립터 트리에 대한 추가 RDTG(162)에 대한 포인터를 제공한다. 트리의 제1 레벨에 대한 RDTG(162)는 부모 영역(예를 들어, 부모 영역의 영역 디스크립터)과 관련된 데이터의 일부로서 저장될 수 있는 영역 디스크립터 트리 포인터(168)에 의해 식별될 수 있다. 따라서, 부모 영역이 주어진 자식 영역과 연관된 RMU 커맨드를 발행할 때 필요한 자식 영역의 영역 디스크립터(166)를 찾기 위해 RMU가 영역 디스크립터 트리를 횡단하도록 트리거할 수 있다(그 영역 디스크립터가 RMU(20) 내에 아직 캐시되지 않은 경우). 각각의 RDTG(162)는 가변 개수의 엔트리(164)를 가질 수 있다.
도 13의 표에 도시된 바와 같이, 트리의 다음 레벨에서 RDTG(162)에 대한 포인터를 제공하는 주어진 RDTE(164)는 RDTG를 가리키는 최대 엔트리 수를 나타내는 순서 값(order value)을 포함할 수 있다. 예를 들어, 오더 값은 RDTG를 가리키는 총 엔트리 수에 대응하는 2의 거듭제곱(power of two)을 나타낼 수 있다. RDTE(164)에 포함될 수 있는 다른 정보는 RDTE의 상태를 나타내는 상태 값(예를 들어, RDTE가 영역 디스크립터 트리 데이터를 할당하는데 자유로운지 여부, 및 RDTE가 추가 RDTG(162) 또는 자식 영역 디스크립터(166)에 대한 포인터를 제공하는지 여부)을 포함할 수 있다. 포인터 이외에, RDTE는 또한 자유롭지 않은 RDTG에 대한 포인터에서 RDTE의 수를 추적할 수 있는 기준 카운트를 포함할 수 있으며, 이는 추가 RDTE가 그 RDTG(162)에 할당될지 여부를 결정하는데 유용할 수 있다. 부모 영역에 의해 트리거되는 RUM 커맨드는 RMU(20)를 제어하여 트리의 추가 RDTG를 확립하고 및/또는 기존 RDTG 내의 RDTE의 내용을 편집할 수 있다.
도 13에 도시된 트리는 하나의 특정 부모 영역의 자식 영역을 도시한다는 점에 유념한다. 서로 다른 부모 영역에는 그 자신의 자식 영역을 추적하는 별도의 영역 디스크립터 트리가 있을 수 있다. RDTG(162) 및 자식 영역 디스크립터(166)를 포함하는 트리와 관련된 데이터는 부모 영역이 소유한 페이지 내에 저장되므로 다른 영역은 이 데이터에 액세스하는 것에서 배제될 수 있다. 따라서 부모 영역만 그것이 구성한 특정 자식 영역에 대한 가시성을 가질 수 있으므로, 더 높은 특권 수준에서 실행되는 프로세스는 직접 생성된 어떤 자식 영역 하에서 어떤 영역이 생성되었는지에 대한 어떤 가시성도 가질 수 없다.
도 13에 도시된 바와 같이, 주어진 부모 영역의 자식 영역의 각각은 대응하는 영역 식별자(RID)(168)를 가질 수 있으며, 이는 특정 자식 영역을 식별하기 위해 그 부모 영역에 의해 사용된다. RID는 특정 부모 영역에 한정한다는 점에서 로컬 영역 식별자이다. 상이한 부모 영역의 자식 영역은 동일한 로컬 RID를 가질 수 있다. 주어진 자식 영역에 대한 부모 영역에 의해 선택된 임의의 값을 갖는 로컬 RID를 사용할 수 있지만, 도 13 및 14에 도시된 접근법에서, 주어진 자식 영역에 대한 로컬 RID는 가변수의 가변 길이 비트 부분을 갖고, 가변 길이 부분의 각각은 RMU(20)에 의해 주어진 레벨의 영역 디스크립터 트리(160)로 색인(index)하기 위해 사용된다. 예를 들어, 도 13에서 로컬 RID = 7을 갖는 자식 영역의 영역 디스크립터는 제1 레벨 RDTG(162)의 엔트리 7에서 영역 디스크립터 포인터를 따라 액세스된다. 로컬 RID = 3.3을 갖는 자식 영역의 영역 디스크립터는 트리의 제1 레벨에서 엔트리 3 및 그 다음에 트리의 제2 레벨에서 엔트리 3을 따라 액세스된다. 마찬가지로, 로컬 RID = 1.2을 갖는 자식 영역에 대한 영역 디스크립터는 제2 층에서의 엔트리 1과 제2 층에서의 엔트리 2을 따라 액세스된다.
도 13에서는 로컬 RID가 십진법으로 도시되어 있지만, 도 14는 이들이 이진 식별자를 사용하여 표현될 수 있는 방법을 도시한다. 이진 식별자는 다수의 가변 길이 비트 부분(170)을 가질 수 있고, 이들 비트 부분의 각각은 대응하는 레벨의 RDT에서 사용할 인덱스를 지정할 수 있다. 이 예에서는, 이진 로컬 RID가 최하위 단부부터 먼저 채워지므로, 가장 낮은 5 비트는 트리의 제1 레벨에서의 엔트리에 대응하고, 다음 4 비트는 제2 레벨에서의 엔트리 등에 대응한다. 이 예에서 전체 로컬 RID는 최하위 부분이 값 7을 제공하므로 7.1.3에 대응하고, 다음 최하위 비트 부분은 값 1 등을 제공한다.
각각의 가변 길이 비트 부분(170) 내에서 사용되는 비트의 수는, RMU(20)가 영역 디스크립터 트리 사이를 이동함으로써 트래버스(traverse)되는 RDTE 내의 순서 값을 사용해서 결정될 수 있다. 로컬 RID의 제1 비트 부분의 순서 값은 부모 영역의 영역 디스크립터 내에서 (제1 레벨의 RDTG 포인터와 함께) 정의될 수 있다. 예를 들어, 도 14의 예에서, 3개의 레벨에 대한 순서 값은 각각 5, 4 및 2인데, 이것은 처음 5 비트가 레벨 1에 대한 인덱스를 나타내고, 다음 4 비트가 레벨 2에 대한 인덱스를 나타내며, 다음 2 비트가 RDT의 레벨 3에 대한 인덱스를 나타낸다는 것을 각각 나타낸다. 결국 RID(종료) 마커(marker)(172)의 끝에 도달하는데, 이는 트래버스할 트리의 추가 레벨이 없음을 나타내는 소정의 패턴을 가지며, 따라서 최종 레벨 RDTG의 포인터로부터 액세스된 다음 메모리 영역은 필요한 자식 영역에 대한 영역 디스크립터를 제공할 것이다. 사용하지 않는 비트는 모두 0으로 채워진다. 도 14는 RID가 최하위 끝에서 채워지는 예를 도시하지만, 이진 값의 최하위 끝에서 시작하여 트리 사이를 이동하는 데 필요한 인덱스를 연결하여 RID를 구성할 수도 있다.
이 접근방식은 주어진 부모 영역에 의해 다양한 자식 영역 수가 설정될 수 있고 이들 자식 영역에 대한 영역 디스크립터가 효율적으로 액세스될 수 있는 유연한 인프라스트럭처(flexible infrastructure)를 제공한다. 영역 식별자는 영역 디스크립터 트리 사이를 이동하는 데 필요한 인덱스를 명시적으로 제공하므로, 임의의 영역 수를 트리를 통해 특정 경로에 매핑하는 매핑 테이블을 유지할 필요가 없다. 트리 구조가 사용되면, 특정 고정 수의 엔트리를 제공하는 테이블 구조와 비교하여, 부가적인 RDTG를 추가하거나 트리의 주어진 레벨에 부가적인 RDTE를 추가하여 자식 영역의 수에 필요한 만큼 트리를 적절히 확장할 수 있다. 따라서, 이 구조는 상이한 소프트웨어 프로세스의 요구에 따라 확장 가능하다. RID의 어느 부분이 주어진 트리 레벨에 매핑되어야 하는지 미리 정확하게 지정되어 있지 않기 때문에, 이것은 RID의 이용 가능한 비트가 트리의 상이한 깊이/브레드(depths/breadths)를 수용하기 위해 유연하게 할당될 수 있게 한다.
영역 관리 유닛(20)은 필요할 때, 예를 들어, 새로운 영역에 대한 진입이 허용되는지 아닌지 여부를 판정하고 새로운 영역의 속성을 식별하기 위해 영역에 들어가거나 나올 때, 또는 특정 RMU 커맨드를 실행하는 것이 적절한지 여부를 판정할 때, 영역 디스크립터 트리에 액세스하는 것을 담당할 수 있다. 일반적으로, 영역 관리 회로는, 영역 디스크립터 트리의 주어진 레벨에 인덱스를 제공하는 가변 길이 비트 부분들 중의 주어진 하나를 갖는 가변 수의 가변 길이 비트 부분을 포함하는 주어진 영역의 영역 식별자를 사용하여 영역 디스크립터 트리를 인덱싱할 수 있다. 이것은 상이한 소프트웨어 프로세스에 대한 폭넓고 다양한 요구사항을 지원하여 자식 영역을 설정하기 위해 영역 디스크립터 트리의 유연한 디멘저닝(dimensioning)을 가능하게 한다.
영역 관리 회로(20)는 영역 디스크립터 트리의 이전 레벨에서 엔트리 인덱스에 의해 지정된 순서 값에 근거하여, 영역 디스크립터 트리의 주어진 레벨로 인덱싱하기 위해 사용되는 가변 길이 비트 부분에 의해 몇 비트가 구성되는지를 판정할 수 있다. 트리의 엔트리 내에 순서 값을 저장함으로써, RID의 어느 비트가 트리의 주어진 레벨에 매핑되기 위해 사용되는지 미리 정의할 필요가 없으며, 이것은 추가적인 유연성을 제공한다.
RMU는 동일한 레벨의 영역 디스크립터 트리에서 상이한 브랜치(branches)로 인덱싱하기 위한 가변 길이 비트 부분이 상이한 수의 비트를 갖도록 허용할 수 있다. 즉, 도 13에서 층 2에 도시된 두 RDTG(162)는 동일한 순서 값(따라서 동일한 수의 엔트리)을 갖지만, 이것이 필수적인 것은 아니며 일부 구현은 상이한 수의 엔트리를 갖는 동일한 레벨의 트리에서 상이한 RDTG(162)를 가질 수 있다. 따라서, 각각의 영역의 RID의 대응하는 부분은 동일한 레벨의 트리에 대해 상이한 수의 비트를 가질 수 있다. 따라서, 주어진 길이의 트리로 인덱싱하는데 사용되는 비트 부분의 길이의 변화는 부모마다 다를 뿐만 아니라, 한 부모가 관리하는 트리의 상이한 브랜치 내에서도 다를 수 있어, 자식 영역을 정의할 수 있는 방법으로 추가적인 유연성을 제공한다
일반적으로, 주어진 영역에 대한 RID는 주어진 영역에 대한 영역 관리 데이터에 액세스하기 위해 영역 디스크립터 트리의 각 레벨에서 사용될 인덱스의 연결을 포함할 수 있다. 트리 사이를 이동하는 데 사용되는 순서와 동일한 순서로 인덱스를 연결하는 것이 필수는 아니지만, 이것은 트리 액세스 관리를 보다 간단하게 하기 때문에 선호될 수 있다. 연결이 로우(low)에서 하이(high)로 또는 하이에서 로우로 진행되는지 여부는 중요하지 않다. 인덱스의 연결 다음에 RMU(20)가 그 사이를 이동할 트리의 어떤 추가 레벨도 없을 때를 판정할 수 있게 하는 소정의 종료 패턴(termination pattern)이 이어질 수 있다.
일부 구현에서는 유사한 트리 구조로 시스템 내의 모든 영역에 대한 영역 디스크립터를 저장할 수 있는 글로벌 영역 디스크립터 트리에 RID 구성 기술을 적용할 수 있다(각 RID는 전체적으로 고유한 값임). 그러나, 한 트리 내에서 주어진 부모의 자식 영역을 정의한 다음 그 자식 영역을 추적하기 위해 부모 영역마다 별도의 트리를 가짐으로써 소프트웨어 개발이 더 간단해질 수 있다. 따라서, 영역 디스크립터 트리는 주어진 부모 영역에 의해 초기화된 자식 영역의 영역 관리 데이터를 저장하기 위해 주어진 부모 영역과 관련된 로컬 영역 디스크립터 트리일 수 있다. 따라서, 영역 식별자는 주어진 부모 영역에 의해 사용되는 특정 자식 영역을 식별하는 로컬 영역 식별자일 수 있다. 상이한 부모 영역에 의해 초기화된 자식 영역은 로컬 영역 식별자의 동일한 값을 가질 수 있다. 이러한 방식으로, 부모 영역은 다른 부모 영역이 어떤 영역을 설정했는지 알지 못한 채 그 자식 영역에 어떤 RID가 사용되는지를 선택할 수 있고, 부모 영역이 그 영역 디스크립터 트리를 구성한 방식에 따라 자식 영역에 대한 RID가 구성된다.
로컬 영역 식별자는 소프트웨어 프로세스에 의해 발행된 영역 진입 명령(realm entry instructions) 또는 RMU 커맨드(commands)에 의해 사용될 수 있다. 그러나, 하드웨어 인프라스트럭처는 주어진 자식 영역의 완전한 식별을 사용하여 상이한 부모에 의해 작성된 영역을 구별할 수 있다. 따라서, 도 13 및 14에 도시된 로컬 영역 식별자들에 부가하여, 주어진 영역은 또한 주어진 영역에 고유한 글로벌 영역 식별자(또는 "내부" 영역 식별자)를 가질 수 있다. 적어도 하나의 하드웨어 구조는 로컬 영역 식별자(LRID) 대신에 글로벌 영역 식별자(GRID)를 사용하여 주어진 영역을 식별할 수 있다. 예를 들어, 영역 그래뉼 테이블(128) 및/또는 TLB(100)는 글로벌 영역 식별자를 사용하여 영역을 식별할 수 있다.
일부 예에서, 임의의 이진 값이 주어진 영역에 대한 GRID로서 할당될 수 있으며, 이는 그 자식 영역을 나타내기 위해 부모 영역에 의해 사용되는 LRID와 완전히 관련이 없을 수 있다. 동일한 영역 아키텍처의 상이한 마이크로 아키텍처 구현은 GRID를 할당하기 위해 상이한 접근 방식을 사용할 수 있다.
그러나, 도 15에 도시된 바와 같은 일 예에서, 주어진 영역에 대한 GRID는 그 조상 영역의 LRID에 근거하여 구성될 수 있다. 이것은 주어진 영역이 MMU(26) 및 RMU(20)에 의한 액세스 제어에 유용할 수 있는 또 다른 영역의 자손인지 또는 또 다른 영역의 조상인지를 보다 간단하게 판정할 수 있기 때문에 유용할 수 있다. 특히, 공통 조상 영역을 공유하는 영역은 GRID의 공통 접두사 또는 접미사 부분을 공유할 수 있다. 예를 들어, 자식 영역에 대한 GRID는 그 부모 영역의 GRID와 그 자식 영역의 LRID를 연결하는 것을 포함할 수 있다. 예를 들어, 도 15에 도시된 바와 같이, 주어진 영역(180)이 특정 로컬 영역 식별자 X를 갖는 경우, 그 자식 영역(182)은 각각 영역 X의 영역 디스크립터 트리에서의 인덱스에 근거하여 형성된 특정 LRID와 X를 연결함으로써 형성되는 GRID를 가질 수 있다. 예를 들어, LRID 1.2를 갖는 자식 영역은 GRID X.1.2를 가질 수 있다. 유사하게, LRID 7을 갖는 영역 X.1.2의 손자 영역은 GRID X.1.2.7을 가질 수 있다.
몇몇의 경우에는, GRID에서, LRID는 도 14에 도시된 종결 마커 및 제로 채워진 비트를 포함하여 연결될 수 있다. 대안적으로, GRID의 이진 표현은 그러한 종결 마커 및 제로 채워진 비트를 배제할 수 있고, 대신에 RDT 인덱스를 포함하는 LRID의 의미있는 부분들은 직접 연결될 수 있다. 각각의 LRID 자체는 관련 부모 영역에 대한 RDT의 깊이 및 폭에 따라 가변 비트 수를 가질 수 있으므로, 주어진 영역 세대의 로컬 RID를 나타내는 데 할당되는 글로벌 RID의 비트 수는 가변적일 수 있다. 다시 말하지만, 글로벌 RID의 일부가 주어진 영역 세대에 할당되는 이러한 변화(variation)는 런타임에 실행중인 특정 소프트웨어에 따라 다를 수 있지만, 영역의 "패밀리 트리"의 상이한 브랜치마다 다를 수 있어, 패밀리 트리의 한 브랜치가 다른 것보다 더 많은 영역 식별자의 부분을 사용할 수 있다. GRID의 공통 접두사 또는 접미사는 공통 조상을 공유하는 영역과 동일하기 때문에, 모든 다음 세대는 추가 세대 중에서 어떻게 나머지 부분이 나누어져 있는지에 관계없이, 다음 세대에 고유한 나머지 부분에 의해 여전히 구별될 수 있다.
다수의 조상 영역에 대한 LRID의 연결로서 GRID를 구성함으로써, 이것은 제1 영역이 제2 영역의 조상인지 또는 자손인지를 보다 효율적으로 판정할 수 있게 한다. 예를 들어 동일한 패밀리 내의 이전 영역 및 이후 영역의 글로벌 RID 간의 비교를 일치시키기 위해 비트 마스킹을 사용하여 이후 세대에 대응하는 글로벌 RID의 일부를 마스크 아웃(mask out)함으로써, 제1 및 제2 영역 중 하나의 글로벌 RID가 다른 영역의 글로벌 RID의 접두사 또는 접미사 부분과 일치하는지를 판정하기 위한 회로가(예를 들어 TLB(100) 또는 RMU(20) 내에) 제공될 수 있다.
도 13에 도시된 트리 인덱스 연결 방법을 사용하여 모든 로컬 RID를 구성할 필요는 없다. 몇몇의 경우에는, 특정 디폴트 영역을 참조하기 위해 로컬 RID의 특정 값을 따로 두는 것이 유용할 수 있다. 현재 영역 또는 현재 영역의 부모 영역을 지정하는 RMU 커맨드가 비교적 일반적일 수 있다. 따라서, 현재 영역의 부모 영역을 참조하기 위해 소정의 RID 값을 따로 둘 수 있다. 예를 들어, 모든 비트가 1(1의 값을 나타냄)로 설정된 LRID는 현재 영역의 부모 영역을 나타내기 위해 따로 둘 수 있다. 유사하게, 소정의 영역 식별자 값은 현재 영역 자체를 나타내기 위해 따로 둘 수 있다. 예를 들어 0의 LRID 값은 현재 영역을 나타내는 데 사용될 수 있다. LRID에서 RID 종료 마커(172)를 사용하는 것은, 자식 영역 디스크립터가 RDT의 각 레벨에서 RDTE 0을 사용하여 식별되더라도, 결과적인 RID 값이 1로 설정된 적어도 하나의 비트를 가질 수 있는 이 종료 마커(172)를 포함할 수 있으므로 여전히 0이 아니라는 것을 의미하기 때문에, 현재 영역에 대한 소정의 영역 ID 값으로서 사용되는 0의 값을 지원하는 데 도움이 된다는 점에 유의한다. 따라서, RID의 끝(end)을 나타내는 것 외에도, 종료 마커(172)는 다른 기능도 지원할 수 있다.
RMU는 그것의 영역 디스크립터 트리를 설정할 때 충족해야 하는 제한을 질의(query)하기 위해 주어진 영역에 의해 트리거될 수 있는 특정 쿼리 커맨드(query command)를 지원할 수 있다. 예를 들어, 쿼리 커멘드에 응답하여, RMU(20)(또는 처리 회로(32))는 주어진 영역에 의해 정의될 수 있는 영역 디스크립터 트리(160)의 최대 레벨 수, 지정된 영역에 대해 주어진 레벨의 트리 구조에서 허용되는 최대 트리 엔트리 수, 및/또는 주어진 영역에 의해 초기화될 수 있는 최대 자식 영역 수 중 적어도 하나를 나타내는 제한 값을 반환할 수 있다. 예를 들어, 시스템은 특정 하드웨어 구현에 사용되는 LRID 또는 GRID에서 이용 가능한 비트 수와 같은 속성을 나타낼 수 있는 레지스터를 포함할 수 있다. RMU 또는 처리 회로는, 쿼리 커맨드에 응답하여, 영역 식별자에 이용 가능한 비트 수를 검사할 수 있고(또는 특정 프로세서 구현을 위해 적절한 응답이 고정화(hardwired)될 수 있다), 또한 추가 자식을 정의하기 위해 현재 영역에 대해 남아 있는 얼마나 많은 비트 수가 이용가능한지를 판정하기 위해, 글로벌 영역 식별자에서의 조상 영역에 의해 식별자의 얼마나 많은 비트가 이미 사용되었는지를 지정하는 정보를 검사할 수 있다. 부모 영역은 쿼리 커맨드에 대한 응답을 사용하여 그것의 RDT을 구성하는 방법을 결정할 수 있다.
도 16은 주어진 영역에 대한 영역 디스크립터(166)의 내용의 예를 도시한다. 이것은 단지 하나의 예일 뿐이고 다른 구현은 나열된 정보를 모두 포함하지 않거나 부가적인 정보를 포함할 수 있음을 이해할 것이다. 이 예제에서 영역 디스크립터는 다음을 포함한다:
· 영역의 글로벌 RID. 따라서, 로컬 RID에 근거하여 영역 디스크립터 트리를 트래버스(traversing)함으로써, 대응하는 글로벌 RID가 식별될 수 있으며, 이것은 주어진 영역에 의해 TLB와 같은 하드웨어 구조를 인덱싱하거나 GRID에 의거하여 정의된 소유권 테이블 또는 다른 정보를 검사하는데 사용될 수 있다.
· 주어진 영역의 라이프사이클 상태, 이것은 주어진 영역에 의해 트리거된 주어진 커맨드를 받아들일지 여부를 판정하기 위해서 RMU(20)에 의해 사용될 수 있다.
· 주어진 영역의 유형. 예를 들어, 영역 유형은 나중에 설명하는 바와 같이 영역이 전체 영역인지 서브 영역인지를 나타낼 수 있다.
· 경계 예외 레벨(BEL). 이것은 대응하는 영역에 대한 경계 예외 레벨을 식별한다. BEL은 영역이 실행될 수 있는 최대 특권 레벨을 나타낸다. 예를 들어, 도 12의 영역(142)은 EL2의 BEL을 가질 수 있고, 영역(152)은 EL0의 BEL을 가질 수 있고, 영역(154)은 EL1의 BEL을 가질 수 있다. 영역 디스크립터에서 BEL을 식별하는 명시적 파라미터를 제공함으로써, 이것은 예외 발생시 BEL을 사용하여 현재 영역 내에서 예외를 취할 수 있는지 여부 또는 부모 영역으로의 영역 퇴장이 예외를 처리하는데 필요한지 여부를 판정하기 때문에, 영역들이 여러 예외 레벨을 포괄(span)하는 유연성을 제공한다.
· 영역 및 그것의 자손이 소유한 총 메모리 영역 수(영역 보호 그래뉼 또는 RPG)를 나타내는 리소스 수(resource count). 이것은 이들 메모리 영역을 상이한 영역에 할당할 수 있기 전에, 영역 및 그것의 자손이 소유한 모든 메모리 페이지가 무효화되도록(데이터가 완전히 지워지도록) 하는 데 사용된다. 예를 들어, 리소스 수를 사용하여 얼마나 많은 영역을 제거해야 하는지를 추적할 수 있다.
· 영역에 대해 보호된 어드레스 범위의 시작 및 종료 어드레스. 예를 들어, 보호된 어드레스 범위는 대응하는 영역에 의해 페이지가 소유될 수 있는 메모리 어드레스 공간의 범위를 정의할 수 있다. 이것은, 영역 디스크립터에서 정의된 보호된 어드레스 범위를 다음의 메모리 액세스 어드레스와 비교함으로써, 영역이 이전에 소유한 메모리 영역이 더 이상 영역에 의해 소유되지 않은 경우를 식별할 수 있기 때문에, 자식 영역 데이터에 액세스하려는 시도 시에 자식 영역에 이전에 할당된 영역의 소유권을 되찾는 악의적인 부모 영역을 보호하는 데 유용할 수 있다.
· 주어진 영역과 관련된 데이터를 암호화 또는 복호화하기 위해 암호화 회로(104)에 의해 사용되는 하나 이상의 암호화 키. 이 예에서, 2개의 별개의 암호화 키, 즉 영역이 소유한 컨텐츠 및 메모리를 암호화/복호화하기 위한 메모리 키 및 위에서 논의된 바와 같이 메모리(16) 사이에서 영구 저장장치(6)로 이출/이입되는 데이터를 암호화/복호화하기 위한 페이징 키가 제공된다. 그러나, 다른 예들에서, 동일한 키가 두 목적 모두에 사용될 수 있거나, 다른 특정 목적을 위해 추가 키가 제공될 수 있다.
· 영역 디스크립터 트리의 루트(root)를 식별하는 RTETE(realm description tree entry). 영역 디스크립터에서의 RDTE는 루트 RDTG(및 해당 RDTG에 대한 인덱스로 사용할 비트 수를 정의하는 순서 값)에 액세스하기 위한 포인터를 제공한다.
· 영역의 실행과 관련된 아키텍처 상태를 저장하거나 복원하기 위한 기본적인 REC(realm execution context) 메모리 영역에 대한 포인터.
도 17은 주어진 영역이 존재할 수 있는 라이프사이클 상태의 세트를 도시하는데, 이것은 이 예에서는 클린(Clean) 상태, 신규(New) 상태, 활성(Active) 상태 및 무효(Invalid) 상태를 포함한다. 도 17은 각 상태의 속성을 요약하는데, 이것은, 각 상태에 대해, 대응하는 상태의 영역이 그것의 부모 영역에 의해 수정된 영역 디스크립터(166)의 파라미터를 가질 수 있는지 여부, 그 영역에 대해 지정된 암호화 키를 정당하게 사용할 수 있는지 여부, 영역이 모든 메모리 영역(RPG)을 소유할 수 있는지 여부 및 그 영역과 관련된 코드가 실행가능한지 아닌지 여부를 나타낸다. 영역 디스크립터의 파라미터는 클린 상태에서 수정될 수 있지만 다른 상태에서는 수정될 수 없다는 것에 유념한다. 이렇게 하면 악의적인 부모 영역이 주어진 영역의 속성이 활성화된 후에 업데이트되지 않는다. 또한, 영역은 활성 상태에서만 실행 가능한다.
도 18은 영역의 라이프 사이클 상태의 허용된 천이(transitions)를 도시한 상태 머신 다이어그램이다. 도 18에 도시된 각 상태 천이는 부모 영역이 자식 타겟 영역의 로컬 RID를 지정하는 영역 관리 커맨드를 RMU(20)에 발행함으로써 트리거된다(Realm.Invalidate 커맨드(212)는 또한 타겟 영역 자체에 의해 발행될 수 있다). 그 로컬 RID에 대해 이전 영역이 정의되지 않았고 영역 디스크립터 레지스터 그래뉼 커맨드(200)가 부모 영역에 의해 실행되면, 이것은 부모 영역이 소유한 주어진 메모리 영역의 구성을, 지정된 로컬 RID를 갖는 자식 영역에 대한 영역 디스크립터로서 트리거한다. 자식 영역에 대한 글로벌 RID는 부모 영역의 글로벌 RID와 영역 디스크립터 레지스터 그래뉼 커맨드(200)로 지정된 새로운 로컬 RID의 연결에 근거하여 설정될 수 있다. 그 다음에 지정된 자식 영역은 클린 상태(202)에 진입한다. 클린 상태에서, 부모 영역은 자식 영역의 영역 디스크립터의 다양한 파라미터를 업데이트하여 자식 영역의 속성을 설정할 수 있다. 이들 속성은 부모 영역에 의해 발행된 추가 RMU 커맨드를 사용하여 수정될 수 있다(지정된 자식 영역이 클린 상태가 아닌 경우 이러한 영역 디스크립터 수정 커맨드가 거부될 수 있다). 부모 영역이 자식 영역의 영역 디스크립터의 파라미터 설정을 마치면, 그것은 자식 영역의 LRID를 지정하는 영역 초기화 커맨드(204)를 실행하고, 이것은 자식 영역이 클린 상태(202)에서 신규 상태(206)로의 천이를 트리거하고, 이 시점에서 영역 디스크립터의 파라미터는 더 이상 부모 영역에 의해 수정될 수 없다. 지정된 영역이 현재 클린 상태가 아닌 경우 영역 초기화 커맨드(204)는 실패할 것이다.
영역이 신규 상태(206)에 있을 때, 영역의 로컬 RID가 영역의 로컬 RID가 영역이 지금 실행 가능한 새로운 상태(206)에서 활성 상태(210)로의 천이를 트리거하는 것을 지정하는 영역 활성화 커맨드(208)의 실행과, 이 시점 이후에 대응하는 영역으로의 영역 진입은 더 이상 오류를 유발하지 않는다. 이제 영역은 완전히 작동한다. 클린 상태, 신규 상태 및 활성 상태(202, 206, 210) 중 하나에서 자식 영역에 대한 부모 영역에 의해 트리거된 다음의 영역 무효화 커맨드(212)는 무효 상태(214)로 천이된다. 무효 상태(214)를 떠나 클린 상태(202)로 되돌아가기 위해, 부모 영역은 영역 스크러빙 커맨드(realm scrubbing command)(216)를 실행해야 한다. 영역 스크러빙 커맨드(216)는 영역이 소유한 페이지의 수를 추적하는 리소스 수(resource count)가 0 이외의 값을 갖는 경우 거부된다. 따라서, 영역 스크러빙 커맨드(216)가 성공하기 위해서, 부모 영역은 먼저 무효 영역이 소유한 모든 페이지에 대해 Granule.Reclaim 커맨드를 발행해야 한다. Granule.Reclaim 커맨드는 타겟 메모리 페이지를 지정하고 타겟 페이지의 무효화를 트리거하여 페이지에 액세스할 수 없게 하고, 또한 페이지 소유자 영역의 참조 수(reference count)를 1씩 줄인다. Granule.Reclaim 또는 영역 스크러빙 커맨드(216)를 실행할 때 무효 영역 내의 데이터를 실제로 덮어쓸 필요는 없는데, 왜냐하면 메모리 페이지를 무효로부터 유효로 천이하기 위해 클린 커맨드가 발행될 때 덮어쓰기가 나중에 수행될 수 있기 때문이다(후술하는 도 22 참조). 또한, 영역 스크러빙 커맨드에 응답하여, 무효화된 영역과 관련된 어떤 캐시된 데이터는, 예를 들어 (RMU 커맨드를 실행하는 처리 요소만이 아니라) 처리 요소 8, 10, 12 중 어느 하나의 TLB(100) 또는 캐시(110) 내에서 무효화될 수도 있다. 글로벌 RID는 캐시된 데이터의 무효화를 트리거하는 데 사용될 수 있다.
따라서, 주어진 영역 식별자와 관련된 영역의 관리된 라이프사이클을 제공함으로써, 이것은 영역이 그것의 파라미터를 수정할 수 있는 클린 상태로 되돌아가기 전에 (따라서 상이한 영역에 의해 사용을 위해 주어진 영역 식별자가 재활용될 수 있기 전에), 동일한 영역 식별자를 사용한 이전 영역과 관련된 데이터가, 동일한 영역 식별자의 재사용을 통해 오래된 영역과 관련된 어떤 데이터가 다른 영역으로 유출(leaked)되지 않도록, 메모리 및 어떤 캐시로부터 스크럽(scrubbed)되어야 한다는 것을 보장한다. 영역이 클린 상태(202)에 있을 때, 영역 디스크립터에 저장된 메모리 영역이 다른 목적을 위해 할당될 수 있게 하는 영역 디스크립터 해제 커맨드(218)를 실행함으로써 그 영역 디스크립터가 또한 취소될 수 있다(이 시점에서는 영역이 이미 깨끗하기 때문에 스크러빙이 요구되지 않는다).
도 19는 영역 그래뉼 테이블(128)(또는 소유권 테이블)의 엔트리 내용의 예를 도시한다. 각 엔트리는 메모리 어드레스 공간의 주어진 메모리 영역에 대응한다. 주어진 메모리 영역의 크기는 구현에 따라 고정되거나 가변적일 수 있다. 소유권 테이블(128)이 구성되는 특정한 방식은 구현 요구사항에 따라 크게 달라질 수 있고, 따라서 주어진 엔트리에 대한 대응하는 메모리 영역이 식별되는 특정한 방식은 변할 수 있다(예를 들어, 데이터는 대응하는 영역을 식별하는 각 엔트리에 저장될 수 있고, 또는 대안적으로 대응하는 엔트리는 테이블 자체 내의 대응하는 소유권 엔트리의 위치에 근거하여 적어도 부분적으로 식별될 수 있다). 다시, 도 19는 주어진 메모리 영역에 대해 지정될 수 있는 파라미터의 특정 예를 도시하지만, 다른 예는 더 많은 정보를 제공하거나 도시된 일부 유형의 정보를 생략할 수 있다.
도 19에 도시된 바와 같이, 각 소유권 테이블 엔트리는 대응하는 메모리 영역에 대해, 다음을 지정할 수 있다:
· 그 메모리 영역에 대한 소유자 영역을 식별하는 글로벌 RID. 소유자 영역은 어떤 다른 영역이 메모리 영역에 액세스할 수 있는지를 제어하는 속성을 설정할 권리가 있는 영역일 수 있다.
· 어느 RMU 커맨드가 메모리 영역에서 수행될 수 있는지를 제어하는 데 사용되는 해당 메모리 영역의 라이프사이클 상태.
· 메모리 영역이 소유자 영역에 의해 소유된 시점에서 MMU(26)에 의해 메모리 영역이 매핑되는 매핑된 어드레스. 매핑된 어드레스는 가상 어드레스 또는 중간 물리적 어드레스일 수 있다. 소유권 테이블에서 이 어드레스를 지정함으로써, 이것은 영역이 주어진 메모리 영역의 소유권을 취한 후 어드레스 변환 테이블을 다시 매핑하여 영역 인프라스트럭처에 의해 제공된 보안을 피하려는 잠재적 시도에 대해 경계할 수 있다.
· 소유자 외에 어느 영역이 메모리 영역에 액세스할 수 있지를 지정하는 가시성 속성. 예를 들어, 도 20에 도시된 것처럼, 가시성 속성은 현재 영역의 부모 영역이 영역에 액세스할 수 있는지 아닌지 여부를 제어하는 부모 가시성 비트, 및 어떤 영역이 대응하는 메모리 영역에 액세스할 수 있는지 여부를 지정할 수 있는 글로벌 가시성 비트를 지정할 수 있다. 일반적으로, 영역 보호 스킴은 현재 영역의 자손 영역이 항상 부모 또는 조상 영역에 의해 소유된 메모리 영역에 액세스할 수 있다고 가정할 수 있지만(특권 레벨에 근거한 보호를 제공하는 변환 테이블(120)에 근거하여 액세스가 허용되는지 아닌지의 여부에 따라), 주어진 영역은 부모 또는 주어진 영역의 직접적인 자손이 아닌 어떤 다른 영역이 메모리 영역에 액세스할 수 있는지 여부를 제어할 수 있다. 일부 실시 예들에서, 부모 및 글로벌 가시성 비트들 모두는 소유자 영역 자체에 의해 설정될 수 있다. 대안적으로, 부모 가시성 비트는 소유자 영역에 의해 설정될 수 있지만, 글로벌 가시성 비트는 소유자 영역의 부모 영역에 의해 설정될 수 있다(메모리 영역에 대한 부모 가시성 비트가 그 메모리 영역의 부모 가시성을 제공하기 위해 이미 설정되어 있는 경우). 이것은 소유자 영역이 어떤 다른 프로세스가 자신의 데이터에 액세스할 수 있는지를 제어할 수 있는 방법에 대한 한 가지 예일뿐이라는 것이 이해될 것이다.
도 21은 주어진 메모리 영역이 존재할 수 있는 상이한 라이프사이클 상태를 도시한 표이고, 도 22는 각 라이프사이클 상태 사이의 천이를 트리거하는 커맨드를 나타내는 상태 머신이다. 도 18에 도시된 영역 라이프사이클 상태와 유사한 방식으로, 메모리 영역 라이프사이클 상태 간 천이는 한 영역의 소유권에서 다른 영역의 소유권으로 전달되는 메모리 영역이 먼저 그 영역 내의 데이터가 스크럽(scrubbed)되는 (예를 들면, 0으로 설정되는) 무효화 프로세스를 거쳐야 함을 보장하기 위해 관리된다. 따라서, 소프트웨어가 메모리 영역에 액세스할 수 있는 무효 상태(220)에서 유효 상태(222)로 천이하기 위해서는, 처리 요소(8)상에서 실행되는 소프트웨어에 의해 트리거되는, 클린 커맨드(224)가 RMU(20)에 의해 실행되어야 한다. 클린 커맨드(224)는 특정 메모리 영역(페이지)을 식별하고 그 메모리 영역 내의 각 위치에서 데이터를 무효화/제로에 맞추기 위해 대응하는 메모리 영역의 메모리 어드레스 사이를 이동(step through)하도록 RMU를 제어한다. 타겟 메모리 영역이 무효 이외의 어떤 상태에 있으면 클린 커맨드가 거부된다(예를 들어 오류가 유발됨).
일부 시스템에서는, 유일한 메모리 영역 라이프사이클 상태로서 유효 및 무효 상태(222, 220)를 제공하는 것으로 충분할 수 있다. 그러나, 도 22의 예에서, 주어진 메모리 영역은 또한 RMU(20) 자체에 의해 독점 액세스를 위해 예약된 'RMU- 프라이빗' 메모리 영역으로서 지정될 수 있으며, 따라서, 처리 회로(32)상에서 실행되는 소프트웨어(어떤 RMU 소프트웨어 이외)에 의해 트리거되는 RMU-프라이빗 메모리 영역에 대한 액세스는 거부될 것이다. 이것은 전술한 바와 같이 영역 디스크립터, 영역 디스크립터 트리 엔트리, 영역 실행 컨텍스트 및 페이징을 위한 메타 데이터와 같은 영역 관리 데이터를 저장하는데 특히 유용할 수 있다. 주어진 메모리 영역을 RMU에 의해 독점 액세스를 위해 예약된 RMU-프라이빗 메모리 영역으로서 지정하기 위한 속성을 제공함으로써, 이것은 메모리 영역 자체의 소유자 프로세스를 포함하는 소프트웨어 프로세스가, 영역 관리 데이터에 액세스할 수 없도록 하는데, 이 영역 관리 데이터는 다른 방법으로 소프트웨어 프로세스가 영역 스킴에 의해 제공된 보안 보호(security protections)를 피하도록 허용할 수 있다.
따라서, 클린 커맨드(224)는, 그 파라미터 중의 하나로서, 이것이 일반적인 클린 커맨드인지 프라이빗 클린 커맨드인지를 명시하는 프라이버시 표시를 지정할 수 있다. 대안적으로, 이들 목적을 위해 2개의 완전히 별개의 커맨드가 제공될 수 있다. 클린 커맨드가 일반적인 클린 커맨드인 경우, 이것은 위에서 설명한 대로 유효 상태(222)로의 천이를 유발한다. 그러나, 클린 커맨드가 프라이빗 클린 커맨드(224)일 경우에는, 이것은 메모리 영역이 RMU-프라이빗 메모리 영역으로서 지정된, RMUClean 상태(226)로의 천이를 유발한다. 일부 예들에서, 모든 유형의 RMU 데이터는 RMUClean 상태에 대응하는 단일 유형의 RMU-프라이빗 메모리 영역 내에 저장될 수 있다.
그러나, 특정 형태의 영역 관리 데이터에 각각 대응하는, 여러 유형의 RMU 프라이빗 메모리 영역을 지정하여 강건성(robustness)을 향상시킬 수 있다. 예를 들어, 도 21 및 22에서, 특정 목적을 위해 지정되는 RMU 프라이빗 영역에 각각 대응하는 다수의 RMURegistered 상태(228)가 정의된다. 이 예에서, RMURegistered 상태(228)는 (영역 디스크립터 트리의 RDTG를 저장하기 위한) RMURegisteredRDT, (영역 디스크립터를 저장하기 위한) RMURegisteredRD, (영역 실행 컨텍스트 데이터를 저장하기 위한) RMURegisteredREC 및 (위에서 설명한 것과 같이 이출/이입 동작 중에 사용된 페이징 메타데이터를 저장하기 위한) RMURegisteredMDT를 포함한다. RMUClean 상태의 메모리 영역에 대해 RMU에 의해 상이한 형태의 등록 커맨드(230)가 실행될 수 있어, 메모리 영역을 RMURegistered 상태(228) 중 대응하는 하나의 상태로 천이시킨다. 지정된 목적에 대응하지 않는 RMU-프라이빗 메모리 영역에 데이터를 저장하기 위한 커맨드(RDT, RD, REC 또는 MDT)가 거부될 수 있다. 따라서, RMURegistered 상태의 제1 라이프사이클 상태에서, 제1 유형의 영역 관리 데이터를 저장하기 위한 제1 유형의 RMU 커맨드가 허용될 수 있고, 제2 라이프사이클 상태에서 제2 유형의 영역 관리 데이터를 저장하기 위한 제2 유형의 RMU 커맨드가 허용될 수 있으며, 타겟 메모리 영역이 제2 라이프 사이클 상태에 있을 때 제1 RMU 커맨드가 거부되고 타겟 메모리 영역이 제1 라이프사이클 상태에 있을 때 제2 RMU 커맨드가 거부된다. 이것은 자식 영역의 동작을 방해하려고 시도하기 위해 예를 들어 영역 디스크립터 엔트리를 영역 실행 컨텍스트 영역에 저장하거나 그 반대로 저장하려고 시도하는 악의적인 부모 영역을 피함으로써 보안을 더 강화할 수 있다. 각각의 RMU 레지스터 상태(228)로부터, 대응하는 형태의 해제 커맨드(232)는 대응하는 메모리 영역을 무효 상태(220)로 복귀시킬 수 있다. 추가의 클린 커맨드는, 영역이 범용 데이터를 위해 재할당될 수 있기 전에 미리 정의된 RMU-프라이빗 영역으로부터 데이터의 스크러빙을 유발할 수 있다.
따라서, 요약하면, 주어진 소유자 영역이 여전히 소유하지만, 소유권 테이블에 지정된 속성을 갖는 적어도 하나의 RMU-프라이빗 메모리 영역이 정의될 수 있으며, 이는 RMU에 의한 독점적인 액세스를 위해 예약되어 있음을 의미한다. 이 예에서 RMU-프라이빗 상태를 제어하는 속성은 소유권 테이블에서의 대응하는 엔트리에 지정된 라이프사이클 상태이지만, 다른 방법으로도 식별될 수 있다. MMU는 주어진 메모리 영역이 적어도 하나의 상태 속성에 의해 RMU 프라이빗 메모리 영역으로 지정될 때 하나 이상의 소프트웨어 프로세스에 의해 주어진 메모리 영역에의 액세스를 방지할 수 있다. 따라서 RMU 자체에 의해 트리거되지 않은 소프트웨어 트리거 액세스(software-triggered access)는 RMU-프라이빗 메모리 영역을 대상으로 할 때 거부될 수 있다. 이것은 소유자 영역 자체에 의해 RMU-프라이빗 메모리 영역에 대한 액세스를 방지하는 것을 포함한다.
소유자 영역이 메모리 영역의 데이터에 액세스할 수 없는 경우 RMU-프라이빗 메모리 영역에 대한 소유자 영역을 정의하는 것이 왜 유용한지 의문이 있을 수 있다. 예를 들어, RMU만으로 데이터에 대한 액세스를 시행하기 위한 대안적인 접근법은 RMU에 대한 특수 영역을 정의하고, 그 특수 RMU 소유자 영역에 비공개로 유지할 데이터를 저장하기 위한 메모리 어드레스 공간의 페이지를 할당하는 것이다. 그러나, 본 발명자들은 영역을 무효화할 때, 그 영역과 관련된 모든 제어 데이터를 무효화해야 할 필요가 있을 수 있으며, 이 제어 데이터가 무효화된 영역이 아닌 특수 RMU 소유자 영역과 관련된 경우, 이것이 무효화된 영역의 데이터의 스크러빙을 더 복잡하게 만들 수 있다는 것을 인식했다.
반대로, RMU-프라이빗 속성을 사용함으로써, 소유자가 그것에 액세스할 수 없는 경우에도, 주어진 영역에 대한 제어 데이터를 저장하는 메모리 영역이 그 영역에 의해 여전히 소유되는데, 이는 그 소유자 영역이 취소될 때 어느 메모리 영역이 무효화될 필요가 있는지를 식별하는 것이 더 간단하다는 것을 의미한다. 주어진 영역이 무효화될 때, 무효화되고, 액세스할 수 없게 되며, 리클레임 커맨드(reclaim command)를 트리거한 부모 영역의 소유권으로 되돌아가도록 지정된 무효화된 영역(또는 그 자손)이 소유했던 메모리 영역을 트리거하는 일련의 리클레임 동작을, 부모 영역이 간단히 (예를 들어, RMU에 의해 수행되는 리클레임 커맨드를 실행함으로써) 수행할 수 있다. 리클레임 동작은 무효화된 영역에 액세스할 수 있는 페이지에 영향을 줄뿐만 아니라 무효화된 영역이 소유한 RMU-프라이빗 메모리 영역도 포함한다.
그 영역이 소유한 RMU-프라이빗 메모리 영역에 대한 제어 데이터를 저장하는 또 다른 이점은 이출 동작을 수행할 때이다. 이출 동작 중에, Realm의 메모리 풋프린트(footprint)를 0으로 줄이기 위해, 일반 메모리 외에 그 Realm과 관련된 관리 구조를 이출할 수 있다. Realm이 이러한 구조를 소유하도록 요구하면 이 이출 동작의 관리가 간단해진다.
일반적으로 모든 종류의 영역 관리 데이터는 RMU-프라이빗 영역에 저장될 수 있지만, 특히 영역 관리 데이터는, 주어진 영역의 속성을 정의하는 영역 디스크립터, 주어진 영역 또는 추가의 영역 디스크립터 트리 엔트리에 대한 영역 디스크립터를 저장하는 메모리 영역을 식별하는 영역 디스크립터 트리 엔트리, 주어진 영역 내의 적어도 하나의 실행 스레드와 관련된 구조적 상태를 나타내는 영역 실행 컨텍스트 데이터, 및 주어진 영역과 관련된 소정의 동작의 중간 지점에서 사용된 임시 작업 데이터 중 어느 하나를 포함할 수 있다.
일반적으로 RMU 프라이빗 영역은 주어진 영역과 관련된 특정 영역 제어 데이터를 저장하는 데 사용될 수 있지만, 영역이 활성화되면 수행되는 특정 다른 동작에 대한 보안을 증가시키기 위해 사용될 수도 있다. 예를 들어, 데이터가 암호화 또는 해독되는 위에서 설명한 페이징 이출 또는 이입 동작을 수행할 때, 그리고 메타 데이터를 사용한 검사를 수행하여 데이터를 다시 이입할 때 데이터가 여전히 유효한지 검사하면, 이러한 동작에서는 많은 사이클이 소요될 수 있고 이러한 장기 실행 동작은 도중에 중단될 가능성이 높다. 동작을 처음부터 다시 시작할 필요가 없도록 하기 위해, 메타 데이터 또는 이러한 장기 실행 동작과 관련된 다른 임시 작업 데이터가, 그러한 데이터가 (소유자 영역 자체를 포함하는) 다른 프로세스에 액세스할 수 없게 하고, 중단된 경우에도 캐시/메모리 내에 보유되도록 하는 것이 바람직할 수 있다. 메모리 시스템의 영역을 RMU-프라이빗 영역으로서 임시 지정함으로써, 이 임시 작업 데이터를 보호할 수 있다. 따라서, 도 21에 도시된 바와 같이, 페이지 상태는 또한 이 임시 작업 데이터가 메모리 영역에 저장될 때 사용될 수 있는 RMUExporting 및 RMUImporting 상태를 포함할 수 있고, 이들 상태 중 하나가 선택되면 RMU만이 그 데이터에 액세스할 수 있다.
대응하는 메모리 영역을 RMU 프라이빗으로서 일시적으로 지정하는 것으로부터 이익을 얻을 수 있는 동작들의 다른 예는, 주어진 영역에 의해 소유된 적어도 하나의 메모리 영역과 주어진 영역 이외의 영역에 의해 소유된 적어도 하나의 메모리 영역 사이에서 데이터를 전송하는 중에 암호화 또는 복호화된 데이터의 생성 또는 검증; 메모리 영역의 소유권을 또 다른 영역으로 전송; 및 무효화된 메모리 영역에 저장된 데이터를 액세스 불가능하게 하기 위해 수행되는 파괴적 리클레임 동작을 포함한다. 예를 들어, 어드레스 공간의 주어진 페이지의 모든 내용을 스크러빙하기 위한 리클레임 동작이 도중에 중단될 수 있고 그래서 스크러빙이 완료될 때까지 다른 프로세스가 그 페이지에 액세스할 수 없도록 하기 위해, 페이지를 일시적으로 RMU-프라이빗으로서 지정할 수 있다. 일반적으로 RMU가 수행하는 긴 레이턴시 동작은 긴 실행 동작을 시작하기 전에 일부 메모리 영역의 라이프사이클 상태를 RMU-프라이빗 상태로 변환한 다음에 긴 실행 동작이 완료할 때 다시 변환하여 임시 작업 데이터를 보호함으로써 이점을 얻을 수 있다.
영역이 RMU 프라이빗으로서 지정되면 RMU(20)에 의한 액세스가 영역 관리 동작을 수행하는 데 사용되도록 예약되어 있다. 영역 관리 동작은 새로운 영역을 생성하는 것; 기존 영역의 속성을 업데이트하는 것; 영역을 무효화하는 것; 주어진 영역에 의해 소유권에 대한 메모리 영역을 할당하는 것; 주어진 메모리 영역에 대한 소유자 영역을 변경하는 것; 주어진 메모리 영역의 상태를 변경하는 것; 주어진 메모리 영역에 대한 소유자 영역에 의해 트리거된 커맨드에 응답하여 주어진 메모리 영역에 대한 액세스를 제어하기 위한 액세스 제어 정보를 업데이트하는 것; 하나 이상의 소프트웨어 프로세스를 처리하는 중에 영역들 간의 천이를 관리하는 것; 주어진 영역이 소유한 메모리 영역과 주어진 영역과 상이한 영역이 소유한 메모리 영역 사이에서 주어진 영역과 관련된 데이터의 전송을 관리하는 것; 및 주어진 영역과 관련된 데이터의 암호화 또는 복호화 중 적어도 하나를 포함할 수 있다. RMU는 영역 관리 동작의 적어도 한 부분을 수행하기 위한 하드웨어 유닛일 수 있거나, 영역 관리 동작의 적어도 한 부분을 수행하기 위해 영역 관리 소프트웨어를 실행하는 처리 회로(32)를 포함할 수 있거나, 또는 이들의 조합일 수 있다.
도 22는 주어진 영역에 의해 트리거되어 주어진 페이지를 깨끗게 함으로써 유효하게 액세스할 수 있거나, 대응하는 페이지를 무효화할 수 있는 상태 천이를 도시한다. 도 23은 이를 확장하여 주어진 페이지의 소유권을 한 영역에서 다른 영역으로 전하는 데 사용할 수 있는 추가 커맨드를 도시한다. 부모 영역에 의한 영역 클레임 커맨드(region claim command)(230)의 실행은 해당 메모리 영역이 현재 무효 상태(220)에 있고 부모 영역에 의해 소유되는 경우 대응하는 메모리 영역이 지정된 자식 영역으로 전송될 수 있게 한다. 영역 클레임 커맨드(230)는, 타겟 메모리 영역이 주어진 자식 영역의 부모 영역 이외의 어떤 영역에 의해 소유될 때, 또는 메모리 영역이 유효하거나 RMU-프라이빗 라이프사이클 상태(226, 228) 중 하나인 경우 거부된다. 이것은 RMU(20)가 자체적으로 액세스할 수 없거나 사용중인 페이지의 소유권을 부모 영역이 임의로 할당하지 못하게 한다. 페이지가 자식 영역에 할당되면, 그 자식 영역은 도 22에 도시된 것과 같은 방법으로 유효 상태(222)로 천이하기 위해 클린 커맨드를 수행할 수 있다. 간결성을 위해, RMU-프라이빗 영역의 사용은 도 23에 도시되어 있지 않지만, 어떤 주어진 영역 내에서 프라이빗 클린 커맨드는 대안적으로 전술한 바와 같이 메모리 영역을 RMU 클린 상태(226)로 천이시킬 수 있다.
그래뉼 클레임 커맨드(230)는 소유권을 이미 설정된 자식 영역으로 전하는데 사용된다. 또한, 부모 영역은, 부모 영역이 자식에 할당된 영역에 데이터를 기록할 수 있도록 RMU(20)를 트리거하여 소유권을 새로운 상태의 새로운 자식 영역에 할당하는 그래뉼 부가 커맨드(granule add command)(232)를 실행할 수 있다. 예를 들어, 이것은 자식 영역을 처음 실행할 수 있도록 새로운 자식 영역의 프로그램 코드를 설치하는 데 사용될 수 있다. 따라서, 부가 커맨드(232)는, 대응하는 메모리 영역이 자식 영역에 할당되는 라이프사이클 상태의 관점에서 클레임 커맨드(230)와는 상이하다. 부가 커맨드(232)는 자식 영역이 도 18에 도시된 새로운 상태(206)에 있을 때만 허용될 수 있다. 자식 영역은, RMU를 트리거하여 자식 영역 등의 영역 디스크립터에서 리소스 수와 같은 속성을 업데이트할 뿐만 아니라 소유권 테이블(128)의 대응하는 엔트리를 업데이트하는, 그래뉼 해제 커맨드(234)를 실행함으로써 주어진 메모리 영역의 소유권을 그 부모에게 다시 풀어 줄 수 있다. 지정된 메모리 영역이 커맨드를 발행한 현재 영역에 의해 소유되지 않으면, 또는 영역이 무효 이외의 상태인 경우 그래뉼 해제 커맨드(234)가 거부될 수 있다(데이터의 파괴적인 클리닝을 보장하는 것은, 부모 영역에 의한 소유권으로 되돌릴 수 있기 전에 필요하다).
부모 영역이 자식 영역을 초기화하는, 위에서 설명한 계층적 영역 구조를 사용하는 하나의 이점은, 영역과 그 자손의 무효화를 크게 단순화한다는 것이다. 주어진 가상 머신 영역이 무효화되는 경우, 그 가상 머신 아래에서 실행되는 모든 애플리케이션에 대한 영역을 무효화하는 것이 바람직할 수도 있다. 그러나, 무효화될 각 프로세스와 관련된 상당한 양의 프로그램 코드, 데이터 및 다른 제어 정보가 있을 수 있다. 그러한 무효화가 극히 작게(atomically) 발생하는 것을 보장하는 것이 바람직하므로, 데이터 스크러빙의 일부만이 수행되었을 때 무효화된 영역과 관련된 데이터에 계속 액세스하는 것이 불가능할 수 있다. 각 영역이, 위에서 설명한 바와 같이 영역 계층구조 없이, 다른 영역과 완전히 독립적으로 설정된 경우, 이것은, 대응하는 영역 ID로 식별된 각 영역을 개별적으로 무효화하기 위해 여러 개의 개별 커맨드를 제공해야 할 수 있으므로 이러한 극소의 무효화(atomic invalidation)를 어렵게 만들 수 있다.
반대로, 루트 영역 이외의 각 영역이 부모 영역에 의해 트리거된 커맨드에 응답하여 초기화된 자식 영역이 되도록 MU가 영역을 관리하는 영역 계층 구조를 제공함으로써, 타겟 영역의 무효화를 요청하는 커맨드가 수신되면, RMU(20)는 보다 효율적인 동작으로, 타겟 영역 및 타겟 영역의 임의의 자손 영역을 처리 회로에 액세스할 수 없게 할 수 있다.
특히, 타겟 영역의 무효화에 응답하여, RMU는 타겟 영역이 유효하지 않다는 것을 나타내기 위해 타겟 영역과 관련된 영역 관리 데이터(예를 들어, 영역 디스크립터)를 업데이트할 수 있지만, 타겟 영역의 임의의 자손 영역과 관련된 임의의 영역 관리 데이터를 업데이트할 필요는 없다. 자손 영역과 관련된 영역 관리 데이터는 변경되지 않은 상태로 유지될 수 있다. 왜냐하면 단순히 타겟 영역을 무효화하면 영역 관리 데이터가 변경되지 않았음에도 불구하고 자손 영역이 효과적으로 액세스할 수 없게 될 수 있기 때문이고, 주어진 영역에 대한 액세스가 그 부모를 통해 제어되므로, 부모 영역이 무효화된 경우에 이것은 부모 영역의 자손에 액세스할 수 없다는 것을 의미한다. 각 영역은 부모 영역에 의해 정의된 로컬 RID를 사용하여 그것의 특정 자식을 식별하는 영역 진입 명령(아래에 설명된 ERET 명령)을 사용하여 입력되고, 이것은 주어진 자식 영역의 부모 영역이 소유한 메모리 영역에 저장되는 영역 디스크립터 사이를 이동하는 데 사용되므로, 부모 영역 이외의 어떤 프로세스도 RMU를 트리거하여 자식 영역의 영역 관리 데이터에 액세스할 수 없다. 따라서, 부모 영역이 무효화된 경우, RMU는 지정된 자식 영역의 영역 관리 데이터에 액세스할 수 없으므로, 지정된 자식 영역에 액세스할 수 없게 된다.
영역이 무효화된 후, 그 영역의 부모 영역은 무효화된 타겟 영역이 소유한 각 메모리 영역을 리클레임하기 위한 리클레임 동작을 수행하도록 RMU를 트리거할 수 있다. 예를 들어, 도 23에 도시된 바와 같이, 자식 영역에 의해 소유된 메모리 영역에 대한 리클레임 커맨드(236)는 메모리 영역의 무효 상태(220)로의 복귀를 트리거하고 또한 메모리 영역의 소유권을 부모 영역으로 다시 전송할 수 있다. 그러나, 이 리클레임 동작은 다른 영역의 진행중인 처리의 배경에서 수행될 수 있으며, 무효화된 영역의 임의의 자손 영역이 액세스 불가능하게 되도록 하기 위해 즉시 수행될 필요는 없다. 도 18에 도시된 바와 같이 주어진 영역의 리클레임 상태를 활성에서 무효로 변경하는 단일 동작은 그 무효화된 영역의 임의의 자손 영역과 관련된 모든 데이터도 액세스할 수 없도록 하기에 충분하다. 어떤 부모 영역은 자신이 소유한 페이지를 그 자식에게만 할당할 수 있고, 그 자식은 자신이 소유한 페이지를 손자 영역에게만 할당할 수 있기 때문에, 이것은 또한 주어진 영역의 무효화시 어느 페이지가 무효화 및 리클레임되어야 하는지를 추적하는 것이, 무효화된 영역의 영역 디스크립터(도 16 참조)에 정의된 보호된 어드레스 범위를 사용하여 리클레임할 페이지를 식별할 수 있기 때문에, 무효화된 영역의 추가 자손 영역도 그 범위 내의 페이지들을 소유할 것이기 때문에, 상대적으로 간단하다는 것을 의미한다.
따라서, 요약하면 영역 계층구조를 사용하면 영역 및 무효화의 관리가 크게 간소화된다. 이러한 무효화시 및 메모리 내의 데이터 덮어쓰기 시, 무효화는 또한 타겟 영역에 대한 캐시된 영역 관리 데이터의 무효화를 트리거할 수 있고, 타겟 영역의 임의의 자손 영역은 무효화를 트리거 한 처리 요소(8)에서뿐만 아니라 또 다른 CPU 또는 GPU와 같은 다른 처리 요소에서도 유지된다. 따라서 다른 처리 요소가 무효화된 영역에 계속 액세스하지 않도록 하기 위해, 다른 처리 요소에 대한 무효화의 브로드캐스트(broadcast)가 있을 수 있다. 그러한 무효화를 트리거할 때, 캐시된 영역 관리 데이터가 대응하는 영역을 고유하게 식별하는 글로벌 영역 식별자와 연관되고, 주어진 자식 영역의 글로벌 RID가 그 부모 영역의 글로벌 RID와 공통 접두사 부분을 공유하도록 상기 논의된 바와 같이 글로벌 영역 식별자를 형성하는 것이 유용할 수 있다. 이를 통해 비트 마스킹(bit masking) 또는 기타 유사한 동작을 사용하여 주어진 영역이 지정된 영역 ID의 자손인지 신속하게 비교할 수 있다. 조상 영역의 무효화를 통해 주어진 영역에 액세스할 수 없는 경우, 지정된 타겟 영역을 입력하려는 시도는 불가능하지만(그 영역에 대한 ERET 명령을 실행할 부모 영역이 없기 때문에), 상이한 영역 진입 메커니즘을 사용하는 다른 구현에서도, 자손 영역의 영역 디스크립터를 더 이상 찾을 수 없으면 영역 진입이 실패하여 결함 조건을 트리거할 수 있다.
도 24는 주어진 메모리 액세스가 허용되는지를 결정하기 위해 MMU(26) 및 RMU(20)에 의해 수행된 검사의 예를 도시한다. MMU(26)는 스테이지 2의 어드레스 변환을 지원하는데, 스테이지 1은 주어진 게스트 운영 체제에 의해 설정되는 스테이지 1 페이지 테이블(120-1)의 제어 하에 가상 어드레스(VA)를 IPA(intermediate physical address)로 변환하고, 스테이지 2 어드레스 변환은 하이퍼바이저(38)에 의해 설정되는 스테이지 2 페이지 테이블(120-2)에 근거하여 메모리(16)에 액세스하는데 사용되는 물리적 어드레스(PA)로 스테이지 1 변환에 의해 제공된 중간 물리적 어드레스를 변환한다. 하이퍼바이저는 상이한 가상 머신에 대해 여러 세트의 스테이지 2 페이지 테이블을 정의할 수 있고, 메모리 액세스 요청과 함께 제공된 가상 머신 ID(VMID)(250)는 어떤 특정 스테이지 2 페이지 테이블들을 사용할지를 식별할 수 있다. 유사하게, 운영 체제는 상이한 애플리케이션들에 대해 다수의 세트의 스테이지 1 페이지 테이블 세트를 정의할 수 있고 어드레스 공간 식별자(ASID)(252)는 어느 스테이지 1 페이지 테이블을 사용할지를 식별하는데 사용될 수 있다. VMID 및 ASID(250, 252)는 집합적으로 메모리 액세스 요청과 관련된 현재 변환 컨텍스트를 식별하는 변환 컨텍스트 식별자(254)로 지칭될 수 있다. 메모리 액세스 요청은 또한 트랜잭션이 읽기(R) 또는 쓰기(W) 요청인지를 나타내는 속성 또는 메모리 액세스 요청을 발행한 프로세스와 관련된 예외 레벨(X)을 나타내는 속성과 같은, 다양한 속성(256)을 지정한다.
메모리 액세스를 수신하면, MMU(26)는 스테이지 1 페이지 테이블로부터의 정보에 근거하여 트랜잭션 속성이 유효한지 여부를 판정할 수 있다. 예를 들어, 스테이지 1 페이지 테이블은 특정 어드레스에 대해 읽기 트랜잭션만 허용하거나, 주어진 어드레스에 대한 읽기 및 쓰기 액세스 둘 다를 허용하도록 지정할 수 있다(일부 구현들은 또한 어드레스 공간의 쓰기 영역들만이 정의되도록 허용할 수 있다). 또한, 스테이지 1 페이지 테이블의 속성은 지정된 예외 레벨 이상에서 동작하는 프로세스에 대한 액세스를 제한할 수 있다. 트랜잭션 속성이 유효하고 스테이지 1 페이지 테이블에 의해 액세스가 허용되는 경우, MMU는 대응하는 중간 물리 어드레스(IPA)를 리턴할 수 있다. 그런 다음 VMID(250)와 함께 IPA는 트랜잭션의 속성을 다시 입증하는 스테이지 2 페이지 테이블로 인덱싱하고, 유효한 경우 물리적 어드레스를 리턴한다. 모든 트랜잭션이 2 스테이지의 어드레스 변환을 밟을 필요는 없다는 것에 유념한다. 예를 들어, 입력 메모리 트랜잭션이 보안 도메인에서 EL3 또는 EL2에서 또는 EL1 또는 EL0에서 발행된 경우, 스테이지 1 MMU의 출력은 물리적 어드레스로서 취급될 수 있고 스테이지 2 MMU는 우회될 수 있다.
물리적 어드레스를 취득한 후, 물리적 어드레스는 RMU 테이블(128)(Realm Granule Table)에서 조회되어 MMU에 의해 시행되는 영역 보호가 메모리 액세스를 진행할 수 있는지를 판정할 수 있다. 영역 검사는 아래의 도 26에서 자세히 설명한다. 스테이지 3에서의 RMU 검사가 성공하면, 입증된 물리적 어드레스가 출력되고 메모리 액세스가 진행하도록 허용된다. 스테이지 1 또는 스테이지 2 어드레스 변환에서의 검사 또는 스테이지 3에서 제공된 RMU 강제 영역 보호가 실패하면, 메모리 액세스가 거부된다. 따라서, 영역 관리 유닛에 의해 제공된 보호는, 페이지 테이블(120)에 근거한 임의의 기존 어드레스 변환 검사에 추가하여, 수행될 부가적인 검사 계층으로서 보일 수 있다. 도 24에 도시된 검사들은 메모리 액세스 요청의 파라미터 또는 액세스가 이루어진 현재 변환 컨텍스트 또는 영역의 파라미터와 비교되고 액세스될 필요가 있는 다수의 테이블이 메모리에 있을 수 있기 때문에 수행하는데 비교적 느릴 수 있다. 모든 메모리 액세스에 대해 이러한 검사를 수행하는 것이 가능하지만, 주어진 메모리 액세스 요청에 대해 검사가 성공적으로 수행되면 TLB(100) 내에 데이터를 캐시하는 것이 더 빠를 수 있어 다음에 유사한 메모리 액세스 요청이 발행될 때 모든 검사를 다시 반복하지 않고 허용될 수 있다. 따라서, TLB(100)에 미스(miss)가 있고 히트(hit)가 아닌 경우에만 이러한 허가 검사를 수행하는 것이 바람직할 수 있다.
도 25는 이미 입증된 메모리 액세스와 관련된 데이터를 캐싱하기 위한 TLB 구조(100)의 예를 도시한다. 도 25는 단일 TLB를 도시하지만, 일부 시스템은 캐시 계층구조에서 다수의 레벨의 TLB를 포함할 수 있으며, 레벨 1 TLB가 더 빠른 액세스를 위해 더 작은 변환 엔트리 서브세트를 저장하고 레벨 2 또는 추가 레벨 TLB가 레벨 1 TLB에서 미스(miss)가 있으면 액세스될 수 있는 더 큰 변환 엔트리 세트를 저장하는 것으로 이해될 것이다. TLB(100)(또는 "변환 캐시")는 다수의 엔트리(260)를 가지며, 각 엔트리는 대응하는 메모리 영역에 대한 어드레스 변환 데이터를 지정한다. 각 엔트리(260)는 데이터가 대응하는 물리적 어드레스(264)를 제공하는 가상 어드레스에 대응하는 가상 어드레스된 태그(262)를 포함한다. 이 예에서는, TLB는 가상 어드레스가 중간 물리적 어드레스를 통하지 않고 TLB를 사용하여 직접적으로 물리적 어드레스로 변환될 수 있도록 결합된 스테이지 1 및 스테이지 2 TLB이다(대응하는 스테이지 1 및 2 변환은 정확한 물리적 어드레스를 찾기 위해 TLB 미스에 대해 수행되지만, TLB는 개입 IPA를 저장할 필요가 없고 VA를 OA에 직접 매핑할 수 있다). 다른 예들은 스플릿(split) 스테이지 1(S1) 및 스테이지 2(S2) TLB를 사용할 수 있으며, 이 경우 VA-PA 쌍(262, 264)은 VA-IPA 쌍 또는 IPA-PA 쌍으로 대체될 수 있다. TLB 엔트리들(260)은 또한 변환 컨텍스트 식별자(254)(ASID(252) 및 VMID(250)로 형성됨)로 태그된다. 이 예는 두 개의 개별 변환 컨텍스트 식별자를 제공하지만, 다른 예에서는 단일 통합 변환 컨텍스트 식별자가 사용될 수 있고, 또는 스플릿 S1/S2 TLB의 경우에는, S1 TLB는 ASID를 사용할 수 있고 S2 TLB는 VMID를 사용할 수 있다. 변환 컨텍스트 식별자는, 동일한 가상 어드레스를 지정하는 상이한 운영 체제 또는 애플리케이션이 그들 액세스를 상이한 물리적 어드레스를 제공하는 TLB(100)의 상이한 엔트리에 매핑할 수 있도록 한다.
TLB(100)에서의 히트는 태그(262)가 메모리 액세스 요청에 대해 지정된 어드레스(258)의 대응하는 부분과 일치할 뿐만 아니라, 동일한 엔트리에 저장된 변환 컨텍스트 식별자가 메모리 액세스가 발행된 현재 변환 컨텍스트와도 일치해야 한다는 것을 요구한다. 태그(262)와 변환 컨텍스트 식별자(254)의 비교는 주어진 메모리 액세스에 대한 정확한 물리적 어드레스(264)를 위치시키기에 충분할 것으로 예상될 수 있다. 그러나, 이들이 룩업(lookup)에서 수행된 유일한 비교인 경우, 영역 관리 유닛 테이블(128)의 추가 검사 없이 TLB에서의 메모리 액세스 히팅(hitting)이 승인되면 잠재적인 보안 취약성이 있다. 이것은 MMU를 속여서 실제로 상이한 영역에서 주어진 메모리 영역에 액세스하기 위해 이전에 수락된 영역으로 오는 메모리 액세스를 수락하게 하기 위해서, 이전에 실행된 프로세스와 동일한 VMID(250) 또는 ASID(252)를 가진 새로운 프로세스를 생성하는 것이 가능하기 때문이다.
이 문제를 해결하기 위해, TLB(100)는 각 TLB 엔트리(260) 내에서 대응하는 메모리 영역을 소유하는 소유자 영역의 글로벌 RID(270)뿐만 아니라, 어떤 다른 영역이 대응하는 메모리 영역에 액세스하도록 허용되는지를 제어하기 위해 소유자 영역에 의해 설정된 가시성 속성(272)도 지정할 수 있다. 현재 변환 컨텍스트 및 현재 영역으로부터 발행된 주어진 타겟 메모리 영역에 대한 메모리 액세스에 응답하여 변환 캐시(100)의 주어진 룩업이 수행될 때, 변환 캐시(100)에 미스(miss)가 있으면, TLB 제어 회로(280)는 액세스가 허용되는지 여부를 검사하기 위해 관련 페이지 테이블(120) 및 RMU 테이블(128)에 액세스하도록 테이블 워크 유닛(102)을 트리거할 수 있다. 페이지 테이블 또는 RMU 테이블(128)이 변환 컨텍스트, 예외 레벨 및 영역의 현재 조합이 대응하는 메모리 영역에 액세스하는 것을 제외하면, 그 메모리 액세스에 응답하여 어떤 데이터도 변환 캐시에 할당되지 않는다. 특히, 룩업이 누락되고 현재 영역이 타겟 메모리 영역의 소유자 영역에 의해 타겟 메모리 영역에 액세스하는 것으로부터 제외되면, 변환 캐시에 어드레스 변환 데이터의 할당이 방지된다. 따라서, 대응하는 메모리 액세스가 MMU 페이지 테이블(120) 및 RMU 테이블(128) 모두의 검사를 통과할 때 엔트리가 TLB(100)에 할당된다.
다음에, 주어진 어드레스에 대한 어드레스 변환을 제공하는 엔트리(260)를 이미 포함하는지 여부를 검사하기 위해 변환 캐시를 룩업할 때, TLB 제어회로(280)는 대응하는 엔트리(260)에서 지정된 변환 컨텍스트 식별자(254)와 메모리 액세스 요청과 함께 수신된 현재의 변환 컨텍스트에 대한 변환 컨텍스트 식별자(254) 간의 제1 비교, 및 또한 그 엔트리(260)에 의해 지정된 글로벌 RID(270)와 메모리 액세스 요청을 발행한 현재 영역과 관련된 현재 글로벌 RID 간의 제2 비교에 따라 메모리 액세스가 변환 캐시(100)의 주어진 엔트리와 일치하는지 여부를 판정한다. 메모리 영역에 대한 액세스가 허용된 것으로 이전에 확인된 영역으로부터 TLB 엔트리가 여전히 액세스되고 있는지 추가 검사를 제공함으로써, 이를 통해서 악의적인 감독 프로세스가 소유자 영역에 의해 데이터에 액세스하도록 허용된 이전의 기존 프로세스와 동일한 ASID(252) 또는 VMID(250)로 또 다른 프로세스를 재생성하더라도, 글로벌 영역 식별자(270)가 도 18과 관련하여 논의된 바와 같이 영역 스크러빙 커맨드(216)를 거치지 않고 다른 프로세서에 재할당될 수 없기 때문에, 이것은 현재 영역의 글로벌 RID가 유효하다고 신뢰할 수 있으며 ASID 또는 VMID에 대해 가능한 한 "위조"될 수 없다는 것을 의미한다. 따라서, 현재 영역의 글로벌 RID가 여전히 소유자 GRID(270) 및 가시성 속성(272)으로 나타낸 허가(permission)를 충족시키는 경우, 이것은 이전에 수행된 영역 테이블 검사가 여전히 유효함을 나타낸다.
영역 식별자의 제2 비교에서 미스매치가 검출되면, 엔트리가 할당된 이후 변환 컨텍스트 ID(254)와 영역 ID(270) 사이의 매핑에 변화가 있었음을 나타내기 때문에, 태그 비교와 변환 컨텍스트 비교가 일치하더라도 액세스 요청은 TLB에서 미스(miss)한 것으로 간주된다. 이것은, 페이지 테이블 및 RMU 테이블의 또 다른 워크가 테이블 워크 유닛(102)에 의해 트리거될 수 있기 때문에, 액세스가 거부될 것이라는 것을 반드시 의미하는 것은 아니며, 영역 검사가 성공적이면, 이것은 TLB(100)에 상이한 엔트리(260)의 할당 및 새롭게 할당된 엔트리로부터의 정보에 의거하여 메모리 액세스의 서비스를 야기할 수 있다.
도 26은 주어진 메모리 액세스가 MMU(26)에 의해 허용되는지를 판정하는 방법을 나타내는 흐름도이다. 단계 300에서, 메모리 액세스 요청이 수신되고 이것이 TLB(100)에서 룩업된다. 메모리 액세스 요청은 적어도 액세스될 가상 어드레스, 현재 변환 컨텍스트를 나타내는 하나 이상의 변환 컨텍스트 식별자 및 현재 영역을 식별하는 글로벌 영역 식별자를 지정한다. 예를 들어, 글로벌 RID는 영역에 진입할 때 현재 영역의 글로벌 RID로 기록될 수 있는 처리 요소(8)의 상태 레지스터로부터 판독될 수 있다.
메모리 액세스 요청에 응답하여, TLB 제어 회로(280)는 TLB의 룩업을 수행한다. 이 룩업은 TLB의 적어도 일부 항목에 액세스한다. 일부 접근법은 완전 연관 캐시 구조를 사용할 수 있으며, 이 경우 히트 또는 미스가 있는지 여부를 식별하기 위해 적어도 레벨 1 TLB의 모든 엔트리가 검색될 수 있고 현재 요청의 파라미터와 비교될 수 있다. 다른 접근법은 세트-연관 캐시 할당 정책을 사용할 수 있고, 이 경우 주어진 레벨의 TLB의 엔트리의 서브세트만이 룩업될 필요가 있을 수 있고, 메모리 액세스의 타겟 어드레스를 사용하여 인덱스될 필요가 있을 수 있다. 액세스된 엔트리 세트 각각에 대해, TLB 제어 회로(280)는 다음을 포함하여 (병렬 또는 순차적으로) 다수의 비교를 수행한다:
·메모리 액세스 요청의 어드레스가 액세스된 엔트리에 저장된 태그(262)와 일치하는지를 비교하기 위한 태그 비교(302);
·액세스된 엔트리에 저장된 변환 컨텍스트 식별자를, 메모리 액세스 요청의 변환 컨텍스트 식별자와 비교하기 위한 제1(컨텍스트) 비교(304); 및
·메모리 액세스 요청의 글로벌 RID를, 소유자 RID(270) 및 액세스된 엔트리 세트의 각각에 대한 가시성 속성(272)과 비교하기 위한 제2(영역) 비교(306).
단계 308에서, 제어 회로(280)는 모든 비교 302, 304, 306에 대한 매칭을 리턴한 엔트리가 TLB에 있는지를 판정하고, 그렇다면 히트가 식별되고 단계 310에서 매칭 엔트리에서 지정된 물리적 어드레스(264)가 리턴되며, 그 물리적 어드레스에 근거해서 메모리 액세스가 진행될 수 있다. 히트의 경우, 페이지 테이블 또는 RMU 테이블을 룩업할 필요가 없다(메모리 액세스에 대한 소유권 테이블 록업은 생략될 수 있다). 페이지 테이블 및 RMU 테이블에 의해 제공된 보호 기능은 미스(miss)의 경우에만 호출(invoked)된다.
3개의 비교 302, 304, 306 모두와 일치하는 어떤 엔트리도 없으면, 미스가 검출된다. 추가의 TLB 레벨이 제공되면, 단계 300-308에 대응하는 록업이 레벨 2 또는 그 다음의 레벨 TLB에서 수행될 수 있다. 마지막 레벨 TLB에서 룩업이 미스하면, 다양한 페이지 테이블 및 RMU 테이블의 워크가 수행된다. 따라서, 단계 311에서 스테이지 1 페이지 테이블 워크가 수행되고 단계 312에서 스테이지 1 페이지 테이블 결함이 발생했는지(예를 들어, 지정된 가상 어드레스에 대해 정의된 어드레스 매핑이 없었기 때문에 또는 액세스 요청의 현재 파라미터(256)가 타겟 가상 어드레스에 대해 지정된 액세스 허가를 위반하기 때문에)가 판정된다. 스테이지 1 결함이 발생하면 단계 314에서 메모리 액세스가 거부되고 메모리 액세스에 응답하여 TLB(100)에 대한 어드레스 매핑 데이터의 할당이 방지된다.
한편, 액세스 요청이 스테이지 1 페이지 테이블 검사를 통과하면, 단계 315에서 스테이지 2 페이지 테이블 워크가 트리거되어 스테이지 1 프로세스에 의해 리턴된 중간 물리적 어드레스에 대한 매핑 데이터를 취득하고, 단계 316에서 스테이지 2 페이지 테이블 결함이 (다시, 어드레스 매핑이 정의되지 않았기 때문에 또는 스테이지 2 액세스 허가에 의해 액세스가 허용되지 않기 때문에) 발생했는지 여부를 판정한다. 스테이지 2 결함이 발생하면, 다시 단계 314에서 액세스 요청이 거부된다.
스테이지 2 결함이 발생하지 않으면 단계 318에서 RMU 테이블 룩업이 스테이지 2에 의해 리턴된 물리적 어드레스에 근거하여 트리거되고 단계 320에서 영역 결함이 검출되었는지를 판정한다. 다음과 같은 이벤트가 발생하면 영역 결함이 트리거될 수 있다:
· 대응하는 메모리 영역에 대한 라이프사이클 상태가 영역 소유권 테이블(128)에서 유효하지 않다고 표시되면, 이것은 도 22에 도시된 클리닝 동작(224)을 거치지 않은 메모리 어드레스 공간의 페이지가, 상이한 영역에 의한 액세스로부터 그 메모리 영역의 또 다른 영역에 의해 이전에 저장된 임의의 데이터를 보호하기 위해서, 액세스될 수 없다는 것을 보장한다.
·현재 영역은 그 메모리 영역에 액세스하도록 대응하는 메모리 영역에 대한 소유자 영역에 의해 허용되지 않는다. 주어진 영역이 주어진 메모리 영역에 액세스하도록 허용될 수 없는 이유는 여러 가지가 있을 수 있다. 메모리 영역이 소유자 자체와 그 자손에게만 보이도록 소유자 영역이 지정되었다면, 또 다른 영역은 그 영역에 액세스하도록 허용될 수 없다. 또한 현재 영역이 소유자 영역의 부모 영역이고 소유자 영역이 부모가 그 영역에 액세스하는 것을 허용하도록 부모 가시성 속성을 정의하지 않았으면, 메모리 액세스가 거부될 수 있다. 또한, 그 메모리 영역이 상술한 바와 같이 RMU-프라이빗으로서 현재 설정되어 있으면, 소유자 영역 자체는 메모리 영역에 액세스하는 것으로부터 방지될 수 있다. RMU 검사 스테이지에서, 소유자 영역의 자손 영역은 (메모리 영역이 RMU-프라이빗 영역이 아닌 한) 메모리 영역에 액세스하도록 허용될 수 있다. 따라서 이 검사는 소유자 영역에 의해 설정된 액세스 허가를 시행한다.
·S1/S2 변환에 의해 현재 메모리 액세스를 위해 물리적 어드레스가 매핑된 가상 어드레스 또는 중간 물리적 어드레스가 도 19에 도시된 바와 같이 대응하는 메모리 영역에 대해 소유권 테이블(128)에 지정된 매핑된 어드레스와 일치하지 않는 경우, 메모리 액세스가 거부된다. 이것은, 악의적인 부모 영역이 지정된 메모리 영역의 소유권을 자식 영역에 할당하지만, 그 다음에 페이지 테이블(120)에서의 변환 매핑을 변경할 수 있음으로써 자식 영역이 실제로 소유한 페이지를 나타내는 데 사용한, 동일한 가상 어드레스를 사용하여 자식 영역에 의해 트리거된 다음 메모리 액세스가, 자식 영역 자체가 실제로 소유하지 않은 상이한 물리적 어드레스에 지금 매핑하는 상황을 방지한다. 소유권을 주장할 때 대응하는 메모리 영역의 물리적 어드레스로부터 그 물리적 어드레스를 생성하는 데 사용되는 매핑된 어드레스로 다시 소유권 테이블에서의 역 매핑을 제공함으로써, 이것은 어드레스 매핑의 변경으로 인한 보안 위반이 검출되게 하여 메모리 액세스가 실패할 것이다.
다른 유형의 검사도 수행될 수 있음을 이해할 것이다. 영역 검사가 성공적이면, 단계 322에서 물리 어드레스가 리턴되고, 메모리 액세스는 물리적 어드레스를 사용하여 진행될 수 있으며, 페이지 테이블(120) 및 소유자 영역으로부터 획득된 물리적 어드레스와 요청된 가상 어드레스 및 변환 컨텍스트에 대응하는 소유권 테이블(128)로부터 획득된 가시성 속성을 나타내는 TLB에 새로운 엔트리가 할당된다.
따라서, 요약하면 변환 캐시 룩업에서 히트를 검출하기 위해 제2 비교(변환 캐시의 엔트리에 제공된 GRID와 현재 영역의 GRID를 비교)가 일치하는 것을 요구함으로써, 이것은, TLB 엔트리가 할당된 후 주어진 영역과 연관된 변환 컨텍스트 식별자가 변경되더라도, TLB 히트 시 영역 검사가 다시 반복되지 않아도 이것이 영역 보호를 피하는 데 사용될 수 없게 한다. 이것은 (수행될 검사 횟수를 고려할 때 상대적으로 프로세서 집중적인) 모든 메모리 액세스에 대해 영역 검사를 반복할 필요가 없으므로 성능을 향상시킬 수 있다. 이렇게 하면 히트(hits)가 미스(misses)보다 훨씬 일반적이기 때문에, 대부분의 메모리 액세스를 더 빠르게 수행할 수 있다. 메모리 액세스와 변환 캐시의 주어진 엔트리 간의 미스매치는, 제2 비교가 그 엔트리에서 지정된 영역 식별자와 현재 영역의 영역 식별자 간의 미스매치를 식별할 때 검출된다. 그러면 이것은 미스를 트리거할 것이고 또 이것은 정확한 액세스 제어 데이터를 찾기 위해 페이지 테이블 및 RMU 테이블 워크를 트리거할 수 있다(VMID/ASID가 변경된 경우 영역 검사가 반복됨).
RMU는 이전 활성 영역과 관련된 정보를 무효화하는 스크러빙 프로세스가 수행될 때까지 이전 활성 영역과 동일한 영역 식별자를 갖는 새로운 영역의 초기화를 방지할 수 있기 때문에 이러한 접근법은 안전하다. 이 스크러빙 프로세스는 영역 관리 데이터 및 무효화된 영역과 관련된 메모리에 저장된 임의의 데이터의 무효화를 포함할 수 있을 뿐만 아니라, 제2 비교가 그 엔트리의 영역 식별자와 무효화된 영역의 영역 식별자 간의 일치를 식별하는 변환 캐시의 적어도 하나의 엔트리의 무효화도 포함할 수 있다. 따라서, 이것은 그 영역과 관련된 변환 캐시(100) 내의 모든 데이터가 무효화되지 않는 한, 이전 프로세스와 동일한 영역 식별자를 사용하여 상이한 프로세스를 재생성할 수 없음을 의미한다. 따라서, TLB에서의 일치하는 영역 식별자를 신뢰하여 이전에 수행된 영역 검사가 여전히 유효함을 나타낼 수 있다. 특히, 각 영역은 상술한 바와 같이 라이프사이클 상태와 연관될 수 있으며, 이것은 스크러빙 프로세스가 수행되도록 강요하는데 사용될 수 있다. 현재 영역의 현재 라이프사이클 상태가 활성인 경우 어드레스 변환 데이터는 변환 캐시에만 할당될 수 있다. 주어진 영역 식별자로 새로운 영역을 초기화하기 위한 커맨드는 클린 상태 이외의 어떤 상태에서든 거부될 수 있으며, 활성 상태에서 클린 상태로의 천이는 스크러빙 프로세스를 트리거하기 위한 적어도 하나의 커맨드를 포함하는 소정의 커맨드 시퀀스가 실행되는 것을 요구할 수 있다.
변환 캐시에서의 미스(misses)는 소유권 테이블 룩업을 트리거할 수 있으며, 이는, 다수의 메모리 영역의 각각에 대해, 어떤 다른 영역이 메모리 영역에 액세스하도록 허용되는지를 제어하기 위한 소유자 영역에 의해 설정된 액세스 제한과 대응하는 메모리 영역에 대한 소유자 영역을 지정하는 소유권 테이블에 액세스한다. TLB 히트를 판정하기 위한 부가적인 제2 비교를 포함함으로써, 이것은 룩업 히트에 대해 소유권 테이블 룩업이 생략될 수 있게 한다. 소유권 테이블 룩업은 TLB 미스에 대해 수행된다.
도 25는 소유자 영역의 GRID가 각 TLB 엔트리에 저장되는 접근법을 도시하지만, 현재 영역의 GRID가 대응하는 메모리 영역에 액세스하기에 적합한지 여부를 판정할 수 있는 정보를 나타내는 다른 방법이 있을 수도 있다. 예를 들어, 권한 부여 된 영역의 GRID 목록은 TLB에서 유지될 수 있고, 또는 TLB는 전체 GRID 대신 활성 영역 목록에 대한 인덱스를 포함하는 TLB 엔트리가 있는 별도의 활성 영역 목록을 유지할 수 있는데, 이는 TLB 엔트리에 목록을 저장하는 것과 비교하여 TLB 엔트리 크기를 줄일 수 있다. 그러나, 활성 영역 목록을 참조할 때 부가적인 간접 레벨을 피함으로써 TLB 엔트리를 할당하고 검사하는 프로세스가 덜 복잡해지고 TLB 간에 활성 영역 목록의 변경사항을 동기화하지 않아도 되기 때문에, 소유자 영역의 GRID를 표시하는 것만으로도 권한이 부여된 영역을 식별하는데 더 효율적인 방법이 될 수 있다.
TLB를 룩업할 때 수행되는 제2(GRID) 비교에서의 일치는 반드시 현재 영역 식별자가 대응하는 TLB 엔트리(260) 양쪽에서 지정된 글로벌 영역 식별자(270)와 정확히 동일할 필요는 없다는 것에 주목한다 - 몇몇 형태의 제2 비교는 부분 매칭을 사용할 수 있다. 일부 구현은 소유자 영역만 그것의 소유 페이지에 액세스하도록 허용할 수 있으므로 이 경우 현재 GRID와 소유자 GRID(270) 간의 정확한 일치가 필요할 수 있다. 그러나, 영역 간에 데이터를 공유하는 것이 유용할 수 있기 때문에, 소유자 영역이 다른 영역에 의해 어떤 액세스가 허용되는지를 정의할 수 있도록 가시성 속성(272)이 제공될 수도 있다.
따라서, 소유자 영역 글로벌 RID(270)뿐만 아니라 TLB(100)에 가시성 속성(272)도 캐싱함으로써, 이것은 TLB 제어 회로(280)가 가시성 속성에 근거하여 일치를 판정하기 위해 제2 비교에 필요한 일치 정도를 변경할 수 있게 한다. 예를 들어, 가시성 속성(272)은 비교를 수행할 때 GRID의 어느 부분이 마스킹되어야 하는지를 제어할 수 있어서, 이들 마스킹된 비트가 비교의 전체 매칭에 영향을 미치지 않기 때문에 불일치 여부는 중요하지 않다. 예를 들어, 현재 영역이 소유자 영역 이외의 영역 또는 소유자 영역의 자손 영역을 나타내는 경우, 제어 회로는 경우에 따라 불일치를 결정할 수 있다. 자손 영역은 소유자 영역의 GRID와 일치하는 접두사 또는 접미사 부분을 가지고 있으므로 상기 설명한 글로벌 RID 형식을 사용하여 쉽게 식별될 수 있다.
가시성 속성의 적어도 하나의 값에 대해, 제어 회로는 현재 영역이 소유자 영역 이외의 영역, 소유자 영역의 자손 영역 또는 소유자 영역의 부모 영역인 경우(예를 들어, 부모 가시성이 상기에서 설명한 대로 설정될 때) 미스매치를 판정할 수 있다. 일부 경우에는, 가시성 속성의 적어도 하나의 값은 제어 회로(280)가 어느 영역이 현재 영역인지에 관계없이(예를 들어, 글로벌 가시성 비트가 설정되어 있는 경우) 제2 비교에 대한 일치를 판정할 수 있게 한다. 따라서, 영역 식별자에 근거한 제2 비교는 일반적으로 통과되어야 하지만, 정확히 현재 영역의 GRID에 의해 어떤 요구가 충족되어야 하는지는 가시성 비트(272)에 의존할 수 있다. 자식 영역을 초기화한 부모 영역의 영역 식별자에 대응하는 비트 부분을 포함하는 자식 영역의 영역 식별자를 구성함으로써, 이것은 이러한 부분 매치가 효율적으로 수행될 수 있게 한다. 상이한 영역 세대에 대한 글로벌 영역 식별자의 상이한 가변 길이 비트 부분의 가변 할당을 지원하는 구현에서, TLB 엔트리(260)는 또한 GRID를 형성하기 위해(부모 영역을 조부모 또는 이전 조상 영역과 구별하기 위해) 연결되는 상이한 로컬 RID들 사이의 경계의 위치를 식별하는 일부 정보를 지정할 수 있다. 이것은 TLB 제어 회로(280)가 영역 식별자의 어느 부분이 마스킹되는지를 판정할 수 있게 한다. 다른 구현의 경우, 이것은 (예를 들어, 어떤 조상이 소유자 영역이 그 부모 영역에 대한 소정의 가시성을 갖는 메모리 영역에 액세스하도록 허용되면) 필요하지 않을 수도 있다. 또한, 일부 구현은 고정된 수의 비트(32비트와 같은)를 갖는 각 글로벌 영역 식별자와의 고정된 매핑을 가질 수도 있고, 이 경우에 어떤 부가적인 경계 정의 데이터도 제공할 필요가 없을 수도 있다.
도 27은 상이한 예외 레벨에서 처리 요소(8)에 액세스 가능한 아키텍처 상태의 예를 도시하는 벤다이어그램이다. 도 27은 영국 캠브리지의 ARM® Limited에 의해 제공된 ARM® 아키텍처에 근거한 예를 도시하지만, 다른 구현은 다른 아키텍처에 근거할 수도 있으며, 이는 주어진 프로세스와 관련된 상이한 상태를 가질 수도 있다. 또한, 도 27은 간결성을 위한 예로서 사용된, 각 예외 레벨에서 액세스 가능한 상태의 서브세트만을 도시하지만, 도 27에 도시되지 않은 다른 레지스터들도 액세스 가능할 수 있음을 이해할 것이다.
예외 레벨 EL0에서 동작할 때, 처리 요소(8)는 예를 들어, 다음을 포함하여, 350으로 라벨링된 아키텍처 상태의 서브세트에 액세스할 수 있고:
· 데이터 처리 동작 중 범용 데이터 값을 저장하기 위한, 정수 레지스터, 부동 소수점 레지스터 및/또는 벡터 레지스터를 포함하는, 범용 레지스터.
· 실행중인 프로그램 내에서 현재 실행 지점을 나타내는 프로그램 명령 어드레스를 저장하는, 프로그램 카운터(PC) 레지스터.
· 예외 레벨 EL0에서 실행되는 프로세스로부터 예외를 취할 때 프로세서의 현재 상태에 대한 정보를 저장하는 데 사용되는, 세이브된 프로세서 상태 레지스터(SPSR_EL0). SPSR은 예를 들어 현재 프로세서 상태에 관한 정보, 예를 들어 예외가 발생한 시점의 현재 프로세서 모드를 나타내는 값 PSTATE을 포함할 수 있다. 프로세서 모드는 명령 세트가 실행중인 것과 같은 다른 정보뿐만 아니라 예외 레벨도 지정할 수 있다. 또한, SPSR 레지스터는 후술하는 바와 같이 영역 엔트리를 제어하기 위해 사용되는 영역 진입 플래그 R를 포함할 수도 있다.
· ELR이 예외가 처리되면 처리가 분기되어야 하는 리턴 어드레스를 제공하기 위해서, 예외가 발생했을 때 현재 프로그램 카운터 값을 저장하는 데 사용되는, 예외 링크 레지스터 ELR_EL0.
· 영역 진입이 이루어지는 자식 영역의 로컬 RID를 저장하는 데 사용되는 영역 식별자 레지스터 RID_EL0(예외 레벨 EL0은 아래에 설명된 것과 같이 서브 영역을 생성할 수 있는 능력과 함께, 가장 낮고, 가장 특권이 적은, 예외 레벨이지만, 예외 레벨 EL0에서 작동하는 프로세스로부터 여전히 영역이 진입될 수 있다.)
·발생한 예외에 대한 정보를 저장하는 데 EL0에 의해 사용되는 예외 상태 레지스터(ESR)(예를 들어, 적절한 예외 핸들러의 선택 가능).
프로세서(8)가 예외 레벨 EL1에서 동작할 때, 그것은 예외 레벨 EL0에서 액세스 가능한 모든 상태(350)를 포함할 뿐만 아니라 부가적인 아키텍처 상태도 포함하는 상태 352의 서브세트에 액세스할 수 있다. 예를 들어 EL1에는 이들 레지스터의 EL0 버전에 대한 대응 목적으로 EL1에서 작동하는 프로세스에 의해 사용되는 SPSR, ELR, ESR 및 RID 레지스터의 뱅킹 버전이 있다. SPSR_EL1 레지스터는 PSTATE 및 R 값에 더하여 후술되는 바와 같이 네스티드 영역 진입 및 퇴장 중에 사용되는 중간 영역 플래그 Int를 포함할 수도 있다. 도 27은 중간 영역 플래그가 SPSR에 저장되는 예를 도시하지만, 이것은 필수적인 것이 아니며 다른 예는 상이한 레지스터에 플래그를 저장할 수 있다. EL1에서 액세스 가능하지만 EL0에서는 액세스 불가능한 상태의 또 다른 예는 페이지 테이블 워크 중에 MMU에 의해 사용되는 스테이지 1 페이지 테이블 120-1의 베이스 어드레스를 나타내는 어드레스를 제공하는 변환 테이블 베이스 레지스터 TTBR_EL1일 수 있다.
유사하게, 예외 레벨 EL2에서 명령을 실행할 때, 처리 요소(8)는 EL1에서 액세스 가능한 모든 상태(352)를 포함하지만, 스테이지 2 변환 테이블 120-2의 베이스 어드레스를 제공하는 가상 변환 테이블 베이스 레지스터 VTTBR_EL2 및 EL2에 대한 SPSR, ELR 및 RID 레지스터의 추가 뱅크 버전과 같은 부가적인 상태도 포함하는 상태 354의 서브세트에 액세스할 수 있다.
마지막으로, EL3에서 동작할 때, 처리 요소는 EL2에서 액세스 가능한 모든 서브세트(354)를 포함하지만 영역을 입력하기 위해 예외 레벨 EL3에서 동작하는 프로세스에 의해 사용되는 추가 영역 식별자 레지스터 RID_EL3, 및 더 낮은 예외 레벨에 사용되는 대응하는 레지스터와 유사한 추가 예외 처리 레지스터 ELR, SPSR, ESR와 같은 다른 상태도 포함할 수 있는 상태 356의 서브세트에 액세스할 수 있다. 다시, 도 27은 단지 예일 뿐이며, 특정 예외 레벨에 액세스 가능한 관련 서브세트에 다른 상태도 포함될 수 있다.
따라서, 각 예외 레벨은 해당 예외 레벨에서 소프트웨어 프로세스를 처리할 때 처리 회로에 액세스할 수 있는 대응하는 레지스터 그룹과 연관된다. 최소 특권 예외 레벨 이외의 주어진 예외 레벨에 대해, 주어진 예외 레벨에서 액세스 가능한 레지스터 그룹에는 주어진 예외 레벨보다 특권이 낮은 예외 레벨에서 액세스 가능한 레지스터 그룹이 포함된다. 특정 레벨에 액세스할 수 있는 이러한 상태 계층은 아래에 설명되는 바와 같이 영역 진입 및 퇴장 시에 상태 세이빙 및 복원과 관련된 오버헤드를 줄이기 위해 활용될 수 있다.
영역에/으로부터의 진입 및 퇴장 시, 처리 요소(8) 및/또는 RMU(20)는 영역의 진입 또는 퇴장의 안전한 처리를 보장하기 위한 다수의 동작을 수행할 필요가 있을 수 있다. 예를 들어, 영역에 진입할 때 타겟 영역이 정확한 라이프사이클 상태인지 검사하기 위해 여러 가지 검사를 수행해야 할 수도 있다(예를 들어, 소유 페이지로부터 데이터를 스크러빙하지 않은 영역 또는 존재하지 않는 영역으로 들어가려고 시도하여 보안 조치를 회피하는 것을 방지한다.) 또한, 영역을 퇴장할 때, 더 높은 특권 레벨 프로세스가 더 낮은 특권 레벨에서 그 영역에 의해 사용된 상태 데이터에 액세스할 수 없도록 처리 요소의 레지스터에 저장된 아키텍처 상태를 마스킹하는 것이 바람직할 수 있다(그렇지 않으면, 영역 보호에 의해 제공되는 보안 조치를 피할 수 있게 한다). 영역 진입 및 퇴장을 처리하기 위한 하나의 접근방법은 영역에 들어가거나 나가기 위한 관련 동작을 수행하도록 RMU(20)를 트리거하는 전용 영역 진입 또는 영역 퇴장 명령을 제공하는 것일 수 있다. 그러나, 이것은 새로운 명령을 사용하기 위해서 기존 소프트웨어를 대폭 수정해야 한다.
아래에 설명된 기술에서, 영역 메커니즘은 영역에 들어가고 나가기 위해 이미 예외 진입 및 리턴에 제공된 메커니즘을 재사용한다. 이것은 영역 진입 및 퇴장을 지원하는 데 필요한 소프트웨어 수정의 양을 줄이고, 아키텍처와 하드웨어를 단순화한다. 이것은 종종 영역 경계가 어쨌든 예외 레벨 경계에 대응할 수 있기 때문에 특히 유용하며, 진입 및 퇴장을 제어하기 위해 새로운 명령이 제공되더라도, 예외 처리 동작이 여전히 필요하므로, 전체적으로 예외 메커니즘을 확장하여 진입 및 퇴장을 제어하는 데 비용이 덜 들 수 있다.
따라서, 일반적으로 현재 영역에서 처리된 예외로부터 현재 영역에서도 처리된 다른 프로세스로 처리를 리턴하는 예외 리턴(ERET) 명령(다른 프로세스는 동일한 예외 레벨 또는 예외보다 더 적은 특권이 있는 예외 레벨에서 처리될 수 있음)은, 현재 영역으로부터 목적지 영역으로 영역 진입을 트리거하기 위해 재사용될 수 있다. 예외 리턴 명령의 제1 변형에 응답하여, 처리 회로는 현재 예외 레벨로부터 더 적은 특권이 있는 예외 레벨(영역을 변경하지 않고)로 처리를 전환하는 한편, 예외 리턴 명령의 제2 변형에 응답하여, 처리 회로는 현재 영역으로부터 목적지 영역으로 처리를 전환할 수 있으며, 이는 현재 영역과 동일한 예외 레벨 또는 더 낮은(특권이 더 적은) 예외 레벨에서 작동할 수 있다. 예외 리턴 명령을 사용하여 영역 진입을 트리거하면 아키텍처 및 하드웨어 오버 헤드가 크게 단순화될 뿐만 아니라 영역 사용을 지원하기 위한 소프트웨어 수정 요구도 줄어든다.
예외 리턴 명령을 사용하는 또 다른 이점은 일반적으로 예외로부터 복귀할 때, 처리 회로가 예외 리턴 명령에 응답하여 극소(atomic) 세트의 조작을 수행할 수 있다는 것이다. 예외로부터 복귀하는 데 필요한 이러한 세트의 조작은 극히 작게 수행될 수 있으므로 이들 조작을 부분적으로 나눌 수 없고, 그래서 명령이 실패하여 극소 세트의 조작이 수행되지 않거나 명령이 성공적으로 실행되어 모든 극소 세트의 조작이 수행된다. 예외 리턴 명령의 제2 변형에 대해, 처리 회로는 제1 극소 세트 조작과 상이할 수 있는, 제2 극소 세트 조작을 유사하게 수행할 수 있다. 영역 진입이 부분적으로만 수행되어 보안 취약점으로 이어질 수 있는 상황을 피하기 위해 예외 리턴 명령이 극히 작게 완료되도록 하기 위해 프로세서에 이미 제공된 메커니즘은 영역 진입에 재사용될 수 있다. 예를 들어, 제2 극소 세트의 조작은 영역 실행 컨텍스트 상태를 이용 가능하게 하고, 현재 실행중인 영역을 변경하며, 동일한 영역이 마지막으로 실행될 때 처리가 이전에 실행되었던 프로그램 카운터 어드레스로의 분기를 제어하는 것을 포함할 수 있다.
예외 리턴 명령의 제1 및 제2 변형은 동일한 명령 인코딩을 가질 수 있다. 따라서, 영역 진입을 트리거하기 위해 예외 리턴 명령 자체를 수정할 필요가 없다. 이것은 레거시 코드(legacy code)와의 호환성을 향상시킨다. 주어진 예외 리턴 명령이 제1 변형으로서 실행되는지 또는 제2 변형으로서 실행되는지 여부는 상태 레지스터에 저장된 제어 값에 의존할 수 있다(예를 들어, 제어 값의 제1 및 제2 값은 예외 리턴 명령의 제1 및 제2 변형을 각각 나타낼 수 있다). 따라서, 예외 리턴 명령이 실행될 당시의 현재 아키텍처 상태는, 동일한 영역에서 더 낮은 특권이 있는 레벨로 프로세서를 리턴하는지, 새로운 영역으로의 진입을 트리거하는지 여부를 제어한다.
이 접근법을 사용하면 (소프트웨어 명령에 응답하여 제어 값의 자발적 설정을 허용하는 것 외에) 특히 상태 레지스터의 값이 영역 전환이 있을 수 있음을 암시하는 특정 이벤트에 응답하여 하드웨어에 의해 자동으로 설정될 수 있으므로, 소프트웨어 수정을 줄이면서 영역 진입을 제어할 수 있다. 예를 들어, 주어진 영역으로의 퇴장을 트리거하는 예외 조건이 발생할 때, 예외를 처리하기 위한 예외 핸들러 코드가 영역을 염두에 두고 작성되지 않은 이전 레거시 코드와 동일하더라도, 처리 회로는 제어 값을, 주어진 영역에 대한 제2 값으로 설정할 수 있어 다음 예외 리턴 명령이 자동으로 처리를 예외가 발생한 영역으로 리턴할 것이다. 대안적으로, 일부 아키텍처에서, 영역으로부터 퇴장할 때 상태 레지스터의 제어 값에는 해당 영역에 대한 영역 진입을 트리거하기 전에 설정된 제2 값이 여전히 포함되므로, 상태 레지스터의 제어 값에 대한 명시적인 설정은 필요하지 않을 수도 있는 것으로 예상될 수 있다.
일 예에서, 상태 레지스터의 제어 값은 상기 설명한 바와 같이 현재 예외 레벨과 연관된 SPSR 레지스터의 R 플래그일 수 있다. 이 레지스터는 일반적으로 프로세서 모드(예외 레벨 포함) 및 현재 처리중인 예외로부터 리턴 시 처리를 계속하는 방법에 대한 다른 정보를 제공하기 위해 예외 리턴 시 사용되므로 SPSR을 사용하는 것이 유용할 수 있다. 그러나, 영역 진입의 경우 이 정보는 대신 영역 실행 컨텍스트(REC)로부터 결정될 수 있으므로 SPSR이 필요하지 않을 수 있다. 예외 리턴 명령이 제1 또는 제2 변형으로서 처리되는지 여부를 제어하는 R 플래그를 저장하기 위해 SPSR의 일부를 재사용함으로써, 이것은 이 정보를 저장하기 위한 추가 레지스터를 제공할 필요가 없다. 따라서, ERET 명령의 제1 변형에 응답하여 특권이 더 적은 예외 레벨에서 예외를 계속하기 위한 (처리 모드와 같은) 리턴 상태 정보를 결정하는 데 사용되는 상태 레지스터를 사용하는 것이 유용할 수 있지만, 예외 리턴 명령의 제2 변형에 응답하여, 이 리턴 상태 정보는 메모리로부터 대신 결정될 수 있으므로 상태 레지스터 자체에 액세스할 필요가 없다. 특히, 제어 값을 저장하기 위해 사용되는 상태 레지스터는 예외 리턴 명령이 실행되는 현재 예외 레벨과 관련된 상태 레지스터일 수 있다.
도 27에 도시된 바와 같이, 적어도 하나의 영역 식별자 레지스터가 제공될 수 있고, 예외 리턴 명령의 제2 변형에 응답하여, 처리 회로는 영역 식별자 레지스터에 저장된 영역 식별자로부터 목적지 영역을 식별할 수 있다. 영역 식별자 레지스터는 뱅킹(banked)될 수 있어서, 예외 레벨들 중 하나와 각각 연관된 다수의 영역 식별자 레지스터들이 존재하고, 예외 리턴 명령의 제2 변형에 응답하여, 처리 회로는 현재 예외 레벨과 연관된 영역 식별자 레지스터에 저장된 영역 식별자로부터 목적지 영역을 식별할 수 있다. 타겟 영역 식별자를 저장하기 위해 영역 식별자 레지스터를 사용함으로써, ERET 명령의 명령 인코딩에 이것을 포함시킬 필요가 없는데, 이는 기존의 ERET 명령 형식을 사용하여 영역 진입을 트리거해서, 필요한 소프트웨어 수정량을 줄일 수 있다. 영역 식별자 레지스터에서의 영역 식별자는 부모 영역이 자신의 자식 영역을 참조하기 위해 사용하는 로컬 영역 식별자일 수 있으므로, 영역 진입은 부모 영역에서 자식 영역으로 전달되는 것으로 제한될 수 있으며, 제1 영역으로부터 제1 영역의 직접적인 자식이 아닌 또 다른 영역으로 이동할 수 없다. 예외 리턴 명령의 제2 변형에 응답하여, 처리 회로는 RID 레지스터에서 식별된 영역 ID와 연관된 영역이 무효 영역일 때 결함 조건을 트리거할 수 있다(영역 디스크립터가 정의되지 않았거나 또는 영역 디스크립터가 활성 이외의 라이프사이클 상태를 정의하는 RID).
예외 리턴 명령의 제2 변형에 응답하여, 처리 회로는 예외 리턴 명령에 대해 지정된 영역 실행 컨텍스트(REC) 메모리 영역으로부터 목적지 영역에서 처리될 스레드와 연관된 아키텍처 상태를 복원할 수 있다. 상태 복원은 예외 복귀 명령의 제2 변형(예를 들어, 극소 조작 세트의 일부로서)에 응답하여 즉시 수행될 수 있거나 나중에 수행될 수 있다. 예를 들어, 목적지 영역에서 처리를 시작하는 데 필요한 상태(예를 들어, 프로그램 카운터, 처리 모드 정보 등)를 즉시 복원할 수 있도록 상태 복원을 느린(lazy) 방식으로 수행할 수 있지만, 범용 레지스터와 같은 다른 상태는 나중에 필요할 때 또는 점진적으로 새로운 영역의 진행중인 처리를 배경으로 복원될 수 있다. 따라서, 처리 회로는 필요한 모든 아키텍처 상태가 REC 메모리 영역으로부터 복원되기 전에 목적지 영역의 처리를 시작할 수 있다.
예외 리턴 명령의 제1 변형에 응답하여, 처리 회로는 링크 레지스터에 저장된 프로그램 명령 어드레스로 분기될 수 있다. 예를 들어, 이것은 예외 리턴 명령이 실행되는 현재 예외 레벨에 대응하는 도 27의 ELR일 수 있다. 대조적으로, 예외 리턴 명령의 제2 변형에 대해, 처리 회로는 영역 실행 컨텍스트(REC) 메모리 영역에 지정된 프로그램 명령 어드레스로 분기될 수 있다. 따라서, 링크 레지스터는 새로운 영역에 대한 아키텍처 상태를 직접 식별하기 위해 예외 리턴 명령의 제2 변형에 사용되지 않으므로, 링크 레지스터를 재사용하여 새로운 영역의 아키텍처 상태가 복원되는 REC 메모리 영역에 포인터를 대신 제공할 수 있다. 이렇게 하면 REC 포인터를 저장하기 위해 순서대로 추가 레지스터를 제공할 필요가 없다.
따라서, 주어진 영역으로 영역 진입을 유발하기 위한 예외 리턴 명령을 실행하기 전에, RID 레지스터를 목적지 영역의 영역 식별자로 설정하고 목적지 영역과 관련된 REC 메모리 영역의 포인터를 저장하도록 링크 레지스터를 설정하기 위해 일부 부가 명령이 포함될 수 있다. REC 포인터는 목적지 영역의 영역 디스크립터로부터 부모 영역에 의해 취득될 수 있다.
예외 리턴 명령의 제2 변형에 응답하여, REC 메모리 영역이 목적지 영역 이외의 소유자 영역과 관련되어 있을 때 또는 예외 리턴 명령에 대해 지정된 REC 메모리 영역이 유효하지 않을 때 처리 회로에 의해 결함 조건이 트리거될 수 있다. 제1 검사는, 자식 영역이 소유한 메모리 영역만 해당 영역에 들어갈 때 액세스 가능한 REC 메모리 영역을 저장할 수 있기 때문에, 부모 영역이 자식 영역이 자신이 작성하지 않은 프로세서 상태로 실행하도록 속이는 것을 방지한다(그리고 위에서 설명한 것처럼 REC 메모리 영역은 RMU 프라이빗으로서 설정될 것이다). REC 메모리 영역의 유효성에 대한 제2 검사는 REC 메모리 영역을 한 번만 사용하여 영역으로 진입할 수 있으며, 이후 동일한 REC 데이터로 영역에 진입하려는 시도가 거부될 수 있음을 확인하는 데 유용할 수 있다. 예를 들어, 각 REC는 유효하지 않거나 유효할 수 있는 라이프사이클 상태를 가질 수 있다. 현재 영역에서 주어진 스레드를 처리하는 동안 발생하는 예외에 응답하여, 해당 스레드의 아키텍처 상태는 대응하는 REC 메모리 영역에 세이브될 수 있고, 그에 따라 대응하는 REC 메모리 영역은 무효에서 유효로 천이될 수 있다. 예외 리턴 명령의 제2 변형의 성공적인 실행에 응답하여, REC 메모리 영역은 유효로부터 무효로 다시 천이될 수 있다. 이것은 오래된 REC 메모리 영역, 상이한 스레드와 연관된 REC 메모리 영역, 또는 목적지 영역과 연관되어 있지만 영역으로부터의 이전 퇴장 시 아키텍처 상태를 저장하는 데 사용 된 올바른 것이 아닌 일부 다른 REC의 포인트를 지정함으로써 부모 영역이 악의적으로 자식 영역이 잘못 작동하는 것을 방지한다.
대응하는 방식으로, 영역으로부터의 퇴장은 예외 처리를 위해 제공된 메커니즘을 재사용할 수 있다. 따라서, 제1 영역에 의해 처리될 수 없는 제1 영역의 처리 중에 발생하는 예외 조건에 응답하여, 처리 회로는 제1 영역을 초기화한 부모 영역으로의 영역 퇴장을 트리거할 수 있다. 예외 발생/영역 퇴장시, 동일한 영역 내에서 처리될 수 있는 예외 발생에 대해 수행되지 않는 일부 부가 조작이 수행될 수 있다. 예를 들어, 이것은 아래에서 더 상세히 논의되는 바와 같이 아키텍처 상태의 마스킹 또는 스크러빙 및 REC에 대한 상태 저장의 트리거링을 포함할 수 있다.
그러나, 경우에 따라 예외가 발생한 제1 영역의 부모 영역에 의해 처리될 수 없는 예외가 발생할 수 있다. 따라서, 이 경우 부모 이외의 추가 조상 영역으로 전환해야 할 수도 있다. 주어진 영역에서 1세대 이상 더 오래된 조상 영역으로 직접 전환하는 기능을 제공할 수는 있지만, 이것은 예외 진입 및 리턴 또는 영역 퇴장 및 진입을 처리하는 데 필요한 상태 레지스터의 복잡성을 증가시킬 수 있다.
대신, 네스티드 영역 퇴장은 제1 영역의 부모 영역을 처리할 수 있는 가장 특권이 있는 예외 레벨보다 특권 레벨이 더 높은 타겟 예외 레벨에서 예외 조건이 처리될 때 수행될 수 있다. 네스티드 영역 퇴장에는, 발생한 예외의 타겟 예외 레벨에서 처리될 수 있는 제2 영역에 도달할 때까지, 자식 영역에서 부모 영역으로의 둘 이상의 연속적인 영역 퇴장이 포함될 수 있다. 따라서, 영역 계층을 한 번에 한 레벨씩 증가시킴으로써, 이것은 아키텍처를 단순화할 수 있다. 각각의 연속적인 영역 퇴장에서, 대응하는 영역과 연관된 REC에 프로세서 상태의 서브세트를 세이브하기 위해 수행되는 동작이 있을 수 있다.
예외가 처리되었을 때, 네스티드 영역 퇴장 이후에 제2 영역에서 실행되는 제2 변형의 예외 리턴 명령에 응답하여, 처리 회로는 네스티드 영역 진입을 트리거하여 제1 영역으로 리턴할 수 있다. 이것은 상이한 방식으로 처리될 수 있다. 일부 예에서, 하드웨어는 네스티드 영역 퇴장 중에 제1 영역과 제2 영역 사이에서 발생하는 임의의 중간 영역에서 명령을 실행할 필요없이 네스티드 영역 진입 자체를 트리거할 수 있다. 대안적으로, 하드웨어는 한 번에 한 레벨씩 네스티드 영역 퇴장에서 만난 각 연속적인 영역으로 다시 되돌아가고 각 중간 영역에서 제2 변형의 추가 ERET 명령을 실행하는 네스티드 영역 진입 프로세스를 제공함으로써 단순화될 수 있다. 이 경우 중간 영역으로의 영역 퇴장이 네스티드 영역 퇴장 중에 이루어진 중간 영역의 자식 영역으로의 리턴을 중간 영역이 트리거하도록 하기 위해, 예외 영역 레지스터는 자식 영역에서 미리 결정된 유형의 예외 조건이 발생했음을 나타내도록 설정될 수 있다. 예를 들어, 이 중간 영역의 경우를 처리하기 위해 새로운 유형의 예외 조건(예를 들어, "스퓨리어스 영역 퇴장")을 정의할 수 있다. 따라서, 중간 영역에 도달할 때, 프로세서는 미리 결정된 유형의 예외 조건을 처리하기 위한 예외 처리 루틴에 대응하는 프로그램 명령 어드레스로부터 중간 영역 내에서의 처리를 재개할 수 있다. 이 예외 처리 루틴은 예를 들어 자식 영역이 알려지지 않은 이유로 퇴장했다는 것을 간단히 판정할 수 있고, 그 다음에 처리를 추가 자식 영역으로 리턴하기 위해 제2 변형의 또 다른 예외 리턴 명령을 실행하도록 선택할 수 있다. 각 중간 영역에서 이렇게 함으로써 결국 원래의 예외가 발생한 원래의 제1 영역이 처리를 재개할 수 있다.
이 네스티드 영역 진입 및 퇴장 절차 중에, 상태 레지스터 내의 중간 영역 플래그를 사용하여 어떤 영역이 중간 영역인지 플래그해서, 관련 자식 영역으로의 하드웨어 트리거된 즉시 영역 진입을 트리거하거나 중간 영역 내에서 예외 핸들러 또는 다른 코드를 트리거하여 자식 영역으로 리턴하는 예외 상태 정보의 설정을 트리거할 수 있다. 예를 들어, 중간 영역 플래그는 도 27에서 설명한 대로 관련 SPSR에서의 Int 플래그일 수 있다.
도 28은 영역 진입 또는 예외 리턴을 처리하는 방법을 나타내는 흐름도이다. 단계 400에서, 현재 예외 레벨이 ELx일 때 예외 리턴(ERET) 명령이 실행된다. ELx는 처리 회로에 의해 지원되는 예외 레벨 중 하나일 수 있다. 최소 특권 예외 레벨 EL0로부터 예외 리턴이 발생하지 않을 것으로 예상할 수 있지만, 아래에서 설명하는 것처럼 서브 영역을 만드는 기능은, EL0에서 실행되는 서브 영역으로의 진입을 트리거하기 위해 EL0에서 실행된 ERET 명령이 여전히 존재할 수 있음을 의미한다. 또한, 일부 예외 유형은 예외가 발생한 레벨과 동일한 예외 레벨에서 처리될 수 있으며, 이 경우 EL0로부터 예외 리턴이 여전히 발생할 수 있다.
단계 402에서, 처리 요소는 예외 레벨 ELx과 관련된 SPSR에서 영역 플래그 R의 현재 값을 결정한다. 영역 플래그 R이 0이면, 이것은 상이한 영역에 진입하지 않고, 종래의 예외 리턴을 나타낸다. 단계 404에서, 처리 요소(8)는 SPSR_ELx 내의 PSTATE 값에 의거하여, 예외 리턴에 따라 동작할 타겟 예외 레벨을 결정하고 링크 레지스터 ELR_ELx로부터 분기될 프로그램 카운터 값을 결정한다. 새로운 타겟 예외 레벨 및 프로그램 카운터 값 및 예외 다음 처리로의 리턴과 연관된 어떤 다른 리턴 상태는 타겟 예외 레벨과 연관된 관련 아키텍처 상태 레지스터로 복원된다(이는 종종 예외 레벨 ELx보다 특권이 더 적은 낮은 레벨이지만, 동일한 예외 레벨 ELx일 수도 있다). 이러한 리턴 상태 동작은 극히 작게 수행된다. 단계 406에서, 처리는 타겟 예외 레벨에서 재개되지만, ERET 명령이 실행된 영역과 동일한 영역 내에 그대로 있다.
단계 402에서, 영역 플래그(R)가 1로 설정되면, 이것은 영역 진입을 나타내며, 그래서 이것은 종래의 예외 리턴에 대해 수행된 세트와는 상이한 제2 극소 세트의 동작을 트리거한다. 단계 408에서, 처리 요소는 다수의 영역 검사를 수행하기 위해 영역 관리 유닛을 트리거한다. 여기에는 다음을 확인하는 것이 포함된다:
· 예외 레벨 ELx와 관련된 영역 식별자 레지스터 RID_ELx에 표시된 로컬 RID는 유효한 자식 영역을 나타낸다. 즉, RMU는 지정된 자식 영역에 대한 영역 디스크립터 트리(360)로부터 액세스된 영역 디스크립터를 검사하고, 자식 영역의 영역 디스크립터의 라이프사이클 상태가 활성 상태를 나타내는지 여부를 검사한다. 자식 영역이 활성 상태 이외의 상태이면 영역 검사는 성공하지 못한다.
· RMU(20)는 또한 링크 레지스터 ELR_ELx에서의 포인터에 의해 표시된 REC 메모리 영역이 영역 ID 레지스터 RID_ELx에 표시된 자식 영역에 의해 소유되는 메모리 영역인지를 검사한다. 즉, RMU(20)는 영역 그래뉼 테이블(128)(또는 RGT(128)로부터 캐싱된 정보)에 액세스하고, REC 포인터에 표시된 메모리 영역에 대응하는 관련 엔트리의 위치를 찾아내고, 그 메모리 영역에 대해 지정된 소유자 영역을 검사한다. 소유권 테이블에 표시된 소유자 영역은 글로벌 RID로서 지정될 수 있으며, 이것은 타겟 자식 영역의 영역 디스크립터에 지정된 글로벌 RID와 비교되어 자식 영역이 REC의 유효한 소유자인지 판정할 수 있다. RID 레지스터에서의 지정된 자식 영역 이외의 어떤 영역에 의해 REC가 소유되면, 이 검사는 성공하지 못한다.
· RMU(20)는 또한 ELR_ELx에 정의된 REC 메모리 영역의 상태가 유효한지 검사한다. REC 메모리 영역의 유효성을 나타낼 수 있는 상이한 방법들이 있다. 예를 들어, 각각의 REC 메모리 영역은 그것이 유효한지를 지정하는 플래그를 포함할 수 있다. 또는, 별도의 테이블이 다른 메모리 영역에 저장된 REC의 유효성을 정의할 수 있다. REC는 이전 예외 퇴장 시 관련 영역의 아키텍처 상태를 저장하는 데 사용되었지만, 예외로부터의 리턴 후 상태를 복원하는 데 아직 사용되지 않은 경우 유효할 수 있다. REC가 유효하지 않으면 다시 영역 검사는 성공하지 못한다.
· RMU(20)은 RID 레지스터 RID_ELx에 표시된 자식 영역 이외의 자식 영역으로부터 마지막으로 퇴장한 후 플러시 커맨드(flush command)가 실행되었는지도 검사한다. 플러시 커맨드는 아래에서 더 자세히 설명하지만, 자식 영역의 REC에 여전히 세이브될 상태를 메모리로 푸시(push)하도록 하는 커맨드이다(이것은 느린(lazy) 상태 세이빙 접근법을 지원하는 데 도움이 된다). 플러시 커맨드가 실행되지 않았고 시스템이 이전에 퇴장된 자식 영역에 상이한 자식 영역을 진입시키려고 시도하면, 아직 메모리에 푸시되지 않은 상태가 프로세서 레지스터 내부에 여전히 남아 있을 수 있는 위험이 있다. 플러시 커맨드의 사용을 강요하면 이전 자식 영역의 상태의 손실(또는 다른 영역으로의 누출) 없이 상이한 자식 영역이 안전하게 진입할 수 있게 한다. 플러시 커맨드의 실행 여부를 식별하는 방법에는 여러 가지가 있을 수 있다. 예를 들어, 일부 상태 플래그는 (a) 마지막 영역 퇴장 이후 RID 레지스터 RID_ELx가 변경되었는지 여부 및 (b) 마지막 영역 퇴장 이후 플러시 커맨드가 실행되었는지 여부를 추적하는 데 사용될 수 있다. RID 레지스터에 대한 변경이 있고 이전 영역 퇴장 이후 플러시 커맨드가 실행되지 않은 경우, 이로 인해 영역 검사가 실패할 수 있다.
영역 검사 중 하나라도 실패하면, 단계 409에서 오류가 발생하고 시스템은 ERET 명령과 관련된 현재 영역 내에 머무른다. 따라서 모든 영역 검사가 성공하지 않으면 자식 영역에 도달할 수 없다.
모든 영역 검사가 성공적이면, 단계 410에서 처리 요소는 영역 ID 레지스터 RID_ELx에 표시된 자식 영역에서의 처리로 전환한다. 예를 들어, 프로세서에는 현재 영역의 글로벌 RID를 지정하는 내부 레지스터가 있을 수 있다(이 내부 레지스터는 소프트웨어에 보이지 않을 수 있으며 도 27에 도시된 뱅크 RID 레지스터와 상이하다). 새로운 목적지 영역의 글로벌 RID를 내부 RID 레지스터에 기록함으로써 자식 영역으로 전환할 수 있다.
단계 412에서, 새로운 영역과 관련된 상태는 ELR_ELx 레지스터의 포인터로 나타낸 REC 메모리 영역 내의 메모리에 세이브된 상태에 근거하여 이용 가능해진다. REC 영역은 새로운 자식 영역에 의해 소유되므로, 이제 액세스할 수 있고 그래서 REC로부터 프로그램 카운터 및 타겟 예외 레벨과 같은 리턴 상태 정보를 얻을 수 있다. 이 시점에서, 선택된 아키텍처 상태의 서브세트가 REC로부터 복원될 수 있거나, 또는 아키텍처 상태가 느리게 복원되어 모든 상태를 완전히 복원하지 않고 처리가 시작될 수 있으며, 그 다음 새로운 영역으로부터 처리가 재개될 수 있기 전에 지연을 감소시킴으로써 성능을 향상시키기 위해 일정 기간에 걸쳐 점진적으로, 또는 필요에 따라 상태가 복원될 수 있다.
단계 414에서, 중간 영역 플래그 Int가 새로운 영역과 관련된 SPSR에 설정되어 있는지 여부가 판정된다. SPSR 내용은 나머지 아키텍처 상태와 함께 REC로부터 복원될 것이다. 중간 영역 플래그가 설정되지 않으면, 이것은, 새로운 영역이 원래 예외가 발생한 영역이고(또는, 해당 영역에서 어떤 이전 예외도 발생하지 않고 영역이 처음으로 진입되고 있는 영역임), 그래서 자식 영역으로의 추가 영역 진입을 트리거할 필요가 없다는 것을 나타낸다. 단계 416에서, 프로그램 카운터는 REC로부터 취득된 다음, 단계 418에서 REC로부터 취득된 타겟 예외 레벨에서 새로운 영역에서 처리가 계속된다.
또는, 중간 영역 플래그가 설정되면, 이것은 네스티드 영역 퇴장이 이미 발생했으며, 네스티드 영역 진입이 중간 영역에 도달했음을 나타낸다. 따라서 예외가 원래 발생한 영역으로 돌아가려면 처리를 추가 자식 영역으로 되돌려야 한다. 이를 처리하기 위한 두 가지 대체 기술이 있다. 제1 대안에 있어서, 단계 420에서 스퓨리어스(spurious) 영역 퇴장 예외가 취해지고, 그래서 새로운 영역과 연관된 예외 상태 레지스터는 처리 요소에 의해 이 유형의 예외와 연관된 상태 코드로 설정될 수 있고, 그 후 처리는 예외 핸들러가 처리하도록 트리거하는 해당 유형의 예외와 연관된 예외 벡터로 분기될 수 있다. 예외 핸들러는 실제 처리를 수행할 필요는 없지만 주어진 자식 영역에서 알려지지 않은 유형의 예외가 발생했음을 간단히 판별할 수 있고 그래서 단계 422에서 또 다른 ERET 명령이 실행되도록 트리거할 수 있다. 중간 영역과 연관된 RID 및 ELR 레지스터는, 중간 영역이 이전에 추가 자식 영역에 진입되었을 때 이들 레지스터에 놓인 값을 여전히 가질 수 있고, 그래서 ERET 명령의 실행은 추가 자식 영역으로의 추가 영역 진입을 트리거할 수 있다. 방법은 단계 408로 되돌아가서 해당 추가 영역 진입에 대해 영역 검사가 성공적인지 여부를 검사할 수 있고, 그런 다음 방법은 네스티드 프로세스(nested process)의 이전 영역 진입과 유사한 방식으로 계속된다.
대안적으로, 중간 영역에서 실행된 또 다른 ERET 명령을 사용하여 네스티드 영역 진입을 처리하는 대신에, 단계 424에서 하드웨어는, 중간 영역 플래그가 현재 영역에 대해 설정되어 있음을 검출할 수 있고 그런 다음 중간 영역 내에서 임의의 명령을 실행할 필요 없이 자식 영역에 대한 추가 영역 진입을 트리거할 수 있으며, 그 다음 방법은 단계 408로 되돌아갈 수 있다.
도 29는 영역으로부터 나가거나 예외를 취하는 방법을 나타내는 흐름도를 도시한다. 단계 430에서, 예외 레벨 ELy(ELy ≥ ELx)를 타겟으로 하는 주어진 예외 레벨 ELx 내에서 예외가 발생한다. 타겟 예외 레벨 ELy는 예외가 처리되는 예외 레벨이다. 타겟 예외 레벨은 ELx와 같을 수 있으며, ELx보다 하나의 예외 레벨만 높거나, 몇 개의 예외 레벨이 더 높을 수 있다.
단계 432에서, RMU는, 타겟 예외 레벨 ELy이 현재 영역의 영역 디스크립터로부터 판독될 수 있는, 현재 영역의 경계 예외 레벨(BEL)보다 큰지 여부, 및 현재 영역이 서브 영역인지 여부를 판정한다(아래의 서브 영역에 대한 설명 참조 - 도 16에 도시된 영역 디스크립터의 유형 필드는, 영역이 서브 영역인지 여부를 지정 한다). 타겟 예외 레벨 ELy가 경계 예외 레벨보다 크지 않으면 이것은 현재 영역 내에서 예외를 처리할 수 있음을 나타내므로 현재 영역이 전체 영역인 경우 영역 퇴장을 트리거할 필요가 없다. 이 경우에, 단계 434에서 처리 요소는 (예를 들어, 현재 상태 레지스터를 업데이트함으로써) 현재 예외 레벨을 ELy로 전환하고, 또는 ELx = ELy이면 현재 예외 레벨은 동일하게 유지된다(어느 쪽이든, 현재 예외 레벨은 지금 ELy이다). 단계 436에서, 예외 레벨 ELx와 관련된 현재 처리 상태는 타겟 예외 레벨 ELy에 액세스 가능한 레지스터에 세이브된다. 예를 들어, 프로그램 카운터는 링크 레지스터 ELR_ELy에 세이브될 수 있고, 예외가 발생한 이전 예외 레벨 ELx는 SPSR_ELy에서의 PSTATE 값으로 표시될 수 있다. 또한, SPSR_ELy 레지스터에서의 영역 플래그 R은 0으로 설정되어 동일한 영역 내에서 예외가 발생했음을 나타내므로, 다음의 예외 리턴은 영역 진입을 트리거할 필요가 없다. 발생한 예외 유형에 대한 정보는 예외 상태 레지스터 ESR_ELy에 세이브될 수도 있다. 단계 438에서, 처리 요소는 지정된 예외 유형과 관련된 예외 벡터로 분기된 다음 예외를 처리하기 위해 처리가 계속된다. 결국, 예외 처리가 완료되면, ERET 명령이 실행되어 도 28에 대해 위에서 설명한 대로 이전 처리로 돌아간다.
반면에, 단계 432에서 타겟 예외 레벨 ELy가 현재 영역의 BEL보다 크면, 또는 현재 영역이 (예외가 서브 영역의 부모 영역으로의 퇴장을 트리거하는) 서브 영역이면, 예외를 처리하기 위해서 영역 퇴장이 필요하다. 단계 440에서 예외가 자발적 영역 퇴장에 대응하는지 여부가 결정된다. 사용자가 처리 장치의 버튼을 누르거나, 일부 결함이 발생하는 등, 예기치 않은 이벤트에 의해 일부 유형의 예외가 트리거될 수도 있다. 그러나, 영역이 자발적으로 처리를 포기하고 부모 영역으로 돌아갈 수도 있다. 예를 들어, 자식 영역이 일부 처리 루틴의 끝에 도달했거나, 더 높은 예외 레벨에서 일부 기능을 호출해야 할 수도 있다. 자식 영역이 의도적으로 부모 영역으로 퇴장한 후, 자식 영역이 부모 영역과 데이터를 공유하도록 허용할 때, 부모 영역으로부터 액세스하기 위해서 자식 영역의 일부 아키텍처 상태를 유지하는 것이 유용할 수 있기 때문에, 비자발적 영역 퇴장과 비교하여 더 적은 상태가 마스킹되고 스크러빙된다. 예를 들어, 다른 제어 레지스터는 여전히 마스킹 및 스크러빙될 수 있지만, 범용 레지스터는 마스킹 및 스크러빙되지 않을 수도 있다. 이로 인해 레지스터로부터 직접 상태가 액세스될 수 있으므로 데이터를 글로벌 가시성 메모리 영역에 저장할 필요가 없어, 성능이 향상된다. 즉, 자발적 영역 퇴장의 경우, 자식 영역이 영역 퇴장을 제어하고 있으므로 자식 영역이 부모 영역에서 액세스할 수 없어야 하는 가시적 아키텍처 상태를 이미 덮어쓰고, 부모 영역과 공유하고자 하는 상태를 레지스터에 남겨둔 것으로 가정할 수 있다. 자발적 영역 퇴장은 예를 들어 마스킹 또는 스크러빙이 수행되지 않는 특정 유형의 예외에 대응하는 예외 트리거링 명령의 미리 결정된 변형에 의해 트리거될 수 있다.
영역 퇴장이 자발적인 영역 퇴장이 아닌 경우, 단계 442에서 선택된 아키텍처 상태의 서브세트의 마스킹이 수행된다. 마스킹은 숨겨질 아키텍처 상태를 부모 영역에 액세스할 수 없도록 한다. 그러나, 부모 영역은 여전히 해당 아키텍처 상태를 저장하는 레지스터에 대한 액세스를 시도할 수 있으므로, 스크러빙된 아키텍처 레지스터에 대한 다음 액세스가 해당 아키텍처 레지스터와 연관된 물리적 레지스터에 어떤 값이 실제로 저장되는지에 관계없이 미리 결정된 값을 리턴하도록 하는 스크러빙 조작도 수행될 수 있다. 즉, 아키텍처 상태의 마스킹된 서브세트의 일부를 저장하는 주어진 아키텍처 레지스터에 대해 레지스터 스크러빙 동작이 수행될 때, 이것은 주어진 아키텍처 레지스터에 대한 다음 판독 액세스가 영역 전환과 다음 판독 액세스 사이의 해당 아키텍처 레지스터에 대한 어떤 중재적인 기록 액세스도 없이 처리 회로에 의해 수행되면 소정의 값(예를 들어, 0)을 리턴할 것을 보장한다. 레지스터 스크러빙 동작은 상이한 방식으로 수행될 수 있다. 예를 들어, 주어진 아키텍처 레지스터에 대응하는 물리적 레지스터는 소정의 값으로 설정될 수 있다(예를 들어, 이 0의 값은 실제로 물리적 레지스터에 기록될 수 있다). 대안적으로, 레지스터 스크러빙은, 주어진 아키텍처 레지스터가 제1 물리적 레지스터에서 제2 물리적 레지스터로 리매핑되도록 레지스터 리네이밍(renaming)에 의해 수행될 수 있다. 또 다른 접근방식은 주어진 아키텍처 레지스터에 대한 판독 액세스가 소정의 값을 리턴해야 함을 나타내기 위해 주어진 아키텍처 레지스터에 매핑된 물리적 레지스터 또는 주어진 아키텍처 레지스터와 관련된 상태 값을 설정하는 것일 수 있다. 이들 마지막 두 가지 접근방식을 사용하면, 새로운 영역으로부터 액세스할 수 없는 경우에도 처리 요소의 물리적 레지스터 파일 내에 마스킹된 아키텍처 상태를 유지할 수 있으며, 해당 상태에 대한 액세스는 소정의 값을 리턴할 것이다. 이것은 아래에 설명된 대로 느린 상태 세이빙을 지원하는 데 유용하다. 마스킹 및 스크러빙 동작이 수행되면, 단계 444에서, 처리 요소는 아키텍처 상태의 마스킹된 서브세트를 예외가 발생한 현재 영역과 연관된 REC 메모리 영역에 세이빙하는 것을 트리거한다. 이 세이빙은 즉시 수행될 수 있거나, 느리게 수행될 수 있으며, 부모 영역에서의 다음 처리와 중첩될 수 있다. 어떤 접근방식이 취해지는지는 아키텍처의 특정 구현에 따라 달라질 수 있으므로, 아키텍처의 필수 기능은 아니다. 그러나, 느린 상태 세이빙은 성능을 향상시킬 수 있다.
영역 퇴장이 자발적인 영역 퇴장인 경우, 자발적 영역 퇴장을 위해 마스킹/스크러빙될 상태의 적어도 일부가 자발적 영역 퇴장을 위해 마스킹/스크럽될 필요가 없다는 점을 제외하고, 단계 443에서 감소된 아키텍처 상태의 서브세트는 단계 442에서와 동일한 방식으로 마스킹 및 스크러빙된다. 예를 들어, 감소된 아키텍처 상태의 서브세트는 범용 레지스터를 제외할 수 있다. 단계 443 다음에, 본 방법은 비자발적 영역 퇴장을 위해 상기 설명한 바와 같이 단계 444로 계속된다.
영역 퇴장이 자발적인지 비자발적인지에 관계없이, 단계 446에서 처리 요소는 부모 영역으로 전환된다. 자식 영역 예외 레벨과 연관되고 부모 영역 예외 레벨에 의해 제어되는 RID_ELx 및 ELR_ELx 레지스터는 여전히 이전에 퇴장된 자식 영역의 RID 및 REC 포인터로 설정될 것이기 때문에(이들은 처음에 자식 영역에 진입하기 위해서 ERET 명령이 실행되기 전에 설정되었기 때문에). 이 상태를 조정할 필요가 없으므로 다음 ERET 명령은 이전과 동일한 자식 영역으로 돌아간다. 부모 영역이 마지막으로 퇴장된 자식 영역과 상이한 자식 영역으로 전환하려는 경우 이들 레지스터만 업데이트하면 된다. 유사하게, 부모 영역의 SPSR에서 영역 플래그 R은 여전히 이전 영역 진입 후에 1로 설정될 수 있으므로, 부모 영역에서 실행된 명령에 의해 R 플래그가 0으로 클리어(cleared)되지 않는 한, ERET 명령이 이후에 새로운 영역으로의 진입으로서 처리되도록 이 값을 유지할 수 있다.
단계 448에서, RMU는 타겟 예외 레벨 ELy이 처리가 전환된 새로운 부모 영역의 BEL보다 큰지 여부를 판정한다. 그렇지 않다면, 이것은 예외가 부모 영역에서 취해질 수 있음을 나타내고, 단계 450에서 처리 요소(8)는 발생한 예외의 유형을 처리하기에 적합한 대응하는 예외 핸들러로 분기한다. 타겟 예외 레벨이 부모 영역의 BEL보다 높은 경우, 추가 조상 영역으로 분기하기 위해 네스티드 영역 퇴장이 필요하므로, 단계 452에서 부모 영역과 연관된 중간 영역 플래그가 SPSR에서 1로 설정되고, 이어서 그 방법은 단계 442로 되돌아가 해당 영역과 관련된 아키텍처 상태의 마스킹 및 스크러빙을 트리거한다(이번에 영역 퇴장은 부모 영역의 제어 외부에서 트리거되었기 때문에 자발적 영역 퇴장이 아니다). 그런 다음 이 방법은 현재 영역과 연관된 적절한 상태를 마스킹하거나 스크러빙하기 위해 다시 순환한 다음 해당 영역의 부모 영역으로 전환한다. 네스티드 영역 퇴장은 결국 예외를 처리할 수 있는 영역에 도달할 때까지 여러 번 반복될 수 있다.
단계 412, 442, 444에서, 영역으로부터의 퇴장 시에 마스킹, 스크러빙 및 세이빙되고, 영역으로의 진입 시에 복원되는, 아키텍처 상태의 서브세트는 퇴장/진입된 영역의 경계 예외 레벨에 의존할 수 있다. 비네스티드(non-nested) 영역 퇴장 및 진입의 경우, 선택된 서브세트는 예를 들어 도 27에 도시한 대로, 예외가 발생한 예외 레벨에 액세스할 수 있는 아키텍처 상태의 서브세트를 포함할 수 있다. 따라서, 각 예외 레벨은 레지스터의 그룹과 연관되며, 주어진 영역의 경계 예외 레벨보다 더 특권이 있는 예외 레벨에서 예외 핸들러가 처리해야 하는 주어진 영역의 처리 중에 발생하는 영역 퇴장 예외 조건에 응답하여, 레지스터의 서브세트는 주어진 영역의 경계 예외 레벨에 따라 선택될 수 있고, 그 예외 레벨에서 소프트웨어 프로세스를 처리할 때 처리 회로에 액세스 가능한 이들 레지스터를 포함할 수 있다. EL1 이상에서 예외가 발생하면 이것은 비네스티드 영역 퇴장에 대한 더 낮은 예외 레벨뿐만 아니라 해당 예외 레벨에 액세스할 수 있는 모든 레지스터를 포함할 수 있다. 유사하게, 영역으로 복귀하면, 대응하는 아키텍처 상태의 서브세트가 복원될 수 있다.
그러나, 네스티드 영역 퇴장의 경우, 중간 영역에 대해서 중간 영역의 경계 예외 레벨보다 더 낮은 예외 레벨에서 액세스 가능한 모든 레지스터는, 중간 영역이 자식 영역으로의 진입을 트리거했기 때문에 더 낮은 예외 레벨에서 자식 영역에 의해 수정된 것으로 가정할 수 있다. 따라서, 네스티드 영역 퇴장 중에 중간 영역과 연관된 REC에 더 낮은 예외 레벨에서 액세스 가능한 이러한 레지스터를 세이브할 필요가 없다(이전에 자식 영역에 진입한 이후 중간 영역에서 어떤 추가 실행도 수행되지 않음). 반대로, 네스티드 영역 진입 중에는 이들 레지스터가 이후 더 낮은 예외 레벨에서 영역에 의해 복원될 것이므로, 중간 영역을 통과하는 동안 더 낮은 레벨에서 액세스할 수 있는 이들 레지스터를 복원할 필요가 없다. 대신 중간 영역 상태 세이빙 및 복원에는 중간 영역의 경계 예외 레벨에 액세스할 수 있지만, 더 낮은 예외 레벨에서는 액세스할 수 없는 레지스터가 단순히 포함될 수 있다. 예를 들어, EL1에서의 중간 영역에서, 네스티드 영역 퇴장/진입 시에 세이브/복원된 상태는 도 27에서의 서브세트 352를 포함할 수도 있지만 EL0에서 액세스 가능한 서브세트 350를 제외할 수도 있다. 중간 영역이 EL2에 있으면, 네스티드 영역 퇴장/진입 중에 세이브/복원된 상태의 서브세트는 EL2에서 액세스 가능한 서브세트 354를 포함할 수도 있지만 EL1에서 액세스 가능한 서브세트 352를 제외할 수도 있다. 이 접근방식을 사용하면, 중간 영역을 통과하는 데 필요한 상태 세이빙 및 복원의 양을 줄여서 성능을 향상시킬 수 있다.
따라서, 예외 조건이 예외가 발생한 주어진 영역의 부모 영역의 경계 예외 레벨보다 더 특권이 있는 타겟 예외 레벨에서 예외 핸들러에 의해 처리될 때, 타겟 예외 레벨 이상에 대응하는 경계 예외 레벨을 갖는 타겟 영역에 도달할 때까지 자식 영역에서 부모 영역까지 여러 개의 연속 영역 퇴장을 포함하는 네스티드 영역 퇴장이 트리거될 수 있다. 각각의 상태 마스킹 프로세스(및 상태 세이빙)는 각각의 연속 영역 퇴장에 대해 트리거될 수 있고, 각각의 상태 마스킹 프로세스는 경계 예외 레벨에 의거하여 선택된 레지스터의 대응하는 서브세트를 마스킹(및 세이빙)할 수 있다. 특권이 가장 적은 예외 레벨 이외의 경계 예외 레벨을 갖는 주어진 자식 영역으로부터의 영역 퇴장의 경우, 네스티드 영역 퇴장 중에 마스킹/세이빙된 레지스터의 대응하는 서브세트는 주어진 자식 영역의 경계 예외 레벨에서 액세스 가능한 적어도 하나의 레지스터를 포함할 수 있지만, 주어진 자식 영역의 경계 예외 레벨보다 특권이 더 적은 예외 레벨에서 처리 회로에 액세스할 수 있는 적어도 하나의 레지스터를 제외할 수 있다(권한이 적은 예외 레벨에서 영역을 퇴장할 때 이러한 레지스터가 이미 세이브되었다고 가정할 수 있다). 이것은 필요한 상태 마스킹 및 세이빙 동작의 양을 줄인다.
유사하게, 영역 진입(예외 리턴) 시에, 중간 영역 플래그는 진입된 영역이 중간 영역인지를 판정하는데 사용될 수 있다. 특권이 가장 적은 예외 레벨 이외의 경계 예외 레벨을 갖는 영역에 대한 중간 영역 상태 값이 (중간 영역을 나타내는) 소정의 값으로 설정되는 경우, 영역 진입 시에 복원될 레지스터의 서브세트는 중간 영역의 경계 예외 레벨에서 액세스 가능한 적어도 하나의 레지스터를 포함할 수 있지만, 특정 영역의 경계 예외 레벨보다 특권이 더 적은 예외 레벨에서 처리 회로에 액세스 가능한 적어도 하나의 레지스터를 배제할 수도 있다. 중간 상태 값이 소정의 값 이외의 값으로 설정되면, 진입되는 이 영역은 최종 영역이므로, 액세스되는 복원될 레지스터의 서브세트는 (더 낮은 레벨에서 어떤 레지스터도 배제하지 않고) 특정 영역의 경계 예외 레벨의 처리 회로에 액세스 가능한 모든 레지스터를 포함할 수 있다.
이러한 방식으로, 네스티드 영역 퇴장 및 진입 중에 상태 세이빙 및 복원 동작을 보다 효율적으로 수행할 수 있다.
도 30은 비네스티드 영역 진입 및 퇴장의 예를 도시한다. 이 예에서 부모 영역은 예외 레벨 EL1에서 작동하는 A이며 그것은 EL0의 BEL을 갖는 자식 영역 B에 진입하려고 한다. 분명히, 다른 예외 레벨에서 유사한 영역 진입 및 퇴장 절차를 수행할 수 있다. 단계 460에서, 부모 영역은 영역 식별자 레지스터 RID_EL1을 자식 영역 B의 로컬 영역 ID로 설정한다. 로컬 RID는 전술한 바와 같이 트리 인덱스(tree indices)를 연결함으로써 획득된 포맷을 갖는다. 단계 462에서, EL1에서의 부모 영역은 영역 B의 영역 실행 컨텍스트에 대한 포인터를 제공하는 어드레스로 링크 레지스터 ELR_EL1을 설정한다. 부모 영역은 원하는 자식 영역 B의 영역 디스크립터로부터 이 포인터를 취득한다. 단계 464에서, 부모 영역은 SPSR_EL1에서의 영역 플래그 R을 1로 설정한다. 단계 466에서, 부모 영역은 ERET 명령을 실행하는데, 이는 영역 플래그가 이 1로 설정되기 때문에 영역 진입을 트리거하는 것으로 해석된다. 도 28의 단계 408에 대해 상기 설명된 다양한 영역 검사가 수행되고, 그들이 성공적이면 영역 진입은 영역 B로 전환하기 위해 수행된다. 단계 468에서 링크 레지스터에 표시된 REC로부터 상태가 복원된다. 이 상태에는 새로운 영역이 실행되는 타겟 예외 레벨이 포함된다. REC에 액세스할 때 프로세서는 여전히 영역 A와 연관된 이전 예외 레벨에 있으므로 이것은, 영역 B로의 전환이 이루어졌고 결국 해당 영역(Realm)이 EL0으로부터 처리를 재개하더라도, 링크 레지스터 ELR_EL1이 REC 포인터를 얻기 위해 여전히 액세스 가능한 이유라는 점에 유의한다. 상태 복원은 영역 B의 정규 처리 470와 병행하여 즉시 수행될 수 있거나 또는 일정 기간에 걸쳐 느리게 수행될 수 있다.
자식 영역 B의 실행 중에 단계 472에서 예외가 발생할 때, 영역 B와 연관된 상태를 그것의 부모 영역으로부터 숨기도록 한 세트의 마스킹 동작이 수행된다. 이것은 단계 474에서 EL0과 연관된 적어도 하나의 아키텍처 상태의 서브세트의 마스킹 및 스크러빙을 포함한다(마스킹/스크러빙되는 아키텍처 상태의 서브세트는 퇴장이 자발적 영역 퇴장인지 비자발적 영역 퇴장인지에 의존할 수도 있다). 마스킹은 상태에 액세스할 수 없게 하고 스크러빙은 부모 영역으로부터 대응하는 레지스터에 대한 다음의 액세스가 소정의 값을 리턴하도록 트리거할 것이라는 것을 보장한다. 단계 476에서, 영역 B와 연관된 REC로의 상태 세이빙은 마스킹된 아키텍처 상태의 서브세트에 대해 수행된다. 이 경우, 자식 영역은 EL0의 BEL을 갖기 때문에, 마스킹된 상태의 서브세트는 EL0에서 액세스 가능한 적어도 서브세트(350)를 포함한다. 다시 말하지만, 상태 세이빙은 부모 영역에서 예외를 두고 진행중인 처리와 병행하여, 즉시 트리거되거나 느린 방식으로 수행될 수 있다. 단계 478에서, 영역 퇴장은 부모 영역 A로 전환하도록 트리거되고, 단계 480에서 예외의 처리는 부모 영역 내에서 수행된다. 자발적 영역 퇴장을 위해 도 30의 단계 474 및 476은 생략될 수 있다.
도 31은 네스티드 영역 진입 및 퇴장을 나타내는 유사한 예를 도시한다. 예외 레벨 EL2에서의 조부모 영역 A는 단계 500에서 ERET 명령을 실행하여, 이미 원하는 자식 영역의 REC를 가리키도록 링크 레지스터를 이미 설정했고, 영역 ID 레지스터 RID_EL2를 자식 영역의 로컬 RID로 설정한 다음 R 플래그를 SPSR_EL2에서 1로 설정했다. 이것은 단계 502에서 영역 B로의 영역 진입을 트리거하고, 또 이것은 즉시 또는 느리게 다시 수행될 수 있는 상태가 단계 504에서 영역 B의 REC로부터 복원되도록 트리거한다. 결국, 영역 B는 단계 506에서 추가 ERET 명령을 실행하여, 단계 508에서 추가 영역 진입을 트리거하기 위해, 다시 링크 레지스터, RID 레지스터 및 R 플래그를 설정했다. 단계 502 및 508에서의 영역 진입은 도 28에 도시된 것과 같이 수행될 수 있으므로 영역 검사와 같은 단계는 여전히 수행되지만, 간결성을 위해 도 31에는 도시되지 않는다. 영역 C로의 진입 후, 단계 510에서 영역 C의 아키텍처 상태가 그것의 REC로부터 복원되고 단계 512에서 영역 C 내에서 처리가 재개된다.
다음에, 단계 514에서는 예외가 발생한다. 예외는 예외 레벨 EL2를 목표로 한다. 예를 들어, 예외는 하이퍼바이저(가상화된 장치 또는 스테이지 2 어드레스 변환 결함과 관련된 이벤트 등)에 의해 처리되는 유형의 예외일 수 있다. 단계 516에서, 임의의 스크러빙 및 상태 세이빙을 포함하는 상태 마스킹 프로세스는, 도 30에 도시된 것과 유사한 방식으로 트리거되고, 예외가 발생한 영역 C의 부모 영역인 영역 B 로의 영역 퇴장은, 단계 518에서 수행된다.
단계 520에서, 처리 요소는 발생한 예외에 대한 타겟 예외 레벨이 영역 B의 경계 예외 레벨보다 높음을 검출하므로, 영역 B는 중간 영역이고 영역 B의 부모 영역으로의 추가 영역 퇴장이 필요하다. 따라서, 중간 영역 플래그는 단계 522에서 SPSR_EL1 내에서 설정되고 단계 524에서 레지스터의 서브세트의 상태 마스킹, 스크러빙 및 세이빙이 수행된다. 다시 말하자면, 영역 A로의 영역 퇴장 후에 프로세서가 액세스할 수 없는 몇몇 방식으로 레지스터의 프로세스에서 대응하는 상태를 유지할 수 있는 경우 이 프로세스의 세이빙 부분이 지연될 수 있다. 이 중간 영역에 대해 세이빙되는 레지스터의 서브세트는 EL1에서 액세스 가능한 레지스터(352)를 포함하지만 EL0에서 액세스 가능한 레지스터(350)는 제외한다. 단계 508에서 영역 B가 이전 영역 진입 이후에 이들 레지스터를 변경하기 위한 어떠한 명령도 실행하지 않았기 때문에 레지스터(350)의 서브세트를 세이빙할 필요가 없고, 이들 레지스터는 영역 C에 의해 이미 마스킹/스크러빙/세이빙되었다. 따라서, 이것에 의해 중간 영역에 필요한 부가적인 마스킹 및 상태 세이빙의 양이 줄어든다.
그리고, 추가 영역 퇴장(526)은 중간 영역의 부모인 영역 A로 트리거된다. 이 경우, 영역 A는 EL2에서 동작할 수 있기 때문에 예외를 처리할 수 있으므로, 단계 528에서 예외는 예외 레벨 EL2에서 트랩(trapped)되고 처리된다. 예외는 하이퍼바이저에 의해 처리되며 예외가 처리되었으면 ERET 명령(530)이 실행되어 이전 처리로 돌아간다. 이 시점에서, ELR_EL2 및 RID_EL2의 값과 SPSR_EL2에서의 R 플래그는 여전히 단계 500에서 ERET 명령이 실행되기 전과 동일하다. 따라서, 이들 값을 다시 설정할 필요는 없다. ERET 명령(530)은 예외 레벨 EL1에서 이전 자식 영역 B로의 영역 진입을 다시 트리거한다. 예외 핸들러 코드는 예외 처리 후 처리를 더 낮은 예외 레벨로 돌아가는 레거시 코드(legacy code)로 이러한 ERET 명령을 이미 가지고 있을 수 있다. 따라서, 위에서 설명한 대로 영역 진입을 트리거하기 위해 ERET 명령을 재사용하면 영역 보호 기능에 대한 인식 없이 작성된 기존 예외 핸들러 코드를 계속 사용할 수 있어, 플랫폼 개발 비용이 절감된다.
EL1에서 영역 B로 리턴하면, 처리 요소는 중간 플래그가 SPSR_EL1에서 설정되어 있음을 검출한다(단계 532). 따라서, 단계 534에서, 영역 B의 REC로부터 복원 되는 상태는 EL1에 액세스 가능한 상태(등록된 352)이지만 EL0에서 액세스 가능한 레지스터 350을 배제한다. 프로세서 구현이 트리거된 네스티드 영역 진입의 소프트웨어 지원 방법을 사용하면, 단계 536에서, 처리 요소는 중간 영역에 대한 예외 상태 레지스터 ESR_EL1를 스퓨리어스 영역 퇴장(spurious realm exit)에 대응하는 특정 값으로 설정한다. 처리 요소는 프로그램 카운터를, 이 소정의 유형의 스퓨리어스 영역 퇴장 예외를 처리하기 위한 예외 핸들러를 나타내는 예외 벡터로 설정한 다음, 단계 538에서 예외 처리가 실행된다. 예외 핸들러는 실제 기능을 수행할 필요는 없지만, 단순히 ERET 명령을 트리거하거나 몇몇 다른 동작도 제공할 수 있다. 결국 ERET 명령은 단계 542에서 실행되는데, 이 단계는 ELR_EL1, RID_EL1 및 SPSR_EL1 레지스터가 단계 506에서 ERET 명령이 실행되기 이전과 같이 여전히 설정 되었기 때문에, 원래 예외가 발생하기 전에 실행되었던 이전 자식 영역으로 영역 진입(544)을 다시 트리거한다. 이 시점에서 상태는 단계 546에서 영역 C의 REC로부터 복원되고, 상기의 단계 510 및 512에서와 동일한 방식으로 단계 548에서 처리가 계속된다.
대안적으로, 하드웨어 지원 네스티드 영역 진입(hardware assisted nested realm entry)에 대해서는, 단계 536 내지 542가 생략될 수 있고 대신 단계 534에서 필요한 상태의 서브세트를 복원한 후, 처리 요소의 하드웨어는 영역 C에 추가 영역 진입이 필요하다는 것을 중간 영역 플래그로부터 검출할 수 있으므로 단계 550에서 하드웨어는 추가의 ERET 명령(542)이 실행될 필요없이 다음 영역 진입을 직접 연결(chain)할 수 있다. 이 경우 중간 영역 내에서 명령을 실행할 필요가 없다.
이러한 네스티드 영역 진입 및 퇴장 절차를 사용하면, EL2에서의 영역이 EL0과 연관된 영역 값 또는 REC 포인터를 처리할 필요가 없다. 이것에 의해 현재 영역의 직계 자식의 파라미터만 검사하면 되므로, 영역에 진입할 때보다 더 클린(clean)하고 더 간단한 검사가 가능하다. 이는 아키텍처 및 하드웨어 구현을 크게 단순화한다
도 32 및 33은 각각 영역 퇴장 및 영역 진입 시 REC에 대한 느린 상태 세이빙 및 상태 복원의 예를 도시한다. 일반적으로, 영역을 부모 영역으로 퇴장하면 자식 영역과 연관된 상태를 마스킹하여 그것을 부모 영역으로부터 숨기고, 스크러빙을 수행하여 부모 영역이 스크러빙된 상태에 대응하는 아키텍처 레지스터에 대한 액세스를 시도할 경우 몇몇 소정의 값을 볼 수 있도록 하는 것이 바람직할 수 있다. 이들 동작은 비교적 빠르게 수행될 수 있다. 그러나, 자식 영역 상태를 무기한 유지하기 위해 프로세싱 처리 회로의 물리적 레지스터 파일에 공간이 충분하지 않으면, 그 데이터의 일부를 REC에 세이빙하는 것이 바람직할 수 있다. 그러나, 이것은 시간이 오래 걸리고, 부모 영역에서 처리하는 데 사용될 수 있는 메모리 대역폭을 차지하므로, 부모 영역에서 처리가 지연될 수 있다. 마찬가지로, 영역에 진입할 때 메모리로부터 레지스터로 상태를 복원하는 대응하는 동작에는 시간이 걸릴 수 있다. 따라서, 성능상의 이유로, REC에 대한/로부터의 처리 요소 상태의 비동기 세이빙/복원을 지원하는 것이 바람직할 수 있다. 주어진 프로세서 구현이 실제로 이 느린 상태 세이빙을 수행하는지 여부는 특정 프로세서에 대한 구현 선택이다. 예를 들어, 고성능을 목표로 하지 않는 일부 프로세서는, 어떤 상태가 이미 세이빙되었고 어떤 상태가 세이빙되지 않았는지 관리하는 복잡성을 줄이기 위해, 상태 세이빙 동작을 즉시 트리거하는 것이 더 간단하다는 것을 알 수 있다. 그러나, 원한다면 성능 개선을 가능하게 하기 위해, 이러한 비동기식, 느린 상태 세이빙, 접근법을 지원하는 아키텍처 기능을 제공하는 것이 바람직할 수 있다.
그러므로, 소스 영역으로부터 소스 영역보다 특권이 더 많은 예외 레벨에서 처리되는 타겟 영역으로의 영역 전환에 응답하여, 처리 회로는 소스 영역과 관련된 아키텍처 상태 데이터의 서브세트가 타겟 영역에 액세스할 수 없게 하는 상태 마스킹을 수행할 수 있다. 이 시점에서 마스킹된 상태의 서브세트가 메모리에 세이빙될 수는 있지만, 이것은 필수적인 것은 아니다. 그러나, 이 아키텍처는 영역 전환 후에 사용할 수 있는 플러시 커맨드를 제공한다. 플러시 커맨드가 실행될 때, 처리 회로는, 아키텍처 상태 데이터의 마스킹된 서브세트가 적어도 하나의 REC 메모리 영역에 세이빙되었으면, 소스 영역이 소유한 적어도 하나의 REC 메모리 영역에는 아직 세이빙되지 않았음을 보장한다. 그러한 플러시 커맨드를 제공함으로써, 아키텍처 상태 데이터의 서브세트가 확실히 세이빙되도록 해야 하는 시점에서. 이것이 강제로 진행될 수 있음을 보장할 수 있으며, 이것은, 플러시 커맨드가 아직 실행되지 않은 경우에 아키텍처 상태 데이터의 서브세트가 실제로 메모리에 세이빙될 때 아키텍처의 특정 마이크로 아키텍처 구현이 정확히 변할 수 있는 자유를 제공한다.
상태 마스킹에 더하여, 영역 전환 시에, 처리 회로는 또한 상기 설명한 바와 같이 주어진 아키텍처 레지스터에 대한 임의의 다음 판독 액세스가 소정의 값을 리턴하도록(중재 기록 액세스없이 수행되는 경우) 하는 레지스터 스크러빙 동작을 수행할 수 있다. 이러한 스크러빙은 주어진 아키텍처 레지스터에 대응하는 물리적 레지스터에 소정의 값을 실제로 기록하거나, 또는 레지스터 명을 변경함으로써, 또는 판독 액세스가 대응하는 물리적 레지스터의 실제 내용 대신에 소정의 값을 리턴해야 한다는 것을 나타내기 위해 주어진 아키텍처 레지스터와 관련된 다른 제어 상태 값을 설정함으로써 수행될 수 있다. 영역 전환에 응답하여 수행될 상태 세이빙이 비동기적으로 수행되면, 처리 회로는 영역 전환에 응답하여 액세스할 수 없게 된 아키텍처 상태 데이터의 서브세트의 적어도 일부가 여전히 처리 회로의 레지스터에 저장될 때 타겟 영역의 처리를 시작할 수 있다. 예를 들어, 프로세서는 명령 세트 아키텍처에서 아키텍처 레지스터로서 제공된 레지스터의 수보다 더 큰 물리 레지스터 파일을 가질 수 있으므로, 일부 예비 물리 레지스터를 사용하여 타겟 영역이 이미 처리를 시작한 후 일정 기간 동안 이전에 마스크된 상태를 유지할 수 있다. 이것은 아키텍처 상태 데이터의 서브세트의 주어진 아이템이 여전히 레지스터에 저장될 때 처리가 소스 영역으로 리턴하면, 처리 회로는 REC로부터 데이터를 복원할 필요 없이, 레지스터 파일로부터 아키텍처 상태의 주어진 아이템에 대한 액세스를 간단히 복원할 수 있기 때문에 유리하다. 일부 유형의 예외는 비교적 짧은 예외 핸들러만 실행해야 할 수도 있고, 이 경우 일부 마스크된 상태는 예외로부터 리턴할 때 레지스터 파일에 여전히 상주할 가능성이 있다. 이러한 "피상적인(shallow)" 예외 진입/리턴 이벤트는 느린 상태 세이빙을 사용함으로써 이익을 얻을 수 있다.
느린 상태 세이빙이 사용되는 경우, 예외 이후에 타겟 영역의 처리가 시작되면, 처리 회로는 플러시 커맨드 이외의 소정의 이벤트의 발생에 응답하여 REC 영역의 주어진 항목의 세이빙을 트리거할 수 있다. 이 시점에서 처리가 이미 부모 영역으로 전환되었지만(일반적으로 이전 자식 영역과 연관된 REC에 액세스할 수 없음), 이들 동작은 소프트웨어가 아닌 마이크로 아키텍처 구현에 의해 하드웨어에서 트리거되기 때문에, 일반적인 소프트웨어 트리거 메모리 액세스에 필요한 동일한 소유권 검사를 받지 않을 수도 있다(효과적으로 이들 REC 세이빙 동작은 퇴장하기 전에 자식 영역에 의해 이미 승인되었을 것이다).
다음을 포함하여 아키텍처 상태 데이터의 서브세트의 특정 아이템이 REC에 세이빙되도록 트리거하기 위해 많은 상이한 유형의 소정의 이벤트가 사용될 수 있다:
· 아키텍처 상태 데이터의 서브세트의 주어진 아이템에 대응하는 아키텍처 레지스터에 대한 레지스터 액세스. 이 접근방법은 레지스터 리네이밍을 지원하지 않는 덜 복잡한 프로세서에 유용할 수 있다. 이 경우 각 아키텍처 레지스터는 하나의 고정된 물리적 레지스터에 매핑될 수 있으므로, 부모 영역과 연관된 코드가 처음으로 주어진 아키텍처 레지스터에 액세스하려고 할 때 이것은 자식 영역이 사용하는 해당 레지스터의 오래된 값을 메모리에 저장해야 할 수 있다.
· 아키텍처 상태 데이터의 서브세트의 주어진 아이템을 저장하는 물리적 레지스터를 다시 매핑한다. 레지스터 리네이밍을 지원하는 시스템에서, 아키텍처 상태는 레지스터 파일에 더 오래 유지될 수 있지만, 결국 상이한 값을 저장하기 위해 대응하는 물리적 레지스터를 다시 매핑해야 할 수 있으며 이 시점에서 자식 영역의 대응하는 아키텍처 상태를 REC에 세이빙할 수 있다.
· 이용 가능한 많은 물리적 레지스터가 소정의 임계값(threshold) 이하가 된다. 이 경우, 주어진 물리적 레지스터의 실제 리매핑을 기다리지 않고, (상이한 아키텍처 레지스터에 재할당할 수 있는) 프리한(fee) 물리적 레지스터의 수가 낮아지면 상태 세이빙이 선제적으로 수행되기 시작할 수 있다.
· 주어진 주기 횟수 또는 주어진 기간의 경과. 따라서 특정 처리 이벤트가 세이빙을 트리거 할 필요는 없지만, 대신 느린 상태 세이빙은 단순히 자식 영역의 컨텍스트의 세이빙을 일정 기간 동안 순차적으로 REC에 확산시켜서, 부모 영역에서의 처리에 의해 트리거되는 다른 메모리 액세스에 대해 이용 가능한 메모리 대역폭에 대한 영향을 줄일 수 있다.
· 감소된 프로세서 워크로드(workload)를 나타내는 이벤트, 예를 들면 유휴 프로세서 시간 또는 현재 상태 세이빙을 수행하는 것이 부모 영역의 처리의 전체 성능에 영향을 덜 미친다는 것을 나타내는 일부 다른 이벤트. 이 시점에서, 아키텍처 상태 데이터의 서브세트의 적어도 일부의 세이빙이 트리거될 수 있다.
영역 전환 후에, 처리 회로가 영역이 이전에 부모 영역으로 전환된 소스 영역 이외의 추가 영역에 진입하려고 시도하면, 처리 회로는 이전 영역 퇴장의 타겟 영역과 동일한 예외 레벨 또는 특권이 더 적은 예외 레벨에서 추가 영역이 처리될 때 영역 진입 요청을 거부할 수 있고 영역 전환과 영역 진입 요청 사이에서 어떤 플러시 커맨드도 수신되지 않았다. 또는, 플러시 커맨드가 실행되었는지 여부에 관계없이 영역 진입 요청을 수락할 수 있지만, 플러시 커맨드가 실행되지 않았으면 초기 자식 영역 REC 상태가 손상(corrupted)되어 REC를 다시 사용할 수 없어, 자식 영역으로의 유효한 진입을 막을 수 있다. 어느 쪽이든, 부모 영역이 이전에 실행된 것과 상이한 자식 영역으로 처리를 성공적으로 보낼 수 있기 전에 플러시 커맨드가 필요하다. 이렇게 하면 하드웨어가 느린 상태 세이빙 접근방법을 사용하도록 선택하더라도, 이전 자식 영역과 관련된 모든 필요한 상태가 상이한 자식 영역이 진입되는 시점에서 메모리에 세이빙되도록 커밋(committed)되었을 것이다. 이렇게 하면 메모리에 저장할 여러 개의 세트의 자식 영역 데이터를 백업할 필요가 없어 아키텍처가 단순해진다.
플러시 커맨드는 마스킹된 레지스터로부터의 상태가 REC 메모리 영역에 저장되도록 커밋되는 것을 보장하기만 하면 된다는 점에 유의한다. 플러시 커맨드에 의해 트리거된 저장 동작은 처리 요소(8)의 로드/저장 큐(queue) 내에, 또는 인터커넥트(14), 메모리 제어기 또는 메모리(16) 자체 내의 큐 내에 큐잉될 수 있으므로, 메모리 셀에 대한 실제 기록은 나중에까지 발생하지 않을 수도 있지만, 처리 요소의 관점에서 보면 마스킹된 상태의 메모리 기록이 확실히 발생할 것으로 알려져 있다.
플러시 커맨드는 처리 회로의 명령 디코더에 의해 지원되는 원래 고유의 명령일 수 있다. 대안적으로, 플러시 커맨드는 명령 디코더에 의해 디코딩된 명령들의 처리를 수행하기 위해 미리 결정된 이벤트에 의해 트리거되는 커맨드일 수 있다. 예를 들어, 플러시 커맨드는 일부 다른 유형의 명령에 의해 자동으로 트리거될 수 있으며, 이는 이전 자식 영역과 연관된 모든 필요한 아키텍처 상태의 서브세트에 대해 상태 세이빙 동작이 메모리로 트리거되었음을 보장해야 함을 의미한다.
위에서 논의된 바와 같이, 영역 전환 중에 세이브되는 아키텍처 상태의 특정 서브세트는 소스 영역과 연관된 경계 예외 레벨에 의존할 수 있다(또한 소스 영역이 네스티드 영역 퇴장에서의 중간 영역인지 여부에 의존할 수 있다). 영역 전환이 미리 결정된 유형의 영역 전환(예를 들어, 소스 영역에서 자발적 영역 전환 명령의 실행에 의해 트리거되는 영역 전환)이면 상태 마스킹 및 세이빙 동작이 억제될 수 있다.
따라서, 도 32는 느린 상태 세이빙 및 복원의 예를 도시한다. 단계 560에서, 영역 퇴장은 상술한 바와 동일한 방식으로 처리된다. 영역 B에 대해 숨겨질 아키텍처 상태의 서브세트가 영역 퇴장 시에 마스킹 및 스크러빙되지만, REC에 대한 상태 세이빙이 지연될 수 있으므로, 느린 상태 세이빙 프로세스(562)는 부모 영역 A와 관련된 프로세스(564)의 배경에서 수행될 수 있다. 느린 상태 세이빙이 수행되는 특정 방식은 특정 처리 설계에 대한 구현 선택일 수 있다. 단계 566에서, 부모 영역은 (위에서 논의된 바와 같이 ERET 명령을 사용하여) 이전 자식 영역으로의 영역 진입을 다시 트리거한다. 이 경우, 영역 진입은 이전에 퇴장된 동일한 지식으로 돌아가므로 영역 진입을 위한 플러시 커맨드가 유효할 필요는 없다. 느린 상태 세이빙 동작의 일부 568이 여전히 수행되어야 하는 경우, 이것은 영역 진입 후에 취소될 수 있고, 대신 영역 B에 대한 대응하는 상태 값은 처리 요소의 물리적 레지스터 중 일부로부터 간단히 복원될 수 있다. 따라서, 비교적 피상적인(shallow) 예외 퇴장 및 리턴의 경우, 느린 상태 세이빙 접근방법을 사용하면 성능 향상에 필요한 메모리 액세스의 볼륨을 줄이는 데 도움이 된다.
도 33은 영역 퇴장(560)이 도 32에서와 같은 방식으로 영역 B1에서 그것의 부모 영역 A로 수행되는 또 다른 예를 도시한다. 그러나, 이번에는, 영역 A가 동일한 영역으로 되돌아가기보다는 처리를 상이한 자식 영역 B2로 전환하기를 원한다. 따라서, 부모 영역은 단계 570에서 플러시 커맨드를 실행하고 이 커맨드는 처리 요소를 트리거하여 느린 상태 세이빙 프로세스(562)의 나머지 부분이 완료되도록 보장한다(즉, 여전히 처리 요소의 레지스터 파일에 상주하는 마스크된 서브세트의 모든 나머지 아키텍처 상태에 대해 저장 동작이 발행된다). 단계 572에서, 부모 영역은 영역 식별자 레지스터 및 링크 레지스터를 설정하여 타겟 영역 B2에 대한 영역 ID 및 REC 포인터를 나타낸 후에, 단계 574에서 영역 진입(566)을 영역 B2로 트리거하는 ERET 명령을 실행한다. ERET 명령을 실행하기 전에 플러시 커맨드가 실행되지 않았으면, 영역 진입이 실패했을 것이다. 단계 578에서 상태 복원은 영역 B2의 REC 메모리 영역으로부터 수행된다(다시 이것은 느리게 수행될 수 있다).
따라서, 플러시 커맨드를 사용하면 빠른 예외 퇴장 및 프로세서 상태에서 이전에 퇴장된 영역의 REC로의 트릭클링(tricling)이 가능하며 또한 상태가 처리 요소의 레지스터 내에 홀드되고 저장되지 않으며 REC로부터 재로드되는 피상적인 예외 퇴장 및 리턴을 허용한다.
도 34는 부모 영역에 의해 초기화될 수 있는 서브 영역의 개념을 도시한. 도 34에 도시된 바와 같이, 특정 예외 레벨에서 동작하는 주어진 부모 영역(600)은 그 부모와 동일한 예외 레벨에서 동작하는 서브 영역(602)을 초기화할 수 있다. 전체 영역(600)은 주어진 소프트웨어 프로세스(또는 둘 이상의 프로세스의 집합)에 대응하지만, 서브 영역은 주어진 소프트웨어 프로세스 내의 미리 결정된 어드레스 범위에 대응한다. 전체 영역이 서브 영역의 부모이므로, 위에서 설명한 바와 같이 서브 영역은 부모 전체 영역이 소유한 메모리 영역에 저장된 데이터에 액세스할 권리를 가질 수 있지만, 서브 영역은 서브 영역(602)에 의해 소유된 메모리 영역에 저장된 데이터에 액세스하는 것으로부터 그 부모 전체 영역을 제외할 권리가 있을 수도 있다. 이것은 주어진 소프트웨어 프로세스의 특정 부분을 소프트웨어 프로세스의 다른 부분보다 더 안전하게 만드는 데 유용하다. 예를 들어, 동일한 애플리케이션 또는 운영 체제의 다른 부분이 그 민감한 정보에 액세스하는 것을 방지하기 위해, 모바일 뱅킹 애플리케이션에서 비밀번호를 검사하거나 다른 민감한 정보를 처리하기위한 코드의 일부가 서브-영역에 할당될 수 있다.
서브 영역은 일반적으로 전체 영역과 동일한 방식으로 처리될 수 있으며, 아래 설명과 약간의 차이가 있다. 서브 영역으로/으로부터의 진입 및 퇴장은 위에서 설명한 것과 같은 방식으로 예외 리턴 명령과 예외 이벤트를 사용하여 처리될 수 있다. 따라서, 서브 영역은 동일한 부모의 완전한 자식 영역과 동일한 방식으로 구성된 자식 영역 ID를 가질 수 있으며, 상술한 바와 같이 영역 디스크립터 트리 내에 영역 디스크립터를 제공할 수 있다. ERET 명령을 실행하기 전에 RID 레지스터에 적절한 자식 서브 영역 RID를 배치한 ERET 명령을 실행함으로써 서브 영역에 대한 진입을 트리거할 수 있다. 따라서, (제2 변형의) 동일한 유형의 ERET 명령을 사용하여 전체 영역 또는 서브 영역으로의 진입을 트리거할 수 있다.
서브 영역이 전체 영역과 상이할 수 있는 한 가지 방법은 서브 영역이 그 자신의 자식 영역을 초기화하도록 허용되지 않을 수도 있다는 것이다. 따라서 현재 영역이 서브 영역이면 새로운 영역을 초기화하기 위한 영역 초기화 커맨드가 거부될 수도 있다. RMU는 현재 영역의 영역 디스크립터에서 영역 유형 값을 이용하여 현재 영역이 전체 영역인지 서브 영역인지를 판정할 수 있다. 현재 서브 영역에 있을 때 영역 초기화를 비활성화하면, 추가 영역을 초기화할 때 서브 영역이 사용할 부가적인 상태 레지스터를 제공할 필요가 없으므로 아키텍처가 단순화된다.
유사하게, 영역 진입 명령의 실행은 현재 서브 영역에 있을 때 비활성화될 수 있다. 이것은 영역 진입 및 퇴장(및 예외 진입 및 리턴)을 처리하는 데 사용되는 위에서 설명한 ELR, SPSR, ESR 및 RID 레지스터와 같은 뱅크 레지스터의 일부가 각 서브 영역에 대해 추가로 뱅킹될 필요가 없는 것을 의미하기 때문에 아키텍처를 단순화하는데, 이는 설계 시(design time)에 주어진 프로세스가 얼마나 많은 서브 영역을 생성하는지 알 수 없으므로 관리하기 어렵다. 마찬가지로, 현재 영역이 전체 영역이 아닌 서브 영역인 경우 낮은 특권 레벨에서 동작하는 프로세스로의 전환을 트리거하는 예외 리턴 이벤트가 비활성화될 수 있다. 위에서 논의된 예에서, 단일 유형의 ERET 명령은 영역 진입 명령 및 예외 리턴 명령 둘 다로서 기능하지만, 이것은 모든 실시 예에 필수적인 것이 아니며, 별도의 명령이 제공되는 경우, 현재 영역이 서브 영역일 때 영역 진입 명령 및 예외 리턴 명령 둘 다를 비활성화할 수 있다.
유사하게, 서브 영역에 있을 때 예외를 발생시키는 경우, 서브 영역으로부터 직접 예외를 취하는 것이 아니라, 처리 회로는, 예외를 처리하기 전에, 서브 영역으로부터 서브 영역을 초기화한 부모 전체 영역으로의 퇴장을 트리거할 수 있다. 따라서, 예외가 부모 전체 영역으로의 리턴을 트리거한다. 부모 전체 영역으로의 예외 리턴에는 REC에 대한 상태 마스킹, 스크러빙 및 세이빙 동작이 포함될 수 있지만, 더 높은 예외 레벨에서 서브 영역으로부터 한 영역으로 직접 예외가 취해지는 것을 방지함으로써, 이를 통해서 서브 영역에 대해 ELR, SPSR 및 ESR과 같은 예외 제어 레지스터를 추가로 뱅킹할 필요가 없으므로, 아키텍처가 단순화된다.
서브 영역의 경우, 영역의 처리에 허용된 최대 특권 레벨을 나타내는 경계 예외 레벨은, 그것의 부모 전체 영역에 대한 경계 예외 레벨과 같다. 반대로, 자식 전체 영역의 경우, 경계 예외 레벨은 그것의 부모 영역의 경계 예외 레벨보다 특권이 더 적은 예외 레벨이다.
영역이 부모 영역에 의해 초기화될 때, 부모 영역은 새로운 영역이 자식 전체 영역인지 자식 서브 영역인지를 선택할 수 있고 그에 따라 영역 디스크립터에서 적절한 영역 유형 파라미터를 설정할 수 있다. 영역이 작동하면, 영역 디스크립터 변경은 도 18과 관련하여 위에서 설명한 관리 영역 라이프사이클을 통해 비활성화되기 때문에, 부모 영역은 더 이상 영역 유형을 변경할 수 없다.
요약하면, 전체 영역과 유사하게 관리되지만 서브 영역 내에서 예외 처리, 영역 초기화 및 영역 진입 기능이 비활성화되어 있는 서브 영역을 도입하는 능력은, 전체 영역의 소프트웨어 프로세스 내의 주어진 어드레스 범위에 대응하는 코드의 더 작은 부분이 해당 소프트웨어의 다른 부분과 격리되는 것을 가능하게 하여, 민감한 코드 또는 데이터의 특정 부분에 대한 부가적인 보안을 제공할 수 있다.
도 35는 사용될 수 있는 시뮬레이터 구현을 도시한다. 전술한 실시 예는 관련 기술을 지원하는 특정 처리 하드웨어를 동작시키기 위한 장치 및 방법의 관점에서 본 발명을 구현하지만, 컴퓨터 프로그램을 사용하여 구현되는 본원에 기술된 실시 예에 따라 명령 실행 환경을 제공하는 것이 가능하다. 이러한 컴퓨터 프로그램은 하드웨어 아키텍처의 소프트웨어 기반 구현을 제공하는 한 종종 시뮬레이터라고한다. 다양한 시뮬레이터 컴퓨터 프로그램에는 에뮬레이터, 가상 머신, 모델 및 동적 이진 변환기를 포함한 이진 변환기가 포함된다. 일반적으로, 시뮬레이터 구현은 호스트 프로세서(730)상에서 실행될 수 있으며, 선택적으로 호스트 오퍼레이팅 시스템(720)을 실행하면서, 시뮬레이터 프로그램(710)을 지원한다. 일부 구성에서, 하드웨어와 제공된 명령 실행 환경 사이에는 다중 계층의 시뮬레이션, 및/또는 동일한 호스트 프로세서 상에 제공된 여러 개의 별개의 명령 실행 환경이 있을 수 있다. 과거에는, 합리적인 속도로 실행되는 시뮬레이터 구현을 제공하기 위해 강력한 프로세서가 필요했지만, 호환성이나 재사용의 이유로 또 다른 프로세서에 고유한 코드를 실행하려는 경우와 같은, 특정 상황에서는 이러한 접근방식이 정당화될 수 있다. 예를 들어, 시뮬레이터 구현은 호스트 프로세서 하드웨어에 의해 지원되지 않는 부가 기능을 명령 실행 환경에 제공하거나, 전형적으로 상이한 하드웨어 아키텍처와 연관된 명령 실행 환경을 제공할 수 있다. 시뮬레이션에 대한 개요는 1990년 동계 USENIX 컨퍼런스, Robert Bedichek의“일부 효율적인 아키텍처 시뮬레이션 기법”, 페이지 53-63에 제시되어 있다.
실시 예가 특정 하드웨어 구성 또는 특징을 참조하여 이전에 설명되었던 정도까지, 시뮬레이션된 실시 예에서는, 동등한 기능이 적절한 소프트웨어 구성 또는 특징에 의해 제공될 수 있다. 예를 들어, 특정 회로는 컴퓨터 프로그램 로직으로서 시뮬레이션된 실시 예에서 구현될 수 있다. 유사하게, 레지스터 또는 캐시와 같은 메모리 하드웨어는, 시뮬레이션된 실시 예에서 소프트웨어 데이터 구조로서 구현될 수 있다. 전술한 실시 예에서 참조된 하나 이상의 하드웨어 요소가 호스트 하드웨어(예를 들어, 호스트 프로세서(730)) 상에 존재하는 구성에서, 일부 시뮬레이션된 실시 예는 적절한 경우 호스트 하드웨어를 이용할 수 있다.
시뮬레이터 프로그램(710)은 컴퓨터 판독 가능한 저장매체(비일시적 매체일 수 있음)에 저장될 수 있고, 시뮬레이터 프로그램 (710)에 의해 모델링되는 하드웨어 아키텍처의 애플리케이션 프로그램 인터페이스와 동일한 (도 2에 도시한 바와 같이 애플리케이션, 운영 체제 및 하이퍼바이저가 포함될 수 있는) 타겟 코드 (700)에 프로그램 인터페이스(명령 실행 환경)를 제공한다. 따라서, 상술한 영역 보호 기능에 근거한 메모리 액세스의 제어를 포함하는, 타겟 코드(700)의 프로그램 명령은, 시뮬레이터 프로그램(710)을 사용하여 명령 실행 환경 내에서 실행될 수 있으므로, 상술한 장치(2)의 하드웨어 특징을 실제로 갖지 않는 호스트 컴퓨터(730)는 이들 특징을 에뮬레트(emulate)할 수 있다.
적어도 일부 예는 장치에 따른 명령 실행 환경을 제공하도록 호스트 데이터 처리 장치를 제어하기 위한 명령들을 포함하는 가상 머신 컴퓨터 프로그램을 제공하며, 이 장치는 복수의 예외 레벨 중 하나에서 소프트웨어 프로세스를 처리하는 처리 회로; 주어진 메모리 영역이 복수의 영역들 중에서 지정된 소유자 영역과 관련되며, 각 영역이 적어도 하나의 소프트웨어 프로세스의 적어도 일부에 대응하고, 소유자 영역이 소유자 영역보다 특권이 많은 예외 레벨에서 처리된 소프트웨어 프로세스에 의해 주어진 메모리 영역에 대한 액세스를 방지할 권리가 있는, 복수의 메모리 영역들에 대한 소유권을 집행하는 메모리 액세스 회로를 구비하고; 소스 영역보다 특권이 더 많은 예외 레벨에서 처리되도록 소스 영역으로부터 타겟 영역으로의 영역 전환에 응답하여, 상기 처리 회로는, 소스 영역과 관련된 아키텍처 상태 데이터의 서브세트가 타겟 영역에 액세스할 수 없게 하도록 상태 마스킹을 수행하도록 구성되고; 영역 전환에 따른 플러시 커맨드에 응답하여, 상기 처리 회로는 소스 영역에 의해 소유된 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 아직 세이브되지 않은 아키텍처 상태 데이터의 상기 서브세트 중 임의의 것이 상기 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 세이브되는 것을 보장하도록 구성된다. 저장 매체는 가상 머신 컴퓨터 프로그램을 저장할 수 있다. 저장 매체는 비일시적 저장 매체일 수 있다.
본 출원에서, "~로 구성된"이라는 단어는 장치의 구성요소가 정의된 동작을 수행할 수 있는 구성을 갖는 것을 의미하기 위해 사용된다. 이와 관련하여, "구성"은 하드웨어 또는 소프트웨어의 상호접속의 구성 또는 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가질 수 있거나, 프로세서 또는 다른 처리 장치가 기능을 수행하도록 프로그래밍될 수 있다. "구성된"은 정의된 동작을 제공하기 위해 어떠한 방식으로든 장치 요소가 변경되어야 함을 의미하지는 않는다.
본 발명의 예시적인 실시 예가 첨부 도면을 참조하여 본 명세서에서 상세하게 설명되었지만, 본 발명은 이러한 정확한 실시 예에 제한되지 않으며, 다양한 변경 및 수정이 첨부된 청구 범위에 의해 정의된 바와 같은 본 발명의 범위 및 사상을 벗어나지 않고 본 기술분양의 당업자에 의해 수행될 수 있음을 이해해야 한다.

Claims (19)

  1. 장치로서,
    복수의 예외 레벨 중 하나에서 소프트웨어 프로세스들을 처리하는 처리 회로와,
    주어진 메모리 영역이 복수의 영역들 중에서 지정된 소유자 영역과 관련되며, 각 영역이 적어도 하나의 소프트웨어 프로세스의 적어도 일부에 대응하고, 소유자 영역이 소유자 영역보다 특권이 더 많은 예외 레벨에서 처리된 소프트웨어 프로세스에 의해 주어진 메모리 영역에 대한 액세스를 방지할 권리가 있는, 복수의 메모리 영역에 대한 소유권을 집행하는 메모리 액세스 회로를 구비하고,
    소스 영역보다 특권이 더 많은 예외 레벨에서 처리되도록 상기 소스 영역으로부터 타겟 영역으로의 영역 전환에 응답하여, 상기 처리 회로는, 상기 소스 영역과 관련된 아키텍처 상태 데이터의 서브세트가 타겟 영역에 액세스할 수 없게 하도록 상태 마스킹을 수행하도록 구성되고,
    영역 전환에 따른 플러시 커맨드에 응답하여, 상기 처리 회로는 상기 소스 영역에 의해 소유된 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 아직 세이브되지 않은 아키텍처 상태 데이터의 상기 서브세트 중 임의의 것이 상기 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 세이브되는 것을 보장하도록 구성되는, 장치.
  2. 제 1 항에 있어서,
    영역 전환에 응답하여, 상기 처리 회로는 아키텍처 상태 데이터의 상기 서브세트의 일부를 저장하는 주어진 아키텍처 레지스터에 대한 레지스터 스크러빙 동작을 수행하여 영역 전환과 다음 판독 액세스 사이의 상기 주어진 아키텍처 레지스터에 대한 중개 기록 액세스(intervening write access) 없이 상기 처리 회로에 의해 수행되는, 상기 주어진 아키텍처 레지스터에 대한 다음 판독 액세스가, 상기 주어진 아키텍처 레지스터에 대한 미리 결정된 값을 리턴하는 것을 보장하도록 구성되는, 장치.
  3. 제 2 항에 있어서,
    상기 레지스터 스크러빙 동작은,
    주어진 아키텍처 레지스터에 대응하는 물리적 레지스터를 상기 미리 결정된 값으로 설정하는 것과,
    주어진 아키텍처 레지스터를 제1 물리적 레지스터로부터 제2 물리적 레지스터에 리매핑(remapping)하는 것과,
    주어진 아키텍처 레지스터에 대한 판독 액세스가 상기 미리 결정된 값을 리턴해야 함을 나타내기 위해 주어진 아키텍처 레지스터 또는 주어진 아키텍처 레지스터에 매핑된 물리적 레지스터와 관련된 상태 값을 설정하는 것 중 적어도 하나를 포함하는, 장치.
  4. 제 1 항 내지 제 3 중 어느 한 항에 있어서,
    상기 처리 회로는 영역 전환에 응답하여 아키텍처 상태 데이터의 서브세트를 상기 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 세이빙하는 것을 트리거하도록 구성되는, 장치.
  5. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    상기 처리 회로는 영역 전환에 응답하여 액세스할 수 없게 된 아키텍처 상태 데이터의 서브세트의 적어도 일부가 여전히 상기 처리 회로의 레지스터들에 저장되어 있을 때 타겟 영역의 처리를 시작하도록 구성되는 장치.
  6. 제 5 항에 있어서,
    아키텍처 상태 데이터의 서브세트의 주어진 아이템이 레지스터들에 여전히 저장되어 있을 때 상기 소스 영역으로의 리턴에 응답하여, 상기 처리 회로는 레지스터들에 저장된 아키텍처 상태 데이터의 서브세트의 상기 주어진 아이템에 대한 액세스를 복원하도록 구성되는, 장치.
  7. 제 1 항 내지 제 3 항, 제 5 항 또는 제 6 항 중 어느 한 항에 있어서,
    타겟 영역의 처리가 시작된 후, 상기 처리 회로는 플러시 커맨드 이외의 미리 결정된 이벤트의 발생에 응답하여 상기 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 아키텍처 상태 데이터의 서브세트의 주어진 아이템을 세이빙하는 것을 트리거하도록 구성되는, 장치. .
  8. 제 7 항에 있어서,
    상기 미리 결정된 이벤트는,
    아키텍처 상태 데이터의 서브세트의 상기 주어진 아이템에 대응하는 아키텍처 레지스터에 대한 레지스터 액세스와,
    아키텍처 상태 데이터의 서브세트의 상기 주어진 아이템을 저장하는 물리적 레지스터의 리매핑과,
    미리 결정된 임계치(threshold) 이하가 되는 다수의 이용 가능한 물리적 레지스터들과,
    주어진 횟수의 사이클 또는 주어진 기간(period of time)의 경과와,
    감소된 프로세서 워크로드(workload)를 나타내는 이벤트 중 적어도 하나를 포함하는, 장치.
  9. 제 1 항 내지 제 8 항 중 어느 한 항에 있어서,
    영역 전환 후에, 상기 처리 회로는, 추가 영역이 동일한 예외 레벨에서 또는 타겟 영역보다 특권이 더 적은 예외 레벨에서 처리되고, 영역 전환과 영역 진입 요청 사이에서 플러시 커맨드가 수신되지 않았을 때, 소스 영역 이외의 추가 영역에 진입하는 영역 진입 요청을 거부하도록 구성되는, 장치.
  10. 제 1 항 내지 제 9 항 중 어느 한 항에 있어서,
    복수의 상기 소프트웨어 프로세스들의 명령들에 응답하여 상기 처리 회로를 제어하는 명령 디코더를 구비하고, 플러시 커맨드는 명령 디코더에 의해 디코딩된 명령을 포함하는, 장치.
  11. 제 1 항 내지 제 9 항 중 어느 한 항에 있어서,
    플러시 커맨드는 상기 복수의 소프트웨어 프로세스들의 명령들을 처리하는 동안 발생하는 미리 결정된 이벤트에 의해 트리거되는 커맨드를 포함하는, 장치.
  12. 제 1 항 내지 제 11 항 중 어느 한 항에 있어서,
    상기 처리 회로는 소스 영역과 관련된 경계 예외 레벨에 의존해서 아키텍처 상태 데이터의 서브세트를 선택하도록 구성되고, 경계 예외 레벨은 소스 영역에 대응하는 가장 특권이 높은 예외 레벨을 나타내는, 장치.
  13. 제 1 항 내지 제 12 항 중 어느 한 항에 있어서,
    상기 처리 회로는 예외 조건에 응답하여 영역 전환을 트리거하도록 구성되는, 장치.
  14. 제 1 항 내지 제 13 항 중 어느 한 항에 있어서,
    미리 결정된 유형의 영역 전환에 응답하여, 상기 처리 회로는 상태 마스킹을 억제하도록 구성되는, 장치.
  15. 제 14 항에 있어서,
    미리 결정된 유형의 영역 전환은 소스 영역에서의 자발적 영역 전환 명령의 실행에 의해 트리거되는 영역 전환을 포함하는, 장치.
  16. 장치로서,
    복수의 예외 레벨 중 하나에서 소프트웨어 프로세스들을 처리하기 위한 수단과,
    주어진 메모리 영역이 복수의 영역 중에서 지정된 소유자 영역과 관련되며, 각 영역이 적어도 하나의 소프트웨어 프로세스의 적어도 일부에 대응하고, 소유자 영역이 소유자 영역보다 특권이 더 많은 예외 레벨에서 처리된 소프트웨어 프로세스에 의해 주어진 메모리 영역에 대한 액세스를 방지할 권리가 있는, 복수의 메모리 영역에 대한 소유권을 집행하기 위한 수단을 구비하고,
    소스 영역보다 특권이 더 많은 예외 레벨에서 처리되도록 소스 영역으로부터 타겟 영역으로의 영역 전환에 응답하여, 상기 처리 수단은, 소스 영역과 관련된 아키텍처 상태 데이터의 서브세트가 타겟 영역에 액세스할 수 없게 하도록 상태 마스킹을 수행하도록 구성되고,
    영역 전환에 따른 플러시 커맨드에 응답하여, 상기 처리 수단은 소스 영역에 의해 소유된 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 아직 세이브되지 않은 아키텍처 상태 데이터의 상기 서브세트 중 임의의 것이 상기 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 세이브되는 것을 보장하도록 구성되는, 장치.
  17. 데이터 처리 방법으로서,
    복수의 예외 레벨 중 하나에서 소프트웨어 프로세스들을 처리하는 단계와,
    주어진 메모리 영역이 복수의 영역 중에서 지정된 소유자 영역과 관련되며, 각 영역이 적어도 하나의 소프트웨어 프로세스의 적어도 일부에 대응하고, 소유자 영역이 소유자 영역보다 특권이 더 많은 예외 레벨에서 처리된 소프트웨어 프로세스에 의해 주어진 메모리 영역에 대한 액세스를 방지할 권리가 있는, 복수의 메모리 영역에 대한 소유권을 집행하는 단계와,
    소스 영역보다 특권이 더 많은 예외 레벨에서 처리되도록 소스 영역으로부터 타겟 영역으로의 영역 전환에 응답하여, 소스 영역과 관련된 아키텍처 상태 데이터의 서브세트가 타겟 영역에 액세스할 수 없게 하도록 상태 마스킹을 수행하는 단계와,
    영역 전환에 따른 플러시 커맨드에 응답하여, 소스 영역에 의해 소유된 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 아직 세이브되지 않은 아키텍처 상태 데이터의 상기 서브세트 중 임의의 것이 상기 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 세이브되는 것을 보장하는 단계를 포함하는, 데이터 처리 방법.
  18. 명령 실행 환경을 제공하도록 호스트 데이터 처리 장치를 제어하기 위한 컴퓨터 프로그램으로서,
    복수의 예외 레벨 중 하나에서 소프트웨어 프로세스들을 처리하는 처리 프로그램 로직과,
    주어진 메모리 영역이 복수의 영역 중에서 지정된 소유자 영역과 관련되며, 각 영역이 적어도 하나의 소프트웨어 프로세스의 적어도 일부에 대응하고, 소유자 영역이 소유자 영역보다 특권이 더 많은 예외 레벨에서 처리된 소프트웨어 프로세스에 의해 주어진 메모리 영역에 대한 액세스를 방지할 권리가 있는, 복수의 메모리 영역에 대한 소유권을 집행하는 메모리 액세스 프로그램 로직을 구비하고,
    소스 영역보다 특권이 더 많은 예외 레벨에서 처리되도록 소스 영역으로부터 타겟 영역으로의 영역 전환에 응답하여, 상기 처리 프로그램 로직은, 소스 영역과 관련된 아키텍처 상태 데이터의 서브세트가 타겟 영역에 액세스할 수 없게 하도록 상태 마스킹을 수행하도록 구성되고,
    영역 전환에 따른 플러시 커맨드에 응답하여, 상기 처리 프로그램 로직은 소스 영역에 의해 소유된 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 아직 세이브되지 않은 아키텍처 상태 데이터의 상기 서브세트 중 임의의 것이 상기 적어도 하나의 영역 실행 컨텍스트 메모리 영역에 세이브되는 것을 보장하도록 구성되는, 컴퓨터 프로그램.
  19. 청구항 18에 따른 컴퓨터 프로그램을 저장하는 저장 매체.
KR1020207001454A 2017-06-28 2018-06-08 영역 실행 컨텍스트 마스킹 및 세이빙 KR20200023379A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1710340.9 2017-06-28
GB201710340A GB2563881B (en) 2017-06-28 2017-06-28 Realm execution context masking and saving
PCT/GB2018/051562 WO2019002809A1 (en) 2017-06-28 2018-06-08 MASKING AND BACKUP OF DOMAIN EXECUTION CONTEXT

Publications (1)

Publication Number Publication Date
KR20200023379A true KR20200023379A (ko) 2020-03-04

Family

ID=59523745

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207001454A KR20200023379A (ko) 2017-06-28 2018-06-08 영역 실행 컨텍스트 마스킹 및 세이빙

Country Status (6)

Country Link
US (1) US11194485B2 (ko)
KR (1) KR20200023379A (ko)
CN (1) CN110832467B (ko)
GB (1) GB2563881B (ko)
TW (1) TWI787286B (ko)
WO (1) WO2019002809A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11216280B2 (en) * 2019-11-26 2022-01-04 Arm Limited Exception interception

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6745307B2 (en) * 2001-10-31 2004-06-01 Hewlett-Packard Development Company, L.P. Method and system for privilege-level-access to memory within a computer
GB2396930B (en) * 2002-11-18 2005-09-07 Advanced Risc Mach Ltd Apparatus and method for managing access to a memory
US8762694B1 (en) * 2003-02-19 2014-06-24 Intel Corporation Programmable event-driven yield mechanism
EP2624166B1 (en) * 2007-05-11 2014-12-17 Nagrastar L.L.C. Method for controlling execution by a processor in a secure environment
GB2515047B (en) * 2013-06-12 2021-02-10 Advanced Risc Mach Ltd Security protection of software libraries in a data processing apparatus
US11163572B2 (en) * 2014-02-04 2021-11-02 Micron Technology, Inc. Memory systems and memory control methods
GB2539435B8 (en) * 2015-06-16 2018-02-21 Advanced Risc Mach Ltd Data processing memory access control, in which an owning process for a region of memory is specified independently of privilege level
GB2539428B (en) 2015-06-16 2020-09-09 Advanced Risc Mach Ltd Data processing apparatus and method with ownership table
US10114958B2 (en) * 2015-06-16 2018-10-30 Microsoft Technology Licensing, Llc Protected regions
KR20170008999A (ko) * 2015-07-15 2017-01-25 에스케이하이닉스 주식회사 메모리 시스템 및 메모리의 동작 방법
US10146940B2 (en) * 2016-01-13 2018-12-04 Gbs Laboratories, Llc Multiple hardware-separated computer operating systems within a single processor computer system to prevent cross-contamination between systems

Also Published As

Publication number Publication date
GB201710340D0 (en) 2017-08-09
CN110832467A (zh) 2020-02-21
TWI787286B (zh) 2022-12-21
WO2019002809A1 (en) 2019-01-03
US20200192585A1 (en) 2020-06-18
US11194485B2 (en) 2021-12-07
CN110832467B (zh) 2023-09-08
TW201905706A (zh) 2019-02-01
GB2563881B (en) 2019-12-25
GB2563881A (en) 2019-01-02

Similar Documents

Publication Publication Date Title
US11449437B2 (en) Invalidation of a target realm in a realm hierarchy
US11113209B2 (en) Realm identifier comparison for translation cache lookup
US20200401441A1 (en) Masking of architectural state associated with a realm
US11294676B2 (en) Exception return instruction variants for realm-based switching
US20200142839A1 (en) Realm identifiers for realms for memory access control
US11016910B2 (en) Memory region locking using lock/unlock flag state for exclusive rights to control memory access
US11347660B2 (en) Sub-realms
US11194485B2 (en) Realm execution context masking and saving
US11816227B2 (en) Interrupting export of memory regions
GB2564097B (en) Memory region locking
US11237957B2 (en) Scrub-commit state for memory region
GB2563882B (en) Interrupting sequences of command actions performed upon memory regions
US20200174950A1 (en) Realm management unit-private memory regions

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