KR102284957B1 - 트랜잭션 데이터 처리 실행 모드에 대한 호출 스택 유지 - Google Patents

트랜잭션 데이터 처리 실행 모드에 대한 호출 스택 유지 Download PDF

Info

Publication number
KR102284957B1
KR102284957B1 KR1020177003061A KR20177003061A KR102284957B1 KR 102284957 B1 KR102284957 B1 KR 102284957B1 KR 1020177003061 A KR1020177003061 A KR 1020177003061A KR 20177003061 A KR20177003061 A KR 20177003061A KR 102284957 B1 KR102284957 B1 KR 102284957B1
Authority
KR
South Korea
Prior art keywords
stack
data processing
execution mode
processor
speculative
Prior art date
Application number
KR1020177003061A
Other languages
English (en)
Other versions
KR20170031708A (ko
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 KR20170031708A publication Critical patent/KR20170031708A/ko
Application granted granted Critical
Publication of KR102284957B1 publication Critical patent/KR102284957B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • G06F9/467Transactional 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/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • 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/1474Saving, restoring, recovering or retrying in transactions
    • 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
    • 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/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • 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/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • G06F9/528Mutual exclusion algorithms by using speculative mechanisms
    • 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/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/451Stack data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)

Abstract

실행된 데이터 처리 명령들에 의존해서 호출 스택을 유지하는 프로세서의 동작에 관한 데이터 처리 장치 및 데이터 처리 방법이 제공된다. 프로세서는 데이터 처리 명령들이 추가 프로세서와 공유되는 저장된 데이터 항목에 대한 액세스를 탐색할 때 트랜잭션 실행 모드에서 동작하도록 구성된다. 프로세서가 트랜잭션 실행 모드에 진입할 때, 현재의 스택 심도 표시의 복사본을 저장하고, 그 후에 트랜잭션 실행 모드에서 동작하고 있을 때는, 호출 스택에 대한 추가 수정을, 저장된 스택 심도 표시의 복사본과 비교한다. 필요한 수정의 상대적 스태킹 위치가 저장된 복사본에 대하여 양의 스택 성장 방향인 경우, 호출 스택에 대한 수정이 비추론적이라고 라벨링된다. 반대로, 호출 스택에 대한 수정이 저장된 복사본에 의해 표시된 위치에 대하여 양의 성장 방향이 아닌 상대적 스태킹 위치에서 수행되는 경우, 수정이 추론적이라고 라벨링된다. 따라서 트랜잭션 실행 모드에서 호출 스택을 유지하는 것과 관련된 기록 세트(write-set)의 크기를 줄일 수 있다.

Description

