KR101291016B1 - 사용자 핸들러 등록 장치, 프로세서, 시스템 및 방법 - Google Patents
사용자 핸들러 등록 장치, 프로세서, 시스템 및 방법 Download PDFInfo
- Publication number
- KR101291016B1 KR101291016B1 KR1020117007724A KR20117007724A KR101291016B1 KR 101291016 B1 KR101291016 B1 KR 101291016B1 KR 1020117007724 A KR1020117007724 A KR 1020117007724A KR 20117007724 A KR20117007724 A KR 20117007724A KR 101291016 B1 KR101291016 B1 KR 101291016B1
- Authority
- KR
- South Korea
- Prior art keywords
- handler
- transaction
- execution
- event
- user
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
- G06F9/528—Mutual exclusion algorithms by using speculative mechanisms
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
본 명세서는 트랜잭션 메모리(transactional memory)를 위해 하드웨어 내에 사용자-핸들러를 등록하는 방법 및 장치에 관해 개시한다. 사용자-액세스 가능 레지스터는 트랜잭션 핸들러에 대한 참조를 보유한다. 이벤트 레지스터는 또한 핸들러 이벤트를 지정하기 위해 제공될 수 있고, 이것은 사용자-레벨 소프트웨어, 특권 소프트웨어, 또는 하드웨어의 활용을 완료할 수 있게 한다. 이벤트가 검출되면, 트랜잭션 핸들러로의 실행의 벡터화는 사용자-액세스 가능 레지스터 내에 보유된 트랜잭션 핸들러에 대한 참조에 기초하여 이루어진다. 트랜잭션 핸들러가 이벤트를 처리한 후, 실행은 정규 흐름으로 되돌아간다.
Description
본 발명은 프로세서 실행의 분야에 관한 것으로, 특히, 인스트럭션의 그룹을 실행하는 것에 관한 것이다.
관련 출원에 대한 상호 참조
본 출원은 본 출원과 동일 날짜로 제출된 이하의 특허 출원, 즉 "Extending Cache Coherency Protocols to Support Locally Buffered Data"라는 제목으로 Gad Sheaffer 등에 의해 2008년 12월 30일에 출원된 미국 특허 출원 번호 제 12/346,543 호(대리인 서류 제출 번호 제 P29132 호)와, "Memory Model for Hardware Attributes Within a Transactional Memory System"라는 제목으로 Gad Sheaffer 등에 의해 2008년 12월 30일에 출원된 미국 특허 출원 번호 제 12/346,539 호(대리인 서류 제출 번호 제 P29131 호)와, "Read and Write Monitoring Attributes in Transactional Memory(TM) Systems"라는 제목으로 Gad Sheaffer 등에 의해 2008년 12월 30일에 출원된 미국 특허 출원 번호 제 12/346,530 호(대리인 서류 제출 번호 제 P29130 호)와, "Metaphysical Address Space for Holding Lossy Meta-data in Hardware"라는 제목으로 Gad Sheaffer 등에 의해 2008년 12월 30일에 출원된 미국 특허 출원 번호 제 12/346,500 호(대리인 서류 제출 번호 제 P29128 호)와 관련된다.
배경 기술
반도체 처리 공정 및 로직 설계의 발전은 집적 회로 장치 상에 존재할 수 있는 로직의 양의 증가를 가능하게 하였다. 결과적으로, 컴퓨터 시스템 구성은 시스템 내의 단일 또는 다수의 집적 회로로부터 개별적인 집적 회로 상에 존재하는 다수의 코어 및 다수의 로직 프로세서까지 진화되었다. 프로세서 또는 집적 회로는 전형적으로 단일 프로세서 다이(processor die)를 포함하고, 여기에서 프로세서 다이는 임의의 개수의 코어 또는 로직 프로세서를 포함할 수 있다.
집적 회로 상에 코어 및 로직 프로세서의 개수가 계속 증가하는 것은 더 많은 개수의 소프트웨어 스레드가 동시에 실행될 수 있게 한다. 그러나 동시에 실행될 수 있는 소프트웨어 스레드의 개수가 증가하는 것은 소프트웨어 스레드 사이에 공유된 데이터의 동기화에 관련된 문제를 발생시킨다. 다수의 코어 또는 다수의 로직 프로세서 시스템 내의 공유 데이터를 액세스하는 것에 대한 하나의 통상적인 해결책은 공유 데이터에 대한 다수의 액세스에 걸친 상호 배제(mutual exclusion)를 보장하는 잠금 장치(locks)를 이용하는 것을 포함한다. 그러나 다수의 소프트웨어 스레드를 실행하는 능력이 계속 증가하는 것은 허위 경쟁(false contention) 및 실행의 직렬화(serialization)를 초래할 가능성이 있다.
예를 들어, 공유 데이터를 보유하는 해시 테이블(hash table)을 고려한다. 프로그래머는 잠금 시스템을 사용하여 전체 해시 테이블을 잠금 처리하고, 하나의 스레드(thread)가 전체 해시 테이블을 액세스하도록 허용할 수 있다. 그러나 잠금이 해제될 때까지는 다른 스레드가 해시 테이블 내의 어떠한 엔트리도 액세스할 수 없기 때문에, 다른 스레드의 처리량(throughput) 및 성능에 역효과를 가져올 가능성이 있다. 이와 다르게, 해시 테이블 내의 각각의 엔트리가 잠겨있을 수도 있다. 어느 쪽이거나, 이 단순한 예시를 크게 확장 가능한 프로그램으로 추정하면, 잠금 경쟁의 복잡화, 직렬화, 미세 구역 동기화 및 교착 상태(deadlock)의 회피는 프로그래머에게 정말 귀찮은 과제가 될 것임이 분명하다.
다른 최근의 데이터 동기화 기법은 트랜잭션 메모리(transactional memory : TM)의 사용을 포함한다. 때때로 트랜잭션 실행은 복수의 마이크로-연산, 연산 또는 인스트럭션의 그룹을 실행하는 것을 포함한다. 상기 예시에서, 모든 스레드는 해시 테이블 내에서 실행되고, 그 메모리 액세스는 모니터링/트래킹된다. 모든 스레드가 동일한 엔트리를 액세스/변경한다면, 데이터 유효성을 보장하기 위해 데이터 충돌 해결이 실행될 수 있다. 한 가지 유형의 트랜잭션 실행은 소프트웨어 트랜잭션 메모리(Software Transactional Memory : STM)를 포함하고, 여기에서 메모리 액세스의 트래킹, 충돌 해결, 작업 중지 및 다른 트랜잭션 작업은 때때로 하드웨어의 지원없이 소프트웨어 내에서 실행된다. 다른 유형의 트랜잭션 실행은 하드웨어 트랜잭션 메모리(Hardware Transactional Memory : HTM) 시스템을 포함하고, 여기에서 하드웨어는 액세스 트래킹, 충돌 해결 및 다른 트랜잭션 작업을 지원하기 위해 포함된다.
트랜잭션 내의 몇몇 연산은 트랜잭션에 의해 판독 또는 생성된 데이터에 기초한다. 이 데이터에 대한 액세스를 모니터링하는 이러한 데이터 또는 정보가 손상(compromise)되었다면 예측 불가능한 부작용이 발생할 수 있다. 예를 들어, 트랜잭션이 브랜치 목적지를 소정의 변수 X로 기록했다고 가정한다. 트랜잭션 메모리의 시맨틱(semantics)에 기인하여, X의 값은 변경될 수 있다(예를 들면 X는 버퍼링된 방식으로 기록되었으나 버퍼가 손실됨). 변경 후, 트랜잭션은 어드레스 X로부터 판독된 새로운 무효 값에 기초하여 분기화(branch)를 시도하면, 결과적으로 예측되지 않은 결과가 발생한다. 폴링(polling) 등과 같은 순수한 동기식 소프트웨어(OS 또는 VMM) 방법에 의해 처리되거나, 트랜잭션의 끝부분에 있는 상술된 바와 같은 이벤트는, 예측되지 않은 결과가 발생하기 전에 변경 또는 충돌을 처리하기에 당장 충분하지는 않을 것이다.
본 발명은 예시의 방법으로 도시되었고 첨부된 도면으로 한정하도록 의도된 것이 아니다.
도 1은 동시에 다수의 소프트웨어 스레드를 실행할 수 있는 다수의 처리 요소를 포함하는 프로세서의 일실시예를 도시하는 도면.
도 2는 핸들러 이벤트에 응답하여 핸들러에 대한 제어 전송을 지원하는 프로세서의 구조에 대한 일실시예를 도시하는 도면.
도 3은 특권 레벨 소프트웨어 개입없이 트랜잭션 핸들러로 실행을 벡터화하는 방법에 대한 일실시예를 도시하는 흐름도.
도 4는 소프트웨어 핸들러 활용 하드웨어에 대한 제어 흐름을 전송하는 방법의 다른 실시예를 도시하는 흐름도.
도 2는 핸들러 이벤트에 응답하여 핸들러에 대한 제어 전송을 지원하는 프로세서의 구조에 대한 일실시예를 도시하는 도면.
도 3은 특권 레벨 소프트웨어 개입없이 트랜잭션 핸들러로 실행을 벡터화하는 방법에 대한 일실시예를 도시하는 흐름도.
도 4는 소프트웨어 핸들러 활용 하드웨어에 대한 제어 흐름을 전송하는 방법의 다른 실시예를 도시하는 흐름도.
이하의 설명에서는, 본 발명에 대한 온전한 이해를 제공하기 위해서 트랜잭션 실행을 위한 특정 하드웨어 구조, 액세스 모니터의 특정 유형 및 구현, 특정 캐시 구현, 특정 유형의 캐시 일관성(coherency) 모델, 특정 데이터 입도(granularities) 및 특정 유형의 메모리 액세스 및 위치 등의 예시 등과 같은 다수의 특정 세부 사항이 제시되어 있다. 그러나 당업자라면 본 발명의 실행을 위해 이러한 특정 세부 사항이 반드시 사용되어야 한다는 의미가 아니라는 것이 명확할 것이다. 다른 예시에서, 본 발명을 불필요할 정도로 불명확하게 만들지 않도록 하기 위해서 공지된 구성 요소 또는 방법, 소프트웨어 내에서 트랜잭션의 코딩(coding), 트랜잭션의 구획(demarcation), 특정 및 대안적인 멀티-코어 및 멀티-스레드 프로세서 아키텍처, 특정 컴파일(compiler) 방법/구현 및 마이크로프로세서의 특정 연산 세부 사항을 상세하게 설명하지는 않았다.
본 명세서에 설명된 방법 및 장치는 핸들러에 대한 최적화된 제어 흐름 전송을 지원하기 위해 하드웨어 내에 핸들러를 등록하기 위한 것이다. 보다 명확히 말하자면, 핸들러의 등록은 하드웨어 트랜잭션 메모리 시스템을 참조하여 주로 설명된다. 그러나 핸들러를 등록하는 방법 및 장치는, 핸들러의 개입을 요구하는 임의의 하드웨어 실행을 위해 구현되도록 한정되지는 않는다.
도 1을 참조하면, 동시에 다수의 스레드를 실행할 수 있는 프로세서에 대한 일실시예가 도시되어 있다. 프로세서(100)는 하드웨어 트랜잭션 실행을 위한 하드웨어 지원을 포함할 수 있다는 것을 주지하라. 하드웨어 트랜잭션 실행과 함께하거나 그와는 별도로, 프로세서(100)는 소프트웨어 트랜잭션 메모리(STM)의 하드웨어 가속을 위한 하드웨어 지원, STM의 개별 실행 또는 하이브리드 트랜잭션 메모리(TM) 시스템 등과 같은 상기의 조합을 제공할 수 있다. 프로세서(100)는 마이크로-프로세서, 임베디드(embedded) 프로세서, 디지털 신호 프로세서(digital signal processor : DSP), 네트워크 프로세서 또는 코드를 실행하는 다른 장치 등과 같은 임의의 프로세서를 포함한다. 프로세서(100)는 도시된 바와 같이 복수의 처리 요소를 포함한다.
일실시예에서, 처리 요소는 스레드 유닛, 프로세스 유닛, 환경(context), 로직 프로세서, 하드웨어 스레드, 코어 및/또는 실행 상태 또는 아키텍처 상태 등과 같은 프로세서의 상태를 유지할 수 있는 임의의 다른 요소를 지칭한다. 다시 말해서, 처리 요소는 일실시예에서, 소프트웨어 스레드, 운영 시스템, 애플리케이션 또는 다른 코드 등과 같이 코드와 독립적으로 연관될 수 있는 임의의 하드웨어를 지칭한다. 물리적 프로세서는 전형적으로 코어 또는 하드웨어 스레드 등과 같은 임의의 개수의 다른 처리 요소를 잠재적으로 포함하는 집적 회로를 지칭한다.
코어는 때때로 독립 아키텍처 상태를 유지할 수 있는 집적 회로 상에 위치된 로직을 지칭하고, 여기에서 각각의 독립적으로 유지된 아키텍처 상태는 적어도 몇 개의 전용 실행 자원과 연관된다. 코어와는 대조적으로, 하드웨어 스레드는 전형적으로 독립 아키텍처 상태를 유지할 수 있는 집적 회로 상에 위치된 임의의 로직을 지칭하고, 여기에서 각각의 독립적으로 유지된 아키텍처 상태는 실행 자원에 대한 액세스를 공유한다. 확인되는 바와 같이, 소정의 자원이 공유되고 다른 자원이 아키텍처 상태를 위해 전용으로 제공될 때, 하드웨어 스레드의 전문어(nomenclature) 및 코어 사이의 라인이 중첩된다. 그러나 종종 코어 및 하드웨어 스레드는 운영 시스템에 의해 개별적인 로직 프로세서로 간주되고, 여기에서 운영 시스템은 각 로직 프로세서 상에 개별적으로 연산을 스케줄링할 수 있다.
도 1에 도시된 바와 같은 물리적 프로세서(100)는 2개의 코어, 즉 코어(101) 및 코어(102)를 포함하고, 이들은 상위 레벨 캐시(110)에 대한 액세스를 공유한다. 프로세서(100)는 비대칭 코어, 즉 상이한 구성, 기능 유닛 및/또는 로직을 갖는 코어를 포함할 수 있지만, 대칭 코어가 도시되어 있다. 결과적으로, 코어(101)와 동일하게 도시되어 있는 코어(102)는 설명의 반복을 피하기 위해서 세부적으로 설명하지 않을 것이다. 추가하여, 코어(101)는 2개의 하드웨어 스레드(101a, 101b)를 포함하는 한편, 코어(102)는 2개의 하드웨어 스레드(102a, 102b)를 포함한다. 그러므로 운영 시스템 등과 같은 소프트웨어 개체는 잠재적으로 프로세서(100)를 4개의 개별 프로세서, 즉 4개의 로직 프로세서로서 간주하거나 동시에 4개의 소프트웨어 스레드를 실행할 수 있는 처리 요소로서 간주한다.
여기에서 제 1 스레드는 아키텍처 상태 레지스터(101a)와 연관되고, 제 2 스레드는 아키텍처 상태 레지스터(101b)와 연관되며, 제 3 스레드는 아키텍처 상태 레지스터(102a)와 연관되고, 제 4 스레드는 아키텍처 상태 레지스터(102b)와 연관된다. 도시된 바와 같이 아키텍처 상태 레지스터(101a)는 아키텍처 상태 레지스터(101b) 내에 복제되므로, 개별적인 아키텍처 상태/환경은 로직 프로세서(101a) 및 로직 프로세서(101b)를 위해 저장될 수 있다. 리네임 할당 로직(rename allocater logic)(130) 내의 인스트럭션 포인터 및 리네이밍 로직(renaming logic) 등과 같은 다른 더 작은 자원은 또한 스레드(101a, 101b)를 위해 복제될 수 있다. 재순서(reorder)/퇴거(retirement) 유닛(135) 내의 재순서 버퍼, ILTB(120), 로딩/저장 버퍼 및 큐(queues) 등과 같은 몇몇 자원은 분할을 통해 공유될 수 있다. 범용 내부 레지스터, 페이지-테이블 베이스(page-table base) 레지스터, 하위 레벨 데이터-캐시 및 데이터-TLB(115), 실행 유닛(들)(140) 및 비순차(out-of-order) 유닛(135)의 부분 등과 같은 다른 자원은 완전히 공유될 가능성이 있다.
프로세서(100)는 때때로 다른 자원을 포함하고, 이 다른 자원은 완전히 공유되거나, 분할을 통해 공유되거나 처리 요소 전용으로만 제공될 수 있다. 도 1에서, 프로세서의 도시된 기능 유닛/자원을 갖는 순수하게 예시적인 프로세서에 대한 일실시예가 도시되어 있다. 프로세서는 도시되지 않은 임의의 다른 알려진 기능 유닛, 로직 또는 펌웨어를 포함할 뿐만 아니라 이러한 기능 유닛의 일부를 포함하거나 누락할 수 있다는 것을 주지하라.
도시된 바와 같이, 프로세서(100)는 시스템 메모리(175), 칩셋(chipset), 노스브리지(northbridge) 또는 다른 집적 회로 등과 같이 프로세서(100) 외부의 장치와 통신하는 버스 인터페이스 모듈(105)을 포함한다. 메모리(175)는 프로세서(100) 전용으로 제공되거나 시스템 내의 다른 장치와 공유될 수 있다. 상위-레벨 또는 추가 진행(further-out) 캐시(110)는 상위-레벨 캐시(110)로부터 최근에 인출(fetch)된 엘리먼트를 캐싱한다. 상위-레벨 또는 추가 진행은 실행 유닛(들)으로부터 증가하거나 더 추가하여 진행하는 캐시 레벨을 지칭한다는 것을 주지하라. 일실시예에서, 상위-레벨 캐시(110)는 제 2-레벨 데이터 캐시이다. 그러나 상위 레벨 캐시(110)는 인스트럭션 캐시와 연관되거나 인스트럭션 캐시를 포함할 수 있으므로 그것으로 한정되지는 않는다. 그 대신에 트레이스(trace) 캐시, 즉 소정 유형의 인스트럭션 캐시는 최근에 디코딩된 트레이스를 저장하기 위해 디코더(decoder)(125) 뒤에 결합될 수 있다. 모듈(120)은 또한 실행/획득될 브랜치를 예측하는 브랜치 타겟 버퍼 및 인스트럭션을 위한 어드레스 변환 엔트리를 저장하는 인스트럭션-변환 버퍼(I-TLB)를 포함할 가능성이 있다.
디코드 모듈(Decode module)(125)은 인출(fetch) 유닛(120)에 결합되어 인출된 엘리먼트를 디코딩한다. 일실시예에서, 프로세서(100)는 인스트럭션 세트 아키텍처(Instruction Set Architecture : ISA)와 연관되고, 이것은 프로세서(100)에서 실행 가능한 인스트럭션을 정의/지정한다. 여기에서 때때로 ISA에 의해 인식된 머신 코드 인스트럭션은 연산 코드(opcode)로 지칭되는 인스트럭션의 부분을 포함하고, 이 연산 코드는 실행될 인스트럭션 또는 연산을 참조/지정한다.
하나의 예시에서, 할당기 및 리네이머 블록(130)은 인스트럭션 처리 결과를 저장하는 레지스터 파일 등과 같은 자원을 보존하는 할당기를 포함한다. 그러나 스레드(101a, 101b)는 비순차 실행을 가능하게 할 수 있고, 여기에서 할당기 및 리네이머 블록(130)은 또한 인스트럭션 결과를 트래킹하는 재순서 버퍼 등과 같은 다른 자원을 보존한다. 유닛(130)은 또한 프로세서(100) 내부의 다른 레지스터에 대한 프로그램/인스트럭션 참조 레지스터를 리네이밍하는 레지스터 리네이머를 포함할 수 있다. 재순서/퇴거 유닛(135)은 비순차 실행 및 비순차적으로 실행된 인스트럭션의 추후 순차 퇴거(in-order retirement)를 지원하기 위해 상술된 재순서 버퍼, 로드 버퍼 및 저장 버퍼 등과 같은 구성 요소를 포함한다.
일실시예에서, 스케쥴러 및 실행 유닛(들) 블록(140)은, 실행 유닛 상의 인스트럭션/연산을 스케쥴링하기 위한 스케쥴러 유닛을 포함한다. 예를 들면, 부동 소수점(floating point) 인스트럭션은 이용 가능한 부동점 실행 유닛을 구비한 실행 유닛의 포트(port)에서 스케쥴링된다. 실행 유닛과 연관된 레지스터 파일은 또한 정보 인스트럭션 처리 결과를 저장하기 위해 포함된다. 예시적인 실행 유닛은 부동점 실행 유닛, 정수(integer) 실행 유닛, 점프 실행 유닛, 로드 실행 유닛, 저장 실행 유닛 및 다른 공지된 실행 유닛을 포함한다.
하위 레벨 데이터 캐시 및 데이터 변환 버퍼(D-TLB)(150)는 실행 유닛(들)(140)에 결합된다. 데이터 캐시는 데이터 피연산자(operands) 등과 같이 메모리 일관성 상태에 보유될 가능성이 있는 요소에서 최근에 이루어진 사용/연산을 저장한다. D-TLB는 물리적 어드레스 변환에 대한 최근의 가상/선형 연산을 저장한다. 특정한 예시로서, 프로세서는 물리적 메모리를 복수의 가상 페이지로 분할하는 페이지 테이블 구조를 포함할 수 있다.
일실시예에서, 프로세서(100)는 하드웨어 트랜잭션 실행, 소프트웨어 트랜잭션 실행 또는 이들의 조합 또는 혼합(hybrid) 형태를 실행할 수 있다. 코드의 중요 또는 원자(atomic) 부분으로도 지칭될 수 있는 코드의 트랜잭션은, 인스트럭션, 연산 또는 원자 그룹으로서 실행될 마이크로-연산의 그룹화를 포함한다. 예를 들면, 인스트럭션 또는 연산은 트랜잭션 또는 중요 구분을 분리하기 위해 이용될 수 있다. 일실시예에서, 이하에 보다 상세하게 설명되는 바와 같이, 이러한 인스트럭션은 상술된 디코더 등과 같이 프로세서(100)의 하드웨어에 의해 인식 가능한 인스트럭션 세트 아키텍처(ISA) 등과 같은 인스트럭션의 세트의 일부분이다. 때때로 이러한 인스트럭션은 고급 언어로부터 하드웨어 인식 가능 어셈블리 언어로 컴파일링되면, 연산 코드(opcodes) 또는 디코더가 디코드 단계 동안에 인식하는 인스트럭션의 다른 부분을 포함한다.
전형적으로, 트랜잭션의 실행 동안에는 트랜잭션이 실행될 때까지 메모리에 대한 업데이트가 전체적으로 인식되지 않게 한다. 예시로서, 소정 위치에 기록하는 트랜잭션은 국부적인 스레드에게만 인식될 수 있고, 다른 스레드로부터의 판독에 응답하여 트랜잭션 기록을 포함하는 트랜잭션이 실행될 때까지 기록 데이터가 전달되지 않는다. 트랜잭션이 계속 보류(pending)되고 있는 동안에, 이하에서 설명되는 바와 같이 메모리로부터 로딩되고 메모리에 기록된 데이터 항목/요소가 트래킹된다. 트랜잭션이 커미트 포인트(commit point)에 도달한 후, 트랜잭션에 대한 충돌이 검출되지 않았다면 이 트랜잭션은 커미트(committed)되고 트랜잭션이 전체적으로 인식되는 동안에 업데이트가 이루어진다.
그러나 트랜잭션이 그 보류 기간(pendency) 동안에 무효화되었다면, 트랜잭션은 중지(abort)되고 전체적으로 인식 가능한 업데이트가 이루어지지 않고 재시작될 가능성이 있다. 결과적으로, 본 명세서에서 사용된 트랜잭션의 보류 기간은 트랜잭션이 실행을 개시하고 커미트 또는 중지되지 않은, 즉 보류 상태(pending)인 기간을 지칭한다.
소프트웨어 트랜잭션 메모리(STM) 시스템은 때때로 소프트웨어 내부 또는 소프트웨어 내의 적어도 일부분에서 액세스 트래킹, 충돌 해결 또는 다른 트랜잭션 메모리 작업의 실행을 지칭한다. 일실시예에서, 프로세서(100)는 트랜잭션 실행을 지원하기 위해 프로그램 코드를 컴파일링하는 컴파일러(compiler)를 실행할 수 있다. 여기에서 컴파일러는 연산, 호출, 기능 및 트랜잭션의 실행을 가능하게 하는 다른 코드를 삽입할 수 있다
컴파일러는 때때로 소스 텍스트/코드를 타겟 텍스트/코드로 변환하는 프로그램 또는 프로그램의 세트를 포함한다. 일반적으로 컴파일러를 이용한 프로그램/애플리케이션 코드의 컴파일링은 다수의 위상으로 이루어지고, 고급 프로그래밍 언어 코드를 저급 머신 또는 어셈블리 언어 코드로 변환하도록 진행된다. 하지만, 단일 패스 컴파일러(single pass compilers)는 단일 컴파일링을 위해 여전히 이용 가능할 것이다. 컴파일러는 임의의 공지된 컴파일링 기법을 이용하고, 어휘(lexical) 분석, 사전 처리(preprocessing), 파싱(parsing), 시맨틱 분석, 코드 생성, 코드 변환 및 코드 최적화 등과 같은 임의의 공지된 컴파일러 연산을 실행할 수 있다.
더 큰 컴파일러는 때때로 다수의 단계(phase)를 포함하지만, 거의 대부분 이 단계는 2개의 일반적인 단계 즉, (1) 일반적으로 신택스(syntactic) 처리, 시맨틱 처리 및 몇몇 변환/최적화가 발생할 수 있는 프론트-엔드(front-end)와, 및(2) 일반적으로 분석, 변환 최적화 및 코드 생성이 발생하는 백-엔드(back-end)에 포함된다. 몇몇 컴파일러는 미들-엔드(middle end)를 지칭하고, 이것은 컴파일러의 프론트-엔드와 백-엔드 사이의 윤곽을 흐리게 하는 것을 나타낸다. 결과적으로, 삽입, 연관, 생성 또는 컴파일러의 다른 연산에 대한 참조는, 컴파일러의 임의의 공지된 단계(phase) 또는 패스(passes)뿐만 아니라 상술된 위상 또는 패스 중 어느 것에서도 발생할 수 있다. 도식적인 예시로서, 컴파일러는 프론트-엔드 컴파일링 단계에서 호출/연산을 삽입한 다음, 트랜잭션 메모리 변환 위상 동안에 호출/연산을 변환하는 것 등과 같이 하나 이상의 컴파일링 단계에서 트랜잭션 연산, 호출, 기능 등을 삽입할 가능성이 있다.
그렇지만 실행 환경 및 컴파일러의 동적 또는 정적 특성에도 불구하고 컴파일러는 일실시예에서, 프로그램 코드를 컴파일링하여 트랜잭션 실행을 가능하게 한다. 그러므로 일실시예에서, 프로그램 코드의 실행에 대한 참조는 (1) 동적이거나 정적으로 컴파일러 프로그램(들)을 실행하여 메인 프로그램 코드를 컴파일링하거나, 트랜잭션 구조를 유지하거나, 트랜잭션 관련 연산을 실행하거나, (2) 트랜잭션 연산/호출을 포함하는 메인 프로그램 코드를 실행하거나, (3) 메인 프로그램 코드와 연관된 라이브러리(libraries) 등과 같은 다른 프로그램 코드를 실행하거나, (4) 그 조합을 지칭한다.
일실시예에서, 프로세서(100)는 즉, 하드웨어 트랜잭션 메모리(HTM) 시스템 내에서 하드웨어/로직을 이용하는 트랜잭션을 실행할 수 있다. HTM을 실행할 때 아키텍처 및 마이크로 아키텍처 관점(perspective) 모두로부터 다수의 특정 구현 세부 사항이 존재하지만 그 대부분은 본 발명을 불필요하게 불명확하게 만들지 않기 위해서 본 명세서에 설명되지 않았다. 그러나 몇몇 구조 및 구현은 예시를 목적으로 개시되어 있다. 그렇지만, 이러한 구조 및 구현을 필수적이지 않으며 상이한 구현 세부 사항을 갖는 다른 구조로 증대 및/또는 대체될 수 있다.
구현 설계 선택 사항의 예시로서, HTM은 제자리 업데이트(update-in-place) 방식 또는 기록-버퍼링 방식으로 작동할 수 있다. 제자리 업데이트 HTM에서, 트랜잭션 기록은 참조된 메모리 어드레스에 대해 실행되어 그곳에 앞서 보유된 데이터를 수정한다. 그러나 이 수정된 데이터는 외부 요청 스레드에 제공되지 않고, 다시 말해 데이터는 전체적으로 인식 가능하지 않지만 국부 메모리 순차화 목적을 위해 국부적으로 판독하도록 제공된다. 추가적으로, 이전의 데이터는 때때로 "로깅(logged)"되어 트랜잭션이 중지될 때, 이전의 데이터가 복원되어 트랜잭션의 실행이 시작되기 전에 스레드의 상태를 달성할 수 있다.
설명을 위하여 데이터 캐시(150)가 캐시(110) 및 시스템 메모리(175) 등과 같은 상위 레벨 메모리로부터의 데이터를 보유한 제 1 레벨 데이터 캐시를 포함한다고 가정한다. 그러므로 데이터 캐시(150)에 대한 트랜잭션 기록이 발견되면, 일실시예에서 되기록(write-back) 캐시의 이전의 데이터 항목은 이전의 데이터 항목을 다시 상위 레벨 캐시(110)에 기록한다. 이와 다르게, 이전의 데이터는 프로세서(100) 내의 다른 별개의 메모리 내에 로깅되거나 그 외부에 로깅될 수 있다. 이전의 데이터 항목을 로깅한 후, 트랜잭션 기록은 캐시(150) 내의 데이터 항목을 업데이트하도록 실행된다. 그러므로 로컬 스레드(101a) 등과 같은, 즉 트랜잭션 기록과 연관된 스레드 등과 같은 로컬(local) 스레드는, 캐시(150) 내의 수정된 데이터 항목으로부터 판독될 수 있다. 그러나 스레드(102b) 등과 같은 다른 스레드는 트랜잭션 기록을 포함하는 트랜잭션이 아직 커미트되지 않았다면 판독 요청에 응답하여 수정된 데이터를 공급받는 것이 아니라 로깅된 데이터를 공급받는다. 트랜잭션이 커미트되면, 로깅된 데이터는 무효화되거나 제외(disregard)된다. 그래도 트랜잭션이 중지되면 이전의 데이터가 리로딩(reloaded)되거나 전체적으로 유효 데이터로서 식별된다.
이와는 대조적으로 기록-버퍼링 HTM에서, 트랜잭션 기록은 기록 버퍼 내에 버퍼링되는 반면, 이전의 데이터는 그 원래의 위치에 존재한다. 스레드(102b) 등과 같은 로컬 스레드가 트랜잭션으로 기록된 데이터의 판독을 실행한다면, 수정된 데이터는 기록 버퍼로부터 전달된다. 결과적으로 트랜잭션 기록을 포함하는 트랜잭션이 계속 보류 중인 동안에 외부 스레드가 데이터의 판독을 요청하면, 원래의 위치로부터 이전의 데이터가 제공된다. 더욱이 트랜잭션이 커미트되면, 수정된 데이터는 대응하는 메모리 어드레스로 복사되는 반면, 트랜잭션이 중지되면 버퍼링된 데이터는 제외된다.
상술된 내용으로부터 확인되는 바와 같이, 데이터 항목에 대한 액세스 및 요청은 잠재적으로 다른 처리 요소에 의해 이루어질 뿐만 아니라 로컬 처리 요소에 의해 모두 이루어질 수 있다. 안전 메커니즘이 없다면 이들 액세스 중 일부는 무효 데이터 및 실행을 초래할 가능성이 있고, 즉 데이터에 대한 기록이 판독을 무효화하거나 무효 데이터를 판독할 가능성이 있다. 결과적으로, 프로세서(100)는 잠재적인 충돌의 식별을 위해 데이터 항목에 대한, 또한 데이터 항목으로의 메모리 액세스를 트래킹하거나 모니터링하는 로직을 포함할 가능성이 있다.
데이터 항목 또는 데이터 요소는 하드웨어, 소프트웨어 또는 그 조합에 의해 정의된 임의의 입도(granularity) 레벨을 갖는 데이터를 포함할 수 있다. 데이터, 데이터 요소, 데이터 항목 또는 그에 대한 참조에 대한 예시에 대한 비제한적인 목록은, 메모리 어드레스, 데이터 객체(data object), 계층(class), 동적 언어 코드 유형의 필드, 동적 언더 코드의 유형, 변수, 피연산자, 데이터 구조 및 메모리 어드레스에 대한 간접(indirect) 참조를 포함한다. 그러나 어떠한 공지된 데이터의 그룹도 데이터 요소 또는 데이터 항목으로 지칭될 수 있다. 동적 언어 코드의 유형의 필드 및 동적 언어 코드의 유형 등과 같이 상술된 예시 중 일부는 동적 언어 코드의 데이터 구조를 지칭한다. 설명하자면, 선 마이크로시스템즈(Sun Microsystems, Inc,)의 자바TM(JavaTM) 등과 같은 동적 언어 코드는 강한 유형의 언어(strongly typed language)이다. 각각의 변수는 컴파일 시간에서 알려진 유형을 갖는다. 이 유형은 2가지의 범주, 즉 원시 유형(primitive types)(불리언(boolean) 및 예컨대, 정수(int), 실수(float) 등의 숫자) 및 참조 유형(reference types)(계층, 인터페이스 및 어레이)으로 나누어진다. 참조 유형의 값은 객체에 대한 참조이다. 자바TM에서, 필드를 구성하는 객체는 계층 인스턴스(class instance) 또는 어레이일 수 있다. 계층 A의 객체 a를 가정하면, 유형 A의 필드 x를 지칭하기 위해서는 A::x 표기법을 사용하고, 계층 A의 객체 a의 필드 x를 지칭하기 위해서는 a.x 표기법을 사용하는 것이 통상적이다. 예를 들면, 표현식은 a.x=a.y+a.z로 표기될 수 있다. 여기에서 필드 y 및 필드 z는 추가되기 위해 로딩되고, 그 결과는 필드 x에 기록된다.
그러므로, 데이터 항목에 대한 메모리 액세스의 모니터링은 임의의 데이터 레벨 입도에서 실행될 수 있다. 예를 들면, 일실시예에서 데이터에 대한 메모리 액세스는 유형 레벨에서 모니터링된다. 여기에서 필드 A::x에 대한 트랜잭션 기록 및 필드 A::y의 비-트랜잭션 로딩은, 동일한 데이터 항목, 즉 유형 A에 대해 액세스할 때 모니터링될 수 있다. 다른 실시예에서, 메모리 액세스 모니터링은 필드 레벨 입도에서 실행될 수 있다. 여기에서 A::x에 대한 트랜잭션 기록 및 A::y의 비-트랜잭션 로딩은 별개의 필드에 대해 참조할 때 동일한 데이터 항목을 액세스한다면 모니터링되지 않는다. 다른 데이터 구조 또는 프로그래밍 기법은 데이터 항목에 대한 메모리 액세스를 트래킹하는 것을 고려할 수 있다는 것을 주지하라. 예시로서, 계층 A의 객체의 필드 x 및 y, 즉 A::x 및 A::y를 가정하면, 계층 B의 객체에 대한 포인트(point)는 새롭게 할당된 객체로 초기화되고, 초기화 이후에 절대 기록되지 않는다. 일실시예에서, A::y에 의해 포인팅된 객체의 필드 B::z의 비-트랜잭션 로딩과 관련하여 동일한 데이터 항목에 대해 메모리가 액세스할 때, A::x로 포인팅된 객체의 필드 B::z에 대한 트랜잭션 기록은 모니터링되지 않는다. 이러한 예시로부터 추정하건대, 임의의 데이터 입도 레벨에서 모니터가 모니터링을 실행할 수 있다는 것을 결정할 수 있다.
일실시예에서, 모니터는 로딩과 저장을 트래킹하기 위해 판독 모니터와 기록 모니터를 포함하고, 이들은 그에 따라 모니터링되도록 결정된다. 예시로서, 하드웨어 판독 모니터 및 기록 모니터는 데이터 항목을 보유하는 저장 구조의 입도와 무관하게 적어도 데이터 항목의 입도에서 데이터 항목을 모니터링한다. 데이터 항목을 모니터링하기 위해 판독 모니터/속성을 이용하는 예시는 "Read and Write Monitoring Attributes in Transactional Memory(TM) Systems"라는 제목으로 Gad Sheaffer 등에 의해 본 출원과 동일 날짜로 출원된 동시 계류 중인 출원 번호 제 12/346,530 호(대리인 서류 제출 번호 제 P29130 호)에서 보다 상세하게 설명되어 있다. 그러나 모니터, 속성, 주석(annotations) 또는 다른 트래킹 메커니즘이 데이터의 임의의 입도 또는 데이터를 보유하는 구조를 이용하는 트랜잭션 실행과 연관된 충돌을 검출하는 데 이용될 수 있다.
판독 또는 기록 속성은 데이터 항목과 연관된 상태를 보유하는 임의의 로직, 펌웨어 또는 구조를 포함한다. 예를 들면, 데이터 항목에 대한 속성은 비트 벡터를 포함하고, 여기에서 비트 벡터 내의 각각의 비트는 트랜잭션 로딩, 트랜잭션 기록, 비-트랜잭션 로딩, 비-트랜잭션 기록, 트랜잭션 로딩 안됨, 트랜잭션 기록 안됨, 비-트랜잭션 로딩 안됨, 비-트랜잭션 기록 안됨, 액세스 충돌 검출, 액세스 충돌 검출 안됨, 판독 요청, 판독 요청 안됨, 기록 요청, 기록 요청 안됨, 소유권(ownership) 요청, 소유권 요청 안됨 또는 데이터 항목을 보유하는 데이터 항목 또는 메모리 위치와 연관된 임의의 다른 속성 또는 상태 등과 같은 데이터 항목의 속성을 나타낸다.
다른 예로서, 데이터 항목을 위한 속성을 인코딩된 값을 포함한다. 예를 들면, 4개의 상태 즉, (1) 트랜잭션 기록, (2) 트랜잭션 판독, (3) 트랜잭션 기록 안됨, 및 (4) 트랜잭션 판독 안됨 등과 같은 상태는 2개의 속성 비트 즉, 00, 01, 11 및 10의 4개의 이진값을 이용하여 인코딩된다.
또 다른 예로서, 속성은 데이터 캐시(150) 등과 같은 캐시 메모리와 연관된 일관성 상태 어레이의 일부분으로서 포함된다. 예시적인 캐시 일관성 상태의 비 제한적인 예시는 (1) 수정된(M 420) 상태, 즉 어드레스가 기록되고 그것과 연관된 속성이 없는 상태와, (2) 수정된 판독(MR 430) 상태, 즉 어드레스가 기록되고 그것과 연관된 판독 속성을 갖는 상태(예를 들면 어드레스에 대한 이전의 판독 후 트랜잭션이 어드레스를 기록하는 경우)와, (3) 수정된 기록(MW 425) 상태, 즉 어드레스가 기록되고 그것과 연관된 기록 속성을 갖는 상태와, (4) 수정된 판독 기록(MRW 435) 상태, 즉 어드레스가 기록되고 그것과 연관된 판독 및 기록 속성을 모두 갖는 상태와, (5) 배타적(exclusive)(E 440) 상태, 즉 어드레스가 판독되고, 그것과 연관된 속성을 갖지 않는 상태와, (6) 배타적 판독(ER 445) 상태, 즉 어드레스가 판독되고 그것과 연관된 판독 속성을 갖는 상태와, (7) 공유(S 410), 즉 어드레스가 판독되고 그것과 연관된 속성을 갖지 않는 상태와, (8) 공유 판독(SR 415) 상태, 즉 어드레스가 판독되고 그것과 연관된 판독 속성을 갖는 상태를 포함한다.
여기에서 모니터링된 일관성 상태 등과 같은 추가적인 캐시 일관성 상태는 종래의 MESI(Modified Exclusive Shared and Invalid) 캐시 일관성 상태에 추가될 수 있다. 결과적으로, 충돌을 검출하기 위해서 기존의 공지된 일관성(coherency) 및 통신/스누프(snoop) 프로토콜이 하드웨어 모니터/속성과 조합하여 활용될 수 있다.
이 설계에 기초하여, 캐시 일관성 요청 및 캐시 라인의 모니터링된 일관성 상태의 서로 다른 조합은 공유된 판독 상태에 있는 데이터 항목을 보유하는 캐시 라인 및 데이터 항목에 대한 기록 요청을 나타내는 스누프 등과 같이 잠재적인 충돌을 초래한다. 반대로, 수정된 기록 상태에 있는 데이터 항목을 보유하는 캐시 라인 및 데이터 항목에 대한 판독 요청을 나타내는 스누프는 잠재적으로 충돌한다고 간주할 수 있다. 일실시예에서, 액세스 요청 및 속성 상태 스누프 로직의 이러한 조합을 검출하는 것은 충돌 검출/보고를 위한 모니터 및/또는 로직 등과 같은 충돌 검출/보고 로직에 결합될 수 있다.
일실시예에서, 캐시(150) 내에 보유된 데이터 항목과 연관된 속성은 단명(ephemeral) 또는 비밀(private) 저장을 이용하여 구현된다. 여기에서 속성은 캐시(150) 자신의 라인 내부 등과 같이 캐시(150) 내부의 어느 것이나 보유될 수 있다. 예를 들면, 상술된 HTM의 일례는 제자리 업데이트(update-in-place) HTM을 포함한다. 여기에서 트랜잭션 수정 데이터는 현재의 메모리 위치 내에 보유되는 한편, 이전의 데이터는 상위-레벨 메모리 등의 내부에 로깅/백업된다. 결과적으로, 일실시예에서, 데이터 항목과 관련하여 캐시(150)가 액세스될 때, 속성은 캐시(150) 내의 데이터 항목과 함께 단명적으로 저장된다. 여기에서, 데이터 항목은 비밀 또는 단명(ephemeral) 일관성 상태로 유지되고, 이는 캐시 제어 로직이 트랜잭션 시맨틱이 유지되도록 보장할 수 있게 한다. 다시 말해서, 단명 상태로 유지된 데이터 항목은 다른 스레드에 제공되지 않는다.
그러나 데이터 항목이 캐시(150)로부터 퇴거(evicted)되면, 비밀로 유지된 속성은 잠재적으로 손실된다. 본질적으로 속성은 데이터 항목을 모니터링하기 위해 생성된 시스템이고, 상위 레벨 메모리에 되기록되지 않는다. 속성이 감쇄(decay)하는, 즉 퇴거 또는 다른 이벤트 발생 시 손실되는 시나리오에서, 잠재적인 충돌은 상술된 바와 같이 잠재적인 액세스 충돌을 검출하는 것과 동일한 방식으로 개시될 수 있다. 버퍼링된 저장 및 버퍼링된 상태 등과 같이 단명 저장 및 비밀 상태의 버전은, "Extending the MESI protocol to support locally buffered data"라는 제목으로 본 출원과 동일 날짜로 출원된 대리인 서류 제출 번호 제 P29132 호의 관련 출원에서 설명되어 있다.
일실시예에서, 핸들러는 액세스 충돌, 모니터 충돌 손실, 데이터 충돌 손실 등과 같은 충돌에 대한 효과적인 핸들링을 지원하기 위해 하드웨어 내에 등록된다. 예시로서, 소프트웨어 기록 가능 레지스터는 트랜잭션 핸들러의 어드레스를 등록하기 위해 트랜잭션 런타임 또는 애플리케이션 코드 등과 같은 소프트웨어를 구비한다. 상술된 충돌 또는 정보 손실 등과 같이 관심 대상이 되는 이벤트가 검출되면, 일실시예에서, 제어 흐름은 운영 시스템(Operating System : OS) 등과 같은 특권 소프트웨어의 개입없이 소프트웨어 기록 가능 레지스터 내에 등록된 트랜잭션 핸들러로 벡터화(vectored)된다.
일실시예에서, 관심 대상이 되는 이벤트, 즉 트랜잭션 핸들러의 호출(invocation)을 유발하는 핸들러 이벤트는 트랜잭션 런타임 또는 애플리케이션 코드 등과 같은 비특권 소프트웨어에 의해 지정될 수 있다. 서로 다른 실시예에서의 관심 대상이 되는 이벤트는 동기식, 비동기식 또는 그 조합일 수 있다. 결과적으로, OS의 개입없이 동기식 및 비동기식 이벤트 모두에 대한 소프트웨어 핸들러의 전송 제어 능력이 제공되는데, 이것은 특권 레벨 소프트웨어 디스패치 프로세스가 핸들러의 실행을 개시하는 것을 대기하는 데 포함되는 지연을 잠재적으로 제거한다. 그러므로 예측하지 않은 실행 및 결과가 발생하기 전에 낮은 대기 시간(latency) 반응을 요구하는 핸들러 이벤트가 효과적이고 빠르게 처리된다.
먼저 도 1을 참조하여 상술된 바와 같이, 프로세서(100)의 아키텍처는 설명을 위해 순수하게 예시적으로 제시되었다. 마찬가지로 속성과 데이터 항목/요소의 연관에 대한 특정한 예시도 예를 들기 위한 것이므로 상이한 입도의 데이터 항목에서 하드웨어 모니터/속성을 연관시키는 어떠한 방법도 사용 가능하다.
도 2를 참조하면, 하드웨어 내에 핸들러를 등록하기 위한 지원을 제공하는 프로세서를 포함하는 시스템에 관한 일실시예가 도시되어 있다. 프로세서(205)는 프로세서의 임의의 다른 공지된 유닛 또는 로직을 포함하는 것뿐만 아니라 도 1을 참조하여 설명된 기능 유닛 또는 모듈 중 어느 것도 포함하거나 생략할 수 있다. 더욱이 일련의 저장 요소들도 도시되어 있다. 그렇지만, 별개의 저장 요소와 관련하여 이하에 설명된 연산 및 방법은 임의의 개수의 저장 요소와도 조합될 수 있다.
도시된 바와 같이, 프로세서(205)는 제어기 허브(230)를 통해 시스템 메모리(250)에 연결된다. 시스템 메모리(250)는 랜덤 액세스 메모리(RAM) 등과 같은 임의의 메모리 장치를 포함한다. 여기에서 시스템 메모리(250)는 프로세서(205)에서 실행되는 하나 이상의 트랜잭션을 포함할 수 있는 애플리케이션 코드(260)와, 이하에서 설명되는 바와 같이 프로세서(205)의 하드웨어에 등록되어 애플리케이션 코드(260)의 실행 동안에 발생하는 트랜잭션 관련 핸들러 이벤트를 처리할 수 있는 핸들러(255)를 보유한다.
일실시예에서, 제어기 허브(230)는 2개의 허브, 즉 시스템 메모리(250)와 통신하고 그래픽 프로세서 등과 같은 입력/출력(I/O) 장치와 인터페이스로 연결될 가능성이 있는 메모리 제어기 허브와, 네트워크 인터페이스 제어기(NIC), 오디오 장치 또는 다른 공지된 I/O 장치 등과 같은 다른 I/O 장치와 통신하는 I/O 제어기 허브를 종종 포함하는 칩셋(chipset)을 포함한다.
프로세서(205)는 저장 요소(210)를 포함한다. 저장 요소는 이진 값, 데이터, 코드, 인스트럭션, 어드레스 또는 다른 공지된 컴퓨터 관련 정보 등과 같이 정보 또는 요소를 보유하는 임의의 로직, 구성 요소 또는 장치를 지칭한다. 통상적인 예시로서, 저장 요소는 레지스터를 포함한다. 프로세서 내에서 발견되는 전형적인 레지스터는 범용 레지스터, 데이터 레지스터, 어드레스 레지스터, 조건부(conditional) 레지스터, 부동 소수점(floating-point) 레지스터, 상수(constant) 레지스터, 벡터 레지스터, 전용 레지스터, 프로그램 카운터(또는 인스트럭션 포인터) 레지스터, 상태 레지스터, 인스트럭션 레지스터, 머신/모델 특정 레지스터(MSR), 제어 레지스터 및 일반 사용자-액세스 가능 레지스터를 포함한다. 결과적으로, 각각의 저장 요소(210-225)는 서로 다른 실시예 내의 상술된 레지스터 중 어느 하나에 개별적으로 존재할 수 있다.
일실시예에서 핸들러(255) 등과 같은 핸들러는 저장 요소(210) 내에 등록된다. 프로세서(205)의 하드웨어를 갖는 레지스터 핸들러(255)는 프로세서(205)에 대한 핸들러(255)의 임의의 식별 또는 그 위치를 포함한다. 예시로서, 저장 요소(210) 내의 레지스터 핸들러(255)는 저장 요소(210) 내의 핸들러(255)에 대한 참조를 저장하는 것을 포함한다. 다시 말해서, 일단 등록되면, 저장 요소(210)는 핸들러(255)에 대한 참조를 보유한다.
코드에 대한 참조(reference)를 등록하는 임의의 방법은 핸들러(255)에 대한 참조를 보유하도록 저장 요소(210)를 업데이트하는 데 이용될 수 있다. 일실시예에서, 비특권 소프트웨어/코드는 저장 요소(210) 내의 핸들러(255)를 등록한다. 비특권 소프트웨어는 특정 상위 특권 레벨, 즉 특권 레벨 0에서 실행되도록 허용되지 않는 소프트웨어 등과 같이 특권을 갖지 않는 임의의 코드를 포함할 수 있다. 그러나 일실시예에서, 비특권 소프트웨어는 사용자-레벨 코드를 포함한다. 다시 말해서, 트랜잭션 런타임 코드, 애플리케이션 코드 또는 가상 머신 코드는 트랜잭션을 실행하기 전에 프로세서(205)의 하드웨어 내에 핸들러(255)를 등록할 수 있다. 그러므로 일실시예에서, 저장 요소(210)는 핸들러(255)에 대한 참조를 보유하도록 업데이트될 사용자-레벨 또는 비특권 레벨 코드에 의해 수정 가능하다.
예를 들면, 트랜잭션을 실행하기 전에 애플리케이션 코드는 저장 요소(210) 내에 핸들러(255)를 등록하여, 트랜잭션의 실행 중에 핸들러 이벤트가 발생하면, 사용자-등록 핸들러(255)는 이벤트를 처리하도록 호출된다. 결과적으로 이 실시예에서, 사용자는 트랜잭션 핸들러 이벤트의 경우에 이용될 핸들러를 정의할 수 있고, 핸들러에 대한 최적화된 제어 흐름 전송을 제공하기 위해 하드웨어 내에 그것을 등록할 수 있다. 그러나 다른 실시예에서, 핸들러는 OS 등과 같은 특권-레벨 소프트웨어에 의해 등록될 수 있다.
일실시예에서, 핸들러(255)에 대한 참조는 시스템 메모리(250) 내에 보유된 핸들러(255)의 시작 어드레스(256)에 대한 참조를 포함한다. 프로세서 내에 다수의 어드레스 방법이 활용되기 때문에, 메모리 어드레스에 대한 참조는 잠재적으로 어드레스에 대한 임의의 공지된 컴퓨터 참조를 포함한다. 일례로서, 가상 어드레스 및 오프셋(offset)은 핸들러(255)의 개시 어드레스(256)에 대한 참조로서 이용된다. 여기에서 프로세서(205)의 저장부 내에 보유된 페이지 테이블 및 변환 테이블은 가상 어드레스를 참조 기반 물리적 어드레스로 변환하고, 물리적 어드레스, 즉 핸들러(255)를 참조하는 물리적 어드레스(256)를 획득하기 위해 거기에 오프셋을 더한다. 오프셋 또는 코드 세그먼트 값의 누락은, 현재의 코드 세그먼트에 대한 핸들러의 용도를 제한할 수 있고, 이는 또한 실행되는 트랜잭션 내의 합법(legal) 인스트럭션을 잠재적으로 제한할 수 있음을 주지하라. 참조에 대한 다른 예시는 핸들러(255)를 직접 참조하는 저장 요소(210) 내에 보유된 직접 물리적 어드레스를 포함한다.
일실시예에서, 저장 요소(220)는 복수의 핸들러 이벤트를 지정/표시한다. 상술된 바와 같이, 핸들러 이벤트는 비동기식 핸들러 이벤트, 동기식 핸들러 이벤트 또는 그 조합을 포함할 수 있다. 동기식 핸들러 이벤트는 불법(illegal) 인스트럭션/연산의 실행 또는 무효한 위치에 대한 액세스 등과 같이 인스트럭션과 접속/연관되는 이벤트를 포함한다. 대조적으로, 비동기식 이벤트는 때때로 프로그램 또는 인스트럭션의 제어 흐름에 직접 관련되지 않은 이벤트를 지칭한다. 핸들러 이벤트의 예시는 속성 정보의 부족, 속성 정보의 손실, 트랜잭션의 범주에서 불법적인 인스트럭션의 실행, 불법 제어 전송, 비-체크포인트형 레지스터에 대한 액세스, 버퍼링된 데이터의 손실, 트랜잭션의 범주에서 금지된 메모리 유형에 대한 액세스, 예외(exception), 시스템 호출 및 모니터링된 데이터의 손실을 포함한다. 여기에서 동기식 인스트럭션의 통상적인 예시는 보호된 도메인을 불법 전송 제어하는 인스트럭션 등과 같은 불법 인스트럭션의 실행이 있고, 비동기식 이벤트의 전형적인 예시로는 속성 정보의 손실을 포함한다. 그러나 핸들러 이벤트는 소프트웨어 핸들러에 의해 처리되는 동기식 또는 비동기식의 임의의 공지된 이벤트를 포함할 수 있다.
일실시예에서, 저장 요소(220)는 비트 벡터(221) 등과 같은 비트 벡터를 보유한다. 비트 벡터(221) 내의 각각의 비트는 이벤트(270-274) 등과 같은 핸들러 이벤트에 대응한다. 예를 들면, 이벤트(270-274)는 본 명세서에 설명되지 않은 다른 공지된 핸들러 이벤트뿐만 아니라 상술된 이벤트의 임의의 조합을 나타낸다. 비트가 설정되면, 대응하는 핸들러 이벤트가 가능 상태(enabled)가 되고, 반대로 비트가 설정되지 않으면 대응하는 핸들러 이벤트가 불능 상태(disabled)가 된다.
도시된 바와 같이, 저장 요소(220) 내에 보유되는 벡터(221)의 제 1 비트가 언셋(unset)되면, 즉 로직 0으로 설정되면, 핸들러 이벤트(274)는 불능 상태가 된다. 로직 값은 예시를 위한 것으로 반전될 수 있는데, 즉 로직 0이 가능 상태이고 로직 1이 불능 상태가 될 수 있다. 본질적으로 벡터(221)는 마스크로서 작동한다. 여기에서 비-체크포인트형 레지스터에 대한 액세스 등과 같은 이벤트(274)는 검출된다고 해도, 핸들러(255)가 불능 상태가 되기 때문에 핸들러(255)를 호출하게 되지 않는다. 이 시나리오에서, 트랜잭션의 취소 불가능(irrevocable) 또는 고정성(obstinate) 특징 즉, 트랜잭션은 우선 순위를 부여받으므로 그것이 중지될 가능성이 없게 되는 특성에 기인하여 이러한 액세스는 허용 가능하게 될 것이다. 그러나 임의의 다른 가능 상태 이벤트(270-273)가 검출되면, 핸들러(255)는 저장 요소(210) 내에 보유된 참조를 기초하여 실행된다. 비트 벡터는 예시로서 이용되었으며, 인코딩된 값 또는 인스트럭션의 사용을 통하여 특정 이벤트를 저장하는 방법도 이용될 수 있다.
일실시예에서, 저장 요소(220)의 일부분 또는 전체가 비특권 소프트웨어에 의해 수정된다. 여기에서 소프트웨어는 핸들러 이벤트를 지정/등록할 뿐만 아니라 저장 요소(210) 내의 핸들러(255)를 등록하여 핸들러(255)의 실행을 유도할 수 있다. 그렇지만 하나의 예시에서 저장 요소(220)의 일부분은 보존된다. 결과적으로, 하드웨어는 소프트웨어가 불능 상태가 되게 할 수 없는 몇몇 보존된 핸들러 이벤트를 정의할 수 있는 반면, 다른 이벤트는 소프트웨어에 의해 가능 상태가 될 수 있다.
때때로 핸들러는 검출된 핸들러 이벤트의 상황에 관한 몇몇 대화를 수신한다. 그러므로 일실시예에서, 저장 요소(225)는 상태 값을 보유하는 상태 저장 요소를 포함하고 핸들러(255)에 의해 처리되는 핸들러 이벤트, 즉 검출된 핸들러 이벤트를 나타낸다. 상술된 예시의 연속으로서, 상태 저장 요소(225)는 또한 비트 벡터(226) 등과 같은 비트 벡터를 보유할 수 있다. 여기에서 핸들러 이벤트의 가능 상태 또는 불능 상태 대신에, 제 1 로직 값으로 설정된 비트는 핸들러 이벤트가 검출되었음을 나타내는 한편, 제 2 로직 값으로 설정된 비트는 핸들러 이벤트가 검출되지 않았음을 나타낸다.
오로지 하나의 비트만이 로직 1로 설정된 것으로 도시되었으나, 발생되고 처리될 다수의 이벤트를 나타내기 위해 다수의 비트가 설정될 수 있다. 일실시예에서, 저장 요소(225)는 사용자-레벨 또는 비특권 소프트웨어에 의해 판독 가능하다. 결과적으로, 애플리케이션 코드(260) 또는 핸들러(255)는 프로파일링(profiling) 용도 또는 실제 이벤트 핸들링 용도를 위해서 저장 요소(225)를 판독하여 실행 중에 발생하는 핸들러 이벤트를 결정한다. 핸들러 이벤트의 검출에 응답하여, 저장 요소(220)에서 저장 요소(210)로의 상호 접속 또는 프로세서(205) 내에 보유된 저장 요소(210)에 대한 참조를 통해서, 실행은 현재의 포인트에서 애플리케이션 코드 즉, 어드레스(257)에서의 인스트럭션의 실행으로부터, 참조 즉, 저장 요소(210) 내에 보유된 어드레스(256)의 표현에 기초하여 즉 어드레스(256)에 있는 핸들러(255)의 실행으로 향하도록 벡터화된다.
애플리케이션 코드(260)로부터 핸들러(255)로 향하는 제어 흐름의 실행 또는 전송을 벡터화하는 것은 벡터화 실행 또는 프로그램의 제어 흐름의 방향 제시 또는 실행을 벡터화하는 임의의 공지된 방식으로 이루어질 수 있다. 상술된 바와 같이, 이전의 시스템은 때때로 OS 등과 같은 제어 소프트웨어에 의존하여, 핸들러 등과 같은 상이한 프로그램에 대한 전송 제어를 실행하였다. 여기에서 이벤트가 발생하였는지 여부를 결정하기 위해 OS가 정보를 폴링(polls)하는 동안에, 이벤트는 검출 및 수집될 수 있다. OS가 이벤트의 발생을 인식하면, OS는 핸들러를 실행할 시간을 스케쥴링한다. 그러나 배경 기술과 관련된 단락의 예시에서 설명된 바와 같이, 동기식 또는 비동기식일 수 있는 트랜잭션 이벤트가 보다 효과적인 방식, 즉 스키드(skid)가 적은 방식으로 처리된다면 무효 타겟 어드레스에 기초한 분기화(branching) 등과 같은 예측되지 않은 실행 결과가 발생할 수 있다.
스키드(skid)란 전형적으로 핸들러 시나리오의 발생, 즉 핸들러 이벤트의 검출과, 핸들러의 실제 호출 사이의 대기 시간으로서 정의된다. 예를 들어, 버퍼링/비밀 유지 판독 데이터의 손실에 기인하여 핸들러(255)가 호출되고, 스키드 값이 3이라면, 핸들러가 호출될 때까지 버퍼링된 데이터의 손실된 자리를 3개의 인스트럭션이 차지하게 한다. 스키드를 지칭하기 위해 인스트럭션 카운트가 사용되었으나, 실행 주기 등과 같은 임의의 다른 프로세싱 척도(metric)도 사용될 수 있다. 결과적으로, 핸들러(255)에 대한 제어 흐름 전송은 더 적은 스키드로 실행될 가능성이 있다.
제어 흐름 전송의 예시는 서로 다른 이벤트에 있어서, 즉 장애(fault)/이벤트(event)를 식별하는 인스트럭션이 철회(retires)하기 전에 이루어지고, 스키드 레벨 0을 암시하는 유사 장애(fault-like) 방식, 다음의 차단 가능(interruptible) 윈도우에서 이루어지고, 스키드 레벨 0을 암시하는 트랩-유사(trap-like) 방식 또는 그 조합을 포함한다. 때때로 스키드는 유형 이벤트에 기초한다. 예를 들면, 예측되지 않은 실행 결과를 유발할 가능성이 있는 몇몇 연산은 철회되지 않으므로 시스템 내에 예측되지 않은 결과가 관찰되지 않았다는 것 즉, 스키드 레벨이 0이라는 것을 보장한다. 예시는 이전에 체크포인트형이 아니었던 상태를 변경하는 트랜잭션의 범주 내의 합법 연산을 포함한다. 여기에서 상태 변경이 발생하면, 이전의 상태는 손실되고, 트랜잭션 중지에 응답하여 이전의 상태는 복원될 수 없다. 결과적으로, 연산의 철회 이전에 실행은 핸들러로 벡터화되고, 이것은 이 예시에서 이전의 상태를 체크포인트로 정하고, 연산이 실행될 수 있게 한다.
일실시예에서, 최적화된 제어 흐름 전송은 특권 레벨 소프트웨어의 개입없이 핸들러(255)에 대한 전송 제어를 위해 프로세서(205)의 하드웨어를 이용하여 실행된다. 특권 레벨 소프트웨어의 예시는 OS 소프트웨어, 커널 코드 및 가상 머신 모니터(VMM) 코드를 포함한다. 여기에서 프로세서(205)는 저장 요소(210) 내에 등록된 참조에 기초하여 핸들러(255)에 대해 애플리케이션 코드(260)의 실행을 벡터화할 수 있다. 설명을 위해, 애플리케이션 코드(260)에 의해 레지스터(210) 내에 저장된 물리적 어드레스(256)와 연관된 가상 어드레스 및 오프셋 등과 같은 참조가 레지스터(210) 내에 보유된다고 가정한다. 더욱이 핸들러 이벤트는 사용자-레벨 코드(260) 등에 의해 레지스터(220) 내에 지정되고, 상태 값을 보유하는 레지스터(225)의 업데이트에 의해 표시되는 핸들러 이벤트의 이벤트는 검출된다.
결과적으로, 실행 로직은 레지스터(215) 내에 현재의 프로그램 카운터에 대한 참조, 즉 인스트럭션 포인터로부터 현재의 인스트럭션 어드레스(257)를 저장한다. 레지스터(210) 내에 보유된 참조와 마찬가지로, 인스트럭션 포인터 어드레스는 인스트럭션 포인터 구현에 기초하여 현재 또는 다음 인스트럭션의 어드레스 등과 같이 실행이 벡터화되기 직전의 현재 포인트에 대한 가상 어드레스 및 오프셋 또는 다른 참조를 포함할 수 있다. 본질적으로 레지스터(215)는 레지스터(210)와 동일한 방식으로 리턴(return) 레지스터로서 작동한다. 다시 말해서, 레지스터(210) 내의 참조는 핸들러(255)에 대한 제어 흐름 전송을 최적화하는 데 이용되고, 리턴 레지스터(215) 내에 보유된 참조는 핸들러(255)로부터 애플리케이션 코드(260)로 향하는 제어 흐름의 리턴을 최적화하는 데 이용된다.
이 예시에서, 프로그램(260) 내의 현재 포인트가 레지스터(215) 내에 로깅된 후, 애플리케이션 코드(260)를 실행하는 실행 자원은 레지스터(210) 내에 보유된 참조에 기초하여 애플리케이션 코드(260)에 대한 실행을 벡터화하는 데 이용된다. 여기에서, 어드레스(256)에 대한 참조는 본질적으로 새로운 인스트럭션 포인터가 되고, 처음으로 핸들러(255)의 실행, 즉 제 1 인스트럭션이 시작된다. 실행 자원은 도 1을 참조하여 상술된 임의의 실행 로직 또는 임의의 다른 공지된 실행 관련 로직을 포함한다. 예를 들면, 트랜잭션의 연산은 애플리케이션 코드(260), 즉, 로딩/저장 실행 유닛 상에 실행을 위해 스케쥴링된 로딩 또는 저장 연산으로 실행될 수 있다. 다음으로 핸들러 이벤트에 응답하여, 점프 실행 유닛은 특권 레벨 소프트웨어의 개입없이 인스트럭션 어드레스(257)로부터 어드레스(256)로 실행을 점프시키는 점프 타입 연산을 실행한다. 여기에서 점프 타입 연산은 정규 점프 연산 또는 최장(far) 점프 연산을 포함할 수 있다.
어드레스(256)로 변환될 가상 어드레스 및 오프셋 등과 같이 레지스터(210) 내에 참조된 어드레스는, 애플리케이션 코드(260)로부터 핸들러(255)로 실행을 벡터화하는 점프 타입 연산을 위한 타겟 어드레스로서 이용된다. 이러한 틀 내에서, 핸들러(255)의 실행이 완료된 후, 즉 핸들러 이벤트의 취급이 완료된 후, 유사한 점프 타입 인스트럭션/연산이 실행되어 애플리케이션 코드(260)로 리턴된다. 그러나 이번에는 타겟 어드레스로서 레지스터(210) 내에 보유된 참조 대신에, 리턴 레지스터(215) 내에 보유된 이전의 인스트럭션 포인터 참조를 애플리케이션 코드(260) 내의 이전 포인트로의 리턴 점프를 위한 타겟 어드레스로서 이용한다.
핸들러(255)에 대한 참조는 핸들링 동기식 또는 비동기식 이벤트를 위한 임의의 공지된 코드를 포함한다. 사실상 핸들러(255)는 검출된 핸들러 이벤트에 의존하여 서로 다른 연산을 실행할 수 있다. 예를 들면, 핸들러(255)는 몇몇 핸들러 이벤트가 발생할 때 커미트 또는 중지 함수를 실행하도록 시도하고, 다른 핸들러 이벤트가 발생할 때 레지스터 또는 위치의 체크포인트를 잡는 것 등과 같은 다른 연산을 실행하도록 시도할 수 있다. 결과적으로, 사용자는 핸들러 이벤트를 지정하고, 하드웨어 내에 이용될 핸들러를 정의할 수 있으므로, 핸들러 이벤트가 발생할 때 하드웨어는 특권 소프트웨어의 개입을 대기하는 지연이 없이 사용자-레벨 코드에 의해 지정된 핸들러로 제어를 전송할 수 있다. 더욱이 하드웨어는 이벤트, 이벤트와 연관된 어드레스 및 다른 이벤트 관련 정보 등과 같이 핸들러 이벤트에 관한 정보를 통신하기 위해 제공될 수 있다. 도 3 내지 도 4는 핸들러에 대한 제어를 벡터화하는 실시예를 설명한다.
도 3을 참조하면, 특권 레벨 소프트웨어 개입없이 트랜잭션 핸들러에 대한 실행을 벡터화하는 방법의 일실시예에 대한 흐름도가 도시되어 있다. 도 3 및 도 4 내의 흐름은 실질적으로 직렬 방식으로 도시되어 있다는 것을 주지하라. 그러나 도시된 흐름은 다른 실시예에서는 다른 순서로, 서로에 대해 병렬로, 또는 완전히 다른 구성 요소로 실행될 수 있다. 예를 들면, 도 4에서 핸들러 어드레스 는 흐름(410)에서 핸들러 이벤트가 지정되기 전에 흐름(405)에서 제 1 레지스터 내에 저장된다. 그렇지만 도 4의 목적에서 벗어나지 않으면서 핸들러 어드레스가 제 1 레지스터 내에 저장되기 전에 이벤트를 지정할 수도 있다.
흐름 305에서 트랜잭션 핸들러는 프로세서의 하드웨어 내에 등록된다. 프로세서 내에 보유된 테이블 또는 스택(stack) 내의 핸들러에 대한 참조를 추가하는 것 등과 같이, 하드웨어 내에 핸들러를 등록하는 어떠한 방법도 이용될 수 있다. 일실시예에서, 트랜잭션 핸들러와 연관된 어드레스에 대한 참조는 레지스터 내에 배치된다. 어드레스에 대한 참조는 임의의 공지된 어드레스 참조를 포함한다. 예시로서, 참조는 프로세서 내에서 하드웨어 구조에 의해 변환 가능한 가상 어드레스 및 오프셋 즉, 변환 버퍼 및/또는 페이지 테이블을 포함한다. 상술된 바와 같이, 레지스터는 사용자-액세스 가능 상태가 되어, 애플리케이션 코드 또는 트랜잭션 런타임 코드가, 트랜잭션이 시작될 때 등과 같이 코드의 초기화 또는 코드의 본체(body) 내부에서 등록을 실행할 수 있게 한다.
흐름(310)에서 핸들러 이벤트가 검출되었는지 여부가 판정된다. 핸들러 이벤트의 예시는 속성 정보의 부족, 속성 정보의 손실, 트랜잭션의 범주에서 불법적인 인스트럭션의 실행, 불법 제어 전송, 비-체크포인트형 레지스터에 대한 액세스, 버퍼링된 데이터의 손실, 트랜잭션의 범주에서 금지된 메모리 유형에 대한 액세스, 예외, 시스템 호출 및 모니터링된 데이터의 손실을 포함한다. 도시된 바와 같이, 핸들러 이벤트는 이 예시에서, 동기식 및 비동기식 이벤트를 포함할 수 있다. 그러나 이하에 보다 상세하게 설명되는 바와 같이, 일실시예에서 대기 시간 지배형(latency ridden) 소프트웨어 폴링을 이용하여 이벤트를 핸들링하는 것 대신에, 빠른 비동기식 하드웨어 방식으로 동기식 및 비동기식 이벤트를 모두 처리하여 최적화된 스키드 핸들링을 제공한다. 사용자-레벨 코드 또는 특권 코드 및 사용자-레벨 코드의 조합이 핸들러 이벤트를 지정하는 일실시예를 도시한 상기 도 2를 참조하라. 그러나 핸들러 이벤트는 또한 하드웨어, 펌웨어 또는 다른 소프트웨어에 의해 지정될 수 있다.
아무런 이벤트가 검출되지 않으면, 흐름(315)에서 실행은 정규 방식으로 진행된다. 그러나 흐름(310)에서 이벤트가 검출되면, 흐름(320)에서 실행은 특권 레벨 소프트웨어 개입없이 트랜잭션 핸들러를 향해 벡터화된다. OS, 커널, 또는 가상 머신 모니터 코드를 실행하지 않고 핸들러에 실행의 방향을 정하는 어떠한 방법도 이용 가능하다는 것을 주지하라. 도 4를 참조하여 이하에 설명된 예시는 프로세서의 레지스터 내에 보유된 값에 기초하여 실행을 벡터화하는 것을 포함한다.
도 4를 참조하면 하드웨어를 이용하는 소프트웨어 핸들러로 제어 흐름을 전송하는 방법의 일실시예에 대한 흐름도가 도시되어 있다. 흐름(405)에서 트랜잭션 핸들러의 핸들러 어드레스는 제 1 레지스터에 저장/기록된다. 여기에서 사용자-레벨 소프트웨어는 가상 어드레스 및 오프셋 등과 같은 어드레스에 대한 참조를 기록한다. 흐름(410)에서, 사용자-레벨 소프트웨어는 제 2 레지스터 내에 복수의 핸들러 이벤트를 지정한다. 상술된 예시로서, 사용자-레벨 소프트웨어는 하드웨어 정의형 핸들러 이벤트에 대응하는 비트 벡터의 비트를 설정/재설정한다. 핸들러 이벤트는 동기식 이벤트, 비동기식 이벤트 또는 그 조합일 수 있다는 것을 주지하라.
흐름(415)에서 복수의 핸들러 이벤트 중 하나의 핸들러 이벤트가 검출된다. 이벤트 검출은 다수의 기능 유닛에 걸친 다수의 방법을 포함할 수 있다. 예를 들면, 속성 데이터 또는 모니터링된 데이터의 손실을 검출하기 위해서, 캐시 제어 로직은 모니터링된 라인의 퇴거(eviction)를 검출하고, 그에 따라 보고할 수 있다. 그러나 불법 인스트럭션에 있어서, 불법 연산과 관련된 연산 코드를 검출하는 디코더는 이벤트를 검출하고 보고할 가능성이 있다. 다른 예로서, 레지스터의 상태를 업데이트하는 연산은 핸들러 이벤트를 검출하는 단계와 연관된 프로세서 및 로직의 파이프라인(pipeline) 단계에서 검출된다. 하드웨어 이벤트 또는 핸들러 관련 이벤트를 검출하는 다른 로직 및 방법이 이용될 수 있다.
일단 이벤트가 검출되면, 흐름(420)에서 제 3 레지스터는 복수의 핸들러 이벤트 중 핸들러 이벤트가 검출된 것을 나타내는 상태 값으로 업데이트된다. 여기에서 하드웨어가 이벤트를 검출하면 보고 로직은 상태 레지스터에게 이벤트를 보고한다. 예시로서, 핸들러 이벤트에 대응하는 비트는 제 3 레지스터 내에 보유된 비트 벡터 내에 설정되어 핸들러 이벤트의 발생을 보고한다. 제 3 레지스터는 사용자-레벨 소프트웨어에 의해 판독 가능하므로, 핸들러는 어떤 핸들러 이벤트가 검출되었는지 판단할 수 있다. 제 3 레지스터, 또는 제 3 레지스터와 결합된 다른 레지스터는 이벤트와 연관된 연산, 이벤트와 연관된 레지스터 및 이벤트와 연관된 어드레스/데이터 항목 등과 같이 핸들러 이벤트에 관한 추가적인 정보를 제공할 수 있다.
핸들러에 대한 실행을 벡터화하기 전에, 흐름(425)에서 현재의 프로그램 카운터 값 또는 인스트럭션 포인터 값/어드레스는 제 4 레지스터에 기록되어 핸들러의 실행 이후에 현재의 실행 포인트로 리턴할 수 있다. 프로세서 설계에 기초하여 인스트럭션 포인터는 현재의 인스트럭션 또는 다음 인스트럭션을 참조할 수 있다. 그러므로 양쪽의 구현 모두에서 "현재의 인스트럭션 포인터"에 대한 참조는 현재의 인스트럭션 포인터 값을 포함하고, 이것은 현재 또는 다음 인스트럭션일 수 있다. 예시로서, 적절한 인스트럭션의 어드레스를 참조하는 가상 어드레스 및 오프셋은 레지스터 내에 저장된다.
흐름(430)에서, 실행은 제 1 레지스터 내에 보유된 핸들러 어드레스로 점프된다. 상기 예시의 연속으로서, 점프 타입 연산은 제 1 레지스터 내에 보유된 가상 어드레스에 오프셋을 더한 것으로 점프되도록 실행된다. 본질적으로 흐름(425)에서 현재의 인스트럭션 포인터는 로깅되고, 흐름(430)에서 현재의 인스트럭션 포인터는 트랜잭션 핸들러의 시작 인스트럭션을 향하는 "인스트럭션 포인터"로 대체된다.
흐름(435)에서, 트랜잭션 핸들러는 그에 따른 이벤트 또는 이벤트들을 처리하도록 실행된다. 상술된 바와 같이 핸들러는 제 3 레지스터 등과 같은 레지스터를 액세스하여 검출된 이벤트, 이벤트 유형, 이벤트와 연관된 어드레스 또는 연산 또는 다른 핸들러 관련 정보를 결정할 수 있다. 이벤트가 처리된 후, 흐름(440)에서 실행은 제 4 레지스터 내에 보유된 인스트럭션 포인터 어드레스로 다시 점프된다. 상술된 것과는 반대로, 이제 핸들러 내의 인스트럭션 포인터는 이전에 로깅된 인스트럭션 포인터로 대체된다. 결과적으로, 실행은 핸들러가 호출되기 직전의 포인트로 되돌아가도록 벡터화된다. 일실시예에서, 소프트웨어 핸들러는 중지 또는 커미트에 응답하여, 실행이 다시 다른 포인트로 벡터화되게 할 수 있다.
본 명세서에 사용된 모듈은 임의의 하드웨어, 소프트웨어, 펌웨어 또는 그 조합을 지칭한다. 때때로 분리된 것으로 설명된 모듈의 경계는 통상적으로 다양하고 중첩될 가능성이 있다. 예를 들면, 제 1 및 제 2 모듈은 몇몇 독립적인 하드웨어, 소프트웨어 또는 펌웨어를 잠재적으로 유지하면서 하드웨어, 소프트웨어, 펌웨어 또는 그 조합을 공유할 수 있다. 일실시예에서, 로직이라는 용어의 사용은 트랜지스터, 레지스터 또는 프로그래밍 가능 로직 장치 등과 같은 다른 하드웨어 등의 하드웨어를 포함한다. 그러나 다른 실시예에서, 로직은 또한 펌웨어 또는 마이크로-코드 등과 같이 하드웨어 내에 통합된 소프트웨어 또는 코드를 포함한다.
본 명세서에 사용된 값은 숫자, 상태, 로직 상태 또는 이진 로직 상태의 임의의 공지된 표현법을 포함한다. 때때로 로직 레벨, 로직 값 또는 논리 값의 사용은 또한 1 및 0으로 지칭되고, 이것은 단순히 이진 로직 상태를 나타낼 수 있다. 예를 들면, 1은 상위 로직 레벨을 지칭하고 0은 하위 로직 레벨을 지칭한다. 일실시예에서, 트랜지스터 또는 플래시 셀(flash cell) 등과 같은 저장 셀은 단일 로직 값 또는 다수의 로직 값을 보유할 수 있다. 그러나 컴퓨터 시스템 내의 다른 표현 값도 사용된다. 예를 들면 십진수 10은 또한 이진값 1010 및 16진법 문자 A로 표현될 수 있다. 그러므로 값은 컴퓨터 시스템 내에 보유될 수 있는 정보의 모든 표현을 포함한다.
더욱이 상태는 값 또는 값의 부분으로 표현될 수 있다. 예시로서, 로직 1 등과 같은 제 1 값은 디폴트 또는 초기 상태를 나타내는 한편, 로직 0 등과 같은 제 2 값은 비-디폴트 상태를 나타낼 수 있다. 추가하여 일실시예에서, 재설정 및 설정이라는 용어는 각각 디폴트 및 업데이트된 값 또는 상태를 각각 지칭한다. 예를 들면, 디폴트 값은 상위 로직 값, 즉 재설정(reset)을 포함할 가능성이 있고, 업데이트된 값은 하위 로직 값, 즉 설정(set)을 포함할 가능성이 있다. 임의의 값의 조합은 임의의 개수의 상태를 표현하는 데 이용될 수 있다는 것을 주지하라.
상술된 방법, 하드웨어, 소프트웨어, 펌웨어 또는 코드에 대한 실시예는 처리 요소에 의해 실행 가능한 머신-액세스 가능 또는 머신 판독 가능 매체 상에 저장된 인스트럭션 또는 코드를 통해 구현될 수 있다. 머신-액세스 가능/판독 가능 매체는 컴퓨터 또는 전자 시스템 등과 같이 머신에 의해 판독 가능한 형태로 정보를 제공(즉 저장 및/또는 전송)하는 임의의 메커니즘을 포함한다. 예를 들면, 머신-액세스 가능 매체는 정적 RAM(SRAM) 또는 동적 RAM(DRAM)과, ROM과, 자기 또는 광학 저장 매체 플래시 메모리 장치와, 전기 저장 장치, 광학 저장 장치, 음향 저장 장치 또는 다른 형태의 전파 신호(예를 들면 반송파(carrier waves), 적외선 신호, 디지털 신호) 저장 장치 등과 같은 랜덤 액세스 메모리(RAM)를 포함한다. 예를 들면, 머신은 전파 신호 상에서 전송될 정보를 보유할 수 있는 매체로부터 반송파 등과 같은 전파 신호의 수신을 통해 저장 장치를 액세스할 수 있다.
본 명세서 전반에 걸쳐 "하나의 실시예" 또는 "일실시예"라고 지칭된 것은 실시예와 관련하여 설명된 특정한 형상, 구조 또는 특징이 본 발명의 적어도 하나의 실시예에 포함된다는 것을 의미한다. 따라서 본 명세서에 걸쳐 여러 곳에서 "하나의 실시예에서" 또는 "일실시예에서"라는 용어의 표현은 반드시 동일한 실시예를 지칭하는 것은 아니다. 더욱이 특정 형상, 구조 또는 특징은 하나 이상의 실시예에서 임의의 적절한 방식으로 조합될 수 있다.
상술된 명세서에서, 특정 예시적인 실시예를 참조하여 세부 설명이 제시되었다. 그러나 첨부된 청구항에 설명된 본 발명의 넓은 정신 및 범주를 벗어나지 않으면서 다양한 수정 및 변경이 이루어질 수 있다는 것은 분명할 것이다. 따라서 명세 및 도면은 한정적 의미가 아니라 예시적 의미로 간주되어야 한다. 더욱이 상기 실시예의 사용 및 다른 예시적인 언어가 반드시 동일 실시예 또는 동일 예시를 지칭해야 하는 것은 아니지만, 동일한 실시예를 지칭할 가능성뿐만 아니라 상이한 별개의 실시예를 지칭할 수도 있다.
Claims (38)
- 비특권 소프트웨어(non-privileged software)에 의해 수정될 수 있으며, 트랜잭션 핸들러와 핸들러 이벤트에 대한 참조를 보유하는 저장 요소와,
상기 저장 요소에 연결되어 트랜잭션을 실행하고 상기 핸들러 이벤트에 응답하여 상기 저장 요소 내에 보유된 상기 트랜잭션 핸들러에 대한 상기 참조에 기초하여 소프트웨어로부터의 개입(intervention)없이 상기 트랜잭션으로부터 상기 트랜잭션 핸들러로 실행을 벡터화(to vector execution)하는 실행 자원을 포함하는
사용자 핸들러 등록 장치.
- 제 1 항에 있어서,
상기 저장 요소는 레지스터를 포함하고,
상기 트랜잭션 핸들러에 대한 상기 참조는 가상 어드레스를 포함하는
사용자 핸들러 등록 장치.
- 제 2 항에 있어서,
상기 트랜잭션으로부터 상기 트랜잭션 핸들러로 실행을 벡터화하는 상기 실행 자원은 상기 가상 어드레스 및 오프셋(offset)과 연관된 타겟 어드레스에 대한 점프 타입 연산을 실행하는 실행 자원을 포함하는
사용자 핸들러 등록 장치.
- 제 1 항에 있어서,
상기 비특권 소프트웨어는 트랜잭션 런타임 코드를 포함하는
사용자 핸들러 등록 장치.
- 제 1 항에 있어서,
상기 핸들러 이벤트는 비동기식 핸들러 이벤트를 포함하는
사용자 핸들러 등록 장치.
- 제 1 항에 있어서,
상기 핸들러 이벤트는 동기식 핸들러 이벤트를 포함하는
사용자 핸들러 등록 장치.
- 제 1 항에 있어서,
상기 핸들러 이벤트는 속성 정보의 부족, 속성 정보의 손실, 트랜잭션의 범주에서 불법적인 인스트럭션의 실행, 비-체크포인트형 레지스터에 대한 액세스, 모니터링된 데이터의 손실, 버퍼링된 데이터의 손실, 트랜잭션의 범주에서 금지된 메모리 유형에 대한 액세스, 예외(exception) 및 시스템 호출로 이루어진 그룹에서 선택된 이벤트를 포함하는
사용자 핸들러 등록 장치.
- 제 1 항에 있어서,
상기 비특권 소프트웨어에 의해 수정 가능하고, 상기 핸들러 이벤트를 포함하는 복수의 핸들러 이벤트를 지정하는 제 2 저장 요소를 더 포함하는
사용자 핸들러 등록 장치.
- 제 8 항에 있어서,
복수의 핸들러 이벤트를 지정하는 상기 제 2 저장 요소는 상기 복수의 핸들러 이벤트 중 하나에 각각의 비트가 대응하는 비트 벡터를 보유하고,
상기 핸들러 이벤트에 대응하는 비트는 상기 비특권 소프트웨어에 의해 설정되어 상기 실행 자원이 상기 핸들러 이벤트에 응답하여 상기 트랜잭션 핸들러로 실행을 벡터화할 수 있게 하는
사용자 핸들러 등록 장치.
- 제 8 항에 있어서,
상기 비특권 소프트웨어에 의해 판독 가능한 제 3 저장 요소를 더 포함하고,
상기 제 3 저장 요소는 상기 실행 자원이 상기 핸들러 이벤트에 응답하여 상기 트랜잭션 핸들러에 대한 상기 참조에 기초하여 실행을 벡터화하는 것에 응답하도록 상기 핸들러 이벤트를 지정하는 상태 값을 보유하는
사용자 핸들러 등록 장치.
- 제 10 항에 있어서,
실행 자원이 상기 트랜잭션으로부터 상기 트랜잭션 핸들러로 실행을 벡터화하기 전에 현재의 인스트럭션 포인터에 대한 참조를 가지고 업데이트되는 제 4 저장 요소를 더 포함하는
사용자 핸들러 등록 장치.
- 제 11 항에 있어서,
상기 트랜잭션 핸들러가 상기 핸들러 이벤트를 처리하는 것에 응답하여, 상기 실행 자원은 상기 트랜잭션으로 실행을 리턴(return)하기 위한 타겟으로서 상기 현재의 인스트럭션 포인터를 사용하여 점프 타입 인스트럭션을 실행하는
사용자 핸들러 등록 장치.
- 트랜잭션 핸들러의 어드레스에 대한 참조를 보유하는 비특권 레벨 소프트웨어에 의해 업데이트될 수 있는 레지스터와,
상기 트랜잭션 핸들러의 상기 어드레스에 대한 상기 참조에 기초하여 트랜잭션의 실행 동안에 특권 레벨 소프트웨어의 개입없이 핸들러 이벤트에 응답하여 상기 트랜잭션 핸들러로 제어 흐름을 전송하는 실행 로직을 포함하는
사용자 핸들러 등록 프로세서.
- 제 13 항에 있어서,
상기 트랜잭션 핸들러의 상기 어드레스는 상기 트랜잭션 핸들러의 시작 어드레스이고,
상기 트랜잭션 핸들러의 상기 어드레스에 대한 상기 참조는 가상 어드레스를 포함하는
사용자 핸들러 등록 프로세서.
- 제 13 항에 있어서,
상기 트랜잭션 핸들러의 상기 어드레스에 대한 상기 참조에 기초하여 트랜잭션의 실행 동안에 특권 레벨 소프트웨어의 개입없이 핸들러 이벤트에 응답하여 상기 트랜잭션 핸들러로 제어 흐름을 전송하는 상기 실행 로직은,
상기 레지스터 내에 타겟 어드레스로서 보유된 상기 트랜잭션 핸들러의 상기 어드레스에 대한 상기 참조로부터 상기 트랜잭션 핸들러의 상기 어드레스를 이용하는 제 1 점프 타입 연산을 실행하는 실행 로직을 포함하는
사용자 핸들러 등록 프로세서.
- 제 15 항에 있어서,
리턴 레지스터를 더 포함하고,
상기 실행 로직이 상기 레지스터 내에 타겟 어드레스로서 보유된 상기 트랜잭션 핸들러의 상기 어드레스에 대한 상기 참조로부터 상기 트랜잭션 핸들러의 상기 어드레스를 이용하는 상기 점프 타입 연산을 실행하기 전에, 상기 리턴 레지스터는 상기 실행 로직이 상기 제 1 점프 타입 연산을 실행하기 직전에 현재의 포인트에서 인스트럭션 포인터 어드레스에 대한 참조를 가지고 업데이트되는
사용자 핸들러 등록 프로세서.
- 제 16 항에 있어서,
상기 실행 로직은 상기 제 1 점프 타입 연산을 실행하는 것에 응답하여 상기 핸들러 이벤트를 처리하는 상기 트랜잭션 핸들러를 더 실행하고,
실행 로직이 상기 핸들러 이벤트를 처리하기 위해 상기 트랜잭션 핸들러를 실행한 후, 상기 실행 로직은 상기 실행 로직이 상기 제 1 점프 타입 연산을 실행하기 직전에 현재의 포인트로 리턴하도록 상기 리턴 레지스터 내에 보유된 상기 인스트럭션 포인터 어드레스에 대한 상기 참조로부터 상기 인스트럭션 포인터 어드레스를 이용하는 제 2 점프 타입 연산을 실행하는
사용자 핸들러 등록 프로세서.
- 제 13 항에 있어서,
상기 핸들러 이벤트는 속성 정보의 부족, 속성 정보의 손실 및 버퍼링된 데이터의 손실로 이루어진 그룹으로부터 선택된 비동기식 이벤트를 포함하는
사용자 핸들러 등록 프로세서.
- 제 13 항에 있어서,
상기 핸들러 이벤트는 트랜잭션의 범주에서 불법적인 인스트럭션의 실행, 비-체크포인트형 레지스터에 대한 액세스 동작, 불법 메모리 유형, 예외(exception) 및 시스템 호출로 이루어진 그룹에서 선택된 동기식 이벤트를 포함하는
사용자 핸들러 등록 프로세서.
- 제 13 항에 있어서,
상기 비특권 레벨 소프트웨어는 운영 시스템 소프트웨어, 커널 소프트웨어 및 가상 머신 모니터(virtual machine monitor : VMM) 소프트웨어로 이루어진 그룹으로부터 선택된 소프트웨어를 포함하는
사용자 핸들러 등록 프로세서.
- 비특권 소프트웨어(non-privileged software)에 의해 업데이트될 수 있으며, 복수의 트랜잭션 핸들러 이벤트를 지정할 수 있는 저장 요소와,
상기 복수의 트랜잭션 핸들러 이벤트 중 트랜잭션 핸들러 이벤트를 검출하는 것에 응답하여 트랜잭션으로부터 트랜잭션 핸들러로 실행이 벡터화되게 하는 실행 로직을 포함하는
사용자 핸들러 등록 장치.
- 제 21 항에 있어서,
상기 실행 로직은 상기 트랜잭션으로부터 상기 트랜잭션 핸들러로 실행을 벡터화하는 작업을 운영 시스템(OS)의 개입없이 실행하는
사용자 핸들러 등록 장치.
- 제 22 항에 있어서,
상기 비특권 소프트웨어는 트랜잭션 런타임 소프트웨어, 상기 트랜잭션을 포함하는 애플리케이션 코드 및 가상머신 코드로 이루어진 그룹으로부터 선택되는
사용자 핸들러 등록 장치.
- 제 21 항에 있어서,
상기 복수의 이벤트 중 제 1 트랜잭션 핸들러 이벤트는 비동기식 핸들러 이벤트를 포함하고,
상기 복수의 이벤트 중 제 2 트랜잭션 핸들러 이벤트는 동기식 핸들러 이벤트를 포함하는
사용자 핸들러 등록 장치.
- 삭제
- 제 21 항에 있어서,
상기 복수의 핸들러 이벤트는 속성 정보의 부족, 속성 정보의 손실, 트랜잭션의 범주에서 불법적인 인스트럭션의 실행, 비-체크포인트형 레지스터에 대한 액세스 및 모니터링된 데이터의 손실로 이루어지는 그룹으로부터 각각 개별적으로 선택되는
사용자 핸들러 등록 장치.
- 트랜잭션 핸들러에 대한 참조를 보유한 사용자-어드레스 가능 레지스터와, 제 2 레지스터와, 상기 사용자-어드레스 가능 레지스터 및 상기 제 2 레지스터에 연결된 실행 로직을 포함하는 프로세서와,
상기 프로세서에 연결된 입/출력(I/O) 장치를 포함하고,
트랜잭션의 실행 중에 핸들러 이벤트에 응답하여, 상기 실행 로직은 상기 트랜잭션 내에서 현재의 인스트럭션 위치에 대한 참조를 가지고 상기 제 2 레지스터를 업데이트하고, 상기 핸들러 이벤트를 처리하기 위해 상기 사용자-어드레스 가능 레지스터 내에 보유된 상기 트랜잭션 핸들러에 대한 상기 참조에 기초하여 제어 흐름이 상기 트랜잭션 핸들러로 향하게 하고, 상기 핸들러 이벤트를 처리하기 위해 상기 트랜잭션 핸들러를 실행한 후 상기 제 2 레지스터 내에 보유된 상기 현재의 인스트럭션 위치에 대한 상기 참조에 기초하여 제어 흐름이 상기 현재의 인스트럭션 위치로 다시 향하게 하는
사용자 핸들러 등록 시스템.
- 제 27 항에 있어서,
상기 트랜잭션 핸들러에 대한 상기 참조는 물리적 어드레스로 변환될 때, 상기 트랜잭션 핸들러의 시작 물리적 어드레스를 참조하는 가상 어드레스 및 오프셋을 포함하는
사용자 핸들러 등록 시스템.
- 제 28 항에 있어서,
상기 트랜잭션을 포함하는 사용자 코드는 실행될 때 상기 트랜잭션을 실행하기 전에 상기 사용자-어드레스 가능 레지스터에 상기 가상 어드레스 및 상기 오프셋을 로딩하는
사용자 핸들러 등록 시스템.
- 제 27 항에 있어서,
상기 트랜잭션 내의 상기 현재의 인스트럭션 위치에 대한 상기 참조는 상기 현재의 인스트럭션 위치와 연관된 인스트럭션 포인터 어드레스에 대한 참조를 포함하고,
상기 제 2 레지스터 내에 보유된 인스트럭션 포인터 어드레스에 대한 참조에 기초하여 제어 흐름을 상기 현재의 인스트럭션 위치로 향하게 하는 상기 실행 로직은, 상기 인스트럭션 포인터 어드레스를 리턴 타겟 어드레스로서 이용하여 리턴 점프 연산을 실행하는 상기 실행 로직을 포함하는
사용자 핸들러 등록 시스템.
- 제 30 항에 있어서,
상기 핸들러 이벤트를 처리하기 위해 상기 사용자-어드레스 가능 레지스터 내에 보유된 상기 트랜잭션 핸들러에 대한 상기 참조에 기초하여 제어 흐름이 상기 트랜잭션 핸들러를 향하게 하는 상기 실행 로직은,
상기 사용자-어드레스 가능 레지스터 내에 보유된 상기 트랜잭션 핸들러에 대한 상기 참조와 연관된 타겟 어드레스를 타겟 어드레스로 이용하여 점프 연산을 실행하는 상기 실행 로직을 포함하는
사용자 핸들러 등록 시스템.
- 프로세서의 하드웨어 내의 비특권 레벨 소프트웨어에 트랜잭션 핸들러를 등록하는 단계와,
핸들러 이벤트와 상기 프로세서의 하드웨어 내의 상기 트랜잭션 핸들러를 상기 비특권 레벨 소프트웨어를 가지고 연관시키는 단계와,
상기 프로세서를 가지고 트랜잭션을 실행하는 동안에 상기 핸들러 이벤트를 검출하는 단계와,
특권-레벨 소프트웨어의 개입없이 하드웨어 내에서 상기 트랜잭션의 실행으로부터 상기 트랜잭션 핸들러의 실행으로 제어 흐름을 향하게 하는 단계와,
상기 트랜잭션 핸들러를 가지고 상기 핸들러 이벤트를 처리한 후 상기 특권 레벨 소프트웨어의 개입없이 상기 트랜잭션의 실행으로 상기 제어 흐름을 리턴(returning)하는 단계를 포함하는
사용자 핸들러 등록 방법.
- 제 32 항에 있어서,
프로세서의 하드웨어 내의 비특권 레벨 소프트웨어에 트랜잭션 핸들러를 등록하는 상기 단계는, 상기 트랜잭션 핸들러와 연관된 어드레스의 표현을 가지고 제 1 레지스터를 로딩(loading)하는 단계를 포함하는
사용자 핸들러 등록 방법.
- 제 33 항에 있어서,
상기 트랜잭션의 실행으로부터 상기 트랜잭션 핸들러의 실행으로 제어 흐름을 향하게 하기 전에 제 2 레지스터 내에 인스트럭션 포인터 어드레스를 저장하는 단계를 더 포함하는
사용자 핸들러 등록 방법.
- 제 34 항에 있어서,
특권-레벨 소프트웨어의 개입없이 하드웨어 내에서 상기 트랜잭션의 실행으로부터 상기 트랜잭션 핸들러의 실행으로 제어 흐름을 향하게 하는 상기 단계는, 상기 트랜잭션 핸들러를 실행하는 데 있어서 상기 특권 레벨 소프트웨어의 개입없이 상기 트랜잭션 핸들러와 연관된 상기 어드레스로 실행을 점프(jumping)하는 단계를 포함하는
사용자 핸들러 등록 방법.
- 제 35 항에 있어서,
상기 트랜잭션 핸들러를 가지고 상기 핸들러 이벤트를 처리한 후 상기 특권 레벨 소프트웨어의 개입없이 상기 트랜잭션의 실행으로 상기 제어 흐름을 리턴하는 단계는, 상기 트랜잭션 핸들러를 가지고 상기 핸들러 이벤트를 처리한 후 상기 특권 레벨 소프트웨어의 개입없이 상기 제 2 레지스터 내에 저장된 상기 인스트럭션 포인터 어드레스로 실행을 점프하는 단계를 포함하는
사용자 핸들러 등록 방법.
- 제 34 항에 있어서,
상기 핸들러 이벤트를 검출하기 전에 제 3 레지스터 내에 상기 비특권 레벨 소프트웨어를 가지고 상기 핸들러 이벤트를 지정하는 단계를 더 포함하는
사용자 핸들러 등록 방법.
- 제 37 항에 있어서,
상기 핸들러 이벤트의 검출에 응답하여 상기 트랜잭션의 실행으로부터 상기 트랜잭션 하드웨어의 실행으로 상기 제어 흐름을 향하게 하기 전에 상기 핸들러 이벤트의 표현을 보유하도록 제 4 레지스터를 업데이트하는 단계를 더 포함하는
사용자 핸들러 등록 방법.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/346,518 US9785462B2 (en) | 2008-12-30 | 2008-12-30 | Registering a user-handler in hardware for transactional memory event handling |
US12/346,518 | 2008-12-30 | ||
PCT/US2009/068081 WO2010077872A2 (en) | 2008-12-30 | 2009-12-15 | Registering a user-handler in hardware for transactional memory event handling |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20110050724A KR20110050724A (ko) | 2011-05-16 |
KR101291016B1 true KR101291016B1 (ko) | 2013-07-30 |
Family
ID=42286511
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020117007724A KR101291016B1 (ko) | 2008-12-30 | 2009-12-15 | 사용자 핸들러 등록 장치, 프로세서, 시스템 및 방법 |
Country Status (7)
Country | Link |
---|---|
US (1) | US9785462B2 (ko) |
JP (2) | JP5650123B2 (ko) |
KR (1) | KR101291016B1 (ko) |
CN (1) | CN101950259B (ko) |
BR (1) | BRPI0920789A2 (ko) |
TW (1) | TWI476595B (ko) |
WO (1) | WO2010077872A2 (ko) |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9785462B2 (en) | 2008-12-30 | 2017-10-10 | Intel Corporation | Registering a user-handler in hardware for transactional memory event handling |
US8799582B2 (en) | 2008-12-30 | 2014-08-05 | Intel Corporation | Extending cache coherency protocols to support locally buffered data |
US9110808B2 (en) * | 2009-12-30 | 2015-08-18 | International Business Machines Corporation | Formation of an exclusive ownership coherence state in a lower level cache upon replacement from an upper level cache of a cache line in a private shared owner state |
US8782434B1 (en) | 2010-07-15 | 2014-07-15 | The Research Foundation For The State University Of New York | System and method for validating program execution at run-time |
US8606907B1 (en) | 2011-07-20 | 2013-12-10 | Google Inc. | Multi-tiered system for receiving and reporting web site traffic data |
US8560511B1 (en) * | 2011-07-20 | 2013-10-15 | Google Inc. | Fine-grain locking |
US8560685B1 (en) | 2011-07-20 | 2013-10-15 | Google Inc. | Probabilistic data storage owner election and replication protocol |
WO2013085518A1 (en) * | 2011-12-08 | 2013-06-13 | Intel Corporation | A method, apparatus, and system for efficiently handling multiple virtual address mappings during transactional execution |
WO2013089767A1 (en) * | 2011-12-16 | 2013-06-20 | Intel Corporation | Method and system using exceptions for code specialization in a computer architecture that supports transactions |
US9348642B2 (en) | 2012-06-15 | 2016-05-24 | International Business Machines Corporation | Transaction begin/end instructions |
US9436477B2 (en) | 2012-06-15 | 2016-09-06 | International Business Machines Corporation | Transaction abort instruction |
US20130339680A1 (en) | 2012-06-15 | 2013-12-19 | International Business Machines Corporation | Nontransactional store instruction |
US9740549B2 (en) | 2012-06-15 | 2017-08-22 | International Business Machines Corporation | Facilitating transaction completion subsequent to repeated aborts of the transaction |
US9448796B2 (en) | 2012-06-15 | 2016-09-20 | International Business Machines Corporation | Restricted instructions in transactional execution |
US9384004B2 (en) | 2012-06-15 | 2016-07-05 | International Business Machines Corporation | Randomized testing within transactional execution |
US8880959B2 (en) * | 2012-06-15 | 2014-11-04 | International Business Machines Corporation | Transaction diagnostic block |
US10437602B2 (en) | 2012-06-15 | 2019-10-08 | International Business Machines Corporation | Program interruption filtering in transactional execution |
US8682877B2 (en) * | 2012-06-15 | 2014-03-25 | International Business Machines Corporation | Constrained transaction execution |
US9619345B2 (en) | 2012-09-13 | 2017-04-11 | International Business Machines Corporation | Apparatus for determining failure context in hardware transactional memories |
US9122873B2 (en) | 2012-09-14 | 2015-09-01 | The Research Foundation For The State University Of New York | Continuous run-time validation of program execution: a practical approach |
US9069782B2 (en) | 2012-10-01 | 2015-06-30 | The Research Foundation For The State University Of New York | System and method for security and privacy aware virtual machine checkpointing |
US9424198B2 (en) * | 2012-11-30 | 2016-08-23 | Intel Corporation | Method, system and apparatus including logic to manage multiple memories as a unified exclusive memory |
US9411739B2 (en) * | 2012-11-30 | 2016-08-09 | Intel Corporation | System, method and apparatus for improving transactional memory (TM) throughput using TM region indicators |
US10061609B2 (en) | 2013-06-26 | 2018-08-28 | Intel Corporation | Method and system using exceptions for code specialization in a computer architecture that supports transactions |
JP6244916B2 (ja) | 2014-01-06 | 2017-12-13 | 富士通株式会社 | 演算処理装置,演算処理装置の制御方法及び情報処理装置 |
US9916161B2 (en) | 2015-06-25 | 2018-03-13 | Intel Corporation | Instruction and logic for tracking fetch performance bottlenecks |
US9733689B2 (en) | 2015-06-27 | 2017-08-15 | Intel Corporation | Hardware apparatuses and methods to perform transactional power management |
WO2017012667A1 (en) * | 2015-07-22 | 2017-01-26 | Huawei Technologies Co., Ltd. | Hardware transactional memory in non volatile memory with log and no lock |
US10037147B2 (en) * | 2015-12-14 | 2018-07-31 | International Business Machines Corporation | Sharing files in a multisystem environment |
US10324728B2 (en) | 2015-12-17 | 2019-06-18 | International Business Machines Corporation | Lightweight interrupts for condition checking |
US10318295B2 (en) * | 2015-12-22 | 2019-06-11 | Intel Corporation | Transaction end plus commit to persistence instructions, processors, methods, and systems |
US10552212B2 (en) * | 2016-11-28 | 2020-02-04 | Arm Limited | Data processing |
US10684896B2 (en) | 2017-02-20 | 2020-06-16 | Tsinghua University | Method for processing asynchronous event by checking device and checking device |
CN108345471B (zh) * | 2017-05-08 | 2019-10-25 | 清华大学 | 检测装置处理异步事件的方法及检测装置 |
US10783011B2 (en) | 2017-09-21 | 2020-09-22 | Qualcomm Incorporated | Deadlock free resource management in block based computing architectures |
US10990369B2 (en) * | 2018-04-30 | 2021-04-27 | EMC IP Holding Company LLC | Repurposing serverless application copies |
WO2020060450A1 (en) * | 2018-09-17 | 2020-03-26 | Telefonaktiebolaget Lm Ericsson (Publ) | Bit register in shared memory indicating the processor and the software handlers |
CN110333935B (zh) * | 2019-06-05 | 2022-12-02 | 创新先进技术有限公司 | 事务请求处理方法及装置 |
EP4296906A4 (en) * | 2021-03-31 | 2024-03-27 | Huawei Technologies Co., Ltd. | SYNCHRONIZATION APPARATUS AND METHOD |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040049255A (ko) * | 2002-12-05 | 2004-06-11 | 인터내셔널 비지네스 머신즈 코포레이션 | 프로세서 내에서의 인터럽트 처리 방법, 프로세서 및데이터 처리 시스템 |
Family Cites Families (70)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB8728494D0 (en) | 1987-12-05 | 1988-01-13 | Int Computers Ltd | Multi-cache data storage system |
JP2651037B2 (ja) | 1990-04-23 | 1997-09-10 | 株式会社日立製作所 | アドレスバス制御装置 |
US6216200B1 (en) | 1994-10-14 | 2001-04-10 | Mips Technologies, Inc. | Address queue |
JP3546694B2 (ja) | 1998-03-31 | 2004-07-28 | 日本電気株式会社 | マルチスレッド計算機システム及びマルチスレッド実行制御方法 |
US6526481B1 (en) | 1998-12-17 | 2003-02-25 | Massachusetts Institute Of Technology | Adaptive cache coherence protocols |
US6272602B1 (en) | 1999-03-08 | 2001-08-07 | Sun Microsystems, Inc. | Multiprocessing system employing pending tags to maintain cache coherence |
US6549996B1 (en) | 1999-07-02 | 2003-04-15 | Oracle Corporation | Scalable multiple address space server |
US6490668B2 (en) | 2000-12-15 | 2002-12-03 | Hewlett-Packard Company | System and method for dynamically moving checksums to different memory locations |
US7035963B2 (en) | 2000-12-27 | 2006-04-25 | Intel Corporation | Method for resolving address space conflicts between a virtual machine monitor and a guest operating system |
US6499085B2 (en) | 2000-12-29 | 2002-12-24 | Intel Corporation | Method and system for servicing cache line in response to partial cache line request |
US20030005219A1 (en) | 2001-06-29 | 2003-01-02 | Royer Robert J. | Partitioning cache metadata state |
US7272622B2 (en) | 2001-10-29 | 2007-09-18 | Intel Corporation | Method and apparatus for parallel shift right merge of data |
US7565687B2 (en) | 2002-02-08 | 2009-07-21 | International Business Machines Corporation | Transmission control system, server, terminal station, transmission control method, program and storage medium |
US7032125B2 (en) | 2002-04-25 | 2006-04-18 | Lsi Logic Corporation | Method for loosely coupling metadata and data in a storage array |
US7003631B2 (en) | 2002-05-15 | 2006-02-21 | Broadcom Corporation | System having address-based intranode coherency and data-based internode coherency |
US6944796B2 (en) * | 2002-06-27 | 2005-09-13 | Intel Corporation | Method and system to implement a system event log for system manageability |
US7062610B2 (en) | 2002-09-30 | 2006-06-13 | Advanced Micro Devices, Inc. | Method and apparatus for reducing overhead in a data processing system with a cache |
FR2859307A1 (fr) | 2003-08-27 | 2005-03-04 | St Microelectronics Sa | Memoire cache a lecture asynchrone et dispositif de controle de l'acces a une memoire de donnees comprenant une telle memoire cache |
US20050050305A1 (en) * | 2003-08-28 | 2005-03-03 | Kissell Kevin D. | Integrated mechanism for suspension and deallocation of computational threads of execution in a processor |
US7587615B2 (en) | 2003-09-12 | 2009-09-08 | International Business Machines Corporation | Utilizing hardware transactional approach to execute code after initially utilizing software locking by employing pseudo-transactions |
US20050086446A1 (en) | 2003-10-04 | 2005-04-21 | Mckenney Paul E. | Utilizing software locking approach to execute code upon failure of hardware transactional approach |
US20050091459A1 (en) | 2003-10-23 | 2005-04-28 | Nhon Quach | Flexible mechanism for enforcing coherency among caching structures |
US8407433B2 (en) | 2007-06-25 | 2013-03-26 | Sonics, Inc. | Interconnect implementing internal controls |
US7237131B2 (en) | 2003-12-30 | 2007-06-26 | Intel Corporation | Transaction-based power management in a computer system |
US7395374B2 (en) | 2004-01-20 | 2008-07-01 | Hewlett-Packard Company, L.P. | System and method for conflict responses in a cache coherency protocol with ordering point migration |
US7177987B2 (en) | 2004-01-20 | 2007-02-13 | Hewlett-Packard Development Company, L.P. | System and method for responses between different cache coherency protocols |
GB0407384D0 (en) * | 2004-03-31 | 2004-05-05 | Ignios Ltd | Resource management in a multicore processor |
US9189230B2 (en) | 2004-03-31 | 2015-11-17 | Intel Corporation | Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution |
ATE385646T1 (de) | 2004-04-14 | 2008-02-15 | Telecom Italia Spa | Eine methode und ein system zur bedienung der zustellung eines inhalts in computernetzen |
US7644239B2 (en) | 2004-05-03 | 2010-01-05 | Microsoft Corporation | Non-volatile memory cache performance improvement |
US7395382B1 (en) | 2004-08-10 | 2008-07-01 | Sun Microsystems, Inc. | Hybrid software/hardware transactional memory |
JP4431022B2 (ja) | 2004-10-18 | 2010-03-10 | 株式会社日立製作所 | コンピュータシステム及びその制御方法 |
US8607235B2 (en) | 2004-12-30 | 2013-12-10 | Intel Corporation | Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention |
US7337280B2 (en) | 2005-02-10 | 2008-02-26 | International Business Machines Corporation | Data processing system and method for efficient L3 cache directory management |
US7627784B1 (en) * | 2005-04-06 | 2009-12-01 | Altera Corporation | Modular processor debug core connection for programmable chip systems |
KR100704037B1 (ko) | 2005-04-15 | 2007-04-04 | 삼성전자주식회사 | 이종의 비휘발성 메모리를 가지는 데이터 저장장치와 그의구동 방법 |
US20060236039A1 (en) | 2005-04-19 | 2006-10-19 | International Business Machines Corporation | Method and apparatus for synchronizing shared data between components in a group |
US7490199B2 (en) | 2005-05-09 | 2009-02-10 | Noam Camiel | System and method for safe removal of a removable device from a digital appliance |
US7350034B2 (en) * | 2005-06-20 | 2008-03-25 | International Business Machines Corporation | Architecture support of best-effort atomic transactions for multiprocessor systems |
US7882339B2 (en) * | 2005-06-23 | 2011-02-01 | Intel Corporation | Primitives to enhance thread-level speculation |
US7533215B2 (en) | 2005-09-15 | 2009-05-12 | Intel Corporation | Distributed and packed metadata structure for disk cache |
US8001538B2 (en) | 2005-12-07 | 2011-08-16 | Microsoft Corporation | Software accessible cache metadata |
US8225297B2 (en) | 2005-12-07 | 2012-07-17 | Microsoft Corporation | Cache metadata identifiers for isolation and sharing |
US8180967B2 (en) | 2006-03-30 | 2012-05-15 | Intel Corporation | Transactional memory virtualization |
US8180977B2 (en) | 2006-03-30 | 2012-05-15 | Intel Corporation | Transactional memory in out-of-order processors |
US20070300238A1 (en) | 2006-06-21 | 2007-12-27 | Leonidas Kontothanassis | Adapting software programs to operate in software transactional memory environments |
US20080005504A1 (en) * | 2006-06-30 | 2008-01-03 | Jesse Barnes | Global overflow method for virtualized transactional memory |
US9798590B2 (en) * | 2006-09-07 | 2017-10-24 | Intel Corporation | Post-retire scheme for tracking tentative accesses during transactional execution |
US7949794B2 (en) | 2006-11-02 | 2011-05-24 | Intel Corporation | PCI express enhancements and extensions |
US7783805B2 (en) | 2006-11-29 | 2010-08-24 | Cisco Technology, Inc. | Interlocking input/outputs on a virtual logic unit number |
US7669040B2 (en) * | 2006-12-15 | 2010-02-23 | Sun Microsystems, Inc. | Method and apparatus for executing a long transaction |
US7937535B2 (en) | 2007-02-22 | 2011-05-03 | Arm Limited | Managing cache coherency in a data processing apparatus |
US7917701B2 (en) | 2007-03-12 | 2011-03-29 | Arm Limited | Cache circuitry, data processing apparatus and method for prefetching data by selecting one of a first prefetch linefill operation and a second prefetch linefill operation |
US8751859B2 (en) | 2007-05-10 | 2014-06-10 | International Business Machines Corporation | Monitoring lost data in a storage system |
US9009452B2 (en) * | 2007-05-14 | 2015-04-14 | International Business Machines Corporation | Computing system with transactional memory using millicode assists |
US8095741B2 (en) | 2007-05-14 | 2012-01-10 | International Business Machines Corporation | Transactional memory computing system with support for chained transactions |
US20080307169A1 (en) | 2007-06-06 | 2008-12-11 | Duane Arlyn Averill | Method, Apparatus, System and Program Product Supporting Improved Access Latency for a Sectored Directory |
US9280397B2 (en) | 2007-06-27 | 2016-03-08 | Intel Corporation | Using buffered stores or monitoring to filter redundant transactional accesses and mechanisms for mapping data to buffered metadata |
US8195832B2 (en) | 2007-12-12 | 2012-06-05 | Alcatel Lucent | Facilitating management of layer 2 hardware address table based on packet priority information |
US8078807B2 (en) | 2007-12-27 | 2011-12-13 | Intel Corporation | Accelerating software lookups by using buffered or ephemeral stores |
US8108619B2 (en) | 2008-02-01 | 2012-01-31 | International Business Machines Corporation | Cache management for partial cache line operations |
US20100122073A1 (en) | 2008-11-10 | 2010-05-13 | Ravi Narayanaswamy | Handling exceptions in software transactional memory systems |
US8555016B2 (en) | 2008-12-17 | 2013-10-08 | Intel Corporation | Unified optimistic and pessimistic concurrency control for a software transactional memory (STM) system |
US9785462B2 (en) | 2008-12-30 | 2017-10-10 | Intel Corporation | Registering a user-handler in hardware for transactional memory event handling |
US8627017B2 (en) | 2008-12-30 | 2014-01-07 | Intel Corporation | Read and write monitoring attributes in transactional memory (TM) systems |
US8627014B2 (en) | 2008-12-30 | 2014-01-07 | Intel Corporation | Memory model for hardware attributes within a transactional memory system |
US8806101B2 (en) | 2008-12-30 | 2014-08-12 | Intel Corporation | Metaphysical address space for holding lossy metadata in hardware |
US8799582B2 (en) | 2008-12-30 | 2014-08-05 | Intel Corporation | Extending cache coherency protocols to support locally buffered data |
US8370577B2 (en) | 2009-06-26 | 2013-02-05 | Microsoft Corporation | Metaphysically addressed cache metadata |
US8095824B2 (en) | 2009-12-15 | 2012-01-10 | Intel Corporation | Performing mode switching in an unbounded transactional memory (UTM) system |
-
2008
- 2008-12-30 US US12/346,518 patent/US9785462B2/en not_active Expired - Fee Related
-
2009
- 2009-12-15 KR KR1020117007724A patent/KR101291016B1/ko active IP Right Grant
- 2009-12-15 BR BRPI0920789A patent/BRPI0920789A2/pt active Search and Examination
- 2009-12-15 JP JP2011536630A patent/JP5650123B2/ja not_active Expired - Fee Related
- 2009-12-15 WO PCT/US2009/068081 patent/WO2010077872A2/en active Application Filing
- 2009-12-17 TW TW098143374A patent/TWI476595B/zh not_active IP Right Cessation
- 2009-12-25 CN CN200911000212.5A patent/CN101950259B/zh not_active Expired - Fee Related
-
2014
- 2014-01-10 JP JP2014003360A patent/JP5944417B2/ja not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040049255A (ko) * | 2002-12-05 | 2004-06-11 | 인터내셔널 비지네스 머신즈 코포레이션 | 프로세서 내에서의 인터럽트 처리 방법, 프로세서 및데이터 처리 시스템 |
Also Published As
Publication number | Publication date |
---|---|
CN101950259A (zh) | 2011-01-19 |
TWI476595B (zh) | 2015-03-11 |
WO2010077872A3 (en) | 2010-09-23 |
US9785462B2 (en) | 2017-10-10 |
KR20110050724A (ko) | 2011-05-16 |
CN101950259B (zh) | 2014-08-20 |
JP2014089752A (ja) | 2014-05-15 |
JP5650123B2 (ja) | 2015-01-07 |
WO2010077872A2 (en) | 2010-07-08 |
JP5944417B2 (ja) | 2016-07-05 |
JP2012509529A (ja) | 2012-04-19 |
US20100169894A1 (en) | 2010-07-01 |
BRPI0920789A2 (pt) | 2015-12-22 |
TW201037524A (en) | 2010-10-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101291016B1 (ko) | 사용자 핸들러 등록 장치, 프로세서, 시스템 및 방법 | |
JP6342970B2 (ja) | トランザクショナルメモリ(tm)システムにおける読み出し及び書き込み監視属性 | |
JP5860450B2 (ja) | ローカルにバッファリングされたデータをサポートするためのキャッシュコヒーレンスプロトコルの拡張 | |
JP5416223B2 (ja) | トランザクショナルメモリシステム内でのハードウェア属性のメモリモデル | |
JP5608738B2 (ja) | 無制限トランザクショナルメモリ(utm)システムの最適化 | |
US8195898B2 (en) | Hybrid transactions for low-overhead speculative parallelization | |
US8612950B2 (en) | Dynamic optimization for removal of strong atomicity barriers | |
US9052947B2 (en) | Unified optimistic and pessimistic concurrency control for a software transactional memory (STM) system | |
US20100122073A1 (en) | Handling exceptions in software transactional memory systems | |
JP6023765B2 (ja) | 無制限トランザクショナルメモリ(utm)システムの最適化 | |
JP6318440B2 (ja) | 無制限トランザクショナルメモリ(utm)システムの最適化 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20160630 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20170704 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20180628 Year of fee payment: 6 |