KR20220045211A - 캐패빌리티 기입 어드레스 추적 - Google Patents

캐패빌리티 기입 어드레스 추적 Download PDF

Info

Publication number
KR20220045211A
KR20220045211A KR1020227008120A KR20227008120A KR20220045211A KR 20220045211 A KR20220045211 A KR 20220045211A KR 1020227008120 A KR1020227008120 A KR 1020227008120A KR 20227008120 A KR20227008120 A KR 20227008120A KR 20220045211 A KR20220045211 A KR 20220045211A
Authority
KR
South Korea
Prior art keywords
capability
address
capability write
tracking
write address
Prior art date
Application number
KR1020227008120A
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 KR20220045211A publication Critical patent/KR20220045211A/ko

Links

Images

Classifications

    • 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
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced 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/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • 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
    • G06F12/1441Protection 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 for a range
    • 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/1016Performance improvement
    • G06F2212/1024Latency reduction
    • 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)
  • Computer Security & Cryptography (AREA)
  • Storage Device Security (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

장치는, 캐패빌리티의 사용이 하나 이상의 사용-제한 조건들을 충족하는지 여부를 결정하기 위한 캐패빌리티 유효성 검사 동작을 수행하기 위해 캐패빌리티 검사 회로부(86)를 포함한다. 캐패빌리티는 포인터 및 하나 이상의 사용-제한 조건들을 특정하는 포인터-사용-제한 정보를 포함한다. 하나 이상의 사용-제한 조건들은 포인터에 대한 어드레스들의 허용 범위를 적어도 포함한다. 캐패빌리티가 캐패빌리티 기입 타깃 어드레스와 연관된 메모리 위치에 기입되는 것을 요청하는 캐패빌리티 기입 요청에 응답하여, 캐패빌리티 기입 어드레스 추적이 인에이블될 때, 캐패빌리티 기입 어드레스 추적 회로부(200)는 캐패빌리티 기입 타깃 어드레스에 기초하여 캐패빌리티 기입 어드레스 추적 구조(100)를 업데이트한다.

Description

캐패빌리티 기입 어드레스 추적
본 발명은 데이터 프로세싱의 분야에 관한 것이다.
데이터 프로세싱 장치 상에서 실행되는 소프트웨어는 포인터들을 사용하여 메모리에 대한 액세스를 제어할 수 있다. 그러나, 포인터들은 때때로, 악의적인 공격자가 희생 소프트웨어를 공격하기 위해 사용할 수 있는 길을 제공할 수 있는데, 예를 들어, 버퍼 오버플로우들을 악용하여 버퍼 내의 위치를 식별하기 위한 포인터를 사용하여 공격자가 액세스할 수 없었을 버퍼 너머의 메모리의 영역에 액세스한다. 일부 프로세서 아키텍처(architecture)들은, 포인터가 유효하게 사용될 수 있는 시나리오들을 제한하는 하나 이상의 사용-제한 조건들을 특정하는 포인터-사용-제한 정보와 포인터를 연관시키는, 캐패빌리티(capability)들의 사용을 지원할 수 있다. 사용-제한 조건들은 포인터에 대해 정의된 어드레스들의 허용 범위를 적어도 포함할 수 있으며, 따라서 포인터를 사용하여 허용 범위 밖의 메모리의 영역에 액세스하는 경우, 오류가 시그널링될 수 있게 된다. 이는 일부 형태들의 공격으로부터 보호하는 것을 도울 수 있다.
적어도 일부 예들은 장치를 제공하고, 상기 장치는: 캐패빌리티(capability)의 사용이 하나 이상의 사용-제한 조건들을 충족하는지 여부를 결정하기 위해 캐패빌리티 검사 동작을 수행하기 위한 캐패빌리티 검사 회로부 - 캐패빌리티는 포인터 및 하나 이상의 사용-제한 조건들을 특정하는 포인터-사용-제한 정보를 포함하고, 하나 이상의 사용-제한 조건들은 포인터에 대한 어드레스들의 허용 범위를 적어도 포함함 -; 및 캐패빌리티가 캐패빌리티 기입 타깃 어드레스(capability write target address)와 연관된 메모리 위치에 기입되는 것을 요청하는 캐패빌리티 기입 요청에 응답하여, 캐패빌리티 기입 어드레스 추적이 인에이블(enable)될 때, 캐패빌리티 기입 타깃 어드레스에 기초하여 캐패빌리티 기입 어드레스 추적 구조를 업데이트하기 위한 캐패빌리티 기입 어드레스 추적 회로부를 포함한다.
적어도 일부 예들은 방법을 제공하고, 상기 방법은: 캐패빌리티의 사용이 하나 이상의 사용-제한 조건들을 충족하는지 여부를 결정하기 위해 캐패빌리티 검사 동작을 수행하는 단계 - 캐패빌리티는 포인터 및 하나 이상의 사용-제한 조건들을 특정하는 포인터-사용-제한 정보를 포함하고, 하나 이상의 사용-제한 조건들은 포인터에 대한 어드레스들의 허용 범위를 적어도 포함함 -; 및 캐패빌리티가 캐패빌리티 기입 타깃 어드레스와 연관된 메모리 위치에 기입되는 것을 요청하는 캐패빌리티 기입 요청에 응답하여, 캐패빌리티 기입 어드레스 추적이 인에이블될 때, 캐패빌리티 기입 타깃 어드레스에 기초하여 캐패빌리티 기입 어드레스 추적 구조를 업데이트하는 단계를 포함한다.
적어도 일부 예들은 타깃 코드를 실행하기 위한 명령어 실행 환경을 제공하기 위해 호스트 데이터 프로세싱 장치를 제어하기 위한 컴퓨터 프로그램을 제공하고, 상기 컴퓨터 프로그램은: 캐패빌리티의 사용이 하나 이상의 사용-제한 조건들을 충족하는지 여부를 검사하기 위해 캐패빌리티 검사 동작을 수행하기 위한 캐패빌리티 검사 프로그램 로직(logic) - 캐패빌리티는 포인터 및 하나 이상의 사용-제한 조건들을 특정하는 포인터-사용-제한 정보를 포함하고, 하나 이상의 사용-제한 조건들은 포인터에 대한 어드레스들의 허용 범위를 적어도 포함함 -; 및 캐패빌리티가 캐패빌리티 기입 타깃 어드레스와 연관된 메모리 위치에 기입되는 것을 요청하는 캐패빌리티 기입 요청에 응답하여, 캐패빌리티 기입 어드레스 추적이 인에이블될 때, 캐패빌리티 기입 타깃 어드레스에 기초하여 캐패빌리티 기입 어드레스 추적 구조를 업데이트하기 위한 캐패빌리티 기입 어드레스 추적 프로그램 로직을 포함한다.
컴퓨터 프로그램은 컴퓨터 판독가능 기록 매체 상에 저장될 수 있다. 기록 매체는 일시적 기록 매체 또는 비일시적 기록 매체일 수 있다.
적어도 일부 예들은 방법을 제공하고, 상기 방법은: 하나 이상의 캐패빌리티 기입 요청들의 캐패빌리티 기입 타깃 어드레스들을 추적하기 위해 캐패빌리티 기입 어드레스 추적 구조에 의한 캐패빌리티 기입 어드레스 추적을 인에이블링하는 단계 - 캐패빌리티 기입 요청은 캐패빌리티 기입 요청에 의해 특정된 캐패빌리티 기입 타깃 어드레스와 연관된 메모리 위치에 캐패빌리티를 기입하기 위한 요청을 포함하고, 캐패빌리티는 포인터 및 포인터에 대한 어드레스들의 허용 범위를 적어도 포함하는 하나 이상의 사용-제한 조건들을 특정하는 포인터-사용-제한 정보를 포함함 -; 오래된(stale) 캐패빌리티들을 무효화하도록 메모리를 스위핑(sweeping)하는 단계 - 오래된 캐패빌리티들은 어드레스들의 허용 범위가 어드레스들의 하나 이상의 타깃 영역들과 중첩하는 캐패빌리티들을 포함함 -; 및 메모리를 스위핑한 후, 하나 이상의 선택된 메모리 어드레스 영역들에 저장된 오래된 캐패빌리티들을 무효화하기 위해, 캐패빌리티 기입 어드레스 추적 구조에 의해 추적된 어드레스들에 대응하는 하나 이상의 선택된 메모리 어드레스 영역들을 재스위핑하는 단계를 포함한다.
적어도 일부 예들은 전술한 인에이블링, 스위핑 및 재스위핑 단계들을 포함하는 방법을 수행하기 위해 데이터 프로세싱 장치를 제어하기 위한 컴퓨터 프로그램을 제공한다. 이러한 컴퓨터 프로그램은 컴퓨터 판독가능 기록 매체 상에 저장될 수 있다. 기록 매체는 일시적 기록 매체 또는 비일시적 기록 매체일 수 있다.
본 기법의 추가의 태양들, 특징들 및 이점들은 첨부 도면과 관련하여 읽혀질 예들의 하기의 설명으로부터 명백해질 것이다.
도 1은 다수의 프로세서 코어들 및 캐패빌리티 기입 어드레스 추적 회로부를 갖는 데이터 프로세싱 장치의 예를 도시한다.
도 2는 프로세서 코어들의 일례를 도시한다.
도 3은 캐패빌리티의 예 및 캐패빌리티가 메모리 어드레스 공간 내의 많은 위치들에 어떻게 복사될 수 있는 지의 예를 도시한다.
도 4는 캐패빌리티들을 사용하는 시스템 상에서의 해지-기반 공격(revocation-based attack)의 예를 예시한다.
도 5는 캐패빌리티 기입 어드레스들을 추적하는 몇몇 예들을 도시한다.
도 6은 오래된 캐패빌리티들에 대한 메모리의 스위핑을 수행하기 위해 멀티-프로세서 시스템 상에서 실행되는 소프트웨어에 의해 수행되는 단계들을 도시하는 흐름도이다.
도 7은 사용될 수 있는 시뮬레이터(simulator) 구현예를 도시한다.
데이터 프로세싱 장치는, 캐패빌리티의 사용이 하나 이상의 사용-제한 조건들을 충족하는지 여부를 결정하기 위한 캐패빌리티 검사 동작을 수행하기 위해 캐패빌리티 검사 회로부를 갖는다. 캐패빌리티는 포인터 및 하나 이상의 사용-제한 조건들을 특정하는 포인터-사용-제한 정보를 포함한다. 하나 이상의 사용-제한 조건들은 포인터에 대한 어드레스들의 허용 범위를 적어도 포함할 수 있다. 사용-제한 조건들은 또한, 예를 들어, 캐패빌리티가 메모리에의 기입을 제어하는 데 사용될 수 있는지 또는 캐패빌리티를 통해 액세스되는 메모리 영역으로부터 실행될 명령어를 페치(fetch)하는 것이 허용되는지와 같은 다른 조건들을 선택적으로 포함할 수 있다. 캐패빌리티 검사 회로부를 제공함으로써, 이는 취약한 소프트웨어를 공격하는 데 사용될 수 있는 포인터들의 악의적인 사용에 대한 일부 하드웨어 기반 보호들의 시행을 제공한다.
그러한 캐패빌리티들은 메모리 어드레스 공간 내의 임의의 어드레스들에 기입될 수 있다. 허용 범위가 주어진 메모리 영역을 커버하는 캐패빌리티가 메모리 내에 상주하고, 그 후 주어진 영역이 할당해제되는 경우, 그 주어진 영역을 커버하는 메모리 내의 모든 캐패빌리티들이 무효화될 때까지, 주어진 소프트웨어 프로세스에 주어진 영역을 재할당하는 것은 안전하지 않을 수 있다. 잠시 동안, 메모리 시스템 내에 저장된 할당해제된 영역을 커버하는 캐패빌리티들이 여전히 존재하는 경우에 간단히 할당해제된 메모리가 재할당되는 것을 금지하는 것이 가능할 수 있지만, 이는 메모리의 단편화 및 성능 손실을 초래하는 경향이 있을 것이다. 메모리를 재사용하지 않는 것은 메모리 누수(메모리 할당해제 실패로 인한 이용가능 메모리 어드레스 공간의 손실)와 동등하며, 이는, 어드레스 공간들이 크더라도, 결국 잠재적으로 보안을 손상시키는 오버플로우들을 발생시킬 수 있다. 따라서, 메모리가 잠시 동안 재할당되는 것이 금지될 수는 있지만, 결국, 할당해제된 영역들이 다른 목적들을 위해 재사용되도록 허용하기 위해, 어드레스들의 허용 범위가 이전에 할당해제된 메모리 영역을 커버하는 오래된 캐패빌리티들을 식별하도록 메모리를 스위핑할 수 있는 것이 바람직할 수 있다.
오래된 캐패빌리티들(전형적으로 소프트웨어에 의해 제어됨)을 위해 그러한 메모리 스위핑들을 수행하면서, 스위핑이 진행 중인 동안, 다른 프로세서 코어들 또는 스레드(thread)들이 이미 스위핑된 메모리 영역들에 캐패빌리티들을 기입하고 있을 수 있는 위험이 있을 수 있다. 이는, 주어진 프로세서 코어 상에서 스위핑이 수행되고 있는 동안 모든 다른 프로세서 코어들이 그들의 프로세싱을 계속하는 것을 정지시킴으로써, 또는 캐패빌리티 기입 동작들이 허용되는 것을 금지하도록 메모리 액세스 허가들을 변경함으로써 또 다시 완화될 수 있지만, 이들 접근법들은 성능에 상당한 영향을 준다. 또한, 그러한 "스톱-더-월드(stop the world)" 접근법에서, 스위핑 프로세스는, 공격자가 스위핑을 인터럽트(interrupt)하고, 스위핑을 재개하기 전에, 이전에 스위핑된 메모리에 캐패빌리티를 복사하는 것을 금지하기 위해, 스위핑 프로세스가 인터럽트될 수 없음을 특정하도록 구성 레지스터들을 설정할 필요가 있을 것이다. 그러나, 이는 적법한 인터럽트 소스들도 또한 서비스되지 못하게 된다는 것을 의미하며, 인터럽트들을 처리하는 데 걸리는 최대 시간에 대한 제한들을 요구하는 실시간 시스템들에게 바람직하지 않을 수 있는 인터럽트 처리 레이턴시(latency)를 증가시킨다.
아래에서 논의된 기법들에서, 장치는, 캐패빌리티 기입 어드레스 추적 회로부를 포함하며, 이는 캐패빌리티가 캐패빌리티 기입 타깃 어드레스와 연관된 메모리 위치에 기입되는 것을 요청하는 캐패빌리티 기입 요청에 응답하여, 캐패빌리티 기입 어드레스 추적이 인에이블될 때, 캐패빌리티 기입 타깃 어드레스에 기초하여 캐패빌리티 기입 어드레스 추적 구조를 업데이트한다. 따라서, 캐패빌리티들이 기록되었던 어드레스들을 추적할 수 있는 추적 하드웨어를 제공함으로써, 이는, 스위핑이 진행 중이었던 동안 어느 어드레스들에 캐패빌리티들이 기입되었는지 식별하는 것을 허용하며, 따라서 캐패빌리티들이 이미 스위핑된 메모리에 기입될 가능성을 방지하기 위해, 메인 스위핑이 종료된 후에, 임의의 기입된 위치들을 비교적 효율적으로 재스위핑할 수 있게 된다. 따라서, 구조적으로 캐패빌리티 기입 어드레스 추적 회로부를 하드웨어로 제공하는 것은 더 효율적인 스위핑들을 가능하게 하는데, 그 이유는, 이것이, 스위핑이 진행 중인 동안 스위핑 프로세스가 모든 다른 코어들에서의 프로세싱을 중지시킬 필요가 없게 하기 때문이며, 이는 성능을 크게 개선시킬 수 있다.
캐패빌리티 기입 어드레스 추적 회로부에 의한 추적은 캐패빌리티 기입 요청들에 특정적일 수 있다. 따라서, 캐패빌리티 이외의 정보가 비-캐패빌리티 기입 타깃 어드레스와 연관된 메모리 위치에 기입되는 것을 요청하는 비-캐패빌리티 기입 요청들에 응답하여, 캐패빌리티 기입 어드레스 추적 회로부는 그러한 비-캐패빌리티 기입 요청들을 무시할 수 있으며, 따라서 캐패빌리티 기입 어드레스 추적 구조는 비-캐패빌리티 기입 요청의 타깃 어드레스에 기초하여 업데이트되지 않게 된다.
캐패빌리티 기입 어드레스 추적 구조는 장치 상에서 실행되는 소프트웨어에 액세스가능할 수 있다. 따라서, 오래된 캐패빌리티들에 대한 스위핑들이 소프트웨어에 의해 제어될 때, 소프트웨어는 캐패빌리티 기입 어드레스 추적 구조 내의 정보에 기초하여 메모리 내의 어느 위치들이 재스위핑되어야 하는지를 식별할 수 있다.
일부 시스템들은 캐패빌리티 기입 어드레스 추적 회로부를 영구적으로 인에이블할 수 있으며, 따라서 정규 프로세싱 동안, 캐패빌리티들이 기입된 어드레스들에 대한 기록이 유지된다. 그러나, 실제로, 이는 비교적 큰 캐패빌리티 기입 어드레스 추적 구조를 요구할 수 있고, 캐패빌리티 기입 요청들의 어드레스들을 영구적으로 추적하는 것과 연관된 회로 면적, 전력 및 성능 오버헤드들이 정당화되지 않을 수 있다.
다른 예들에서, 캐패빌리티 기입 어드레스 추적이 인에이블되는지 또는 디스에이블되는지를 나타내는 캐패빌리티 기입 어드레스 추적 인에이블 표시를 저장하기 위한 인에이블 저장 요소가 제공될 수 있다. 이어서, 캐패빌리티 기입 어드레스 추적이 인에이블될 때, 캐패빌리티 기입 요청에 응답하여, 캐패빌리티 기입 어드레스 추적 회로부는 캐패빌리티 기입 타깃 어드레스에 기초하여 캐패빌리티 기입 어드레스 추적 구조를 업데이트한다. 한편, 캐패빌리티 기입 어드레스 추적 인에이블 표시가 캐패빌리티 기입 어드레스 추적이 디스에이블됨을 나타낼 때, 캐패빌리티 기입 어드레스 추적 회로부는 임의의 수신된 캐패빌리티 기입 요청의 캐패빌리티 기입 타깃 어드레스에 기초하여 캐패빌리티 기입 어드레스 추적 구조를 업데이트하는 것을 생략한다. 캐패빌리티 기입 어드레스 추적을 인에이블 또는 디스에이블하기 위한 능력을 제공함으로써, 이는 더 작은 캐패빌리티 기입 어드레스 추적 구조가 사용되도록 허용할 수 있는데, 그 이유는, 어드레스 추적이, 단지 어느 어드레스들에 캐패빌리티들이 기입되었는지를 아는 것이 중요할 때에만 인에이블될 필요가 있고, 이와 달리 유용하지 않은 정보를 캡처하는 것은 피하도록 디스에이블될 수 있기 때문이다.
시스템은 프로그램 명령어들을 실행하기 위한 프로세싱 회로부를 가질 수 있다. 프로세싱 회로부는, 캐패빌리티 기입 어드레스 추적 인에이블 표시를 업데이트하도록 프로세싱 회로부를 제어하는 적어도 하나의 프로그램 명령어를 지원하는 명령어 세트 아키텍처를 가질 수 있다. 예를 들어, 프로그램 명령어는 전용 캐패빌리티 기입 어드레스 추적 인에이블 또는 디스에이블 명령어일 수 있거나, 또는 일반적인 제어 레지스터 업데이트들에 사용되고 업데이트될 레지스터가 캐패빌리티 기입 어드레스 추적 인에이블 저장 요소임을 식별하는 파라미터를 특정하는 시스템 레지스터 업데이트 명령어일 수 있다. 따라서, 캐패빌리티 기입 어드레스 추적 인에이블 표시를 설정하거나 또는 소거하기 위한 프로그램 명령어를 실행함으로써, 소프트웨어는 캐패빌리티 기입 어드레스 추적 회로부에 의한 추적이 인에이블되는지 또는 디스에이블되는지를 설정할 수 있다. 예를 들어, 위에서 논의된 바와 같이 오래된 캐패빌리티들에 대한 스위핑을 제어하는 소프트웨어는 스위핑을 시작하기 직전에 캐패빌리티 기입 어드레스 추적을 인에이블하고, 이어서 스위핑이 완료되면, 그것을 다시 디스에이블하여, 스위핑이 진행 중이었던 동안, 캐패빌리티들이 기입되었던 임의의 어드레스들의 검출을 가능하게 할 수 있다.
캐패빌리티 기입 어드레스 추적 구조는 캐패빌리티 기입 요청이 캐패빌리티 기입 타깃 어드레스를 특정하는 입도(granularity)보다 더 큰 입도에서 어드레스들을 추적할 수 있다. 예를 들어, 캐패빌리티 기입 어드레스 추적 구조는, 캐패빌리티가 기입되었던, 페이지/블록 내의 특정 어드레스를 식별하지 않으면서, 캐패빌리티가 기입되었던 어드레스들의 페이지 또는 블록을 식별할 수 있다. 이는 추적 구조의 저장 오버헤드를 감소시킬 수 있다.
장치는 다수의 엔트리들을 갖는 캐시 구조를 가질 수 있으며, 각각의 엔트리는 대응하는 메모리 어드레스 영역과 연관된 캐싱된 정보를 저장한다. 캐패빌리티 기입 요청에 응답하여, 캐패빌리티 기입 어드레스 추적 구조가 캐패빌리티 기입 타깃 어드레스에 기초하여 업데이트될 때, 캐패빌리티 기입 어드레스 추적 회로부는 또한 캐패빌리티 기입 타깃 어드레스를 포함하는 메모리 어드레스 영역에 대응하는 캐시 구조의 엔트리에 캐패빌리티-기입됨 표시자(capability-written indicator)를 설정할 수 있다. 따라서, 캐시 엔트리들에는 대응하는 메모리 어드레스 영역에 대한 임의의 캐패빌리티 기입이 검출되었는지 여부의 표시가 태크(tag)될 수 있다. 캐패빌리티 기입 요청에 응답하여, 캐패빌리티 기입 어드레스 추적이 인에이블되고 캐패빌리티 기입 타깃 어드레스가, 대응하는 캐시 엔트리가 이미 캐패빌리티-기입됨 표시자가 설정된 메모리 어드레스 영역에 대응할 때, 캐패빌리티 기입 어드레스 추적 회로부는 캐패빌리티 기입 타깃 어드레스에 기초하여 캐패빌리티 기입 어드레스 추적 구조를 업데이트하는 것을 생략할 수 있다.
따라서, 대응하는 메모리 어드레스 영역에 대한 적어도 하나의 캐패빌리티 기입 요청이 검출되었는지 여부에 관한 정보를 캐시 엔트리들에 태그함으로써, 이는 이미 캐패빌리티 기입의 대상이었던 동일한 영역에 대한 후속적인 캐패빌리티 기입과 같은, 동일한 영역에 대한 캐패빌리티 기입 어드레스 추적 구조의 다수의 업데이트된 엔트리들을 중복하여 할당하는 것을 피할 수 있고, 캐패빌리티 기입 어드레스 추적 구조의 업데이트가 생략될 수 있다. 이는 제한된 용량을 가질 수 있는 캐패빌리티 기입 어드레스 추적 구조를 더 효율적으로 사용할 수 있게 한다.
캐패빌리티-기입됨 표시자가 설정되는 캐시 구조는 다양한 상이한 유형들의 캐시 구조 중 하나일 수 있다. 예를 들어, 캐시 구조는 메모리로부터 획득된 데이터를 캐싱하기 위한 데이터 캐시, 메모리로부터 페치된 명령어들을 캐싱하기 위한 명령어 캐시, 또는 단지 캐패빌리티 기입 어드레스 추적 목적들만을 위한 엔트리들을 가질 수 있는 전용 캐패빌리티 기입 어드레스 추적 캐시일 수 있다. 그러나, 일례에서, 캐시 구조가 메모리 내의 페이지 테이블 구조로부터 도출된 어드레스 변환 정보를 저장하기 위한 어드레스 변환 캐시를 포함하는 경우 특히 유용할 수 있다. 예를 들어, 캐시 구조는 TLB(translation lookaside buffer)를 포함할 수 있다. TLB는 페이지 테이블 구조들이 메모리 내에서 정의되는 페이지 입도와 같은 비교적 큰 입도들에서 어드레스 영역들을 추적할 수 있고, 따라서 이는 캐패빌리티-기입됨 표시자들의 추적을, 더 미세한 입도에서 어드레스들을 추적할 수 있는 대안적인 캐시 구조들보다 더 효율적이게 할 수 있다. 또한, 다른 캐시 구조들과 달리, 실제로, 어드레스 변환 캐시는 기입 동작의 대상인 영역의 물리적 어드레스를 획득하기 위해 어떻든 캐패빌리티 기입 요청들을 찾아볼 수 있고, 따라서, 캐패빌리티 기입 요청들을 수신할 때 어드레스 변환 캐시 엔트리 내의 캐패빌리티-기입됨 표시자를 검사하는 것이 비교적 효율적일 수 있다. 그럼에도 불구하고, 다른 유형들의 캐시 구조가 또한 각자의 메모리 어드레스 영역들에 대한 캐패빌리티-기입됨 표시자들을 추적하는 데 사용될 수 있다.
어드레스 변환 캐시로부터 캐패빌리티-기입됨 표시자가 설정된 엔트리를 축출(또는 다수의 레벨들의 어드레스 변환 캐시를 갖는 시스템에서, 마지막 레벨의 어드레스 변환 캐시로부터 그러한 엔트리를 축출)할 때, 어드레스 변환 캐시는 캐패빌리티-기입됨 표시자를 메모리 내의 페이지 테이블 구조에 다시 기입하지 않고 캐패빌리티-기입됨 표시자를 폐기할 수 있다. 이는, 캐패빌리티-기입됨 표시자가 설정된 엔트리를 축출할 때, 이전 캐패빌리티 기입 요청이 그 영역을 타깃으로 했었다는 정보가 손실되고, 따라서 후속적인 캐패빌리티 기입 요청이 동일한 영역을 다시 타깃으로 할 경우, 이는 캐패빌리티 기입 어드레스 추적 구조의 다수의 엔트리들이 동일한 영역에 대해 할당되게 할 수 있다는 것을 의미할 수 있지만, 이는 캐패빌리티-기입됨 표시자로 페이지 테이블 구조를 업데이트하는 것보다 선호될 수 있다. 페이지 테이블 구조들은 이미 매우 큰 양의 메모리 공간을 차지할 수 있고, 페이지 테이블 엔트리들을 2의 거듭제곱 어드레스 크기 경계로 정렬하기 때문에, 각각의 페이지 테이블 엔트리의 크기를 1 비트만큼이라도 증가시키는 것은 실제로 다수의 여분의 비트들의 메모리 공간이 각각의 페이지 테이블 엔트리에 할당되도록 요구할 수 있으므로, 실제로 캐패빌리티-기입됨 표시자를 수용하도록 페이지 테이블 엔트리들의 크기를 증가시키는 것은 페이지 테이블 구조들의 크기에 상당한 영향을 줄 수 있으며, 이는 바람직하지 않을 수 있다. 따라서, 가끔 캐패빌리티 기입 어드레스 추적 구조에 중복 엔트리를 할당할 필요성이 페이지 테이블 구조들에 캐패빌리티-기입됨 표시자를 다시 기입하는 것보다 선호될 수 있다.
프로세싱 회로부는 다수의 소프트웨어 프로세스들 중 하나로부터의 명령어들을 프로세싱할 수 있으며, 각각의 소프트웨어 프로세스는 대응하는 실행 콘텍스트 식별자(execution context identifier)와 연관된다. 예를 들어, 실행 콘텍스트 식별자는 각자의 소프트웨어 프로세스들과 연관된 다른 세트들의 어드레스 변환 정보를 구별하기 위해 TLB에 의해 사용될 수 있다. 캐패빌리티 기입 어드레스 추적이 인에이블될 때, 캐패빌리티 기입 어드레스 추적 회로부는 하나 이상의 캐패빌리티 기입 요청들과 연관된 하나 이상의 실행 콘텍스트 식별자들을 추적하기 위해 실행 콘텍스트 식별자 추적 정보를 유지할 수 있다. 이는, 그것이, 나중에 캐패빌리티 기입 어드레스 추적 구조를 사용하여 어느 메모리 영역들이 오래된 캐패빌리티들에 대해 재스위핑될 필요가 있는지를 제어할 때, 실행 콘텍스트 식별자 추적 정보를 사용하여, 동일한 실행 콘텍스트에서 캐패빌리티 기입의 대상은 아니었지만, 스위핑된 프로세스에 의해 사용되는 것들을 에일리어싱(aliasing)하는 가상 어드레스들을 갖는 메모리 어드레스 영역들의 일부 불필요한 재스위핑들을 피할 수 있다는 것을 의미하기 때문에, 유용할 수 있다. 이는 오래된 캐패빌리티들에 대해 스위핑하는 것에 대한 프로세스들의 성능을 개선할 수 있다.
프로세싱 회로부는 또한 캐패빌리티 기입 어드레스 추적 구조를 재설정하는 데 사용될 수 있는 캐패빌리티 기입 어드레스 추적 재설정 명령어를 지원할 수 있다. 예를 들어, 이러한 명령어는 스위핑 프로세스의 시작 시에 또는 스위핑 프로세스의 종료 시에 실행될 수 있다. 캐패빌리티 기입 어드레스 추적 재설정 명령어는 캐패빌리티 기입 어드레스 추적을 인에이블하거나 디스에이블하는 명령어와 동일한 명령어일 수 있거나, 또는 별개의 명령어일 수 있다. 캐패빌리티 기입 어드레스 추적 구조가 재설정될 때, 구조는 어떠한 어드레스들도 임의의 캐패빌리티 기입 요청들의 대상이지 않았었음을 나타내는 것과 동등한 상태로 재설정될 수 있다. 예를 들어, 이는 캐패빌리티 기입 어드레스 추적 구조의 모든 데이터 엔트리들을 소거함으로써, 또는 메모리에 새로운 구조를 할당하고 새로운 구조의 위치를 식별하는 임의의 어드레스 파라미터들을 업데이트함으로써 행해질 수 있다.
캐패빌리티 기입 어드레스 추적 구조는 상이한 방식들로 구현될 수 있다. 예를 들어, 구조는 메모리와 별개인 하드웨어로 제공되는 저장 유닛을 포함할 수 있다. 따라서, 하드웨어로 구현되는 전용 유닛이 캐패빌리티 기입 동작들의 대상인 어드레스들의 어드레스 정보를 추적하기 위해 제공될 수 있다.
대안적으로, 캐패빌리티 기입 어드레스 추적 구조는 간단히 주어진 세트의 어드레스들에서 메모리에 저장된 데이터 구조일 수 있다. 이러한 경우, 캐패빌리티 기입 어드레스 추적 회로부는 캐패빌리티 기입 어드레스 추적 구조를 업데이트하고 액세스하기 위한 하드웨어를 가질 수 있지만, 캐패빌리티 기입 어드레스 추적 정보 자체를 보유하기 위한 회로부는 하드웨어로 갖지 않을 수 있다. 캐패빌리티 기입 어드레스 추적 구조가 메모리에 유지될 때, 일례에서, 구조는 각각이 적어도 하나의 캐패빌리티 기입의 대상인 메모리 영역의 어드레스를 특정하는 다수의 엔트리들을 포함하는 버퍼일 수 있다. 어드레스 추적은 상이한 입도들에, 예를 들어, 캐시 라인에 또는 페이지 레벨 입도에 있을 수 있다. 일례에서, 적어도 하나의 추적 메타데이터 저장 요소가 캐패빌리티 기입 어드레스 추적 구조가 저장되는 메모리 내의 위치를 식별하는 것을 돕기 위해 제공될 수 있다. 예를 들어, 적어도 하나의 추적 메타데이터 저장 요소는 캐패빌리티 기입 어드레스 추적 구조의 기초 어드레스; 캐패빌리티 기입 어드레스 추적 구조의 업데이트될 다음 엔트리의 표시; 및 캐패빌리티 기입 어드레스 추적 구조에 대한 최대 허가 크기를 나타내는 제한 표시 중 적어도 하나를 저장할 수 있다. 여기서, 업데이트될 다음 엔트리의 표시는 명시적이거나 암시적일 수 있는데, 예를 들어, 다음 엔트리의 표시는 어느 엔트리가 다음인지를 암시적으로 식별할 수 있는 기입된 이전 엔트리를 식별함으로써 식별될 수 있다. 다음 엔트리의 표시는 카운트 값(기초 어드레스에 다수의 증분들을 적용함으로써, 업데이트될 다음 엔트리의 어드레스를 도출하는 데 사용될 수 있음, 증분들의 수는 카운트 값에 기초하여 선택되고, 증분은 하나의 엔트리의 크기에 대응함)으로서 또는 다음 엔트리나 이전에 기입된 엔트리의 메모리 내의 위치를 식별하는 절대 어드레스로서 표현될 수 있다.
제한 표시는, 그것이, 캐패빌리티 기입 어드레스 추적 회로부가, 매우 많은 엔트리들이 최대 허가 크기를 초과한 또는 초과할 위험이 있는 캐패빌리티 기입 어드레스 추적 구조에 할당되었는지를 추적하도록 허용할 수 있고, 따라서 이는 추적 구조가 다른 정보를 포함할 수 있는 후속적인 메모리 영역들로 쏟아져 나오는 것을 피할 수 있기 때문에, 유용할 수 있다.
일부 예들에서, 캐패빌리티 기입 어드레스 추적 구조는, 캐패빌리티 기입 어드레스 추적이 인에이블될 때 수신된 하나 이상의 캐패빌리티 기입 요청들의 하나 이상의 캐패빌리티 기입 타깃 어드레스들을 정확하게 추적할 수 있다. 예를 들어, 추적 구조는 임의의 수신된 캐패빌리티 기입 요청과 연관된 특정 어드레스들을 식별하는 목록 또는 캐시 유사 구조를 유지할 수 있다. 정확한 추적은 위에서 논의된 바와 같이 상이한 입도들에 있을 수 있는데, 예를 들어, 정확한 추적은 캐패빌리티 기입 요청들의 개개의 캐시 라인 어드레스들보다는 오히려 페이지 어드레스들의 것일 수 있다.
대안적으로, 캐패빌리티 기입 어드레스 추적 구조는, 캐패빌리티 기입 어드레스 추적이 인에이블될 때 수신된 하나 이상의 캐패빌리티 기입 요청들의 하나 이상의 캐패빌리티 기입 타깃 어드레스들을 부정확하게 추적할 수 있다. 부정확한 추적은 거짓 긍정들은 가능할 수 있지만(이에 따라 캐패빌리티 기입 어드레스 추적 구조의 질의가, 수신된 캐패빌리티 기입 타깃 어드레스들 중 하나가 아닌 어드레스가 한 세트의 수신된 캐패빌리티 기입 타깃 어드레스들의 한 구성원인 것으로 잘못 식별되게 할 수 있음), 거짓 부정(수신된 캐패빌리티 기입 타깃 어드레스들 중 하나가 그렇다고 식별되지 않을 때)을 갖는 것은 가능하지 않은 것일 수 있다. 예를 들어, 블룸 필터(Bloom filter)와 같은 구조가 사용될 수 있다. 그러한 부정확한 추적은 가끔 거짓 긍정들을 허가하는 대가로 캐패빌리티 기입 어드레스 추적 구조에 필요한 저장 오버헤드의 양을 감소시킬 수 있으며, 따라서 일부 메모리 영역들은 재스위핑될 영역들로서 식별될 수 있는데, 이는 실제로 캐패빌리티 기입 동작들의 대상이었던 영역들에 대응하지 않는다.
캐패빌리티 기입 어드레스 추적 구조가 (예를 들어, 위에서 논의된 바와 같은 제한 표시에 기초하여) 용량 제한에 도달했다고 검출하는 것에 응답하여, 캐패빌리티 기입 어드레스 추적 회로부는 예외의 시그널링을 트리거(trigger)할 수 있다. 이어서 소프트웨어는 계속적인 추적을 허용하기 위해 어드레스 추적 구조의 크기를 업데이트하거나, 또는 진행 중일 수 있는 오래된 캐패빌리티들의 임의의 스위핑을 중단하고 스위핑을 다시 재시작함으로써 예외에 응답할 수 있다. 일부 구현예들에 대해서는, 추적 구조의 용량을 초과할 가능성이 없기 때문에 예외를 트리거할 필요가 없을 수 있지만(예를 들어, 블룸 필터 접근법을 이용하면, 임의의 수의 어드레스들이, 블룸 필터의 크기를 증가시키지 않으면서, 블룸 필터 내로 접힐 수 있지만), 링크된 목록 또는 버퍼와 같은 다른 접근법들에 대해서는, 크기가 결국 캐패빌리티 기입 어드레스 추적 구조에 대해 할당된 메모리 공간의 용량을 넘을 수 있으므로, 용량 제한에 도달되었음을 검출하고 예외를 시그널링하기 위한 구조적인 특징부들을 제공하는 것이 유용하다.
일부 예들에서, 데이터 프로세싱 시스템은 다수의 프로세서 코어들을 포함할 수 있다. 캐패빌리티 기입 어드레스 추적 구조는 코어들 사이에서 공유될 수 있다. 또한, 캐패빌리티 기입 어드레스 추적 회로부도 코어들 사이에서 공유될 수 있다. 하나 초과의 코어가 스위핑들을 행할 필요가 있는 것은 비교적 드물다고 예상될 수 있으므로, 공유된 추적 구조는 충분할 수 있다. 또한 코어들 사이에 추적을 공유하는 것은 코어들 중 임의의 것이 캐패빌리티 기입 요청을 발행했는지 여부를 검사하는 것을 더 쉽게 한다.
대안적으로, 다른 접근법들은 개개의 코어들에 별개의 캐패빌리티 기입 어드레스 추적 구조들을 제공할 수 있거나, 또는 개개의 코어들에 특정적인 공유된 추적 구조들을 업데이트하기 위한 일부 하드웨어를 제공할 수 있다. 예를 들어, 각각의 코어는, 캐패빌리티 기입 요청이 특정 어드레스 영역을 타깃으로 했었는지를 특정하기 위한 표시자로, 그의 TLB 또는 다른 유형의 캐시를 개별적으로 업데이트할 수 있다. 따라서, 위에서 논의된 회로부가 멀티-코어 시스템에 구현될 수 있는 다수의 방식들이 존재한다. 위의 예들은 캐패빌리티 검사 동작 및 캐패빌리티 기입 어드레스 추적을 수행하기 위한 하드웨어 회로부를 설명한다. 타깃 코드를 실행할 명령어 실행 환경을 제공하도록 호스트를 제어하기 위해 호스트 데이터 프로세싱 장치 상에서 실행되는 컴퓨터 프로그램을 제공하는 것이 또한 가능하며, 이에 따라 타깃 코드는, 그것이 호스트와 상이한 아키텍처를 가질 수 있는 타깃 데이터 프로세싱 장치 상에서 실행되고 있었던 것처럼 호스트 데이터 프로세싱 장치 상에서 실행될 수 있게 된다. 이는, 상이한 프로세서 아키텍처를 위해 기입된 레거시 코드가 새로운 플랫폼 상에서 실행될 수 있게 하거나, 또는 개발 중인 프로세서 아키텍처의 테스트를 허용하거나, 또는 새로운 프로세서 아키텍처를 지원하는 임의의 하드웨어 디바이스들이 실제로 준비되기 전에 새로운 아키텍처 상에서 동작하도록 설계된 소프트웨어가 개발되기 시작하게 하는 데 유용할 수 있다. 따라서, 호스트 상에서 구동되는 시뮬레이터 컴퓨터 프로그램은 타깃 데이터 프로세싱 장치의 프로세서 아키텍처의 특징부들을 효율적으로 에뮬레이팅(emulating)하여, 타깃 코드가 타깃 데이터 프로세싱 장치 상에서 실행되고 있는 경우와 같이, 타깃 코드가 호스트 상에서 실행될 수 있게 한다. 그러한 시뮬레이터 컴퓨터 프로그램은 위에서 논의된 캐패빌리티 검사 회로부 및 캐패빌리티 기입 어드레스 추적 회로부의 기능성을 에물레이팅하는 캐패빌리티 검사 프로그램 로직 및 캐패빌리티 기입 어드레스 추적 프로그램 로직을 포함할 수 있다.
위의 논의는 하드웨어로 제공되는 프로세싱 시스템의 구조적인 특징부들 또는 대응하는 시뮬레이터 컴퓨터 프로그램의 구조적인 특징부들을 설명했으며, 이는 소프트웨어가, 캐패빌리티 기입 요청들을 사용하여 어떤 어드레스들이 기입되었는지를 식별할 수 있게 하고, 이는 오래된 캐패빌리티들의 스위핑들에 유용할 수 있다. 그러한 스위핑들에 특히 유용하지만, 소프트웨어 개발자들 또는 컴파일러들은 캐패빌리티 기입 추적 구조에 대한 다른 용도들을 발견할 수 있다는 것이 이해될 것이다.
대응하는 방법에서, 오래된 캐패빌리티들을 무효화하도록 스위핑들을 제어하는 방법이 캐패빌리티 기입 어드레스 추적 구조를 사용하여 제공될 수 있다. 따라서, 소프트웨어에 의해 제어될 수 있는 이러한 방법은 캐패빌리티 기입 어드레스 추적 구조에 의한 캐패빌리티 기입 어드레스 추적을 인에이블링하는 것, 이어서 오래된 캐패빌리티들을 무효화하도록 메모리를 스위핑하는 것 - 여기서 오래된 캐패빌리티들은 어드레스들의 허용 범위가 어드레스들의 하나 이상의 타깃 영역들과 중첩하는 그러한 캐패빌리티들임 -, 및 이어서 메모리를 스위핑한 후, 하나 이상의 재스위핑되고 선택된 메모리 어드레스 영역들에 저장된 오래된 캐패빌리티들을 무효화하기 위해, 캐패빌리티 기입 어드레스 추적 구조에 의해 추적된 어드레스들에 대응하는 하나 이상의 선택된 메모리 어드레스 영역들을 재스위핑하는 것을 포함할 수 있다. 따라서, 캐패빌리티 기입 어드레스 추적 구조를 사용함으로써, 스위핑 프로세스는 유효한 캐패빌리티 기입들이 계속되는 것을 금지하거나 다른 프로세서 코어들 또는 스레드들에서의 프로세싱을 중단할 필요 없게 할 수 있는데, 이는, 추적 구조가 메인 스위핑 동안 캐패빌리티 기입들의 대상인 메모리 영역들의 타깃화된 재스위핑을 가능하게 하므로, 성능을 개선할 수 있다.
위에서 논의된 방법을 수행하도록 데이터 프로세싱 장치를 제어하기 위한 컴퓨터 프로그램이 제공될 수 있다. 컴퓨터 프로그램은 비일시적 컴퓨터 판독가능 저장 매체 상에 저장될 수 있다.
도 1은 다수의 프로세서 코어(CPU)들(4)을 포함하는 데이터 프로세싱 시스템(2)의 예를 개략적으로 예시한다. 이러한 예에서, 4개의 CPU들이 존재하지만, 더 많거나 더 적은 CPU들이 제공될 수 있다는 것이 이해될 것이다. CPU들은, 코어들(4)과 메모리 사이의 라우팅 트랜잭션(transaction)들에 더하여, 각자의 프로세서 코어들(4)에 캐싱된 데이터 사이의 코히런시(coherency)를 또한 관리할 수 있는 상호연결부(6)를 통해 공유된 메모리 시스템에 액세스한다. 도 1에 도시되지는 않지만, 시스템은 또한 그래픽 프로세싱 유닛, 디스플레이 제어기, 네트워크 제어기 또는 다른 유형들의 디바이스와 같은, 메모리 트랜잭션들을 개시할 수 있는 다른 유형들의 마스터 디바이스(master device)를 포함할 수 있다. 마스터 디바이스들에 의해 개시된 트랜잭션들은 상호연결부에 의해 슬레이브 디바이스(slave device)들로 라우팅된다. 이러한 예에서, 슬레이브 디바이스들은 메모리 유닛들(10, 12)에 대한 액세스를 제어하기 위한 메모리 제어기들(8)을 포함한다. 이러한 예에서, 메모리 유닛(10)은 DRAM(dynamic random access memory) 유닛이고, 메모리 유닛(12)은 비휘발성 RAM 유닛이다. 다른 유형들의 메모리가 또한 제공될 수 있고 주변기기 제어기들, 입력/출력 유닛들 등과 같은 다른 유형들의 슬레이브 디바이스들이 또한 제공될 수 있다는 것이 이해될 것이다. 상호연결부(6)는 CPU들(4) 중 임의의 것으로부터 액세스가능하고 기반 메모리 시스템으로부터의 데이터를 캐싱할 수 있는 공유된 캐시(14)를 가질 수 있다.
이러한 예에서, 상호연결부는 또한, 아래에서 더 상세히 논의될, 캐패빌리티 기입 어드레스 추적 회로부(20)를 포함한다. 다른 예들에서, 캐패빌리티 기입 어드레스 추적 회로부(20)의 일부 또는 전부는 개개의 프로세서 코어들(4) 간에 분산될 수 있다.
도 2는 CPU들(4) 중 주어진 하나 내의 구성요소들의 예를 예시한다. 프로세서 코어(4)는 다수의 파이프라인 스테이지(pipeline stage)들을 갖는 프로세싱 파이프라인을 포함할 수 있는데, 이는, 명령어 캐시(32)로부터 프로그램 명령어들을 페치하기 위한 페치 스테이지(30), 페치된 명령어들에 의해 표현된 액션들을 수행하도록 나머지 파이프라인 스테이지들을 제어하기 위해 제어 신호들을 생성하도록 페치된 명령어들을 디코딩하기 위한 디코드 스테이지(34), 명령어들에 대한 임의의 요구된 피연산자들이 레지스터들(38) 내에서 이용가능한지를 검사하고 그들의 피연산자들이 이용가능할 때 실행할 명령어들을 발행하는 발행 스테이지(36), 디코딩된 특정 명령어들에 따른 유형의 대응하는 프로세싱 동작들을 수행하기 위해 발행된 명령어들을 실행하기 위한 실행 스테이지(39), 및 실행된 명령어들의 결과들을 레지스터들(38)에 다시 기입하기 위한 다시 기입 스테이지(40)를 포함한다. 이러한 예에서, 실행 스테이지(39)는 상이한 유형들의 명령어들을 실행하기 위한 다수의 실행 유닛들을 포함한다. 예를 들어, 실행 유닛들은 정수 피연산자들에 대해 산술 또는 논리 명령어들을 실행하기 위한 ALU(arithmetic/logic unit)(42), 부동 소수점 포맷으로 표현된 피연산자들에 대해 부동 소수점 명령어들을 실행하기 위한 부동 소수점 유닛(44), 및 메모리 시스템으로부터 레지스터(38)로 데이터를 로드하기 위한 로드 동작들 또는 레지스터(38)로부터 메모리 시스템으로 데이터를 저장하기 위한 저장 동작들을 수행하기 위한 로드/저장 유닛(46)을 포함할 수 있다. 다른 유형들의 실행 유닛들이 또한 제공될 수 있다는 것이 이해될 것이다. 또한, 이는 가능한 파이프라인 아키텍처의 단지 하나의 예이고, 다른 유형들의 파이프라인 스테이지들이 또한 제공될 수 있다. 예를 들어, 순서외 프로세싱을 지원하는 프로세서에서, 파이프라인은 또한, 명령어들에 의해 특정된 구조적인 레지스터들을 하드웨어로 제공되는 물리적 레지스터들로 맵핑(mapping)하기 위해 레지스터 재명명(renaming)을 수행하기 위한 재명명 스테이지를 포함할 수 있다.
프로세서 코어(4)는 또한, 로드/저장 유닛(46)에 의해 요청될 때 메모리에 대한 액세스를 관리하기 위한 MMU(memory management unit)(50)를 포함한다. MMU(50)는, 로드/저장 유닛(46)에 의해 제공되는 가상 어드레스를 메모리 시스템으로부터 요구되는 데이터를 식별하기 위한 물리적 어드레스로 변환하기 위해, 어드레스 변환을 수행할 수 있다. 어드레스 변환은 메모리 내의 페이지 테이블 구조들에 저장된 어드레스 변환 데이터를 참조하여 수행된다. MMU(50)는 페이지 테이블 구조들로부터 도출된 정보를 캐싱하기 위한 어드레스 변환 캐시들로서 동작하는 하나 이상의 TLB들(52)을 포함한다. TLB들(52)은 페이지 테이블 엔트리들 자체를 캐싱할 수 있고/있거나, 어드레스들에 대한 정보를 캐싱할 수 있으며 - 여기서, 페이지 테이블 엔트리들은 특정 가상 어드레스들을 변환하기 위해 메모리에서 발견할 수 있음 -, 따라서 관련 정보가 TLB들(52)에 캐싱되는 어드레스들에 대한 어드레스 변환들은, 메모리 내의 페이지 테이블 구조들 내의 관련 어드레스 변환 정보의 위치를 알아내는 데 페이지 테이블 워크(page table walk)가 요구되는 어드레스들에 대한 것보다 더 빠르게 수행될 수 있다. 일부 예들에서, MMU(50)는 단일 TLB를 포함할 수 있다. 대안적으로, MMU(50)는 다수의 레벨들의 TLB(52)를 가질 수 있는데, 여기서 가상 어드레스는 레벨 1 TLB에서 먼저 찾아지고, 레벨 1 TLB에 없는 경우, 레벨 2 TLB에서 찾아져서, TLB 용량과 레이턴시 사이에 균형을 맞출(trade off) 수 있다. 또한, 간결성을 위해 도 1에 도시되지 않지만, 명령어 캐시(32)로부터의 명령어 페치들은 또한 MMU(50)를 사용하여, 또는 데이터-측 MMU(50)와 구별되는 별개의 명령어-측 MMU를 사용하여 어드레스 변환의 대상이 될 수 있다.
이러한 예의 CPU(4)는 MMU(50)에 의해 식별되는 물리적 어드레스에 기초해 로드/저장 명령어들에 응답하여 액세스되는 레벨 1 데이터 캐시(54)를 포함할 수 있고, 또한, 레벨 1 명령어 캐시(32) 또는 레벨 1 데이터 캐시(54)에 없을 경우에 액세스될 수 있는 공유된 레벨 2 캐시(56)는 데이터와 명령어들 사이에 공유되어 제공된다. 이는 가능한 캐시 계층구조의 단지 하나의 예이고 다른 배열들이 또한 가능할 수 있다는 것이 이해될 것이다. 또한, CPU에 제공된 마지막 레벨의 캐시에 없을 경우, 요청들이 메모리로 전송되기 전에, CPU(4) 내에 2개 초과의 레벨들의 캐시를 제공하는 것이 가능하다. 따라서, CPU(4)의 정확한 설계를 변화시키는 유연성이 존재한다.
레지스터들(38)은 다수의 유형들의 레지스터들을 포함한다. 레지스터들(38)은 명령어들에 대한 피연산자들 및 실행된 명령어들의 결과들을 저장하기 위한 한 세트의 N개의 범용 레지스터들(60)을 포함할 수 있다. 범용 레지스터들(60)은 정수 레지스터들 및 부동 소수점 레지스터들을 포함할 수 있다. 또한, 레지스터들(38)은 프로세서 코어(4)의 기능을 제어하는 제어 파라미터들을 저장할 수 있는 제어 레지스터들(62)을 포함할 수 있다. 다수의 상이한 유형들의 제어 레지스터들, 예컨대, 현재 실행 지점에 대응하는 어드레스를 나타내기 위한 프로그램 카운터, 조기에 실행된 명령어들의 결과들에 따라 설정될 수 있는 상태 플래그들, 및 시스템의 현재 동작 모드를 나타낼 수 있는 현재 모드 레지스터들이 존재할 수 있다. 도 2의 예에서, 제어 레지스터들(62)은, 프로세싱 파이프라인에 의해 현재 실행되고 있는 실행 콘텍스트와 연관된 현재 실행 콘텍스트 식별자의 표시를 저장할 수 있는 현재 실행 콘텍스트 식별자 레지스터(64)를 포함하는 것으로 도시되어 있다. 프로세서는 상이한 소프트웨어 프로세스들을 실행하는 것을 지원할 수 있고, 각각의 소프트웨어 프로세스는 대응하는 실행 콘텍스트 식별자, 더 구체적으로는 ASID(address space identifier)를 가질 수 있다. ASID는 각자의 소프트웨어 프로세스들을 위한 상이한 세트들의 페이지 테이블 구조들의 위치를 알아내기 위해 MMU(50)에 의해 사용될 수 있고, 주어진 실행 콘텍스트에 의해 트리거된 어드레스 변환 요청들이 그 실행 콘텍스트에 대응하는 TLB 엔트리들에만 매칭(matching)할 수 있다는 것을 보장하기 위해, TLB(52) 내의 엔트리들에 대응하는 ASID가 태그될 수 있다.
도 2에 도시된 바와 같이, 프로세서 코어(4)는 또한 캐패빌리티들을 저장하는 한 세트의 캐패빌리티 레지스터들(70)을 가질 수 있다. 이러한 예에서, C0 내지 CM-1로 제공되는 M개의 캐패빌리티 레지스터들이 존재한다. 각각의 캐패빌리티 레지스터(70)는 메모리 내의 특정 어드레스를 나타내는 어드레스 포인터(72) 및 포인터 필드(72)에 저장된 포인터의 유효한 사용들을 제한하는 하나 이상의 조건들을 정의하는 연관된 포인터-사용-제한 정보(74)를 포함하는 캐패빌리티를 저장할 수 있다. 포인터-사용-제한 정보는 포인터(72)가 정의되도록 허용되는 어드레스들의 허용 범위의 표시를 포함한다. 이러한 예에서, 허용 범위는 허용 범위의 시작 어드레스를 식별하는 기초 값(76) 및 허용 범위의 종료 어드레스를 암시적으로 또는 명시적으로 식별하는 제한 값(78)(제한(78)은 절대 어드레스로서 또는 기초 어드레스(76)에 적용되는 크기 또는 오프셋으로서 인코딩될 수 있음)에 의해 인코딩된다. 예를 들어, 기초 및 제한 값들(76, 78)을 포함하는 별개의 테이블을 가리킬 수 있는 범위 식별자에 의한, 허용 범위 정보를 인코딩하는 다른 방식들이 존재할 수 있다는 것이 이해될 것이다. 범위 정보(76, 78)에 더하여, 캐패빌리티 레지스터들은 또한 포인터의 사용에 대해 추가의 사용 제한사항들을 부과할 수 있는 허가들(80)을 저장할 수 있다. 예를 들어, 허가들(80)은 캐패빌리티에 대응하는 허용 어드레스들의 범위가 단지 판독될 수만 있는지 또는 판독 및 기입 둘 다가 되도록 허용되는지를 특정할 수 있다. 또한, 허가들(80)은 어드레스들의 대응하는 범위 내의 어드레스에 저장된 명령어를 페치하고 실행하도록 허용가능한지를 특정할 수 있다. 또한, 허가들은, 다른 캐패빌리티들의 로드 또는 저장을 제어하는 데 대응하는 캐패빌리티가 사용되도록 허용되는지를 특정할 수 있다. 다른 유형의 허가는 캐패빌리티가 다른 소프트웨어 프로세스들과 공유될 수 있는지를 특정하는 것이거나, 또는 단지 현재 소프트웨어 프로세스에 의해서만 사용되도록 한정되는 것일 수 있다. 또한, 허가는 특권 레벨들의 소프트웨어가 캐패빌리티를 사용하도록 허용되는지를 특정할 수 있다. 이들 추가적인 사용 제한사항들 중 임의의 하나 이상이 허가들(80)에 의해 부과될 수 있고, 이들 허가들 모두가 주어진 프로세서 아키텍처에 의해 지원될 필요가 없다는 것이 이해될 것이다.
따라서, 대체적으로 적어도 포인터(72)에 대한 허용 범위를 포함하는 하나 이상의 사용-제한 조건들을 정의함으로써, 이는, 포인터(72)의 사용이 그것의 응용가능성에서 한정되고, 이는 버퍼 오버플로우들 또는 임의의 메모리 어드레스들에 대한 액세스들과 같은 일반적인 소프트웨어 공격들을 금지하는 데 유용할 수 있다는 것을 의미한다.
도 3에 도시된 바와 같이, 메모리 시스템에 캐패빌리티가 저장될 때, 포인터(72) 및 사용-제한 정보(74)에 더하여, 캐패빌리티는 또한 캐패빌리티가 유효한지 여부를 특정하는 연관된 태그 값(82)을 가질 수 있다. 이러한 태그(82)는 종래의 비-캐패빌리티 데이터를 저장하는 메모리 위치들로부터 캐패빌리티들을 저장하는 메모리 위치들을 구별하기 위해 하드웨어에 의해 사용된다. 태그 값(82)은 소프트웨어-투명(software-transparent)한데, 즉, 어드레스 또는 메모리의 부분은 아니며, 따라서 캐패빌리티 자체와는 별개로 보유될 수 있다.
프로세싱 파이프라인에 의해 지원되는 명령어 세트 아키텍처는 캐패빌리티들과 상호작용하는 명령어들을 포함할 수 있다. 예를 들어, 명령어 세트 아키텍처는 캐패빌리티 레지스터들(70) 중 하나에 캐패빌리티를 기입하기 위한 명령어들, 메모리로부터 캐패빌리티 레지스터들(70)로 캐패빌리티들을 로드하기 위한 명령어들, 캐패빌리티 레지스터들(70)로부터 메모리로 캐패빌리티들을 저장하기 위한 명령어들, 및 메모리에 대한 데이터 또는 명령어 액세스들을 제어하기 위해 캐패빌리티 레지스터들(70) 내에 저장된 캐패빌리티들을 사용하기 위한 명령어들을 설정하는 캐패빌리티에 대한 지원을 포함할 수 있다. 캐패빌리티 레지스터들(70)에 저장된 캐패빌리티가 메모리에 대한 액세스를 제어하는 데 사용될 때, 특정된 캐패빌리티 레지스터 내의 캐패빌리티의 사용은, 기준 캐패빌리티 레지스터들(70)에 특정된 캐패빌리티의 허가들(80) 및 범위 정보(76, 78)에 기초하여, 캐패빌리티가 사용되는 시나리오가 유효한지 여부를 검사하기 위해, 캐패빌리티 검사 회로부(86)에 의해 검사된다. 예를 들어, 캐패빌리티 검사 회로부(86)는 포인터 값(72)이 범위 정보(76, 78)에 의해 정의된 허용 범위 내에 있는지 여부 및 특정된 허가들(80)이 주어진 경우, 요청되고 있는 동작의 유형(예를 들어 판독 또는 기입 또는 명령어 페치)이 허용되는지 여부를 검사할 수 있다. 따라서, 캐패빌리티 검사 회로부(86)의 하드웨어는, 허용 어드레스 영역 밖의 정보에 액세스하는 데 캐패빌리티를 사용하려는 시도들이 실패할 것이고, 또한 특정된 어드레스 영역 내에서 부적절한 유형의 동작을 수행하려는 시도들이 또한 실패할 수 있고 잠재적으로 보안상의 예외를 발생시킬 수 있다는 것을 보장한다. 소정의 영역들에 대한 페이지 테이블 구조들에 기록된 메모리 허가들은 일부 영역들이 단지 캐패빌리티를 통해서만 액세스될 수 있다고 (그리고 비-캐패빌리티 판독들/기입들의 대상이 될 수 없다고) 정의하는 것을 지원할 수 있는데, 이는 캐패빌리티에 의해 제공되는 보호들이 소정의 영역들을 건너뛸 수 없도록 강제할 수 있다. 또한, 일부 구현예들은 단지 캐패빌리티-제어된 액세스들만이 허용되고 메모리에 대한 비-캐패빌리티-제어된 액세스들은 금지될 수 있는 동작 모드에 대한 구조적인 지원을 제공할 수 있는데, 이는 캐패빌리티 보호들이 메모리에 대한 모든 액세스에 대해 요구됨을 보장하는 것이 바람직한 경우에 선택될 수 있다.
따라서, 캐패빌리티들을 지원하는 아키텍처를 제공하는 것은 공격들에 대한 공간적 보호를 제공할 수 있다. 그러나, 도 3의 상부에 도시된 바와 같이, 소프트웨어는 캐패빌리티들을 자유롭게 이동시키고 복사하고 저장할 수 있으며, 따라서 동일한 캐패빌리티 C0이 전체 메모리 어드레스 공간 내의 다수의 메모리 위치들에 보유될 수 있다는 점에서 문제가 여전히 발생할 수 있다. 예를 들어, 도 3은, 범위 정보(76, 78)에 의해 특정된 범위가 어드레스 범위 A에 대응하는 캐패빌리티 C0이 어드레스 공간 내의 3개의 상이한 위치들 B, C, D로 복사되는 경우를 도시한다. 메모리 어드레스 영역 A가 후속하여 할당해제되고 다른 소프트웨어 프로세스들에 의한 잠재적 사용을 위해 해제(free)되더라도, 이전에 참조된 영역 A를 커버하는 범위 정보를 갖는 메모리 어드레스 공간의 다른 영역들에 아직 저장된 오래된 캐패빌리티들 C0이 존재하지 않다는 것이 보장될 수 없는 경우, 다른 프로세스들이 잠재적으로 민감한 정보를 위해 그 영역을 사용하도록 허용하는 것은 위험할 수 있다.
그러한 오래된 캐패빌리티들을 이용하는 공격의 예로서, 도 4는 희생 애플리케이션과 신뢰되지 않은 라이브러리 사이의 해제-후-사용 공격을 예시한다. 기반 코드 및 데이터 세그먼트들이 캐패빌리티들에 기초하여 서로 공간적으로 격리된다고 가정한다. 공격은, 희생자가 캐패빌리티들 C1 및 C3의 형태로 공격자와 그의 메모리 중 일부를 의도적으로 공유하는 것, 예컨대, 이미지 프로세싱 애플리케이션이 이미지를 보유하는 메모리에 대한 필터 라이브러리 액세스를 승인하는 것에 의존한다. 공격자는 (캐패빌리티 C1을 공격자에게 할당된 메모리의 일부 영역으로 복사함으로써) 제1 호출 동안 C1을 숨겼다가 제2 호출 동안 그것을 복구한다. 한편, 희생 프로세스는 캐패빌리티 C1에 의해 커버되는 영역을 해제시키고, 일부 민감한 데이터를 보유할, 캐패빌리티 C2에 의해 커버되는 새로운 메모리 영역을 할당한다. 메모리 할당기들이 통상 이전에 해제된 메모리를 재사용하기 때문에, C2는 C1에 의해 커버되는 메모리에 중첩할 수 있다. 따라서, 공격자에게 캐패빌리티 C2에 대한 액세스가 주어지지 않았고, 따라서 희생자는 C2가 비밀에 대한 액세스를 보호하기에 충분할 것으로 예상할 수 있지만, 공격자는 오래된 캐패빌리티 C1을 사용하여 C2와 연관된 영역에 보유된 비밀 정보를 추출할 수 있다.
전술한 것과 같은 공격들을 완화시키기 위한 하나의 접근법은 메모리 재사용을 피하는 (즉, 할당해제 후 C1과 연관된 메모리 영역의 재사용을 금지하는) 것이다. 암시적 메모리 누수는 큰 가상 어드레스 공간들 및 방대한 범위의 메모리를 할당하지 않거나 빈번한 할당-해제 사이클들을 수행하지 않는 애플리케이션들을 갖는 시스템들에 대해 수용가능할 수 있다. 그러나, 그들 시스템들도 고유 메모리 단편화의 결과로 인한 캐시 오염으로부터 발생된 성능 손실을 겪을 수 있다. 임의의 경우에, 안전한 메모리 재사용을 가능하게 하기 위해, 해제된 캐패빌리티의 모든 인스턴스(instance)들을 무효화하기 위한 일부 형태의 해지 정책이 바람직할 수 있다.
예를 들어, 해제될 캐패빌리티들이 해지 목록에 추가될 수 있다. 그들 캐패빌리티들에 의해 커버되는 메모리는 그러한 캐패빌리티들의 모든 인스턴스들이 메모리로부터 무효화될 때까지 재사용되지 않는다. 해지 정책은, 해지 스위핑을 트리거하기 전에, 오래된 메모리의 소정의 임계치 - 예컨대, 힙 공간(heap space)의 25% - 까지 해지 목록 상에 캐패빌리티들을 모을 수 있다. 스위핑은:
- 타깃 애플리케이션에 의해 현재 액세스가능한 모든 레지스터들 및 메모리를 검색하고,
- 거기에 보유되는 모든 오래된 캐패빌리티들을 식별하고 - 여기서 어드레스들의 허용 범위(76, 78)는 해지 목록 상에서 식별된 영역들 중 적어도 하나와 중첩함 -,
- 그들의 태그(82)를 소거함으로써, 스위핑에서 식별된 오래된 캐패빌리티들을 무효화할 것이다.
그러나, 그러한 스위핑을 수행할 때, 다른 스레드들이 (예컨대, 다른 프로세서 코어들(4) 상에서) 스위핑 스레드와 병렬로 구동되고 있는 경우, 또는 스위핑 소프트웨어가 인터럽트되고, 인터럽트 후 스위핑 소프트웨어를 재개하기 전에, 스위핑 소프트웨어가 인터럽트되는 동안, 다른 코드가 실행되는 경우, 그러한 다른 스레드들이 이미 스위핑된 메모리 영역들에 오래된 캐패빌리티들을 기입할 수 있는 위험이 있으며, 이는 일부 오래된 캐패빌리티들이 스위핑에서 발견되지 않을 위험이 있을 수 있다.
이를 처리하기 위한 무경험 접근법(
Figure pct00001
approach)은 스위핑 동안 "스톱-더-월드"하는 것, 즉, 모든 다른 스레드들을 중단시키고 인터럽트들을 디스에이블하는 것일 것이다. 그러나, 이러한 접근법의 성능상의 영향은 매우 바람직하지 않거나, 심지어 실시간 애플리케이션들에 대해서는 수용 불가능할 것이다.
해지 스위핑들을 가속화하기 위한 하나의 접근법은 캐패빌리티들의 이동을 제한하는 것일 것이다. 예를 들어, 캐패빌리티가 캐패빌리티 저장소의 기초 어드레스로서 사용될 수 있는지 여부를 결정하기 위해 "캐패빌리티당" 허가 비트가 사용될 수 있다. 이어서 할당기는 메모리의 모든 영역들을 스위핑되는 것에서 제외시킬 수 있으며, 그 영역에 대해서는 상기 허가 비트가 설정된 적어도 하나의 캐패빌리티도 제공하지 않았다. 유사한 허가 비트들이 또한 페이지들에 할당될 수 있다. 이는 운영 체제(operating system, OS)가 큰 메모리 영역들을 스위핑들에서 제외시키도록 허용할 수 있는데, 그 이유는, 그들이 캐패빌리티들을 보유하지 못할 수 있기 때문이다.
"캐패빌리티 저장 가능(Can store capability)" 허가 비트들은 메모리의 어느 영역들이 캐패빌리티들을 보유할 수 있는지를 한정한다. 그러나, 그들은 이들 영역들의 실제 콘텐츠들에 대해서는 어떠한 정보도 제공하지 않는데; 예컨대, 페이지가 캐패빌리티들을 저장할 수 있을지라도, 그것은 런타임에 아무것도 포함하지 않을 수 있고, 따라서 스위핑될 필요가 없을 것이다. 이를 해결하기 위해, "캐패빌리티 더티(capability dirty)" 비트가 각각의 페이지와 연관될 수 있다. 그것은 특정 페이지에 캐패빌리티가 처음 기입될 때 설정될 것이다. 스위핑 알고리즘은 스위핑들 동안 그들 페이지들을 스킵(skip)하기 위해 그 비트를 평가할 수 있다.
그러나, 위의 접근법들은 3개의 주요 제한사항들을 나타낸다:
a) 스케일링
- 어플리케이션은 몇 테라바이트를 포함하는 데이터베이스들과 같이 큰 메모리 풋프린트(memory footprint)들을 나타낼 수 있음;
- 스위핑 프로세스는 다수의 페이지들 및/또는 캐패빌리티들에 대응하는 허가 비트들을 취출하고 평가해야 할 수 있음;
- 이는, 특히 대응하는 페이지 테이블들이 스위핑의 시작 시에 캐시에 상주하지 않을 경우, 상당한 성능 오버헤드들을 발생시킬 수 있다.
b) 스위핑에서 제외될 수 있는 페이지들의 수
- 허가 비트들은 컴파일 시간에 이용가능한 정보에 의존할 가능성이 있고, 따라서 과도하게 허가될 수 있음;
- 더티 비트들은 더 동적이지만, 시간 경과에 따라 허가 비트들과 동일한 페이지 수에 근접할 수 있는데, 즉, 시간 경과에 따라 페이지에 대한 캐패빌리티 저장 가능성이 증가한다. 스위핑들 동안 더티 비트들을 소거하는 것이 가능하지만, 더 이상 어떠한 캐패빌리티들도 포함하지 않는다고 알려진 페이지들만이 소거될 수 있다.
c) 스위핑들 동안 스톱-더-월드해야 하는 것을 피하기 위해 소프트웨어로 정보를 제공함
- 스위핑들 동안 병렬 스레드들 또는 인터럽트들을 허용하기 위해, 이전에 스위핑된 메모리에 대한 오래된 캐패빌리티들의 기입을 검출하거나 금지할 수 있다
- 스위핑된 페이지들에 대한 캐패빌리티 기입들을 일시적으로 금지하는 데 페이지 허가들을 사용할 수 있다. 그러나, 이는 또한 상기 영역들에의 정규 캐패빌리티들의 기입들에 영향을 미칠 것이다. 그들 경우들을 구별하기 위해 예외 처리기들이 요구될 수 있다.
- 더티 비트들은 단지 어떠한 캐패빌리티들도 보유하지 않는 페이지들에 대해서만 소거될 수 있으므로, 그들은 단지 오래된 캐패빌리티들의 기입을 추적하는 데에는 적합하지 않다.
따라서, 위에서 논의된 접근법들은 성능에 상당한 영향을 준다. 대조적으로, 도 1 및 도 2에 도시된 바와 같이, 아래에서 논의되는 접근법은 캐패빌리티 기입 어드레스 추적 구조(100) 내에서 캐패빌리티 기입 동작들의 대상인 어드레스들을 추적할 수 있는, 캐패빌리티 기입 어드레스 추적 회로부(20)를 하드웨어로 제공한다. 캐패빌리티 기입 어드레스 추적 회로부(20)는 도 1에 도시된 바와 같은 다수의 프로세서 코어들(4) 사이에 공유될 수 있거나, 도 2에 도시된 바와 같은 개개의 프로세서 코어 내에 제공될 수 있거나, 또는 일부 추적 하드웨어는 공유되고 다른 하드웨어가 각각의 코어(4)에 대해 별도로 제공되는 이들 접근법들의 하이브리드일 수 있다. 캐패빌리티 기입 어드레스 추적 구조(100) 자체는 전용 하드웨어 저장 유닛일 수 있거나, 또는 실제로는 메모리 시스템 내에 저장되고 캐패빌리티 기입 어드레스 추적 회로부(20)에 의해 유지되는 데이터 구조일 수 있다. 캐패빌리티 기입 어드레스 추적 회로부(20)는 캐패빌리티 기입 동작들(캐패빌리티를 캐패빌리티 레지스터들(70)로부터 메모리로 기입하기 위한 동작들)의 어드레스들의 추적이 인에이블되는지 또는 디스에이블되는지를 제어하는 인에이블 레지스터(102)뿐만 아니라, 메모리 시스템 내에 저장된 추적 구조를 사용하는 구현예들에서, 메모리 내의 추적 구조의 위치를 식별할 수 있는 다수의 추적 메타데이터 레지스터들(104)과 연관될 수 있다. 예를 들어, 메타데이터 레지스터들(104)은 추적 구조의 시작 어드레스를 식별하는 기초 어드레스(106) 및 다음 엔트리가 기입될 추적 구조 내의 지점을 마킹(marking)하는 카운터 레지스터(108)를 포함할 수 있다. 또한, 메타데이터 레지스터들은, 오버플로우들을 방지하기 위해, 어드레스 추적 구조에 대해 허가되는 최대 크기를 특정할 수 있는 제한 레지스터(110)를 포함할 수 있다. 다양한 레지스터들(102, 104)이 소프트웨어에 의해 업데이트가능할 수 있다.
따라서, 추적 회로부(20)를 하드웨어로 제공함으로써, 이는 스톱-더-월드 스위핑들에 대한 필요성을 피함으로써 해지 스위핑들을 가속화하는 것을 도울 수 있다. 해지 스위핑 동안 메모리에 대한 캐패빌리티 기입들이 추적된다. 스위핑의 종료 시에, 이러한 추적 정보는 선택적으로 재스위핑하는 데, 다른 스레드들에 의해 또는 스위핑 프로세스에 대한 인터럽트들 동안 기입된 오래된 캐패빌리티들의 위치를 알아내는 데 사용될 수 있다. 일부 예들에서, 캐패빌리티 기입 어드레스 추적은 TLB들(52)을 사용할 수 있다. 예를 들어, 해지 스위핑들 밖에서, TLB는 캐패빌리티 기입들을 추적하지 않을 수 있다. 스위핑의 시작 시, 캐패빌리티 기입들의 추적이 인에이블될 수 있다. 스위핑 동안, TLB(52)는 어드레스들의 대응하는 페이지에 대한 캐패빌리티 기입에 대해 더티 비트를 설정할 수 있고, 더티 비트의 0에서 1로의 전이 시에, 메타데이터 레지스터들(104)에 의해 식별되는 어드레스들에서 메모리 내에 유지되는 구조(100) 내에 더티 페이지의 어드레스 및 ASID를 기록할 수 있다. 스위핑 알고리즘은 메모리에 어떠한 유효 캐패빌리티들도 자체적으로 기입하지 않으며; 따라서, 이는 어떠한 더티 비트들도 설정하지 않을 것이다 - 설정된 임의의 더티 비트들은 다른 스레드들(스위핑 알고리즘과 병렬로 실행되고 있을 수 있거나 스위핑 알고리즘의 인터럽트 동안 실행될 수 있음)에 의해 수행되는 캐패빌리티 기입들에 의해 야기될 수 있음. 스위핑의 종료 시에, 스위핑 알고리즘은 캐패빌리티 기입 어드레스 추적 구조(100)를 검사하고, 더티로 표시된 페이지들을 선택적으로 재스위핑하여, 다른 스레드들에 의해 또는 인터럽트들 동안 기입된 오래된 캐패빌리티들의 위치를 알아내어 그들을 무효화하고, 추적 구조(100)에서 그들의 기록을 소거할 수 있다. 선택적으로, 후속적인 재스위핑들을 피하도록 오래된 캐패빌리티들의 추가 기입들을 금지하기 위해, 스위핑 알고리즘은, 재스위핑 동안, 캐패빌리티 기입들을 금지하도록 저장 캐패빌리티 허가들을 설정하거나, 다른 스레드들의 프로세싱을 중단하기 위해 스톱-더-월드 접근법을 사용할 수 있다.
도 5는 캐패빌리티 기입들에 의해 "더티"된 페이지들을 추적하기 위해 채용될 수 있는 하드웨어에 대한 예들을 예시한다. TLB(52) 내의 TLB 엔트리들은 각각 더티 비트(캐패빌리티-기입됨 표시자)(120)를 저장하도록 확장될 수 있다. 이러한 비트(120)는 페이지 테이블들에 전달되지 않으며, 따라서 그것은 그러한 테이블들과 연관된 이미 큰 오버헤드들에 영향을 주지 않는다(TLB 엔트리가 더티 비트들(120)을 저장하는 TLB의 마지막 레벨로부터 축출될 때, 더티 비트는 단순히 폐기될 수 있음)는 것에 주의한다. 도 5의 결정 박스(122)에 도시된 바와 같이, 더티 비트들(120)의 업데이트는, 캐패빌리티 저장소들의 추적을 소프트웨어에 의해 선택된 소정의 기간들로, 예컨대, 소프트웨어가 오래된 캐패빌리티 해지 스위핑을 수행하고 있을 때로 제한하도록, 인에이블 제어 레지스터(102)에 의해 인에이블/디스에이블될 수 있다(소프트웨어에 의해 설정됨). 따라서, 캐패빌리티 기입들을 추적하지 않을 때는, 이전에 더티되지 않은 주어진 페이지에 대한 캐패빌리티 기입이 존재하더라도, 더티 비트는 설정되지 않을 것이다. 또한, 도 5의 결정 박스(124)에 도시된 바와 같이, 비-캐패빌리티 데이터를 기입하는 유형의 주어진 페이지에 대한 기입들은 더티 비트(120)가 설정되게 하지 않을 것이다 - 추적은, 캐패빌리티가 메모리 내의 대응하는 위치에 기입되는 것을 요청하는 캐패빌리티 기입 동작들에 특정됨.
또한, 어드레스들의 주어진 페이지에 대한 더티 비트(120)를 0으로부터 1로 전이할 때, 대응하는 페이지의 어드레스 및 그것의 ASID가 캐패빌리티 기입 어드레스 추적 구조(100)에 기록된다. ASID들을 반드시 기록해야 하는 것은 아니지만, 이는 스위핑된 프로세스에 의해 사용되는 것들을 에일리어싱하는 상이한 ASID와 연관된 페이지들의 일부 불필요한 재스위핑들을 소프트웨어가 피할 수 있게 하는 데 유용할 수 있다.
도 5는 더티된 페이지들에 대한 어드레스/ASID 정보를 기록하는 데 사용될 수 있는 캐패빌리티 기입 어드레스 추적 구조들(100)에 대한 2개의 예들을 예시한다. 이들 실시예들은 대안적인 것이며 - 둘 다를 제공할 필요는 없다.
도 5의 상단 예는, 기초 어드레스 레지스터(104) 및 카운터 레지스터(108)를 사용하여 순차적으로 정보를 기록하는 더티 페이지 버퍼를 도시한다. 캐패빌리티 기입 추적이 인에이블될 때, 새로운 페이지(대응하는 TLB 엔트리에서 이전에는 더티로 표시되지 않았음)가 캐패빌리티 기입 동작에 의해 더티될 때마다, 캐패빌리티 기입 어드레스 추적 회로부(20)는 기초 레지스터(104) 내의 기초 어드레스에 소정의 수의 주어진 크기의 증분들을 가산하여 획득되는 어드레스 "Dst"에서의 엔트리에 더터 페이지의 ASID 및 페이지 어드레스를 기입하는데, 여기서 증분들의 수는 카운터 레지스터(108)에 기초하여 선택된다. 버퍼가 메모리에 보유될 수 있기 때문에, 계산된 어드레스 Dst가 제한을 초과하는 경우에 예외를 시그널링함으로써, 제한 레지스터(110)를 사용하여 오버플로우들을 피한다. 예외에 응답하여, 예외 처리기는 운영 체제 또는 다른 감독 코드에 트랩핑(trapping)할 수 있고, 다음 중 임의의 것을 포함하는 다양한 버퍼 오버플로우 처리 반응들을 트리거할 수 있다: (i) (가능하게는 버퍼 바로 다음의 메모리 영역으로부터 상이한 부분의 어드레스 공간으로 데이터를 이동시킨 후) 더티 페이지 버퍼에 대해 이용가능한 공간을 확대하도록 제한 레지스터(110)를 업데이트함; (ii) 이전에 할당된 버퍼보다 큰 크기의, 더티 페이지 버퍼에 대한 새로운 메모리 블록을 할당하고, 현재 더티 페이지 버퍼의 엔트리들을 새롭게 할당된 메모리 블록에 복사하고, 이어서 기초 어드레스(106) 및 제한 레지스터들(110)을 새롭게 할당된 메모리 블록에 대응하게 업데이트함; 또는 (iii) 다음에는 스위핑이 수행되고 있는 동안 더 적은 캐패빌리티 기입들이 일어날 수 있기를 바라면서, 스위핑 소프트웨어가 그의 스위핑을 다시 시작하게 함. 메타데이터 레지스터들(104) 및 버퍼 콘텐츠들(100)은 단지 특권이 주어진 소프트웨어, 예컨대, 해지 코드에 의해서만 액세스가능하도록 한정될 수 있다. 이는, 예를 들어, 해지 코드 밖에서는 공유되지 않은 버퍼를 포함하는 데이터 캐패빌리티를 사용하고, 해지 코드를 포함하는 코드 캐패빌리티 내의 허가들(80)에 특권 비트를 설정함으로써 보장될 수 있다.
합리적인 빠른 해지 스위핑들을 가정하면, 다수의 스레드들이 동일한 코어 상에서 실행될 가능성은 없다. 따라서, 도 5에 도시된 바와 같이 ASID들을 각각의 버퍼 엔트리와 함께 저장하는 것은 비효율적일 수 있다. 대안으로서, 더티 페이지 버퍼(100)는 캐패빌리티 기입에 의해 더티된 각각의 페이지 어드레스를 기록할 수 있지만, 이전에 캐패빌리티 기입에 보이지 않았던 고유한 ASID들만이 ASID 목록에 추가되면서, 더 작은 ASID 목록이 유지될 수 있다. 대안적으로, 정확한 ASID 목록 대신, 단일 레지스터가 블룸 필터를 사용하여 모든 관찰된 ASID들을 추적할 수 있다(더티 페이지 버퍼 내의 더티된 페이지 어드레스들의 정확한 목록과는 별개임). 이는 감소된 메모리 오버헤드들과 거짓 긍정들의 가능성 사이에 균형을 맞춘다.
도 5의 상부에 도시된 더티 페이지 버퍼 접근법으로, 이는 일부 이점들을 제공할 수 있다:
Figure pct00002
카운터가 마지막 유효 엔트리의 인덱스(카운터 - 1)를 결정하는 데 사용될 수 있고, 따라서 각각의 엔트리와 함께 유효성 비트가 필요로 되지 않음;
Figure pct00003
어드레스 컴퓨테이션(computation) 및 카운터 업데이트 둘 모두를 위해 하나의 가산기가 사용될 수 있으므로, 하드웨어 복잡도가 제한됨;
Figure pct00004
메모리에 대한 기입들을 처리하는 데 MMU(50) 내의 TLB 회로부를 재사용함;
Figure pct00005
어드레스 식별의 정밀도가 높아져, 소프트웨어가 단지 캐패빌리티 기입들에 의해 더티된 것으로 알려진 페이지들만을 재스위핑하면 될 것이다.
도 5의 하부는 페이지 버퍼에 대한 대안으로서 블룸 필터를 사용하는 대안적인 접근법을 도시한다. 버퍼와 마찬가지로, 그것은 더티 비트들의 0으로부터 1로의 전이들 시에 업데이트되지만, 페이지 어드레스 및 ASID의 해시(hash)를 사용하고, 해시의 결과에 대응하는 블룸 필터의 임의의 비트들이 설정된다(아직 설정되지 않은 경우에). 이는 어드레스들의 덜 정확한 추적을 제공한다. 어느 페이지들을 재스위핑할지 결정하기 위해 추적 구조(100)를 판독할 때, 스위핑 소프트웨어는, 블룸 필터 표현에 대해 히트(hit)하는 임의의 페이지 어드레스가(즉, 페이지 어드레스의 해시가, 해시 값 내의 1의 모든 비트들이 블룸 필터 표현에 설정된 비트들과 매칭하는 것에 대한 값을 제공함) 캐패빌리티 기입에 의해 더티된 페이지들 중 하나일 수 있다고 가정할 수 있다. 이는, 실제로 캐패빌리티 기입에 의해 더티되지 않은 페이지가, 그의 어드레스의 해시가 다른 페이지들에의 캐패빌리티들의 기입들에 응답하여 설정된 비트들의 조합에 대해 에일리어싱함으로 인해, 더티된 것으로 검출되는 일부 거짓 긍정들을 포함할 수 있다. 그러한 거짓 긍정들이 때때로 (일부 페이지들을 불필요하게 재스위핑하는 성능 비용의 관점에서) 비용이 많이 들 수 있지만, 그 위험은 사용되는 해싱 알고리즘 및 더티된 페이지들의 어드레스들의 분포에 따르며, 다음과 같은 다른 이점들을 가능하게 하기 위해, 이러한 위험은 수용가능할 수 있다:
Figure pct00006
감소된 하드웨어 복잡도 (그것은 단지 간단한 해시 및 OR 회로부만을 요구하고, 전체 가산기들 또는 메모리 액세스들을 요구하지 않기 때문에)
Figure pct00007
버퍼 오버플로우들의 위험 없이, 무제한의 수의 페이지들을 처리할 수 있음;
Figure pct00008
시스템 메모리를 사용하지 않음
Figure pct00009
엔트리들의 수를 증가시킬 예외들이 불필요함
Figure pct00010
복제(duplicate)들에 의해 영향을 받지 않음(동일한 TLB 엔트리가 축출되고 재페치되고 다시 더티되는 경우, 복제들을 제거하기 위한 일부 프로세싱을 요구하거나 불필요한 재스위핑들에서 성능을 낭비하는 복제 엔트리들의 위험이 있는 더티 페이지 버퍼와는 달리, 페이지의 어드레스에 기초하여 블룸 필터를 다시 업데이트하는 것은, 재스위핑을 필요로 하는 것으로 식별되는 페이지들 또는 구조의 크기를 변경하지 않음).
제시된 예들에 대한 많은 다른 대안들이 존재한다. 예를 들어, 두 예들 모두가 페이지 어드레스들의 해시에 의해 인덱싱되는 테이블 구조로 조합될 수 있다. 이어서, 각각의 엔트리는 그것으로 에일리어싱하는 모든 페이지들을 표현하기 위해 블룸 필터를 보유할 수 있다. 이는 런타임 시 버퍼들을 성장시킬 필요성을 완화시키고 거짓 긍정들의 위험을 감소시킨다. 대안적으로, 블룸 필터들 대신 링크된 목록을 각각의 엔트리와 함께 사용하는 것은 거짓 긍정들의 위험을 제거할 수 있지만, 또한 구조의 복잡도를 증가시킬 것이다. 해지 스위핑 동안 더티되는 페이지들의 수는 작을 가능성이 있으므로, 전술된 제한된 버퍼 크기는 중요한 인자일 가능성이 없다는 것에 유의한다.
멀티-코어 환경들의 맥락에서, 해지 스위핑들은 이전에 스위핑된 메모리에의 오래된 캐패빌리티들의 기입들을 금지하거나 검출하고, 현재 스위핑되고 있는 페이지들에 대한 적법한 액세스들을 처리하고, 다른 코어들에 관련된 레지스터들 및 다른 메모리 구조들 내에 보유된 오래된 캐패빌리티들의 위치를 알아낼 필요가 있을 수 있다. 위에서 논의된 더티 페이지 추적 구조들은, 다른 스레드들을 구축할 필요 없이, 이전에 스위핑된 메모리에의 오래된 캐패빌리티들의 기입들을 검출할 수 있게 한다. 그들이 그러한 기입들을 - 금지하기 보다는 오히려 - 단지 검출만을 하므로, 더티 페이지들은 재스위핑될 필요가 있을 수 있다. 후속적인 반복들에 대한 필요성을 피하기 위해, 알고리즘은 재스위핑들 동안 스톱-더-월드할 수 있다. 대안적으로, 그것은 스위핑된 페이지들의 "캐패빌리티 저장 가능" 허가 비트들을 일시적으로 소거할 수 있다. 따라서, 그들 페이지들에 캐패빌리티들을 기입하려고 시도하는 병렬 스레드들은 OS에 트랩핑할 것이다. 대응하는 예외 처리기는 스위핑을 알 필요가 있을 것이다. 스위핑들 밖에서, 그것은 적법한 페이지 허가 위반들을 처리할 것이다. 스위핑 동안, 그것은, 스위핑이 완료될 때까지, 그것의 복귀를 지연시키거나 스레드로 즉시 복귀할 수 있다. 후자는 문제가 있는 캐패빌리티 저장소의 리플레이(replay)를 트리거하여, 원래의 페이지 허가들을 복원함으로써 스위핑이 완료될 때까지 추가의 예외 이벤트들을 발생시킬 것이다. 더 복잡한 처리기들은 진행 중인 스위핑들 동안에도 스레드들이 계속되게 허용할 수 있다.
제안된 추적 구조들은 코어들 사이에 공유되거나 각각의 개별적인 코어에 대해 리플리케이팅(replicatinig)될 수 있다. 초기에 페이지들을 더티하게 하는 것이 드물다고 간주되므로, 코어들 사이에 연관된 하드웨어 오버헤드들을 공유하는 것은 실현가능할 수 있다. 리플리케이팅된 구조들의 경우, 현재 동작되고 있는 프로세스와 관련되지 않은 구조들을 스킵하도록, ASID들이 스위핑 알고리즘에 의해 사용될 수 있다. 전술한 바와 같이, ASID들의 제공은 선택적이다.
소프트웨어가 다른 코어의 레지스터들에 보유된 오래된 캐패빌리티들을 소거하는 한 가지 방식은, 그들의 ASID에 기초하여 관련 스레드들을 식별하고, 콘텍스트 스위치(context switch)를 트리거하고, 메모리 내의 스워핑-아웃된(swapped-out) 레지스터들의 콘텐츠들을 평가하는 것이다. 이들 콘텍스트 스위치들은 해지 스위핑들의 종료 시에, 즉, 일단 모든 오래된 캐패빌리티들이 메모리로부터 제거되면, 수행될 수 있다. 이는 스위치-아웃된 스레드들로의 즉각적인 복귀를, 그들이 메모리로부터 오래된 캐패빌리티들을 취출할 수 있는 위험 없이, 허용할 것이다.
도 5의 예가 TLB 내의 더티 페이지들의 추적을 도시하지만, 캐패빌리티 기입의 대상인 어드레스들의 블록들을 추적하기 위한 다른 유형의 캐시(예컨대, L1 데이터 캐시(54))를 사용하는 것이 또한 가능하다. 또한, 일부 예들에서는, 캐패빌리티 기입의 대상인 어드레스들을 추적하는 데 더티 비트(120)를 사용하는 것이 전혀 필요로 되지 않을 수 있는데 - 이들 예들에서, 캐패빌리티 기입 어드레스 추적이 인에이블될 때의 주어진 어드레스에의 캐패빌리티 기입 시에, 추적 회로부(20)는, 동일한 어드레스에 대한 캐패빌리티 기입이 이전에 이미 행해졌었는지 여부에 관계없이, 단순히 캐패빌리티 기입 어드레스 추적 구조(100)를 업데이트할 수 있다. 예를 들어, 블룸 필터 예에서는, 동일한 어드레스에 대해 구조를 여러 번 중복하여 업데이트하는 것의 단점이 적을 수 있으므로, 더티 비트들(120)을 검사하는 오버헤드가 필요한 것으로 간주되지 않을 수 있다. 한편, 더티 페이지 버퍼 예에 대하여, 더티 비트들(120)의 사용은 복제 엔트리들이 버퍼에 할당될 가능성을 감소시키는 데 매우 유용할 수 있다.
도 6은 위에서 논의된 유형의 캐패빌리티 기입 어드레스 추적 구조(100)를 사용하여 오래된 캐패빌리티들에 대한 스위핑들을 수행하는 방법을 도시하는 흐름도를 도시한다. 도 6에 도시된 방법은 오래된 캐패빌리티들을 발견하기 위해 메모리의 스위핑들을 수행하는 역할을 하는 소프트웨어에 의해 수행되는 단계들을 도시한다. 도 6의 방법은, 다양한 프로세서 코어들(4)로부터 검출된 캐패빌리티 기입 요청들에 응답하여, 하드웨어가 백그라운드(background)에서 수행하고 있을 수 있는, 캐패빌리티 기입 어드레스 추적 구조(100)의 업데이트와 같은, 동작들은 도시하지 않는다.
단계(200)에서, 선택적으로, 캐패빌리티 스위핑 소프트웨어가, 예를 들어, 캐패빌리티 기입 어드레스 추적 구조(100)로부터 모든 어드레스들과, TLB 또는 캐패빌리티 기입 동작들의 대상이었던 페이지들에 마킹을 하는 데 사용되는 다른 캐시 내의 모든 더티 비트들을 소거함으로써, 캐패빌리티 기입 어드레스 추적 구조(100)를 재설정할 수 있다. 캐패빌리티 기입 어드레스 추적 구조가 이미 소거되었다고 보장될 수 있는 경우, 예를 들어, 소프트웨어가 캐패빌리티 기입 어드레스 추적 구조(100)를 사용한 후 그것을 항상 소거하는 경우, 재설정 동작은 필요하지 않을 수 있다. 또한, (캐패빌리티 기입 어드레스 추적 구조가 그것을 할당한 결과 소거될 수 있었던 메모리의 영역인 구현예들에서) 소프트웨어가 완전 새로운 캐패빌리티 기입 어드레스 추적 구조(100)를 할당하여 그 추적 구조를 처음으로 사용할 경우, 단계(200)의 재설정은 필요하지 않을 수 있다.
단계(202)에서, 스위핑 소프트웨어는 캐패빌리티 기입 어드레스 추적 회로부(20)에 의한 캐패빌리티 기입 어드레스 추적을 인에이블하도록 인에이블 레지스터(102)를 설정하기 위한 명령어를 실행한다. 따라서, 이제 캐패빌리티 기입 어드레스 추적 회로부(20)는, 그것이 대응하는 페이지 상에서 수행되는 캐패빌리티 기입 동작을 검출할 때, TLB(52) 내의 엔트리들을 더티로서 마킹하기 시작할 것이고, 임의의 그러한 더티 페이지들의 어드레스들을 캐패빌리티 기입 어드레스 추적 구조(100)에 기입한다(또는 대안적으로, 예를 들어, 위에서 논의된 바와 같은 블룸 필터를 사용하여 캐패빌리티 기입들의 대상인 페이지들의 어드레스들의 부정확한 표현을 업데이트함). 이러한 캐패빌리티 기입 어드레스 추적은, 스위핑이 진행 중인 동안, 백그라운드에서 계속될 것이다.
단계(204)에서, 오래된 캐패빌리티들을 발견하기 위한 메모리 어드레스 공간의 스위핑이 시작된다. 단계(204)에서, 스위핑될 다음 메모리 어드레스 영역이 스위핑 소프트웨어에 의해 판독되고, 그러한 메모리 어드레스 영역의 콘텐츠들이 이용가능해지면, 단계(206)에서, 소프트웨어가 판독된 어드레스 영역이 오래된 캐패빌리티를 저장하는지 여부를 검사한다. 여기서, 캐패빌리티는, 그의 유효 태그(82)가 설정된 경우, 오래된 것으로 간주되고, 캐패빌리티에 대해 특정된 범위 정보(76, 78)는 해지의 대상인 어드레스 영역들의 해지 목록에 특정된 하나 이상의 메모리 어드레스 영역들 중 임의의 것과 중첩한다. 이러한 해지 목록은, 메모리의 영역들이 운영 체제에 의해 할당해제될 때 업데이트될 수 있었지만, 어드레스 영역이 할당해제될 때마다 스위핑의 성능 비용을 발생시키는 것을 피하기 위해, 오래된 캐패빌리티들에 대한 스위핑은 충분한 수의 영역들이 나열될 때까지 연기될 수 있다. 판독된 메모리 어드레스 영역이 오래된 캐패빌리티를 저장하는 경우, 단계(208)에서, 오래된 캐패빌리티는 그것의 태그 값(82)을 소거함으로써 무효화된다. 판독된 메모리 어드레스 영역이 어떠한 오래된 캐패빌리티도 저장하지 않는 경우 단계(208)는 생략된다. 단계(210)에서, 소프트웨어는 여전히 스위핑될 적어도 하나 이상의 메모리 어드레스 영역이 존재하는지 여부를 검사하고, 존재한다면, 방법은 단계(204)로 복귀하여 결국 요구되는 메모리 어드레스 영역들 모두가 스위핑될 때까지 단계(204) 내지 단계(210)를 돈다.
일단 스위핑될 메모리 어드레스 영역들이 없으면, 방법은 단계(212)로 진행한다. 스위핑 프로세스가 이전에 스위핑된 메모리 어드레스 영역들이 임의의 오래된 캐패빌리티들을 저장하는지 여부를 검사하기 위해 그들 영역들을 이미 검사한 후에, 다른 스레드들 또는 프로세서 코어들이 그 영역들에 캐패빌리티들을 기입했을 위험이 있으므로, 메모리 어드레스 공간은 여전히 일부 오래된 캐패빌리티들을 포함할 수 있는 위험이 있으며, 따라서 오래된 캐패빌리티들에 대해, 캐패빌리티 기입 어드레스 추적 구조(100)에 의해 표시된 어드레스 영역들을 검사하기 위해, 선택적인 재스위핑이 수행될 수 있다. 그러나, 재스위핑 동안 추가의 캐패빌리티 기입들이 수행되지 않는 것을 보장하기 위해, 단계(212)에서, 재스위핑을 수행하기 전에, 스위핑 소프트웨어가 캐패빌리티 기입 동작들이 재스위핑된 메모리 상에서 수행되지 못하게 하기 위한 액션을 취한다. 이는 상이한 방식들로 행해질 수 있다. 일례는 간단히, 다른 코어들에서의 모든 프로세싱이 중단되는 "스톱-더-월드" 접근법을 사용하는 것일 수 있다. 그러나, "스톱-더-월드" 접근법은 성능에 영향을 주지만, 이는 단지 캐패빌리티 기입 어드레스 추적 구조(100) 내에 표시된 적은 수의 메모리 어드레스 영역들의 재스위핑 동안에만 사용되고 있으므로, 이는, 단계(204) 내지 단계(210)의 전체 메인 스위핑 루프 동안 스톱-더-월드했을 경우 보다 성능에 훨씬 적게 영향을 줄 것이다. 대안적으로, 다른 코어들에서의 프로세싱을 중단하기 보다, 소프트웨어는 스위핑된 메모리 어드레스 공간에 대한 메모리 허가들을, 그들이 재스위핑하는 동안 일시적으로 캐패빌리티들을 저장하는 데 사용될 수 없음을 나타내도록 업데이트할 수 있다.
단계(214)에서, 더 이상 캐패빌리티 기입 동작들을 추적할 필요가 없기 때문에, 스위핑 프로세스는 또한 인에이블 레지스터(102)를 소거함으로써 캐패빌리티 기입 어드레스 추적을 디스에이블한다.
단계(216)에서, 스위핑 소프트웨어는 이어서 캐패빌리티 기입 어드레스 추적 구조(100)에 표시된 임의의 메모리 어드레스 영역들을 재스위핑하고, 그들 영역들에서 발견되는 임의의 오래된 캐패빌리티들을 무효화한다. 단계(216)는 자체적으로 메인 스위핑 동작을 위해 수행되는 단계(204) 내지 단계(210)와 유사한 루프를 포함할 수 있지만, 그 루프는, 그것이 캐패빌리티 기입 어드레스 추적 구조(100)에 표시된 바와 같은 단지 선택된 영역들만을 검사하기 때문에, 전형적으로 메인 루프보다 더 작은 반복들을 많이 반복할 필요가 있을 것임이 이해될 것이다. 위에서 논의된 바와 같은 더티 페이지 버퍼가 사용되는 예에서, 일단 주어진 영역이 재스위핑되었으면, 캐패빌리티 기입 어드레스 추적 구조의 대응하는 부분이 소거될 수 있다. 블룸 필터 또는 다른 부정확한 표현의 경우, 재스위핑은, 그 어드레스에 대한 필터 표현을 질의할 때, 캐패빌리티 기입 어드레스 추적이 수행되었던 기간 동안 실제로 캐패빌리티 기입 동작들의 대상이 아니었던 일부 거짓 긍정 어드레스들을 포함할 수 있는 히트(hit)를 생성하지만 그럼에도 불구하고 그들의 어드레스들이 다른 어드레스들에 대한 캐패빌리티 기입 동작들의 결과로서 설정된 필터 표현 내의 비트들의 패턴들에 대해 에일리어싱하기 때문에 재스위핑되는 임의의 어드레스들을 커버할 수 있다.
일단 재스위핑 프로세스(216)가 완료되면, 단계(218)에서, 스위핑 소프트웨어는, 예를 들어, 다른 프로세서 코어들에서의 프로세싱을 재개함으로써 또는 캐패빌리티들이 스위핑된 메모리 영역들에 저장되도록 다시 한번 허용하기 위해 "캐패빌리티 저장 가능" 허가를 업데이트함으로써, 스위핑된 메모리에 대한 캐패빌리티 기입 동작들을 재인에이블할 수 있다.
단계(212)는 선택적이고, 대안적인 접근법은, 메모리의 재스위핑 동안 캐패빌리티 기입들을 금지하기보다는, 재스위핑 동안 캐패빌리티 기입 어드레스 추적은 인에이블된 채로 유지될 수 있으면서, 재스위핑이 완료되기 전, 어떠한 추가적인 어드레스들도 캐패빌리티 기입 어드레스 추적 구조(100)에 기록되지 않았던 시간까지 재스위핑 프로세스(216)의 다수의 반복들이 수행될 수 있는 것일 것이다.
캐패빌리티 기입 어드레스 추적이 인에이블될 때 메인 스위핑 또는 재스위핑 중 어느 하나를 수행하는 동안, 캐패빌리티 기입 어드레스 추적 구조(100)는 제한 레지스터(110)에 의해 특정된 최대 용량에 도달하거나 이를 초과하는 경우, 예외가 트리거될 수 있다. 이어서, 예외 처리기는 다른 방식들로 그 예외에 응답할 수 있다. 예외 처리기가 메타데이터 레지스터들(104)을 업데이트하고 추적 구조(100)를 위한 추가적인 메모리 공간을 할당할 수 있거나, 또는 다음에 스위핑 프로세스 동안 더 적은 캐패빌리티 기입 동작들이 발생할 수 있기를 희망하면서, 예외 처리기가 단순히 도 6의 스위핑 프로세스를 시작에서부터 재개되게 할 수 있다.
따라서, 요약하면, 캐패빌리티 기입 동작들의 대상이었던 선택된 어드레스들을 식별할 수 있는 추적 정보를 유지하기 위해 캐패빌리티 기입 어드레스 추적 회로부(20)를 하드웨어로 제공함으로써, 이는 전체 메모리 어드레스 공간의 메인 스위핑 동안 스위핑 소프트웨어가 스톱-더-월드할 필요가 없다는 것을 의미하며, 이는 성능을 매우 개선시킬 수 있다.
도 7은 사용될 수 있는 시뮬레이터 구현예를 예시한다. 전술된 실시예들은 관심 기법들을 지원하는 특정 프로세싱 하드웨어를 동작시키기 위한 장치 및 방법들과 관련하여 본 발명을 구현하지만, 컴퓨터 프로그램의 사용을 통해 구현되는 본 명세서에서 기술되는 실시예들에 따라 명령어 실행 환경을 제공하는 것이 또한 가능하다. 그러한 컴퓨터 프로그램들은, 그들이 하드웨어 아키텍처의 소프트웨어 기반 구현예를 제공하는 한, 종종 시뮬레이터들로 지칭된다. 다양한 시뮬레이터 컴퓨터 프로그램들은 에뮬레이터들, 가상 머신들, 모델들, 및 동적 이진 변환기(dynamic binary translator)들을 포함한 이진 변환기들을 포함한다. 전형적으로, 시뮬레이터 구현예는 호스트 프로세서(330) 상에서 구동되어, 호스트 운영 체제(320)를 선택적으로 구동하여, 시뮬레이터 프로그램(310)을 지원할 수 있다. 일부 배열물들에서, 하드웨어와 제공된 명령어 실행 환경 사이에 다수의 시뮬레이션 층들이 있을 수 있고/있거나, 동일한 호스트 프로세서 상에 제공된 다수의 별개의 명령어 실행 환경들이 있을 수 있다. 이력상, 강력한 프로세서들이 합리적인 속도로 실행되는 시뮬레이터 구현예들을 제공하는 데 요구되었지만, 그러한 접근법은 호환성 또는 재사용 이유들을 위해 다른 프로세서에 고유한 코드를 구동하려는 요구가 있을 때와 같은 소정 상황들에서 정당화될 수 있다. 예를 들어, 시뮬레이터 구현예는 호스트 프로세서 하드웨어에 의해 지원되지 않는 추가적인 기능성을 명령어 실행 환경에 제공할 수 있거나, 또는 상이한 하드웨어 아키텍처와 전형적으로 연관된 명령어 실행 환경을 제공할 수 있다. 시뮬레이션의 개요가 문헌["Some Efficient Architecture Simulation Techniques", Robert Bedichek, Winter 1990 USENIX Conference, Pages 53 - 63]에서 주어진다.
실시예들이 특정 하드웨어 구성물들 또는 특징부들을 참조하여 전술되었음을 고려한 결과로, 시뮬레이션된 실시예에서, 동등한 기능성이 적합한 소프트웨어 구성물들 또는 특징부들에 의해 제공될 수 있다. 예를 들어, 특정 회로부는 시뮬레이션된 실시예에서 컴퓨터 프로그램 로직으로서 구현될 수 있다. 유사하게, 레지스터 또는 캐시와 같은 메모리 하드웨어가 시뮬레이션된 실시예에서 소프트웨어 데이터 구조로서 구현될 수 있다. 전술된 실시예들에서 언급된 하드웨어 요소들 중 하나 이상의 하드웨어 요소들이 호스트 하드웨어(예를 들어, 호스트 프로세서(330)) 상에 존재하는 배열물들에서, 일부 시뮬레이션된 실시예들은, 적합한 경우, 호스트 하드웨어를 사용할 수 있다.
시뮬레이터 프로그램(310)은 컴퓨터 판독가능 저장 매체(이는 비일시적 매체일 수 있음) 상에 저장될 수 있고, 타깃 코드(300)(이는 애플리케이션들, 운영 체제들, 및 하이퍼바이저를 포함할 수 있음)에 프로그램 인터페이스(명령어 실행 환경)를 제공하는데, 이는 시뮬레이터 프로그램(310)에 의해 모델링되는 하드웨어 아키텍처의 애플리케이션 프로그램 인터페이스와 동일하다. 따라서, 전술된 바와 같은 캐패빌리티들과 상호작용하는 명령어들을 포함하는, 타깃 코드(300)의 프로그램 명령어들은 시뮬레이터 프로그램(310)을 사용하여 명령어 실행 환경 내로부터 실행되어, 위에서 논의된 장치(2)의 하드웨어 특징부들을 실제로 갖지 않는 호스트 컴퓨터(330)가 이들 특징부들을 에뮬레이팅할 수 있게 할 수 있다.
시뮬레이터 코드(310)는, 타깃 코드(300)의 프로그램 명령어들을 디코딩하고 그들을 호스트 하드웨어(330)의 고유한 명령어 세트에 정의된 대응하는 명령어 세트들에 맵핑하는 명령어 디코딩 프로그램 로직(312)을 포함할 수 있다. 또한, 시뮬레이터 코드(310)는 시뮬레이팅되고 있는 타깃 아키텍처의 레지스터들(38, 102, 104)을 에뮬레이팅하는 호스트 하드웨어의 메모리 내의 데이터 구조들을 관리하는 레지스터 에뮬레이팅 프로그램 로직(314)을 포함할 수 있다. 또한, 전술된 캐패빌리티 검사 회로부(86)를 에뮬레이팅하는 캐패빌리티 유효성 검사 프로그램 로직(316)이 제공되어, 그것의 범위(76, 78) 및 허가들(80)이 주어진 경우, 캐패빌리티의 요청된 사용이 허용되는지 여부가 검사될 수 있다. 또한, 추적이 인에이블될 때, 메모리에의 캐패빌리티들의 기입들을 검출하고 캐패빌리티 기입 추적 구조를 유지하여 어느 페이지들이 캐패빌리티 기입들의 대상이었는지의 표시를 제공하는, 캐패빌리티 기입 어드레스 추적 프로그램 로직(318)이 제공될 수 있다. 따라서, 시뮬레이터 코드(310)는 전술된 하드웨어 구현 예의 것들과 동등한 구조적인 특징부들을 타깃 코드에 제공할 수 있으며, 따라서 타깃 코드가 캐패빌리티 기입 어드레스 추적 회로부(20)를 갖는 장치 상에서 실행되는 경우와 같이, 또 다시 타깃 코드가 호스트 데이터 프로세싱 장치(자체적으로 캐패빌리티 기입 어드레스 추적 회로부를 가질 수 없음) 상에서 동일한 방식으로 오래된 캐패빌리티들에 대한 스위핑을 수행할 수 있게 된다.
본 출원에서, "...하도록 구성된"이라는 말은 장치의 요소가 정의된 동작을 수행할 수 있는 구성을 갖는다는 것을 의미하는 데 사용된다. 이러한 문맥에서, "구성"은 하드웨어 또는 소프트웨어의 상호연결의 배열 또는 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가질 수 있거나, 프로세서 또는 다른 프로세싱 디바이스가 기능을 수행하도록 프로그래밍될 수 있다. "하도록 구성된"은, 장치 요소가, 정의된 동작을 제공하기 위해 어떤 방식으로든 변경될 필요가 있음을 암시하지는 않는다.
본 발명의 예시적인 실시예들이 첨부 도면들을 참조하여 본 명세서에 상세히 설명되었지만, 본 발명은 그러한 정확한 실시예들로 제한되지 않는다는 것 그리고 첨부된 청구범위에 의해 정의되는 바와 같은 본 발명의 범주로부터 벗어나지 않으면서 당업자에 의해 다양한 변경들, 및 수정들이 이루어질 수 있다는 것이 이해될 것이다.