트랜잭션 데이터 처리 실행 모드에 대한 호출 스택 유지{CALL STACK MAINTENANCE FOR A TRANSACTIONAL DATA PROCESSING EXECUTION MODE}
본 개시는 데이터 처리에 관한 것이다. 특히, 본 개시는 트랜잭션 실행 모드에서의 데이터 처리 시에 사용되는 호출 스택 데이터 구조의 유지에 관한 것이다.
데이터 프로세서는 실행하는 데이터 처리 명령에 따라 호출 스택을 유지하도록 구성될 수 있는데, 특히 데이터 프로세서가 함수 호출이 발생할 때 리턴 어드레스를 호출 스택에 푸시하며, 또 함수가 끝날 때 호출 스택으로부터 그 리턴 어드레스를 팝(pop)하도록 구성될 수 있다. 현재의 데이터 처리 장치에서는, 데이터 프로세서가 가 가져다주는 성능 향상으로 인해 한 개 이상의 데이터 프로세서(예를 들어, 프로세서 코어)가 제공되는 것이 일반적이다. 그러나, 다중 프로세서에 의해 수행되는 데이터 처리의 결과가 예측 가능하고 확실하다는 것을 보장하기 위해, 이들 다중 프로세서에 의해 수행되는 데이터 처리와 관련한 특정 제한이 존중되어야 한다. 이러한 한 예는 데이터 구조가 시스템 내의 적어도 하나의 다른 데이터 프로세서와 공유되는 데이터 구조(예를 들어, 시스템 메모리에 저장됨)에 액세스할 때, 데이터 프로세서에 의한 트랜잭션 실행에 관한 것이다. 이 데이터 구조의 공유는 서로 다른 데이터 프로세서가 공유 데이터 구조를 동시에 수정함으로써 발생하는 데이터 위험을 피하기 위해서 특정 프로토콜을 따라야 함을 의미한다. 그 후, 데이터 처리 장치 내의 각각의 데이터 프로세서는, 트랜잭션 실행 모드에서 동작할 때(즉, 공유 데이터 구조에 대한 액세스가 시도되고 있지만 아직 성공적으로 완료하지 않은 기간 동안) 추론적(speculative) 방식으로 호출 스택을 갱신하도록 구성됨으로써, 만약 공유 데이터 구조에 관한 트랜잭션 실행이 성공적으로 완료하지 않았으면, 데이터 프로세서는 추론적 수정을 폐기하고 데이터 처리 시퀀스의 마지막으로 알려진 비추론적(non-speculative) 포인트로 "롤백(roll back)"할 수 있다.
제1 예시적인 구성에 따른 장치는, 데이터 처리 명령들을 실행하도록 구성되며, 실행하는 데이터 처리 명령들에 의존하여 호출 스택 데이터 구조를 유지하도록 구성되고, 실행된 데이터 처리 명령들이 추가 프로세서 회로와 공유되는 저장된 데이터 항목들에 액세스할 때 트랜잭션 실행 모드에서 동작하도록 구성된 프로세서 회로; 및 호출 스택 데이터 구조에 대한 스택 심도 표시(stack depth indication)를 저장하도록 구성된 사전 트랜잭션 스택 포인터 저장회로를 구비하고, 상기 프로세서 회로는 트랜잭션 실행 모드에 진입하기 전에 상기 스택 심도 표시를 저장하도록 구성되며, 상기 프로세서 회로는, 트랜잭션 실행 모드에서 동작할 때, 상기 스택 심도 표시에 대하여 호출 스택 데이터 구조에 대한 수정을 위한 상대적 스태킹 위치를 결정하고, 상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향인 경우, 수정과 관련하여 수정이 비추론적이라는 표시를 저장하며, 상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향이 아닌 경우, 수정과 관련하여 수정이 추론적이라는 표시를 저장하도록 구성된다.
또 다른 예시적인 구성에 따른 장치는, 데이터 처리 명령들을 실행하는 수단; 실행된 데이터 처리 명령들에 의존해서 호출 스택 데이터 구조를 유지하는 수단 - 상기 데이터 처리 명령들을 실행하는 수단은 실행된 데이터 처리 명령들이 데이터 명령들을 실행하는 추가 수단과 공유되는 저장된 데이터 항목들에 액세스할 때 트랜잭션 실행모드에서 동작하도록 구성되고-; 호출 스택 데이터 구조에 대한 스택 심도 표시를 저장하는 수단 - 상기 스택 심도 표시는 상기 데이터 처리 명령들을 실행하는 수단이 트랜잭션 실행 모드에 진입하기 전에 저장되며-; 트랜잭션 실행 모드에서 동작하고 있을 때, 상기 스택 심도 표시에 대하여 호출 스택 데이터 구조에 대한 수정을 위한 상대적 스태킹 위치를 결정하는 수단; 및 수정과 관련된 표시를 저장하는 수단을 구비하고, 상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향인 경우, 상기 표시는 수정이 비추론적이라고 나타내고, 상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향이 아닌 경우, 상기 표시는 수정이 추론적이라고 나타낸다.
또 다른 예시적인 구성에 따른 프로세서 장치에서의 데이터 처리 방법은, 데이터 처리 명령들을 실행하는 단계; 실행된 데이터 처리 명령들에 의존해서 호출 스택 데이터 구조를 유지하는 단계; 실행된 데이터 처리 명령들이 추가 프로세서 장치와 공유되는 저장된 데이터 항목들에 대한 액세스를 탐색할 때 트랜잭션 실행 모드에 진입하는 단계; 트랜잭션 실행 모드에 진입하기 전에 저장되는 스택 심도 표시를 저장하는 단계; 및 트랜잭션 실행 모드에서 동작할 때, 상기 스택 심도 표시에 대하여 호출 스택 데이터 구조에 대한 수정을 위한 상대적 스태킹 위치를 결정하는 단계; 및 상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향인 경우, 수정과 관련하여 수정이 비추론적이라는 표시를 저장하고, 상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향이 아닌 경우, 수정과 관련하여 수정이 추론적이라는 표시를 저장하는 단계를 포함한다.
본 발명은 첨부된 도면에 도시된 실시 예를 참조하여 예로서만 기술될 것이다.
도 1은 일 실시 예의 데이터 처리 장치를 개략적으로 나타낸 것이며, 각각 메모리의 공유 데이터 구조에 액세스할 수 있는 2개의 프로세서 코어를 나타낸 것이다.
도 2a는 C와 같은 코드의 예시적인 시퀀스를 나타낸 것이다.
도 2b는 일 실시 예에서 호출 스택에 푸시하고 그 호출 스택으로부터 팝하는 것에 대응하는 도 2a의 코드에서의 함수 호출 및 리턴을 개략적으로 나타낸 것이다.
도 2c는 일 실시 예에서 도 2a의 코드에 대한 호출 스택의 콘텐트 및 성장을 개략적으로 나타낸 것이다..
도 3은 도 2a에 나타낸 코드의 실행에 대응하는 일 실시 예에서 호출 스택의 콘텐트의 전개를 보다 상세하게 개략적으로 나타낸 것이다.
도 4a는 일 실시 예에서 저장 유닛을 개략적으로 나타낸 것이다.
도 4b 및 도 4c는 도 4a의 저장 유닛의 사용 예를 개략적으로 나타낸 것이다.
도 5는 일 실시 예에서의 프로세서 코어 및 관련 LI 캐시를 개략적으로 나타낸 것이다.
도 6은 일 실시 예의 방법에 따라 취해진 일련의 단계들을 개략적으로 나타낸 것이다.
도 7은 트랜잭션 중단을 모니터링하고 트랜잭션 중단에 반응하기 위해 일 실시 예에서 취해진 일련의 단계들을 개략적으로 나타낸 것이다.
제1 예시적인 구성에 따른 장치는, 데이터 처리 명령들을 실행하도록 구성되며, 실행하는 데이터 처리 명령들에 의존하여 호출 스택 데이터 구조를 유지하도록 구성되고, 실행된 데이터 처리 명령들이 추가 프로세서 회로와 공유되는 저장된 데이터 항목들에 액세스할 때 트랜잭션 실행모드로 동작하도록 구성된 프로세서 회로; 및 호출 스택 데이터 구조에 대한 스택 심도 표시(stack depth indication)를 저장하도록 구성된 사전 트랜잭션 스택 포인터 저장회로를 구비하고, 상기 프로세서 회로는 트랜잭션 실행 모드에 진입하기 전에 상기 스택 심도 표시를 저장하도록 구성되며, 상기 프로세서 회로는, 트랜잭션 실행 모드에서 동작할 때, 상기 스택 심도 표시에 대하여 호출 스택 데이터 구조에 대한 수정을 위한 상대적 스태킹 위치를 결정하고, 상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향인 경우, 수정과 관련하여 수정이 비추론적이라는 표시를 저장하며, 상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향이 아닌 경우, 수정과 관련하여 수정이 추론적이라는 표시를 저장하도록 구성된다.
본 발명의 발명자들은, 프로세서가 트랜잭션 실행 모드에서 동작하는 동안 호출 스택에 대한 수정이 추론적이라고 표시되는 구성이 안전하지만, 이것에 의해 시도한 트랜잭션이 성공적으로 완료되지 않은 경우 프로세서가 트랜잭션 실행 모드에 들어갔을 때의 구성으로 확실히 호출 스택의 상태를 "롤백"할 수 있다는 의미에서, 호출 스택에 대한 추론적 수정과 관련하여 데이터 프로세서가 유지해야 하는 결과적인 데이터 세트의 크기가 바람직하지 않게 커질 수 있다는 것을 알았다. 본 기술은 이러한 문제점을 해결하고 이 데이터 세트의 크기를 감소시킬 수 있다는 것을 제공한다.
따라서, 프로세서에 의해 호출 스택의 관리 및 유지에 사용된 스택 포인터가 지시한 스택 심도의 표시를 저장할 수 있는 사전 트랜잭션 스택 포인터 저장회로가 제공되며, 이 스택 심도 표시는 프로세서가 자신의 트랜잭션 실행 모드에 진입하기 전에 사전 트랜잭션 스택 포인터 저장회로를 저장된다. 트랜잭션 실행 모드에 진입하는 것은, 예를 들어 프로세서가 추가 프로세서 회로와 공유되는 것인 액세스될 저장된 데이터 항목의 식별에 근거하여 그렇게 해야 할 필요성을 인지함으로써 발생할 수 있고, 또는 다른 예에서는 프로세서를 트랜잭션 실행 모드로 전환하는 명시적인 "트랜잭션 실행 모드 시작" 명령의 실행으로부터 발생할 수 있음에 유념한다. 후자의 예와 관련하여, "트랜잭션 실행 모드 종료" 명령은 나중에 트랜잭션 실행 모드에서 프로세서를 전환하는데 사용될 수도 있다.
또한, 프로세서는 이후에 (트랜잭션 실행 모드에서) 호출 스택에 대해 행하는 각각의 수정에 대해, 사전 트랜잭션 스택 포인트 스토리지에 저장된 표시에 대한 수정이 어디에서 발생하는지를 결정한다. 이 수정을 위한 상대적 스태킹 위치는 특히 호출 스택의 스택 성장 방향과 관련하여 결정되고, 이 스택 성장은 호출 스택이 호출 스택의 특정 구성에 따라 "위쪽으로" 또는 "아래쪽으로", 호출 스택이 메모리 어드레스를 증가시키거나 감소시키는지 여부 등으로 설명될 것이다. 그런 다음, 호출 스택에 대한 수정을 수행할 때, 프로세서는 수정의 상대 스태킹 위치가 사전 트랜잭션 스택 포인터 저장장치의 콘텐트(content)가 나타내는 위치에 대해 양의 스택 성장 방향인지를 결정한다. 수정이 양의 스택 성장 방향에 있는 상대적 스태킹 위치에 요구되는 것으로 판명되면, 이 수정이 비추론적이라는 것을 나타내는 호출 스택에 대한 수정과 관련된 표시가 저장된다. 반대로, 수정의 상대적 스태킹 위치가 사전 트랜잭션 스택 포인터 저장장치의 콘텐트가 나타내는 위치에 대하여 양의 성장 방향이 아닌 것으로 판정되면, 호출 스택에 대한 수정과 관련하여 저장된 표시가 수정이 추론적임을 나타내기 위해 설정된다. 수정과 관련하여 저장된 이들 추론적/비추론적 표시는 예를 들어 단지 설정되거나 설정되지 않은 비트를 구비할 수도 있음을 이해할 것이다.
따라서 트랜잭션 실행 모드에 있을 때 호출 스택에 대한 일부 수정의 이론성(speculative nature)을 올바르게 관리하기 위해 프로세서가 호출 스택과 관련하여 유지해야 하는 데이터 세트의 크기는, 이러한 수정의 서브세트가 실제로 추론적이라고 라벨링되지만, 프로세서가 트랜잭션 실행 모드에 있지 않을 때(그리고 어떤 종류의 투기적 실행을 수행하지 않는 경우) 이러한 수정이 이루어지는 방식으로 비추론적이라고 라벨링되기 때문에, 감소될 수도 있다. 이것은, 트랜잭션 실행 모드에서 시도되는 트랜잭션이 성공적으로 완료하지 않은 경우에, 프로세서가 호출 스택의 상태를 프로세서가 그것의 트랜잭션 실행 모드로 진입했을 때의 상태로 롤백함으로써 이를 처리하고, 특히 스택 포인터를 데이터 처리의 해당 단계에서 가지고 있었던 값으로 재설정하면, 트랜잭션 실행 모드 진입에서의 스택 심도에 대해 양의 스택 성장 방향의 위치에서 트랜잭션 실행 모드에서 이루어진 호출 스택에 대한 수정이, 트랜잭션 진입 모드로의 진입 지점이나 그 이전에 기록된 호출 스택 콘텐트를 겹쳐 쓸 가능성이 없기 때문에, 단순히 폐기될 수 있다는 사실에 기반하여 가능하다.
사전 트랜잭션 스택 포인트 저장회로는 다양한 방식으로 구성될 수 있지만, 일 실시 예에서 사전 트랜잭션 스택 포인터 저장회로는 호출 스택 데이터 구조에 대한 처리회로에 의해 사용되는 스택 포인터의 카피를 저장하도록 구성된다. 따라서, 예를 들어, 현재 스택 포인터가 장치에 의해 프로세서의 레지스터에 저장되는 경우, 그 레지스터의 콘텐트는 사전 트랜잭션 스택 포인터 저장회로에 카피될 수 있다. 실제로, 일부 실시 예에서, 사전 트랜잭션 스택 포인터 저장회로 자체는 처리 회로에 액세스 가능한 레지스터를 구비한다. 또한, 이러한 레지스터는 처리 회로에 의해 실행되는 데이터 처리 명령에 액세스할 수 없도록 구성될 수도 있다. 다시 말해, 이 레지스터는 프로그래머에게 명백할 수 있으므로, 외부 에이전트가 콘텐트를 수정할 수 없다.
호출 스택에 대한 수정은 푸시(pushes)와 팝(pops)을 포함할 수 있다. 일부 실시 예에서, 상대적 스태킹 위치가 스택 심도 표시가 나타낸 위치에 대해 양의 스택 성장 방향이 아니며, 수정이 호출 스택 데이터 구조에 대한 푸시인 경우, 푸시에 의해 호출 스택 데이터 구조에 푸시된 데이터 항목은 추론적으로 기록된 것으로 표시된다. 따라서, 푸시 동작의 결과를 반영하기 위해 장치에 의해 저장된 데이터 항목 또는 데이터 항목들은 추론적으로 기록된 것으로 표시된다. 반대로, 상대적 스태킹 위치가 스택 심도 표시가 나타낸 위치에 대해 양의 스택 성장 방향이 아니며, 수정이 호출 스택 데이터 구조로부터의 팝인 경우, 팝에 의해 호출 스택 데이터 구조로부터 팝핑된 데이터 항목이 추론적으로 판독된 것으로 표시된다. 따라서, 팝이 호출 스택으로부터 제거하려고 하는 호출 스택 콘텐트의 추가를 반영하기 위해 장치에 의해 미리 저장된 데이터 항목 또는 데이터 항목들은 추론적으로 판독되었음을 나타내기 위해 갱신된다. 호출 스택이 자신이 속하는 (그리고 추가 프로세서 회로가 아닌) 프로세서 회로에만 액세스할 수 있는 경우, 추론적으로 판독하는 것과 같은 마킹은 전형적으로 불필요한데, 그 이유는 이 데이터 항목 또는 이들 데이터 항목의 추론적 판독이 제공된 코히어런시(coherency) 메카니즘의 관점에서 추가 처리 회로에 영향을 줄 수 없기 때문이라는 점에 더 유념해야 한다.
프로세서 회로는 다양한 저장 위치에서 호출 스택 데이터 구조를 유지하도록 구성될 수 있다. 예를 들면. 프로세서 회로는 추가의 프로세서 회로와 공유되는 데이터 항목들이 저장되는 메모리에 호출 스택 데이터 구조를 유지할 수 있다. 그러나, 일부 실시 예에서, 상기 장치는 상기 데이터 처리 명령들을 실행할 때 상기 프로세서 회로에 의해 액세스된 데이터 항목들의 로컬 카피(local copies)를 메모리에 저장하도록 구성된 저장회로를 더 포함하며, 상기 프로세서 회로는 상기 저장회로 내에서 상기 호출 스택 데이터 구조를 유지하도록 구성된다. 이 저장회로는 프로세서 회로에 의해 액세스된 데이터 항목들의 로컬 카피를 메모리에 저장하도록 구성되고, 즉, 통상적으로 캐시이며, 통상적으로 상당히 작은 저장 용량을 갖도록 구성될 것이다. 본 기술은 그러한 캐시가 가질 수 있는 비교적 제한된 저장 용량으로 인해, 프로세서 회로 및 관련 로컬 캐시를 포함하는 장치와 관련하여 특별한 적용 가능성을 발견할 수 있다.
장치가 이러한 저장회로를 구비하는 경우, 저장회로는 코히어런시 제어유닛을 구비할 수도 있고, 코히어런시 제어유닛은 비추론적이라고 표시된 저장회로의 콘텐트가 메모리에 축출되도록 허용하고, 저장회로의 콘텐트가 축출을 위해 선택되고 추론적이라고 표시되는 경우 에러 조건을 발생시키도록 구성된다. 따라서, 코히어런시 제어유닛은, 특히 저장회로(캐시 등)가 비교적 제한된 저장 용량을 가질 수 있다는 사실을 고려하여, 임의의 주어진 데이터 처리 단계에서 저장회로에 유지되어야 하는 콘텐츠의 결정을 관리한다. 따라서, 코히어런시 제어유닛은 추론적이지 않은 것으로 표시된 저장 회로의 콘텐트가 (저장회로 구성에 기인하여) (통상적으로 새로운 콘텐트가 저장회로에 저장될 필요가 있을 때) 유효한 콘텐트가 이미 저장된 소정의 위치에 저장될 필요가 있는 메모리에 축출되도록 허용할 수 있다. 이 기존의 유효한 콘텐트가 비추론적이라고 표시되면, 코히어런시 제어장치는 그러한 축출이 진행되도록 허용하고, 반면에 그것이 비추론적인 것으로 표시되면 코히어런시 제어장치는 에러 조건을 생성한다. 트랜잭션 실행 모드에서 동작하는 프로세서의 맥락에서, 이것은 일반적으로 호출 스택에 대한 추가 추론적 수정이 저장회로에 저장될 수 있다는 것을 보장할 수 없기 때문에, 프로세서 회로가 시도된 트랜잭션을 계속하는 것을 방지하는 전개상황을 나타낼 것이며, 그러면 생성된 에러 조건으로 인해 트랜잭션 시도가 중단될 수도 있다.
그러나 트랜잭션 실행 모드에서 시도한 트랜잭션이 성공적으로 완료하면, 해당 변경이 성공적으로 수행된 최종적인 변경을 나타내기 때문에, 저장회로의 추론 콘텐트은 비추론적이 되도록 갱신될 수 있다. 따라서, 일 실시 예에 있어서는, 처리 회로가 트랜잭션 실행 모드를 종료하고 트랜잭션 실행 모드에서 실행된 데이터 처리 명령들이 그들의 데이터 처리 동작을 성공적으로 완료했을 때, 추론적이라고 표시된 저장회로의 콘텐트를 비추론적이라고 표시된 저장회로의 콘텐트로 변경하도록 코히어런시 제어유닛이 구성된다.
코히어런시 제어유닛은 추가 프로세서 회로로부터 추론적이라고 표시된 저장 회로의 콘텐트를 숨기도록 구성될 수도 있다. 이것은 장치에 제공된 임의의 코히어런시 메커니즘이 저장 회로의 임의의 추론적 콘텐트가 추가 처리 회로와 관련하여 안전하게 처리되는 것을 더 이상 보장할 필요가 없다는 것을 제공한다. 예를 들어, 코히어런시 제어유닛은 추가 처리회로가 대응하는 콘텐트에 액세스하고 있다는 것을 나타내는 경우, 그러한 콘텐트가 현재 저장 회로에 저장되어 있지 않다는 통지에 응답하도록 구성될 수 있다.
일부 실시 예에서, 상기 장치는 중단 처리 회로를 더 포함하며, 상기 중단 처리 회로는 처리 회로가 트랜잭션 실행 모드에서 동작할 때, 계류중인 트랜잭션이 실패했다는 표시에 응답하여 롤백 절차를 수행하도록 구성되며, 상기 롤백 절차는 추론적이라고 표시된 임의의 변경을 폐기하고, 저장된 스택 심도 표시를 사용하여 현재 스택 포인터를 리셋하는 것을 포함한다. 이와 같이, 처리 회로가 트랜잭션 실행 모드를 성공적으로 빠져나가지 못하고 시도되었던 트랜잭션이 다시 시도되어야하는 경우, 처리회로에 의해 수행되는 데이터 처리는, 트랜잭션 실행 모드가 시작되었고, 따라서 호출 스택을 참조하기 위해 처리회로에 의해 사용되는 현재 스택 포인터가 저장된 스택 심도 표시의 값, 즉 트랜잭션 실행 모드로 들어갔을 때 스택 포인터가 가졌던 값으로 리셋되는 지점으로 롤백(리셋)될 수 있다.
또 다른 예시적인 구성에 따른 장치는, 데이터 처리 명령들을 실행하는 수단; 실행된 데이터 처리 명령들에 의존해서 호출 스택 데이터 구조를 유지하는 수단 - 상기 데이터 처리 명령들을 실행하는 수단은 실행된 데이터 처리 명령들이 데이터 명령들을 실행하는 추가 수단과 공유되는 저장된 데이터 항목들에 액세스할 때 트랜잭션 실행 모드로 동작하도록 구성되고-; 호출 스택 데이터 구조에 대한 스택 심도 표시를 저장하는 수단 - 상기 스택 심도 표시는 상기 데이터 처리 명령들을 실행하는 수단이 트랜잭션 실행 모드에 진입하기 전에 저장되며-; 트랜잭션 실행 모드에서 동작하고 있을 때, 상기 스택 심도 표시에 대하여 호출 스택 데이터 구조에 대한 수정을 위한 상대적 스태킹 위치를 결정하는 수단; 및 수정과 관련된 표시를 저장하는 수단을 구비하고, 상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향인 경우, 상기 표시는 수정이 비추론적이라고 나타내고, 상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향이 아닌 경우, 상기 표시는 수정이 추론적이라고 나타낸다.
또 다른 예시적인 구성에 따른 프로세서 장치에서의 데이터 처리 방법은, 데이터 처리 명령들을 실행하는 단계; 실행된 데이터 처리 명령들에 의존해서 호출 스택 데이터 구조를 유지하는 단계; 실행된 데이터 처리 명령들이 추가 프로세서 장치와 공유되는 저장된 데이터 항목들에 대한 액세스를 탐색할 때 트랜잭션 실행 모드에 진입하는 단계; 트랜잭션 실행 모드에 진입하기 전에 저장되는 스택 심도 표시를 저장하는 단계; 및 트랜잭션 실행 모드에서 동작할 때, 상기 스택 심도 표시에 대하여 호출 스택 데이터 구조에 대한 수정을 위한 상대적 스태킹 위치를 결정하는 단계; 및 상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향인 경우, 수정과 관련하여 수정이 비추론적이라는 표시를 저장하고, 상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향이 아닌 경우, 수정과 관련하여 수정이 추론적이라는 표시를 저장하는 단계를 포함한다.
도 1은 일 실시 예에 따른 2개의 데이터 처리장치(12 및 14)를 구비하는 데이터 처리 시스템(10)을 개략적으로 나타낸다. 각각의 데이터 처리장치(12, 14)는 프로세서 코어(16, 18)를 각각 구비하며, 따라서 데이터 처리 시스템(10)이 멀티 코어 시스템이라는 것을 인식할 것이다. 각각의 데이터 처리장치(12, 14)는 동일한 시스템 버스(20)에 액세스하고, 그것을 통해서 메모리(22)에 (다른 타겟들 중에서) 액세스할 수 있다. 처리 장치들(12 및 14) 모두가 동일한 메모리(22)에 액세스할 수 있지만, 공지된 메모리 할당 및 제어 기술에 따라 데이터 처리 장치 중 하나만이 액세스하고 다른 데이터 처리 장치는 액세스가 방지되는(또는 적어도 수정되지 않도록) 메모리(22)의 영역이 있을 수도 있다. 그러나, 도시된 바와 같이, 메모리(22)는 공유 데이터 구조(24)가 저장되는 적어도 하나의 영역을 포함하며, 데이터 처리장치(12 및 14) 모두가 액세스할 수 있다. 이러한 공유된 데이터 구조(24)는 예를 들어 데이터베이스일 수 있지만, 본 기술은 결코 그러한 예에 제한되지 않는다. 공유된 데이터 구조(24)는 훨씬 간단한 데이터 구조를 나타낼 수 있고, 실제로 원칙적으로 단일 데이터 항목만이 두 데이터 처리장치에 액세스할 수 있다.
데이터 처리 장치들 12 및 14 모두가 메모리(22) 내의 동일한 공유 데이터 구조(24)에 액세스한다는 사실은, 두 데이터 처리 장치, 특히 각각의 프로세서 코어가 동일한 공유 데이터 구조(24)(및 상술한 공유 데이터베이스의 문맥에서, 예를 들어 그 공유 데이터베이스 내의 동일한 데이터 항목)에 액세스하려고 할 때 충돌이 발생하지 않도록 보장하기 위해서, 데이터 처리 장치가 동작하는 방식에 일정한 제약을 부과한다. 이러한 충돌을 피하기 위해, 각 프로세서 코어 16, 18은 공유 데이터 구조(24)에 대한 액세스가 요구될 때 트랜잭션 실행 모드로 들어가도록 구성된다. 각각의 프로세서 코어는, 예를 들어, 액세스되는 데이터 항목이, 페이지 테이블 내의 정보에 대한 참조에 의해, 캐시에 저장된 캐시 코히어런시 프로토콜 및 추적 구조에 대한 참조에 의해, 또는 다른 공지된 추적 및 시그널링 구조에 대한 참조에 의해, 이 다른 프로세서 코어와 액세스가 공유되는 것인 경우를 인식할 수 있다. 대안으로 또는 추가적으로, 명시적 "트랜잭션 실행 모드 시작" 및 "트랜잭션 실행 모드 종료" 명령을 사용하여 트랜잭션 실행 모드 외에서 프로세서를 전환할 수도 있다. 이러한 트랜잭션 실행 모드는 본 기술의 당업자에게 공지되어 있지만, 본질적으로 트랜잭션 실행 모드에서 동작할 때, 프로세서 코어는 보다 보수적인 방식으로 메모리(22)에 액세스하도록 제한되며, 이에 따라 공유 데이터 구조(24)(또는 그 일부)에의 액세스가 이루어지면, 프로세서 코어는 먼저 데이터 구조 또는 데이터 항목에 대한 잠금을 취득하려고 시도한 다음에 성공적으로 취득해야 하며, 이 잠금은, 일단 취득되면 그것이 일시적으로 속하는 프로세서가 잠금이 해제될 때까지 해당 데이터 구조 또는 데이터 항목에 독점적으로 액세스할 수 있도록 구성되어 있다. 이것은 하나 이상의 프로세서가 동시에 동일한 데이터 구조 또는 데이터 항목에 액세스하는 결과로서 다양한 형태의 알려진 데이터 위험이 발생할 수 없도록 보장하며, 여기서는 데이터 처리 시스템(10)에 대한 상이한 처리 결과가, 전체적으로 프로세서 16 및 18가 그 공유 데이터 구조를 액세스(및 특히 수정)하는 특정 순서의 결과로서 발생할 수 있다.
본 명세서에 기술된 본 기술은 특히 트랜잭션 실행 모드에서 동작하는 프로세서의 컨텍스트에서 식별된 이슈들 및 그 프로세서가 호출 스택을 유지하는 방식과 관련이 있는데, 이것은 리턴 어드레스(및 아마도 더 연관된 프로세서 상태 정보)를 저장하기 위해 데이터 처리장치에 의해 사용되는 공지된 데이터 구조로서, 프로세서는 자신이 실행하는 데이터 프로그램 명령 시퀀스에서 함수 호출 및 함수 리턴이 발행할 때 정확한 메모리 어드레스로 정확하게 이동할 수 있다(및 대응하는 프로세서 상태 정보를 갱신할 수 있다). 본 기술을 구현하기 위해 프로세서 코어 16, 18가 구성되는 방식의 한 특징은, 제공되는 내부 레지스터 26, 28의 세트 내부에서, 유지하고 있는 호출 스택을 참조하는 데 사용되는 스택 포인터(SP)의 사본을 저장할 수 있는 추가 레지스터가 각각에 제공된다는 것이다. 이 스택 포인터 사본이 이 목적을 위해 제공된 전용 레지스터 30, 32에 저장되는 경우의 추가적인 상세한 설명은 이하의 도면을 참조하여 보다 상세하게 설명될 것이다. 각각의 데이터 처리 장치 12, 14에는 레벨 1(LI) 캐시 34 및 36가 각각 추가로 설치되어 있다. 이들 L1 캐시의 각각은 관련 프로세서 코어의 사용을 위해 메모리(22)의 콘텐츠의 작은 서브세트를 캐시하도록 구성되어, 프로세서 코어가 메모리(22)의 콘텐츠에 대한 액세스를 탐색할 때, 시스템 버스(20)를 통해 가능하게는 (도시되지 않은 레벨 2(L2) 캐시와 같은) 메모리 계층구조의 추가적인 멤버들을 통해 메모리(22)에 저장된 데이터 항목에 액세스하는 것과 관련된 레이턴시가 많이 방지될 수 있다. 각각의 L1 캐시 34, 36에는, 캐시의 전체 제어를 유지하고, 특히 예시된 실시 예에서서, 본 기술을 지원하기 위해 다음의 도면을 참조하여 보다 상세하게 설명되는 방식으로 구성되는 각각의 제어유닛 38, 40이 설치되어 있다.
도 2a는 도 1에 나타낸 데이터 처리 시스템(10)에서의 프로세서 코어 16, 18 중의 하나에 의해 실행될 수 있는 데이터 처리 명령들의 시퀀스의 구조를 나타내는 일부의 C와 같은 코드를 도시한 것이다. 도 2a에 나타낸 코드는, 함수 호출 중의 일부가 서로 내장되어 있고, 예를 들어, 함수 f2()가 함수 f1()에 내장되어 있는 반면, 함수 f4()는 그 자체가 함수 f1() 내에 내장되는 함수 f3() 내에 내장되어 있는, 비교적 단순한 함수 호출 세트이다. 본 기술에 대한 특별히 중요한 것은 연산 tbegin()을 포함하는 함수 f2()의 정의이며, 이 지점에서 이들 명령을 실행하는 프로세서는 저장된 데이터 구조 또는 메모리 내의 항목에 대한 액세스를 탐색하기 위해 트랜잭션 실행 모드에 진입할 것이다. 따라서 특히 트랜잭션 실행 모드의 진입 및 이후의 트랜잭션 동작은 라이브러리 호출 내부에서 추출된다는 점에 유념한다.
도 2a에 나타낸 정의된 코드를 통해서 정확하게 진행하기 위해 이들 명령을 실행하는 프로세서는, 프로그램 명령들의 시퀀스에서 만나게 되는 함수 호출에 대한 리턴 어드레스가 푸시되고, 그 후에 함수가 완료될 때부터 팝(pop)되는 호출 스택을 유지함으로써, 프로세서는 프로그래머에 의해 정의된 것처럼 프로그램된 명령들의 시퀀스를 정확하게 따를 수 있다.
도 2b는 프로세서가 도 2a에 나타낸 데이터 처리 명령들을 실행할 때 호출 스택에/으로부터의 푸시 및 팝의 예시를 제공한다. 따라서, 프로세서가 함수 f1()에서 함수 f2()을 만날 때, 리턴 어드레스 ret_f2가 호출 스택에 푸시되고, 함수 f2()의 끝에서 이 어드레스(및 아마도 더 많은 구성 데이터)가 그 스택으로부터 팝핑된다. 함수 f2()의 끝에 있는 이 팝은 도 2b에서 프로세서가 트랜잭션 실행 모드에 있는 동안 팝이 발생한다는 사실을 의미하는 tx_pop로서 표시되며, 이것에 대해서는 이하에 더 자세히 설명할 것이다. 마찬가지로, 프로세서가 함수 fl()에서 나중에 함수 f3()를 만나면, 리턴 어드레스 ret_f3이 호출 스택(tx_push)에 푸시된다. 그러나, 함수 f3() 내에서 이 다음에, 함수 f4()를 만나면, 리턴 어드레스 ret_f4도 호출 스택에 푸시되지만, 이하에 더 상세히 설명하는 바와 같이, 이 리턴 어드레스 ret_f4가 처리되는 특정 방식이 리턴 어드레스 ret_f3가 처리되는 방식과 상이하기 때문에, 이것은 도 2b에서 non_tx_push로서 라벨링된다.
도 2c는 도 2a에 나타낸 명령들을 실행하는 프로세서가 이들 명령을 통해 진행함에 따라 유지하는 호출 스택의 콘텐트 및 전개를 개략적으로 나타낸 것이다. 도 2c에 나타낸 바와 같이, 이것은 호출 스택 데이터 구조를 유지하기 위해 사용하는 메모리 어드레스의 특정 배열로서 해석되어서는 안 된다는 점에 유념해야 하지만, 호출 스택은, 페이지에서 아래쪽으로 양의 스택 성장 방향을 갖고, 이들은 특정 구현에 따라 양의 스택 성장으로 똑같이 메모리 어드레스들을 증가시키거나 메모리 어드레스들을 감소시키거나 할 수 있다. 본 논의에서 특히 중요한 것은 도 2c의 우측에 표시되며 도 2a에 나타낸 것과 같은 코드 내의 특정 지점에 대응하는 라벨링 (1) (2), (3) 및 (4)이다. 이들 지점은 코드의 해당 특정 단계에 도달한 지점에서 호출 스택이 갖는 스택 심도를 나타낸다.
프로세서는 전용 레지스터가 제공되는 스택 포인터(SP)를 통해 현재의 스택 심도에 대한 지식을 유지한다. 또한, 프로세서는 트랜잭션 실행 모드에 진입하는 지점에서, 즉 tbegin() 함수를 만날 때 도 2a 및 도 2b에 나타낸 예시된 예에서 SP의 사본을 저장하도록 구성된다. 도 1에 나타낸 실시 예에서, 이 스택 포인터의 사본은 도 2a에 나타낸 명령들을 실행하고 있는 각각의 프로세서 코어 16, 18에 의해 전용 레지스터 30, 32에 저장된다. 그 후에, 프로세서는 여전히 트랜잭션 실행 모드에 있지만, 그것은 호출 스택을 수정하고 호출 스택에 대한 수정이 그 저장된 사본이 나타내는 스택 심도 위치에 대해서 양의 스택 성장 방향에 있는지 여부를 판정할 때 스택 포인터의 저장된 사본을 참조한다. 따라서, 도 2c로 나타낸 예시를 참조하면, SP@tbegin으로서 표시된 심도가 나타내는 심도 아래의 스택 심도에서의 호출 스택에 대한 수정은, 저장된 SP 값에 대해서 양의 스택 성장 방향이라고 판정되지만, 이 지점 위의 스택 심도 위치에서의 호출 스택에 대한 수정은 양의 스택 성장 방향이 아니다. 도 2a에 나타낸 명령들을 실행하는 프로세서에는 관련된 L1 캐시가 제공되며, 그것의 제어유닛은, 호출 스택에 대한 수정(프로세서는 트랜잭션 실행 모드에 있지만)이 SP 카피 레지스터에 저장된 스택 포인터 값 SP@tbegin에 대해 양의 스택 성장 방향에 있는 스택 심도에서 발생했는지 여부에 따라, 호출 스택 데이터 구조의 일부를 형성하고 비추론적(non-speculative) 또는 추론적(speculative)으로서 L1 캐시에 저장되는 데이터 항목을 라벨링하도록 구성된다. 그 SP 카피값에 대해 양의 스택 성장 방향으로 수정이 이루어지면 캐시 제어유닛은 LI 캐시 내의 해당 엔트리를 비추론적이라고 라벨링하고, 그것이 그 SP 카피값에 대하여 양의 스택 성장 방향에 있지 않으면 해당 데이터 항목은 추론적이라고 라벨링된다.
이것은 도 2b에서 프로세서의 트랜잭션 실행 모드에 해당하는 도면의 부분을 "tx_zone"과 "non_tx_zonc"로 분할하는 점선에 의해 도면의 수직 분할로 표시된다. 이와 같이, "tx zone"에서 발생하는 호출 스택에 대한 수정은, 추론적이라고 라벨링되지만, "non_tx_zone"에서의 호출 스택에 대한 수정은, 비추론적이라고 라벨링된다. 이것은 도 2c를 참조하면 더 이해될 수 있는데, 여기서 함수 f2()에 대한 리턴 어드레스 ret_f2는 원칙적으로 함수 f3()에 대한 리턴 어드레스 ret_f3에 의해 중복 기재될 것이라는 것을 알 수 있다. 그러나, 본 기술은 트랜잭션 실행 모드에서 동작할 때 프로세서가 수행하고자 하는 트랜잭션 실행이 성공적으로 완료되지 않을 수도 있기 때문에, 한 번 더 그 트랜잭션 실행을 시도하기 위해서, 프로세서가 자신의 실행 상태를 tbegin() 명령을 만났을 때의 상태로 롤백할 필요가 있을 수도 있다는 것을 인식한다. 트랜잭션 실행 모드에서 프로세서가 시도하는 트랜잭션은, 여러 가지 이유로, 예를 들면, 또 다른 프로세서가 현재 원하는 데이터 항목에 액세스하고 있기 때문에, 동적으로 트리거되거나, 또는 예를 들면, 도 2a에서의 함수 f1()에 나타낸 tabort() 호출로 인해, 수동으로 트리거되어, 성공적으로 완료되지 않을 수도 있다는 점에 유념한다. f3() 리턴 어드레스 ret_f3의 추가를 포함하는 호출 스택의 수정이 L1 캐시 내의 해당 엔트리를 명확하게 수정하도록 허용되었으면, 이 수정은 영구적이었을 것이고, 해당 데이터 항목도 그 동안에 메모리에 축출되었을 수도 있으며, 프로세서는 (트랜잭션 실행 모드에서) 새로운 시도를 트리거하여 필요한 트랜잭션을 수행하기 위해서 호출 스택의 상태를 tbegin() 함수를 다시 실행하기 위한 정확한 상태로 롤백할 방법이 없다. 이것은 도 2c의 예시에서 지점 SP@tbegin() 위에 있는 호출 스택의 콘텐트가 함수 f3()에 대한 리턴 어드레스를 포함하지만, 함수 f2()에 대한 리턴 어드레스를 포함하지 않기 때문인데, 그 이유는 후자가 전자에 의해 중복 기재되었을 것이기 때문이다. 따라서, 프로세서는 필요한 리턴 어드레스를 더 이상 이용할 수 없기 때문에 나중에 함수 f2()로부터 정확하게 리턴할 수 없게 된다.
본 기술은, 프로세서가 트랜잭션 실행 모드에 있을 때 발생하는 호출 스택 데이터 구조에 대한 수정들이, 추론적 또는 비추론적이라고 라벨링되어야 하는지 여부를 판정하기 위해서, 저장된 값 SP@tbegin과 비교되는 것을 제공함으로써 이 문제를 해결한다. 그러나 이것은 "tx_zone", 즉 도 2c에 나타낸 해치된 상부 영역에서의 호출 스택에 대한 수정의 추론성(speculative nature)이 정확하게 처리되는 것을 보장하는 기술일 뿐만 아니라, non-tx-zone, 즉 도 2c의 하부에 나타낸 약간 그늘진 영역에서 호출 스택 수정들을 처리하는 것과도 관련이 있다. 트랜잭션 실행 모드가 성공적으로 완료하지 않은 경우에, 즉, 시도한 트랜잭션이 성공적으로 완료하지 않았을 때, 프로세서가 tbegin() 호출 지점에서 필요한 상태로 정확하게 롤백할 수도 있다는 것을 보장하기 때문에 프로세서가 추론적(speculative)이라고 라벨링되도록 (실제로 이것은 종래 기술에서 취해진 접근법이다) 트랜잭션 실행 모드에 있는 동안 단순히 호출 스택에 대해서 모든 수정을 가하는 것이 가능하기 때문에 여기에서는 이 후자의 측면이 특히 중요한 것이다. 그러나, 상대적으로 단순한 데이터 처리 명령들의 세트만이 도 2a의 예에 도시되어 있지만, 도 2c에 도시된 대응하는 호출 스택의 비교적 간단하고 한정된 진화가 초래되어, 원칙적으로 수행될 수 있는 데이터 처리 명령들의 수에는 제한이 없으며, 프로세서가 트랜잭션 실행 모드에 있는 동안 실제로 함수 호출이 더 많이 발생한다. 호출 스택에 대한 이러한 모든 수정이 단순히 추론적이라고 라벨링되는 경우, 호출 스택에 대한 추론적(트랜잭션 실행 모드에서) 및 비추론적(트랜잭션 실행 모드가 아닌) 수정의 사본이 유지되어야 하기 때문에, 호출 스택의 관리가 상당히 부담스러워질 수 있어, 잠재적으로 트랜잭션 실행 모드와 관련된 상당히 큰 기록 세트 크기(write-set size)가 초래될 수 있다. 이것은 데이터 저장 용량이 유한한 임의의 데이터 처리 시스템에서 중요할 수 있지만, 도 1에 나타낸 것과 같은 실시 예에서 특히 중요할 수 있는데, 제1 예에서는 호출 스택 데이터 구조가 그와 관련된 L1 캐시 내부에서의 프로세서에 의해 유지되고, 여기서 저장 용량은 물론 메인 메모리에서 사용 가능한 것보다 상당히 제한적이다. 따라서, 본 기술에 따르면, 프로세서가 트랜잭션 실행 모드에 있음에도 불구하고, 프로세서 회로가 유지하는 호출 스택 데이터 구조에 대한 수정 중 일부는 비추론적(non-speculative)이라고 라벨링된다. 이것은, 시도된 트랜잭션이 성공적으로 완료하지 않은 경우 프로세서가 실행 상태를 정확하게 롤백하는 능력에 영향을 미치지 않고, 캐시 내의 이들 엔트리가 메인 메모리로 안전하게 축출될 수 있는 결과를 갖는다. 또한, 도 1에 나타낸 실시 예에서 하나의 프로세서 코어는 메모리(22)에 저장된 커밋된(committed) 데이터 항목이 나타내는 것처럼 다른 프로세서 코어의 호출 스택을 볼 수 있지만, 그 프로세서 코어와 연관된 L1 캐시의 추론적 라벨링된 콘텐트를 볼 수 없는 경우에는 데이터 처리 시스템(10) 내에서 수행되는 트랜잭션의 정확한 원자성이 유지된다. 트랜잭션 실행이 성공적으로 완료되면, 전체 호출 스택은 비추론적(비트랜잭션)이라고 라벨링되도록 구성되며, 이들 캐싱된 데이터 항목은 메모리(22)로 자유롭게 축출될 수 있다는 점에 유념한다. 그러나, 상술한 바와 같이, 중단이 발생하면, 동적으로 또는 수동으로 트리거되어, 예를 들면, f4()에서 tabort() 호출로 인해, 트랜잭션에서 추론적으로 수정된 모든 아키텍처 상태 및 메모리(그것이 진행되는 한)는 tbegin()에 대한 호출 시에 존재하는 상태로 롤백되고, 그러한 시나리오에서, 스택을 가리키는 레지스터 26, 28의 세트 내의 임의의 레지스터는 이전 값으로 롤백될 것이고 스택 포인터는 도 2a 및 2c에 나타낸 지점(1)에서 취해진 스냅샷(snapshot)의 값으로 리셋될 것이다.
도 3은 도 2a에 나타낸 데이터 처리 명령들의 시퀀스를 실행하는 프로세서 회로에 의해 유지되는 호출 스택의 진화의 보다 명료한 표현을 나타낸다. 단계 A는 함수 fl()이 발생한 지점에서의 호출 스택을 나타내고, 여기서 스택 포인터 SP는 리턴 어드레스 ret_fl이 현재 스택 심도를 나타내는 것을 가리킨다. 그 후에 단계 B에서, f2() 함수가 발생하면, 리턴 어드레스 ret_f2가 스택에 푸시되고 스택 포인터는 현재의 스택 심도가 이 리턴 어드레스의 위치에 대응한다는 것을 나타낸다. 단계 C에서 tbegin() 호출이 발생하면, tbegin() 명령 자체가 발생하기 전에 스택 포인터가 호출 스택에 추가된 몇 가지 추가 구성 정보로 인해 양의 스택 성장 방향으로 약간 이동했다는 점에 유념한다. 이것은 트랜잭션 실행 모드에의 진입에 대응하는 SP 카피 레지스터(30 또는 32)에 장치가 저장하는 스택 심도(SP 값)이다. 그 후 프로세서(주로 이 태스크를 L1 캐시의 제어유닛에 위임하는 것에 의해)는 SP 카피 레지스터에 저장된 스택 포인터의 값과 호출 스택에 대한 추가 수정을 비교하여, 이들이 추론적이라고 라벨링되어야 하는지 비추론적이라고 라벨링되어야 하는지를 결정한다. 따라서, 도 3의 단계 D에서, ret_f2 명령이 발생할 때, 함수 f1()에 대한 리턴 어드레스 ret_fl를 나타내기 위해 현재 스택 포인터를 리턴하기 위한 호출 스택 콘텐트의 팝핑(popping)은 추론적이라고 라벨링된다. 그렇지만, 도 4a 내지 도 4c를 참조하여 이하에서 보다 상세히 설명되는 바와 같이, 호출 스택에 팝 수정을 추론적이라고 라벨링할 필요는 없을 수도 있는데, 그 이유는 이것이 단지 프로세서에 대한 추론적 판독을 나타내기 때문이며, 그리고 또 다른 프로세서가 도시된 명령들을 수행하는 프로세서 코어와 관련된 캐시의 콘텐트에 액세스하지 않도록 보장되는 한, 그 후에 캐시 내의 이 엔트리가 단지 추론적으로 판독되는 (또한 추론적으로 기록되지 않는) 것으로서 라벨링되는 한, 그것은 실제로 필요한 트랜잭션의 원자성을 위태롭게 하지 않으면서 안전하게 메인 메모리로 축출될 수 있다. 추론적 기록은 실제로 도 3의 단계 E에서 일어나는데, 여기서 f3() 함수는, 추론적 기록이 tbegin()에서 가져온 저장된 SP 스냅샷에 대해 양의 스택 성장 방향이 아닌 호출 스택의 상대적 스태킹 위치에서 일어나기 때문에, 발생한다. 따라서, 리턴 어드레스 ret_f3을 보유하는 캐시에서 이루어진 엔트리는 추론적이라고 라벨링된다. 대조적으로, 단계 F에서, f4()에 대한 호출이 발생하면, f4() 리턴 어드레스 ret_f4를 호출 스택에 푸시하는 데 필요한 수정이 SP 스냅샷에 대해 양의 스택 성장 방향이라고 식별되고, 따라서 이 리턴 어드레스 값을 보유하는 캐시에서 이루어진 엔트리가 비추론적이라고 라벨링된다. 그 후, 단계 G에서, tabort() 호출이 발생할 때, 캐시의 임의의 추론적 라벨링된 콘텐트는 폐기되고, 비추론적으로 라벨링된 콘텐트만이 유지되고(즉, 실제로 캐시 내의 임의의 추론적으로 라벨링된 캐시 라인은 유효하지 않은 것으로 표시된다), 따라서 호출 스택 데이터 구조는, 일부 캐시 내용이 중간에 축출되었을 수도 있는, 메인 메모리로부터와 같이, 잠재적으로 L1 캐시에 저장되고 추가로 메모리 계층에 저장된 콘텐츠의 조합으로부터, tbegin() 호출이 발생할 때 단계 C에서의 상태로 재구성된다.
도 4는 도 1에 나타낸 L1 캐시 34 또는 36가 구성될 수 있는 일 실시 예에서의 캐시(50)를 개략적으로 나타낸 것이다. L1 캐시(50)는 제어유닛 (52) 및 데이터가 저장될 수 있는 다수의 캐시 라인(54)을 구비한다. 제어유닛(52)은 캐시(50)의 전체 제어를 유지하고 캐시 라인(54)에 대한 갱신을 관리한다. 또한, 그것은 캐시(50)가 속하는 데이터 처리 시스템에서 발견되는 나머지 메모리 시스템의 나머지에 대해 정확한 코히어런시 제어를 유지한다. 따라서, 캐시(50)는 프로세서와 메모리 계층의 나머지 사이에 위치되며, 이 메모리 계층은 잠재적으로 도 1에 나타낸 것과 같은 메인 메모리(22)만을 구비하지만, 추가 캐시 레벨을 구비할 수도 있다. 캐시 라인(54)은 이 데이터 라인의 콘텐트에서 "수정된"(MO) 것으로 라벨링된 리턴 어드레스 ret_f2의 저장에 대응하는 예시적인 엔트리와 함께 도시되어, 이 데이터가 프로세서에 의해 수정되었고 궁극적으로 메모리 계층의 나머지에서, 특히 이 데이터 라인이 축출되면 메인 메모리(22)에서 갱신되어야 한다는 것을 나타낸다. ret_f2에 대한 이 데이터 라인은, 프로세서가 트랜잭션 실행 모드에 들어가기 전에 발생한 호출 스택에 대한 수정을 나타내기 때문에, 추론적으로 판독(SR)되거나 또는 추론적으로 기록(SW)되는 것으로 라벨링되지 않는다는 점에 유념한다.
도 4b는 도 4a에 나타낸 예시적인 캐시 라인 엔트리의 후속 진화를 나타내는 데, 여기서 리턴 어드레스 ret_f2에 의해 채워진 후에, 프로세서는 함수 호출 f3()을 만나서, 리턴 어드레스 ret_f3을 호출 스택에 푸시한다. 마침, 이 도시된 예에서는, 리턴 어드레스 ret_f2 및 ret_f3에 대한 메모리 어드레스들이 캐시(50)에 의해 동일한 캐시 라인에 저장될 정도로 충분히 유사하다. 따라서, 프로세서에 의해 ret_f3가 호출 스택에 푸시될 때, 캐시(50)의 캐시 제어유닛(52)은 이 리턴 어드레스 ret_f3로 하여금 캐시 라인의 현재 콘텐트(즉, 리턴 어드레스 ret_f2)를 축출시키게 한다. 콘텐츠 ret_f2를 갖는 이 캐시 라인은 추론적으로 기록(SW)되는 것으로 라벨링되지 않기 때문에, 그것은 메모리 계층으로, 예를 들어 먼저 L2 캐시로, 잠재적으로 더 나아가 메인 메모리(22)로 축출될 수도 있다. 리턴 어드레스 ret_f3은 이 캐시 라인을 채우고 유사하게 "MO" 상태 "수정된" 것으로 표시되지만, 프로세서가 현재 트랜잭션 실행 모드에 있고 이 수정이, 프로세서가 tbegin() 호출을 만났을 때의 지점에서 취해진 스택 포인터 SP의 스냅샷에 대해 양의 스택 성장 방향으로 발생하지 않기 때문에, 추론적으로 기록되는(SW) 것으로 더 라벨링된다. 그 후, 캐시 라인이 추론적으로 기록된 것으로 라벨링되기 때문에(프로세서가 명령 tabort()를 만나는 것에 의해) 트랜잭션이 중단되는 경우, 그 콘텐트는 무효화된다(상태 "I").
도 4b에 나타낸 캐시 라인 콘텐트의 진화를 도 3c에서 단계 D에 도달했을 때의 캐시 동작을 나타내는 도 4c에 나타낸 것과 비교하는데, 여기서 함수 f2()에 대한 리턴 어드레스 ret_f2가 호출 스택으로부터 팝핑되고(popped) 또한 호출 스택에 대한 이 수정이 tbegin()에서 SP의 스냅샷에 대해 양의 스택 성장 방향으로 발생하지 않으므로 (프로세서가 트랜잭션 실행 모드에 있기 때문에) 이것은 추론적 수정으로서 처리된다. 따라서, 이 캐시 라인의 콘텐트가 프로세서로 리턴될 때, 캐시 라인은 추론적으로 판독(SR)되는 것으로 라벨링된다. 그러나, 전술한 바와 같이, 캐시(50)의 제어 유닛(52)이, 캐시의 임의의 콘텐트(또는 적어도 어떤 수정된 콘텐트)가 데이터 처리 시스템 내의 또 다른 프로세서에 의해 판독될 수 없다는 것을 보장하는 한, 추론적으로 판독되는 것으로서 캐시 내의 캐시 라인을 라벨링하는 것은 원칙적으로 요구되지 않는다. 이것은 예를 들어, 요구된 시스템 - 와이드 메모리 코히어런시(the required system-wide memory coherency)를 강화하는 데에 있어서, 그러한 콘텐트가 현재 캐시(50) 내의 임의의 유효한 상태로 존재한다는 것을 부정함으로써 제어유닛(52)이 이 메모리 어드레스에 속하는 코히어런시 프로토콜의 일부로서 수신된 임의의 조사에 단순히 응답하는 구성에 의해 시행될 수도 있다.
도 5는 도 1에 나타낸 대응하는 구성요소가 구성될 수 있는 구성을 나타내는 프로세서 코어(60) 및 L1 캐시(62)를 개략적으로 나타낸 것이다. L1 캐시(62)의 캐시 컨트롤(64)은 프로세서 코어(60)로부터 다양한 정보를 수신하고 일부 정보를 프로세서 코어로 리턴하도록 구성된다. 특히, 캐시 컨트롤(64)은 그것이 현재 동작하고 있는 처리 모드의 프로세서 코어로부터 표시(indication)를 수신함으로써, 캐시 컨트롤(64)은 프로세서 코어가 현재 트랜잭션 실행 모드(TEM)에 있는지의 여부에 따라 LI 캐시(62)의 콘텐트의 갱신을 적절하게 관리할 수 있다. 이것은 연속 신호일 필요는 없지만, 프로세서 코어(60)는 실행 모드가 변경될 때를 간단히 캐시 제어유닛(64)에 표시할 수 있다. 프로세서 코어(60)는 또한 예를 들어, tabort() 호출이 프로세서 코어에 의해 발생할 때, 캐시 제어기(60)에 트랜잭션 중단을 표시하고, 예를 들어 추론적으로 기록되는(SW) 것으로 표시되는 L1 캐시(62)의 콘텐츠가 축출을 위해 (그것의 대응하는 메모리 어드레스에 근거하여) 선택될 때, 캐시 제어유닛(64)으로부터 중단 표시를 수신하도록 구성되는 중단 처리유닛(66)을 구비한다. 이것은 시도된 트랜잭션이 중단되어야 하는 상황인데, 그 이유는 메모리 계층의 나머지에 이 콘텐트를 축출하면, 데이터 처리 시스템의 또 다른 부분에 의해 판독되도록 콘텐트가 노출될 수 있고, 이로 인해 시도된 트랜잭션의 원자성이 잠재적으로 위태롭게 될 수 있기 때문이다. 대안적으로, 이 문제는, 캐시 엔트리가 메모리 계층의 또 다른 부분으로 축출될 때 추론적으로 기록된 것으로서 이 캐시 엔트리를 라벨링하는 것이 유지되는 것을 보장함으로써 또한 해결될 수 있지만, 이것은 추론적으로 기록되는 것으로서 표시된 캐시 엔트리의 축출이 시도될 때 트랜잭션을 중단시키는 비교적 간단한 메커니즘에 의해 방지될 수 있는 추가적인 구성상의 복잡성을 초래할 수 있다. 트랜잭션 중단의 원인이 무엇이든 간에, (프로세서 코어(60)가 실행하는 데이터 처리 명령 내에 프로그램된 전용 중단 처리 루틴일 수 있지만, 여기서는 전용 회로로서 구현되는) 중단 처리유닛은, 도 3의 단계 C에서, 즉, tbegin() 호출이 발생했을 때 레지스터(68)의 콘텐트를 그들의 상태로 롤백시킨다. 특히 본 기술과 관련하여, 이것은 현재 스택 포인터 레지스터(70)의 콘텐트를, tbegin()이 원래 발생되어 SP 카피 레지스터(72)에 저장될 때 취해진 스택 포인터의 스냅샷으로 대체하는 중단 처리유닛(66)을 구비한다.
도 6은 일 실시 예의 방법에서 취해지는 일련의 스텝을 개략적으로 나타낸 것이다. 이 플로우는 프로세서가 명령 시퀀스를 실행하고 있는 스텝 100에서 시작하는 것으로 간주될 수 있다. 스텝 102에서 트랜잭션 시작 명령(예를 들어, tbegin())이 발생했는지가 결정된다. 그렇지 않은 경우 플로우는 단순히 스텝 100으로 루프백(loop back)한다. 일단 그러한 트랜잭션 시작 명령이 발생하면 플로우는 스텝 104로 진행하여, 스택 포인터의 현재 값을 전용 스택 포인터 카피 레지스터에 저장하고 그 후에 스텝 106에서 프로세서는 트랜잭션 실행 모드로 진입한다. 단계 108에 이어서, 프로세서는 메모리 내의 공유된 데이터 항목 또는 구조에 대해 탐색하는 트랜잭션 액세스를 개시하는 것을 포함하는 명령 시퀀스 실행을 계속한다. 스텝 110에서는, 데이터 처리 명령들의 시퀀스를 계속하는 일부로서 호출 스택에 대한 수정이 요구되는지가 결정된다. 그렇지 않으면, 플로우는 단순히 스텝 108로 루프백한다. 그러나, 그러한 수정이 요구되는 경우, 스텝 112에서는, 호출 스택에 대한 이러한 수정이 전용 SP 카피 레지스터에 저장된 스택 포인터 카피에 의해 표시된 스택 심도에 대해 양의 성장 방향으로 발생해야 하는지가 결정된다. 이 수정이 이러한 양의 성장 방향인 경우, 플로우는 호출 스택 데이터 구조에 대한 수정이 행해지는 스텝 114로 진행하여, 캐시 내의 임의의 대응하는 엔트리 또는 엔트리들을 비추론적이라고 표시한다. 대안으로, 호출 스택 데이터 구조에 요구된 수정이 단계 112에서 스택 포인터 카피에 의해 표시된 스택 심도에 대해 양의 성장 방향이 아니라고 결정되면, 플로우는 스텝 116로 진행하여, 호출 스택 데이터 구조에 대한 수정이 이루어지고, 캐시 내의 임의의 대응하는 엔트리 또는 엔트리들이 추론적이라고 표시된다. 스텝 114 또는 스텝 116 후에, 플로우는 시도된 트랜잭션이 성공적으로 완료되었는지를 결정하는 스텝 118로 진행한다. 그렇지 않은 경우, 플로우는 트랜잭션 실행 모드에서 계속하여 실행하기 위해 스텝 108로 되돌아간다. 그러나, 시도된 트랜잭션이 성공적으로 완료되면, 플로우는 스텝 120으로 진행하여, 프로세서가 트랜잭션 실행 모드를 종료하고, 스텝 112에서는 임의의 추론적으로 라벨링된 캐시 콘텐트가 비추론적이라고 표시되도록 갱신된다. 그런 다음 플로우는 스텝 100으로 되돌아간다.
도 6에 예시된 일련의 스텝들은 시도된 트랜잭션이 중단될 때 취해진 스텝들을 포함하지 않으며, 이러한 스텝들은 도 7에 도시되어 있는데, 여기서 이들 스텝은 도 6에 예시된 것들과 병렬로 실행되는 것으로 간주될 수 있고, 프로세서는 트랜잭션 실행 모드에 있다는 점에 유념할 것이다. 트랜잭션 실행 모드에서 프로세서에 의한 명령들의 실행은 스텝 130으로 표시된다. 스텝 132에서는, 트랜잭션 중단이 발생했는지가 계속 체크된다. 그렇지 않으면, 플로우는 단순히 스텝 130으로 루프백한다. 그러나, 트랜잭션이 중단되면, 플로우는 스텝 134로 진행하여 추론적이라고 표시된 캐시 콘텐트가 무효화된다. 또한, 스텝 136에서, 프로세서가 그 트랜잭션 실행 모드로 진입했을 시점에서 취해진 저장된 스택 포인터의 복사본으로부터 현재 스택 포인터가 갱신(즉 롤백)되고, 스텝 138에서 프로세서의 상태를 트랜잭션 실행 모드로 진입했을 때의 상태로 되돌리는 데 필요한 (현재 스택 포인터 레지스터 이외의) 레지스터의 다른 콘텐트도 복구된다. 그 다음, 플로우는 프로세서가 트랜잭션 실행 모드로 유지되어 트랜잭션을 한 번 더 시도하기 위해 스텝 130로 되돌아간다.
본 명세서에서는 특정 실시 예가 설명되었지만, 본 발명은 이에 한정되지 않고, 본 발명의 범위 내에서 많은 수정 및 추가가 이루어질 수 있음을 이해할 것이다. 예를 들어, 이하의 종속항의 특징들의 다양한 조합이 본 발명의 범위를 벗어나지 않고 독립항의 특징들로 만들어질 수 있다.

