KR101442429B1 - 프로세서의 펑션 쿼리를 위한 펑션 가상화 장치 - Google Patents

프로세서의 펑션 쿼리를 위한 펑션 가상화 장치 Download PDF

Info

Publication number
KR101442429B1
KR101442429B1 KR1020137000057A KR20137000057A KR101442429B1 KR 101442429 B1 KR101442429 B1 KR 101442429B1 KR 1020137000057 A KR1020137000057 A KR 1020137000057A KR 20137000057 A KR20137000057 A KR 20137000057A KR 101442429 B1 KR101442429 B1 KR 101442429B1
Authority
KR
South Korea
Prior art keywords
function
command
instruction
operand
bit
Prior art date
Application number
KR1020137000057A
Other languages
English (en)
Other versions
KR20130034036A (ko
Inventor
단 그레이너
데미안 리오 오시섹
티모시 슬레겔
Original Assignee
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20130034036A publication Critical patent/KR20130034036A/ko
Application granted granted Critical
Publication of KR101442429B1 publication Critical patent/KR101442429B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45541Bare-metal, i.e. hypervisor runs directly on hardware
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09CCIPHERING OR DECIPHERING APPARATUS FOR CRYPTOGRAPHIC OR OTHER PURPOSES INVOLVING THE NEED FOR SECRECY
    • G09C1/00Apparatus or methods whereby a given sequence of signs, e.g. an intelligible text, is transformed into an unintelligible sequence of signs by transposing the signs or groups of signs or by replacing them by others according to a predetermined system

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Executing Machine-Instructions (AREA)
  • Multi Processors (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)
  • Debugging And Monitoring (AREA)

Abstract

멀티-펑션 명령의 선택되고 인스톨된 펑션이 은폐(hide)되어, 비록 프로세서가 그 은폐되고 인스톨된 펑션을 수행할 수 있지만, 그 은폐된 펑션의 이용가능성(availability)은 은폐되도록 한다. 그리하여 펑션들의 이용가능성을 쿼리하는 멀티-펑션 명령에 응답하여, 단지 은폐되지 않은 펑션들만이 인스톨된 것으로 보고되도록 한다.

Description

프로세서의 펑션 쿼리를 위한 펑션 가상화 장치{FUNCTION VIRTUALIZATION FACILITY FOR FUNCTION QUERY OF A PROCESSOR}
본 발명은 컴퓨터 시스템들과 관련되고 더 구체적으로는 컴퓨터 시스템 프로세서 명령 기능과 관련된다.
상표 IBM®은 미국 뉴욕 아몽크의 IBM사(International Business Machines Corporation)의 등록 상표이다. S/390, z900, z990 및 z10 및 기타 제품 명칭들은 IBM사 또는 기타 회사들의 등록 상표들 또는 제품명칭들이다.
IBM은 매우 재능있는 많은 엔지니어들의 노력을 통해 1960년대에 IBM®System 360으로 알려진 머신들에서 시작하여, 현재까지 특별한 아키텍쳐(architecture)를 만들었다. 이 특별한 아키텍쳐는, 컴퓨팅 시스템에 대한 그것의 본질적인 성질 때문에 "메인프레임(mainframe)"으로 알려지게 되었다. 메인프레임의 동작원리는 명령들의 "메인프레임" 구현(implementation) 상에서 실행될 수 있는 명령들을 기술함으로써 머신의 아키텍쳐를 설명한다. 이 명령들은 IBM 발명자들에 의해 발명되었고, 또한 "메인프레임"으로 표현되는 컴퓨팅 머신의 상태를 향상시키는 것에 대한 그들의 중요한 기여 때문에, 수년간 언급되었듯이 IBM의 동작원리(Principles of Operation)에 포함시킴으로써 중요한 기여(contributions)로서 채택되었던 것들이다. 2009년 2월에 발행된 IBM® z/Architecture® 동작원리의 제8판은 SA22-7832-07로 표준 발행 레퍼런스가 되었으며 IBM의 z10® 메인프레임 서버들 내에 편입된다.
도 1a를 참조하면, 종래의 호스트 컴퓨터 시스템(50)의 대표적인 컴포넌트들이 보여지고 있다. 또한 컴퓨터 시스템에 컴포넌트들의 다른 배치 방식이 채용될 수도 있는데, 이는 당해 기술 분야에서 잘 알려져 있다. 대표적인 호스트 컴퓨터(50)는 메인 스토어(컴퓨터 메모리(2))와 통신하는 하나 또는 그 이상의 CPU들(1) 뿐만 아니라 다른 컴퓨터들 또는 SAN들 등과 통신하기 위한 네트워크들(10) 및 스토리지 디바이스들(11)에 대한 I/O 인터페이스들을 포함한다. CPU(1)는 구성된 명령 세트(architected instruction set) 및 구성된 기능(architected functionality)을 갖는 아키텍쳐를 따른다. CPU(1)는 프로그램 주소들(가상 주소들)을 메모리의 실제 주소들로 변환하기 위한 동적 주소 변환부(Dynamic Address Translation, DAT)(3)를 가질 수 있다. DAT는 일반적으로 변환들을 캐시(cash)하기 위해 변환 룩어사이드 버퍼(translation lookaside buffer, TLB)(7)를 포함한다. 그래서 컴퓨터 메모리(2)의 블록에 대한 이후의 억세스들에 있어서 주소 변환의 지연이 생기지 않도록 한다. 일반적으로 캐시(9)는 컴퓨터 메모리(2)와 프로세서(1) 사이에 채용된다. 캐시(9)는 하나 이상의 CPU가 이용가능한 큰 캐시와, 큰 캐시와 각각의 CPU 사이에서 더 작고, 더 빠른(더 낮은 레벨의) 캐시들을 갖도록 계층적(hierarchical)일 수 있다. 몇몇 구현 예들에서, 명령 페칭(fetching) 및 데이터 억세스들을 위해 분리된 낮은 레벨의 캐시들을 제공하기 위해, 더 낮은 레벨의 캐시들은 나눠질(split) 수 있다. 일 실시예에서, 명령은 캐시(9)를 통해 명령 페치 유닛(4)에 의해 메모리(2)로부터 페치된다. 명령은 명령 디코드 유닛(6)에서 디코딩되고 명령 실행 유닛들(8)로 (몇몇 실시예들에서는 다른 명령들과 함께) 디스페치된다. 일반적으로, 몇몇 실행 유닛들(8), 예를 들어 산술 실행 유닛(arithmetic execution unit), 플로팅 포인트 실행 유닛(floating point execution unit) 및 분기 명령 실행 유닛(branch instruction execution unit)과 같은 것들이 채용된다. 명령은 실행 유닛에 의해 실행되어, 필요에 따라 명령 특정 레지스터들 또는 메모리로부터 오퍼랜드들에 억세스한다. 만약 메모리(2)로부터 오퍼랜드가 억세스(로드 또는 저장)될 것이라면, 일반적으로 로드/저장 유닛(5)은 실행되고 있는 명령의 컨트롤 하에서 그 억세스를 처리한다. 명령들은 하드웨어 회로들 또는 내부 마이크로코드(펌웨어) 또는 이것들의 조합에 의해 실행될 수 있다.
도 1b에는 종래의 에뮬레이트된 호스트 컴퓨터 시스템(12)의 일 예가 제공되는데, 여기서는 호스트 아키텍쳐의 호스트 컴퓨터 시스템(50)을 에뮬레이트한다. 에뮬레이트된 호스트 컴퓨터 시스템(12)에서, 호스트 프로세서(CPU)(1)는 에뮬레이트된 호스트 프로세서(또는 가상 호스트 프로세서)이고 호스트 컴퓨터(50)의 프로세서(1)의 네이티브 명령 세트 아키텍쳐(native instruction set architecture)와는 다른 네이티브 명령 세트 아키텍쳐를 갖는 에뮬레이션 프로세서(27)를 포함한다. 에뮬레이트된 호스트 컴퓨터 시스템(21)은 에뮬레이션 프로세서(27)가 억세스가능한 메모리(22)를 갖는다. 실시예에서, 메모리(22)는 호스트 컴퓨터 메모리 부분(2)과 에뮬레이션 루틴들 부분(23)으로 파티션된다. 호스트 컴퓨터 메모리(2)는 호스트 컴퓨터 아키텍쳐에 따라 에뮬레이트된 호스트 컴퓨터(21)의 프로그램들이 이용할 수 있다. 에뮬레이션 프로세서(27)는 에뮬레이트된 프로세서(1)의 명령 이외의 아키텍쳐의 구성된 명령 세트의 네이티브 명령들 - 이 네이티브 명령들은 에뮬레이션 루틴들 메모리(23)로부터 획득됨 - 을 실행하며, 시퀀스 & 억세스/디코드 루틴 - 이는 억세스되는 호스트 명령의 펑션을 에뮬레이트하기 위해 네이티브 명령 실행 루틴을 결정하도록 억세스되는 호스트 명령(들)을 디코딩할 수 있음 - 에서 획득되는 하나 또는 그 이상의 명령(들)을 채용함으로써 호스트 컴퓨터 메모리(2)에서의 프로그램으로부터 실행하기 위한 호스트 명령을 억세스할 수 있다. 호스트 컴퓨터 시스템(50) 아키텍쳐를 위해 정의되는 다른 장치들(facilities)은 구성된 장치 루틴들(Architected Facilities Routines)에 의해 에뮬레이트될 수 있는데, 이러한 것들에는 범용 레지스터들(General Purpose Registers), 컨트롤 레지스터들(Control Registers), 동적 주소 변환(Dynamic Address Translation) 및 I/O 서브시스템(Subsystem) 지원 및 프로세서 캐시 등과 같은 장치들이 포함된다. 에뮬레이션 루틴들(Emulation Routines)은 또한 에뮬레이션 프로세서(27)(예를 들어, 범용 레지스터들 및 가상 주소들의 동적 변환)에서 이용가능한 펑션들을 이용하여 에뮬레이션 루틴들의 성능을 향상시킬 수 있다. 또한 특별한 하드웨어(Special Hardware) 및 오프-로드 엔진들(Off-Load Engines)이 제공되어 호스트 컴퓨터(50)의 펑션을 에뮬레이팅함에 있어서 프로세서(27)를 지원할 수 있다.
메인프레임에서, 구성된 머신 명령들은 프로그래머들, 통상적으로 오늘날 "C" 프로그래머들에 의해, 흔히 컴플라이어 어플리케이션(complier application)을 통해 사용되고 있다. 스토리지 매체에 저장되는 이들 명령들은 원래(natively) z/Architecture IBM 서버에서 또는 이와는 다르게 다른 아키텍쳐들을 실행하는 머신들에서 실행될 수 있다. 그것들은 기존의 그리고 장래의 IBM 메인프레임 서버들에서 그리고 IBM의 다른 머신들(예, pSeries® 및 xSeries® 서버들) 상에서 에뮬레이트될 수 있다. 그것들은 IBM®, Intel®, AMDTM 및 썬 마이크로시스템즈(Sun Microsystems) 및 기타 사들에 의해 제조된 하드웨어를 사용하는 광범위한 머신들 상에서 리눅스를 실행하는 머신들에서 실행될 수 있다. 또한, Z/Architecture® 하의 그 하드웨어 상에서의 실행 이외에, http://www.turbohercules.com, http://www.hercules-390.org 및 http://www.funsoft.com에 기술된 에뮬레이션을 사용하는 머신들 뿐만이 아니라 리눅스가 사용될 수 있다. 에뮬레이션 모드에서, 에뮬레이션 소프트웨어는 네이티브 프로세서에 의해 실행되어 에뮬레이트된 프로세서의 아키텍쳐를 에뮬레이트한다.
네이티브 프로세서(native processor)(27)는 일반적으로 펌웨어 또는 네이티브 운영체제를 포함하는 에뮬레이션 소프트웨어(23)를 실행하여 에뮬레이트된 프로세서의 에뮬레이션을 수행한다. 에뮬레이션 소프트웨어(23)는 그 에뮬레이트된 프로세서 아키텍쳐의 명령들을 페치하고 실행하는 역할을 한다. 에뮬레이션 소프트웨어(23)는 명령 바운더리들(instruction boundaries)을 추적하기 위해 에뮬레이트된 프로그램 카운터를 유지한다. 에뮬레이션 소프트웨어(23)는 한 번에 하나 또는 그 이상의 에뮬레이트된 머신 명령들을 페치할 수 있고, 하나 또는 그 이상의 에뮬레이트된 머신 명령들을 네이티브 프로세서(27)에 의해 실행하기 위한 네이티브 머신 명령들의 해당 그룹으로 변환시킬 수 있다. 이들 변환된 명령들은 캐시되어 더 빠른 변환이 수행될 수 있도록 할 수 있다. 그럼에도 불구하고, 운영체제들 및 에뮬레이트된 프로세서를 위해 쓰여진 어플리케이션들이 정확하게 동작하도록 보장하기 위해, 에뮬레이션 소프트웨어는 그 에뮬레이트된 프로세서 아키텍쳐의 아키텍쳐 규칙들을 유지해야 한다. 더 나아가, 에뮬레이션 소프트웨어는 그 에뮬레이트된 프로세서(1) 아키텍쳐에 의해 식별된 리소스들을 제공해야 한다. 예를 들어, 이것들에는 컨트롤 레지스터들, 범용 레지스터들, 플로팅 포인트 레지스터들, 예를 들어, 세그먼트 테이블들 및 페이지 테이블들을 포함하는 동적 주소 변환 펑션, 인터럽트 메커니즘들, 컨텍스트 전환 메커니즘들, TOD(Time of Day) 클럭들 및 I/O 서브시스템들에 대한 구성된 인터페이스들이 포함된다. 그리하여 운영체제 또는 에뮬레이트된 프로세서 상에서 실행하도록 지정된 응용 프로그램이 에뮬레이션 소프트웨어를 갖는 네이티브 프로세서 상에서 실행될 수 있도록 한다.
에뮬레이트되고 있는 특정 명령은 디코딩되고, 개별 명령의 펑션을 수행하기 위해 서브루틴이 호출(call)된다. 에뮬레이트된 프로세서의 펑션을 에뮬레이트하는 에뮬레이션 소프트웨어 펑션(23)은, 예를 들어, "C" 서브루틴 또는 드라이버, 또는 특정 하드웨어를 위해 드라이브를 제공하는 몇몇 다른 방법들로 구현된다. 이는 바람직한 실시예의 설명을 이해한 후 당해 기술 분야에서 통상의 기술을 가진 자들이 도출해 낼 수 있을 것이다. 여러 가지 소프트웨어 및 하드웨어 에뮬레이션 특허들 - 예를 들어, Beausoleil 등의 US5551013 "하드웨어 에뮬레이션을 위한 멀티프로세서(Multiprocessor for Hardware Emulation)", Scalzi 등의 US6009261 "타겟 프로세서 상에서 호환가능하지 않은 명령들을 에뮬레이팅하기 위한 저장된 타겟 루틴들의 전처리(Preprocessing of stored target routines for emulating incompatible instructions on a target processor)", Davidian 등의 US5574873, "게스트 명령들을 에뮬레이트하는 직접 억세스 에뮬레이션 루틴들에 대한 게스트 명령을 디코딩하는 것(Decoding guest instruction to directly access emulation routines that emulate the guest instructions)", Gorishek 등의 US6308255, "시스템에서 논-네이티브 코드를 실행할 수 있도록 하는 코프로세서 지원에 사용되는 대칭형 멀티프로세싱 버스 및 칩셋(Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system)", lethin 등의 US6463582, "아키텍쳐 에뮬레이션을 위한 동적 최적화 객체 코드 변환 및 동적 최적화 객체 코드 변환 방법(Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method)", Eric Traut의 US5790825, "호스트 명령들의 동적 리컴파일레이션을 통해 호스트 컴퓨터 상에서 게스트 명령들을 에뮬레이트하기 위한 방법(Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions)" 등, 그러나 이러한 것들로 한정되는 것은 아님 - 뿐만이 아니라 이들 레퍼런스들에 의해 사용되는 상업적 소프트웨어 기술들은, 당해 기술 분야에서 숙련된 자들이 이용할 수 있는 타겟 머신에 대한 다른 머신을 위해 구성된 명령 포맷의 에뮬레이션을 달성하는 알려진 여러 가지 방법들을 예시하고 있다.
2009년 9월 3일자로 발행된 Astrand의 미국 공개번호 US2009/0222814A1 "가상 머신을 위한 USB 디바이스 기능에 대한 선택적 노출(Selective Exposure to USB Device Functionality for a Virtual Machine)" 에는, 가상 머신(virtual machine, VM) 어플리케이션이 게스트 운영체제(OS)를 실행할 수 있고 또한 게스트 OS를 컴퓨터에 연결된 USB 디바이스들에 연결시킬 수 있다. VM 어플리케이션은 USB 디바이스와 연관된 펑션들을 필터링하여, USB 디바이스의 펑션들 중 단지 일부만이 게스트 OS에 노출되도록 할 수 있다.
일 실시예에서, 멀티-펑션 명령 - 이는 복수의 인스톨된 펑션들 중 하나의 펑션(a function)을 수행하도록 구성(architect)됨 - 의 선택되고 인스톨된 펑션들이 은폐(hide)되고, 상기 은폐 방법(hiding)은 인스톨된 펑션들의 이용가능성(availability)을 컨트롤하는 값을, 하나 또는 그 이상의 프로세서들을 포함하는 호스트 컴퓨터의 멀티-펑션 명령에 세팅하는 단계 - 하나의 프로세서(a processor)는 멀티-펑션 명령의 제1의 복수의 상기 인스톨된 펑션들(a first plurality of said installed functions of the multi-function instruction)을 가지며, 상기 제1 복수의 인스톨된 펑션들은 하나 또는 그 이상의 제1의 인스톨된 펑션들 및 하나 또는 그 이상의 제2의 인스톨된 펑션들을 포함함 -; opcode 필드를 포함하는 멀티-펑션 명령을 실행하는 단계를 포함하며, 상기 실행은, 쿼리 펑션(query function)이 특정되는 멀티-펑션 명령에 응답하여, 상기 멀티-펑션 명령에게 이용가능한 인스톨된 펑션들을 결정하기 위해 상기 쿼리 펑션을 수행하는 단계; 상기 하나 또는 그 이상의 제2의 인스톨된 펑션들을 결정하기 위해, 상기 쿼리 펑션 실행은 상기 값을 사용하는 단계; 상기 쿼리 펑션 실행은 상기 하나 또는 그 이상의 제2의 인스톨된 펑션들 중 하나 또는 그 이상이 상기 멀티-펑션 명령에게 이용가능하지 않다는 것을 표시하는 결과 값(result value)을 저장하는 단계를 포함한다.
일 실시예에서, 상기 값은 상기 호스트 컴퓨터의 가상 머신에 대해 상기 호스트 컴퓨터의 하이퍼바이저에 의해 세트되고, 상기 가상 머신은 하나 또는 그 이상의 논리적 프로세서들(logical processors)을 포함하며, 상기 하나 또는 그 이상의 논리적 프로세서들은 하나 또는 그 이상의 물리적 프로세서들(physical processors)에 배정되며, 물리적 프로세서는 멀티-펑션 명령의 상기 하나 또는 그 이상의 제2의 인스톨된 펑션들을 가지며, 멀티-펑션 명령은, 상기 하나 또는 그 이상의 물리적 프로세서들 중 하나의 물리적 프로세서(a physical processor) 상에서 하나 또는 그 이상의 논리적 프로세서들 중 하나의 논리적 프로세서(a logical processor)에 의해, 상기 가상 머신에서 실행된다.
일 실시예에서, 상기 하나 또는 그 이상의 제2 인스톨된 펑션들은 멀티-펑션 명령의 opcode에 기초하여 결정된다.
일 실시예에서, 상기 하이퍼바이저는 인스톨된 펑션들의 이용가능성을 컨트롤하는 또 다른(another) 값을 상기 호스트 컴퓨터 시스템의 또 다른(another) 가상 머신 상에서 실행 중인 멀티-펑션 명령에 세트하며; 하나 또는 그 이상의 또 다른(another) 논리적 프로세서들 중 또 다른(another) 논리적 프로세서에 의해 상기 또 다른(another) 가상 머신에서 또 다른(another) 멀티-펑션 명령을 실행하며; 또 다른 쿼리 펑션을 특정하는 상기 또 다른 멀티-펑션 명령에 응답하여, 상기 또 다른(another) 멀티-펑션 명령이 이용할 수 있는 인스톨된 펑션들을 결정하기 위해 상기 또 다른(another) 쿼리 펑션이 수행되며; 하나 또는 그 이상의 제3의 인스톨된 펑션들을 결정하기 위해, 상기 또 다른(another) 커리 펑션 실행은 상기 또 다른(another) 값을 사용하며; 그리고, 상기 또 다른(another) 쿼리 펑션 실행은, 상기 하나 또는 그 이상의 제3의 인스톨된 펑션들 중 하나 또는 그 이상이 상기 또 다른(another) 멀티-펑션 명령에게 이용가능하지 않다는 것을 표시하는 또 다른(another) 결과 값을, 저장한다.
일 실시예에서, 상기 쿼리 펑션은 멀티-펑션 명령 특정(specified) 펑션 코드 또는 멀티-펑션 명령 특정(specified) 테스트 비트에 의해 특정된다.
일 실시예에서, 상기 멀티-펑션 명령은 zArchitecture 명령이며, 이 명령은 크립토그래픽 명령, 퍼폼 타이밍 퍼실리티 펑션(Perform Timing Facility Function, PTFF) 명령, 퍼폼 플로팅 포인트 동작(Perform Floating Point Operation) 명령 또는 퍼폼 락 동작(Perform Locked Operation) 명령 중 어느 하나를 포함하며, 상기 크립토그래픽 명령은 싸이퍼 메시지(Cipher Message) 명령, 컴퓨트 중간 메시지(Compute Intermediate Message) 명령, 컴퓨트 마지막 메시지 다이제스트(Compute Last Message Digest) 명령, 컴퓨트 메시지 인증 코드(Compute Message Authentication Code) 명령 중 어느 하나를 포함하며, 상기 멀티-펑션 명령은 쿼리 펑션을 특정하며, 크립토그래픽 명령 또는 PTFF 명령인 상기 멀티-펑션 명령에 응답하여, 실행될 상기 멀티-펑션 명령 특정 펑션 코드가 획득되며 - 그 획득된 펑션 코드는 쿼리 펑션으로 이루어지고, 상기 저장된 결과 값은 복수의 비트들이며, 상기 복수의 비트들의 각각의 비트는 대응하는 펑션 코드가 지원되는지를 표시함 -; 및, 크립토그래픽 명령 또는 PTFF 명령인 상기 멀티-펑션 명령에 응답하여, 실행될 상기 멀티-펑션 명령 특정 펑션 코드가 획득되며 - 그 획득된 펑션 코드는 상기 쿼리 펑션이 아니고, 크립토그래픽 펑션 또는 PTFF 펑션은 상기 획득된 펑션 코드에 따라 수행됨 -; 상기 멀티-펑션 명령이 상기 퍼폼 락 동작 명령 또는 상기 퍼폼 플로팅 포인트 동작 명령이고 또한 상기 멀티-펑션 명령 특정 테스트 비트가 1인 것에 응답하여, 멀티-펑션 명령 특정 펑션 코드가 인스톨되는지에 관한 결정이 이뤄지고 - 상기 저장된 결과 값은 조건 코드 값(condition code value)임 -; 그리고 상기 멀티-펑션 명령이 상기 퍼폼 락 동작 명령 또는 상기 퍼폼 플로팅 포인트 동작 명령이고 상기 멀티-펑션 명령 특정 테스트 비트가 0인 것에 응답하여, 상기 획득된 펑션 코드에 따라 플로팅 포인트 펑션(Floating Point function) 또는 락 동작(locked operation)이 수행된다.
위에서 언급한 것뿐만이 아니라 추가의 목적들, 특징들, 및 이점들은 다음의 상세한 설명에서 더 분명해질 것이다.
여기서는 다른 실시예들 및 측면들이 상세히 기술되고 이것들은 청구되는 발명의 일부분으로 고려된다. 이점들 및 특징들에 관해 더 잘 이해하기 위해, 도면들 및 이에 관한 설명들을 참조할 수 있다.
본 발명의 실시예들은 이제 첨부되는 도면들을 참조하여 설명될 것이나, 이 도면들은 단지 본 발명을 설명하기 위해 제시된 것일 뿐이다.
도 1a는 호스트 컴퓨터 시스템의 일 예를 도시하는 다이어그램이다.
도 1b는 에뮬레이션 호스트 컴퓨터 시스템의 일 예를 도시하는 다이어그램이다.
도 1c는 컴퓨터 시스템의 일 예를 도시하는 다이어그램이다.
도 2는 컴퓨터 네트워크의 일 예를 도시하는 다이어그램이다.
도 3은 컴퓨터 시스템의 엘리먼트들의 예를 도시하는 다이어그램이다.
도 4a는 실행 유닛의 일 예를 도시하는 다이어그램이다.
도 4b는 분기 유닛의 일 예를 도시하는 다이어그램이다.
도 4c는 로드/저장 유닛의 일 예를 도시하는 다이어그램이다.
도 5는 논리적 파티셔닝의 일 예를 도시하는 다이어그램이다.
도 6은 논리적 파티셔닝 엘리먼트들의 예를 도시하는 다이어그램이다.
도 7은 논리적 파티셔닝 엘리먼트들의 예를 도시하는 다이어그램이다.
도 8은 Opcode 테이블의 일 예를 도시하는 흐름도이다.
도 9는 블로킹 기술의 일 예를 도시하는 흐름도이다.
도 10은 블로킹 기술의 일 예를 도시하는 흐름도이다.
도 11은 블로킹 기술의 일 예를 도시하는 흐름도이다.
도 12-17은 펑션 쿼리 차단 기술들의 흐름도들이다.
실시예들은 소프트웨어(때로는 라이센스된 인터널 코드(Licenced Internal Code)로 일컬어짐), 펌웨어, 마이크로코드, 밀리코드, 피코코드 등으로 실시될 수 있는데, 이것들 중 어떤 것이나 여기서의 가르침과 일관될 것이다. 도 1a를 참조하면, 소프트웨어 프로그램 코드 실시예는 일반적으로 롱-텀 스토리지 매체(11)(예를 들어, CD-ROM 드라이브, 테이프 드라이브 또는 하드 드라이브)로부터 시스템(50)의 CPU(중앙처리장치)(1)로도 알려진 프로세서에 의해 억세스된다. 소프트웨어 프로그램 코드는 데이터 처리 시스템에 사용하기 위한 알려진 여러 가지 매체(예를 들어, 디스켓, 하드 드라이브, 또는 CD-ROM) 중 어느 것에서나 구현될 수 있다. 코드는 이러한 매체 상에 분포될 수 있고, 또는 컴퓨터 메모리(2)로부터 또는 네트워크(10)를 통해 하나의 컴퓨터 시스템의 스토리지로부터 이러한 다른 시스템들의 사용자들이 사용하기 위한 다른 컴퓨터 시스템들로 사용자들에게 배포될 수 있다.
이와는 다르게, 프로그램 코드는 메모리(2)에서 구현될 수 있고, 또한 프로세서 버스를 사용하여 프로세서(1)에 의해 억세스될 수 있다. 이러한 프로그램 코드는 운영체제를 포함하는데, 이 운영체제는 여러 가지 컴퓨터 컴포넌트들과 하나 또는 그 이상의 응용프로그램들의 펑션 및 인터랙션을 컨트롤한다. 프로그램 코드는 밀도높은 스토리지 매체(dense storage media)(11)로부터 고속 메모리(2) - 이는 프로세서(1)에 의한 처리를 위해 이용가능함 - 로 노멀하게 페이지된다. 물리적 매체 상에서 메모리 내에 소프트웨어 프로그램 코드를 구현하고, 및/또는 네트워크들을 통해 소프트웨어를 배포하는 기술들 및 방법들은 잘 알려져 있으며, 여기서는 더 이상 논해지지 않을 것이다. 실체적 매체(예를 들어, 전자 메모리 모듈들(RAM), 플래시 메모리, 컴팩트 디스크들(CDs), DVDs, 자기 테이프 등을 포함하나, 이러한 것들로 한정되지는 않음) 상에 생성되고 저장될 때, 컴퓨터 프로그램 코드는 흔히 "컴퓨터 프로그램 제품"으로 언급된다. 컴퓨터 프로그램 제품 매체는 처리 회로에서 실행하기 위해 바람직하게는 컴퓨팅 시스템에서 처리 회로에 의해 일반적으로 판독가능하다.
도 1c는 본 발명의 실시예가 실시될 수 있는 대표적인 워크스테이션 또는 서버 하드웨어 시스템을 도시한다. 도 1c의 시스템(100)은, 주변 디바이스들(이는 선택적임)을 포함하여, 개인용 컴퓨터, 워크스테이션 또는 서버와 같은 대표적인 컴퓨터 시스템(101)을 포함한다. 워크 스테이션(101)은 하나 또는 그 이상의 프로세서들(106) 및 버스를 포함한다. 버스는 알려진 기술들에 따라 프로세서(들)(106)과 시스템(101)의 다른 컴포넌트들 사이를 연결하여 통신을 가능하게 하기 위해 채용되는 것이다. 버스는 메모리(105)와 롱텀(long-term) 스토리지(107)에 프로세서(106)를 연결한다. 롱텀 스토리지(107)는, 예를 들어, 하드 드라이브(예를 들어, 자기 매체, CD, DVD 및 플래시 메모리를 포함함) 또는 테이프 드라이브를 포함할 수 있다. 또한 시스템(101)은 사용자 인터페이스 어댑터를 포함할 수 있으며, 이 사용자 인터페이스 어댑터는 버스를 통해 마이크로프로세서(106)를, 키보드(104), 마우스(103), 프린터/스캐너(110) 및/또는 기타 인터페이스 디바이스들과 같은 하나 또는 그 이상의 인터페이스 디바이스들에 연결한다. 이것들은, 예를 들어, 터치 센서티브 스크린(touch sensitive screen), 디지타이즈드 엔트리 패드(digitized entry pad) 등과 같은 어떠한 사용자 인터페이스 디바이스든지 될 수 있다. 또한, 버스는 디스플레이 어댑터를 통해 LCD 스크린 또는 모니터와 같은 디스플레이 디바이스(102)를 마이크로프로세서(106)에 연결한다.
시스템(101)은 네트워크(109)와 통신(108)할 수 있는 네트워크 어댑터를 통해 다른 컴퓨터들 또는 컴퓨터들의 네트워크들과 통신할 수 있다. 네트워크 어댑터들의 예는 통신 채널(communications channels), 토큰 링(token ring), 이더넷(Ethernet) 또는 모뎀(Modems)이다. 이와는 다르게, 워크스테이션(101)은 CDPD(셀룰러 디지털 패킷 데이터) 카드와 같은 무선 인터페이스를 사용하여 통신할 수 있다. 워크스테이션(101)은 근거리 통신망(LAN) 또는 광역통신망(WAN)에서 그와 같은 다른 컴퓨터들과 연관될 수 있고, 또는 워크스테이션(101)은 또 다른 컴퓨터 등으로의 클라이언트/서버 배치방식(arrangement)에서 클라이언트일 수 있다. 적절한 통신 하드웨어 및 소프트웨어뿐만 아니라 이들 구성들 모두는 당해 기술 분야에서는 알려져 있다.
도 2는 본 발명의 일 실시예가 실시될 수 있는 데이터 처리 네트워크(200)를 도시한다. 데이터 처리 네트워크(200)는 무선 네트워크 및 유선 네트워크와 같은 복수의 개별 네트워크들을 포함할 수 있으며, 개별 네트워크들 각각은 복수의 개별 워크스테이션들(101, 201, 202, 203, 204)을 포함할 수 있다. 또한, 당해 기술 분야에서 통상의 기술을 가진 자라면 알 수 있는 바와 같이. 하나 또는 그 이상의 LANs이 포함될 수 있다. LAN은 호스트 프로세서에 결합된 복수의 인텔리전트 워크스테이션들(intelligent workstations)을 포함할 수 있다.
계속해서 도 2를 참조하면, 네트워크들은 또한 게이트웨이 컴퓨터(클라이언트 서버(206)) 또는 어플리케이션 서버(원격 서버(208)) - 이것들은 데이터 저장소에 억세스할 수 있고 또한 워크스테이션(205)으로부터 직접적으로 억세스될 수 있음)와 같은 메인프레임 컴퓨터들 또는 서버들을 포함할 수 있다. 게이트웨이 컴퓨터(206)는 각각의 네트워크(207) 내에서 엔트리의 포인트로서의 역할을 한다. 게이트웨이는 하나의 네트워킹 프로토콜을 또 다른 네트워킹 프로토콜에 연결할 때 필요하다. 바람직하게는, 게이트웨이(206)는 통신 링크를 사용하여 또 다른 네트워크(예를 들어, 인터넷(207))에 결합될 수 있다. 게이트웨이(206)는 또한 통신 링크를 사용하여 하나 또는 그 이상의 워크스테이션들(101, 201, 202, 203)에 직접적으로 결합될 수 있다. 게이트웨이 컴퓨터는 IBM사로부터 이용가능한 IBM eServerTM zSeries®z9® 서버를 이용하여 구현될 수 있다.
소프트웨어 프로그래밍 코드는, 일반적으로 CD-ROM 드라이브 또는 하드 드라이브와 같은 롱텀 스토리지 매체(107)로부터 시스템(101)의 프로세서(106)에 의해 억세스된다. 소프트웨어 프로그래밍 코드는 디스켓, 하드 드라이브, 또는 CD-ROM과 같은 데이터 처리 시스템에서 사용하기 위한 알려진 여러 가지 매체 중 어느 것에서나 구현될 수 있다. 코드는 이러한 매체 상에 배포될 수 있고, 또는 그와 같은 다른 시스템들의 사용자들에 의해 사용되도록 하기 위해 다른 컴퓨터 시스템들에게 네트워크를 통해 하나의 컴퓨터 시스템의 메모리 또는 스토리지로부터 사용자들(210, 211)에게 배포될 수 있다.
이와는 다르게, 프로그래밍 코드(111)는 메모리(105)에 구현될 수 있고, 프로세서 버스를 사용하여 프로세서(106)에 의해 억세스된다. 이러한 프로그래밍 코드는 여러 가지 컴퓨터 컴포넌트들 및 하나 또는 그 이상의 응용프로그램들(112)의 펑션 및 인터랙션을 컨트롤하는 운영체제를 포함한다. 프로그램 코드는 밀집형 스토리지 매체(107)로부터 고속 메모리(105) - 이는 프로세서(106)에 의한 처리를 위해 이용가능함 - 로 노멀하게 페이지된다. 물리적 매체 상에서, 메모리 내에 소프트웨어 프로그래밍 코드를 구현하는 기술 및 방법, 및/또는 네트워크들을 통해 소프트웨어 코드를 배포하는 기술 및 방법은 잘 알려져 있으며 여기서는 더 이상 언급되지 않을 것이다. 실체적 매체(예를 들어, 전자 메모리 모듈들(RAM), 플래시 메모리, 컴팩트 디스크들(CDs), DVDs, 자기 테이프 등을 포함하나, 이러한 예들로 한정되는 것은 아님) 상에서 생성되고 저장될 때, 프로그램 코드는 흔히 "컴퓨터 프로그램 제품"으로 언급된다. 바람직하게는 컴퓨터 프로그램 제품 매체는 처리 회로에서 실행하기 위해 컴퓨터 시스템에서 처리 회로에 의해 일반적으로 판독가능하다.
프로세서가 가장 쉽게 이용할 수 있는 캐시(프로세서의 다른 캐시들보다 노멀하게 더 빠르고 또한 더 작음)는 가장 낮은(L1 또는 레벨 1) 캐시이고 메인 저장소(메인 메모리)는 가장 높은 레벨의 캐시(만약 3 레벨이 있다면, L3)이다. 가장 낮은 레벨 캐시는 데이터 오퍼랜드들을 보유하는 데이터 캐시(D-캐시) 및 실행될 머신 명령들을 보유하는 명령 캐시(l-캐시)로 흔히 나눠진다.
도 3을 참조하면, 예시적인 프로세서 실시예가 프로세서(106)에 대해 도시되어 있다. 일반적으로 하나 또는 그 이상 레벨들의 캐시(303)는 프로세서 성능을 향상시키기 위해 버퍼 메모리 블록들에 채용된다. 캐시(303)는 사용될 가능성이 있는 메모리 데이터의 캐시 라인들을 보유하는 고속 버퍼이다. 일반적인 캐시 라인들은 64, 128 또는 256 바이트의 메모리 데이터이다. 분리된 캐시들은 데이터를 캐싱하기 위해서라기보다 명령들을 캐싱하기 위해서 흔히 채용된다. 캐시 일관성(coherence)(메모리 및 캐시들에서의 라인들의 사본들의 일치화(synchronization))는 당해 기술 분야에서 잘 알려진 바와 같이 여러 가지 "스눕(snoop)" 알고리즘들에 의해 흔히 제공된다. 프로세서 시스템의 메인 메모리 스토리지(105)는 흔히 캐시로 언급된다. 4 레벨들의 캐시(303)를 갖는 프로세서 시스템에서, 메인 스토리지(105)는 때로는 레벨 5(L5) 캐시로 언급된다. 왜냐하면 일반적으로 그것은 더 빠르고 컴퓨터 시스템이 이용가능한 비휘발성 스토리지(DASD, 테이프 등)의 일부분만을 보유하기 때문이다. 메인 스토리지(105)는 운영체제에 의해 메인 스토리지(5025) 안으로 그리고 밖으로 페이지되는 데이터의 페이지들을 "캐시"한다.
프로그램 카운터(명령 카운터)(311)는 실행될 현재의 명령의 주소를 추적한다. 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 명령들이다. 프로그램 카운터(311)는 예를 들어, 분기 명령의 분기 테이큰 동작(Branch taken operation) 또는 컨텍스트 전환 동작에 의해 변경된다. 컨텍스트 전환 동작에서, 현재의 프로그램 카운터 값은 실행되고 있는 프로그램에 관한 다른 상태 정보(예를 들어, 조건 코드들과 같은 것)와 함께 프로그램 상태 워드(Program Status Word, PSW)에 저장되고, 실행될 새로운 프로그램 모듈의 명령을 지시하는 새로운 프로그램 카운터 값이 로드된다. 프로그램 카운터(311) 내에 분기 명령의 결과를 로드함으로써 결정하거나 프로그램 내에서 루프를 돌도록 허용하기 위해, 분기 테이큰 동작(braken taken operation)이 수행된다.
일반적으로 명령 페치 유닛(305)는 프로세서(106)를 대신하여 명령들을 페치하기 위해 채용된다. 페치 유닛은 "다음의 순차적인 명령들", 분기 테이큰 명령들의 타겟 명령들, 또는 컨텍스트 전환에 후속하는 프로그램의 첫 번째 명령들을 페치한다. 현대의 명령 페치 유닛은 프리페치된 명령들이 사용될 수 있는 가능성에 기초하여 추적에 근거하여(speculatively) 명령들을 프리페치하는 프리페치 기술들을 흔히 채용한다. 예를 들어, 페치 유닛은 16 바이트의 명령 - 이는 그 다음의 순차적인 명령 및 그 이후의 순차적인 명령들의 추가 바이트들을 포함함 - 을 페치할 수 있다.
그런 다음, 페치된 명령들은 프로세서(106)에 의해 실행된다. 일 실시예에서, 페치된 명령(들)은 페치 유닛의 디스패치 유닛(dispatch)(306)으로 패스된다. 디스패치 유닛(306)은 명령(들)을 디코딩하고, 적절한 유닛들(307, 308, 310)로 디코딩된 명령(들)에 관한 정보를 전달한다. 실행 유닛(307)은 일반적으로 명령 페치 유닛(305)으로부터의 디코딩된 산술 명령들(arithmetic instructions)에 관한 정보를 수신할 것이고, 명령의 opcode에 따라 오퍼랜드들에 관해 산술 연산들(arithmetic operations)을 수행할 것이다. 오퍼랜드들은 바람직하게는, 메모리(105), 구성된 레지스터들(309)로부터 또는 실행되고 있는 명령의 직접 필드(immediate field)로부터 실행 유닛(307)로 제공된다. 저장될 때, 실행의 결과들은 메모리(105), 레지스터들(309)에 또는 다른 머신 하드웨어(예를 들어, 컨트롤 레지스터들, PSW 레지스터들 등)에 저장된다.
도 5를 참조하면, 가상 머신(Virtual Machine, VM) 환경의 일 예가 도시되어 있다. 하이퍼바이저 프로그램은 그 자체가 IBM의 zVM과 같은 운영체제(OS)일 수 있으며, 멀티-프로세서 "하드웨어" 상에서 실행되며, 이 멀티 "하드웨어"는 복수의 물리적 프로세서들, 물리적 메인 메모리, 그리고 I/O 주변 기기들 - 이것들에는 스토리지, 네트워크들, 디스플레이 등이 포함됨 - 과 통신하기 위한 물리적 어댑터들을 포함한다. 하이퍼바이저는 VM 이미지들(예를 들어, VM1, VM2 및 VM3)을 생성하여, 응용프로그램들 및 OS을 포함하는 소프트웨어가 가상 리소스들을 이용하는 가상 머신 내에서 실행될 수 있도록 한다. VM에서 실행 중인 소프트웨어는 그것이 VM에서 실행 중임을 알지 못하고, 마치 그것들이 물리적 리소스들인 것처럼 가상 리소스들을 사용하여 동작한다. IBM의 zVM 운영체제는 "게스트" 이미지들을 생성할 수 있으며, 여기서 각각의 게스트 이미지는 사실상 가상 머신이다. 더 나아가, 어떤 zVM 게스트든지 그 자체는 "제2 레벨 게스트들"을 생성하는 zVM OS를 실행할 수 있다. 따라서, 가상 머신(게스트 이미지)은 가상 머신들의 계층(hierarchy)에 끼워질(nested) 수 있으며, 여기서 각각의 zVM은 그것의 게스트 이미지들에 대해서는 하이퍼바이저 역할을 한다. 한편, 멀티-프로세서 플랫폼은 "물리적으로 파티션" 될 수 있으며, 여기서 각각의 물리적 파티션은 배정된 리소스들(프로세서들, 메모리, I/O)일 수 있다. 각각의 물리적 파티션은 VM이다. 왜냐하면 파티션에서 실행중인 소프트웨어는 파티션에 배정되지 않은 머신의 리소스들을 알지 못한다. 따라서, 머신의 리소스들은 "가상화" 된다. 또 다른 실시예에서, 호스트 머신은 논리적 파티션들을 지원할 수 있으며, 여기서 각각의 논리적 파티션은 VM이다.
가상화는, 예를 들어, VMware®에서 제공된 백서(white paper)에, 제목 "가상화 개요(Virtualization Overview)" 및 VMware®에서의 "VMware VMotion 및 CPU 호환가능성(VMware VMotion and CPU Compatibility)" VMware® 인프라스트럭쳐 3으로 설명되어 있다. 나아가, Khatri 등의 미국특허출원공개번호 2009/0070760 "프로세서 아키텍쳐들 간의 가상화 머신(VM) 이송(VIRTUAL MACHINE(VM) MIGRATION BETWEEN PROCESSOR ARCHITECTURES)"(2007년 월 6일자 출원)은 CPUID 레지스터의 선택된 비트들을 마스킹함으로써 머신들의 유사 풀들(similar pools) 간의 VM 이송(migration)을 가능하게 하도록 세트된 일정한 특징을 에뮬레이트하는 것을 논하고 있다.
도 6을 참조하면, 각각의 VM은 다른 OS 및 다른 어플리케이션들을 가질 수 있다. 예를 들어, OS1은 IBM으로부터의 z/OS일 수 있고, OS2는 IBM으로부터의 zLinux일 수 있으며, 이 모두는 예를 들어, z/OS들과 같이 동일한 OS들일 수 있다.
하이퍼바이저는 물리적 특징들(physical features), 리소스들 및 기능들(capabilities)에 기초하여 각각의 VM에 대한 논리적 특징들(Logical Features), 리소스들 및 기능들을 생성한다. 시스템의 일 예에서, 물리적 메모리 부분들(Physical Memory portions)은 동적 주소 변환 방식으로 각각의 VM에 할당되며, 물리적 프로세서들은 I/O 기능인 VM들 간의 시분할(time-shared)이다.
도 7을 참조하면, 각각의 논리적 프로세서는 하이퍼바이저 관리 논리적 특징 마스크(Hypervisor managed Logical Feature Mask)의 방식으로 물리적 특징 레지스터들(physical feature registers)에 대한 접근권한을 갖는다. 따라서, 논리적 프로세서들 상에서 실행중인 소프트웨어는, 비록 그 실제 프로세서들이 다른 아키텍쳐 레벨들에 있더라도, 공통 프로세서 아키텍쳐 레벨 상에서 동작하는 외관(appearance)을 제공할 수 있다. 일 예에서, 물리적 특징 레지스터는 프로그래머가 이용할 수 있는 특정 특징들뿐만이 아니라 인텔 프로세서의 아키텍쳐 레벨을 표시하는 인텔 CPUID 레지스터일 수 있다. 논리적 특징 마스크(Logical feature mask)는, 가상 머신(VM)이 대응하는 논리적 프로세서의 CPUID를 쿼리(query)할 때, VM 내 소프트웨어에게 물리적 프로세서들 CPUID의 모두 또는 서브세트를 제공하도록 프로그램된다.
Intel®의 x86 프로세서 아키텍쳐, "Intel®Itanium®" 아키텍쳐 소프트웨어 개발자들의 매뉴얼 볼륨 2, 리비젼 2.2(2006년 1월)는 프로세서에 의해 지원되는 특징들(features)을 식별하기 위한 CPUID 레지스터들을 기술하고 있다. CPUID 레지스터들은, 간접 무브 명령(indirect mov (from) instruction))을 사용하여 억세스되며 특권화되어 있지 않다(unprivileged). 레지스터 CPUID 번호 이상의 모든 레지스터들은 보류(reserve)되며, 만약 그것들이 억세스되면 보류된 레지스터/필드 폴트(Reserved Register/Field fault)를 올린다. 쓰기(Writes)는 허용되지 않으며, 이러한 동작에 대해서는 아무런 명령도 존재하지 않는다. 벤더(Vendor) 정보는 CPUID 레지스터들 0 및 1에 위치하고, 프로세서 구현을 위해, ASCII로 벤더 이름을 특정한다. 16번째 바이트까지의 스트링 끝 이후의 모든 바이트들은 0이다. 더 앞선(earlier) ASCII 캐릭터들은 더 낮은 번호의 레지스터 및 더 낮게 넘버링된 바이트 위치들에 배치된다. CPUID 레지스터 4는 프로세서 특징들에 관한 일반적인 어플리케이션-레벨 정보(general application-level information)를 제공한다. 그것은 주어진 특징이 프로세서 모델에서 지원되는지를 표시하기 위해 사용되는 플래그 비트들(flag bits)의 세트를 포함한다. 하나의 비트가 1일 때, 그 특징이 지원되며, 0일 때, 그 특징은 지원되지 않는다. 장래의 프로세서 모델들로부터 새로운 특징들이 추가(또는 제거)될 때, 새로운 특징들의 존재(또는 제거)는 새로운 특징 비트들(feature bits)에 의해 표시될 것이다. CPUID 레지스터 4는 2등분으로 논리적으로 나눠지는데, 이들 둘은 다른 사용량 모델들(usage models) 및 접근 기능들(access capabilities)을 갖는 것을 제외하고는 일반적인 특징 및 기능 정보를 포함하며, 이 정보는 인에이블되거나 디스에이블된 특징들의 상태를 반영한다. CPUID 레지스터 4의 윗부분 절반(upper half) 및 아랫부분 절반(lower half)은 무브 간접 레지스터 명령(move indirect register instruction)을 통해 접근가능하며, 그 구현에 따라, 이 접근에 대한 지연(latency)은 길 수 있으며, 이 접근 방법은 셀프-선택(self-selection)을 사용하는 낮은-지연 코드 버져닝(low-latency code versioning)에는 적합하지 않다. 또한, CPUID 레지스터 4의 윗부분 절반은 테스트 특징 명령(test feature instruction)을 사용하여 접근가능하며, 이 접근에 대한 지연은 테스트 비트 명령의 지연에 필적할 정도이며, 이 접근 방법은 셀프 선택을 사용하는 낮은 지연 코드 버져닝을 가능하게 한다.
z/Architecture 동작원리(Principles of Operation)는 스토어 퍼실리티 리스트 익스텐디드(Store Facility List Extended, STFLE) 명령을 설명하고 있는데, 이는 인텔 CPUID 레지스터가 소프트웨어에게 기초(underlying) CPU들(Central Processing Units) 또는 프로세서들의 특징들(또는 아키텍쳐 레벨들)에 관한 지식을 제공하는 것과 같다. STFLE 명령은 아래의 표 1에 도시된 것과 같은 포맷을 갖는다.
Figure 112013000196925-pct00001
STFLE 명령(표 1)은 Opcode 필드 비트들(0-15), 레지스터 필드(B2)(16-19) 및 변위(displacement) (직접(immediate)) 필드(D2)(20-31)를 포함한다. 머신에 의한 STFLE 명령의 실행은, 명령의 B2 필드에 의해 특정되는 레지스터의 내용들을 12 비트 D2 직접 필드에 더함으로써 결정된 프로그램 메모리 위치에, 장치들(facilities)에 관한 정보를 제공하는 비트들의 리스트를 저장한다. 그 메모리 위치는 제2 오퍼랜드 주소((B2)+D2)에 의해 특정된 더블워드(8 바이트, 한 워드는 4 바이트임)에서 시작한다. zArchitecture에서 프로그램 메모리 위치의 주소는 동적 주소 변환(Dynamic Address Translation, DAT)의 대상이다.
보류된 비트들(reserved bits)은 장치를 표현하도록 현재 배정되지 않은 비트들이다. 장치 비트들이 배정된 최좌측 더블워드들(leftmost doublewords)에 대해, 보류된 비트들은 0들로 저장된다. 하나의 모델에 대해 가장 높게 넘버링된 장치 비트가 배정되는 더블워드의 우측으로 더블워드들이 저장될 수도 있고 저장되지 않을 수도 있다. 저장되지 않은 더블워드들에 대해서는, 억세스 예외들(access exceptions) 및 PER 이벤트들이 인정되지 않는다. 더블워드들에서, 제2 오퍼랜드의 사이즈는 범용 레지스터(general register) 0의 비트들 56-63에 특정된 값보다 1 더 크다. 범용 레지스터 0의 남는 비트들은 미배정(unassigned)되고 0들을 포함해야 한다. 만약 그렇지 않으면, 장차 프로그램은 적합하게 동작할 수 없다.
제2 오퍼랜드의 사이즈가 모델에 대해 배정된 장치 비트들 모두를 포함할 정도로 충분히 클 때, 제2 오퍼랜드 위치에 완전한 장치 리스트가 저장되며, 범용 레지스터 0의 비트들 56-63은 모델에 대해 배정된 장치 비트들 모두를 포함하기 위해 필요한 더블워드들의 수보다 1 더 작은 것을 포함하도록 업데이트되며, 조건 코드 0이 세트된다.
제2 오퍼랜드의 사이즈가 모델에 대해 배정된 장치 비트들 모두를 포함할 정도로 충분히 크지 않을 때, 제2 오퍼랜드 사이즈에 의해 특정된 더블워드들의 수만이 저장되고, 범용 레지스터 0의 비트들 56-63은, 모델에 대해 배정된 장치 비트들 모두를 포함하기 위해 필요한 더블워드들의 수보다 1 더 작은 것을 포함하도록 업데이트되며, 조건 코드 3이 세트된다.
명령의 실행은 결국 조건 코드 값의 세팅을 가져오며, 조건 코드 값은 프로그램 상태 워드(PSW)와의 컨텍스트 전환(context switching) 동안 저장된다.
특별 조건들:
더블워드 바운더리 상에 제2 오퍼랜드가 지정되어야 한다. 그렇지 않으면, 스펙 예외(specification exception)가 인정된다.
결과 조건 코드:
0 완료된 장치 리스트 저장
1 -
2 -
3 완료되지 않은 장치 리스트 저장
프로그램 예외들:
. 억세스(저장, 제2 오퍼랜드)
. 동작(만약 스토어-퍼실리티-리스트-익스텐디드(store-facility-list-extended) 장치가 인스톨되지 않으면)
. 스펙(Specification)
프로그래밍 주(Programming Notes):
스토어 퍼실리티 리스트 익스텐디드(STORE FACILITY LIST EXTENDED)의 수행(performance)은 스토리지에서 바이트를 간단히 테스트하는 것보다 상당히 느릴 수 있다. 장치(facility)의 존재에 대해 빈번하게 테스트를 필요로 하는 프로그램들 - 예를 들어, 듀얼-패쓰 코드(dual-path code)(여기서는 하나의 패쓰(path)에는 장치가 사용되지만 다른 하나에는 그렇지 않음) - 은 초기화 동안 스토어 퍼실리티 리스트 익스텐디드 명령을 한 번 실행해야 한다. 이어서, 프로그램은 테스트 언더 마스크(TEST UNDER MASK)와 같은 명령을 사용하여, 저장된 결과를 시험함으로써 그 장치의 존재에 대해 테스트할 수 있다.
조건 코드 0이 세트될 때, 범용 레지스터 0의 56-63은 저장된 더블워드들의 수를 표시하도록 업데이트된다. 만약 프로그램이 범용 레지스터 0 내 결과들을 무시하도록 선택한다면, 그것은 스토리지에서 전체 제2 오퍼랜드가 스토어 퍼실리티 리스트 익스텐디드를 실행하기 전에 0으로 세트되는 것을 보장해야 한다.
표 2는 종래의 STFLE 비트들을 배정한 z/Architecture및 그것들의 의미를 보여준다. 하나의 비트는, 만약 그것의 의미가 참(true)이라면, 현재 아키텍츄럴 모드(architectural mode)에 관계없이 1로 세트된다. 의미는, 만약 그것이 특정 아키텍츄럴 모드에 적용되는 것으로 언급되지 않으면, 현재의 아키텍츄럴 모드에 적용된다.
새로운 장치들의 표시를 위해 미배정된 비트들이 보류되며, 이들 비트들은 장차 1들로 저장될 수 있다.
종래의 z/Architecture 장치 리스트는 표 2에 도시된 바와 같이 정의된다.
표 2
비트 의미-When-Bit-Is-One:
0 z/Architecture의 7 및 10 장에서 명령 요약 특징들에 "N3"으로 마크된 명령들이 인스톨된다.
1 z/Architecture 아키텍츄럴 모드(architectural mode)가 인스톨된다.
2 z/Arthitecture 아키텍츄럴 모드가 액티브이다. 이 비트가 0일 때, ESA/390 아키텍츄럴 모드가 액티브이다.
3 z/Architecture 아키텍츄럴 모드에서 DAT-향상 퍼실리티(enhancement facility)가 인스톨된다. DAT 향상 퍼실리티는 인밸리데이트 DAT 테이블 엔트리(INVALIDATE DAT TABLE ENTRY, IDTE) 및 컴패어 앤드 스왑 앤드 퍼지(COMPARE AND SWAP AND PURGE, CSPG) 명령들을 포함한다.
4 인밸리데이트 DAT 테이블 엔트리(IDTE)는, 세그먼트-테이블 엔트리 또는 엔트리들이 무효화(invalidate)될 때, 결합된 영역-및-세그먼트 테이블 엔트리들을 선택적으로 클리어함으로써 무효화-및-클리어링 동작(invalidation-and clearing operation)을 수행한다. IDTE는 또한 클리어링-바이-ASCE(clearing-by-ASCE) 동작을 수행한다. 만약 비트 4가 1이 아니라면, IDTE는 모든 TLB들을 간단히 제거(purge)한다. 만약 비트 4가 1이면 비트 3은 1이다.
5 인밸리데이트 DAT 테이블 엔트리(IDTE)는, 영역-테이블 엔트리 또는 엔트리들이 무효화될 때, 결합된 영역-및-세그먼트 테이블 엔트리들을 선택적으로 클리어함으로써 무효화-및-클리어링 동작을 수행한다. 만약 비트 5가 1이면 비트 3 및 4는 1이다.
6 z/Architecture 아키텍츄럴 모드에서 ASN-및 LX 재사용 퍼실리티(reuse facility)가 인스톨된다.
7 스토어-퍼실리티-리스트-익스텐디드 퍼실리티가 인스톨된다.
8 z/Architecture 아키텍츄럴 모드에서 향상된-DAT 퍼실리티가 인스톨된다.
9 z/Architecture 아키텍츄럴 모드에서 센스-실행 상태 퍼실리티(sense-running-status facility)가 인스톨된다.
10 z/Architecture 아키텍츄럴 모드에서 조건적-SSKE 퍼실리티가 인스톨된다.
11 z/Architectuer 아키텍츄럴 모드에서 구성-토폴로지 퍼실리티가 인스톨된다.
16 확장된-변환(extended- translation) 퍼실리티 2가 인스톨된다.
17 메시지-보안 어시스트(message-security assist)가 인스톨된다.
18 z/Architecture 아키텍츄럴 모드에서 장-변위 퍼실리티(long-displacement facility)가 인스톨된다.
19 장-변위 퍼실리티는 고성능을 갖는다. 만약 비트 19가 1이면 비트 18은 1이다.
20 HFP-곱셈-및-덧셈/뺄셈 퍼실리티가 인스톨된다.
21 z/Architecture 아키텍츄럴 모드에서 확장된-직접 퍼실리티(extended-immediate facility)가 인스톨된다.
22 z/Architecture 아키텍츄럴 모드에서 확장된-변환 퍼실리티(extended-translation facility) 3이 인스톨된다.
23 z/Architecture 아키텍츄럴 모드에서 HFP-비정규화된-확장 퍼실리티(unnormalized-extension facility)가 인스톨된다.
24 ETF2-향상 퍼실리티가 인스톨된다.
25 z/Architecture 아키텍츄럴 모드에서 스토어-클럭-패스트(fast) 퍼실리티가 인스톨된다.
26 z/Architecture 아키텍츄럴 모드에서 파싱(parsing)-향상 퍼실리티가 인스톨된다.
27 z/Architecture 아키텍츄럴 모드에서 무브-위드-선택적-스펙 퍼실리티(move-with-optional specifications facility)가 인스톨된다.
28 z/Architecture 아키텍츄럴 모드에서 TOD-클럭-스티어링(steering) 퍼실리티가 인스톨된다.
30 z/Architecture 아키텍츄럴 모드에서 ETF3-향상 퍼실리티가 인스톨된다.
31 z/Architecture 아키텍츄럴 모드에서 추출(extract)-CPU-시간 퍼실리티가 인스톨된다.
32 z/Architecture 아키텍츄럴 모드에서 비교-및-스왑-저장 퍼실리티가 인스톨된다.
33 z/Architecture 아키텍츄럴 모드에서 비교-및-스왑-및-저장 퍼실리티 2가 인스톨된다.
34 z/Architecture 아키텍츄럴 모드에서에서 범용-명령들-확장 퍼실리티가 인스톨된다.
35 z/Architecture 아키텍츄럴 모드에서 실행-확장 퍼실리티가 인스톨된다.
39 IBM 인터널 사용에 배정됨.
41 z/Architecture 아키텍츄럴 모드에서 플로팅-포인트-지원-향상 퍼실리티들(FRP-GR-전송(transfer), FPS-싸인(sign)-핸들링(handling), 및 DFP 라운딩(rounding))이 인스톨된다.
42 z/Architecture 아키텍츄럴 모드에서 DFP(데시멀-플로팅-포인트) 퍼실리티가 인스톨된다.
43 DFP(데시멀-플로팅-포인트) 퍼실리티는 고성능을 갖는다. 만약 비트 43이 1이면 비트 42는 1이다.
44 z/Architecture 아키텍츄럴 모드에서 PFPO 명령이 인스톨된다.
명령은 하나의 아키텍쳐에서의 단일 펑션(single function), 또는 어떤 경우들에 있어서는 복수의 선택가능한 펑션들 중 어떤 것을 수행할 수 있다. 명령에 대해 정의된 선택가능한 펑션들은 머신 간에 서로 다를 수 있다. 예를 들어, 멀티-펑션 명령은, 구성된 명령에서 처음으로 도입될 때, 단지 몇 개의 선택가능한 펑션들만을 가질 수 있다. 나중에 구성된 명령 세트는 앞서 도입된 멀티-펑션 명령으로 더 많은 선택가능한 펑션들을 도입할 수 있다. 일 실시예에서, 비록 물리적 프로세서가 더 많은 선택가능한 펑션들을 수행할 수 있지만, VM은 물리적 프로세서의 선택가능한 펑션의 서브셋을 배정받을 수 있고, 이에 의해 VM의 논리적 프로세서 상에서 실행 중인 명령은 논리적 프로세서의 이용가능한 펑션들의 리스트를 쿼리(query)할 수 있고 VM에 배정된 펑션들만이 리턴된다. 일 실시예에서, 이것은, 이용가능한 펑션들의 감소된 리스트를 제공하기 위해, 하이퍼바이저가 게스트(가상 머신)에 의해 이 쿼리 펑션의 트랩(trap), 또는 인터셉트, 실행을 가능하게 하는 펑션-표시-명령 인터셉션 퍼실리티(FIIIF)를 통해 달성된다. 또 다른 실시예에서, 하이퍼바이저는, 예를 들어, 비트 마스크(bit mask)를 통해, 게스트에게 보고될 펑션들의 세트를 특정하며, 멀티-펑션 명령의 쿼리 펑션은 이 리스트를 보고한다. 더 나아가, 일 실시예에서, 논리적 프로세서 상에서 실행되고 있는 명령은, 만약 그것이 선택된 선택가능 펑션을 수행하려고 시도한다면 프로그램 예외(program exception)를 겪을 것이다.
인스톨된 펑션들의 존재를 쿼리할 수 있고 또한 인스톨된 펑션들 중 선택된 하나를 실행할 수 있는 멀티-펑션 명령의 경우, 최상의 성능을 달성하기 위해 쿼리 펑션을 포함하는 인스톨된 펑션들의 실행은 하드웨어(예를 들어, 회로 및 마이크로코드를 포함함)에서 수행될 수 있다. 일 실시예에서, FIIIF 특징이 인스톨될 경우, 쿼리 펑션은 실행을 위해 하드웨어보다는 오히려 소프트웨어에 의해 인터셉트된다. 따라서, 단지 쿼리 펑션의 실행만이 어느 인스톨된 특징들을 보고할 것인지를 결정하기 위해 추가 지연을 겪게 될 것이다. 일 실시예에서, 인터셉션은 가상 머신을 대신하여 쿼리 펑션을 수행하고 적절한 결과들을 리턴하는 하이퍼바이저 코드에 대한 것이다.
선택가능한 펑션들을 갖는 명령의 일 예는 z/Architecture의 싸이퍼 메시지(CIPHER MESSAGE) 명령이다.
싸이퍼 메시지(CIPHER MESSAGE(KM)) 명령은 복수의 싸이퍼 메시지 펑션들(cipher message functions) 중 어떤 것이든지 수행할 수 있다. 싸이퍼 메시지에 의해 제공되는 펑션들 중 하나는 프로세서에 의해 지원되는 싸이퍼 메시지 펑션들의 유효 비트 리스트(bit significant list)에 대해 프로세서를 쿼리하는 것이다.
CIPHER MESSAGE 명령(표 3)의 포맷은 다음과 같다. 여기서 R1은 제1 범용 레지스터를 지정하고, R2는 제2 범용 레지스터를 지정한다.
Figure 112013000196925-pct00002
CIPHER MESSAGE 명령(표 3)의 실행은 다음과 같다.
암시된(implied) 범용 레지스터 0에서 펑션 코드에 의해 특정된 펑션이 수행된다.
명령의 비트들 16-23은 무시된다.
범용 레지스터 0의 비트 위치들 57-63은 펑션 코드를 포함한다.
싸이퍼 메시지 및 체이닝을 갖는 싸이퍼 메시지(CIPHER MESSAGE WITH CHAINING)에 대한 현재의 배정된 펑션 코드들 각각(0-3 및 18-20)은 표 4에 도시되어 있다. 다른 모든 펑션 코드들은 미배정 상태이다. 싸이퍼 펑션들(cipher functions)에 대해, 비트 56은 암호화(encryption) 또는 복호화(decryption) 동작이 수행될 것인지를 특정하는 변경자 비트(modifier bit)이다. 변경자 비트는 다른 모든 펑션들에 대해서는 무시된다. 범용 레지스터 0의 다른 모든 비트들은 무시된다.
암시된(implied) 범용 레지스터 1은 스토리지에서 파라미터 블록의 최좌측 바이트의 논리적 주소를 포함한다. 24-비트 어드레싱 모드에서, 범용 레지스터 1의 비트 위치들 40-63의 내용들은 주소를 구성하고, 비트 위치들 0-39의 내용들은 무시된다. 31-비트 어드레싱 모드에서, 범용 레지스터 1의 비트 위치들 33-63의 내용들은 주소를 구성하고, 비트 위치들 0-32의 내용들은 무시된다. 64-비트 어드레싱 모드에서, 범용 레지스터 1의 비트 위치들 0-63의 내용들은 주소를 구성한다.
쿼리 펑션은 다른 펑션들의 이용가능성을 표시하는 수단을 제공한다. 명령(R1, R2)의 필드들에 의해 특정되는 범용 레지스터들, 및 R2 + 1의 내용들은 쿼리 펑션에 대해 무시된다.
다른 모든 펑션들에 대해, 제2 오퍼랜드(R2로 특정됨)는 파라미터 블록 내 크립토그래픽 키를 사용하여 펑션 코드에 의해 특정된 바와 같이 암호화(cipher)되며, 그 결과는 제1-오퍼랜드 위치에 배치된다.
체이닝을 갖는 싸이퍼 메시지(CIPHER MESSAGE WITH CHAINING)에 대해, 싸이퍼링(ciphering)은 또한 파라미터 블록에서 초기 체이닝 값(chaining value)을 사용하며, 체이닝 값은 동작의 일부로서 업데이트된다. 24 비트 어드레싱에 대한 레지스터 사용은 표 5에 도시되어 있다.
R1 필드는 범용 레지스터를 지정하고 짝수 번째(even-numbered) 레지스터를 지정해야 한다. 만약 그렇지 않으면, 스펙 예외(specification exception)가 인정된다.
R2 필드는 범용 레지스터들의 짝수-홀수 쌍을 지정하고 짝수 번째 레지스터를 지정해야 한다. 만약 그렇지 않으면, 스펙 예외가 인정된다.
제1 및 제2 오퍼랜드들의 최좌측 바이트의 위치는 각각 R1 및 R2 범용 레지스터들의 내용들에 의해 특정된다. 제2 오퍼랜드 위치에서 바이트들의 수는 범용 레지스터 R2 + 1에 특정된다. 제1 오퍼랜드는 제2 오퍼랜드와 동일한 길이이다.
동작의 일부로서, 범용 레지스터들 R1 및 R2에서 주소들은 처리되는 바이트들의 수에 의해 증가되고, 범용 레지스터 R2 + 1의 길이는 동일한 수로 감소된다. 주소들 및 길이의 포메이션(formation) 및 업데이트는 어드레싱 모드에 의존한다.
24-비트 어드레싱 모드에서, 범용 레지스터 R1 및 R2의 비트 위치들 40-63의 내용들은 각각 제1 및 제2 오퍼랜드들의 주소들을 구성하고, 비트 위치들 0-39의 내용들은 무시되며, 업데이트된 주소들의 비트들 40-63은 범용 레지스터들 R1 및 R2에서 대응하는 비트들을 대체하며, 업데이트된 주소의 비트 위치 40으로부터의 캐리들(carries)은 무시되며, 범용 레지스터들 R1 및 R2의 비트 위치들 32-39의 내용들은 0들로 세트된다. 31-비트 어드레싱 모드에서, 범용 레지스터들 R1 및 R2의 비트 위치들 33-63의 내용들은 각각 제1 및 제2 오퍼랜드들의 주소들을 구성하고, 비트 위치들 0-32의 내용들은 무시되며, 업데이트된 주소들의 비트들 33-63은 범용 레지스터들 R1 및 R2에서 대응하는 비트들을 대체하며, 업데이트된 주소의 비트 위치 33으로부터의 캐리들은 무시되며, 범용 레지스터들 R1 및 R2의 비트 위치 32의 내용은 0으로 세트된다. 64-비트 어드레싱 모드에서, 범용 레지스터들 R1 및 R2의 위치들 0-63의 내용들은 각각 제1 및 제2 오퍼랜드들의 주소들을 구성하며, 업데이트된 주소들의 비트들 0-63은 범용 레지스터들 R1 및 R2의 내용들을 대체하며, 비트 위치 0으로부터의 캐리들은 무시된다.
24-비트 및 31-비트 어드레싱 모드 둘 다에서, 범용 레지스터 R2 + 1의 비트 위치들 32-63의 내용들은 32-비트 무부호 바이너리 정수(unsigned binary integer) - 이는 제1 및 제2 오퍼랜드에서 바이트들의 수를 특정함 - 를 이루며, 비트 위치들 0-31의 내용들은 무시되고, 업데이트된 값의 비트들 32-63은 범용 레지스터 R2 + 1에서 대응하는 비트들을 대체한다. 64-비트 어드레싱 모드에서, 범용 레지스터 R2 +1의 비트 위치들 0-63의 내용들은 64-비트 무부호 바이너리 정수 - 이는 제1 및 제2 오퍼랜드들에서 바이트들의 수를 특정함 - 를 이루며, 업데이트된 값은 범용 레지스터 R2 + 1의 내용들을 대체한다.
24-비트 또는 31-비트 어드레싱 모드에서, 범용 레지스터들 R1, R2, 및 R2 + 1의 비트 위치들 0-31의 내용들은 항상 변경되지 않고 남는다. 이하의 특징은 단지 기술된 범용 레지스터들의 내용들을 도시한다.
억세스-레지스터 모드에서, 억세스 레지스터들 1, R1, 및 R2는 각각 파라미터 블록, 제1 및 제2 오퍼랜드를 포함하는 주소 공간들을 특정한다.
그 결과는, 블록단위로(block by block), 마치 처리가 제1 및 제2 오퍼랜드들 둘 다의 좌측 끝(left end)에서 시작하여 오른쪽으로 진행되는 것처럼 획득된다. 범용 레지스터 R2 + 1에 특정된 것과 같이 제2 오퍼랜드에서 바이트들의 수가 처리되었고 제1-오퍼랜드 위치에 위치할 때(정상 완료(normal completion)로 일컬어짐), 또는 제2 오퍼랜드의 길이보다 짧은 블록들의 CPU-결정 수가 처리되었을 때(부분 완료로 일컬어짐), 동작은 종료된다. 블록들의 CPU-결정 수(CPU-determined number)는 모델에 의존하며, 명령이 실행될 때마다 다른 수일 수 있다. 블록들의 CPU-결정 수는 통상 논제로(nonzero)이다. 일정한 특이한 상황들에서, 이 수는 0일 수 있으며, 조건 코드 3은 미진행(no progress)으로 세트될 수 있다. 그러나, CPU는 이 미진행 경우의 끝없는 재발생으로부터 보호한다.
만약 다음의 상황들 중 어떤 것이 일어난다면, 제1-오퍼랜드 위치 및 체이닝-값 필드에서의 결과들은 예측가능하지 않다.
크립토그래픽-키 필드(cryptographic-key field)가 제1 오퍼랜드의 어떤 부분과 겹친다.
체이닝-값 필드(chaining-value field)가 제1 또는 제2 오퍼랜드의 어떤 부분과 겹친다.
제1 및 제2 오퍼랜드들이 파괴적으로(destructively) 겹친다. 좌에서 우로 그리고 한 번에 한 바이트씩 처리가 수행될 것이라고 가정하고, 데이터가 제1 오퍼랜드 위치 안으로 이동된 이후에, 제1 오퍼랜드 위치가 소스로서 사용될 때, 오퍼랜드들은 파괴적으로 겹치는 것으로 일컬어진다.
동작이 정상 종료로 인해 끝날 때, 조건 코드 0이 세트되고 R2 + 1에서 결과 값은 0이다. 동작이 부분 종료로 인해 끝날 때, 조건 코드 3이 세트되고 R2 + 1에서 결과 값은 논제로이다.
스토리지-변경(alteration) PER 이벤트가 인정될 때, 그 이벤트가 보고되기 전에, 4K보다 적은 추가 바이트들이 제1 오퍼랜드 위치들 내에 저장된다.
제2 오퍼랜드 길이가 초기에 0일 때, 파라미터 블록, 제1 및 제2 오퍼랜드는 억세스되지 않고, 범용 레지스터들 R1, R2, 및 R2 + 1은 변경되지 않으며, 조건 코드 0이 세트된다.
R1 및 R2 필드들의 내용들이 동일할 때, 지정된 레지스터들의 내용들은, 처리되는 바이트들의 수의 두 배가 아니라 단지 처리되는 바이트들의 수로 증가된다.
다른 CPU들 및 채널 프로그램들에 의해 주시되는 바와 같이, 스토리지 오퍼랜드들 및 파라미터 블록에 대한 레퍼런스들은 멀티플-억세스 레퍼런스들일 수 있고, 이들 스토리지 위치들에 대한 억세스들은 반드시 블록 동시발생(block-concurrent)일 필요는 없으며, 이들 억세스들 또는 레퍼런스들의 시퀀스는 정의되지 않는다.
일정한 특이한 상황들에서, 처리된 제1 및 제2 오퍼랜드들의 마지막 유닛을 반영하기 위해 레지스터들 및 체이닝 값을 업데이트하지 않고서 조건 코드 3을 세팅함으로써, 명령 실행이 완료될 수 있다. 이 경우에 처리된 유닛의 사이즈는 상황 및 모델에 의존하지만, 처리되었고 보고되지 않은 제1 및 제2 오퍼랜드들의 일부분이 스토리지에서 겹치지 않도록 제한된다. 모든 경우들에 있어서, 변경 비트들(change bits)은 세트되고, PER 스토리지-변경 이벤트들은, 적용가능할 때, 처리된 모든 제1-오퍼랜드 위치들에 대해, 보고된다.
억세스 예외들은 명령의 단일 실행에서 처리되는 것보다 오퍼랜드의 더 큰 부분에 대해 보고될 수 있지만, 억세스 예외들은 오퍼랜드의 길이를 넘어서는 위치들에 대해 인정되지 않으며, 또한 처리되고 있는 현재 위치를 넘어서 4K 바이트 이상의 위치들에 대해서도 인정되지 않는다.
싸이퍼 메시지(CIPHER MESSAGE)에 대한 펑션 코드들은 다음과 같다.
코드 펑션 파라미터 블록
사이즈
(바이트)
데이터 블록
사이즈
(바이트)
0 KM-Query 16 -
1 KM-DEA 8 8
2 KM-TDEA-128 16 8
3 KM-TDEA-192 24 8
18 KM-AES-128 16 16
19 KM-AES-192 24 16
20 KM-AES-256 32 16
설명 :

