KR20200131855A - 태그 보호된 메모리 시스템에 대한 랜덤 태그 설정 명령 - Google Patents

태그 보호된 메모리 시스템에 대한 랜덤 태그 설정 명령 Download PDF

Info

Publication number
KR20200131855A
KR20200131855A KR1020207029112A KR20207029112A KR20200131855A KR 20200131855 A KR20200131855 A KR 20200131855A KR 1020207029112 A KR1020207029112 A KR 1020207029112A KR 20207029112 A KR20207029112 A KR 20207029112A KR 20200131855 A KR20200131855 A KR 20200131855A
Authority
KR
South Korea
Prior art keywords
tag
value
random
values
address
Prior art date
Application number
KR1020207029112A
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 KR20200131855A publication Critical patent/KR20200131855A/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
    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • 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/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0853Cache with multiport tag or data arrays
    • 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/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • 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]
    • 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/1466Key-lock mechanism
    • G06F12/1475Key-lock mechanism in a virtual system, e.g. with translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • G06F21/79Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators
    • G06F7/582Pseudo-random number generators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)
  • Radar Systems Or Details Thereof (AREA)

Abstract

장치는, 처리회로(4)와, 관련된 어드레스 태그를 갖는 태그 검사 타겟 어드레스에 대해, 어드레스 태그와, 타겟 어드레스에 의해 식별된 어드레스 지정된 위치를 포함하는 한 개 이상의 메모리 위치들의 블록과 관련하여 메모리 시스템에 기억된 보호 태그를 비교하는 과정을 포함하는 보호 태그 검사를 행하는 메모리 액세스 회로(15)와, 태그 설정 타겟 어드레스를 지정하는 랜덤 태그 설정 명령에 응답하여, 처리회로(4)를 제어하여, 태그 설정 타겟 어드레스와 관련된 어드레스 태그를 후보 태그값들의 집합으로부터 랜덤하게 선택된 랜덤 태그값으로 설정하게 하는 명령 디코더(6)를 구비한다.

Description

태그 보호된 메모리 시스템에 대한 랜덤 태그 설정 명령
데이터 처리장치에 의해 실행할 소프트웨어는 보통 고급 프로그래밍 언어로 작성된 후, 소프트웨어가 실행될 장치에 의해 지원된 명령 세트 아키텍처에 따라 코드로 컴파일된다. 예를 들어, 소프트웨어는 원래 Java, C 또는 C++ 등의 고급 언어로 작성된 후 x86 또는 ARM(등록상표) 등의 원시적으로 지원된 명령 세트 아키텍처로 컴파일된다.
Java 등의 일부 고급 프로그래밍 언어는 메모리 액세스와 관련된 특정한 에러를 검사하는 실행 시간 에러 검출 검사를 포함하기 때문에 메모리 보안(memory-safe) 언어로 생각된다. 이에 반해, C 및 C++ 등의 메모리 비보안 언어는 이와 같은 실행 시간 에러 검사를 포함하지 않는다. 메모리 비보안 언어의 이용의 지속되는 보급은, 지정된 명령 세트 아키텍처에 따른 컴파일된 코드에서, 공격자 또는 다른 악의적인 당사자에 의해 이용당하기 쉬운 다수의 메모리 관련 에러가 존재한다는 것을 의미한다. 이와 같은 에러는 다음의 것을 포함한다:
· 코드에 의해 주어진 어레이 색인이 어레이의 적법한 경계 외부에 놓이는 경계 위반;
· 메모리 위치가 이미 할당이 해제되거나 비워진 후에 메모리 위치에 대한 액세스가 행해지는 use-after-free 에러;
· 함수로부터 이미 반환된 후에 함수 내에서 사용된 변수(스택 상의 값 등)와 관련된 어드레스에 대한 메모리 액세스가 행해지는 use-after-return
· 변수들이 선언된 범위를 벗어나 변수들이 액세스되는 use-out-of-scope 에러
· 변수가 초기화되기 전에 변수와 관련된 메모리 어드레스가 액세스되는 use-before-initialization 에러.
이것들은 예측불가능한 거동을 발생하며 잠재적으로 공격자가 이용할 수 있는 길을 제공할 수 있는 메모리 관련 에러의 몇가지 에에 지나지 않는다. 이 때문에, 주어진 처리장치에 의해 지원된 명령 세트 아키텍처 내에서, 특정한 부류의 메모리 에러의 런타임 검출을 돕기 위한 아키텍처 지원을 제공하는 것이 바람직하다.
적어도 일부 실시예는, 처리회로와, 관련된 어드레스 태그를 갖는 태그 검사 타겟 어드레스에 대해, 상기 어드레스 태그와, 상기 타겟 어드레스에 의해 식별된 어드레스 지정된 위치를 포함하는 한 개 이상의 메모리 위치들의 블록과 관련하여 메모리 시스템에 기억된 보호 태그를 비교하는 과정을 포함하는 보호 태그 검사를 행하는 메모리 액세스 회로와, 태그 설정 타겟 어드레스를 지정하는 랜덤 태그 설정 명령에 응답하여, 상기 처리회로를 제어하여, 상기 태그 설정 타겟 어드레스와 관련된 상기 어드레스 태그를 후보 태그값들의 집합으로부터 랜덤하게 선택된 랜덤 태그값으로 설정하게 하는 명령 디코더를 구비한 장치를 제공한다.
적어도 일부 실시예는, 관련된 어드레스 태그를 갖는 태그 검사 타겟 어드레스에 대해, 상기 어드레스 태그와, 상기 타겟 어드레스에 의해 식별된 어드레스 지정된 위치를 포함하는 한 개 이상의 메모리 위치들의 블록과 관련하여 메모리 시스템에 기억된 보호 태그를 비교하는 과정을 포함하는 보호 태그 검사를 행하는 단계와, 태그 설정 타겟 어드레스를 지정하는 랜덤 태그 설정 명령의 디코딩에 응답하여, 상기 태그 설정 타겟 어드레스와 관련된 상기 어드레스 태그를 후보 태그값들의 집합으로부터 랜덤하게 선택된 랜덤 태그값으로 설정하는 단계를 포함하는 방법을 제공한다.
적어도 일부 실시예는, 호스트 데이터 처리장치를 제어하여 타겟 프로그램 코드의 명령들의 실행을 위한 명령 실행 환경을 제공하는 컴퓨터 프로그램으로서, 관련된 어드레스 태그를 갖는 태그 검사 타겟 어드레스에 대해, 상기 어드레스 태그와, 상기 타겟 어드레스에 의해 식별된 어드레스 지정된 위치를 포함하는 한 개 이상의 메모리 위치들의 블록과 관련하여 메모리 시스템에 기억된 보호 태그를 비교하는 과정을 포함하는 보호 태그 검사를 행하는 메모리 액세스 프로그램 로직과, 태그 설정 타겟 어드레스를 지정하는 랜덤 태그 설정 명령에 응답하여, 상기 태그 설정 타겟 어드레스와 관련된 상기 어드레스 태그를 후보 태그값들의 집합으로부터 랜덤하게 선택된 랜덤 태그값으로 설정하는 태그 설정 프로그램 로직을 포함하는 컴퓨터 프로그램을 제공한다.
기억매체는 전술한 컴퓨터 프로그램을 기억한다. 기억매체는 비일시적인 기억매체일 수 있다.
이하, 다음의 첨부도면에 도시된 실시예를 참조하여 본 발명을 더욱 상세히 설명한다.
도 1은 데이터 처리장치의 일례를 개략적으로 나타낸 것이다.
도 2는 어드레스 태그가 보호 태그와 일치하는지 여부를 검사하는 과정을 포함하는 태그 보호된 메모리 액세스 동작의 일례를 나타낸 것이다.
도 3은 태그 보호된 메모리 액세스 동작을 행하는 방법을 나타낸 흐름도이다.
도 4는 랜덤 태그 설정 명령의 제1 실시예를 나타낸 것이다.
도 5는 후보 태그값들의 집합의 적어도 한 개의 제외된 값이 지정된 어드레스의 어드레스 태그에 할당할 랜덤 태그값으로부터 선택되는 것이 금지되는 랜덤 태그 설정 명령의 제2 실시예를 나타낸 것이다.
도 6은 제외된 값들의 적어도 일부를 표시하기 위한 랜덤 선택 상태 정보의 제1 실시예를 나타낸 것이다.
도 7은 랜덤 태그값의 추후의 선택으로부터 입력 어드레스의 어드레스 태그로부터 추출된 태그값이 제외될 것이라는 것을 표시하기 위해 랜덤 선택 상태 정보 내부의 비트필드의 비트를 갱신하기 위한 태그값 제외 명령의 일례를 나타낸 것이다.
도 8 내지 도 10은 적어도 한 개의 제외된 값이 선택되지 않게 제외하면서 후보값들의 집합으로부터 랜덤 태그값을 선택하는 예시적인 하드웨어 구현예를 나타낸 것이다.
도 11은 후보 태그값들의 부분집합의 값들과 이들 값 각각이 제외되는지 여부를 표시하는 대응하는 비트필드를 지정하는 랜덤 선택 상태 정보의 제2 실시예를 나타낸 것이다.
도 12는 후보 태그값들의 부분집합을 랜덤하게 선택된 값들로 채우기 위한 랜덤 태그 선택 명령의 일례를 나타낸 것이다.
도 13은 입력 어드레스의 어드레스 태그에 근거하여, 랜덤 선택 상태 정보로 표시된 후보 태그값들의 부분집합이 제외되어야 하는지 여부를 판정하기 위한 태그값 제외 명령의 제2 실시예를 나타낸 것이다.
도 14는 지정된 어드레스와 관련된 태그값을 도 11에 도시된 랜덤 선택 상태 정보에 근거하여 랜덤하게 선택된 값으로 갱신하기 위한 랜덤 태그 설정 명령의 또 다른 실시예를 나타낸 것이다.
도 15는 랜덤 태그 설정 명령을 처리하는 방법을 나타낸 것이다.
도 16은 랜덤 태그 설정 명령을 지원하는 시뮬레이터의 일례를 나타낸 것이다.
전술한 종류의 특정한 메모리 이용 에러를 방지하는 한가지 접근방법은 한 개 이상의 메모리 위치들의 블록들과 관련하여 메모리 시스템에 기억되는 보호 태그들을 설치하는 것이다. 메모리 시스템 내의 특정한 어드레스 지정된 위치를 식별하는 타겟 어드레스에 근거하여 태그 보호된 메모리 액세스 동작이 요구될 때, 보호 태그 검사가 행해진다. 보호 태그 검사시에, 메모리 액세스 회로는 타겟 어드레스와 관련되는 어드레스 태그를 타겟 어드레스에 의해 식별된 어드레스 지정된 위치를 포함하는 한 개 이상의 메모리 위치들의 블록과 관련하여 메모리 시스템에 기억되는 보호 태그와 비교한다. 메모리 액세스 회로는, 일부 실시예에서는, 보호 태그와 어드레스 태그 사이에 일치가 검출되는지 여부의 표시를 발생한다. 이와 같은 표시는, 메모리 액세스의 진행이 허용되는지 여부 또는 후속 동작들을 계속할 수 있는지 여부를 제어하는데 사용되거나, 또는 메모리 액세스가 평소대로 계속되도록 허용하면서 이 표시가 단순히 보고될 수도 있다.
이것은, 예를 들어, C 또는 C++ 등의 메모리 비보안 언어에 근거하여 코드를 컴파일하는 컴파일러가, 메모리의 영역들을 초기화할 때, 코드가 액세스할 것으로 예측되는 메모리의 블록들의 보호 태그들을 특정한 값들로 설정하며, 대응하는 어드레스 태그값들을 이들 블록을 가리키는 타겟 어드레스들과 관련시키기 때문에 유용할 수 있다. 메모리 이용 에러가 발생하고, 예를 들어, 어드레스 포인터가 범위를 벗어나 사용되거나 초기화된 유효한 범위의 경계들을 벗어나 확장되는 경우, 어드레스 지정된 위치와 관련된 보호 태그가 타겟 어드레스와 관련된 어드레스 태그와 일치하지 않을 가능성이 있으며, 이 경우 에러처리 응답이나 에러 보고 메카니즘을 기동할 수 있다. 취해지는 특정한 응답은 실행되고 있는 소프트웨어의 특정한 요구에 의존하거나 아키텍처의 특정한 마이크로 아키텍처 상 구현에 의존할 수 있다. 이 때문에, 고급 언어가 메모리 액세스 에러에 대해 보호하기 위해 실행 시간 에러 검사를 행하는 수단을 갖고 있지 않더라도, 컴파일된 코드에 대해 사용된 ISA가 이와 같은 검사를 행하는 아키텍처상 특징을 포함한다.
후술하는 기술에서, 데이터 처리장치는 태그 설정 타겟 어드레스를 지정하는 랜덤 태그 설정 명령을 지원하는 명령 디코더를 갖는다. 랜덤 태그 설정 명령에 응답하여, 명령 디코더는 처리회로를 제어하여 태그 설정 타겟 어드레스와 관련된 어드레스 태그를 후보 태그값들의 집합으로부터 랜덤하게 선택되는 랜덤 태그값으로 설정하게 한다.
이와 같은 형태의 명령은 다수의 이유로 인해 유용할 수 있다. 실제로, 메모리 위치들의 각 블록에 대해 보호 태그들을 기억하는 스토리지 오버헤드를 제한하기 위해, 각 보호 태그 내부의 비트들의 수가 비교적 작을 수 있는데, 예를 들어, 일부 구현예에서는 4비트이다. 태그 비트들의 수가 작을수록, 메모리의 블록을 액세스하도록 의도되지 않았더라도 동일한 보호 태그값을 갖는 이 메모리의 블록과 일치하는 일이 발생하기 때문에, 보호 태그 검사를 통과하는 잘못된 메모리 액세스의 가능성이 더 커진다. 예를 들어, 4비트 보호 태그에서는, 지정된 어드레스에 대한 잘못된 액세스로서 플래그가 실제로 붙여져야 하는 메모리의 영역에 대해 보호 태그와 우연하게 일치할 16분의 1의 가능성이 존재한다.
지정된 타겟 어드레스와 관련된 어드레스 태그를 후보 태그값들의 집합으로부터 랜덤하게 선택되는 랜덤 태그값으로 설정하는 명령을 제공함으로써, 이것은, 장치들의 클래스 각각이 동일한 코드를 실행하는 경우, 이들이 동일한 어드레스에 대해 서로 다른 랜덤한 태그값들을 할당한다는 것을 의미한다. 첫째로, 이것은, 클래스 내부의 한 개의 장치가 올바르지 않게 액세스되는 메모리의 영역과 일치하는 태그값을 우연히 선택하더라도, 이 클래스의 다른 장치들이 다른 값들을 랜덤 태그값으로서 선택하므로 보호 태그 불일치를 검출하여 에러를 보고할 수 있기 때문에 에러 검출을 향상시킬 수 있다. 이 때문에, 장치들의 클래스로부터 에러 보고서들을 크라우스소싱(crowdsourcing)함으로써, 클래스 내부의 적어도 일부 장치들이 프로그램 코드의 지정된 부분에 있는 어드레스들에 대해 사용된 랜덤하게 선택된 값들의 확산으로 인한 에러를 검출할 가능성이 있다. 이 때문에, 랜덤 태그 설정 명령의 사용은 장치들의 모집단에서 검출되고 있는 메모리 관련 에러들의 확률을 향상시킬 수 있다.
또한, 어드레스 태그에 할당할 값을 랜덤하게 선택함으로써, 공격자가 장치들의 큰 모집단에 대해 유용한 공격을 성공적으로 시작하는 것을 훨씬 곤란하게 만든다. 공격자가 한 개의 장치 상의 올바른 태그값을 우연히 추측할 수는 있더라도, 다른 장치들이 프로그램의 동일한 지점에서의 메모리 액세스들을 위해 이와 다른 랜덤하게 선택된 태그값들을 사용하므로, 공격자의 성공적인 공격이 다른 장치 상에서는 효과가 없을 수 있다. 이것은, 실제로, 유용한 공격을 시작하기 위해, 공격자가 단순히 한 개의 메모리 액세스의 보호 태그를 추측할 수 있을 필요가 있는 것이 아니라, 프로그램이 일부 바람직하지 않은 연산을 행하게 하거나 프로그램 코드의 작성자가 의도하지 않은 효과를 제공하기 위해 다수의 성공적인 추측들을 연속하게 결합할 필요가 있으므로, 특히 유용하다. 이 때문에, 일련의 메모리 할당 등 각각이 랜덤값들로 설정된 대응하는 어드레스 태그들을 갖는 경우, 각각의 성공적인 할당들에 대해 할당된 태그값들의 서로 다른 패턴들의 순열의 수가 증가하므로, 전체 장치 모집단이 지정된 집합의 메모리 할당들에 대해 다른 조합의 랜덤한 태그값들을 각각 갖는 다수의 더 작은 서브 모집단들로 분할되어, 공격을 훨씬 더 곤란하게 하고 성공적인 공격을 장치들의 모집단의 더 적은 부분집합으로 제한한다.
이때, 랜덤 태그 설정 명령이 지정된 타겟 어드레스와 관련된 어드레스 태그들을 설정하는 유일한 방법이 될 필요는 없다. 명령 디코더는, 타겟 어드레스와 관련된 어드레스 태그가 소프트웨어 그 자체에 의해 제공되고, 랜덤 태그 설정 명령에 대해 비확정적으로 하드웨어에 의해 랜덤하게 선택되는 것이 아니라, 확정적인(즉, 동일한 프로그램을 실행하는 모든 장치들에 걸쳐 동일한) 특정한 소프트웨어 정의된 값으로 설정되도록 허용하는 태그 설정 명령을 더 지원할 수도 있다. 이것은 소프트웨어 개발자들에게 랜덤 태그 설정 명령을 바람직하게 사용할 것인지 또는 고정값 태그 설정 명령을 바람직하게 사용할 것인지의 선택을 제공한다.
랜덤 태그 설정 명령의 일부 실시예에서는, 랜덤 태그값이 후보 태그값들의 전체 집합으로부터 랜덤하게 선택될 수도 있다. 예를 들어, N비트 태그값은 2N개의 다른 값들을 가질 수 있으므로, 랜덤 태그값이 이들 2N개의 값들 중에서 어느 것으로부터 랜덤하게 선택될 수도 있다.
그러나, 랜덤 태그 설정 명령의 한 개의 변종(variant)에 응답하여, 명령 디코더는 처리회로를 제어하여 후보 태그값들의 집합의 적어도 한 개의 제외된 값이 랜덤 태그값으로서 선택되는 것을 금지하고, 후보 태그값들의 나머지 부분집합으로부터 랜덤 태그값을 랜덤하게 선택하게 한다. 특정한 값들이 랜덤 태그값으로서 선택되지 않도록 제외한 후 나머지 부분집합으로부터 랜덤 태그값을 랜덤하게 선택할 수 있는 능력은 다수의 이유로 인해 유용할 수 있다. 첫째로, 일부 태그값들은 특수 용도를 위해 예약될 수도 있다. 예를 들어, 후보 집합의 한 개의 태그값이 다른 태그값과 일치하는 것으로 생각되는 "전부 일치(match all)" 값으로 예약될 수도 있다(예를 들어, 이것은 더 낮은 보안 요구사항을 갖는 특정한 메모리 액세스들의 어드레스들에 대한 보호 태그 검사를 유효하게 디스에이블시키는데 유용할 수도 있다). 따라서, "전부 일치" 거동이 부적절환 어드레스에 대해 어드레스 태그를 설정할 때, 랜덤 태그값으로 선택될 수 있는 후보 태그값들의 부분집합으로부터 "전부 일치" 값을 제외하는 것이 바람직할 수도 있다. 다른 특수한 태그값들이 할당될 수도 있다. 이 때문에, 일부 경우에, 적어도 한 개의 제외된 태그값은 하드웨어에 의해 고정되는 한 개 이상의 하드웨어 정의된 제외된 태그값들을 포함할 수도 있다. 다른 실시예에서는, 적어도 한 개의 제외된 태그값의 집합이 환경설정(configuration) 레지스터에 기억된 환경설정 데이터에 의해 식별된 한 개 이상의 제외된 태그값들을 포함할 수도 있다. 예를 들어, 장치의 일부 기능이 옵션이며, 환경설정 레지스터는 이와 같은 기능이 인에이블되는지 여부를 지정해도 된다. 어떤 특징들이 인에이블되는지에 따라, 특정한 태그값들이 제외될 필요가 있다. 예를 들어, 환경설정 레지스터는 전술한 "전부 일치" 기능이 인에이블될 것인지 또는 디스에이블될 것인지를 정의하여, 대응하는 전부 일치값이 선택으로부터 제외될 것인지를 선택할 수도 있다. 환경설정 레지스터는, 랜덤 태그 설정 명령 그 자체에 의해 지정되지 않는 레지스터, 예를 들어, 아키텍처 또는 처리장치에 의해 제공되는 상태 레지스터 또는 다른 제어 레지스터일 수도 있다.
다른 실시예에서는, 소프트웨어가 랜덤 태그값으로서 선택되지 않게 제외되는 후보 태그값들의 집합의 특정한 값들을 지정할 수 있도록 하는 것이 바람직할 수 있다. 예를 들어, 적어도 한 개의 제외된 태그값은 랜덤 태그 설정 명령에 의해 지정된 적어도 한 개의 레지스터에 의해 식별된 한 개 이상의 제외된 태그값들을 포함한다. 또한, 랜덤 태그 설정 명령의 명령 인코딩에 의해 직접 표시된 중간값으로서 제외된 태그값을 지정하는 랜덤 태그 설정 명령의 변종을 제공하는 것이 가능할 수도 있다. 또 다른 접근방법은, 랜덤 태그 설정 명령이 대응하는 어드레스 태그를 갖는 어드레스를 포함하는 소스 레지스터 또는 목적지 레지스터(또는 양쪽)를 지정하는 것일 수 있으며, 이 어드레스의 어드레스 태그의 태그값이 추출되어 적어도 한 개의 제외된 태그값 중에서 한 개인 것으로 결정된다.
소프트웨어가 어떤 값이 제외되어야 하는지 표시할 수 있도록 하기 위해 어떤 접근방법을 사용하는지에 무관하게, 소프트웨어가 메모리의 블록들의 연속된 할당들이 서로 다른 태그값들을 사용하도록 보장하는 것이 바람직하므로, 실제로 한 개의 메모리의 영역을 목표로 해야 하는 메모리 액세스가 다른 태그 할당과 관련된 다음 영역으로 흘러 넘치는 경우, 다른 보호 태그들이 이 경계 위반이 검출될 수 있게 할 것이기 때문에, 특정한 소프트웨어 정의된 값들이 선택되지 않게 제외할 수 있는 능력이 유용할 수 있다. 이 때문에, 메모리의 영역이 2개의 기존의 할당들 사이에서 할당되는 힙(heap)이나 다른 데이터 구조 상에 메모리를 할당하는 경우, 소프트웨어는, 새로운 할당에 대해 설정된 보호 태그가 이전의 할당과 관련된 보호 태그 및 다음의 할당과 관련된 보호 태그 모두와 다르도록 보장하기 원한다. 또 다른 실시예는, 이전에 스택 할당이 행해졌을 때 어드레스에 할당되었던 태그들의 값을 제외하는 것이 바람직한 스택 데이터 구조 상의 영역을 할당할 때이다.
일부 실시예는 제외된 값을 식별하는 이들 방법들 중에서 한 개만 허용해도 된다. 다른 실시예는, 이들 기술의 조합을 지원해도 되는데, 예를 들어, 명령이 일부 소프트웨어 정의된 제외된 태그값들을 지정해도 되지만, 일부 하드웨어 정의된 값들이 영구적으로 제외되거나, 또는 환경설정 레지스터에 의해 지정된 정보에 따라, 이와 같은 하드웨어 정의된 태그값들이 선택적으로 제외될 수도 있다.
적어도 한 개의 제외된 태그값의 적어도 일부가 랜덤 태그 설정 명령의 레지스터에 의해 식별되는 경우, 이 정보가 이 레지스터 내부에 다양한 방식으로 표시될 수 있다. 일반적으로, 랜덤 태그 설정 명령은 랜덤 선택 상태 정보를 기억하는 적어도 한 개의 소스 레지스터를 지정한다.
일 실시예에서, 랜덤 선택 상태 정보는 후보 태그값들의 집합의 적어도 부분집합에 대응하는 다수의 비트들을 포함하는 비트필드를 포함하고, 이 비트필드의 각각의 비트는 대응하는 후보 태그값이 적어도 한 개의 제외된 태그값의 집합의 한 개인지 여부를 표시한다. 비트필드의 비트들은 실행되고 있는 소프트웨어의 이전 명령들에 의해 설정되어도 된다.
어떤 경우에는 어떤 값들을 제외할 것인지에 따라 소프트웨어가 비트필드의 각각의 비트들의 값들을 직접 결정하는 것이 가능하지만, 이전에 할당된 어드레스 태그들에 의해 사용된 (그 자체가 소프트웨어에 의한 확정적인 선택이 아니라, 랜덤 선택을 통해 결정된) 특정한 값들을 제외하는 것이 바람직한 경우, 소프트웨어는 어떤 값들이 제외되어야 하는지를 사전에 알지 못할 수도 있다. 이 때문에, 명령 디코더가, 태그 제외 타겟 어드레스와 랜덤 선택 상태 정보의 비트필드를 기억하는 목적지 레지스터를 지정하는 태그값 제외 명령을 더 지원하는 것이 유용할 수 있다. 태그값 제외 명령에 응답하여, 명령 디코더는 처리회로를 제어하여, 대응하는 태그값이 적어도 한 개의 제외된 태그값의 집합 중 한 개를 표시하도록, 태그 제외 타겟 어드레스와 관련된 어드레스 태그에 대응하는 비트필드의 비트를 갱신하게 한다. 이것은, 프로그래머/컴파일러가, 추후의 랜덤 선택으로부터 제외되어야 하는 태그값을 갖는 어드레스들을 태그 제외 타겟 어드레스로서 지정하는 한 개 이상의 인스턴스들의 태그값 제외 명령을 포함시킬 수 있도록 한다. 이것은 제외할 값들에 대응하는 비트필드의 각각의 비트들이 채워지게 한 후, 후속하는 랜덤 태그 설정 명령이 비트필드를 사용하여 어드레스 태그의 랜덤 선택을 제어하여 태그 설정 어드레스로서 지정된 다른 어드레스에 대해 설정되게 한다.
일부 실시예에서, 랜덤 선택 상태 정보는 태그값들의 전체 집합에 대응하는 비트들을 포함할 수도 있다.
그러나, 다른 경우에는, 비트필드가 후보 태그값들의 진부분집합(proper subset)에 대한 비트들만을 포함할 수도 있다. 예를 들어, 특정한 후보 태그값들이 영구적으로 제외되는 것으로 하드웨어 정의된 경우, 이들 후보 태그값들에 대한 비트들을 제공할 필요가 없을 수 있다.
비트필드가 모든 가능한 후보 태그값들에 대한 비트를 포함하지 않을 수도 있는 또 다른 이유는, 전체 후보 집합 중에서 특정한 진부분집합의 후보 태그값들의 선택이 이미 이전의 명령에 의해 행해졌으며, 이에 따라 랜덤 선택 상태 정보가 이 진부분집합의 후보 태그값들로서 선택된 태그값들로 이루어진다는 것이다. 진부분집합의 후보 태그값들의 태그값들은 어떤 값들이 제외되는지를 나타내는 비트필드와 동일한 레지스터, 또는 다른 레지스터에 지정된다. 그러나, 랜덤 태그 설정 명령에 의해 필요한 레지스터 판독의 횟수를 줄이기 위해 태그값들과 비트필드를 동일한 레지스터에서 지정하는 것이 유용할 수 있다. 이와 같은 구현에서는, 명령 디코더가 랜덤 선택 상태 정보의 태그값들을 기억하는 목적지 레지스터를 지정하는 랜덤 태그 선택 명령을 지원한다. 랜덤 태그 선택 명령에 응답하여, 명령 디코더는 처리회로를 제어하여, (어떤 값들이 제외되는지 여부를 고려하지 않고) 후보 태그값들의 집합 중에서 후보 태그값들의 진부분집합을 랜덤하게 선택하며, 랜덤 선택 상태 정보를 기억하는 목적지 레지스터에 후보 태그값들의 선택된 진부분집합의 태그값들을 기록한다.
이와 같은 접근방법에 따르면, 특정한 제외된 값들을 제외하면서 랜덤 태그값을 선택하는 전체 연산이 다수의 별개의 명령들로 분할될 수 있으며, 이것은 하드웨어 구현을 간단하게 할 수 있다. 예를 들어, 이들 연산은, 랜덤 태그 선택 명령의 인스턴스와, (대응하는 어드레스들로부터 태그값들을 추출하고 이들 값이 제외된 것을 표시하기 위해 랜덤 선택 상태의 비트필드를 갱신하기 위해) 그후의 전술한 태그값 제외 명령의 한 개 이상의 인스턴스들과, 그후의 제외되지 않은 후보 태그값들의 진부분집합 중 한 개를 선택하는 랜덤 태그 설정 명령을 사용하여 구현된다. 예를 들어, 랜덤 선택 상태 정보가 T개의 후보 태그값들을 태그값들의 진부분집합으로서 표시하는 경우에, 이와 같은 접근방법은 최대 T-1개의 후보값들이 제외될 수 있도록 허용하므로, 랜덤 태그 설정 명령에 의해 랜덤 태그값으로서 여전히 선택될 수 있는 남아 있는 후보 태그값들의 진부분집합의 적어도 한 개가 항상 존재한다. 랜덤 태그 선택 명령은 어떤 값들이 제외되는지 여부를 고려할 필요가 없이 랜덤 소스에 근거하여 T개의 값들의 선택을 행하는 한편, 랜덤 태그 설정 명령과 태그값 제외 명령은 난수 소스를 고려할 필요가 없이 간단한 논리 연산 및/또는 선택용 멀티플렉서를 사용하여 구현되기 때문에, 이와 같은 접근방법은 하드웨어 구현을 단순화하여, 타이밍 요구에 부합하는 것을 더 간단하게 한다. 또한, 이와 같은 접근방법은, 명령당 필요한 소스 레지스터들의 개수를 제한할 수 있으므로, 일반적으로 레지스터 판독 포트들의 개수가 일반적인 마이크로프로세서 설계에서는 제한되므로 유용할 수 있다.
그렇지만, 다른 접근방법은, 난수 소스에 근거한 선택과, 동일한 명령에 응답하여 행해지는 일부 값들의 제외 모두를 지원하는 하드웨어 구현예를 제공한다. 이와 같은 경우에, 적어도 한 개의 제외된 값 이외의 나머지 후보값들 각각의 선택의 균등한 확률 분포를 여전히 확보하면서 하드웨어 효율적으로 명령을 구현함에 있어서 과제가 존재한다.
최대 N개의 제외된 태그값들의 제외를 지원하는 하드웨어 구현을 위한 한가지 접근방법에서, 명령 디코더는, 처리회로를 제어하여,
· 후보 태그값들의 집합의 적어도 N+1개의 태그값들을 랜덤하게 선택하고,
· 각각의 선택된 태그값들을 각각의 제외된 태그값들과 비교하고,
· 적어도 한 개의 제외된 태그값들 전체와 불일치하는 선택된 태그값들 중에서 한 개를 랜덤 태그값으로서 선택하여 태그 설정 타겟 어드레스와 관련된 어드레스로 설정한다.
예를 들어, N+1개의 랜덤한 값들의 선택이 특정한 값들의 의사 랜덤(pseudo random) 시퀀스를 정의하는 룩업표(look up table: LUT)를 사용하여 구현되고, 선형 피드백 시프트 레지스터(LFSR) 또는 기타 회로가 LUT에 의해 제공된 시퀀스의 어떤 부분이 추출되어 N+1개의 태그값들로서 사용될 것인지 선택하는데 사용될 수 있는 랜덤 시드(seed) 선택값을 제공한다. 제외되지 않는 N+1개의 태그값들 중에서 한 개를 선택하기 위해 비교 및 선택 단계들이 비교기, 논리 게이트 및 멀티플렉서를 사용하여 구현될 수 있다.
한 개의 랜덤 태그 설정 명령으로 전체의 선택/제외 연산을 행하면서 하드웨어를 구현하기 위한 또 다른 접근방법은, (하드웨어에 고정되거나 환경설정 레지스터에 근거하여 환경설정가능하지만, 랜덤 태그 설정 명령의 명령 인코딩에 무관하게 선택되는) 소정의 제외된 태그값과, 랜덤 태그 설정 명령에 의해 지정된 추가적인 제외된 태그값의 최대 2개의 값들이 랜덤 선택으로부터 제외될 수 있도록 하는 것이다. 이 경우, 랜덤 태그 설정 명령에 응답하여, 명령 디코더는 처리회로를 제어하여,
· 후보 태그값들의 집합 중에서 한 개를 선택된 태그값으로서 랜덤하게 선택하고,
· ° 선택된 태그값이 소정의 제외된 태그값과 후보 태그값들의 집합의 또 다른 소정의 태그값 모두와 불일치할 때, 선택된 태그값, 및
° 선택된 태그값이 소정의 태그값과 또 다른 태그값 중에서 한 개와 일치할 때, 선택된 태그값의 랜덤하게 선택된 비트를 반전하여 얻어진 값
중에서 한 개인 중간값과 추가적인 제외된 태그값의 비교를 행하고,
· 비교가 추가적인 제외된 태그값과 중간 값 사이의 불일치를 검출할 때, 중간값을 랜덤 태그값으로서 출력하여 태그 설정 타겟 어드레스와 관련된 어드레스 태그로 설정하고, 및
· 비교가 추가적인 제외된 태그값과 중간 값 사이의 일치를 검출할 때, 또 다른 소정의 태그값을 랜덤 태그값으로서 출력하여 태그 설정 타겟 어드레스와 관련된 어드레스 태그로 설정한다.
소정의 제외된 태그값과 마찬가지로, 이 또 다른 소정의 태그값은, 랜덤 태그 설정 명령 인코딩에 무관하게, 하드웨어에 미리 짜넣어지거나(고정되거나), 제어 레지스터에 의해 환경설정가능하다.
이 때문에, 랜덤한 갑을 선택하고, 선택된 값과 일치하거나, 또는 선택된 값이 소정의 제외된 태그값 또는 또 다른 소정의 태그값 중에서 한 개와 일치하는 경우 반전된 랜덤하게 선택된 비트를 갖는 중간 값을 출력함으로써, 중간 값이 소정의 제외된 태그값이나 또 다른 소정의 태그값과 결코 일치할 수 없고, 다른 값을 취할 수 있다. 그후, 중간 값을 추가적인 (소프트웨어 지정된) 제외된 태그값과 비교할 수 있으며, 이 비교에서 일치가 존재하는 경우, 또 다른 소정의 태그값이 중간값을 치환하여 최종 출력 랜덤 태그값을 제공하고, 그렇지 않은 경우에는 중간 값 그 자체가 출력 랜덤 태그값으로서 사용될 수 있다. 이와 같은 접근방법은, 단지 한 개의 랜덤한 값이 난수 소스에 근거하여 선택되어 제외된 값과 비교할 필요가 있어, 제외되지 않은 값들 사이에서 선택시에 비교적 균일한 확률 분포를 여전히 달성하면서, 비교기의 수와 선택(멀티플렉싱) 회로의 복잡성을 줄일 수 있으므로, 하드웨어 복잡성을 줄이는데 도움이 될 수 있다.
소정의 제외된 태그값과 또 다른 소정의 태그값은 후보 태그값들의 전체 집합의 임의의 2개의 구성요소일 수 있지만, 소정의 제외된 태그값과 또 다른 소정의 태그값 중에서 한 개가 모든 비트들이 0인 값이고 나머지가 모든 비트들이 1인 값(반대도 성립한다)인 것이 특히 유용할 수 있는데, 이것은 이것이 랜덤한 태그값으로서 선택되지 않는 "특수한" 태그값, 예를 들어, "전부 일치" 값의 유망한 이용에 매핑되기 때문이다. 일부 구현예에서, 소정의 제외된 태그값 및 또 다른 소정의 태그값으로서 정의된 값은, 미리 짜넣어지거나(영구적으로 고정되거나), 또는 이와 달리 환경설정 레지스터 내부의 상태 값(예를 들어, "전체 0" 및 "전체 1" 값들 중에서 어느 것이 제외된 값인지 선택하는 값)에 의해 정의될 수도 있다.
이 때문에, 상기한 내용으로부터, 처리회로의 실제 하드웨어가, 선택으로부터 적어도 한 개의 제외된 값을 제외하면서, 후보값들의 집합으로부터 랜덤 선택을 구현할 수 있는 다양한 다른 방법이 존재한다는 것을 알 수 있다. 이것은 한 개의 명령에 응답하여 또는 명령들의 시퀀스에 응답하여 행해질 수 있다. (증가된 에러 검출 확률과 전술한 공격에 대한 강건성을 갖는) 랜덤 태그 설정 명령의 아키텍처상 이점은 마이크로아키텍처 레벨에서 선택된 특정한 하드웨어 구현예 무관하게 달성될 수 있다.
후보 태그값들의 집합(또는 적어도 한 개의 제외된 값을 제외하는 후보 태그값들의 집합)으로부터 랜덤 선택은 실제 랜덤값이나 의사 랜덤값에 근거하여 행해질 수 있다. 이 때문에, 실제 난수 발생기를 설치하는 것은 전술한 기술을 위해 필수적이 아니라는 것을 알 수 있다. 일부 경우에, 랜덤 선택은 의사 난수 발생기에 근거하여 행해진다. 예를 들어, 랜덤 선택은 선형 피드백 시프트 레지스터로부터 추출된 값에 근거하여 행해질 수도 있다.
실제로, 지정된 어드레스와 관련된 어드레스 태그에 대해 지정된 랜덤한 값을 할당한 경우, 동일한 랜덤 태그값을 이 어드레스에 의해 식별된 어드레스 지정된 위치를 포함하는 메모리 위치들의 블록의 보호 태그에 기억하는 것이 바람직한 경우가 많다. 일부 구현예에서, 이것은 랜덤 태그 설정 명령과 별개의 명령에 의해 행해진다. 예를 들어, 후속하는 보호 태그 설정 명령이, 랜덤 태그 설정 명령에 의해 어드레스 태그가 이전에 설정되었던 태그 설정 타겟 어드레스를 취할 수 있으며, 메모리 위치들의 대응하는 블록의 대응하는 보호 태그에 기록하기 위한 값으로서 이 어드레스의 랜덤 태그값을 이용할 수 있다.
그러나, 다른 구현예에서는, 태그 설정 타겟 어드레스와 관련된 어드레스 태그를 랜덤하게 갱신하며, 메모리 액세스 회로를 제어하여 태그 설정 타겟 어드레스에 의해 식별된 어드레스 지정된 위치를 포함하는 메모리 위치들의 블록과 관련하여 메모리 시스템에 기억된 보호 태그를 랜덤 태그값으로 갱신하는 결합된 어드레스 태그 및 보호 태그 설정 명령을 제공하는 것이 가능하다. 이것은 두 번째 명령을 실행할 필요성을 없애 코드 밀도를 줄일 수 있다.
보호 태그 검사에서, 지정된 메모리 액세스에 대해 어드레스 태그와 보호 태그 사이에 불일치가 검출되면, 일부 형태의 결함 상태 표시를 반환함으로써 이것을 보고할 수도 있다. 보호 태그와 어드레스 태그 사이에 일치가 검출되는지 여부의 발생된 표시의 특정한 형태는 구현마다 변할 수도 있다. 일부 경우에, 태그 보호된 메모리 액세스 동작은, 보호 태그와 어드레스 태그 사이에서 일치가 검출되는지 여부에 따라 어드레스 지정된 위치에 대한 메모리 액세스가 허용되는지 여부를 제어하는 과정을 포함한다. 그러나, 다른 실시예들에서는, 보호 태그 검사를 기동한 메모리 액세스가, 보호 태그와 어드레스 태그 사이에서 일치가 검출되는지 여부에 무관하게 행해져도 된다. 예를 들어, 지정된 블록의 메모리 위치들과 관련된 보호 태그는 메모리 시스템 내부의 다른 블록의 메모리 위치들에 기억되므로, 보호 태그의 액세스가 별개의 판독 동작을 필요로 할 수도 있다. 따라서, 보호 태그와 어드레스 태그가 비교될 때까지 메모리 액세스가 지연되는 경우 실제 메모리 액세스의 처리를 지연시킬 수도 있으므로, 보호 태그가 이용가능하기 전에 어드레스 지정된 위치에 대해 메모리 액세스를 행하고, 보호 태그와 어드레스 태그 사이에서 일치가 검출되는지 여부에 무관하게, 그후 보호 태그가 취득되어 어드레스 태그와 비교되는 경우 일치가 검출되는지 여부의 별도의 표시를 발생하는 것이 바람직하다.
일 실시예에서, 일치가 검출되는지 여부의 표시는, 보호 태그와 어드레스 태그 사이에서 불일치가 검출될 때 발생되는 결함 상태를 나타내는 신호이어도 된다. 예를 들어, 메모리 액세스 회로는, 액세스 허가를 위반하거나 매핑되지 않은 어드레스들이 액세스되는 경우에 발생된 결함들과 유사한 메모리 결함 신호를 보내거나, 아니면 다른 종류의 결함 상태가 표시될 수도 있다. 결함 신호는 처리회로를 기동하여 검출된 결함에 응답하기 위한 예외처리 루틴을 실행할 수도 있다.
이와 달리, 지정된 메모리 액세스에 대해 보호 태그가 어드레스 태그와 불일치할 때, 장치의 처리회로가 액세스가능한 제어 레지스터 내부에 상태 표시가 기록되어, 보호 태그와 어드레스 태그의 비교시에 일치가 검출되었는지 또는 불일치가 검출되었는지 표시한다. 그후, 상태 정보가 후속하는 명령들에 의해 판독되어, 메모리 액세스가 유효하였는지 확인할 수도 있다.
보호 태그 검사시에 어드레스 태그와 보호 태그가 일치하였는지 또는 불일치하였는지를 보고하기 위한 또 다른 옵션은, 실행된 코드와 관련된 에러 로그에 정보를 기록하는 것일 수 있으며, 이 에러 로그는 코드 전체에 걸쳐 검출된 보호 태그 에러를 추적한다. 예를 들어, 불일치하는 보호 태그와 어드레스 태그에 응답하여, 불일치를 일으킨 타겟 어드레스, 또는 불일치하는 메모리 액세스를 일으킨 명령의 명령 어드레스가 에러 로그에 기록될 수도 있다. 이 경우, 코드의 동작을 방해하는 특정한 조치를 행하는 것이 아니라, 에러가 단순히 에러 로그에 기록될 수도 있다. 그후, 에러 로그를 코드의 소프트웨어 공급자가 이용가능하게 되어, 이 공급자가 소프트웨어의 다음 버전에서 에러를 제거하도록 도울 수도 있다.
이 때문에, 보호 태그 검사가 행해질 때, 메모리 액세스 회로에 의해 보호 태그 일치/불일치 표시가 발생될 수 있는 다양한 방법이 존재한다는 것을 알 수 있다.
일부 실시예에서, 대응하는 보호 태그들을 갖는 메모리 위치들의 블록들 각각은 한 개의 메모리 위치를 포함한다. 이 경우, 각각의 개별적인 메모리 위치는 다른 보호 태그를 가지므로, 더 큰 범위의 메모리 에러가 검출될 수 있도록 보호 태그들을 설정하는 미세한 그래뉼래러티(granularity)를 제공할 수 있다.
그러나, 실제로, 각각의 어드레스 지정된 위치에 대해 개별 보호 태그들을 설정하는 오버헤드가 너무 크며, 각각의 보호 태그를 복수의 메모리 위치들의 블록과 연관시키는 것이 더 효율적일 수 있다. 이 경우, 다수의 인접한 메모리 위치들이 동일한 보호 태그를 공유하는데, 이것은 공통된 형태의 메모리 관련 에러를 검출하는데 충분할 수 있다.
지정된 블록의 메모리 위치들과 관련되는 보호 태그는 메모리 시스템 내부의 다른 메모리 위치에 기억될 수 있다. 메모리 시스템 내부의 보호 태그들의 위치가 선택되는 특정한 방식은 구현마다 또는 실행 시간시에 상당히 변할 수도 있다. 일부 실시예에서, 보호 태그들을 기억하는 위치는 처리회로가 아키텍처상 액세스 가능할 수도 있으며, 예를 들어, 보호 태그 스토리 위치는 어드레스 지정된 위치와 동일한 어드레스 공간의 일부에 매핑된 위치이어도 된다. 이 경우, 어드레스 지정된 위치 그 자체와 대응하는 태그 스토리지 위치의 어드레스 사이의 매핑은 고정되거나 미리 짜넣어지거나, 또는 변동할 수도 있는데, 예를 들면, 메모리 액세스 회로에 의해 또는 변환 색인 버퍼 내부에 있는 추적 테이블에서 추적될 수도 있다. 이와 달리, 다른 구현예는 지정된 어드레스 지정된 위치와 관련된 보호 태그를 처리회로가 아키텍처상 액세스 가능하지 않은 또 다른 스토리지 위치에, 예를 들면, 처리회로에 의해 실행된 명령들에 의해 어드레스가 지정될 수 있는 어드레스 공간에 매핑되지 않는 마이크로아키텍처에 설치된 추가적인 스토리지 내부에 기억할 수도 있다. 이 경우, 메모리 액세스 회로는, 어드레스 지정된 위치의 어드레스에 근거하여, 대응하는 태그 스토리지 위치를 참조하는데 사용된 특정한 내부 어드레스를 판정하고, 태그 스토리지 위치로부터 태그 데이터를 판독하는데 필요한 추가적인 메모리 액세스를 기동한다. 태그 스토리지 위치를 처리회로가 아키텍처상 액세스가능한지 아닌지에 무관하게, 태그값들이 더 신속한 액세스를 위해 캐시 내부에, 데이터 값들을 위해 사용된 동일한 캐시 내부 또는 전용의 태그 캐시에 기억될 수도 있다.
일부 경우에, 보호 태그들은, 예를 들어, 4 또는 8 비트로 비교적 작으므로, 다른 블록의 메모리 위치들과 각각 관련된 복수의 보호 태그들이 동일한 메모리 위치 내부에 끼워질 수도 있다.
어드레스 태그는 타겟 어드레스와 다양하게 관련될 수 있다. 일부 경우에, 예를 들어, 메모리 액세스 동작과 보호 태그 검사를 기동하는 메모리 액세스 명령에 의해 지정된 별개의 레지스터를 사용하여, 어드레스 태그가 타겟 어드레스와 분리되어 지정될 수도 있다. 그러나, 다른 실시예에서는, 어드레스 태그가 타겟 어드레스의 한 개 이상의 선택된 비트들의 함수로서 결정되어도 된다. 즉, 어드레스 태그는 타겟 어드레스 가 자체의 일부로부터 유도된 정보를 포함한다. 명령 세트 아키텍처가 특정한 수의 비트들(예를 들어, 64비트)을 사용한 어드레스를 지원하지만, 지정된 하드웨어 장치가 이 비트들의 수를 사용하여 표현될 수 있는 모든 가능한 어드레스들을 사용할 그렇게 많은 메모리 용량을 실제로 필요로 하지 않는 경우가 많다. 예를 들어, 장치 사용량의 현재의 추세에 따르면, 264개의 개별적인 어드레스 지정가능한 위치를 제공할 필요가 없다. 따라서, 메모리 어드레스들의 일부 비트들이 유효하게 사용되지 않는 경우가 많으며, 항상 동일한 값을 갖거나, 최상위 "실제" 어드레스 비트의 부호 확장으로서 설정된다(따라서, 미사용된 부분이 전체가 0들 또는 전체가 1들로 설정된다). 따라서, 이와 같은 미사용된 부분이 재사용되어, 어드레스 태그 또는 어드레스 태그를 유도하기 위한 값을 표시함으로써, 어드레스 태그를 얻기 위해 별개의 레지스터에 액세스할 필요성을 없앨 수 있으며, 어드레스 태그는 정의에 따라 어드레스가 조작되거나 레지스터들 사이에서 이동할 때마다 어드레스와 함께 이동하므로, 어드레스들과 이에 대응하는 어드레스 태그들 사이의 대응관계를 추적하는 것을 용이하게 할 수 있다.
타겟 어드레스의 일부를 사용하여 어드레스 태그를 판정하는 실시예에서는, 이 어드레스 태그가, 타겟 어드레스에 의해 식별된 어드레스가 지정된 위치로부터의 정보가 캐시 내부에 기억되어 있는지 여부를 판정하기 위해 캐시들에 의해 사용되는 타겟 어드레스의 태그 부분과는 다르다는 점에 주목하기 바란다. 다수의 캐싱 방식은 이 데이터와 함께 캐시된 데이터의 어드레스의 태그 부분을 캐시 내부에 기억하므로, 지정된 어드레스에 대한 캐시의 검색시에, 캐시된 데이터가 실제로 필요한 어드레스에 대응하는지 여부를 판정하기 위해 어드레스의 일부를 캐시된 데이터와 함께 기억된 태그들과 비교할 수 있다. 그러나, 이 경우에, 캐시 내부의 태그와 비교하는 어드레스의 태그 부분은, 데이터가 필요한 특정한 어드레스 지정된 위치를 실제로 식별하는 어드레스의 일부분일 것이며, 즉 어드레스의 캐시 태그 부분을 변경하면 정의에 따라 어드레스가 메모리 시스템 내부의 다른 어드레스 지정된 위치를 가리키게 될 것이다. 이와 달리, 태그 보호된 메모리 동작을 위해 사용된 어드레스 태그에 대해, 메모리 액세스 회로는 어드레스 태그과 무관하게 데이터가 요구되는 어드레스 지정된 위치를 선택할 수도 있다. 즉, 어드레스 태그가 다른 값들을 갖더라도, 어드레스 지정된 위치의 선택이 타겟 어드레스의 다른 부분들에만 의존하므로, 타겟 어드레스에 의해 참조된 어드레스 지정된 위치가 여전히 같을 수 있다. 이것은, 컴파일러가 특정한 어드레스들과 관련된 어드레스 태그들을 임의의 값(예를 들어, 전술한 랜덤하게 선택된 값들)으로 설정하여, 메모리 시스템 내부의 해당 블록들의 데이터에 할당된 대응하는 보호 태그값들과 일치시킬 수 있는 자유를 제공한다.
어드레스의 비트들의 부분집합을 사용하여 어드레스 태그가 표시되는 경우에, 일부 구현예에서는, 랜덤 태그 설정 명령에 응답하여 선택되는 (제외된 값들을 제외한) 랜덤하게 선택된 값은, 태그 설정 타겟 어드레스의 비트들의 부분집합에 기록할 값을 결정하기 위해, 어드레스의 적어도 한 개의 다른 비트에 근거하여 변환된다. 이것은, 어드레스 공간의 레거시 할당과의 호환성을 위해, (예를 들어, "전부 일치" 거동에 대해) 특수한 방법으로 해석할 태그값들의 "특수한 값들"이 어드레스 공간의 다른 부분들에 대해 다른 값들을 가질 필요가 있으므로, 유용할 수 있다. 예를 들어, 어드레스들이 부호 확장될 때, 어드레스 지정된 메모리 위치의 선택을 위해 실제로 사용되는 어드레스의 상위 "실제"(의미 있는) 비트가 1인 경우 상위의 미사용된 비트들은 모두가 1이 되는 한편, 상위 "실제" 비트가 0인 경우 상위의 미사용된 비트들이 0으로 설정되는 것에 예상된다. 이와 같이 이들 미사용된 비트들을 할당한(그리고 보호 태그 기능을 사용하기 위해 기록되지 않은) 레거시 코드가 계속하게 올바르게 기능하도록 보장하기 위해, 상위 "실수" 비트가 1인 어드레스들에 대해 "전부 일치" 값이 "모두 1"일 수 있으며, 상위 "실제" 비트가 0인 어드레스들에 대해 "모두 0"일 수 있다. 이것은, "모두 0" 및 "모두 1" 중에서 한 개를 제외된 값으로서 지정하여, (아마도 마찬가지로 다른 제외된 값들을 제외하는) 후보 세트의 나머지 값들로부터 랜덤 선택을 한 후 어드레스의 최상위 "실제" 비트에 근거하여 (예를 들어, 모든 비트들을 반전함으로써) 선택된 값을 변환할 것인지 판정함으로써, 어드레스의 태그 부분에 기록할 값들을 결정하여, 상위 "실제" 비트가 1인지 또는 0인지에 무관하게 제외된 값이 올바른 "전부 일치" 값에 매핑되도록 함으로써 달성될 수 있다. 이때, 비트들을 단지 반전하지 않고, 어드레스의 한 개 이상의 비트들에 근거하여 랜덤하게 선택된 값의 다른 변형이 적용될 수도 있다는 것은 자명하다.
일부 구현예에서, 명령 디코더는 모든 메모리 액세스 명령에 응답하여 보호 태그 검사를 기동할 수도 있다. 이와 달리, 명령 디코드는 메모리 액세스 명령들의 별개의 태그 보호되지 않은 변종과 태그 보호된 변종을 지원할 수도 있다. 이 경우, 보호 태그 검사는 메모리 액세스 명령의 태그 보호된 변종에 응답하여 기동될 수도 있다. 이와 달리, 태그 보호되지 않은 메모리 액세스 명령은, 보호 태그 검사를 행하지 않고, 이 명령에 의해 지정된 타겟 어드레스에 의해 식별된 어드레스 지정된 위치에 대한 액세스를 단순히 기동할 수도 있다. 이 때문에, 모든 메모리 액세스 명령들에 응답하여 보호 태그 검사를 행하는 것이 필수적인 것은 아니다. 일부 경우에, (태그 검사 타겟 어드레스에 의해 식별된 위치에 대한 대응하는 메모리 액세스가 없이) 보호 태그 검사를 기동하는 명령도 지원될 수 있다.
그러나, 모든 메모리 액세스 명령들이 태그 보호된 메모리 액세스 명령으로서 해석되더라도, 명령 세트 아키텍처가 특정한 연산에 대해 보호 태그 검사를 선택적으로 디스에이블하는 것을 지원하는 다른 방법이 여전히 존재한다. 예를 들어, 처리장치의 제어 레지스터 내부의 제어 파라미터가 태그 비교를 선택적으로 디스에이블시킬 수도 있다. 전술한 것과 같이, 또 다른 옵션은, 어드레스의 특정한 값이 특수하게 해석되는 것으로, 어드레스 태그가 보호 태그의 모든 가능한 값과 일치하는 것으로 생각되어, 마찬가지로 태그 비교의 효과를 유효하게 디스에이블시켜, 어드레스 태그가 보호 태그와 일치하는지 여부에 무관하게 에러가 보고되지 않도록 하는 것이다.
도 1은 데이터 처리장치(2)의 일례를 개략적으로 나타낸 것이다. 이때, 이것은 장치의 구성요소들의 서브셋의 상위 레벨 표현에 지나지 않으며, 이 장치는 도시하지 않은 다른 구성요소들을 포함할 수도 있다는 것은 자명하다. 장치(2)는 명령 디코더(6)에 의해 디코드된 명령들에 응답하여 데이터 처리를 행하는 처리회로(4)를 구비한다. 명령 디코더(6)는 명령 캐시(8)로부터 페치된 명령들을 디코드하여 처리회로(4)를 제어함으로써 명령들에 의해 표시된 대응하는 처리 연산을 행하게 한다. 처리회로(4)는 레지스터들(4)에 기억된 값들에 대해 연산을 행하여 레지스터들에 다시 기록되는 결과 값들을 발생하는 한 개 이상의 실행 유닛들을 구비한다. 예를 들어, 실행 유닛들은, 산술 연산 또는 논리 연산을 실행하는 산술/논리 유닛(ALU), 부동소수점 피연산자를 이용하여 연산을 실행하는 부동소수점 유닛, 및/또는 복수의 독립적인 데이터 성분들을 포함하는 피연산자들에 대해 벡터 연산을 행하는 벡터 처리 유닛을 포함할 수 있다. 처리회로는, 레지스터들(14)과 메모리 시스템 사이에서의 데이터의 전달을 제어하는 메모리 액세스 회로(15)(또는 로드/스토어 유닛)를 더 구비한다. 본 실시예에서, 메모리 시스템은, 명령 캐시(8), 레벨 1(L1) 데이터 캐시(16), 데이터와 명령들 사이에서 공유되는 레벨 2(L2) 캐시(17), 및 메인 메모리(18)를 포함한다. 이때, 이것은 단지 일례이며, 다른 캐시 계층구조도 가능하다는 것은 자명하다. 로드/스토어 유닛(15)에 의해 기동된 메모리 액세스를 지원하기 위한 어드레스 변환 기능을 제공하기 위해 메모리 관리 유닛(MMU)(20)이 설치된다. MMU는 메모리 시스템 16, 17, 18에 기억된 페이지 테이블로부터 엔트리들의 서브셋을 캐싱하는 변환 색인 버퍼(TLB)(22)를 갖는다. 각각의 페이지 테이블 엔트리는, 대응하는 어드레스들의 페이지에 대한 어드레스 변환 매핑을 제공하며, 페이지가 판독 전용 영역인지 또는 판독가능 및 기록가능 모두인지 여부를 지정하는 액세스 허가, 또는 어떤 특권 레벨들이 페이지를 액세스할 수 있는지 지정하는 액세스 허가 등의 액세스 제어 파라미터를 더 지정한다.
도 2는 태그 보호된 메모리 액세스의 개념을 개략적으로 나타낸 것이다. 메모리 시스템 내부의 메모리 위치들을 참조하기 위해 사용되는 물리 어드레스 공간은 특정한 수의 어드레스 지정가능한 위치들을 각각 포함하는 다수의 블록들(30)로 논리적으로 분할된다. 간략을 위해, 도 2의 실시예에서는, 각각의 블록(30)이 4개의 메모리 위치들을 포함하지만, 다음 블록 사이즈가 사용될 수도 있다. 각각의 블록(30)은 대응하는 보호 태그(32)와 관련된다. 특정한 수의 블록들(30)과 관련된 보호 태그들은, 함께 모일 수 있으며, 물리 어드레스 공간 내부의 이와 다른 아키텍처 상 액세스가능한 메모리 위치(34) 내부, 또는 아키텍처 상 액세스가능하지 않은(동일한 물리 어드레스 공간에 매핑되지 않은) 메인 메모리(18) 내에 설치된 추가적인 스토리지 위치 내부에 기억될 수 있다. 별개의 비아키텍처 상 액세스가능한 스토리지의 이용은, 일부 경우에는, 정규 코드의 성능에 영향을 미치고 코히런시 관리를 더 복잡하게 만들 수도 있는 보호 태그값들을 캐싱하기 위한 데이터 캐시들 16, 17 내부의 공간을 모두 사용해버리는 것을 피하기 위해 바람직하다. 태그들이 메인 메모리(18)로부터 액세스해야 하는 것보다 더 신속한 액세스를 위해, 비아키텍처 상 액세스가능한 스토리지로부터 태그값들을 캐싱하기 위해 추가적인 태그 캐시(19)가 마이크로아키텍처에서 설치될 수도 있다. 어떤 태그 스토리지 위치(34)가 각각의 블록(30)에 대응하는지의 특정한 매핑은 로드/스토어 유닛(15)에 의해 제어되고 고정설치되거나 프로그래밍가능할 수도 있다. 도 2에서는 각각의 태그(32)가 물리 어드레스들의 블록과 관련되지만, 가상 메모리 어드레스 공간 내부의 가상 메모리 위치들과 관련된 보호 태그들(32)을 제공하는 것도 가능하지만, 이것은 각각의 메모리 액세스시에 추가적인 어드레스 변환을 요구할 수도 있다. 이 때문에, 보호 태그(32)를 물리 메모리 위치들과 관련시킴으로써, 성능을 향상시킬 수 있다. 일반적으로, 특정한 마이크로아키텍처 구현이 보호 태그들(32)이 물리 어드레스 공간의 대응하는 블록들(30)과 정확히 관련되는 방식은 선택이다. 일반적으로, 필요한 것은 주어진 블록의 메모리와 관련된 보호 태그(32)가 액세스되고 비교될 수 있는 것 뿐이다.
이 때문에, 태그 보호된 메모리 액세스가 필요할 때, (액세스할 어드레스 지정된 위치(44)를 식별하는 타겟 어드레스(42)와 관련되는) 어드레스 태그(40)가 어드레스 지정된 위치(44)를 포함하는 메모리 위치들의 블록(30)과 관련된 보호 태그(32)와 비교될 수 있다. 예를 들어, 도 2에서, 타겟 어드레스(42)는 도 2의 어드레스 공간에 44로 표기된 메모리 내부의 특정한 위치 B1을 가리킨다. 따라서, 위치 B1을 포함하는 위치들의 블록 B와 관련된 보호 태그 B를 타겟 어드레스(42)와 관련된 어드레스 태그(40)와 비교한다, 도 2의 상단에 나타낸 것과 같이, 어드레스 태그(4)는 타겟 어드레스 그 자체의 선택된 비트들의 함수로서 결정된다. 특히, 어드레스 태그는 어드레스 지정된 위치(44)로서 선택할 특정한 메모리 위치를 표시하기 위해 사용되지 않은 타겟 어드레스의 일부분 내부의 비트들로부터 결정된다. 예를 들어, 일부 아키텍처에서, 타겟 어드레스의 비트들의 상단 부분은 항상 부호 확장(모두 0들 또는 모두 1들) 등의 특정한 고정된 값을 가지므로, 이들 사용되지 않은 비트들을 임의의 태그값으로 오버라이트함으로써 어드레스 태그(40)를 사용하여 어드레스에 태그가 붙여질 수 있다. 특정한 어드레스 태그값은 예를 들어 프로그래머 또는 컴파일러에 의해 선택될 수 있다. 어드레스 태그 및 보호 태그(32)는 비교적 작은 수의 비트들, 예를 들어, 4비트일 수 있으므로, 메모리 내부 및 타겟 어드레스 내부에서 많은 공간을 차지할 필요가 없다. 4비트의 태그 공간, 즉 16개의 태그들의 가능한 값을 제공하는 것은 다수의 공통된 종류의 메모리 액세스 에러를 검출하는데 충분할 수 있다.
이 때문에, 태그 보호된 메모리 액세스가 행해질 때, 로드/스토어 유닛(15)은 어드레스 태그(40)와 어드레스 지정된 위치(44)를 포함하는 블록(30)과 관련된 보호 태그(32)를 비교하여, 이들이 일치하는지 판정한다. 로드/스토어 유닛(15)은 어드레스 태그(40)와 보호 태그(32)가 일치하였는지 여부를 나타내는 일치 표시를 발생한다. 예를 들어, 이와 같은 일치 표시는, 어드레스 태그(40)와 보호 태그(32) 사이에 불일치가 존재하는 경우 발생되는 결함 신호(60)이거나, 또는 일치가 존재하였는지 나타내는 상태 레지스터에 설치된 표시이거나, 에러가 검출된 어드레스 및/또는 에러를 유발한 명령의 명령 어드레스를 표시하기 위해 에러 보호에 추가된 엔트리일 수 있다.
도 3은 태그 보호된 메모리 액세스를 처리하는 흐름도를 나타낸 것이다. 메모리 액세스를 기동하는 명령이 어드레스 태그 및 타겟 태그를 지정한다. 도 2에 도시된 것과 같이, 다른 경우에는 어드레스 태그가 별개의 레지스터에 지정될 수 있지만, 일부 경우에는 어드레스 태그가 타겟 어드레스 그 자체의 비트들의 서브셋으로부터 실제로 유도될 수 있다. 스텝 50에서, 태그 보호된 메모리 액세스를 기동하는 명령과 마주친다. 이에 응답하여, 스텝 52에서, 메모리 액세스 회로(15)가 타겟 어드레스에 의해 식별된 어드레스 지정된 위치(44)에 대한 메모리 액세스를 기동한다. 또한, 스텝 54에서, 메모리 액세스 회로(15)는 타겟 어드레스에 의해 식별된 어드레스 지정된 위치(44)를 포함하는 메모리 위치들의 블록(30)과 관련되어 메모리 시스템에 기억되는 보호 태그(32)를 취득한다. 스텝 56에서, 메모리 액세스 회로(15)는 어드레스 태그(40)를 스텝 54에서 얻는 보호 태그(32)와 비교한다. 스텝 58에서, 보호 태그 및 어드레스 태그 사이에서 일치가 검출되는지 여부의 표시(예를 들어, 전술한 종류의 일치/불일치 보고 표시 중 어느 것)가 메모리 액세스 회로(15)에 의해 발생된다. 불일치를 보고하는데 사용되는 정확한 표시는 구현마다 다를 수 있다.
도 4는 한 개의 소스 레지스터 Xn과 목적지 레지스터 Xd를 지정하는 랜덤 태그 설정 명령의 제1 실시예를 나타낸 것이다. 소스 레지스터 Xn은 특정한 어드레스 태그값(40)과 이미 관련되는 태그 설정 타겟 어드레스(42)를 지정한다(또는 디폴트로 어드레스(42)의 부호 확장으로 설정된 태그 비트들을 가질 수도 있다). 명령 디코더(6)는, 이와 같은 명령에 응답하여, 처리회로(4) 제어함으로써, 태그 설정 타겟 어드레스(42)를 목적지 레지스터 Xd의 대응하는 부분에 기록하고, 목적지 레지스터에 있는 어드레스 태그(40)를 난수 발생기 또는 의사 난수 발생기(60)에 근거하여 선택된 랜덤 태그값으로 설정한다. 모든 공지된 설계의 난수 또는 의사 난수 발생기가 사용될 수 있다. 이와 같은 접근방법에 따르면, 랜덤 태그값으로서 어떤 값도 선택으로부터 제외되지 않는다. 지정된 어드레스의 어드레스 태그를 랜덤하게 선택된 값으로 설정하는 것은, 동일한 프로그램을 실행하고 있는 다수의 다른 장치들에 의해 사용되는 태그값들의 변동을 증가시키는데 유용하여, 메모리 관련 에러가 적어도 일부의 장치들에 의해 보고될 가능성을 증가시키고, 공격자가 장치들의 모집단의 상당한 분율에 영향을 미칠 수도 이는 성공적인 공격을 시작하는 것이 더 곤란해지기 때문에, 공격에 대한 취약성을 줄인다. 일부 경우에, 목적지 레지스터에 있는 어드레스 태그값(40)을 설정하는 것 이외에, 명령의 변종은 메모리에 대한 메모리 액세스를 기동하여, 태그 설정 타겟 어드레스(42)에 의해 식별된 메모리 위치들의 블록(30)과 관련된 보호 태그(32)를 어드레스 태그에 대해 선택된 것과 동일한 랜덤 태그값으로 더 설정할 수도 있다.
도 5는 특정한 제외된 값들이 랜덤 태그값들로서의 선택으로부터 제거되는 것을 허용하는 랜덤 태그 설정 명령의 제 2 실시예를 나타낸 것이다. 랜덤 태그 설정 명령도 마찬가지로 도 4에서와 동일한 소스 레지스터 Xn 및 목적지 레지스터 Xd를 지정한다. 옵션으로, 랜덤 태그 설정 명령은, 제외된 값들의 세트 중에서 한 개 이상을 표시하는 상태 정보를 정의하는 제2 소스 레지스터 Xm을 더 지정한다. 제외된 값들은 Xm과 무관하게 다른 방식으로 식별될 수도 있다. 예를 들어, 목적지 레지스터 Xd가 명령 실행 이전에 어드레스를 이미 포함하는 경우, 이 어드레스와 관련된 이전의 태그가 추출되어 제외된 값들 중에서 한 개로서 사용될 수도 있다. 마찬가지로, 소스 레지스터 Xd에 있는 어드레스 태그값(40)도 제외될 수 있다. 또 다른 옵션은, 처리장치(20)의 레지스터들(14)이 특정한 값들이 제외되는지 여부를 나타내는 환경설정 상태를 정의하는 환경설정 레지스터를 포함한다. 또한, 특정한 값들이 하드웨어에 의해 영구적으로 제외될 수도 있는데, 예를 들어, 제외되도록 미리 짜넣어질 수도 있다. 이것은, 예를 들어, 특정한 값들이 특수한 용도로(예를 들어, 전부 일치) 영구적으로 할당되어, 이들이 랜덤 선택 명령에 의한 태그값으로서 선택되는 것이 허용되지 않는 경우 유용할 수 있다. 이들 기술의 임의의 조합을 이용하여 제외된 값들의 세트를 정의해도 된다.
이 때문에, 도 5의 실시예에서는, 랜덤 태그 설정 명령에 응답하여, 명령 디코더(6)가 마찬가지로 처리회로(4)를 제어하여, 목적지 레지스터 Xd의 태그 부분에 기록할 랜덤 태그값의 랜덤 선택을 하지만, 이 경우에는 제외된 값들의 세트를(이것은 제로값, 한 개 이상의 제외된 값들을 포함한다) 랜덤 태그값으로서 선택되지 않게 제거하기 위해 일부의 추가 회로(62)가 설치된다. 이하에서 이와 같은 제외된 값들의 제거를 구현하기 위한 다수의 실시예를 설명한다.
도 6은, 제외된 값들을 나타내는 랜덤 선택 상태를 정의하는 레지스터 Xm이 (의사) 난수 발생기(60)에 의한 선택을 위해 아용가능한 값들의 세트의 가능한 후보값들 중에서 한 개에 각각 대응하는 다수의 비트들(64)을 포함하는 비트필드를 포함하는 제외 마스크로서 구현되는 제1 실시예를 나타낸 것이다. 예를 들어, 도 6에서, 태그값들 2, 3 및 11과 관련된 비트들은 이들 값들이 랜덤 태그 설정 명령에 의한 랜덤 태그값으로서 선택될 수 없다는 것을 나타내도록 설정된다.
도 7에 나타낸 것과 같이, 명령 디코더(6)는 2개의 소스 레지스터 Xm, Xn과 목적지 레지스터 Xd를 지정하는 AddExclusion(태그값 제외) 명령을 지원한다. 소스 레지스터들 중에서 한 개 Xm은 일부 값들이 이미 제외된 것을 나타내기 위해 1로 설정되거나 어떤 값도 아직 제외되지 않은 경우 모두 0일 수 있는 일부 비트를 이미 갖는 도 6에 도시된 제외 마스크의 입력값을 지정한다. 제2 소스 레지스터 Xn은 그것과 관련된 지정된 어드레스 태그(40)를 갖는 어드레스를 지정한다. 이 명령에 응답하여, 명령 디코더(6)는 처리회로(4)를 제어하여, 어드레스 레지스터 Xn으로부터 어드레스 태그(40)의 값을 추출하고, 이 추출된 어드레스 값에 대응하는 제외 마스크의 비트(64)를 설정하여, 추출된 어드레스의 값이 Xm에 있는 랜덤 선택 상태 정보에 근거하여 랜덤 태그값의 후속하는 랜덤 선택으로부터 제외되게 한다. 예를 들어, AddExclusion 명령에 응답하여 행해지는 연산은, 추출된 어드레스 태그(40)로 표시된 비트 위치들의 수만큼, 1의 최상위 비트와 0인 나머지 모든 비트들을 포함하는 값을 좌측으로 자리이동함으로써 구현된다. 그후, 자리이동된 값은 레지스터 Xn에 있는 입력 마스크와 OR 연산된다. 이때, 도 7에 나타낸 자리 이동 및 OR 함수는, 하드웨어가 연산을 구현할 수 있는 방법과, 일반적으로, 소스 레지스터 Xn에 있는 어드레스 태그(40)의 값에 대응하는 비트(64)가 설정되게 하는 모든 연산이 사용될 수 있는 방법의 일례에 지나지 않는다는 것이 명백하다.
따라서, 도 6에 나타낸 랜덤 선택 상태 정보의 형태에 근거하여, 도 5의 랜덤 태그 설정 명령이 레지스터 Xn에 있는 비트필드의 비트들(64)이 1로 설정되는 제외된 값들 중에서 한 개가 아닌 랜덤 태그값을 선택할 수 있다.
이와 같은 비트필드를 사용하는 것에 대한 대안은, 그 대신에, 선택으로부터 제외할 이진값들을 명시적으로 정의하는 일련의 필드들을 설치하는 소스 레지스터 Xm을 제공하는 것일 수 있다. 예를 들어, 최대 N개의 값들이 제외되고 각각의 태그가 특정한 비트들의 수, 예를 들어, 4를 가지면, 4N 비트의 레지스터가 제외할 값들을 지정할 수 있다.
제외할 값들이 얼마나 정확하게 지정되는지에 무관하게, 하드웨어는 제외된 값들을 취하고 이것들을 난수 발생기 또는 의사 난수 발생기(60)에 의해 출력된 값들과 비교하여, 선택된 값이 제외된 값들 중에서 한 개가 아닌 것을 보장한다. 그러나, 성능상의 이유로 인해, 서로 다른 난수들을 순차적으로 반복하여 발생하고 제외되지 않은 값을 발견할 때까지 제외된 값들에 대해 반복하여 시험하지 않고 제외되지 않은 값들의 세트로부터 랜덤 태그값을 선택할 수 있는 기술을 제공하는 것이 바람직할 수도 있다. 또한, 제외되지 않은 세트로부터 행해진 랜덤 선택이 제외되지 않은 값들 중에서 균일하게 분포된 확률 분포를 가져, 한 개의 제외되지 않은 값 또는 또 다른 값을 향한 상당한 편중(bias)이 존재하지 않도록 하는 것이 바람직할 수 있다.
도 8 내지 도 10은 이것을 달성하기 위한 다수의 접근방법을 나타낸 것이다. 목표는 특정한 입력값들과 같지 않아야 하는 4비트 의사 랜덤값들을 발생하는 하드웨어 효율적인 방법을 제공하는 것이다. 구체적으로 설명하면, 이것은 (모든 가능한 출력을 허용하는) 무분별한 임의의 소스로부터 이와 같은 출력을 유도하는 방법을 커버한다. 이것은 단순한 LFSR 시드 레지스터이거나 더 정교한 (P)RNG일 수 있다. 간략을 위해, 다른 임의의 소스가 LFSR 대신에 사용될 수도 있지만, 임의의 소스를 "LFSR"로 나타낸다. 구현을 위한 2가지 가능한 접근방법을 설명한다. 설명하는 첫 번째 접근방법은, LFSR(72) 이외에, 미리 짜넣어질 수 있으며 임의의 수의 입력값들을 제외할 수 있는(최대수의 입력에 따라 하드웨어 복잡도가 증가한다) 소정의 의사 랜덤 시퀀스(룩업표 또는 LUT(70))를 사용한다. '1111' 또는 '0000'과 함께 단지 한 개의 입력값을 제외하는 것으로 제한되는 두 번째 접근방법도 설명한다. 이것은 그것의 출력을 LFSR 만으로부터 유도한다.
첫 번째 접근방법은 도 8 및 도 9에 도시되어 있다. 이와 같은 설계 아이디어는 임의의 수의 입력 패턴들('N')을 제외하기 위해 구축될 수 있다. 먼저, 의사랜덤 순서로 정확히 한번 셔플링된 모든 가능한 출력값을 포함하는 룩업표(LUT) 레지스터(70)의 존재를 가정한다. 4비트 출력(16개의 조합)에 대해, 이 LUT(70)는 64비트 값이 될 것이다. 이 설계는 3개의 스테이지 80, 82, 84를 포함한다. 첫 번째 스테이지는, LFSR(72)의 비트들에 근거하여, LUT(70)로부터 'N+1'개의 중첩하지 않는 값들을 의사 랜덤하게 선택하는 랜덤화기(randomizer)(80)이다. 두 번째 스테이지는 비교기(82)이다. 이것은 비트 동등에 대해 랜덤화기(80)로부터의 'N+1'개의 출력 중에서 'N'개의 각각을 제외된 값을 정의하는 'N'개의 입력들(86)의 각각과 비교하여, 마스크를 생성한다. 이때, 입력들(86)은 랜덤 선택 상태 정보 및/또는 환경설정 레지스터 내부의 환경설정 데이터 및/또는 전술한 것과 같은 하드웨어 고정된 값들로부터 유도될 수 있다. 최종 스테이지는, 비교기(82)에 의해 생성된 마스크(88)를 사용하여 (마스크(88)에서 그것의 비트로 나타낸 것과 같이) 입력들 중에서 어느 것과도 같지 않은 랜덤화기(80)로부터의 'N+1'개의 출력들 중에서 한 개를 최종적인 최종 출력(92)으로서 선택하는 멀티플렉서(90)를 포함하는 셀렉터(84)이다. 최종 출력(2)은 태그 설정 타겟 어드레스의 어드레스 태그로 설정하는 랜덤 태그값으로서 사용된다.
각 스테이지를 구현하는 방법의 상세내용을 이하에서 설명한다. 이것은 예시적인 구현예이다. 이와 다른 구현예가 가능하다.
랜덤화기(80)(스테이지 1)
4비트인 'pos'가 LFSR(72)로부터 추출된다. LUT 레지스터(70)가 'pos*4' 비트만큼 회전한다. 이것의 뒤에는, 필요에 따라 LFSR로부터의 추가적인 비트들에 근거하여, LUT로부터 복수의 독립적인 값들 중에서 한 개를 각각 선택하는 'N+1'개의 멀티플렉서들(74)이 위치한다. 이상적으로는, 도 9에 나타낸 것과 같이 필수적인 것은 아니지만, 이들 멀티플렉서들(74) 모두가 동일한 수의 입력을 가져야 한다. 비트 회전이 하드웨어에서 멀티플렉서로 구현되기 때문에, 이들 스텝 모두가 한 개로 합쳐져 단순화될 수도 있다.
비교기(82)(스테이지 2)
랜덤화기(80)로부터의 'N'개의 입력들 각각이 'N'개의 금지된 값들 각각과 동등 비교된다. 모든 랜덤화기 출력들에 대한 결과들이 서로 NOR 연산처리되어 출력 마스크(88)를 생성한다.
셀렉터(84)(스테이지 3)
셀렉터(90)는 단순히 마스크(88)에 의해 허용되는 첫 번째 랜덤화기 출력을 선택할 수 있다.
구현의 속성
이와 같은 구현예는, 입력들 중 일부가 동일한지를 포함하여, 모든 출력에 대해 균일한 확률분포를 제공한다. 이것은, 간단히 입력들 중에서 일부를 복수회 제공함으로서, 확률분포에 영향을 미치지 않고, N개의 값들을 제외하기 위해 구축된 한 개의 하드웨어 회로를 재사용하여 더 적은 수의 값들을 제외할 수도 있다는 것을 의미한다.
도 8은 3개의 제외(N=3)에 대한 구체적인 구성예를 나타낸 것이다. 이와 같은 구현예는 입력들 중에서 일부가 동일한 경우를 포함하여, 모든 출력들에 대한 균일한 확률분포를 제공한다. 이것은, 간단히 동일한 입력을 복수회 제공함으로서, 확률분포에 영향을 미치지 않고, 3개의 값들을 제외하기 위해 구축된 한 개의 하드웨어 회로를 사용하여 1개 또는 2개의 값들을 제외할 수도 있다는 것을 의미한다. 제외할 값이 '1111'인 경우, 이것이 확률분포가 영향을 받는 방식이다.
0000 0001 0010 0011 0100 0101 0110 0111
% 6.26 6.59 7.03 6.43 6.30 6.26 6.94 7.28
1000 1001 1010 1011 1100 1101 1110 1111
% 6.39 7.62 6.73 6.26 6.34 6.25 7.32 0.00
(통계자료는 '0x61fd50b4c83a2e97'의 LUT를 사용하여 얻어졌다)
도 9은 4개의 제외(N=4)를 위한 구체적인 구성예를 나타낸 것이다. 이때, 랜덤화기(80)로부터 5개의 출력을 제공하기 위해, 마지막 멀티플렉서가 4개가 아니라 2개의 LUT 값들로부터 각각 선택하는 2개의 멀티플렉서들 74-A, 74-B로 분할되도록 선택되는 방식에 주목하기 바란다. 이것은, 마지막 2개의 출력이 셀렉터에 의해 선택될 가장 적은 가능성을 가져, 난수성(randomness)을 줄여 확률 분포에 대한 더 적은 영향을 갖기 때문이다.
제외할 값이 '1111'인 경우, 이것이 확률분포가 영향을 받는 방식이다.
0000 0001 0010 0011 0100 0101 0110 0111
% 6.27 6.58 7.01 6.49 6.33 6.25 6.91 7.22
1000 1001 1010 1011 1100 1101 1110 1111
% 6.44 7.54 6.75 6.28 6.39 6.25 7.28 0.00
제외할 추가적인 입력이 '0000'인 경우, 이것이 확률분포가 영향을 받는 방식이다.
0000 0001 0010 0011 0100 0101 0110 0111
% 0.00 7.97 7.31 6.52 6.30 6.60 8.11 8.23
1000 1001 1010 1011 1100 1101 1110 1111
% 6.42 8.33 6.92 6.26 6.35 6.95 7.72 0.00
(통계자료는 '0x61fd50b4c83a2e97'의 LUT를 사용하여 얻어졌다)
도 10은 '1111' 또는 '0000'일 수 있는 한 개의 고정된 패턴과, 임의의 변수인 한 개의 입력값을 제외하는 두 번째 접근방법을 나타낸 것이다. 이것은 "색상 변경(re-colouring)"/기존의 값 변경을 위해 충분하다. 출력은 LFSR(72)로부터만 유도된다. LFSR은 적어도 6비트를 가져야 한다.
도 10에 나타낸 설계에서, 잠정적인 출력값("선택된 태그값")(102)으로 사용하기 위해 LFSR 상태로부터 4비트가 추출된다. 비트들 전체가 동일한 경우(패턴 '0000', '1111'), LFSR로부터 2개의 비트가 더 추출되고 멀티플렉서/시프터에서 사용되어 (XOR 연산을 이용하여) 반전할 출력의 정확히 한 개의 비트를 선택하여 중간값(100)을 발생한다. 이것은 중간값(100)에 대해 '0000' 또는 '1111' 패턴이 결코 발생할 수 없도록 보장한다. 그렇지 않은 경우에는, 선택된 태그값(102)이 그대로 중간값(100)으로서 출력된다.
이것은 다음과 같은 통계분포를 갖는 의사 랜덤 출력을 갖는 중간값(100)을 생성한다.
0000 0001 0010 0011 0100 0101 0110 0111
% 0.0 7.8 7.8 6.3 7.8 6.3 6.3 7.8
1000 1001 1010 1011 1100 1101 1110 1111
% 7.8 6.3 6.3 7.8 6.3 7.8 7.8 0.0
시스템의 다음 부분을 이해하기 쉽게 하기 위해, 제외할 고정 패턴이 '1111'이고 '0000'이 유효한 출력인 것으로 가정한다. '0000'이 유효한 패턴이기 때문에, 이것이 입력 변수와 교환될 수 있다. 이 때문에, 중간값(100)을 입력(랜덤 태그 설정 명령에 의해 정의된 금지된 값)과 동등 비교한다. 일치하는 경우, '0000'이 출력된다. 그렇지 않은 경우, 중간값(100)이 그대로 출력된다. 이것은 (최종 출력이 이미 첫 번째 단계에 의해 제외되었기 때문에) '1111'도 아니고 랜덤 태그 설정 명령에 의해 제공된 입력과 같지도 않은 최종 출력(104)을 발생한다. 최종 출력(104)은 타겟 어드레스의 어드레스 태그로 설정하기 위해 랜덤 태그값으로 사용될 수 있다.
최종 출력의 통계분포는 다음과 같다:
0000 0001 0010 0011 0100 0101 0110 0111
% 6.7 7.3 7.3 5.8 7.3 5.8 5.8 7.3
1000 1001 1010 1011 1100 1101 1110 1111
% 7.3 5.8 5.8 7.3 5.8 7.3 7.3 0.0
'0000'을 출력으로서 금지하고 그 대신에 변수 입력을 위한 유효한 치환값으로서 '1111'을 사용하기 위해 '0000' 및 '1111'의 역할이 뒤바뀔 수도 있다. 또한, 임의의 패턴이 랜덤 태그 설정 명령에 의해 정의된 추가적인 제외된 태그값(103)과 일치하는 경우, ('0000'이나 '1111'이 아닌) 이 임의의 패턴이 (도 10의 실시예에서 '1111'에 대응하는) 소정의 제외된 태그값과 중간값(100) 대신에 치환되는 (도 10의 '0000'에 대응하는) 추가적인 소정의 태그값으로서 선택되는 것이 가능할 것이다.
전술한 접근방법에서는, 한 개의 랜덤 태그 설정 명령이 후보값들의 전체 세트에 걸쳐 제외된 값들의 표시를 취하고, 한 개의 명령에 응답하여, 나머지 값들 중에서 랜덤한 값을 선택할 수 있다. 제외된 값들을 정의하기 위해 도 7에 도시된 형태를 갖는 추가적인 명령과 짝을 이루면, 선택을 구현하는 비교적 코드 효율적인 방법을 제공할 수 있다.
그러나, 하드웨어를 더욱 더 단순화하기 위해, 랜덤 태그값을 선택하고 선택으로부터 값들을 제외하는 연산을 복수의 명령으로 분할하는 것이 유용할 수도 있다. 이와 같은 접근방법의 일례를 도 11 내지 도 14에 나타낸다. 도 11은 랜덤 태그 설정 명령에 대한 제외된 값들을 정의하는 랜덤 선택 상태 정보의 또 다른 형태를 나타낸 것이다. 예를 들어, 도 5의 랜덤 태그 설정 명령에 대해 도시된 레지스터 Xm은, 도 6에 도시된 것과 같은 비트필드 대신에, 도 11에 도시된 랜덤 선택 상태 정보의 형태를 지정할 수도 있다. 도 11의 예에서는, 후보값들의 전체 세트에 걸쳐 제외된 값들을 정의하는 것이 아니라., 랜덤 선택 상태 정보 그 자체의 필드(72)에 의해 표시되는 값을 갖는 후보값들의 진부분집합에 대해서만 비트 마스크(70)가 설치된다. 이와 관련하여, 진부분집합은 후보 세트의 값들 중에서 적어도 한 개를 제외하는 부분집합을 의미한다. 본 실시예에서, 랜덤 태그값들의 진부분집합(72)과 이에 대응하는 제외 마스크(70) 모두가 동일한 레지스터 내부에 기억되지만, 다른 실시예는 이들을 다른 레지스터들에 기억할 수도 있다.
이와 같은 접근방법에 따르면, 랜덤 선택 연산을 다수의 명령들, 즉 도 12에 도시된 후속하는 랜덤 태그 설정 명령에 의해 선택하기 위해 이용가능한 값들의 작업 세트로서 랜덤값들의 부분집합을 선택하는 제1 명령과, 도 13에 나타낸 것과 같이, 이전에 선택된 값들의 부분집합을 제외된 값과 비교하여 검사하고 일치가 존재하는 경우에 제외 마스크를 설정하는 제2 명령과, 도 11에 도시된 랜덤 선택 상태를 사용하여 제외 마스크에 의해 제외되는 것으로 표시되지 않은 랜덤 태그값들의 부분집합(72) 중에서 한 개를 선택하는 도 14에 도시된 제3 명령(랜덤 태그 설정 명령)으로 분할하는 것이 가능하다.
도 12는 난수 발생기 또는 의사 난수 발생기(60)의 출력에 근거하여 랜덤 태그들의 작은 집합을 선택하는 목적지 레지스터 Xd를 지정하는 BeginRandomTag(랜덤 태그 선택 명령) 명령을 나타낸 것이다. 이 단계에서는 소프트웨어 정의된 제외값들을 고려할 필요가 없다. 일부 구현예에서, BeginRandomTag 명령은, 값들이 하드웨어에 의해 영구적으로 제외되는 것으로 정의되거나 또는 이들 값들이 환경설정 레지스터를 사용하여 제외되는 것으로 환경설정 가능하게 정의되는 경우 이들 일부 값들을 선택하지 못하게 여전히 제외할 수도 있다. 그러나, 소프트웨어에 의해 제공된 입력 어드레스와 관련된 태그에 의존하거나, 이전의 명령들의 결과에 의존하는 소프트웨어 정의된 제외들을 무시함으로써, 이 명령을 구현하기 위한 하드웨어를 단순화할 수 있다. 이 때문에, 명령에 응답하여, 명령 디코드(6)는 의사 난수 발생기 또는 난수 발생기(60)를 제어하여 단순히 특정한 수의 태그값들을 선택하고, 처리회로(4)를 제어하여 선택된 값들을 목적지 레지스터 Xd의 대응하는 랜덤 태그 필드들(72)에 기록한다. 랜덤 선택 상태 정보의 제외 마스크(70)는 BeginRandomTag 명령에 응답하여 전체가 0으로 설정되어, 처음에 선택된 값들 전체가 제외되지 않은 것으로 표시되도록 보장한다. 목적지 레지스터의 나머지 비트들은 제로값 확장될 수 있다.
도 13은 소프트웨어에 의해 정의된 특정한 태그값이 후속하는 랜덤 태그 설정 명령에 의해 랜덤 태그값으로서 선택되지 않도록 보장하기 위해 실행될 수 있는, 2개의 소스 레지스터들 Xn, Xm과 목적지 레지스터 Xd를 지정하는 ExcludeRandomTag 명령(태그값 제외 명령)을 나타낸 것이다. 이와 같은 정보는, 소스 레지스터 Xn으로서, 그것을 위해 이미 태그값(40)이 설정된 어드레스를 지정하는 레지스터를 취한다는 점에서, 도 7에 도시된 것과 유사할 수 있다. 도 13의 명령에 응답하여, 명령 디코더(65)는 처리회로(4)를 제어하여, 레지스터 Xn의 어드레스로부터 태그값(400을 추출하고, 추출된 태그값을 제2 소스 레지스터 Xm 내부에 지정된 랜덤 선택 상태 정보의 필드들(72)에 기억된 랜덤 태그값들 각각과 비교하여, 추출된 어드레스 태그(40)가 beginRandomTag 명령 의해 이전에 채워진 랜덤 태그들(72) 중 어느 것과 일치하는 경우에는, 제외 마스크(70)의 대응하는 비트가 목적지 레지스터 Xd에서 1로 설정된다. 랜덤 태그값들(72) 그 자체는 소스 레지스터 Xm으로부터 목적지 레지스터 Xd에 변경되지 않은 채 단순히 기록된다. ExcludeRandomTag 명령은 다양한 어드레스들에 대해 복수회 실행되어, 한 개보다 많은 수의 랜덤 태그값들(72)이 제외되어야 하는지 검사할 수 있다.
도 14는, 소스 레지스터 Xm에 기억된 랜덤 선택 상태에 근거하여, 도 13의 ExcludeRandomTag 명령에 의해 제외되지 않았던 나머지 태그들 중에서 한 개를 선택하고, 선택된 태그를 소스 레지스터 Xn에서 지정된 어드레스 내부에 삽입하고, 그 결과를 목적지 레지스터 Xd에 기록하는 랜덤 태그 설정 명령(EndRandomTag)을 나타낸 것이다. 이 때문에, 멀티플렉스(110)는 제외 마스크(70)의 각각의 비트들의 값들에 따라 레지스터 Xm에서 지정된 랜덤 태그값들(72)의 부분집합 사이에서 선택한다. BeginRandomTag 명령과 EndRandomTag 명령 사이에 ExcludeRandomTag 명령의 최대 T-1개의 인스턴스들이 주어진다면(이때, T는 레지스터 Xm에 표시된 부분집합 내부의 랜덤 태그들의 수이다), 제외되지 않으므로 멀티플렉서(80)에 의해 목적지 레지스터 Xd에서 지정된 어드레스에 랜덤 태그값으로 삽입하기 위해 선택될 수 있는 적어도 한 개의 랜덤 태그값이 항상 존재하게 된다.
이 때문에, 연산은 다수의 명령들로 분할함으로써, 타이밍 요구사항에 부합하고, 입력 어드레스들의 각각의 어드레스 태그들로부터 추출된 2개보다 많은 수의 값들이 여전히 선택으로부터 제외될 수 있게 하면서, 각각의 명령이 최대 2개의 소스 레지스터들만을 지정할 필요가 있도록 보장하는(이것은 레지스터 판독 포트들의 효율적인 사용을 위해 유용할 수 있다) 처리 하드웨어를 구축하는 것을 더 용이하게 할 수 있다.
이때, 전술한 모든 구현예는 단지 예시에 지나지 않으며, 특정한 값들이 선택되지 않게 제외하는 랜덤 태그 설정 명령의 아키텍처상 기능은 다른 하드웨어 구현을 사용하여 구현될 수도 있다는 것이 자명하다.
도 15는 랜덤 태그 설정 명령의 처리방법을 나타낸 흐름도이다. 스텝 100에서, 명령 디코더(60)는, 전술한 명령들의 형태들 중에서 어느 한 개일 수 있는 랜덤 태그 설정 명령을 디코드한다. 스텝 102에서, 디코더(6)는 처리회로를 제어하여 후보 태그값들의 세트 중에서 한 개를 랜덤하게 또는 의사 랜덤하게 선택한다. 명령들의 일부 변종에서는, 스텝 102에서 한 개 이상의 제외된 값들이 선택되는 것이 금지된다. 전술한 것과 같이 어떤 값들이 제외되어야 하는지 표시하는 방법들 중에서 어느 것이 사용될 수 있다. 스텝 104에서, 명령 디코더(6)는 처리회로(4)를 제어하여, 태그 설정 타겟 어드레스에 대한 어드레스 태그를 선택된 랜덤 태그값 그 자체 또는 선택된 랜덤 태그값의 변환값으로 설정한다. 어떤 경우에는, 태그 설정 타겟 어드레스 그 자체의 비트들 또는 복수의 비트들에 근거하여 선택 랜덤 태그값을 변환하는 것이 바람직할 수도 있다. 이것은, 일부 값들이 특수한 하드웨어에 특정한 값들로서 사용되기 때문에, 이들 값들이 선택되지 않도록 제외하는 명령의 형태에 대해 특히 유용할 수 있다. 예를 들어, 태그의 다른 값이 일치하는 것으로 생각되는 "전부 일치"값으로서 어떤 값이 예약되는 경우, 일부 구현예에서는, 어드레스가 발견되는 어드레스 공간의 일부에 따라 전부 일치 값으로서 다른 값들을 사용하는 것이 바람직할 수도 있다. 예를 들어, 최상위 비트가 0인 어드레스들은 전부 일치 값으로서 한 개의 값을 사용할 수 있으며, 최상위 비트가 1인 어드레스들은 전부 일치 값으로서 이와 다른 값을 사용할 수도 있다. 이것은 의도한대로 동작하는 레거시 코드를 지원하면서 구현을 단순화할 수 있다. 특정한 태그 설정 타겟 어드레스에 무관하게 스텝 102에서 마찬가지로 랜덤값을 선택한 후, 그후 어드레스의 다른 비트들에 따라 (비트들의 반전 등의) 변환을 적용함으로써, 랜덤 선택 단계 102를 불필요하게 복잡하게 만들지 않으면서 레거시 코드가 원래 의도한 것과 같이 레거시 기능이 동작하게 할 수 있다.
옵션으로, 스텝 106에서, 태그 설정 타겟 어드레스에 의해 식별된 어드레스 지정된 위치를 포함하는 메모리 위치들의 대응하는 블록과 관련된 보호 태그가 랜덤 태그값으로 설정될 수도 있다. 이 때문에, 랜덤 태그 설정 명령에 응답하여, 명령 디코더(6)는 메모리 액세스 회로(15)를 더 제어하여, 랜덤 태그값을 어드레스 지정된 위치와 관련된 보호 태그를 기억하는 위치에 기록할 수 있다.
도 16은 사용될 수 있는 시뮬레이터 구현예를 나타낸 것이다. 전술한 실시예는 해당 기술을 지원하는 특정한 처리 하드웨어를 작동하기 위한 장치 및 방법에 관해 본 발명을 구현하지만, 컴퓨터 프로그램의 사용을 통해 구현되는 본 발명에서 설명한 실시예에 따라 명령 실행 환경을 제공하는 것도 가능하다. 이와 같은 컴퓨터 프로그램은, 하드웨어 아키텍처의 소프트웨어 기반의 구현을 제공하는 한, 시뮬레이터로 부르는 경우가 많다. 다양한 시뮬레이터 컴퓨터 프로그램은 에뮬레이터, 가상머신, 모델, 및 동적 이진 변환기를 포함하는 이진 변환기를 포함한다. 보통, 시뮬레이터 구현은, 옵션으로 시뮬레이터 프로그램(210)을 지원하는 호스트 운영체계(220)를 실행하는 호스트 프로세서(230) 상에서 실행된다. 일부 구성에서는, 하드웨어와 제공된 명령 실행 환경 사이에 복수 층의 시뮬레이션이 존재하고, 및/또는 동일한 호스트 프로세서 상에서 복수의 별개의 명령 실행 환경이 제공된다. 역사적으로, 합당한 속도에서 실행되는 시뮬레이터 구현을 제공하기 위해 강력한 프로세서들이 요구되었지만, 이와 같은 접근방법은, 호환성이나 재사용 이유로 인해 다른 프로세서에 대해 네이티브한 코드를 실행하려는 요구가 있을 때 등과 같은, 특정한 상황에서 정당화된다. 예를 들어, 시뮬레이터 구현은, 호스트 프로세서 하드웨어에 의해 지원되지 않는 추가적인 기능을 갖는 명령 실행 환경을 제공하거나, 보통 다양한 하드웨어 아키텍처와 관련된 명령 실행 환경을 제공한다. 시뮬레이터의 개관에 대해서는 "Some Efficient Architecture Simulation Techniques", Robert Bedichek, Winter 1990 USENIX Conference, Pages 53-63에 기재되어 있다.
본 실시예를 특정한 하드웨어 구성 또는 특징을 참조하여 설명하였지만, 시뮬레이션된 실시예에서는, 적절한 소프트웨어 구성 또는 특징에 의해 동등한 기능이 제공된다. 예를 들어, 특정한 회로가 시뮬레이션된 실시예에서는 컴퓨터 프로그램 논리로 구현된다. 마찬가지로, 레지스터 또는 캐시 등의 메모리 하드웨어도 시뮬레이션된 실시예에서는 소프트웨어 데이터 구조로 구현된다. 전술한 실시예에서 참조한 한 개 이상의 하드웨어 구성요소들이 호스트 하드웨어(예를 들어, 호스트 프로세서(230) 상에 존재하는 구성에서는, 적절한 경우에, 일부 시뮬레이션된 실시예가 호스트 하드웨어를 이용한다.
시뮬레이터 프로그램(210)은, 컴퓨터 판독가능한 기억매체(212)(이것은 비일시적인 매체일 수도 있다)에 기억되고, 시뮬레이터 프로그램(210)에 의해 모델링되고 있는 하드웨어 아키텍처의 응용 프로그램 인터페이스와 동일한 타겟 코드(200)(이것은 어플리케이션, 운영체계 및 하이퍼바이저를 포함한다)에 프로그램 인터페이스(명령 실행 환경)를 제공한다. 따라서, 전술한 랜덤 태그 설정 명령을 포함하는 타겟 코드(200)의 프로그램 명령들은 시뮬레이터 프로(210)를 사용하여 명령 실행 환경 내에서 실행됨으로써, 전술한 장치(2)의 하드웨어 특징을 실제로 갖지 않는 호스트 컴퓨터(230)가 이들 특징을 에뮬레이트할 수 있다. 예를 들어, 시뮬레이터 프로그램(210)은 타겟 코드(200)의 명령들에 의해 메모리에 대한 액세스를 제어하는 메모리 액세스 프로그램 로직(214)을 포함한다. 예를 들어, 메모리 액세스 프로그램 로직(214)은, 보호 태그와 어드레스 태그의 비교를 행하고, 보호 태그와 어드레스 태그 사이의 불일치가 검출되었는지 여부를 보호하기 위한 명령들을 포함한다. 또한, 시뮬레이터 프로그램(210)은, 타겟 코드(200)에 포함된 랜덤 태그 설정 명령에 응답하여, 하드웨어 실시예가 어드레스 태그를 설정하는 방식과 대응하는 방식으로, 태그 설정 타겟 어드레스와 관련된 어드레스 태그를 전술한 것과 같이 랜덤하게 선택된 값으로 기동하기 위한 명령들을 포함하는 태그 설정 프로그램 로직(216)을 포함한다.
본 발명에서, 단어 "하도록 구성된"은 장치의 구성요소가 정의된 동작을 행할 수 있는 구성을 갖는다는 것을 의미하기 위해 사용된다. 이와 관련하여, "구성"은 하드웨어 또는 소프트웨어의 배치 또는 상호접속 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 갖거나, 프로세서 또는 기타의 처리장치가 기능을 행하도록 프로그래밍되어도 된다. "하도록 구성된"은 이 장치의 구성요소가 정의된 동작을 제공하기 위해 어떤 식으로 변경될 필요가 있는 것을 시사하는 것은 아니다.
첨부도면을 참조하여 본 발명의 예시적인 실시예들을 상세히 설명하였지만, 본 발명은 이들 실시예에 한정되지 않으며, 첨부된 청구범위의 보호범위 및 사상을 벗어나지 않으면서 본 발명이 속한 기술분야의 당업자에 의해 다양한 변경, 부가 및 변화가 행해질 수 있다는 것은 자명하다.

Claims (24)

  1. 처리회로와,
    관련된 어드레스 태그를 갖는 태그 검사 타겟 어드레스에 대해, 상기 어드레스 태그와, 상기 타겟 어드레스에 의해 식별된 어드레스 지정된 위치를 포함하는 한 개 이상의 메모리 위치들의 블록과 관련하여 메모리 시스템에 기억된 보호 태그를 비교하는 과정을 포함하는 보호 태그 검사를 행하는 메모리 액세스 회로와,
    태그 설정 타겟 어드레스를 지정하는 랜덤 태그 설정 명령에 응답하여, 상기 처리회로를 제어하여, 상기 태그 설정 타겟 어드레스와 관련된 상기 어드레스 태그를 후보 태그값들의 집합으로부터 랜덤하게 선택된 랜덤 태그값으로 설정하게 하는 명령 디코더를 구비한 장치.
  2. 제 1항에 있어서,
    상기 랜덤 태그 설정 명령에 응답하여, 상기 명령 디코더는, 상기 처리회로를 제어하여, 상기 후보 태그값들의 집합의 적어도 한 개의 제외된 값이 상기 랜덤 태그값으로 선택되지 않게 하고, 후보 태그값들의 나머지 부분집합으로부터 상기 랜덤 태그값을 랜덤하게 선택하게 하도록 구성된 장치.
  3. 제 2항에 있어서,
    상기 적어도 한 개의 제외된 태그값은 상기 랜덤 태그 설정 명령에 의해 지정된 적어도 한 개의 레지스터에 의해 식별된 한 개 이상의 제외된 태그값들을 포함하는 장치.
  4. 제 2항 또는 제 3항에 있어서,
    상기 적어도 한 개의 제외된 태그값은, 상기 랜덤 태그 설정 명령의 소스 레지스터 또는 목적지 레지스터에 지정된 어드레스와 관련된 어드레스 태그에 대응하는 태그값을 포함하는 장치.
  5. 제 2항 또는 제 3항에 있어서,
    상기 랜덤 태그 설정 명령은 랜덤 선택 상태 정보를 기억하는 적어도 한 개의 소스 레지스터를 지정하고,
    상기 랜덤 선택 상태 정보는, 상기 후보 태그값들의 집합의 적어도 부분집합에 대응하는 복수의 비트들을 포함하는 비트필드를 포함하고, 상기 비트필드의 각각의 비트는 대응하는 후보 태그값이 상기 적어도 한 개의 제외된 태그값 중에서 한 개인지 아닌지를 표시하는 장치.
  6. 제 5항에 있어서,
    상기 명령 디코더는, 태그 제외 타겟 어드레스와 상기 랜덤 선택 상태 정보의 상기 비트필드를 기억하는 목적지 레지스터를 지정하는 태그값 제외 명령에 응답하여, 상기 처리회로를 제어하여, 대응하는 태그값이 상기 적어도 한 개의 제외된 태그값 중에서 한 개라는 것을 표시하도록, 상기 태그 제외 타겟 어드레스와 관련된 어드레스 태그에 대응하는 상기 비트필드의 비트를 갱신하게 하는 장치.
  7. 제 5항 또는 제 6항에 있어서,
    상기 비트필드는 후도 태그값들의 전체 집합에 대응하는 비트들을 포함하는 장치.
  8. 제 5항 및 제 6항에 있어서,
    상기 비트필드는 후보 태그값들의 진부분집합에 대응하는 비트들을 포함하고, 상기 랜덤 선택 상태 정보는 후보 태그값들의 상기 진부분집합의 태그값들을 더 포함하는 장치.
  9. 제 8항에 있어서,
    후보 태그값들의 상기 진부분집합의 태그값들이 상기 비트필드와 동일한 레지스터에 지정되는 장치.
  10. 제 8항 또는 제 9항에 있어서,
    상기 명령 디코더는, 상기 랜덤 선택 상태 정보의 태그값들을 기억하는 목적지 레지스터를 지정하는 랜덤 태그 선택 명령에 응답하여, 상기 처리회로를 제어하여, 상기 후보 태그값들의 집합 중에서 후보 태그값들의 상기 진부분집합을 랜덤하게 선택하게 하고, 후보 태그값들의 선택된 상기 진부분집합의 태그값들을 이 목적지 레지스터에 기록하게 하는 장치.
  11. 제 2항 내지 제 10항 중 어느 한 항에 있어서,
    상기 적어도 한 개의 제외된 태그값은 환경설정 레지스터에 기억된 환경설정 데이터에 의해 식별된 한 개 이상의 제외된 태그값들을 포함하는 장치.
  12. 제 2항 내지 제 11항 중 어느 한 항에 있어서,
    상기 적어도 한 개의 제외된 태그값은 한 개 이상의 하드웨어 정의된 제외된 태그값들을 포함하는 장치.
  13. 제 2항 내지 제 12항 중 어느 한 항에 있어서,
    상기 적어도 한 개의 제외된 태그값은 최대 N개의 제외된 태그값들을 포함하고, 상기 랜덤 태그 설정 명령에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여,
    상기 후보 태그값들의 집합의 적어도 N+1개의 태그값들을 랜덤하게 선택하게 하고,
    선택된 태그값들 각각을 상기 적어도 한 개의 제외된 태그값과 비교하게 하고,
    상기 적어도 한 개의 제외된 태그값 모두와 불일치하는 상기 선택된 태그값들 중에서 한 개를 상기 태그 설정 타겟 어드레스와 관련된 상기 어드레스 태그로 설정할 상기 랜덤 태그값으로서 선택하게 하도록 구성된 장치.
  14. 제 2항 내지 제 12항 중 어느 한 항에 있어서,
    상기 적어도 한 개의 제외된 태그값은, 소정의 제외된 태그값과. 상기 랜덤 태그 설정 명령에 의해 지정된 추가적인 제외된 태그값을 포함하고.
    상기 랜덤 태그 설정 명령에 응답하여, 상기 명령 디코더는, 상기 처리회로를 제어하여,
    상기 후보 태그값들의 집합의 한 개를 선택된 태그값으로서 랜덤하게 선택하게 하고,
    상기 선택된 태그값이 상기 소정의 제외된 태그값과 상기 후보 태그값들의 집합의 추가적인 소정의 태그값 모두와 불일치할 때, 상기 선택된 태그값과,
    상기 선택된 태그값이 상기 소정의 태그값과 상기 추가적인 태그값 중에서 한 개와 일치할 때, 상기 선택된 태그값의 랜덤하게 선택된 비트를 반전하여 얻어진 값
    중에서 한 개인 중간값에 대한 상기 추가적인 제외된 태그값의 비교를 행하게 하고,
    비교에 의해 상기 추가적인 제외된 태그값과 상기 중간값 사이의 불일치가 검출될 때, 상기 태그 설정 타겟 어드레스와 관련된 상기 어드레스 태그로 설정할 상기 랜덤 태그값으로서 상기 중간값을 출력하게 하고,
    비교에 의해 상기 추가적인 제외된 태그값과 상기 중간값 사이의 일치가 검출될 때, 상기 태그 설정 타겟 어드레스와 관련된 상기 어드레스 태그로 설정할 상기 랜덤 태그값으로서 상기 추가적인 소정의 태그값을 출력하게 하도록 구성된 장치.
  15. 제 14항에 있어서,
    상기 소정의 제외된 태그값과 상기 추가적인 소정의 태그값 중에서 한 개는 모든 비트들이 0인 값을 포함하고, 상기 소정의 제외된 태그값과 상기 추가적인 소정의 태그값 중에서 나머지는 모든 비트들이 1인 값을 포함하는 장치.
  16. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 처리회로는 상기 후보 태그값들의 집합으로부터 상기 랜덤 태그값을 의사 랜덤하게 선택하도록 구성된 장치.
  17. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 랜덤 태그 설정 명령에 응답하여, 상기 명령 디코더는, 상기 메모리 액세스 회로를 제어하여, 상기 태그 설정 타겟 어드레스에 의해 식별된 어드레스 지정된 위치를 포함하는 한 개 이상의 메모리 위치들의 블록과 관련하여 메모리 시스템에 기억된 상기 보호 태그를 상기 랜덤 태그값으로 갱신하게 하도록 더 구성된 장치.
  18. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 보호 태그 검사는, 상기 어드레스 태그와 상기 보호 태그 사이에 불일치가 검출될 때, 결함 상태 표시를 반환하는 과정을 포함하는 장치.
  19. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 태그 검사 타겟 어드레스와 관련된 상기 어드레스 태그는 상기 태그 검사 타겟 어드레스의 비트들의 부분집합으로 표시되고,
    상기 랜덤 태그 설정 명령에 응답하여, 상기 명령 디코더는 상기 처리회로를 제어하여 상기 랜덤 태그값에 근거하여 상기 태그 설정 타겟 어드레스의 비트들의 부분집합을 갱신하게 하도록 구성된 장치.
  20. 제 19항에 있어서,
    상기 태그 설정 타겟 어드레스의 비트들의 상기 부분집합은, 상기 태그 설정 타겟 어드레스의 적어도 한 개의 다른 비트에 의존하는 상기 랜덤 태그값의 변환에 대응하는 변환된 태그값으로 갱신되는 장치.
  21. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 보호 태그 검사시에, 상기 어드레스 지정된 위치가 상기 태그 검사 타겟 어드레스와 관련된 상기 어드레스 태그와 무관하게 선택되는 장치.
  22. 관련된 어드레스 태그를 갖는 태그 검사 타겟 어드레스에 대해, 상기 어드레스 태그와, 상기 타겟 어드레스에 의해 식별된 어드레스 지정된 위치를 포함하는 한 개 이상의 메모리 위치들의 블록과 관련하여 메모리 시스템에 기억된 보호 태그를 비교하는 과정을 포함하는 보호 태그 검사를 행하는 단계와,
    태그 설정 타겟 어드레스를 지정하는 랜덤 태그 설정 명령의 디코딩에 응답하여, 상기 태그 설정 타겟 어드레스와 관련된 상기 어드레스 태그를 후보 태그값들의 집합으로부터 랜덤하게 선택된 랜덤 태그값으로 설정하는 단계를 포함하는 방법.
  23. 호스트 데이터 처리장치를 제어하여 타겟 프로그램 코드의 명령들의 실행을 위한 명령 실행 환경을 제공하는 컴퓨터 프로그램으로서,
    관련된 어드레스 태그를 갖는 태그 검사 타겟 어드레스에 대해, 상기 어드레스 태그와, 상기 타겟 어드레스에 의해 식별된 어드레스 지정된 위치를 포함하는 한 개 이상의 메모리 위치들의 블록과 관련하여 메모리 시스템에 기억된 보호 태그를 비교하는 과정을 포함하는 보호 태그 검사를 행하는 메모리 액세스 프로그램 로직과,
    태그 설정 타겟 어드레스를 지정하는 랜덤 태그 설정 명령에 응답하여, 상기 태그 설정 타겟 어드레스와 관련된 상기 어드레스 태그를 후보 태그값들의 집합으로부터 랜덤하게 선택된 랜덤 태그값으로 설정하는 태그 설정 프로그램 로직을 포함하는 컴퓨터 프로그램.
  24. 청구항 23에 기재된 컴퓨터 프로그램을 기억하는 기억매체.
KR1020207029112A 2018-03-20 2019-02-12 태그 보호된 메모리 시스템에 대한 랜덤 태그 설정 명령 KR20200131855A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1804411.5A GB2572158B (en) 2018-03-20 2018-03-20 Random tag setting instruction
GB1804411.5 2018-03-20
PCT/GB2019/050372 WO2019180402A1 (en) 2018-03-20 2019-02-12 Random tag setting instruction for a tag-guarded memory system

Publications (1)

Publication Number Publication Date
KR20200131855A true KR20200131855A (ko) 2020-11-24

Family

ID=62017707

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207029112A KR20200131855A (ko) 2018-03-20 2019-02-12 태그 보호된 메모리 시스템에 대한 랜덤 태그 설정 명령

Country Status (9)

Country Link
US (1) US11681636B2 (ko)
EP (1) EP3769209B1 (ko)
JP (1) JP7460529B2 (ko)
KR (1) KR20200131855A (ko)
CN (1) CN111819543A (ko)
GB (1) GB2572158B (ko)
IL (1) IL276897B2 (ko)
TW (1) TWI804582B (ko)
WO (1) WO2019180402A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2570691B (en) * 2018-02-02 2020-09-09 Advanced Risc Mach Ltd Controlling guard tag checking in memory accesses
US11341241B2 (en) 2019-11-08 2022-05-24 International Business Machines Corporation Enhancing memory safe programming using a page frame tag mechanism
US11372647B2 (en) 2019-12-05 2022-06-28 Marvell Asia Pte, Ltd. Pipelines for secure multithread execution
US11263015B1 (en) * 2019-12-05 2022-03-01 Marvell Asia Pte, Ltd. Microarchitectural sensitive tag flow
US11307857B2 (en) 2019-12-05 2022-04-19 Marvell Asia Pte, Ltd. Dynamic designation of instructions as sensitive for constraining multithreaded execution
US11586554B2 (en) 2020-07-23 2023-02-21 Arm Limited Cache arrangements for data processing systems

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4241396A (en) * 1978-10-23 1980-12-23 International Business Machines Corporation Tagged pointer handling apparatus
EP0438011A3 (en) * 1990-01-18 1993-05-19 International Business Machines Corporation Logic on main storage memory cards for insertion and extraction of tag bits
JP3866597B2 (ja) * 2002-03-20 2007-01-10 株式会社東芝 内部メモリ型耐タンパプロセッサおよび秘密保護方法
US7673345B2 (en) 2005-03-31 2010-03-02 Intel Corporation Providing extended memory protection
US7761676B2 (en) * 2006-12-12 2010-07-20 Intel Corporation Protecting memory by containing pointer accesses
GB2458295B (en) * 2008-03-12 2012-01-11 Advanced Risc Mach Ltd Cache accessing using a micro tag
EP2211285A1 (en) * 2009-01-20 2010-07-28 Nagravision SA Secured data processing device
US8972995B2 (en) 2010-08-06 2015-03-03 Sonics, Inc. Apparatus and methods to concurrently perform per-thread as well as per-tag memory access scheduling within a thread and across two or more threads
US9213828B2 (en) * 2012-02-08 2015-12-15 Arm Limited Data processing apparatus and method for protecting secure data and program code from non-secure access when switching between secure and less secure domains
US9495305B1 (en) * 2012-11-02 2016-11-15 David Fuchs Detecting pointer errors for memory protection
US9514305B2 (en) * 2014-10-17 2016-12-06 Qualcomm Incorporated Code pointer authentication for hardware flow control
US9798668B2 (en) 2014-12-14 2017-10-24 Via Alliance Semiconductor Co., Ltd. Multi-mode set associative cache memory dynamically configurable to selectively select one or a plurality of its sets depending upon the mode
US10152330B2 (en) * 2015-09-21 2018-12-11 Bae Systems Information And Electronic Systems Integration Inc. Memory protection using a tagged architecture
GB2549511B (en) * 2016-04-20 2019-02-13 Advanced Risc Mach Ltd An apparatus and method for performing operations on capability metadata
KR20170138765A (ko) 2016-06-08 2017-12-18 삼성전자주식회사 메모리 장치, 메모리 모듈 및 메모리 장치의 동작 방법
GB2570326B (en) * 2018-01-22 2020-06-10 Advanced Risc Mach Ltd Multiple guard tag setting instruction
EP3916568B1 (en) * 2020-05-29 2024-07-17 ARM Limited Tag checking apparatus and method

Also Published As

Publication number Publication date
JP7460529B2 (ja) 2024-04-02
US11681636B2 (en) 2023-06-20
TWI804582B (zh) 2023-06-11
US20210019268A1 (en) 2021-01-21
IL276897A (en) 2020-10-29
GB2572158B (en) 2020-11-25
IL276897B2 (en) 2024-01-01
GB201804411D0 (en) 2018-05-02
GB2572158A (en) 2019-09-25
TW201945940A (zh) 2019-12-01
WO2019180402A1 (en) 2019-09-26
IL276897B1 (en) 2023-09-01
EP3769209B1 (en) 2022-07-27
CN111819543A (zh) 2020-10-23
EP3769209A1 (en) 2021-01-27
JP2021517690A (ja) 2021-07-26

Similar Documents

Publication Publication Date Title
TWI804582B (zh) 用於隨機標籤設定指令的設備及方法
JP7291149B2 (ja) メモリ・アクセスにおける保護タグ・チェックの制御
US20230236925A1 (en) Tag checking apparatus and method
US11327903B2 (en) Multiple guard tag setting instruction
US11397541B2 (en) Controlling guard tag checking in memory accesses
CN111566628B (zh) 控制存储器访问中的守卫标签检查的设备和方法
WO2023175289A1 (en) Read-as-x property for page of memory address space
WO2022218517A1 (en) Method and device for verifying execution of a program code
JP2021513139A (ja) データ処理装置におけるアドレス変換

Legal Events

Date Code Title Description
A201 Request for examination