KR20200107997A - 다중 가드 태그 설정 명령어 - Google Patents

다중 가드 태그 설정 명령어 Download PDF

Info

Publication number
KR20200107997A
KR20200107997A KR1020207021904A KR20207021904A KR20200107997A KR 20200107997 A KR20200107997 A KR 20200107997A KR 1020207021904 A KR1020207021904 A KR 1020207021904A KR 20207021904 A KR20207021904 A KR 20207021904A KR 20200107997 A KR20200107997 A KR 20200107997A
Authority
KR
South Korea
Prior art keywords
tag
guard
address
memory
memory access
Prior art date
Application number
KR1020207021904A
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 KR20200107997A publication Critical patent/KR20200107997A/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/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • 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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1405Saving, restoring, recovering or retrying at machine instruction level
    • G06F11/141Saving, restoring, recovering or retrying at machine instruction level for bus or memory accesses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • 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/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • 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/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0772Means for error signaling, e.g. using interrupts, exception flags, dedicated error registers
    • 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)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Storage Device Security (AREA)
  • Burglar Alarm Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System (AREA)

Abstract

장치(2)는 타겟 어드레스에 응답하여 태그 가드 메모리 액세스 동작을 수행하는 메모리 액세스 회로(15)를 갖는다. 태그 가드 메모리 액세스 동작은 타겟 어드레스에 의해 식별된 어드레스된 위치(44)를 포함하는 하나 이상의 메모리 위치의 블록(30)과 관련하여 메모리 시스템(16-18)에 저장된 가드 태그(32)와 타겟 어드레스와 연관된 어드레스 태그(40)를 비교하는 것과, 가드 태그와 어드레스 태그 사이에서 일치가 검출되는지 여부의 표시를 생성하는 것을 포함한다. 명령어 디코더(6)는 하나 이상의 메모리 위치의 적어도 2개의 연속 블록과 관련된 가드 태그를 업데이트하기 위해 메모리 액세스를 트리거하는 메모리 액세스 회로(15)를 제어하기 위한 다중 가드 태그 설정 명령어를 디코딩한다.

Description