- 적용할 수 없음
Figure 112013000196925-pct00003
일 예로서 싸이퍼 메시지(CIPHER MESSAGE) 명령을 사용하여, 머신의 일 예는 CIPHER MESSAGE 펑션들을 구현할 수 있다. 일 실시예에서, 호스트 프로세서들은 보여지는 펑션들 모두(펑션 코드 0-3 및 18-20)를 구현할 수 있다. 호스트 운영체제(OS)(또는 하이퍼바이저)는 게스트 OS들을 위해 하나 또는 그 이상의 가상 머신들을 생성할 수 있다. 하나의 가상 머신은 이전의 레벨 아키텍쳐에 대해 정의될 수 있으며, CIPHER MESSAGE 명령들을 갖지 않는다.
일 실시예에 따라, 만약 명령 차단 퍼실리티(Instruction Blocking Facility)가 인스톨되었고 CIPHER MESSAGE 명령들이 VM에 대해 차단된 명령들(Blocked instructions)로 지정되었다면, 비록 기초(underlying) 호스트 머신이 CIPHER MESSAGE 명령들을 지원했더라도, 가상 머신은 가상 머신에서 실행 중인 프로그램들에 의해 CIPHER MESSAGE 명령 실행을 허용하지 않을 것이다. VM에서 CIPHER MESSAGE 명령을 실행하려는 시도는 결국 프로그램 체크(프로그램 예외)를 초래할 것이다.
또 다른 실시예에 따라, 만약 펑션 차단 퍼실리티(Function blocking facility)가 인스톨되었고 VM에서 CIPHER MESSAGE 펑션들의 서브세트만이(예를 들어, 펑션 코드들 0-3) 허용되었다면, 가상 머신은 CIPHER MESSAGE 실행을 허용할 것이지만, 비록 기초 호스트 머신이 펑션 코드들(0-3 및 18-20)을 지원하는 CIPHER MESSAGE 명령들을 지원했더라도, 가상 머신에서 실행 중인 프로그램들에 의해 0-3 이외의 펑션 코드를 갖는 CIPHER MESSAGE 명령들의 CIPHER MESSAGE 명령 실행을 허용하지 않을 것이다. 18-20 중 어떤 것과 같이 0-3 이외의 펑션 코드들을 갖는 CIPHER MESSAGE 명령을 실행하려는 시도는 결국 프로그램 체크(프로그램 예외)를 초래할 것이다.
또 다른 실시예에서, 만약 펑션 테스트/쿼리 퍼실리티가 인스톨되었고 VM에서 CIPHER MESSAGE 펑션들의 서브세트만이(예를 들어 펑션 코드들 0-3) 허용되었다면, 비록 기초 호스트 머신이 펑션 코드들 0-3 및 18-20을 지원했더라도, CIPHER MESSAGE 펑션들의 CIPHER MESSAGE 쿼리의 실행은 단지 펑션 코드들 0-3만을 리턴할 것이다.
다른 예 zArchitecture 멀티-펑션 명령들:
컴퓨트 인터미디어트 메시지 다이제스트( COMPUTE INTERMEDIATE MESSAGE DIGEST)(KIMD) 및 컴퓨트 라스트 메시지 다이제스트( COMPUTE LAST MESSAGE DIGEST)(KLMD) 명령들:
컴퓨터 시스템에 의해 실행될 때, 범용 레지스터 0에서 펑션 코드에 의해 특정된 펑션이 수행된다. R1 필드 및 명령의 비트들 16-23은 무시된다. 범용 레지스터 0의 비트 위치들 57-63은 펑션 코드를 포함한다. 범용 레지스터 0의 비트 56은 0이어야 한다. 만약 그렇지 않으면, 스펙 예외가 인정된다. 범용 레지스터 0의 다른 모든 비트들은 무시된다. 범용 레지스터 1은 스토리지에서 파라미터 블록의 최좌측 바이트의 논리적 주소를 포함한다. 24-비트 어드레싱 모드에서, 범용 레지스터 1의 비트 위치들 40-63의 내용들은 주소를 구성하고, 비트 위치들 0-39의 내용들은 무시된다. 31-비트 어드레싱 모드에서, 범용 레지스터 1의 비트 위치들 33-63의 내용들은 주소를 구성하고, 비트 위치들 0-32의 내용들은 무시된다. 64-비트 어드레싱 모드에서, 범용 레지스터 1의 비트 위치들 0-63의 내용들은 주소를 구성한다. 다른 모든 펑션 코드들은 미배정된다. 쿼리 펑션은 다른 펑션들의 이용가능성을 표시하는 수단을 제공한다. 범용 레지스터들 R2 및 R2 + 1의 내용들은 쿼리 펑션에 대해 무시된다. 다른 모든 펑션들에 대해, 제2 오퍼랜드는 파라미터 블록에서 초기 체이닝 값을 사용하여 펑션 코드에 의해 특정됨에 따라 처리되고, 그 결과는 체이닝 값을 대체한다. 컴퓨트 라스트 메시지 다이제스트(COMPUTE LAST MESSAGE DIGEST)에 대해, 동작은 또한 파라미터 블록에서 메시지 비트 길이를 사용한다. 어느 것이 먼저 발생하든지 간에, 제2 오퍼랜드 위치의 끝에 이르거나 CPU-결정 수의 바이트들이 처리될 때까지, 동작은 계속된다. 그 결과는 조건 코드에 표시된다. R2 필드는 범용 레지스터들의 짝수-홀수 쌍을 지정하며 짝수 번째 레지스터를 지정해야한다. 만약 그렇지 않으면, 스펙 예외가 인정된다. 제2 오퍼랜드의 최좌측 바이트의 위치는 R2 범용 레지스터의 내용들에 의해 특정된다. 제2 오퍼랜드 위치에서 바이트들의 수는 범용 레지스터 R2 + 1에 특정된다. 동작의 일부로서, 범용 레지스터 R2에서 주소는 제2 오퍼랜드로부터 처리된 바이트들의 수로 증가되고, 범용 레지스터 R2 + 1에서 길이는 동일한 수로 감소된다. 주소 및 길이의 포메이션 및 업데이트는 어드레싱 모드에 의존한다. 24-비트 어드레싱 모드에서, 범용 레지스터 R2의 비트 위치들 40-63의 내용들은 제2 오퍼랜드의 주소를 구성하고, 비트 위치들 0-39의 내용들은 무시되며, 업데이트된 주소의 비트들 40-63은 범용 레지스터 R2에서 대응하는 비트들을 대체하며, 업데이트된 주소의 비트 위치 40으로부터의 캐리들은 무시되고, 범용 레지스터 R2의 비트 위치들 32-39의 내용들은 0들로 세트된다. 31-비트 어드레싱 모드에서, 범용 레지스터 R2의 비트 위치들 33-63의 내용들은 제2 오퍼랜드의 주소를 구성하고, 비트 위치들 0-32의 내용들은 무시되며, 업데이트된 주소의 비트들 33-63은 범용 레지스터 R2에서 대응하는 비트들을 대체하며, 업데이트된 주소의 비트 위치 33으로부터의 캐리들은 무시되며, 범용 레지스터 R2의 비트 위치 32의 내용은 0으로 세트된다. 64-비트 어드레싱 모드에서, 범용 레지스터 R2의 비트 위치들 0-63의 내용들은 제2 오퍼랜드의 주소를 구성하고, 업데이트된 주소의 비트들 0-63은 범용 레지스터 R2의 내용들을 대체하며, 비트 위치 0으로부터의 캐리들은 무시된다. 24-비트 및 31-비트 어드레싱 모드 둘 다에서, 범용 레지스터 R2 + 1의 비트 위치들 32-63의 내용들은 32 비트 무부호 바이너리 정수를 이루는데, 이 32 비트 무부호 바이너리 정수는 제2 오퍼랜드에서 바이트들의 수를 특정하며, 업데이트된 값은 범용 레지스터 R2 + 1의 비트 위치들 32-63의 내용들을 대체한다. 64-비트 어드레싱 모드에서, 범용 레지스터 R2 + 1의 비트 위치들 0-63의 내용들은 64 비트 무부호 바이너리 정수를 이루는데, 이 64-비트 무부호 바이너리 정수는 제2 오퍼랜드에서 바이트들의 수를 특정한다. 그리고 업데이트된 값은 범용 레지스터 R2 + 1의 내용들을 대체한다. 24-비트 또는 31-비트 어드레싱 모드에서, 범용 레지스터들 R2 및 R2 + 1의 비트 위치들 0-31의 내용들은 항상 변경되지 않는다. 억세스-레지스터 모드에서, 억세스 레지스터들 1 및 R2는 각각 파라미터 블록 및 제2 오퍼랜드를 포함하는 주소 공간들을 특정한다. 그 결과는 마치 블록단위로 제2 오퍼랜드의 좌측 끝에서 처리가 시작되어 우측으로 진행되는 것처럼 획득된다. 제2 오퍼랜드에서 모든 소스 바이트들이 처리되었을 때(정상 완료로 일컬어짐), 또는 제2 오퍼랜드의 길이보다 작은 CPU 결정 수의 블록들이 처리되었을 때(부분 완료로 일컬어짐), 동작은 끝난다. CPU 결정 수의 블록들은 모델에 의존하며, 명령이 실행될 때마다 서로 다른 수일 수 있다. CPU 결정 수의 블록들은 보통 논제로이다. 일정한 특이 상황들에서, 이 수는 0일 수 있고, 조건 코드 3은 미진행(no progress)으로 세트될 수 있다. 그러나, CPU는 이러한 미진행의 경우의 끝없는 재발생으로부터 보호한다. 체이닝-값 필드가 제2 오퍼랜드의 어떤 부분과 겹칠 때, 체이닝-값 필드에서의 결과는 예측가능하지 않다. 컴퓨트 인터미디어트 메시지 다이제스트(COMPUTE INTERMEDIATE MESSAGE DIGEST)에 대해서는, 범용 레지스터 R2 + 1에 특정된 바와 같이 제2 오퍼랜드에서 바이트들의 수가 처리되었을 때, 정상 완료가 일어난다. 컴퓨트 라스트 메시지 다이제스트(COMPUTE LAST MESSAGE DIGEST)에 대해서는, 범용 레지스터 R2 + 1에 특정된 바와 같이 제2 오퍼랜드에서 모든 바이트들이 처리된 후에, 패딩 동작(padding operation)이 수행되며, 그런 다음 정상 종료가 일어난다. 동작이 정상 종료에 기인하여 끝날 때, 조건 코드 0이 세트되고 R2 + 1에서 결과 값은 0이다. 동작이 부분 완료에 기인하여 끝날 때, 조건 코드 3이 세트되고 R2 + 1에서 결과 값은 논제로이다. 제2-오퍼랜드 길이가 초기에 0일 때, 제2 오퍼랜드는 억세스되지 않으며, 범용 레지스터들 R2 및 R2 + 1은 변경되지 않으며, 조건 코드 0이 세트된다. 컴퓨트 인터미디어트 메시지 다이제스트에 대해서는, 파라미터 블록은 억세스되지 않는다. 그러나, 컴퓨트 라스트 메시지 다이제스트에 대해서는, 빈 블록(empty block)(L=0) 케이스 패딩 동작(case padding operation)이 수행되고 그 결과는 파라미터 블록 내에 저장된다. 다른 CPU들 및 채널 프로그램들에 의해 주시되는 바와 같이, 스토리지 오퍼랜드들 및 파라미터 블록에 대한 레퍼런스들은 멀티-억세스 레퍼런스들일 수 있고, 이들 스토리지 위치들에 대한 억세스들은 반드시 블록 동시발생(block concurrent)일 필요는 없으며, 이들 억세스들 또는 레퍼런스들의 시퀀스는 정의되지 않는다. 억세스 예외들은 명령의 단일 실행에서 처리되는 것보다 더 큰 부분의 제2 오퍼랜드에 대해 보고될 수 있으나, 억세스 예외들은 제2 오퍼랜드의 길이를 넘어서는 위치들에 대해 인정되지는 않으며 또한 처리되고 있는 현재의 위치를 넘어서 4K 바이트들 이상의 위치들에 대해서도 인정되지 않는다.
KIMD - 쿼리 ( KIMD 펑션 코드 0)
파라미터 블록에 128-비트 상태 워드가 저장된다. 이 필드의 비트들 0-127은 컴퓨트 인터미디어트 메시지 다이제스트(COMPUTE INTERMEDIATE MESSAGE DIGEST) 명령의 펑션 코드들 0-127에 각각 대응한다. 비트가 1일 때, 대응하는 펑션이 인스톨되고, 그렇지 않으면, 펑션은 인스톨되지 않는다. KIMD 쿼리 펑션의 실행이 완료될 때 조건 코드 0이 세트되고, 이 펑션에 대해 조건 코드 3은 적용가능하지 않다.
KIMD - SHA -1( KIMD 펑션 코드 1)
파라미터 블록에서 20-바이트 체이닝 값으로 SHA-1 블록 다이제스트 알고리즘을 사용하여 오퍼랜드 2에서 64 바이트 메시지 블록들에 대해 20-바이트 인터미디어트 메시지 다이제스트가 생성된다. 생성된 인터미디어트 메시지 다이제스트는 또한, 출력 체이닝 값(output chaining value, OCV)로 일컬어지며, 파라미터 블록의 체인닝 값 필드에 저장된다.
KIMD - SHA -256( KIMD 펑션 코드 2)
파라미터 블록에서 32-바이트 체이닝 값으로 SHA-256 블록 다이제스트 알고리즘을 사용하여 오퍼랜드 2에서 64-바이트 메시지 블록들에 대해 32-바이트 인터미디어트 메시지 다이제스트가 생성된다. 생성된 인터미디어트 메시지 다이제스트는 또한 출력 체이닝 값(OCV)으로 일컬어지며, 파라미터 블록의 체이닝 값 필드에 저장된다.
KIMD - SHA -512( KIMD 펑션 코드 3)
파라미터 블록에서 64-바이트 체이닝 값으로 SHA-512 블록 다이제스트 알고리즘을 사용하여 오퍼랜드 2에서 128-바이트 메시지 블록들에 대해 64-바이트 인터미디어트 메시지 다이제스트가 생성된다. 생성된 인터미디어트 메시지 다이제스트는 또한 출력 체이닝 값(OCV)으로 일컬어지며, 파라미터 블록의 체이닝 값 필드에 저장된다.
KLMD - 쿼리 ( KLMD 펑션 코드 0)
파라미터 블록에 128-비트 상태 워드가 저장된다. 이 필드의 비트들 0-127은 컴퓨트 라스트 메시지 다이제스트(COMPUTE LAST MESSAGE DIGEST) 명령의 펑션 코드들 0-127에 각각 대응한다. 비트가 1일 때, 대응하는 펑션이 인스톨되며, 그렇지 않으면, 펑션은 인스톨되지 않는다. KLMD 쿼리 펑션의 실행이 완료될 때 조건 코드 0이 세트되며, 조건 코드 3은 이 펑션에게는 적용될 수 없다.
KLMD - SHA -1( KLMD 펑션 코드 1)
파라미터 블록에서 체이닝 값 및 메시지-비트-길이 정보로 SHA-1 알고리즘을 사용하여 오퍼랜드 2에서 메시지(M)에 대한 메시지 다이제스트가 생성된다. 만약 오퍼랜드 2에서 메시지의 길이가 64 바이트보다 더 크거나 같다면, 파라미터 블록에서 20-바이트 체이닝 값으로 SHA-1 블록 다이제스트 알고리즘을 사용하여 각각의 64-바이트 메시지 블록에 대해 인터미디어트 메시지 다이제스트가 생성되고, 생성된 인터미디어트 메시지 다이제스트는 또한 출력 체이닝 값(OCV)으로 일컬어지고, 파라미터 블록의 체이닝-값 필드 내에 저장된다. 이 동작은 남은 메시지가 64 바이트보다 작을 때까지 반복된다. 만약 메시지의 길이 또는 남은 메시지가 0 바이트이면, 동작이 수행된다. 만약 메시지 또는 남은 메시지의 길이가 1 바이트와 55 바이트 사이에 포함되면, 동작이 수행된다. 메시지 다이제스트는 또한 출력 체이닝 값(OCV)으로 일컬어지며, 파라미터 블록의 체이닝 값 필드 내에 저장된다.
KLMD - SHA -256( KLMD 펑션 코드 2)
파라미터 블록에서 체이닝 값 및 메시지-비트-길이 정보로 SHA-256 알고리즘을 사용하여 오퍼랜드 2에서 메시지(M)에 대한 메시지 다이제스트가 생성된다. 만약 오퍼랜드 2에서 메시지가 64 바이트보다 크거나 같다면, 파라미터 블록에서 32-바이트 체이닝 값으로 SHA-256 블록 다이제스트 알고리즘을 사용하여 각각의 64-바이트 메시지 블록에 대해 인터미디어트 메시지 다이제스트가 생성되며, 생성된 인터미디어트 메시지 다이제스트는 또한 출력 체이닝 값(OCV)으로 일컬어지며, 파라미터 블록의 체이닝-값 필드 내에 저장된다. 남은 메시지가 64 바이트보다 작을 때까지 이 동작은 반복된다. 만약 메시지의 길이 또는 남은 메시지가 0바이트이면, 동작이 수행된다. 만약 메시지 또는 남은 메시지의 길이가 1 바이트와 55 바이트 사이에 포함되면, 동작이 수행되며, 만약 길이가 56 바이트와 63 바이트 사이에 포함되면, 동작이 수행된다. 메시지 다이제스트는 또한 출력 체이닝 값(OCV)으로 일컬어지며, 파라미터 블록의 체이닝 값 필드 내에 저장된다.
KLMD - SHA -512( KLMD 펑션 코드 3)
파라미터 블록에서 체이닝 값 및 메시지-비트-길이 정보로 SHA-512 알고리즘을 사용하여 오퍼랜드 2에서 메시지(M)에 대한 메시지 다이제스트가 생성된다. 만약 오퍼랜드 2에서 메시지가 128 바이트와 같거나 더 크다면, 파라미터 블록에서 64 바이트 체이닝 값으로 SHA-512 블록 다이제스트 알고리즘을 사용하여 각각의 128-바이트 메시지 블록에 대해 인터미디어트 메시지 다이제스트가 생성되고, 발생된 인터미디어트 메시지 다이제스트는 또한 출력 체이닝 값(OCV)으로 일컬어지며 파라미터의 체이닝-값 필드 내에 저장된다. 남은 메시지가 128 바이트보다 작을 때까지 이 동작은 반복된다. 만약 메시지의 길이 또는 남은 메시지의 길이가 0 바이트이면, 동작이 수행된다. 만약 메시지의 길이 또는 남은 메시지가 1 바이트와 111 바이트 사이에 포함된다면, 동작이 수행되고, 만약 그 길이가 112 바이트와 127 바이트 사이에 포함된다면, 동작이 수행된다. 메시지 다이제스트는 또한 출력 체이닝 값(OCV)으로 일컬어지며, 파라미터 블록의 체이닝-값 필드 내에 저장된다.
컴퓨트 메시지 인증 코드( COMPUTE MESSAGE AUTHENTICATION CODE )( KMAC ) 명령
컴퓨터 시스템에 의해 실행될 때, 범용 레지스터 0에서 펑션 코드에 의해 특정된 펑션이 수행된다. R1 필드 및 명령의 비트들 16-23은 무시된다. 범용 레지스터 0의 비트 위치들 57-63은 펑션 코드를 포함한다. 다른 모든 펑션 코드들은 배정되지 않는다. 범용 레지스터 0의 비트 56은 0이어야 한다. 만약 그렇지 않다면, 스펙 예외가 인정된다. 범용 레지스터 0의 다른 모든 비트들은 무시된다. 범용 레지스터 1은 스토리지에서 파라미터 블록의 최좌측 바이트의 논리적 주소를 포함한다. 24-비트 어드레싱 모드에서, 범용 레지스터 1의 비트 위치들 40-63의 내용들은 주소를 구성하고, 비트 위치들 0-39의 내용들은 무시된다. 31-비트 어드레싱 모드에서, 범용 레지스터 1의 비트 위치들 33-63의 내용들은 주소를 구성하고, 비트 위치들 0-32의 내용들은 무시된다. 64-비트 어드레싱 모드에서, 범용 레지스터 1의 비트 위치들 0-63의 내용들은 주소를 구성한다. 쿼리 펑션은 다른 펑션들의 이용가능성을 표시하는 수단을 제공한다. 범용 레지스터들 R2 및 R2 + 1의 내용들은 무시된다. 다른 모든 펑션들에 있어서, 파라미터 블록에서 초기 체이닝 값을 사용하여 펑션 코드에 의해 특정되는 바와 같이 제2 오퍼랜드가 처리되고 그 결과는 체이닝 값을 대체한다. 동작은 또한 파라미터 블록에서 크립토그래픽 키를 사용한다. 어느 것이 먼저 발생하든지 간에, 제2 오퍼랜드 위치의 끝에 이르거나 CPU 결정 수의 바이트들이 처리될 때까지 동작은 진행된다. 그 결과는 조건 코드에 표시된다. R2 필드는 범용 레지스터들의 짝수-홀수 쌍을 지정하며 짝수 레지스터를 지정해야 한다. 그렇지 않으면 스펙 예외가 인정된다. 제2 오퍼랜드의 최좌측 바이트의 위치는 R2 범용 레지스터의 내용들에 의해 특정된다. 제2 오퍼랜드 위치에서 바이트들의 수는 범용 레지스터 R2 + 1에 특정된다. 동작의 일부로서, 범용 레지스터 R2에서 주소는 제2 오퍼랜드로부터 처리된 바이트들의 수로 증가되고, 범용 레지스터들 R2 + 1에서 길이는 동일한 수로 감소된다. 주소 및 길이의 포메이션 및 업데이트는 어드레싱 모드에 의존한다. 24-비트 어드레싱 모드에서, 범용 레지스터 R2의 비트 위치들 40-63의 내용들은 제2 오퍼랜드의 주소를 구성하고, 비트 위치들 0-39의 내용들은 무시되며, 업데이트된 주소의 비트들 40-63은 범용 레지스터 R2에서 대응하는 비트들을 대체하며, 업데이트된 주소의 비트 위치들 40로부터의 캐리들은 무시되며, 범용 레지스터 R2의 비트 위치들 32-39의 내용들은 0들로 세트된다. 31-비트 어드레싱 모드에서, 범용 레지스터 R2의 비트 위치들 33-63의 내용들은 제2 오퍼랜드의 주소를 구성하며, 비트 위치들 0-32의 내용들은 무시되며, 업데이트된 주소의 비트들 33-63은 범용 레지스터 R2에서 대응하는 비트들을 대체하며, 업데이트된 주소의 비트 위치 33으로부터의 캐리들은 무시되며, 범용 레지스터 R2의 비트 위치 32의 내용은 0으로 세트된다. 64-비트 어드레싱 모드에서, 범용 레지스터 R2의 비트 위치들 0-63의 내용들은 제2 오퍼랜드의 주소를 구성하고, 업데이트된 주소의 비트들 0-63은 범용 레지스터 R2의 내용들을 대체하며 비트 위치 0으로부터의 캐리들은 무시된다. 24-비트 및 32-비트 어드레싱 모드 둘 다에서, 범용 레지스터 R2 + 1의 비트 위치들 32-63의 내용들은 32-비트 무부호 바이너리 정수를 이루는데, 이 32-비트 무부호 바이너리 정수는 제2 오퍼랜드의 바이트들의 수를 특정한다. 그리고 업데이트된 값은 범용 레지스터 R2 + 1의 비트 위치들 32-63의 내용들을 대체한다. 64-비트 어드레싱 모드에서, 범용 레지스터 R2 + 1의 비트 위치들 0-63의 내용들은 64-비트 무부호 바이너리 정수를 이루는데, 이 64-비트 무부호 바이너리 정수는 제2 오퍼랜드에서 바이트들의 수를 특정한다. 그리고 업데이트된 값은 범용 레지스터 R2 + 1의 내용들을 대체한다. 24-비트 또는 31-비트 어드레싱 모드에서, 범용 레지스터들 R2 및 R2 + 1의 비트 위치들 0-31의 내용들은 항상 변경되지 않는다. 억세스-레지스터 모드에서, 억세스 레지스터들 1 및 R2는 각각 파라미터 블록 및 제2 오퍼랜드를 포함하는 주소 공간들을 특정한다. 그 결과는 마치 처리가 블록 단위로 제2 오퍼랜드의 좌측 끝에서 시작하여 오른쪽으로 진행되는 것처럼 획득된다. 제2 오퍼랜드에서 모든 소스 바이트들이 처리되었을 때(정상 완료로 일컬어짐), 또는 제2 오퍼랜드의 길이보다 더 작은 CPU 결정 수의 블록들이 처리되었을 때(부분 완료로 일컬어짐), 동작은 끝난다. CPU 결정 수의 블록들은 모델에 의존하며, 명령이 실행될 때마다 다른 수일 수 있다. CPU 결정 수의 블록들은 일반적으로 논제로이다. 일정한 특이 상황들에서, 이 수는 0일 수 있고, 조건 코드 3은 미진행으로 세트될 수 있다. 그러나, CPU는 이 미진행 경우의 끝없는 재발생으로부터 보호한다. 체이닝-값 필드가 제2 오퍼랜드의 어떤 부분과 겹칠 때, 체이닝-값 필드에서 결과는 예측가능하지 않다. 범용 레지스터 R2 + 1에서 특정되는 바와 같이 제2 오퍼랜드에서 바이트들의 수가 처리될 때 정상 완료가 발생한다. 동작이 정상 완료에 기인하여 끝날 때, 조건 코드 0이 세트되고 R2 + 1에서 결과 값은 0이다. 동작이 부분 완료에 기인하여 끝날 때, 조건 코드 3이 세트되고 R2 + 1에서 결과 값은 논제로이다. 제2-오퍼랜드 길이가 초기에 0일 때, 제2 오퍼랜드 및 파라미터 블록은 억세스되지 않고, 범용 레지스터들 R2 및 R2 + 1은 변경되지 않으며, 조건 코드 0이 세트된다. 다른 CPU들 및 채널 프로그램들에 의해 주시되는 바와 같이, 스토리지 오퍼랜드들 및 파라미터 블록에 대한 레퍼런스들은 멀티-억세스 레퍼런스들일 수 있고, 이들 스토리지 위치들에 대한 억세스들은 반드시 블록 동시발생일 필요는 없으며, 이들 억세스들 또는 레퍼런스들의 시퀀스는 정의되지 않는다. 억세스 예외들은 명령의 단일 실행에서 처리되는 것보다 더 많은 부분의 제2 오퍼랜드에 대해 보고될 수 있다. 그러나, 제2 오퍼랜드의 길이를 넘는 위치들에 대해서는 억세스 예외들이 인정되지 않고 또한 처리되고 있는 현재의 위치를 넘는 4K 바이트들 이상의 위치들에 대해서도 억세스 예외들이 인정되지 않는다.
KMAC - 쿼리 ( 펑션 코드 0)
파라미터 블록에 128-비트 상태 워드가 저장된다. 이 필드의 비트들 0-127은 KMAC 명령의 펑션 코드들 0-127에 각각 대응한다. 비트가 1일 때, 대응하는 펑션이 인스톨되고, 만약 그렇지 않으면, 펑션은 인스톨되지 않는다. KMAC 쿼리 펑션의 실행이 완료될 때 조건 코드 0이 세트되며, 조건 코드 3은 이 펑션에는 적용가능하지 않다.
KMAC - DEA ( 펑션 코드 1)
오퍼랜드 2에서 8-바이트 메시지 블록들(M1, M2, ..., Mn)에 대한 메시지 인증 코드는, 파라미터 블록에서 64-비트 체이닝 값과 64-비트 크립토그래픽 키로 DEA 알고리즘을 사용하여 계산된다. 메시지 인증 코드는 또한 출력 체이닝 값(OCV)으로 일컬어지며 파라미터 블록의 체이닝-값 필드에 저장된다.
KMAC - TDEA -128( 펑션 코드 2)
오퍼랜드 2에서 8-바이트 메시지 블록들(M1, M2, ..., Mn)에 대한 메시지 인증 코드는, 파라미터 블록에서 64-비트 체이닝 값 및 두 개의 64-비트 크립토그래픽 키들로 TDEA 알고리즘을 사용하여 계산된다. 메시지 인증 코드는 또한 출력 체이닝 값(OCV)으로 일컬어지며 파라미터 블록의 체이닝-값 필드에 저장된다.
KMAC - TDEA -192( 펑션 코드 3)
오퍼랜드 2에서 8-바이트 메시지 블록들(M1, M2, ..., Mn)에 대한 메시지 인증 코드는, 파라미터 블록에서 64-비트 체이닝 값 및 세 개의 64-비트 크립토그래픽 키들로 TDEA 알고리즘을 사용하여 계산된다. 메시지 인증 코드는 또한 출력 체이닝 값(OCV)으로 일컬어지며 파라미터 블록의 체이닝-값 필드에 저장된다.
퍼폼 락 동작 명령( PERFORM LOCKED OPERATION INSTRUCTION )
컴퓨터 시스템에 의해 실행될 때, 범용 레지스터 1에 특정된 락(lock)이 획득된 이후, 범용 레지스터 0에서 펑션에 의해 특정된 동작이 수행되고, 그런 다음 락이 풀린다. 그러나, 다른 CPU들에 의해 주시되는 바와 같이, (1) 파라미터 리스트 - 이 파라미터 리스트는, 락이 획득되기 전에, 만약 테스트되는 위치에서 저장이 가능하다면 스토어-유형 억세스 예외들에 대해, 사용될 수 있고, 페치될 수 있고, 또한 테스트될 수 있음 - 에서의 필드들을 포함하여, 스토리지 오퍼랜드들, 및 (2) 락이 풀린 이후에 파라미터 리스트에 오퍼랜드들이 저장될 수 있다. 만약 락이 획득되기 전에, 파라미터 리스트에 있지 않은 오퍼랜드가 페치되면, 그것은 락이 획득된 이후에 다시 페치된다. 펑션 코드는 6 가지 동작들, 즉, 비교 및 로드(compare and load), 비교 및 스왑(compare and swap), 이중 비교 및 스왑(double compare and swap), 비교 및 스왑 및 저장(compare and swap and store), 비교 및 스왑 및 이중 저장(compare and swap and double store), 또는 비교 및 스왑 및 삼중 저장(compare and swap and triple store) 중 어떤 것을 특정할 수 있다. 범용 레지스터 0에서 테스트 비트는, 1일 때, 락이 획득되지 않을 것이라는 것 그리고 6 가지 동작들 중 어느 것도 수행되지 않을 것이라는 것을 특정하지만, 그 대신, 펑션 코드의 유효성(validity)이 테스트될 것이라는 것을 특정한다. 이것은, 만약 추가 동작들을 위한 추가 펑션 코드들이 장차 배정된다면, 유용할 것이다. 그렇지 않은 것으로 언급될 때를 제외하고는, 이 정의는 마치 테스트 비트가 0인 것처럼 쓰여진다. 만약 비교 및 로드가 특정되면, 제1-오퍼랜드 비교 값 및 제2 오퍼랜드가 비교된다. 만약 그것들이 같다면, 제4 오퍼랜드 비교 값 및 제2 오퍼랜드가 비교된다. 만약 그 비교가 같지 않은 것을 표시한다면, 제2 오퍼랜드는 새로운 제1-오퍼랜드 비교 값으로 제1-오퍼랜드-비교-값 위치에 배치된다. 만약 비교 및 스왑이 특정되면, 제1-오퍼랜드 비교 값 및 제2 오퍼랜드가 비교된다. 만약 그것들이 같다면, 제1-오퍼랜드 대체 값이 제2-오퍼랜드 위치에 저장된다. 만약 그 비교가 같지 않은 것을 표시한다면, 제2 오퍼랜드는 새로운 제1-오퍼랜드 비교 값으로 제1-오퍼랜드-비교 값 위치에 배치된다. 만약 이중 비교 및 스왑이 특정되면, 제1 오퍼랜드 비교 값 및 제2 오퍼랜드가 비교된다. 만약 그것들이 같다면, 제3-오퍼랜드 비교 값 및 제4 오퍼랜드가 비교된다. 만약 두 개의 비교들이 동일함을 표시한다면, 제1 오퍼랜드 및 제3-오퍼랜드 대체 값들은 각각 제2-오퍼랜드 위치 및 제4 오퍼랜드 위치에 저장된다. 만약 제1 비교가 같지 않은 것을 표시한다면, 제2 오퍼랜드는 새로운 제1-오퍼랜드 비교 값으로 제1-오퍼랜드 비교-값 위치에 배치된다. 만약 제1 비교가 동일함을 표시하지만 제2 비교는 그렇지 않다면, 제4 오퍼랜드는 새로운 제3-오퍼랜드 비교 값으로 제3-오퍼랜드-비교-값에 배치된다. 만약 비교 및 스왑 및 저장, 이중 저장, 또는 삼중 저장이 특정되면, 제1-오퍼랜드 비교 값 및 제2 오퍼랜드가 비교된다. 만약 그것들이 같다면, 제1-오퍼랜드 대체 값은 제2-오퍼랜드 위치에 저장되고, 제3 오퍼랜드는 제4-오퍼랜드 위치에 저장된다. 그런 다음, 만약 동작이 이중-저장 또는 삼중-저장 동작이라면, 제5 오퍼랜드는 제6-오퍼랜드 위치에 저장되고, 만약 그것이 삼중-저장 동작이라면, 제7 오퍼랜드는 제8-오퍼랜드 위치에 저장된다. 만약 제1-오퍼랜드 비교가 같지 않은 것을 표시한다면, 제2 오퍼랜드는 새로운 제1 오퍼랜드 비교 값으로 제1 오퍼랜드-비교-값 위치에 배치된다. 6 가지 동작들 중 어떤 것 이후에, 비교 또는 비교들의 결과는 조건 코드에 표시된다. 펑션 코드(FC)는 범용 레지스터 0의 비트 위치들 56-63에 있다. 제1-동작 비교 및 대체 값들 및 제3 오퍼랜드 또는 제3-오퍼랜드 비교 및 대체 값들 - 이것들은 총괄하여 간단히 제1 및 제3 오퍼랜드들로 일컬어짐 - 이 범용 레지스터들 또는 파라미터 리스트에 있든지 간에, 펑션 코드는 수행될 동작뿐만이 아니라 오퍼랜드들의 길이를 특정한다. 펑션 코드들의 패턴은 다음과 같다. ·4의 배수(multiple)(0을 포함함)인 펑션 코드는 범용 레지스터들의 비트 위치들 32-63에서 제1 및 제3 오퍼랜드들로 32-비트 길이를 특정한다. ·4의 배수보다 1 더 큰 펑션 코드는 파라미터 리스트에서 제1 및 제3 오퍼랜드들로 64-비트 길이를 특정한다. ·4의 배수보다 2 더 큰 펑션 코드는 범용 레지스터들의 비트 위치들 0-63에서 제1 및 제3 오퍼랜드들로 64-비트 길이를 특정한다. ·4의 배수보다 3 더 큰 펑션 코드는 파라미터 리스트에서 제1 및 제3 오퍼랜드들로 128-비트 길이를 특정한다.
예를 들어, PLO.DCS는 펑션 코드 8로 퍼폼 락 동작(PERFORM LOCKED OPERATION)을 의미하는 것으로 사용될 수 있다. 심볼들에서, 문자 "G"는 64-비트 오퍼랜드 길이를 표시하고, 문자 "R"은 64-비트 오퍼랜드들 모두 또는 일부가 범용 레지스터들에 있다는 것을 표시하며, 문자 "X"는 128-비트 오퍼랜드 길이를 표시한다. 동작들이 구현(인스톨)되지 않기 때문에 CPU가 수행할 수 없는 동작들을 특정하거나 동작들에 배정되지 않은 펑션 코드들은 무효(invalid)로 일컬어진다. 범용 레지스터 0의 비트 55는 테스트 비트(T)이다. 비트 55가 0일 때, 범용 레지스터 0에서 펑션 코드는 유효해야 한다. 그렇지 않으면, 스펙 예외가 인정된다. 비트 55가 1일 때, 만약 펑션 코드가 유효하다면 조건 코드는 0으로 세트되고 또는 만약 펑션 코드가 무효라면, 3으로 세트되며, 다른 어떤 동작도 수행되지 않는다. 범용 레지스터 0의 비트들 32-54는 모두 0이 되어야 한다. 그렇지 않으면 스펙 예외가 인정된다. 레지스터의 비트 55가 1일 때, 이는 인정될 수 있는 유일한 예외이다. 범용 레지스터 0의 비트들 0-31은 무시된다. 사용될 락(lock)은 프로그램 락 토큰(PLT)에 의해 표현되는데, 이 PLT의 논리적 주소는 범용 레지스터 1에 특정된다. 24-비트 어드레싱 모드에서, PLT 주소는 범용 레지스터 1의 비트들 40-63이며, 레지스터의 비트들 0-39는 무시된다. 31-비트 어드레싱 모드에서, PLT 주소는 레지스터의 비트들 33-63이며, 레지스터의 비트들 0-32는 무시된다. 64-비트 어드레싱 모드에서, PLT 주소는 레지스터의 비트들 0-63이다. 0을 포함하여 짝수 펑션 코드들에 있어서, 제1-오퍼랜드 비교 값은 범용 레지스터 R1에 있다. 4로 시작하는 짝수 펑션 코드들에 대해, 제1-오퍼랜드 대체 값은 범용 레지스터 R1 + 1에 있고, R1은 레지스터들의 짝수-홀수 쌍을 지정하며, 짝수 레지스터를 지정해야 한다. 그렇지 않으면, 스펙 예외가 인정된다. 펑션 코드들 0 및 2에 있어서, R1은 짝수 또는 홀 수일 수 있다. 펑션 코드들 0, 2, 12, 및 14에 대해, 제3 오퍼랜드는 범용 레지스터 R3에 있고, R3은 짝수 또는 홀수일 수 있다. 펑션 코드들 8 및 10에 대해, 제3-오퍼랜드 비교 값은 범용 레지스터 R3에 있고, 제3-오퍼랜드 대체 값은 범용 레지스터 R3 + 1에 있으며, R3은 레지스터들의 짝수-홀수 쌍을 지정하며 짝수 레지스터를 지정해야 한다. 그렇지 않으면, 스펙 예외가 인정된다. 모든 펑션 코드들에 있어서, 명령의 B2 및 D2 필드들은 제2-오퍼랜드 주소를 특정한다. 펑션 코드들 0, 2, 8, 10, 12, 및 14에 대해, 명령의 B4 및 D4는 제4-오퍼랜드 주소를 특정한다. 펑션 코드들, 1, 3, 5, 7, 9, 11, 13, 15 및 16-23에 대해, 명령의 B4 및 D4 필드들은 명령에 의해 사용되는 파라미터 리스트의 주소를 특정하고, 이 주소는 제4 오퍼랜드 주소로 일컬어지지 않는다. 파라미터 리스트는 비교 및 대체 값들을 포함하여, 홀수 오퍼랜드들, 및 제2 오퍼랜드 이외의 짝수 번째 오퍼랜드들의 주소들을 포함한다. 억세스-레지스터 모드에서, 파라미터 리스트는 또한 짝수 오퍼랜드 주소들과 연관된 억세스-리스트-엔트리 토큰들(ALETs)을 포함한다. 억세스-레지스터 모드에서, ALET를 포함하는 파라미터 리스트의 사용을 초래하는 펑션 코드들에 대해, R3는 0이 아니어야 한다. 그렇지 않으면, 스펙 예외가 인정된다. 파라미터 리스트에서 오퍼랜드 주소들은, 만약 사용된다면, 리스트에서 더블워드들에 있다. 24-비트 어드레싱 모드에서, 오퍼랜드 주소는 더블워드의 비트들 40-63이고, 더블워드의 비트들 0-39는 무시된다. 31-비트 어드레싱 모드에서, 오퍼랜드 주소는 더블워드의 비트들 33-63이며, 더블워드의 비트들 0-32는 무시된다. 64-비트 어드레싱 모드에서, 오퍼랜드 주소는 더블워드의 비트들 0-63이다. 억세스-레지스터 모드에서, 억세스 레지스터 1은 프로그램 락 토큰(PLT)을 포함하는 주소 공간을 특정하며, 억세스 레지스터 B2는 제2 오퍼랜드를 포함하는 주소 공간을 특정하며, 억세스 레지스터 B4는 제4 오퍼랜드 또는 파라미터 리스트를 포함하는 주소 공간을 특정한다. 또한, 주소가 파라미터 리스트에 있는 오퍼랜드에 대해, 억세스리스트-엔트리 토큰(ALET)은 주소와 함께 리스트에 있고, 오퍼랜드를 포함하는 주소 공간을 특정하기 위해 억세스-레지스터 모드에서 사용된다. 억세스-레지스터 모드에서, 만약 억세스 예외 또는 PER 스토리지-변경 이벤트가 파라미터 리스트에 주소가 있는 오퍼랜드에 대해 인정된다면, 파라미터 리스트에서 연관된 ALET는, 예외 또는 이벤트가 인정될 때 억세스 레지스터 R3 내에 로드된다. 그런 다음, 그 결과의 프로그램 인터럽션동안, 만약 값이 실제 위치 161에서 PER 억세스 식별(identification) 또는 실제 위치 160에서 예외 억세스 식별로 저장되는 것에 기인한다면, R3이 저장된다. 만약 명령 예외가 예외 또는 이벤트의 인정없이 완료된다면, 억세스 레지스터 R3의 내용들은 예측가능하지 않다. 억세스-레지스터 모드에 있지 않을 때, 또는 ALET를 포함하는 파라미터 리스트가 사용되지 않을 때, 억세스 레지스터 R3의 내용들은 변경되지 않는 상태로 남는다. 짝수(2, 4, 6, 및 8) 스토리지 오퍼랜드들은 인테그럴 바운더리(integral boundary)에 관해 지정되어야 하는데, 이 인테그럴 바운더리는 4의 배수인 펑션 코드들에 대한 워드 바운더리, 4의 배수보다 1 또는 2 더 큰 펑션 코드들에 대한 더블워드 바운더리, 또는 4의 배수보다 3 더 큰 펑션 코드들에 대한 쿼드워드 바운더리이다. 파라미터 리스트는, 만약 사용된다면, 더블워드 바운더리에 관해 지정되어야 한다. 그렇지 않으면, 스펙 예외가 인정된다. 범용 레지스터 1에서 프로그램-락-토큰(PLT) 주소는 바운더리-정렬 요건을 갖지 않는다. 파라미터 리스트에서 모든 미사용 필드들은 모두 0을 포함하여야 한다. 그렇지 않으면, 프로그램은 장차 호환되게 동작하지 않을 수 있다. 락이 획득된 후 곧바로 그리고 다시 그것이 풀리고 곧바로 직렬화 펑션(serialization function)이 수행된다. 그러나, 락이 획득되기 전, 파라미터 리스트로부터 페치된 값들은 반드시 재페치될 필요는 없다. 직렬화 펑션은, 만약 테스트 비트인, 범용 레지스터 0의 비트 55가 1이면 수행되지 않는다.
펑션 코드들 0-3(비교 및 로드)
제1-오퍼랜드 비교 값은 제2 오퍼랜드와 비교된다. 제1-오퍼랜드 비교 값이 제2 오퍼랜드와 같을 때, 제3 오퍼랜드는 제4 오퍼랜드에 의해 대체되며, 조건 코드 0이 세트된다. 제1-오퍼랜드 비교 값이 제2 오퍼랜드와 같지 않을 때, 제1-오퍼랜드 비교 값은 제2 오퍼랜드에 의해 대체되며, 조건 코드 1이 세트된다.
펑션 코드들 4-7(비교 및 스왑)
제1-오퍼랜드 비교 값은 제2 오퍼랜드와 비교된다. 제1-오퍼랜드 비교 값이 제2 오퍼랜드와 같을 때, 제1 오퍼랜드 대체 값이 제2 오퍼랜드 위치에 저장되고, 조건 코드 0이 세트된다. 제1-오퍼랜드 비교 값이 제2 오퍼랜드와 같지 않을 때, 제1-오퍼랜드 비교 값은 제2 오퍼랜드에 의해 대체되고, 조건 코드 1이 세트된다.
펑션 코드들 8-11(이중 비교 및 스왑)
제1-오퍼랜드 비교 값은 제2 오퍼랜드와 비교된다. 제1-오퍼랜드 비교 값이 제2 오퍼랜드와 같을 때, 제3 오퍼랜드 비교 값은 제4 오퍼랜드와 비교된다. 제3-오퍼랜드 비교 값이 제4 오퍼랜드와 같을 때(제1-오퍼랜드 비교 값이 제2 오퍼랜드와 같다고 확인된 이후), 제1-오퍼랜드 대체 값이 제2-오퍼랜드 위치에 저장되고, 제3 오퍼랜드 대체 값은 제4 오퍼랜드 위치에 저장되며, 조건 코드 0이 세트된다. 제1-오퍼랜드 비교 값이 제2 오퍼랜드와 같지 않을 때, 제1-오퍼랜드 비교 값은 제2 오퍼랜드에 의해 대체되며, 조건 코드 1이 세트된다. 제3-오퍼랜드 비교 값이 제4 오퍼랜드와 같지 않을 때(제1-오퍼랜드 비교 값이 제2 오퍼랜드와 같은 것으로 확인된 이후), 제3-오퍼랜드 비교 값은 제4 오퍼랜드에 의해 대체되고, 조건 코드 2가 세트된다.
펑션 코드들 12-15(비교 및 스왑 및 저장)
제1-오퍼랜드 비교 값이 제2 오퍼랜드와 비교된다. 제1-오퍼랜드 비교 값이 제2 오퍼랜드와 같으면, 제1 오퍼랜드 위치, 제3 오퍼랜드는 제4-오퍼랜드 위치에 저장되고, 조건 코드 0이 세트된다. 제1-오퍼랜드 비교 값이 제2 오퍼랜드와 같지 않을 때, 제1-오퍼랜드 비교 값은 제2 오퍼랜드에 의해 대체되며, 조건 코드 1이 세트된다.
펑션 코드들 16-19(비교 및 스왑 및 이중 저장)
제1-오퍼랜드 비교 값이 제2 오퍼랜드에 저장된다. 제1-오퍼랜드 비교 값이 제2 오퍼랜드와 같을 때, 제1 오퍼랜드 대체 값은 제2 오퍼랜드 위치에 저장되며, 제3 오퍼랜드는 제4-오퍼랜드 위치에 저장되고, 제5 오퍼랜드는 제6-오퍼랜드 위치에 저장되며, 조건 코드 0이 세트된다. 제1-오퍼랜드 비교 값이 제2 오퍼랜드와 같지 않을 때, 제1-오퍼랜드 비교 값은 제2 오퍼랜드에 의해 대체되며, 조건 코드 1이 세트된다.
펑션 코드들 20-23(비교 및 스왑 및 삼중 저장)
제1-오퍼랜드 비교 값이 제2 오퍼랜드와 비교된다. 제1-오퍼랜드 비교 값이 제2 오퍼랜드와 같을 때, 제1 오퍼랜드 대체 값은 제2 오퍼랜드 위치에 저장되며, 제3 오퍼랜드는 제4-오퍼랜드 위치에 저장되고, 제5 오퍼랜드는 제6-오퍼랜드 위치에 저장되며, 제7 오퍼랜드는 제8-오퍼랜드 위치에 저장되며, 조건 코드 0이 세트된다. 제1-오퍼랜드 비교 값이 제2 오퍼랜드와 같지 않을 때, 제1-오퍼랜드 비교 값은 제2 오퍼랜드에 의해 대체되며, 조건 코드 1이 세트된다.
락킹( Locking )
동작의 시작에 락(lock)이 획득되고 동작의 끝에서 풀린다. 획득된 락은 프로그램 락 토큰(program lock token, PLT)으로 표현되는데, 이 PLT의 논리 주소는 이미 설명된 바와 같이 범용 레지스터 1에서 특정된다. PLT는 PLT 논리 주소의 모델 의존 변형(model-dependent transformation)에 의해 생성된 값이다. 모델에 따라, PLT는 PLT 논리 주소로부터 직접적으로 유도될 수 있고, 또는 DAT가 온(on)일 때, 결국 DAT에 의해 PLT 논리 주소의 변형으로부터 얻어지는 실제 주소로부터 유도될 수 있다. 만약 DAT가 사용되면, 억세스-레지스터 모드에서 억세스 레지스터 변환(access register translation, ART)이 DAT를 앞선다. PLT는 구성 내에서 락들의 모델 의존 수 중 하나를 선택한다. 서로 다른 CPU들에 의해 실행되고 있는 프로그램들은, 동일하고 또한 서로 다른 CPU들에 의해 동일한 실제 주소로 변형될 수 있는 PLT 논리 주소들을 단지 특정함으로써 동일한 락을 특정하는 것이 보장될 수 있다. PLT를 형성할 때 모델은 ART 및 DAT를 사용할 수도 있고 사용하지 않을 수도 있으므로, ART 및 DAT 동안 겪을 수 있는 억세스-예외 조건들은 예외들로 인정될 수도 있고 그렇지 않을 수도 있다. PLT에 의해 지정되는 위치의 억세스는 없지만, 그 위치에 대해 어드레싱 예외가 인정될 수 있다. 보호 예외(protection exception)는 PLT 논리 주소의 처리동안 어떠한 이유에 대해서도 인정되지 않는다. CPU는 한 번에 하나의 락을 유지(hold)한다. 퍼폼 락 동작(PERFORM LOCKED OPERATION)이 이 CPU에 의해 실행되고 또한 다른 CPU에 의한 퍼폼 락 동작(PERFORM LOCKED OPERATION)의 실행에 기인하여 또 다른 CPU에 의해 이미 유지되는 락을 사용할 때, 이 CPU에 의한 실행은 그 락이 더 이상 유지되지 않을 때까지 지연된다. 과도한 지연은 단지 머신 오작동(malfunction)에 의해서만 초래될 수 있고 머신-체크 조건이다. 동일한 락에 대한 다수의 요청들이 충족되는 순서는 정의되지 않는다. 락을 유지하는 동안의 CPU의 극복할 수 없는 고장은 결국 머신 체크를 초래할 수 있고, 체크-중단 상태(check-stop state)로 들어가거나 시스템 체크 중단으로 들어간다. 만약 모든 오퍼랜드들이 손상되지 않으면 머신 체크는 처리 백업(processing backup)이고, 또는 레지스터 오퍼랜드들이 손상되면 머신 체크는 처리 손상(processing damage)이다. 만약 머신 체크 또는 체크-중단 상태가 그 결과라면, 아무런 스토리지 오퍼랜드들도 변경되지 않았거나, 변경되는 것에 기인한 그 밖의 모든 스토리지 오퍼랜드들은 바르게 변경되었고, 어느 경우에나, 락은 풀린다. 만약 스토리지 오퍼랜드들이 그들의 바른 원 상태(correct original state)에 있지 않거나 그들의 바른 최종 상태에 있지 않으면, 그 결과는 시스템 체크 중단이다.
퍼폼 플로팅 -포인트 동작 명령( PERFORM FLOATING - POINT OPERATION INSTRUCTION ):
컴퓨터 시스템에 의해 실행될 때, 범용 레지스터 0에서 펑션 코드에 의해 특정되는 동작이 수행되고 그 결과를 표시하기 위해 조건 코드가 세트된다. 아무런 예외 조건들도 없을 때, 조건 코드 0이 세트된다. IEEE 논-트랩(non-trap) 예외가 인정될 때, 조건 코드 1이 세트된다. 얼터네이트 액션(alternate action)을 갖는 IEEE 트랩 예외가 인정될 때, 조건 코드 2가 세트된다. 32-비트 리턴 코드는 범용 레지스터 1의 비트들 32-63에 배치되고, 범용 레지스터 1의 비트들 0-31은 변경되지 않는 상태로 남는다. 퍼폼 플로팅-포인트 동작(PERFORM FLOATING-POINT OPERATION, PFPO) 명령은 AFP-레지스터 컨트롤 비트, 컨트롤 레지스터 0의 비트 45에 종속된다. 성공적으로 실행될 PFPO에 대해, AFP-레지스터-컨트롤 비트는 1이어야 한다. 만약 그렇지 않으면, AFP-레지스터 데이터 예외, DXC 1이 인정된다. 범용 레지스터 0의 비트 32는 테스트 비트이다. 비트 32가 0일 때, 범용 레지스터 0의 비트들 33-63에 의해 특정된 펑션이 수행되고, 비트들 33-63에서 각각의 필드는 유효해야 하고 또한 그 조합(combination)이 유효하고 인스톨된 펑션이어야 한다. 그렇지 않으면, 스펙 예외가 인정된다. 비트 32가 1일 때, 비트들 33-63에 의해 특정된 펑션이 수행되지 않지만, 그 대신에, 이들 비트들이 유효하고 인스톨된 펑션을 펑션을 특정하는지를 표시하기 위해 조건 코드가 세트되며, 만약 펑션이 유효하고 인스톨되면, 조건 코드는 0으로 세트되며, 만약 펑션이 유효하지 않거나 인스톨되지 않으면, 조건 코드는 3으로 세트된다. 만약 장차 추가 펑션들이 배정되면, 이것은 유용할 것이다. 그렇지 않은 것으로 언급될 때를 제외하고는, 이 정의는 마치 테스트 비트가 0인 것처럼 쓰여진다.
GR0의 비트들 33-39은 동작 유형을 특정한다. 단지 하나의 동작 유형이 현재 정의된다. 즉, 01, 헥스(hex)는 PFPO 컨버트 플로팅-포인트 래딕스(PFPO Convert Floating-Point Radix)이다. PFPO-컨버트-플로팅-포인트-래딕스 동작에 대해, 범용 레지스터 0에서 다른 필드들은 제1-오퍼랜드 포맷, 제2 오퍼랜드 포맷, 컨트롤 플래그들, 및 라운딩 메쏘드(rounding method)를 포함한다. PFPO-컨버트-플로팅 포인트-래딕스 동작에 대해, 제2 오퍼랜드는 제1 오퍼랜드의 포맷으로 변환되고 제1-오퍼랜드 위치에 배치되며, 리턴 코드는 범용 레지스터 1의 비트들 32-63에 배치되고, 예외 조건이 인정되었는지를 표시하기 위해 조건 코드가 세트된다. 제1 및 제2 오퍼랜드들은 암시된(implicit) 플로팅 포인트 레지스터들에 있다. 제1 오퍼랜드는 FPRO(확장을 위해 FPR2와 짝지어짐(paired))에 있다. 제2 오퍼랜드는 FPR4(확장을 위해 FPR6과 짝지어짐))에 있다.
얼터네이트 -예외-액션 컨트롤( Alternate - Exception - Action Control ):
범용 레지스터 0의 비트 57은 얼터네이트-예외-액션 콘트롤이다. 이 컨트롤의 세팅은 IEEE-오버플로우 및 IEEE-언더플로우 트랩 예외들에 대해 취해진 액션에 영향을 준다. 얼터네이트-예외-액션 컨트롤이 0일 때, IEEE-오버플로우 및 IEEE-언더플루오 트랩 예외들은 노멀한 방법으로 보고된다. 즉, 플로팅-포인트 컨트롤 레지스터의 바이트 2에 적절한 데이터 예외 코드(data exception code, DXC)가 배치되고, 동작이 완료되며, 데이터 예외에 대한 프로그램 인터럽션이 발생한다. (프로그램 인터럽션의 일부로서, DXC는 로케이션 147에 저장된다.) 이는 노멀한 액션을 갖는 IEEE 트랩 예외(IEEE trap exception with normal action)로 일컬어진다. 얼터네이트-예외-액션 컨트롤이 1일 때, DXC는 플로팅-포인트 컨트롤 레지스터의 바이트 2에 배치되며, 동작이 완료되고, 조건 코드 2가 세트되며, 프로그램 예외는 그 다음의 순차적인 명령으로 계속된다. (어떠한 프로그램 인터럽션도 없고 DXC는 로케이션 147에 저장되지 않는다.) 이는 알터네이트 액션을 갖는 IEEE 트랩 예외(IEEE trap exception with alternate action)으로 일컬어진다.
HFP - 오버플로우 컨트롤( HFP - Overflow Control ):
범용 레지스터 0의 비트 58은 HFP-오버플로우 컨트롤이다. HFP-오버플로우 컨트롤이 0일 때, HFP-오버플로우 조건은 IEEE-무효-동작 예외로 보고되고 또한 IEEE-무효-동작 마스크의 대상이 된다. HFP-오버플로우 컨트롤이 1일 때, HFP-오버플로우 조건은 IEEE-오버플로우 예외로 보고되고 또한 IEEE-오버플로우 마스크의 대상이 된다. HFP-오버플로우 컨트롤은 단지 HFP 타겟들에 대해서만 정의되며, HFP 타겟 이외의 다른 것이 특정될 때, 이 비트는 0이어야 한다.
HFP - 언더플로우 컨트롤( HFP - Underflow Control ):
HFP 타겟들에 대해, 범용 레지스터 0의 비트 59는 HFP 알터네이트 언더플로우 컨트롤이다. HFP-언더플로우 컨트롤이 0일 때, HFP 언더플로우는 그 결과가 소스와 동일한 부호를 갖는 참 0(true zero)로 세트되도록 하고, 언더플로우는 보고되지 않는다. (이 경우의 결과는 정확하지 않고 그 정확하지 않은 억제 컨트롤(inexact-suppression control)의 대상이 된다.) HFP-언더플로우 컨트롤이 1일 때, 조건은 IEEE-언더플로우 예외로 보고되고 IEEE-언더플로우 마스크의 대상이 된다. 범용 레지스터 0의 비트 59는 단지 HFP 및 DFP 타겟에 대해서만 정의되고, BFP 타겟이 특정될 때, 이 비트는 0이어야 한다.
DFP 우선 퀀텀 컨트롤( DFP Perferred Quantum Control , DPQC ):
DFP 타겟들에 대해, 범용 레지스터 0의 비트 59는 DFP 우선 퀀텀 컨트롤(DPQC)이다. DFP 타겟들로의 래딕스 변환에 대해, 만약 전달된 값이 정확하지 않으면, 가장 작은 퀀텀을 갖는 코호트 멤버(cohort member)가 선택되고, 만약 전달된 값이 정확하다면, 선택은 범용 레지스터 0의 비트 59의 값, DPF 우선 퀀텀 컨트롤(DPQC)에 의존한다. 전달된 값이 정확하고 DPQC 비트가 0일 때, 가장 큰 퀀텀을 갖는 코호트 멤버가 선택된다. 전달된 값이 정확하고 DPQC 비트가 1일 때, 우선 퀀텀(preferred quantum)은 1이고 1에 가장 가까운 퀀텀을 갖는 코호트 멤버가 선택된다.
리턴 코드( Return code )
어떤 조건 코드가 세트되는지에 관계없이, 그리고 테스트 비트가 1인지의 여부에 독립적으로, 32 비트 리턴 코드는 범용 레지스터 1의 비트들 32-63에 배치되고, 범용 레지스터 1의 비트들 0-31은 변경되지 않은 상태로 남는다. 완료하는 IEEE 트랩 예외에 대해 프로그램 인터럽션이 일어날 때 리턴 코드는 또한 범용 레지스터 1에 배치되며, 억제하는 IEEE 트랩 예외에 대해 프로그램 인터럽션이 일어날 때 범용 레지스터 1은 업데이트되지 않는다. 따라서, 범용 레지스터 1은 IEEE-오버플로우, IEEE-언더플로우, 및 IEEE-부정확 트랩 예외들에 대한 프로그램 인터럽션에 관해 업데이트되지만, IEEE-무효-동작 트랩 예외에 대한 프로그램 인터럽션에 관해 업데이트되지 않는다. 그렇지 않은 것으로 명시된 경우를 제외하고는, 리턴 코드는 0의 값이다.
부호 보존( Sign Preservation )
PFPO 변환 플로팅-포인트 래딕스(convert floating-point radix)에 대해, 그 결과의 부호(sign)는 소스의 부호와 동일하다. 이것에 대한 유일한 예외는 소스가 NaN이고 타겟이 HFP일 때이고, 이 경우, 결과는 플러스로 세트된 부호를 갖는 타겟 HFP 포맷(Hmax)에서의 가장 큰 대표적인 수이다.
우선 퀀텀( Preferred Quantum )
DFP 타겟들로의 래딕스 변환에 대해, 만약 전달된 값이 부정확하다면, 가장 작은 퀀텀을 갖는 코호트 멤버가 선택되고, 만약 전달된 값이 정확하다면, 선택은 범용 레지스터 0의 비트 59의 값인, DFP 우선 퀀텀 컨트롤(DPQC)에 의존한다. 전달된 값이 정확하고 DPQC 비트가 0이면, 가장 큰 퀀텀을 갖는 코호트 멤버가 선택된다. 전달된 값이 정확하고 DPQC 비트가 1이면, 우선 퀀텀은 1이고 1에 가장 가까운 퀀텀을 갖는 코호트 멤버가 선택된다.
NaN 변환( NaN Conversion )
DFP와 BFP 사이의 변환시, NaN의 부호는 항상 보존되며, 가능한 경우, 페이로드(payload)의 값이 보존된다. 만약 소스 페이로드의 값이 타겟 페이로드의 최대 값을 넘어선다면, 타겟은 디폴트 QNaN으로 세트되지만, 소스와는 동일한 부호는 아니다. 트랩들이 디스에이블될 때, SNaN은 대응하는 QNaN으로 변환되고, 가능한 경우, 페이로드가 보존된다. 즉, SNaN(x)는 QNaN(x)로 변환되고, 여기서 x는 페이로드의 값이다. DFP에 대해, QNaN(0) 및 SNaN(0) 둘 다가 표현될 수 있다. 그러나 BFP에서, QNaN(0)에 대한 표현은 있지만, SNaN(0)에 대한 표현은 없다.
PFPO 에 대한 스케일된 값 및 부호 스케일링 익스포넨트( Scaled Value and Signed Scaling Exponent (Ω))
PFPO-변환-플로팅-포인트-래딕스 동작에 대해, IEEE-오버플로우 트랩 액션 또는 IEEE-언더플로우 트랩 액션이 일어날 때, 스케일된 값은 다음의 단계들을 사용하여 계산된다.
Figure 112013000196925-pct00004
Ω가 부호 스케일링 익스포넨트인 경우, b는 타겟 래딕스(2, 10, 또는 16)이고, ψ는 스케일 팩터이며, g는 정확도 반올림 값(precision-rounded value)이며, z는 스케일된 값이다. 부호 스케일링 익스포넨트(Ω)는 스케일된 결과의 값의 크기(z)가 범위
Figure 112013000196925-pct00005
에 있게 하도록 선택된다. 부호 스케일링 익스포넨트(Ω)의 값은, 32-비트 부호 바이너리 정수로 처리되며, 범용 레지스터 1의 비트들 32-63에 배치되며, 범용 레지스터 1의 비트들 0-31은 변경되지 않은 상태로 남는다. 스케일된 값은 전달되는 값으로 사용되고 결과 위치에 배치된다. DFP 타겟들에 대해, 스케일된 우선 퀀텀에 가장 가까운 퀀텀을 갖는 코호트 멤버가 선택된다. (그러나 현재 지원되는 모든 변환들에 대해, 그 결과가 항상 부정확하지는 않고, 그래서 가장 작은 퀀텀을 갖는 코호트 멤버가 선택된다는 점을 주목하여야 한다.) BFP 타겟들에 대해, 아무런 리던던트 표현들(redundant representations)도 없으며, 코허트에 단지 하나의 멤버만이 있다. HFP 타겟들에 대해, 그 결과는 정규화(normalize)된다.
HFP 값들( HFP Values )
입력시 정규화되지 않은 HFP 값들은 허용되지만, 모든 HFP 결과들은 정규화된다. 만약 HFP 결과가 가장 작은(크기에서) 표현가능한 정규화된 수보다 작을 것이라면, HFP 언더플로우 조건이 존재한다.
PFPO 에 대한 HFP 오버플로우 및 언더플로우( HFP Overflow and Underflow for PFPO)
PFPO-변환-플로팅-포인트-래딕스 동작의 HFP 타겟에 대해, 오버플로우 및 언더플로우 조건들의 핸들링은 HFP-오버플로우 컨트롤 및 HFP-언더플로우 컨트롤에 의해 각각 컨트롤된다.
H FP 오버플로우 ( HFP Overflow ): HFP 타겟 정확도(precision)의 가장 큰 수(Hmax)가 정확도 반올림 값에 의해 크기에서 초과되어질 때, HFP-오버플로우 조건이 존재한다. 즉, 정규화된 HFP 결과의 특징이 127을 넘어설 때 그리고 프랙션(fraction)이 0이 아닐 때이다. HFP-오버플로우 컨트롤이 0일 때, HFP-오버플로우는 IEEE-무효-동작 예외로 보고되고 또한 FPC 레지스터에서 IEEE-무효-동작 마스크의 대상이 된다. 이는 HFP-오버플로우-애즈-IEEE-무효-동작 조건(HFP - overflow -as-IEEE-invalid-operation condition)으로 일컬어진다. HFP-오버플로우 컨트롤이 1일 때, HFP 오버플로우는 IEEE-오버플로우 예외로 보고되고 또한 FPC 레지스터에서 IEEE-오버플로우 마스크의 대상이 된다. 이는 HFP-오버플로우-애즈-IEEE-오버플로우 조건(HFP - overflow - as - IEEE - overflow condition)으로 일컬어진다.
HFP 언더플로우 ( HFP Underflow ) : HFP-언더플로우 조건은, 정확도 반올림 값이 0이 아니고 HFP 타겟 정확도의 가장 작은 정규화 수보다 크기에서 작을 때, 존재한다. 즉, 정규화된 HFP 결과의 특징이 0보다 작을 때 그리고 프랙션이 0이 아닐 때이다. 그 결과는 소스와 같은 부호를 갖는 진짜 0으로 세트된다. HFP-언더플로우 조건의 보고는 HFP-언더플로우 컨트롤의 대상이 된다. 그러나, 이 경우의 결과는 부정확하고 그 조건에 대한 컨트롤들의 대상이 된다. HFP-언더플로우 컨트롤이 0일 때, HFP 언더플로우 조건은 보고되지 않는다. HFP-언더플로우 컨트롤이 1일 때, HFP 언더플로우는 IEEE-언더플로우 예외로 보고되고 FPC 레지스터에서 IEEE-언더플로우 마스크의 대상이 된다. 이는 HFP-언더플로우-애즈-IEEE 언더플로우 조건(HFP -underflow-as-IEEE underflow condition)으로 일컬어진다.
퍼폼 타이밍 퍼실리티 펑션 명령( PERFORM TIMING FACILIATY FUNCTION INSTRUCTION ):
컴퓨터 시스템에 의해 실행될 때, 범용 레지스터 0에서 펑션에 의해 특정된 타이밍 퍼실리티 펑션(timing facility function)이 수행된다. 평션의 결과(outcome)를 표시하기 위해 조건 코드가 세트된다. 범용 레지스터 1은 스토리지에서 파라미터 블록의 주소를 포함한다. PTFF 쿼리 펑션들은 파라미터 블록에 정보를 배치시키고, PTFF 컨트롤 펑션들은 파라미터 블록으로부터 획득된 정보를 사용한다. 다른 CPU들 및 채널 프로그램들에 의해 주시되는 바와 같이, 파라미터 블록에 대한 레퍼런스들은 다수의 억세스 레퍼런스들일 수 있고, 이들 스토리지 위치들에 대한 억세스들은 반드시 블록 동시발생일 필요는 없으며, 이들 억세스들 또는 레퍼런스들의 시퀀스는 정의되지 않는다. 범용 레지스터 0의 비트 위치들 57-63은 펑션 코드를 포함한다. 범용 레지스터 0의 비트 56은 0이어야 한다. 그렇지 않으면, 스펙 예외가 인정된다. 범용 레지스터 0의 다른 모든 비트들은 무시된다. 범용 레지스터 1은 스토리지에서 파라미터 블록의 최좌측 바이트의 논리 주소를 포함한다. 24-비트 어드레싱 모드에서, 범용 레지스터 1의 비트 위치들 40-63의 내용들은 주소를 구성하고, 비트 위치들 0-39의 내용들은 무시된다. 31-비트 어드레싱 모드에서, 범용 레지스터 1의 비트 위치들 33-63의 내용들은 주소를 구성하고, 비트 위치들 0-32의 내용들은 무시된다. 64-비트 어드레싱 모드에서, 범용 레지스터 1의 비트 위치들 0-63의 내용들은 주소를 구성한다. PTFF-QAF(쿼리 가용 펑션들) 펑션은 다른 펑션들의 이용가능성을 표시하는 수단을 제공한다. PTFF-QAF 펑션은 펑션이 기본 머신 레벨로 수퍼바이저 상태에서 실행중인 프로그램에 대해 인스톨되는지를 표시한다.
PTFF - QAF ( 쿼리 가용 펑션들 ( Query Available Functions ))
펑션에 대해 사용되는 파라미터 블록은 다음의 포맷을 갖는다. 파라미터 블록에 128-비트 필드가 저장된다. 이 필드의 비트들 0-127은 각각 PTFF 명령의 펑션 코드들 0-127에 대응한다. 비트가 1일 때, 대응하는 펑션이 인스톨되고, 그렇지 않으면, 펑션은 인스톨되지 않는다. pb.w1의 비트들 0-3은 1들로 세트된다(이들 비트들은 펑션 코드들 0-3 - 이것들은 현재 쿼리 펑션들에 배정됨 - 을 표현하므로). pb.w1의 비트들 4-31은 추가 쿼리 펑션들을 위해 보존된다. pb.w3의 비트들 0-3은 1들로 세트된다(이들 비트들은 펑션 코드들 64-67 - 이것들은 현재 컨트롤 펑션들에 배정됨 - 을 표현하므로). pb.w3의 비트들 4-31은 추가 컨트롤 펑션들을 위해 보존된다. 파라미터 블록 워드들 pb.w2 및 pb.w4는 장래 확장들을 위해 보존된다.
PTFF - QTO ( 쿼리 TOD 오프셋)
리턴된 64-비트 물리적-클럭 값(pb.Tu)은 가장 최근의 TOD-오프셋-업데이트 이벤트에서 물리적 클럭의 값이다. 리턴된 64-비트 TOD-오프셋 값(pb.d)은 TOD-오프셋의 값(d)을 표시한다. 이는 Tb(기본-머신 TOD 클럭)을 획득하기 위해 Tr(물리적 클럭)에 추가되고 있는 현재 값이다. 즉, Tb = Tr + pb.d. (pb.dl)을 리턴한 64-비트 논리적-TOD-오프셋 값은 Tc(CPU 실행의 현재 레벨에 대한 논리적 TOD 클럭)을 획득하기 위해 Tr(물리적 클럭)에 추가되고 있는 현재 값을 표시한다. 즉, Tc = Tr + pb.dl. 그래서, 기본-머신 레벨에서 실행될 때, pb.dl= pb.d = d이고, 논리적 파티션 레벨에서 실행될 때, Tp-Tb 시기 차(epoch difference)(Dp)가 더해지고, 그 결과는 pb.dl = d + Dp이며, 가상-머신 레벨에서 실행될 때, Tv-Tp 시기차(Dv)가 또한 더해지며, 그 결과는 pb.dl = d + Dp + Dv이다. 만약 있다면, 이들 수학식들의 각각에 대한 더하기에서 비트 위치 0으로부터의 캐리들은 무시된다. 리턴된 64-비트 TOD 시기 차(pb.ed)는 CPU 실행의 현재 레벨에 대한 TOD 시기 차이다. 기본 머신 레벨에서 실행될 때, 이 값은 0이며, 논리적-파티션 레벨에서 실행될 때, 이 값은 Tp-Tb 시기 차(Dp)이며, 가상 머신 레벨에서 실행될 때, 이 값은 Tv-Tp 시기 차(Dv)이다.
PTFF - QSI ( 쿼리 스티어링 정보( Query Steering Information ))
리턴된 64-비트 물리적-클럭 값(pb.Tu)은 가장 최근의 TOD-오프셋-업데이트 이벤트에서 물리적 클럭의 값이다. 남은 필드들은 오래된-에피소드 및 새로운-에피소드 레지스터들의 값들이다.
PTFF - QPT ( 쿼리 물리적 클럭 ( Query Physical Clock ))
리턴된 64-비트 물리적-클럭 값(pb.Tr)은 물리적 클럭의 현재 값이다. 물리적 클럭에 의해 제공되지 않는 최우측 비트 위치들에 대해서는 0들이 저장된다. 클럭이 실행중일 때, 동일한 CPU들 또는 다른 CPU들 상에서 PTFF-QPT의 두 개의 실행들은 반드시 서로 다른 값들의 클럭을 리턴할 필요는 없다.
PTFF - ATO (조정 TOD 오프셋( Adjust TOD Offset ))
파라미터 블록으로부터의 64-비트 값(pb.a)은, 무부호 바이너리 값으로 처리되며, 이는 그 다음의 에피소드의 기본 오프셋에 더해진다. 만약 있다면, 비트 위치 0으로부터의 캐리는 이 더하기에서는 무시된다. 효과는 직접적이지는 않지만, TOD-오프셋-업데이트 이벤트와 동시에 일어나도록 계획된다. 만약 그 다음의 에피소드가 이미 계획되었고, 아직 액티브되지 않았다면, pb.a 및 new.b의 합은 new.b를 대체하고 다른 어떤 액션도 일어나지 않는다. 만약 그 다음의 에피소드가 계획되지 않았다면(즉, 새로운-에피소드 레지스터들이 현재의 에피소드라면), 새로운-에피소드 레지스터들은 오래된 에피소드 레지스터들에 저장되고 새로운 에피소드가 계획된다(따라서, 오래된-에피소드 레지스터들이 현재의 에피소드가 되도록 만든다). 새로운-에피소드 시작 시간(new.s)은 물리적 클럭이 그 다음의 TOD-오프셋-업데이트 이벤트에서 가질 값으로 세트되고 새로운-에피소드 기본 오프셋(new.b)은 pb.a와 TOD-오프셋이 같은 순간에 가질 값의 합으로 세트되고, 현재의 스티어링 파라미터들을 사용하여 계산된다. 스티어링 레이트(steering rate)는 펑션에 의해 변경되지 않으며, 만약 새로운 에피소드가 계획되면, 새로운-에피소드 파인스티어링(finesteering) 및 그로스-스티어링 레이트들(gross-steering rates)은 현재의 값들과 같다. 조정-TOD-오프셋 펑션의 실행은 인터락된다. 그리하여 구성에서 모든 CPU들에 의해 주시됨에 따라, TOD-오프셋 레지스터의 전체 내용들이 함께(concurrently) 그리고 동시에(simultaneously) 업데이트되는 것으로 보이도록 한다. 그러나, 구성에서 CPU들에 의한 논리적 TOD 클럭들(기본-머신 TOD 클럭, 논리적-파티션 TOD 클럭, 및 가상-머신 TOD 클럭)에 대한 억세스들은 네거티브 변경(negative change)의 효과를 가질 수 있고, 논리적 TOD 클럭들이 뒷걸음질치는 것으로 보이도록 할 수 있다.
PTFF - STO (세트 TOD 오프셋( Set TOD Offset ))
파라미터 블록으로부터의 64-비트 값(pb.d)이 TOD 오프셋을 대체한다. 기본-머신 레벨에서 송출(issue)될 때, 그 효과는 즉각적이지 않지만, 그 다음의 TOD-오프셋-업데이트 이벤트와 동시에 발생하도록 계획된다. 만약 그 다음의 에피소드가 이미 계획되었고, 아직 액티브되지 않았다면, pb.d는 new.b를 대체하고 다른 엑션들은 취해지지 않는다. 만약 그 다음의 에피소드가 아직 계획되지 않았고(즉, 새로운-에피소드 레지스터들이 현재 에피소드이면), 새로운-에피소드 레지스터들은 오래된 에피소드 레지스터들에 저장되고, 새로운 에피소드가 계획된다(따라서, 오래된-에피소드 레지스터들이 현재의 에피소드가 되도록 만든다). 새로운-에피소드 시작 시간(new.s)은 그 다음의 TOD-오프셋-업데이트 이벤트에서 물리적 클럭이 가질 값으로 세트되고, 새로운-에피소드 기본 오프셋(new.b)은 pb.d의 값으로 세트된다. 스티어링 레이트는 이 펑션에 의해 변경되지 않으며, 만약 새로운 에피스도가 계획되면, 새로운-에피소드 파인 스티어링 및 그로스-스티어링 레이트들은 현재의 값들과 동일하다. 논리적-파티션 또는 가상 머신 레벨에서 송출될 때, 펑션은 하이퍼바이저에 의해 시뮬레이트될 수 있고, CPU 실행의 현재 레벨에 대한 TOD 시기 차(각각, Dp 또는 Dv)에 대해 동작하며, 아무런 새로운 에피소드가 계획되지 않고 변경은 즉시 효과를 갖는다. 세트-TOD-오프셋 펑션의 실행은 인터락된다. 그리하여, 구성에서 모든 CPU들에 의해 주시됨에 따라, TOD-오프셋 레지스터의 전체 내용들이 함께 그리고 동시에 업데이트되는 것으로 보이도록 한다. 그러나, 구성에서 CPU들에 의한 논리적 TOD 클럭들(기본-머신 TOD 클럭, 논리적-파티션 TOD 클럭, 및 가상-머신 TOD 클럭)에 대한 억세스들은 인위적으로 지연되지는 않으며, 따라서, 더 작은 값에 의한 TOD 오프셋의 대체는 논리적 TOD 클럭들이 뒷걸음질치는 것으로 보이도록 할 수 있다.
PTFF - SFS (세트 파인-스티어링 레이트 ( Set Fine - Steering Rate ))
파라미터 블록으로부터의 32-비트 값(pb.f)은 그 다음의 에피소드를 위한 파인-스티어링 레이트가 된다. 그 효과는 즉각적(immediate)이지 않지만, 그 다음의 TOD-오프셋-업데이트 이벤트와 동시에 발생하도록 계획된다. 만약 그 다음 에피소드가 이미 계획되었고, 아직 액티브되지 않았다면, pf.f는 new.f를 대체하며, 다른 어떤 액션도 취해지지 않는다. 만약 그 다음의 에피소드가 계획되지 않았다면(즉, 새로운-에피소드 레지스터들이 현재의 에피소드이면), 올드-에피소드 레지스터들에 새로운-에피소드 레지스터들이 저장되고, 새로운 에피소드가 계획된다(따라서, 오래된-에피소드 레지스터들이 현재의 에피소드가 되도록 만든다). 새로운-에피소드 시작 시간(new.s)은 물리적 클럭이 그 다음의 TOD-오프셋-업데이트 이벤트에서 가질 값으로 세트되고, 새로운-에피소드 기본 오프셋(new.b)은 같은 순간에 TOD-오프셋이 가질 값으로 세트되며, 현재의 스티어링 파라미터들을 사용하여 계산된다. 새로운-에피소드 파인 스티어링 레이트(new.f)는 pb.f로 세트되고, 새로운-에피소드 그로스-스티어링 레이트는 현재의 값과 같다. 새로운 에피소드가 효과를 가질 때, 모든 프로그램들에 의해 주시됨에 따라 논리적 TOD 클럭들이 단조적으로 증가하고(nomotonically increasing) 고유한 것으로 것으로 보이도록 보장하기 위해, 구성에서 CPU들에 의한 논리적 TOD 클럭들에 대한 억세스들은 인터락된다.
PTFF - SGS (세트 그로스-스티어링 레이트 ( Set Gross - Steering Rate ))
파라미터 블록으로부터의 32-비트 값(pb.g)은 그 다음의 에피소드를 위한 그로스-스티어링 레이트로 된다. 그 효과는 즉각적이지 않지만, 그 다음의 TOD-오프셋-업데이트 이벤트와 동시에 발생하도록 계획된다. 만약 그 다음의 에피소드가 이미 계획되었고, 아직 액티브가 아니라면, pb.g는 new.g를 대체하고 다른 어떤 액션도 취해지지 않는다. 만약 그 다음의 에피소드가 계획되지 않았다면(즉, 새로운-에피소드 레지스터들이 현재의 에피소드라면), 올드-에피소드 레지스터들에 새로운-에피소드 레지스터들이 저장되고 새로운 에피소드가 계획된다(따라서, 오래된-에피소드 레지스터들이 현재의 에피소드가 되도록 만든다). 새로운-에피소드 시작 시간(new.s)은 물리적 클럭이 그 다음의 TOD-오프셋-업데이트 이벤트에서 가질 값으로 세트되고 새로운-에피소드 기본 오프셋(new.b)은 같은 순간에 TOD-오프셋이 가질 값으로 세트되며, 현재의 스티어링 파라미터들을 사용하여 계산된다. 새로운-에피소드 그로스 스티어링 레이트(new.g)는 pb.g로 세트되고 새로운-에피소드 파인-스티어링 레이트는 현재의 값과 동일하다. 새로운 에피소드가 효과를 가질 때, 논리적 TOD 클럭들이 모든 프로그램들에 의해 주시되는 바와 같이 단조적으로 증가하고 고유한 것으로 보이도록 보장하기 위해, 구성에서 CPU들에 의한 논리적 TOD 클럭들에 대한 억세스들은 인터락된다.
명령 차단 퍼실리티( INSTRUCTION BLOCKING FACILITY ):
도 8을 참조하면, VM에서 가상 아키텍쳐 레벨(VAL) 명령 차단 퍼실리티의 펑션이 보여진다. (스토리지 컬럼에서 명령들에 보여지는 바와 같이) VM에서 실행될 각각의 명령은 opcode를 포함한다. 어떤 구현 예들에서, opcode는 명령(901, 902, 903, 904)에서 단일 필드이다. 다른 구현 예들에서, opcode들은 명령(905)
Figure 112013000196925-pct00006
906
Figure 112013000196925-pct00007
의 하나의 필드보다 더 많은 곳에 분산될 수 있다. 바람직하게는, 회로들, 마이크로코드, 또는 이것들의 조합은, opcode에 기초하여, 실행될 명령이 현재의 가상 머신에 의해 지원되었는지 그렇지 않은지를 결정할 것이다. 만약 그것이 지원되지 않았으면, 프로그램 인터럽션, 예를 들어, 프로그램 예외가 표시될 것이고 명령이 억제될 것이다.
일 구현 예에서, 실행될 명령의 opcode는, opcode와 연관된 엔트리의 위치를 찾아내기 위해 opcode 테이블(907) 내에서 인덱스로 사용될 것이다. 위치가 찾아진 엔트리는 opcode에 의해 지원되는 머신 레벨을 표시하는 코드를 포함할 것이다. 또 다른 구현 예에서, 각각의 가상 머신은 opcode 표를 가질 것이고, 표에서 엔트리는 opcode가 가상 머신에 의해 지원되었는지를 표시할 것이다.
도 9를 참조하면, 표(907)로부터 획득된 코드(머신 레벨(ML))(1002)는 가상 머신의 상태 묘사 표(state description table)(1004)의 상태 묘사 엔트리(IBC)(1008)에 비교(1005)될 것이고, 만약 머신 레벨 코드(1002)가 IBC 상태 묘사 엔트리(1008)보다 더 크다면, 명령은 정상적으로 실행될 것이고(1007), 만약 그렇지 않으면, 실행하려는 시도는 결국 프로그램 예외(1006)를 가져올 것이다. 또 다른 실시예에서, OpCode 필드에 추가로 또는 OpCode 필드 이외의 명령의 필드들은 opcode 표(907) 내에서 인덱스하기 위해 사용될 수 있다. 예를 들어, opcode는 이전의 머신 아키텍쳐에서 보존된 필드들(0 또는 무시될)을 가질 수 있는데, 이는 새로운 펑션을 제공하기 위해 더 새로운 아키텍쳐 레벨들에서 채용된다. 일 실시예는 opcode 표(907) 내에서 인덱스하기 위해 OpCode를 갖는 이들 필드들을 포함할 것이다. 또 다른 실시예에서, opcode 표(907)는 연관된 명령에서 보존된 비트들의 허용된 사용을 표시하기 위해 사용된 ML 필드에 추가로 필드들을 가질 수 있다. 예를 들어, 만약 명령이 4 개의 보류 비트들(reserve bits)을 가지며, 만약 모든 비트들이 0, 또는 하나의 1이 필드의 대응하는 앞서 보존된 비트들이 0 또는 1일 수 있다는 것(VM에 대해 명령의 새롭게 도입된 펑션을 허용함)을 표시하는 선택된 비트들에서의 1들이라면, ML 표는 0000을 포함할 수 있다.
명령 테스트/쿼리 퍼실리티(INSTRUCTION TEST/QUERY FACILITY):
만약 명령 테스트/쿼리 퍼실리티의 펑션 차단 퍼실리티(FUNCTION BLOCKING FACILITY)가 인스톨되면(도 10), 일 실시예에서, Opcode 표 엔트리(1001)는 펑션 코드 필드(FCx)(1003)(또는 펑션 코드 표(1108)에 대한 포인터)를 추가로 포함할 수 있다. 펑션 코드 필드(1003)(또는 펑션 코드 표(1108) 엔트리(1107))는 실행될(1102) 펑션 코드와 비교(1103)된다. 만약 펑션 코드가 비교한다면, 명령은 펑션 코드를 사용하도록 허용(1105)된다. 만약 펑션 코드가 비교하지 않는다면(1103), 명령 실행은 프로그램 예외 또는 스펙 예외(프로그램 체크)(1104)와 같은 프로그램 인터럽션을 초래한다.
도 11을 참조하면, 만약 명령 테스트/쿼리 퍼실리티(Test/Query facility)의 펑션 테스트/쿼리 차단 퍼실리티(FUNCTION TEST/QUERY BLOCKING FACILITY)가 인스톨되면, 단지 가상 머신에 의해 허용된 펑션 코드들만이 리턴된다(1205). 일 예에서, 그러한 쿼리들에 응답하기 위해 가상 머신에 의해 사용되는 유효 비트 표(bit significant table)(1108)가 가상 머신을 위해 제공된다. 또 다른 실시예에서, VM에서 명령의 허용된 펑션 코드들(1107)의 결과를 생성하기 위해 호스트 머신의 인스톨된 펑션 코드들로 AND되기(ANDed) 위해 마스크가 가상 머신으로 제공된다(미도시).
도 8을 참조하면, z/Architecture 명령 포맷들의 예가 도시되어 있다. 포맷(901)은 2 바이트 포맷을 도시하는데, 여기서 OpCode(Op)는 고차 바이트를 차지하며, 범용 레지스터 필드들(R1 및 R2)은 남은 바이트의 각각의 4 비트들을 차지한다. 포맷(902)은 단지 명령 포맷의 2 바이트 OpCode를 도시한다. 포맷(903)은 3 레지스터 필드들(R1, X2 및 B2) 그리고 그 다음 변위 필드(Displacement field)(D2)로 일컬어지는 직접 필드(immediate field)에 선행하는 1 바이트 OpCode(Op)를 갖는 4 바이트(워드) 명령을 도시한다. 포맷(904)은 4 바이트 OpCode(Op)를 갖는 4 바이트 명령을 도시하며, 이는 4 비트 레지스터 필드(B2) 그리고 그 다음 12 비트 직접 필드(I2)에 선행한다. 포맷(905)은 4 비트 마스크에 선행하는 2 바이트 OpCode(Op)를 갖는 4 바이트 명령을 도시하며, 이는 4 비트 OpCode 확장(Op) 및 보류된 4 비트 필드에 선행하며, 이 보류된 4 비트 필드는 12 비트 직접 필드(I2)에 선행한다. 포맷(906)은 6 바이트 명령을 도시하며, 이는 3 레지스터 필드들(R1, X2 및 B2) 그리고 그 다음 변위 필드(DL2)로 일컬어지는 직접 필드에 선행하는 1 바이트 OpCode(Op)를 가지며, 이 DL2는 8 비트 직접 필드(DH2) 및 8 비트 OpCode 확장(Op)에 선행한다.
도 8 및 9를 참조하면, 일 실시예에서, 가상 머신의 논리적 프로세서에 의한 확장을 위해 명령이 페치될 때, 탐색 인수(search argument)로서 명령의 OpCode(들)을 사용하여, Opcode 표(907)가 검색된다. 만약 명령에 대해 엔트리가 발견되면(1001), 엔트리는 명령 허가 정보를 결정하기 위한 정보(1002, 1003)를 포함한다. 바람직한 실시예에서, 엔트리는 명령을 지원하는 아키텍쳐의 머신 레벨을 표시하는 코드(ML)를 특정하는 필드(1002)를 포함한다. 각각의 VM을 위해 상태 묘사(1004)가 제공된다. 상태 묘사는 VM이 시뮬레이트될 아키텍쳐의 머신 레벨을 표현하는 필드(IBC)(1005)를 포함한다. 만약 1005, 명령을 지원하는 아키텍쳐의 머신 레벨(ML)이 VM이 시뮬레이트할 아키텍쳐의 머신 레벨(IBC)보다 더 크다면, 프로그램 예외(프로그램 체크)가 시그널되며, 일 실시예에서, 명령의 확장이 억제될 수 있다. 한편, 만약 명령을 지원하는 아키텍쳐의 머신 레벨(ML)이 VM이 시뮬레이트할 아키텍쳐의 머신 레벨(IBC)보다 더 크지 않다면, 명령은 실행되도록 허용된다.
어떤 환경들에서는, 복수의 명령들(예를 들어, 위에서 기술한 싸이퍼 메시지 명령) 중 어떤 것을 실행할 수 있는 명령들이 제공된다. 명령에 의한 펑션의 선택은 펑션을 표현하는 펑션 코드(FC)를 특정하는 방법에 의할 수 있다. 펑션 코드는, 예를 들어, 명령의 비트들 또는 필드들에 의해 명시적으로 특정되거나 명령에 의해 간접적으로 특정될 수 있다. 어떤 경우들에 있어서는, 특정 펑션 코드들은 처음에 머신 아키텍쳐 레벨에서 구현될 수 있고(예를 들어, 0-3), 추가 펑션 코드들은 나중의 머신 아키텍쳐 레벨들에서 더해질 수 있다. VM은 펑션 코드들이 더 오래된 아키텍쳐 레벨을 실행하도록 단지 허용할 수 있는 기능을 제공받을 수 있다.
도 10을 참조하면, 이는 Opcode 표 엔트리(1001)에서 펑션 코드 필드(FCx)(1003)를 가짐으로써 달성될 수 있다. 명령이 실행되려고 할 때, FCx 필드(1003)는 호스트 프로세서에 의해 지원되는 실제 펑션 코드들보다 오히려 리턴될 허용 펑션 코드 리스트를 특정한다. 일 실시예에서, Opcode 표 엔트리의 FCx(1003) 필드는 허용된 펑션 코드들(FC들)(1107)을 포함하는 엔트리의 위치를 찾아내기 위해 FCx 표(1108) 내에서 인덱스하기 위해 IBC 필드(1005)와 연관(concatenate)된다. 허용된 FC들(1107)은 명령(1102)에 의해 특정된 FC와 비교된다(사이퍼 메시지 명령에서, 범용 레지스터 0(1101)의 비트들(1102)은 특정된 FC(1102)를 포함한다.) 만약 FC 값(1103)이 허용되면(1105), FC 비트들에 의해 표현되는 펑션의 정상적인 실행이 허용된다. 만약 FC 값(1103)이 허용되지 않으면(1104), 프로그램 예외(프로그램 체크) 이벤트가 수행된다. 이와 유사하게, 펑션 쿼리/테스트 동작(1201)(예를 들어, 사이퍼 메시지 명령 쿼리 동작)을 실행할 때, Opcode 표 엔트리(1003)의 FCX 비트들은, OpCode가 Opcode 표 엔트리(1001)의 위치를 찾아내는 명령에 대해 허용된 FC들(1107)의 위치를 찾아내기 위해 FCX 표 내에서 인덱스하기 위해 IBC 비트들(1005)과 연관(1106)된다. 그런 다음 허용된 FC들은 펑션 쿼리/테스트 동작에 의해 특정된 위치로 리턴된다(1105).
일 실시예에서, FCX 비트들이 0일 때, 아무런 FCx 표(1108) 억세스도 수행되지 않고, 대응하는 명령에 의해 표시된 어떤 펑션 코드도 변환없이 사용된다.
일 실시예에서, 명령들에 대한 다른 아키텍쳐 변경들은 펑션 코드들에 대해서 기술된 것과 동일한 메커니즘을 사용할 수 있다. 예를 들어, 이 경우, 아키텍쳐 레벨에서 명령(905)은 OpCode 확장 필드와 I2 필드, 보류된 (0000) 사이의 비트들을 갖는다. 바람직하게는, 보류된 비트들은 논-제로 비트들이 펑션을 아직 지원하지 않는 환경에서 명령이 적절하게 수행할 것을 확실히 하기 위해 0들에 대해 테스트된다. 더 새로운 아키텍쳐는 새로운 펑션을 식별하기 위해 하나 또는 그 이상의 보류된 비트들을 사용하여 새로운 펑션을 구현한다. 일 예에서, 이들 4 개의 보류된 비트들(Res)은 그것들이 도 10에서 FC 비트들(1102)에 대해 보여진 바와 같이 지원되는지를 결정하기 위해 FCx 표(1108) 내에서 인덱스할 수 있다. 이 경우, 연관(concatenation)은 펑션 코드들에 대해서는
Figure 112013000196925-pct00008
일 것이고, 새로운 펑션 허가 테스트(1103)에 대해서는
Figure 112013000196925-pct00009
일 것이다. FC(102)가 허용된 FC들(1107)과 비교되는 것 대신에, 명령(905)의 Res 필드는 펑션이 허용되는지를 결정하기 위해(1103) 허용된 FCS 비트들(1107)에 대비하여 체크될 것이다.
또 다른 실시예에서, 명령의 Res 필드(905)는, 그 필드로 도입되는 펑션이 허용되는지를 결정하기 위해 Opcode 표(907) 내에서 인덱스하기 위해 마치 그것이 OpCodes의 제3 OpCode 확장(905)인 것처럼 연관될 수 있다.
명령의 페치의 일부로서, 또는 명령의 페치에 이어서, CPU는, 예를 들어, 오퍼랜드들의 수, 오퍼랜드들의 유형(스토리지 또는 레지스터), 오퍼랜드 정렬 요건들, 및 승인 요건들과 같은 명령의 일정 속성들을 결정할 수 있다. 에뮬레이션 환경에서, 이 결정은 고성능 CPU에서, 인덱스로서 동작 코드(operatrion code)를 사용하는 단순한 표 룩업의 결과일 수 있고, 이 결정은 프로세서의 명령-디코드 회로 내에 구축될 수 있다.
가상-아키텍쳐-레벨 퍼실리티는 각각의 명령과 연관된 추가 속성 - 즉, 명령이 아키텍쳐에 먼저 도입된 머신 레벨 - 을 도입한다. 이 머신 레벨은 연속체(continuum) 상의 인코딩된 수 포인트일 수 있고(예를 들어, 10.2, 이는 제2 펌웨어 레벨에서 제10 세대 머신을 의미함), 또는 그것은 단순히 가장 최근의 머신 레벨에 대비된 값일 수 있다(예를 들어, 2[또는 -2], 이는 명령이 현재의 머신 이전의 두 개의 머신 세대들을 도입했다는 것을 의미함).
도 12를 참조하면, 일 실시예에서, 멀티-펑션 명령 - 상기 멀티-펑션 명령은 복수의 인스톨된 펑션들 중 하나의 펑션(a function)을 수행하도록 구성(architect)됨 - 의 선택되고 인스톨된 펑션들은 은폐(hide)되고, 상기 은폐 방법은, 인스톨된 펑션들의 이용가능성(availability)을 컨트롤하는 값을, 하나 또는 그 이상의 프로세서들을 포함하는 호스트 컴퓨터의 멀티-펑션 명령에 세팅하는 단계(1201) - 하나의 프로세서는 멀티-펑션 명령의 제1의 복수의 상기 인스톨된 펑션들을 가지며, 상기 제1의 복수의 인스톨된 펑션들은 하나 또는 그 이상의 제1의 인스톨된 펑션들 및 하나 또는 그 이상의 제2의 인스톨된 펑션들을 포함함 -; 그리고, opcode 필드를 포함하는 멀티-펑션 명령을 실행하는 단계(1201)를 포함하며; 상기 실행은, 쿼리 펑션(query function)을 특정하는 상기 멀티-펑션 명령에 응답하여, 상기 멀티-펑션 명령에게 이용가능한 인스톨된 펑션들을 결정하기 위해 상기 쿼리 펑션을 수행하고; 하나 또는 그 이상의 제2의 인스톨된 펑션들을 결정하기 위해, 상기 쿼리 펑션 실행은 상기 값을 사용하고; 그리고, 상기 쿼리 펑션 실행은 상기 하나 또는 그 이상의 제2의 인스톨된 펑션들이 상기 멀티-펑션 명령에게 이용가능하지 않다는 것을 표시하는 결과 값(a result value)을 저장한다(1203).
도 13을 참조하면, 일 실시예에서, 호스트 컴퓨터의 하이퍼바이저에 의해 호스트 컴퓨터의 가상 머신에 대한 값이 세트된다(1301). 가상 머신은 하나 또는 그 이상의 논리적 프로세서들을 포함하며, 상기 하나 또는 그 이상의 논리적 프로세서들은 하나 또는 그 이상의 물리적 프로세서들에 배정되어 있다. 물리적 프로세서는 멀티-펑션 명령의 하나 또는 그 이상의 제2의 인스톨된 펑션들을 갖는다. 그리고, 여기서 상기 멀티-펑션 명령은 상기 하나 또는 그 이상의 물리적 프로세서들의 물리적 프로세서 상에 하나 또는 그 이상의 논리적 프로세서들 중 어떤 논리적 프로세서에 의해 가상 머신에서 실행된다.
일 실시예에서, 상기 하나 또는 그 이상의 제2의 인스톨된 펑션들은 상기 멀티-펑션 명령의 opcode에 기초하여 결정된다(1302).
도 14를 참조하면, 일 실시예에서, 하이퍼바이저는 가상 머신에 컨트롤 값을 세트했고(1201), 인스톨된 펑션들의 이용가능성(availability)을 컨트롤하는 또 다른 값을 호스트 컴퓨터 시스템의 또 다른 가상 머신 상에서 실행 중인 멀티-펑션 명령에 세트하고(1401); 그리고 하나 또는 그 이상의 또 다른 논리적 프로세서들의 또 다른 논리적 프로세서에 의해 상기 또 다른 가상 머신에서 또 다른 멀티-펑션 명령이 실행되고(1402); 또 다른 쿼리 펑션을 특정하는 상기 또 다른 멀티-펑션 명령에 응답하여, 상기 또 다른 멀티-펑션 명령에게 이용가능한 인스톨된 펑션들을 결정하기 위해 상기 또 다른 쿼리 펑션이 수행되며; 하나 또는 그 이상의 제3의 인스톨된 펑션들을 결정하기 위해 상기 또 다른 쿼리 펑션 실행은 상기 또 다른 값을 사용하며; 상기 또 다른 쿼리 펑션 실행은, 상기 하나 또는 그 이상의 제3의 인스톨된 펑션들이 상기 또 다른 멀티-펑션 명령에게 이용가능하지 않다는 것을 표시하는 또 다른 결과 값을 저장한다(1403).
일 실시예에서, 상기 저장된 결과 값은 유효 비트 값(bit significant value)이고, 여기서 각각의 비트 위치는 펑션에 대응하고, 1인 비트는 대응하는 펑션이 인스톨된다는 것을 표시한다.
도 15를 참조하면, 일 실시예에서, 쿼리 펑션은 멀티-펑션 명령 특정 명령 코드(1501) 또는 멀티-펑션 명령 특정 테스트 비트(1502)에 의해 특정된다.
도 16을 참조하면, 일 실시예에서, 상기 멀티-펑션 명령은 zArchitecture 명령이며, 이는 크립토그래픽 명령(1601), 퍼폼 타이밍 퍼실리티 펑션 명령(Perform Timing Facility Function instruction) 중 어느 하나, 또는 도 17에 도시된 퍼폼 플로팅 포인트 동작 명령(Perform Floating Point Operation instruction) 또는 퍼폼 락 동작 명령(Perform Locked Operation instruction) 중 어느 하나로 구성되며, 여기서 크립토그래픽 명령은 사이퍼 메시지 명령, 컴퓨트 인터미디어트 메시지 명령, 컴퓨트 라스트 메시지 다이제스트 명령, 컴퓨트 메시지 인증 코드 명령 중 하나를 포함하며, 상기 멀티-펑션 명령은 쿼리 펑션을 특정한다. 그런 다음, 크립토그래픽 명령 또는 PTFF 명령인 상기 멀티-펑션 명령에 응답하여, 실행될 상기 멀티-펑션 명령 특정 펑션 코드가 획득되고(1602), 상기 획득된 펑션 코드는 쿼리 펑션으로 이루어지며(1605), 여기서 컨트롤 값에 기초한 상기 저장된(1604) 결과 값은 복수의 비트들이며, 상기 복수의 비트들 각각의 비트는 대응하는 펑션 코드가 지원되는지를 표시하며; 그리고 크립토그래픽 명령 또는 PTFF 명령인 상기 멀티-펑션 명령에 응답하여, 실행될 상기 멀티-펑션 명령 특정 펑션 코드가 획득되고 - 상기 획득된 펑션 코드는 쿼리 펑션이 아님(1605) -, 크립토그래픽 펑션 또는 PTFF 펑션은 상기 획득된 펑션 코드에 따라 수행되며(1603), 그리고 상기 퍼폼 락 동작 명령 또는 상기 퍼폼 플로팅 포인트 동작 명령인 상기 멀티-펑션 명령에 응답하여, 상기 멀티-펑션 명령 특정 테스트 비트는 1이며(1702), 상기 컨트롤 값에 기초하여 멀티-펑션 명령 특정 펑션 코드가 인스톨되는지에 관한 결정(1704)이 이뤄지며, 여기서 저장된 결과 값(1704)은 조건 코드 값이며; 그리고 퍼폼 락 동작 명령 또는 상기 퍼폼 플로팅 포인트 동작 명령인 상기 멀티-펑션 명령에 응답하여, 상기 멀티-펑션 명령 특정 테스트 비트는 0이며(1702), 상기 획득된 펑션 코드에 따라 플로팅 포인트 펑션 또는 락 동작이 수행된다(1703).
일 실시예에서, 상기 멀티 펑션 명령이 제1의 복수의 상기 인스톨된 펑션들의 논-쿼리 펑션을 특정하는 것에 응답하여, 상기 논-쿼리 펑션이 상기 제2의 인스톨된 펑션들 중 하나인 것에 응답하여, 상기 논-쿼리 펑션이 수행되고, 상기 논-쿼리 펑션이 상기 제2의 인스톨된 펑션들 중 하나 이외의 펑션인 것에 응답하여, 상기 논-쿼리 펑션의 수행이 차단된다.
전술한 사항들은 하나의 컴퓨터 시스템 실시예의 용어 및 구조를 이해하기에 유용할 수 있다. 실시예들은 z/Architecture로 한정되지 않을 수 있고 또는 이것에 의해 제공되는 설명으로 한정되지 않을 수 있다. 바람직하게는, 실시예들은 여기서의 가르침으로 다른 컴퓨터 제조자들의 다른 컴퓨터 아키텍쳐들에 적용될 수 있다.
바람직한 실시예들이 여기에 설명되고 기술되지만, 실시예들은 여기에 개시된 그대로의 구성으로 한정되지 않을 수 있음을 이해해야 할 것이며, 그 권리는 모든 변경 예들 및 변형 예들에 대해서도 미치며, 이것들도 또한 첨부되는 청구항들에 정의된 발명의 범위 내에 들어온다.