Claims (13)

  1. 데이터 처리 명령들을 실행하도록 구성되며, 실행하는 데이터 처리 명령들에 의존하여 호출 스택 데이터 구조를 유지하도록 구성되고, 실행된 상기 데이터 처리 명령들이 추가 프로세서와 공유되는 저장된 데이터 항목들에 액세스할 때 트랜잭션 실행 모드에서 동작하도록 구성된 프로세서 회로와,
    호출 스택 데이터 구조에 대한 스택 심도 표시(stack depth indication)를 저장하도록 구성된 사전 트랜잭션 스택 포인터 저장회로를 구비하고, 상기 프로세서 회로는 트랜잭션 실행 모드에 진입하기 전에 상기 스택 심도 표시를 저장하도록 구성되며,
    상기 프로세서 회로는, 트랜잭션 실행 모드에서 동작할 때, 상기 스택 심도 표시에 대하여 호출 스택 데이터 구조에 대한 수정을 위한 상대적 스태킹 위치를 결정하고,
    상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향인 경우, 수정과 관련하여 수정이 비추론적이라는 표시를 저장하며,
    상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향이 아닌 경우, 수정과 관련하여 수정이 추론적이라는 표시를 저장하도록 구성되는 것을 특징으로 하는 장치.
  2. 제 1 항에 있어서,
    상기 사전 트랜잭션 스택 포인터 저장회로는 호출 스택 데이터 구조에 대한 처리회로에 의해 사용되는 스택 포인터의 복사본을 저장하도록 구성되는 것을 특징으로 하는 장치.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 사전 트랜잭션 스택 포인터 저장회로는 처리회로에 액세스 가능한 레지스터를 구비하는 것을 특징으로 하는 장치.
  4. 제 3 항에 있어서,
    상기 레지스터는 처리회로에 의해 실행되는 데이터 처리 명령들에 액세스할 수 없도록 구성되는 것을 특징으로 하는 장치.
  5. 제 1 항 또는 제 2 항에 있어서,
    상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향이 아니고, 수정이 호출 스택 데이터 구조에의 푸시(push)인 경우, 푸시에 의해 호출 스택 데이터 구조에 푸시된 데이터 항목이 추론적으로 기록되는 것으로 표시되는 것을 특징으로 하는 장치.
  6. 제 1 항 또는 제 2 항에 있어서,
    상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향이 아니고, 수정이 호출 스택 데이터 구조로부터의 팝(pop)인 경우, 팝에 의해 호출 스택 데이터 구조로부터 팝핑된(popped) 데이터 항목이 추론적으로 판독되는 것으로 표시되는 것을 특징으로 하는 장치.
  7. 제 1 항 또는 제 2 항에 있어서,
    데이터 처리 명령들을 실행할 때 상기 프로세서 회로에 의해 액세스된 데이터 항목들의 로컬 복사본을 메모리에 저장하도록 구성된 저장회로를 더 구비하고, 상기 프로세서 회로는 상기 저장회로에서 호출 스택 데이터 구조를 유지하도록 구성되는 것을 특징으로 하는 장치.
  8. 제 7 항에 있어서,
    상기 저장회로는, 코히어런시 제어유닛을 구비하고, 상기 코히어런시 제어유닛은 비추론적이라고 표시된 저장회로의 콘텐트가 메모리에 축출되도록 허용하고, 저장회로의 콘텐트가 축출을 위해 선택되며 추론적이라고 표시되면 에러 조건을 생성하도록 구성되는 것을 특징으로 하는 장치.
  9. 제 8 항에 있어서,
    상기 코히어런시 제어유닛은, 처리회로가 트랜잭션 실행 모드를 종료하고 트랜잭션 실행 모드에서 실행된 데이터 처리 명령들이 성공적으로 데이터 처리 동작들을 완료했을 때, 추론적이라고 표시된 저장회로의 콘텐트를 비추론적이라고 표시된 저장회로의 콘텐트로 변경하도록 구성되는 것을 특징으로 하는 장치.
  10. 제 8 항에 있어서,
    상기 코히어런시 제어유닛은 상기 추가 프로세서 회로로부터 추론적이라고 표시된 저장회로의 콘텐트를 숨기도록 구성되는 것을 특징으로 하는 장치.
  11. 제 1 항 또는 제 2 항에 있어서,
    중단 처리회로를 더 구비하고, 상기 중단 처리회로는 처리회로가 트랜잭션 실행 모드에서 동작하고 있을 때, 계류 중인 트랜잭션이 실패했다는 표시에 응답하여 롤백 절차를 수행하도록 구성되고,
    상기 롤백 절차는 추론적이라고 표시된 수정들을 폐기하고 저장된 스택 심도 표시를 이용하여 현재 스택 포인터를 리셋하는 것을 포함하는 것을 특징으로 하는 장치.
  12. 데이터 처리 명령들을 실행하는 수단과,
    실행된 데이터 처리 명령들에 의존해서 호출 스택 데이터 구조를 유지하는 수단과, 상기 데이터 처리 명령들을 실행하는 수단은, 실행된 상기 데이터 처리 명령들이 데이터 처리 명령들을 실행하는 추가 수단과 공유되는 저장된 항목들에 액세스할 때 트랜잭션 실행 모드에서 동작하도록 구성되고,
    호출 스택 데이터 구조에 대한 스택 심도 표시를 저장하는 수단과, 상기 스택 심도 표시는 상기 데이터 처리 명령들을 실행하는 수단이 트랜잭션 실행 모드에 진입하기 전에 저장되며,
    트랜잭션 실행 모드에서 동작하고 있을 때, 상기 스택 심도 표시에 대하여 호출 스택 데이터 구조에 대한 수정을 위한 상대적 스태킹 위치를 결정하는 수단과,
    수정과 관련된 표시를 저장하는 수단을 구비하고, 상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향인 경우, 상기 표시는 수정이 비추론적이라고 나타내고,
    상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향이 아닌 경우, 상기 표시는 수정이 추론적이라고 나타내는 것을 특징으로 하는 장치.
  13. 프로세서 장치에서의 데이터 처리 방법으로서,
    데이터 처리 명령들을 실행하는 단계와,
    실행된 데이터 처리 명령들에 의존해서 호출 스택 데이터 구조를 유지하는 단계와,
    실행된 데이터 처리 명령들이 추가 프로세서 장치와 공유되는 저장된 데이터 항목들에 대한 액세스를 탐색할 때 트랜잭션 실행 모드에 진입하는 단계와,
    트랜잭션 실행 모드에 진입하기 전에 저장되는 스택 심도 표시를 저장하는 단계와,
    트랜잭션 실행 모드에서 동작할 때, 상기 스택 심도 표시에 대하여 호출 스택 데이터 구조에 대한 수정을 위한 상대적 스태킹 위치를 결정하는 단계와,
    상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향인 경우, 수정과 관련하여 수정이 비추론적이라는 표시를 저장하고,
    상기 상대적 스태킹 위치가 상기 스택 심도 표시에 의해 표시된 위치에 대하여 양의 스택 성장 방향이 아닌 경우, 수정과 관련하여 수정이 추론적이라는 표시를 저장하는 단계를 포함하는 것을 특징으로 하는 데이터 처리 방법.