Claims (21)

  1. 장치로서,
    캐패빌리티(capability)의 사용이 하나 이상의 사용-제한 조건들을 충족하는지 여부를 결정하기 위해 캐패빌리티 검사 동작을 수행하기 위한 캐패빌리티 검사 회로부 - 상기 캐패빌리티는 포인터 및 상기 하나 이상의 사용-제한 조건들을 특정하는 포인터-사용-제한 정보를 포함하고, 상기 하나 이상의 사용-제한 조건들은 상기 포인터에 대한 어드레스들의 허용 범위를 적어도 포함함 -; 및
    캐패빌리티가 캐패빌리티 기입 타깃 어드레스(capability write target address)와 연관된 메모리 위치에 기입되는 것을 요청하는 캐패빌리티 기입 요청에 응답하여, 캐패빌리티 기입 어드레스 추적이 인에이블(enable)될 때, 상기 캐패빌리티 기입 타깃 어드레스에 기초하여 캐패빌리티 기입 어드레스 추적 구조를 업데이트하기 위한 캐패빌리티 기입 어드레스 추적 회로부를 포함하는, 장치.
  2. 제1항에 있어서, 상기 캐패빌리티 기입 어드레스 추적이 인에이블되는지 또는 디스에이블(disable)되는지를 나타내는 캐패빌리티 기입 어드레스 추적 인에이블 표시를 저장하기 위한 인에이블 저장 요소를 포함하는, 장치.
  3. 제2항에 있어서, 상기 캐패빌리티 기입 요청에 응답하여, 상기 캐패빌리티 기입 어드레스 추적 인에이블 표시가 캐패빌리티 기입 어드레스 추적이 디스에이블됨을 나타낼 때, 상기 캐패빌리티 기입 어드레스 추적 회로부는 상기 캐패빌리티 기입 요청의 캐패빌리티 기입 타깃 어드레스에 기초하여 상기 캐패빌리티 기입 어드레스 추적 구조를 업데이트하는 것을 생략하도록 구성되는, 장치.
  4. 제2항 또는 제3항에 있어서, 프로그램 명령어들을 실행하기 위한 프로세싱 회로부를 포함하고,
    상기 캐패빌리티 기입 어드레스 추적 인에이블 표시는 상기 프로세싱 회로부에 의해 실행되는 프로그램 명령어에 응답하여 상기 프로세싱 회로부에 의해 업데이트가능한, 장치.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서, 복수의 엔트리(entry)들을 갖는 캐시 구조를 포함하고, 각각의 엔트리는 대응하는 메모리 어드레스 영역과 연관된 캐싱된 정보를 저장하고,
    상기 캐패빌리티 기입 요청에 응답하여, 상기 캐패빌리티 기입 어드레스 추적 구조가 상기 캐패빌리티 기입 타깃 어드레스에 기초하여 업데이트될 때, 상기 캐패빌리티 기입 어드레스 추적 회로부는 상기 캐패빌리티 기입 타깃 어드레스를 포함하는 메모리 어드레스 영역에 대응하는 상기 캐시 구조의 엔트리에 캐패빌리티-기입됨 표시자(capability-written indicator)를 설정하도록 구성되는, 장치.
  6. 제5항에 있어서, 상기 캐패빌리티 기입 요청에 응답하여, 캐패빌리티 기입 어드레스 추적이 인에이블되고 상기 캐패빌리티 기입 타깃 어드레스가, 대응하는 캐시 엔트리가 이미 상기 캐패빌리티-기입됨 표시자가 설정된 메모리 어드레스 영역에 대응할 때, 상기 캐패빌리티 기입 어드레스 추적 회로부는 상기 캐패빌리티 기입 타깃 어드레스에 기초하여 상기 캐패빌리티 기입 어드레스 추적 구조를 업데이트하는 것을 생략하도록 구성되는, 장치.
  7. 제5항 또는 제6항에 있어서, 상기 캐시 구조는 메모리 내의 페이지 테이블 구조로부터 도출된 어드레스 변환 정보를 저장하기 위한 어드레스 변환 캐시를 포함하는, 장치.
  8. 제7항에 있어서, 상기 어드레스 변환 캐시로부터 상기 캐패빌리티-기입됨 표시자가 설정된 엔트리를 축출할 때, 상기 어드레스 변환 캐시는 상기 캐패빌리티-기입됨 표시자를 메모리 내의 상기 페이지 테이블 구조에 다시 기입하지 않고 상기 캐패빌리티-기입됨 표시자를 폐기하도록 구성되는, 장치.
  9. 제1항 내지 제8항 중 어느 한 항에 있어서, 복수의 소프트웨어 프로세스들 중 하나로부터의 명령어들을 프로세싱하기 위한 프로세싱 회로부를 포함하고, 각각의 소프트웨어 프로세스는 대응하는 실행 콘텍스트 식별자(execution context identifier)와 연관되고,
    캐패빌리티 기입 어드레스 추적이 인에이블될 때, 상기 캐패빌리티 기입 어드레스 추적 회로부는 하나 이상의 캐패빌리티 기입 요청들과 연관된 하나 이상의 실행 콘텍스트 식별자들을 추적하기 위해 실행 콘텍스트 식별자 추적 정보를 유지하도록 구성되는, 장치.
  10. 제1항 내지 제9항 중 어느 한 항에 있어서, 프로그램 명령어들을 실행하기 위한 프로세싱 회로부를 포함하고,
    캐패빌리티 기입 어드레스 추적 재설정 명령어에 응답하여, 상기 프로세싱 회로부는 상기 캐패빌리티 기입 어드레스 추적 구조를 재설정하도록 구성되는, 장치.
  11. 제1항 내지 제10항 중 어느 한 항에 있어서, 상기 캐패빌리티 기입 어드레스 추적 구조는 메모리와 별개인 하드웨어로 제공되는 저장 유닛을 포함하는, 장치.
  12. 제1항 내지 제10항 중 어느 한 항에 있어서, 상기 캐패빌리티 기입 어드레스 추적 구조는 메모리에 저장된 데이터 구조를 포함하는, 장치.
  13. 제12항에 있어서, 적어도 하나의 추적 메타데이터 저장 요소를 포함하고, 상기 적어도 하나의 추적 메타데이터 저장 요소는,
    상기 캐패빌리티 기입 어드레스 추적 구조의 기초 어드레스;
    상기 캐패빌리티 기입 어드레스 추적 구조의 업데이트될 다음 엔트리의 표시; 및
    상기 캐패빌리티 기입 어드레스 추적 구조에 대한 최대 허가 크기를 나타내는 제한 표시 중 적어도 하나를 저장하는, 장치.
  14. 제1항 내지 제13항 중 어느 한 항에 있어서, 상기 캐패빌리티 기입 어드레스 추적 구조는, 캐패빌리티 기입 어드레스 추적이 인에이블될 때 수신된 하나 이상의 캐패빌리티 기입 요청들의 하나 이상의 캐패빌리티 기입 타깃 어드레스들을 정확하게 추적하는, 장치.
  15. 제1항 내지 제14항 중 어느 한 항에 있어서, 상기 캐패빌리티 기입 어드레스 추적 구조는, 캐패빌리티 기입 어드레스 추적이 인에이블될 때 수신된 하나 이상의 캐패빌리티 기입 요청들의 하나 이상의 캐패빌리티 기입 타깃 어드레스들을 부정확하게 추적하고, 따라서 상기 캐패빌리티 기입 어드레스 추적 구조의 질의가, 상기 하나 이상의 캐패빌리티 기입 타깃 어드레스들 이외의 어드레스가 상기 하나 이상의 캐패빌리티 기입 타깃 어드레스들 중 하나로 잘못 식별되도록 허용할 수 있는, 장치.
  16. 제1항 내지 제15항 중 어느 한 항에 있어서, 상기 캐패빌리티 기입 어드레스 추적 구조가 용량 제한에 도달했다고 검출하는 것에 응답하여, 상기 캐패빌리티 기입 어드레스 추적 회로부는 예외의 시그널링을 트리거(trigger)하도록 구성되는, 장치.
  17. 제1항 내지 제16항 중 어느 한 항에 있어서, 복수의 프로세서 코어들을 포함하고,
    상기 캐패빌리티 기입 어드레스 추적 구조는 상기 복수의 프로세서 코어들 사이에서 공유되는, 장치.
  18. 방법으로서,
    캐패빌리티의 사용이 하나 이상의 사용-제한 조건들을 충족하는지 여부를 결정하기 위해 캐패빌리티 검사 동작을 수행하는 단계 - 상기 캐패빌리티는 포인터 및 상기 하나 이상의 사용-제한 조건들을 특정하는 포인터-사용-제한 정보를 포함하고, 상기 하나 이상의 사용-제한 조건들은 상기 포인터에 대한 어드레스들의 허용 범위를 적어도 포함함 -; 및
    캐패빌리티가 캐패빌리티 기입 타깃 어드레스와 연관된 메모리 위치에 기입되는 것을 요청하는 캐패빌리티 기입 요청에 응답하여, 캐패빌리티 기입 어드레스 추적이 인에이블될 때, 상기 캐패빌리티 기입 타깃 어드레스에 기초하여 캐패빌리티 기입 어드레스 추적 구조를 업데이트하는 단계를 포함하는, 방법.
  19. 타깃 코드를 실행하기 위한 명령어 실행 환경을 제공하기 위해 호스트 데이터 프로세싱 장치를 제어하기 위한 컴퓨터 프로그램으로서,
    캐패빌리티의 사용이 하나 이상의 사용-제한 조건들을 충족하는지 여부를 검사하기 위해 캐패빌리티 검사 동작을 수행하기 위한 캐패빌리티 검사 프로그램 로직(logic) - 상기 캐패빌리티는 포인터 및 상기 하나 이상의 사용-제한 조건들을 특정하는 포인터-사용-제한 정보를 포함하고, 상기 하나 이상의 사용-제한 조건들은 상기 포인터에 대한 어드레스들의 허용 범위를 적어도 포함함 -; 및
    캐패빌리티가 캐패빌리티 기입 타깃 어드레스와 연관된 메모리 위치에 기입되는 것을 요청하는 캐패빌리티 기입 요청에 응답하여, 캐패빌리티 기입 어드레스 추적이 인에이블될 때, 상기 캐패빌리티 기입 타깃 어드레스에 기초하여 캐패빌리티 기입 어드레스 추적 구조를 업데이트하기 위한 캐패빌리티 기입 어드레스 추적 프로그램 로직을 포함하는, 컴퓨터 프로그램.
  20. 방법으로서,
    하나 이상의 캐패빌리티 기입 요청들의 캐패빌리티 기입 타깃 어드레스들을 추적하기 위해 캐패빌리티 기입 어드레스 추적 구조에 의한 캐패빌리티 기입 어드레스 추적을 인에이블링하는 단계 - 캐패빌리티 기입 요청은 상기 캐패빌리티 기입 요청에 의해 특정된 캐패빌리티 기입 타깃 어드레스와 연관된 메모리 위치에 캐패빌리티를 기입하기 위한 요청을 포함하고, 상기 캐패빌리티는 포인터 및 상기 포인터에 대한 어드레스들의 허용 범위를 적어도 포함하는 하나 이상의 사용-제한 조건들을 특정하는 포인터-사용-제한 정보를 포함함 -;
    오래된(stale) 캐패빌리티들을 무효화하도록 메모리를 스위핑(sweeping)하는 단계 - 상기 오래된 캐패빌리티들은 상기 어드레스들의 허용 범위가 어드레스들의 하나 이상의 타깃 영역들과 중첩하는 캐패빌리티들을 포함함 -; 및
    상기 메모리를 스위핑한 후, 하나 이상의 선택된 메모리 어드레스 영역들에 저장된 오래된 캐패빌리티들을 무효화하기 위해, 상기 캐패빌리티 기입 어드레스 추적 구조에 의해 추적된 어드레스들에 대응하는 상기 하나 이상의 선택된 메모리 어드레스 영역들을 재스위핑하는 단계를 포함하는, 방법.
  21. 제20항의 방법을 수행하기 위해 데이터 프로세싱 장치를 제어하기 위한 컴퓨터 프로그램.