Claims (9)

  1. 복수의 인스톨된 펑션들 중 하나의 펑션(a function)을 수행하도록 구성(arthitect)된 멀티-펑션 명령의 선택되고 인스톨된 펑션(function)을 은폐(hide)하는, 컴퓨터로 구현된 방법(computer implemented method)으로서, 상기 방법은,
    인스톨된 펑션들의 이용가능성(availability)을 컨트롤하는 값을, 하나 또는 그 이상의 프로세서들을 포함하는 호스트 컴퓨터의 멀티-펑션 명령에 세팅하는 단계 - 하나의 프로세서는 멀티-펑션 명령의 제1의 복수의 상기 인스톨된 펑션들을 가지며, 상기 제1의 복수의 인스톨된 펑션들은 하나 또는 그 이상의 제1의 인스톨된 펑션들 및 하나 또는 그 이상의 제2의 인스톨된 펑션들을 포함함 -; 및
    opcode 필드를 포함하는 멀티-펑션 명령을 실행하는 단계를 포함하며, 상기 실행은,
    쿼리 펑션(query function)을 특정하는 상기 멀티-펑션 명령에 응답하여, 상기 멀티-펑션 명령에게 이용가능한 인스톨된 펑션들을 결정하기 위해 상기 쿼리 펑션을 수행하는 단계;
    상기 하나 또는 그 이상의 제2의 인스톨된 펑션들을 결정하기 위해, 상기 쿼리 펑션 실행은 상기 값을 사용하는 단계;
    상기 쿼리 펑션 실행은 상기 하나 또는 그 이상의 제1 인스톨된 펑션들 중 하나 또는 그 이상이 상기 멀티-펑션 명령에게 이용가능하지 않다는 것을 표시하는 결과 값(a result value)을 저장하는 단계; 및
    상기 제1의 복수의 상기 인스톨된 펑션들 중 논-쿼리 펑션(non-query function)을 특정하는 상기 멀티-펑션 명령에 응답하여, 상기 논-쿼리 펑션이 상기 제2의 인스톨된 펑션들 중 하나일 때, 상기 논-쿼리 펑션을 수행하고; 상기 논-쿼리 펑션이 상기 제2의 인스톨된 펑션들 중 하나 이외의 펑션일 때, 상기 논-쿼리 펑션을 수행하는 것을 차단(block)하는, 방법.
  2. 청구항 1에 있어서, 상기 값은 상기 호스트 컴퓨터의 가상 머신에 대해 상기 호스트 컴퓨터의 하이퍼바이저에 의해 세트되고, 상기 가상 머신은 하나 또는 그 이상의 논리적 프로세서들(logical processors)을 포함하며, 상기 하나 또는 그 이상의 논리적 프로세서들은 하나 또는 그 이상의 물리적 프로세서들(physical processors)에 배정(assign)되며, 하나의 물리적 프로세서(a physical processor)는 상기 멀티-펑션 명령의 상기 하나 또는 그 이상의 제2의 인스톨된 펑션들을 가지며, 상기 멀티-펑션 명령은, 상기 하나 또는 그 이상의 물리적 프로세서들 중 하나의 물리적 프로세서 상에서 하나 또는 그 이상의 논리적 프로세서들 중 하나의 논리적 프로세서에 의해, 상기 가상 머신에서 실행되는, 방법.
  3. 청구항 2에 있어서, 상기 하나 또는 그 이상의 제2의 인스톨된 펑션들에 대한 결정은 상기 멀티-펑션 명령의 opcode에 기초하는, 방법.
  4. 청구항 2에 있어서, 상기 방법은,
    인스톨된 펑션들의 이용가능성을 컨트롤하는 또 다른 값(another value)을, 상기 호스트 컴퓨터 시스템의 또 다른 가상 머신(another virtual machine) 상에서 실행 중인 멀티-펑션 명령에, 상기 하이퍼바이저에 의해 세트하는 단계; 및
    하나 또는 그 이상의 또 다른 논리적 프로세서들 중 또 다른 논리적 프로세서에 의해 상기 또 다른 가상 머신에서 또 다른 멀티-펑션 명령을 실행하는 단계;
    또 다른 쿼리 펑션을 특정하는 상기 또 다른 멀티-펑션 명령에 응답하여, 상기 또 다른 멀티-펑션 명령에게 이용가능한 인스톨된 펑션들을 결정하기 위해 상기 또 다른 쿼리 펑션을 수행하는 단계;
    상기 또 다른 쿼리 펑션 실행은, 하나 또는 그 이상의 제3의 인스톨된 펑션들을 결정하기 위해 상기 또 다른 값을 사용하는 단계; 및
    상기 또 다른 쿼리 펑션 실행은, 상기 하나 또는 그 이상의 제3의 인스톨된 펑션들 중 하나 또는 그 이상이 상기 또 다른 멀티-펑션 명령에게 이용가능하지 않다는 것을 표시하는 또 다른 결과 값(another result value)을 저장하는 단계를 더 포함하는, 방법.
  5. 청구항 2에 있어서, 상기 저장된 결과 값은 유효 비트 값(bit significant value)이며, 각각의 비트 위치는 펑션에 대응하며, 1인 비트는 대응하는 펑션이 인스톨되는 것을 표시하는, 방법.
  6. 청구항 2에 있어서, 상기 쿼리 펑션은 멀티-펑션 명령 특정 펑션 코드 또는 멀티-펑션 명령 특정 테스트 비트에 의해 특정되는, 방법.
  7. 청구항 6에 있어서, 상기 멀티-펑션 명령은 zArchitecture 명령이며, 상기 zArchitecture 명령은 크립토그래픽(cryptographic) 명령, 퍼폼 타이밍 퍼실리티 펑션(Perform Timing Facility Function, PTFF) 명령, 퍼폼 플로팅 포인트 동작(Perform Floating Point Operation) 명령 또는 퍼폼 락 동작(Perform Locked Operation) 명령 중 어느 하나를 포함하며, 상기 크립토그래픽 명령은 싸이퍼 메시지(Cipher Message) 명령, 체이닝(Chaining)을 갖는 싸이퍼 메시지 명령, 컴퓨트 인터미디어트 메시지 다이제스트(Compute Intermediate Message Digest) 명령, 컴퓨트 라스트 메시지 다이제스트(Compute Last Message Digest) 명령, 컴퓨트 메시지 인증 코드(Compute Message Authentication Code) 명령 중 어느 하나를 포함하며, 쿼리 펑션을 특정하는 상기 멀티-펑션 명령은,
    크립토그래픽 명령 또는 PTFF 명령인 상기 멀티-펑션 명령에 응답하여, 실행될 상기 멀티-펑션 명령 특정 펑션 코드를 획득하는 단계 - 상기 획득된 펑션 코드는 쿼리 펑션으로 이루어지고, 상기 저장된 결과 값은 복수의 비트들이며, 상기 복수의 비트들의 각각의 비트는 대응하는 펑션 코드가 지원되는지를 표시함 -; 및
    크립토그래픽 명령 또는 PTFF 명령인 상기 멀티-펑션 명령에 응답하여, 실행될 상기 멀티-펑션 명령 특정 펑션 코드를 획득하는 단계 - 상기 획득된 펑션 코드는 상기 쿼리 펑션이 아니고, 상기 획득된 펑션 코드에 따라 크립토그래픽 펑션 또는 PTFF 펑션이 수행됨 -;
    상기 퍼폼 락 동작 명령 또는 상기 퍼폼 플로팅 포인트 동작 명령인 상기 멀티-펑션 명령 그리고 상기 멀티-펑션 명령 특정 테스트 비트가 1인 것에 응답하여, 멀티-펑션 명령 특정 펑션 코드가 인스톨되는지를 결정하는 단계 - 상기 저장된 결과 값은 조건 코드 값(condition code value)임 -; 및
    상기 퍼폼 락 동작 명령 또는 상기 퍼폼 플로팅 포인트 동작 명령인 상기 멀티-펑션 명령 그리고 상기 멀티-펑션 명령 특정 테스트 비트가 0인 것에 응답하여, 상기 획득된 펑션 코드에 따라 플로팅 포인트 펑션(Floating Point function) 또는 락 동작(locked operation)을 수행하는 단계를 포함하는, 방법.
  8. 복수의 인스톨된 펑션들 중 하나의 펑션(a function)을 수행하도록 구성(architect)된 멀티-펑션 명령 중 선택되고 인스톨된 펑션을 은폐(hide)하는 컴퓨터 시스템으로서,
    메모리;
    상기 메모리와 통신하는 프로세서 - 상기 프로세서는 메모리 및 페치된 명령들을 실행하기 위한 하나 또는 그 이상의 실행 엘리먼트들로부터 명령들을 페치(fetch)하기 위한 명령 페칭 엘리먼트(instruction fetching element)를 포함함 -; 를 포함하며,
    청구항 1 내지 7 중 어느 한 항에 기재된 방법을 수행하도록 구성되는, 컴퓨터 시스템.
  9. 컴퓨터 판독가능 매체에 있어서,
    상기 컴퓨터 판독가능 매체는 복수의 인스톨된 펑션들 중 하나의 펑션(a function)을 수행하도록 구성(architect)된 멀티-펑션 명령의 선택되고 인스톨된 펑션을 은폐(hide)하는 컴퓨터 프로그램을 포함하고,
    상기 컴퓨터 프로그램은 청구항 1 내지 7 중 어느 한 항에 기재된 방법을 수행하기 위해 처리 회로에 의해 판독가능하고 상기 처리 회로에 의해 실행하기 위한 명령들을 포함하는,
    컴퓨터 판독가능 매체.