KR1020177003061A 2014-07-15 2015-06-09 트랜잭션 데이터 처리 실행 모드에 대한 호출 스택 유지 KR102284957B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1412534.8 2014-07-15
GB1412534.8A GB2528270A (en) 2014-07-15 2014-07-15 Call stack maintenance for a transactional data processing execution mode
PCT/GB2015/051675 WO2016009168A1 (en) 2014-07-15 2015-06-09 Call stack maintenance for a transactional data processing execution mode

Publications (2)

Publication Number Publication Date
KR20170031708A KR20170031708A (ko) 2017-03-21
KR102284957B1 true KR102284957B1 (ko) 2021-08-04

Family

ID=51454144

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177003061A KR102284957B1 (ko) 2014-07-15 2015-06-09 트랜잭션 데이터 처리 실행 모드에 대한 호출 스택 유지

Country Status (8)

Country Link
US (1) US10002020B2 (ko)
EP (1) EP3170075B1 (ko)
JP (1) JP6568575B2 (ko)
KR (1) KR102284957B1 (ko)
CN (1) CN106663026B (ko)
GB (1) GB2528270A (ko)
IL (1) IL249697B (ko)
WO (1) WO2016009168A1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2554096B (en) * 2016-09-20 2019-03-20 Advanced Risc Mach Ltd Handling of inter-element address hazards for vector instructions
CN107291480B (zh) * 2017-08-15 2020-12-15 中国农业银行股份有限公司 一种函数调用方法及装置
US10572259B2 (en) * 2018-01-22 2020-02-25 Arm Limited Hints in a data processing apparatus
US10698724B2 (en) 2018-04-10 2020-06-30 Osisoft, Llc Managing shared resources in a distributed computing system
US11231932B2 (en) * 2019-03-05 2022-01-25 Arm Limited Transactional recovery storage for branch history and return addresses to partially or fully restore the return stack and branch history register on transaction aborts
US11334495B2 (en) * 2019-08-23 2022-05-17 Arm Limited Cache eviction
US11687519B2 (en) 2021-08-11 2023-06-27 T-Mobile Usa, Inc. Ensuring availability and integrity of a database across geographical regions

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080288819A1 (en) 2007-05-14 2008-11-20 International Business Machines Corporation Computing System with Transactional Memory Using Millicode Assists
US20100023703A1 (en) 2008-07-28 2010-01-28 Christie David S Hardware transactional memory support for protected and unprotected shared-memory accesses in a speculative section
US20110307689A1 (en) 2010-06-11 2011-12-15 Jaewoong Chung Processor support for hardware transactional memory
US20120304172A1 (en) 2011-04-29 2012-11-29 Bernd Greifeneder Method and System for Transaction Controlled Sampling of Distributed Hetereogeneous Transactions without Source Code Modifications
US20130151791A1 (en) 2011-12-13 2013-06-13 Advanced Micro Devices, Inc. Transactional memory conflict management

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7552302B1 (en) * 2004-09-14 2009-06-23 Azul Systems, Inc. Ordering operation
US7472261B2 (en) * 2005-11-08 2008-12-30 International Business Machines Corporation Method for performing externally assisted calls in a heterogeneous processing complex
US20080016325A1 (en) * 2006-07-12 2008-01-17 Laudon James P Using windowed register file to checkpoint register state
US7860930B2 (en) * 2006-12-19 2010-12-28 International Business Machines Corporation Communication between host systems using a transaction protocol and shared memories

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080288819A1 (en) 2007-05-14 2008-11-20 International Business Machines Corporation Computing System with Transactional Memory Using Millicode Assists
US20100023703A1 (en) 2008-07-28 2010-01-28 Christie David S Hardware transactional memory support for protected and unprotected shared-memory accesses in a speculative section
US20110307689A1 (en) 2010-06-11 2011-12-15 Jaewoong Chung Processor support for hardware transactional memory
US20120304172A1 (en) 2011-04-29 2012-11-29 Bernd Greifeneder Method and System for Transaction Controlled Sampling of Distributed Hetereogeneous Transactions without Source Code Modifications
US20130151791A1 (en) 2011-12-13 2013-06-13 Advanced Micro Devices, Inc. Transactional memory conflict management

