KR101634481B1 - 트랜잭션 처리 - Google Patents

트랜잭션 처리 Download PDF

Info

Publication number
KR101634481B1
KR101634481B1 KR1020147034662A KR20147034662A KR101634481B1 KR 101634481 B1 KR101634481 B1 KR 101634481B1 KR 1020147034662 A KR1020147034662 A KR 1020147034662A KR 20147034662 A KR20147034662 A KR 20147034662A KR 101634481 B1 KR101634481 B1 KR 101634481B1
Authority
KR
South Korea
Prior art keywords
transaction
type
instruction
execution
command
Prior art date
Application number
KR1020147034662A
Other languages
English (en)
Other versions
KR20150013740A (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 KR20150013740A publication Critical patent/KR20150013740A/ko
Application granted granted Critical
Publication of KR101634481B1 publication Critical patent/KR101634481B1/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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
    • 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

Abstract

트랜잭션 시작 명령을 통해서 트랜잭션이 개시된다. 트랜잭션의 실행 동안, 트랜잭션은 중단될 수 있다. 만일 트랜잭션이 중단되면, 트랜잭션의 유형에 대한 판정이 이루어진다. 트랜잭션이 제1 유형의 트랜잭션인 것에 기초하여, 트랜잭션 시작 명령에서 실행을 재개하고, 트랜잭션이 제2 유형인 것에 기초하여, 트랜잭션 시작 명령 다음에 오는 명령에서 실행을 재개한다. 트랜잭션 유형과 상관없이, 실행을 재개하는 것은 트랜잭션 시작 명령에 명시된 하나 또는 그 이상의 레지스터들을 복원하고 트랜잭션 저장들을 폐기하는 것을 포함한다. 한 유형의 트랜잭션(비제약 트랜잭션)에서, 상기 재개하는 것은 정보를 트랜잭션 진단 블록에 저장하는 것을 포함한다.

Description

트랜잭션 처리{TRANSACTIONAL PROCESSING}
하나 또는 그 이상의 특징들은 일반적으로 다중 처리 컴퓨팅 환경들에 관한 것이고, 구체적으로 그러한 컴퓨팅 환경들 내에서 트랜잭션 처리에 관한 것이다.
멀티프로세서 프로그래밍에서 다중 중앙 처리 장치들(CPU들)에 의한 동일한 스토리지 위치에 대한 업데이트(updates)를 위한 도전이 끈질기게 이어지고 있다. AND 연산 같은 단순한 논리 연산들을 포함하여 스토리지 위치들을 업데이트하는 많은 명령들도 그 위치에 대한 다중 액세스에 대하여 도전하고 있다. 예를 들어, 우선, 스토리지 위치가 페치되고, 그 다음에, 업데이트된 결과가 다시 저장된다.
다중 CPU들이 동일한 스토리지 위치를 안전하게 업데이트하기 위하여, 그 위치에 대한 액세스는 직렬화된다(serialized). 인터내셔널 비지네스 머신즈 코포레이션에 의해 예전에 공급된 S/360 아키텍처와 함께 소개된 한 명령인 TEST AND SET(테스트 및 세트) 명령은 스토리지 위치의 인터로크 업데이트(interlocked update)를 제공하였다. 인터로크 업데이트가 의미하는 바는, 다른 CPU들과 입력/출력(I/O) 서브시스템(예를 들어, 채널 서브시스템)에 의해 관찰될 때, 상기 명령의 전체 스토리지 액세스가 원자적으로 발생하는 것으로 보인다는 것이다. 그 후에, 인터내셔널 비지네스 머신즈 코포레이션에 의해 공급된 S/370 아키텍처는 COMPARE AND SWAP(비교 및 교환) 명령 및 COMPARE DOUBLE AND SWAP(이중 비교 및 교환) 명령을 소개하였으며, 이 명령들은 인터로크 업데이트를 수행하기 위한 더 정교한 수단을 제공하고, 일반적으로 로크 워드(lock word)(또는 세마포어)로 알려진 것의 구현을 가능하게 한다. 최근에 추가된 명령들은 추가적인 인터로크 업데이트 능력들을 제공하는데, COMPARE AND SWAP AND PURGE(비교 및 교환 및 소거) 명령, 및 COMPARE AND SWAP AND STORE(비교 및 교환 및 저장) 명령이 포함된다. 하지만, 이 명령들 모두는 단지 단일 스토리지 위치에 대해서만 인터로킹(interlocking)을 제공한다.
더 복잡한 프로그램 기술들은 이중 연결 목록에 엘리먼트를 추가할 때처럼 다중 스토리지 위치들의 인터로크 업데이트를 필요로할 수 있다. 그러한 연산에서, 다른 CPU들과 I/O 서브시스템에 의해 관찰될 때, 전방향 포인터와 역방향 포인터는 모두 동시에 업데이트되는 것으로 보인다. 그러한 다중 위치 업데이트를 실현하기 위해서, 프로그램은 로크 워드 같은 별개의 단일 직렬화 요소를 강제로 사용하게 된다. 하지만, 로크 워드들은 보증되는 것보다 훨씬 더 조악한 수준의 직렬화를 제공할 수 있는데, 예를 들면, 로크 워드들은 단지 두 엘리먼트만 업데이트되는데도 불구하고 전체 수백만 엘리먼트들의 큐(queue)를 직렬화할 수 있다. 프로그램은 아주 세밀한(finer-grained) 직렬화(예를 들어, 로크 지점들의 계층)를 사용하도록 데이터를 구조화하지만, 그것은 만일 상기 계층이 위반될 경우의 잠재적인 교착 상태 상황들(potential deadlock situations)과, 만일 상기 프로그램이 하나 또는 그 이상의 로크들을 보유하고 있는 중에 오류가 발생하거나 또는 로크가 획득될 수 없을 경우의 복구 이슈들(recovery issues) 같은 추가적인 문제들을 발생시킬 수 있다.
전술한 것에 더하여, 프로그램이 일련의 명령들을 실행하고 그 결과가 예외 조건으로 나오거나 나오지 않을 수 있는 상황들은 많이 있다. 만일 예외 조건이 발생하지 않으면 프로그램은 계속되지만, 만일 예외가 인지되면 프로그램은 그 예외 조건을 제거하기 위해 교정 조치를 취할 수 있다. 한 예로서, 자바(Java)는 그러한 실행을 예를 들어 추론적 실행(speculative execution), 기능의 부분적 인라이닝(partial in-lining of a function), 및/또는 포인터 널 검사의 순서 재정렬(re-sequencing of pointer null checking)에 활용할 수 있다.
인터내셔널 비지네스 머신즈 코포레이션에 의해 공급되는 z/OS 및 그 이전 세대들 같은 고전적인 운영체제 환경들에서, 프로그램은 발생할 수 있는 어느 프로그램-예외 조건이든 인터셉트할 수 있는 복구 환경을 구축한다. 만일 프로그램이 예외를 인터셉트하지 않으면, 운영체제는 운영체제가 처리할 준비가 되어 있지 않은 예외들에 대하여 통상적으로 프로그램을 비정상적으로 종료시킨다. 그러한 환경을 구축하고 활용하는 것은 비용이 많이 들고 복잡하다.
컴퓨팅 환경 내에서 트랜잭션의 실행을 제어하기 위한 컴퓨터 프로그램 제품의 제공을 통해서 선행 기술의 단점들이 극복되고 장점들이 제공된다. 상기 컴퓨터 프로그램 제품은, 처리 회로에 의해 판독 가능한 그리고 어떤 방법을 수행하기 위해 상기 처리 회로에 의해 실행할 명령들을 저장하는, 컴퓨터 판독 가능 스토리지 매체를 포함한다. 상기 방법은, 예를 들어, 프로세서에 의해 트랜잭션 시작 명령을 통해서 트랜잭션 모드에서 트랜잭션의 실행을 개시하는 단계―상기 트랜잭션 시작 명령은 제1 유형의 트랜잭션 또는 제2 유형의 트랜잭션 중 어느 하나를 시작하고, 상기 트랜잭션은 실행할 복수의 명령들을 포함함―; 트랜잭션 모드에 있는 것에 기초하여, 선택된 트랜잭션이 완료될 때까지 메인 메모리에 대한 저장을 커밋(commit)하는 것을 효과적으로 지연시키는 단계; 상기 트랜잭션이 중단되고 상기 트랜잭션이 제1 유형의 트랜잭션인 것에 기초하여, 상기 트랜잭션 시작 명령에 실행을 재개하는 단계; 및 상기 트랜잭션이 중단되고 상기 트랜잭션이 제2 유형의 트랜잭션인 것에 기초하여, 프로그램 순서에서 상기 트랜잭션 시작 명령 바로 다음에 오는 다음 순차 명령에 실행을 재개하는 단계를 포함한다.
하나 또는 그 이상의 실시 예들과 관련된 방법들과 시스템들이 또한 여기에서 기술되고 청구된다. 추가로, 하나 또는 그 이상의 실시 예들과 관련된 서비스들 또한 여기에서 기술되고 청구될 수 있다.
추가적인 특징들과 장점들이 구현된다. 다른 실시 예들과 특징들이 여기에서 상세하게 기술되며 청구하는 발명의 일부로 간주된다.
하나 또는 그 이상의 특징들이 구체적으로 언급되고 본 명세서의 끝 부분의 청구 범위에서 예시로서 분명하게 청구된다. 전술한 것과 다른 대상들, 특징들, 및 장점들은 다음과 같은 내용으로 첨부되는 도면들과 그 다음에 오는 발명을 실시하기 위한 구체적인 내용을 참조하면 분명해진다.
도 1은 컴퓨팅 환경의 한 실시 예를 도시한다.
도 2a는 Transaction Begin(트랜잭션 시작, TBEGIN) 명령의 한 예를 도시한다.
도 2b는 도 2a의 TBEGIN 명령의 한 필드의 더 상세한 사항의 한 실시 예를 도시한다.
도 3a는 제약 Transaction Begin(TBEGINC) 명령의 한 예를 도시한다.
도 3b는 도 3a의 TBEGINC 명령의 한 필드의 더 상세한 사항의 한 실시 예를 도시한다.
도 4는 Transaction End(트랜잭션 종료, TEND) 명령의 한 예를 도시한다.
도 5는 Transaction Abort(트랜잭션 중단, TABORT) 명령의 한 예를 도시한다.
도 6은 내포된(nested) 트랜잭션들의 한 예를 도시한다.
도 7은 NONTRANSACTIONAL STORE(비트랜잭션 저장, NTSTG) 명령의 한 예를 도시한다.
도 8은 EXTRACT TRANSACTION NESTING DEPTH(트랜잭션 내포 깊이 추출, ETND) 명령의 한 예를 도시한다.
도 9는 트랜잭션 진단 블록(transaction diagnostic block, TDB)의 한 예를 도시한다.
도 10은 중단의 예시 이유들을 연관된 중단 코드들 및 조건 코드들과 함께 도시한다.
도 11은 TBEGINC 명령을 실행하는 것과 연관된 로직의 한 실시 예를 도시한다.
도 12는 TBEGIN 명령을 실행하는 것과 연관된 로직의 한 실시 예를 도시한다.
도 13은 TEND 명령을 실행하는 것과 연관된 로직의 한 실시 예를 도시한다.
도 14는 트랜잭션 중단 처리와 연관된 로직의 한 실시 예를 도시한다.
도 15a는 트랜잭션 처리와 연관된 로직의 한 실시 예를 도시한다.
도 15b는 비제약 트랜잭션의 중단 이후에 처리를 재개하는 것과 연관된 로직의 한 실시 예를 도시한다.
도 16a와 16b는 큐 엘리먼트를 큐 엘리먼트들의 이중 연결 목록으로 삽입하는 것의 일 예를 도시한다.
도 17은 컴퓨터 프로그램 제품의 한 실시 예를 도시한다.
도 18은 호스트 컴퓨터 시스템의 한 실시 예를 도시한다.
도 19는 컴퓨터 시스템의 추가 예를 도시한다.
도 20은 컴퓨터 네트워크를 포함하는 컴퓨터 시스템의 또 다른 예를 도시한다.
도 21은 컴퓨터 시스템의 여러 엘리먼트들의 한 실시 예를 도시한다.
도 22a는 도 21의 컴퓨터 시스템의 실행 유닛의 한 실시 예를 도시한다.
도 22b는 도 21의 컴퓨터 시스템의 분기 유닛의 한 실시 예를 도시한다.
도 22c는 도 21의 컴퓨터 시스템의 로드/저장 유닛의 한 실시 예를 도시한다.
도 23은 에뮬레이트된 호스트 컴퓨터 시스템의 한 실시 예를 도시한다.
한 특징에 따라서, 트랜잭션 실행(TX) 퍼실리티가 제공된다. 이 퍼실리티는 명령들에 대한 트랜잭션 처리를 제공하고, 하나 또는 그 이상의 실시 예들에서, 아래에 기술되는 바와 같이 각각 다른 실행 모드를 제공하며, 트랜잭션 처리의 내포 레벨들 또한 제공한다.
이 트랜잭션 실행 퍼실리티는 트랜잭션 실행(TX) 모드라 불리는 CPU 상태(state)를 도입한다. CPU 리셋 후에, 그 CPU는 TX 모드에 있지 않는다. 상기 CPU는 TRANSACTION BEGIN(트랜잭션 시작) 명령에 의해 TX 모드로 진입한다. 상기 CPU는 (a) 최외부(outermost) TRANSACTION END(트랜잭션 종료) 명령(내부와 외부에 대한 더 상세한 사항은 이후에 나옴) 또는 (b) 상기 트랜잭션이 중단됨 둘 중 하나에 의해 TX 모드에서 벗어난다. TX 모드에 있는 동안, 상기 CPU에 의한 스토리지 액세스는 다른 CPU들과 I/O 서브시스템에 의해 관찰될 때 블록-동시적(block-concurrent)으로 보인다. 상기 스토리지 액세스는 (a) 상기 최외부 트랜잭션이 중단 없이 종료될 때(즉, 예를 들어, 상기 CPU의 로컬 캐시 또는 버퍼에서 이루어진 업데이트들은 실제 메모리에 전파되고 저장되며 다른 CPU들에 보임) 스토리지에 커밋되거나 또는 (b) 만일 상기 트랜잭션이 중단되면 폐기된다.
트랜잭션들은 내포될 수 있다. 즉, 상기 CPU가 TX 모드에 있는 동안, 상기 CPU는 또 다른 TRANSACTION BEGIN(트랜잭션 시작) 명령을 실행할 수 있다. 상기 CPU가 TX 모드로 진입되게 하는 명령은 최외부 TRANSACTION BEGIN(트랜잭션 시작)이라 불리고, 유사하게 상기 프로그램은 최외부 트랜잭션에 있다고 말한다. TRANSACTION BEGIN(트랜잭션 시작)의 이후 실행들은 내부 명령들(inner instructions)이라 불리고, 상기 프로그램은 내부 트랜잭션을 실행한다. 상기 모델은 최소 내포 깊이와 모델-종속적인 최대 내포 깊이를 제공한다. EXTRACT TRANSACTION NESTING DEPTH(트랜잭션 내포 깊이 추출) 명령은 현재의 내포 깊이 값을 반환하며(return), 추가 실시 예에서는 최대 내포 깊이 값을 반환할 수도 있다. 이 기술은 "평탄화된 내포(flattened nesting)"라 불리는 모델을 사용하는데, 이 평탄화된 내포 모델에서 어느 내포 깊이에서든 중단 조건은 모든 레벨의 트랜잭션을 중단시키고, 제어는 최외부 TRANSACTION BEGIN(트랜잭션 시작) 다음에 오는 명령으로 반환된다.
트랜잭션의 처리 동안, 한 CPU에 의해 이루어지는 트랜잭션 액세스는 (a) 다른 CPU에 의해 이루어지는 트랜잭션 액세스 또는 비트랜잭션 액세스와 충돌한다고 하거나, 또는 (b) I/O 서브시스템에 의해 이루어지는 비트랜잭션 액세스와 충돌한다고 말한다(만일 두 액세스들이 동일한 캐시 라인 내의 임의 위치에 대한 것이고, 두 액세스 중 하나 또는 모두가 저장(store)일 경우). 다른 말로 하면, 트랜잭션 실행이 생산적이(productive) 되도록 하기 위해, 상기 CPU는 커밋할 때까지 트랜잭션 액세스를 하는 것으로 관찰되지 않는다. 이 프로그래밍 모델은 어떤 환경들에서는 매우 효과적일 수 있는데, 예를 들면, 백만개의 엘리먼트들의 이중 연결 목록에서 두 지점을 업데이트 하는 경우를 들 수 있다. 하지만, 만일 트랜잭션 액세스되는 스토리지 위치들에 대하여 경쟁(contention)이 많으면, 덜 효과적일 수도 있다.
트랜잭션 실행의 한 모델(여기에서는 비제약 트랜잭션이라 불림)에서, 트랜잭션이 중단될 때, 프로그램은 그 중단 조건이 더이상 존재하지 않기를 희망하며 그 트랜잭션의 재구동(re-drive)을 시도하거나, 또는 프로그램은 등가의 비트랜잭션 경로(equivalent non-transactional path)로 "폴백(fall back)"할 수 있다. 트랜잭션 실행의 또 다른 모델(여기에서는 제약 트랜잭션이라 불림)에서, 중단된 트랜잭션은 CPU에 의해 자동으로 재구동되고, 제약 위반들(constraint violations)이 없을시에, 상기 제약 트랜잭션은 최종적인 완료(eventual completion)를 보장받는다.
트랜잭션을 개시(initiating)할 때, 프로그램은 여러 제어들을 명시할 수 있는데, 그 제어들의 예는 다음과 같다: (a) 만일 상기 트랜잭션이 중단되면 어느 범용 레지스터들이 자신들의 원래 콘텐츠로 복원될 것인가, (b) 상기 트랜잭션이 예를 들어 부동 소수점 레지스터들과 부동 소수점 제어 레지스터를 포함하여 부동-소수점-레지스터 컨텍스트(context)를 수정하도록 허가되었는지 여부, (c) 상기 트랜잭션이 액세스 레지스터들(AR들)을 수정하도록 허가되었는지 여부, 및 (d) 특정 프로그램-예외 조건들이 인터럽션을 일으키는 것으로부터 차단되는지 여부. 만일 비제약 트랜잭션이 중단되면, 여러 진단 정보가 제공될 수 있다. 예를 들어, 비제약 트랜잭션을 개시하는 최외부 TBEGIN 명령은 프로그램 명시 트랜잭션 진단 블록(program specified TDB)을 지정할 수 있다. 또한, 만일 트랜잭션이 프로그램 인터럽션으로 인해 또는 해석적 실행이 종료되도록 야기하는 조건으로 인해 각각 중단되면, CPU의 프리픽스 영역(prefix area)에 있거나 또는 호스트의 상태 묘사에 의해 지정되는 TDB가 또한 사용될 수 있다.
위에서는 레지스터들의 여러 유형들을 표시하고 있다. 여기에서 이들에 대해 더 상세하게 설명한다. 범용 레지스터(general registers)는 일반적인 산술 및 논리 연산들에서 누산기(accumulators)로서 사용될 수 있다. 한 실시 예에서, 각 레지스터는 64개 비트 위치들(bit positions)을 포함하며, 여기에는 16개의 범용 레지스터가 있다. 범용 레지스터들은 숫자 0~15에 의해 식별되고, 명령에서 4-비트의 R 필드에 의해 지정된다. 일부 명령들은 여러 R 필드들을 보유함으로써 다중 범용 레지스터들의 주소지정을 제공한다. 일부 명령들에서, 특정한 범용 레지스터의 사용은 그 명령의 R 필드에 의해 명시적으로 지정되기보다는 암시된다.
일반적인 산술 및 논리 연산들에서 누산기로서 사용하는 것에 더하여, 상기 16개 범용 레지스터들 중 15개는 주소 생성에서 기준 주소 및 인덱스 레지스터(base address and index registers)로서 사용될 수도 있다. 이러한 경우에, 상기 레지스터들은 명령에서 4-비트의 B 필드 또는 X 필드에 의해 지정된다. 상기 B 또는 X 필드 내 제로 값은 기준(base) 또는 인덱스(index)가 적용되지 않는 것으로 명시하며, 따라서 범용 레지스터 0은 기준 주소 또는 인덱스를 포함하는 것으로 지정되지 않는다.
부동 소수점 명령들은 일 세트의 부동 소수점 레지스터들을 사용한다. 한 실시 예에서, CPU는 16개의 부동 소수점 레지스터들을 보유한다. 부동 소수점 레지스터들은 숫자 0~15에 의해 식별되고, 부동 소수점 명령들에서 4-비트의 R 필드에 의해 지정된다. 각 부동 소수점 레지스터는 64비트의 길이를 가지며 짧은(32비트) 또는 긴(64비트) 부동 소수점 오퍼랜드를 포함한다.
부동 소수점 제어(FPC) 레지스터는 마스크 비트들, 플래그 비트들, 데이터 예외 코드, 및 라운딩 모드 비트들을 포함하는 32비트 레지스터이고, 부동 소수점 연산들의 처리 동안 사용된다.
또한, 한 실시 예에서, CPU는 16개의 제어 레지스터들을 보유하고, 각각은 64개 비트 위치들을 보유한다. 상기 레지스터들 내 비트 위치들은 프로그램 이벤트 기록(Program Event Recording, PER) 같은 시스템 내 특정한 퍼실리티들에 할당되어, 연산이 발생할 수 있다고 명시하거나 또는 그 퍼실리티에 의해 요구되는 특별(special) 정보를 제공하는 데 사용된다. 한 실시 예에서, 트랜잭션 퍼실리티를 위해서, CR0(비트들 8과 9) 및 CR2(비트들 61~63)가 사용되며, 아래에 기술되는 바와 같다.
CPU는 예를 들어 0~15로 번호가 붙은 16개의 액세스 레지스터들을 보유한다. 액세스 레지스터는 주소 공간 제어 엘리먼트(ASCE)의 간접 명세(indirect specification)를 포함하는 32개의 비트 위치들로 구성된다. 주소 공간 제어 엘리먼트는 동적 주소 변환(DAT) 메커니즘에 의해 레퍼런스들(references)을 대응 주소 공간으로 변환시키는 데 사용되는 매개변수이다. CPU가 액세스 레지스터 모드(프로그램 상태 워드(PSW) 내 비트들에 의해 제어됨)라 불리는 모드에 있을 때, 스토리지 오퍼랜드 참조를 위해 논리 주소를 명시하는 데 사용되는 명령의 B 필드가 액세스 레지스터를 지정하고, 그리고 그 액세스 레지스터에 의해 명시되는 주소 공간 제어 엘리먼트는 참조를 위해 DAT에 의해 사용된다. 일부 명령들에 있어서, R 필드가 B 필드 대신에 사용된다. 상기 액세스 레지스터들의 콘텐츠를 로드하고 저장하기 위한 그리고 한 액세스 레지스터의 콘텐츠를 또 다른 액세스 레지스터로 이동시키기 위한 명령들이 제공된다.
액세스 레지스터들 1~15의 각각은 어느 주소 공간이든 지정할 수 있다. 액세스 레지스터 0은 1차 명령 공간을 지정한다. 액세스 레지스터들 1~15 중 하나가 주소 공간을 지정하는 데 사용될 때, CPU는 상기 액세스 레지스터의 콘텐츠를 변환함으로써 어느 주소 공간이 지정될 것인지를 결정한다. 액세스 레지스터 0이 주소 공간을 지정하는 데 사용될 때, CPU는 1차 명령 공간을 지정하는 것으로서 상기 액세스 레지스터를 취급하며, CPU는 상기 액세스 레지스터의 실제 콘텐츠를 조사(examine)하지는 않는다. 그러므로, 상기 16개 액세스 레지스터는 임의의 시간에 1차 명령 공간과 최대 15개의 다른 공간들을 지정할 수 있다.
한 실시 예에서, 다수 유형의 주소 공간들이 있다. 주소 공간은 연속적인 시퀀스의 정수 숫자들(가상 주소들)로서, 그와 함께 각 숫자가 스토리지 내 바이트 위치와 연관되도록 해주는 특정 변환 매개변수들(specific transformation parameters)을 포함한다. 상기 시퀀스는 0에서 시작하며 좌측에서 우측으로 진행한다.
예를 들어 z/Architecture에서, 가상 주소가 CPU에 의해 메인 스토리지(메인 메모리라고도 알려짐)에 액세스하는 데 사용될 때, 그 가상 주소는 동적 주소 변환(DAT)를 통해서 처음에 실 주소로 변환되고, 그 다음에 프리픽싱(prefixing)을 통해서 절대 주소로 변환된다. DAT는 1레벨부터 5레벨까지의 테이블들(페이지, 세그먼트, 영역 제3, 영역 제2, 및 영역 제1)을 변환 매개변수들로 사용할 수 있다. 특정 주소 공간에 대한 최고-레벨 테이블의 지정(designation)(기점과 길이(origin and length))은 주소 공간 제어 엘리먼트라 불리며, 그것은 DAT에 의해 사용되기 위해 제어 레지스터에서 발견되거나 또는 액세스 레지스터에 의해 명시된 대로 발견된다. 이와는 달리, 주소 공간에 대한 주소 공간 제어 엘리먼트는 실제 공간 지정(real space designation)일 수 있는데, 이것은 DAT가 단순히 가상 주소를 실 주소로 취급하고 어느 테이블도 사용하지 않음으로써 가상 주소를 변환하는 것을 표시한다.
DAT는 여러 경우에 각각 다른 제어 레지스터들에 있는 주소 공간 제어 엘리먼트들을 사용하거나 액세스 레지스터들에 의해 명시되는 주소 공간 제어 엘리먼트들을 사용한다. 선택은 현재 PSW에 명시되는 변환 모드에 의해 결정된다. 다음의 4개 변환 모드를 이용할 수 있다: 1차 공간 모드, 2차 공간 모드, 액세스 레지스터 모드 및 홈 공간 모드(home space mode). 변환 모드에 따라서 각각 다른 주소 공간들이 주소지정될 수 있다.
어느 때든지 CPU가 1차 공간 모드 또는 2차 공간 모드에 있을 때, CPU는 두 주소 공간(1차 주소 공간과 2차 주소 공간)에 속하는 가상 주소들을 변환할 수 있다. 어느 때든지 CPU가 액세스 레지스터 모드에 있을 때, CPU는 최대 16개의 주소 공간들(1차 주소 공간과 최대 15개의 AR-명시 주소 공간들)의 가상 주소들을 변환할 수 있다. 어느 때든지 CPU가 홈 공간 모드에 있을 때, CPU는 홈 주소 공간의 가상 주소들을 변환할 수 있다.
1차 주소 공간은 1차 가상 주소들―이것들은 1차 주소 공간 제어 엘리먼트(ASCE)를 통해서 변환됨―로 구성되기 때문에 그렇게 식별된다. 유사하게, 2차 주소 공간은 2차 ASCE를 통해서 변환되는 2차 가상 주소들로 구성되고, AR 명시 주소 공간들은 AR 명시 ASCE들을 통해서 변환되는 AR 명시 가상 주소들로 구성되고, 그리고 홈 주소 공간은 홈 ASCE를 통해서 변환되는 가상 주소들로 구성된다. 1차 ASCE와 2차 ASCE는 제어 레지스터 1과 제어 레지스터 7에 각각 있다. AR 명시 ASCE들은 액세스-레지스터 변환(ART)이라 불리는 프로세스를 통해서 제어 레지스터들 2, 5 및 8을 이용하여 위치가 확인되는 ASN-제2-테이블 엔트리들에 있다. 홈 ASCE는 제어 레지스터 13에 있다.
도 1을 참조하여 여기에서 기술된 트랜잭션 퍼실리티의 하나 또는 그 이상의 특징들을 포함 및 사용하기 위한 컴퓨팅 환경의 한 실시 예를 기술한다.
도 1을 참조하면, 한 예에서, 컴퓨팅 환경(100)은 미국 뉴욕주 아몬크 소재 인터내셔널 비지네스 머신즈 코포레이션(IBM®)에 의해 공급되는 z/Architecture에 기초한다. z/Architecture는 "z/Architecture - Principles of Operation,"(간행물 번호 SA22-7932-08, 9판, 2010년 8월)라는 제목의 IBM 간행물에 기술되어 있다.
Z/ARCHITECTURE, IBM, Z/OS 및 Z/VM(아래에서 참조됨)은 미국 뉴욕주 아몬크 소재 인터내셔널 비지네스 머신즈 코포레이션의 등록 상표이다. 여기에서 사용되는 다른 명칭들도 인터내셔널 비지네스 머신즈 코포레이션 또는 다른 회사들의 등록 상표, 상표 또는 제품 명칭일 수 있다.
한 예로서, 컴퓨팅 환경(100)은 하나 또는 그 이상의 제어 유닛들(108)을 통해서 하나 또는 그 이상의 입력/출력(I/O) 디바이스들(106)에 결합된 중앙 프로세서 복합체(CPC)(102)를 포함한다. 중앙 프로세서 복합체(102)는 예를 들어 하나 또는 그 이상의 중앙 프로세서들(110), 하나 또는 그 이상의 파티션들(112)(예를 들어, 논리적 파티션들(LP)), 논리적 파티션 하이퍼바이저(114), 및 입력/출력 서브시스템(115)을 포함하며, 이들의 각각은 아래에서 기술한다.
중앙 프로세서들(110)은 논리적 파티션들에 할당되는 물리적인 프로세서 자원들이다. 구체적으로, 각 논리적 파티션(112)은 하나 또는 그 이상의 논리적 프로세서들을 보유하며, 이들 각각은 상기 파티션들에 할당되는 물리적인 프로세서(110)의 전부 또는 일부분을 나타낸다. 특정한 파티션(112)의 논리적 프로세서들은 그 파티션에 전용이어서 그 기본 프로세서 자원(110)이 그 파티션을 위해 유보되거나, 또는 다른 파티션과 공유되어서 그 기본 프로세서 자원이 다른 파티션에도 잠재적으로 이용 가능할 수 있다.
논리적 파티션은 별개의 시스템으로 기능하고 하나 또는 그 이상의 애플리케이션들을 보유하며, 선택에 따라 그 안에 상주 운영체제를 보유하는데 이것은 각 논리적 파티션마다 다를 수 있다. 한 실시 예에서, 운영체제는 미국 뉴욕주 아몬크에 있는 인터내셔널 비지네스 머신즈 코포레이션에 의해 공급되는 z/OS 운영체제, z/VM 운영체제, z/Linux 운영체제, 또는 TPF 운영체제이다. 논리적 파티션들(112)은 논리적 파티션 하이퍼바이저(114)에 의해 관리되고, 이것은 프로세서들(110) 상에서 실행되는 펌웨어에 의해 구현된다. 여기에서 사용할 때, 펌웨어(firmware)는 예를 들어 프로세서의 마이크로코드(microcode) 및/또는 밀리코드(millicode)를 포함한다. 예를 들어, 펌웨어는 상위 레벨(higher level) 머신 코드의 구현에 사용되는 하드웨어-레벨 명령들 및/또는 데이터 구조들을 포함한다. 한 실시 예에서, 펌웨어는 예를 들어 통상적으로 마이크로코드로 전달되는 사유권 있는 코드(proprietary code)를 포함하며 이 마이크로코드는 신뢰 소프트웨어(trusted software) 또는 기본 하드웨어에 특화된 마이크로코드를 포함하고 운영체제가 시스템 하드웨어에 액세스하는 것을 제어한다.
논리적 파티션들 및 논리적 파티션 하이퍼바이저 각각은 중앙 프로세서들과 연관된 중앙 스토리지의 각각의 파티션들에 상주하는 하나 또는 그 이상의 프로그램들을 포함한다. 논리적 파티션 하이퍼바이저(114)의 한 예는 미국 뉴욕주 아몬크 소재 인터내셔널 비지네스 머신즈 코포레이션에서 공급하는 프로세서 자원/시스템 매니저(PR/SM)이다.
입력/출력 서브시스템(115)는 입력/출력 디바이스들(106)과 메인 스토리지(메인 메모리라고도 알려짐) 사이의 정보의 흐름을 지시한다. 이것(입력/출력 서브시스템)은 상기 중앙 처리 복합체의 일부 또는 그와 별개일 수 있다는 점에서 상기 중앙 처리 복합체에 결합된다(coupled). 상기 I/O 서브시스템은 상기 중앙 프로세서들로 하여금 상기 입력/출력 디바이스들과 직접 통신해야 하는 태스크를 덜어주고 데이터 처리가 입력/출력 처리와 동시에(concurrently) 진행되도록 허용한다. 통신을 제공하기 위해, I/O 서브시스템은 I/O 통신 어댑터들을 채용한다. 통신 어댑터들에는 예를 들어 채널(channels), I/O 어댑터, PCI 카드, 이더넷 카드, SCSI(Small Computer Storage Interface) 카드 등의 여러 유형이 있다. 여기에 기술된 구체적인 예에서, I/O 통신 어댑터는 채널이고, 그러므로 I/O 서브시스템은 여기에서 채널 서브시스템으로 불린다. 하지만 이것은 단지 예시일 뿐이다. 다른 유형의 I/O 서브시스템들도 사용될 수 있다.
I/O 서브시스템은 입력/출력 디바이스들(106) 안팎으로 정보의 흐름을 관리하는 데 하나 또는 그 이상의 입력/출력 경로들을 통신 링크들로서 사용한다. 이 구체적인 예에서, 통신 어댑터들이 채널들이므로 이 경로들은 채널 경로(channel paths)라 불린다.
위에 기술된 컴퓨팅 환경은 사용될 수 있는 컴퓨팅 환경의 한 예시일 뿐이다. 파티션되지 않은 환경들을 포함한(그러나 그에 한정되지 않음) 다른 환경들, 다른 파티션된 환경들 및/또는 에뮬레이트된 환경들이 사용될 수 있고, 실시 예들은 어느 한 환경에 한정되지 않는다.
하나 또는 그 이상의 특징들에 따라서, 트랜잭션 실행 퍼실리티는 CPU가 트랜잭션으로 알려진 일련의 명령들을 실행할 수 있는 수단을 제공하는 CPU를 향상시켜주는 것이며, 상기 명령들은 다중 스토리지 위치들을 업데이트하는 것을 포함하여 그 위치들을 액세스할 수 있다. 다른 CPU들과 I/O 서브시스템에 의해 관찰될 때, 트랜잭션은 (a) 전체가 단일 원자적 연산으로서 완료되거나, 또는 (b) 중단되어 (여기에 기술된 특정 조건들을 제외하고) 그것이 실행되었다는 증거를 잠재적으로 남기지 않는다. 그러므로, 성공적으로 완료된 트랜잭션은 고전적인 다중 처리 모델에서 필요한 특수 로킹(locking) 없이 다수 스토리지 위치들을 업데이트할 수 있다.
트랜잭션 실행 퍼실리티는 예를 들어 하나 또는 그 이상의 제어들(controls), 하나 또는 그 이상의 명령들, 제약 및 비제약 실행을 포함한 트랜잭션 처리, 및 중단 처리를 포함하며, 이들 각각은 아래에서 더 기술된다.
한 실시 예에서, 트랜잭션 중단 프로그램 상태 워드(PSW), 트랜잭션 진단 블록(TDB) 주소, 및 트랜잭션 내포 깊이를 포함한 세 개의 특수 목적 제어들; 다섯 개의 제어 레지스터 비트들; 및 TRANSACTION BEGIN(제약 및 비제약), TRANSACTION END, EXTRACT TRANSACTION NESTING DEPTH, TRANSACTION ABORT, 및 NONTRANSACTIONAL STORE를 포함한 여섯 개의 범용 명령들이 트랜잭션 실행 퍼실리티를 제어하는 데 사용된다. 상기 퍼실리티가 설치될 때, 상기 퍼실리티는 예를 들어 상기 구성(configuration) 내 모든 CPU들에 설치된다. 한 구현 예에서 비트 73인 퍼실리티 인디케이션(facility indication)이 1일 때 트랜잭션 실행 퍼실리티가 설치되어 있음을 표시한다.
트랜잭션 실행 퍼실리티가 설치되어 있을 때, 상기 구성은 비제약 트랜잭션 실행 퍼실리티를 제공하고, 선택에 따라 제약 트랜잭션 실행 퍼실리티를 제공하며, 이들 각각은 아래에서 기술한다. 퍼실리티 인디케이션 50과 퍼실리티 인디케이션 70이 예시로서 모두 1일 때, 제약 트랜잭션 실행 퍼실리티가 설치된다. 두 퍼실리티 인디케이션은 모두 메모리 내의 명시된 위치들에 저장된다.
여기에서 사용할 때, 명령의 이름인 TRANSACTION BEGIN은 연상 기호(mnemonic) TBEGIN(비제약 트랜잭션에 대한 트랜잭션 시작)과 연상 기호 TBEGINC(제약 트랜잭션에 대한 트랜잭션 시작)를 갖는 명령들을 나타낸다. 특정 명령에 관련된 논의들은 명령의 이름과 그 뒤에 붙은 괄호 안의 연상 기호로 표시되거나, 단순히 연상 기호로 표시된다.
TRANSACTION BEGIN(TBEGIN) 명령의 포맷의 한 실시 예를 도 2a~2b에 도시한다. 한 예로서, TBEGIN 명령(200)은 비제약 트랜잭션 시작 연산(transaction begin nonconstrained operation)을 명시하는 오피코드를 포함하는 오피코드 필드(202); 베이스 필드(B1)(204); 변위 필드(D1)(206); 및 즉시 필드(I2)(208)를 포함한다. B1 필드가 비제로(nonzero)일 때, B1(204)에 의해 명시되는 범용 레지스터의 콘텐츠가 D1(206)에 더해져 제1 오퍼랜드 주소를 획득한다.
B1 필드가 비제로일 때, 다음이 적용된다:
Figure 112014120036821-pct00001
트랜잭션 내포 깊이가 최초에 제로일 때, 제1 오퍼랜드 주소는 TBEGIN-명시 TDB(아래에서 더 기술함)라 불리는 256바이트 트랜잭션 진단 블록의 위치를 지정하며, 만일 이 트랜잭션이 중단될 경우 이 TBEGIN-명시 TDB 안으로 여러 진단 정보가 저장될 수 있다. CPU가 1차 공간 모드 또는 액세스 레지스터 모드에 있을 때, 제1 오퍼랜드 주소는 1차 주소 공간 내 위치를 지정한다. CPU가 2차 공간 또는 홈 공간 모드에 있을 때, 제1 오퍼랜드 주소는 2차 또는 홈 주소 공간 내 위치를 각각 지정한다. DAT가 오프(off)되어 있을 때, 트랜잭션 진단 블록(TDB) 주소(TDBA)는 실 스토리지(real storage) 내 위치를 지정한다.
제1 오퍼랜드에 대한 저장 액세스 가능성(store accessibility)이 판정된다. 만일 액세스 가능하면, 상기 오퍼랜드의 논리 주소가 트랜잭션 진단 블록 주소(TDBA)에 배치되고, TDBA는 유효하다.
Figure 112014120036821-pct00002
CPU가 이미 비제약 트랜잭션 실행 모드에 있을 때, TDBA는 수정되지 않고, 제1 오퍼랜드의 액세스 가능성이 테스트되었는지는 예측 불가능하다.
상기 B1 필드가 제로일 때, 제1 오퍼랜드에 대한 액세스 예외들은 검출되지 않고, 최외부 TBEGIN 명령에 대하여 TDBA는 유효하지 않다.
상기 I2 필드의 비트들은, 한 예에서, 다음과 같이 정의된다:
범용 레지스터 세이브 마스크( GRSM )(210)(도 2b): I2 필드의 비트들 0~7은 범용 레지스터 세이브 마스크(GRSM, general register save mask)를 보유한다. GRSM의 각 비트는 범용 레지스터들의 짝수-홀수 쌍을 나타내고, 여기에서 비트 0은 레지스터 0과 레지스터 1을 나타내고, 비트 1은 레지스터 2와 레지스터 3을 나타내는 등의 방식이다. 최외부 TBEGIN 명령의 GRSM 내 비트가 제로일 때, 대응하는 레지스터 쌍은 세이브되지 않는다. 최외부 TBEGIN 명령의 GRSM 내 비트가 일(one)일 때, 대응하는 레지스터 쌍은 모델 종속적 위치(프로그램에 의해 직접 액세스할 수 없음)에 세이브된다.
만일 트랜잭션이 중단되면, 세이브된 레지스터 쌍들은 최외부 TBEGIN 명령이 실행되었을 때 자신들의 콘텐츠로 복원된다. 다른 모든(세이브되지 않은) 범용 레지스터들의 콘텐츠는 트랜잭션이 중단될 때 복원되지 않는다.
범용 레지스터 세이브 마스크는 최외부 TBEGIN을 제외하고 모든 TBEGIN들 상에서는 무시된다.
AR 수정 허용(A)(212): I2 필드의 비트 12인 A 제어는 트랜잭션이 액세스 레지스터를 수정하도록 허용되는지 여부를 제어한다. 유효 AR 수정 허용 제어는 현재의 내포 레벨 및 모든 외부 레벨들에 대한 TBEGIN 명령 내 A 제어의 논리적 AND(논리곱)이다.
만일 유효 A 제어가 제로이면, 액세스 레지스터를 수정하기 위한 시도가 이루어질 경우 트랜잭션은 중단 코드 11(제한된 명령)로 중단될 것이다. 만일 유효 A 제어가 일이면, 액세스 레지스터가 (다른 중단 조건이 없이) 수정될 경우, 트랜잭션은 중단되지 않을 것이다.
부동 소수점 연산 허용(F)(214): I2 필드의 비트 13인 F 제어는 트랜잭션이 명시된 부동 소수점 명령들을 실행하도록 허용되는지 여부를 제어한다. 유효 부동 소수점 연산 허용 제어는 현재의 내포 레벨 및 모든 외부 레벨들에 대한 TBEGIN 명령 내 F 제어의 논리적 AND(논리곱)이다.
만일 유효 F 제어가 제로이면, (a) 부동 소수점 명령을 실행하기 위한 시도가 이루어질 경우 트랜잭션은 중단 코드 11(제한된 명령)로 중단될 것이고, (b) 부동 소수점 제어 레지스터(FPCR)의 바이트 2에 있는 데이터 예외 코드(DXC)는 어떤 데이터 예외 프로그램 예외 조건에 의해서도 세트되지 않을 것이다. 만일 유효 F 제어가 일이면, (a) (다른 중단 코드 없이) 부동 소수점 명령을 실행하기 위한 시도가 이루어질 경우 트랜잭션은 중단되지 않을 것이고, (b) FPCR에 있는 DXC는 데이터 예외 프로그램 예외 조건에 의해서 세트될 수 있다.
프로그램 인터럽션 필터링 제어( PIFC )(216): I2 필드의 비트들 14~15는 프로그램 인터럽션 필터링 제어(PIFC)이다. PIFC는 CPU가 트랜잭션 실행 모드에 있는 동안 발생하는 특정 클래스의 프로그램 예외 조건들(예를 들어, 주소지정 예외, 데이터 예외, 연산 예외, 보호 예외 등)이 인터럽션을 초래하는지를 제어한다.
유효 PIFC는 현재의 내포 레벨 및 모든 외부 레벨들에 대한 TBEGIN 명령 내 최고 값의 PIFC이다. 유효 PIFC가 제로일 때, 모든 프로그램 예외 조건들은 인터럽션을 초래한다. 유효 PIFC가 일(one)일 때, 트랜잭션 실행 클래스 1과 트랜잭션 실행 클래스 2를 갖는 프로그램 예외 조건들은 인터럽션을 초래한다. (각 프로그램 예외 조건은 그 예외의 심각도(severity)에 따라 적어도 하나의 트랜잭션 실행 클래스가 할당된다. 심각도는 트랜잭션 실행의 반복된 실행 동안 복구 가능성과 운영체제가 그 인터럽션을 확인할 필요가 있는지에 기초한다.) 유효 PIFC가 이(two)일 때, 트랜잭션 실행 클래스 1을 갖는 프로그램 예외 조건들은 인터럽션을 초래한다. 3의 PIFC는 유보된다.
I2 필드의 비트들 8~11(명령의 비트들 40~43)은 유보되며 제로들을 보유해야 하는데, 그렇지 않으면 프로그램은 앞으로 호환되도록 운영될 수 없다.
도 3a와 3b를 참조하여 제약 트랜잭션 시작(TBEGINC) 명령의 포맷의 한 실시 예를 기술한다. 한 예에서, TBEGINC 명령(300)은 제약 트랜잭션 시작 연산(transaction begin constrained operation)을 명시하는 오피코드를 포함하는 오피코드 필드(302); 베이스 필드(B1)(304); 변위 필드(D1)(306); 및 즉시 필드(I2)(308)를 포함한다. B1(304)에 의해 명시되는 범용 레지스터의 콘텐츠가 D1(306)에 더해져 제1 오퍼랜드 주소를 획득한다. 하지만, 제약 트랜잭션 시작 명령에서, 제1 오퍼랜드 주소가 스토리지에 액세스하는 데 사용되지는 않는다. 그 대신에, 상기 명령의 B1 필드는 제로들을 포함하는데, 그렇지 않으면 명세 예외(specification exception)가 인지된다.
한 실시 예에서, I2 필드는 여러 제어들을 포함하며, 이들의 예가 도 3b에 도시된다.
상기 I2 필드의 비트들은, 한 예에서, 다음과 같이 정의된다:
범용 레지스터 세이브 마스크( GRSM )(310): I2 필드의 비트들 0~7은 범용 레지스터 세이브 마스크(GRSM, general register save mask)를 보유한다. GRSM의 각 비트는 범용 레지스터들의 짝수-홀수 쌍을 나타내고, 여기에서 비트 0은 레지스터 0과 레지스터 1을 나타내고, 비트 1은 레지스터 2와 레지스터 3을 나타내는 등의 방식이다. GRSM 내 비트가 제로일 때, 대응하는 레지스터 쌍은 세이브되지 않는다. GRSM 내 비트가 일일 때, 대응하는 레지스터 쌍은 모델 종속적 위치(프로그램에 의해 직접 액세스할 수 없음)에 세이브된다.
만일 트랜잭션이 중단되면, 세이브된 레지스터 쌍들은 최외부 TRANSACTION BEGIN 명령이 실행되었을 때 자신들의 콘텐츠로 복원된다. 다른 모든(세이브되지 않은) 범용 레지스터들의 콘텐츠는 제약 트랜잭션이 중단될 때 복원되지 않는다.
TBEGINC이 비제약 트랜잭션 모드에서 실행을 계속하기 위해 사용될 때, 범용 레지스터 세이브 마스크는 무시된다.
AR 수정 허용(A)(312): I2 필드의 비트 12인 A 제어는 트랜잭션이 액세스 레지스터를 수정하도록 허용되는지 여부를 제어한다. 유효 AR-수정-허용 제어는 현재의 내포 레벨 및 모든 외부 TBEGIN 또는 TBEGINC 명령들에 대한 TBEGINC 명령 내 A 제어의 논리적 AND(논리곱)이다.
만일 유효 A 제어가 제로이면, 액세스 레지스터를 수정하기 위한 시도가 이루어질 경우 트랜잭션은 중단 코드 11(제한된 명령)로 중단될 것이다. 만일 유효 A 제어가 일이면, 액세스 레지스터가 (다른 중단 조건이 없이) 수정될 경우, 트랜잭션은 중단되지 않을 것이다.
I2 필드의 비트들 8~11과 비트들 13~15(명령의 비트들 40~43과 비트들 45~47)는 유보되며 제로들을 보유해야 한다.
트랜잭션 시작 명령의 종료(end)는 TRANSACTION END(TEND) 명령에 의해 명시되고, 그 포맷이 도 4에 도시된다. 한 예로서, TEND 명령(400)은 트랜잭션 종료 연산을 명시하는 오피코드를 포함하는 오피코드 필드(402)를 포함한다.
트랜잭션 실행 퍼실리티와 관련하여 다수의 용어들이 사용되고 있기에, 단지 편의상 아래에 일련의 용어들을 알파벳 순으로 제공한다. 한 실시 예에서, 이 용어들은 다음의 정의를 갖는다:
중단하다( Abort ): 제로의 트랜잭션 내포 깊이를 초래하는 TRANSACTION END 명령이 있기 전에 종료될 때 트랜잭션은 중단된다. 트랜잭션이 중단될 때, 한 실시 예에서, 다음과 같은 일이 발생한다:
Figure 112014120036821-pct00003
트랜잭션의 임의 및 모든 레벨들에 의해 이루어진 트랜잭션 저장 액세스(transactional store accesses)는 폐기된다(즉, 커밋되지 않는다).
Figure 112014120036821-pct00004
트랜잭션의 임의 및 모든 레벨들에 의해 이루어진 비트랜잭션 저장 액세스(non-transactional store accesses)는 커밋된다.
Figure 112014120036821-pct00005
최외부 TRANSACTION BEGIN 명령의 범용 레지스터 세이브 마스크(GRSM)에 의해 지정되는 레지스터들은 트랜잭션 실행 전의 자신들의 콘텐츠로(즉, 최외부 TRANSACTION BEGIN 명령의 실행시 자신들의 콘텐츠로) 복원된다. 최외부 TRANSACTION BEGIN 명령의 범용 레지스터 세이브 마스크에 의해 지정되지 않는 범용 레지스터들은 복원되지 않는다.
Figure 112014120036821-pct00006
액세스 레지스터들, 부동 소수점 레지스터들, 및 부동 소수점 제어 레지스터는 복원되지 않는다. 트랜잭션이 중단될 때 트랜잭션 실행 동안에 이 레지스터들에 이루어진 모든 변경 사항들은 유지된다.
트랜잭션은 제한된 명령의 실행 시도(attempted execution of a restricted instruction), 제한된 자원의 수정 시도(attempted modification of a restricted resource), 트랜잭션 충돌(transactional conflict), 여러 CPU 자원들의 초과(exceeding various CPU resources), 해석적-실행 인터셉션 조건, 인터럽션, TRANSACTION ABORT 명령, 및 기타 이유들을 포함한 여러 가지 이유들로 인해 중단될 수 있다. 트랜잭션-중단 코드는 트랜잭션이 중단되는 특정한 이유를 제공한다.
도 5를 참조하여 TRANSACTION ABORT(TABORT) 명령의 포맷의 한 예를 기술한다. 한 예로서, TABORT 명령(500)은 트랜잭션 중단 연산을 명시하는 오피코드를 포함하는 오피코드 필드(502); 베이스 필드(B2)(504); 변위 필드(D2)(506)를 포함한다. B2 필드가 비제로일 때, B2(504)에 의해 명시되는 범용 레지스터의 콘텐츠가 D2(506)에 더해져 제2 오퍼랜드 주소를 획득하며, 그렇지 않으면 제2 오퍼랜드 주소는 단지 D2 필드로부터만 형성되고 B2 필드는 무시된다. 제2 오퍼랜드 주소는 데이터를 주소지정하는 데 사용되지 않으며, 대신에 그 주소는 트랜잭션 중단 코드를 형성하며, 이것은 중단 처리 동안에 트랜잭션 진단 블록에 배치된다. 제2 오퍼랜드 주소를 위한 주소 계산은 다음의 주소 산술 규칙들을 따른다: 24-비트 주소지정 모드에서 비트들 0~29는 제로들로 세트되고, 31-비트 주소지정 모드에서 비트들 0~32는 제로들로 세트된다.
커밋하다 ( Commit ): 최외부 TRANSACTION END 명령의 완료시에, CPU는 상기 트랜잭션(즉, 최외부 트랜잭션 및 모든 내포 레벨들)에 의해 이루어진 저장 액세스들을 커밋하여 그들을 다른 CPU들과 I/O 서브시스템이 볼 수 있게 만든다. 다른 CPU들에 의해 그리고 I/O 서브시스템에 의해 관찰될 때, 트랜잭션의 모든 내포 레벨들에 의해 이루어지는 모든 페치 및 저장 액세스들은 커밋이 일어날 때 단일한 동시 연산(single concurrent operation)으로서 이루어지는 것으로 보인다.
범용 레지스터들, 액세스 레지스터들, 부동 소수점 레지스터들, 및 부동 소수점 제어 레지스터의 콘텐츠는 커밋 프로세스에 의해 수정되지 않는다. 트랜잭션의 저장들이 커밋될 때 트랜잭션 실행 동안에 이 레지스터들에 이루어진 모든 변경 사항들은 유지된다.
충돌하다( Conflict ): 한 CPU에 의해 이루어지는 트랜잭션 액세스는 (a) 다른 CPU에 의해 이루어지는 트랜잭션 액세스 또는 비트랜잭션 액세스와 또는 (b) I/O 서브시스템에 의해 이루어지는 비트랜잭션 액세스와 충돌한다(만일 두 액세스들이 동일한 캐시 라인 내의 임의 위치에 대한 것이고, 액세스들의 하나 또는 그 이상이 저장일 경우).
개념적인 순서에서는 충돌이 검출되지 않을 수 있다 하더라도, CPU가 명령들을 추론적으로 실행함에 의해 충돌이 검출될 수 있다.
제약 트랜잭션( Constrained Transaction ): 제약 트랜잭션은 제약 트랜잭션 실행 모드에서 실행되는 트랜잭션이며 다음의 제한사항들이 적용된다:
Figure 112014120036821-pct00007
일반적인 명령들의 서브세트(subset)를 이용할 수 있다.
Figure 112014120036821-pct00008
한정된 수의 명령들이 실행될 수 있다.
Figure 112014120036821-pct00009
한정된 수의 스토리지-오퍼랜드 위치들을 액세스할 수 있다.
Figure 112014120036821-pct00010
트랜잭션은 단일 내포 레벨로 한정된다.
반복되는 인터럽션들 또는 다른 CPU들 또는 I/O 서브시스템과의 충돌들이 없는 경우에, 제약 트랜잭션은 최종적으로 완료되므로, 중단-처리부(abort-handler) 루틴은 필요하지 않다. 제약 트랜잭션들은 아래에 상세하게 기술한다.
CPU가 이미 비제약 트랜잭션 실행 모드에 있는 동안 제약 TRANSACTION BEGIN(TBEGINC) 명령이 실행될 때, 실행은 내포된 비제약 트랜잭션으로서 계속된다.
제약 트랜잭션 실행 모드 ( Constrained Transactional Execution Mode ): 트랜잭션 내포 깊이가 제로이고 트랜잭션이 TBEGINC 명령에 의해 개시될 때, CPU는 제약 트랜잭션 실행 모드로 진입한다. CPU가 제약 트랜잭션 실행 모드에 있는 동안, 트랜잭션 내포 깊이는 일(one)이다.
내포된 트랜잭션( Nested Transaction ): CPU가 비제약 트랜잭션 실행 모드에 있는 동안 TRANSACTION BEGIN 명령이 발행될 때, 트랜잭션은 내포된다(nested).
트랜잭션 실행 퍼실리티는 평탄화된 내포(flattened nesting)라 불리는 모델을 사용한다. 평탄화된 내포 모드에서, 최외부 트랜잭션이 자신의 저장들을 커밋할 때까지는 내부 트랜잭션에 의해 이루어지는 저장들은 다른 CPU들 및 I/O 서브시스템이 관찰할 수 없다. 유사하게, 만일 트랜잭션이 중단되면, 모든 내포된 트랜잭션들은 중단되고, 모든 내포된 트랜잭션들의 모든 트랜잭션 저장들은 폐기된다.
내포된 트랜잭션들의 한 예가 도 6에 도시된다. 도시된 바와 같이, 제1 TBEGIN(600)이 최외부 트랜잭션(601)을 시작하고, TBEGIN(602)이 제1 내포된 트랜잭션을 시작하고, TBEGIN(604)이 제2 내포된 트랜잭션을 시작한다. 이 예에서, TBEGIN(604)과 TEND(606)는 최내부(innermost) 트랜잭션(608)을 정의한다. TEND(610)가 실행될 때, 트랜잭션 저장들은 최외부 트랜잭션과 모든 내부 트랜잭션들에 대하여 커밋된다(612).
비제약 트랜잭션( Nonconstrained Transaction ): 비제약 트랜잭션은 비제약 트랜잭션 실행 모드에서 실행되는 트랜잭션이다. 비제약 트랜잭션은 제약 트랜잭션 같은 방식으로 제한되지는 않을지라도, 다양한 원인들로 인해 중단될 수도 있다.
비제약 트랜잭션 실행 모드 ( Nonconstrained Transactional Execution Mode ): 트랜잭션이 TBEGIN 명령에 의해 개시될 때, CPU는 비제약 트랜잭션 실행 모드로 진입한다. CPU가 비제약 트랜잭션 실행 모드에 있는 동안, 트랜잭션 내포 깊이는 1에서 최대 트랜잭션 내포 깊이까지 변할 수 있다.
비트랜잭션 액세스( Non - Transactional Access ): 비트랜잭션 액세스는 CPU가 트랜잭션 실행 모드에 있지 않을 때 CPU에 의해 이루어지는 스토리지 오퍼랜드 액세스(즉, 트랜잭션 밖의 고전적인 스토리지 액세스)이다. 추가로, I/O 서브시스템에 의해 이루어지는 액세스도 비트랜잭션 액세스이다. 추가로, NONTRANSACTIONAL STORE 명령은 CPU가 비제약 트랜잭션 실행 모드에 있는 동안 비트랜잭션 저장 액세스를 일으키는 데 사용될 수 있다.
도 7을 참조하여 NONTRANSACTIONAL STORE 명령의 포맷의 한 실시 예를 기술한다. 한 예로서, NONTRANSACTIONAL STORE 명령(700)은 비트랜잭션 저장 연산을 지정하는 오피코드를 명시하는 복수의 오피코드 필드(702a, 702b); 레지스터를 명시하는 레지스터 필드(R1)(704)―이것의 콘텐츠는 제1 오퍼랜드라 불림―; 인덱스 필드(X2)(706); 베이스 필드(B2)(708); 제1 변위 필드(DL2)(710); 및 제2 변위 필드(DH2)(712)를 포함한다. X2 필드와 B2 필드에 의해 지정되는 범용 레지스터들의 콘텐츠가 DH2 필드와 DL2 필드의 콘텐츠가 접합(concatenation)된 콘텐츠에 더해져 제2 오퍼랜드 주소를 형성한다. X2 필드 또는 B2 필드 중 하나 또는 모두가 제로일 때, 대응하는 레지스터는 상기 덧셈에 참여하지 않는다.
64비트 제1 오퍼랜드는 제2 오퍼랜드 위치에 변경되지 않은 채 비트랜잭션적으로 배치된다.
DH2 필드와 DL2 필드의 접합(concatenation)에 의해 형성되는 변위는 20비트 부호화된 2진 정수로 취급된다.
제2 오퍼랜드는 더블워드(double word) 경계 상에 정렬(align)되어야 하며, 그렇지 않으면 명세 예외가 인지되고 그 연산은 억제된다.
외부/ 최외부 트랜잭션( Outer / Outermost Transaction ): 낮은 수의 트랜잭션 내포 깊이를 갖는 트랜잭션이 외부 트랜잭션(outer transaction)이다. 일(one)의 트랜잭션 내포 깊이 값을 갖는 트랜잭션은 최외부 트랜잭션(outermost transaction)이다.
최외부 TRANSACTION BEGIN 명령은 트랜잭션 내포 깊이가 최초에 제로일 때 실행되는 것이다. 최외부 TRANSACTION END 명령은 트랜잭션 내포 깊이가 일에서 제로로 변하게 하는 것이다. 제약 트랜잭션은 이 실시 예에서 최외부 트랜잭션이다.
프로그램 인터럽션 필터링 ( Program Interruption Filtering ): 트랜잭션이 어떤 프로그램 예외 조건들로 인해 중단될 때, 프로그램은 선택에 따라 인터럽션의 발생을 막을 수 있다. 이 기술이 프로그램 인터럽션 필터링(program interruption filtering)이라 불린다. 프로그램 인터럽션 필터링은 인터럽션의 트랜잭션 클래스, TRANSACTION BEGIN 명령으로부터의 유효 프로그램 인터럽션 필터링 제어, 및 제어 레지스터 0 내 트랜잭션 실행 프로그램 인터럽션 필터링 오버라이드(override)의 적용을 받는다.
트랜잭션( Transaction ): 트랜잭션은 CPU가 트랜잭션 실행 모드에 있는 동안 스토리지-오퍼랜드 액세스들이 이루어지는 것과, 선택된 범용 레지스터들이 변경되는 것을 포함한다. 비제약 트랜잭션에서, 스토리지-오퍼랜드 액세스는 트랜잭션 액세스와 비트랜잭션 액세스를 모두 포함한다. 제약 트랜잭션에서, 스토리지-오퍼랜드 액세스는 트랜잭션 액세스로 한정된다. 다른 CPU들과 I/O 서브시스템에 의해 관찰될 때, 트랜잭션 실행 모드에 있는 동안 CPU에 의해 이루어지는 모든 스토리지-오퍼랜드 액세스는 단일한 동시 연산으로서 이루어지는 것으로 보인다. 만일 트랜잭션이 중단되면, 트랜잭션 저장 액세스들은 폐기되고, 최외부 TRANSACTION BEGIN 명령의 범용 레지스터 세이브 마스크에 의해 지정된 레지스터들은 트랜잭션 실행 전의 자신들의 콘텐츠로 복원된다.
트랜잭션 액세스( Transactional Accesses ): 트랜잭션 액세스는 NONTRANSACTIONAL STORE 명령에 의해 이루어지는 액세스를 제외하고는 CPU가 트랜잭션 실행 모드에 있는 동안 이루어지는 스토리지 오퍼랜드 액세스이다.
트랜잭션 실행 모드 ( Transactional Execution Mode ): 트랜잭션 실행 모드(transactional execution mode, 또한 transaction execution mode라고도 알려짐)라는 말은 비제약 트랜잭션 실행 모드 및 제약 트랜잭션 실행 모드 둘 모두의 공통 연산을 기술한다. 그러므로, 상기 연산이 기술될 때, 비제약과 제약이라는 말은 트랜잭션 실행 모드를 수식하는 데 사용된다.
트랜잭션 내포 깊이가 제로일 때, CPU는 트랜잭션 실행 모드에 있지 않다(또한 비트랜잭션 실행 모드라 불림).
CPU에 의해 관찰될 때, 트랜잭션 실행 모드에서 이루어지는 페치들과 저장들은 트랜잭션 실행 모드에 있지 않은 동안 이루어지는 것들과 다르지 않다.
z/Architecture의 한 실시 예에서, 트랜잭션 실행 퍼실리티는 제어 레지스터 0의 비트들 8~9, 제어 레지스터 2의 비트들 61~63, 트랜잭션 내포 깊이, 트랜잭션 진단 블록 주소, 및 트랜잭션 중단 프로그램 상태 워드(PSW)의 제어를 받는다.
초기 CPU 리셋에 이어서, 제어 레지스터 0의 비트 위치들 8~9, 제어 레지스터 2의 비트 위치들 62~63, 및 트랜잭션 내포 깊이의 콘텐츠는 제로로 세트된다. 트랜잭션 실행 제어인 제어 레지스터 0의 비트 8이 제로일 때, CPU는 트랜잭션 실행 모드로 배치될 수 없다.
여러 제어들(controls)에 관한 더 상세한 사항은 아래에 기술한다.
표시된 바와 같이, 트랜잭션 실행 퍼실리티는 제어 레지스터 0 내의 2개 비트와 제어 레지스터 2 내의 3개 비트에 의해 제어된다. 예를 들면 다음과 같다:
제어 레지스터 0의 비트들( Control Register 0 Bits ): 한 실시 예에서, 비트 할당은 다음과 같다:
트랜잭션 실행 제어(Transactional Execution Control, TXC): 제어 레지스터 0의 비트 8은 트랜잭션 실행 제어이다. 이 비트는 제어 프로그램(예를 들어, 운영체제)이 트랜잭션 실행 퍼실리티가 프로그램에 의해 사용 가능한지 아닌지를 표시할 수 있는 메커니즘을 제공하다. 트랜잭션 실행 모드로 성공적으로 진입하기 위해서는 비트 8이 일(one)이어야 한다.
제어 레지스터 0의 비트 8이 제로일 때, EXTRACT TRANSACTION NESTING DEPTH 명령과 TRANSACTION BEGIN 명령 및 TRANSACTION END 명령의 실행 시도 결과는 특수 연산의 실행이 된다.
도 8을 참조하여 EXTRACT TRANSACTION NESTING DEPTH(ETND, 트랜잭션 내포 깊이 추출) 명령의 포맷의 한 실시 예를 기술한다. 한 예로서, EXTRACT TRANSACTION NESTING DEPTH 명령(800)은 트랜잭션 내포 깊이 추출 연산을 표시하는 오피코드를 명시하는 오피코드 필드(802); 및 범용 레지스터를 지정하는 레지스터 필드 R1(804)을 포함한다.
현재의 트랜잭션 내포 깊이는 범용 레지스터 R1의 비트들 48~63에 배치된다. 상기 레지스터의 비트들 0~31은 변하지 않은 채로 남아 있고, 상기 레지스터의 비트들 32~47은 제로로 세트된다.
추가 실시 예에서, 최대 트랜잭션 내포 깊이 또한 범용 레지스터 R1에 배치되는데, 예를 들면 비트들 16~31에 배치된다.
한 실시 예에서, EXTRACT TRANSACTION NESTING DEPTH 명령은 비제약 트랜잭션이 현재 트랜잭션 내포 깊이 값을 검사하고 레지스터에 그 값을 저장할 수 있게 해준다. 상기 현재 내포 깊이 값은 내부 CPU 카운터 내에 보관된다. 비제약 트랜잭션 모드 동안, TBEGIN이 개입하는 TEND 없이 실행될 때, 상기 카운터는 증분된다. 이 카운터는 정확한 코드 순서를 결정하는 데 있어서 그리고 진단 목적을 위해 프로그램이 관심을 보일 수 있다.
한 실시 예에서, 만일 제어 레지스터 0의 비트 8인 트랜잭션 실행 제어가 제로이면 특수 연산 예외(special operation exception)가 인지되고 그 연산은 억제된다.
조건 코드( Condition Code ): 상기 코드는 불변인 채로 있는다.
프로그램 예외들:
Figure 112014120036821-pct00011
연산(트랜잭션 실행 퍼실리티가 설치되지 않음)
Figure 112014120036821-pct00012
특수 연산
Figure 112014120036821-pct00013
(제한된 명령으로 인한) 트랜잭션 제약
주( Notes ): 제로의 트랜잭션 내포 깊이는 CPU가 트랜잭션-실행 모드에 있지 않다는 것을 표시한다.
트랜잭션 실행 프로그램 인터럽션 필터링 오버라이드(PIFO): 제어 레지스터 0의 비트 9가 트랜잭션 실행 프로그램 인터럽션 필터링 오버라이드이다. 이 비트는 제어 프로그램이, CPU가 트랜잭션 실행 모드에 있는 동안 발생하는 모든 프로그램 예외 조건은 TRANSACTION BEGIN 명령(들)에 의해 명시 또는 암시되는 유효 프로그램 인터럽션 필터링 제어와 상관 없이 인터럽션을 초래한다는 것을, 보장할 수 있는 메커니즘을 제공한다.
제어 레지스터 2의 비트들( Control Register 2 Bits ): 한 실시 예에서, 상기 할당은 다음과 같다:
트랜잭션 진단 범위(Transaction Diagnostic Scope, TDS): 제어 레지스터 2의 비트 61은 동 레지스터의 비트들 62~63 내의 트랜잭션 진단 제어(TDC)의 적용성(applicability)을 제어한다.
TDS
값 의미
0 TDC는 CPU가 문제 상태(problem state) 또는 수퍼바이저 상태(supervisor state)에 있는지에 상관없이 적용된다.
1 TDC는 CPU가 문제 상태에 있을 때만 적용된다. CPU가 수퍼바이저 상태에 있을 때, 처리는 TDC가 제로를 보유한 것처럼 된다.
트랜잭션 진단 제어(Transaction Diagnostic Control, TDC): 제어 레지스터 2의 비트들 62~63은 트랜잭션들이 진단 목적들에 따라서 랜덤으로 중단되도록 하는데 사용될 수 있는 2-비트 무부호 정수이다. 한 예에서, TDC의 인코딩은 다음과 같다:
TDC
값 의미
0 정상 연산; 트랜잭션들은 TDC의 결과로 중단되지 않는다.
1 모든 트랜잭션을 랜덤 명령(random instruction)에 따라 중단시키지만, 최외부 TRANSACTION END 명령의 실행 전에 이루어진다.
2 랜덤 명령에 따라 랜덤 트랜잭션들을 중단한다.
3 유보됨(Reserved)
트랜잭션이 비제로 TDC로 인해 중단될 때, 그 다음에 다음 둘 중 하나가 발생할 수 있다:
Figure 112014120036821-pct00014
중단 코드가 코드들 7~11, 13~16, 또는 255 중 어느 한 가지에 세트되며, 상기 코드의 값은 CPU에 의해 랜덤으로 선택된다; 조건 코드는 상기 중단 코드에 대응하여 세트된다. 중단 코드들은 아래에 더 기술된다.
Figure 112014120036821-pct00015
비제약 트랜잭션에서, 조건 코드는 일(one)로 세트된다. 이 경우에, 중단 코드는 적용되지 않는다.
TDC 값 1이 구현되는지 여부는 모델 종속적이다. 만일 구현되지 않으면, 1의 값은 2가 명시된 것처럼 작동한다.
제약 트랜잭션에서, 1의 TDC 값은 2의 TDC 값이 명시된 것처럼 취급된다.
만일 3의 TDC 값이 명시되면, 결과는 예측 불가능하다.
트랜잭션 진단 블록 주소( Transaction Diagnostic Block Address , TDBA )
유효한 트랜잭션 진단 블록 주소(TDBA)는 최외부 TRANSACTION BEGIN(TBEGIN) 명령의 B1 필드가 비제로일 때 상기 최외부 TBEGIN 명령의 제1 오퍼랜드 주소로부터 세트된다. CPU가 1차 공간 모드 또는 액세스 레지스터 모드에 있을 때, TDBA는 1차 주소 공간 내 위치를 지정한다. CPU가 2차 공간 모드 또는 홈 공간 모드에 있을 때, TDBA는 2차 또는 홈 주소 공간 내 위치를 각각 지정한다. DAT(Dynamic Address Translation)가 오프(off)되어 있을 때, TDBA는 실 스토리지(real storage) 내 위치를 지정한다.
TDBA는, 트랜잭션이 이어서(subsequently) 중단되면, TBEGIN-명시 TDB라 불리는 트랜잭션 진단 블록을 찾기 위해 CPU에 의해 사용된다. TDBA의 최우측 3개 비트는 제로이며, 이것은 TBEGIN-명시 TDB가 더블워드 경계 상에 있다는 것을 의미한다.
최외부 TRANSACTION BEGIN(TBEGIN) 명령의 B1 필드가 제로일 때, 트랜잭션 진단 블록 주소는 유효하지 않으며, 트랜잭션이 이어서 중단되면 TBEGIN-명시 TDB는 저장되지 않는다.
트랜잭션 중단 PSW( Transaction Abort PSW , TAPSW )
내포 깊이가 최초에 제로일 때 TRANSACTION BEGIN(TBEGIN) 명령의 실행 동안에, 트랜잭션 중단 PSW는 현재의 PSW의 콘텐츠로 세트되고, 트랜잭션 중단 PSW의 명령 주소는 다음 순차 명령(즉, 상기 최외부 TBEGIN 다음에 오는 명령)을 지정한다. 내포 깊이가 최초에 제로일 때 제약 TRANSACTION BEGIN(TBEGINC) 명령의 실행 동안에, 트랜잭션 중단 PSW의 명령 주소가 (TBEGINC 다음에 오는 다음 순차 명령 대신에) TBEGINC 명령을 지정하는 것을 제외하고는, 트랜잭션 중단 PSW는 현재의 PSW의 콘텐츠로 세트된다.
트랜잭션이 중단될 때, 트랜잭션 중단 PSW 내 조건 코드는 상기 중단 조건의 심각도를 표시하는 코드로 대체된다. 이어서, 만일 트랜잭션이 인터럽션으로 귀결되지 않는 원인들로 인해 중단되었다면, PSW는 트랜잭션 중단 PSW로부터 로드되고; 만일 트랜잭션이 인터럽션으로 귀결되는 원인들로 인해 중단되었다면, 트랜잭션 중단 PSW는 인터럽션의 구(old) PSW로서 저장된다.
트랜잭션 중단 PSW는 임의의 내부 TRANSACTION BEGIN 명령의 실행 동안에 변경되지 않는다.
트랜잭션 내포 깊이( Transaction Nesting Depth , TND )
트랜잭션 내포 깊이는 예를 들어 16-비트 무부호 값인데, 이 값은 TRANSACTION BEGIN 명령이 조건 코드 0으로 완료될 때마다 증분되고(incremented) TRANSACTION END 명령이 완료될 때마다 감분된다(decremented). 트랜잭션 내포 깊이는 트랜잭션이 중단될 때 또는 CPU 리셋에 의해 제로로 리셋된다.
한 실시 예에서, 15의 최대 TND가 구현된다.
한 구현 예에서, CPU가 제약 트랜잭션 실행 모드에 있을 때, 트랜잭션 내포 깊이는 일(one)이다. 추가로, 최대 TND는 4-비트 값으로서 표시될 수 있지만, TND는 트랜잭션 진단 블록에서 자신의 검사(inspection)를 용이하게 하기 위해 16-비트 값으로 정의된다.
트랜잭션 진단 블록( TDB )
트랜잭션이 중단될 때, 여러 상태 정보가 트랜잭션 진단 블록(TDB) 내에 다음과 같이 세이브될 수 있다:
1. TBEGIN -명시 TDB : 비제약 트랜잭션에서, 최외부 TBEGIN 명령의 B1 필드가 비제로일 때, 상기 명령의 제1 오퍼랜드 주소는 TBEGIN-명시 TDB를 지정한다. 이것은 애플리케이션 프로그램 명시 위치이며, 이 위치는 상기 애플리케이션의 중단 처리부(abort handler)에 의해 조사(examine)될 수 있다.
2. 프로그램- 인터럽션 ( PI ) TDB : 만일 비제약 트랜잭션이 필터링되지 않은(non-filtered) 프로그램 예외 조건으로 인해 중단되거나, 또는 만일 제약 트랜잭션이 임의의 프로그램 예외 조건(즉, 프로그램 인터럽션 인지로 귀결되는 모든 조건)으로 인해 중단되면, PI-TDB는 프리픽스 영역(prefix area) 내 위치들로 저장된다. 이것은 운영체제가 검사하는 데 그리고 그것이 제공할 수 있는 모든 진단 보고(any diagnostic reporting)에서 로그아웃하는 데 이용 가능하다.
3. 인터셉션 ( Interception ) TDB : 만일 트랜잭션이 인터셉션으로 귀결되는 임의의 프로그램 예외 조건으로 인해 중단되면(즉, 상기 조건은 해석적 실행이 종료되게 하고 제어가 호스트 프로그램으로 반환되게 한다), TDB는 게스트 운영체제에 대하여 상태 묘사 블록(state description block)에서 명시되는 위치로 저장된다.
TBEGIN-명시 TDB는 한 실시 예에서 TDB 주소가 유효할 때(즉, 최외부 TBEGIN 명령의 B1 필드가 비제로일 때)에만 저장된다.
필터링되지 않은 프로그램 예외 조건들로 인한 중단들에서는, PI-TDB 또는 인터셉션 TDB 중 하나만 저장될 것이다. 그러므로, 중단에서는 0개, 1개, 또는 2개 TDB가 저장될 수 있다.
상기 TDB들의 각각의 한 예와 관련된 추가 상세 사항이 아래에 기술된다:
TBEGIN -명시 TDB : 유효한 트랜잭션 진단 블록 주소에 의해 명시되는 256-바이트 위치. 트랜잭션 진단 블록 주소가 유효할 때, TBEGIN-명시 TDB는 트랜잭션 중단시에 저장된다. TBEGIN-명시 TDB는 최외부 TRANSACTION BEGIN 명령의 실행시에 효력이 있는 모든 스토리지 보호 메커니즘의 적용을 받는다. TBEGIN-명시 TDB의 임의 부분의 PER(Program Event Recording) 스토리지 변경 이벤트는 트랜잭션 중단 처리 동안이 아니라 최외부 TBEGIN의 실행 동안에 검출된다.
PER의 한 가지 목적은 프로그램을 디버깅하는 것을 돕는 것이다. 이것은 프로그램이 다음의 이벤트 유형들을 보고받을 수 있게 하며, 예는 다음과 같다:
Figure 112014120036821-pct00016
성공적인 분기 명령의 실행. 분기 타겟 위치가 지정된 스토리지 영역(storage area) 내에 있을 때만 이벤트가 발생하게 하는 옵션이 제공된다.
Figure 112014120036821-pct00017
지정된 스토리지 영역으로부터 명령의 페치.
Figure 112014120036821-pct00018
지정된 스토리지 영역의 콘텐츠의 변경. 상기 스토리지 영역이 지정된 주소 공간들 내에 있을 때만 이벤트가 발생하게 하는 옵션이 제공된다.
Figure 112014120036821-pct00019
STORE USING REAL ADDRESS 명령의 실행.
Figure 112014120036821-pct00020
TRANSACTION END 명령의 실행.
프로그램은, STORE USING REAL ADDRESS에 대한 이벤트가 스토리지 변경 이벤트와 함께만 명시될 수 있는 것을 제외하고는, 하나 또는 그 이상의 상기 이벤트 유형들이 인지되도록 선택적으로 명시할 수 있다. PER 이벤트에 관한 정보가 프로그램 인터럽션에 의하여 프로그램에 제공되며, 상기 인터럽션의 원인은 인터럽션 코드에서 식별된다.
트랜잭션 진단 블록 주소가 유효하지 않을 때, TBEGIN-명시 TDB는 저장되지 않는다.
프로그램- 인터럽션 TDB : 실 위치들 6,144~6,399(1800~18FF hex). 프로그램 인터럽션 TDB는 트랜잭션이 프로그램 인터럽션으로 인해 중단될 때 저장된다. 트랜잭션이 다른 원인들로 인해 중단될 때, 프로그램 인터럽션 TDB의 콘텐츠는 예측 불가능하다.
프로그램 인터럽션 TDB는 어느 보호 메커니즘의 적용도 받지 않는다. PER 스토리지 변경 이벤트들은 프로그램 인터럽션 TDB가 프로그램 인터럽션 동안에 저장될 때 프로그램 인터럽션 TDB에 대하여 검출되지 않는다.
인터셉션 ( Interception ) TDB : 상태 묘사(state description)의 위치들 488~495에 의해 명시되는 256-바이트 호스트 실 위치. 인터셉션 TDB는 중단된 트랜잭션이 게스트 프로그램 인터럽션 인터셉션을 일으킬 때(즉, 인터셉션 코드 8) 저장된다. 트랜잭션이 다른 원인들로 인해 중단될 때, 인터셉션 TDB의 콘텐츠는 예측 불가능하다. 인터셉션 TDB는 어느 보호 메커니즘의 적용도 받지 않는다.
도 9에 도시된 바와 같이, 트랜잭션 진단 블록(900)의 필드들은 한 실시 예에서 다음과 같다:
포맷(902): 바이트 0은 다음과 같이 유효성(validity)과 포맷 인디케이션(format indication)을 보유한다:
값 의미
0 TDB의 나머지 필드들은 예측 불가능하다.
1 포맷-1 TDB, 이것의 나머지 필드들은 아래에 기술된다.
2~255 유보됨
포맷 필드가 제로인 TDB는 널(null) TDB라 불린다.
플래그들(904): 바이트 1은 다음과 같은 여러 인디케이션들을 보유한다:
충돌 토큰 유효성(Conflict Token Validity, CTV): 트랜잭션이 페치 충돌 또는 저장 충돌(즉, 각각 중단 코드 9 또는 중단 코드 10)로 인해 중단될 때, 바이트 1의 비트 0은 충돌 토큰 유효성 인디케이션(conflict token validity indication)이다. CTV 인디케이션이 일(one)일 때, TDB의 바이트들 16~23 내 충돌 토큰(910)은 충돌이 검출된 논리 주소를 보유한다. CTV 지시가 제로일 때, TDB의 바이트들 16~23은 예측 불가능하다.
트랜잭션이 페치 충돌 또는 저장 충돌 이외의 이유로 인해 중단될 때, 바이트 1의 비트 0은 제로로 저장된다.
제약-트랜잭션 인디케이션(CTI): CPU가 제약 트랜잭션 실행 모드에 있을 때, 바이트 1의 비트 1은 일(one)로 세트된다. CPU가 비제약 트랜잭션 실행 모드에 있을 때, 바이트 1의 비트 1은 제로로 세트된다.
유보됨: 바이트 1의 비트들 2~7은 유보되고, 제로들로 저장된다.
트랜잭션 내포 깊이(TND)(906): 바이트들 6~7은 트랜잭션이 중단되었을 때 트랜잭션 내포 깊이를 보유한다.
트랜잭션 중단 코드(TAC)(908): 바이트들 8~15는 64-비트 무부호 트랜잭션 중단 코드를 보유한다. 각 코드 포인트는 트랜잭션이 중단되는 이유를 표시한다.
트랜잭션이 프로그램 인터럽션 이외의 조건들로 인해 중단될 때 트랜잭션 중단 코드가 프로그램 인터럽션 TDB에 저장되는지는 모델 종속적이다.
충돌 토큰(910): 페치 충돌 또는 저장 충돌(즉, 각각 중단 코드 9 또는 중단 코드 10)로 인해 중단되는 트랜잭션들에서, 바이트들 16~23은 충돌이 검출된 스토리지 위치의 논리 주소를 보유한다. 충돌 토큰은 바이트 1의 비트 0인 CTV 비트가 일(one)일 때 의미가 있다.
CTV 비트가 제로일 때, 바이트들 16~23은 예측 불가능하다.
CPU에 의한 추론적 실행 때문에, 충돌 토큰은 트랜잭션의 개념적인 실행 순서에 의해 반드시 액세스될 필요는 없는 스토리지 위치를 지정할 수 있다.
중단된 트랜잭션 명령 주소(ATIA)(912): 바이트들 24~31은 중단이 검출되었을 때 실행중인 명령을 식별하는 명령 주소를 보유한다. 트랜잭션이 중단 코드들 2, 5, 6, 11, 13, 또는 256 또는 그 이상의 코드로 인해 중단될 때, 또는 트랜잭션이 중단 코드들 4 또는 13으로 인해 중단되고 프로그램 예외 조건이 무효화될(nullifying) 때, ATIA는 실행중이었던 명령을 직접 가리킨다. 트랜잭션이 중단 코드들 4 또는 12로 인해 중단되고 프로그램 예외 조건이 무효화되지(nullifying) 않을 때, ATIA는 실행중이었던 명령을 지나서 가리킨다.
트랜잭션이 중단 코드들 7~10, 14~16, 또는 255로 인해 중단될 때, ATIA는 그 중단을 일으키는 정확한 명령을 반드시 표시할 필요는 없으나, 트랜잭션 내 더 이전 또는 이후 명령을 가리킬 수 있다.
만일 트랜잭션이 실행형(execute-type) 명령의 타겟인 명령으로 인해 중단되면, ATIA는 상기 실행형 명령을 식별하며, 위에 기술된 중단 코드에 따라 상기 명령을 가리키거나 상기 명령을 지나쳐 가리킨다. ATIA는 상기 실행형 명령의 타겟을 표시하지 않는다.
ATIA는 트랜잭션이 중단될 때의 주소지정 모드(addressing mode)의 적용을 받는다. 24-비트 주소지정 모드에서, 필드의 비트들 0~40은 제로들을 보유한다. 31-비트 주소지정 모드에서, 필드의 비트들 0~32는 제로들을 보유한다.
트랜잭션이 프로그램 인터럽션 이외의 조건들로 인해 중단될 때 중단된 트랜잭션 명령 주소가 프로그램 인터럽션 TDB에 저장되는지는 모델 종속적이다.
트랜잭션이 중단 코드들 4 또는 12로 인해 중단되고 프로그램 예외 조건이 무효화되지(nullifying) 않을 때, ATIA는 그 중단을 일으키는 명령을 가리키지 않는다. ATIA에서 인터럽션 길이 코드(ILC)에 의해 표시되는 하프워드들의 수를 뺌으로써, 중단을 일으키는 명령은 억제(suppressing) 또는 종결(terminating)되는 조건 또는 비-PER 이벤트들에 대해서는 완료(completing)되는 조건에서 식별될 수 있다. 트랜잭션이 PER 이벤트로 인해 중단되고 다른 프로그램 예외 조건이 존재하지 않을 때, ATIA는 예측 불가능하다.
트랜잭션 진단 블록 주소가 유효할 때, ILC는 TBEGIN-명시 TDB의 바이트들 36~39에서 프로그램 인터럽션 식별(PIID) 조사를 받을 수 있다. 필터링이 적용되지 않을 때, ILC는 실 스토리지 내 위치 140~143에서 PIID 조사를 받을 수 있다.
예외 액세스 식별(EAID)(914): 특정한 필터링된 프로그램 예외 조건들로 인해 중단되는 트랜잭션들에서, TBEGIN-명시 TDB의 바이트 32는 예외 액세스 식별(exception access identification)을 보유한다. z/Architecture의 한 예에서, EAID의 포맷과, 그것이 저장되는 경우들은 예외 조건이 인터럽션으로 귀결될 때 실 위치 160에 기술되는 바와 동일하며, 참조에 의해 위에서 포함된 Principles of Operation(운영 원리)에 기술된 바와 같다.
프로그램 인터럽션으로 귀결되는 모든 예외 조건들을 포함하여 다른 이유들로 인해 중단되는 트랜잭션들에서, 바이트 32는 예측 불가능하다. 바이트 32는 프로그램 인터럽션 TDB에서 예측 불가능하다.
이 필드는 트랜잭션 진단 블록 주소에 의해 지정되는 TDB에만 저장되며; 그렇지 않으면, 필드는 유보된다. EAID는 액세스 목록 제어 또는 DAT 보호(access list controlled or DAT protection), ASCE-형, 페이지 변환, 영역 제1(region first) 변환, 영역 제2(region second) 변환, 영역 제3(region third) 변환, 및 세그먼트 변환 프로그램 예외 조건들을 위해서만 저장된다.
데이터 예외 코드(DXC)(916): 필터링된 데이터 예외 프로그램 예외 조건들로 인해 중단되는 트랜잭션들에서, TBEGIN-명시 TDB의 바이트 33은 데이터 예외 코드(data exception code)를 보유한다. z/Architecture의 한 예에서, DXC의 포맷과, 그것이 저장되는 경우들은 예외 조건이 인터럽션으로 귀결될 때 실 위치 147에 기술되는 바와 동일하며, 참조에 의해 위에서 포함된 Principles of Operation(운영 원리)에 기술된 바와 같다. 한 예에서, 위치 147은 DXC를 포함한다.
프로그램 인터럽션으로 귀결되는 모든 예외 조건들을 포함하여 다른 이유들로 인해 중단되는 트랜잭션들에서, 바이트 33은 예측 불가능하다. 바이트 33은 프로그램 인터럽션 TDB에서 예측 불가능하다.
이 필드는 트랜잭션 진단 블록 주소에 의해 지정되는 TDB에만 저장되며; 그렇지 않으면, 필드는 유보된다. DXC는 데이터 프로그램 예외 조건들을 위해서만 저장된다.
프로그램 인터럽션 식별(PIID)(918): 필터링된 프로그램 예외 조건들로 인해 중단되는 트랜잭션들에서, TBEGIN-명시 TDB의 바이트들 36~39는 프로그램 인터럽션 식별(program interruption identification)을 보유한다. z/Architecture의 한 예에서, PIID의 포맷은 상기 조건이 인터럽션으로 귀결될 때 실 위치들 140~143에 기술되는 바와 같으며(참조에 의해 위에서 포함된 Principles of Operation(운영 원리)에 기술된 바와 같음), 단 예외가 있는데 PIID의 비트들 13~14 내 명령 길이 코드(ILC)는 예외 조건이 검출된 명령에 관한 것이다.
프로그램 인터럽션으로 귀결되는 예외 조건들을 포함하여 다른 이유들로 인해 중단되는 트랜잭션들에서, 바이트들 36~39는 예측 불가능하다. 바이트들 36~39는 프로그램 인터럽션 TDB에서 예측 불가능하다.
이 필드는 트랜잭션 진단 블록 주소에 의해 지정되는 TDB에만 저장되며; 그렇지 않으면, 필드는 유보된다. 프로그램 인터럽션 식별은 프로그램 예외 조건들을 위해서만 저장된다.
변환 예외 식별(TEID)(920): 다음의 필터링된 프로그램 예외 조건들 중 어느 하나로 인해 중단되는 트랜잭션들에서, TBEGIN-명시 TDB의 바이트들 40~47은 변환 예외 식별(translation exception identification)을 보유한다.
Figure 112014120036821-pct00021
액세스 목록 제어 또는 DAT 보호(Access list controlled or DAT protection)
Figure 112014120036821-pct00022
ASCE-형(ASCE-type)
Figure 112014120036821-pct00023
페이지 변환
Figure 112014120036821-pct00024
영역-제1 변환(Region-first translation)
Figure 112014120036821-pct00025
영역-제2 변환(Region-second translation)
Figure 112014120036821-pct00026
영역-제3 변환(Region-third translation)
Figure 112014120036821-pct00027
세그먼트 변환 예외
z/Architecture의 한 예에서, TEID의 포맷은 상기 조건이 인터럽션으로 귀결될 때 실 위치들 168~175에 기술되는 바와 동일하며, 참조에 의해 위에서 포함된 Principles of Operation(운영 원리)에 기술된 바와 같다.
프로그램 인터럽션으로 귀결되는 예외 조건들을 포함하여 다른 이유들로 인해 중단되는 트랜잭션들에서, 바이트들 40~47은 예측 불가능하다. 바이트들 40~47은 프로그램 인터럽션 TDB에서 예측 불가능하다.
이 필드는 트랜잭션 진단 블록 주소에 의해 지정되는 TDB에만 저장되며; 그렇지 않으면, 필드는 유보된다.
중단 이벤트 주소(Breaking Event Address)(922): 필터링된 프로그램 예외 조건들로 인해 중단되는 트랜잭션들에서, TBEGIN-명시 TDB의 바이트들 48~55는 중단 이벤트 주소(breaking event address)를 보유한다. z/Architecture의 한 예에서, 중단 이벤트 주소의 포맷은 상기 조건이 인터럽션으로 귀결될 때 실 위치들 272~279에 기술되는 바와 동일하며, 참조에 의해 위에서 포함된 Principles of Operation(운영 원리)에 기술된 바와 같다.
프로그램 인터럽션으로 귀결되는 예외 조건들을 포함하여 다른 이유들로 인해 중단되는 트랜잭션들에서, 바이트들 48~55는 예측 불가능하다. 바이트들 48~55는 프로그램 인터럽션 TDB에서 예측 불가능하다.
이 필드는 트랜잭션 진단 블록 주소에 의해 지정되는 TDB에만 저장되며; 그렇지 않으면, 필드는 유보된다.
중단 이벤트들(breaking events)과 관련된 더 상세사항은 아래에 기술된다.
z/Architecture의 한 실시 예에서, PER-3 퍼실리티가 설치되어 있을 때, 그것은 프로그램에 CPU의 순차적인 실행에서 중단(break)을 일으키는 마지막 명령의 주소를 제공한다. 중단 이벤트 주소의 기록은 와일드 분기 검출(wild branch detection)을 위한 디버깅 보조수단(debugging assist)으로서 사용될 수 있다. 이 퍼실리티는 예를 들어 CPU에 중단 이벤트 주소 레지스터(breaking event address register)라 불리는 64-비트 레지스터를 제공한다. TRANSACTION ABORT 이외의 명령이 순차적인 명령 실행에서 중단(break)을 일으킬(즉, PSW 내 상기 명령 주소가 상기 명령의 길이에 의해 증분되기보다는 대체될) 때마다, 그 명령의 주소가 중단 이벤트 주소 레지스터에 배치된다. 프로그램 인터럽션이 발생할 때마다, PER이 표시되든 되지 않든 간에, 중단 이벤트 주소 레지스터의 현재 콘텐츠가 실 스토리지 위치들 272~279에 배치된다.
만일 중단 이벤트를 일으키는 명령이 실행형 명령(EXECUTE 또는 EXECUTE RELATIVE LONG)의 타겟이면, 상기 실행형 명령을 페치하는 데 사용되는 명령 주소가 중단 이벤트 주소 레지스터에 배치된다.
z/Architecture의 한 실시 예에서, 중단 이벤트는 다음의 명령들 중 하나가 분기(branching)를 일으킬 때마다 발생하는 것으로 간주된다: BRANCH AND LINK (BAL, BALR); BRANCH AND SAVE (BAS, BASR); BRANCH AND SAVE AND SET MODE (BASSM); BRANCH AND SET MODE (BSM); BRANCH AND STACK (BAKR); BRANCH ON CONDITION (BC, BCR); BRANCH ON COUNT (BCT, BCTR, BCTG, BCTGR); BRANCH ON INDEX HIGH (BXH, BXHG); BRANCH ON INDEX LOW OR EQUAL (BXLE, BXLEG); BRANCH RELATIVE ON CONDITION (BRC); BRANCH RELATIVE ON CONDITION LONG (BRCL); BRANCH RELATIVE ON COUNT (BRCT, BRCTG); BRANCH RELATIVE ON INDEX HIGH (BRXH, BRXHG); BRANCH RELATIVE ON INDEX LOW OR EQUAL (BRXLE, BRXLG); COMPARE AND BRANCH (CRB, CGRB); COMPARE AND BRANCH RELATIVE (CRJ, CGRJ); COMPARE IMMEDIATE AND BRANCH (CIB, CGIB); COMPARE IMMEDIATE AND BRANCH RELATIVE (CIJ, CGIJ); COMPARE LOGICAL AND BRANCH (CLRB, CLGRB); COMPARE LOGICAL AND BRANCH RELATIVE (CLRJ, CLGRJ); COMPARE LOGICAL IMMEDIATE AND BRANCH (CLIB, CLGIB); 및 COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE (CLIJ, CLGIJ).
중단 이벤트는 또한 다음의 명령들 중 하나가 완료될 때마다 발생하는 것으로 간주된다: BRANCH AND SET AUTHORITY (BSA); BRANCH IN SUBSPACE GROUP (BSG); BRANCH RELATIVE AND SAVE (BRAS); BRANCH RELATIVE AND SAVE LONG (BRASL); LOAD PSW (LPSW); LOAD PSW EXTENDED (LPSWE); PROGRAM CALL (PC); PROGRAM RETURN (PR); PROGRAM TRANSFER (PT); PROGRAM TRANSFER WITH INSTANCE (PTI); RESUME PROGRAM (RP); 및 TRAP (TRAP2, TRAP4).
중단 이벤트는 트랜잭션이 중단되는 것의 결과로서(암시적으로 또는 TRANSACTION ABORT 명령의 결과로서) 발생하지는 않는 것으로 간주된다.
모델 종속적 진단 정보(924): 바이트들 112~127은 모델 종속적 진단 정보(model dependent diagnostic information)를 보유한다.
12(필터링된 프로그램 인터럽션)를 제외한 모든 중단 코드들에서, 모델 종속적 진단 정보는 저장되는 각 TDB에 세이브된다.
한 실시 예에서, 모델 종속적 진단 정보는 다음을 포함한다:
Figure 112014120036821-pct00028
바이트들 112~119는 트랜잭션 실행 분기 인디케이션(transactional execution branch indications, TXBI)이라 불리는 64비트들로 이루어진 벡터를 보유한다. 상기 벡터의 첫 63개 비트들의 각각은 CPU가 트랜잭션 실행 모드에 있던 동안 분기 명령(branching instruction)을 실행한 결과들을 다음과 같이 표시한다:
값 의미
0 명령이 분기가 일어나지 않고 완료되었음.
1 명령이 분기가 일어나고 완료되었음.
비트 0은 제1의 위와 같은 분기 명령의 결과를 나타내고, 비트 1은 제2의 위와 같은 분기 명령의 결과를 나타내는 등의 방식이다.
만일 CPU가 트랜잭션 실행 모드에 있던 동안 63개 미만의 분기 명령들이 실행되었다면, 분기 명령들과 대응하지 않는 최우측 비트들은 제로들로 세트된다(비트 63 포함). 63개 이상의 분기 명령들이 실행되었을 때, TXBI의 비트 63은 일(one)로 세트된다.
TXBI 내 비트들은 위에 열거된 바와 같이 중단 이벤트를 일으킬 수 있는 명령들에 의해 세트되며, 다음은 예외이다:
- 모든 제한된 명령은 비트가 TXBI에 세트되게 하지 않는다.
- 예를 들어 z/Architecture의 명령들에서, BRANCH ON CONDITION, BRANCH RELATIVE ON CONDITION, 또는 BRANCH RELATIVE ON CONDITION LONG 명령의 M1 필드가 제로일 때, 또는 다음의 명령들의 R2 필드가 제로일 때, 그 명령의 실행이 비트가 TXBI에 세트되게 할 것인지는 모델 종속적이다.
Figure 112014120036821-pct00029
BRANCH AND LINK (BALR); BRANCH AND SAVE (BASR); BRANCH AND SAVE AND SET MODE (BASSM); BRANCH AND SET MODE (BSM); BRANCH ON CONDITION (BCR); 및 BRANCH ON COUNT (BCTR, BCTGR)
Figure 112014120036821-pct00030
호스트 액세스 예외에 의해 일어난 중단 조건들에서, 바이트 127의 비트 위치 0은 일로 세트된다. 다른 모든 중단 조건들에서, 바이트 127의 비트 위치 0은 제로로 세트된다.
Figure 112014120036821-pct00031
로드/저장 유닛(LSU)에 의해 검출된 중단 조건들에서, 바이트 127의 최우측 5개 비트들은 그 원인의 표시(indication of the cause)를 보유한다. LSU에 의해 검출되지 않은 중단 조건들에서, 바이트 127은 유보된다.
범용 레지스터들(930): 바이트들 128~255는 트랜잭션이 중단된 시점에 범용 레지스터들 0~15의 컨텐츠를 보유한다. 상기 레지스터들은 범용 레지스터 0부터 시작하여 범용 레지스터 0은 바이트들 128~135에, 범용 레지스터 1은 바이트들 136~143에 오름차순으로 저장되는 등의 방식이다.
유보됨: 다른 모든 필드들은 유보된다. 다르게 표시되지 않는 한, 유보된 필드들의 콘텐츠는 예측 불가능하다.
다른 CPU들과 I/O 서브시스템에 의해 관찰될 때, 트랜잭션 중단 동안에 TDB(들)를 저장하는 것은 비트랜잭션 저장들 후에 발생하는 다중 액세스 참조(multiple access reference)이다.
트랜잭션은 그것이 실행되는 즉시 구성(immediate configuration)의 범위 밖의 원인들로 인해 중단될 수 있다. 예를 들어, (LPAR 또는 z/VM 같은) 하이퍼바이저에 의해 인지되는 과도 이벤트(transient events)는 트랜잭션에 중단을 일으킬 수 있다.
트랜잭션 진단 블록에 제공되는 정보는 진단 목적을 위한 것이며 실질적으로 정확하다. 하지만, 즉시 구성(immediate configuration)의 범위 밖의 이벤트에 의해 중단이 일어날 수도 있기 때문에, 중단 코드 또는 프로그램 인터럽션 식별 같은 정보는 상기 구성 내의 조건들을 정확히 반영하지 못할 수도 있으며, 그러므로 프로그램 동작(program action)을 결정하는 데 사용하면 안된다.
TDB에 세이브되는 진단 정보에 더해서, 트랜잭션이 데이터 예외 프로그램 예외 조건으로 인해 중단되고 제어 레지스터 0의 비트 45인 AFP 레지스터 제어와 유효 부동 소수점 연산 허용 제어(F)가 모두 일(one)일 때, 필터링이 프로그램 예외 조건에 적용되는지와 상관없이, 데이터 예외 코드(DXC)가 부동 소수점 제어 레지스터(FPCR)의 바이트 2로 배치된다. 트랜잭션이 중단되고 AFP 레지스터 제어 또는 유효 부동 소수점 연산 허용 제어 중 둘 모두 또는 둘 중 하나가 제로일 때, DXC는 FPCR로 배치되지 않는다.
한 실시 예에서, 여기에 표시된 바와 같이, 트랜잭션 실행 퍼실리티가 설치되어 있을 때, 다음의 범용 명령들이 제공된다:
Figure 112014120036821-pct00032
EXTRACT TRANSACTION NESTING DEPTH
Figure 112014120036821-pct00033
NONTRANSACTIONAL STORE
Figure 112014120036821-pct00034
TRANSACTION ABORT
Figure 112014120036821-pct00035
TRANSACTION BEGIN
Figure 112014120036821-pct00036
TRANSACTION END
CPU가 트랜잭션 실행 모드에 있을 때, 특정한 명령들의 실행 시도는 제한되며 트랜잭션의 중단을 일으킨다.
제약 트랜잭션 실행 모드에서 발행될 때, 제한된 명령들의 실행 시도도 트랜잭션 제약 프로그램 인터럽션(transaction constraint program interruption)으로 귀결될 수 있거나, 또는 마치 트랜잭션이 제약되지 않은 것처럼 실행의 진행으로 귀결될 수 있다.
z/Architecture의 한 예에서, 제한된 명령들(restricted instructions)은 예로서 다음의 비특권 명령들(non-privileged instructions)을 포함한다: COMPARE AND SWAP AND STORE; MODIFY RUNTIME INSTRUMENTATION CONTROLS; PERFORM LOCKED OPERATION; M1 필드 내 코드가 6 또는 7일 때, PREFETCH DATA (RELATIVE LONG); M3 필드는 제로이고 R1 필드 내 코드가 6 또는 7일 때, STORE CHARACTERS UNDER MASK HIGH; STORE FACILITY LIST EXTENDED; STORE RUNTIME INSTRUMENTATION CONTROLS; SUPERVISOR CALL; 및 TEST RUNTIME INSTRUMENTATION CONTROLS.
상기 목록에서, COMPARE AND SWAP AND STORE와 PERFORM LOCKED OPERATION은 TX 모드에서 기본 명령들(basic instructions)의 사용에 의해 더 효율적으로 구현될 수 있는 복합 명령들(complex instructions)이다. PREFETCH DATA와 PREFETCH DATA RELATIVE LONG의 경우는 6 및 7의 코드들이 캐시 라인(cache line)을 해제하므로 제한되며, 트랜잭션의 완료 전에 데이터의 커밋(commitment)을 필요로할 가능성이 있다. SUPERVISOR CALL은 그것이 인터럽션(이것은 트랜잭션의 중단을 일으킴)을 일으키므로 제한된다.
아래에 나열된 조건들하에서, 다음의 명령들은 제한된다:
Figure 112014120036821-pct00037
명령의 R2 필드가 비제로이고 분기 추적(branch tracing)이 가능할 때, BRANCH AND LINK (BALR), BRANCH AND SAVE (BASR), 및 BRANCH AND SAVE AND SET MODE.
Figure 112014120036821-pct00038
R2 필드가 비제로이고 모드 추적(mode tracing)이 가능할 때, BRANCH AND SAVE AND SET MODE 및 BRANCH AND SET MODE; 모드 추적이 가능할 때, SET ADDRESSING MODE.
Figure 112014120036821-pct00039
모니터 이벤트 조건(monitor event condition)이 인지될 때, MONITOR CALL.
상기 목록은 추적 엔트리들(trace entries)을 형성할 수 있는 명령들을 포함한다. 만일 이 명령들이 트랜잭션적으로 실행되도록 허용되고 추적 엔트리들이 형성되었다면, 그리고 그 트랜잭션이 이어서 중단되었다면, 제어 레지스터 12 내 추적 테이블 포인터(trace table pointer)가 개선될 것이지만, 추적 테이블에 대한 저장들은 폐기될 것이다. 이것은 추적 테이블에 일관성이 없는 갭(gap)을 남길 것이다. 그러므로, 상기 명령들은 추적 엔트리들을 형성하는 경우들로 제한된다.
CPU가 트랜잭션 실행 모드에 있을 때, 다음의 명령들이 제한되는지는 모델 종속적이다: CIPHER MESSAGE; CIPHER MESSAGE WITH CFB; CIPHER MESSAGE WITH CHAINING; CIPHER MESSAGE WITH COUNTER; CIPHER MESSAGE WITH OFB; COMPRESSION CALL; COMPUTE INTERMEDIATE MESSAGE DIGEST; COMPUTE LAST MESSAGE DIGEST; COMPUTE MESSAGE AUTHENTICATION CODE; CONVERT UNICODE-16 TO UNICODE-32; CONVERT UNICODE-16 TO UNICODE-8; CONVERT UNICODE-32 TO UNICODE-16; CONVERT UNICODE-32 TO UNICODE-8; CONVERT UNICODE-8 TO UNICODE-16; CONVERT UNICODE-8 TO UNICODE-32; PERFORM CRYPTOGRAPHIC COMPUTATION; RUNTIME INSTRUMENTATION OFF; 및 RUNTIME INSTRUMENTATION ON.
상기 명령들 중 각각은 하드웨어 코프로세서(hardware co-processor)에 의해 현재 구현되거나, 또는 과거 머신들에 있었으며, 그러므로 제한된 것으로 간주된다.
유효 AR 수정 허용(effective allow AR modification, A) 제어가 제로일 때, 다음의 명령들은 제한된다: COPY ACCESS; LOAD ACCESS MULTIPLE; LOAD ADDRESS EXTENDED; 및 SET ACCESS.
상기 명령들 중 각각은 액세스 레지스터의 콘텐츠의 수정을 일으킨다. 만일 TRANSACTION BEGIN 명령 내 A 제어가 제로이면, 프로그램은 액세스 레지스터의 수정이 허용되지 않는다고 명시적으로 표시한 것이다.
유효 부동 소수점 연산 허용(F) 제어가 제로일 때, 부동 소수점 명령들은 제한된다.
어떤 환경들하에서, 다음의 명령들은 제한될 수 있다: EXTRACT CPU TIME; EXTRACT PSW; STORE CLOCK; STORE CLOCK EXTENDED; 및 STORE CLOCK FAST.
상기 명령들 중 각각은 해석적 실행 상태 묘사(interpretative execution state description)에서 인터셉션 제어의 적용을 받는다. 만일 하이퍼바이저가 이 명령들에 대하여 상기 인터셉션 제어를 세트했다면, 그들의 실행은 하이퍼바이저 구현으로 인해 오래 지속될 수 있는데; 그러므로, 그들은 만일 인터셉션이 발생하면 제한된 것으로 간주된다.
비제약 트랜잭션이 제한된 명령(restricted instruction)의 실행 시도 때문에 중단될 때, 트랜잭션 진단 블록 내 트랜잭션 중단 코드는 11로 세트되고(제한된 명령), 그리고 조건 코드가 3으로 세트되며, 예외는 다음과 같다: 비제약 트랜잭션이 명령의 실행 시도(그렇지 않은 경우 특권 연산 예외(privileged operation exception)로 귀결될 수 있는)로 인해 중단될 때, 중단 코드가 11(제한된 명령)로 세트될지 또는 4(특권 연산 프로그램 인터럽션의 인지로부터 기인하는 필터링되지 않은 프로그램 인터럽션)로 세트될지는 예측 불가능하다. M1 필드 내 코드가 6 또는 7일 때 PREFETCH DATA (RELATIVE LONG)의 실행 시도로 인해 또는 M3 필드가 제로이고 R1 필드 내 코드가 6 또는 7일 때 STORE CHARACTERS UNDER MASK HIGH의 실행 시도로 인해 비제약 트랜잭션이 중단될 때, 중단 코드가 11(제한된 명령)로 세트될지 또는 16(캐시 기타(cache other))으로 세트될지는 예측 불가능하다. 비제약 트랜잭션이 MONITOR CALL의 실행 시도로 인해 중단되고, 모니터 이벤트 조건 및 명세 예외 조건이 모두 존재할 때, 중단 코드가 11로 세트될지 또는 4로 세트될지, 아니면 프로그램 인터럽션이 필터링된 경우 12로 세트될지는 예측 불가능하다.
추가적인 명령들이 제약 트랜잭션에서 제한될 수 있다. 이 명령들은 현재 비제약 트랜잭션에서 제한되는 것으로 정의되지는 않지만, 그들은 미래의 프로세서들 상의 비제약 트랜잭션에서 어떤 환경들하에서는 제한될 수 있다.
어떤 제한된 명령들은 미래의 프로세서들 상의 트랜잭션 실행 모드에서 허용될 수 있다. 따라서, 프로그램은 제한된 명령의 실행 시도로 인해 트랜잭션이 중단되는 것에 의존해서는 안 된다. TRANSACTION ABORT 명령은 트랜잭션이 신뢰할 수 있을 정도로 중단되도록 하는 데 사용될 수 있다.
비제약 트랜잭션에서, 프로그램은 제한된 명령으로 인해 중단되는 트랜잭션을 수용하기 위한 대체 가능한(alternative) 비트랜잭션 코드 경로를 제공해야 한다.
연산시에, 트랜잭션 내포 깊이가 제로일 때, 조건 코드 제로로 귀결되는 TRANSACTION BEGIN(TBEGIN) 명령의 실행은 CPU를 비제약 트랜잭션 실행 모드로 진입하게 한다. 트랜잭션 내포 깊이가 제로일 때, 조건 코드 제로로 귀결되는 제약 TRANSACTION BEGIN(TBEGINC) 명령의 실행은 CPU를 제약 트랜잭션 실행 모드로 진입하게 한다.
명시적으로 다르게 언급된 경우를 제외하고, 비제약 실행에 적용되는 모든 규칙들은 트랜잭션 실행에도 적용된다. 아래는 CPU가 트랜잭션 실행 모드에 있는 동안의 추가적인 처리의 특성들이다.
CPU가 비제약 트랜잭션 실행 모드에 있을 때, 조건 코드 제로로 귀결되는 TRANSACTION BEGIN 명령의 실행은 CPU를 비제약 트랜잭션 실행 모드에 남아 있게 한다.
CPU에 의해 관찰될 때, 트랜잭션 실행 모드에서 이루어지는 페치들과 저장들은 트랜잭션 실행 모드에 있지 않은 동안 이루어지는 것들과 다르지 않다. 다른 CPU들과 I/O 서브시스템에 의해 관찰될 때, CPU가 트랜잭션 실행 모드에 있는 동안 이루어지는 모든 스토리지 오퍼랜드 액세스는 단일한 블록 동시적 액세스(single block concurrent access)인 것으로 보인다. 즉, 하프워드, 워드, 더블워드, 또는 쿼드워드 내의 모든 바이트들에 대한 액세스는 다른 CPU들과 I/O(예를 들어, 채널) 프로그램들에 의해 관찰될 때 블록 동시적(block concurrent)인 것으로 보이도록 명시된다. 하프워드, 워드, 더블워드, 또는 쿼드워드는 이 섹션에서 블록이라 불린다. 페치형(fetch-type) 참조가 블록 내에서 동시적(concurrent)인 것으로 보이도록 명시될 때, 또 다른 CPU 또는 I/O 프로그램에 의한 그 블록에 대한 저장 액세스는 그 블록에 포함된 바이트들이 페치되는 시간 동안에는 허용되지 않는다. 저장형(store-type) 참조가 블록 내에서 동시적인 것으로 보이도록 명시될 때, 그 블록 내 바이트들이 저장되는 시간 동안에는 또 다른 CPU 또는 I/O 프로그램에 의한, 페치든 또는 저장이든, 그 블록에 대한 액세스는 허용되지 않는다.
명령에 대한 스토리지 액세스와 DAT 테이블 페치 및 ART(Access Register Table) 테이블 페치는 비트랜잭션 규칙을 따른다.
CPU는 트랜잭션 내포 깊이가 제로로 변하도록 만드는(이 경우에, 트랜잭션은 완료됨) TRANSACTION END 명령을 이용하여 트랜잭션 실행 모드에서 정상적으로 나간다.
CPU가 TRANSACTION END 명령의 완료를 이용하여 트랜잭션 실행 모드에서 나갈 때, 트랜잭션 실행 모드에 있는 동안 이루어진 모든 저장들은 커밋된다. 즉, 상기 저장들은 다른 CPU들과 I/O 서브시스템에 의해 관찰될 때 단일한 블록-동시 연산으로서 이루어지는 것으로 보인다.
트랜잭션은 다양한 이유들로 인해 암시적으로 중단될 수도 있고, 또는 TRANSACTION ABORT 명령에 의해 명시적으로 중단될 수도 있다. 트랜잭션 중단의 가능한 원인들의 예, 그에 대응하는 중단 코드, 및 트랜잭션 중단 PSW에 배치되는 조건 코드를 아래에 기술한다.
외부 인터럽션(External Interruption): 트랜잭션 중단 코드는 2로 세트되고, 트랜잭션 중단 PSW 내 조건 코드는 2로 세트된다. 트랜잭션 중단 PSW는 외부 인터럽션 처리의 일부로서 외부 구(old) PSW로서 저장된다.
프로그램 인터럽션(필터링 안됨): 인터럽션으로 귀결되는 프로그램 예외 조건(즉, 필터링 안된 조건)은 트랜잭션에 코드 4로 중단을 일으킨다. 트랜잭션 중단 PSW 내 조건 코드는 상기 프로그램 인터럽션 코드에 특화되어(specific) 세트된다. 트랜잭션 중단 PSW는 프로그램 인터럽션 처리의 일부로서 프로그램 구(old) PSW로서 저장된다.
다른 경우 연산 예외로 인해 트랜잭션의 중단으로 귀결될 수 있는 명령이 대체 가능한(alternate) 결과들을 산출할 수 있는데: 비제약 트랜잭션에서, 트랜잭션은 대신에 중단 코드 11(제한된 명령)로 중단될 수 있고; 제약 트랜잭션에서, 트랜잭션 제약 프로그램 인터럽션이 연산 예외 대신 인지될 수 있다.
PER(Program Event Recording) 이벤트가 다른 필터링되지 않은 프로그램 예외 조건과 함께 인지될 때, 조건 코드는 3으로 세트된다.
기계 검사 인터럽션(Machine Check Interruption): 트랜잭션 중단 코드는 5로 세트되고, 트랜잭션 중단 PSW 내 조건 코드는 2로 세트된다. 트랜잭션 중단 PSW는 기계 검사 인터럽션 처리의 일부로서 기계 검사 구(old) PSW로서 저장된다.
I/O 인터럽션: 트랜잭션 중단 코드는 6으로 세트되고, 트랜잭션 중단 PSW 내 조건 코드는 2로 세트된다. 트랜잭션 중단 PSW는 I/O 인터럽션 처리의 일부로서 I/O 구(old) PSW로서 저장된다.
페치 오버플로(Fetch Overflow): 페치 오버플로 조건은 트랜잭션이 CPU에서 지원되는 것들보다 더 많은 위치들로부터 페치하려고 시도할 때 검출된다. 트랜잭션 중단 코드는 7로 세트되고, 조건 코드는 2 또는 3으로 세트된다.
저장 오버플로(Store Overflow): 저장 오버플로 조건은 트랜잭션이 CPU에서 지원되는 것들보다 더 많은 위치들에 저장하려고 시도할 때 검출된다. 트랜잭션 중단 코드는 8로 세트되고, 조건 코드는 2 또는 3으로 세트된다.
페치 또는 저장 오버플로 중단에 응답하여 조건 코드가 2 또는 3이 되게 하면 CPU가 잠재적으로 재시도 가능한 상황들을 표시하는 것이 가능할 수 있다(예를 들어, 조건 코드 2는 트랜잭션의 재실행이 생산적일(productive) 수 있다고 표시하는 반면; 조건 코드 3은 재실행을 권고하지 않는다).
페치 충돌(Fetch Conflict): 페치 충돌 조건은 또 다른 CPU 또는 I/O 서브시스템이 이 CPU에 의해 트랜잭션적으로 페치된 위치에 저장을 시도할 때 검출된다. 트랜잭션 중단 코드는 9로 세트되고, 조건 코드는 2로 세트된다.
저장 충돌(Store Conflict): 저장 충돌 조건은 또 다른 CPU 또는 I/O 서브시스템이 이 CPU에 의한 트랜잭션 실행 동안에 저장된 위치에 액세스를 시도할 때 검출된다. 트랜잭션 중단 코드는 10으로 세트되고, 조건 코드는 2로 세트된다.
제한된 명령(Restricted Instruction): CPU가 트랜잭션 실행 모드에 있을 때, 제한된 명령들의 실행 시도는 트랜잭션의 중단을 일으킨다. 트랜잭션 중단 코드는 11로 세트되고, 조건 코드는 3으로 세트된다.
CPU가 제약 트랜잭션 실행 모드에 있을 때, 제한된 명령의 실행 시도가 트랜잭션 제약 프로그램 인터럽션으로 귀결될지 또는 제한된 명령으로 인해 중단으로 귀결될지는 예측 불가능하다. 트랜잭션은 여전히 중단되지만 중단 코드는 둘 중 한 원인을 표시할 수 있다.
프로그램 예외 조건(필터링 됨): 인터럽션으로 귀결되지 않는 프로그램 예외 조건(즉, 필터링된 조건)은 트랜잭션에 12의 트랜잭션 중단 코드로 중단을 일으킨다. 조건 코드는 3으로 세트된다.
내포 깊이 초과(Nesting Depth Exceeded): 내포 깊이 초과 조건(nesting depth exceeded condition)은 트랜잭션 내포 깊이가 그 구성에 대한 최대 허용값에 있을 때 검출되며, TRANSACTION BEGIN 명령이 실행된다. 트랜잭션은 13의 트랜잭션 중단 코드로 중단되고, 조건 코드는 3으로 세트된다.
캐시 페치 관련 조건(Cache Fetch Related Condition): 트랜잭션에 의해 페치된 스토리지 위치들과 관련된 조건은 CPU의 캐시 회로(cache circuitry)에 의해 검출된다. 트랜잭션은 14의 트랜잭션 중단 코드로 중단되고, 조건 코드는 2 또는 3으로 세트된다.
캐시 저장 관련 조건(Cache Store Related Condition): 트랜잭션에 의해 저장된 스토리지 위치들과 관련된 조건은 CPU의 캐시 회로(cache circuitry)에 의해 검출된다. 트랜잭션은 15의 트랜잭션 중단 코드로 중단되고, 조건 코드는 2 또는 3으로 세트된다.
캐시 기타 조건(Cache Other Condition): 캐시 기타 조건은 CPU의 캐시 회로에 의해 검출된다. 트랜잭션은 16의 트랜잭션 중단 코드로 중단되고, 조건 코드는 2 또는 3으로 세트된다.
트랜잭션 실행 동안에, 만일 CPU가 동일한 절대 주소에 매핑된 각각 다른 논리 주소들을 사용하여 명령들 또는 스토리지 오퍼랜드들을 액세스하면, 트랜잭션이 중단될지는 모델 종속적이다. 만일 트랜잭션이 동일한 절대 주소에 매핑된 각각 다른 논리 주소들을 사용한 액세스들로 인해 중단되면, 조건에 따라서 중단 코드 14, 15, 또는 16이 세트된다.
기타 조건(Miscellaneous Condition): 기타 조건은 트랜잭션에 중단을 일으키는, CPU에 의해 인지되는 기타 다른 조건이다. 트랜잭션 중단 코드는 255로 세트되고, 조건 코드는 2 또는 3으로 세트된다.
다수의 구성들(multiple configurations)이 동일한 머신(예를 들어, 논리적 파티션들 또는 가상 머신들)에서 실행 중일 때, 트랜잭션은 각각 다른 구성에서 발생한 외부 기계 검사 인터럽션 또는 I/O 인터럽션으로 인해 중단될 수 있다.
위에 예들이 제공되지만, 대응하는 중단 코드들과 조건 코드들을 갖는 트랜잭션 중단의 다른 원인들이 제공될 수 있다. 예를 들어, 재시작 인터럽션(Restart Interruption)이 한 원인일 수 있으며, 이 인터럽션에서 트랜잭션 중단 코드는 1로 세트되고, 트랜잭션 중단 PSW 내 조건 코드는 2로 세트된다. 트랜잭션 중단 PSW는 재시작 처리의 일부로서 재시작-구(restart-old) PSW로서 저장된다. 추가로 예를 들면, 수퍼바이저 콜(Supervisor Call) 조건이 한 원인일 수 있으며, 이 조건에서 중단 코드는 3으로 세트되고, 트랜잭션 중단 PSW 내 조건 코드는 3으로 세트된다. 다른 또는 각각 다른 예들도 가능하다.
주(Notes):
1. 기타 조건(miscellaneous condition)은 다음 중 하나로부터 기인할 수 있다:
Figure 112014120036821-pct00040
z/Architecture에서, 그 구성에서 또 다른 CPU에 의해 수행되는 다음과 같은 명령들: COMPARE AND REPLACE DAT TABLE ENTRY, COMPARE AND SWAP AND PURGE, INVALIDATE DAT TABLE ENTRY, INVALIDATE PAGE TABLE ENTRY, NQ 제어는 제로이고 SK 제어는 일인 PERFORM FRAME MANAGEMENT FUNCTION, NQ 제어가 제로인 SET STORAGE KEY EXTENDED; 조건 코드는 2로 세트된다.
Figure 112014120036821-pct00041
리셋(reset), 재시작(restart) 또는 정지(stop) 같은 오퍼레이터 기능(operator function) 또는 등가의 SIGNAL PROCESSOR 명령(order)이 CPU 상에서 수행된다.
Figure 112014120036821-pct00042
위에 열거되지 않은 기타 다른 조건; 조건 코드는 2 또는 3으로 세트된다.
2. 페치 충돌 및 저장 충돌이 검출되는 위치는 동일한 캐시 라인 내 어느 곳이든 될 수 있다.
3. 어떤 조건들하에서, CPU는 비슷한 중단 조건들을 구분하지 못할 수 있다. 예를 들어, 페치 또는 저장 오버플로는 각각 페치 또는 저장 충돌과 구분이 안될 수 있다.
4. CPU에 의한 다중 명령 경로들의 추론적 실행은 충돌 조건 또는 오버플로 조건으로 인해―그러한 조건들이 개념적인 순서에서는 일어나지 않을지라도―트랜잭션의 중단으로 귀결될 수 있다. 제약 트랜잭션 실행 모드에 있는 동안, CPU는 추론적 실행을 일시적으로 금지시켜서 트랜잭션이 그러한 충돌 또는 오버플로를 추론적으로 검출하지 않고 완료를 시도할 수 있도록 할 수 있다.
TRANSACTION ABORT 명령의 실행은 트랜잭션에 중단을 일으킨다. 트랜잭션 중단 코드는 제2 오퍼랜드 주소로부터 세트된다. 제2 오퍼랜드 주소의 비트 63이 각각 제로 또는 일인지에 따라서, 조건 코드는 각각 2 또는 3으로 세트된다.
도 10은 트랜잭션 진단 블록에 저장된 예시적인 중단 코드들과, 그에 대응하는 조건 코드(CC)를 요약한 것이다. 도 10에 있는 설명은 하나의 구체적인 구현 예를 예시한다. 다른 구현 예 및 값들의 인코딩도 가능하다.
한 실시 예에서, 그리고 전술한 바와 같이, 트랜잭션 퍼실리티는 제약 트랜잭션과 비제약 트랜잭션 모두에 대하여 제공하며, 그와 연관된 처리도 제공한다. 처음에 제약 트랜잭션을 논의하고 그 다음에 비제약 트랜잭션을 논의한다.
제약 트랜잭션은 폴백(fall-back) 경로 없이 트랜잭션 모드에서 실행된다. 그것은 컴팩트한 기능들(compact functions)에 유용한 처리의 모드이다. (트랜잭션이 성공적으로 완료될 수 없게 하는 조건들에 의해 일어나는) 반복되는 인터럽션들 또는 다른 CPU들 또는 I/O 서브시스템과의 충돌들이 없는 경우에, 제약 트랜잭션은 최종적으로 완료되므로, 중단-처리부(abort-handler) 루틴은 필요하지 않으며 명시되지 않는다. 예를 들어, 주소지정될 수 없는(예를 들어, 0으로 나눔) 조건의 위반이 없는 경우에; 트랜잭션이 완료될 수 없게 하는 조건의 위반이 없는(예를 들어, 명령이 실행될 수 없게 하는 타이머 인터럽션; 핫(hot) I/O 등등) 경우에; 또는 제약 트랜잭션과 연관된 제한 또는 제약의 위반이 없는 경우에, 트랜잭션은 최종적으로 완료될 것이다.
제약 트랜잭션은 트랜잭션 내포 깊이가 처음에 제로일 때 제약 TRANSACTION BEGIN(TBEGINC) 명령에 의해 개시된다. 제약 트랜잭션은 한 예에서 다음의 제약들의 적용을 받는다.
1. 트랜잭션은 32개 명령들을 초과하여 실행하지 않으며, 여기에 제약 TRANSACTION BEGIN(TBEGINC) 명령과 TRANSACTION END 명령은 포함되지 않는다.
2. 트랜잭션 내 모든 명령들은 스토리지의 256개 인접한 바이트들 내에 있어야 하며, 여기에 제약 TRANSACTION BEGIN(TBEGINC) 명령과 TRANSACTION END 명령이 포함된다.
3. 상기 제한된 명령들에 더하여, 다음의 제한들도 제약 트랜잭션에 적용된다.
a. 명령들은 예를 들어 더하기(add), 빼기(subtract), 곱하기(multiply), 나누기(divide), 시프트(shift), 로테이트(rotate) 등을 포함한 범용 명령들(General Instructions)이라 불리는 명령들로 한정된다.
b. 분기 명령들은 다음(나열된 명령들은 z/Architecture의 한 예에서 온 것임)으로 한정된다:
Figure 112014120036821-pct00043
M1이 비제로이고 RI2 필드가 양의 값을 보유하는, BRANCH RELATIVE ON CONDITION.
Figure 112014120036821-pct00044
M1이 비제로이고 RI2 필드는 주소의 순환(address wraparound)을 일으키지 않는 양의 값을 보유하는, BRANCH RELATIVE ON CONDITION LONG.
Figure 112014120036821-pct00045
COMPARE AND BRANCH RELATIVE, COMPARE IMMEDIATE AND BRANCH RELATIVE, COMPARE LOGICAL AND BRANCH RELATIVE, and COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE, 여기에서 M3 필드는 비제로이고 RI4 필드는 양의 값을 보유함. (즉, 비제로 분기 마스크들을 갖는 순방향 분기들(forward branch)만 해당됨.)
c. TRANSACTION END 및 명시된 오퍼랜드 직렬화를 일으키는 명령들을 제외하고, 직렬화 기능을 일으키는 명령들은 제한된다.
d. 스토리지-및-스토리지 연산들(SS-) 명령들, 및 확장된 오피코드를 갖는 스토리지-및-스토리지 연산들(SSE-) 명령들은 제한된다.
e. 다음의 모든 범용 명령들(이들은 z/Architecture의 이 예에서 온 것임)은 제한된다: CHECKSUM; CIPHER MESSAGE; CIPHER MESSAGE WITH CFB; CIPHER MESSAGE WITH CHAINING; CIPHER MESSAGE WITH COUNTER; CIPHER MESSAGE WITH OFB; COMPARE AND FORM CODEWORD; COMPARE LOGICAL LONG; COMPARE LOGICAL LONG EXTENDED; COMPARE LOGICAL LONG UNICODE; COMPARE LOGICAL STRING; COMPARE UNTIL SUBSTRING EQUAL; COMPRESSION CALL; COMPUTE INTERMEDIATE MESSAGE DIGEST; COMPUTE LAST MESSAGE DIGEST; COMPUTE MESSAGE AUTHENTICATION CODE; CONVERT TO BINARY; CONVERT TO DECIMAL; CONVERT UNICODE-16 TO UNICODE-32; CONVERT UNICODE-16 TO UNICODE-8; CONVERT UNICODE-32 TO UNICODE-16; CONVERT UNICODE-32 TO UNICODE-8; CONVERT UNICODE-8 TO UNICODE-16; CONVERT UNICODE-8 TO UNICODE-32; DIVIDE; DIVIDE LOGICAL; DIVIDE SINGLE; EXECUTE; EXECUTE RELATIVE LONG; EXTRACT CACHE ATTRIBUTE; EXTRACT CPU TIME; EXTRACT PSW; EXTRACT TRANSACTION NESTING DEPTH; LOAD AND ADD; LOAD AND ADD LOGICAL; LOAD AND AND; LOAD AND EXCLUSIVE OR; LOAD AND OR; LOAD PAIR DISJOINT; LOAD PAIR FROM QUAD WORD; MONITOR CALL; MOVE LONG; MOVE LONG EXTENDED; MOVE LONG UNICODE; MOVE STRING; NON-TRANSACTIONAL STORE; PERFORM CRYPTOGRAPHIC COMPUTATION; PREFETCH DATA; PREFETCH DATA RELATIVE LONG; RUNTIME INSTRUMENTATION EMIT; RUNTIME INSTRUMENTATION NEXT; RUNTIME INSTRUMENTATION OFF; RUNTIME INSTRUMENTATION ON; SEARCH STRING; SEARCH; STRING UNICODE; SET ADDRESSING MODE; M3 필드가 제로이고, R1 필드 내 코드가 6 또는 7일 때, STORE CHARACTERS UNDER MASK HIGH; STORE CLOCK; STORE CLOCK EXTENDED; STORE CLOCK FAST; STORE FACILITY LIST EXTENDED; STORE PAIR TO QUADWORD; TEST ADDRESSING MODE; TRANSACTION ABORT; TRANSACTION BEGIN (TBEGIN과 TBEGINC 모두); TRANSLATE AND TEST EXTENDED; TRANSLATE AND TEST REVERSE EXTENDED; TRANSLATE EXTENDED; TRANSLATE ONE TO ONE; TRANSLATE ONE TO TWO TRANSLATE TWO TO ONE; 및 TRANSLATE TWO TO TWO.
4. 트랜잭션의 스토리지 오퍼랜드들은 4개의 옥토워드를 초과하여 액세스하지 않는다. 주(Note): LOAD ON CONDITION과 STORE ON CONDITION은 조건 코드에 상관없이 스토리지를 참조하는 것으로 간주된다. 옥토워드(octoword)는 예를 들어 32바이트 경계 상의 32개의 연속 바이트들의 그룹이다.
5. 이 CPU 상에서 실행중인 트랜잭션 또는 다른 CPU들 또는 I/O 서브시스템에 의한 저장들은 제약 TRANSACTION BEGIN(TBEGINC) 명령부터 시작하여 256 바이트의 스토리지를 보유하는 모든 4K-바이트 블록들 내의 스토리지 오퍼랜드들을 액세스하지 않는다.
6. 트랜잭션은 동일한 절대 주소에 매핑된 각각 다른 논리 주소들을 사용하여 명령들 또는 스토리지 오퍼랜드들을 액세스하지 않는다.
7. LOAD ACCESS MULTIPLE, LOAD MULTIPLE, LOAD MULTIPLE HIGH, STORE ACCESS MULTIPLE, STORE MULTIPLE, 및 STORE MULTIPLE HIGH에 대하여 오퍼랜드 참조들이 단일 옥토워드 내에 있어야 하는 것을 제외하고, 트랜잭션에 의해 이루어지는 오퍼랜드 참조들은 단일 더블워드 내에 있어야 한다.
만일 제약 트랜잭션이 위에 나열된 제약들 1~7 중 어느 하나를 위반하면, (a) 트랜잭션 제약 프로그램 인터럽션이 인지되거나, 또는 (b) 추가적인 제약 위반들이 트랜잭션 제약 프로그램 인터럽션을 일으킬 수 있는 것을 제외하고는, 마치 트랜잭션이 제약되지 않은 것처럼 실행이 진행된다. 어느 액션이 취해지는지는 예측 불가능하며, 취해지는 액션은 어느 제약이 위반되는지에 기초하여 달라질 수 있다.
제약 위반들, 반복되는 인터럽션들, 또는 다른 CPU들 또는 I/O 서브시스템과의 충돌들이 없는 경우에, 제약 트랜잭션은 최종적으로 위에 기술된 바와 같이 완료될 것이다.
1. 만일 제약 트랜잭션이 다음의 기준(criteria)을 충족하면 제약 트랜잭션을 성공적으로 완료할 가능성은 향상된다.
a. 발행된 명령들은 최대 32개보다 적다.
b. 스토리지 오퍼랜드 참조들은 최대 4개 옥토워드보다 적다.
c. 스토리지 오퍼랜드 참조들은 동일한 캐시 라인 상에 있다.
d. 동일한 위치들에 대한 스토리지 오퍼랜드 참조들은 모든 트랜잭션들에서 동일한 순서로 일어난다.
2. 제약 트랜잭션은 자신의 제1회 실행에서 성공적으로 완료할 것이 반드시 보장될 필요는 없다. 하지만, 만일 상기 나열된 제약들 중 어느 것도 위반하지 않는 제약 트랜잭션이 중단되면, CPU는 트랜잭션의 반복적인 실행이 이후에 성공하도록 보장하기 위한 회로(circuitry)를 채용한다.
3. 제약 트랜잭션 내에서, TRANSACTION BEGIN은 제한된 명령이므로, 제약 트랜잭션은 내포될 수 없다.
4. 제약 트랜잭션에 의한 상기 제약들 1~7 중 어느 하나의 위반은 프로그램 루프(program loop)로 귀결될 수 있다.
5. 제약 트랜잭션의 한계들은 비교-및-교환 루프(compare-and-swap loop)의 것들과 비슷하다. 다른 CPU들 및 I/O 서브시스템으로부터 방해 가능성 때문에, COMPARE AND SWAP 명령이 조건 코드 0으로 항상 완료될 것이라는 아키텍처적인 보장은 없다. 제약 트랜잭션은 페치-충돌 중단 또는 저장-충돌 중단 또는 핫(hot) 인터럽션의 형태로 비슷한 방해를 겪을 수 있다.
CPU는 제약 위반들이 없을 경우에 제약 트랜잭션이 최종적으로 완료되도록 보장하기 위해 공정성 알고리즘들(fairness algorithms)을 채용한다.
6. 제약 트랜잭션을 완료하는 데 필요한 반복 횟수를 결정하기 위해, 프로그램은 범용 레지스터 세이브 마스크의 적용을 받지 않는 범용 레지스터 내 카운터를 채용할 수 있다. 아래에 예를 도시한다.
LH1 15,0 Zero retry counter.
Loop TBEGINC 0(0),X'FE00' Preserve GRs 0-13
AHI 15,1 Increment counter
… Constrained transactional-execution code
TEND End of transaction.
* 이제 R15는 반복적인 트랜잭션 시도의 카운트를 보유한다.
레지스터 14와 15는 모두 이 예에서 복원되지 않는다는 것에 유의한다. 어떤 모델들에서, 만일 CPU가 TBEGINC 명령의 완료에 이어서 그러나 AHI 명령의 완료 전에 중단 조건을 검출하면 범용 레지스터 15 내 카운트가 낮을 수 있음에 또한 유의한다.
CPU에 의해 관찰될 때, 트랜잭션 실행 모드에서 이루어지는 페치들과 저장들은 트랜잭션 실행 모드에 있지 않은 동안 이루어지는 것들과 다르지 않다.
한 실시 예에서, 사용자(즉, 트랜잭션을 생성하는 자)는 트랜잭션이 제약될 것인지 아닌지를 선택한다. 도 11을 참조하여 제약 트랜잭션들의 처리와 연관된 로직의 한 실시 예와 구체적으로 TBEGINC 명령과 연관된 처리를 기술한다. TBEGINC 명령의 실행은 CPU가 제약 트랜잭션 실행 모드로 진입하게 하거나 또는 비제약 실행 모드에 남아 있게 한다. TBEGINC를 실행하는 CPU(즉, 프로세서)는 도 11의 로직을 수행한다.
도 11을 참조하면, TBEGINC 명령의 실행에 기초하여, 직렬화 기능이 수행된다(단계 1100). 직렬화 기능 또는 연산은, 다른 CPU들과 I/O 서브시스템에 의해 관찰될 때, 개념적으로 후속 스토리지 액세스들(및 관련된 참조 비트 및 변경 비트 세팅들)이 일어나기 전에, CPU에 의해 모든 개념적으로 이전 스토리지 액세스들(및, z/Architecture에서 예시로서 관련된 참조 비트 및 변경 비트 세팅들)을 완료하는 것을 포함한다. 직렬화는, ART 테이블 엔트리 및 DAT 테이블 엔트리 페칭과 연관된 것들을 제외하고, 스토리지에 대한 그리고 스토리지 키(key)들에 대한 모든 CPU 액세스의 순서에 영향을 준다.
트랜잭션 실행 모드에서 CPU에 의해 관찰될 때, 직렬화는 (전술한 바와 같이) 정상적으로 작동한다. 다른 CPU들과 I/O 서브시스템에 의해 관찰될 때, CPU가 트랜잭션 실행 모드에 있는 동안 수행되는 직렬화 연산은, CPU가 트랜잭션 실행 모드에서 나갈 때 트랜잭션 내포 깊이를 제로로 감분하는 TRANSACTION END 명령(정상 종료)의 결과로서 또는 트랜잭션이 중단되는 결과로서 일어난다.
직렬화를 수행하는 것에 이어서, 예외가 인지되는지에 대한 판정이 이루어진다(질의 1102). 만일 그렇다면, 예외가 처리된다(단계 1104). 예를 들어, 만일 제어 레지스터 0의 비트 8인 트랜잭션 실행 제어가 0이면 특수 연산 예외(special operation exception)가 인지되고 그 연산은 억제된다. 추가로 예를 들면, 만일 명령의 비트들 16~19인 B1 필드가 비제로이면 명세 예외가 인지되고 그 연산은 억제된다; 만일 TBEGINC가 실행형 명령의 타겟이면 실행 예외가 인지되고 그 연산은 억제된다; 그리고 만일 트랜잭션 실행 퍼실리티가 그 구성에 설치되어 있지 않으면 연산 예외가 인지되고 그 연산은 억제된다. 만일 CPU가 이미 제약 트랜잭션 실행 모드에 있으면, 트랜잭션 제약 예외 프로그램 예외가 인지되고 그 연산은 억제된다. 추가로, 만일 트랜잭션 내포 깊이가, 1이 증분될 때, 모델 종속적인 최대 트랜잭션 내포 깊이를 초과하면, 그 트랜잭션은 중단 코드 13으로 중단된다. 다른 또는 각각 다른 예외들이 인지되고 처리될 수 있다.
하지만, 만일 예외가 없으면, 트랜잭션 내포 깊이가 제로인지에 대한 판정이 이루어진다(질의 1106). 만일 트랜잭션 내포 깊이가 제로이면, 트랜잭션 진단 블록 주소는 유효하지 않은 것으로 간주된다(단계 1108); 트랜잭션 중단 PSW는, 트랜잭션 중단 PSW의 명령 주소가 다음 순차 명령보다는 TBEGINC 명령을 지정하는 것을 제외하고, 현재 PSW의 콘텐츠로부터 세트된다(단계 1110); 그리고 범용 레지스터 세이브 마스크에 의해 지정될 때 범용 레지스터 쌍들의 콘텐츠는 프로그램에 의해 직접 액세스될 수 없는 모델 종속적인 위치에 세이브된다(단계 1112). 이어서, 내포 깊이가 1로 세트된다(단계 1114). 이어서, 부동 소수점 연산 허용(F) 및 프로그램 인터럽션 필터링 제어들(PIFC)의 유효 값이 제로로 세트된다(단계 1316). 이어서, 명령의 I2 필드의 비트 12 필드인 AR 수정 허용(A) 제어의 유효 값이 판정된다(단계 1118). 예를 들어, 유효 A 제어는 현재의 레벨 및 모든 외부 TBEGIN 명령들에 대한 TBEGINC 명령 내 A 제어의 논리적 AND(논리곱)이다.
질의 1106으로 돌아가서, 만일 트랜잭션 내포 깊이가 제로보다 크면, 내포 깊이는 1만큼 증분된다(단계 1120). 이어서, 부동 소수점 연산 허용(F)의 유효 값이 제로로 세트되고, 프로그램 인터럽션 필터링 제어(PIFC)의 유효 값은 변경되지 않는다(단계 1122). 그 다음에 처리는 단계 1118에서 계속된다. 한 실시 예에서, 트랜잭션의 성공적인 개시는 조건 코드 0으로 귀결된다. 이것으로 TBEGINC 명령을 실행하는 것과 연관된 로직의 한 실시 예를 마친다.
한 실시 예에서, 위에서 제공되는 예외 검사(exception checking)는 여러 순서로 일어날 수 있다. 예외 검사를 위한 한 가지 구체적인 순서는 다음과 같다:
일반적인 경우에 프로그램 인터럽션 조건들의 우선순위로서 동일한 우선순위를 갖는 예외들.
비제로 값을 보유하는 B1 필드로 인한 명세 예외.
트랜잭션 내포 깊이 초과로 인한 중단.
정상 완료로 인한 조건 코드 0.
추가로, 다음은 하나 또는 그 이상의 실시 예들에서 적용된다:
1. 범용 레지스터 세이브 마스크에 의해 세이브되도록 지정된 레지스터들은 트랜잭션이 TRANSACTION END를 이용하여 정상적으로 종료될 때가 아니라 트랜잭션이 중단될 경우에만 복원된다. 최외부 TRANSACTION BEGIN 명령의 GRSM에 의해 지정된 레지스터들만 중단시에 복원된다.
I2 필드는 제약 트랜잭션에 의해 변경되는 입력 값들을 제공하는 모든 레지스터 쌍들을 지정해야 한다. 그러므로, 만일 트랜잭션이 중단되면, 상기 입력 레지스터 값들은 제약 트랜잭션이 재실행될 때 자신의 원래 콘텐츠로 복원될 것이다.
2. 대부분 모델들에서, TRANSACTION BEGIN시에 그리고 트랜잭션이 중단될 때 모두, 세이브 및 복원되는 데 필요한 레지스터들의 최소 수를 범용 레지스터 세이브 마스크에 명시함으로써 성능 향상이 실현될 수 있다.
3. 다음은 현재 트랜잭션 내포 깊이(TND)에 기초하여, 그리고 CPU가 비제약 또는 제약 트랜잭션 실행 모드에 있든지 간에 TND가 비제로일 때, TRANSACTION BEGIN 명령(TBEGIN과 TBEGINC 모두)의 결과들을 예시한다:
명령 TND =0
TBEGIN 비제약 트랜잭션 실행 모드로 진입한다
TBEGINC 제약 트랜잭션 실행 모드로 진입한다
명령 TND >0
TBEGIN NTX 모드 CTX 모드
비제약 트랜잭션 실행 모드에서 계속한다 트랜잭션-제약 예외
TBEGINC 비제약 트랜잭션 실행 모드에서 계속한다 트랜잭션-제약 예외
설명:
CTX CPU는 제약 트랜잭션 실행 모드에 있다
NTX CPU는 비제약 트랜잭션 실행 모드에 있다
TND 명령의 시작시의 트랜잭션 내포 깊이.
여기에서 기술할 때, 한 특징으로, 제약 트랜잭션은 그것이 완료될 수 없게 만드는 조건을 보유하지 않는다고 가정하여 완료가 보장된다. 완료를 보장하기 위해서, 트랜잭션을 실행하는 프로세서(예를 들어, CPU)는 어떤 액션들을 취할 수 있다. 예를 들어, 만일 제약 트랜잭션이 중단 조건을 가지면, CPU는 일시적으로 다음과 같이 할 수 있다:
(a) 비순차적 실행(out-of-order execution)을 금지한다;
(b) 충돌하는 스토리지 위치들을 다른 CPU들이 액세스하는 것을 금지한다;
(c) 중단 처리시 임의 지연(random delays)을 유도한다; 및/또는
(d) 성공적인 완료를 가능하게 하기 위해 다른 조치(measures)를 호출한다.
요약하자면, 제약 트랜잭션의 처리는 다음과 같다:
Figure 112014120036821-pct00046
만일 이미 제약-TX 모드에 있으면, 트랜잭션-제약 예외가 인지된다.
Figure 112014120036821-pct00047
만일 현재 TND(트랜잭션 내포 깊이)>0이면, 마치 비제약 트랜잭션인 것처럼 실행이 진행된다
Figure 112014120036821-pct00048
유효 F 제어는 제로로 세트된다
Figure 112014120036821-pct00049
유효 PIFC는 변경되지 않는다
Figure 112014120036821-pct00050
외부 비제약 TX가 제약 TX를 사용 또는 사용하지 않을 수 있는 서비스 기능(service function)을 호출하도록 허용한다.
Figure 112014120036821-pct00051
만일 현재 TND=0이면:
Figure 112014120036821-pct00052
트랜잭션 진단 블록 주소는 유효하지 않다
- 중단시에 명령-명시 TDB는 저장되지 않음
Figure 112014120036821-pct00053
트랜잭션 중단 PSW는 TBEGINC의 주소로 세트된다
- 다음 순차 명령이 아님
Figure 112014120036821-pct00054
모델 종속적 위치에 세이브된 GRSM에 의해 지정된 범용 레지스터 쌍들은 프로그램에 의해 액세스될 수 없음
Figure 112014120036821-pct00055
트랜잭션 토큰이 (D2 오퍼랜드로부터) 선택에 따라 형성된다. 트랜잭션 토큰은 트랜잭션의 식별자이다. 그것은 스토리지 오퍼랜드 주소 또는 또 다른 값과 같을 수 있다.
Figure 112014120036821-pct00056
유효 A = TBEGINC A & 임의 외부 A
Figure 112014120036821-pct00057
TND가 증분됨
Figure 112014120036821-pct00058
만일 TND가 0에서 1로 변하면, CPU는 제약 TX 모드로 진입한다
Figure 112014120036821-pct00059
그렇지 않으면, CPU는 비제약 TX 모드로 남아 있는다
Figure 112014120036821-pct00060
명령은 CC0으로 완료된다
Figure 112014120036821-pct00061
예외들:
Figure 112014120036821-pct00062
만일 B1 필드가 비제로이면 명세 예외(PIC(프로그램 인터럽션 코드) 0006)
Figure 112014120036821-pct00063
만일 트랜잭션 실행 제어(CR0.8)가 제로면 특수 연산 예외(PIC 0013 hex)
Figure 112014120036821-pct00064
만일 제약 TX 모드에서 발행되었으면 트랜잭션 제약 예외(PIC 0018 hex)
Figure 112014120036821-pct00065
만일 제약 트랜잭션 실행 퍼실리티가 설치되어 있지 않으면 연산 예외(PIC 0001)
Figure 112014120036821-pct00066
만일 명령이 실행형 명령의 타겟이면 실행 예외(PIC 0003)
Figure 112014120036821-pct00067
만일 내포 깊이가 초과되면 중단 코드 13
Figure 112014120036821-pct00068
제약 트랜잭션에서 중단 조건들:
Figure 112014120036821-pct00069
중단 PSW가 TBEGINC 명령을 가리킨다
- 그것의 다음에 오는 명령이 아님
- 중단 조건이 전체 TX의 재구동을 일으킨다
* 페일 경로 없음(No fail path)
Figure 112014120036821-pct00070
재구동시 성공적인 완료를 보장하기 위해 CPU가 특수 조치를 취한다
Figure 112014120036821-pct00071
지속적인(persistent) 충돌, 인터럽트, 또는 제약 위반이 없다고 가정하고, 트랜잭션은 최종적인 완료가 보장된다.
Figure 112014120036821-pct00072
제약 위반:
Figure 112014120036821-pct00073
PIC 0018 hex - 트랜잭션 제약의 위반을 표시한다
Figure 112014120036821-pct00074
아니면, 트랜잭션은 마치 비제약인 것처럼 실행된다
위에 기술한 바와 같이, 선택사항인 제약 트랜잭션 처리에 더하여, 한 실시 예에서, 트랜잭션 퍼실리티는 비제약 트랜잭션 처리도 제공한다. 도 12를 참조하여 비제약 트랜잭션의 처리와 관련한 더 상세한 사항과, 구체적으로 TBEGIN 명령과 연관된 처리를 기술한다. TBEGIN 명령의 실행은 CPU가 비제약 트랜잭션 실행 모드로 진입하게 하거나 또는 비제약 트랜잭션 실행 모드에 남아 있게 한다. TBEGIN을 실행하는 CPU(즉, 프로세서)는 도 12의 로직을 수행한다.
도 12를 참조하면, TBEGIN 명령의 실행에 기초하여, 직렬화 기능(위에서 기술함)이 수행된다(단계 1200). 직렬화를 수행하는 것에 이어서, 예외가 인지되는지에 대한 판정이 이루어진다(질의 1202). 만일 그렇다면, 예외가 처리된다(단계 1204). 예를 들어, 만일 제어 레지스터 0의 비트 8인 트랜잭션 실행 제어가 제로이면 특수 연산 예외(special operation exception)가 인지되고 그 연산은 억제된다. 이어서, 만일 명령의 I2 필드의 비트들 14~15인 프로그램 인터럽션 필터링 제어가 3의 값을 보유하면 또는 제1 오퍼랜드 주소가 더블 워드 경계를 지정하지 않으면 명세 예외가 인지되고 그 연산은 억제된다. 만일 트랜잭션 실행 퍼실리티가 그 구성에 설치되어 있지 않으면 연산 예외가 인지되고 그 연산은 억제된다; 그리고 만일 TBEGIN이 실행형 명령의 타겟이면 실행 예외가 인지되고 그 연산은 억제된다. 추가로, 만일 CPU가 제약 트랜잭션 실행 모드에 있으면, 트랜잭션 제약 예외 프로그램 예외가 인지되고 그 연산은 억제된다. 추가로, 만일 트랜잭션 내포 깊이가, 1이 증분될 때, 모델 종속적인 최대 트랜잭션 내포 깊이를 초과하면, 그 트랜잭션은 중단 코드 13으로 중단된다.
또한 추가로, 명령의 B1 필드가 비제로이고 CPU가 트랜잭션 실행 모드에 있지 않을 때, 즉 트랜잭션 내포 깊이가 제로일 때, 제1 오퍼랜드에 대한 저장 액세스 가능성(store accessibility)이 판정된다. 만일 제1 오퍼랜드가 저장을 위해 액세스될 수 없으면, 액세스 예외가 인지되고 그 연산은 구체적인 액세스-예외 조건에 따라서 무효화되거나(nullified), 억제되거나 또는 종결된다. 추가로, 제1 오퍼랜드에 대한 PER 스토리지 변경 이벤트가 있으면 인지된다. B1 필드가 비제로이고 CPU가 이미 트랜잭션 실행 모드에 있을 때, 제1 오퍼랜드에 대한 저장 액세스 가능성이 판정되는지는 예측 불가능하며, 제1 오퍼랜드에 대하여 PER 스토리지 변경 이벤트들이 검출된다. 만일 B1 필드가 제로이면, 제1 오퍼랜드는 액세스되지 않는다.
예외 검사에 더하여, CPU가 트랜잭션 실행 모드에 있는(즉, 트랜잭션 내포 깊이가 제로인)지에 대한 판정이 이루어진다(질의 1206). 만일 CPU가 트랜잭션 실행 모드에 있지 않으면, 선택된 범용 레지스터 쌍들의 콘텐츠는 세이브된다(단계 1208). 구체적으로, 범용 레지스터 세이브 마스크에 의해 지정된 범용 레지스터 쌍들의 콘텐츠는 프로그램에 의해 직접 액세스될 수 없는 모델 종속적인 위치에 세이브된다.
이어서, 명령의 B1 필드가 제로인지에 대한 판정이 이루어진다(질의 1210). 만일 B1 필드가 제로가 아니면, 제1 오퍼랜드 주소가 트랜잭션 진단 블록 주소에 배치되고(단계 1214), 트랜잭션 진단 블록 주소는 유효하다. 이어서, 트랜잭션 중단 PSW가 현재 PSW의 콘텐츠로부터 세트된다(1216). 트랜잭션 중단 PSW의 명령 주소는 다음 순차 명령(즉, 최외부 TBEGIN 다음에 오는 명령)을 지정한다.
이어서, 명령의 I2 필드의 비트 12인 AR 수정 허용(A) 제어의 유효 값이 판정된다(단계 1218). 유효 A 제어는 현재의 레벨 및 모든 외부 레벨들에 대한 TBEGIN 명령 내 A 제어의 논리적 AND(논리곱)이다. 이어서, 명령의 I2 필드의 비트 13인 부동 소수점 연산 허용(F) 제어의 유효 값이 판정된다(단계 1220). 유효 F 제어는 현재의 레벨 및 모든 외부 레벨들에 대한 TBEGIN 명령 내 F 제어의 논리적 AND(논리곱)이다. 이어서, 명령의 I2 필드의 비트들 14~15인 프로그램 인터럽션 필터링 제어(PIFC)의 유효 값이 판정된다(단계 1222). 유효 PIFC 값은 현재의 레벨 및 모든 외부 레벨들에 대한 TBEGIN 명령 내 최고값이다.
이어서, 트랜잭션 내포 깊이에 일(one)의 값이 더해지고(단계 1224), 명령은 조건 코드 0을 세트하고 완료된다(단계 1226). 만일 트랜잭션 내포 깊이가 제로에서 일로 변하면, CPU는 비제약 트랜잭션 실행 모드로 진입하고; 그렇지 않으면, CPU는 비제약 트랜잭션 실행 모드에 남아 있는다.
질의 1210으로 돌아가서, 만일 B1이 제로이면, 트랜잭션 진단 블록 주소는 유효하지 않고(단계 1211), 처리는 단계 1218에서 계속된다. 이와 유사하게, 만일 CPU가 트랜잭션 실행 모드에 있으면(질의 1206), 처리는 단계 1218에서 계속된다.
TBEGIN의 실행의 결과 조건 코드(Resulting Condition Code)는 예를 들어 다음을 포함한다:
0 트랜잭션 개시 성공
1 --
2 --
3 --
프로그램 예외들은 예를 들어 다음을 포함한다:
Figure 112014120036821-pct00075
액세스(저장, 제1 오퍼랜드)
Figure 112014120036821-pct00076
연산(트랜잭션 실행 퍼실리티가 설치되지 않음)
Figure 112014120036821-pct00077
특수 연산
Figure 112014120036821-pct00078
명세
Figure 112014120036821-pct00079
(제한된 명령으로 인한) 트랜잭션 제약
한 실시 예에서, 위에서 제공되는 예외 검사(exception checking)는 여러 순서로 일어날 수 있다. 예외 검사에 대한 한 가지 구체적인 순서는 다음과 같다:
Figure 112014120036821-pct00080
일반적인 경우에 프로그램 인터럽션 조건들의 우선순위로서 동일한 우선순위를 갖는 예외들.
Figure 112014120036821-pct00081
유보된 PIFC 값으로 인한 명세 예외.
Figure 112014120036821-pct00082
제1 오퍼랜드 주소가 더블워드 경계 상에 있지 않음으로 인한 명세 예외.
Figure 112014120036821-pct00083
(B1 필드가 비제로일 때) 액세스 예외.
Figure 112014120036821-pct00084
트랜잭션 내포 깊이 최대치 초과로 인한 중단.
Figure 112014120036821-pct00085
정상 완료로 인한 조건 코드 0.
주(Notes):
1. B1 필드가 비제로일 때, 다음이 적용된다:
Figure 112014120036821-pct00086
최외부 트랜잭션이 개시될 때―트랜잭션이 결코 중단되지 않을지라도―액세스 가능한 트랜잭션 진단 블록(TDB)이 제공되어야 한다.
Figure 112014120036821-pct00087
TDB의 액세스 가능성이 내포된 트랜잭션들에 대하여 테스트되는지는 예측 불가능하므로, 임의의 내포된 TBEGIN 명령에 대하여 액세스 가능한 TDB가 제공되어야 한다.
Figure 112014120036821-pct00088
B1 필드가 비제로인 임의의 TBEGIN의 수행과, B1 필드가 비제로인 최외부 TBEGIN에 의해 개시된 트랜잭션에 대하여 발생하는 임의의 중단 처리의 수행은 B1 필드가 제로일 때보다 더 느릴 수 있다.
2. 한 실시 예에서, 범용 레지스터 세이브 마스크에 의해 세이브되도록 지정된 레지스터들은 트랜잭션이 TRANSACTION END를 이용하여 정상적으로 종료될 때가 아니라 트랜잭션이 중단될 경우에만 복원된다. 최외부 TRANSACTION BEGIN 명령의 GRSM에 의해 지정된 레지스터들만 중단시에 복원된다.
I2 필드는 트랜잭션에 의해 변경되는 입력 값들을 제공하는 모든 레지스터 쌍들을 지정해야 한다. 그러므로, 만일 트랜잭션이 중단되면, 상기 입력 레지스터 값들은 중단 처리부(abort handler)가 시작될 때 자신의 원래 콘텐츠로 복원될 것이다.
3. TRANSACTION BEGIN(TBEGIN) 명령 다음에는 트랜잭션이 성공적으로 개시되었는지를 판정할 조건부 분기 명령(conditional branch instruction)이 따라올 것이다.
4. 만일 트랜잭션이 인터럽션으로 귀결되지 않는 조건들로 인해 중단되면, 트랜잭션 중단 PSW에 의해 지정된 명령은 제어(즉, 최외부 TRANSACTION BEGIN(TBEGIN) 다음에 오는 명령)를 수신한다. TRANSACTION BEGIN(TBEGIN) 명령에 의해 세트된 조건 코드에 더하여, 트랜잭션이 중단될 때 조건 코드들 1~3도 세트된다.
따라서, 최외부 TRANSACTION BEGIN(TBEGIN) 명령 다음의 명령 순서는, TBEGIN 명령이 이 예에서는 코드 0만을 세트할지라도, 4개의 모든 조건 코드들을 수용할 수 있어야 한다.
5. 대부분 모델들에서, TRANSACTION BEGIN시에 그리고 트랜잭션이 중단될 때 모두, 세이브 및 복원되는 데 필요한 레지스터들의 최소 수를 범용 레지스터 세이브 마스크에 명시함으로써 성능 향상이 실현될 수 있다.
6. 비제약 트랜잭션 실행 모드에 있는 동안, 프로그램은 액세스 레지스터들 또는 (부동 소수점 제어 레지스터를 포함한) 부동 소수점 레지스터들을 변경할 수 있는 서비스 기능을 호출할 수 있다. 그러한 서비스 루틴이 엔트리 상의 변경된 레지스터들을 세이브하고 엑시트시에 그들을 복원할 수 있을지라도, 트랜잭션은 그 루틴의 정상 엑시트 전에 중단될 수 있다. 만일 CPU가 비제약 트랜잭션 실행 모드에 있는 동안 상기 호출하는 프로그램이 이 레지스터들을 보존하기 위한 것을 제공하지 않으면, CPU는 상기 서비스 기능이 레지스터들을 변경하는 것을 용인할 수 없을 수 있다.
비제약 트랜잭션 실행 모드에 있는 동안 액세스 레지스터들의 의도하지 않은(inadvertent) 변경을 막기 위해, 프로그램은 TRANSACTION BEGIN 명령의 I2 필드의 비트 12인 AR 수정 허용 제어를 제로로 세트할 수 있다. 이와 유사하게, 부동 소수점 레지스터들의 의도하지 않은 변경을 막기 위해, 프로그램은 TBEGIN 명령의 I2 필드의 비트 13인 부동 소수점 연산 허용 제어를 제로로 세트할 수 있다.
7. TRANSACTION BEGIN(TBEGIN) 명령의 실행 동안에 인지된 프로그램 예외 조건들은 임의의 외부 TBEGIN 명령들에 의해 세트된 유효 프로그램 인터럽션 필터링 제어의 적용을 받는다. 최외부 TBEGIN 명령의 실행 동안에 인지된 프로그램 예외 조건들은 필터링의 적용을 받지 않는다.
8. 직렬화 방식으로 다중 스토리지 위치들을 업데이트 하기 위해서, 종래의 코드 시퀀스들은 로크 워드(세마포어)를 채용할 수 있다. 만일 (a) 트랜잭션 실행이 다중 스토리지 위치들의 업데이트를 구현하는 데 사용되면, (b) 프로그램이 또한 트랜잭션이 중단될 경우 호출될 "폴백(fall-back)" 경로를 제공하면, 그리고 (c) 상기 폴백 경로가 로크 워드를 채용하면, 트랜잭션 실행 경로는 또한 로크의 가용성(availability)을 테스트해야 하며, 로크가 이용 불가능하면 TRANSACTION END 명령을 이용하여 트랜잭션을 종료하고 폴백 경로로 분기해야 한다. 이것은 트랜잭션적으로 업데이트되는지와 상관없이 직렬화된 자원들에 대한 일관성 있는 액세스를 보장한다.
이와는 달리, 프로그램은 로크가 이용 불가능하면 중단될 수 있는데, 그렇더라도 중단 처리는 TEND를 통해 트랜잭션을 단순히 종료하는 것보다 훨씬 더 느릴 수 있다.
9. 만일 유효 프로그램 인터럽션 필터링 제어(PIFC)가 제로보다 크면, CPU는 대부분의 데이터 예외 프로그램 인터럽션들을 필터링한다. 만일 유효 부동 소수점 연산 허용(F) 제어가 제로이면, 데이터 예외 코드(DXC)는 데이터 예외 프로그램 예외 조건으로 인한 중단의 결과로서 부동 소수점 제어 레지스터에 세트되지 않을 것이다. 이 상황(필터링이 적용되고 유효 F 제어가 제로임)에서, DXC가 검사되는 유일한 위치는 TBEGIN-명시 TDB에 있다. 만일 프로그램의 중단 처리부가 그러한 상황에서 DXC를 검사하려면, 범용 레지스터 B1은 비제로이어야 하고, 그렇게 함으로써 유효한 트랜잭션 진단 블록 주소(TDBA)가 세트된다.
10. 만일 PER 스토리지 변경 또는 제로 주소 검출 조건이 최외부 TBEGIN 명령의 TBEGIN-명시 TDB에 존재하고 PER 이벤트 억제가 적용되지 않으면, 명령의 실행 동안 PER 이벤트가 인지되고 그럼으로써 기타 다른 중단 조건이 존재하는지와 상관없이 트랜잭션이 즉시 중단되게 한다.
한 실시 예에서, TBEGIN 명령은 트랜잭션 중단 주소가 TBEGIN 다음에 오는 다음 순차 명령이 되도록 암시적으로 세트한다. 이 주소의 의도는 조건 코드(CC)에 따라서 분기할지 아닐지를 판정하는 조건부 분기 명령이 되는 것이다. 성공적인 TBEGIN은 CC0을 세트하고, 반면 중단된 트랜잭션은 CC1, CC2, 또는 CC3을 세트한다.
한 실시 예에서, TBEGIN 명령은 트랜잭션이 중단되는 경우를 대비해 정보를 저장할 트랜잭션 진단 블록(TDB)의 주소를 지정하는 선택적인(optional) 스토리지 오퍼랜드를 제공한다.
추가로, 그것은 다음을 포함하는 즉시 오퍼랜드를 제공한다:
어느 범용 레지스터들의 쌍들이 트랜잭션 실행 시작시에 세이브되고 트랜잭션이 중단되면 복원될지를 표시하는 범용 레지스터 세이브 마스크(GRSM);
트랜잭션이 액세스 레지스터들을 수정하는 경우 트랜잭션의 중단을 허용하기 위한 비트(A);
트랜잭션이 부동 소수점 명령들의 실행을 시도할 경우 트랜잭션의 중단을 허용하기 위한 비트(F); 그리고
트랜잭션이 중단될 경우 개별 트랜잭션 레벨들에 프로그램 인터럽션의 실제 제시를 바이패스(bypass)하도록 허용하는 프로그램 인터럽션 필터링 제어(PIFC).
A 제어, F 제어, 및 PIFC 제어는 다양한 내포 레벨들에서 각각 다를 수 있으며 내부 트랜잭션 레벨들이 종료될 때 이전 레벨로 복원될 수 있다.
또한, TBEGIN(또는 다른 실시 예에서는 TBEGINC)은 트랜잭션 토큰을 형성하기 위해 사용된다. 선택에 따라서, 상기 토큰은 TEND 명령에 의해 형성된 토큰과 일치될 수도 있다. 각 TBEGIN(또는 TBEGINC) 명령에서, 예로서, 토큰은 제1 오퍼랜드 주소로부터 형성된다. 이 토큰은 (베이스 레지스터가 비제로일 때만 발생하는 TDB 주소 세팅과는 달리) 베이스 레지스터가 제로인지와는 별도로 형성될 수 있다. 비제로 베이스 레지스터와 함께 실행되는 각각의 TRANSACTION END 명령에서, 비슷한 토큰이 자신의 스토리지 오퍼랜드로부터 형성된다. 만일 토큰들이 일치하지 않으면, 프로그램 예외가 인지되어 프로그램에게 쌍을 이루지 않은 명령에 대해 경고할 수 있다.
토큰 일치화(token matching)는 TEND 문(statement)이 TBEGIN(또는 TBEGINC)과 적절하게 쌍을 이루도록 보장함으로써 소프트웨어 신뢰도를 향상시키고자하는 메커니즘을 제공한다. TBEGIN 명령이 특정한 내포 레벨에서 실행될 때, 토큰은 트랜잭션의 이 인스턴스를 식별하는 스토리지 오퍼랜드 주소로부터 형성된다. 대응하는 TEND 명령이 실행될 때, 토큰은 그 명령의 스토리지 오퍼랜드 주소로부터 형성되고, CPU는 그 내포 레벨에 대한 시작 토큰(begin token)을 종료 토큰(end token)과 비교한다. 만일 토큰들이 일치하지 않으면, 예외 조건이 인지된다. 어떤 모델은 특정한 수의 내포 레벨들에 대하여만(또는 무 내포 레벨들에 대하여) 토큰 일치화를 구현할 수 있다. 토큰은 스토리지 오퍼랜드 주소의 모든 비트들을 포함하지 않을 수 있거나, 또는 비트들은 해싱(hashing) 또는 다른 방법들을 통해 결합될 수 있다. 토큰은 스토리지 오퍼랜드가 액세스되지 않을지라도 TBEGIN 명령에 의해 형성될 수 있다.
요약하자면, 비제약 트랜잭션의 처리는 다음과 같다:
Figure 112014120036821-pct00089
만일 TND=0이면:
Figure 112014120036821-pct00090
만일 B1 ≠ 0이면, 트랜잭션 진단 블록 주소는 제1 오퍼랜드 주소로부터 세트된다.
Figure 112014120036821-pct00091
트랜잭션 중단 PSW는 다음 순차 명령 주소로 세트된다.
Figure 112014120036821-pct00092
I2 필드에 의해 지정되는 범용 레지스터 쌍들은 모델 종속적인 위치에 세이브된다.
- 프로그램에 의해 직접 액세스할 수 없음
Figure 112014120036821-pct00093
유효 PIFC 제어, A 제어, & F 제어가 계산됨
Figure 112014120036821-pct00094
유효 A = TBEGIN A & 임의 외부 A
Figure 112014120036821-pct00095
유효 F = TBEGIN F & 임의 외부 F
Figure 112014120036821-pct00096
유효 PIFC = max(TBEGIN PIFC, 임의 외부 PIFC)
Figure 112014120036821-pct00097
트랜잭션 내포 깊이(TND)가 증분됨
Figure 112014120036821-pct00098
만일 TND가 0에서 1로 변하면, CPU는 트랜잭션 실행 모드로 진입한다
Figure 112014120036821-pct00099
조건 코드는 제로로 세트된다
Figure 112014120036821-pct00100
TBEGIN 다음에 오는 명령이 제어를 수신할 때:
- TBEGIN 성공은 CC0으로 표시됨
- 중단된 트랜잭션은 비제로 CC로 표시됨
Figure 112014120036821-pct00101
예외들:
Figure 112014120036821-pct00102
만일 내포 깊이가 초과되면 중단 코드 13
Figure 112014120036821-pct00103
만일 B1 필드가 비제로이고, 스토리지 오퍼랜드가 저장 연산을 위해 액세스될 수 없으면 액세스 예외(여러 PIC들 중 하나)
Figure 112014120036821-pct00104
만일 TBEGIN 명령이 실행형 명령의 타겟이면 실행 예외(PIC 0003)
Figure 112014120036821-pct00105
만일 트랜잭션 실행 퍼실리티가 설치되어 있지 않으면 연산 예외(PIC 0001)
Figure 112014120036821-pct00106
다음 둘 중 하나이면 PIC 0006
- PIFC는 유효하지 않다(3의 값)
- 제2 오퍼랜드 주소가 더블워드로 할당되지 않음
Figure 112014120036821-pct00107
만일 트랜잭션 실행 제어(CR0.8)가 제로면 PIC 0013 hex
Figure 112014120036821-pct00108
만일 제약 TX 모드에서 발행되었으면 PIC 0018 hex
위에 표시된 바와 같이, 트랜잭션은, 제약 또는 비제약 중 하나인데, TRANSACTION END(TEND) 명령에 의해 종료될 수 있다. 도 13을 참조하여 트랜잭션 종료(TEND) 명령의 처리에 관련된 더 상세한 사항을 기술한다. TEND를 실행하는 CPU(즉, 프로세서)는 도 13의 로직을 수행한다.
도 13을 참조하면, 처음에, 프로세서가 TEND 명령을 획득(예를 들어, 페칭, 수신 등)하는 것에 기초하여, 여러 예외 검사가 수행되며 만일 예외가 있으면(질의 1300), 그 예외가 처리된다(단계 1302). 예를 들어, 만일 TRANSACTION END가 실행형 명령의 타겟이면, 그 연산은 억제되고 실행 예외가 인지된다; 그리고 만일 CR0의 비트 8인 트랜잭션 실행 제어가 제로이면 특수 연산 예외가 인지되고 그 연산은 억제된다. 또한, 만일 트랜잭션 실행 퍼실리티가 그 구성에 설치되어 있지 않으면, 연산 예외가 인지되고 그 연산은 억제된다.
질의 1300으로 돌아가서, 만일 예외가 인지되지 않으면, 트랜잭션 내포 깊이가 (예를 들어, 1만큼) 감분된다(단계 1304). 감분에 이어서 트랜잭션 내포 깊이가 제로인지에 대한 판정이 이루어진다(질의 1306). 만일 트랜잭션 내포 깊이가 제로이면, 트랜잭션(및 있을 경우 이 트랜잭션이 일부로 들어 있는 내포 범위 내의 다른 트랜잭션들)에 의해 이루어진 모든 저장 액세스들이 커밋된다(단계 1308). 이어서, CPU는 트랜잭션 실행 모드에서 나가고(단계 1310), 명령은 완료된다(단계 1312).
질의 1306으로 돌아가서, 만일 트랜잭션 내포 깊이가 제로가 아니면, TRANSACTION END 명령은 바로 완료된다.
만일 CPU가 연산 시작시에 트랜잭션 실행 모드에 있으면, 조건 코드는 0으로 세트되고; 그렇지 않으면, 조건 코드는 2로 세트된다.
유효 부동 소수점 연산 허용(F) 제어, AR 수정 허용(A) 제어, 및 프로그램 인터럽션 필터링 제어(PIFC)는 그 레벨(level)을 개시한 TRANSACTION BEGIN 명령이 종료되기 전에 자신들 각각의 값들로 리셋된다는 것에 유의한다. 추가로, 연산의 완료시에 직렬화 기능이 수행된다.
최외부 TRANSACTION END 명령의 완료시에 인지되는 PER 명령 페칭 및 트랜잭션 종료 이벤트들은 트랜잭션의 중단으로 귀결되지 않는다.
한 예에서, TEND 명령은 또한 베이스 필드(B2)와 변위 필드(D2)를 포함하며, 이들은 결합되어(예를 들어, 더해져서) 제2 오퍼랜드 주소를 생성한다. 이 예에서, 토큰 일치화가 수행될 수 있다. 예를 들어, B2가 비제로일 때, 제2 오퍼랜드 주소의 선택된 비트들은 대응하는 TBEGIN에 의해 형성되는 트랜잭션 토큰과 대조된다(matched against). 만일 불일치가 있으면, 예외가 있다(예를 들어, PIC 0006).
위에 더하여, 트랜잭션은 TRANSACTION ABORT 명령에 의해 암시적으로 또는 명시적으로 중단될 수 있다. TABORT 또는 다른 경우에 의한 트랜잭션 중단은 다수의 단계들을 수행하는 것을 포함한다. 도 14를 참조하여 일반적인 중단 처리를 위한 단계들의 예를 기술한다. 중단이 TABORT 또는 다른 경우에 의하여 개시되는지에 기초하여 처리하는 데 차이가 있으면, 아래 기술에서 표시한다. 한 예에서, 프로세서(예를 들어, CPU)는 도 14의 로직을 수행한다.
도 14를 참조하면, 처음에, TABORT 명령의 실행 또는 암시된 중단에 기초하여, CPU가 트랜잭션 실행 모드에 있는 동안 이루어진 비트랜잭션 저장 액세스들은 커밋된다(단계 1400). CPU가 트랜잭션 실행 모드에 있는 동안 이루어진 다른 저장들(예를 들어, 트랜잭션 저장들)은 폐기된다(단계 1402).
CPU는 트랜잭션 실행 모드에서 나가고(단계 1404), 후속 저장들은 비트랜잭션적으로 일어난다. 조건 코드가 (TDBA는 유효하지만 그 블록은 액세스 가능하지 않으면, CC=1이 되는 아래 상황보다는) 위에 기술된 대로 세트되는 것을 제외하고, 현재 PSW는 트랜잭션 중단 PSW의 콘텐츠로 대체된다(단계 1406). 중단 처리의 일부로서 또는 후속으로, 처리는 트랜잭션 중단 PSW 명시 위치로 분기하여 액션을 수행한다. 트랜잭션이 제약 트랜잭션인 한 예에서, 상기 위치는 TBEGINC 명령이고 상기 액션은 그 명령의 재실행이다; 그리고 트랜잭션이 비제약 트랜잭션인 또 다른 예에서, 상기 위치는 TBEGIN 이후 명령이고, 상기 액션은 그 명령의 실행이며, 이것은 예를 들어 중단 처리부로의 분기일 수 있다.
그 다음에, 트랜잭션 진단 블록 주소가 유효한지에 대한 판정이 이루어진다(질의 1408). 트랜잭션 진단 블록 주소가 유효할 때, 중단의 이유를 식별하는 진단 정보와 범용 레지스터들의 콘텐츠가 TBEGIN-명시 트랜잭션 진단 블록에 저장된다(단계 1410). 저장된 TDB 필드들과 그들이 저장된 조건들은 트랜잭션 진단 블록을 참조하여 위에서 기술하고 있다.
만일 트랜잭션 진단 블록 주소가 유효하지만 그 블록은 액세스 불가능하게 되었으면, 최외부 TBEGIN 명령의 실행에 이어서, 그 블록은 액세스되지 않고 조건 코드 1이 적용된다.
인터럽션으로 귀결되는 프로그램 예외로 인해 중단되는 트랜잭션들에서, 프로그램 인터럽션 TDB가 저장된다.
질의 1408로 돌아가서, 만일 트랜잭션 진단 블록 주소가 유효하지 않으면, TBEGIN-명시 TDB는 저장되지 않고 중단 이유에 따라서 조건 코드 2 또는 3이 적용된다.
위에 더하여, 트랜잭션 내포 깊이가 제로로 세트된다(단계 1412). 이어서, 최외부 TBEGIN 명령에 의해 세이브되도록 지정된 모든 범용 레지스터 쌍들은 복원된다(단계 1414). 최외부 TBEGIN 명령에 의해 세이브되도록 지정되지 않은 범용 레지스터 쌍들은 트랜잭션이 중단될 때 복원되지 않는다.
이어서, 직렬화 기능이 수행된다(단계 1416). 직렬화 기능 또는 연산은, 다른 CPU들과 I/O 서브시스템에 의해 관찰될 때, 개념상으로 후속 스토리지 액세스들(및 과련된 참조 비트 및 변경 비트 세팅들)이 일어나기 전에, CPU에 의해 모든 개념상으로 이전 스토리지 액세스들(및, z/Architecture에서 예시로서 관련된 참조 비트 및 변경 비트 세팅들)을 완료하는 것을 포함한다. 직렬화는, ART 테이블 엔트리 및 DAT 테이블 엔트리 페칭과 연관된 것들을 제외하고, 스토리지에 대한 그리고 스토리지 키(key)들에 대한 모든 CPU 액세스의 순서에 영향을 미친다.
트랜잭션 실행 모드에서 CPU에 의해 관찰될 때, 직렬화는 (전술한 바와 같이) 정상적으로 작동한다. 다른 CPU들과 I/O 서브시스템에 의해 관찰될 때, CPU가 트랜잭션 실행 모드에 있는 동안 수행되는 직렬화 연산은, CPU가 트랜잭션 실행 모드에서 나갈 때 트랜잭션 내포 깊이를 제로로 감분하는 TRANSACTION END 명령(정상 종료)의 결과로서 또는 트랜잭션이 중단되는 결과로서 일어난다.
TABORT 이외의 것으로 개시된 중단 처리에서, 만일 트랜잭션이 인터럽션으로 귀결되는 예외 조건으로 인해 중단되면(질의 1418), 그 인터럽션과 연관된 인터럽션 코드들 또는 매개변수들이 그 인터럽션의 유형에 대응하는 할당된 스토리지 위치들에 저장된다(단계 1420). 이어서, 현재 PSW가, 위에서 세트된 대로, 인터럽션 구(old) PSW로 저장된다(단계 1422). 그 후에, 또는 만일 트랜잭션이 인터럽션으로 귀결되는 예외 조건으로 인해 중단되지 않았으면, 명령은 조건 코드 제로로 종료된다.
위에 더하여, z/Architecture의 해석적 실행에 대한 한 실시 예에서, CPU가 트랜잭션 실행 모드에 있을 때, 그리고 보통은 인터셉션 코드들 4, 12, 44, 56, 64, 68 또는 72로 귀결되는 게스트 조건이 발생할 때, 인터셉션은 발생하지 않는다. 그러기보다, CPU는 해석적 실행 모드에 남아 있고, 중단 조건들이 게스트에 다음과 같이 표시된다:
Figure 112014120036821-pct00109
비제약 트랜잭션에서, 트랜잭션은 제한된 명령(중단 코드 11)으로 인해 중단된다. 만일 동시적 PER 이벤트가 검출되었고 CPU가 PER에 대하여 인에이블된다면, 프로그램 인터럽션이 인터럽션 코드 0280 hex로 발생한다.
Figure 112014120036821-pct00110
제약 트랜잭션에서, 트랜잭션 제약 예외가 인지된다. 만일 동시적 PER 이벤트가 검출되었고 CPU가 PER에 대하여 인에이블된다면, 프로그램 인터럽션이 인터럽션 코드 0298 hex로 발생한다.
트랜잭션이 프로그램 예외 조건으로 인해 중단될 때, 프로그램 인터럽션 필터링은 인터럽션의 제시를 막을 수 있다. 인터셉션을 초래할 수 있는 프로그램 인터럽션들에서, 필터링은 또한 인터셉션을 막을 수 있다.
도 15a~15b를 참조하여 트랜잭션 처리와 관련된 추가 상세 사항을 기술한다. 한 실시 예에서, 이 로직은 프로세서에 의해 수행된다.
도 15a를 참조하면, 트랜잭션이 TRANSACTION BEGIN 명령을 통해 개시된다(단계 1500). 예를 들어, 만일 트랜잭션이 제약 트랜잭션이면, 트랜잭션을 개시하는 데 TBEGINC 명령이 사용된다. 하지만, 만일 트랜잭션이 비제약 트랜잭션이면, TBEGIN 명령이 채용된다.
트랜잭션의 실행 동안, 만일 트랜잭션이 중단되면(질의 1502), 트랜잭션의 유형에 대한 판정이 이루어진다(단계 1504). 이것은 중단과 연관된 처리가 트랜잭션의 유형, 즉 제약 트랜잭션 또는 비제약 트랜잭션인지에 따라 달라지기 때문이다.
트랜잭션의 유형이 제약 트랜잭션 같은 제1 유형인지에 대한 판정이 이루어진다(질의 1506). 만일 트랜잭션이 제약 트랜잭션이면, 상기 중단에 기초하여, TBEGINC 명령에 명시된 하나 또는 그 이상의 레지스터들이 복원되고 트랜잭션 저장들은 폐기된다(단계 1508). 이어서, 중단이 인터럽션/인터셉션으로 인한 것이었는지에 대한 판정이 이루어진다(질의 1510). 만일 인터럽션/인터셉션으로 인한 것이었으면, 그 인터럽션/인터셉션이 관리된다(단계 1512). 예를 들어, 만일 중단이 인터럽션으로 인한 것이었으면, 트랜잭션 중단 PSW(이것은 TRANSACTION BEGIN 명령을 가리키고 성공적인 재시도의 확률을 표시하는 조건 코드를 보유함)가 인터럽션-구(interruption-old) PSW로서 저장된다. 예를 들어 외부 인터럽트, 프로그램 인터럽트, I/O 인터럽트, 기계 검사 인터럽트 등의 여러 유형의 인터럽션들에 대하여, 별도의 인터럽션-구 PSW와 인터럽션-신규 PSW가 있다. 인터럽션-구 PSW는 인터럽션이 일어날 시점에 어디에 제어권이 있었는지를 표시한다. 그 다음에, 제어가 인터럽션-신규 PSW(예를 들어, 인터럽트 처리부의 주소)로 이전된다. 또한, 만일 중단이 인터셉션으로 인한 것이었으면, 트랜잭션 중단 PSW는 상태 묘사(state description)에 세이브되고, 인터셉션이 발생하여 CPU를 해석적 실행 모드에서 나가게 한다. 하지만 만일 중단이 인터럽션/인터셉션으로 인한 것이 아니면, 실행은 TRANSACTION BEGIN 명령에서 재개된다(단계 1516).
질의 1506으로 돌아가서, 만일 트랜잭션의 유형이 비제약 트랜잭션 같은 제2 유형이면, 정보가 하나 또는 그 이상의 트랜잭션 진단 블록들에 선택에 따라(optionally) 저장된다(단계 1520). 예를 들어, 만일 트랜잭션 진단 블록의 유효 주소가 TBEGIN 명령에 제공되면, 진단 정보가 프로그램-명시 TDB(TBEGIN-TDB라고도 알려짐)에 저장된다. 또한, 만일 트랜잭션이 특정한 필터링되지 않은 프로그램 예외 조건들로 인해 중단되면, 정보는 프로그램-인터럽션 TDB에 저장되고, 만일 트랜잭션이 특정한 인터셉션 조건들로 인해 중단되면, 정보는 인터셉션 TDB에 저장된다.
이어서, 비제약 트랜잭션에 대한 중단 처리는 TBEGIN 명령에 명시된 하나 또는 그 이상의 레지스터들을 복원하고 트랜잭션 저장들을 폐기하는 것을 포함한다(단계 1522). 이어서, 중단이 인터럽션/인터셉션으로 인한 것이었는지에 대한 판정이 이루어진다(질의 1524). 만일 인터럽션/인터셉션으로 인한 것이었으면, 그 인터럽션/인터셉션이, 위와 같이, 관리된다(단계 1526). 하지만, 만일 중단이 인터럽션/인터셉션으로 인한 것이 아니면, TRANSACTION BEGIN 명령 다음에 오는 명령(예를 들어, TBEGIN 다음에 오는 첫 번째 명령; 즉, 프로그램 순서에서 TBEGIN 바로 다음에 오는 트랜잭션 내 다음 순차 명령)으로 재기된다(단계 1530).
도 15b를 참조하여 TRANSACTION BEGIN 명령 이후에 실행을 재개하는 것과 관련된 추가 상세 사항을 기술한다.
처음에, 제어권을 수신하는 명령이 트랜잭션의 조건 코드(예를 들어, TBEGIN의 조건 코드)를 검사하여 왜 그 명령이 제어권을 수신하는지를 판정한다(단계 1550, 질의 1552). 만일 조건 코드가 TRANSACTION BEGIN 명령 다음에 오는 명령이 중단으로 인해 제어권을 수신하는 것이라고 표시하면(예를 들어, 비제로 조건 코드), 조건 코드가 재실행을 표시하는지에 대한 추가 판정이 이루어진다(질의 1556). 예를 들어, 만일 조건 코드가 특정한 값(예를 들어, 2)이면, 트랜잭션의 재실행이 표시되고 그 액션이 수행된다(단계 1558). 하지만, 만일 조건 코드가 재실행이 성공적일 가능성은 없다고 표시하면(예를 들어, 조건 코드 3)(질의 1556), 폴백 경로를 취한다(단계 1560).
질의 1552로 돌아가서, 만일 TBEGIN 명령 다음에 오는 명령이 중단 이외의 이유로 제어권을 수신하면(조건 코드 0), 트랜잭션은 계속 실행된다(단계 1554).
위에 기술된 것은 트랜잭션 처리의 한 예이며, 이 처리에서 중단이 발생할 경우, 트랜잭션의 유형은 트랜잭션 처리가 어떻게 수행될 것인지를 판정하는 데 사용된다. 또한, 트랜잭션의 유형은 중단 처리를 규정한다. 이것은 트랜잭션 환경이 각각 다른 유형의 트랜잭션들을 가질 수 있게 해준다.
전술한 것에 더하여, 로킹(locking) 같은 고전적인(개괄적인) 직렬화 없이 메모리 내 다중의 비인접 객체들을 업데이트하는 효율적인 수단이 추가로 제공되며, 이것은 유의미한 멀티프로세서 성능 향상의 가능성을 제공한다. 즉, 다중의 비인접 객체들은 로크(locks)와 세마포어(semaphores) 같은 고전적인 기술들에 의해 제공되는 더 개괄적인 스토리지-액세스 배열의 실행 없이 업데이트된다. 추론적 실행은 번거로운 복구 셋업 없이 제공되고, 제약 트랜잭션들은 단순하고 작은 공간(small-footprint)의 업데이트를 위해 제공된다.
트랜잭션 실행은 부분 인라이닝(partial inlining), 추론적 처리(speculative processing), 및 로크 생략(lock elision)을 포함한(그러나 이에 한정되지 않음) 여러 상황에서 사용될 수 있다. 부분 인라이닝에서, 실행된 경로에 포함될 부분 영역(partial region)은 TBEGIN/TEND에서 랩된다(wrapped). TABORT가 그 안에 포함되어 사이드-엑시트(side-exit)시에 상태를 롤백(roll back)시킬 수 있다. Java 등에서의 추론에서, 역참조된(de-referenced) 포인터들에 대한 널 검사(nullcheck)들은 트랜잭션의 사용을 통해서 엣지(edge)를 루프하기 위해 연기될 수 있다. 만일 포인터가 널(null)이면, 트랜잭션은 TBEGIN/TEND 내에 포함된 TABORT을 사용하여 안전하게 중단될 수 있다.
로크 생략의 경우, 그 사용의 한 예가 도 16a~16b와 아래에 제공되는 코드 조각(code fragment)을 참조하여 기술된다.
도 16a는 복수의 큐 엘리먼트들(1602a~1602d)의 이중 연결 목록(1600)을 도시한다. 새로운 큐 엘리먼트(1602e)가 큐 엘리먼트들의 이중 연결 목록(1600)으로 삽입될 예정이다. 각 큐 엘리먼트(1602a~1602e)는 전방향 포인터(1604a~1604e)와 역방향 포인터(1606a~1606e)를 포함한다. 도 16b에서 보는 바와 같이, 큐 엘리먼트(1602e)를 큐 엘리먼트(1602b)와 큐 엘리먼트(1602c) 사이에 추가하기 위해, (1) 역방향 포인터(1606e)가 큐 엘리먼트(1602b)를 가리키도록 세트되고, (2) 전방향 포인터(1604e)가 큐 엘리먼트(1602c)를 가리키도록 세트되고, (3) 역방향 포인터(1606c)가 큐 엘리먼트(1602e)를 가리키도록 세트되고, 그리고 (4) 전방향 포인터(1604b)가 큐 엘리먼트(1602e)를 가리키도록 세트된다.
아래는 도 16a~16b에 대응하는 코드 조각 예시이다:
* R1 - 삽입될 새로운 큐 엘리먼트의 주소.
* R2 - 삽입 지점의 주소; 새로운 엘리먼트는 R2가 가리키는 엘리먼트 앞에 삽입된다.
NEW USING QEL,R1
CURR USING QEL,R2
LHI R15,10 재시도 카운트 로드.
LOOP TBEGIN TDB,X'C000' 트랜잭션 시작(GR들 0~3 세이브)
JNZ ABORTED 비제로 CC는 중단됨을 의미함.
LG R3,CURR.BWD 이전 엘리먼트를 가리킴.
PREV USING QEL,R3 주소지정 가능하게 만듦.
STG R1,PREV.FWD 이전 전방향 포인터 업데이트.
STG R1,CURR.BWD 현재 역방향 포인터 업데이트.
STG R2,NEW.FWD 새로운 전방향 포인터 업데이트.
STG R3,NEW.BWD 새로운 역방향 포인터 업데이트.
TEND 트랜잭션 종료.
ABORTED JO NO_RETRY CC3: 재시도 불가능 중단.
JCT R15,LOOP 트랜잭션 몇 번 재시도.
J NO_RETRY No joy after 10x; do it the hard way.
한 예에서, 만일 트랜잭션이 로크 생략에 사용되지만, 폴백 경로가 로크를 사용하면, 트랜잭션은 적어도 로크 워드를 페치하여 그것이 이용 가능한지 알아본다. 프로세서는 만일 또 다른 CPU가 로크를 비트랜잭션적으로 액세스하면 트랜잭션이 중단되도록 보장한다.
여기에서 사용할 때, 스토리지, 중앙 스토리지, 메인 스토리지, 메모리 및 메인 메모리는 용법에 의해 암시적으로 또는 명시적으로 다르게 언급되지 않는 한 교환하여 사용할 수 있다. 또한, 한 실시 예에서는 트랜잭션을 효과적으로 지연시키는(delaying) 것은 선택된 트랜잭션이 완료될 때까지 메인 메모리에 대한 트랜잭션 저장을 커밋하는 것을 효과적으로 지연시키는 것을 포함하고; 다른 실시 예에서는 트랜잭션을 효과적으로 지연시키는 것은 메모리에 대한 트랜잭션 업데이트를 허용하지만 구(old) 값들을 보관하고 중단시에 메모리를 구(old) 값들로 복원시키는 것을 포함한다.
이 기술분야에서 통상의 지식을 가진 자는 인식할 수 있는 바와 같이, 하나 또는 그 이상의 특징들은 시스템, 방법 또는 컴퓨터 프로그램 제품으로 구현될 수 있다. 따라서, 하나 또는 그 이상의 특징들은 전적으로 하드웨어 실시 예, 전적으로 소프트웨어 실시 예(펌웨어, 상주 소프트웨어, 마이크로-코드 등 포함) 또는 소프트웨어와 하드웨어 특징들을 조합한 실시 예(여기에서는 모두 "회로", "모듈", "시스템"으로 불릴 수 있음)의 형태를 취할 수 있다. 또한, 하나 또는 그 이상의 특징들은 컴퓨터 판독 가능 프로그램 코드가 그 위에 구현된 하나 또는 그 이상의 컴퓨터 판독 가능 매체(들)에 구현된 컴퓨터 프로그램 제품의 형태를 취할 수 있다.
하나 또는 그 이상의 컴퓨터 판독 가능 매체(들)의 임의 조합이 사용될 수 있다. 컴퓨터 판독 가능 매체는 컴퓨터 판독 가능 스토리지 매체일 수 있다. 컴퓨터 판독 가능 스토리지 매체는, 예를 들어, 전자, 자기, 광학, 전자기, 적외선 또는 반도체 시스템, 장치, 또는 디바이스이거나 전술한 것들의 모든 적절한 조합으로 될 수 있으나 그에 한정되지는 않는다. 컴퓨터 판독 가능 스토리지 매체의 더 구체적인 예들(비포괄적인 목록)에는 하나 또는 그 이상의 와이어들을 갖는 전기 배선(electrical connection), 휴대용 컴퓨터 디스켓, 하드 디스크, 랜덤 액세스 메모리(RAM), 판독-전용 메모리(ROM), 소거 및 프로그램가능 판독-전용 메모리(EPROM 또는 플래시 메모리), 광섬유, 휴대용 컴팩트 디스크 판독-전용 메모리(CD-ROM), 광 스토리지 디바이스, 자기 스토리지 디바이스, 또는 전술한 것들의 모든 적절한 조합이 포함된다. 이 문서의 컨텍스트에서, 컴퓨터 판독 가능 스토리지 매체는 명령 실행을 위한 시스템, 장치, 또는 디바이스에 의해 또는 그와 연결하여 사용할 프로그램을 포함 또는 저장할 수 있는 모든 유형의(tangible) 매체일 수 있다.
이제 도 17을 참조하면, 한 예에서, 컴퓨터 프로그램 제품(1700)은 예를 들어 하나 또는 그 이상의 비-일시적인(non-transitory) 컴퓨터 판독 가능 스토리지 매체(1702)를 포함하며 이 매체상에 컴퓨터 판독 가능 프로그램 코드 수단 또는 로직(1704)을 저장하여 하나 또는 그 이상의 특징들을 제공 및 가능하게 만든다.
컴퓨터 판독 가능 매체상에 구현된 프로그램 코드는 무선, 유선, 광섬유 케이블, RF 등 또는 전술한 것들의 적절한 조합으로 된 것을 포함한(그러나 이에 한정되지는 않는) 적절한 매체를 사용하여 전송될 수 있다.
하나 또는 그 이상의 특징들에 대한 동작들을 실행하기 위한 컴퓨터 프로그램 코드는 Java, Smalltalk, C++ 또는 그와 유사 언어 등의 객체 지향 프로그래밍 언어와 "C" 프로그래밍 언어, 어셈블러 언어 또는 그와 유사한 언어 등의 종래의 절차적 프로그래밍 언어들을 포함하여, 하나 또는 그 이상의 프로그래밍 언어들을 조합하여 작성될 수 있다. 상기 프로그램 코드는 전적으로 사용자의 컴퓨터상에서, 부분적으로 사용자의 컴퓨터상에서, 독립형(stand-alone) 소프트웨어 패키지로서, 부분적으로 사용자의 컴퓨터상에서 그리고 부분적으로 원격 컴퓨터상에서 또는 전적으로 원격 컴퓨터나 서버상에서 실행될 수 있다. 위에서 마지막의 경우에, 원격 컴퓨터는 근거리 통신망(LAN) 또는 광역 통신망(WAN)을 포함한 모든 종류의 네트워크를 통해서 사용자의 컴퓨터에 접속될 수 있고, 또는 이 접속은 (예를 들어, 인터넷 서비스 제공자를 이용한 인터넷을 통해서) 외부 컴퓨터에 이루어질 수도 있다.
여기에서는 방법들, 장치들(시스템들) 및 컴퓨터 프로그램 제품들의 순서 예시도들 및/또는 블록도들을 참조하여 하나 또는 그 이상의 특징들을 기술한다. 순서 예시도들 및/또는 블록도들의 각 블록과 순서 예시도들 및/또는 블록도들 내 블록들의 조합들은 컴퓨터 프로그램 명령들에 의해 구현될 수 있다는 것을 이해할 수 있을 것이다. 이 컴퓨터 프로그램 명령들은 범용 컴퓨터, 특수목적용 컴퓨터, 또는 기타 프로그램가능 데이터 처리 장치의 프로세서에 제공되어 머신(machine)을 생성하고, 그렇게 하여 그 명령들이 상기 컴퓨터 또는 기타 프로그램가능 데이터 처리 장치의 프로세서를 통해서 실행되어, 상기 순서도 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/동작들을 구현하기 위한 수단을 생성할 수 있다.
상기 컴퓨터 프로그램 명령들은 또한 컴퓨터 판독 가능 매체에 저장될 수 있으며, 컴퓨터, 기타 프로그램가능 데이터 처리 장치 또는 다른 디바이스들에 지시하여 상기 컴퓨터 판독 가능 매체에 저장된 명령들이 상기 순서도 및/또는 블록도의 블록 또는 블록들에 명시된 기능/동작을 구현하는 명령들을 포함하는 제조품(an article of manufacture)을 생성하도록 특정한 방식으로 기능하게 할 수 있다.
상기 컴퓨터 프로그램 명령들은 또한 컴퓨터, 기타 프로그램가능 데이터 처리 장치, 또는 다른 디바이스들에 로드되어, 컴퓨터, 기타 프로그램가능 장치 또는 다른 디바이스들에서 일련의 동작 단계들이 수행되게 하여 컴퓨터 구현 프로세스를 생성하며, 그렇게 하여 상기 컴퓨터 또는 기타 프로그램가능 장치상에서 실행되는 명령들이 순서도 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/동작들을 구현하기 위한 프로세스들을 제공할 수 있다.
도면들 내 순서도 및 블록도들은 여러 실시 예들에 따른 시스템들, 방법들 및 컴퓨터 프로그램 제품들의 가능한 구현들의 아키텍처, 기능(functionality), 및 연산(operation)을 예시한다. 이와 관련하여, 상기 순서도 또는 블록도들 내 각 블록은 상기 명시된 논리적 기능(들)을 구현하기 위한 하나 또는 그 이상의 실행 가능한 명령들을 포함한 모듈, 세그먼트 또는 코드의 일부분을 나타낼 수 있다. 일부 다른 구현들에서, 상기 블록에 언급되는 기능들은 도면들에 언급된 순서와 다르게 일어날 수도 있다는 것에 또한 유의해야 한다. 예를 들면, 연속으로 도시된 두 개의 블록들은 실제로는 사실상 동시에 실행될 수도 있고, 또는 이 두 블록들은 때때로 관련된 기능에 따라서는 역순으로 실행될 수도 있다. 블록도들 및/또는 순서 예시도의 각 블록, 및 블록도들 및/또는 순서 예시도 내 블록들의 조합들은 특수목적용 하드웨어 및 컴퓨터 명령들의 명시된 기능들 또는 동작들, 또는 이들의 조합들을 수행하는 특수목적용 하드웨어-기반 시스템들에 의해 구현될 수 있다는 것에 또한 유의한다.
전술한 것에 추가하여, 하나 또는 그 이상의 특징들은 컴퓨터 환경의 관리를 서비스하는 서비스 제공자에 의해 제공, 공급, 배치, 관리, 서비스 등이 될 수 있다. 예를 들면, 서비스 제공자는 하나 또는 그 이상의 고객들을 위해 하나 또는 그 이상의 특징들을 수행하는 컴퓨터 코드 및/또는 컴퓨터 인프라스트럭처의 제작, 유지, 지원 등을 할 수 있다. 그 대가로, 서비스 제공자는 가입제(subscription) 및/또는 수수료 약정에 따라 고객으로부터 대금을 수령할 수 있으며, 이는 예이다. 또한, 서비스 제공자는 하나 또는 그 이상의 제3자들에게 광고 콘텐츠를 판매하고 대금을 수령할 수 있다.
한 실시 예에서, 하나 또는 그 이상의 실시 예들을 수행하기 위한 애플리케이션이 배치될 수 있다. 한 예로서, 애플리케이션의 배치는 하나 또는 그 이상의 실시 예들을 수행하는 데 실시 가능한 컴퓨터 인프라스트럭처를 제공하는 것을 포함한다.
추가 특징으로서, 컴퓨터 판독 가능 코드를 컴퓨팅 시스템으로 통합하는 것을 포함하는 컴퓨팅 인프라스트럭처가 배치될 수 있으며, 그 컴퓨팅 시스템에서 상기 코드는 상기 컴퓨팅 시스템과 결합하여 하나 또는 그 이상의 실시 예들을 수행하는 것이 가능하다.
추가 특징으로서, 컴퓨터 판독 가능 코드를 컴퓨터 시스템으로 통합시키는 것을 포함하는 컴퓨팅 인프라스트럭처 통합을 위한 프로세스가 제공될 수 있다. 상기 컴퓨터 시스템은 컴퓨터 판독 가능 매체를 포함하고, 상기 컴퓨터 시스템에서 상기 컴퓨터 매체는 하나 또는 그 이상의 실시 예들을 포함한다. 상기 코드는 상기 컴퓨터 시스템과 결합하여 하나 또는 그 이상의 실시 예들을 수행하는 것이 가능하다.
위에서 여러 실시 예들이 기술되었지만, 이들은 단지 예시일 뿐이다. 예를 들면, 다른 아키텍처들로 된 컴퓨팅 환경들이 하나 또는 그 이상의 실시 예들을 포함하고 사용하는 데 사용될 수 있다. 또한, 각각 다른(different) 명령들, 명령 포맷들, 명령 필드들 및/또는 명령 값들이 사용될 수 있다. 또한, 각각 다른(different), 다른(other), 및/또는 추가 트랜잭션 유형들이 제공/사용될 수 있다. 많은 변형 예들이 가능하다.
또한, 다른 종류의 컴퓨팅 환경들도 이득을 얻을 수 있고 사용될 수 있다. 예로서, 프로그램 코드를 저장 및/또는 실행하기에 적합한 데이터 처리 시스템이 사용될 수 있으며, 이 시스템은 시스템 버스를 통해서 메모리 엘리먼트들에 직접적으로 또는 간접적으로 결합된 적어도 두 개의 프로세서를 포함한다. 상기 메모리 엘리먼트들은, 예를 들어 프로그램 코드의 실제 실행 동안 사용되는 로컬 메모리, 대용량 스토리지(bulk storage), 및 코드가 실행 동안에 대용량 스토리지로부터 검색되어야 하는 횟수를 줄이기 위해 적어도 일부 프로그램 코드의 임시 저장(temporary storage)을 제공하는 캐시 메모리를 포함한다.
입력/출력 또는 I/O 디바이스들(키보드, 디스플레이, 포인팅 디바이스, DASD, 테이프, CD, DVD, 썸 드라이브 및 기타 메모리 매체 등을 포함하나 이에 한정되지는 않음)은 직접 또는 중개(intervening) I/O 컨트롤러들을 통해서 상기 시스템에 결합될 수 있다. 네트워크 어댑터 또한 상기 시스템에 결합되어 상기 데이터 처리 시스템이 중개하는 사설 또는 공공 네트워크를 통해서 기타 데이터 처리 시스템 또는 원격 포인터 또는 스토리지 디바이스에 결합되는 것을 가능하게 한다. 모뎀, 케이블 모뎀, 및 이더넷 카드는 이용 가능한 네트워크 어댑터의 단지 일부 예이다.
도 18을 참조하면, 하나 또는 그 이상의 실시 예들을 구현하기 위한 호스트 컴퓨터 시스템(5000)의 대표적인 컴포넌트들이 도시된다. 대표적인 호스트 컴퓨터(5000)는 컴퓨터 메모리(즉, 중앙 스토리지)(5002)와 통신하는 하나 또는 그 이상의 CPU들(5001)을 포함하고, 또한 스토리지 매체 디바이스들(5011)로 그리고 다른 컴퓨터들 또는 SAN들 등과 통신하기 위한 네트워크들(5010)로 가는 I/O 인터페이스들을 포함한다. CPU(5001)는 아키텍처화된 명령 세트((architected instruction set)와 아키텍처화된 기능(architected functionality)을 갖는 아키텍처에 부합한다. CPU(5001)는 액세스 레지스터 변환(ART)(5012)을 가질 수 있으며, 이것은 프로그램 주소들(가상 주소들)을 메모리의 실제 주소들로 변환하는 동적 주소 변환(DAT)(5003)에 의해 사용될 주소 공간을 선택하기 위한 ART 색인 버퍼(ALB)(5013)를 포함한다. DAT는 통상적으로 컴퓨터 메모리(5002)의 블록에 나중에 액세스할 때 주소 변환의 지연이 필요 없도록 변환들을 캐시하기 위한 변환 색인 버퍼(TLB, translation lookaside buffer)(5007)를 포함한다. 통상적으로, 캐시(5009)는 컴퓨터 메모리(5002)와 프로세서(5001) 사이에서 사용된다. 캐시(5009)는 하나 이상의 CPU가 이용 가능한 큰 캐시(large cache)와 그 큰 캐시와 각 CPU 사이에 있는 더 작고 더 빠른 (더 하위 레벨) 캐시들을 갖는 계층형(hierarchical)일 수 있다. 어떤 구현들에서는, 더 하위 레벨(lower level) 캐시들은 명령 페치와 데이터 액세스를 위한 별개의(separate) 하위 레벨 캐시들을 제공하기 위해 분할된다. 한 실시 예에서, TX 퍼실리티를 위해서, 트랜잭션 진단 블록(TDB)(5100) 및 하나 또는 그 이상의 버퍼들(5101)이 하나 또는 그 이상의 캐시(5009)와 메모리(5002)에 저장될 수 있다. 한 예에서, TX 모드에서, 데이터는 처음에 TX 버퍼에 저장되고, TX 모드가 종료될 때(예를 들어, 최외부 TEND) 상기 버퍼 내 데이터는 메모리에 저장(커밋)되거나, 또는 만일 중단(abort)이 있으면 상기 버퍼 내 데이터는 폐기된다.
한 실시 예에서, 한 명령이 명령 페치 유닛(5004)에 의해 캐시(5009)를 통해서 메모리(5002)로부터 페치된다. 명령은 명령 디코드 유닛(instruction decode unit)(5006)에서 디코드되고 (어떤 실시 예들에서는 다른 명령들과 함께) 명령 실행 유닛 또는 유닛들(5008)로 디스패치된다(dispatched). 통상적으로 몇 가지의 실행 유닛들 (5008)이 채용되며, 예를 들면 산술 실행 유닛(arithmetic execution unit), 부동 소수점 실행 유닛(floating point execution unit) 및 분기 명령 실행 유닛(branch instruction execution unit)이 있다. 또한, TX 퍼실리티의 한 실시 예에서, 여러 TX 제어들(5110)이 채용될 수 있다. 명령은 실행 유닛에 의해 실행되고, 명령이 명시한 레지스터들 또는 메모리로부터 필요한 만큼 오퍼랜드들에 액세스한다. 만일 오퍼랜드가 메모리(5002)로부터 액세스(로드 또는 저장)되면, 로드/저장 유닛(load/store unit)(5005)이 통상적으로 실행되는 명령의 제어에 따라 액세스를 처리한다. 명령들은 하드웨어 회로들에서 또는 내부 마이크로코드(펌웨어)에서 또는 이 둘의 조합에 의해서 실행될 수 있다.
TX 퍼실리티의 일 특징에 따라서, 프로세서(5001)는 또한 PSW(5102)(예를 들어, TX 및/또는 중단 PSW), 내포 깊이(nesting depth)(5104), TDBA(5106), 및 하나 또는 그 이상의 제어 레지스터들(5108)을 포함한다.
전술한 바와 같이, 컴퓨터 시스템은 로컬 (또는 메인) 스토리지에 정보를 포함하고, 또한 주소지정(addressing), 보호(protection), 그리고 참조 및 변경 기록(reference and change recording)을 포함한다. 주소지정의 몇 가지 예로는 주소의 형식(format of addresses), 주소 공간의 개념(concept of address spaces), 주소의 여러 유형(various types of addresses), 및 한 유형의 주소가 또 다른 유형의 주소로 변환되는 방식(manner)이 있다. 메인 스토리지의 일부는 영구적으로 할당된 스토리지 위치들을 포함한다. 메인 스토리지는 시스템에 데이터의 직접 주소지정 가능한 고속 액세스 스토리지(fast-access storage)를 제공한다. 데이터와 프로그램들은 모두 (입력 디바이스들로부터) 메인 스토리지로 로드된 후에 처리될 수 있다.
메인 스토리지는 때때로 캐시라고 불리는 하나 또는 그 이상의 더 작고 더 고속의 액세스 버퍼 스토리지들을 포함한다. 캐시는 통상적으로 CPU 또는 I/O 프로세서와 물리적으로 연관된다. 구별되는(distinct) 스토리지 매체의 물리적 구축과 사용의 영향들은, 수행을 제외하고는, 일반적으로 프로그램에 의해 관찰되지 않는다.
명령들 용과 데이터 오퍼랜드들 용으로 별개 캐시들이 유지될 수 있다. 캐시 내의 정보는 캐시 블록(cache block) 또는 캐시 라인(또는 줄여서 라인)이라 불리는 인테그럴 범위(integral boundary)상의 인접 바이트들에 보존된다. 어떤 모델은 캐시 라인의 사이즈를 바이트로 회신하는 EXTRACT CACHE ATTRIBUTE 명령을 제공할 수 있다. 어떤 모델은 또한 스토리지를 데이터 또는 명령 캐시로의 프리페치(prefetch) 또는 캐시로부터 데이터의 해제를 실현하는 PREFETCH DATA 명령과 PREFETCH DATA RELATIVE LONG 명령을 제공할 수 있다.
스토리지는 비트들의 긴 수평의 열(a long horizontal string of bits)로 보인다. 대부분의 연산들에 있어서, 스토리지에 대한 액세스는 좌측-에서-우측(left-to-right) 순으로 진행된다. 비트들의 문자열(string)은 8비트의 유닛들로 세분된다. 8-비트 단위를 바이트(byte)라 부르고, 이것은 모든 정보 포맷들의 기본적인 빌딩 블록(building block)이다. 스토리지에서 각 바이트 위치는 음이 아닌 고유한 정수로 식별되고, 이것은 그 바이트 위치의 주소, 또는, 간단히 말해서 바이트 주소(byte address)이다. 인접 바이트 위치들은 좌측의 0부터 시작해서 좌측-에서-우측 순으로 진행되는 연속되는 주소들이다. 주소들은 무부호 2진 정수들이며 24, 31, 또는 64비트이다.
정보는 스토리지와 CPU 또는 채널 서브시스템 사이에서, 1 바이트 또는 바이트들의 그룹으로, 한 번에 전송된다. 다르게 명시되지 않으면, 예를 들어, z/Architecture에서 스토리지 내 바이트들의 그룹은 그 그룹의 제일 좌측 바이트에 의해 주소지정된다. 그룹 내 바이트의 수는 수행될 연산에 의해 암시되거나 분명하게 명시된다. CPU 연산에서 사용될 때, 바이트들의 그룹은 필드(field)라 불린다. 각 바이트들의 그룹 내에서, 예를 들어, z/Architecture에서, 비트들은 좌측-에서-우측 순으로 번호가 붙는다. z/Architecture에서, 제일 좌측 비트들은 때때로 "상위(high-order)" 비트들로 불리고 제일 우측 비트들은 "하위(low-order)" 비트들로 불린다. 그러나 비트 번호는 스토리지 주소가 아니다. 바이트만 주소지정될 수 있다. 스토리지 내 한 바이트의 개별 비트들에서 연산하기 위해서는, 전체 바이트가 액세스된다. 한 바이트 내 비트들은 (예를 들어, z/Architecture에서) 0에서 7까지, 좌측에서 우측으로 번호가 붙는다. 한 주소 내 비트들은 24-비트 주소에서는 8~31 또는 40~63으로, 또는 31-비트 주소에서는 1~31 또는 33~63으로 번호가 붙을 수 있고; 64-비트 주소에서는 0~63으로 번호가 붙는다. 한 예에서, 비트들 8~31과 1~31은 32 비트 넓이인 위치(예를 들어, 레지스터)에 있는 주소들에 적용되고, 비트들 40~63과 33~63은 64비트 넓이 위치에 있는 주소들에 적용된다. 다른 고정-길이 포맷의 다수 바이트들 내에서, 그 포맷을 이루는 비트들은 0부터 시작해서 연속적으로 번호가 붙는다. 에러 검출의 목적을 위해서, 그리고 바람직하게는 교정을 위해서, 하나 또는 그 이상의 검사용 비트들이 각 바이트와 또는 바이트들의 그룹과 함께 전송된다. 이러한 검사용 비트들은 머신에 의해 자동적으로 생성되며 프로그램에 의해 직접적으로 제어될 수 없다. 스토리지 용량은 바이트 수로 표시된다. 스토리지-오퍼랜드 필드의 길이가 명령의 연산 코드에 의해 암시될 때, 그 필드는 고정 길이(fixed length)를 가졌다고 말하며, 그 길이는 1, 2, 4, 8, 또는 16 바이트일 수 있다. 어떤 명령들에는 더 큰 필드들이 암시될 수 있다. 스토리지-오퍼랜드 필드의 길이가 암시되지 않고 분명하게 언급될 때, 그 필드는 가변 길이(variable length)를 가졌다고 말한다. 가변-길이 오퍼랜드는 길이가 1 바이트의 증분들 만큼씩 (또는 어떤 명령들에서는, 2 바이트의 배수로 또는 다른 배수들로) 변할 수 있다. 정보가 스토리지에 배치될 때, 비록 스토리지에 대한 물리적 경로의 폭이 저장되는 필드의 길이보다 더 클 수 있을지라도, 단지 그 지정된 필드에 포함된 그 바이트 위치들의 내용들만 대체된다.
정보의 일정 유닛들(units)은 스토리지에서 인테그럴 경계(integral boundary) 상에 있어야 한다. 경계(boundary)는 그 스토리지 주소가 그 유닛의 길이의 바이트 배수일 때 정보의 유닛에 대해서 인테그럴(integral)하다고 불린다. 인테그럴 경계 상의 2, 4, 8, 16 및 32 바이트의 필드들에는 특별한 명칭들이 주어진다. 하프워드(halfword)는 2-바이트 경계 상의 2개의 연속 바이트들의 그룹이고 명령들의 기본 빌딩 블록이다. 워드(word)는 4-바이트 경계 상의 4개의 연속 바이트들의 그룹이다. 더블워드(doubleword)는 8-바이트 경계 상의 8개의 연속 바이트들의 그룹이다. 쿼드워드(quadword)는 16-바이트 경계 상의 16개의 연속 바이트들의 그룹이다. 옥토워드(octoword)는 32-바이트 경계 상의 32개의 연속 바이트들의 그룹이다. 스토리지 주소들이 하프워드, 워드, 더블워드, 쿼드워드, 및 옥토워드를 지정할 때, 그 주소의 2진 표시는 1개, 2개, 3개, 4개, 또는 5개의 제일 우측 제로(zero)비트들을 각각 포함한다. 명령들은 2-바이트 인테그럴 경계들 상에 있어야 한다. 대부분의 명령들의 스토리지 오퍼랜드들은 경계-정렬(boundary-alignment) 요건들을 갖지 않는다.
명령들과 데이터 오퍼랜드들에 대한 별개의 캐시들을 구현하는 디바이스들상에서, 만일 프로그램이 어떤 캐시 라인에 저장되고 그 캐시 라인으로부터 명령들이 후속적으로 페치되면, 그 저장이 후속적으로 페치되는 명령들을 변경하는지 여부와 상관 없이, 상당한 지연을 겪게 될 것이다.
한 예에서, 실시 예들은 소프트웨어로 실시될 수 있다(이 소프트웨어는 때때로 라이선스된 내부 코드, 펌웨어, 마이크로-코드, 밀리-코드, 피코-코드 등으로 불리며, 이들 중 어떤 것이든 하나 또는 그 이상의 실시 예들에 부합할 것이다). 도 18을 참조하면, 하나 또는 그 이상의 특징들을 구현하는 소프트웨어 프로그램 코드는 CD-ROM 드라이브, 테이프 드라이브 또는 하드 드라이브와 같은 장기 스토리지(long-term storage) 매체 디바이스들(5011)로부터 호스트 시스템(5000)의 프로세서(5001)에 의해 액세스된다. 소프트웨어 프로그램 코드는 디스켓, 하드 드라이브, 또는 CD-ROM과 같은 데이터 처리 시스템에 사용할 용도로 알려진 여러 가지 매체들 중 어느 하나에 구현될 수 있다. 코드는 그러한 매체상에 배포되거나, 또는 한 컴퓨터 시스템의 컴퓨터 메모리(5002) 또는 스토리지의 사용자들로부터 네트워크(5010)를 통해서 다른 컴퓨터 시스템들에, 그러한 다른 시스템들의 사용자에 의해 사용될 용도로 배포될 수 있다.
소프트웨어 프로그램 코드는 여러 가지 컴퓨터 컴포넌트들의 기능과 상호작용(interaction) 및 하나 또는 그 이상의 애플리케이션 프로그램들을 제어하는 운영체제를 포함한다. 프로그램 코드는 보통으로 스토리지 매체 디바이스(5011)로부터 상대적으로 더 고속의 컴퓨터 스토리지(5002)―이것은 프로세서(5001)에 의한 처리에 이용 가능함―로 페이지된다. 메모리 내 소프트웨어 프로그램 코드를 물리적 매체상에 구현하는 기술과 방법, 및/또는 네트워크들을 통해서 소프트웨어 코드를 배포하는 기술과 방법은 잘 알려져 있으며 여기에서는 더 논의하지 않을 것이다. 프로그램 코드는, 유형의 매체(전자 메모리 모듈들(RAM), 플래시 메모리, 컴팩트 디스크(CDs), DVDs, 자기 테이프 등을 포함하나, 이러한 것들로 한정되지 않음)상에 생성되고 저장될 때, 흔히 "컴퓨터 프로그램 제품"으로 불린다. 컴퓨터 프로그램 제품 매체는 통상적으로 처리 회로에 의해 판독 가능하며, 컴퓨터 시스템에서 처리 회로에 의해 실행하기 위해 판독 가능한 것이 바람직하다.
도 19는 하나 또는 그 이상의 실시 예들이 실시될 수 있는 대표적인 워크스테이션 또는 서버 하드웨어 시스템을 예시한다. 도 19의 시스템(5020)은 선택적인 주변 디바이스들을 포함하여, 개인용 컴퓨터, 워크스테이션 또는 서버 같은 대표적인 베이스 컴퓨터 시스템(5021)을 포함한다. 베이스 컴퓨터 시스템(5021)은 하나 또는 그 이상의 프로세서들(5026)과 버스를 포함하며, 버스는 알려진 기술들에 따라 프로세서(들)(5026)와 시스템(5021)의 다른 컴포넌트들 사이를 연결하여 통신을 가능하게 하기 위해 채용되는 것이다. 버스는 프로세서(5026)를 메모리(5025)와 장기 스토리지(5027)에 연결하며 장기 스토리지는, 예를 들어, 하드 드라이브(예를 들어, 자기 매체, CD, DVD 및 플래시 메모리를 포함함) 또는 테이프 드라이브를 포함할 수 있다. 시스템(5021)은 또한 사용자 인터페이스 어댑터를 포함할 수 있으며, 이 사용자 인터페이스 어댑터는 마이크로프로세서(5026)를 버스를 통해서 키보드(5024), 마우스(5023), 프린터/스캐너(5030) 및/또는 기타 인터페이스 디바이스들과 같은 하나 또는 그 이상의 인터페이스 디바이스들에 연결하며, 상기 기타 인터페이스 디바이스들은 터치 감응식 스크린(touch sensitive screen), 디지털 입력 패드(digitized entry pad) 등과 같은 사용자 인터페이스 디바이스일 수 있다. 버스는 또한 LCD 스크린 또는 모니터와 같은 디스플레이 디바이스(5022)를 디스플레이 어댑터를 통해서 마이크로프로세서(5026)에 연결한다.
시스템(5021)은 네트워크(5029)와 통신(5028)이 가능한 네트워크 어댑터를 경유하여 다른 컴퓨터들 또는 컴퓨터들의 네트워크들과 통신할 수 있다. 네트워크 어댑터들의 예로는 통신 채널(communications channels), 토큰 링(token ring), 이더넷(Ethernet) 또는 모뎀(modems)이 있다. 이와는 달리, 시스템(5021)은 CDPD(cellular digital packet data) 카드 같은 무선 인터페이스를 사용하여 통신할 수 있다. 시스템(5021)은 근거리 통신망(LAN) 또는 광역 통신망(WAN)에서 다른 컴퓨터들과 연관될 수 있고, 또는 시스템(5021)은 또 다른 컴퓨터와 클라이언트/서버 배열방식(arrangement)에서 클라이언트가 될 수 있다. 이들 모든 구성들과 적절한 통신 하드웨어 및 소프트웨어는 이 기술분야에서 알려져 있다.
도 20은 하나 또는 그 이상의 실시 예들이 실시될 수 있는 데이터 처리 네트워크(5040)를 예시한다. 데이터 처리 네트워크(5040)는 무선 네트워크와 유선 네트워크 같은 복수의 개별 네트워크들을 포함할 수 있으며, 이들의 각각은 복수의 개별 워크스테이션들(5041, 5042, 5043, 5044)을 포함할 수 있다. 또한, 이 기술분야에서 통상의 지식을 가진 자들은 인식할 수 있는 바와 같이, 하나 또는 그 이상의 LAN들이 포함될 수 있으며, 여기에서 LAN은 호스트 프로세서에 결합된 복수의 지능형(intelligent) 워크스테이션들을 포함할 수 있다.
계속해서 도 20을 참조하면, 네트워크들은 또한 게이트웨이 컴퓨터 (클라이언트 서버 5046) 또는 애플리케이션 서버(데이터 저장소를 액세스할 수 있고 또한 워크스테이션 5045로부터 직접 액세스될 수 있는 원격 서버 5048)와 같은 메인프레임 컴퓨터들 또는 서버들을 포함할 수 있다. 게이트웨이 컴퓨터(5046)는 각 개별 네트워크로의 진입점(a point of entry) 역할을 한다. 게이트웨이는 하나의 네트워킹 프로토콜을 또 하나의 네트워킹 프로토콜에 연결할 때 필요하다. 게이트웨이(5046)는 바람직하게는 통신 링크를 통해 또 하나의 네트워크(예를 들면 인터넷 5047)에 결합될 수 있다. 게이트웨이(5046)는 또한 통신 링크를 사용하여 하나 또는 그 이상의 워크스테이션들(5041, 5042, 5043, 5044)에 직접 결합될 수 있다. 게이트웨이 컴퓨터는 인터내셔널 비지네스 머신즈 코포레이션에서 입수 가능한 IBM eServer System z 서버를 활용하여 구현될 수 있다.
도 19와 도 20을 동시에 참조하면, 하나 또는 그 이상의 특징들을 구현할 수 있는 소프트웨어 프로그래밍 코드(5031)가 시스템(5020)의 프로세서(5026)에 의해 CD-ROM 드라이브 또는 하드 드라이브와 같은 장기 스토리지 매체(5027)로부터 액세스될 수 있다. 소프트웨어 프로그래밍 코드는 디스켓, 하드 드라이브, 또는 CD-ROM과 같은 데이터 처리 시스템과 함께 사용할 용도로 알려진 여러 가지 매체들 중 어느 하나에 구현될 수 있다. 코드는 그러한 매체상에 배포되거나, 또는 한 컴퓨터 시스템의 메모리 또는 스토리지의 사용자들(5050, 5051)로부터 네트워크를 통해서 다른 컴퓨터 시스템들에, 그러한 다른 시스템들의 사용자에 의해 사용될 용도로 배포될 수 있다.
이와는 달리, 프로그래밍 코드는 메모리(5025)에 구현되고, 프로세서 버스를 사용하여 프로세서(5026)에 의해 액세스될 수 있다. 이러한 프로그래밍 코드는 여러 가지 컴퓨터 컴포넌트들의 기능과 상호작용 및 하나 또는 그 이상의 애플리케이션 프로그램들(5032)을 제어하는 운영체제를 포함한다. 프로그램 코드는 보통으로 스토리지 매체(5027)로부터 고속의 메모리(5025)―이것은 프로세서(5026)에 의한 처리에 이용 가능함―로 페이지된다. 메모리 내 소프트웨어 프로그래밍 코드를 물리적 매체상에 구현하는 기술과 방법, 및/또는 네트워크들을 통해서 소프트웨어 코드를 배포하는 기술과 방법은 잘 알려져 있으며 여기에서는 더 논의하지 않을 것이다. 프로그램 코드는, 유형의 매체(전자 메모리 모듈들(RAM), 플래시 메모리, 컴팩트 디스크(CDs), DVDs, 자기 테이프 등을 포함하나, 이러한 것들로 한정되지 않음)상에 생성되고 저장될 때, 흔히 "컴퓨터 프로그램 제품"으로 불린다. 컴퓨터 프로그램 제품 매체는 통상적으로 처리 회로에 의해 판독 가능하며, 컴퓨터 시스템에서 처리 회로에 의해 실행하기 위해 판독 가능한 것이 바람직하다.
프로세서가 가장 쉽게 이용 가능한 캐시(보통으로 프로세서의 다른 캐시들보다 더 빠르고 더 작음)는 가장 낮은 (L1 또는 레벨 1) 캐시이고 메인 저장소(메인 메모리)는 가장 높은 레벨의 캐시(만일 3개의 레벨이 있다면 L3)이다. 가장 낮은 레벨의 캐시는 흔히 실행될 기계어 명령들을 보유하는 명령 캐시(I-캐시)와 데이터 오퍼랜드들을 보유하는 데이터 캐시(D-캐시)로 나뉜다.
도 21을 참조하면, 예시적인 프로세서 실시 예가 프로세서(5026)에 대해 도시된다. 프로세서 성능을 향상시키기 위해서 메모리 블록들을 버퍼하기 위해 통상적으로 하나 또는 그 이상의 캐시(5053) 레벨들이 채용된다. 캐시(5053)는 사용될 가능성이 있는 메모리 데이터의 캐시 라인들을 보유하는 고속 버퍼이다. 통상적인 캐시 라인들은 64, 128 또는 256 바이트의 메모리 데이터이다. 별개의 캐시들은 흔히 데이터를 캐시하기 위해서보다는 명령들을 캐시하기 위해 채용된다. 이 기술분야에서 잘 알려진 "스누프(snoop)" 알고리즘들에 의해 캐시 일관성(cache coherence)(메모리 내 라인들의 사본들과 캐시들의 동기화(synchronization))이 종종 제공된다. 프로세서 시스템의 메인 메모리 스토리지(5025)는 종종 캐시로 불린다. 4개 레벨의 캐시(5053)를 가진 프로세서 시스템에서, 메인 스토리지(5025)는 때로 레벨 5(L5) 캐시로 불리는데, 왜냐하면 그것은 통상적으로 더 빠르며 컴퓨터 시스템이 이용 가능한 비휘발성 스토리지(DASD, 테이프 등)의 일부분만을 보유하기 때문이다. 메인 스토리지(5025)는 운영체제에 의해 메인 스토리지(5025)의 안팎으로(in and out of) 페이지되는 데이터의 페이지들을 "캐시"한다.
프로그램 카운터(명령 카운터)(5061)는 실행될 현재 명령의 주소를 추적한다. z/Architecture 프로세서 내 프로그램 카운터는 64비트이고 이전의 주소지정 한계(addressing limits)를 지원하기 위해 31비트 또는 24비트로 잘려질 수 있다. 프로그램 카운터는 통상적으로 컴퓨터의 PSW(프로그램 상태 워드)에 구현되어, 그것이 컨텍스트 전환(context switching) 동안 지속되도록 한다. 그리하여, 프로그램 카운터 값을 갖는 진행중인 프로그램은, 예를 들어, 운영체제에 의해 인터럽트될 수 있다(프로그램 환경에서 운영체제 환경으로 컨텍스트 전환). 프로그램이 활성이 아닐 때, 프로그램의 PSW는 프로그램 카운터 값을 유지하고, 운영체제가 실행 중일 때 운영체제의 (PSW 내) 프로그램 카운터가 사용된다. 통상적으로, 프로그램 카운터는 현재 명령의 바이트 수와 동일한 양으로 증분된다. 감소된 명령 세트 컴퓨팅(Reduced Instruction Set Computing, RISC) 명령들은 통상적으로 고정 길이이고, 한편 콤플렉스 명령 세트 컴퓨팅(Complex Instruction Set Computing, CISC) 명령들은 통상적으로 가변 길이이다. IBM z/Architecture의 명령들은 2, 4 또는 6 바이트의 길이를 갖는 CISC 명령들이다. 프로그램 카운터(5061)는, 예를 들어, 분기 명령의 분기 채택 연산(branch taken operation) 또는 컨텍스트 전환 연산에 의해 변경된다. 컨텍스트 전환 연산에서, 현재의 프로그램 카운터 값은 실행되고 있는 프로그램에 관한 상태 정보(예를 들어, 조건 코드들과 같은 것)와 함께 프로그램 상태 워드에 세이브되고(saved), 실행될 새로운 프로그램 모듈의 명령을 가리키는 새로운 프로그램 카운터 값이 로드된다. 프로그램 카운터(5061) 내에 분기 명령의 결과를 로딩함으로써 프로그램이 결정을 내리거나 그 프로그램 내에서 루프를 돌도록 허용하기 위해, 분기 채택 연산(branch taken operation)이 수행된다.
통상적으로 프로세서(5026)를 대신하여 명령들을 페치하기 위해 명령 페치 유닛(5055)이 채용된다. 페치 유닛은 "다음 순차의 명령들"이나, 분기 채택 명령들의 타겟 명령들, 또는 컨텍스트 전환에 뒤이은 프로그램의 첫 번째 명령들을 페치한다. 현대 명령(Modern Instruction) 페치 유닛은 프리페치된(prefetched) 명령들이 사용될 수 있는 가능성에 기초하여 추론적으로 명령들을 프리페치하는 프리페치 기술들을 종종 채용한다. 예를 들어, 페치 유닛은 16 바이트의 명령―이는 그 다음 순차 명령 및 그 이후 순차 명령들의 추가 바이트들을 포함함―을 페치할 수 있다.
그런 다음, 페치된 명령들이 프로세서(5026)에 의해 실행된다. 한 실시 예에서, 페치된 명령(들)은 페치 유닛의 디스패치 유닛(5056)으로 보내진다. 디스패치 유닛이 그 명령(들)을 디코드하고, 디코드된 명령(들)에 관한 정보를 적절한 유닛들(5057, 5058, 5060)로 전달한다. 실행 유닛(5057)이 통상적으로 명령 페치 유닛(5055)으로부터 디코드된 산술 명령들(arithmetic instructions)에 관한 정보를 수신할 것이고, 그 명령의 오피코드(opcode)에 따라 오퍼랜드들에 대한 산술 연산들(arithmetic operations)을 수행할 것이다. 오퍼랜드들이 바람직하게는, 메모리(5025), 아키텍처화된 레지스터들(5059)로부터 또는 실행되고 있는 명령의 즉시 필드(immediate field)로부터 실행 유닛(5057)에 제공된다. 저장될 때, 실행의 결과들이 메모리(5025)나, 레지스터들(5059)에 또는 다른 머신 하드웨어(예를 들어, 제어 레지스터들, PSW 레지스터들 및 그와 유사한 것)에 저장된다.
가상 주소들은 동적 주소 변환(5062)을 이용하여, 선택에 따라서는 액세스 레지스터 변환(5063)을 이용하여 실제 주소들로 변환된다.
통상적으로 프로세서(5026)는 명령의 기능을 실행하기 위한 하나 또는 그 이상의 유닛들(5057, 5058, 5060)을 갖는다. 도 22a를 참조하면, 실행 유닛(5057)은 인터페이싱 로직(5071)을 거쳐서 아키텍처화된 범용 레지스터들(5059), 디코드/디스패치 유닛(5056), 로드 저장 유닛(5060), 및 기타(5065) 프로세서 유닛들과 통신할 수 있다. 실행 유닛(5057)은, 산술 논리 유닛(arithmetic logic unit, ALU)(5066)이 연산할 정보를 보유하기 위해 몇몇의 레지스터 회로들(5067, 5068, 5069)을 채용할 수 있다. ALU는 논리곱(AND), 논리합(OR) 및 배타논리합(XOR), 로테이트(rotate) 및 시프트(shift)와 같은 논리 함수뿐만이 아니라 더하기, 빼기, 곱하기 및 나누기와 같은 산술 연산들도 수행한다. 바람직하게는, ALU는 설계에 종속적인 특수 연산들을 지원한다. 다른 회로들은, 예를 들어, 조건 코드들 및 복구 지원 로직을 포함하는 다른 아키텍처화된 퍼실리티들(5072)을 제공할 수 있다. 통상적으로, ALU 동작의 결과는 출력 레지스터 회로(5070)에 보유(hold)되고, 이 출력 레지스터 회로(5070)는 여러 가지 다른 처리 기능들에 그 결과를 전달할 수 있다. 프로세서 유닛들의 배열방식(arrangements)은 다양하며, 본 설명은 본 발명의 한 실시 예에 관한 대표적인 이해를 제공하려는 의도일 뿐이다.
예를 들어, ADD 명령은 산술 및 논리 기능을 갖는 실행 유닛(5057)에서 실행될 것이고, 한편 예를 들어 부동 소수점 명령은 특수한 부동 소수점 능력을 갖는 부동 소수점 실행에서 실행될 것이다. 바람직하게는, 실행 유닛은 오퍼랜드들에 관한 오피코드 정의 기능(opcode defined function)을 수행함으로써 명령에 의해 식별된 오퍼랜드들에 관해 연산한다. 예를 들어, ADD 명령은 그 명령의 레지스터 필드들에 의해 식별되는 두 개의 레지스터들(5059)에서 발견되는 오퍼랜드들에 관해 실행 유닛(5057)에 의해 실행될 수 있다.
실행 유닛(5057)은 두 개의 오퍼랜드들에 관해 산술 덧셈(arithmetic addition)을 수행하고 그 결과를 제3 오퍼랜드에 저장하며, 여기서, 제3 오퍼랜드는 제3 레지스터 또는 두 개의 소스 레지스터들 중 하나일 수 있다. 바람직하게는, 실행 유닛은 산술 논리 유닛(ALU)(5066)을 이용하며 이 ALU(5066)는 더하기, 빼기, 곱하기, 나누기 중 어느 것이든지 포함하는 여러 가지 대수 함수들(algebraic functions) 뿐만이 아니라 시프트(Shift), 로테이트(Rotate), 논리곱(And), 논리합(Or) 및 배타논리합(XOR)과 같은 여러 가지 논리 함수들을 수행할 수 있다. 일부 ALU들(5066)은 스칼라 연산들을 위해 설계되며 일부는 부동 소수점을 위해 설계된다. 데이터는 아키텍처에 따라 빅 엔디언(Big Endian)(여기서 최하위 바이트(least significant byte)는 가장 높은 바이트 주소에 있음) 또는 리틀 엔디언(Little Endian)(여기서 최하위 바이트는 가장 낮은 바이트 주소에 있음)일 수 있다. IBM z/Architecture는 빅 엔디언이다. 부호화된 필드들(signed fields)은 아키텍처에 따라, 부호(sign) 및 크기(magnitude), 1의 보수 또는 2의 보수일 수 있다. 2의 보수에서 음의 값 또는 양의 값은 단지 ALU 내에서 덧셈만을 필요로 하므로, ALU가 뺄셈 능력을 설계할 필요가 없다는 점에서 2의 보수가 유리하다. 숫자들은 일반적으로 속기(shorthand)로 기술되는데, 12비트 필드는 예를 들어, 4,096바이트 블록의 주소를 정의하고 일반적으로 4 Kbyte(Kilobyte) 블록으로 기술된다.
도 22b를 참조하면, 분기 명령을 실행하기 위한 분기 명령 정보는 통상적으로 분기 유닛(5058)으로 보내지는데, 이 분기 유닛(5058)은 다른 조건부 연산들(conditional operations)이 완료되기 전에 그 분기의 결과를 예측하도록 분기 이력 테이블(5082)과 같은 분기 예측 알고리즘을 흔히 채용한다. 현재 분기 명령의 타겟은, 그 조건부 연산들이 완료되기 전에 페치되고 추론적으로 실행될 것이다. 조건부 연산들이 완료될 때, 추론적으로 실행된 분기 명령들은 조건부 연산 및 추론된 결과의 조건들에 기초하여 완료되거나 폐기된다. 통상적인 분기 명령은, 만일 그 조건 코드들이 분기 명령의 분기 요건을 충족한다면, 조건 코드들을 테스트하고 타겟 주소로 분기할 수 있고, 타겟 주소는, 예를 들어, 레지스터 필드들 또는 그 명령의 즉시 필드에서 발견되는 수들을 포함하는 몇 개의 수들에 기초하여 계산될 수 있다. 분기 유닛(5058)은 복수의 입력 레지스터 회로들(5075, 5075, 5077) 및 출력 레지스터 회로(5080)를 갖는 ALU(5074)를 채용할 수 있다. 분기 유닛(5058)은, 예를 들어, 범용 레지스터들(5059), 디코드 디스패치 유닛(5056) 또는 기타 회로들(5073)과 통신할 수 있다(5081).
명령들의 그룹의 실행은 여러 가지 이유들로 인터럽트될 수 있는데, 이러한 이유들에는, 예를 들어, 운영체제에 의해 개시되는 컨텍스트 전환, 컨텍스트 전환을 초래하는 프로그램 예외 또는 에러, 컨텍스트 전환 또는 (멀티-스레드 환경에서) 복수의 프로그램들의 멀티-스레딩 활동을 초래하는 I/O 인터럽션 신호가 포함된다. 바람직하게는 컨텍스트 전환 액션은 현재 실행중인 프로그램에 관한 상태 정보(state information)를 세이브하고, 그런 다음 호출되는 또 다른 프로그램에 관한 상태 정보를 로드한다. 상태 정보는, 예를 들어, 하드웨어 레지스터들 또는 메모리에 저장될 수 있다. 바람직하게는, 상태 정보는 실행될 다음 명령을 가리키는 프로그램 카운터 값, 조건 코드들, 메모리 변환 정보 및 아키텍처화된 레지스터 콘텐츠를 포함한다. 컨텍스트 전환 활동은, 하드웨어 회로들, 애플리케이션 프로그램들, 운영체제 프로그램들 또는 펌웨어 코드(마이크로코드, 피코-코드 또는 라이센스된 내부 코드(LIC)) 단독으로 또는 이것들의 조합으로 실행될 수 있다.
프로세서는 명령 정의 방법들(instruction defined methods)에 따라 오퍼랜드들에 액세스한다. 명령은 명령의 일부분의 값을 사용하는 즉시 오퍼랜드(immediate operand)를 제공할 수 있고, 범용 레지스터들 또는 특수 목적용 레지스터들(예를 들어, 부동 소수점 레지스터들)을 분명하게 가리키는 하나 또는 그 이상의 레지스터 필드들을 제공할 수 있다. 명령은 오피코드 필드에 의해 오퍼랜드들로서 식별되는 암시 레지스터들(implied registers)을 이용할 수 있다. 명령은 오퍼랜드들에 대한 메모리 위치들을 이용할 수 있다. 오퍼랜드의 메모리 위치는 레지스터, 즉시 필드(immediate field), 또는 레지스터들과 즉시 필드의 조합에 의해 제공될 수 있고, 이는 z/Architecture 장 변위(long displacement) 퍼실리티가 전형적인 예이며, 여기서 명령은 기준 레지스터, 인덱스 레지스터 및 즉시 필드(변위 필드)―이것들은 예를 들어 메모리에서 오퍼랜드의 주소를 제공하기 위해 함께 더해짐―를 정의한다. 만일 다르게 표시되지 않는다면, 여기서의 위치는 통상적으로 메인 메모리(메인 스토리지) 내 위치를 암시한다.
도 22c를 참조하면, 프로세서는 로드/저장 유닛(5060)을 사용하여 스토리지에 액세스한다. 로드/저장 유닛(5060)은 메모리(5053)에서 타겟 오퍼랜드의 주소를 획득하고 레지스터(5059) 또는 또 다른 메모리(5053) 위치에 오퍼랜드를 로딩함으로써 로드 연산을 수행할 수 있고, 또는 메모리(5053)에서 타겟 오퍼랜드의 주소를 획득하고 레지스터(5059) 또는 또 다른 메모리(5053) 위치로부터 획득된 데이터를 메모리(5053) 내 타겟 오퍼랜드 위치에 저장함으로써 저장 연산을 수행할 수 있다. 로드/저장 유닛(5060)은 추론적(speculative)일 수 있고, 명령 순서에 비해 순서가 다른(out-of-order) 순서로 메모리에 액세스할 수 있지만, 로드/저장 유닛(5060)은 명령들이 순서대로 실행된 것으로 프로그램들에 대한 외관(appearance)을 유지할 것이다. 로드/저장 유닛(5060)은 범용 레지스터들(5059), 디코드/디스패치 유닛(5056), 캐시/메모리 인터페이스(5053) 또는 기타 엘리먼트들(5083)과 통신(5084)할 수 있고, 스토리지 주소들을 계산하기 위해 그리고 순서대로 연산들을 유지하기 위한 파이프라인 시퀀싱을 제공하기 위해 여러 가지 레지스터 회로들(5086, 5087, 5088, 5089), ALU들(5085) 및 제어 논리(5090)를 포함한다. 일부 연산들은 순서가 바뀔 수 있으나, 이 기술분야에서 잘 알려진 바와 같이, 로드/저장 유닛은, 순서가 바뀐 연산들이 그 프로그램에 순서대로 수행된 것처럼 나타나도록 하는 기능을 제공한다.
바람직하게는, 애플리케이션 프로그램이 "보는(sees)" 주소들은 흔히 가상 주소들로 불린다. 가상 주소들은 때로는 "논리적 주소들(logical addresses)" 및 "유효 주소들(effective addresses)"로 불린다. 이들 가상 주소들은 여러 가지 동적 주소 변환(DAT) 기술들 중 하나에 의해 물리적 메모리 위치로 다시 보내진다는 점에서 가상이고, 상기 여러 가지 동적 주소 변환(DAT) 기술들에는, 단순히 오프셋 값으로 가상 주소를 프리픽싱(prefixing)하는 것, 하나 또는 그 이상의 변환 테이블들을 통해 가상 주소를 변환하는 것이 포함될 수 있으나, 이러한 것들로 한정되는 것은 아니며, 바람직하게는, 변환 테이블들은 적어도 세그먼트 테이블 및 페이지 테이블만을 또는 이것들의 조합을 포함하며, 바람직하게는, 세그먼트 테이블은 페이지 테이블을 가리키는 엔트리를 갖는다. z/Architecture에서는, 변환의 계층(hierarchy of translation)이 제공되는데, 이 변환의 계층에는 영역 제1 테이블, 영역 제2 테이블, 영역 제3 테이블, 세그먼트 테이블 및 선택적인 페이지 테이블이 포함된다. 주소 변환의 수행은 흔히 변환 색인 버퍼(TLB)를 이용하여 향상되는데, 이 변환 색인 버퍼는 연관된 물리적 메모리 위치에 가상 주소를 매핑하는 엔트리들을 포함한다. DAT가 변환 테이블들을 사용하여 가상 주소를 변환할 때, 엔트리들이 생성된다. 그런 다음, 후속적으로 가상 주소를 사용할 때 느린 연속적인 변환 테이블 액세스들보다 오히려 빠른 TLB의 엔트리를 이용할 수 있다. TLB 콘텐츠는 LRU(Least Recently used)를 포함하는 여러 가지 대체 알고리즘들에 의해 관리될 수 있다.
프로세서가 멀티-프로세서 시스템의 프로세서인 경우, 각각의 프로세서는 I/O, 캐시들, TLB들 및 메모리와 같은 공유 리소스들(shared resources)을 일관성(coherency)을 위해 인터로크(interlock)를 유지하는 역할을 한다. 통상적으로, "스누프(snoop)" 기술들이 캐시 일관성을 유지하는 데 이용될 것이다. 스누프 환경에서, 각각의 캐시 라인은 공유를 용이하게 하기 위해, 공유 상태(shared state), 독점 상태(exclusive state), 변경된 상태(changed state), 무효 상태(invalid state) 중 어느 하나에 있는 것으로 표시될 수 있다.
I/O 유닛들(5054, 도 21)은 프로세서에 주변기기들에 연결하기 위한 수단을 제공하는데, 예를 들어, 그 주변기기에는 테이프, 디스크, 프린터, 디스플레이, 및 네트워크가 포함된다. I/O 유닛들은 흔히 소프트웨어 드라이버들에 의해 컴퓨터 프로그램에 제공된다. IBM®의 System z 같은 메인프레임들에서, 채널 어댑터들 및 오픈 시스템 어댑터들은 운영체제와 주변 디바이스들 사이의 통신을 가능하게 하는, 메인프레임의 I/O 유닛들이다.
또한, 다른 종류의 컴퓨팅 환경들도 하나 또는 그 이상의 특징들로부터 이득을 얻을 수 있다. 한 예로, 환경(environment)은 에뮬레이터(예, 소프트웨어 또는 다른 에뮬레이션 메커니즘들)를 포함할 수 있으며, 이 에뮬레이터에서 특정 아키텍처(예를 들어, 명령 실행, 주소 변환과 같은 아키텍처화된 함수들, 및 아키텍처화된 레지스터들을 포함함) 또는 그것의 서브세트(subset)가 (예를 들어, 프로세서 및 메모리를 갖는 네이티브 컴퓨터 시스템 상에서) 에뮬레이트된다. 이러한 환경에서, 비록 그 에뮬레이터를 실행하는 컴퓨터가 에뮬레이트되고 있는 능력들과는 다른 아키텍처를 가질 수 있지만, 에뮬레이터의 하나 또는 그 이상의 에뮬레이션 기능들은 하나 또는 그 이상의 실시 예들을 구현할 수 있다. 한 예로서, 에뮬레이션 모드에서, 에뮬레이트되고 있는 특정 명령 또는 연산은 디코드되고, 적절한 에뮬레이션 기능이 개별 명령 또는 연산을 구현하도록 만들어진다.
에뮬레이션 환경에서, 호스트 컴퓨터는, 예를 들어, 명령들 및 데이터를 저장하는 메모리, 메모리로부터 명령들을 페치하고 또한 선택적으로 그 페치된 명령을 위한 로컬 버퍼링을 제공하는 명령 페치 유닛, 페치된 명령들을 수신하고 페치된 명령들의 유형을 결정하는 명령 디코드 유닛, 및 명령들을 실행하는 명령 실행 유닛을 포함한다. 실행은 메모리로부터 레지스터 내에 데이터를 로딩하는 것; 레지스터로부터 메모리로 다시 데이터를 저장하는 것; 또는 디코드 유닛에 의해 결정된 바와 같이, 산술 또는 논리 연산의 몇몇 유형을 수행하는 것을 포함할 수 있다. 한 예에서, 각각의 유닛은 소프트웨어에서 구현된다. 예를 들어, 그 유닛들에 의해 수행되고 있는 연산들은 에뮬레이터 소프트웨어 내에서 하나 또는 그 이상의 서브루틴들로서 구현된다.
더 구체적으로는, 메인프레임에서, 아키텍처화된 기계어 명령들(machine instructions)이 프로그래머들, 대개는 오늘날의 "C" 프로그래머들에 의해, 흔히 컴파일러 애플리케이션(compiler application)을 통해 사용되고 있다. 스토리지 매체에 저장되는 이들 명령들은 원래(natively) z/Architecture IBM® 서버에서 또는 이와는 다르게 다른 아키텍처들을 실행하는 머신들에서 실행될 수 있다. 그것들은 기존의 그리고 장래의 IBM® 메인프레임 서버들에서 그리고 IBM®의 다른 머신들(예, Power Systems 서버들 및 System x 서버들) 상에서 에뮬레이트될 수 있다. 그것들은 IBM®, Intel®, AMD 및 기타 회사에 의해 제조된 하드웨어를 사용하는 광범위한 머신들 상의 리눅스를 실행하는 머신들에서 실행될 수 있다. 또한, z/Architecture 하의 그 하드웨어 상에서의 실행 이외에, Hercules, UMX, 또는 FSI(Fundamental Software, Inc)―여기서 일반적으로 실행은 에뮬레이션 모드에 있음―에 의해 에뮬레이션을 사용하는 머신들 뿐만이 아니라 리눅스도 사용될 수 있다. 에뮬레이션 모드에서, 에뮬레이션 소프트웨어는 네이티브 프로세서에 의해 실행되어 에뮬레이트된 프로세서의 아키텍처를 에뮬레이트한다.
네이티브 프로세서(native processor)는 통상적으로 에뮬레이트된 프로세서의 에뮬레이션을 수행하기 위해 펌웨어(firmware) 또는 네이티브 운영체제를 포함하는 에뮬레이션 소프트웨어를 실행한다. 에뮬레이션 소프트웨어는 그 에뮬레이트된 프로세서 아키텍처의 명령들을 페치 및 실행하는 역할을 한다. 에뮬레이션 소프트웨어는 명령 경계들(instruction boundaries)을 추적하기 위해 에뮬레이트된 프로그램 카운터를 유지한다. 에뮬레이션 소프트웨어는 한 번에 하나 또는 그 이상의 에뮬레이트된 기계어 명령들을 페치하여, 하나 또는 그 이상의 그 에뮬레이트된 기계어 명령들을 네이티브 프로세서에 의해 실행하기 위한 네이티브 기계어 명령들의 대응 그룹으로 변환시킬 수 있다. 이들 변환된 명령들은 캐시되어 더 빠른 변환이 수행될 수 있도록 할 수 있다. 그럼에도 불구하고, 에뮬레이션 소프트웨어는, 운영체제들 및 에뮬레이트된 프로세서를 위해 작성된 애플리케이션들이 정확하게 연산되도록 보장하기 위해, 그 에뮬레이트된 프로세서 아키텍처의 아키텍처 규칙들을 유지해야 한다. 더 나아가, 에뮬레이션 소프트웨어는 그 에뮬레이트된 프로세서 아키텍처에 의해 식별된 자원들을 제공해야 하며―이 자원들에는 제어 레지스터들, 범용 레지스터들, 부동 소수점 레지스터들, 예를 들어 세그먼트 테이블들 및 페이지 테이블들을 포함하는 동적 주소 변환 함수, 인터럽트 메커니즘들, 컨텍스트 전환 메커니즘들, TOD(Time of Day) 클록들 및 I/O 서브시스템들에 대한 아키텍처화된 인터페이스들이 포함됨―그리하여 운영체제, 또는 에뮬레이트된 프로세서 상에서 실행되도록 지정된 애플리케이션 프로그램이, 에뮬레이션 소프트웨어를 갖는 네이티브 프로세서상에서 실행될 수 있도록 한다.
에뮬레이트되고 있는 특정 명령이 디코드되고, 서브루틴이 개별 명령의 기능을 수행하기 위해 호출(call)된다. 에뮬레이트된 프로세서의 기능을 에뮬레이트하는 에뮬레이션 소프트웨어 기능은, 예를 들어, "C" 서브루틴 또는 드라이버, 또는 특정 하드웨어를 위해 드라이브를 제공하는 몇몇 다른 방법들로 구현되며, 이는 바람직한 실시 예의 설명을 이해하고 나면 이 기술 분야에서 통상의 지식을 가진 자들이 도출해 낼 수 있을 것이다. 여러 가지 소프트웨어 및 하드웨어 에뮬레이션 특허들은 ― 예를 들어, Beausoleil 외 발명의 미국 특허증(Letters Patent) 제5,551,013호 "하드웨어 에뮬레이션을 위한 멀티프로세서(Multiprocessor for Hardware Emulation)"; Scalzi 외 발명의 미국 특허증 제6,009,261호 "타겟 프로세서 상에서 호환가능하지 않은 명령들을 에뮬레이트하기 위한 저장된 타겟 루틴들의 전처리(Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor)"; Davidian 외 발명의 미국 특허증 제5,574,873호 "게스트 명령들을 에뮬레이트하는 직접 액세스 에뮬레이션 루틴들에 대한 게스트 명령을 디코드하는 것(Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions)"; Gorishek 외 발명의 미국 특허증 제6,308,255호 "시스템에서 논-네이티브 코드를 실행할 수 있도록 하는 코프로세서 지원에 사용되는 대칭형 다중 처리 버스 및 칩셋(Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System)"; Lethin 외 발명의 미국 특허증 제6,463,582호 "아키텍처 에뮬레이션을 위한 동적 최적화 객체 코드 변환 및 동적 최적화 객체 코드 변환 방법(Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method)"; Eric Traut 발명의 미국 특허증 제5,790,825호 "호스트 명령들의 동적 리컴파일레이션을 통해 호스트 컴퓨터 상에서 게스트 명령들을 에뮬레이트하기 위한 방법(Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions)" 등이 포함되나, 이러한 것들로 한정되는 것은 아님 ― 이 기술 분야에서 통상의 지식을 가진 자들이 이용할 수 있는 목표 머신에 대한 다른 머신을 위해 아키텍처화된 명령 포맷의 에뮬레이션을 달성하는 알려진 여러 가지 방법들을 예시하고 있다.
도 23에서는, 호스트 아키텍처의 호스트 컴퓨터 시스템(5000')을 에뮬레이트하는 에뮬레이트된 호스트 컴퓨터 시스템(5092)의 예가 제공된다. 에뮬레이트된 호스트 컴퓨터 시스템(5092)에서, 호스트 프로세서(CPU)(5091)는 에뮬레이트된 호스트 프로세서(또는 가상 호스트 프로세서)이고 호스트 컴퓨터(5000')의 프로세서(5091)의 네이티브 명령 세트 아키텍처(native instruction set architecture)와는 다른 네이티브 명령 세트 아키텍처를 갖는 에뮬레이션 프로세서(5093)를 포함한다. 에뮬레이트된 호스트 컴퓨터 시스템(5092)은 에뮬레이션 프로세서(5093)가 액세스 가능한 메모리(5094)를 갖는다. 상기 예시 실시 예에서, 메모리(5094)는 호스트 컴퓨터 메모리(5096) 부분과 에뮬레이션 루틴들(5097) 부분으로 분할된다. 호스트 컴퓨터 메모리(5096)는 호스트 컴퓨터 아키텍처에 따른 에뮬레이트된 호스트 컴퓨터(5092)의 프로그램들이 이용할 수 있다. 에뮬레이션 프로세서(5093)는 에뮬레이트된 프로세서(5091)의 명령 이외의 아키텍처의 아키텍처화된 명령 세트의 네이티브 명령들, 즉 에뮬레이션 루틴들 메모리(5097)로부터 획득된 네이티브 명령들을 실행하며, 시퀀스 & 액세스/디코드 루틴―이는 액세스되는 호스트 명령의 기능을 에뮬레이트하기 위해 네이티브 명령 실행 루틴을 결정하기 위해 액세스되는 호스트 명령(들)을 디코드할 수 있음―에서 획득된 하나 또는 그 이상의 명령(들)을 채용함으로써 호스트 컴퓨터 메모리(5096) 내 프로그램으로부터 실행하기 위한 호스트 명령을 액세스할 수 있다. 호스트 컴퓨터 시스템(5000') 아키텍처에 대하여 정의된 다른 퍼실리티들이 아키텍처화된 퍼실리티들 루틴들(architected facilities routines)에 의해 에뮬레이트될 수 있는데, 이러한 것들에는, 예를 들어, 범용 레지스터들, 제어 레지스터들(control registers), 동적 주소 변환(dynamic address translation) 및 I/O 서브시스템 지원 및 프로세서 캐시 등과 같은 퍼실리티들이 포함된다. 에뮬레이션 루틴들(emulation routines)은 또한 (범용 레지스터들 및 가상 주소들의 동적 변환 같은) 에뮬레이션 프로세서(5093)에서 이용 가능한 기능들을 이용하여 에뮬레이션 루틴들의 성능을 향상시킬 수 있다. 또한 특수 하드웨어(special hardware) 및 오프-로드 엔진들(off-load engines)이 제공되어 호스트 컴퓨터(5000')의 기능을 에뮬레이팅함에 있어서 프로세서(5093)를 보조할 수 있다.
본 명세서 내에 사용되는 용어는 단지 특정 실시 예들을 기술할 목적으로 사용된 것이지 한정하려는 의도로 사용된 것은 아니다. 여기에서 사용할 때, 단수 형태인 "한", "일", 및 "하나" 등은 그 컨텍스트에서 그렇지 않은 것으로 명시되어 있지 않으면, 복수 형태도 또한 포함할 의도로 기술된 것이다. 또한, "포함한다" 및/또는 "포함하는" 이라는 말들은 본 명세서에서 사용될 때, 언급되는 특징들, 정수들, 단계들, 동작들, 엘리먼트들, 및/또는 컴포넌트들의 존재를 명시하지만, 하나 또는 그 이상의 다른 특징들, 정수들, 단계들, 동작들, 엘리먼트들, 컴포넌트들 및/또는 이들의 그룹들의 존재 또는 추가를 배제하는 것은 아니라는 것을 이해할 수 있을 것이다.
이하의 청구항들에서, 구조들(structures), 재료들(materials), 동작들(acts), 및 모든 수단의 등가물들 또는 단계 플러스 기능 엘리먼트들은 구체적으로 청구되는 다른 청구된 엘리먼트들과 함께 그 기능을 수행하기 위한 구조, 재료, 또는 동작을 포함할 의도가 있다. 하나 또는 그 이상의 실시 예들에 대한 설명은 예시와 설명의 목적으로 제공되는 것이며, 개시되는 형태로 빠짐없이 총 망라하거나 한정하려는 의도가 있는 것은 아니다. 이 기술 분야에서 통상의 지식을 가진 자라면 많은 수정 예들 및 변형 예들이 있을 수 있다는 것을 알 수 있다. 실시 예는 여러 특징들 및 실제 응용을 가장 잘 설명하기 위해 그리고 고려되는 구체적인 용도에 적합하게 여러 가지 수정 예들을 갖는 다양한 실시 예들을 이 기술 분야에서 통상의 지식을 가진 자들이 이해할 수 있도록 하기 위해 선택되고 기술되었다.

Claims (12)

  1. 컴퓨팅 환경에서 트랜잭션의 실행을 제어하기 위한 방법으로서, 상기 방법은:
    트랜잭션 시작 명령(a transaction begin instruction)을 실행하는 단계(executing)―상기 트랜잭션 시작 명령은 제1 유형의 트랜잭션 또는 제2 유형의 트랜잭션 중 어느 하나를 시작하고, 상기 트랜잭션은 실행될 복수의 명령들을 포함하며, 상기 트랜잭션 시작 명령은 제1 유형의 트랜잭션 또는 제2 유형의 트랜잭션이 개시됨을 상기 트랜잭션 시작 명령의 필드에 의해 명시적으로 표시함―;
    상기 트랜잭션이 제2 유형의 트랜잭션인 것에 기초하여, 상기 실행하는 단계는 조건 코드(a condition code)를 제1 값(a first value)에 세트하는 단계(setting);
    상기 트랜잭션 시작 명령을 통해서 트랜잭션 모드에서 상기 트랜잭션의 실행을, 프로세서에 의해, 개시하는 단계(initiating);
    상기 트랜잭션 모드에 있는 것에 기초하여, 선택된 트랜잭션이 완료될 때까지 메인 메모리에 대한 트랜잭션 저장을 커밋(commit)하는 것을 효과적으로 지연시키는 단계(delaying);
    상기 트랜잭션이 중단되는 것에 기초하여, 개시된 트랜잭션의 유형을 판정하는 단계(determining)―상기 트랜잭션의 유형은 제1 유형의 트랜잭션 또는 제2 유형의 트랜잭션이고, 상기 판정하는 단계는 상기 트랜잭션 시작 명령의 필드에 기초함―;
    상기 트랜잭션이 중단되고 상기 트랜잭션이 제1 유형의 트랜잭션인 것에 기초하여, 상기 트랜잭션 시작 명령에서 실행을 재개하는 단계(resuming); 및
    상기 트랜잭션이 중단되고 상기 트랜잭션이 제2 유형의 트랜잭션인 것에 기초하여, 상기 조건 코드를 제2 값(a second value)에 세트하고(setting)―상기 제2 값은 상기 트랜잭션 시작 명령이 상기 중단으로 인해 제어권(control)을 수신한 다음에 오는 다음 순차 명령(a next sequential instruction) 을 표시함―, 프로그램 순서에서 상기 트랜잭션 시작 명령 바로 다음에 오는 다음 순차 명령에서 실행을 재개하는 단계(resuming)를 포함하는, 방법.
  2. 제1항에 있어서, 상기 제1 유형의 트랜잭션은 그것과 연관된 하나 또는 그 이상의 제한사항들을 갖는 제약 트랜잭션이고, 상기 트랜잭션 시작 명령은 제약 트랜잭션 시작 명령이고, 상기 제2 유형의 트랜잭션은 비제약 트랜잭션인, 방법.
  3. 제1항에 있어서, 상기 트랜잭션은 제2 유형의 트랜잭션이고, 상기 제2 유형의 트랜잭션은 비제약 트랜잭션 트랜잭션이고, 상기 실행을 재개하는 단계는:
    상기 트랜잭션 시작 명령 다음에 오는 다음 순차 명령에 의해 상기 트랜잭션의 조건 코드를 검사하여 상기 명령이 중단으로 인하여 제어권을 수신하는지를 판정하는 단계; 및
    상기 명령이 중단으로 인해 제어권을 수신하는 것에 기초하여, 상기 중단을 처리하기 위한 프로세스를 수행하는 단계를 포함하는, 방법.
  4. 제3항에 있어서, 상기 프로세스를 수행하는 단계는 상기 조건 코드에 기초하여 액션(action)을 취하는 단계를 포함하고, 상기 액션은, 한 값(one value)의 조건 코드에 기초하여, 상기 트랜잭션을 재실행하는 단계(re-executing)를 포함하며, 상기 액션은, 다른 값(another value)의 조건 코드에 기초하여, 폴백 경로(fall-back path)로 분기하는 단계(branching)을 포함하는, 방법.
  5. 삭제
  6. 제1항에 있어서, 상기 트랜잭션은 제2 유형의 트랜잭션이고, 상기 제2 유형은 비제약 트랜잭션이고, 상기 방법은 상기 트랜잭션이 중단되는 것에 기초하여 진단 정보를 상기 트랜잭션 시작 명령에 의해 명시된 트랜잭션 진단 블록에 저장하는 단계를 더 포함하는, 방법.
  7. 제1항에 있어서, 상기 방법은 상기 중단에 기초하여, 상기 트랜잭션 시작 명령에 지정된 하나 또는 그 이상의 레지스터들을 복원하고 트랜잭션 저장들을 폐기하는 단계를 더 포함하는, 방법.
  8. 제1항에 있어서, 상기 방법은:
    상기 트랜잭션이 중단되었다고 판정하는 단계;
    상기 트랜잭션이 중단되었다고 판정하는 것에 기초하여, 상기 중단이 인터셉션 또는 인터럽션으로 인한 것이었는지를 판정하는 단계; 및
    상기 중단이 인터셉션 또는 인터럽션 이외의 것으로 인한 것에 기초하여, 상기 트랜잭션이 제1 유형 또는 제2 유형인 것에 따라서 각각 상기 트랜잭션 시작 명령에 실행을 재개하는 단계 또는 상기 다음 순차 명령에 실행을 재개하는 단계를 더 포함하는, 방법.
  9. 제1항에 있어서, 상기 트랜잭션은 트랜잭션들의 내포의 일부이고, 상기 방법은 상기 프로세서에 의해 내포 깊이 추출 명령을 실행하여 상기 트랜잭션들의 내포의 내포 깊이의 인디케이션을 획득하는 단계를 더 포함하는, 방법.
  10. 제9항에 있어서, 상기 트랜잭션은 상기 트랜잭션들의 내포의 최외부 트랜잭션인, 방법.
  11. 컴퓨팅 환경에서 트랜잭션의 실행을 제어하기 위한 방법을 수행하도록 구성된 컴퓨터 시스템으로서, 상기 컴퓨터 시스템은:
    메모리; 및
    상기 메모리와 통신하는 프로세서를 포함하고, 상기 방법은:
    트랜잭션 시작 명령(a transaction begin instruction)을 실행하는 단계―상기 트랜잭션 시작 명령은 제1 유형의 트랜잭션 또는 제2 유형의 트랜잭션 중 어느 하나를 시작하고, 상기 트랜잭션은 실행될 복수의 명령들을 포함하며, 상기 트랜잭션 시작 명령은 제1 유형의 트랜잭션 또는 제2 유형의 트랜잭션이 개시됨을 상기 트랜잭션 시작 명령의 필드에 의해 명시적으로 표시함―;
    상기 트랜잭션이 제2 유형의 트랜잭션인 것에 기초하여, 상기 실행하는 단계는 조건 코드(a condition code)를 제1 값(a first value)에 세트하는 단계;
    상기 트랜잭션 시작 명령을 통해서 트랜잭션 모드에서 상기 트랜잭션의 실행을, 프로세서에 의해, 개시하는 단계;
    상기 트랜잭션 모드에 있는 것에 기초하여, 선택된 트랜잭션이 완료될 때까지 메인 메모리에 대한 트랜잭션 저장을 커밋(commit)하는 것을 효과적으로 지연시키는 단계;
    상기 트랜잭션이 중단되는 것에 기초하여, 개시된 트랜잭션의 유형을 판정하는 단계―상기 트랜잭션의 유형은 제1 유형의 트랜잭션 또는 제2 유형의 트랜잭션이고, 상기 판정하는 단계는 상기 트랜잭션 시작 명령의 필드에 기초함―;
    상기 트랜잭션이 중단되고 상기 트랜잭션이 제1 유형의 트랜잭션인 것에 기초하여, 상기 트랜잭션 시작 명령에서 실행을 재개하는 단계; 및
    상기 트랜잭션이 중단되고 상기 트랜잭션이 제2 유형의 트랜잭션인 것에 기초하여, 상기 조건 코드를 제2 값(a second value)에 세트하고―상기 제2 값은 상기 트랜잭션 시작 명령이 상기 중단으로 인하여 제어권을 수신한 다음에 오는 다음 순차 명령을 표시함―, 프로그램 순서에서 상기 트랜잭션 시작 명령 바로 다음에 오는 다음 순차 명령에서 실행을 재개하는 단계를 포함하는, 컴퓨터 시스템.
  12. 처리 회로에 의해서 판독가능하고, 컴퓨팅 환경에서 트랜잭션의 실행을 제어하기 위한 방법을 수행하도록 상기 처리 회로에 의한 실행을 위한 명령들을 저장하는 비-일시적인 컴퓨터 판독가능 스토리지 매체로서, 상기 방법은:
    트랜잭션 시작 명령(a transaction begin instruction)을 실행하는 단계―상기 트랜잭션 시작 명령은 제1 유형의 트랜잭션 또는 제2 유형의 트랜잭션 중 어느 하나를 시작하고, 상기 트랜잭션은 실행될 복수의 명령들을 포함하며, 상기 트랜잭션 시작 명령은 제1 유형의 트랜잭션 또는 제2 유형의 트랜잭션이 개시됨을 상기 트랜잭션 시작 명령의 필드에 의해 명시적으로 표시함―;
    상기 트랜잭션이 제2 유형의 트랜잭션인 것에 기초하여, 상기 실행하는 단계는 조건 코드(a condition code)를 제1 값(a first value)에 세트하는 단계;
    상기 트랜잭션 시작 명령을 통해서 트랜잭션 모드에서 상기 트랜잭션의 실행을, 프로세서에 의해, 개시하는 단계;
    상기 트랜잭션 모드에 있는 것에 기초하여, 선택된 트랜잭션이 완료될 때까지 메인 메모리에 대한 트랜잭션 저장을 커밋(commit)하는 것을 효과적으로 지연시키는 단계;
    상기 트랜잭션이 중단되는 것에 기초하여, 개시된 트랜잭션의 유형을 판정하는 단계―상기 트랜잭션의 유형은 제1 유형의 트랜잭션 또는 제2 유형의 트랜잭션이고, 상기 판정하는 단계는 상기 트랜잭션 시작 명령의 필드에 기초함―;
    상기 트랜잭션이 중단되고 상기 트랜잭션이 제1 유형의 트랜잭션인 것에 기초하여, 상기 트랜잭션 시작 명령에서 실행을 재개하는 단계; 및
    상기 트랜잭션이 중단되고 상기 트랜잭션이 제2 유형의 트랜잭션인 것에 기초하여, 상기 조건 코드를 제2 값(a second value)에 세트하고―상기 제2 값은 상기 트랜잭션 시작 명령이 상기 중단으로 인하여 제어권을 수신한 다음에 오는 다음 순차 명령을 표시함―, 프로그램 순서에서 상기 트랜잭션 시작 명령 바로 다음에 오는 다음 순차 명령에서 실행을 재개하는 단계를 포함하는, 비-일시적인 컴퓨터 판독가능 스토리지 매체.
KR1020147034662A 2012-06-15 2013-06-12 트랜잭션 처리 KR101634481B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/524,921 US8688661B2 (en) 2012-06-15 2012-06-15 Transactional processing
US13/524,921 2012-06-15
PCT/IB2013/054812 WO2013186721A2 (en) 2012-06-15 2013-06-12 Transactional processing

Publications (2)

Publication Number Publication Date
KR20150013740A KR20150013740A (ko) 2015-02-05
KR101634481B1 true KR101634481B1 (ko) 2016-07-08

Family

ID=49756863

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147034662A KR101634481B1 (ko) 2012-06-15 2013-06-12 트랜잭션 처리

Country Status (14)

Country Link
US (2) US8688661B2 (ko)
EP (1) EP2862070B1 (ko)
JP (1) JP6222670B2 (ko)
KR (1) KR101634481B1 (ko)
CN (1) CN104412232B (ko)
AU (1) AU2013276133B2 (ko)
CA (1) CA2874236C (ko)
DK (1) DK2862070T3 (ko)
ES (1) ES2727124T3 (ko)
IL (1) IL234563B (ko)
RU (1) RU2606878C2 (ko)
SG (1) SG11201407502UA (ko)
TW (1) TWI533219B (ko)
WO (1) WO2013186721A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190099087A (ko) * 2017-02-28 2019-08-23 알리바바 그룹 홀딩 리미티드 서비스 데이터를 블록체인에 기입하기 위한 방법 및 장치, 그리고 서비스 하위세트를 결정하기 위한 방법

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5906325B2 (ja) * 2011-12-16 2016-04-20 インテル・コーポレーション トランザクションをサポートするコンピューターアーキテクチャにおけるコード特殊化のための例外を用いるプログラム及びコンピューティングデバイス
US9740549B2 (en) 2012-06-15 2017-08-22 International Business Machines Corporation Facilitating transaction completion subsequent to repeated aborts of the transaction
US9384004B2 (en) 2012-06-15 2016-07-05 International Business Machines Corporation Randomized testing within transactional execution
US9336046B2 (en) 2012-06-15 2016-05-10 International Business Machines Corporation Transaction abort processing
US9348642B2 (en) 2012-06-15 2016-05-24 International Business Machines Corporation Transaction begin/end instructions
US9448796B2 (en) 2012-06-15 2016-09-20 International Business Machines Corporation Restricted instructions in transactional execution
US9436477B2 (en) 2012-06-15 2016-09-06 International Business Machines Corporation Transaction abort instruction
US9772854B2 (en) 2012-06-15 2017-09-26 International Business Machines Corporation Selectively controlling instruction execution in transactional processing
US10437602B2 (en) 2012-06-15 2019-10-08 International Business Machines Corporation Program interruption filtering in transactional execution
US20130339680A1 (en) 2012-06-15 2013-12-19 International Business Machines Corporation Nontransactional store instruction
US9361115B2 (en) * 2012-06-15 2016-06-07 International Business Machines Corporation Saving/restoring selected registers in transactional processing
US9247548B2 (en) * 2012-09-24 2016-01-26 Blackberry Limited Data service level uplink data flow control
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
EP3084615B1 (en) * 2013-12-17 2020-06-24 Intel Corporation Detection of unauthorized memory modification and access using transactional memory
US10120681B2 (en) 2014-03-14 2018-11-06 International Business Machines Corporation Compare and delay instructions
US9454370B2 (en) 2014-03-14 2016-09-27 International Business Machines Corporation Conditional transaction end instruction
US9558032B2 (en) 2014-03-14 2017-01-31 International Business Machines Corporation Conditional instruction end operation
US10310857B2 (en) 2014-04-29 2019-06-04 Ampere Computing Llc Systems and methods facilitating multi-word atomic operation support for system on chip environments
US10061583B2 (en) * 2014-12-24 2018-08-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US10303525B2 (en) * 2014-12-24 2019-05-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
GB2548604B (en) * 2016-03-23 2018-03-21 Advanced Risc Mach Ltd Branch instruction
US10437785B2 (en) 2016-03-29 2019-10-08 Samsung Electronics Co., Ltd. Method and apparatus for maximized dedupable memory
CN107402889B (zh) * 2016-05-20 2023-07-11 三星电子株式会社 检索数据方法、存储数据方法和重复数据删除模块
US10579376B2 (en) * 2016-07-15 2020-03-03 International Business Machines Corporation Processor performance monitor that logs reasons for reservation loss
US10282327B2 (en) * 2017-01-19 2019-05-07 International Business Machines Corporation Test pending external interruption instruction
CN107025559B (zh) 2017-01-26 2020-09-18 创新先进技术有限公司 一种业务处理方法及装置
US10831509B2 (en) 2017-02-23 2020-11-10 Ab Initio Technology Llc Dynamic execution of parameterized applications for the processing of keyed network data streams
US11947978B2 (en) 2017-02-23 2024-04-02 Ab Initio Technology Llc Dynamic execution of parameterized applications for the processing of keyed network data streams
WO2019055584A1 (en) 2017-09-12 2019-03-21 David Schnitt SYSTEM FOR MANAGING UNIFIED ELECTRONIC TRANSACTIONS
US11216285B2 (en) 2019-06-14 2022-01-04 Oracle International Corporation Transaction state logger and retriever
GB2594258B (en) 2020-04-20 2022-07-20 Advanced Risc Mach Ltd Variable nesting control parameter for table structure providing access control information for controlling access to a memory system

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070162520A1 (en) 2005-12-30 2007-07-12 Leaf Petersen Software assisted nested hardware transactions
US20110145637A1 (en) 2009-12-15 2011-06-16 Jan Gray Performing Mode Switching In An Unbounded Transactional Memory (UTM) System

Family Cites Families (223)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1174370A (en) 1980-05-19 1984-09-11 Hidekazu Matsumoto Data processing unit with pipelined operands
US4488227A (en) 1982-12-03 1984-12-11 Honeywell Information Systems Inc. Program counter stacking method and apparatus for nested subroutines and interrupts
US4740893A (en) 1985-08-07 1988-04-26 International Business Machines Corp. Method for reducing the time for switching between programs
US5063497A (en) 1987-07-01 1991-11-05 Digital Equipment Corporation Apparatus and method for recovering from missing page faults in vector data processing operations
US5321823A (en) 1988-07-20 1994-06-14 Digital Equipment Corporation Digital processor with bit mask for counting registers for fast register saves
US5117498A (en) 1988-08-19 1992-05-26 Motorola, Inc. Processer with flexible return from subroutine
JPH0437927A (ja) 1990-06-01 1992-02-07 Sony Corp プロセッサの処理方法
US5471591A (en) 1990-06-29 1995-11-28 Digital Equipment Corporation Combined write-operand queue and read-after-write dependency scoreboard
DE4216871C2 (de) 1991-05-21 2001-09-06 Digital Equipment Corp Ausführungsordnen zum Sicherstellen der Serialisierbarkeit verteilter Transaktionen
US5701480A (en) 1991-10-17 1997-12-23 Digital Equipment Corporation Distributed multi-version commitment ordering protocols for guaranteeing serializability during transaction processing
US5274817A (en) 1991-12-23 1993-12-28 Caterpillar Inc. Method for executing subroutine calls
US5359608A (en) 1992-11-24 1994-10-25 Amdahl Corporation Apparatus for activation and deactivation of instruction tracing through use of conditional trace field in branch instructions
WO1994027215A1 (en) 1993-05-07 1994-11-24 Apple Computer, Inc. Method for decoding guest instructions for a host computer
US5925125A (en) 1993-06-24 1999-07-20 International Business Machines Corporation Apparatus and method for pre-verifying a computer instruction set to prevent the initiation of the execution of undefined instructions
US5551013A (en) 1994-06-03 1996-08-27 International Business Machines Corporation Multiprocessor for hardware emulation
US5748964A (en) 1994-12-20 1998-05-05 Sun Microsystems, Inc. Bytecode program interpreter apparatus and method with pre-verification of data type restrictions
US5655100A (en) 1995-03-31 1997-08-05 Sun Microsystems, Inc. Transaction activation processor for controlling memory transaction execution in a packet switched cache coherent multiprocessor system
DE69629495T2 (de) 1995-10-06 2004-06-09 Advanced Micro Devices, Inc., Sunnyvale Vereinheitlichter multifunktions-operationsverteiler für die ungeordnete befehlsexekution in einem superskalaren prozessor
US5790825A (en) 1995-11-08 1998-08-04 Apple Computer, Inc. Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions
TW384447B (en) 1996-01-22 2000-03-11 Infinite Technology Inc Processor with reconfigurable arithmetic data path
JPH103416A (ja) 1996-06-14 1998-01-06 Canon Inc 情報処理装置およびその方法
US6035313A (en) 1997-03-24 2000-03-07 Motorola, Inc. Memory address generator for an FFT
US5870582A (en) 1997-03-31 1999-02-09 International Business Machines Corporation Method and apparatus for completion of non-interruptible instructions before the instruction is dispatched
US5937199A (en) 1997-06-03 1999-08-10 International Business Machines Corporation User programmable interrupt mask with timeout for enhanced resource locking efficiency
JP3546678B2 (ja) 1997-09-12 2004-07-28 株式会社日立製作所 マルチos構成方法
US6094730A (en) 1997-10-27 2000-07-25 Hewlett-Packard Company Hardware-assisted firmware tracing method and apparatus
US7076784B1 (en) 1997-10-28 2006-07-11 Microsoft Corporation Software component execution management using context objects for tracking externally-defined intrinsic properties of executing software components within an execution environment
US6000029A (en) 1997-11-03 1999-12-07 Motorola, Inc. Method and apparatus for affecting subsequent instruction processing in a data processor
US5938778A (en) 1997-11-10 1999-08-17 International Business Machines Corporation System and method for tracing instructions in an information handling system without changing the system source code
KR100246537B1 (ko) 1997-11-25 2000-03-15 정선종 코드분할 다중접속 시스템에서 파일럿 심벌을 이용한 동기식이중 채널 큐피에스케이 송수신기의 구조
SE9704476L (sv) 1997-12-02 1999-06-23 Ericsson Telefon Ab L M Utökad instruktionsavkodning
US6009261A (en) 1997-12-16 1999-12-28 International Business Machines Corporation Preprocessing of stored target routines for emulating incompatible instructions on a target processor
US6202067B1 (en) 1998-04-07 2001-03-13 Lucent Technologies, Inc. Method and apparatus for correct and complete transactions in a fault tolerant distributed database system
US6119129A (en) 1998-05-14 2000-09-12 Sun Microsystems, Inc. Multi-threaded journaling in a configuration database
US6308255B1 (en) 1998-05-26 2001-10-23 Advanced Micro Devices, Inc. Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system
EP0992916A1 (en) 1998-10-06 2000-04-12 Texas Instruments Inc. Digital signal processor
EP0992907B1 (en) 1998-10-06 2005-09-28 Texas Instruments Inc. Trace fifo management
US6151669A (en) 1998-10-10 2000-11-21 Institute For The Development Of Emerging Architectures, L.L.C. Methods and apparatus for efficient control of floating-point status register
US6463582B1 (en) 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
US6732307B1 (en) 1999-10-01 2004-05-04 Hitachi, Ltd. Apparatus and method for storing trace information
US7761857B1 (en) 1999-10-13 2010-07-20 Robert Bedichek Method for switching between interpretation and dynamic translation in a processor system based upon code sequence execution counts
US6738892B1 (en) 1999-10-20 2004-05-18 Transmeta Corporation Use of enable bits to control execution of selected instructions
US6604188B1 (en) 1999-10-20 2003-08-05 Transmeta Corporation Pipeline replay support for multi-cycle operations wherein all VLIW instructions are flushed upon detection of a multi-cycle atom operation in a VLIW instruction
JP3776653B2 (ja) 1999-11-24 2006-05-17 富士通株式会社 演算処理装置
US6754809B1 (en) 1999-12-30 2004-06-22 Texas Instruments Incorporated Data processing apparatus with indirect register file access
US6934832B1 (en) 2000-01-18 2005-08-23 Ati International Srl Exception mechanism for a computer
US6665863B1 (en) 2000-05-31 2003-12-16 Microsoft Corporation Data referencing within a database graph
US6826682B1 (en) 2000-06-26 2004-11-30 Transmeta Corporation Floating point exception handling in pipelined processor using special instruction to detect generated exception and execute instructions singly from known correct state
AU2001283163A1 (en) * 2000-08-04 2002-02-18 Carr Scott Software Incorporated Automatic transaction management
US7287071B2 (en) * 2000-09-28 2007-10-23 Vignette Corporation Transaction management system
US6886094B1 (en) 2000-09-28 2005-04-26 International Business Machines Corporation Apparatus and method for detecting and handling exceptions
US6671686B2 (en) * 2000-11-02 2003-12-30 Guy Pardon Decentralized, distributed internet data management
US7346632B2 (en) 2001-02-22 2008-03-18 International Business Machines Corporation Mechanism for executing nested transactions in an execution environment supporting flat transactions only
US6963919B1 (en) 2001-02-28 2005-11-08 Agilent Technologies, Inc. Method and system for improving computer network performance
US6745272B2 (en) * 2001-04-04 2004-06-01 Advanced Micro Devices, Inc. System and method of increasing bandwidth for issuing ordered transactions into a distributed communication system
US7185234B1 (en) 2001-04-30 2007-02-27 Mips Technologies, Inc. Trace control from hardware and software
US7305678B2 (en) * 2001-05-17 2007-12-04 International Business Machines Corporation Method and system for reducing synchronization waits when allocating sequenced identifiers in a multi-threaded server
US7613762B2 (en) 2001-05-25 2009-11-03 Sun Microsystems, Inc. Floating point remainder with embedded status information
KR100625595B1 (ko) 2001-05-28 2006-09-20 한국전자통신연구원 트랜잭션 처리 시스템의 병렬 로깅 방법 및 트랜잭션 로그 처리 시스템
US6826681B2 (en) 2001-06-18 2004-11-30 Mips Technologies, Inc. Instruction specified register value saving in allocated caller stack or not yet allocated callee stack
US7185183B1 (en) 2001-08-02 2007-02-27 Mips Technologies, Inc. Atomic update of CPO state
US20060218556A1 (en) 2001-09-28 2006-09-28 Nemirovsky Mario D Mechanism for managing resource locking in a multi-threaded environment
US7174463B2 (en) 2001-10-04 2007-02-06 Lenovo (Singapore) Pte. Ltd. Method and system for preboot user authentication
US7313734B2 (en) 2002-01-14 2007-12-25 International Business Machines Corporation Method and system for instruction tracing with enhanced interrupt avoidance
US7546446B2 (en) 2002-03-08 2009-06-09 Ip-First, Llc Selective interrupt suppression
US7496494B2 (en) 2002-09-17 2009-02-24 International Business Machines Corporation Method and system for multiprocessor emulation on a multiprocessor host system
US6892286B2 (en) 2002-09-30 2005-05-10 Sun Microsystems, Inc. Shared memory multiprocessor memory model verification system and method
US7103597B2 (en) 2002-10-03 2006-09-05 Mcgoveran David O Adaptive transaction manager for complex transactions and business process
US7634638B1 (en) 2002-10-22 2009-12-15 Mips Technologies, Inc. Instruction encoding for system register bit set and clear
US7568023B2 (en) 2002-12-24 2009-07-28 Hewlett-Packard Development Company, L.P. Method, system, and data structure for monitoring transaction performance in a managed computer network environment
US7398355B1 (en) 2003-02-13 2008-07-08 Sun Microsystems, Inc. Avoiding locks by transactionally executing critical sections
US7089374B2 (en) 2003-02-13 2006-08-08 Sun Microsystems, Inc. Selectively unmarking load-marked cache lines during transactional program execution
US7269693B2 (en) 2003-02-13 2007-09-11 Sun Microsystems, Inc. Selectively monitoring stores to support transactional program execution
US7269717B2 (en) 2003-02-13 2007-09-11 Sun Microsystems, Inc. Method for reducing lock manipulation overhead during access to critical code sections
US6862664B2 (en) 2003-02-13 2005-03-01 Sun Microsystems, Inc. Method and apparatus for avoiding locks by speculatively executing critical sections
US7398359B1 (en) 2003-04-30 2008-07-08 Silicon Graphics, Inc. System and method for performing memory operations in a computing system
US7801851B2 (en) 2003-06-30 2010-09-21 Gravic, Inc. Method for ensuring referential integrity in multi-threaded replication engines
US7836450B2 (en) 2003-08-28 2010-11-16 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7197586B2 (en) 2004-01-14 2007-03-27 International Business Machines Corporation Method and system for recording events of an interrupt using pre-interrupt handler and post-interrupt handler
US7206903B1 (en) 2004-07-20 2007-04-17 Sun Microsystems, Inc. Method and apparatus for releasing memory locations during transactional execution
US7703098B1 (en) 2004-07-20 2010-04-20 Sun Microsystems, Inc. Technique to allow a first transaction to wait on condition that affects its working set
US7395382B1 (en) 2004-08-10 2008-07-01 Sun Microsystems, Inc. Hybrid software/hardware transactional memory
US7865701B1 (en) * 2004-09-14 2011-01-04 Azul Systems, Inc. Concurrent atomic execution
US20060064508A1 (en) 2004-09-17 2006-03-23 Ramesh Panwar Method and system to store and retrieve message packet data in a communications network
US7373554B2 (en) 2004-09-24 2008-05-13 Oracle International Corporation Techniques for automatic software error diagnostics and correction
US7856537B2 (en) * 2004-09-30 2010-12-21 Intel Corporation Hybrid hardware and software implementation of transactional memory access
EP1657118A1 (en) 2004-11-11 2006-05-17 IEE INTERNATIONAL ELECTRONICS & ENGINEERING S.A. Collision recognition device for a vehicle
US7984248B2 (en) 2004-12-29 2011-07-19 Intel Corporation Transaction based shared data operations in a multiprocessor environment
US7631073B2 (en) 2005-01-27 2009-12-08 International Business Machines Corporation Method and apparatus for exposing monitoring violations to the monitored application
US20060212757A1 (en) 2005-03-15 2006-09-21 International Business Machines Corporation Method, system, and program product for managing computer-based interruptions
US7421544B1 (en) 2005-04-04 2008-09-02 Sun Microsystems, Inc. Facilitating concurrent non-transactional execution in a transactional memory system
US7496726B1 (en) 2005-04-18 2009-02-24 Sun Microsystems, Inc. Controlling contention via transactional timers among conflicting transactions issued by processors operating in insistent or polite mode
US7464161B2 (en) 2005-06-06 2008-12-09 International Business Machines Corporation Enabling and disabling byte code inserted probes based on transaction monitoring tokens
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
US20070005828A1 (en) 2005-06-30 2007-01-04 Nimrod Diamant Interrupts support for the KCS manageability interface
CN1713164A (zh) 2005-07-21 2005-12-28 复旦大学 可自主处理多事务传输要求的dma控制器及数据传输方法
JP2009508187A (ja) 2005-08-01 2009-02-26 サン・マイクロシステムズ・インコーポレーテッド クリティカルセクションをトランザクション的に実行することによるロックの回避
US7870369B1 (en) 2005-09-28 2011-01-11 Oracle America, Inc. Abort prioritization in a trace-based processor
US8799882B2 (en) * 2005-12-07 2014-08-05 Microsoft Corporation Compiler support for optimizing decomposed software transactional memory operations
US20070136289A1 (en) 2005-12-14 2007-06-14 Intel Corporation Lock elision with transactional memory
US20070143755A1 (en) 2005-12-16 2007-06-21 Intel Corporation Speculative execution past a barrier
US8117605B2 (en) 2005-12-19 2012-02-14 Oracle America, Inc. Method and apparatus for improving transactional memory interactions by tracking object visibility
US7810072B2 (en) 2006-01-06 2010-10-05 International Business Machines Corporation Exception thrower
US20070186056A1 (en) 2006-02-07 2007-08-09 Bratin Saha Hardware acceleration for a software transactional memory system
US20070198978A1 (en) 2006-02-22 2007-08-23 David Dice Methods and apparatus to implement parallel transactions
US8099538B2 (en) 2006-03-29 2012-01-17 Intel Corporation Increasing functionality of a reader-writer lock
US8180977B2 (en) 2006-03-30 2012-05-15 Intel Corporation Transactional memory in out-of-order processors
US8180967B2 (en) 2006-03-30 2012-05-15 Intel Corporation Transactional memory virtualization
US7930695B2 (en) 2006-04-06 2011-04-19 Oracle America, Inc. Method and apparatus for synchronizing threads on a processor that supports transactional memory
US7636829B2 (en) * 2006-05-02 2009-12-22 Intel Corporation System and method for allocating and deallocating memory within transactional code
US7594094B2 (en) 2006-05-19 2009-09-22 International Business Machines Corporation Move data facility with optional specifications
US7707394B2 (en) 2006-05-30 2010-04-27 Arm Limited Reducing the size of a data stream produced during instruction tracing
US7849446B2 (en) 2006-06-09 2010-12-07 Oracle America, Inc. Replay debugging
MY149658A (en) 2006-06-12 2013-09-30 Mobile Money Internat Sdn Bhd Transaction server
US20070300013A1 (en) 2006-06-21 2007-12-27 Manabu Kitamura Storage system having transaction monitoring capability
US20080005504A1 (en) 2006-06-30 2008-01-03 Jesse Barnes Global overflow method for virtualized transactional memory
US20080016325A1 (en) 2006-07-12 2008-01-17 Laudon James P Using windowed register file to checkpoint register state
US7617421B2 (en) 2006-07-27 2009-11-10 Sun Microsystems, Inc. Method and apparatus for reporting failure conditions during transactional execution
US7748618B2 (en) 2006-08-21 2010-07-06 Verizon Patent And Licensing Inc. Secure near field transaction
US7865885B2 (en) 2006-09-27 2011-01-04 Intel Corporation Using transactional memory for precise exception handling in aggressive dynamic binary optimizations
US20080086516A1 (en) 2006-10-04 2008-04-10 Oracle International Automatically changing a database system's redo transport mode to dynamically adapt to changing workload and network conditions
ATE441022T1 (de) 2006-11-06 2009-09-15 Gm Global Tech Operations Inc Verfahren zum betreiben eines partikelfilters, programm für einen rechner und dafür vorgesehene regelvorrichtung
CN101178787A (zh) 2006-11-10 2008-05-14 上海市卢湾区东南医院 用于社区老干部保健管理的信息沟通方法
US7669040B2 (en) 2006-12-15 2010-02-23 Sun Microsystems, Inc. Method and apparatus for executing a long transaction
JP2008165370A (ja) * 2006-12-27 2008-07-17 Internatl Business Mach Corp <Ibm> オンライントランザクション処理を分割し、分散環境で実行するための方法および装置。
US8086827B2 (en) 2006-12-28 2011-12-27 Intel Corporation Mechanism for irrevocable transactions
US7802136B2 (en) 2006-12-28 2010-09-21 Intel Corporation Compiler technique for efficient register checkpointing to support transaction roll-back
US7627743B2 (en) 2007-01-12 2009-12-01 Andes Technology Corporation Method and circuit implementation for multiple-word transfer into/from memory subsystems
US20080244544A1 (en) 2007-03-29 2008-10-02 Naveen Neelakantam Using hardware checkpoints to support software based speculation
US8332374B2 (en) 2007-04-13 2012-12-11 Oracle America, Inc. Efficient implicit privatization of transactional memory
US8117403B2 (en) 2007-05-14 2012-02-14 International Business Machines Corporation Transactional memory system which employs thread assists using address history tables
US9009452B2 (en) 2007-05-14 2015-04-14 International Business Machines Corporation Computing system with transactional memory using millicode assists
US7814378B2 (en) 2007-05-18 2010-10-12 Oracle America, Inc. Verification of memory consistency and transactional memory
US20080320282A1 (en) 2007-06-22 2008-12-25 Morris Robert P Method And Systems For Providing Transaction Support For Executable Program Components
US8266387B2 (en) 2007-06-27 2012-09-11 Microsoft Corporation Leveraging transactional memory hardware to accelerate virtualization emulation
US7779232B2 (en) 2007-08-28 2010-08-17 International Business Machines Corporation Method and apparatus for dynamically managing instruction buffer depths for non-predicted branches
US8209689B2 (en) 2007-09-12 2012-06-26 Intel Corporation Live lock free priority scheme for memory transactions in transactional memory
US7904434B2 (en) * 2007-09-14 2011-03-08 Oracle International Corporation Framework for handling business transactions
US7890472B2 (en) 2007-09-18 2011-02-15 Microsoft Corporation Parallel nested transactions in transactional memory
US20090127332A1 (en) 2007-11-16 2009-05-21 Kyung Yang Park System for processing payment employing off-line transaction approval mode of mobile card and method thereof
US20090138890A1 (en) 2007-11-21 2009-05-28 Arm Limited Contention management for a hardware transactional memory
CN101170747A (zh) * 2007-11-30 2008-04-30 中兴通讯股份有限公司 中继状态调节方法和装置
US9391789B2 (en) 2007-12-14 2016-07-12 Qualcomm Incorporated Method and system for multi-level distribution information cache management in a mobile environment
US8195898B2 (en) 2007-12-27 2012-06-05 Intel Corporation Hybrid transactions for low-overhead speculative parallelization
US8706982B2 (en) 2007-12-30 2014-04-22 Intel Corporation Mechanisms for strong atomicity in a transactional memory system
US8065491B2 (en) 2007-12-30 2011-11-22 Intel Corporation Efficient non-transactional write barriers for strong atomicity
US8140497B2 (en) 2007-12-31 2012-03-20 Oracle America, Inc. System and method for implementing nonblocking zero-indirection transactional memory
US7966459B2 (en) 2007-12-31 2011-06-21 Oracle America, Inc. System and method for supporting phased transactional memory modes
US20090182983A1 (en) 2008-01-11 2009-07-16 International Business Machines Corporation Compare and Branch Facility and Instruction Therefore
US8041900B2 (en) 2008-01-15 2011-10-18 Oracle America, Inc. Method and apparatus for improving transactional memory commit latency
US8176280B2 (en) 2008-02-25 2012-05-08 International Business Machines Corporation Use of test protection instruction in computing environments that support pageable guests
US8161273B2 (en) 2008-02-26 2012-04-17 Oracle America, Inc. Method and apparatus for programmatically rewinding a register inside a transaction
US8380907B2 (en) 2008-02-26 2013-02-19 International Business Machines Corporation Method, system and computer program product for providing filtering of GUEST2 quiesce requests
EP2096564B1 (en) 2008-02-29 2018-08-08 Euroclear SA/NV Improvements relating to handling and processing of massive numbers of processing instructions in real time
US8688628B2 (en) 2008-02-29 2014-04-01 Red Hat, Inc. Nested queued transaction manager
US8316366B2 (en) 2008-04-02 2012-11-20 Oracle America, Inc. Facilitating transactional execution in a processor that supports simultaneous speculative threading
US20090260011A1 (en) 2008-04-14 2009-10-15 Microsoft Corporation Command line transactions
JP5385545B2 (ja) 2008-04-17 2014-01-08 インターナショナル・ビジネス・マシーンズ・コーポレーション トランザクションの実行を制御する装置及び方法
US9367363B2 (en) 2008-05-12 2016-06-14 Oracle America, Inc. System and method for integrating best effort hardware mechanisms for supporting transactional memory
US8612950B2 (en) 2008-06-19 2013-12-17 Intel Corporation Dynamic optimization for removal of strong atomicity barriers
US7996686B2 (en) 2008-07-07 2011-08-09 International Business Machines Corporation Branch trace methodology
CN102144218A (zh) * 2008-07-28 2011-08-03 超威半导体公司 可虚拟化的先进同步设备
US9449314B2 (en) 2008-10-02 2016-09-20 International Business Machines Corporation Virtualization of a central processing unit measurement facility
US8191046B2 (en) 2008-10-06 2012-05-29 Microsoft Corporation Checking transactional memory implementations
US20100122073A1 (en) 2008-11-10 2010-05-13 Ravi Narayanaswamy Handling exceptions in software transactional memory systems
JP4702962B2 (ja) * 2008-11-12 2011-06-15 インターナショナル・ビジネス・マシーンズ・コーポレーション メモリ制御装置、プログラム及び方法
US8789057B2 (en) 2008-12-03 2014-07-22 Oracle America, Inc. System and method for reducing serialization in transactional memory using gang release of blocked threads
US8672820B2 (en) 2008-12-04 2014-03-18 Honda Motor Co., Ltd. Tool stocker, machine tool system, and tool damage detecting apparatus
US20100153776A1 (en) 2008-12-12 2010-06-17 Sun Microsystems, Inc. Using safepoints to provide precise exception semantics for a virtual machine
US9274855B2 (en) 2008-12-24 2016-03-01 Intel Corporation Optimization for safe elimination of weak atomicity overhead
US10210018B2 (en) 2008-12-24 2019-02-19 Intel Corporation Optimizing quiescence in a software transactional memory (STM) system
US8914620B2 (en) 2008-12-29 2014-12-16 Oracle America, Inc. Method and system for reducing abort rates in speculative lock elision using contention management mechanisms
US8799582B2 (en) 2008-12-30 2014-08-05 Intel Corporation Extending cache coherency protocols to support locally buffered data
CN101710433A (zh) 2008-12-31 2010-05-19 深圳市江波龙电子有限公司 一种电子支付卡的交易方法及电子支付卡
US9170844B2 (en) 2009-01-02 2015-10-27 International Business Machines Corporation Prioritization for conflict arbitration in transactional memory management
CN101819518B (zh) 2009-02-26 2013-09-11 国际商业机器公司 在事务内存中快速保存上下文的方法和装置
US8266107B2 (en) 2009-03-11 2012-09-11 International Business Machines Corporation Method for mirroring a log file by threshold driven synchronization
US9940138B2 (en) 2009-04-08 2018-04-10 Intel Corporation Utilization of register checkpointing mechanism with pointer swapping to resolve multithreading mis-speculations
US20100307689A1 (en) 2009-06-06 2010-12-09 Michael James Huebner Pivoting tape dispenser
GB2484416B (en) 2009-06-26 2015-02-25 Intel Corp Optimizations for an unbounded transactional memory (utm) system
US8973004B2 (en) 2009-06-26 2015-03-03 Oracle America, Inc. Transactional locking with read-write locks in transactional memory systems
US8356166B2 (en) 2009-06-26 2013-01-15 Microsoft Corporation Minimizing code duplication in an unbounded transactional memory system by using mode agnostic transactional read and write barriers
US8489864B2 (en) 2009-06-26 2013-07-16 Microsoft Corporation Performing escape actions in transactions
US8281185B2 (en) 2009-06-30 2012-10-02 Oracle America, Inc. Advice-based feedback for transactional execution
US8229907B2 (en) * 2009-06-30 2012-07-24 Microsoft Corporation Hardware accelerated transactional memory system with open nested transactions
US8688964B2 (en) 2009-07-20 2014-04-01 Microchip Technology Incorporated Programmable exception processing latency
GB2472620B (en) * 2009-08-12 2016-05-18 Cloudtran Inc Distributed transaction processing
US8392694B2 (en) 2009-09-15 2013-03-05 International Business Machines Corporation System and method for software initiated checkpoint operations
GB2474446A (en) 2009-10-13 2011-04-20 Advanced Risc Mach Ltd Barrier requests to maintain transaction order in an interconnect with multiple paths
US8327188B2 (en) 2009-11-13 2012-12-04 Oracle America, Inc. Hardware transactional memory acceleration through multiple failure recovery
US8516202B2 (en) 2009-11-16 2013-08-20 International Business Machines Corporation Hybrid transactional memory system (HybridTM) and method
US9529839B2 (en) * 2009-12-07 2016-12-27 International Business Machines Corporation Applying limited-size hardware transactional memory to arbitrarily large data structure
US8290991B2 (en) 2009-12-15 2012-10-16 Juniper Networks, Inc. Atomic deletion of database data categories
US8316194B2 (en) 2009-12-15 2012-11-20 Intel Corporation Mechanisms to accelerate transactions using buffered stores
US8521995B2 (en) * 2009-12-15 2013-08-27 Intel Corporation Handling operating system (OS) transitions in an unbounded transactional memory (UTM) mode
US9092253B2 (en) 2009-12-15 2015-07-28 Microsoft Technology Licensing, Llc Instrumentation of hardware assisted transactional memory system
US8301849B2 (en) 2009-12-23 2012-10-30 Intel Corporation Transactional memory in out-of-order processors with XABORT having immediate argument
KR101639672B1 (ko) 2010-01-05 2016-07-15 삼성전자주식회사 무한 트랜잭션 메모리 시스템 및 그 동작 방법
US8549468B2 (en) 2010-02-08 2013-10-01 National Tsing Hua University Method, system and computer readable storage device for generating software transaction-level modeling (TLM) model
US8850166B2 (en) 2010-02-18 2014-09-30 International Business Machines Corporation Load pair disjoint facility and instruction therefore
US20110208921A1 (en) 2010-02-19 2011-08-25 Pohlack Martin T Inverted default semantics for in-speculative-region memory accesses
US8438568B2 (en) 2010-02-24 2013-05-07 International Business Machines Corporation Speculative thread execution with hardware transactional memory
US8739164B2 (en) * 2010-02-24 2014-05-27 Advanced Micro Devices, Inc. Automatic suspend atomic hardware transactional memory in response to detecting an implicit suspend condition and resume thereof
US8464261B2 (en) 2010-03-31 2013-06-11 Oracle International Corporation System and method for executing a transaction using parallel co-transactions
US8402227B2 (en) 2010-03-31 2013-03-19 Oracle International Corporation System and method for committing results of a software transaction using a hardware transaction
US8631223B2 (en) 2010-05-12 2014-01-14 International Business Machines Corporation Register file supporting transactional processing
US9626187B2 (en) * 2010-05-27 2017-04-18 International Business Machines Corporation Transactional memory system supporting unbroken suspended execution
US20110302143A1 (en) * 2010-06-02 2011-12-08 Microsoft Corporation Multi-version concurrency with ordered timestamps
US9880848B2 (en) 2010-06-11 2018-01-30 Advanced Micro Devices, Inc. Processor support for hardware transactional memory
US8560816B2 (en) * 2010-06-30 2013-10-15 Oracle International Corporation System and method for performing incremental register checkpointing in transactional memory
US8479053B2 (en) 2010-07-28 2013-07-02 Intel Corporation Processor with last branch record register storing transaction indicator
US8561033B2 (en) 2010-07-30 2013-10-15 International Business Machines Corporation Selective branch-triggered trace generation apparatus and method
US8549504B2 (en) 2010-09-25 2013-10-01 Intel Corporation Apparatus, method, and system for providing a decision mechanism for conditional commits in an atomic region
US9552206B2 (en) 2010-11-18 2017-01-24 Texas Instruments Incorporated Integrated circuit with control node circuitry and processing circuitry
US9122476B2 (en) 2010-12-07 2015-09-01 Advanced Micro Devices, Inc. Programmable atomic memory using hardware validation agent
US8442962B2 (en) 2010-12-28 2013-05-14 Sap Ag Distributed transaction management using two-phase commit optimization
US8818867B2 (en) 2011-11-14 2014-08-26 At&T Intellectual Property I, L.P. Security token for mobile near field communication transactions
US9442824B2 (en) 2012-03-16 2016-09-13 International Business Machines Corporation Transformation of a program-event-recording event into a run-time instrumentation event
US9158660B2 (en) 2012-03-16 2015-10-13 International Business Machines Corporation Controlling operation of a run-time instrumentation facility
US9448796B2 (en) 2012-06-15 2016-09-20 International Business Machines Corporation Restricted instructions in transactional execution
US9311101B2 (en) 2012-06-15 2016-04-12 International Business Machines Corporation Intra-instructional transaction abort handling
US9436477B2 (en) 2012-06-15 2016-09-06 International Business Machines Corporation Transaction abort instruction

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070162520A1 (en) 2005-12-30 2007-07-12 Leaf Petersen Software assisted nested hardware transactions
US20110145637A1 (en) 2009-12-15 2011-06-16 Jan Gray Performing Mode Switching In An Unbounded Transactional Memory (UTM) System

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190099087A (ko) * 2017-02-28 2019-08-23 알리바바 그룹 홀딩 리미티드 서비스 데이터를 블록체인에 기입하기 위한 방법 및 장치, 그리고 서비스 하위세트를 결정하기 위한 방법
KR102103130B1 (ko) 2017-02-28 2020-04-22 알리바바 그룹 홀딩 리미티드 서비스 데이터를 블록체인에 기입하기 위한 방법 및 장치, 그리고 서비스 하위세트를 결정하기 위한 방법
US10642643B2 (en) 2017-02-28 2020-05-05 Alibaba Group Holding Limited Method and apparatus for writing service data into block chain and method for determining service subset
US10664305B1 (en) 2017-02-28 2020-05-26 Alibaba Group Holding Limited Method and apparatus for writing service data into block chain and method for determining service subset

Also Published As

Publication number Publication date
RU2014143109A (ru) 2016-08-10
RU2606878C2 (ru) 2017-01-10
CA2874236C (en) 2021-07-27
US20130339329A1 (en) 2013-12-19
CA2874236A1 (en) 2013-12-19
CN104412232A (zh) 2015-03-11
US8688661B2 (en) 2014-04-01
IL234563B (en) 2018-08-30
EP2862070A2 (en) 2015-04-22
DK2862070T3 (da) 2019-05-20
EP2862070A4 (en) 2015-09-16
AU2013276133A1 (en) 2014-12-11
JP6222670B2 (ja) 2017-11-01
TW201413593A (zh) 2014-04-01
ES2727124T3 (es) 2019-10-14
WO2013186721A3 (en) 2014-05-30
SG11201407502UA (en) 2014-12-30
WO2013186721A2 (en) 2013-12-19
TWI533219B (zh) 2016-05-11
KR20150013740A (ko) 2015-02-05
EP2862070B1 (en) 2019-04-17
US20130339961A1 (en) 2013-12-19
AU2013276133B2 (en) 2016-06-30
JP2015525408A (ja) 2015-09-03
US9766925B2 (en) 2017-09-19
CN104412232B (zh) 2018-02-06

Similar Documents

Publication Publication Date Title
US11080087B2 (en) Transaction begin/end instructions
KR101634481B1 (ko) 트랜잭션 처리
KR101625323B1 (ko) 선택된 레지스터들을 트랜잭션 처리시에 세이브/복원하기
KR101625325B1 (ko) 트랜잭션 처리 시에 명령 실행의 선택적 제어
KR101599181B1 (ko) 트랜잭션 진단 블록
KR101625324B1 (ko) 제약 트랜잭션 실행
US9851978B2 (en) Restricted instructions in transactional execution
KR101740777B1 (ko) 프로세서 보조 퍼실리티
KR101625322B1 (ko) 비트랜잭션 저장 명령
US9983915B2 (en) Facilitating transaction completion subsequent to repeated aborts of the transaction
KR101720402B1 (ko) 트랜잭션 실행에서 프로그램 인터럽션 필터링
US9442738B2 (en) Restricting processing within a processor to facilitate transaction completion
AU2013276800A1 (en) Randomized testing within transactional execution

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: 20190530

Year of fee payment: 4