KR1020137000057A 2010-06-24 2010-11-08 프로세서의 펑션 쿼리를 위한 펑션 가상화 장치 KR101442429B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/822,358 2010-06-24
US12/822,358 US9851969B2 (en) 2010-06-24 2010-06-24 Function virtualization facility for function query of a processor
PCT/EP2010/067046 WO2011160724A1 (en) 2010-06-24 2010-11-08 Function virtualization facility for function query of a processor

Publications (2)

Publication Number Publication Date
KR20130034036A KR20130034036A (ko) 2013-04-04
KR101442429B1 true KR101442429B1 (ko) 2014-09-17

Family

ID=43416668

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137000057A KR101442429B1 (ko) 2010-06-24 2010-11-08 프로세서의 펑션 쿼리를 위한 펑션 가상화 장치

Country Status (13)

Country Link
US (3) US9851969B2 (ko)
EP (1) EP2430534A1 (ko)
JP (2) JP5893012B2 (ko)
KR (1) KR101442429B1 (ko)
CN (1) CN102947794B (ko)
AU (1) AU2010355815B2 (ko)
BR (1) BR112012033817B1 (ko)
CA (1) CA2800642C (ko)
MX (1) MX2012014522A (ko)
RU (1) RU2571364C2 (ko)
SG (1) SG186100A1 (ko)
WO (1) WO2011160724A1 (ko)
ZA (1) ZA201209645B (ko)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7356725B2 (en) * 2005-09-09 2008-04-08 International Business Machines Corporation Method and apparatus for adjusting a time of day clock without adjusting the stepping rate of an oscillator
FR2957439B1 (fr) 2010-03-09 2012-03-30 Proton World Int Nv Protection d'un canal de communication entre un module de securite et un circuit nfc
FR2957438B1 (fr) 2010-03-09 2012-03-30 Proton World Int Nv Detection d'un deroutement d'un canal de communication d'un dispositif de telecommunication couple a un circuit nfc
FR2957440B1 (fr) 2010-03-09 2012-08-17 Proton World Int Nv Protection d'un module de securite dans un dispositif de telecommunication couple a un circuit nfc
US8635430B2 (en) 2010-06-23 2014-01-21 International Business Machines Corporation Translation of input/output addresses to memory addresses
US8615645B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Controlling the selectively setting of operational parameters for an adapter
US8468284B2 (en) 2010-06-23 2013-06-18 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification to a guest operating system
US8572635B2 (en) 2010-06-23 2013-10-29 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification
US10521231B2 (en) 2010-06-24 2019-12-31 International Business Machines Corporation Function virtualization facility for blocking instruction function of a multi-function instruction of a virtual processor
US9851969B2 (en) 2010-06-24 2017-12-26 International Business Machines Corporation Function virtualization facility for function query of a processor
FR2969341B1 (fr) * 2010-12-20 2013-01-18 Proton World Int Nv Gestion de canaux de communication dans un dispositif de telecommunication couple a un circuit nfc
US8533714B2 (en) 2011-05-03 2013-09-10 International Business Machines Corporation Dynamic virtual machine domain configuration and virtual machine relocation management
DE102011107169A1 (de) * 2011-07-13 2013-01-17 Kuka Roboter Gmbh Steuerung eines Roboter
US9104508B2 (en) * 2012-01-18 2015-08-11 International Business Machines Corporation Providing by one program to another program access to a warning track facility
US8850450B2 (en) * 2012-01-18 2014-09-30 International Business Machines Corporation Warning track interruption facility
CN106802788B (zh) 2012-03-30 2019-11-08 英特尔公司 用于处理sha-2安全散列算法的方法和设备
US8953785B2 (en) * 2012-09-28 2015-02-10 Intel Corporation Instruction set for SKEIN256 SHA3 algorithm on a 128-bit processor
US8874933B2 (en) * 2012-09-28 2014-10-28 Intel Corporation Instruction set for SHA1 round processing on 128-bit data paths
US8924741B2 (en) 2012-12-29 2014-12-30 Intel Corporation Instruction and logic to provide SIMD secure hashing round slice functionality
US9400678B2 (en) * 2013-03-12 2016-07-26 International Business Machines Corporation Systems for selectively enabling and disabling hardware features
JP6324660B2 (ja) * 2013-03-19 2018-05-16 国立大学法人 和歌山大学 新規(2→3)結合型シアロ糖鎖の製造方法
US10331451B2 (en) 2013-06-26 2019-06-25 Intel Corporation Method and apparatus to process SHA-2 secure hashing algorithm
US9990216B2 (en) * 2013-06-27 2018-06-05 Red Hat Israel, Ltd. Providing hypercall interface for virtual machines
US9760390B2 (en) * 2013-07-16 2017-09-12 Empire Technology Development Llc Processor identification for virtual machines
US10038550B2 (en) 2013-08-08 2018-07-31 Intel Corporation Instruction and logic to provide a secure cipher hash round functionality
US9582295B2 (en) 2014-03-18 2017-02-28 International Business Machines Corporation Architectural mode configuration
US9588774B2 (en) 2014-03-18 2017-03-07 International Business Machines Corporation Common boot sequence for control utility able to be initialized in multiple architectures
US9916185B2 (en) 2014-03-18 2018-03-13 International Business Machines Corporation Managing processing associated with selected architectural facilities
US10313129B2 (en) * 2015-06-26 2019-06-04 Intel Corporation Keyed-hash message authentication code processors, methods, systems, and instructions
EP3437306B1 (en) * 2016-04-15 2023-11-22 Telefonaktiebolaget LM Ericsson (PUBL) User equipment containers and network slices
US10348506B2 (en) * 2016-09-30 2019-07-09 International Business Machines Corporation Determination of state of padding operation
US9680653B1 (en) 2016-10-13 2017-06-13 International Business Machines Corporation Cipher message with authentication instruction
US11250501B2 (en) 2018-08-21 2022-02-15 Capital One Services, Llc Scalable architecture for managing transactions
US11226839B2 (en) * 2019-02-27 2022-01-18 International Business Machines Corporation Maintaining compatibility for complex functions over multiple machine generations
US11334358B2 (en) 2019-12-09 2022-05-17 Amazon Technologies, Inc. Hardware accelerator having reconfigurable instruction set and reconfigurable decoder
US11841792B1 (en) * 2019-12-09 2023-12-12 Amazon Technologies, Inc. Instructions with multiple memory access modes
US11928070B2 (en) 2021-04-13 2024-03-12 SK Hynix Inc. PCIe device
KR102568906B1 (ko) 2021-04-13 2023-08-21 에스케이하이닉스 주식회사 PCIe 디바이스 및 그 동작 방법
KR102570943B1 (ko) 2021-04-13 2023-08-28 에스케이하이닉스 주식회사 PCIe 디바이스 및 그 동작 방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR970059922A (ko) * 1996-01-25 1997-08-12 제프리 엘. 포맨 전용 레지스터의 내용 상에서 동작하는 명령을 제공함으로써 에뮬레이션 성능을 향상시키기 위한 방법 및 시스템
US20100257338A1 (en) 2009-04-07 2010-10-07 Spracklen Lawrence A Methods and mechanisms to support multiple features for a number of opcodes