다중 가드 태그 설정 명령어
본 기술은 데이터 처리의 분야에 관한 것이다.
데이터 처리 장치에 의해 실행되는 소프트웨어는 일반적으로 고레벨 프로그래밍 언어로 작성된 후, 소프트웨어가 실행될 장치에 의해 지원되는 명령어 세트 아키텍처에 따라 코드로 컴파일될 수 있다. 예를 들어, 소프트웨어는 원래 Java, C 또는 C++와 같은 고레벨 언어로 작성된 다음 x86 또는 Arm®과 같은 기본적으로 지원되는 명령어 세트 아키텍처로 컴파일될 수 있다.
Java와 같은 일부 고레벨 프로그래밍 언어는 메모리 액세스와 관련된 특정 오류를 확인하기 위한 런타임 오류 검출 체크를 포함하므로 메모리 안전 언어로 간주된다. 반대로, C 및 C++와 같은 메모리 위험(memory-unsafe) 언어에는 이러한 런타임 오류 검사가 포함되지 않는다. 메모리 위험 언어를 지속적으로 널리 사용한다는 것은 주어진 명령어 세트 아키텍처에 따라 컴파일된 코드에는, 공격자 또는 기타 악의적인 당사자에 의한 악용에 취약할 수 있는 많은 수의 메모리 관련 오류가 있을 수 있음을 의미한다. 이러한 오류에는 다음이 포함될 수 있다 :
· 코드에 의해 제공되는 어레이 인덱스가 어레이의 합법적인 범위를 벗어난, 경계 위반(bounds violations);
· 메모리 위치가 이미 할당 해제되거나 자유로워진 후 메모리 위치에 액세스할 수 있는, 프리 후 사용 오류(use-after-free);
· 함수 내에서 사용된 변수(예를 들면, 스택(stack)에 대한 값)와 관련된 어드레스에 대한 메모리 액세스는 함수로부터 이미 리턴한 후에 이루어지는, 리턴 후 사용;
· 변수가 선언(declared)된 범위 밖에서 변수에 액세스하는, 범위 밖 사용 오류;
· 변수가 초기화되기 전에 변수와 관련된 메모리 어드레스에 액세스하는, 초기화 전 사용 오류.
이들은 예측할 수 없는 동작을 유발하고 잠재적으로 공격자가 악용할 수 있는 방법을 제공할 수 있는 메모리 관련 오류의 일부 예일 뿐이다. 따라서, 주어진 처리 장치에 의해 지원되는 명령어 세트 아키텍처 내에서, 특정 클래스의 메모리 오류의 런타임 검출에 도움을 주기 위해, 아키텍처 지원을 제공하는 것이 바람직할 수 있다.
적어도 몇몇 예에 따라 제공되는 장치는,
타겟 어드레스에 응답하여 태그 가드(tag-guarded) 메모리 액세스 동작을 수행하는 메모리 액세스 회로를 구비하고, 상기 태그 가드 메모리 액세스 동작은,
타겟 어드레스에 의해 식별된 어드레스된 위치를 포함하는 하나 이상의 메모리 위치의 블록과 관련하여 타겟 어드레스와 연관된 어드레스 태그를 메모리 시스템에 저장된 가드 태그와 비교하는 것과,
가드 태그와 어드레스 태그 사이에서 일치가 검출되는지의 표시를 생성하는 것을 포함하며,
하나 이상의 메모리 위치의 적어도 2개의 연속 블록과 연관된 가드 태그를 업데이트하기 위해 적어도 하나의 메모리 액세스를 트리거하는 상기 메모리 액세스 회로를 제어하기 위한 다중 가드 태그 설정 명령어를 디코딩하는 명령어 디코더를 더 구비한다.
적어도 몇몇 예에 따라 제공되는 방법은,
타겟 어드레스에 응답하여 태그 가드 메모리 액세스 동작을 수행하는 단계를 포함하고, 상기 태그 가드 메모리 액세스 동작은,
타겟 어드레스에 의해 식별된 어드레스된 위치를 포함하는 하나 이상의 메모리 위치의 블록과 관련하여 타겟 어드레스와 연관된 어드레스 태그를 메모리 시스템에 저장된 가드 태그와 비교하는 것과,
가드 태그와 어드레스 태그 사이에서 일치가 검출되는지의 표시를 생성하는 것을 포함하며,
다중 가드 태그 설정 명령어의 디코딩에 응답하여, 하나 이상의 메모리 위치의 적어도 2개의 연속 블록과 연관된 가드 태그를 업데이트하기 위해 적어도 하나의 메모리 액세스를 트리거하는 단계를 더 포함한다.
적어도 몇몇 예에 따라 제공되는, 타겟 프로그램 코드의 명령어들을 실행하기 위한 명령어 실행 환경을 제공하기 위해 호스트 데이터 처리 장치를 제어하기 위한 컴퓨터 프로그램은,
타겟 어드레스에 응답하여 태그 가드 메모리 액세스 동작을 수행하는 메모리 액세스 프로그램 로직을 구비하고, 상기 태그 가드 메모리 액세스 동작은,
타겟 어드레스에 의해 식별된 어드레스된 위치를 포함하는 하나 이상의 메모리 위치의 블록과 관련하여 타겟 어드레스와 연관된 어드레스 태그를 메모리 시스템에 저장된 가드 태그와 비교하는 것과,
가드 태그와 어드레스 태그 사이에서 일치가 검출되는지의 표시를 생성하는 것을 포함하며,
타겟 프로그램 코드의 다중 가드 태그 설정 명령어에 응답하여 하나 이상의 메모리 위치의 적어도 2개의 연속 블록과 연관된 가드 태그들을 업데이트하기 위해 적어도 하나의 메모리 액세스를 트리거하는 태그 설정 프로그램 로직을 더 구비한다.
저장 매체는 상술한 컴퓨터 프로그램을 저장할 수 있다. 저장 매체는 비일시적 저장 매체일 수 있다.
본 기술의 추가적인 국면, 특징 및 이점은 첨부 도면과 함께 판독될 다음의 예의 설명으로부터 명백해질 것이다.
도 1은 데이터 처리 장치의 일례를 개략적으로 도시한 것이다.
도 2는 어드레스 태그가 가드 태그와 일치하는지를 체크하는 것을 포함하는 태그 가드 메모리 액세스 동작의 예를 도시한 것이다.
도 3은 태그 가드 메모리 액세스 동작을 수행하는 방법을 도시한 흐름도이다.
도 4는 다중 가드 태그 설정 명령어의 레지스터 길이 지정 변형을 도시한 것이다.
도 5는 도 4의 명령어를 처리하는 방법을 도시한 흐름도이다.
도 6은 동일한 다중 가드 태그 설정 명령어에 응답하여 상이한 수의 태그를 업데이트하는 상이한 마이크로 아키텍처 구현의 예를 도시한 것이다.
도 7은 캐시 라인 정렬에 근거하여 얼마나 많은 태그가 업데이트되는지를 변경하는 유연성을 갖는 마이크로 아키텍처의 예를 도시한 것이다.
도 8은 다중 가드 태그 설정 명령어의 즉시 길이 지정 변형을 도시한 것이다.
도 9는 도 6의 명령어를 처리하는 방법을 도시한 흐름도이다.
도 10은 업데이트된 태그 값이 태그 업데이트된 어드레스에 대한 별도의 레지스터를 사용하여 지정되는 도 4의 명령어의 대안적인 변형을 도시한 것이다.
도 11은 다중 가드 태그 설정 명령어의 데이터 소거 변형을 도시한 것이다.
도 12는 다중 가드 태그 설정 명령어를 지원하는 시뮬레이터의 예를 도시한 것이다.
위에서 논의된 유형의 특정 메모리 사용 에러로부터 보호하기 위한 하나의 접근법은 하나 이상의 메모리 위치의 블록과 관련하여 메모리 시스템에 저장되는 가드 태그를 제공하는 것일 수 있다. 메모리 시스템에서 특정 어드레스된 위치를 식별하는 타겟 어드레스에 근거하여 태그 가드(tag-guarded) 메모리 액세스 동작이 요청될 때, 메모리 액세스 회로는. 타겟 어드레스와 연관된 어드레스 태그를, 타겟 어드레스에 의해 식별된 어드레스된 위치를 포함하는 하나 이상의 메모리 위치의 블록과 관련하여 메모리 시스템에 저장된 가드 태그와 비교할 수 있다. 메모리 액세스 회로는 가드 태그와 어드레스 태그와의 사이에서 일치가 검출되는지의 표시를 생성할 수 있다. 이 표시는 메모리 액세스가 성공할 수 있는지 또는 후속 동작이 성공할 수 있는지, 또는 메모리 액세스가 정상적으로 계속되는 동안 보고될 수 있는지를 제어하는 데 사용될 수 있다.
이것은, 예를 들어 C 또는 C++와 같은 메모리 위험 언어를 기반으로 코드를 컴파일하는 컴파일러가, 메모리의 영역을 초기화할 때, 코드가 특정 값에 액세스할 것으로 예상되는 메모리의 블록들의 가드 태그를 설정할 수 있으므로 유용할 수 있으며, 대응하는 어드레스 태그 값을 이들 블록을 가리키는 타겟 어드레스와 연관시킬 수 있다. 메모리 사용 오류가 발생하고, 예를 들어 어드레스 포인터가 범위를 벗어나서 사용되거나 초기화된 유효 범위의 경계를 벗어나서 연장되면, 어드레스된 위치와 연관된 가드 태그가 타겟 어드레스와 관련된 어드레스 태그와 일치하지 않을 수 있고, 이 경우 일치가 검출되었는지 여부의 표시를 사용하여 일부 오류 처리 응답 또는 오류 보고 메커니즘을 트리거할 수 있다. 특정 응답은 실행중인 소프트웨어의 특정 요구 또는 아키텍처의 특정 마이크로 아키텍처 구현에 의존할 수 있다. 따라서, 고레벨 언어가 메모리 액세스 오류에 대비해 조심하기 위해 런타임 오류 체크를 수행하기 위한 수단을 가지고 있지 않더라도, 컴파일된 코드에 사용되는 ISA에는 이러한 체크를 수행하기 위한 아키텍처 기능이 포함될 수 있다.
그러나, 이러한 가드 태그를 사용하면 특정 메모리 블록과 관련된 가드 태그를 설정하는 데 약간의 오버헤드가 발생할 수 있다. 가드 태그 설정과 관련된 지연이 수행중인 실제 소프트웨어 기능의 후속 처리도 지연시킬 수 있으므로 메모리 위치 블록과 관련된 가드 태그를 설정하는 프로세스는 비교적 빠를 필요가 있다. 아래에서 논의되는 장치는 하나 이상의 메모리 위치의 적어도 두 개의 연속 블록과 연관된 가드 태그를 업데이트하기 위해 적어도 하나의 메모리 액세스를 트리거하는 메모리 액세스 제어 회로를 제어하기 위한 다중 가드 태그 설정 명령어를 디코딩하는 명령어 디코더를 갖는다. 메모리 위치들의 연속적인 블록들의 범위와 연관된 가드 태그들이 얘를 들면, 메모리 영역 초기화시, 동일한 태그 값으로 설정되는 것이 비교적 일반적일 수 있다. 단일 명령에 응답하여, 전체 범위의 메모리 블록과 관련된 가드 태그를 업데이트하는 데 필요한 하나 이상의 메모리 액세스를 트리거할 수 있는 다중 가드 태그 설정 명령어를 제공함으로써, 이것은 태그의 설정 속도를 높여서 성능을 개선할 수 있다. 또한, 이 명령어는 명령어가 더 적은 엄격한 루프는 주어진 메모리 영역에 대한 태그 설정을 제어할 수 있기 때문에 메모리 및 캐시에 명령어를 저장하기 위한 공간이 적게 필요하므로 코드 밀도를 줄이는 데 도움이 된다.
가드 태그와 어드레스 태그 사이에서 일치가 검출되는지에 대한 생성된 표시의 특정 형태는 구현마다 다를 수 있다. 일부 경우에, 태그 가드(tag-guarded) 메모리 액세스 동작은 가드 태그와 어드레스 태그 사이의 일치가 검출되는지 여부에 따라 어드레스된 위치로의 메모리 액세스가 허용되는지를 제어하는 것을 포함할 수 있다. 그러나, 다른 예들에서는, 태그 가드 메모리 액세스는 가드 태그와 어드레스 태그 사이의 일치가 검출되는지 여부에 관계없이 어드레스된 위치에 대한 메모리 액세스를 수행하는 것을 포함할 수 있다. 예를 들어, 주어진 메모리 위치 블록과 연관된 가드 태그는 메모리 시스템 내의 상이한 메모리 위치의 블록에 저장될 수 있으며, 따라서 가드 태그에 액세스하기 위해서는 별도의 판독 동작이 필요할 수 있다. 따라서, 가드 태그와 어드레스 태그가 비교되었을 때까지 메모리 액세스가 지연되면 실제 메모리 액세스의 처리를 지연시킬 수 있으므로, 가드 태그가 이용 가능하기 전에 어드레스된 위치에 대한 메모리 액세스를 수행하고, 가드 태그와 어드레스 태그 사이에서 어떤 일치가 검출되는지 여부에 관계없이, 가드 태그가 획득되었고 어드레스 태그와 비교되었으면 일치가 검출되는지의 개별 표시를 생성하는 것이 바람직할 수 있다.
일 예에서, 일치가 검출되는지 여부의 표시는 결함 조건(fault condition)을 나타내는 신호일 수 있으며, 이는 가드 태그와 어드레스 태그 사이에서 불일치가 검출될 때 발생된다. 예를 들어, 메모리 액세스 회로는 액세스 허가가 위반되거나 매핑(unmapped)되지 않은 어드레스가 액세스되거나, 상이한 종류의 결함 조건이 표시될 때 발생된 결함과 유사한 메모리 결함을 시그널링(signal)할 수 있다. 결함 신호는 처리 회로를 트리거하여 검출된 결함에 응답하기 위한 예외 처리 루틴을 실행할 수 있다.
대안적으로, 상태 표시는 장치의 처리 회로에 액세스 가능한 제어 레지스터 내에 기록되어, 가드 태그와 어드레스 태그의 비교에서 일치 또는 불일치가 검출되었는지 여부를 표시할 수 있다. 그런 다음 메모리 액세스가 유효한지 여부를 체크하기 위해 후속 명령어로 상태 정보를 판독할 수 있다.
어드레스 태그와 가드 태그가 일치했는지 또는 아닌지를 보고하는 또 다른 옵션은 실행된 코드와 관련된 에러 로그(error log)에 정보를 기록하는 것일 수 있는데, 이는 코드 전체에서 검출된 가드 태그 에러를 추적할 수 있다. 예를 들어, 불일치 가드 태그 및 어드레스 태그에 응답하여, 불일치를 트리거한 타겟 어드레스 또는 불일치하는 메모리 액세스를 트리거한 명령어의 명령어 어드레스가 에러 로그에 기록될 수 있다. 이 경우, 코드의 동작을 방해하기 위한 특정 작업을 수행하는 대신, 에러를 에러 로그에 간단히 기록할 수 있다. 그런 다음 코드의 소프트웨어 제공자가 후속 버전의 소프트웨어에서 오류를 제거하는 것을 돕기 위해 그 제공자가 에러 로그를 사용할 수 있도록 하게 한다.
따라서, 가드 태그 일치/불일치 표시가 메모리 액세스 회로에 의해 생성될 수 있는 다양한 방식이 존재함을 이해할 것이다.
일부 실시 예에서, 대응하는 가드 태그를 갖는 메모리 위치의 블록은 각각 단일 메모리 위치를 포함할 수 있다. 이 경우, 각각의 개별 메모리 위치는 상이한 가드 태그를 가질 수 있으며, 이는 더 큰 범위의 메모리 에러가 검출될 수 있도록 가드 태그를 설정하는 미세한 입상(granularity)을 제공할 수 있다.
그러나, 실제로는 각각의 어드레스된 위치에 대해 개별 가드 태그를 설정하는 오버헤드가 너무 높을 수 있으며, 각 가드 태그를 다수의 메모리 위치의 블록과 연관시키는 것이 더 효율적일 수 있다. 이 경우 인접한 여러 메모리 위치가 동일한 가드 태그를 공유할 수 있으며, 이는 일반적인 형태의 메모리 관련 에러를 검출하기에 충분할 수 있다.
주어진 메모리 위치 블록과 연관되는 가드 태그는 메모리 시스템 내의 임의의 다른 메모리 위치에 저장될 수 있다. 메모리 시스템에서의 가드 태그의 위치를 선택하는 특정 방식은 구현마다 또는 런타임시에 크게 달라질 수 있다. 일부 예에서는, 가드 태그를 저장하는 위치는 처리 회로에 의해 구조적으로 액세스 가능할 수 있으며, 즉 가드 태그 저장 위치는 어드레스된 위치와 동일한 어드레스 공간의 일부에 매핑된 위치일 수 있다. 이 경우에, 어드레스된 위치 자체와 대응하는 태그 저장 위치의 어드레스 사이의 매핑은 고정되거나 고정 배선(hardwired)될 수 있거나, 또는 가변적일 수 있으며, 예를 들면 메모리 액세스 회로에 의해 유지되는 트래킹 테이블(tracking table) 또는 변환 색인 버퍼에서 추적될 수 있다. 대안적으로, 다른 구현들은 주어진 어드레스된 위치와 관련된 가드 태그를, 처리 회로에 구조적으로(architecturally) 액세스할 수 없는 추가 저장 위치에, 예를 들면 처리 회로에 의해 실행되는 명령어들에 의해 어드레싱될 수 있는 어드레스 공간에 매핑되지 않는 마이크로 아키텍처에 제공된 추가 저장장치에 저장할 수 있다. 이 경우에, 메모리 액세스 회로는 어드레스된 위치의 어드레스에 근거하여, 대응하는 태그 저장 위치를 참조하는데 사용되는 특정 내부 어드레스를 결정하고, 태그 저장 위치로부터 태그 데이터를 판독하는데 필요한 임의의 추가 메모리 액세스를 트리거할 수 있다. 태그 저장 위치가 처리 회로에 구조적으로 액세스 가능한지 아닌지 여부에 관계없이, 태그 값들은 데이터 값들에 사용된 동일한 캐시 내에서, 또는 전용 태그 캐시 내에서, 빠르게 액세스하기 위한 캐시 내에 캐시될 수도 있다.
일부 경우에, 가드 태그는 예를 들어 4 또는 8 비트와 같이 상대적으로 작을 수 있으므로, 상이한 메모리 위치 블록과 각각 연관된 다중 가드 태그는 동일한 메모리 위치 내에 적합할 수 있다. 따라서, 다중 가드 태그는 다중 가드 태그 설정 명령어에 응답하여 업데이트될 수 있지만, 일부 경우에 다중 가드 태그는 메모리 액세스 회로에 의한 단일 기록 동작에 의해 기록될 수 있는 단일 위치 내에 모두 저장된다면 단일 메모리 액세스에서 업데이트될 수 있다. 대안적으로, 다른 구현들은 다중 가드 태그 설정 명령어에 응답하여 설정될 가드 태그의 상이한 서브세트를 설정하기 위한 다중의 독립적인 기록을 트리거할 필요가 있을 수 있다. 따라서, 명령어가 가드 태그를 설정하기 위한 단일 메모리 액세스 또는 다중 메모리 액세스를 트리거할 수 있다.
어드레스 태그는 상이한 방식으로 타겟 어드레스와 연관될 수 있다. 일부 경우에 어드레스 태그는 타겟 어드레스와 별도로 예를 들어, 태그 가드 메모리 액세스 동작을 트리거하는 태그 가드 메모리 액세스 명령어에 의해 지정된 별도의 레지스터를 사용하여 지정될 수 있다. 그러나, 다른 예들에서는, 어드레스 태그는 타겟 어드레스의 하나 이상의 선택된 비트의 함수로서 결정될 수 있다. 즉, 어드레스 태그는 타겟 어드레스 자체의 일부로부터 도출된 정보를 포함할 수 있다. 종종, 명령어 세트 아키텍처는 특정 수의 비트(예를 들어 64 비트)를 갖는 어드레스를 지원할 수 있지만, 주어진 하드웨어 디바이스는 실제로 그 비트의 수를 사용하여 표현될 수 있는 모든 가능한 어드레스를 사용할 만큼 많은 메모리 용량을 필요로 하지 않을 수 있다. 예를 들어, 현재 디바이스 사용 추세에 따라 264개의 개별 어드레스 가능한 위치를 아직 제공할 필요가 없다. 따라서, 종종 메모리 어드레스의 일부 비트는 효과적으로 사용되지 않을 수 있으며 항상 같은 값을 가지거나, 가장 중요한 "실제" 어드레스 비트의 부호 확장(sign extension)으로서(사용되지 않는 부분이 모두 0 또는 모두 1로 설정되도록) 설정될 수 있다. 따라서 이 미사용 부분은 어드레스 태그 또는 어드레스 태그를 도출하기 위한 값을 나타내기 위해 재사용될 수 있어, 어드레스 태그를 얻기 위해 별도의 레지스터에 액세스할 필요가 없으며, 또한 어드레스들 간의 대응을 보다 쉽게 추적할 수 있고, 어드레스 태그로서의 대응하는 어드레스 태그는 의미상 어드레스가 조작되거나 레지스터 사이에서 이동할 때마다 어드레스와 함께 전송될 수 있다.
어드레스 태그를 결정하기 위해 타겟 어드레스의 일부를 사용하는 실시 예에서, 이 어드레스 태그는 타겟 어드레스에 의해 식별된 어드레스된 위치로부터의 정보가 캐시 내에 저장되는지 여부를 판정하기 위해 캐시에 의해 사용될 수 있는 타겟 어드레스의 태그 부분과 다르다는 것에 유의한다. 많은 캐싱 방식은 캐시 내에 데이터와 함께 캐시된 데이터의 어드레스의 태그 부분을 저장함으로써, 주어진 어드레스에 대한 캐시를 검색할 때, 캐시된 데이터가 실제로 필요한 어드레스에 해당하는지 여부를 판정하기 위해 어드레스의 일부를 캐시된 데이터와 함께 저장된 태그와 비교할 수 있다. 그러나, 이 경우, 캐시 내의 태그와 비교되는, 어드레스의 태그 부분은 데이터가 필요한 특정 어드레스된 위치를 실제로 식별하는 어드레스의 부분의 일부일 것이며, 즉 어드레스의 캐시 태그 부분을 변경하면 의미상 어드레스가 메모리 시스템 내의 상이한 어드레스된 위치를 가리키게 된다. 대조적으로, 태그 가드 메모리 동작에 사용되는 어드레스 태그와 함께, 메모리 액세스 회로는 어드레스 태그와 관계없이 데이터가 필요한 어드레스된 위치를 선택할 수 있다. 즉, 어드레스 태그가 상이한 값을 가지더라도, 타겟 어드레스에 의해 참조되는 어드레스된 위치는 어드레스된 위치의 선택이 타겟 어드레스의 다른 부분에만 의존하는 것과 여전히 동일할 수 있다. 이것은 컴파일러가 메모리 시스템 내의 관련 데이터 블록에 할당된 대응하는 가드 태그 값과 일치하도록 특정 어드레스와 연관된 어드레스 태그를 임의의 값으로 설정할 수 있는 자유를 제공한다. 또한, 캐시 태깅(cache tagging)을 이용하여, 캐시로의 태그 값의 저장은 캐시 제어기에 의해 제어될 수 있고, 명령어 디코더에 의해 디코딩된 태그 설정 명령에 의해 명시적으로 지시될 필요가 없고, 전형적으로 주어진 어드레스된 위치에 대한 메모리 액세스에 응답하여 단일 캐시 태그만 새로운 값(주어진 어드레스된 위치와 연관된 데이터를 캐시하는 데 사용되는 캐시 엔트리와 연관된 캐시 태그)으로 설정하면 된다. 대조적으로, 다중 가드 태그 설정 명령어와 함께, 명령어 디코더는 메모리에서 상이한 어드레스된 위치와 관련된 다중 가드 태그의 설정을 지시하기 위한 특정 명령어를 지원한다.
일부 구현에서, 명령어 디코더는 메모리 액세스 명령어들의 별도의 비태그 가드(non-tag-guarded) 및 태그 가드 변형(variants)을 지원할 수 있다. 이 경우, 태그 가드 메모리 액세스 동작은 메모리 액세스 명령어의 태그 가드 변형에 응답하여 트리거될 수 있다. 반대로 비태그 가드 메모리 액세스 명령어들은 가드 태그를 얻거나 어드레스 태그와 가드 태그 간의 비교를 수행할 필요없이, 해당 명령어로 지정된 타겟 어드레스로 식별된 어드레스 지정된 위치에 대한 액세스를 간단히 트리거할 수 있다.
그러나, 다른 구현에서는, 모든 메모리 액세스는 태그 가드 메모리 액세스인 것으로 간주될 수 있다. 따라서, 일부 경우에, 임의의 메모리 액세스 명령어는 상술한 바와 같이 태그 가드 메모리 액세스 동작을 수행하기 위해 메모리 액세스 회로를 트리거하는 것으로 간주될 수 있다.
그러나, 모든 메모리 액세스 명령어들이 태그 가드 메모리 액세스 명령어들이라고 해석되더라도, 명령어 세트 아키텍처가 특정 동작에 대해 가드 태그 비교를 선택적으로 디스에이블하는 것을 지원할 수 있는 다른 방법이 여전히 있을 수 있다. 예를 들어, 처리 장치의 제어 레지스터 내의 제어 파라미터는 태그 비교를 선택적으로 디스에이블할 수 있다. 또 다른 옵션은 어드레스 태그의 특정 값을 특별한 방식으로 해석하여 어드레스 태그가 가드 태그의 어떤 가능한 값과 일치하는 것으로 간주되어야 함을 나타내며, 다시 태그 비교의 영향을 효과적으로 디스에이블하여 어드레스 태그가 가드 태그와 일치하는지 여부에 관계없이 어떠한 에러도 보고되지 않도록 하는 것이다.
다중 가드 태그 설정 명령어는 상이한 방식으로 구현될 수 있다. 하나의 특히 유용한 변형은 길이 레지스터를 식별하는 다중 가드 태그 설정 명령어의 레지스터 길이-지정 변형(register-length-specifying variant)을 제공하는 것이다. 이 변형에 응답하여, 명령어 디코더는 메모리 액세스 회로를 제어하여 길이 레지스터에 저장된 길이 파라미터에 의해 식별된 최대 블록 수 이하의 주어진 연속 블록 수와 연관된 가드 태그를 업데이트하고, 주어진 수에 비례하는 양만큼 길이 레지스터에 저장된 길이 파라미터를 감소시키기 위한 처리 회로를 제어할 수 있다. 따라서, 가드 태그가 업데이트될 절대 블록 수를 지정하는 대신, 길이 레지스터는 명령어에 응답하여 대응하는 가드 태그가 업데이트될 수 있는 최대 블록 수를 지정한다. (가드 태그가 업데이트될) 주어진 연속 블록 수로서 선택된 특정 수는 구현별로 선택될 수 있거나 런타임에 변할 수 있다. 이것은 마이크로 아키텍처 설계에서 유연성을 제공하는 동시에 다양한 마이크로 아키텍처에서 예상되는 아키텍처 동작으로 동일한 시퀀스의 명령어들을 실행할 수 있도록 하는 데 유용할 수 있다. 따라서, 구현 불가지론적인(implementation-agnostic) 소프트웨어 루틴은 명령어의 레지스터의 길이 지정 변형(register-length-specifying variant)을 사용하여 실행될 수 있으며, 그에 따라 구현은 태그 설정의 특정 입도(granularity)를 결정할 수 있다.
이러한 형태의 다중 가드 태그 설정 명령어는 단일 명령어에 응답하여 큰 영역의 메모리에 대한 모든 업데이트 동작을 수행하도록 메모리 액세스 회로를 커밋(commit)하는 것이 바람직하지 않기 때문에 매우 유용할 수 있다. 예를 들어, 많은 상이한 가드 태그를 업데이트하기 위한 메모리 액세스가 커밋되면, 이것은 다른 동작을 처리하기 위한 리소스를 차단할 수 있으며 메모리 액세스 동작을 재정렬(reorder)하여 효율성을 향상시키기 어렵게 만들 수 있다. 따라서 일부 마이크로 아키텍처 설계자는 하나의 명령어로 몇 개의 가드 태그를 업데이트할 수 있는지 제한하는 것을 선호할 수 있다. 하나의 명령어에 응답하여 허용된 가드 태그 업데이트의 수는 구현마다 다를 수 있다. 예를 들어, 상이한 구현은 메모리 시스템에서 상이한 캐시 라인 크기를 구현할 수 있다. 더 큰 캐시 라인 크기를 갖는 구현은 더 작은 캐시 라인 크기를 사용하는 구현보다 하나의 명령어에 응답하여 더 많은 가드 태그를 설정할 수 있다. 또한, 특정 마이크로 아키텍처 구현 내에서도, 때때로 하나의 명령어에 응답하여 효율적으로 설정될 수 있는 가드 태그의 수는 캐시 라인 내에서 타겟 어드레스의 상대 위치에 의존할 수 있다. 예를 들어 캐시 라인 경계에 맞춰 메모리 액세스를 수행하는 것이 더 효율적일 수 있으므로, 업데이트할 태그 값이 캐시 라인을 통해 어느 정도 시작되는 경우, 다음 캐시 라인으로 계속 진행하지 않고 캐시 라인의 끝까지 확장되는 가드 태그만 업데이트하는 것이 더 효율적일 수 있으므로, 이후의 다중 가드 태그 설정 명령어의 인스턴스(instance)는 메모리 액세스를 보다 효율적으로 만드는 정렬된 어드레스로부터 시작될 수 있다.
따라서, 여러 가지 이유로, 다중 가드 태그 설정 명령어에 응답하여 가드 태그가 업데이트된 메모리 위치의 블록 수를 변경하는 유연성을 메모리 액세스 회로에 제공하는 것이 유용할 수 있다. 길이 레지스터에서 길이 파라미터에 의해 지정된 최대 블록 수는, 가드 태그가 설정되어야 하는 범위의 끝을 넘어서 가드 태그가 업데이트되지 않도록 업데이트를 제한한다. 명령어가 가드 태그가 업데이트되었던 주어진 블록 수에 근거하여 길이 파라미터를 감소시키기 위해 처리 회로를 트리거하기 때문에, 이것은 다중 가드 태그 설정 명령어를 포함하는 명령어들의 루프가 초기에 가드 태그가 길이 레지스터에서 업데이트될 필요한 블록의 수를 지정하도록 정의될 수 있고, 그런 다음 루프가 다중 가드 태그 설정 명령어의 여러 인스턴스(instance)를 통해서 반복할 수 있다는 것을 의미하는데, 각 반복은 일단 길이 파라미터가 0으로 감소되면 루프가 종료될 때까지, 태그가 업데이트된 블록 수에 비례하는 양만큼 길이 파라미터를 감소시키고, 이때 필요한 수의 태그가 설정되었을 것이다. 이것은 실제로 얼마나 많은 블록이 단일 인스턴스(instance) 명령어에 응답하여 가드 태그 값으로서 업데이트되었는지에 관계없이 정확히 동일한 루프를 다양한 서로 다른 마이크로 아키텍처에서 실행할 수 있게 한다.
일부 예에 있어서, 길이 파라미터는 태그를 업데이트할 정확한 블록 수를 지정할 수 있다. 이 경우, 길이 파라미터가 감소되는 양은 주어진 수 자체와 동일할 수 있다.
대안적으로, 일부 구현에 있어서, 길이 파라미터가 감소되는 양은 가드 태그가 업데이트되는 블록의 수보다 크거나 작을 수 있지만, 가드 태그가 업데이트되는 블록의 수에 비례한다.
예를 들어, 일부 구현에서는 길이 파라미터는 가드 태그가 설정될 메모리의 바이트 수로서 지정될 수 있다. 마이크로 아키텍처는 길이 파라미터에서 정의된 최대값 이하의 특정 바이트 수를 선택할 수 있고, 선택된 바이트 수의 메모리에 대한 가드 태그를 설정할 수 있다. 각각의 가드 태그는 복수 바이트의 메모리에 대응할 수 있으므로, 이는 길이 파라미터가 감소되는 양이 명령어에 응답하여 업데이트되는 태그의 수에 비례하지만 그보다 클 수 있음을 의미할 수 있다.
다른 예에서는, 길이 파라미터는 블록의 일부 기본 입도(base granularity)의 배수에 관하여 길이 파라미터를 정의할 수 있다. 이 경우, 길이 파라미터는 얼마나 많은 다중 블록을 갱신해야 하는지 지정할 수 있으므로, 길이 파라미터가 감소하는 양은 실제로 갱신되는 가드 태그의 수에 비례하지만 그보다 적을 수 있다. 예를 들어, 일부 마이크로 아키텍처의 경우, 하나의 가드 메모리 위치에 맞는 가드 태그 수, 또는 하나의 데이터 메모리 위치와 연관되는 가드 태그 수의 입도(granularity)로 가드 태그를 업데이트하는 것이 더 효율적일 수 있다. 이 경우, 길이 파라미터에 필요한 비트 수를 줄이기 위해, 길이 파라미터는 실제로 가드 태그의 절대 수가 아니라, 해당 태그를 업데이트할 데이터/가드 메모리 위치 수를 지정할 수 있다. 따라서, 태그 설정 명령어는, 가드 태그가 업데이트될 수 있는 기본 입도에 대응하는 가드 태그의 수로 나눈 업데이트된 가드 태그의 수에 대응하는 양만큼 감소되도록 길이 파라미터를 트리거할 수 있다.
그럼에도 불구하고, 레지스터 길이 지정 변형은 상이한 마이크로 아키텍처를 지원하는 매우 유연한 아키텍처를 제공할 수 있지만, 다른 예에서는 다중 가드 태그 설정 명령어의 즉시 길이 지정 변형이 제공될 수 있으며, 여기서 명령어의 인코딩 시에 지정된 즉시 파라미터는 업데이트된 가드 태그 값이 제공될 메모리 시스템의 블록 수를 식별한다. 즉시 길이 지정 변형에 응답하여, 명령어 디코더는 즉시 파라미터에 의해 지정된 연속 블록 수와 관련된 가드 태그를 업데이트하도록 메모리 액세스 회로를 제어할 수 있다. 따라서, 이 경우에, 마이크로 아키텍처는 얼마나 많은 블록이 그들의 보호 블록을 업데이트할 것인지에 대한 선택을 하지 않을 수도 있지만, 단순히 즉시 파라미터에 의해 표시된 가드 태그의 수를 업데이트할 수 있다.
또한, 가드 태그가 업데이트될 절대적인 블록의 수를 나타내는 길이 레지스터를 지정하는 레지스터 기반 변형을 제공할 수 있으며, 이는 즉시 길이 지정 변형과 유사한 방식으로 동작할 수 있으므로, 레지스터의 길이 파라미터는 상술한 레지스터 길이 지정 변형에서와 같이 최대 블록 수보다는, 태그가 업데이트될 정확한 블록 수를 지정할 수 있다.
다중 가드 태그 설정 명령어는 가드 태그가 업데이트될 연속적인 메모리 블록을 식별하는 태그 업데이트 타겟 어드레스를 지정할 수 있다. 일반적으로, 다중 가드 태그 설정 명령어에 의해 타겟된 적어도 2개의 연속 블록은 실제로 태그 업데이트 타겟 어드레스에 의해 식별되는 메모리 위치와 태그 업데이트 타겟 어드레스에 의해 식별된 메모리 위치에 연속되는 메모리 위치의 적어도 하나의 후속 블록을 구비할 수 있다. 다중 가드 태그 설정 명령어에 의해 트리거된 하나 이상의 메모리 액세스는 태그 업데이트 타겟 어드레스 자체에 또는 태그 업데이트 타겟 어드레스로 식별된 메모리 위치 다음에 오는 메모리 위치의 후속 블록에는 기록되지 않는다. 대신에, 다중 가드 태그 설정 명령어에 의해 트리거된 하나 이상의 메모리 기록은 태그 업데이트 어드레스에 의해 식별된 메모리의 연속 블록에 대응하는 가드 태그가 저장되는 저장 위치를 타겟으로 할 수 있다.
다중 가드 태그 설정 명령어는 어드레스 레지스터를 사용하여 태그 업데이트 타겟 어드레스를 정의할 수 있다. 어드레스 레지스터는 가드 태그가 업데이트될 적어도 2개의 연속적인 블록을 식별하는 태그 업데이트 타겟 어드레스를 결정하기 위한 어드레스 결정 값을 저장할 수 있다. 예를 들어, 어드레스 레지스터는 태그 업데이트 타겟 어드레스에 대응하는 절대 어드레스를 지정하거나, 태그 업데이트 타겟 어드레스를 얻기 위해 베이스 어드레스에 추가될 오프셋(offset)을 지정할 수 있다. 베이스 어드레스는 별도의 레지스터에서 지정되거나, 암시적일 수 있으며, 예를 들어, 명령어들의 일부 변형은 프로그램 카운터 상대 어드레싱을 사용할 수 있고, 따라서 베이스 어드레스는 프로그램 실행 중에 도달된 현재 어드레스를 나타내는 프로그램 카운터를 포함할 수 있다.
일반적으로, 상술한 레지스터 길이 지정 변형 또는 즉시 길이 지정 변형이 사용되는지 여부에 관계없이, 다중 가드 태그 설정 명령어에 응답하여, 명령어 디코더는 다중 가드 태그 설정 명령어에 응답하여 가드 태그가 업데이트되는 메모리 위치들에서의 블록 수에 대응하는 오프셋에 의해 어드레스 레지스터에 저장된 어드레스 결정 값을 증가시키거나 감소시키도록 처리 회로를 제어할 수 있다. 이것은, 다중 가드 태그 설정 명령어가 루프 내에 제공될 때 가드 태그가 업데이트되었던 메모리 위치들의 마지막 블록 뒤의 다음 어드레스를 가리키도록 어드레스 레지스터가 자동으로 업데이트되므로, 어드레스 레지스터를 조작하기 위한 추가 명령어를 포함할 필요가 없다는 것을 의미한다. 이것은 코드 밀도와 성능을 향상시키는 데 도움이 된다. 명령어들의 루프는 주어진 메모리 영역을 가장 낮은 어드레스에서 가장 높은 어드레스로(매번 오프셋으로 어드레스 레지스터 내의 어드레스를 증가시키는) 또는 가장 높은 어드레스에서 가장 낮은 어드레스로(매번 오프셋으로 어드레스를 감소시키는) 트래버스(traverse)할 수 있다.
가드 태그를 업데이트하는데 사용된 업데이트된 태그 값은 서로 다른 방식으로 다중 가드 태그 설정 명령어로부터 도출될 수 있다. 일부 경우에, 업데이트된 태그 값은 태그 가드 메모리 액세스에 대한 어드레스 태그가 타겟 어드레스의 한 부분 내에서 표현될 수 있는 방식과 유사한 방식으로, 태그 업데이트 타겟 어드레스의 하나 이상의 선택된 비트를 사용하여 표현될 수 있다. 따라서, 일부 예들에서는, 다중 가드 태그 설정 명령어에 응답하여, 명령어 디코더는 적어도 2개의 연속 블록들과 연관된 가드 태그들을, 태그 업데이트 타겟 어드레스의 하나 이상의 선택된 비트의 기능으로서 결정된 업데이트된 태그 값으로 업데이트하기 위해 메모리 액세스들을 트리거하는 메모리 액세스 회로를 제어할 수 있다.
대안적으로, 몇몇 형태의 명령어는 태그 업데이트 타겟 어드레스를 식별하는데 사용되는 임의의 레지스터와는 별도로, 업데이트된 태그 값을 식별하기 위한 태그 값 레지스터를 지정할 수 있다. 이 경우에, 다중 가드 태그 설정 명령어에 응답하여, 명령어 디코더는 태그 업데이트 타겟 어드레스와 무관하게 다중 가드 태그 설정 명령어에 의해 지정된 태그 값 레지스터에 저장된 값의 함수(funcion)로서 결정된 업데이트된 태그 값으로 적어도 2개의 연속 블록과 연관된 가드 태그를 업데이트하기 위해 메모리 액세스를 트리거하는 메모리 액세스 회로를 제어할 수 있다.
이들 두 접근법 중 어느 것이 취해지는지는 다중 가드 태그 설정 명령어 내의 인코딩 오버헤드(encoding overrhead)와 주어진 명령어에 대한 업데이트된 태그 값들을 설정하는 데 예상되는 오버헤드 사이의 트레이드 오프(trade off)에 근거하여 결정될 수 있다. 업데이트 타겟 어드레스 내의 업데이트된 가드 태그를 나타내는 첫 번째 접근법은 명령어 인코딩 내에 추가 레지스터 식별자를 제공할 필요가 없어, 다른 목적으로 더 많은 인코딩 공간을 이용할 수 있게 하는데, 이는 인코딩 공간이 종종 명령어 세트 아키텍처 내에서 프리미엄이기 때문에 유용할 수 있다. 한편, 업데이트된 태그 값이 별도의 태그 값 레지스터에 저장되면, 이것에 의해 다중 가드 태그 설정 명령어를 실행하기 전에 원하는 업데이트된 태그 값을 태그 업데이트 타겟 어드레스의 일부에 기록하기 위한 별도의 명령어가 필요하지 않게 되므로, 코드 밀도가 감소될 수 있다. 두 가지 옵션은 모두 사용할 수 있다.
다중 가드 태그 설정 명령어의 데이터 클리어링 변형(data-clearing variant)이 또한 제공될 수 있다. 이 변형에 응답하여, 명령어 디코더는 업데이트된 가드 태그를 설정하는 것 외에도, 하나 이상의 메모리 위치의 적어도 두 개의 연속 블록에 저장된 데이터 값들을 클리어된 값으로 설정하기 위한 메모리 액세스들도 트리거하도록 메모리 액세스 회로를 제어할 수 있다. 클리어된 값은 데이터 값의 이전 값과 관련이 없는 임의의 값일 수 있다. 예를 들어, 클리어된 값은 0과 같은 미리 결정된 값, 또는 임의로 생성된 값일 수 있다. 이것은 가드 태그 설정이 종종 메모리의 블록들을 초기화하는 프로세스의 일부로서 수행될 수 있고, 동시에 어드레스 공간의 해당 영역에 이전에 저장된 데이터가 이후에 실행되는 코드에 표시되는 것을 방지하기 위해 메모리의 초기화된 블록의 내용을 일부 소정의 값으로 클리어하는 것도 바람직할 수 있기 때문에 유용할 수 있다. 다중 가드 태그 설정 명령어의 데이터 클리어링 변형을 제공함으로써, 가드 태그 설정 및 데이터 클리어링이 단일 명령어에 응답하여 모두 수행될 수 있기 때문에, 데이터를 클리어하기 위한 제2 명령어를 실행할 필요가 없다. 상술한 모든 유형의 다중 가드 태그 설정 명령어에는 추가 데이터 클리어링 변형도 제공될 수 있어서, 동일한 형태의 다중 가드 태그 설정 명령어의 비데이터 클리어링(non-data clearing) 및 데이터 클리어링 변형이 제공될 수 있다. 대안적으로, 일부 구현에서는, 모든 다중 가드 태그 설정 명령어 변형은 의미상 데이터 클리어링 변형일 수 있으므로, 일부 구현은 다중 가드 및 태그 설정 명령어의 비데이터 클리어링 변형을 지원하지 않을 수도 있다.
상술한 다중 가드 태그 설정 명령어의 모든 변형은, 그 파라미터의 적어도 일부 값(레지스터 지정된 파라미터 또는 즉시 파라미터)에 대해, 메모리 액세스 회로를 트리거하여 메모리 위치들의 적어도 2개의 연속적인 블록과 관련된 가드 태그를 업데이트할 수 있는 명령일 수 있다. 그러나, 동일한 유형의 명령어는, 파라미터들의 다른 값에 대해, 단일 가드 태그만을 업데이트하는 것을 트리거하거나, 일부 경우에 가드 태그에 대한 업데이트를 전혀 트리거하지 않을 수 있다. 예를 들어, 레지스터 길이 지정 변형의 길이 레지스터에서 지정된 길이 파라미터가 0이면 명령어는 가드 태그가 업데이트되도록 트리거하지 않을 수 있다. 유사하게, 길이 파라미터가 1을 지정하면, 명령어에 응답하여 업데이트될 가드 태그의 최대 수는 1일 수 있다. 따라서 일부 명령어 오피코드(opcodes)는 때때로 다중 가드 태그 설정 명령어로서 기능할 수 있고 다른 시간(times)은 명령어에 의해 지정된 파라미터들에 따라, 단일 가드 태그 설정 명령어로서 기능할 수 있음을 이해할 것이다. 일반적으로, 상술한 다중 가드 태그 설정 명령어는, 그 파라미터의 적어도 일부 값에 대해, 가드 태그가 업데이트된 값으로 설정되도록 메모리 위치들의 2개 이상의 연속적인 블록을 트리거할 수 있는 임의의 명령어일 수 있다.
다중 가드 태그 설정 명령어 또는 상술한 유형에 더하여, 명령어 디코더 및 처리 회로에 의해 지원되는 명령어 세트 아키텍처는 또한 단일 가드 태그 설정 명령어를 포함할 수 있고, 그에 응답하여, 명령어 디코더는 메모리 위치들의 단일 블록과 관련된 가드 태그를 업데이트된 값으로 설정하도록 메모리 액세스 회로를 제어한다. 예를 들어, 단일 가드 태그 설정 명령어는 다중 가드 태그 설정 명령과는 상이한 오피코드를 가질 수 있고, 하나 이상의 가드 태그를 업데이트하도록 메모리 액세스 회로를 트리거할 수 없을 수 있다.
도 1은 데이터 처리 장치(2)의 예를 개략적으로 도시한 것이다. 이것은 단순히 장치의 구성요소의 서브세트의 상위 레벨 표현이며 장치는 도시되지 않은 많은 다른 구성요소를 포함할 수 있음을 이해할 것이다. 장치(2)는 명령어 디코더(6)에 의해 디코딩된 명령어에 응답하여 데이터 처리를 수행하기 위한 처리 회로(4)를 구비한다. 명령어 디코더(6)는 명령 캐시(8)로부터 페치된 명령어를 디코딩하여 처리 회로(4)를 제어하기 위한 제어 신호(10)를 생성해서 명령어로 표현된 대응하는 처리 동작을 수행한다. 처리 회로(4)는 레지스터에 다시 기록될 결과 값들을 생성하기 위해 레지스터(14)에 저장된 값들에 대한 동작을 수행하기 위한 하나 이상의 실행 유닛을 포함할 수 있다. 예를 들어, 실행 유닛은 산술 연산 또는 논리 연산을 실행하기 위한 산술/논리 유닛(ALU), 부동 소수점 피연산자를 사용하여 연산을 실행하는 부동 소수점 유닛 및/또는 여러 독립 데이터 요소들을 포함하는 피연산자에 대한 벡터 연산을 수행하기 위한 벡터 처리 유닛을 포함할 수 있다. 처리 회로는 또한 레지스터(14)와 메모리 시스템 사이의 데이터 전송을 제어하기 위한 메모리 액세스 유닛(또는 로드/저장 유닛)(15)을 포함한다. 이 예에서, 메모리 시스템은 명령 캐시(8), 레벨 1 데이터 캐시(16), 데이터와 명령어 간에 공유되는 레벨 2 캐시(17), 및 메인 메모리(18)를 포함한다. 다른 캐시 계층도 가능하다는 것을 이해할 것이다 - 이것은 하나의 예일뿐이다. 로드/저장 유닛(15)에 의해 트리거된 메모리 액세스를 지원하기 위해 어드레스 변환 기능을 제공하기 위한 메모리 관리 유닛(MMU)(20)이 제공된다. MMU는 메모리 시스템(16, 17, 18)에 저장된 페이지 테이블로부터 엔트리의 서브세트를 캐싱하기 위한 변환 색인 버퍼(TLB)(22)를 갖는다. 각각의 페이지 테이블 엔트리는 어드레스들의 대응하는 페이지에 대한 어드레스 변환 매핑을 제공할 수 있고, 또한 페이지가 판독 전용 영역인지 또는 판독 및 기록 가능한지 여부를 지정하는 액세스 허가(access permissions), 또는 페이지에 액세스할 수 있는 권한 레벨을 지정하는 액세스 허가와 같은, 액세스 제어 파라미터를 지정할 수 있다.
도 2는 태그 가드 메모리 액세스의 개념을 개략적으로 도시한 것이다. 메모리 시스템 내의 메모리 위치를 참조하는데 사용되는 물리적 어드레스 공간은 특정 수의 어드레스 가능한 위치를 각각 포함하는 다수의 블록(30)으로 논리적으로 구분될 수 있다. 간결성을 위해, 도 2의 예에서는, 각 블록(30)은 4개의 메모리 위치를 포함하지만, 다른 블록 크기도 사용될 수 있다. 각 블록(30)은 대응하는 가드 태그(32)와 관련되어 있다. 특정 수의 블록(30)과 연관된 가드 태그는 함께 수집되어 물리적 어드레스 공간 내의 상이한 구조적으로 액세스 가능한 다른 메모리 위치(34) 내에, 또는 구조적으로 액세스 가능하지 않은(동일한 물리적 어드레스 공간에 매핑되지 않은) 메인 메모리(18)에 제공된 추가 저장 위치 내에 저장될 수 있다. 가드 태그 값을 캐싱하기 위한 데이터 캐시(16, 17)에서 공간을 사용하지 않도록 하기 위해 경우에 따라 비구조적으로 액세스 가능한 별도의 저장장치를 사용하는 것이 바람직할 수 있으며, 이는 일반 코드의 성능에 영향을 미칠 수 있고 일관성 관리(coherency management)를 더욱 복잡하게 만들 수 있다. 태그가 메인 메모리(18)로부터 액세스되어야 했을 때보다 더 빠르게 액세스하기 위해, 비구조적으로 액세스가능한 저장장치로부터 태그 값을 캐싱하기 위해 추가 태그 캐시(19)가 마이크로 아키텍처에 제공될 수 있다. 태그 저장 위치(34)가 각 블록(30)에 대응하는 특정 매핑(mapping)은 로드/저장 유닛(15)에 의해 제어될 수 있고, 하드와이어(hardwired) 가능하거나 프로그램(programmable) 가능할 수 있다. 도 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)은 어드레스된 위치(44)를 포함하는 블록(30)과 연관된 어드레스 태그(40)와 가드 태그(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는 다중 가드 태그 설정 명령어의 레지스터 길이 지정 변형의 예를 도시한 것이다. 이 명령어는 태그 업데이트 타겟 어드레스(70)를 지정하는 어드레스 레지스터 Xm를 그것의 파라미터로서 지정하는데, 이는 어드레스의 비트들의 서브세트를 사용하여 지정된 업데이트된 태그 값(72)도 포함한다. 명령어는 또한 명령어에 응답하여 업데이트될 최대 블록 수 74Nmax를 지정하는 길이 레지스터 Xn을 지정한다.
도 5는 도 1의 장치(2)에 의한 도 4의 명령의 처리를 도시한 흐름도이다. 스텝 80에서, 다중 가드 태그 설정 명령어는 명령어 디코더(6)에 의해 디코딩된다. 이에 응답하여, 명령어 디코더(6)는 처리 회로(4) 및 로드/저장 유닛(15)을 제어하기 위한 제어 신호를 생성하여 도 5의 다음 스텝을 수행한다. 스텝 82에서, 로드/저장 유닛(15)은 메모리 시스템이 메모리 위치의 X 블록과 관련된 가드 태그를, 어드레스 레지스터 Xm으로부터 도출된 업데이트된 태그(72)에 의해 지정된 업데이트된 태그 값으로 설정하기 위해 적어도 하나의 메모리 액세스를 수행하는 것을 요청하기 위한 신호를 생성한다. 갱신될 블록 X의 수는 길이 레지스터 Xn에 지정된 최대 블록(74)의 수인 Nmax 이하의 임의의 수일 수 있다. X에 대한 특정 값은 구현에 따라 다를 수 있다. 즉, 도 4의 명령어를 포함하는 명령어 세트 아키텍처는 어떤 특정 X 값을 선택해야 하는지 지정하지 않는다. 주어진 프로세서 구현은 특정 마이크로 아키텍처 구현에 편리한 X에 대한 값을 자유롭게 선택할 수 있다. X가 2이상인 경우, 가드 태그가 업데이트되는 메모리(30)의 X 블록은 태그 업데이트 타겟 어드레스(70)에 의해 식별되는 블록 및 태그 업데이트 타겟 어드레스에 의해 식별된 블록에서 연속적으로 이어지는 X-1 다음 블록을 포함한다. X = 1인 경우 태그 업데이트 타겟 어드레스에 의해 식별된 블록만 그것의 가드 태그가 업데이트된다. 길이 레지스터 Xn이 Nmax = 0을 지정하면 발생할 수 있는 X = 0이면, 메모리(30)의 블록은 그들 대응하는 가드 태그(32)가 업데이트되지 않는다.
스텝 84에서, 명령어 디코더(6)에 의해 생성된 제어 신호들은 어드레스 레지스터 Xm에 지정된 태그 업데이트 타겟 어드레스(70)를, 메모리의 X 블록에 대응하는 어드레스 오프셋만큼 증가시키도록 처리 회로(4)를 제어한다. 즉, 어드레스 오프셋은 하나의 메모리 블록(30)의 크기의 X배에 대응할 수 있으며, 여기서 블록 크기는 가드 태그(32)가 (구현 의존 파라미터로서 선택될 수 있는) 메모리 위치에 할당되는 특정 입도(graularity)에 의존한다. 따라서, Xm'= Xm + X*(블록 크기)이다. 다른 예에서는, 레지스터 Xm의 어드레스는 X*(블록 크기)만큼 감소될 수 있다.
또한, 스텝 86에서, 제어 신호들은 명령어에 응답하여 가드 태그가 업데이트된 블록의 수인 X에 비례하는 양만큼 길이 레지스터 Xn을 감소시키도록 처리 회로(4)를 제어한다. 도 6의 예에서, Xn'= Xn - X.
다른 예들에서는, 길이 레지스터 Xn은 태그들이 업데이트될 실제 최대 블록 수를 나타내는 대신에, 블록의 일부 배수의 수(a number of some multiple of blocks), 또는 가드 태그가 설정될 어드레스 범위의 크기의 바이트 수로 길이를 나타낼 수 있고, 이 경우 Xn은 X보다 작거나 크게 감소될 수 있다. 예를 들어, 태그를 업데이트할 수 있는 기본 입도가 G이면, 길이 레지스터 Xn은 업데이트될 G 태그의 배수의 수를 나타내는 길이 파라미터 NG를 지정할 수 있다. 즉, Nmax = NG * G). 이 경우, 스텝 82에서 마이크로 아키텍처 구현은 G의 배수인 X의 값을 선택하도록 제한될 수 있고, 스텝 86에서 길이 파라미터 NG는 X 대신에 X/G만큼 감소될 수 있다. 다른 예에서는, 길이 파라미터가 대응하는 가드 태그가 업데이트되는 메모리의 최대 바이트 수를 나타내는 최대 값 B를 지정하고, 각 가드 태그가 메모리 위치의 K-바이트 블록과 관련되어 있으면, 어드레스 레지스터는 Xm'= Xm ± X로 증가/감소될 수 있으며, 여기서 X는 B 이하의 K의 배수이고, 길이 레지스터 Xn은 Xn'= Xn - (X * K)로 감소될 수 있다. 예를 들어, 각 태그가 16바이트의 메모리(K = 16)와 관련되어 있고, 마이크로 아키텍처가 명령어의 인스턴스(instance)당 2개의 태그(X = 2)를 업데이트하도록 선택하면, 길이 파라미터 x1 = 128이고 시작 어드레스 x2 = 0x8000인 SetTagRange x 1, [x2]!은 처리 회로를 트리거하여 2개의 태그를 설정한 다음 x1을 128 - 2 * 16 = 96으로 감소시키고 x2를 0x8020으로 증가시킬 수 있다.
도 6은 주어진 마이크로 아키텍처 구현에 사용되는 태그 설정의 특정 입도에 관계없이, 소프트웨어가 구현 불가지론적인 루틴(implementation agnostic routine)을 사용하도록 허용하는 데 이 형식의 명령어가 특히 유용한 이유를 나타낸 것이다. 예를 들어, 루프는 다음과 같이 실행된 코드로 정의될 수 있다:
X0 = 기본 어드레스
X1 = 길이
루프:
SetTags [X0]!, X1
CBNZ X1, 루프; X1을 0과 비교하고 그렇지 않은 경우 '루프'로 분기
도 6은 기본 어드레스가 어드레스 #a로서, 길이가 72로 지정된 예를 도시한 것이다. 이 아키텍처의 하나의 잠재적 프로세서 구현은 16 바이트 캐시 라인을 사용할 수 있으므로, 한 구현에서 각 가드 태그(32)가 4 비트를 포함하면, 32개의 태그를 단일 캐시 라인에 저장할 수 있는 공간이 있다. 캐시 라인은 메모리 시스템에 의해 하나의 요청으로 판독/기록될 수 있는 메모리의 단위이다. 하나의 캐시 라인의 입도(granularity)로 연산(operations)을 수행하는 것이 더 효율적일 수 있다. 따라서, 구현 1에서는, 도 4의 다중 가드 태그 설정 명령어에 응답하여 32개의 태그를 업데이트하는 것이 바람직할 수 있다. 이 경우, 구현 1에서 명령어를 실행하면 메모리의 72개 블록 중 32개는, 그들의 가드 태그가 업데이트될 수 있으므로, Nmax를 제공하는 레지스터 X1은 72-32 = 40으로 감소하고, 레지스터 X0 내의 태그 업데이트 타겟 어드레스는 어드레스 #a + 32 *(블록 크기)로 증가하여 이제 블록 32를 가리킨다. 루프의 다음 반복은 최종 블록(71)이 그것의 태그를 업데이트할 때까지 다음 32개의 메모리 블록 등에 대해 새로운 태그 값을 설정할 것이고, 조건부 분기 명령어 CBNZ는 X1이 0으로 감소했기 때문에 루프를 종료할 것이다.
반대로, 32 바이트 캐시 라인을 사용하는 상이한 마이크로 아키텍처 구현 2의 경우, 64개의 태그가 하나의 캐시 라인에 맞을 수 있으며 이 경우 태그 설정 명령어의 인스턴스당 더 많은 태그를 업데이트하는 것이 바람직할 수 있다. 이 경우, 명령어를 한 번 실행하면 64개의 태그를 설정할 수 있고, 즉, 도 5에 도시된 주어진 수 X는 64이다. 도 6에서, Nmax는 루프의 첫 번째 반복 시에 72-64 = 8로 감소하고, 어드레스는 어드레스 #a + 64*(블록 크기)에서 블록 64를 가리키도록 업데이트되었다. 마지막 8개의 태그는 루프의 두 번째 반복 시에 설정된다.
다른 예시적인 구현에서는, 가드 태그는 그들이 보호하고 있는 데이터 옆의 캐시에 저장될 수 있다. 예를 들어, 주어진 크기(예를 들어, 64 바이트 캐시 라인)의 캐시 라인은 각각 캐시 라인의 특정 부분에 대응하는 특정 수의 가드 태그로 확장될 수 있다. 예를 들어, 각 태그가 캐시 라인의 16 바이트에 해당하면, 4개의 4 비트 태그가 각 캐시 라인과 연관될 수 있다. 이 경우, 이러한 마이크로 아키텍처는 태그 설정 명령어의 인스턴스당 4개의 가드 태그를 설정하는 것을 제한하는 것을 선호할 수 있다. 다시, 위의 루프는 여전히 이러한 마이크로 아키텍처에서 작동할 수 있지만, 도 6에 도시된 두 가지 구현에 비해, 모든 가드 태그가 설정되기 전에 더 많은 루프 반복을 필요로 할 것이다.
따라서, 서로 다른 구현은 명령어마다 상이한 수의 태그를 설정할 수 있지만, 그럼에도 불구하고 동일한 프로그램 루프를 관계없이 실행할 수 있다. 일부 구현에서는 다른 구현보다 필요한 태그를 설정하기 위해 더 많은 루프 반복을 필요로 할 수 있지만, 일단 길이 레지스터 Xm에서의 값이 0으로 감소하면 각 구현은 결국 루프에서 분기될 것이다.
도 7은 상이한 수의 태그를 업데이트하기 위해 마이크로 아키텍처 구현 유연성을 제공하는 것이 유용한 또 다른 이유를 도시한 것이다. 제공된 어드레스 #a의 정렬에 따라, 업데이트할 태그가 캐시 라인을 통해 도중에 시작할 수도 있다. 이 경우, 명령어가 캐시 라인의 나머지 부분에 있는 태그만 업데이트하여 루프의 다음 반복이 캐시 라인 경계에 정렬된 태그의 업데이트를 시작할 수 있도록 함으로써, 그 다음의 액세스를 보다 효율적으로 하는 것이 바람직할 수 있다. 대조적으로, 명령어에 응답하여 항상 동일한 수의 태그를 업데이트하는 구현은 그러한 마이크로 아키텍처 최적화를 사용할 수 없다.
도 8은 즉시 값 #imm을 사용하여 가드 태그가 업데이트된 태그 값(72)으로 설정될 메모리의 범위의 길이를 지정하는 다중 가드 태그 설정 명령어의 대안적인 형태를 도시한 것이다. 타겟 업데이트 태그 타겟 어드레스(70) 및 업데이트된 태그 값(72)은 여전히 도 4에서와 같이 어드레스 레지스터 Xm에 지정될 수 있지만, 이번에는 명령어 인코딩에 지정된 즉시 값 #imm은 태그 값들이 업데이트될 정확한 수의 블록을 나타내는 절대 길이 표시 L을 지정한다.
도 9는 도 8에 도시된 이러한 유형의 명령어의 처리를 제어하는 방법을 나타내는 흐름도를 도시한 것이다. 스텝 100에서, 명령어 디코더(6)는 도 8에 도시된 가드 태그 설정 명령어의 즉시 길이 지정 변형을 디코딩한다. 이에 응답하여 명령어 디코더는 스텝 102에서 메모리 액세스 회로(15)를 제어하기 위한 제어 신호를 생성하여 L 블록의 메모리 위치와 연관되는 가드 태그를 업데이트된 태그 값(72)으로 설정한다. 다시, L이 2 이상인 경우 L 블록들은 태그 업데이트 타겟 어드레스(70)에 의해 식별된 블록을 포함하고, L-1 이후의 블록들은 태그 업데이트 타겟 어드레스에 의해 식별된 블록으로부터 연속적으로 뒤따를 것이다. L = 1이면 태그 업데이트 타겟 어드레스에 의해 식별된 블록과 연관된 태그만 업데이트된다. L = 0이면 가드 태그가 업데이트되지 않는다. 스텝 104에서, 명령어 디코더(6)에 의해 생성된 제어 신호들은 또한 L 블록들에 대응하는 오프셋, 즉 Xm'= Xm + L *(블록 크기)에 의해 어드레스를 증가시키기 위해 어드레스 레지스터 Xm을 업데이트하도록 처리 회로(4)를 제어한다.
도 10은 업데이트된 태그 값(72)이 어드레스 레지스터 Xm에 지정된 태그 업데이트 어드레스(70)와 별개인 제3 레지스터 Xt에 지정된 도 4에 나타낸 명령어의 변형을 도시한 것이다. 그렇지 않으면, 이 명령어의 동작은 도 4 및 5에 도시된 것과 정확히 동일하다. 태그 업데이트 어드레스(70)와 독립적으로 지정된 업데이트 태그 값(72)과 함께, 도 8에 도시된 즉시 지정 명령어의 유사한 변형이 제공될 수 있음을 이해할 것이다.
도 11은 도 4의 명령어의 데이터 클리어링 변형을 도시한 것이다. 어드레스 레지스터 Xm 및 길이 레지스터 Xn은 도 4에 도시된 것과 동일한 파라미터를 지정한다. 이 명령어에 응답하여, 스텝 80-86은 도 5에 도시된 것과 같은 방식으로 수행된다. 그러나, 명령어의 데이터 클리어링 변형에 응답하여 추가 스텝 88이 수행된다. 스텝 88에서, 명령어 디코더(6)는 메모리의 X 블록의 데이터 값을 이들 데이터 값의 이전 값과 상관없는 클리어된 값으로(예를 들어, 0과 같은, 소정의 값으로, 또는 임의의 값으로) 설정하기 위한 추가 메모리 액세스를 생성하도록 메모리 액세스 회로(15)를 제어한다. 이를 통해 태그 설정 명령어 외에 데이터 값을 클리어하기 위한 별도의 명령어가 필요하지 않으므로, 더 타이트한 루프와 더 작은 코드 밀도를 가능하게 한다. 도 11은 도 4에 도시된 명령어의 형태에 적용되는 데이터 클리어링 변형의 예를 도시하지만, 유사한 데이터 클리어링 변형은 상술한 다른 유형의 다중 태그 설정 명령어 중 어느 하나에 대해서도 구현될 수 있다.
도 12는 사용될 수 있는 시뮬레이터 구현을 도시한 것이다. 전술한 실시 예는 관련 기술을 지원하는 특정 처리 하드웨어를 동작시키기 위한 장치 및 방법의 관점에서 본 발명을 구현하지만, 컴퓨터 프로그램을 사용하여 구현되는 본 명세서에 기술된 실시 예에 따른 명령 실행 환경을 제공하는 것도 가능하다. 이러한 컴퓨터 프로그램은 하드웨어 아키텍처의 소프트웨어 기반 구현을 제공하는 한, 종종 시뮬레이터라고 칭한다. 다양한 시뮬레이터 컴퓨터 프로그램에는 에뮬레이터, 가상 머신, 모델, 및 동적 이진 변환기를 포함한 이진 변환기가 포함된다. 일반적으로, 시뮬레이터 구현은 시뮬레이터 프로그램(110)을 지원하는, 호스트 운영 체제(120)를 선택적으로 실행하는, 호스트 프로세서(130)상에서 실행될 수 있다. 일부 구성에서는, 하드웨어와 제공된 명령어 실행 환경 사이에 다중의 시뮬레이션 계층이 있을 수 있고/있거나, 동일한 호스트 프로세서상에서 제공되는 여러 개의 고유한 명령어 실행 환경이 있을 수 있다. 역사적으로, 적정한 속도로 실행되는 시뮬레이터 구현을 제공하기 위해 강력한 프로세서가 필요했지만, 이러한 접근 방식은 호환성 또는 재사용 이유로 또 다른 프로세서에 대해 고유한 코드를 실행하려는 경우와 같은 특정 상황에서 정당화될 수 있다. 예를 들어, 시뮬레이터 구현은 호스트 프로세서 하드웨어에 의해 지원되지 않는 추가 기능을 갖는 명령어 실행 환경을 제공하거나, 전형적으로 상이한 하드웨어 아키텍처와 연관된 명령어 실행 환경을 제공할 수 있다. 시뮬레이션에 대한 개요는 "Some Efficient Architecture Simulation Techniques", Robert Bedichek, Winter 1990 USENIX Conference, Pages 53 - 63에 제시되어 있다.
실시 예가 특정 하드웨어 구성 또는 특징을 참조하여 이전에 설명된 정도까지, 시뮬레이션된 실시 예에서는, 동등한 기능이 적절한 소프트웨어 구성 또는 특징에 의해 제공될 수 있다. 예를 들어, 특정 회로는 시뮬레이션된 실시 예에서는 컴퓨터 프로그램 로직으로서 구현될 수 있다. 유사하게, 레지스터 또는 캐시와 같은 메모리 하드웨어는 시뮬레이션된 실시 예에서는 소프트웨어 데이터 구조로서 구현될 수 있다. 전술한 실시 예에서 참조된 하나 이상의 하드웨어 요소가 호스트 하드웨어(예를 들어, 호스트 프로세서(130)) 상에 존재하는 구성에서는, 일부 시뮬레이션된 실시 예는 적절한 경우 호스트 하드웨어를 이용할 수 있다.
시뮬레이터 프로그램(110)은 컴퓨터 판독가능한 저장 매체(112)(비일시적 매체일 수도 있음)에 저장될 수 있고, 시뮬레이터 프로그램(110)에 의해 모델링되는 하드웨어 아키텍처의 애플리케이션 프로그램 인터페이스와 동일한 (애플리케이션, 운영 체제 및 하이퍼바이저를 포함할 수 있는) 타겟 코드(100)에 프로그램 인터페이스(명령어 실행 환경)를 제공한다. 따라서, 상술한 다중 가드 태그 설정 명령어를 포함하는, 타겟 코드(100)의 프로그램 명령어들은 시뮬레이터 프로그램(110)을 사용하는 명령어 실행 환경 내부에서 실행될 수 있으므로, 실제로 상술한 장치(2)의 하드웨어 특징을 갖지 않는 호스트 컴퓨터(130)는 이들 특징을 에뮬레이트할 수 있다. 예를 들어, 시뮬레이터 프로그램(110)은 타겟 코드(100)의 명령어들에 의해 메모리로의 액세스를 제어하기 위한 메모리 액세스 프로그램 로직(114)을 포함할 수 있다. 예를 들어, 메모리 액세스 프로그램 로직(114)은 가드 태그와 어드레스의 비교를 수행하고 가드 태그와 어드레스 태그 사이에 어떠한 불일치가 검출되었는지를 보고하기 위한 명령어들을 포함할 수 있다. 또한, 시뮬레이터 프로그램(110)은 타겟 코드(100)에 포함된 다중 가드 태그 설정 명령어에 응답하여, 하드웨어 구현이 태그를 설정하는 방식에 대응하는 방식으로 가드 태그를 설정하기 위한 하나 이상의 메모리 액세스를 트리거하기 위한 명령어들을 포함하는, 태그 설정 프로그램 로직(116)을 포함할 수 있다. 시뮬레이터 접근방식에서는, 다중 가드 태그 설정 명령어의 레지스터 길이 지정 변형에 응답하여 설정된 태그의 수 X는 시뮬레이터 프로그램(110)에 의해 선택될 수 있다.
본 출원에서, "...로 구성된"이라는 단어는 장치의 구성요소가 정의된 동작을 수행할 수 있는 구성을 갖는 것을 의미하기 위해 사용된다. 이와 관련하여, "구성"은 하드웨어 또는 소프트웨어의 상호접속구성 또는 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가질 수 있거나, 프로세서 또는 다른 처리장치는 기능을 수행하도록 프로그래밍될 수 있다. "구성된"은 정의된 동작을 제공하기 위해 어떠한 방식으로든 장치 구성요소가 변경되어야 함을 의미하지는 않는다.
본 발명의 예시적인 실시 예가 첨부 도면을 참조하여 본 명세서에서 상세하게 설명되었지만, 본 발명은 이들 정확한 실시 예에 제한되지 않으며, 다양한 변경 및 수정이 첨부된 청구범위에 의해 정의된 바와 같은 본 발명의 범위 및 사상을 벗어나지 않는 일없이 본 기술분야의 당업자에 의해 실행될 수 있음을 이해해야 한다.