Also Published As

Publication number Publication date
GB201412534D0 (en) 2014-08-27
US20170161095A1 (en) 2017-06-08
CN106663026A (zh) 2017-05-10
GB2528270A (en) 2016-01-20
CN106663026B (zh) 2021-01-12
KR20170031708A (ko) 2017-03-21
JP2017520857A (ja) 2017-07-27
US10002020B2 (en) 2018-06-19
WO2016009168A1 (en) 2016-01-21
EP3170075B1 (en) 2021-01-13
EP3170075A1 (en) 2017-05-24
IL249697B (en) 2020-01-30
JP6568575B2 (ja) 2019-08-28
IL249697A0 (en) 2017-02-28

Similar Documents

Publication Publication Date Title
KR102284957B1 (ko) 트랜잭션 데이터 처리 실행 모드에 대한 호출 스택 유지
US20180011748A1 (en) Post-retire scheme for tracking tentative accesses during transactional execution
US8949583B1 (en) Concurrent atomic execution
CN107851037B (zh) 在使用日志和未锁定的非易失存储器的共享存储器中的硬件事务存储的一致性协议
US10853071B2 (en) Simulation of exclusive instructions
US11106795B2 (en) Method and apparatus for updating shared data in a multi-core processor environment
US11157407B2 (en) Implementing atomic primitives using cache line locking
EP3516502B1 (en) Handling of inter-element address hazards for vector instructions
JP2017520857A5 (ko)
CN108351935B (zh) 用于控制有界指针的使用的设备及方法
EP2641171B1 (en) Preventing unintended loss of transactional data in hardware transactional memory systems
US11119925B2 (en) Apparatus and method for managing capability metadata
JP2019503009A (ja) ベクトルアトミックメモリ更新命令
TWI801603B (zh) 處理獨佔式載入指令的資料處理設備、方法及電腦程式
US9916189B2 (en) Concurrently executing critical sections in program code in a processor
US20150205721A1 (en) Handling Reads Following Transactional Writes during Transactions in a Computing Device

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant