KR101625325B1 - 트랜잭션 처리 시에 명령 실행의 선택적 제어 - Google Patents
트랜잭션 처리 시에 명령 실행의 선택적 제어 Download PDFInfo
- Publication number
- KR101625325B1 KR101625325B1 KR1020147034720A KR20147034720A KR101625325B1 KR 101625325 B1 KR101625325 B1 KR 101625325B1 KR 1020147034720 A KR1020147034720 A KR 1020147034720A KR 20147034720 A KR20147034720 A KR 20147034720A KR 101625325 B1 KR101625325 B1 KR 101625325B1
- Authority
- KR
- South Korea
- Prior art keywords
- transaction
- control
- instruction
- instructions
- execution
- Prior art date
Links
- 238000012545 processing Methods 0.000 title claims description 61
- 238000007667 floating Methods 0.000 claims abstract description 40
- 230000004048 modification Effects 0.000 claims abstract description 31
- 238000012986 modification Methods 0.000 claims abstract description 31
- 238000003860 storage Methods 0.000 claims description 145
- 238000000034 method Methods 0.000 claims description 58
- 238000013519 translation Methods 0.000 claims description 40
- 238000004891 communication Methods 0.000 claims description 15
- 230000000977 initiatory effect Effects 0.000 claims description 15
- 230000001934 delay Effects 0.000 claims description 6
- 230000001052 transient effect Effects 0.000 claims description 2
- 230000006870 function Effects 0.000 description 35
- 230000014616 translation Effects 0.000 description 30
- 238000001914 filtration Methods 0.000 description 21
- 230000001419 dependent effect Effects 0.000 description 20
- 238000005192 partition Methods 0.000 description 20
- 238000004590 computer program Methods 0.000 description 18
- 230000008859 change Effects 0.000 description 15
- 230000007246 mechanism Effects 0.000 description 14
- 230000008569 process Effects 0.000 description 14
- 239000000872 buffer Substances 0.000 description 11
- 238000006243 chemical reaction Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 10
- 238000006073 displacement reaction Methods 0.000 description 9
- 230000009471 action Effects 0.000 description 8
- 238000012360 testing method Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 5
- PWPJGUXAGUPAHP-UHFFFAOYSA-N lufenuron Chemical compound C1=C(Cl)C(OC(F)(F)C(C(F)(F)F)F)=CC(Cl)=C1NC(=O)NC(=O)C1=C(F)C=CC=C1F PWPJGUXAGUPAHP-UHFFFAOYSA-N 0.000 description 5
- 238000011084 recovery Methods 0.000 description 5
- 230000000295 complement effect Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000007774 longterm Effects 0.000 description 4
- 230000036961 partial effect Effects 0.000 description 4
- 230000002441 reversible effect Effects 0.000 description 4
- 238000001514 detection method Methods 0.000 description 3
- 230000009977 dual effect Effects 0.000 description 3
- 239000000463 material Substances 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000012163 sequencing technique Methods 0.000 description 3
- 230000009466 transformation Effects 0.000 description 3
- 206010000210 abortion Diseases 0.000 description 2
- 230000001174 ascending effect Effects 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 238000010926 purge Methods 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 102100032303 26S proteasome non-ATPase regulatory subunit 2 Human genes 0.000 description 1
- 101000590272 Homo sapiens 26S proteasome non-ATPase regulatory subunit 2 Proteins 0.000 description 1
- 102000004137 Lysophosphatidic Acid Receptors Human genes 0.000 description 1
- 108090000642 Lysophosphatidic Acid Receptors Proteins 0.000 description 1
- 101100496104 Mus musculus Clec2d gene Proteins 0.000 description 1
- 208000036758 Postinfectious cerebellitis Diseases 0.000 description 1
- 101100274534 Rattus norvegicus Clec2d11 gene Proteins 0.000 description 1
- 238000012884 algebraic function Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 230000005923 long-lasting effect Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 229920000638 styrene acrylonitrile Polymers 0.000 description 1
- 230000001629 suppression Effects 0.000 description 1
- 210000003813 thumb Anatomy 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
- G06F9/463—Program control block organisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Error Detection And Correction (AREA)
- Retry When Errors Occur (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
트랜잭션 환경에서 명령들의 실행이 선택적으로 제어된다. TRANSACTION BEGIN 명령은 트랜잭션을 개시하며 특정한 유형들의 명령들이 상기 트랜잭션 내에서 실행이 허용되는지를 선택적으로 표시하는 제어들을 포함한다. 상기 제어들은 하나 또는 그 이상의 액세스 레지스터 수정 허용 제어와 부동 소수점 연산 허용 제어를 포함한다.
Description
하나 또는 그 이상의 특징들은 일반적으로 다중 처리 컴퓨팅 환경들에 관한 것이고, 구체적으로 그러한 컴퓨팅 환경들 내에서 트랜잭션 처리에 관한 것이다.
멀티프로세서 프로그래밍에서 다중 중앙 처리 장치들(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 및 그 이전 세대들 같은 고전적인 운영체제 환경들에서, 프로그램은 발생할 수 있는 어느 프로그램-예외 조건이든 인터셉트할 수 있는 복구 환경을 구축한다. 만일 프로그램이 예외를 인터셉트하지 않으면, 운영체제는 운영체제가 처리할 준비가 되어 있지 않은 예외들에 대하여 통상적으로 프로그램을 비정상적으로 종료시킨다. 그러한 환경을 구축하고 활용하는 것은 비용이 많이 들고 복잡하다.
컴퓨팅 환경의 트랜잭션들 내에서―트랜잭션은 선택된 트랜잭션이 완료될 때까지 메인 메모리에 대한 트랜잭션 저장을 커밋(commit)하는 것을 효과적으로 지연시킴―명령들의 실행을 제어하기 위한 컴퓨터 프로그램 제품의 제공을 통해서 선행 기술의 단점들이 극복되고 장점들이 제공된다. 상기 컴퓨터 프로그램 제품은, 처리 회로에 의해 판독 가능한 그리고 어떤 방법을 수행하기 위해 상기 처리 회로에 의해 실행할 명령들을 저장하는, 컴퓨터 판독 가능 스토리지 매체를 포함한다. 상기 방법은, 예를 들어, 프로세서에 의해, 실행을 위한 기계어 명령을 획득하는 단계―상기 기계어 명령은 컴퓨터 아키텍처에 따라서 컴퓨터 실행을 위해 정의되고, 상기 기계어 명령은 트랜잭션 시작 연산을 명시하기 위한 연산 코드; 및 트랜잭션 처리 시에 하나 또는 그 이상의 유형의 명령들의 실행을 제어하는 데 사용될 적어도 하나의 제어(control)를 포함함―; 상기 프로세서에 의해, 상기 기계어 명령을 실행하는 단계―상기 실행하는 단계는 트랜잭션을 개시하는 단계; 및 제1 값을 결정하기 위해 상기 적어도 하나의 제어 중 제1 제어를 사용하는 단계를 포함하되, 상기 제1 값은 제1 유형의 명령의 트랜잭션 내의 실행을 제어함―를 포함한다.
하나 또는 그 이상의 실시 예들과 관련된 방법들과 시스템들이 또한 여기에서 기술되고 청구된다. 추가로, 하나 또는 그 이상의 실시 예들과 관련된 서비스들 또한 여기에서 기술되고 청구될 수 있다.
추가적인 특징들과 장점들이 구현된다. 다른 실시 예들과 특징들이 여기에서 상세하게 기술되며 청구하는 발명의 일부로 간주된다.
하나 또는 그 이상의 특징들이 구체적으로 언급되고 본 명세서의 끝 부분의 청구 범위에서 예시로서 분명하게 청구된다. 전술한 것과 다른 대상들, 특징들, 및 장점들은 다음과 같은 내용으로 첨부되는 도면들과 그 다음에 오는 발명을 실시하기 위한 구체적인 내용을 참조하면 분명해진다.
도 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는 큐 엘리먼트를 큐 엘리먼트들의 이중 연결 목록으로 삽입하는 것의 일 예를 도시한다.
도 16은 컴퓨터 프로그램 제품의 한 실시 예를 도시한다.
도 17은 호스트 컴퓨터 시스템의 한 실시 예를 도시한다.
도 18은 컴퓨터 시스템의 추가 예를 도시한다.
도 19는 컴퓨터 네트워크를 포함하는 컴퓨터 시스템의 또 다른 예를 도시한다.
도 20은 컴퓨터 시스템의 여러 엘리먼트들의 한 실시 예를 도시한다.
도 21a는 도 20의 컴퓨터 시스템의 실행 유닛의 한 실시 예를 도시한다.
도 21b는 도 20의 컴퓨터 시스템의 분기 유닛의 한 실시 예를 도시한다.
도 21c는 도 20의 컴퓨터 시스템의 로드/저장 유닛의 한 실시 예를 도시한다.
도 22는 에뮬레이트된 호스트 컴퓨터 시스템의 한 실시 예를 도시한다.
도 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는 큐 엘리먼트를 큐 엘리먼트들의 이중 연결 목록으로 삽입하는 것의 일 예를 도시한다.
도 16은 컴퓨터 프로그램 제품의 한 실시 예를 도시한다.
도 17은 호스트 컴퓨터 시스템의 한 실시 예를 도시한다.
도 18은 컴퓨터 시스템의 추가 예를 도시한다.
도 19는 컴퓨터 네트워크를 포함하는 컴퓨터 시스템의 또 다른 예를 도시한다.
도 20은 컴퓨터 시스템의 여러 엘리먼트들의 한 실시 예를 도시한다.
도 21a는 도 20의 컴퓨터 시스템의 실행 유닛의 한 실시 예를 도시한다.
도 21b는 도 20의 컴퓨터 시스템의 분기 유닛의 한 실시 예를 도시한다.
도 21c는 도 20의 컴퓨터 시스템의 로드/저장 유닛의 한 실시 예를 도시한다.
도 22는 에뮬레이트된 호스트 컴퓨터 시스템의 한 실시 예를 도시한다.
한 특징에 따라서, 트랜잭션 실행(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 필드가 비제로일 때, 다음이 적용된다:
트랜잭션 내포 깊이가 최초에 제로일 때, 제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는 유효하다.
상기 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 명령이 있기 전에 종료될 때 트랜잭션은 중단된다. 트랜잭션이 중단될 때, 한 실시 예에서, 다음과 같은 일이 발생한다:
최외부 TRANSACTION BEGIN 명령의 범용 레지스터 세이브 마스크(GRSM)에 의해 지정되는 레지스터들은 트랜잭션 실행 전의 자신들의 콘텐츠로(즉, 최외부 TRANSACTION BEGIN 명령의 실행시 자신들의 콘텐츠로) 복원된다. 최외부 TRANSACTION BEGIN 명령의 범용 레지스터 세이브 마스크에 의해 지정되지 않는 범용 레지스터들은 복원되지 않는다.
액세스 레지스터들, 부동 소수점 레지스터들, 및 부동 소수점 제어 레지스터는 복원되지 않는다. 트랜잭션이 중단될 때 트랜잭션 실행 동안에 이 레지스터들에 이루어진 모든 변경 사항들은 유지된다.
트랜잭션은 제한된 명령의 실행 시도(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 ): 제약 트랜잭션은 제약 트랜잭션 실행 모드에서 실행되는 트랜잭션이며 다음의 제한사항들이 적용된다:
반복되는 인터럽션들 또는 다른 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(트랜잭션 내포 깊이 추출) 명령의 포맷의 한 실시 예를 기술한다. 한 예로서, EXTRACT TRANSACTION NESTING DEPTH 명령(800)은 트랜잭션 내포 깊이 추출 연산을 표시하는 오피코드를 명시하는 오피코드 필드(802); 및 범용 레지스터를 지정하는 레지스터 필드 R1(804)을 포함한다.
현재의 트랜잭션 내포 깊이는 범용 레지스터 R1의 비트들 48~63에 배치된다. 상기 레지스터의 비트들 0~31은 변하지 않은 채로 남아 있고, 상기 레지스터의 비트들 32~47은 제로로 세트된다.
추가 실시 예에서, 최대 트랜잭션 내포 깊이 또한 범용 레지스터 R1에 배치되는데, 예를 들면 비트들 16~31에 배치된다.
트랜잭션 실행 프로그램 인터럽션 필터링 오버라이드(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로 인해 중단될 때, 그 다음에 다음 둘 중 하나가 발생할 수 있다:
중단 코드가 코드들 7~11, 13~16, 또는 255 중 어느 한 가지에 세트되며, 상기 코드의 값은 CPU에 의해 랜덤으로 선택된다; 조건 코드는 상기 중단 코드에 대응하여 세트된다. 중단 코드들은 아래에 더 기술된다.
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의 한 가지 목적은 프로그램을 디버깅하는 것을 돕는 것이다. 이것은 프로그램이 다음의 이벤트 유형들을 보고받을 수 있게 하며, 예는 다음과 같다:
프로그램은, 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)을 보유한다:
[00166] 값 의미
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)을 보유한다.
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에 세이브된다.
한 실시 예에서, 모델 종속적 진단 정보는 다음을 포함한다:
바이트들 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에 세트되게 할 것인지는 모델 종속적이다.
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)
로드/저장 유닛(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로 배치되지 않는다.
한 실시 예에서, 여기에 표시된 바와 같이, 트랜잭션 실행 퍼실리티가 설치되어 있을 때, 다음의 범용 명령들이 제공된다:
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은 그것이 인터럽션(이것은 트랜잭션의 중단을 일으킴)을 일으키므로 제한된다.
아래에 나열된 조건들하에서, 다음의 명령들은 제한된다:
명령의 R2 필드가 비제로이고 분기 추적(branch tracing)이 가능할 때, BRANCH AND LINK (BALR), BRANCH AND SAVE (BASR), 및 BRANCH AND SAVE AND SET MODE.
R2 필드가 비제로이고 모드 추적(mode tracing)이 가능할 때, BRANCH AND SAVE AND SET MODE 및 BRANCH AND SET MODE; 모드 추적이 가능할 때, SET ADDRESSING MODE.
상기 목록은 추적 엔트리들(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)은 다음 중 하나로부터 기인할 수 있다:
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로 세트된다.
리셋(reset), 재시작(restart) 또는 정지(stop) 같은 오퍼레이터 기능(operator function) 또는 등가의 SIGNAL PROCESSOR 명령(order)이 CPU 상에서 수행된다.
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의 한 예에서 온 것임)으로 한정된다:
M1이 비제로이고 RI2 필드는 주소의 순환(address wraparound)을 일으키지 않는 양의 값을 보유하는, BRANCH RELATIVE ON CONDITION LONG.
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)를 호출한다.
요약하자면, 제약 트랜잭션의 처리는 다음과 같다:
- 중단시에 명령-명시 TDB는 저장되지 않음
- 다음 순차 명령이 아님
- 그것의 다음에 오는 명령이 아님
- 중단 조건이 전체 TX의 재구동을 일으킨다
* 페일 경로 없음(No fail path)
위에 기술한 바와 같이, 선택사항인 제약 트랜잭션 처리에 더하여, 한 실시 예에서, 트랜잭션 퍼실리티는 비제약 트랜잭션 처리도 제공한다. 도 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 --
프로그램 예외들은 예를 들어 다음을 포함한다:
한 실시 예에서, 위에서 제공되는 예외 검사(exception checking)는 여러 순서로 일어날 수 있다. 예외 검사에 대한 한 가지 구체적인 순서는 다음과 같다:
주(Notes):
1. B1 필드가 비제로일 때, 다음이 적용된다:
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 명령에 의해 형성될 수 있다.
요약하자면, 비제약 트랜잭션의 처리는 다음과 같다:
- 프로그램에 의해 직접 액세스할 수 없음
- TBEGIN 성공은 CC0으로 표시됨
- 중단된 트랜잭션은 비제로 CC로 표시됨
- PIFC는 유효하지 않다(3의 값)
- 제2 오퍼랜드 주소가 더블워드로 할당되지 않음
위에 표시된 바와 같이, 트랜잭션은, 제약 또는 비제약 중 하나인데, 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 BEGIN 명령의 하나 또는 그 이상의 제어들(controls)에 기초하여 선택적으로 제어된다. 이 제어들은 특정한 유형의 명령들이 주어진 트랜잭션 내에서 실행될 수 있는지를 선택적으로 결정하는 데 사용된다. 예를 들어, 액세스 레지스터들, 부동 소수점 레지스터들 및/또는 부동 소수점 제어 레지스터 같은 특정한 유형의 레지스터들은 트랜잭션의 중단 시에 복원되지 않으므로, 트랜잭션의 중단 처리부 복구 루틴은 그러한 레지스터들의 수정 또는 부동 소수점 컨텍스트의 명령들의 실행도 수용하지 못할 수 있다. 여기에서 사용할 때, 부동 소수점 컨텍스트(floating point context)에는 부동 소수점 레지스터들 또는 부동 소수점 제어 레지스터를 검사 또는 변경할 수 있는 모든 명령이 포함된다. 그러므로, 그러한 수정/액세스가 용인되는지를 표시하기 위한 메커니즘이 채용된다.
구체적으로, 중단 처리부는 최외부 레벨에서의 처리를 나타내므로, 그리고 액세스 레지스터 수정 또는 부동 소수점 연산은 내부 내포 레벨에서 발생할 수 있으므로, 상기 레지스터들의 수정 또는 상기 컨텍스트 명령들의 실행이 허용되는지를 표시하기 위한 메커니즘이 제공된다. 이 메커니즘은 예를 들어 TRANSACTION BEGIN 명령에 대한 제어들을 포함한다.
한 실시 예에서, 상기 제어들은 "A" 제어―이것은 액세스 레지스터 수정 허용 제어임― 및 "F" 제어―이것은 부동 소수점 연산 허용 제어임―를 포함한다. 트랜잭션들은 내포될 수 있으며, 따라서 내포의 각 레벨마다 일 세트의 제어들이 있다. 유효 A 및 F 제어는 모든 내포 레벨들에서 동일한 유형의 모든 제어들의 논리적 AND(논리곱)이다. 그러므로, 상기 유효 제어는 현재 내포 레벨 및 모든 그 하부 레벨들의 최소 허용치(least permissive)이다. 하지만, 내포된 트랜잭션에서, 상기 유효 제어는 TRANSACTION END 명령이 실행될 때마다 상기 하부 내포 레벨의 것으로 복원된다. 예를 들면, 일련의 내포된 TBEGIN 명령들은 내포 레벨 1, 2, 3, 4, 및 5에서 1, 1, 0, 1, 및 0으로 세트된 A 제어를 가질 수 있다. 그러므로, 내포 깊이 1과 2에서 액세스 레지스터 수정은 허용되지만, 내포 레벨 3과 그 위에서 액세스 레지스터 수정은 허용되지 않는다. 프로그램이 내포 레벨 3에서 2로 다시 바뀔 때, 액세스 레지스터 수정은 다시 허용된다. 비슷한 연산이 F 제어에 적용된다.
도 14를 참조하여 내포 레벨이 낮아질 때 제어들을 업데이트하는 것에 대한 한 실시 예를 기술한다. 한 예에서, 프로세서는 이 로직을 수행한다. 처음에, 예를 들어 TRANSACTION BEGIN 명령을 실행하는 것에 기초하여 트랜잭션이 개시된다(단계 1400). 이 트랜잭션은 트랜잭션들의 내포의 일부일 수도 있고 아닐 수도 있다. TRANSACTION BEGIN 명령은 특정한 레지스터들/컨텍스트가 업데이트될 수 있는지를 그리고 그에 따라서 특정한 명령들이 실행될 수 있는지를 표시하는 데 사용되는 하나 또는 그 이상의 제어들을 포함한다. 예를 들어, TBEGIN 명령은 A 제어와 F 제어를 포함하고, 이들은 각각은 만일 적절한 수정이 허용되지 않을 경우 0으로 세트되고, 만일 상기 수정이 허용될 경우 1로 세트된다. 추가로, TBEGINC 명령은 위와 유사하게 0 또는 1로 세트되는 A 제어를 포함한다. 이 제어들의 값들은, TRANSACTION BEGIN 명령의 실행에 기초하여, 위에 기술된 바와 같이, A 제어의 유효 값 및/또는 F 제어의 유효 값을 판정하는 데 사용된다(단계 1402).
어떤 시점에서, 트랜잭션이 종료될 수 있다(단계 1404). 이것이 최외부 트랜잭션의 종료(즉, 트랜잭션들의 내포의 최외부 트랜잭션 또는 트랜잭션들의 내포의 일부가 아닌 트랜잭션의 종료)인지에 대한 판정이 이루어진다(단계 1406). 만일 그것이 최외부 트래내잭션의 종료가 아니면, 하나 또는 그 이상의 유효 제어들이 업데이트된다(단계 1408). 한 예에서, 상기 제어들은 종료된 트랜잭션의 제어들을을 포함하지 않고 유효 제어들을 다시 산출함으로써 업데이트된다. 질의 1406으로 돌아가서, 만일 그것이 최외부 트랜잭션의 종료이면, 처리는 완료된다.
위에 기술된 것은 특정한 명령들의 트랜잭션 실행 내에서 선택적으로 제어하는 메커니즘이다. 예를 들면, 특정한 유형의 명령의 실행이 허용되는지, 그에 따라서 그것의 각각의 레지스터들/컨텍스트를 수정하는 것이 허용되는지를 표시하는 제어들이 제공된다. 예를 들어, 액세스 레지스터들이 수정될 수 있는지, 그에 따라서 그러한 레지스터들을 수정하는 명령이 실행될 수 있는지를 표시하는 제어가 제공된다. 추가 예로서, 부동 소수점 연산들이 수행될수 있는지를 표시하는 제어가 제공된다.
추가로, 위에 제공된 것은 로킹(locking) 같은 고전적인(개괄적인) 직렬화 없이 메모리 내 다중의 비인접 객체들을 업데이트하는 효율적인 수단이며, 이것은 유의미한 멀티프로세서 성능 향상의 가능성을 제공한다. 즉, 다중의 비인접 객체들은 로크(locks)와 세마포어(semaphores) 같은 고전적인 기술들에 의해 제공되는 더 개괄적인 스토리지-액세스 배열의 실행 없이 업데이트된다. 추론적 실행은 번거로운 복구 셋업 없이 제공되고, 제약 트랜잭션들은 단순하고 작은 공간의 업데이트를 위해 제공된다.
트랜잭션 실행은 부분 인라이닝(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을 사용하여 안전하게 중단될 수 있다.
로크 생략의 경우, 그 사용의 한 예가 도 15a~15b와 아래에 제공되는 코드 조각(code fragment)을 참조하여 기술된다.
도 15a는 복수의 큐 엘리먼트들(1502a~1502d)의 이중 연결 목록(1500)을 도시한다. 새로운 큐 엘리먼트(1502e)가 큐 엘리먼트들의 이중 연결 목록(1500)으로 삽입될 예정이다. 각 큐 엘리먼트(1502a~1502e)는 전방향 포인터(1504a~1504e)와 역방향 포인터(1506a~1506e)를 포함한다. 도 15b에서 보는 바와 같이, 큐 엘리먼트(1502e)를 큐 엘리먼트(1502b)와 큐 엘리먼트(1502c) 사이에 추가하기 위해, (1) 역방향 포인터(1506e)가 큐 엘리먼트(1502b)를 가리키도록 세트되고, (2) 전방향 포인터(1504e)가 큐 엘리먼트(1502c)를 가리키도록 세트되고, (3) 역방향 포인터(1506c)가 큐 엘리먼트(1502e)를 가리키도록 세트되고, 그리고 (4) 전방향 포인터(1504b)가 큐 엘리먼트(1502e)를 가리키도록 세트된다.
아래는 도 15a~15b에 대응하는 코드 조각 예시이다:
* 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) 매체일 수 있다.
이제 도 16를 참조하면, 한 예에서, 컴퓨터 프로그램 제품(1600)은 예를 들어 하나 또는 그 이상의 비-일시적인(non-transitory) 컴퓨터 판독 가능 스토리지 매체(1602)를 포함하며 이 매체상에 컴퓨터 판독 가능 프로그램 코드 수단 또는 로직(1604)을 저장하여 하나 또는 그 이상의 실시 예들을 제공 및 가능하게 만든다.
컴퓨터 판독 가능 매체상에 구현된 프로그램 코드는 무선, 유선, 광섬유 케이블, 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 컨트롤러들을 통해서 상기 시스템에 결합될 수 있다. 네트워크 어댑터 또한 상기 시스템에 결합되어 상기 데이터 처리 시스템이 중개하는 사설 또는 공공 네트워크를 통해서 기타 데이터 처리 시스템 또는 원격 포인터 또는 스토리지 디바이스에 결합되는 것을 가능하게 한다. 모뎀, 케이블 모뎀, 및 이더넷 카드는 이용 가능한 네트워크 어댑터의 단지 일부 예이다.
도 17을 참조하면, 하나 또는 그 이상의 실시 예들을 구현하기 위한 호스트 컴퓨터 시스템(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) 요건들을 갖지 않는다.
명령들과 데이터 오퍼랜드들에 대한 별개의 캐시들을 구현하는 디바이스들상에서, 만일 프로그램이 어떤 캐시 라인에 저장되고 그 캐시 라인으로부터 명령들이 후속적으로 페치되면, 그 저장이 후속적으로 페치되는 명령들을 변경하는지 여부와 상관 없이, 상당한 지연을 겪게 될 것이다.
한 예에서, 실시 예들은 소프트웨어로 실시될 수 있다(이 소프트웨어는 때때로 라이선스된 내부 코드, 펌웨어, 마이크로-코드, 밀리-코드, 피코-코드 등으로 불리며, 이들 중 어떤 것이든 하나 또는 그 이상의 실시 예들에 부합할 것이다). 도 17을 참조하면, 하나 또는 그 이상의 특징들을 구현하는 소프트웨어 프로그램 코드는 CD-ROM 드라이브, 테이프 드라이브 또는 하드 드라이브와 같은 장기 스토리지(long-term storage) 매체 디바이스들(5011)로부터 호스트 시스템(5000)의 프로세서(5001)에 의해 액세스된다. 소프트웨어 프로그램 코드는 디스켓, 하드 드라이브, 또는 CD-ROM과 같은 데이터 처리 시스템에 사용할 용도로 알려진 여러 가지 매체들 중 어느 하나에 구현될 수 있다. 코드는 그러한 매체상에 배포되거나, 또는 한 컴퓨터 시스템의 컴퓨터 메모리(5002) 또는 스토리지의 사용자들로부터 네트워크(5010)를 통해서 다른 컴퓨터 시스템들에, 그러한 다른 시스템들의 사용자에 의해 사용될 용도로 배포될 수 있다.
소프트웨어 프로그램 코드는 여러 가지 컴퓨터 컴포넌트들의 기능과 상호작용(interaction) 및 하나 또는 그 이상의 애플리케이션 프로그램들을 제어하는 운영체제를 포함한다. 프로그램 코드는 보통으로 스토리지 매체 디바이스(5011)로부터 상대적으로 더 고속의 컴퓨터 스토리지(5002)―이것은 프로세서(5001)에 의한 처리에 이용 가능함―로 페이지된다. 메모리 내 소프트웨어 프로그램 코드를 물리적 매체상에 구현하는 기술과 방법, 및/또는 네트워크들을 통해서 소프트웨어 코드를 배포하는 기술과 방법은 잘 알려져 있으며 여기에서는 더 논의하지 않을 것이다. 프로그램 코드는, 유형의 매체(전자 메모리 모듈들(RAM), 플래시 메모리, 컴팩트 디스크(CDs), DVDs, 자기 테이프 등을 포함하나, 이러한 것들로 한정되지 않음)상에 생성되고 저장될 때, 흔히 "컴퓨터 프로그램 제품"으로 불린다. 컴퓨터 프로그램 제품 매체는 통상적으로 처리 회로에 의해 판독 가능하며, 컴퓨터 시스템에서 처리 회로에 의해 실행하기 위해 판독 가능한 것이 바람직하다.
도 18은 하나 또는 그 이상의 실시 예들이 실시될 수 있는 대표적인 워크스테이션 또는 서버 하드웨어 시스템을 예시한다. 도 18의 시스템(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)에서 클라이언트가 될 수 있다. 이들 모든 구성들과 적절한 통신 하드웨어 및 소프트웨어는 이 기술분야에서 알려져 있다.
도 19는 하나 또는 그 이상의 실시 예들이 실시될 수 있는 데이터 처리 네트워크(5040)를 예시한다. 데이터 처리 네트워크(5040)는 무선 네트워크와 유선 네트워크 같은 복수의 개별 네트워크들을 포함할 수 있으며, 이들의 각각은 복수의 개별 워크스테이션들(5041, 5042, 5043, 5044)을 포함할 수 있다. 또한, 이 기술분야에서 통상의 지식을 가진 자들은 인식할 수 있는 바와 같이, 하나 또는 그 이상의 LAN들이 포함될 수 있으며, 여기에서 LAN은 호스트 프로세서에 결합된 복수의 지능형(intelligent) 워크스테이션들을 포함할 수 있다.
계속해서 도 19를 참조하면, 네트워크들은 또한 게이트웨이 컴퓨터 (클라이언트 서버 5046) 또는 애플리케이션 서버(데이터 저장소를 액세스할 수 있고 또한 워크스테이션 5045로부터 직접 액세스될 수 있는 원격 서버 5048)와 같은 메인프레임 컴퓨터들 또는 서버들을 포함할 수 있다. 게이트웨이 컴퓨터(5046)는 각 개별 네트워크로의 진입점(a point of entry) 역할을 한다. 게이트웨이는 하나의 네트워킹 프로토콜을 또 하나의 네트워킹 프로토콜에 연결할 때 필요하다. 게이트웨이(5046)는 바람직하게는 통신 링크를 통해 또 하나의 네트워크(예를 들면 인터넷 5047)에 결합될 수 있다. 게이트웨이(5046)는 또한 통신 링크를 사용하여 하나 또는 그 이상의 워크스테이션들(5041, 5042, 5043, 5044)에 직접 결합될 수 있다. 게이트웨이 컴퓨터는 인터내셔널 비지네스 머신즈 코포레이션에서 입수 가능한 IBM eServer System z 서버를 활용하여 구현될 수 있다.
도 18과 도 19를 동시에 참조하면, 하나 또는 그 이상의 특징들을 구현할 수 있는 소프트웨어 프로그래밍 코드(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-캐시)로 나뉜다.
도 20을 참조하면, 예시적인 프로세서 실시 예가 프로세서(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)을 갖는다. 도 21a를 참조하면, 실행 유닛(5057)은 인터페이싱 로직(5071)을 거쳐서 아키텍처화된 범용 레지스터들(5059), 디코드/디스패치 유닛(5056), 로드 저장 유닛(5060), 및 기타(5065) 프로세서 유닛들과 통신할 수 있다(5071). 실행 유닛(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(Kilo-byte) 블록으로 기술된다.
도 21b를 참조하면, 분기 명령을 실행하기 위한 분기 명령 정보는 통상적으로 분기 유닛(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) 퍼실리티가 전형적인 예이며, 여기서 명령은 기준 레지스터, 인덱스 레지스터 및 즉시 필드(변위 필드)―이것들은 예를 들어 메모리에서 오퍼랜드의 주소를 제공하기 위해 함께 더해짐―를 정의한다. 만일 다르게 표시되지 않는다면, 여기서의 위치는 통상적으로 메인 메모리(메인 스토리지) 내 위치를 암시한다.
도 21c를 참조하면, 프로세서는 로드/저장 유닛(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, 도 20)은 프로세서에 주변기기들에 연결하기 위한 수단을 제공하는데, 예를 들어, 그 주변기기에는 테이프, 디스크, 프린터, 디스플레이, 및 네트워크가 포함된다. 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)" 등이 포함되나, 이러한 것들로 한정되는 것은 아님 ― 이 기술 분야에서 통상의 지식을 가진 자들이 이용할 수 있는 목표 머신에 대한 다른 머신을 위해 아키텍처화된 명령 포맷의 에뮬레이션을 달성하는 알려진 여러 가지 방법들을 예시하고 있다.
도 22에서는, 호스트 아키텍처의 호스트 컴퓨터 시스템(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 (10)
- 컴퓨팅 환경의 트랜잭션들 내에서 명령들의 실행을 제어하기 위한 방법에 있어서, 트랜잭션은 선택된 트랜잭션이 완료될 때까지 메인 메모리에 대한 트랜잭션 저장을 커밋(commit)하는 것을 효과적으로 지연시키고, 상기 방법은:
프로세서에 의해, 실행하기 위한 트랜잭션 시작 기계어 명령(machine instruction)을 획득하는 단계를 포함하되, 상기 트랜잭션 시작 기계어 명령은 컴퓨터 아키텍처에 따라 컴퓨터 실행을 위해 정의되며, 상기 트랜잭션 시작 기계어 명령은:
트랜잭션 시작 연산을 명시하기 위한 연산 코드; 및
트랜잭션 처리 시에 하나 또는 그 이상의 유형의 명령들의 실행을 제어하는 데 사용될 적어도 하나의 제어(control)를 포함하고, 상기 하나 또는 그 이상의 유형의 명령들은: 명시된 부동 소수점 명령들 또는 액세스 레지스터로 알려진 레지스터의 유형을 수정하는 명령들을 포함하고, 상기 액세스 레지스터는 주소 변환에 사용될 주소 공간 제어 엘리먼트의 간접 명세(indirect specification)를 포함하고; 그리고
상기 방법은 상기 프로세서에 의해 상기 트랜잭션 시작 기계어 명령을 실행하는 단계를 포함하되, 상기 실행하는 단계는:
트랜잭션을 개시하는 단계; 및
제1 값을 결정하기 위해 상기 트랜잭션 시작 기계어 명령에 명시된 상기 적어도 하나의 제어 중 제1 제어를 사용하는 단계를 포함하고, 상기 제1 값은 제1 유형의 명령의 트랜잭션 내의 실행을 제어하고, 상기 제1 유형의 명령은 부동 소수점 명령 또는 액세스 레지스터를 수정하는 명령을 포함하고, 상기 제1 제어는 액세스 레지스터 수정 허용 제어 또는 부동 소수점 연산 허용 제어 중 하나이고, 상기 제1 제어가 액세스 레지스터 수정 허용 제어인 것에 기초하여 상기 제1 유형은 액세스 레지스터로 알려진 레지스터의 유형을 수정하는 명령들을 포함하고, 상기 액세스 레지스터는 주소 변환에 사용될 특정 주소 공간에 대한 변환 테이블을 지정하는 주소 공간 제어 엘리먼트의 간접 명세를 포함하고, 상기 액세스 레지스터 수정 허용 제어는 상기 트랜잭션이 액세스 레지스터를 수정하는 명령을 실행하도록 허용되는지를 표시하는 데 사용되고; 그리고 상기 제1 제어가 부동 소수점 연산 허용 제어인 것에 기초하여 상기 제1 유형은 명시된 부동 소수점 명령들을 포함하고, 상기 부동 소수점 연산 허용 제어는 상기 트랜잭션이 상기 명시된 부동 소수점 명령들을 실행하도록 허용되는지를 표시하는 데 사용되는, 방법. - 제1항에 있어서, 상기 제1 제어는 액세스 레지스터 수정 허용 제어이고, 상기 사용하는 단계는 상기 트랜잭션 시작 기계어 명령이 포함된 현재 트랜잭션들의 내포 레벨에 대한 상기 트랜잭션 시작 기계어 명령의 액세스 레지스터 수정 허용 제어와 외부 내포 레벨들(있을 경우)의 논리적 AND(논리곱)를 수행하여 상기 제1 값을 결정하는 단계를 포함하되, 상기 제1 값은 상기 트랜잭션이 액세스 레지스터를 수정하는 명령을 실행하도록 허용되는지를 표시하는 유효 액세스 레지스터 수정 허용 제어를 포함하는, 방법.
- 제1항에 있어서, 상기 제1 제어는 부동 소수점 연산 허용 제어이고, 상기 사용하는 단계는 상기 트랜잭션 시작 기계어 명령이 포함된 현재 트랜잭션들의 내포 레벨에 대한 상기 트랜잭션 시작 기계어 명령의 부동 소수점 연산 허용 제어와 외부 내포 레벨들(있을 경우)의 논리적 AND(논리곱)를 수행하여 상기 제1 값을 결정하는 단계를 포함하되, 상기 제1 값은 상기 트랜잭션이 상기 명시된 부동 소수점 명령들을 실행하도록 허용되는지를 표시하는 유효 부동 소수점 연산 허용 제어를 포함하는, 방법.
- 제1항에 있어서, 상기 제1 제어는 액세스 레지스터 수정 허용 제어이고 상기 제1 유형은 액세스 레지스터로 알려진 레지스터의 유형을 수정하는 명령들을 포함하되, 상기 액세스 레지스터는 주소 변환에 사용될 주소 공간 제어 엘리먼트의 간접 명세를 포함하고, 상기 액세스 레지스터 수정 허용 제어는 상기 트랜잭션이 액세스 레지스터를 수정하는 명령을 실행하도록 허용되는지를 표시하는 데 사용되고, 그리고 상기 적어도 하나의 제어는 제2 제어를 더 포함하되, 상기 제2 제어는 상기 트랜잭션이 명시된 부동 소수점 명령들을 실행하도록 허용되는지를 표시하는 데 사용될 부동 소수점 연산 허용 제어를 포함하는, 방법.
- 제1항에 있어서, 상기 트랜잭션은 비제약 트랜잭션을 포함하고, 상기 적어도 하나의 제어는 명시된 부동 소수점 명령들의 실행을 제어할 부동 소수점 연산 허용 제어와 액세스 레지스터들을 수정하는 명령들의 실행을 제어할 액세스 레지스터 수정 허용 제어를 포함하되, 액세스 레지스터는 주소 변환에 사용될 주소 공간 제어 엘리먼트의 간접 명세를 포함하는, 방법.
- 제1항에 있어서, 상기 트랜잭션은 제약 트랜잭션을 포함하고, 상기 적어도 하나의 제어는 액세스 레지스터들을 수정하는 명령들의 실행을 제어할 액세스 레지스터 수정 허용 제어를 포함하되, 액세스 레지스터는 주소 변환에 사용될 주소 공간 제어 엘리먼트의 간접 명세를 포함하는, 방법.
- 제1항에 있어서, 상기 방법은:
상기 프로세서에 의해, 상기 트랜잭션 시작 기계어 명령의 실행에 의해 개시된 트랜잭션 내에서 명령을 획득하는 단계;
상기 프로세서에 의해, 상기 적어도 하나의 제어에 기초하여 산출된 적어도 하나의 값에 기초하여 상기 명령이 실행 금지될 명령인지를 결정하는 단계; 및
상기 결정하는 단계가 상기 명령은 실행 금지되지 않는다고 결정하는 것에 기초하여 상기 명령을 실행하는 단계를 더 포함하는, 방법. - 제1항에 있어서, 상기 트랜잭션은 트랜잭션들의 내포의 일부이고, 상기 방법은, 제1 값을 결정하기 위해 상기 트랜잭션 시작 기계어 명령에 명시된 상기 적어도 하나의 제어 중 제1 제어를 사용한 후, 상기 트랜잭션들의 내포에 포함된 트랜잭션의 종결에 기초하여 상기 제1 값을 다시 결정하는 단계를 더 포함하는, 방법.
- 컴퓨팅 환경의 트랜잭션들 내에서 명령들의 실행을 제어하기 위한 방법을 수행하도록 구성된 컴퓨터 시스템으로서, 트랜잭션은 선택된 트랜잭션이 완료될 때까지 메인 메모리에 대한 트랜잭션 저장을 커밋(commit)하는 것을 효과적으로 지연시키고, 상기 컴퓨터 시스템은:
메모리 및
상기 메모리와 통신하는 프로세서를 포함하고, 상기 방법은:
프로세서에 의해, 실행하기 위한 트랜잭션 시작 기계어 명령(machine instruction)을 획득하는 단계를 포함하되, 상기 트랜잭션 시작 기계어 명령은 컴퓨터 아키텍처에 따라 컴퓨터 실행을 위해 정의되며, 상기 트랜잭션 시작 기계어 명령은:
트랜잭션 시작 연산을 명시하기 위한 연산 코드; 및
트랜잭션 처리 시에 하나 또는 그 이상의 유형의 명령들의 실행을 제어하는 데 사용될 적어도 하나의 제어(control)를 포함하고, 상기 하나 또는 그 이상의 유형의 명령들은: 명시된 부동 소수점 명령들 또는 액세스 레지스터로 알려진 레지스터의 유형을 수정하는 명령들을 포함하고, 상기 액세스 레지스터는 주소 변환에 사용될 주소 공간 제어 엘리먼트의 간접 명세(indirect specification)를 포함하고; 그리고
상기 방법은 상기 프로세서에 의해 상기 트랜잭션 시작 기계어 명령을 실행하는 단계를 포함하되, 상기 실행하는 단계는:
트랜잭션을 개시하는 단계; 및
제1 값을 결정하기 위해 상기 트랜잭션 시작 기계어 명령에 명시된 상기 적어도 하나의 제어 중 제1 제어를 사용하는 단계를 포함하고, 상기 제1 값은 제1 유형의 명령의 트랜잭션 내의 실행을 제어하고, 상기 제1 유형의 명령은 부동 소수점 명령 또는 액세스 레지스터를 수정하는 명령을 포함하고, 상기 제1 제어는 액세스 레지스터 수정 허용 제어 또는 부동 소수점 연산 허용 제어 중 하나이고, 상기 제1 제어가 액세스 레지스터 수정 허용 제어인 것에 기초하여 상기 제1 유형은 액세스 레지스터로 알려진 레지스터의 유형을 수정하는 명령들을 포함하고, 상기 액세스 레지스터는 주소 변환에 사용될 특정 주소 공간에 대한 변환 테이블을 지정하는 주소 공간 제어 엘리먼트의 간접 명세를 포함하고, 상기 액세스 레지스터 수정 허용 제어는 상기 트랜잭션이 액세스 레지스터를 수정하는 명령을 실행하도록 허용되는지를 표시하는 데 사용되고; 그리고 상기 제1 제어가 부동 소수점 연산 허용 제어인 것에 기초하여 상기 제1 유형은 명시된 부동 소수점 명령들을 포함하고, 상기 부동 소수점 연산 허용 제어는 상기 트랜잭션이 상기 명시된 부동 소수점 명령들을 실행하도록 허용되는지를 표시하는 데 사용되는, 컴퓨터 시스템. - 처리회로에 의해서 판독가능하고, 컴퓨팅 환경의 트랜잭션들 내에서 명령들의 실행을 제어하기 위한 방법을 수행하기 위해 처리회로에 의한 실행을 위한 명령들을 저장하는 비-일시적인 컴퓨터 판독가능 스토리지 매체로서, 트랜잭션은 선택된 트랜잭션이 완료될 때까지 메인 메모리에 대한 트랜잭션 저장을 커밋(commit)하는 것을 효과적으로 지연시키고, 상기 방법은:
프로세서에 의해, 실행하기 위한 트랜잭션 시작 기계어 명령(machine instruction)을 획득하는 단계를 포함하되, 상기 트랜잭션 시작 기계어 명령은 컴퓨터 아키텍처에 따라 컴퓨터 실행을 위해 정의되며, 상기 트랜잭션 시작 기계어 명령은:
트랜잭션 시작 연산을 명시하기 위한 연산 코드; 및
트랜잭션 처리 시에 하나 또는 그 이상의 유형의 명령들의 실행을 제어하는 데 사용될 적어도 하나의 제어(control)를 포함하고, 상기 하나 또는 그 이상의 유형의 명령들은: 명시된 부동 소수점 명령들 또는 액세스 레지스터로 알려진 레지스터의 유형을 수정하는 명령들을 포함하고, 상기 액세스 레지스터는 주소 변환에 사용될 주소 공간 제어 엘리먼트의 간접 명세(indirect specification)를 포함하고; 그리고
상기 방법은 상기 프로세서에 의해 상기 트랜잭션 시작 기계어 명령을 실행하는 단계를 포함하되, 상기 실행하는 단계는:
트랜잭션을 개시하는 단계; 및
제1 값을 결정하기 위해 상기 트랜잭션 시작 기계어 명령에 명시된 상기 적어도 하나의 제어 중 제1 제어를 사용하는 단계를 포함하고, 상기 제1 값은 제1 유형의 명령의 트랜잭션 내의 실행을 제어하고, 상기 제1 유형의 명령은 부동 소수점 명령 또는 액세스 레지스터를 수정하는 명령을 포함하고, 상기 제1 제어는 액세스 레지스터 수정 허용 제어 또는 부동 소수점 연산 허용 제어 중 하나이고, 상기 제1 제어가 액세스 레지스터 수정 허용 제어인 것에 기초하여 상기 제1 유형은 액세스 레지스터로 알려진 레지스터의 유형을 수정하는 명령들을 포함하고, 상기 액세스 레지스터는 주소 변환에 사용될 특정 주소 공간에 대한 변환 테이블을 지정하는 주소 공간 제어 엘리먼트의 간접 명세를 포함하고, 상기 액세스 레지스터 수정 허용 제어는 상기 트랜잭션이 액세스 레지스터를 수정하는 명령을 실행하도록 허용되는지를 표시하는 데 사용되고; 그리고 상기 제1 제어가 부동 소수점 연산 허용 제어인 것에 기초하여 상기 제1 유형은 명시된 부동 소수점 명령들을 포함하고, 상기 부동 소수점 연산 허용 제어는 상기 트랜잭션이 상기 명시된 부동 소수점 명령들을 실행하도록 허용되는지를 표시하는 데 사용되는, 비-일시적인 컴퓨터 판독가능 스토리지 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/524,898 | 2012-06-15 | ||
US13/524,898 US9772854B2 (en) | 2012-06-15 | 2012-06-15 | Selectively controlling instruction execution in transactional processing |
PCT/IB2013/054813 WO2013186722A2 (en) | 2012-06-15 | 2013-06-12 | Selectively controlling instruction execution in transactional processing |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20150013745A KR20150013745A (ko) | 2015-02-05 |
KR101625325B1 true KR101625325B1 (ko) | 2016-05-27 |
Family
ID=49756862
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020147034720A KR101625325B1 (ko) | 2012-06-15 | 2013-06-12 | 트랜잭션 처리 시에 명령 실행의 선택적 제어 |
Country Status (17)
Country | Link |
---|---|
US (4) | US9772854B2 (ko) |
EP (1) | EP2862071B1 (ko) |
JP (1) | JP6253065B2 (ko) |
KR (1) | KR101625325B1 (ko) |
CN (1) | CN104335177B (ko) |
AU (1) | AU2013276134B2 (ko) |
BR (1) | BR112014031354B1 (ko) |
CA (1) | CA2874238C (ko) |
DK (1) | DK2862071T3 (ko) |
ES (1) | ES2717480T3 (ko) |
HK (1) | HK1207447A1 (ko) |
IL (1) | IL236246B (ko) |
MX (1) | MX347773B (ko) |
SG (1) | SG11201407470YA (ko) |
TW (1) | TWI564808B (ko) |
WO (1) | WO2013186722A2 (ko) |
ZA (1) | ZA201408076B (ko) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130339680A1 (en) | 2012-06-15 | 2013-12-19 | International Business Machines Corporation | Nontransactional store instruction |
US9772854B2 (en) | 2012-06-15 | 2017-09-26 | International Business Machines Corporation | Selectively controlling instruction execution in transactional processing |
US9384004B2 (en) | 2012-06-15 | 2016-07-05 | International Business Machines Corporation | Randomized testing within transactional execution |
US9361115B2 (en) | 2012-06-15 | 2016-06-07 | International Business Machines Corporation | Saving/restoring selected registers in transactional processing |
US9436477B2 (en) | 2012-06-15 | 2016-09-06 | International Business Machines Corporation | Transaction abort instruction |
US9448796B2 (en) | 2012-06-15 | 2016-09-20 | International Business Machines Corporation | Restricted instructions in 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 |
US9740549B2 (en) | 2012-06-15 | 2017-08-22 | International Business Machines Corporation | Facilitating transaction completion subsequent to repeated aborts of the transaction |
US10437602B2 (en) | 2012-06-15 | 2019-10-08 | International Business Machines Corporation | Program interruption filtering in transactional execution |
US10061746B2 (en) * | 2014-09-26 | 2018-08-28 | Intel Corporation | Instruction and logic for a vector format for processing computations |
US20160179550A1 (en) * | 2014-12-23 | 2016-06-23 | Intel Corporation | Fast vector dynamic memory conflict detection |
GB2533604B (en) * | 2014-12-23 | 2021-07-14 | Advanced Risc Mach Ltd | Instruction sampling within transactions |
GB2533650B (en) | 2014-12-23 | 2021-07-21 | Advanced Risc Mach Ltd | Debugging data processing transactions |
US10303477B2 (en) * | 2015-06-26 | 2019-05-28 | Intel Corporation | Persistent commit processors, methods, systems, and instructions |
CN106649143B (zh) | 2015-10-29 | 2020-06-26 | 阿里巴巴集团控股有限公司 | 一种访问缓存的方法、装置及电子设备 |
US9471313B1 (en) | 2015-11-25 | 2016-10-18 | International Business Machines Corporation | Flushing speculative instruction processing |
US10235170B2 (en) * | 2016-09-30 | 2019-03-19 | International Business Machines Corporation | Decimal load immediate instruction |
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 |
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 |
TWI767304B (zh) * | 2019-08-22 | 2022-06-11 | 美商谷歌有限責任公司 | 用於編譯針對同步處理器之程式之方法及系統 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100023703A1 (en) | 2008-07-28 | 2010-01-28 | Christie David S | Hardware transactional memory support for protected and unprotected shared-memory accesses in a speculative section |
US7966459B2 (en) | 2007-12-31 | 2011-06-21 | Oracle America, Inc. | System and method for supporting phased transactional memory modes |
Family Cites Families (242)
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 |
GB2256514B (en) | 1991-05-21 | 1994-11-16 | Digital Equipment Corp | Commitment ordering for guaranteeing serializability across distributed transactions |
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 |
US5470441A (en) | 1994-03-07 | 1995-11-28 | Phillips Petroleum Company | Packed column vaporizer and vaporizing process |
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 |
EP0870228B1 (en) | 1995-10-06 | 2003-08-13 | Advanced Micro Devices, Inc. | Unified multi-function operation scheduler for out-of-order execution in a superscalar processor |
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 |
EP0992907B1 (en) | 1998-10-06 | 2005-09-28 | Texas Instruments Inc. | Trace fifo management |
EP0992916A1 (en) | 1998-10-06 | 2000-04-12 | Texas Instruments Inc. | Digital signal processor |
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 |
US20020147969A1 (en) | 1998-10-21 | 2002-10-10 | Richard A. Lethin | 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 |
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 |
US6738892B1 (en) | 1999-10-20 | 2004-05-18 | Transmeta Corporation | Use of enable bits to control execution of selected instructions |
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 |
US7246123B2 (en) | 2000-08-04 | 2007-07-17 | Carr Scott Software Incorporated | Automatic transaction management |
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 |
US6862664B2 (en) | 2003-02-13 | 2005-03-01 | Sun Microsystems, Inc. | Method and apparatus for avoiding locks by speculatively 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 |
US7398359B1 (en) | 2003-04-30 | 2008-07-08 | Silicon Graphics, Inc. | System and method for performing memory operations in a computing system |
CA2472887A1 (en) | 2003-06-30 | 2004-12-30 | Gravic, Inc. | Methods for ensuring referential integrity in multithreaded 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 |
US8825615B2 (en) | 2004-05-11 | 2014-09-02 | Oracle International Corporation | Simplifying implementation of custom atomic transactions in a programming environment |
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 |
US7206903B1 (en) | 2004-07-20 | 2007-04-17 | Sun Microsystems, Inc. | Method and apparatus for releasing memory locations during transactional execution |
US7395382B1 (en) | 2004-08-10 | 2008-07-01 | Sun Microsystems, Inc. | Hybrid software/hardware transactional memory |
US7836280B1 (en) | 2004-09-14 | 2010-11-16 | Azul Systems, Inc. | Dynamic 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控制器及数据传输方法 |
EP1913473A1 (en) | 2005-08-01 | 2008-04-23 | Sun Microsystems, Inc. | Avoiding locks by transactionally executing critical sections |
US7870369B1 (en) | 2005-09-28 | 2011-01-11 | Oracle America, Inc. | Abort prioritization in a trace-based processor |
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 |
US7730286B2 (en) | 2005-12-30 | 2010-06-01 | Intel Corporation | Software assisted nested hardware transactions |
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 |
US8065499B2 (en) | 2006-02-22 | 2011-11-22 | Oracle America, Inc. | Methods and apparatus to implement parallel transactions |
US8099538B2 (en) | 2006-03-29 | 2012-01-17 | Intel Corporation | Increasing functionality of a reader-writer lock |
US8180967B2 (en) | 2006-03-30 | 2012-05-15 | Intel Corporation | Transactional memory virtualization |
US8180977B2 (en) | 2006-03-30 | 2012-05-15 | Intel Corporation | Transactional memory in out-of-order processors |
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 |
EP1918540B1 (en) | 2006-11-06 | 2009-08-26 | GM Global Technology Operations, Inc. | Operating method for a particulate filter, data processor program product and control apparatus therefore |
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 |
US8065491B2 (en) | 2007-12-30 | 2011-11-22 | Intel Corporation | Efficient non-transactional write barriers for strong atomicity |
US8706982B2 (en) | 2007-12-30 | 2014-04-22 | Intel Corporation | Mechanisms for strong atomicity in a transactional memory system |
US8140497B2 (en) | 2007-12-31 | 2012-03-20 | Oracle America, Inc. | System and method for implementing nonblocking zero-indirection transactional memory |
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 |
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 |
US8161273B2 (en) | 2008-02-26 | 2012-04-17 | Oracle America, Inc. | Method and apparatus for programmatically rewinding a register inside a transaction |
US8688628B2 (en) | 2008-02-29 | 2014-04-01 | Red Hat, Inc. | Nested queued transaction manager |
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 |
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 |
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 |
US10210018B2 (en) | 2008-12-24 | 2019-02-19 | Intel Corporation | Optimizing quiescence in a software transactional memory (STM) system |
US9274855B2 (en) * | 2008-12-24 | 2016-03-01 | Intel Corporation | Optimization for safe elimination of weak atomicity overhead |
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 |
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 |
CN102460376B (zh) * | 2009-06-26 | 2016-05-18 | 英特尔公司 | 无约束事务存储器(utm)系统的优化 |
US8229907B2 (en) | 2009-06-30 | 2012-07-24 | Microsoft Corporation | Hardware accelerated transactional memory system with open nested transactions |
US8281185B2 (en) | 2009-06-30 | 2012-10-02 | Oracle America, Inc. | Advice-based feedback for transactional execution |
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 |
US8473921B2 (en) | 2009-12-15 | 2013-06-25 | Microsoft Corporation | Debugging mechanisms in a cache-based memory isolation system |
US8521995B2 (en) | 2009-12-15 | 2013-08-27 | Intel Corporation | Handling operating system (OS) transitions in an unbounded transactional memory (UTM) mode |
US8095824B2 (en) | 2009-12-15 | 2012-01-10 | Intel Corporation | Performing mode switching in an unbounded transactional memory (UTM) system |
US8316194B2 (en) | 2009-12-15 | 2012-11-20 | Intel Corporation | Mechanisms to accelerate transactions using buffered stores |
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 |
US20110161371A1 (en) * | 2009-12-29 | 2011-06-30 | Microgen Plc | Sql generation |
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 |
US8424015B2 (en) | 2010-09-30 | 2013-04-16 | International Business Machines Corporation | Transactional memory preemption mechanism |
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 |
US8788794B2 (en) * | 2010-12-07 | 2014-07-22 | Advanced Micro Devices, Inc. | Programmable atomic memory using stored atomic procedures |
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 |
US9311101B2 (en) | 2012-06-15 | 2016-04-12 | International Business Machines Corporation | Intra-instructional transaction abort handling |
US8966324B2 (en) | 2012-06-15 | 2015-02-24 | International Business Machines Corporation | Transactional execution branch indications |
US9384004B2 (en) | 2012-06-15 | 2016-07-05 | International Business Machines Corporation | Randomized testing within transactional execution |
US8880959B2 (en) | 2012-06-15 | 2014-11-04 | International Business Machines Corporation | Transaction diagnostic block |
US10437602B2 (en) | 2012-06-15 | 2019-10-08 | International Business Machines Corporation | Program interruption filtering in transactional execution |
US9317460B2 (en) | 2012-06-15 | 2016-04-19 | International Business Machines Corporation | Program event recording within a transactional environment |
US9367323B2 (en) | 2012-06-15 | 2016-06-14 | International Business Machines Corporation | Processor assist facility |
US8688661B2 (en) | 2012-06-15 | 2014-04-01 | International Business Machines Corporation | Transactional processing |
US20130339680A1 (en) | 2012-06-15 | 2013-12-19 | International Business Machines Corporation | Nontransactional store instruction |
US9448796B2 (en) | 2012-06-15 | 2016-09-20 | International Business Machines Corporation | Restricted instructions in transactional execution |
US9361115B2 (en) | 2012-06-15 | 2016-06-07 | International Business Machines Corporation | Saving/restoring selected registers in transactional processing |
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 |
US9336046B2 (en) | 2012-06-15 | 2016-05-10 | International Business Machines Corporation | Transaction abort processing |
US9442737B2 (en) | 2012-06-15 | 2016-09-13 | International Business Machines Corporation | Restricting processing within a processor to facilitate transaction completion |
US8682877B2 (en) | 2012-06-15 | 2014-03-25 | International Business Machines Corporation | Constrained transaction execution |
US9348642B2 (en) | 2012-06-15 | 2016-05-24 | International Business Machines Corporation | Transaction begin/end instructions |
US9740549B2 (en) | 2012-06-15 | 2017-08-22 | International Business Machines Corporation | Facilitating transaction completion subsequent to repeated aborts of the transaction |
-
2012
- 2012-06-15 US US13/524,898 patent/US9772854B2/en active Active
-
2013
- 2013-03-07 US US13/789,307 patent/US9395998B2/en active Active
- 2013-05-10 TW TW102116749A patent/TWI564808B/zh active
- 2013-06-12 EP EP13805110.7A patent/EP2862071B1/en active Active
- 2013-06-12 MX MX2014015288A patent/MX347773B/es active IP Right Grant
- 2013-06-12 CA CA2874238A patent/CA2874238C/en active Active
- 2013-06-12 BR BR112014031354-7A patent/BR112014031354B1/pt active IP Right Grant
- 2013-06-12 JP JP2015516730A patent/JP6253065B2/ja active Active
- 2013-06-12 KR KR1020147034720A patent/KR101625325B1/ko active IP Right Grant
- 2013-06-12 ES ES13805110T patent/ES2717480T3/es active Active
- 2013-06-12 WO PCT/IB2013/054813 patent/WO2013186722A2/en active Application Filing
- 2013-06-12 DK DK13805110.7T patent/DK2862071T3/en active
- 2013-06-12 SG SG11201407470YA patent/SG11201407470YA/en unknown
- 2013-06-12 AU AU2013276134A patent/AU2013276134B2/en active Active
- 2013-06-12 CN CN201380028444.XA patent/CN104335177B/zh active Active
-
2014
- 2014-10-29 US US14/527,068 patent/US9983881B2/en active Active
- 2014-10-29 US US14/527,188 patent/US9983882B2/en active Active
- 2014-11-04 ZA ZA2014/08076A patent/ZA201408076B/en unknown
- 2014-12-14 IL IL236246A patent/IL236246B/en active IP Right Grant
-
2015
- 2015-08-20 HK HK15108093.2A patent/HK1207447A1/xx unknown
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7966459B2 (en) | 2007-12-31 | 2011-06-21 | Oracle America, Inc. | System and method for supporting phased transactional memory modes |
US20100023703A1 (en) | 2008-07-28 | 2010-01-28 | Christie David S | Hardware transactional memory support for protected and unprotected shared-memory accesses in a speculative section |
US20100023707A1 (en) | 2008-07-28 | 2010-01-28 | Hohmuth Michael P | Processor with support for nested speculative sections with different transactional modes |
Non-Patent Citations (1)
Title |
---|
DAVE CHRISTIE 외 2명. 'Evaluation of AMD’s Advanced Synchronization Facility'. PROCEEDINGS OF THE 5TH EUROPEAN CONFERENCE ON COMPUTER SYSTEMS, EUROSYS '10, 2010.01.01 |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11080087B2 (en) | Transaction begin/end instructions | |
US10353759B2 (en) | Facilitating transaction completion subsequent to repeated aborts of the transaction | |
KR101625323B1 (ko) | 선택된 레지스터들을 트랜잭션 처리시에 세이브/복원하기 | |
KR101634481B1 (ko) | 트랜잭션 처리 | |
KR101625325B1 (ko) | 트랜잭션 처리 시에 명령 실행의 선택적 제어 | |
KR101625324B1 (ko) | 제약 트랜잭션 실행 | |
KR101599181B1 (ko) | 트랜잭션 진단 블록 | |
KR101625322B1 (ko) | 비트랜잭션 저장 명령 | |
KR101740777B1 (ko) | 프로세서 보조 퍼실리티 | |
KR101720402B1 (ko) | 트랜잭션 실행에서 프로그램 인터럽션 필터링 | |
US9442738B2 (en) | Restricting processing within a processor to facilitate transaction completion | |
WO2013186013A1 (en) | Restricted instructions in transactional execution | |
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: 20190508 Year of fee payment: 4 |