Claims (18)

  1. 장치로서,
    타겟 어드레스에 응답하여 태그 가드(tag-guarded) 메모리 액세스 동작을 수행하는 메모리 액세스 회로를 구비하고, 상기 태그 가드 메모리 액세스 동작은,
    타겟 어드레스에 의해 식별된 어드레스된 위치를 포함하는 하나 이상의 메모리 위치의 블록과 관련하여 메모리 시스템에 저장된 가드 태그와, 타겟 어드레스와 관련된 어드레스 태그를 비교하는 것과,
    가드 태그와 어드레스 태그 사이에서 일치가 검출되는지 여부의 표시를 생성하는 것을 포함하고,
    하나 이상의 메모리 위치의 적어도 두 개의 연속 블록과 관련된 가드 태그들을 업데이트하기 위해 적어도 하나의 메모리 액세스를 트리거하는 상기 메모리 액세스 회로를 제어하기 위한 다중 가드 태그 설정 명령어를 디코딩하는 명령어 디코더를 더 구비하는, 장치.
  2. 제 1 항에 있어서,
    상기 태그 가드 메모리 액세스 동작은 가드 태그와 어드레스 태그 사이에서 일치가 검출되는지 여부에 따라 어드레스된 위치에 대한 메모리 액세스가 허용되는지를 제어하는 것을 포함하는, 장치.
  3. 제 1 항에 있어서,
    상기 태그 가드 메모리 액세스 동작은 가드 태그와 어드레스 태그 사이에서 일치가 검출되는지 여부에 관계없이 어드레스된 위치에 대한 메모리 액세스를 수행하는 것을 포함하는, 장치.
  4. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 태그 가드 메모리 액세스 동작은 가드 태그와 어드레스 태그 사이에서 불일치가 검출될 때 결함 조건을 시그널링하는 것을 포함하는, 장치.
  5. 선행하는 청구항 중 어느 한 항에 있어서,
    태그 가드 메모리 동작에 있어서, 상기 메모리 액세스 회로는 타겟 어드레스의 하나 이상의 선택된 비트의 함수로서 어드레스 태그를 결정하도록 구성되는, 장치.
  6. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 태그 가드 메모리 액세스 동작에 있어서, 상기 메모리 액세스 회로는 어드레스 태그와 독립적으로 어드레스된 위치를 선택하도록 구성되는, 장치.
  7. 선행하는 청구항 중 어느 한 항에 있어서,
    길이 레지스터를 식별하는 상기 다중 가드 태그 설정 명령어의 레지스터 길이 지정 변형에 응답하여, 상기 명령어 디코더는,
    길이 레지스터에 저장된 길이 파라미터에 의해 식별된 최대 블록 수 이하의 주어진 수의 연속 블록과 관련된 가드 태그들을 업데이트하는 상기 메모리 액세스 회로와,
    주어진 수에 비례하는 양만큼 길이 레지스터에 저장된 길이 파라미터를 감소시키는 처리 회로를,
    제어하도록 구성되는, 장치.
  8. 선행하는 청구항 중 어느 한 항에 있어서,
    즉시 파라미터를 식별하는 상기 다중 가드 태그 설정 명령어의 즉시 길이 지정 변형에 응답하여, 상기 명령어 디코더는 즉시 파라미터에 의해 지정된 다수의 연속 블록과 관련된 가드 태그들을 업데이트하는 상기 메모리 액세스 회로를 제어하도록 구성되는, 장치.
  9. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 다중 가드 태그 설정 명령어는 상기 적어도 두 개의 연속 블록을 식별하기 위한 태그 업데이트 타겟 어드레스를 지정하는, 장치.
  10. 제 9 항에 있어서,
    상기 적어도 두 개의 연속 블록은 태그 업데이트 타겟 어드레스에 의해 식별된 메모리 위치를 포함하는 블록과 하나 이상의 메모리 위치의 적어도 하나의 다음 블록을 구비하는, 장치.
  11. 제 9 항 또는 제 10 항에 있어서,
    상기 다중 가드 태그 설정 명령어는 상기 적어도 두 개의 연속 블록을 식별하기 위한 태그 업데이트 타겟 어드레스를 결정하는 어드레스 결정 값을 저장하기 위한 어드레스 레지스터를 지정하고,
    상기 다중 가드 태그 설정 명령어에 응답하여, 상기 명령어 디코더는 상기 다중 가드 태그 설정 명령어에 응답하여 가드 태그들이 업데이트되는 메모리 위치들의 블록 수에 대응하는 오프셋에 의해 어드레스 레지스터에 저장된 어드레스 결정 값을 증가 또는 감소시키는 처리 회로를 제어하도록 구성되는, 장치.
  12. 제 9 항 내지 제 11 항 중 어느 한 항에 있어서,
    상기 다중 가드 태그 설정 명령어에 응답하여, 상기 명령어 디코더는 상기 적어도 두 개의 연속 블록과 관련된 가드 태그들을, 태그 업데이트 타겟 어드레스의 하나 이상의 선택된 비트의 함수로서 결정된 업데이트된 태그 값으로 업데이트하기 위해 메모리 액세스들을 트리거하는 상기 메모리 액세스 회로를 제어하도록 구성되는, 장치.
  13. 제 7 항 내지 제 9 항 중 어느 한 항에 있어서,
    상기 다중 가드 태그 설정 명령어에 응답하여, 상기 명령어 디코더는 태그 업데이트 타겟 어드레스와 관계없이 상기 다중 가드 태그 설정 명령어에 의해 지정된 태그 값 레지스터에 저장된 값의 함수로서 결정된 업데이트된 태그 값으로 상기 적어도 두 개의 연속 블록과 관련된 가드 태그들을 업데이트하기 위해 메모리 액세스들을 트리거하는 상기 메모리 액세스 회로를 제어하도록 구성되는, 장치.
  14. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 다중 가드 태그 설정 명령어의 데이터 클리어링 변형에 응답하여, 상기 명령어 디코더는 상기 적어도 두 개의 연속 블록의 이전 내용과 상관없는 클리어된 값들로 한 개 이상의 메모리 위치의 상기 적어도 두 개의 연속 블록에 저장된 데이터 값들을 설정하기 위해 메모리 액세스들을 트리거하는 상기 메모리 액세스 회로를 제어하도록 구성되는, 장치.
  15. 제 14 항에 있어서,
    각 클리어된 값은,
    미리 정해진 값;
    제로; 및
    랜덤 값 중 하나를 포함하는, 장치.
  16. 방법으로서,
    타겟 어드레스에 응답하여 태그 가드 메모리 액세스 동작을 수행하는 단계를 포함하고, 상기 태그 가드 메모리 액세스 동작은,
    타겟 어드레스에 의해 식별된 어드레스된 위치를 포함하는 하나 이상의 메모리 위치의 블록과 관련하여 메모리 시스템에 저장된 가드 태그와, 타겟 어드레스와 관련된 어드레스 태그를 비교하는 것과,
    가드 태그와 어드레스 태그 사이에서 일치가 검출되는지 여부의 표시를 생성하는 것을 포함하며,
    다중 가드 태그 설정 명령어의 디코딩에 응답하여, 하나 이상의 메모리 위치의 적어도 두 개의 연속 블록과 관련된 가드 태그들을 업데이트하기 위해 적어도 하나의 메모리 액세스를 트리거하는 단계를 더 포함하는, 방법.
  17. 타겟 프로그램 코드의 명령어들의 실행을 위한 명령 실행 환경을 제공하는 호스트 데이터 처리 장치를 제어하기 위한 컴퓨터 프로그램으로서,
    타겟 어드레스에 응답하여 태그 가드 메모리 액세스 동작을 수행하는 메모리 액세스 프로그램 로직을 구비하고, 상기 태그 가드 메모리 액세스 동작은,
    타겟 어드레스에 의해 식별된 어드레스된 위치를 포함하는 하나 이상의 메모리 위치의 블록과 관련하여 메모리 시스템에 저장된 가드 태그와, 타겟 어드레스와 관련된 어드레스 태그를 비교하는 것과,
    가드 태그와 어드레스 태그 사이에서 일치가 검출되는지 여부의 표시를 생성하는 것을 포함하고,
    타겟 프로그램 코드의 다중 가드 태그 설정 명령어에 응답하여 하나 이상의 메모리 위치의 적어도 두 개의 연속 블록과 관련된 가드 태그들을 업데이트하기 위해 적어도 하나의 메모리 액세스를 트리거하는 태그 설정 프로그램 로직을 더 구비하는, 컴퓨터 프로그램.
  18. 청구항 17의 컴퓨터 프로그램을 저장하는 저장 매체.