KR1020227008120A 2019-08-16 2020-06-24 캐패빌리티 기입 어드레스 추적 KR20220045211A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1911780.3 2019-08-16
GB1911780.3A GB2586276B (en) 2019-08-16 2019-08-16 Capability write address tracking
PCT/GB2020/051525 WO2021032943A1 (en) 2019-08-16 2020-06-24 Capability write address tracking

Publications (1)

Publication Number Publication Date
KR20220045211A true KR20220045211A (ko) 2022-04-12

Family

ID=68072834

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227008120A KR20220045211A (ko) 2019-08-16 2020-06-24 캐패빌리티 기입 어드레스 추적

Country Status (6)

Country Link
US (1) US11609863B2 (ko)
JP (1) JP2022544384A (ko)
KR (1) KR20220045211A (ko)
CN (1) CN114222981A (ko)
GB (1) GB2586276B (ko)
WO (1) WO2021032943A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2592069B (en) * 2020-02-17 2022-04-27 Advanced Risc Mach Ltd Address calculating instruction
US11995459B2 (en) * 2020-08-25 2024-05-28 VMware LLC Memory copy during virtual machine migration in a virtualized computing system
US11972010B2 (en) * 2021-07-28 2024-04-30 Oracle International Corporation Securely connecting isolated managed heaps
US20230061154A1 (en) * 2021-08-25 2023-03-02 Nvidia Corporation Implementing hardware-based memory safety for a graphic processing unit
US20230342289A1 (en) * 2022-04-21 2023-10-26 Arm Limited Apparatus and method for managing capabilities
CN117651021B (zh) * 2024-01-25 2024-04-30 苏州萨沙迈半导体有限公司 过滤器及其控制方法和装置、电气设备

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB1548401A (en) * 1975-10-08 1979-07-11 Plessey Co Ltd Data processing memory space allocation and deallocation arrangements
GB2060225B (en) * 1979-09-29 1983-05-25 Plessey Co Ltd Multi-programming data processing system process suspension
US6594752B1 (en) * 1995-04-17 2003-07-15 Ricoh Company, Ltd. Meta-address architecture for parallel, dynamically reconfigurable computing
US9378138B2 (en) * 2011-06-29 2016-06-28 International Business Machines Corporation Conservative garbage collection and access protection
US10162694B2 (en) * 2015-12-21 2018-12-25 Intel Corporation Hardware apparatuses and methods for memory corruption detection
US10168923B2 (en) * 2016-04-26 2019-01-01 International Business Machines Corporation Coherency management for volatile and non-volatile memory in a through-silicon via (TSV) module
US10733089B2 (en) * 2016-07-20 2020-08-04 Micron Technology, Inc. Apparatuses and methods for write address tracking
GB2562062B (en) * 2017-05-02 2019-08-14 Advanced Risc Mach Ltd An apparatus and method for managing capability metadata