Family Cites Families (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3626427A (en) 1967-01-13 1971-12-07 Ibm Large-scale data processing system
JPS60159948A (ja) 1984-01-30 1985-08-21 Nec Corp 命令例外処理方式
JPS62123552A (ja) 1985-11-22 1987-06-04 Nec Corp 中央処理装置割当て方式
KR930006542B1 (ko) 1990-12-31 1993-07-16 한국전기통신공사 마이크로 콘트롤러를 이용한 톤 발생장치
DE69230963T2 (de) 1991-09-23 2000-12-07 Intel Corp Rechnersystem mit Software-Unterbrechungsbefehlen, das selektiv in einem virtuellen Modus arbeitet
AU6629894A (en) 1993-05-07 1994-12-12 Apple Computer, Inc. Method for decoding guest instructions for a host computer
US5925125A (en) 1993-06-24 1999-07-20 International Business Machines Corporation Apparatus and method for pre-verifying a computer instruction set to prevent the initiation of the execution of undefined instructions
US5551013A (en) 1994-06-03 1996-08-27 International Business Machines Corporation Multiprocessor for hardware emulation
US5632028A (en) 1995-03-03 1997-05-20 Hal Computer Systems, Inc. Hardware support for fast software emulation of unimplemented instructions
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
US6076156A (en) 1997-07-17 2000-06-13 Advanced Micro Devices, Inc. Instruction redefinition using model specific registers
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
US6092185A (en) 1998-04-30 2000-07-18 International Business Machines Corporation Opcode compare logic in E-unit for breaking infinite loops, detecting invalid opcodes and other exception checking
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
US6138229A (en) 1998-05-29 2000-10-24 Motorola, Inc. Customizable instruction set processor with non-configurable/configurable decoding units and non-configurable/configurable execution units
US6185670B1 (en) 1998-10-12 2001-02-06 Intel Corporation System for reducing number of opcodes required in a processor using an instruction format including operation class code and operation selector code fields
US6463582B1 (en) 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
US6427202B1 (en) 1999-05-04 2002-07-30 Microchip Technology Incorporated Microcontroller with configurable instruction set
US6859870B1 (en) * 2000-03-07 2005-02-22 University Of Washington Method and apparatus for compressing VLIW instruction and sharing subinstructions
US7865948B1 (en) 2001-12-03 2011-01-04 Advanced Micro Devices, Inc. Method and apparatus for restricted execution of security sensitive instructions
US20040031022A1 (en) 2002-08-02 2004-02-12 Masayuki Kabasawa Information processing device for multiple instruction sets with reconfigurable mechanism
JP2004127255A (ja) 2002-08-02 2004-04-22 Renesas Technology Corp 情報処理装置
US7257718B2 (en) * 2003-05-12 2007-08-14 International Business Machines Corporation Cipher message assist instructions
US7159122B2 (en) * 2003-05-12 2007-01-02 International Business Machines Corporation Message digest instructions
JP2007508623A (ja) 2003-10-08 2007-04-05 ユニシス コーポレーション 複数のノードにわたってシステムリソースを割り当てて管理する仮想データセンタ
JP2005149361A (ja) 2003-11-19 2005-06-09 Hitachi Ltd 仮想計算機システムおよび仮想計算機システムの制御プログラム
US7493483B2 (en) 2004-02-19 2009-02-17 International Business Machines Corporation Method to prevent vulnerability to virus and worm attacks through instruction remapping
JP2005242510A (ja) 2004-02-25 2005-09-08 Matsushita Electric Ind Co Ltd 情報処理装置の命令使用権限設定方法及び情報処理装置
US20050251652A1 (en) 2004-04-27 2005-11-10 Eswaramoorthi Nallusamy Methods and apparatus for processing an extensible firmware interface byte code instruction in a loop
US7802250B2 (en) 2004-06-28 2010-09-21 Intel Corporation Support for transitioning to a virtual machine monitor based upon the privilege level of guest software
JP2006221606A (ja) 2005-01-17 2006-08-24 Renesas Technology Corp データプロセッサ
US8572606B1 (en) 2005-12-29 2013-10-29 Vmware, Inc. System and method for avoiding synchronization bugs through virtualization
JP2008146542A (ja) 2006-12-13 2008-06-26 Fujitsu Ltd マルチプロセッサシステム、プロセッサ装置及び例外処理方法
US7802252B2 (en) 2007-01-09 2010-09-21 International Business Machines Corporation Method and apparatus for selecting the architecture level to which a processor appears to conform
US8321849B2 (en) 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
JP2008226290A (ja) 2007-03-08 2008-09-25 Hitachi-Lg Data Storage Inc 装置内蔵型光ディスク装置
JP4882845B2 (ja) * 2007-04-19 2012-02-22 株式会社日立製作所 仮想計算機システム
US8479195B2 (en) * 2007-05-16 2013-07-02 Vmware, Inc. Dynamic selection and application of multiple virtualization techniques
US7689311B2 (en) 2007-05-29 2010-03-30 Palo Alto Research Center Incorporated Model-based planning using query-based component executable instructions
US8127296B2 (en) 2007-09-06 2012-02-28 Dell Products L.P. Virtual machine migration between processors having VM migration registers controlled by firmware to modify the reporting of common processor feature sets to support the migration
US7925923B1 (en) 2008-01-31 2011-04-12 Hewlett-Packard Development Company, L.P. Migrating a virtual machine in response to failure of an instruction to execute
US8332846B2 (en) 2008-02-28 2012-12-11 Sony Mobile Communications Ab Selective exposure to USB device functionality for a virtual machine by filtering descriptors
US8352952B2 (en) 2008-12-01 2013-01-08 Citrix Systems, Inc. Systems and methods for facilitating virtualization of a heterogeneous processor pool
US8078854B2 (en) 2008-12-12 2011-12-13 Oracle America, Inc. Using register rename maps to facilitate precise exception semantics
US9851969B2 (en) 2010-06-24 2017-12-26 International Business Machines Corporation Function virtualization facility for function query of a processor
US10521231B2 (en) 2010-06-24 2019-12-31 International Business Machines Corporation Function virtualization facility for blocking instruction function of a multi-function instruction of a virtual processor

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR970059922A (ko) * 1996-01-25 1997-08-12 제프리 엘. 포맨 전용 레지스터의 내용 상에서 동작하는 명령을 제공함으로써 에뮬레이션 성능을 향상시키기 위한 방법 및 시스템
US20100257338A1 (en) 2009-04-07 2010-10-07 Spracklen Lawrence A Methods and mechanisms to support multiple features for a number of opcodes

Also Published As

Publication number Publication date
MX2012014522A (es) 2013-01-29
US20180107480A1 (en) 2018-04-19
ZA201209645B (en) 2013-08-28
SG186100A1 (en) 2013-01-30
US20110320825A1 (en) 2011-12-29
CN102947794A (zh) 2013-02-27
JP6206881B2 (ja) 2017-10-04
US20200218536A1 (en) 2020-07-09
AU2010355815A1 (en) 2012-12-20
CN102947794B (zh) 2016-08-17
BR112012033817B1 (pt) 2020-12-01
CA2800642C (en) 2017-12-12
RU2571364C2 (ru) 2015-12-20
AU2010355815B2 (en) 2014-10-30
JP5893012B2 (ja) 2016-03-30
US11188326B2 (en) 2021-11-30
KR20130034036A (ko) 2013-04-04
WO2011160724A1 (en) 2011-12-29
US10664269B2 (en) 2020-05-26
RU2012147699A (ru) 2014-05-20
JP2013534668A (ja) 2013-09-05
EP2430534A1 (en) 2012-03-21
US9851969B2 (en) 2017-12-26
JP2015201227A (ja) 2015-11-12
BR112012033817A2 (pt) 2018-05-15
CA2800642A1 (en) 2011-12-29

Similar Documents

Publication Publication Date Title
US11188326B2 (en) Function virtualization facility for function query of a processor
US11809870B2 (en) Function virtualization facility for blocking instruction function of a multi-function instruction of a virtual processor
DK2862089T3 (en) COMPARISON AND REPLACEMENT OF DATE TABLE ENTRY
US9182984B2 (en) Local clearing control

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

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190829

Year of fee payment: 6