KR1020207021904A 2018-01-22 2018-12-10 다중 가드 태그 설정 명령어 KR20200107997A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1800970.4A GB2570326B (en) 2018-01-22 2018-01-22 Multiple guard tag setting instruction
GB1800970.4 2018-01-22
PCT/GB2018/053577 WO2019141960A1 (en) 2018-01-22 2018-12-10 Multiple guard tag setting instruction

Publications (1)

Publication Number Publication Date
KR20200107997A true KR20200107997A (ko) 2020-09-16

Family

ID=61283479

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207021904A KR20200107997A (ko) 2018-01-22 2018-12-10 다중 가드 태그 설정 명령어

Country Status (9)

Country Link
US (1) US11327903B2 (ko)
EP (1) EP3743805B1 (ko)
JP (1) JP7269942B2 (ko)
KR (1) KR20200107997A (ko)
CN (1) CN111433742B (ko)
GB (1) GB2570326B (ko)
IL (1) IL275309B (ko)
TW (1) TWI818939B (ko)
WO (1) WO2019141960A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11762566B2 (en) * 2018-01-22 2023-09-19 Arm Limited Programmable mapping of guard tag storage locations
GB2572158B (en) * 2018-03-20 2020-11-25 Advanced Risc Mach Ltd Random tag setting instruction
EP3916568B1 (en) * 2020-05-29 2024-07-17 ARM Limited Tag checking apparatus and method

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4903196A (en) * 1986-05-02 1990-02-20 International Business Machines Corporation Method and apparatus for guaranteeing the logical integrity of data in the general purpose registers of a complex multi-execution unit uniprocessor
JP2505887B2 (ja) * 1989-07-14 1996-06-12 富士通株式会社 命令処理システム
JPH05134930A (ja) * 1991-11-12 1993-06-01 Nippon Telegr & Teleph Corp <Ntt> メモリ保護装置
US5761464A (en) * 1995-05-22 1998-06-02 Emc Corporation Prefetching variable length data
JP2001005726A (ja) 1999-04-20 2001-01-12 Nec Corp メモリアドレス空間拡張装置及びプログラムを記憶した記憶媒体
JP3798376B2 (ja) * 2000-12-27 2006-07-19 三菱電機株式会社 複数品質データ生成符号化器、及び複数品質データ生成符号化方法
US6578122B2 (en) * 2001-03-01 2003-06-10 International Business Machines Corporation Using an access key to protect and point to regions in windows for infiniband
JP4423849B2 (ja) 2002-11-06 2010-03-03 日本電気株式会社 データ保護システム、データ保護プログラム及びデータ保護方法
US7917710B2 (en) * 2006-06-05 2011-03-29 Oracle America, Inc. Memory protection in a computer system employing memory virtualization
US7502890B2 (en) * 2006-07-07 2009-03-10 International Business Machines Corporation Method and apparatus for dynamic priority-based cache replacement
US7796137B1 (en) 2006-10-24 2010-09-14 Nvidia Corporation Enhanced tag-based structures, systems and methods for implementing a pool of independent tags in cache memories
GB2458295B (en) * 2008-03-12 2012-01-11 Advanced Risc Mach Ltd Cache accessing using a micro tag
CN100555225C (zh) * 2008-03-17 2009-10-28 中国科学院计算技术研究所 一种支持x86虚拟机的risc处理器装置及方法
US8904138B2 (en) * 2011-09-28 2014-12-02 Microsoft Corporation Global distributed memory reshape operations on range-partitioned arrays
WO2013048497A1 (en) * 2011-09-30 2013-04-04 Intel Corporation Apparatus and method for implementing a multi-level memory hierarchy
US10768930B2 (en) * 2014-02-12 2020-09-08 MIPS Tech, LLC Processor supporting arithmetic instructions with branch on overflow and methods
US10152330B2 (en) * 2015-09-21 2018-12-11 Bae Systems Information And Electronic Systems Integration Inc. Memory protection using a tagged architecture
EP3204861B1 (en) 2015-12-15 2019-06-19 LZLabs GmbH Protection key management and prefixing in virtual address space legacy emulation system
GB2546245B (en) * 2016-01-05 2020-08-19 Advanced Risc Mach Ltd Cache memory
US9996471B2 (en) * 2016-06-28 2018-06-12 Arm Limited Cache with compressed data and tag
US10248422B2 (en) * 2016-07-02 2019-04-02 Intel Corporation Systems, apparatuses, and methods for snooping persistent memory store addresses