Also Published As

Publication number Publication date
US11609863B2 (en) 2023-03-21
CN114222981A (zh) 2022-03-22
JP2022544384A (ja) 2022-10-18
GB201911780D0 (en) 2019-10-02
US20210232511A1 (en) 2021-07-29
GB2586276B (en) 2022-03-30
GB2586276A (en) 2021-02-17
WO2021032943A1 (en) 2021-02-25

Similar Documents

Publication Publication Date Title
US11609863B2 (en) Capability write address tracking
KR20180033467A (ko) 진보된 오퍼레이팅 시스템 지원을 갖는 프로세서
TW202030615A (zh) 範圍檢查指令
US11474956B2 (en) Memory protection unit using memory protection table stored in memory system
EP3881189B1 (en) An apparatus and method for controlling memory accesses
US11907301B2 (en) Binary search procedure for control table stored in memory system
KR20230017832A (ko) Tag 체킹 장치 및 방법
TWI787451B (zh) 用於資料處理的方法、設備、電腦程式、與儲存器媒體
CN116368465A (zh) 用于使用能力约束对存储器的访问的技术
JP7369720B2 (ja) アクションをトリガするための装置及び方法
US11853228B1 (en) Partial-address-translation-invalidation request
US20230342289A1 (en) Apparatus and method for managing capabilities
CN112449698B (zh) 用于数据处理的装置、方法和计算机存储介质
TW202340955A (zh) 使用能力約束記憶體存取之技術
TW202319913A (zh) 用於使用能力限制對記憶體存取之技術
Bhattacharjee et al. The Virtual Memory Abstraction
TW202318210A (zh) 用於處理密封能力之技術