Also Published As

Publication number Publication date
CN111433742B (zh) 2023-08-29
EP3743805B1 (en) 2021-12-08
GB201800970D0 (en) 2018-03-07
JP2021511565A (ja) 2021-05-06
GB2570326B (en) 2020-06-10
US20200233816A1 (en) 2020-07-23
TW201933111A (zh) 2019-08-16
IL275309B (en) 2022-07-01
TWI818939B (zh) 2023-10-21
US11327903B2 (en) 2022-05-10
IL275309A (en) 2020-07-30
EP3743805A1 (en) 2020-12-02
WO2019141960A1 (en) 2019-07-25
JP7269942B2 (ja) 2023-05-09
CN111433742A (zh) 2020-07-17
GB2570326A (en) 2019-07-24

Similar Documents

Publication Publication Date Title
KR101310412B1 (ko) 프레임 관리를 이용한 동적 주소 변환 방법
US11762566B2 (en) Programmable mapping of guard tag storage locations
JP7460529B2 (ja) タグ保護されたメモリ・システムのためのランダム・タグ設定命令
EP3881189B1 (en) An apparatus and method for controlling memory accesses
US11138128B2 (en) Controlling guard tag checking in memory accesses
JP7269942B2 (ja) 複数ガード・タグ設定命令
US11397541B2 (en) Controlling guard tag checking in memory accesses
US11636048B2 (en) Handling guard tag loss
JP7369720B2 (ja) アクションをトリガするための装置及び方法
WO2023175289A1 (en) Read-as-x property for page of memory address space

Legal Events

Date Code Title Description
A201 Request for examination