KR20210118094A - 다수 머신 세대들에서 복잡한 기능들의 호환성 유지 - Google Patents

다수 머신 세대들에서 복잡한 기능들의 호환성 유지 Download PDF

Info

Publication number
KR20210118094A
KR20210118094A KR1020217024766A KR20217024766A KR20210118094A KR 20210118094 A KR20210118094 A KR 20210118094A KR 1020217024766 A KR1020217024766 A KR 1020217024766A KR 20217024766 A KR20217024766 A KR 20217024766A KR 20210118094 A KR20210118094 A KR 20210118094A
Authority
KR
South Korea
Prior art keywords
machine
instruction
operand
parameter block
complex
Prior art date
Application number
KR1020217024766A
Other languages
English (en)
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 KR20210118094A publication Critical patent/KR20210118094A/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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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
    • 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/45554Instruction set architectures of guest OS and hypervisor or native processor differ, e.g. Bochs or VirtualPC on PowerPC MacOS
    • 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/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • 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/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

복수의 머신들을 포함하는 시스템은 제1세대 머신 및 제2세대 머신을 포함한다. 상기 복수의 머신들 각각은 머신 버전(a machine version)을 포함한다. 상기 제1세대 머신은 제1 가상 머신 및 가상 아키텍처 레벨을 실행한다. 상기 제2세대 머신은 제2 가상 머신 및 가상 아키텍처 레벨을 실행한다. 상기 가상 아키텍처 레벨은 복잡한 인터럽트 가능 명령(a complex interruptible instruction )에 대한호환성 레벨을 상기 제1 및 제2 가상 머신들에 제공한다. 상기 호환성 레벨은 상기 복수의 머신들에 걸친 최저 공동 분모 머신 버전(a lowest common denominator machine version)에 대해 아키텍처 되며, 상기 호환성 레벨은 상기 최저 공동 분모 머신 버전을 식별하는 최저 공동 분모 표시자(a lowest common denominator indicator)를 포함한다.

Description

다수 머신 세대들에서 복잡한 기능들의 호환성 유지
[0001] 본 발명은 일반적으로 다수 머신 세대들에서 복잡한 기능들의 호환성 유지하는 것에 관련된다. 
[0002] 다른 머신 세대들의 머신들 사이 워크로드들의 마이그레이션을 허용하려면, 각각의 머신은 다른 머신이 시작한 작업을 계속 할 수 있어야 한다. 예를 들어, 시스템이 서로 다른 컴퓨터들 간에 마이그레이션될 수 있는 환경에서 실행할 때 그러한 환경들 간에 공통 아키텍처 레벨 이 있어야 한다. 아키텍처 간에 변경될 수 있는 복잡한 파라미터 블록 포맷들을 갖는 명령들의 경우, 머신은 해당 환경들 간의 공통 아키텍처 레벨을 사용하여 각 이전 세대의 파라미터 블록 포맷을 생성하고 사용할 수 있어야 한다. 그러나 각 이전 세대의 파라미터 블록 포맷을 생성하고 소비하는 것은 구현 및 검증에 있어서 복잡성을 초래할 수 있다. 예를 들어, 다섯 세대들에 걸친 다른 파라미터 블록 정의를 볼 수 있는 복잡한 명령을 위해서, 최신 세대 머신은 다섯 가지 다른 파라미터 블록들을 이해하고 생성해야 한다.
[0003] 본 발명의 실시 예들에 따라, 시스템이 제공되고, 복수의 머신들을 포함한다. 상기 복수의 머신들은 제1세대 머신 및 제2세대 머신을 포함한다. 상기 복수의 머신들 각각은 머신 버전(a machine version)을 포함한다. 상기 제1세대 머신은 제1 가상 머신 및 가상 아키텍처 레벨을 실행한다. 상기 제2세대 머신은 제2 가상 머신 및 가상 아키텍처 레벨을 실행한다. 상기 가상 아키텍처 레벨은 복잡한 인터럽트 가능 명령(a complex interruptible instruction )에 대한 호환성 레벨을 상기 제1 및 제2 가상 머신들에 제공한다. 상기 호환성 레벨은 상기 복수의 머신들에 걸친 최저 공동 분모 머신 버전(a lowest common denominator machine version)에 대해 아키텍처 된다. 상기 호환성 레벨은 상기 최저 공동 분모 머신 버전을 식별하는 최저 공동 분모 표시자(a lowest common denominator indicator)를 포함한다. 여기서 설명하는 실시 예들의 기술적 효과들과 장점들은, 복잡한 명령/기능을 위해, 각각의 머신 세대가 기껏해야 오직 2개의 다른 파라미터 블록들만(자신의 파라미터 블록 및 호환성 레벨) 지원할 때, 포함할 수 있는데, 인증 및 검증은 단지 파라미터 블록들의 현재 및 호환성 버전에 대해서만 시험하는 것으로 감소된다.
[0004] 하나 또는 그 이상의 본 발명의 실시 예들 또는 상기 시스템의 실시 예들 중 어느 하나에 따라, 상기 호환성 레벨은 상기 복수의 머신들 각각에 대해 상기 복잡한 인터럽트 가능 명령을 위한 로컬 파라미터 블록 포맷을 포함하고, 상기 로컬 파라미터 블록 포맷은 상기 복수의 머신들 각각에 대해 로컬인 상기 머신 버전을 위해 아키텍처 되어 있다.
[0005] 하나 또는 그 이상의 본 발명의 실시 예들 또는 상기 시스템의 실시 예들 중 어느 하나에 따라, 상기 최저 공동 분모 표시자는 상기 복잡한 인터럽트 가능 명령을 제1차로(first) 실행하는 상기 복수의 머신들 중 하나의 머신에 의해서 생성된다.
[0006] 하나 또는 그 이상의 본 발명의 실시 예들 또는 상기 시스템의 실시 예들 중 어느 하나에 따라, 상기 최저 공동 분모 표시자는 상기 복잡한 인터럽트 가능 명령을 제1차로(first) 실행하는 상기 복수의 머신들 중 하나의 머신으로부터 상기 복수의 머신들 중 나머지로 전파된다(propagated). 여기서 설명하는 실시 예들의 기술적 효과들과 장점들은, 제1세대를 위해, 포함될 수 있고, 제1세대의 파라미터 블록 포맷은 "제네시스"포맷을 대표하며, 오직 한 포맷만 지원되고/시험될 필요가 있다. 따라서, 모든 후속 세대의 머신 특정 파라미터 블록 컨텐트는 미래 머신에 대한 다운스트림 임팩트를 생성함이 없이 이 머신에 대해서 최적화될 수 있다.
[0007] 하나 또는 그 이상의 본 발명의 실시 예들 또는 상기 시스템의 실시 예들 중 어느 하나에 따라, 상기 호환성 레벨 내의 상기 최저 공동 분모 표시자는 특정의 가상 머신에서 어느 기능들이 이용 가능한지를 식별하는 일련의 퍼실리티 비트들을 통해서 제어된다.
[0008]  하나 또는 그 이상의 본 발명의 실시 예들 또는 상기 시스템의 실시 예들 중 어느 하나에 따라, 상기 복잡한 인터럽트 가능 명령은 디플레이트 변환 호출 명령(a DEFLATE Conversion Call instruction)을 포함한다.
[0009] 하나 또는 그 이상의 본 발명의 실시 예들 또는 상기 시스템의 실시 예들 중 어느 하나에 따라, 상기 복잡한 인터럽트 가능 명령은 가속기(an accelerator) 상에서 실행하는 복잡한 명령들의 세트로부터의 하나의 명령을 포함한다.
[0010] 하나 또는 그 이상의 본 발명의 실시 예들에 따라, 상기 시스템의 실시 예들 중 어느 것도 방법 또는 컴퓨터 프로그램 제품으로서 구현될 수 있다.
[0011] 하나 또는 그 이상의 본 발명의 실시 예들에 따라, 방법이 제공되고, 상기 방법은 제1 머신에 의해서 복잡한 인터럽트 가능 명령을 구현하고, 상기 제1 머신의 파라미터 블록이 상기 복잡한 인터럽트 가능 명령을 위해 지원됨을 가상 아키텍처 레벨에서 표시한다. 또한, 상기 제1 머신의 파라미터 블록을 콤플렉스에서 실행하는 각각의 가상 머신으로 전파한다. 여기서 설명하는 실시 예들의 기술적 효과들과 장점들은, 인증 및 검증이 단지 파라미터 블록들의 현재 및 호환성 버전에 대해서만 시험하는 것으로 감소되는 것이 포함될 수 있다.
[0012] 하나 또는 그 이상의 본 발명의 실시 예들 또는 상기 방법의 실시 예에 따라, 상기 방법은 신규의 머신이 온라인됨을 검출하는 단계, 상기 콤플렉스의 머신 버전들에 걸치는 최저 공동 분모로서 상기 제1 머신의 파라미터 블록을 식별하는 단계, 및 상기 제1 머신의 파라미터 블록을 상기 신규의 머신에 전파하는 단계를 포함할 수 있다.
[0013] 하나 또는 그 이상의 본 발명의 실시 예들에 따라, 상기 방법 실시 예들 중 어느 것도 시스템 또는 컴퓨터 프로그램 구현될 수 있다. 
[0014] 추가의 기술적인 특징들 및 장점들은 본 발명의 기술들을 통해서 실현된다. 본 발명의 실시예들 및 특징들은 본 명세서에서 상세히 설명되고 청구된 주제의 일부로 간주된다. 더 나은 이해를 위해 상세한 설명과 도면을 참조한다.
[0015] 여기서 설명하는 본 발명의 권리들은 명세서 결론 부분에 기재된 청구항들에 구체적으로 기재되고 명확하게 청구되어 있다. 본 발명의 실시예들 및 기타 특징들은 여기서 상세하게 기술되고 청구된 주제의 일부로서 고려된다. 더 상세한 이해를 위해서 다음의 상세한 설명과 첨부된 도면을 참조한다. 
[0016] 도 1a는 본 발명의 하나 또는 그 이상의 실시 예들을 통합하고 사용하기 위한 컴퓨팅 환경의 일 예를 도시한다;
[0017] 도 1b는 본 발명의 하나 또는 그 이상의 실시 예들에 따라, 도 1a의 프로세서의 세부 사항들을 도시한다;
[0018] 도 2는, 본 발명의 하나 또는 그 이상의 실시 예들을 통합하고 사용하기 위한 컴퓨팅 환경의 다른 예를 도시한다;
[0019] 도 3a는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령(a DEFLATE Conversion Call (DFLTCC) instruction)의 일 포맷을 도시한다;
[0020] 도 3b는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 사용되는, 묵시적 레지스터(an implied register), 일반 레지스터 0의 필드들의 일 예를 도시한다;
[0021] 도 3c는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령을 위한 함수코드들의 일 예를 도시한다;
[0022] 도 3d는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 사용되는, 묵시적 레지스터, 일반 레지스터 1의 필드의 일 예를 도시한다;
[0023] 도 3e는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 명시되는, 레지스터, R1의 컨텐츠의 일 예를 도시한다;
[0024] 도 3f는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 사용되는, 레지스터, R1+1의 컨텐츠의 일 예를 도시한다;
[0025] 도 3g는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 명시되는, 레지스터, R2의 컨텐츠의 일 예를 도시한다;
[0026] 도 3h는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 사용되는, 레지스터, R2+1의 컨텐츠의 일 예를 도시한다;
[0027] 도 3i는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 명시되는, 레지스터, R3의 컨텐츠의 일 예를 도시한다;
[0028] 도 3j는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령의 DFLTCC-QAF(질의 이용가능 함수들) 함수에 의해서 사용되는 파라미터 블록의 컨텐츠의 일 예를 도시한다;
[0029] 도 3k는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령의 DFLTCC-GDHT(동적-후프만 테이블 생성) 함수에 의해서 사용되는 파라미터 블록의 컨텐츠의 일 예를 도시한다;
[0030] 도 3l은, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령의 DFLTCC-CMPR(압축) 및 DFLTCC-XPND(확장)함수들에 의해서 사용되는 파라미터 블록의 컨텐츠의 일 예를 도시한다;
[0031] 도 4는, 본 발명의 하나 또는 그 이상의 실시 예들에 따라, 서브-바이트 경계(a sub-byte boundary)의 일 예를 도시한다;
[0032] 도 5a-5c는, 본 발명의 일 실시 예에 따라, 서브-바이트 경계가 DFLTCC-CMPR 함수에 대하여 어떻게 적용되는 지를 예시하는 예들을 도시한다;
[0033] 도 6은, 본 발명의 일 실시 예에 따라, 압축 없는 한 블록의 데이터의 일 예를 도시한다;
[0034] 도 7은, 본 발명의 일 실시 예에 따라, 고정-후프만 테이블(a fixed-Huffman table (FHT))을 사용하여 압축된 데이터 한 블록의 일 예를 도시한다;
[0035] 도 8은, 본 발명의 일 실시 예에 따라, 동적-후프만 테이블(a dynamic-Huffman table (DHT))을 사용하여 압축된 데이터 한 블록의 일 예를 도시한다;
[0036] 도 9는, 본 발명의 일 실시 예에 따라, 스토리지에 세트 된 압축된 데이터의 일 예를 도시한다;
[0037] 도 10은, 본 발명의 일 실시 예에 따라, 데이터를 3 블록들의 압축된 데이터로 압축하는 프로그램의 샘플의 일 예를 도시한다;
[0038] 도 11은, 본 발명의 일 실시 예에 따라, 한 세트의 제1 압축된 데이터 블록 상에서 연산하는(operating) DFLTCC-CMPR 함수를 위한 파라미터 블록 컨텐츠의 일 예를 도시한다;
[0039] 도 12는, 본 발명의 일 실시 예에 따라, 한 세트의 제2 압축된 데이터 블록 상에서 연산하는(operating) DFLTCC-CMPR 함수를 위한 파라미터 블록 컨텐츠의 일 예를 도시한다;
[0040] 도 13은, 본 발명의 일 실시 예에 따라, 압축된 데이터 세트로부터 데이터를 압축해제 하는 프로그램의 샘플의 일 예를 도시한다;
[0041] 도 14a-14c는, 본 발명의 일 실시 예에 따라, DFLTCC-CMPR을 여러 번(multiple times) 실행한 전 및 후의 인-라인 히스토리 (an in-line history)의 예들을 도시한다;
[0042] 도 15a-15c는, 본 발명의 일 실시 예에 따라, DFLTCC를 여러 번(multiple times) 실행한 전 및 후의 서큘러 히스토리 버퍼(a circular history buffer)의 예들을 도시한다;
[0043] 도 16a-16c는, 본 발명의 일 실시 예에 따라, DFLTCC-XPND를 여러 번(multiple times) 실행한 전 및 후의 인-라인 히스토리 (an in-line history)의 예들을 도시한다;
[0044] 도 17은, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령을 사용하는 것의 일 예를 도시한다;
[0045] 도 18은, 본 발명의 일 실시 예에 따라, 서큘러 히스토리 버퍼를 사용하는 것의 일 예를 도시한다;
[0046] 도 19는 본 발명의 실시 예들에 따라, 하나의 시스템을 도시한다;
[0047] 도 20은 본 발명의 실시 예들에 따라, 하나의 프로세스 플로를 도시한다;
[0048] 도 21은 본 발명의 실시 예들에 따라, 하나의 시스템을 도시한다; 그리고
[0049] 도 22는 실시 예들에 따라, 하나의 처리 시스템을 도시한다.
[0050] 여기서 도시한 다이어그램들은 예시이다. 본 발명의 정신을 벗어남이 없이 도면 또는 거기에 설명된 연산들에 대한 많은 변형이 있을 수 있다. 예를 들어, 작업을 다른 순서로 수행하거나 작업을 추가, 삭제 또는 수정할 수 있다. 또한, "결합된"이라는 용어 및 그 변형은 2개의 엘리멘트들 사이에 통신 경로를 갖는 것을 설명하며, 엘리멘트들 사이에 개재 요소/연결이 없는 엘리멘트들 사이의 직접적인 연결을 의미하지는 않는다. 이러한 모든 변형들은 사양의 일부로 간주된다. 
[0051] 첨부된 도면들 및 개시된 실시 예들의 다음의 상세한 설명에서, 도면들에 에시된 다양한 엘리멘트들에는 둘 또는 세 자리 참조 번호가 제공된다. 사소한 예외들을 제외하고 각 참조 번호의 맨 왼쪽 숫자는 해당엘리멘트들이 처음 설명된 그림에 대응한다. 
[0052] 하나 또는 그 이상의 실시 예들에 따라, 본 발명은 모든 가상 머신이 복잡한 인터럽트 가능 명령을 이용할 수 있도록 복잡한 인터럽트 가능 명령을 위한 호환성 레벨을 포함하는 가상 아키텍처 레벨과 관련된다. 이와 관련하여, 상기 호환성 레벨 은 이 시스템 버전을 식별하는 최저 공통 분모 표시자와 함께, 모든 가상 머신들에 걸쳐 최저 공통 분모 버전에 대해 아키텍처 된다.
[0053] 본 발명의 일 실시 예에 따라 컴퓨팅 환경에서 처리를 용이하게 하는 능력이 제공된다. 일 예로서, 단일 명령(예를 들어, 하드웨어/소프트웨어 인터페이스에서 단일 아키텍처 된 하드웨어 머신 명령)이 데이터를 압축 및/또는 압축해제(압축 안됨이라고도 함) 하기 위한, 압축 또는 압축해제 함수와 같은, 함수를 수행하기 위해 제공된다. 상기 명령은 범용 프로세서 명령 세트 아키텍처(ISA)의 일부이고, 이는 범용 프로세서 상에서 프로그램(예를 들어, 운영 체제 도는 사용자 프로그램)에 의해서 디스패치 된다. 압축/압축해제를 수행하기 위해 ISA 명령을 사용함으로써, 운영 체제에 의한 작업스위치들(task switches)은 압축/압축해제 연산들을 수행하기 위해 필요하지 않으며, 이 때문에 실행 사이클들을 절약할 수 있다. 또한, 데이터를 압축 및/또는 압축해제 하기 위해 단일 명령을 사용함으로써, 범용 프로세서와 같은, 프로세서 내의 실행 시간이 감소된다.
[0054] 일 예에서, 상기 명령은 디플레이트 표준(the DEFLATE standard)과 같은, 산업 표준을 준수하는 압축 및 압축해제 연산들을 수행하며, 상기 명령은 디플레이트 변환 호출 명령(a DEFLATE Conversion Call instruction)이라 한다. 디플레이트 표준은 데이터의 원래 형태에서(데이터의 압축 안된 형태에서) 중복 스트링들(duplicate strings)을 나타내는 압축된 데이터 심볼들을 위한 설명들(descriptions)을 포함한다. 그러한 심볼들은, 처리될 데이터의 현재 위치와 관련하여, 이전에 처리되었던, 중복 스트링의 위치 및 길이를 설명하는 중복 스트링의 포인터(a pointer) 및 길이를 포함한다. 데이터의 이전에 처리되었던 압축 안된 형태를 히스토리라 한다. 일 예에서, 히스토리는 메모리 내의 연속되는 바이트들의 수 (a contiguous number of bytes)이고, 이는, 예를 들어, 32K-바이트만큼 클 수 있다. In one example, the history is a contiguous number of bytes in memory, which can be as large as, for instance, 32 K-bytes
[0055] 본 발명의 하나 또는 그 이상의 특징들을 통합하고 사용하기 위한 컴퓨팅 환경의 일 실시 예를 도 1a를 참조하여 설명한다. 컴퓨팅 환경(100)은, 예를 들어, 프로세서(102)(예를 들어, 중앙 처리 유닛), 메모리(104)(예를 들어, 메인 메모리, 일명 시스템 메모리, 메인 스토리지, 중앙 스토리지, 스토리지), 및, 예를 들어, 하나 또는 그 이상의 버스들(108) 및/또는 다른 연결들을 통해 서로 결합된, 하나 또는 그 이상의 입력/출력(I/O) 디바이스들 및/또는 인터페이스들(106)을 포함한다.
[0056] 일 예에서, 프로세서(102)는 미국, 뉴욕주 아몽크에 소재하는 인터내셔널 비즈니스 머신즈 코포레이션에 의해 공급되는, z/Architecture® 하드웨어 아키텍처에 기초하고, IBM Z® 서버와 같은, 서버의 일부이며, 이 또한 인터내셔널 비즈니스 머신즈 코포레이션에 의해 공급되고, z/Architecture 하드웨어 아키텍처를 구현한다. z/Architecture 하드웨어 아키텍처의 한 실시 예는, 2017년 9월 발표된 IBM 공보 No. SA22-7832-11, 12판의 "z/아키텍처 연산 원리들"에 기술되어 있고, 이는 전체로서 이 명세서에 참조로 포함된다. z/Architecture 하드웨어 아키텍처는, 그러나, 오직 하나의 예시적인 아키텍처일 뿐이고, 다른 아키텍처들 및/또는 다른 유형의 컴퓨팅 환경들도 본 발명의 하나 또는 그 이상의 특징들을 포함하고 및/또는 사용할 수 있다. 일 예에서, 상기 프로세서는, 또한 인터내셔널 비즈니스 머신즈 코포레이션에 의해 공급되는, z/OS® 운영 체제와 같은, 운영 체제를 실행한다.
[0057] 프로세서(102)는 명령들을 실행하기 위해 사용되는 복수의 함수 컴포넌트들(functional components)을 포함한다. 도 1b에 도시한 바와 같이, 이들 함수 컴포넌트들은, 예를 들어, 실행될 명령들을 페치하기 위한 명령 페치 컴포넌트(120), 페치된 명령들을 디코드하고 디코드된 명령들의 오퍼랜드들을 획득하기 위한 명령 디코드 유닛(122), 디코드된 명령들을 실행하기 위한 명령 실행 컴포넌트(124), 명령 실행을 위해 메모리를 액세스하기 위한 메모리 액세스 컴포넌트(126), 필요하다면, 그리고 실행된 명령들의 결과들을 제공하기 위한 라이트 백 컴포넌트(130)을 포함한다. 하나 또는 그 이상의 이들 컴포넌트들은, 본 발명의 하나 또는 그 이상의 실시 예들에 따라, 압축/압축해제 처리(또는 본 발명의 하나 또는 그 이상의 실시 예들을 사용할 수 있는 다른 처리)에 사용되는 하나 또는 그 이상의 다른 컴포넌트들의 적어도 일부를 포함하거나, 또는 상기 하나 또는 그 이상의 다른 컴포넌트들에 대해 액세스 하며, 이에 관하여 후술한다. 상기 하나 또는 그 이상의 이들 컴포넌트들은, 예를 들어, 압축/압축해제 컴포넌트(또는 다른 컴포넌트)(136)을 포함한다.
[0058] 본 발명의 하나 또는 그 이상의 실시 예들을 통합하고 사용하는 컴퓨팅 환경의 다른 예가 도 2를 참조하여 설명된다. 한 예에서, 컴퓨팅 환경은 z/Architecture 하드웨어 아키텍처를 기초한다; 그러나, 컴퓨팅 환경은 인터내셔널 비즈니스 머신즈 코포레이션 또는 타사에서 제공하는 다른 아키텍처들에 기초할 수 있다.    
[0059] 도 2를 참조하면, 일 예에서, 컴퓨팅 환경은 중앙 전자 콤플렉스(CEC)(200)를 포함한다. CEC(200)는, 예를 들어, 하나 또는 그 이상의 프로세서들(일명, 중앙 처리 유닛들(CPU들))(204) 및 입력/출력 서브시스템(206)에 결합된    메모리(202)(일명, 시스템 메모리, 메인 메모리, 메인 스토리지, 중앙 스토리지)와 같은 복수의 컴포넌트들을 포함한다.
[0060] 메모리(202)는, 예를 들어, 하나 또는 그 이상의 논리 파티션들(208), 논리적 파티션들을 관리하는 하이퍼 바이저(210), 및 프로세서 펌웨어(212)를 포함한다. 하이퍼 바이저(210)의 일 예는, 미국 뉴욕주, 아몽크에 소재하는, 인터내셔널 비즈니스 머신즈 코포레이션에 의해서 공급되는, 프로세서 리소스/시스템 매니저(PR /SMTM) 하이퍼 바이저이다. 본 명세서에 사용된 바와 같은, 펌웨어는, 예를 들어, 프로세서의 마이크로코드를 포함한다. 예를 들어, 펌웨어는 더 높은 레벨의 머신 코드 구현에 사용되는 하드웨어 레벨 명령들 및/또는 데이터 구조들이 포함된다. 일 실시예에서, 펌웨어는, 예를 들어, 기본 하드웨어에 특정한 마이크로코드 또는 신뢰할 수 있는 소프트웨어를 포함하고 시스템 하드웨어에 대한 운영 체제 액세스를 제어하는 마이크로코드로서 일반적으로 전달되는 재산권 있는 코드(proprietary code)를 포함한다.
 [0061] 각각의 논리 파티션(208)은 별도의 시스템으로서 기능 할 수 있다. 즉, 각 논리 파티션은 독립적으로 리세트 될 수 있고, z/OS 운영 체제와 같은 게스트 운영 체제(220) 또는 다른 운영 체제를 실행하고, 다른 프로그램들(222)과 함께 작동할 수 있다. 논리 파티션에서 실행되는 운영 체제 또는 애플리케이션 프로그램은 전체적으로 완전하게(full and complete) 시스템에 액세스하는 것처럼 보이지만, 실제로는 그 중 일부만 이용 가능하다. 
[0062] 메모리(202)는, 논리적 파티션에 할당될 수 있는 물리적 프로세서 리소스들인, 프로세서들(예를 들어, CPU의 204)에 결합된다. 예를 들어, 논리 파티션(208)은 하나 또는 그 이상의 논리 프로세서들을 포함하며, 이들 각각은 논리 파티션에 동적으로 할당될 수 있는 물리적 프로세서 리소스(204)의 전체 또는 공유를 나타낸다.  
[0063] 또한, 메모리(202)는I/O 서브 시스템(206)에 결합된다. I/O 서브 시스템(206)은 중앙 전자 콤플렉스의 일부이거나 또는 그로부터 분리되어 있을 수 있다. 이는 메인 스토리지(202)와 입/출력 제어 유닛들(230) 및 중앙 전자 콤플렉스에 연결된 입/출력(I/O) 디바이스들(240) 사이의 정보 흐름을 지시한다(direct). 
 [0064] 많은 유형의 I/O 디바이스들이 사용될 수 있다. 하나의 특정 유형은 데이터 스토리지 디바이스(250)이다. 데이터 스토리지 디바이스(250)는 하나 또는 그 이상의 프로그램들(252), 하나 또는 그 이상의 컴퓨터 판독 가능 프로그램 명령들(254), 및/또는 데이터 등을 저장할 수 있다. 컴퓨터 판독 가능 프로그램 명령들은 본발명의 실시 예들의 기능들을 수행하도록 구성될 수 있다.    
[0065] 하나의 예로서, 각각의 프로세서(204)는 캐시 계층의 적어도 하나의 캐시(260) (예를 들어, 로컬 캐시)를 포함하고, 캐시 계층은, 하나 또는 그 이상의 로컬 캐시들 및/또는 하나 또는 그 이상의 공유 캐시들을 포함하는, 복수의 레벨들의 캐시를 포함한다. 또한, 일 실시예에서, 로컬 캐시들 및 메모리(202)는 데이터의 압축 및/또는 압축해제(및/또는 하나 또는 그 이상의 본 발명의 실시 예들의 다른 연산들)를 수행하는 데 사용되는 압축/압축 해제 컴포넌트(또는 다른 컴포넌트)(262)에 결합된다. 다양한 예들에서, 이들 작업들을 수행하는 하나 또는 그 이상의 컴포넌트들이 있을 수 있다. 많은 변형들이 가능하다. 
[0066] 일 실시 예에서, 프로세서 (예를 들어, 프로세서(204))는 명령(예를 들어,디플레이트 변환 호출 명령)을 획득하고, 상기 명령을 디코드 하며, 상기 명령에 의해서 사용될 주소들을 변환하는 것을 포함하는, 상기 명령을 위한 셋업을 수행하고, 상기 명령에 의해서 명시된 기능을 수행하기 위해, 컴포넌트(262)와 같은, 프로세서에 결합된 컴포넌트로 상기 명령을 위한 커맨드들을 보낸다. 컴포넌트(262)는 캐시 계층 및 메모리에 액세스하여, 명시된 기능을 수행함에 있어서, 데이터를 읽고, 처리하고 처리된 데이터를 다시 저장한다. 예로서, 컴포넌트(262)는 하드웨어 컴포넌트이다.                 
[0067]추가의 실시 예에서, 컴포넌트(262)의 적어도 일부는 상기 프로세서의 일부로서 포함된다. 많은 변형들이 가능하다.
[0068] 중앙 전자 콤플렉스 (200)는, 착탈식/비착탈식(removable/non-removable), 휘발성/비휘발성(volatile/non-volatile) 컴퓨터 시스템 스토리지 매체를 포함하거나 및/또는 이들에 결합 될 수 있다. 예를 들어, 중앙 전자 콤플렉스 (200)는, 비착탈식, 비휘발성 자기 매체(일반적으로 "하드 드라이브"라고 함), 착탈식, 비휘발성 자기 디스크(예를 들어, "플로피 디스크")에서 읽고 쓰기 위한 자기 디스크 드라이브, 및/또는, CD-ROM, DVD-ROM 또는 기타 광 매체와 같은, 착탈식, 비휘발성 광 디스크에서 읽거나 쓰기 위한 광 디스크 드라이브를 포함하거나 및/또는 이들에 결합될 수 있다.  다른 하드웨어 및/또는 소프트웨어 컴포넌트들이 중앙 전자 콤플렉스(200)와 함께 사용될 수 있음을 이해해야 한다. 예들은 마이크로코드, 디바이스 드라이버들, 리던던트 처리 유닛들, 외부 디스크 드라이브 어레이들, RAID 시스템들, 테이프 드라이브들, 및 데이터 아카이벌 스토리지 시스템들(data archival storage systems) 등을 포함하지만, 이에 국한되지는 않는다. 
[0069] 또한, 중앙 전자 콤플렉스(200)는 다수의 다른 범용 또는 특수 목적 컴퓨팅 시스템 환경들 또는 구성들과 함께 운영 될 수 있다. 중앙 전자 콤플렉스(200)와 함께 사용하기에 적합할 수 있는 잘 알려진 컴퓨팅 시스템들, 환경들 및/또는 구성들의 예들은 개인용 컴퓨터(PC) 시스템들, 서버 컴퓨터 시스템들, 씬 클라이언트들, 씩 클라이언트들, 핸드헬드 또는 랩톱 디바이스들, 멀티 프로세서 시스템들, 마이크로프로세서 기반 시스템들, 셋톱 박스들, 프로그래밍 가능한 가전 제품들, 네트워크 PC들, 미니 컴퓨터 시스템들, 메인프레임 컴퓨터 시스템들 및 상기 시스템들 또는 디바이스들 중 어느 하나를 포함하는 분산 클라우드 컴퓨팅 환경들 등을 포함하나, 이에 한정하지는 않는다. 
[0070] 컴퓨팅 환경들의 다양한 예들이 본 명세서에서 설명되었지만, 본 발명의 하나 또는 그 이상의 실시 예들은 많은 유형의 환경들에서 사용될 수 있다. 여기에 제공된 컴퓨팅 환경들은 오직 예시일 뿐이다.                 
[0071]본 발명의 일 실시 예에 따라, 컴퓨팅 환경(100) 또는 중앙 전자 콤플렉스(200)과 같은, 컴퓨팅 환경은 데이터를 압축하고 압축해제 하기 위한 메커니즘을 제공하는 변환 퍼실리티(a conversion facility)를 채용한다. 일 예에서, 변환 퍼실리티는 디플레이트 변환된 데이터 포맷을 이용하여 데이터를 압축하고 압축해제 하기 위한 메커니즘을 제공하는 퍼실리티 디플레이트 변환 퍼실리티(a DEFLATE conversion facility)이다. 일 예에서, 변환 퍼실리티는 퍼실리티 표시자(a facility indicator)가, 예를 들어, 1로 세트 될 때 시스템 내에 설치된다. z/Architecture 하드웨어 아키텍처의 일 특정 예로서, 변환 퍼실리티가 z/Architecture 아키텍처 모드에서 설치될 때, 퍼실리티 비트(151)는, 예를 들어, 1로 세트 된다. 상기 퍼실리티는, 예를 들어, 디플레이트 변환 호출 명령(the DEFLATE Conversion Call instruction)을 포함하며, 이에 관한 실시 예는 후술한다.
[0072]일 예에서, 디플레이트 변환 호출 명령은 원래(압축 안된) 형태의 데이터와 압축된 표현의 데이터 사이의 데이터의 상태를 변환하는 것에 관한 함수들을 수행하는데, 이는, IETF(인터넷 엔지니어링 태스크 포스)RFC(코멘트에 대한 요청) 1951 사양-이는 디플레이트 압축된 데이터 포맷 사양 버전 1.3 인터넷 엔지니어링 태스크 포스, 코멘트에 대한 요청 1951, 1996년 5월,에 기술되어 있다- 과 같은, 선택된 표준에 의해서 명시된다.
[0073]일 예에서, 압축 안된 데이터는 바이트들의 시퀀스이고, 데이터의 압축된 표현은 심볼들을 포함한다. 심볼들은"리트럴 바이트(a literal byte)"라 불리는, 압축 안된 데이터의 개별 바이트를 나타내거나, 또는 "중복 스트링(a duplicate string)" 이라 불리는, 압축 안된 데이터의 리커링 시퀀스를 나타낸다. 예로서, 후프만 테이블(Huffman table)은 압축된 데이터 심볼들과 압축 안된 데이터 사이의 엔코딩 및 디코딩을 명시한다. 후프만 테이블들은 2개의 유형이 있다: 예를 들어, 가능한 모든 코딩들을 포함하는 미리 정해진 사양인 고정-후프만 테이블(FHT)과; 그리고 모든 가능한 코딩들의 서브세트가 될 수 있는, 압축될 데이터에 대해 구체적으로 생성된 한 세트의 코딩들인, 동적-후프만 테이블(DHT)의 2개의 유형이 있다. DHT로 생성된 데이터의 압축된 표현은 통상적으로 FHT로 생성된 동일 데이터의 압축된 표현보다 더 적다. 히스토리라 불리는, 최근에 가장 많이 처리된 압축 안된 데이터의 일부는 중복 스트링들을 나타내는 압축된 데이터 심볼들을 엔코딩 및 디코딩 하기 위해 유지된다. 히스토리는 중복 스트링들에 대한 참조 소스이다. 히스토리는 연산 동안 데이터가 처리됨에 따라 갱신된다.
[0074] 일 예에서, 표시한 바와 같이, 디플레이트 변환 호출 명령은 디플레이트 압축된 데이터 포맷을 사용하는데, 이는 RCF 1951, 디플레이트 압축된 데이터 포맷 사양 버전 1.3에 기술되어 있다. 디플레이트 변환 호출 명령에 적용되는 디플레이트 표준의 속성들은, 예를 들어, 다음과 같다:
● 압축된 데이터 세트는 일련의 블록들을 포함한다. 이들은 세가지 유형의 블록들이다. 한 유형은 길이 정보와 압축 안된 데이터가 뒤따르는 3-비트헤더(a 3-bit header)를 포함하고, 두개의 유형의 블록들은 압축된 데이터 엘리멘트들이 뒤따르는 3-비트헤더를 포함한다.
● 압축된 데이터 엘리멘트들은 동적-후프만 테이블, 압축된 데이터 심볼들, 및 엔드-오브-블록(EOB)심볼의 압축된 표현을 포함할 수 있다.
● 압축된 데이터 엘리멘트들은 다양한 비트 길이들을 갖는다.
● 압축된 데이터 엘리멘트들은 스토리지 내 바이트 경계들 사이에서 시작하거나 또는 종료될 수 있다.
● 압축된 데이터 엘리멘트들은, 예를 들어, 최우측 비트 위치로부터 최좌측 비트 위치까지 순서로 바이트들에 로드 된다.
[0075] 압축된 데이터 엘리멘트들이 스토리지 내 바이트의 일부를 차지하고, 전부를 차지하지 않을 때도, 스토리지 내 전체 바이트가 액세스된다. 스토리지 오퍼랜드 길이들은 주소지정 가능 바이트들의 수를 명시하는데, 이는 압축된 데이터가 차지하는 것 보다 더 많은 비트들을 명시한다.
[0076] 압축된 데이터 블록들에 관한 추가적인 상세한 설명은 후술한다.
[0077] 디플레이트 변환 호출(DFLTCC) 명령의 일 실시 예가 도 3a-3l을 참조하여기술된다. 일 예에서, 상기 명령은 범용 프로세서(예를 들어, 프로세서 102 또는 204)를 이용하여 실행된다. 본 명세서에서, 특정 위치들, 특정 필드들 및/또는 필드들의 특정 크기들이 표시된다(예를 들어, 특정 바이트들 및/또는 비트들). 그러나, 다른 위치들, 필드들 및/또는 크기들도 제공될 수 있다. 또한, 비트를, 예를 들어, 1 또는 0의 특정 값에 세트 하더라도, 이건은 오직 예 일뿐이다. 다른 예들에서, 비트는 반대 값과 같은 다른(different) 값 또는 또다른(another) 값에 세트 될 수 있다. 많은 변형들이 가능하다.
[0078] 일 실시 예에서, 프로그램(예를 들어, 운영 체제 또는 사용자 프로그램)은 단일 데이터 스트림을 압축 또는 압축해제 하기 위해 여러 차례 디플레이트 변환 호출 명령을 실행할 수 있다. 예를 들어, 애플리케이션이 대규모 데이터 스트림(1M-바이트보다 큰)을 압축하거나, 또는 압축해제 할 때, 연산은 상기 데이터 스트림의 버퍼 된 부분들을 압축, 또는 압축해제 하기 위해 다수의 호출들을 포함할 수 있다. 본 발명의 일 실시 예에 따라, 프로그램은 버퍼(예를 들어, 32K-바이트 버퍼)를 선언하는데, 이는 디플레이트 변환 호출 명령의 다수 실행들에 걸친 연산 동안 처리된 압축 안된 데이터의 히스토리를 축적하기 위해 사용된다. 상기 버퍼를 서큘러 히스토리 버퍼라 하는데, 이는, 여기서 기술하는 바와 같이, 디플레이트 변환 호출 명령을 이용하여 정의된다.
[0079] 도 3a를 참조하면, 일 예에서, 디플레이트 변환 호출(DFLTCC) 명령(300)의 포맷은 RRF포맷이며, 이는 확장된 연산 코드(opcode) 필드 및 추가의 레지스터 필드를 갖는 레지스터 및 레지스터 연산을 의미한다. 예로서, 상기 명령은 디플레이트 변환 호출 연산을 표시하는 연산 코드를 갖는 연산 코드 필드(302)(예를 들어, 비트 0-15); 일반 레지스터들의 제1쌍을 지정하는 제1레지스터 필드(R1)(304)(예를 들어, 비트 24-27); 일반 레지스터들의 제2쌍을 지정하는 제2레지스터 필드(R2)(306)(예를 들어, 비트 28-31); 및 일반 레지스터들의 제3쌍을 지정하는 제3레지스터 필드(R3)(308)(예를 들어, 비트 16-19)를 포함한다. R1필드(304)에 의해서 지정된 레지스터의 컨텐츠는 제1오퍼랜드의 위치(스토리지 내)를 명시하고; R2필드(306)에 의해서 지정된 레지스터의 컨텐츠는 제2오퍼랜드의 위치(스토리지 내)를 명시하며; 그리고 R3필드(308)에 의해서 지정된 레지스터의 컨텐츠는 제3오퍼랜드의 위치(스토리지 내)를 명시한다. R1+1의 컨텐츠는 제1오퍼랜드의 길이를 명시하고; 그리고 R2+1의 컨텐츠는 제2오퍼랜드의 길이를 명시한다. 일 예에서, 상기 명령의 비트 20-23은 유보되고 0들을 포함하며; 그렇지 않으면, 프로그램은 향후 호환되게 연산하지 못한다. 여기서 사용된, 상기 프로그램은 디플레이트 변환 호출 명령을 발행하는 프로그램이다. 그것은 사용자 프로그램, 운영 체제 또는 다른 유형의 프로그램일 수 있다.
[0080] 일 실시 예에서, 상기 명령의 실행은 하나 또는 그 이상의 묵시적 일반 레지스터들(one or more implied general registers)(즉, 상기 명령에 의해서 명시적으로 지정되지 않은 레지스터들)의 사용을 포함한다. 예를 들어, 일반 레지스터들 0 및 1이, 전술 한, 디플레이트 변환 호출 명령의 실행에 사용된다. 일반 레지스터 0은, 일 예에서, 수행될 함수(및 히스토리 버퍼 유형, 후술한다)를 명시하기 위해 사용되고, 일반 레지스터 1은 상기 명령에 의해서 사용된 파라미터 블록의 위치를 제공하기 위해 사용된다.
[0081] 일 예로서, 도 3b를 참조하며, 일반 레지스터 0(309)은 히스토리 버퍼 유형 필드(310) 및 함수 코드 필드(312)를 포함한다. 하나의 특정 예에서, 일반 레지스터 0의 비트 위치(56)는 히스토리 버퍼 유형을 포함하고, 일반 레지스터 0의 비트 위치들(57-63)은 함수 코드를 포함한다; 그러나 다른 실시 예들에서, 히스토리 버퍼 유형 및/또는 함수 코드를 포함하기 위해 다른 비트들이 사용될 수 있다. 일반 레지스터 0의 비트들 57-63이 할당되지 않거나 또는 설치되지 않은 함수 코드를 지정할 때, 한 예에서, 명세 예외(a specification exception )가 인지된다. 
[0082] 디플레이트 변환 호출 명령을 위해 할당된 함수 코드의 예가 도 3c에 도시되어 있고, 이 코드는, 예를 들어: DFLTCC-QAF(쿼리 이용 가능 함수들) 함수를 표시하는 함수 코드 0(313); DFLTCC-GDHT(동적-후프만 테이블 생성) 함수를 표시하는 함수 코드 1(315); DFLTCC-CMPR(압축) 함수를 표시하는 함수 코드 2(317); 및 DFLTCC-XPND(확장) 함수를 표시하는 함수 코드 4(319)를 포함한다. 각각의 코드는 파라미터 블록을 사용하며, 파라미터 블록의 크기는, 일 예에서, 함수에 따라 달라진다. 예를 들어, DFLTCC-QAF 함수의 경우, 파라미터 블록은 32바이트이고; DFLTCC-GDHT 함수의 경우, 파라미터 블록은 384바이트이며, 그리고 DFLTCC-CMPR 및 DFLTCC-XPND 함수의 경우, 파라미터 블록은 1536바이트이다. 다른 함수 코드들은 이 예에서 할당되지 않았다. 예시적인 함수들 및 함수 코드들이 설명되었지만, 다른 함수들 및/또는 함수 코드들이 사용될 수 있다.                 
 [0083] 명시된 함수가 DFLTCC-CMPR 또는 DFLTCC-XPND일 때, 범용 레지스터 0의 비트 56은 연산 중에 사용되는 히스토리 버퍼 유형(HBT)를 명시한다.  HBT 0일 때, 그 히스토리 버퍼를 인라인 히스토리 버퍼(an in-line history buffer)라고 한다. 인라인 히스토리 버퍼를 사용할 때, 히스토리는, 예를 들어, DFLTCC-CMPR이 명시될 때 제2오퍼랜드의 바로 왼쪽에 있게 되고, 예를 들어 DFLTCC-XPND가 명시될 때 제1오퍼랜드의 바로 왼쪽에 있게 된다. HBT가 1일 때, 히스토리 버퍼를 서큘러 히스토리 버퍼(a circular history buffer)라고 한다. 서큘러 히스토리 버퍼를 사용할 때, 히스토리는 DFLTCC-CMPR 또는 DFLTCC-XPND 어느 쪽이 명시되던 지 제3 오퍼랜드의 일부 또는 전부가 된다. DFLTCC-QAF 또는 DFLTCC-GDHT 함수가 명시될 때, 일반 레지스터 0의 비트 56은 무시된다. 한 예에서 일반 레지스터 0의 비트 위치들 0-31은 무시된다. 또한, 한 예에서 일반 레지스터 0의 비트 위치들 32-55는 유보되고 0들을 포함해야 한다; 10그렇지 않으면 향후 프로그램이 호환되지 않을 수 있다.  
[0084] 디플레이트 변환 호출 명령에 의해 사용되는, 다른 묵시적 레지스터, 일반 레지스터 1에 관한 더 자세한 사항은 도 3d를 참조하여 설명한다. 일반 레지스터 1(314)의 컨텐츠는, 예를 들어, 스토리지에 있는 파라미터 블록의 최좌측 바이트의 논리 주소(316)를 명시한다. 한 예에서 파라미터 블록은 4K 바이트 경계에서 지정된다; 그렇지 않으면 명세 예외가 인지된다. 파라미터 블록에 대한 자세한 사항은 아래에서 자세히 설명한다.  
[0085] 명시된 함수들(예를 들어, DFLTCC-QAF, DFLTCC-GDHT, DFLTCC-CMPR, DFLTCC-XPND)을 위해, 일반 레지스터들 0, 1, 및 R3의 컨텐츠는 수정되지 않는다. 또한, 일 예에서, R1 필드(304)는 일반 레지스터들의 짝수-홀수 쌍을 지정한다. 짝수 레지스터를 지정하는 것이지 일반 레지스터 0을 지정하는 것이 아니다; 그렇지 않으면 명세 예외가 인지된다.   
[0086] 도 3e-3f에 도시되고 본 명세서에 더 상세하게 성명된 바와 같이, 일반 레지스터 R1(318)의 컨텐츠는 제1 오퍼랜드 주소(320)를 표시하고, 일반 레지스터 R1 + 1(322)의 컨텐츠는 제1 오퍼랜드의 길이(324)를 결정하는 데 사용된다. 예를 들어, 명시된 함수가 DFLTCC-CMPR 또는 DFLTCC-XPND일 때, 일반 레지스터 R1(318)의 컨텐츠는 제1오퍼랜드의 최좌측 바이트의 논리 주소를 명시한다. 명시된 함수가 DFLTCC-CMPR일 때, 일반 레지스터 R1 + 1의 컨텐츠는 파라미터 블록(아래 설명됨)의 신규 작업(NT) 및 서브 바이트 경계(SBB) 필드들의 값들과 함께 제1오퍼랜드의 길이를 명시한다. 다음 테이블은 일반 레지스터 R1 + 1, NT 필드 및 SBB 필드의 컨텐츠의 함수로서 DFLTCC-CMPR 함수의 제1오퍼랜드의 길이를 보여주는 예들을 제공한다:
Figure pct00001
[0087] 명시된 함수가 DFLTCC-XPND일 때, 일반 레지스터 R 1 + 1의 컨텐츠는 제1오퍼랜드의 길이를 명시한다. 명시된 함수가 DFLTCC-CMPR 또는 DFLTCC-XPND일 때, 데이터 압축 또는 압축 해제의 결과들은 제1오퍼랜드 위치에 저장된다. DFLTCC-QAF 또는 DFLTCC-GDHT 함수가 명시될 때, 일반 레지스터 R1 및 R1 + 1의 컨텐츠는 무시된다. 
[0088] 또한, 명시된 함수들(예를 들면, DFLTCC-QAF, DFLTCC-GDHT, DFLTCC-CMPR 및 DFLTCC-XPND)을 위해서, 일 실시 예에서, R2 필드(306)는 일반 레지스터들의 짝수 - 홀수 쌍을 지정한다. 짝수 레지스터를 지정하는 것이지 일반 레지스터 0을 지정하는 것이 아니다; 그렇지 않으면 명세 예외가 인지된다. 
[0089] 도 3g-3h에 도시되고 본 명세서에 더 상세하게 성명된 바와 같이, 일반 레지스터 R2(326)의 컨텐츠는 제2 오퍼랜드 주소(328)를 표시하고, 일반 레지스터 R2 + 1(330)의 컨텐츠는 제2 오퍼랜드의 길이(332)를 결정하는 데 사용된다. 예를 들어, 명시된 함수가 DFLTCC-GDHT, DFLTCC-CMPR 또는 DFLTCC-XPND일 때, 일반 레지스터 R2의 컨텐츠는 제2오퍼랜드의 최 좌측 바이트의 논리 주소를 명시한다. 명시된 함수가 DFLTCC-CMPR 또는 DFLTCC-GDHT일 때, 일반 레지스터 R2 + 1의 컨텐츠는 제2오퍼랜드의 길이를 명시한다.  명시된 함수가 DFLTCC-XPND일 때, 일반 레지스터 R2 + 1의 컨텐츠는 파라미터 블록의 NT 및 SBB 필드들의 값들과 함께 제2오퍼랜드의 길이를 명시한다. 제2오퍼랜드 길이가 참조되고 상기 명령의 실행 시작 시에 0이 아닌 값을 가질 때, 데이터는 제2오퍼랜드 위치로부터 페치 된다. 제2오퍼랜드 길이가 참조되고 상기 명령의 실행 시작 시에 0의 값을 가지며, 파라미터 블록의 계속 플래그(CF) 필드가 상기 명령 실행 시작 시에 1일 때, 제2오퍼랜드는 액세스되지 않는다.    
[0090] DFLTCC-QAF 함수가 명시될 때, 일반 레지스터들 R2 및 R2 + 1의 컨텐츠는 무시된다.  DFLTCC-GDHT 함수가 명시되고 일반 레지스터 R2 + 1의 컨텐츠가 0과 같은 길이를 명시할 때, 명세 예외가 인지되고 제2오퍼랜드는 액세스되지 않는다. DFLTCC-CMPR 또는 DFLTCC-XPND 함수가 명시되고, 파라미터 블록의 계속 플래그(CF) 필드가 상기 명령 실행 시작 시에 0이며, 일반 레지스터 R2 + 1의 컨텐츠가 0과 같은 길이를 명시할 때, 명세 예외가 인지되고 제2오퍼랜드는 액세스되지 않는다.    
[0091] 도 3i에 도시된 바와 같이, 명시된 함수가 DFLTCC-CMPR 또는 DFLTCC-XPND이고 히스토리 버퍼 유형(HBT)이 서큘러(예를 들어, HBT 310=1)일 때, 일반 레지스터 R3(335)의 컨텐츠는 서큘러 히스토리 버퍼 주소(337)를 명시한다. 예를 들어, 제3 오퍼랜드의 최좌측 바이트의 논리 주소가 명시된다. 그 것은, 예를 들어, 4K-바이트 경계를 지정하는 것이다; 그렇지 않으면 명세 예외가 인지된다. 한 예에서, 서큘러 히스토리 버퍼는 제3오퍼랜드 위치에 위치된다. 명시된 함수가 DFLTCC-CMPR 또는 DFLTCC-XPND이고 HBT가 0일 때, 일반 레지스터 R3의 컨텐츠는 무시된다. DFLTCC-QAF 또는 DFLTCC-GDHT 함수가 명시될 때, 일반 레지스터의 컨텐츠 R3 무시된다. 명시된 함수들(예를 들어, DFLTCC-QAF, DFLTCC-GDHT, DFLTCC-CMPR 및 DFLTCC-XPND)에 대해서, R3 필드는 일반 레지스터 0 또는 일반 레지스터 1을 명시하지 않는다; 그렇지 않으면, 한 예에서, 명세 예외가 인지된다. 
[0092] 연산의 일부로서, 명시된 함수가 DFLTCC-CMPR이고, 일반 레지스터 R1의 주소는 처리 비트 위치 0을 포함했던 제1오퍼랜드의 처리 된 바이트 수만큼 증가되며, 그리고 일반 레지스터 R1 + 1의 길이가 같은 수만큼 감소될 때, 일반 레지스터 R2 의 주소는 제2오퍼랜드의 처리된 바이트 수만큼 증가되고, 그리고 일반 레지스터 R2 + 1의 길이는 같은 수만큼 감소된다. 처리 비트 위치 0을 포함했던 제1오퍼랜드의 처리된 바이트 수는, 예를 들어, 처리된 출력 비트 수와 SBB의 원래 값의 합인 피제수(dividend)와 8의 값인 제수(divisor)를 갖는 정수 나눗셈(an integer division)의 결과인 정수 몫(integer quotient)이다. 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 달라지며, 이에 관하여 후술한다. 
[0093] 연산의 일부로서, 명시된 함수가 DFLTCC-XPND이고, 일반 레지스터 R1의 주소가 제1오퍼랜드의 처리된 바이트 수만큼 증가되며, 그리고 일반 레지스터 R1 + 1의 길이가 같은 수만큼 감소될 때, 일반 레지스터 R2의 주소는 처리 비트 위치 0을 포함했던 제2오퍼랜드의 처리된 바이트 수만큼 증가되고, 그리고 일반 레지스터 R2 + 1의 길이는 같은 수만큼 감소된다. 처리 비트 위치 0을 포함했던 제2오퍼랜드의 처리된 바이트 수는 처리된 입력 비트 수와 SBB의 원래 값의 합인 피제수와 8의 값인 제수를 갖는 정수 나눗셈의 결과인 정수 몫이다. 주소들 및 길이들의 형성 및 갱신은 주소 지정 모드에 따라 달라지며, 이에 관하여 후술한다. 
[0094] 24 비트 주소지정 모드에서, 다음이, 일 실시 예에서, 적용된다:
● 일반 레지스터들1, R1, R2, 및 R3의 비트 위치40-63의 컨텐츠는, 각각, 파라미터 블록, 제1오퍼랜드, 제2오퍼랜드, 및 서큘러 히스토리 버퍼의 주소들을 구성하고, 그리고 비트 위치 0-39의 컨텐츠는 무시된다.
● 갱신된 제1오퍼랜드 및 제2 오퍼랜드 주소들의 비트 40-63은, 각각, 일반 레지스터들 R1 및 R2의 대응 비트들을 대체한다. 갱신된 주소들의 비트 위치 40을 넘어가는 캐리들은 무시되고, 그리고 일반 레지스터들 R1 및 R2의 비트 위치 32-39의 컨텐츠는 0들로 세트 된다. 일반 레지스터들 R1 및 R2의 비트 위치 0-31의 컨텐츠는 변경되지 않은 상태로 유지된다. 상기 명령이 부분 또는 정상 완료로 종료되고, 그리고 갱신된 오퍼랜드 주소가 상기 명령의 실행 시작 시의 오퍼랜드 주소와 같을 때, 대응 일반 레지스터의 비트 위치 32-39는 0들로 세트 된다. 
● 일반 레지스터들 R1 + 1 및 R2 + 1의 비트 위치 32-63의 컨텐츠는, 예를 들어, 각각, 제1 및 제2오퍼랜드들의 바이트들의 수를 명시하는 32비트의 부호 없는 이진 정수를 형성한다. 일반 레지스터 R1 + 1 및 R2 + 1의 비트 위치 0-31의 컨텐츠는 무시된다. 
● 갱신된 제1 오퍼랜드 및 제2오퍼랜드 길이들의 비트 32-63은, 각각, 일반 레지스터들 R1 + 1 및 R2 + 1의 대응 비트들을 대체한다. 일반 레지스터들 R1 + 1 및 R2 + 1의 비트 위치 0-31의 컨텐츠는 변경되지 않은 상태로 유지된다. 
[0095] 31 비트 주소지정 모드에서, 다음은, 일 실시 예에서, 적용된다:
● 일반 레지스터들1, R1, R2, 및 R3의 비트 위치 33-63의 컨텐츠는, 각각 파라미터 블록, 제1오퍼랜드, 제2오퍼랜드 및 서큘러 히스토리 버퍼의 주소들을 구성하고, 그리고 비트 위치 0-32의 컨텐츠는 무시된다. 
● 갱신된 제1오퍼랜드 및 제2오퍼랜드 주소들의 비트 33-63은 일반 레지스터들 R1 및 R2의 대응 비트들을, 각각, 대체한다. 갱신된 주소들의 비트 위치 33을 넘어가는 캐리들은 무시되고, 일반 레지스터들 R1 및 R2의 비트 위치 32 컨텐츠는 0으로 세트 된다. 일반 레지스터들 R1 및 R2의 비트 위치 0-31의 컨텐츠는 변경되지 않은 상태로 유지된다. 상기 명령이 부분 또는 정상 완료로 종료되고, 그리고 갱신된 오퍼랜드 주소들이 상기 명령 실행 시작 시의 오퍼랜드 주소와 같을 때, 대응 일반 레지스터의 비트 위치 32가 0으로 세트 된다.
● 일반 레지스터들 R1 + 1 및 R2 + 1의 비트 위치 32-63의 컨텐츠는, 각각, 제1 및 제2오퍼랜드의 바이트들의 수를 명시하는 32비트 부호 없는 이진 정수들을 형성한다. 일반 레지스터들 R1 + 1 및 R2 + 1의 비트 위치 0-31의 컨텐츠는 무시된다.
● 갱신된 제1오퍼랜드 및 제2오퍼랜드 길이들의 비트 32-63은, 각각, 일반 레지스터들 R1 + 1 및 R2 + 1의 대응 비트들을 대체한다. 일반 레지스터들 R1 + 1 및 R2 + 1 의 비트 위치 0-31의 컨텐츠는 변경되지 않은 상태로 유지된다. 
[0096] 64 비트 주소지정 모드에서, 다음은, 일 실시 예에서 적용된다:
● 일반 레지스터들 1, R1, R2 및 R3의 비트 위치0-63의 컨텐츠는, 각각, 파라미터 블록, 제1오퍼랜드, 제2 오퍼랜드, 및 서큘러 히스토리 버퍼의 주소들을 구성한다.
● 갱신된 제1오퍼랜드 및 제2오퍼랜드 주소들의 비트 0-63은, 각각, 일반 레지스터들 R1 및 R2의 대응 비트들을 대체한다. 갱신 된 주소들의 비트 위치 0을 넘어가는 캐리들은 무시된다. 
● 일반 레지스터들 R1 + 1 및 R2 + 1의 비트 위치 0-63의 컨텐츠는, 각각, 제1 및 제2오퍼랜드들의 바이트 수를 명시하는 64-비트 부호 없는 이진 정수들을 형성한다. 
● 갱신된 제1오퍼랜드 및 제2오퍼랜드 길이들의 비트 0-63은, 각각, 일반 레지스터들 R1 + 1 및 R2 + 1의 대응 비트를 대체한다. 
[0097] 상기 액세스 레지스터 모드에서, 액세스 레지스터들 1, R1, R2 및 R3은 파라미터 블록, 제1오퍼랜드, 제2오퍼랜드, 및 서큘러 히스토리 버퍼를, 각각, 포함하는 주소 공간을 명시한다. 인라인 히스토리 버퍼가 있는 DFTCC-CMPR이 액세스 레지스터 모드에서 명시될 때, 액세스 레지스터 R2는 인라인 히스토리를 포함하는 주소 공간을 명시한다. 인라인 히스토리 버퍼가 있는 DFTCC-XPND가 액세스 레지스터 모드에서 명시될 때, 액세스 레지스터 R1 은 인라인 히스토리를 포함하는 주소 공간을 명시한다. 
[0098] 여러 가지 함수들에 대한 자세한 사항들은 아래에 설명된다:
[0099] 함수 코드 0: DFLTCC-QAF(쿼리 이용 가능 함수들)
[0100] DFLTCC-QAF(쿼리 이용 가능 함수들)함수는 설치된 함수들 및 설치된 파라미터 블록 포맷들의 이용 가능성을 표시하기 위한 메커니즘을 제공한다. DFLTCC-QAF 함수에 대한 파라미터 블록의 한 가지 예시적인 포맷이 도 3j를 참조하여 설명된다. 일 예에서, DFLTCC-QAF함수(예를 들어, 함수 코드 0)에 대한 파라미터 블록(340)은 설치된 함수들 벡터(342) 및 설치된 파라미터 블록 포맷 벡터(346)를 포함한다. 하나의 특정 예에서, 이들 벡터들은 파라미터 블록의 바이트 0-15 및 바이트 24-25에, 각각, 저장된다. 상기 벡터들의 각각은 아래에서 더 설명된다. 
[0101] 예를 들어, 설치된 함수들 벡터(342)의 비트0-127은, 각각, 디플레이트 변환 호출 명령의 함수 코드0-127에 대응된다. 비트가, 예를 들어, 1일 때, 대응 함수가 설치된다; 그렇지 않으면 상기 함수는 설치되지 않는다. 
[0102] 또한, 일 예에서, 설치된 파라미터 블록 포맷들 벡터(346)의 비트0-15는 DFLTCC-GDHT, DFLTCC-CMPR 및 DFLTCC-XPND 함수들에 대한 파라미터 블록 포맷들 0-15에, 각각, 대응한다. 비트가, 예를 들어, 1일 때, 대응 파라미터 블록 포맷은 설치된다; 그렇지 않으면 파라미터 블록 포맷은 설치되지 않는다. 한 예에서, 0들이 파라미터 블록의 유보된 바이트 16-23 및 26-31에 저장된다. 
[0103] 특정 필드들이 파라미터 블록(340)에 대하여 설명되었지만, 추가의, 더 적은 및/또는 다른 필드들이 다른 실시 예들에서는 포함될 수 있다. 
[0104] 일 실시 예에서, 일반 레지스터들 R1, R2, R3, R1 + 1 및 R2 + 1의 컨텐츠는 DFLTCC-QAF 함수에 의해 무시된다.  
[0105] PER(프로그램 이벤트 히스토리) 스토리지 변경 이벤트가, 적용 가능할 때, 파라미터 블록에 대해서, 인지된다. 적용 가능할 때, 파라미터 블록에 대해서, PER 0 주소 검출 이벤트가 인지된다. 
[0106] 일 예에서, DFLTCC-QAF 함수의 실행이 완료될 때, 조건 코드 0이 세트 된다; 한 예에서, 조건 코드들 1, 2, 3은 쿼리 함수에 대해서는 적용할 수 없다. 
[0107] 함수 코드 1: DFLTCC-GDHT(동적-후프만 테이블 생성)
[0108] DFLTCC-GDHT 함수가 명시될 때, 제2오퍼랜드는, 예를 들어, 디플레이트 표준(DEFLATE standard)에 의해 명시된 바와 같은, 동적-후프만 테이블(DHT)의 압축된 표현을 생성하기 위한 소스로서, 사용된다. 
[0109] 일 예에서, DFLTCC-GDHT 함수는 파라미터 블록을 사용하는데, 이에 관한 예가 도 3k를 참조하여 설명된다. 본 명세서에 설명된 예시적인 파라미터 블록에서는, 특정 필드들에 대한 파라미터 블록 내의 특정 위치들 및 상기 필드들의 특정 크기들이 표시된다(예를 들어, 특정 바이트 및/또는 비트). 그러나 다른 위치들 및/또는 크기들이 상기 필드들의 하나 또는 그 이상을 위해 제공될 수 있다. 또한, 비트를 특정 값, 예를 들어, 1 또는 0에 세트 하는 것이 명시되더라도, 이는 오직 예시일 뿐이다. 비트는, 다른 예에서 반대 값 또는 다른 값과 같은, 다른 값으로 세트 될 수 있다. 많은 변형들이 가능하다. 
[0110] 또한, 일 예에서, 파라미터 블록은 하나 또는 그 이상의 보존된 필드들(preserved fields)과 하나 또는 그 이상의 유보된 필드들(reserved fields)을 포함한다. 보존된 필드들은 DFLTCC-GDHT 함수에 의해 수정되지 않는다. 보존된 필드들은 프로그램이 단일 스토리지 위치를 초기화하여, DFLTCC-GDHT 함수의 파라미터 블록을 위해 해당 스토리지 위치를 사용하고, 이후에 DFLTCC-CMPR 함수의 파라미터 블록을 위해 동일한 스토리지 위치를 사용할 수 있도록 하기 위해 유보된 필드들과는 구별된다. 유보된 필드들은 0들을 포함해야 한다; 그렇지 않으면 프로그램이 향후 호환되지 않을 수 있다. 연산이 종료될 때, 유보된 필드들은 0들로 저장되거나 변경되지 않은 상태로 유지될 수 있다. 
[0111] 또한, 상기 필드들 중 일부는 다른 함수들(예를 들어, DFLTCC-CMPR 또는 DFLTCC-XPND)에 의해 사용되며, 따라서 이러한 함수들과 관련된 실시 예들은, 또한, 이들 필드들의 설명과 함께 기술될 수도 있다. 
[0112] 일 예에서, DFLTCC-GDHT 함수를 위한 파라미터 블록(360)은 다음 필드들을 포함한다:  
[0113] 파라미터 블럭 버전 번호(PBVN)(362): 파라미터 블록의0-1 바이트 파라미터 블록의 버전과 크기를 명시한다. PBVN의 비트 0-11은 유보되고 0들을 포함해야 한다; 그렇지 않으면 프로그램이 향후 호환되지 않을 수 있다. PBVN의 비트 12-15는 파라미터 블록의 포맷을 명시하는 부호 없는 이진 정수를 포함한다. DFLTCC-QAF 함수는 이용 가능한 파라미터 블록 포맷을 표시하기 위한 메커니즘을 제공한다. 명시된 파라미터 블록의 포맷이 모델에 의해서 지원되지 않을 때, 일반 오퍼랜드 데이터 예외가 인지된다. PBVN은 프로그램에 의해 명시되고 상기 명령의 실행 중에는 수정되지 않는다. 
[0114] 모델 버전 번호(MVN)(363): 파라미터 블록 바이트 2는 상기 명령을 실행했던 모델을 식별하는 부호 이진 정수이다. 프로그램은 MVN을 초기화하는 데 필요하지 않다. MVN은 상기 명령의 실행 중에 갱신된다. MVN에 저장된 값은 모델에 따라 다르다(model-dependent). 
[0115] 동적-후프만 테이블(DHT) 생성 제어(DHTGC)(364): 파라미터 블록의 바이트 17의 비트 2는 동적-후프만 테이블(DHT)을 생성하는데 적용된다. DHT는 리터럴 바이트들(literal bytes), 중복 스트링 길이들, 엔드-오브-블록(EOB) 심볼, 및 중복 스트링 포인터 거리들을 나타내는 심볼들에 대해 후프만 코드들을 명시한다. 특정 심볼에 대한 후프만 코드의 값은, 데이터의 압축 안된 포맷에서, 심볼이 나타내는, 엔터티(entity)에 대한 발생들의 카운트(the count of occurrences)의 함수이다. 심볼에 대한 카운트가 0일 때, 상기 심볼에 대한 DHT의 후프만 코드는 존재하지 않는다. DHTGC는, 한 예에서, 0과 같은 카운트들이 다음과 같이 취급될 것임을 명시한다.  
Figure pct00002
[0116] 리터럴 바이트들, EOB 심볼, 중복 스트링 길이들, 및 중복 스트링 포인터 거리들의 모든 가능한 값에 대한 후프만 코드를 명시하는 DHT를, 범용 DHT(a universal DHT)라 부른다. 데이터의 압축 안된 형태에서 발생하지 않는 리터럴 바이트들, 중복 스트링 길이들, 또는 중복 스트링 포인터 거리들의 값들에 대해 후프만 코드를 명시하지 않는 DHT를 비-범용 DHT(a non-universal DHT )라 한다.
[0117] DHTGC의 모든 값들에 대해, 최종 DHT는, 디플레이트 표준에 의해 정의된, 모든 가능한 중복 스트링 길이들 및 포인터 거리들에 대한 후프만 코드들을 명시한다. 따라서, DHT의 최종 압축된 포맷의 HLIT(후프만 리터럴) 및 HDIST(후프만 거리들) 서브 엘리멘트들은, 아래에서 추가로 설명되며, 각각은, 예를 들어, 29의 값을 포함한다. 
[0118] DHTGC는 DFLTCC-GDHT 함수가 명시될 때 연산에 대한 입력이다. DHTGC는 DFLTCC-CMPR 또는 DFLTCC-XPND 함수가 명시될 때는 연산에 적용되지 않는다. DHTGC는, 일 실시 예에서, 상기 명령의 실행 동안 수정되지 않는다.  
[0119] 연산 종료 보조 코드(Operation Ending Supplemental Code: OESC)(365): 파라미터 블록의 바이트19는 프로그램에 보고되는 조건에 대한 추가 정보를 제공하는 부호 없는 이진 정수이다. 이 필드는 다수의 함수들에 의해 사용되기 때문에, 일부 조건들은 다른 함수들에 의해서 사용되는 파라미터 블록(예를 들어, DFLTCC-CMPR 및 DFLTCC-XPND 함수들에 의해서 사용되는 도 3l의 파라미터 블록)의 필드들을 참조한다. 보고되는 조건이 일반 오퍼랜드 데이터 예외일 때, 파라미터 블록의 OESC 필드가 갱신되더라도 연산이 억제된 것으로 간주되며, 이 경우가, 한 예에서, 다음과 같이 정의된다.
Figure pct00003
Figure pct00004
Figure pct00005
[0120] 일반 오퍼랜드 데이터 예외의 보고 없이 연산이 종료될 때, 0들이 OESC 필드에 저장된다. 
[0121] 0이 아닌 보조 코드들(supplemental codes)에 대한 지원은 모델에 따라 다르다. 여러 조건들이 존재할 때, 만일 있다면, 어떤 코드가 OESC 필드에서 보고되는지는 모델에 따라 다르다. 
[0122] 압축 동적-후프만 테이블 길이(CDHTL)(366): 파라미터 블록의 바이트 56의 비트 4로 시작하여 바이트 57의 비트7에 걸친, 12 비트들은, 파라미터 블록의 CDHT 필드(예를 들어, CDHT367)에 있는 DHT의 압축된 포맷의, 비트 카운트로서, 길이를 명시하는 부호 없는 이진 정수를 포함한다.  
[0123] CDHTL은 DFLTCC-GDHT 함수가 명시되었을 때 연산으로부터의 출력이다. 
[0124] CDHTL은 DFLTCC-CMPR 함수가 명시되고, 후프만 테이블 유형(예를 들어, 도 3l의 HTT(376))이 1일 때, 연산으로의 입력이다. CDHTL이 CDHT에 대하여 적절한 길이를 명시하지 않을 때, 일반 오퍼랜드 데이터 예외가 인지된다. CDHTL은 DFLTCC-CMPR 함수가 명시될 때 수정되지는 않는다.  
[0125] DFLTCC-XPND 함수가 명시되고 BTYPE이 10 이진수인 블록의 일부만을 디코드 한 후에 연산이 종료될 때, 상기 블록 내의 DHT의 압축된 표현의 길이는 이 필드에 저장된다. DFLTCC-XPND함수가 명시되고 연산이 블록 경계에서 종료되거나 또는 BTYPE이 00 또는 01 이진수인 블록의 일부만 디코드 한 후 종료될 때, 0들이 이 필드에 저장된다. 압축 해제 연산이 BTYPE이 10 이진수인 블록 내에서 재개될 때(즉, CF(도 3l의 계속 플래그 373)가 1이고 IFS(불완전 함수 상태 383)가 C 또는 D 16진수와 같을 때, 아래에 설명됨), 이 필드는 상기 연산에 대한 입력이 된다. 
[0126] 압축 동적-후프만 테이블(CDHT)(367): 파라미터 블록의 바이트 64-351은 동적-후프만 테이블(DHT)의 압축 포맷을 포함한다. 
[0127] DHT는 2 세트의 엘리먼트들을 나타내기 위한 후프만 코드(비트 시퀀스들)를 명시한다. 한 세트의 엘리멘트들에는 리터럴 바이트들, EOB 심볼, 및 중복 스트링 길이들이 포함된다. 다른 세트의 엘리멘트들에는 중복 스트링 포인터 거리들이 포함된다. DHT의 압축된 표현은 코드 길이들의 세트를 정의하고 각 세트의 각 엘리멘트에 대한 코드 길이(CL)를 명시한다. 연산 중에 참조될 것으로 예상되는 엘리멘트에 대한 후프만 코드는 해당 엘리멘트에 대해 명시된 CL과 동일 명시된 CL을 갖는 동일한 세트의 엘리멘트들의 수로부터 파생된다. 구체적으로, DHT의 압축된 표현은, 예로서, 다음을 포함한다:
● 리터럴 바이트들, EOB 심볼 및 중복 스트링 길이들을 나타내는 후프만 코드들의 수를 명시하기 위한 HLIT 필드.
● 중복 스트링 포인터 거리들을 나타내는 후프만 코드들의 수를 명시하기 위한 HDIST 필드.
● 코드 길이들을 나타내는 후프만 코드들의 수를 명시하기 위한 HCLEN(후프만 코드 길이들) 필드. 
● 각각, 예를 들어, 압축된 DHT에 대해 정의된 19개의 코드 길이들의 각각에 대한 비트 길이를 명시하는 코드들의 시퀀스.
● 리터럴 바이트들, EOB 심볼, 및 중복 스트링 길이들로 구성된 세트의 엘리멘트들의 각각에 대한 코드 길이를 명시하는 코드들의 시퀀스.
● 중복 스트링 포인터 거리들로 구성된 세트의 엘리멘트들의 각각에 대한 코드 길이를 명시하는 코드들의 시퀀스.             
 [0128] DHT의 압축된 표현의 더 자세한 사항들은 블록 유형 10 이진수로 압축된 데이터 블록에 대한 설명을 참조하여 설명한다. 
[0129] 일 실시 예에서, DHT의 압축된 표현은 CDHT 필드에서 좌측에 정렬된다 (justified). 즉, 바이트 64의 최우측 비트는 DHT의 압축된 표현의 HLIT 서브-엘리멘트의 최하위 비트(the least-significant bit)를 포함한다. 
[0130] DHT의 압축된 표현은 DFLTCC-GDHT 함수가 명시될 때, 연산으로부터의 출력이다. 
[0131] DHT의 압축된 표현은 DFLTCC-CMPR 함수가 명시되고, HTT가, 후술하는 바와 같이, 1일 때, 연산에 대한 입력이다. CDHT 필드는 DFLTCC-CMPR 함수에 의해 수정되지 않는다. 
[0132] DFLTCC-XPND 함수가 명시되고 BTYPE이 10 이진수인 블록의 일부만을 디코드 한 후에 연산이 종료될 때, 상기 블록 내의 DHT의 압축된 표현은 이 필드에 저장된다. DFLTCC-XPND 함수가 명시되고 연산이 블록 경계에서 종료되거나 또는 BTYPE이 00 혹은 01 이진수인 블록의 일부만 디코드 한 후 종료될 때, 0들이 이 필드에 저장된다. 압축 해제 연산이 BTYPE 이10 이진수인 블록 내에서 재개될 때(즉, CF가 1과 같고 IFS가 C 또는 D 16진수와 같을 때), 이 필드는 상기 연산에 대한 입력이다. 
[0133]CDHT가 수정될 때, DHT의 압축된 표현을 나타내기 위해 사용되지 않는 필드의 비트들은 0들로서 저장된다. 
[0134] 다양한 필드들이 파라미터 블록(360)에 대해 위에서 상술되었지만, 추가의, 더 적은 및/또는 다른 필드들이 다른 실시 예들에서 포함될 수 있다. 
[0135] DHT 생성의 실시 예들은 파라미터 블록의 동적-후프만 테이블 생성 제어부(DHTGC) 필드(364)를 사용하여 프로그램에 의해서 머신에 대해 명시된다. 소스는 압축되지 않은 데이터를 포함하고 연산을 완료한 후, 생성된 결과는 DFLTCC-CMPR 함수로 명시되어 동일한 소스를 압축하도록 되어 있다. 
[0136] 일 실시 예에서, 현재 연산을 처리하는 동안은 이전의 연산들로부터 참조할 히스토리가 없다. 
[0137] 일반 레지스터 R2 + 1의 컨텐츠가, 예를 들어, 32K-바이트들보다 더 큰 길이를 명시할 때, 일 예에서, 다음이 적용된다:
● 제2오퍼랜드의 제1 32K-바이트만 DHT를 생성하는 데 사용된다.
● 액세스 예외가 제2오퍼랜드의 처음 32K-바이트를 초과하는 위치들에 대해서는 인지되지 않는다. 
[0138] 일반 레지스터 R2 + 1의 컨텐츠가 0과 같은 길이를 명시할 때, 명세 예외가 인지되고, 제2오퍼랜드는 액세스되지 않는다.  
[0139] 최종 압축된 DHT(resulting compressed DHT)는 엔드-오브-블록(EOB) 심볼을 나타내는 후프만 코드를 포함한다.
[0140] 생성된 DHT의 압축된 포맷은 파라미터 블록의 압축된 동적-후프만 테이블(CDHT) 필드(367)에 저장된다. 생성된 DHT의 압축된 포맷의 길이는 파라미터 블록의 CDHTL 필드(366)에 저장된다. 
[0141] 연산은 파라미터 블록의 모델 버전 번호 필드(363)에 모델 식별(a model identification)을 저장하는 단계를 포함한다. 
[0142] 일반 오퍼랜드 데이터 예외를 인지함이 없이 연산이 종료될 때, 0들이 파라미터 블록의 연산 종료 보조 코드(operation ending supplemental code: OESC) 필드(365)에 저장된다. 
[0143] DFLTCC-GDHT 함수의 실행이 완료된 때, 조건 코드 0이 세트 된다; 조건 코드 1, 2 및 3은 DFLTCC-GDHT 함수에 적용될 수 없다. 
[0144] 일반 레지스터 R2 및 R2 + 1의 컨텐츠는 상기 연산에 의해 변경되지 않는다.   
[0145] 일반 레지스터 R1, R1 + 1 및 R3의 컨텐츠는DFLTCC-GDHT 함수가 명시될 때 무시된다. 
[0146] 적용 가능한 때, 제2 오퍼랜드 위치 및 파라미터 블록에 대해 PER 영 주소 검출 이벤트(PER zero address detection event)가 인지된다. 
[0147] 함수 코드 2: DFLTCC-CMPR(압축) 
[0148] DFLTCC-CMPR 함수가 명시될 때, 압축 연산이 수행된다. 상기 연산은 제2 오퍼랜드 위치로부터의 데이터를, 제1 오퍼랜드 위치에 저장되는, 압축된 데이터 심볼들로 인코드 하는 것을 포함한다. 
[0149] 일 예에서, DFLTCC-CMPR 함수는 파라미터 블록을 사용하는데, 이에 관한 일 예는 도 3l을 참조하여 기술된다. 일부 필드들은 파라미터 블록(360)과 관련하여 위에서 설명되었으며, 따라서 동일한 참조 번호로 아래에 나열되며 더 이상 상세하게 설명되지 않는다. 
[0150] 일 실시 예에서, 파라미터 블록(370)은 다음을 포함한다:
[0151] 파라미터 블록 버전 번호(PBVN)(362).
[0152] 모델 버전 번호(MVN)(363).
[0153] 계속 플래그(CF)(373): 파라미터 블록의 비트 63 은, 1일 때, 연산이 부분적으로 완료하고, 계속 상태 버퍼(예를 들어, 계속 상태 버퍼 필드(392)에서)의 컨텐츠는 연산을 다시 시작하는데 사용될 수 있음을 표시한다. 프로그램은 연산을 재개할 목적으로 명령이 다시 실행해야 하는 경우 계속 플래그(CF)를 0으로 초기화하고 CF를 수정하지 않는다; 그렇지 않으면 결과들은 예측 불가능 하다. 
[0154] 신규 태스크(NT)(374): 파라미터 블록의 바이트 16의 비트 0은, 1일 때, 연산이 압축된 데이터 세트의 시작에 적용됨을 표시한다. 따라서 이전 연산으로부터의 히스토리 및 체크 값이 현재 연산에는 적용되지 않는다. NT가 연산의 시작 시에 1이고, 연산이 부분 완료 후 종료될 때, 0이 NT 필드에 저장된다. NT가 0일 때, 이전 연산으로부터의 히스토리 및 체크 값이 현재 연산에 적용된다. 
[0155] 체크 값 유형(CVT)(375): 파라미터 블록의 바이트 16의 비트 2는 파라미터 블록의 체크 값 필드(예를 들면, 필드(387))에 포함되는 체크 값의 유형을 명시한다. CVT가 0일 때, 체크 값 유형은, 예를 들어, 32비트 사이클릭-리던던시-체크(a 32-bit cyclic-redundancy-check: CRC-32)이다. CVT가 1일 때, 체크 값 유형은, 예를 들어, 32비트 아덜러 체크섬(a 32-bit Adler checksum: Adler-32)이다. CVT 비트는 명령 실행 중에 수정되지 않는다.  
[0156] 후프만 테이블 유형(HTT)(376): 파라미터 블록의 바이트 16의 비트 4는, 0일 때, 디플레이트 표준에 의해서 정의된, 고정-후프만 코드들(FHT)을 포함하는 테이블이, 압축 연산 중에 사용됨을 명시한다. HTT가 1일 때, 파라미터 블록의 CDHT 필드에 명시된, DHT(Dynamic-Huffman Codes)를 포함하는 테이블이 압축 연산 중에 사용된다. HTT는 압축 해제 연산에는 적용되지 않는다. HTT 비트는 명령 실행 중에는 수정되지 않는다. 
[0157] 블록 계속 플래그(BCF)(377): 파라미터 블록의 16 바이트의 비트 5는 DFLTCC-CMPR 함수가 명시될 때 적용된다. 0일 때, 3비트 블록 헤더(a 3-bit block header), 및 적용 가능할 때, 파라미터 블록의 CDHT 필드(예를 들어, 필드(367))에 명시된, 동적-후프만 테이블의 압축된 포맷은, 모든 압축된 데이터 엘리멘트들이 저장되기 전에 제1오퍼랜드 위치에 저장된다. 1일 때, 블록 헤더(a block header)나 DHT의 압축된 포맷 어느 것도 제1오퍼랜드 위치에 저장되지 않는다. NT가 1일 때, BCF는 0과 같다고 취급된다. BCF 비트는 명령 실행 중에는 수정되지 않는다. 
[0158] 블록 클로징 제어(BCC)(378): 파라미터 블록의 16 바이트의 비트 6은 DFLTCC-CMPR 함수가 명시될 때 적용한다. 1일 때, 모든 압축된 데이터 심볼을 저장한 후 엔드-오브-블록(End-of-Block: EOB) 심볼이 제1오퍼랜드 위치에 저장된다. HTT가 FHT를 사용하는 것을 명시할 때, 후프만 코드 0000000 이진수(이는 리터럴 바이트들, EOB 심볼, 및 중복 스트링 길이들에 대한 코드를 명시하는 테이블에서 256의 중간 정수 표현에 대응함)가, 일 예로서, EOB 심볼에 대해 사용된다. HTT가 DHT를 사용하는 것을 명시할 때, EOB 심볼에 대한 후프만 코드는 DHT에 명시된다. BCC 비트가 0일 때, EOB 심볼은 제1 오퍼랜드 위치에 저장되지 않는다. BCC 비트는 명령 실행 중에 수정되지 않는다. 
[0159] 블록 헤더 파이널(BHF)(379): 파라미터 블록의 16 바이트의 비트 7은 DFLTCC-CMPR 함수가 명시되고 BCF(377)이 0이거나 또는 NT(374)가 1일 때 적용된다; 그렇지 않으면 BHF는 적용되지 않는다. 적용 가능하고 1일 때, 블록 헤더(BFINAL)의 제1비트는 블록 헤더를 제1오퍼랜드 위치에 저장하기 전에 1로 세트 된다. 적용 가능하고 0일 때, 블록 헤더(BFINAL)의 제1비트는 블록 헤더를 제1 오퍼랜드 위치에 저장하기 전에 0으로 세트 된다. BHF 비트는 명령 실행 중에 수정되지 않는다.
[0160] DHT 생성 제어(DHTGC)(364): DHTGC는 DFLTCC-CMPR 함수가 명시될 때 연산에 적용되지 않는다. DHTGC는 명령 실행 중에 수정되지 않는다. 
[0161] 서브-바이트 경계(SBB)(381): 파라미터 블록의 바이트18의 비트 5-7은 압축된 데이터 스트림의 바이트 내에서 처리된 비트들과 처리되지 않은 비트들 사이의 경계를 명시하는 부호 없는 이진 정수를 포함한다. 참조된 스트림의 바이트는, 연산이 종료될 때, 최우측 바이트를 의미하는, 참조된 마지막 바이트이고, 연산이 시작되거나 재개될 때, 최좌측 바이트를 의미하는, 참조될 제1 바이트이다. DFLTCC-CMPR 함수가 명시될 때, SBB는 제1오퍼랜드 주소에 의해서 지정된 바이트에 적용된다. DFLTCC-XPND 함수가 명시될 때, SBB는 제2오퍼랜드 주소에 의해서 지정된 바이트에 적용된다. SBB는 처리된 최우측 비트들의 수를 명시한다. SBB는 연산의 입력이고 연산의 출력이다. 
[0162] SBB가 011 이진수의 값을 가질 때 압축된 데이터 스트림의 일 예가 도 4에 도시된다. 연산 종료 후 처리된 데이터가 (400)에 도시되고; 연산 시작 전에 처리될 데이터는 (402)에 도시된다. 
[0163] 또한, 도 5a-5c는 SBB가 DFLTCC-CMPR 함수에 어떻게 적용되는지를 보여주는 예를 제공한다. 예를 들어, DFLTCC-CMPR 함수를 실행하기 전과 후에 SBB가 어떻게 적용되는지에 대한 일 예가 도 5a에 도시되어 있다. 다른 예들은 도 5b-5c에 도시되어 있다. NT(374)가 1일 때, SBB(381)은 000 이진수와 같은 것으로 처리된다. 
[0164] 도 3l로 돌아가서, 파라미터 블록(370)의 추가 필드를 설명한다: 
[0165] 연산 종료 보조 코드(OESC)(365).
[0166] 불완전 함수 상태(IFS)(383): 파라미터 블록의 바이트21의 비트 4-7은 특정 연산들이 종료될 때 상태 정보를 포함한다. 압축 해제 연산이 종료될 때, IFS는, 일 예에서, 제2오퍼랜드에 대한 정보를 다음과 같이 전달한다: 
Figure pct00006
[0167] 일 실시 예에서, 압축 해제 연산은 0000 이진수와 같은 IFS로 종료될 수 있고 정상 완료를 만족할 수 없다. 그러한 경우들에서, 조건 코드 1 또는 3이 세트 된 상태로 연산이 종료된다. 
[0168] 압축 연산이 종료될 때, IFS 필드가 정의되지 않지만, 수정될 수 있다. 
[0169] IFS는 연산에 대한 입력이 아니다. 
[0170] 불완전 함수 길이(IFL)(384): 파라미터 블록의 바이트22-23은 특정 연산이 종료될 때 길이 정보를 포함한다. 압축 해제 연산이 BTYPE이 00 이진수와 같은 블록의 전체가 아닌 일부를 디코드 한 후 종료될 때, IFL은, 아직 처리되지 않은, 제2 오퍼랜드 내의 블록의 바이트들의 수를 명시하는 부호 없는 이진 정수를 포함한다. 바이트 22-23은, 예를 들어, 리틀 엔디안 바이트 순서로 되는, BTYPE가 00 이진수와 같은 블록의 LEN 필드와는 달리, 예를 들어, 빅 엔디안 바이트 순서로 IFL을 포함한다.  
[0171] 압축 해제 연산이 BTYPE이 00 이진수와 같고 BFINAL 이 1과 같은 완전한 블록을 디코드 한 후 종료될 때, 0들이 IFL 필드에 저장된다. BTYPE이 0이 아닌 블록의 전부가 아닌, 일부를 디코드 한 후 종료되거나, 또는 블록 경계에서 종료될 때, IFL 필드는 정의되지 않지만, 수정될 수 있다. 
[0172] 압축 연산이 종료될 때, IFL 필드가 정의되지 않지만, 수정될 수 있다. 
[0173] IFL은 연산에 대한 입력은 아니다.  
[0174] 히스토리 길이(HL)(385): 파라미터 블록의 바이트 44-45는 연산 중에 참조 될 수 있는 히스토리 버퍼 내의 히스토리의 바이트들의 수를 명시하는 부호 없는 이진 정수를 포함한다. HL은 인라인 및 서큘러 히스토리 버퍼들에 적용된다. 신규 작업(NT)이 1과 같을 때, 연산의 시작에 히스토리가 적용되지 않고 히스토리 길이는 연산에 대한 입력으로서 0으로 취급된다. 
[0175] 일반 오퍼랜드 데이터 예외는 히스토리 길이가, 예를 들어, 32,768 보다 크고 NT가 0과 같을 때 인지된다. 
[0176] 히스토리 길이는 압축 및 압축 해제 연산들 동안 수정된다. 원래 HL과 연산 동안 처리된 압축되지 않은 데이터 바이트들의 수의 합이, 예를 들어, 32,768보다 작거나 같을 때, 갱신된 HL은 원래 HL과 연산 동안 처리된 압축되지 않은 데이터 바이트들의 수의 합과 같다; 그렇지 않으면 갱신된 HL은 32,768의 값과 같다. 
[0177] 히스토리 오프셋(HO)(386): 파라미터 블록의, 바이트46의 비트 1부터 시작하여 바이트 47의 비트 7에 걸치는, 15비트는, 히스토리 버퍼가 서큘러일 때, 제3 오퍼랜드 내의 오프셋을 명시하는 부호 없는 이진 정수를 포함한다. R3의 컨텐츠와 히스토리 오프셋의 합은 서큘러 히스토리 버퍼 내에서, 상기 버퍼에서 압축되지 않은 데이터의 최근에 가장 적게 처리된 바이트인, 히스토리의 제1 바이트의 위치를 지정한다. 히스토리 버퍼 유형이 서큘러 일 때, 히스토리 오프셋은 연산에 대한 입력이고 연산의 종료 시에 갱신된다. 원래 HL과 연산 동안 처리된 압축 안된 데이터 바이트들의 수의 합이, 예를 들어, 32,768보다 작거나 같을 때, 갱신된 HO는 원래 HO와 같게 된다; 그렇지 않으면 갱신된 HO는 원래 HO, 원래 HL, 및 연산 동안 처리된 압축 안된 데이터 바이트들의 수의 합인, 모듈로(modulo) 32,768과 같다. 
[0178] 히스토리 버퍼 유형이 인라인(in-line) 일 때, 파라미터 블록의 HO 필드는 정의되지 않지만, 수정될 수 있다. 
[0179] 체크 값(387): 파라미터 블록의 바이트 48-51은 체크 값을 포함한다. 연산의 일부로서 체크 값이 생성된다. 체크 값은 압축되지 않은 데이터 오퍼랜드에 적용된다. 즉, 체크 값은 DFLTCC-CMPR 함수에 대한 제2오퍼랜드에 적용되고 DFLTCC-XPND 함수에 대한 제1오퍼랜드에 적용된다. CVT 비트(375)가 0일 때, 예를 들어, 32-비트 사이클릭-리던던시-체크 체크 값(CRC-32)이 생성된다. CVT 비트가 1일 때, 예를 들어, 32-비트 아들러 체크섬 체크 값(Adler-32)이 생성된다. 
[0180] 체크 값을 생성하는 것에 대한 입력은, 예를 들어, 4바이트 베이스(base) 및 연산 중에 처리되는 압축되지 않은 데이터이다. 베이스 입력은, 압축된 데이터 블록의 완전한 세트를 처리하기 위해 DFLTCC 명령이 실행되는 횟수에 관계없이, 압축된 데이터 블록 세트에 대한 단일의 일관된 체크 값을 계산하기 위한 수단을 제공한다. NT 비트가 0일 때, 체크 값 필드의 원래 값은 체크 값을 생성할 때 베이스 입력을 위해 사용된다.  
[0181] 아들러-32 체크 값이 생성될 때, 일 예에서, 다음이 적용된다:
● NT 비트가 1일 때, 1의 값이 4-바이트 베이스 입력을 위해 사용된다.
● 아들러-32 체크 값 생성에서 정의된 합들은 모듈로 65,521이다.
● 결과는 빅엔디안 바이트 순서로 체크 값 필드에 저장된다. 즉, 체크 값의 최상위 바이트는 바이트 48에 위치하고 체크 값의 최하위 바이트는 바이트 51에 위치한다. 
[0182] CRC-32 체크 값이 생성될 때, 일 실시 예에서, 다음이 적용된다:
● NT 비트가 1일 때, 0의 값은 4바이트 베이스 입력을 위해 사용된다.
● CRC-32 체크 값을 생성할 때 제수(divisor)로 사용되는 다항식은 x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x1 + x0 이며, 이는16진수로 104C11DB7로 표시된다. 이 표현에서 최좌측 비트는 최상위 비트에 대응된다.
● 체크 값을 생성하는 첫 단계와 마지막 단계는, 결과를 저장하기 전에, 각각, 베이스 입력의 1의 보수를 계산하는 것과 결과의 1의 보수를 계산하는 것이다. 
● 결과는 리틀 엔디안 바이트 순서로 체크 값 필드에 저장된다. 즉, 체크 값의 최하위 바이트는 바이트 48에 위치하고 체크 값의 최상위 바이트는 바이트 51에 위치한다. 
[0183] 일 실시 예에서, 체크 값은 연산이 조건 코드 0 세트로 종료될 때 프로그램에만 의미가 있을 뿐이다; 그렇지 않으면 체크 값은 중간 결과일 뿐이며 연산을 재개하는 데에만 의미가 있을 뿐이다. DFLTCC-CMPR 함수가 명시되고 연산이 조건 코드 1, 2 또는 3 세트로 종료될 때, 제2오퍼랜드 주소에 의해서 지정된 바이트의 왼쪽에 있는 일부 바이트들은 최종 체크 값의 계산에 포함되지 않을 수도 있다. DFLTCC-XPND 함수가 명시되고 조건 코드 1, 2 또는 3세트로 연산이 종료될 때, 제1오퍼랜드 주소에 의해서 지정된 바이트의 오른쪽에 아직 저장되지 않은 일부 결과 바이트는 최종 체크 값의 계산에 이미 포함되어 있을 수 있다. 
[0184] 엔드-오브-블록 심볼(EOBS)(388): 파라미터 블록의, 바이트 52의 비트0에서 시작하여, 바이트 53의 비트6에 걸친, 열 다섯 비트들은 엔드-오브-블록(EOB) 심볼을 포함한다. 파라미터 블록의 엔드-오브-블록 길이(end-of-block length: EOBL) 필드(389)는 EOBS 필드 내 EOB 심볼의 길이를 명시한다. EOB 심볼은 EOBS 필드에서 왼쪽에 정렬된다(left justified). EOB 심볼에 의해서 점유되지 않는 EOBS 필드의 비트들은 0들로 저장된다. EOBS 필드는 어느 유형의 후프만 테이블이 적용되는지에 관계없이 데이터를 압축할 때 연산의 출력이 된다. EOBS 필드는 연산에 대한 입력으로는 사용되지 않는다. 
[0185] 바이트 52의 비트0은 EOB 심볼의 최상위 비트를 포함한다. EOB 심볼의 길이가 7비트들일 때, 바이트 52의 비트 6은 EOB 심볼의 최하위 비트를 포함한다. EOB 심볼의 길이가 15비트들일 때, 바이트 53의 비트 6은 EOB 심볼의 최하위 비트를 포함한다. 
[0186] FHT를 사용하는 블록들에 있어서, EOB 심볼은, 디플레이트 표준에 의해 정의된 바와 같이, 0000000이진수이다. DHT를 사용하는 블록들에 있어서, EOB 심볼은 DHT에 의해 정의된다. EOB 심볼은 프로그램이 블록을 닫는 능력을 제공하기 위해 전달된다. 
[0187] EOBS 필드는 DFLTCC-XPND함수가 명시되지만 수정될 수 있을 때 정의되지 않는다. 
[0188] 엔드-오브-블록 길이(EOBL)(389): 파라미터 블록의 바이트 54의 비트들 0-3은 파라미터 블록의 EOBS 필드(388) 내에 엔드-오브-블록(EOB) 심볼의 길이를 명시하는 부호 없는 이진 정수를 포함한다. 길이는 EOBS 필드에서 EOB 심볼이 차지하는 비트들의 수를 명시한다. EOBL 필드는, 어느 유형의 후프만 테이블이 적용되는지에 관계없이, 데이터를 압축할 때 연산의 출력이다. EOBL 필드는 연산에 대한 입력으로는 사용되지 않는다. 
[0189] EOBL 필드는 DFLTCC-XPND 함수가 명시되지만 수정될 수 있을 때 정의되지 않는다. 
[0190]압축된 동적-후프만 테이블 길이(CDHTL)(366).
[0191] 압축된 동적-후프만 테이블(CDHT)(367): DHT의 압축된 표현은 DFLTCC-CMPR 함수가 명시되고 HTT가 1일 때 연산에 대한 입력이다. CDHT 필드는 DFLTCC-CMPR 함수에 의해 수정되지 않는다. 
[0192] 계속 상태 버퍼(CSB)(392): 조건들이 1의 값을 CF 필드(373)에 저장되게 할 때, 내부 상태 데이터(internal state data)는 파라미터 블록의 바이트들384-1535에 저장된다; 그렇지 않으면 파라미터 블록의 바이트들 384-1535는 정의되지 않고 수정될 수 있다. 저장된 내부 상태 데이터는 모델에 따라 다르며(model-dependent) 이후에 연산을 재개하기 위해 사용할 수 있다. 계속 상태 버퍼가, 예를 들어, 모두 0들을 포함하도록 프로그램이 계속 상태 버퍼를 초기화하는 것이 예상되지만, 요구되는 것은 아니다. 명령이 0이 아닌 조건 코드 세트로 종료된 후 연산을 재개할 목적으로 명령을 다시 실행하기 전에 프로그램은 계속 상태 버퍼를 수정해서는 안된다; 그렇지 않으면 결과들은 예측 불가능하게 된다(unpredictable). 
[0193] 다양한 필드들이 파라미터 블록(370)에 관하여 위에서 기술되었지만, 추가의, 더 적은 및/또는 다른 필드들이 다른 실시 예들에 포함될 수 있다. 
[0194] 압축 연산의 일 예가 데이터를 압축하는 것에 관하여 아래에서 기술된다.  
[0195] DFLTCC-CCMPR 함수에 대한 정상 완료는 전체 제2오퍼랜드가 압축되어 제1오퍼랜드 위치에 저장될 때 일어난다. 연산이 정상 완료로 인해 종료될 때, 일 예에서, 다음이 발생한다:
● 모델-디펜던트 값이 파라미터 블록의 모델 버전 번호(MVN) 필드(363)에 저장된다.
● 파라미터 블록의 계속 플래그(CF) 필드(373)가 0으로 세트 된다.
● 파라미터 블록의 서브-바이트 경계(SBB) 필드(381)가 갱신된다.
● 파라미터 블록의 엔드-오브-블록 길이(EOBL)(389) 및 엔드-오브-블록 심볼(EOBS)(388) 필드들이 갱신된다.
● 파라미터 블록의 히스토리 길이(HL) 필드(385)가 갱신된다.
● 파라미터 블록의 히스토리 오프셋(HO) 필드(386)가, 적용 가능할 때, 갱신된다.
● 파라미터 블록의 연산 종료 보조 코드(OESC) 필드(365)가 0들로 세트 된다.
● 파라미터 블록의 체크 값 필드(387)이 갱신된다. 
● 일반 레지스터 R1의 주소는 처리 비트 0을 포함했던 제1오퍼랜드의 처리된 바이트들의 수만큼 증가되고 일반 레지스터 R1 + 1의 길이는 같은 수만큼 감소된다. 처리 비트 0을 포함했던 제1오퍼랜드의 처리된 바이트들의 수는 처리된 출력 비트들의 수와 SBB의 원래 값의 합인 피제수(dividend)와 8의 값인 제수(divisor)를 갖는 정수 나눗셈의 결과인 정수 몫이다.
● 일반 레지스터 R2의 주소는 처리된 소스 바이트들의 수만큼 증가되고, 일반 레지스터 R2 + 1의 길이는 같은 수만큼 감소된다.
● 조건 코드 0이 세트 된다. 
[0196] 주소들 및 길이들의 형성 및 갱신하는 것은 주소지정 모드에 따라 다르다.  
[0197] 정상 완료가 발생할 때, 파라미터 블록의 CSB 필드(392)는 연산이 종료된 후에는 정의되지 않는다. 
[0198] CPU-결정된 수의 바이트들이 처리되었을 때, 연산은 종료되고, 일 예에서, 다음이 발생한다: 
● 파라미터 블록의 계속 플래그(CF) 비트(373)은 1로 세트 된다. 
● 파라미터 블록의 계속 상태 버퍼(CSB) 필드(392)가 갱신된다.
● 파라미터 블록의 서브-바이트 경계(SBB) 필드(381)이 갱신된다. 
● 파라미터 블록의 히스토리 길이(HL) 필드(385)가 갱신된다. 
● 파라미터 블록의 히스토리 오프셋(HO) 필드(386)이, 적용 가능할 때, 갱신된다. 
● 파라미터 블록의 체크 값 필드(387)이 갱신된다. 
● 모델-디펜던트 값은 파라미터 블록의 모델 버전 번호(MVN) 필드(363)에 저장된다.
● 파라미터 블록의 엔드-오브-블록 길이(EOBL)(389) 및 엔드-오브-블록 심볼(EOBS)(388) 필드가 갱신된다.
● 파라미터 블록의 연산 종료 보조 코드(OESC) 필드(365)는 0으로 세트 된다.
● 일반 레지스터 R1의 주소는 처리 비트 0을 포함했던 제1오퍼랜드의 처리된 바이트들의 수만큼 증가되고 일반 레지스터 R1 + 1의 길이는 같은 수만큼 감소된다. 처리 비트 0을 포함했던 제1오퍼랜드의 처리된 바이트들의 수는 처리된 출력 비트들의 수와 SBB의 원래 값의 합인 피제수(dividend)와 8의 값인 제수(divisor)를 갖는 정수 나눗셈의 결과인 정수 몫이다.
● 일반 레지스터 R2의 주소는 처리된 소스 바이트들의 수만큼 증가되고 일반 레지스터 R2 + 1의 길이는 같은 수만큼 감소된다. 
● 조건 코드 3이 세트 된다. 
[0199] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다. 
[0200] CPU-결정된 수의 바이트들은 모델에 따라 다르고 명령이 실행될 때마다 그 수가 다를 수 있다(a different number). 
[0201] 조건 코드 3 세트로 명령이 종료된 이후, 프로그램은 명령에 대한 입력 또는 출력 사양을 수정하지 않고 연산을 재개하기 위해 명령을 다시 실행하려고 다시 분기할 것으로 예상된다. 
[0202] 특정 상황들에서, 조건 코드 3 세트로 명령을 종료함에도 불구하고, 파라미터 블록 및 일반 레지스터들은 갱신되지 않는다. 이들 상황들은 CPU가 디플레이트 변환 호출 명령을 실행하는 동안 정지 연산(a quiescing operation) 또는 CPU 재시도(retry)를 수행할 때 발생할 수 있다. 이들 경우들에서, CPU-결정된 처리된 바이트들의 수는 0이고, 데이터는 제1오퍼랜드 위치에 저장되었을 수 있고, 데이터는, 적용 가능 할 때, 제3 오퍼랜드 위치에 저장되었을 수 있으며, 대응 변경 비트들은 세트 되었다. 
[0203] 제1 오퍼랜드 길이는, 일 예에서, 다음 조건 중 하나가 적용될 때 일 실시 예에서, 연산을 완료하기에 불충분하다: 
● 일반 레지스터 R1 + 1의 컨텐츠에 의해서 명시된, 제1 오퍼랜드 길이는 명령의 실행 시작 시에 0이다.
● 제1 오퍼랜드 길이는 명령 실행 중에 0과 같게 되어 정상 완료가 발생하지 않는다.
[0204] 일 예에서, 제1 오퍼랜드의 길이는, 일반 레지스터 R1 + 1의 컨텐트가 0일 때, 파라미터 블록의 NT 및 SBB 필드 값들에 상관없이, 0이다. 
[0205] 제 오퍼랜드 길이가 명령의 실행 중에 0과 같게 될 때, 연산은 종료되고, 일 실시 예에서, 다음이 발생한다:
● 파라미터 블록의 계속 플래그(CF) 비트(373)는 1로 세트 된다. 
● 파라미터 블록의 계속 상태 버퍼(CSB) 필드(392)가 갱신된다.
● 파라미터 블록의 서브-바이트 경계(SBB) 필드(381)가 갱신된다.
● 파라미터 블록의 히스토리 길이(HL) 필드(385)가 갱신된다.
● 적용 가능할 때, 파라미터 블록의 히스토리 오프셋(HO) 필드(386)가 갱신된다.
● 파라미터 블록의 체크 값 필드(387)가 갱신된다.
● 모델-디펜던트 값은 파라미터 블록의 모델 버전 번호(MVN) 필드(363)에 저장된다. 
● 파라미터 블록의 엔드-오브-블록 길이(EOBL)(389) 및 엔드-오브-블록 심볼(EOBS)(388) 필드가 갱신된다.
● 파라미터 블록의 연산 종료 보조 코드(OESC) 필드(365)는 0들로 세트 된다.
● 일반 레지스터 R1의 주소는 처리 비트 0을 포함했던 제1 오퍼랜드의 처리된 바이트들 수만큼 증가되고, 일반 레지스터 R1 + 1의 길이는 같은 수만큼 감소된다. 처리 비트 0을 포함했던 제1 오퍼랜드의 처리된 바이트들의 수는 처리된 출력 비트들의 수와 SBB의 원래 값의 합인 피제수(dividend)와, 8의 값인 제수(divisor)를 갖는 정수 나눗셈의 결과인 정수 몫이다.
● 일반 레지스터 R2의 주소는 처리된 소스 바이트들의 수만큼 증가되고, 일반 레지스터 R2 + 1의 길이는 같은 수만큼 감소된다.
● 조건 코드 1이 세트 된다.
[0206] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다. 
[0207] 제1 오퍼랜드 길이가 명령 실행 시작 시에 0일 때, 연산은 종료되고, 일 실시예에서, 다음이 발생한다.
● 조건 코드 1이 세트 된다. 
[0208] 조건 코드 1 세트로 명령이 종료된 이후, 프로그램이 제1 오퍼랜드의 길이, 제1오퍼랜드의 주소, 또는 둘 모두를 수정하고 연산을 재개하도록 명령을 다시 실행하는 것이 예상된다. 
[0209] 다음 사항에 대해서, 적용 가능할 때, PER 스토리지 변경 이벤트가 인지된다:
● 후술하는 바와 같이, 파라미터 블록에 저장한다.
● 제1 오퍼랜드 위치에 저장한다.
● 제3 오퍼랜드 위치에 저장하고, 이는, 예를 들어, 히스토리 버퍼 유형(HBT)이 1(서큘러)일 때, 발생한다.  
[0210] 전체 파라미터 블록은 PER 스토리지 영역 지정과 중첩될 때, 파라미터 블록에 대해서, 적용 가능 할 때, PER 스토리지 변경 이벤트가 인지된다. 파라미터 블록의 일부만 PER 스토리지 영역 지정과 중첩될 때, 다음 중 어떤 일이 발생하는지는 모델에 따라 다르다.
● PER 스토리지 변경 이벤트는, 적용 가능할 때, 파라미터 블록에 대해 인지된다.
● PER 스토리지 변경 이벤트는, 적용 가능할 때, 저장된 파라미터 블록 부분에 대해 인지된다. 
[0211] PER 0-주소-검출 이벤트는, HBT가 1(서큘러)일 때, 파라미터 블록, 제1오퍼랜드 위치, 제2오퍼랜드 위치, 및 제3오퍼랜드 위치에 대해서, 적용 가능할 때, 인지된다. 
[0212] 조건 코드 2는 DFLTC-CCMPR 함수에 대해서는 적용 가능하지 않다. 
[0213] 명령이 조건 코드 1 또는 3 세트로 종료될 때, 제2 오퍼랜드 위치로부터 참조되는 입력 데이터는 완전하게, 또는 부분적으로만 처리될 수 있다. 입력 데이터가 부분적으로만 처리될 때, 파라미터 블록의 제1 오퍼랜드 위치, 제1 오퍼랜드 주소, 제1 오퍼랜드 길이 및 SBB 필드가 갱신된 제2 오퍼랜드 주소 및 길이와 일치하는 상태를 나타내지 않는다. 이들 경우들에서, 부분적으로 처리된 데이터와 내부 상태 정보는 파라미터 블록의 CSB 필드에 배치될 수 있다. 부분적으로 처리되는 데이터의 양은 연산이 종료되는 시점에 존재하는 조건들과 모델에 따라 다르다. 일부 데이터는 부분적으로만 처리될 수 있더라도, 갱신된 제1 오퍼랜드 주소에 의해서 지정된 위치의 왼쪽에 저장된 결과들은 완전하므로(complete) 연산이 재개될 때 수정되지 않는다. 또한 프로그램은 이후에 연산을 재개하기 위해 명령을 다시 실행하는 것이 예상되고, 이때 CSB 필드의 컨텐츠는 연산을 재개하기 전에 참조된다. 명령이 조건 코드 0 세트로 모든 데이터는 완전하게 처리되고 입력 및 출력 데이터와 관련된 모든 결과들은 일관된 상태를 나타낸다. 
[0214] 0이 아닌 조건 코드 세트로 명령이 종료된 이후, 및 연산을 재개할 목적으로 명령을 재-실행하기 전에, 프로그램은 파라미터 블록의 어떤 필드들도 수정해서는 안된다; 그렇지 않으면 결과들은 예측할 수 없게 된다.
[0215] 함수 코드 4: DFLTCC-XPND(확장)
[0216] DFLTCC-XPND 함수가 명시된 때, 압축 해제 연산이 수행된다. 연산은 제2 오퍼랜드 위치로부터 압축된 데이터 심볼들을, 제1 오퍼랜드 위치에 저장되는, 압축 안된 데이터로 디코드 하는 것을 포함한다. 
[0217] 일 예에서, DFLTCC-XPND 함수는 파라미터 블록을 사용하며, 이에 대한 일 예가 도 3k-3l과 관련하여 위에서 기술되었다.
[0218] DFLTCC-XPND 연산의 일 예는 데이터를 압축 해제하는 것과 관련하여 아래에서 설명한다.
 [0219] 제2오퍼랜드의 데이터 세트의 마지막 블록의 모든 엘리멘트들이 디코드 되고 모든 압축 해제된 데이터가 제1오퍼랜드 위치에 저장될 때, 정상 완료가 발생한다. 데이터 세트의 마지막 블록은 블록 헤더의 BFINAL 비트가 1일 때 식별된다. 정상 완료로 인해 연산이 종료될 때, 일 실시예에서, 다음이 발생한다.
● 모델-디펜던트 값은 파라미터 블록의 모델 버전 번호(MVN) 필드(363)에 저장된다.
● 파라미터 블록의 계속 플래그(CF) 필드(373)가 0으로 세트 된다. 
● 파라미터 블록의 서브-바이트 경계(SBB) 필드(381)가 갱신된다. 
● 파라미터 블록의 히스토리 길이(HL) 필드(385)가 갱신된다. 
● 파라미터 블록의 히스토리 오프셋(HO) 필드(386)가, 적용 가능할 때, 갱신된다.
● 파라미터 블록의 압축된 동적-후프만 테이블(CDHT)(367) 및 압축된 동적-후프만 테이블 길이(CDHTL) 필드(366)는 0으로 세트 된다. 
● 파라미터 블록의 연산 종료 보조 코드(OESC) 필드(365)는 0으로 세트 된다. 
● 파라미터 블록의 체크 값 필드(387)가 갱신된다. 
● 일반 레지스터 R1의 주소는 제1 오퍼랜드 위치에 저장된 바이트들의 수만큼 증가되고, 일반 레지스터 R1 + 1의 길이는 같은 수만큼 감소된다. 
● 일반 레지스터 R2의 주소는 처리 비트 0을 포함하는 제2 오퍼랜드의 처리된 바이트들의 수만큼 증가되고, 일반 레지스터 R2 + 1의 길이는 같은 수만큼 감소된다. 처리 비트 0을 포함했던 제2 오퍼랜드의 처리된 바이트들의 수는 처리된 입력 비트들의 수와 SBB의 원래 값의 합인 피제수(dividend)와 8의 값인 제수(divisor)를 갖는 정수 나눗셈의 결과인 정수 몫이다.
● 조건 코드 0이 세트 된다.
[0220] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다. 
[0221] 정상 종료가 발생할 때, 파라미터 블록의 CSB 필드(392)는 연산이 종료된 후에는 정의되지 않는다. 
[0222] CPU-결정된 수의 바이트들이 처리되었을 때, 연산은 종료되고, 일 실시 예에서, 다음이 발생한다:
● 파라미터 블록의 계속 플래그(CF) 비트(373)은 1로 세트 된다. 
● 파라미터 블록의 계속 상태 버퍼(CSB) 필드(392)가 갱신된다. 
● 파라미터 블록의 서브-바이트 경계(SBB) 필드(381)이 갱신된다. 
● 파라미터 블록의 압축된 동적-후프만 테이블(CDHT)(367) 및 압축된 동적-후프만 테이블 길이(CDHTL)(366) 필드가 갱신된다. BTYPE 값이 10 이진수인 블록을 처리하는 동안 부분 완료가 발생할 때, 상기 테이블을 나타내기 위해 요구되지 않는 CDHT 필드의 바이트들은 0들로서 저장된다. BTYPE 값이 00 또는 01 이진수인 블록을 처리하는 동안 부분 완료가 발생할 때, 0들이 CDHT 및 CDHTL 필드에 저장된다. 
● 파라미터 블록의 히스토리 길이(HL) 필드(385)가 갱신된다.
● 파라미터 블록의 히스토리 오프셋(HO) 필드(386)가, 적용 가능할 때, 갱신된다.
● 파라미터 블록의 체크 값 필드(387)가 갱신된다. 
● 모델-디펜던트 값은 파라미터 블록의 모델 버전 번호(MVN) 필드(363)에 저장된다.
● 파라미터 블록의 연산 종료 보조 코드(OESC) 필드(365)는 0들로 세트 된다.
● 파라미터 블록의 불완전 함수 상태(IFS) 필드(383)가 갱신된다. 
● 파라미터 블록의 불완전 함수 길이(IFL) 필드(384)가, 적용 가능할 때, 갱신된다.
● 일반 레지스터 R1의 주소는 제1 오퍼랜드 위치에 저장된 바이트들의 수만큼 증가되고, 일반 레지스터 R1 + 1의 길이는 같은 수만큼 감소된다.
● 일반 레지스터 R2의 주소는 처리 비트 0을 포함했던 제2 오퍼랜드의 처리된 바이트들의 수만큼 증가되고, 일반 레지스터 R2 + 1의 길이는 같은 수만큼 감소된다. 처리 비트 0을 포함했던 제2 오퍼랜드의 처리된 바이트들의 수는 처리된 입력 비트들의 수와 SBB의 원래 값의 합인 피제수(dividend)와, 8의 값인 제수(divisor)를 갖는 정수 나눗셈의 결과인 정수 몫이다.
● 조건 코드 3이 세트 된다. 
[0223] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다. 
[0224] CPU-결정된 수의 바이트들은 모델에 따라 다르고, 명령이 실행될 때마다 다른 수가 될 수 있다. 
[0225] 조건 코드 3 세트로 명령이 종료된 이후, 프로그램은 명령에 대한 어떠한 입력 또는 출력 사양도 수정하지 않고 연산을 재개하기 위해 명령을 다시 실행하도록 다시 분기하는 것이 예상된다.  
[0226] 특정 상황들에서, 조건 코드 3 세트로 명령을 종료함에도 불구하고, 파라미터 블록 및 일반 레지스터들은 갱신되지 않는다. 이들 상황들은 CPU가 디프레이트 변환 호출 명령을 실행하는 동안 정지 연산 또는 CPU 재시도를 수행할 때 발생할 수 있다. 이들 경우들에서, CPU-결정된 바이트들의 수는 0이고, 데이터는 제1 오퍼랜드 위치에 저장되었을 수 있고, 적용 가능 할 때, 데이터는 제3 오퍼랜드 위치에 저장되었을 수 있으며, 그리고 대응 변경 비트들은 세트 되었다. 
[0227] 예를 들어, 다음이 적용될 때, 제2 오퍼랜드 길이는 연산을 완료하기에 충분하지 않다: 
● BFINAL이 1과 같은 압축된 데이터 블록의 마지막 엘리멘트는 연산 중에 디코드 되지 않았고, 제2 오퍼랜드 길이와 SBB에 의해서 지정된, 제2 오퍼랜드의 비트 수는 디코드할 다음 엘리멘트의 비트들의 수보다 적으며, 제2 오퍼랜드 위치로 부터의 데이터를 디코드 하는 것으로부터의 모든 결과들은 제1 오퍼랜드 위치에 배치되었다. 
[0228] 제2 오퍼랜드의 길이가 연산을 완료하기에 불충분 할 때, 연산은 부분적으로 완료되었고, 연산은 종료하며, 일 실시 예에서, 다음이 발생한다:
● 파라미터 블록의 계속 플래그(CF) 비트(373)는 1로 세트 된다.
● 파라미터 블록의 계속 상태 버퍼(CSB) 필드(392)가 갱신된다. 
● 파라미터 블록의 서브-바이트 경계(SBB) 필드(381)가 갱신된다.
● 압축된 동적-후프만 테이블(CDHT)(367) 및 파라미터 블록의 압축된 동적-후프만 테이블 길이(CDHTL) 필드(366)가 갱신된다. BTYPE 값이 10 이진수인 블록을 처리하는 동안 부분 완료가 발생할 때, 상기 테이블을 나타내기 위해 요구되지 않은 CDHT 필드의 바이트들은 0들로 저장된다. BTYPE 값이 00 또는 01 이진수인 블록을 처리하는 동안 부분 완료가 발생할 때, 0들이 CDHT 및 CDHTL 필드에 저장된다.
● 파라미터 블록의 히스토리 길이(HL) 필드(385)가 갱신된다.
● 파라미터 블록의 히스토리 오프셋(HO) 필드(386)가, 적용 가능할 때, 갱신된다. 
● 파라미터 블록의 체크 값 필드(387)가 갱신된다.
● 모델-디펜던트 값은 파라미터 블록의 모델 버전 번호(MVN) 필드(363)에 저장된다. 
● 파라미터 블록의 연산 종료 보조 코드(OESC) 필드(365)는 0들로 세트 된다.
● 파라미터 블록의 불완전 함수 상태(IFS) 필드(383)가 갱신된다. 
● 파라미터 블록의 불완전 함수 길이(IFL) 필드(384)가, 적용 가능할 때, 갱신된다. 
● 일반 레지스터 R1의 주소는 제1 오퍼랜드 위치에 저장된 바이트들 수만큼 증가되고, 일반 레지스터 R1 + 1의 길이는 같은 수만큼 감소된다. 
● 일반 레지스터 R2의 주소는 처리 비트 0을 포함했던 제2 오퍼랜드의 처리된 바이트들의 수만큼 증가되고, 일반 레지스터 R2 + 1의 길이는 같은 수만큼 감소된다. 처리 비트 0을 포함했던 제2 오퍼랜드의 처리된 바이트들의 수는 처리된 입력 비트들의 수와 SBB의 원래 값의 합인 피제수(dividend)와, 8의 값인 제수(divisor)를 갖는 정수 나눗셈의 결과인 정수 몫이다.
● 조건 코드 2가 세트 된다. 
[0229] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다.
[0230] 조건 코드 2 세트로 명령이 종료된 이후에, 프로그램은 제2오퍼랜드 길이, 제2오퍼랜드 주소, 또는 둘 모두를 수정하고 연산을 재개하기 위해 명령을 다시 실행하는 것이 예상된다. 
[0231] 예를 들어, 다음이 적용될 때, 제1 오퍼랜드 길이는 연산을 완료하기에 충분하지 않다: 
● 제2 오퍼랜드 위치로부터의 데이터를 디코드 하는 것으로부터의 결과들은 제1 오퍼랜드 길이가 0과 같기 때문에 제1 오퍼랜드 위치에 배치될 수 없다. 
[0232] 제1오퍼랜드 길이가 연산을 완료하기에 불충분 할 때, 연산은 부분적으로 완료되고, 종료되며, 그리고, 일 실시 예에서 다음이 발생한다: 
● 파라미터 블록의 계속 플래그(CF) 비트(373)는 1로 세트 된다. 
● 파라미터 블록의 계속 상태 버퍼(CSB) 필드(392)가 갱신된다. 
● 파라미터 블록의 서브-바이트 경계(SBB) 필드(381)가 갱신된다. 
● 파라미터 블록의 압축된 동적-후프만 테이블(CDHT)(367) 및 압축된 동적-후프만 테이블 길이(CDHTL) 필드(366)가 갱신된다. 부분 완료가 BTYPE 값이 10 이진수인 블록을 처리하는 동안 발생할 때, 테이블을 나타내기 위해 요구되지 않는 CDHT 필드의 바이트는 0들로서 저장된다. 부분 완료가 BTYPE 값이 00 또는 01 이진수인 블록을 처리하는 동안 발생할 때, 0들이 CDHT 및 CDHTL 필드에 저장된다.
● 파라미터 블록의 히스토리 길이(HL) 필드(385)가 갱신된다. 
● 파라미터 블록의 히스토리 오프셋(HO) 필드(386)가, 적용 가능할 때, 갱신된다. 
● 파라미터 블록의 체크 값 필드(387)가 갱신된다. 
● 모델-디펜던트 값은 파라미터 블록의 모델 버전 번호(MVN) 필드(363)에 저장된다.
● 파라미터 블록의 연산 종료 보조 코드(OESC) 필드(365)는 0들에 세트 된다. 
● 파라미터 블록의 불완전 함수 상태(IFS) 필드(383)가 갱신된다.
● 파라미터 블록의 불완전 함수 길이(IFL) 필드(384)가, 적용 가능할 때, 갱신된다.
● 일반 레지스터 R1의 주소는 제1 오퍼랜드 위치에 저장된 바이트들의 수만큼 증가되고, 일반 레지스터 R1 + 1의 길이는 같은 수만큼 감소된다.
● 일반 레지스터 R2의 주소는 처리 비트 0을 포함했던 제2 오퍼랜드의 처리된 바이트들의 수만큼 증가되고, 일반 레지스터 R2 + 1의 길이는 같은 수만큼 감소된다. 처리 비트 0을 포함했던 제2 오퍼랜드의 처리된 바이트들의 수는 처리된 입력 비트들의 수와 SBB의 원래 값의 합인 피제수(dividend)와, 8의 값인 제수(divisor)를 갖는 정수 나눗셈의 결과인 정수 몫이다. 
● 조건 코드 1이 세트 된다. 
[0233] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다. 
[0234] 조건 코드 1 세트로 명령이 종료된 이후, 프로그램은 제1 오퍼랜드 길이, 제1오퍼랜드 주소, 또는 둘 모두를 수정하고 연산을 재개하도록 명령을 다시 실행하는 것이 예상된다. 
[0235] PER 스토리지-변경 이벤트가, 적용 가능 할 때, 다음에 대해서, 인지된다: 
● 여기서 기술한 바와 같은, 파라미터 블록에 대한 저장들.
● 제1 오퍼랜드 위치에 대한 저장들.
● 제3 오퍼랜드 위치에 대한 저장들. 이는, 예를 들어, 히스토리 버퍼 유형(HBT)이 1(서큘러)일 때 발생한다. 
[0236] 일 예에서, 전체 파라미터 블록이 PER 스토리지 영역 지정과 중첩될 때, PER 스토리지 변경 이벤트는, 적용 가능 할 때, 파라미터 블록에 대해서, 인지된다. 파라미터 블록의 일부만이 PER 스토리지 영역 지정과 중첩될 때, 일 실시 예에서, 다음 중 어느 것이 발생하는지는 모델에 따라 다르다.
● PER 스토리지 변경 이벤트는, 적용 가능할 때, 파라미터 블록에 대해 인지된다. 
● PER 스토리지 변경 이벤트는, 적용 가능할 때, 저장된 파라미터 블록 부분에 대해 인지된다. 
[0237] PER 0-주소-검출 이벤트는, HBT가 1(서큘러)일 때, 파라미터 블록, 제1 오퍼랜드 위치, 제2 오퍼랜드 위치 및 제3오퍼랜드 위치에 대해서, 적용 가능할 때, 인지된다.
[0238] 명령이 조건 코드 1, 2 또는 3 세트로 종료될 때, 제2 오퍼랜드 위치로부터 참조된 입력 데이터는 완전하게 또는 부분적으로만 처리될 수 있다. 입력 데이터가 부분적으로만 처리될 때, 파라미터 블록의 제1 오퍼랜드 위치, 제1 오퍼랜드 주소, 제1 오퍼랜드 길이, SBB 필드, 파라미터 블록의 체크 값 필드, 파라미터 블록의 HL 필드, 파라미터 블록의 IFS 필드 블록 및, 적용 가능 할 때, 파라미터 블록의 제3 오퍼랜드 위치 및 HO 필드는, 갱신된 제2 오퍼랜드 주소 및 길이와 일치하는 상태를 나타내지 않는다. 이들 경우들에서, 부분적으로 처리된 데이터와 내부 상태 정보는 파라미터 블록의 CSB 필드에 배치될 수 있다. 부분적으로 처리되는 데이터의 양은 연산이 종료되는 시점에 존재하는 조건들과 모델에 따라 다르다. 일부 데이터가 부분적으로만 처리될 수 있을지라도, 갱신된 제1 오퍼랜드 주소에 의해서 지정된 위치의 왼쪽에 저장된 결과들은 완전하며(complete) 연산이 재개될 때 수정되지 않는다. 또한 프로그램은 이후에 연산을 재개하기 위한 명령을 다시 실행하는 것이 예상되고, 이때 CSB 필드의 컨텐츠는 연산을 재개하기 전에 참조된다. 조건 코드 0 세트로 연산이 종료될 때, 모든 데이터가 완전하게 처리되고 입력 및 출력 데이터와 관련된 모든 결과들은 일관된 상태를 나타낸다. 
[0239] 0이 아닌 조건 코드 세트로 명령이 종료된 이후에, 그리고 연산을 재개할 목적으로 명령을 다시 실행하기 전에, 프로그램은 파라미터 블록의 어떠한 필드도 수정해서는 안 된다; 그렇지 않으면 결과들은 예측 불가능하게 된다. 
[0240]압축된 데이터 블록들 
[0241] 일 예에서, 스토리지의 압축된 데이터 블록의 바이트들은, 예를 들어, 왼쪽에서 오른쪽으로 처리된다. 압축된 데이터 블록은 바이트 경계에서 시작하거나 끝나지 않을 수 있다. 압축된 데이터 블록은, 예를 들어, 비트 스트림이다. 블록의 엘리멘트들은 한 번에 한 비트씩 스토리지에 로드 된다. 비트 스트림은, 예를 들어, 스토리지의 각 바이트 내에서 오른쪽에서 왼쪽으로 그리고, 예를 들어, 왼쪽에서 오른쪽으로 바이트 순서로 로드 된다. 엘리멘트가 후프만 코드일 때, 비트들은, 예를 들어, 엘리멘트의 최상위 비트로부터 최하위 비트 순으로 저장된다. 엘리멘트가 후프만 코드가 아닐 때, 비트들은, 예를 들어, 엘리멘트의 최하위 비트로부터 최상위 비트 순으로 저장된다. 
[0242] 도 6은 압축된 데이터 심볼을 포함하지 않는 블록 유형 00 이진수를 갖는 블록(600)의 일 예를 도시한다. 다음은, 일 실시 예에서, 이 예에 적용된다. 
● 압축된 데이터 블록(600)은, b0으로 식별되는, 바이트 0의 비트 4로 시작하고, b60으로 식별되는, 바이트 7의 비트 0로 종료되는 비트 스트림(602)으로 구성된다.
● 상기 비트 스트림에서 만나는 제1 엘리멘트는 바이트 0의 비트 4에 있는 BFINAL(블록 헤더 최종 비트)이다. 
● 비트 스트림에서 만나는 제2 엘리멘트는 바이트 0의 비트들 2-3에 있는 BTYPE(블록 유형)이다. 이 예에서, BTYPE은 00 이진수이다. 
● BTYPE이 00 이진수(이 예에서 바이트 0의 비트들 0-1)일 때 BTYPE의 왼쪽 및 바이트 경계의 오른쪽의 비트들은 무시된다.             
● 비트 스트림에서 만나는 제3 엘리멘트는 LEN 필드의 최하위 바이트(LSB)이며 그 뒤에 LEN 필드의 최상위 바이트(MSB)가 온다. LEN 필드는 리터럴 데이터를 갖는 블록의 바이트들의 수를 명시한다. 리터럴 데이터는, 예를 들어, 압축되지 않은 데이터이다. 리터럴 데이터를 갖는 바이트들은 비트 스트림의 NLEN 필드를 따른다. NLEN은 LEN의 1의 보수이다. 한 예에서 바이트들 1-2는 리틀 엔디안 바이트 순서로 LEN 필드를 포함한다.
● LEN 필드 다음의 비트 스트림에서 만나는 엘리멘트는 각각 NLEN 필드의 최하위 바이트이고 NLEN 필드의 최상위 바이트가 뒤따른다. 바이트들 3-4는 리틀 엔디안 바이트 순서로 NLEN 필드를 포함한다. NLEN 필드는 LEN 필드의 1의 보수이다. 
● NLEN 필드 다음에 오는 비트 스트림에서 만나는 엘리멘트는 압축되지 않은 데이터이고, 리터럴 바이트로 식별된다. 바이트들 5-7은 압축되지 않은 데이터를 포함하는데, 이는 이 블록을 생성하는 데 사용되는 소스 데이터로부터 변경되지 않는다.
● 이 블록에 포함된 엘리멘트들 중 어느 것도 후프만 코드가 아니다. 이 블록의 모든 엘리멘트는, 디플레이트 표준에 정의된 대로, 엘리멘트의 최하위 비트에서 최상위 비트의 순서로 비트 스트림 순서로 저장된다. LEN, NLEN 및 리터럴 엘리멘트들은 각각 바이트 경계들에 정렬된 정수 바이트들(an integral number of bytes)이므로, 이들 엘리멘트들은 바이트 단위로 처리될 수 있으며, 반드시 비트 단위로 처리될 필요는 없다. 
[0243] 도 7은, 고정-후프만 테이블(FHT)을 사용하여 생성된 압축된 데이터 심볼들을 포함하는, 블록 유형이 01 이진수인 블록(700)의 예를 예시한다. 일 실시 예에서, 다음은 이 예에 적용된다. 
● 압축 데이터 블록(700)은, b0으로 식별되는, 바이트 0의 비트 4로 시작하고, b89로 식별되는, 바이트 11의 비트 3으로 종료되는 비트 스트림(702)으로 구성된다. 
● 비트 스트림에서 만나는 제1 엘리멘트는 바이트 0의 비트 4에서의 BFINAL이다. 
● 비트 스트림에서 만나는 제2 엘리멘트는 바이트 0의 비트 2-3에서의 BTYPE이다. 이 예에서 BTYPE은 01 이진수이다. 
● 고정-후프만 테이블(FHT)은 블록의 컴포넌트가 아니다. 
● 비트 스트림에서 만나는 제3 엘리멘트는 바이트 0의 비트 1에서 시작하는 제1 압축된 데이터 심볼이다. 압축된 데이터 심볼은 비트 스트림에서 만나는 다음 서브-엘리멘트들로 구성된다. 한 예에서 이들은 다음과 같은 순서로 나열된다: 
1. 가변 길이의 후프만 코드. 상기 코드의 최상위 비트는 코드의 길이를 지정한다. 상기 코드는 코드의 최상위 비트로 시작하여 코드의 최하위 비트로 종료되는 비트 스트림에서 만난다(encountered). 상기 코드가 리터럴 값 또는 엔드-오브-블록 심볼을 나타낼 때, 상기 코드는 압축된 데이터 심볼의 유일한 서브-엘리멘트이다. 상기 코드가 히스토리 버퍼에 대한 포인터의 길이를 나타낼 때, 상기 코드 다음에는 압축된 데이터 심볼의 후속 서브-엘리멘트가 온다. 
2. 적용 가능 할 때, 디플레이트 표준에서 명시된 바와 같이, 추가 길이 비트들(extra length bits)이 포인터 길이를 나타내는 후프만 코드 다음에 올 수 있다. 추가 길이 비트들은 최하위 비트로 시작하여 추가 길이 비트들의 최상위 비트로 종료되는 비트 스트림에서 만난다.
3. 비트 스트림에서 만나는 다음 서브-엘리멘트는 히스토리 버퍼에 대한 포인터의 5-비트 거리 코드이다. 거리 코드는, 예를 들어, 코드의 최상위 비트로 시작하여 거리 코드의 최하위 비트로 종료되는 비트 스트림에서 만난다. 
4. 적용 가능 할 때, 디플레이트 표준에 명시된 바와 같이, 추가 거리 비트들이 거리 코드 뒤에 올 수 있다. 추가 거리 비트들은 최하위 비트로 시작하여 추가 거리 비트들의 최상위 비트로 종료되는 비트 스트림에서 만난다. 
● 예를 들어, 바이트 0의 비트들 0-1, 바이트 1-9의 모든 비트들 및 바이트 10의 비트들 2-7은 압축된 데이터 심볼들의 비트들이 포함된다.
● 비트 스트림에서 만난 마지막 엘리멘트는, 엔드-오브-블록(EOB) 심볼을 나타내는 후프만 코드인, 단일 서브-엘리멘트를 포함하는 압축된 데이터 심볼이다. BTYPE이 01 이진수인 블록에 대한 EOB 심볼은 0000000 이진수이다. 이 예에서 바이트 10의 비트 1은 EOB 심볼의 최상위 비트를 포함하고 바이트 11의 비트 3은 EOB 심볼의 최하위 비트를 포함한다.
● 바이트 11의 비트 3은, 압축된 데이터 블록의 마지막 비트인, 비트 스트림의 마지막 비트를 포함한다.  
[0244] 도 8은, 동적-후프만 테이블(DHT)을 사용하여 생성된 압축된 데이터 심볼들을 포함하는, 블록 유형이 10 이진수인 블록(800)의 예를 예시한다. 일 실시 예에서, 다음은 이 예에 적용된다:
● 압축 데이터 블록(800)은, b0으로 식별되는, 바이트 0의 비트 4로 시작하고, b89 로 식별되는, 바이트 11의 비트 3으로 종료되는 비트 스트림(802)으로 구성된다. 
● 비트 스트림에서 만나는 제1 엘리멘트는 바이트 0의 비트 4에서의 BFINAL이다. 
● 비트 스트림에서 만나는 제2 엘리멘트는 바이트 0의 비트 2-3에서의 BTYPE이다. 이 예에서 BTYPE은 10 이진수이다. 
● 비트 스트림에서 만나는 제3 엘리멘트는, 바이트 0의 비트 1에서 시작하는, 동적-후프만 테이블(DHT)의 압축된 표현이다. DHT의 압축된 표현은, 한 예에서, 다음 서브-엘리멘트들로 구성되고, 이들은 나열된 순서대로 비트 스트림에서 만난다: 
1. HLIT: 5-비트 HLIT 서브-엘리멘트와 257의 합은 리터럴 바이트들, EOB 심볼 및 중복 스트링 길이들을 나타내는 후프만 코드들의 수를 명시한다. HLIT의 유효한 값들은, 예를 들어, 0에서 29까지 범위이다. HLIT 비트들은 최하위 비트로 시작하여 HLIT 서브-엘리멘트의 최상위 비트로 종료되는 비트 스트림에서 만난다. 이 예에서, b3으로 식별되는, 바이트 0의 비트 1은 HLIT 서브-엘리멘트의 최하위 비트이다.
2. HDIST: 5비트 HDIST 서브-엘리멘트와 1의 합은 중복 스트링 포인터 거리들을 나타내는 후프만 코드들의 수를 명시한다. HDIST의 유효한 값들은, 예를 들어, 0에서 29까지 범위이다. HDIST 비트들은 최하위 비트로 시작하여 HDIST 서브-엘리멘트의 최상위 비트로 종료되는 비트 스트림에서 만난다. 
3. HCLEN: 4비트 HCLEN 서브-엘리멘트와 4의 합은 코드 길이들을 나타내는 후프만 코드들의 수를 명시한다. HCLEN의 유효한 값들은, 예를 들어, 0에서 15까지 범위이다. HCLEN 비트들은 최하위 비트로 시작하여 HCLEN 서브-엘리멘트의 최상위 비트로 종료되는 비트 스트림에서 만난다. 
4. 압축된 DHT에 대해 정의된 코드 길이들의 각각에 대한 비트 길이를 명시하는 코드들의 시퀀스. 코드들의 수는 HCLEN과 4의 합과 같다. 각 코드는 3비트들이다. 
5. 리터럴 바이트들, EOB 심볼 및 중복 스트링 길이들로 구성된 세트의 엘리멘트들의 각각에 대한 코드 길이를 명시하는 코드들의 시퀀스. 명시된 코드 길이들의 수는 HLIT와 257의 합과 같다. 
[0245]리터럴 바이트들, EOB 심볼 및 중복 스트링 길이들의 세트에 대한 마지막 코드 길이(CL)가 16, 17 또는 18이고, CL 다음에 오는 추가 비트들이 상기 세트에 대해서 정의된 것보다 더 많은 엘리멘트들에 대해 CL을 반복하는 것을 명시할 때, 상기 코드 길이는 또한 중복 스트링 포인터 거리들의 세트에도 적용된다. 리터럴 바이트들, EOB 심볼 및 중복 스트링 길이들의 세트에 대해 코드 길이들을 명시하는 코드들의 시퀀스와, 뒤이어서 오는 중복 스트링 포인터 거리들에 대해 코드 길이들을 명시하는 코드들의 시퀀스는 두 세트들 모두에 대해 연속하는 시퀀스(a contiguous sequence )이다.
6. 중복 스트링 포인터 거리들로 구성되는 세트의 엘리멘트들 각각에 대하여 코드 길이를 명시하는 코드들의 시퀀스. 명시된 코드 길이들의 수는 HDIST와 1의 합과 같다. 
● 비트 스트림에서 만나는 제4 엘리멘트는 제1 압축된 데이터 심볼이다. 압축된 데이터 심볼은, 일 실시 예에서, 나열된 순서대로 비트 스트림에서 만나는, 다음 서브-엘리멘트들로 구성된다.
1. 가변 길이의 후프만 코드. 상기 코드의 최상위 비트들은 코드의 길이를 지정한다. 상기 코드는 상기 코드의 최상위 비트에서 시작하여 상기 코드의 최하위 비트로 종료되는 비트 스트림에서 만난다. 상기 코드가 리터럴 값 또는 엔드-오브-블록 심볼을 나타낼 때, 상기 코드는 압축된 데이터 심볼의 유일한 서브-엘리멘트이다. 상기 코드가 히스토리 버퍼에 대한 포인터의 길이를 나타낼 때, 코드 뒤에는 압축된 데이터 심볼의 후속 서브-엘리멘트들이 온다.
2. 적용 가능 할 때, 디플레이트 표준에 명시된 바와 같이, 추가 길이 비트들이 포인터 길이를 나타내는 후프만 코드 다음에 올 수 있다. 추가 길이 비트들은, 예를 들어, 최하위 비트로 시작하여 추가 길이 비트들의 최상위 비트로 종료되는 비트 스트림에서 만난다. 
3. 비트 스트림에서 만나는 다음 서브-엘리멘트는 히스토리 버퍼에 대한 포인터의 5-비트 거리 코드이다. 상기 거리 코드는, 예를 들어, 상기 코드의 최상위 비트로 시작하여 상기 거리 코드의 최하위 비트로 종료되는 비트 스트림에서 만난다. 
4. 적용 가능 할 때, 디플레이트 표준에 명시된 바와 같이, 추가 거리 비트들이 거리 코드 뒤에 올 수 있다. 추가 거리 비트들은, 예를 들어, 최하위 비트로 시작하여 추가 거리 비트들의 최상위 비트로 종료되는 비트 스트림에서 만난다. 
● 예를 들어, 바이트 10의 비트 5까지 포함하는, 비트 스트림에서 만난 후속 비트들은 압축된 데이터 심볼들의 비트들을 포함한다.
● 비트 스트림에서 만난 마지막 엘리멘트는, 엔드-오브-블록(EOB) 심볼을 나타내는 후프만 코드인, 단일 서브-엘리멘트를 포함하는 압축된 데이터 심볼이다. 이 예에서 바이트 10의 비트 4는 EOB 심볼의 최상위 비트를 포함하고 바이트 11의 비트 3은 EOB 심볼의 최하위 비트를 포함한다.
● 바이트 11의 비트 3은, 압축된 데이터 블록의 마지막 비트인, 비트 스트림의 마지막 비트를 포함한다. 
[0246] 다양한 블록 유형들에 관한 상기 설명에서, 특정 비트들, 바이트들, 디렉션들, 등뿐만 아니라, 특정 상수 값들(certain constant values)도 명시된다. 이들은 단지 예들일 뿐이다. 다른 상수 값들, 비트들, 바이트들, 디렉션들, 등이 다른 실시 예들에서 명시될 수 있다. 
[0247]압축 데이터 세트의 처리
[0248] 디플레이트 변환 호출 명령의 예시적인 사용들을 설명하고, 파라미터 블록의 다양한 필드에 대한 설명을 증가시키기 위해 압축된 데이터 세트를 처리하는 예들이 제공된다. 예들은 가능한 모든 시나리오들, 요구 사항들 및 능력들을 설명하지는 않지만, 다양한 시나리오들, 요구 사항들 및/또는 능력들을 보여준다. 예들 및 설명들은, 예를 들어, 스토리지에 압축된 데이터 세트에 적용되며, 그 예가 도 9에 도시되어 있다. 도시된 바와 같이, 압축된 데이터 세트(900)는 복수의 압축 데이터 블록들(902)을 포함하고, 데이터 세트(900)의 시작은 압축 데이터 세트 시작 주소(CDSBA)(904)로 표시된다. 
[0249] 여기서 설명한 예들을 위해, 일 실시 예에서, 압축된 데이터 세트를 처리하는 프로그램은 다음을 고려하도록 의도되었다: 
● 단일 파라미터 블록은 전체 압축된 데이터 세트를 처리하기 위해 디플레이트 변환 호출 명령의 다수 사용들에 의해서 정의되고 참조될 수 있다. 파라미터 블록의 체크 값(387) 및 체크 값 유형(375) 필드들은 압축 데이터 세트 내의 압축 데이터 블록들(예를 들어, 모든 블록들)에 적용된다. 파라미터 블록의 서브-바이트 경계 필드(381)는 개별 블록 간의 전환들(transitions)에 적용된다. 히스토리 길이(385) 및 히스토리 오프셋(386)은 다수 블록들에 적용될 수 있다. 파라미터 블록의 나머지 필드들은, 한 예에서, 오직 디플레이트 변환 호출 명령의 특정 실행에 의해 처리되는 개별 압축된 데이터 블록에 대해서만 적용된다. 
● 개별 체크 값은, 예를 들어, 압축된 데이터 세트가 나타내는 모든 압축 안된 데이터에 적용된다. 
● 블록 1의 제1 압축된 데이터 심볼이 참조할 히스토리는 없다. 블록 1의 후속 심볼들은 블록 1에서 이전에 만났던 심볼들에 대응하는 히스토리를 참조할 수 있다. 블록 2의 심볼들은 블록 2 및 블록 1의 이전에 만났던 심볼들에 대응하는 히스토리를 참조할 수 있다. 블록 3의 심볼들은 블록 3, 2,1에서 이전에 만났던 심볼들에 대응하는 히스토리를 참조할 수 있다. 
[0250] 도 10은 도 9에 기술된 압축 데이터 세트(900)의 데이터를 압축하는데 사용되는 샘플 프로그램(1000)의 일부의 일 예를 나열한다. 또한, 도 11은 도 10의 IABLK1(1002)로 라벨이 붙여진 명령 주소에 위치한 DFLTCC 명령의 실행 동안 사용되는 파라미터 블록의 특정 필드들에 대한 값들을 나열한다. 예를 들어, 도 11은 다양한 파라미터 블록 필드들(1100)을 도시한다; 압축 연산의 시작 시 이들 필드들에 대한 값들(1102); 조건 코드 1, 2 또는 3이 세트 될 때 연산의 종료 시 이들 필드들에 대한 값들(1104); 및 조건 코드 0이 세트 될 때 연산의 종료 시 이들 필드들에 대한 값들(1106)이다. 
[0251] 유사하게, 도 12는 도 10의 IABLK2(1004)로 라벨이 붙여진 명령 주소에 위치한 DFLTCC 명령의 실행 동안 사용되는 파라미터 블록의 특정 필드들에 대한 값들을 나열한다. 이들 수치들은 그림은 전체 압축된 데이터 세트를 처리하기 위해 디플레이트 변환 호출 명령을 여러 번 사용하는 것과 관련된 세부 사항들의 일부를 보여준다. 
[0252] 또한, 도 13을 참조하면, 도 9의 압축된 데이터 세트로부터 데이터를 압축 해제하는데 사용되는 샘플 프로그램(1300)의 일부의 일 예가 도시된다. 
[253] 데이터 압축
[0254] 데이터를 압축하는 프로세스는 하나 또는 그 이상의 압축된 데이터 블록을 생성하는 것을 포함한다. 디플레이트 변환 호출 명령의 압축 함수는 개별 블록의 일부분을 구축하는 데 사용된다. 상기 일부분은 전체 블록일 수 있다. 이 함수는 블록 유형(BTYPE)이 01 또는 10 이진수이고 00 이진수가 아닌 블록의 일부분들을 생성한다. 파라미터 블록의 신규 작업 비트(NT)가 1일 때, 압축된 데이터의 제1 블록이 생성되고 이전에 수행된 압축 연산들로부터의 참조할 히스토리는 없다. 
[0255] 일 예에서, 개별 블록은 나열된 순서대로 다음 엘리멘트들을 포함한다:
1. 최종 블록 표시(BFINAL). 
2. 블록 유형(BTYPE).
3. 적용 가능할 때, 동적-후프만 테이블의 압축된 포맷.
4. 압축된 데이터 심볼.
5. 엔드-오브-블록(EOB) 심볼.
[0256] 압축 연산은 블록에 대해 정의된 순서로 명시된 엘리멘트들을 생성한다. 상기 엘리멘트들은 스토리지의 바이트 경계들 사이에서 시작하거나 종료될 수 있다. 서브-바이트 경계(SBB)는 제1 엘리멘트를 제1 오퍼랜드 위치에 저장하는 데 적용된다. 압축된 데이터 블록은 비트 스트림이다. 블록의 컴포넌트들은 한 번에 한 비트씩 스토리지로 로드 된다. 예로서, 비트 스트림은 스토리지의 각 바이트 내에서 오른쪽에서 왼쪽으로 그리고 왼쪽에서 오른쪽으로 바이트 순서로 로드 된다. 
[0257] SBB가 0이 아닐 때, 제1오퍼랜드 위치의 제1바이트에 대한 참조가 갱신 참조이다. 
[0258] 제2 오퍼랜드 위치로부터의 압축 안된 데이터는 압축되어 제1 오퍼랜드 위치에 압축된 데이터 심볼들로서 저장된다. 
[0259] 제1오퍼랜드의 길이가 명령의 실행의 시작에서 0 일 때, 제1 오퍼랜드는 액세스되지 않고, 일반 레지스터들 R1 과R1 + 1의 제1 오퍼랜드 주소 및 제1오퍼랜드 길이는, 각각, 변경되지 않는다. 이것은 CF 필드(373)(도 3l)의 값이 명령 실행의 시작에서 0 또는 1일 때 적용된다. 
[0260] 제2 오퍼랜드의 길이가 명령의 실행의 시작에서 0 일 때, 제2 오퍼랜드는 액세스되지 않고, 일반 레지스터들 R2 와R2 + 1의 제2 오퍼랜드 주소 및 제2 오퍼랜드 길이는, 각각, 변경되지 않는다. 예로서, 다음의 경우에 제2 오퍼랜드 길이는 명령 실행 시작 시 0이다. 
● 명령은 연산을 재개하기 위해 재실행되고(파라미터 블록의 CF 필드(373)는 명령 실행 시작 시에 1임) 연산을 완료하는 단계는 파라미터 블록의 CSB 필드(392)를 참조하고, 제2 오퍼랜드에 대한 참조 없이 수행될 수 있다. 
[0261] 일 실시 예에서, 프로그램은 다음의 연산들을 수행하기 위해서는 디플레이트 변환 호출 명령을 사용하지 않는다: 
● 빈 압축된 데이터 블록을 생성한다. 빈 압축된 데이터 블록은, 예를 들어, 블록 헤더, 적용 가능 할 때 DHT의 압축된 포맷 및 EOB 심볼로 구성된다. 
● 열려 있는 압축된 데이터 블록을 닫는다. 즉, 압축된 데이터 블록의 끝에 EOB 심볼만 저장한다. 
[0262] 압축 알고리즘 제2오퍼랜드 위치로부터 현재 압축되고 있는 데이터와 일치하는 바이트들의 스트링에 대해 최근에 압축된 데이터의 갱신된 히스토리를 서치하는 단계를 포함한다. 압축 연산이 시작되거나 재개되기 전에, 일 실시예에서, 다음이 적용된다:
● 신규 작업(NT)(374)가 1일 때, 참조에 이용 가능한 초기 히스토리가 없다. 
● NT가 0이고, 일반 레지스터 0(HBT)의 비트 56이 0(인라인)일 때, 참조에 이용 가능한 초기 히스토리는 제2 오퍼랜드의 최좌측 바이트의 왼쪽에, 인접하여, 위치하고, 초기 히스토리의 길이는 파라미터 블록의 히스토리 길이(HL) 필드(385)에 의해 명시된다.
● NT가 0이고, 일반 레지스터 0(HBT)의 비트 56이 1(서큘러)일 때, 참조에 이용 가능한 초기 히스토리는 파라미터 블록의 히스토리 오프셋(HO)(386) 및 히스토리 길이(HL)에 의해서 명시된, 제3 오퍼랜드 위치에 위치한다. 
[0263] 압축 연산 동안, 전체 히스토리에 대한 페치-유형의 참조들이, 히스토리 바이트들이 연산을 수행하는데 사용되는 지에 관계없이, 만들어질 수 있다. 또한, 히스토리 버퍼 유형이 서큘러일 때, 전체 32K 바이트 히스토리 버퍼에 대한 페치 유형 참조가, 히스토리 바이트들이 연산을 수행하는데 사용되는 지에 관계없이, 만들어질 수 있다.  
[0264] 압축 연산 동안, 히스토리는 갱신된다. 일반 오퍼랜드 데이터 예외 조건을 만남이 없이 소스 데이터의 하나 또는 그 이상의 바이트들을 압축된 데이터 심볼들로 인코드 한 이후, 소스 바이트들은 히스토리의 끝에 연결된다(concatenated). 소스 데이터의 최근에 가장 많이 처리된 가장 최근에 처리된 바이트들(최대 32K-바이트들까지)은 소스 데이터의 후속 바이트들을 처리하는 동안 참조에 이용 가능한 갱신된 히스토리를 구성한다. 
[0265] 압축 연산이 종료될 때, 일 예에서, 다음이, 이후에 연산을 재개하거나, 다른 연산을 시작하는데 이용 가능한 최종 히스토리에 적용된다: 
● HBT가 인라인일 때, 제2 오퍼랜드 위치에 대한 스토리지 갱신들이 히스토리가 갱신될 때는 요구되지 않는다. 갱신된 제2 오퍼랜드 주소와 갱신된 HL은 최종 히스토리의 갱신된 위치와 갱신된 길이를 명시한다.
● HBT가 사큘러일 때, 제3 오퍼랜드 위치에 대한 스토리지 갱신들이 히스토리가 갱신될 때 수행된다. 제3 오퍼랜드 주소, 갱신된 HO 및 갱신된 HL은 최종 히스토리의 갱신된 위치와 갱신된 길이를 명시한다. 
[0266] 예들로서, 도 14a-14c는 DFLTCC-CMPR 함수가 명시된 디플레이트 변환 호출 명령의 다수 실행들 전후의 제2 오퍼랜드에 대한 인라인 히스토리 버퍼의 위치와, 또한 각 실행이 부분 완료로 끝날 때, 명시된 인라인 히스토리(예를 들어, 비트 310 = 0)를 예시한다. 예를 들어, 도 14a는 DFLTCC-CMPR 실행 번호 1 이전의 인라인 히스토리를 도시한다; 도 14b는 DFLTCC-CMPR 실행 번호 2 이전 및 실행 번호 1 이후의 인라인 히스토리를 도시한다; 그리고 도 14c는 DFLTCC-CMPR 실행 번호 2 이후의 인라인 히스토리를 도시한다. 도 14c에 제공된 설명은 또한 도 14a 및 도 14b에도 적용된다. 
[0267] 일반 레지스터 0의 비트 56에 의해 명시된 HBT(히스토리 버퍼 유형)이 서큘러 일 때(예를 들어, 비트310+1), 히스토리는, 예를 들어, 제 3 오퍼랜드 위치에 위치한 32 K-바이트 버퍼에 유지된다. 버퍼(HB) 내의 히스토리의 제1 바이트의 위치는, 예를 들어, 일반 레지스터 R3의 컨텐츠와 히스토리 오프셋(HO)(386)(도 3l)의 합에 의해서 지정된다. 히스토리의 제1바이트는 버퍼 내의 압축 안된 데이터의 최근에 가장 적게 처리된 바이트이다. 버퍼(HE) 내 히스토리의 마지막 바이트 위치는, 예로서, 다음 방정식에 의해서 지정된다. 
[0268] HE = R3 + 모듈로 32K(HO + HL - 1) 
[0269] 히스토리의 최종 바이트는 버퍼내의 압축 안된 데이터의 최근에 가장 많이 처리된 바이트이다. 히스토리 오프셋(HO)(386)(도 3l)과 히스토리 길이(HL)(385)의 합이 제3 오퍼랜드의 크기(예를 들어, 32K-바이트들)를 초과할 때, 히스토리는 제3 오퍼랜드의 끝으로부터 제3 오퍼랜드의 시작까지 랩 한다(wrap). 
[0270] 예들로서. 도 15a-15e는 DFLTCC-CMPR 함수가 명시된 디플레이트 변환 호출 명령의 다수 실행들 전과 후에 서큘러 히스토리 버퍼 내 히스토리의 위치와, 또한, 각 실행이 부분 완료로 종료될 때, 명시된 서큘러 히스토리 버퍼(비트 310 = 1)를 예시한다. 예를 들어, 도 15a는 DFLTCC 실행 번호 1 이전의 서큘러 히스토리 버퍼를 도시한다; 도 15b는 DFLTCC 실행 번호 2 이전과 실행 번호 1 이후의 서큘러 버퍼를 도시한다; 도 15c는 DFLTCC 실행 번호 3 이전과 실행 번호 2 이후의 서큘러 버퍼를 도시한다; 도 15d는 DFLTCC 실행 번호 4 이전 및 실행 번호 3 이후의 서큘러 버퍼를 도시한다; 그리고 도 15e는 DFLTCC 실행 번호 4 이후의 서큘러 버퍼를 도시한다. 도 15e에 제공된 설명은 도 15 a-15d에도 적용된다. 
[0271] HBT가 서큘러이고, 제2 오퍼랜드 위치로부터 처리된 바이트들의 수가, 예를 들어, 32,768보다 적을 때, 일 예에서, 다음이 적용된다:
● 제3 오퍼랜드 위치의 바이트들의 범위에 저장된다. 상기 바이트들의 범위는, 예를 들어, 다음에 의해서 지정된 위치를 포함하고 지정된 위치에서 시작한다:
[0272] R3 + modulo 32K(HOO + HLO), 여기서
[0273] HOO: 명령이 실행되기 전의 히스토리 오프셋이고. 
[0274] HLO: 명령이 실행되기 전의 히스토리 길이이다. 
[0275] 바이트들의 범위는, 예를 들어, 다음에 의해서 지정된 위치를 포함하고 지정된 위치에서 종료된다.
[0276] R3 + 모듈로32K(HOO + HLO + BP -1), 여기서
[0277] BP: 명령 실행 중 제2 오퍼랜드 위치로부터 처리된 바이트들의 수이다. 
[0278] 방금 설명한 바이트들의 범위에 대한 저장들은, 예로서, 저장-유형 액세스 예외들, PER 스토리지 변경 이벤트들, 및 변경 비트들을 세트 하는 것에 따라서 이루어진다(subject to). 
● 저장 위치의 컨텐츠를 수정하지도 않고 필요하지도 않는 저장들이, 방금 설명한 범위에 포함되지 않은 제3 오퍼랜드 위치의 바이트들로 만들어질 수 있다. 그러한 위치에 대한 저장들은 또한 저장 유형 액세스 예외들, PER 스토리지 변경 이벤트들 및 변경 비트들을 세트 하는 것에 따라서 이루어진다(subject to).  
[0279] HBT가 서큘러이고 제2 오퍼랜드 위치로부터 처리된 바이트들의 수가, 예를 들어, 32,768보다 크거나, 또는 같을 때, 저장들은 제3 오퍼랜드 위치의 모든 바이트들로 이루어지는데, 저장 유형 액세스 예외들, PER 스토리지 변경 이벤트들 및 변경 비트들을 세트 하는 것에 따라서 이루어진다.  
[0280] 블록 계속 플래그(BCF)(377)가 0일 때, BTYPE 이 뒤따르는BFINAL를 포함하는, 3 비트 블록 헤더는 제1오퍼랜드 위치에 저장된다. 블록 헤더의 BFINAL 비트는 파라미터 블록의 블록 헤더 최종 비트(BHF)(379)와 동일하게 세트 된다. 후프만 테이블 유형(HTT)(376)가 0일 때, 블록 헤더의 BTYPE 필드는, 예를 들어 01 이진수로 세트 되고, HTT가 1일 때, 블록 헤더의 BTYPE 필드는, 예를 들어, 10 이진수로 세트 된다. 블록 헤더가 저장될 때, BFINAL 비트는 제1 오퍼랜드의 제1 바이트에서 SBB에 의해 명시된 비트에 저장된다. 그 후 BTYPE은 제1 오퍼랜드 위치에 저장된다. BCF가 1일 때, 블록 헤더가 저장되지 않는다. 
[0281] 후프만 테이블 타입(HTT)이 1일 때, 파라미터 블록에서 명시된 동적- 후프만 테이블(DHT)(367)의 압축된 포맷은 일반 오퍼랜드 데이터 예외 조건들에 대해서 검사된다. DHT의 명시된 압축된 포맷에 대한 일반 오퍼랜드 데이터 예외 조건들이 존재할 때, 상기 압축된 DHT는 무효로 되고 데이터 압축에는 사용되지 않는다. 일반 오퍼랜드 데이터 예외 조건들의 정의의 예들이 아래에서 자세히 설명된다. DHT의 압축된 포맷이, 적절한 후프만 함수 트리(a proper and functional Huffman tree)를 명시하기 위해 후프만 알고리즘에 의해서 요구되는 길이보다 더 큰, 코드 길이에 대한 비트 길이, 또는 리터럴 바이트, EOB 심볼, 중복 스트링 길이 또는 중복 스트링 포인터 거리에 대한 코드 길이를 명시할 때, 압축된 DHT는 여전히 DHT 함수를 유도하고 데이터를 압축하는 데 사용된다. 블록 계속 플래그(BCF)가 0이고 HTT가 1일 때, 파라미터 블록의 CDHT 필드(367)에 명시된, DHT의 압축된 포맷은 제1 오퍼랜드 위치에 저장된다. 
[0282] 압축 연산 동안, 제2 오퍼랜드 위치로부터의 소스 데이터는 압축된 데이터 심볼들로 인코드 된다. 인코딩의 일부로서, 소스 데이터는 히스토리와 비교된다. 매치(a match)가 발견되지 않을 때, 소스 데이터의 중간 표현은, 소스 데이터와 동일한, 리터럴 바이트이다. 매치가 발견될 때, 소스 데이터의 중간 표현은 소스 데이터의 중복 복사본을 포함하는 히스토리 내의 위치에 대한 포인터이다. 포인터는 길이와 거리로 구성된다. 길이는 히스토리의 스트링과 일치하는 소스 데이터 바이트들의 수이다. 거리는 히스토리의 끝으로부터 소스 데이터와 매치하는 스트링의 시작까지의 바이트들의 수이다. 후프만 테이블로부터의 2개의 후프만 코드 트리는, 한 예에서, 소스 데이터의 중간 표현을 압축 데이터 심볼들로 인코드 하는 데 사용된다. HTT(후프만 테이블 유형)가 0일 때, 디플레이트 표준에 의해서 기술된, FHT(고정-후프만 테이블)가 중간 결과들을 인코드 하는 데 사용되는 두 개의 후프만 코드 트리를 명시한다. HTT(376)가 1일 때, 파라미터 블록의 CDHT 필드(367)에 명시된, DHT의 압축된 표현으로부터 파생된, 동적-후프만 테이블(DHT)은 중간 결과들을 인코드 하는 데 사용되는 두 개의 후프만 코드 트리를 명시한다. 인코딩은 디플레이트 표준에 의해서 기술된 대로 수행된다. 소스 데이터의 중간 표현을 인코드 하는 데 사용될 후프만 코드를 명시하지 않는 비-범용(anon-universal) DHT가 사용될 때, 일반 오퍼랜드 데이터 예외가 인지된다. 최종 압축된 데이터 심볼의 비트들은 결과를 제1 오퍼랜드 위치에 저장하기 전에 디플레이트 표준에 의해서 명시된 순서로 정렬된다. 
[0283] 하나의 예에서, 중복-스트링 길이들은 3 내지 258 바이트들의 범위에 있다. 
[0284] 추가 소스 데이터를 처리하기 전에, 히스토리는, 여기에 설명된 대로, 갱신된다. 
[0285] 일 예에서, 프로세스는, 모든 소스 바이트가 처리될 때까지, 반복된다.
[0286] 소스 바이트들(예를 들어, 모든 소스 바이트들)이 처리되고 블록 클로징 제어(BCC)(378)가 1일 때, 엔드-오브-블록(EOB) 심볼이 제1 오퍼랜드 위치에 저장된다. 고정-후프만 테이블이 사용될 때, 후프만 코드 0000000 이진수가 EOB 심볼에 대해서 사용된다. 동적-후프만 테이블(DHT)이 사용될 때, EOB 심볼에 대해 사용되는 후프만 코드는 DHT에 의해 명시된다. EOB 심볼의 비트들은 EOB 심볼을 제1 오퍼랜드 위치에 저장하기 전에 디플레이트 표준에서 명시된 순서로 정렬된다. 
[0287] 연산의 마지막 압축 데이터 심볼(EOB 심볼 포함)이 저장할 마지막 바이트의 일부분만을 차지할 때, 한 예에서, 마지막 심볼의 일부를 포함하지 않는 비트들은 0들로서 저장된다. 
[0288] 마지막 압축된 데이터 심볼의 처리 이후, 일 실시 예에서, 다음이 발생한다:
● 모델-디펜던트 값은 파라미터 블록의 모델 버전 번호(MVN) 필드(363)에 저장된다. 
● 파라미터 블록의 서브-바이트 경계(SBB) 필드(381)가 갱신된다. 
● 파라미터 블록의 엔드-오브-블록 길이(EOBL)(389) 및 엔드-오브-블록 심볼(EOBS)(388) 필드가 갱신된다.
● 일반 레지스터 R1의 주소는 처리 비트 0을 포함했던 제1 오퍼랜드의 처리된 바이트들의 수만큼 증가되고, 일반 레지스터 R1 + 1의 길이는 같은 수만큼 감소된다. 처리 비트 0을 포함하는 제1 오퍼랜드의 처리된 바이트들 수는 처리된 출력들 비트 수와 SBB의 원래 값의 합인 피제수와, 8의 값인 제수를 갖는 정수 나눗셈의 결과인 정수 몫이다. 
● 일반 레지스터 R2의 주소는 처리된 소스 바이트들의 수만큼 증가되고, 일반 레지스터 R2 + 1의 길이는 같은 수만큼 감소된다.  
[0289] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다. 
[0290] 소스 데이터를 압축할 대, 소스 데이터는, 위에서 설명한 바와 같이, 32비트 체크 값을 생성하기 위한 입력이다. 최종 체크 값은 파라미터 블록의 체크 값 필드(387)에 저장된다. 
[0291] 데이터 압축 해제 
[0292] 일 실시 예에서, 디플레이트 변환 호출 명령의 확장 함수가 압축된 데이터 세트를 압축 안된 데이터로 디코드 하는데 사용된다. 제2 오퍼랜드 위치의 압축된 데이터 세트는 하나 또는 그 이상의 연속 압축된 데이터 블록들을 포함한다. 일 예에서, 상기 데이터 세트의 블록들은 왼쪽에서 오른쪽으로 처리되고, 한 블록의 바이트들도, 예를 들어, 왼쪽에서 오른쪽으로 처리된다. 블록들은 바이트 경계들에서 시작하거나 끝나지 않을 수 있다. 각 블록은 데이터 세트의 다른 블록과 독립적으로 디코드 된다. 일반 레지스터 R2는 데이터 세트의 제1 블록의 최좌측 바이트의 논리 주소를 명시한다. 데이터 세트의 마지막 블록은 BFINAL 비트가 1일 때 처리 중에 만나는 블록이다. 일 예에서, 처리할 블록들에는 세 가지 유형들이 있다. 블록의 컨텐츠를 디코드 하는 기술은 블록 유형(BTYPE)의 함수이다.  
[0293] 연산이 시작될 때(예를 들어, 파라미터 블록의 계속 플래그 필드 (373)가 0 일 때), 일반 레지스터 R2 , 신규 태스크 (NT) 필드(374), 및 서브-바이트 경계(SBB) 필드(381)에 의해 지정된 비트는 압축된 데이터 블록의 제1 비트(블록 헤더의 BFINAL 비트)로 해석된다. 
[0294] 확장 함수는 최근에 디코드 된 압축 안된 데이터의 갱신된 히스토리를 참조하는 것을 포함한다. 압축해제 연산이 시작되거나 재개되기 전에, 일 실시예에서, 다음이 적용된다: 
● 신규 작업(NT)(374)가 1일 때, 참조에 이용 가능한 초기 히스토리는 없다. 
● NT가 0이고, 일반 레지스터 0(HBT)의 비트 56이 0(인라인)일 때, 참조에 이용 가능한 초기 히스토리는 제1 오퍼랜드의 최좌측 바이트의 왼쪽에, 인접하여, 위치하고, 초기 히스토리의 길이는 파라미터 블록의 히스토리 길이(HL) 필드(385)에 의해 명시된다.  
● NT가 0이고, 일반 레지스터 0(HBT)의 비트 56이 1(서큘러)일 때, 참조에 이용 가능한 초기 히스토리는, 파라미터 블록의 히스토리 오프셋(HO)(386) 및 히스토리 길이(HL) 필드들에 의해서 명시된, 제3 오퍼랜드 위치에 위치한다.
[0295] 연산 동안, 전체 히스토리에 대한 페치-유형 참조들은, 히스토리의 어느 바이트들이 연산을 수행하는 데 사용되는 지에 관계없이, 만들어질 수 있다. 더욱이, 히스토리 버퍼 타입이 서큘러일 때, 전체 히스토리 버퍼(예를 들어, 32K-바이트)에 대한 페치-유형 참조들은, 히스토리의 어느 바이트들이 연산을 수행하는 데 사용되는 지에 관계없이, 만들어질 수 있다.  
[0296] 압축 해제 연산 동안, 히스토리는 갱신된다. 일반 오퍼랜드 데이터 예외 조건을 만나는 일 없이 소스 데이터를 디코드 한 이후에, 압축 안된 데이터의 최종 바이트들은 히스토리의 끝에 연결된다(concatenated). 압축 안된 데이터의 최근에 가장 많이 디코드 된 바이트들, 예를 들어 최대 32K-바이트들은, 후속 소스 데이터를 처리하는 동안 참조에 이용 가능한 갱신된 히스토리를 구성한다. 
[0297] 압축 해제 연산이 종료될 때, 일 실시 예에서, 연산을 재개하거나, 다른 연산을 시작하기 위해 이용 가능한 최종 히스토리에 대해 다음이 적용된다:
● HBT가 인라인일 때, 제1 오퍼랜드 위치에 대한 스토리지 갱신들은 또한 최종 히스토리에 대한 갱신들도 구성한다. 갱신된 제1 오퍼랜드 주소와 갱신된 HL은 결과 히스토리의 갱신된 위치와 갱신된 길이를 지정한다. 
● HBT가 서큘러형일 때 히스토리가 갱신될 때 제3 오퍼랜드 위치에 대한 스토리지 갱신이 수행된다. 제3 오퍼랜드 주소인 갱신된 HO 및 갱신된 HL은 최종 히스토리의 갱신된 위치와 갱신된 길이를 명시한다. 
[0298] 예들로서, 도 16a-16c는 DFLTCC-XPND가 명시된 디플레이트 변환 호출 명령의 다수 실행들 전 및 후에 제1 오퍼랜드에 관한 인라인 히스토리 버퍼의 위치뿐만 아니라, 각 실행이 부분 완료로 종료되는 때, 명시되는 인라인 히스토리의 예들을 예시한다. 히스토리 길이(HL)(385)는 연산 동안에 수정된다. 예를 들어, 도 16a는 DFLTCC-XPND 실행 번호 1 이전의 인라인 히스토리의 일 예를 도시한다; 도 16b는 DFLTCC-XPND 실행 번호 2 이전 및 실행 번호 1 이후의 인라인 히스토리의 예를 도시한다; 그리고 도 16c는 DFLTCC-XPND 실행 번호 2 이후의 인라인 히스토리의 예를 도시한다. 도 16c에 제공된 설명은 도 16a-16b에도 적용된다. 
[0299] 일반 레지스터 0의 비트 56에 의해서 명시된 HBT가 서큘러일 때, 히스토리는, 예를 들어, 제 3 오퍼랜드 위치에 위치된 32K-바이트 버퍼에 유지된다. 버퍼(HB) 내 히스토리의 제1바이트의 위치는 일반 레지스터 R3의 컨텐츠와 히스토리 오프셋(HO)(386)의 합에 의해서 지정된다. 히스토리의 제1바이트는 압축 안된 데이터 중에 최근에 가장 적게 처리된 바이트이다. 버퍼(HE) 내 히스토리의 마지막 바이트의 위치는, 예를 들어, 다음 방정식에 의해서 지정된다:
[0300] HE = R3 + 모듈로 32K(HO + HL - 1).
[0301] 히스토리의 마지막 바이트는 버퍼에서의 압축 안된 데이터의 최근에 가장 많이 처리된 바이트이다. 히스토리 오프셋(HO)과 히스토리 길이(HL)의 합이 제3 오퍼랜드의 크기(예를 들어, 32K-바이트들)를 초과할 때, 히스토리는 제3 오퍼랜드의 끝으로부터 제3 오퍼랜드의 시작까지 랩된다. 여기에 설명된, 도15a-15e는, 각 실행이 부분 완료로 종료될 때, DFLTCC-XPND 함수와 서큘러 히스토리 버퍼가 명시된 디플레이트 변환 호출 명령의 다수 실행들 전 및 후에 서큘러 히스토리 버퍼 내의 히스토리 위치의 예들을 예시한다. 
[0302] HBT가 서큘러이고 제1 오퍼랜드 위치에 저장된 바이트들의 수가, 예를 들어, 32,768보다 작을 때, 일 예에서, 다음이 적용된다: 
● 제3 오퍼랜드 위치 내의 바이트 범위로 저장들이 만들어진다. 바이트들의 범위는 다음에 의해 지정된 위치를 포함하고 지정된 위치로 시작한다: 
[0303] R3 + 모듈로 32K(HOO + HLO), 여기서
[0304] HOO: 명령이 실행되기 전의 히스토리 오프셋이고.
[0305] HLO: 명령이 실행되기 전의 히스토리 길이이다.
[0306] 바이트들의 범위는, 예를 들어, 다음에 의해서 지정된 위치를 포함하고 지정된 위치로 종료된다.
[0307] R3 + 모듈로32K(HOO + HLO + BP -1), 여기서
[0308] BP: 명령의 실행 동안 제1 오퍼랜드 위치에 저장된 바이트들의 수이다.
[0309] 방금 설명한 바이트들의 범위에 만들어진 저장들은 저장-유형 액세스 예외들, PER 스토리지 변경 이벤트들 및 변경 비트들을 세트 하는 것에 따라 만들어진다.
● 스토리지 위치들을 수정하지도 않고 필요하지도 않는 저장들은, 방금 설명한 범위에 포함되지 않은 제3 오퍼랜드 위치 내의 바이트들로 만들어 질 수 있다. 그러한 위치들에 대한 저장들은 또한 저장-유형 액세스 예외들, PER 스토리지 변경 이벤트들 및 변경 비트들을 세트 하는 것에 따라서 만들어 진다. 
[0310] HBT가 서큘러이고 제1 오퍼랜드 위치에 저장되는 바이트들의 수가, 예를 들어, 32,768보다 크거나, 또는 같을 때, 저장들은, 예를 들어, 제3 오퍼랜드 위치의 모든 바이트들에 대해서 만들어지고 그리고 저장-유형 액세스 예외들, PER 스토리지 변경 이벤트들 및 변경 비트를 세트 하는 것에 따라 만들어진다. 
[0311] BTYPE이 00 이진수일 때, 상기 블록은 압축된 데이터를 포함하지 않는다. 여기서 설명한 바와 같이, 도 6은 BTYPE이 00 이진수인 블록의 일 예를 예시한다. LEN 필드는 블록 내의 리터럴 바이트들의 수를 명시한다. LEN 필드의 바이트 순서는 리틀 엔디안이다. LEN 필드는 0 리터럴 바이트들을 명시할 수 있다. 블록의 리터럴 바이트는 제1 오퍼랜드 위치에 배치된다. 히스토리도 또한, 앞에서 설명한 바와 같이, 블록의 각 리터럴 바이트로 갱신된다. 
[0312] BTYPE 01 이진수일 때, 상기 블록은 고정-후프만 테이블(FHT)을 사용하여 생성된 압축된 데이터 심볼들을 포함한다. FHT는 디플레이트 표준에 의해 정의되며 블록의 일부는 아니다. 도 7은, 본 명세서에 기술된 바와 같이, BTYPE이 01 이진수인 블록의 일 예를 예시한다. 블록 헤더를 해석한 이후, 압축된 데이터 심볼들은 블록에 나타나는 순서로 디코드 된다. 블록의 바이트들은, 예를 들어, 왼쪽으로부터 오른쪽으로 처리되고 블록의 각 바이트 내의 비트들은, 예를 들어 오른쪽에서 왼쪽으로 처리된다. 일 예에서, 각 심볼은 블록의 다음 심볼을 처리하기 전에 완전하게 처리된다. 엔드-오브-블록(EOB) 심볼이 아닌 각 심볼은 리터럴 값 또는 히스토리 버퍼 내에서 이전에 디코드 된 서브스트링에 대한 포인터를 나타낸다. 이전에 디코드 된 서브 스트링은 또한 중복 스트링이라고도 한다. 한 예에서 중복 스트링 길이들의 범위는 3에서 258바이트들이다. 포인터는 서브스트링 길이와 히스토리 끝으로부터 서브스트링 시작까지의 거리를 나타내는 코드들로 구성된다. 심볼이 히스토리 내의 서브스트링을 나타낼 때, 상기 서브스트링은 히스토리 버퍼로부터 참조된다. 심볼을 디코드하는 것으로부터 나온 압축 안된 데이터는 제1 오퍼랜드 위치에 배치된다. 
[0313] 추가 소스 데이터를 처리하기 전에, 이전에 설명한 바와 같이, 히스토리는 갱신된다. 
[0314] 갱신된 히스토리는 블록의 다음 심볼을 디코드 하는 데에 적용된다. EOB 심볼을 만날 때, 블록 처리는 완료된다.
[0315] BTYPE이 10 이진수 일 때, 블록은 동적-후프만 테이블(DHT)을 사용하여 생성된 압축된 데이터 심볼들을 포함한다. 사용된 DHT의 압축된 포맷 은 압축된 데이터 블록의 엘리멘트이다. 본 명세서에서 설명된 바와 같이, 도 8은 BTYPE이 10 이진수와 같은 블록의 일 예를 예시한다. 블록 헤더를 해석한 이후, 압축된 데이터 블록 내에 제공된 DHT의 압축된 포맷은 일반 오퍼랜드 데이터 예외 조건들에 대해 검사된다. 일반 오퍼랜드 데이터 예외 조건이 제공된 DHT의 압축된 포맷에 대해 존재할 때, DHT의 압축된 포맷은 무효라 하고 데이터 압축을 해제하는 데 사용되지 않는다. DHT의 압축된 포맷이, 적절한 후프만 함수 트리를 명시하기 위한 후프만 알고리즘에 의해서 요구되는 길이보다 더 큰, 코드 길이에 대한 비트 길이, 또는 리터럴 바이트, EOB 심볼, 중복 스트링 길이 또는 중복 스트링 포인터 거리에 대한 코드 길이를 명시할 때, 압축된 DHT는 여전히 기능적 DHT를 유도하고 데이터를 압축하는 데 사용된다. DHT의 압축된 포맷을 검사한 이후, 압축된 데이터 심볼들은 블록에 나타나는 순서로 디코드 된다. 블록의 바이트들은, 예를 들어, 왼쪽에서 오른쪽으로 처리되고, 블록의 각 바이트 내의 비트들은, 예를 들어, 오른쪽에서 왼쪽으로 처리된다. 한 예에서 각 심볼은 블록의 다음 심볼을 처리하기 전에 완전하게 처리된다. BTYPE이 10 이진수인 블록 내의 심볼들의 처리는 BTYPE이 01이진수인 블록의 심볼들의 처리에 대해 앞에서 설명한 것과 동일하지만, 전자는 심볼 디코하기 위해 제공된 DHT를 사용하고 후자는 FHT를 사용하여 심볼들을 디코드 한다. 압축된 데이터 심볼을 디코드 하는 데 사용할 후프만 코드를 명시하지 않는 비-범용 DHT가 제공될 때, 일반 오퍼랜드 데이터 예외가 인지된다.  
[0316] 제2 오퍼랜드를 압축 해제할 때, 압축 안된 데이터가 체크 값(예를 들어, 32비트 체크 값)을 생성하는 것에 대한 입력이다. 최종 체크 값은 파라미터 블록의 체크 값 필드(387)에 저장된다. 
[0317] 상기 데이터 세트의 마지막 블록을 처리한 이후, 일 실시 예에서, 다음이 발생한다: 
● 모델-디펜던트 값은 파라미터 블록의 모델 버전 번호(MVN) 필드(363)에 저장된다. 
● 파라미터 블록의 서브-바이트 경계(SBB) 필드(381)가 갱신된다. 
● 일반 레지스터 R1에서의 주소는 제1 오퍼랜드 위치에 저장된 바이트들의 수만큼 증가되고, 일반 레지스터 R1 + 1에서의 길이는 같은 수만큼 감소된다. 
● 일반 레지스터 R2 에서의 주소는 처리 비트 0을 포함했던 제2 오퍼랜드의 처리된 바이트들의 수만큼 증가되고, 일반 레지스터 R2 + 1에서의 길이는 같은 수만큼 감소된다. 처리 비트 0을 포함했던 제2 오퍼랜드의 처리된 바이트들의 수는 처리된 입력 비트 수와 SBB의 원래 값의 합인 피제수와, 8의 값인 제수를 갖는 정수 나눗셈의 결과인 정수 몫이다.  
[0318] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다. 
[0319] 제1오퍼랜드의 길이가 명령의 실행의 시작에서 0 일 때, 제1 오퍼랜드는 액세스되지 않고, 일반 레지스터들 R1 과 R1 + 1에서의 제1 오퍼랜드 주소 및 제1 오퍼랜드 길이는, 각각, 변경되지 않는다. 이는 명령 실행 시작 시 CF 필드(373)의 값이 0 또는 1일 때 적용된다.  
[0320] 제2 오퍼랜드의 길이가 명령의 실행의 시작에서 0 일 때, 제2 오퍼랜드는 액세스되지 않고, 일반 레지스터들 R2 및 R2 + 1에서의 제2 오퍼랜드 주소 및 제2 오퍼랜드 길이는, 각각, 변경되지 않는다. 제2 오퍼랜드 길이는, 일 실시예에서, 다음의 경우에 대해서 명령 실행 시작 시에는 0이다.
● 명령이 이전에 실행되었을 때 명령은 다시 실행되고(예를 들어, 파라미터 블록의 CF 필드(373)가 명령의 실행 시작 시에 1이고) 전체 제2 오퍼랜드는 처리되었다. 
[0321] 데이터가 제2 오퍼랜드 위치로부터 처리되었을 지라도, 압축 해제 연산은 어떠한 결과들도 제1 오퍼랜드 위치에 저장함이 없이 종료될 수 있다. 이것은, 일 예에서, 오직 제2 오퍼랜드 위치로부터 만 처리된 데이터가 다음의 압축된 데이터 블록 엘리멘트들 중 어느 하나를 포함할 때 발생한다:
● 블록 헤더. 
● 블록 유형이 00 이진수인 블록의 LEN 필드. 
● 블록 유형이 00 이진수인 블록의 NLEN 필드. 
● 동적-후프만 테이블의 압축된 포맷. 
● 엔드-오브-블록(EOB) 심볼. 
[0322] 다음 조건들은, 하나 또는 이상의 실시 예들에서, 디플레이트 변환 호출 명령을 실행하는 것에 적용된다: 
[0323] 일반적인 오퍼랜드 데이터 예외는, 한 예에서, DFLTCC-GDHT 함수가 명시되고 다음 조건이 발생할 때, 인지된다. 
● 파라미터 블록 버전 번호(362)로 명시된, 파라미터 블록의 포맷은 모델에 의해서 지원되지 않는다. 
[0324] 일 예에서, DFLTCC-CMPR 함수가 명시되고 다음 조건들 중 어느 하나가 발생할 때 일반 오퍼랜드 데이터 예외가 인지된다: 
● 파라미터 블록 버전 번호(362)에 의해서 명시된, 파라미터 블록의 포맷은 모델에 의해서 지원되지 않는다.
● NT(374)는 0이고 HL(385)는, 예를 들어, 32,768보다 크다. 
● HTT(376)은 1이고 CDHTL(366)은, 예를 들어, 42보다 작거나, 또는, 예를 들어, 2283보다 크다. 
● HTT(376)은 1이고 CDHTL(366)은 CDHT 필드(367)에 명시된 DHT의 압축된 포맷 길이와 같지 않는다.
● HTT(376)은 1이고 DHT의 압축된 포맷의 HLIT 서브-엘리멘트는, 예를 들어, 29보다 크다(무효 DHT). 
● HTT(376)은 1이고 DHT의 압축된 포맷의 HDIST 서브-엘리멘트는, 예를 들어, 29보다 크다(무효 DHT). 
● HTT(376)는 1이고 DHT의 압축된 포맷(CDHT 필드(367)의 컨텐츠)은 하나의 코드를 명시하는데, 상기 코드는, 예를 들어 압축된 DHT에 대해 정의된 19개의 가능한 코드 길이들에 대한 비트 길이들을 명시하는 코드들의 시퀀스 내에 있고, 후프만 함수 트리(functional Huffman tree)를 명시하기 위해 후프만 알고리즘에 의해서 요구되는 길이보다 작다(무효 DHT).
● HTT(376)은 1이고 DHT의 압축된 포맷(CDHT 필드(367)의 컨텐츠)은, 리터럴 바이트들, EOB 심볼, 및 중복 스트링 길이들로 구성되는 엘리멘트들의 세트에 대한 제1 코드 길이로서, 코드 길이, 예를 들어, 16 (이전 코드 길이 복사)을 명시한다(무효 DHT).
● HTT(376)은 1이고 DHT의 압축된 포맷(CDHT 필드(367)의 컨텐츠)은, 리터럴 바이트들에 대한 코드 길이들을 명시하는 코드들의 시퀀스 내에 있는, 코드를 지정하고, 상기 코드는 압축된 DHT내에 이전에 명시된, 참조된 코드 길이들의 세트를 나타내도록 결정된 코드들 중 어떤 것에도 매치하지 않는다(무효 DHT). 
● HTT(376)은 1이고 DHT의 압축된 포맷(CDHT 필드(367)의 컨텐츠)은 EOB 심볼에 코드 길이 0(CL0)을 할당하는 코드를 명시한다. 이 경우에, 대응 DHT는 EOB 심볼를 나타내는 후프만 코드를 명시하지 않는다(무효 DHT).
● HTT(376)은 1이고 DHT의 압축된 포맷(CDHT 필드(367)의 컨텐츠)은 중복 스트링 길이들 및 포인터 거리들에 대한 코드 길이들을 명시하는 코드들의 시퀀스에 있는 코드를 명시하고, 상기 코드는, 압축된 DHT에 이전에 명시된 바와 같이, 참조된 코드 길이들의 세트를 나타내도록 결정된 코드들 중 어느 것에도 매치되지 않는다(무효 DHT).  
● HTT(376)은 1이고 DHT의 압축된 포맷(CDHT 필드(367)의 컨텐츠)은, HLIT 필드, HDIST 필드의 값들과, 그리고, 예를 들어, 258의 합에 의해서 명시된, DHT의 후프만 코드들의 수보다 큰 코드 길이들의 수를 명시한다. 이것은, 예들로서, 코드 길이들 16, 17, 및 18의 부적절한 사용들로 가능하다(무효 DHT).
● HTT(376)은 1이고 DHT의 압축된 포맷(CDHT 필드(367)의 컨텐츠)은, 후프만 함수 트리를 명시하기 위해 후프만 알고리즘에 의해서 요구되는 길이보다 작은, 리터럴 바이트들, EOB 심볼 및 중복 스트링 길이들의 세트에 대한 코드 길이를 명시한다(무효 DHT).
● HTT(376)은 1이고 DHT의 압축된 포맷(CDHT 필드(367)의 컨텐츠)은, 후프만 함수 트리를 명시하기 위해 후프만 알고리즘에 의해서 요구되는 길이보다 작은, 중복 스트링 포인터 거리들의 세트에 대한 코드 길이를 명시한다(무효 DHT).
● CPU는 제2 오퍼랜드에서의 리터럴 바이트를 나타내기 위해 압축된 데이터 심볼을 생성하려고 시도하고, CDHT 필드의 컨텐츠로부터 파생된 DHT는 범용이 아니며(non-universal) 해당 리터럴 바이트에 대응하는 후프만 코드를 명시하지 않는다.
● CPU는 제2 오퍼랜드에서의 중복 스트링을 나타내기 위해 압축된 데이터 심볼을 생성하려고 시도하고 CDHT 필드의 컨텐츠로부터 파생된 DHT는 범용이 아니며(non-universal) 해당 중복 스트링 길이 또는 포인터 거리에 대응하는 후프만 코드를 명시하지 않는다. 
[0325] 예를 들어, DFLTCC-XPND 함수가 명시되고, 예들로서, 아래의 조건들 중 어느 하나가 발생할 때 일반적인 오퍼랜드 데이터 예외가 인지된다:
● 파라미터 블록 버전 번호(362)에 의해서 명시된, 파라미터 블록의 포맷은 모델에 의해서 지원되지 않는다.
● NT(374)가 0이고 HL(385)은 32,768보다 크다. 
● BTYPE이 11 이진수인 압축된 데이터 블록을 만났다(encountered).
● BTYPE이 00 이진수이고 NLEN이 LEN의 1의 보수와 같지 않은 압축된 데이터 블록을 만났다. 
● DHT의 압축된 포맷(BTYPE이 10 이진수와 같은 압축된 데이터 블록의 컨텐츠)을 만났고 압축된 DHT의 HLIT 서브-엘리멘트가, 예를 들어, 29보다 크다(무효 DHT). 
● DHT의 압축된 포맷(BTYPE이 10 이진수와 같은 압축된 데이터 블록의 컨텐츠)을 만났고 압축 DHT의 HDIST 서브-엘리멘트가, 예를 들어, 29보다 크다(무효 DHT).             
● DHT의 압축된 포맷(BTYPE이 10 이진수와 같은 압축된 데이터 블록의 컨텐츠)을 만났고 이는 하나의 코드를 명시하며, 상기 코드는, 예를 들어 압축된 DHT에 대해 정의된 19개의 가능한 코드 길이들에 대한 비트 길이들을 명시하는 코드들의 시퀀스 내에 있고, 후프만 함수 트리(functional Huffman tree)를 명시하기 위해 후프만 알고리즘에 의해서 요구되는 길이보다 작다(무효 DHT).             
●  DHT의 압축된 포맷(BTYPE이 10 이진수와 같은 압축된 데이터 블록의 컨텐츠)을 만났고, 이는 코드 길이를 명시하며, 상기 코드 길이는, 리터럴 바이트들, EOB 심볼, 및 중복 스트링 길이들로 구성되는 엘리멘트들의 세트에 대한 제1 코드 길이로서, 예를 들어, 16 (이전 코드 길이 복사)을 명시한다(무효 DHT).
● DHT의 압축된 포맷(BTYPE이 10 이진수와 같은 압축된 데이터 블록의 컨텐츠)을 만났고, 이는 하나의 코드를 명시하며, 상기 코드는, 리터럴 바이트들에 대한 코드 길이들을 명시하는 코드들의 시퀀스 내에 있으며, 상기 코드는 압축된 DHT내에 이전에 명시된, 참조된 코드 길이들의 세트를 나타내도록 결정된 코드들 중 어떤 것에도 매치하지 않는다(무효 DHT). 
● DHT의 압축된 포맷(BTYPE이 10 이진수와 같은 압축된 데이터 블록의 컨텐츠)을 만났고, 이는 하나의 코드를 명시하며, 상기 코드는, EOB 심볼에 코드 길이 0(CL0)을 할당한다. 이 경우에, 대응 DHT는 EOB 심볼을 나타내는 후프만 코드를 명시하지 않는다(무효 DHT).
● DHT의 압축된 포맷(BTYPE이 10 이진수와 같은 압축된 데이터 블록의 컨텐츠)을 만났고, 이는 하나의 코드를 명시하며, 상기 코드는, 중복 스트링 길이들 및 포인터 거리들에 대한 코드 길이들을 명시하는 코드들의 시퀀스에 있고, 상기 코드는, 압축된 DHT에 이전에 명시된 바와 같이, 참조된 코드 길이들의 세트를 나타내도록 결정된 코드들 중 어느 것에도 매치되지 않는다(무효 DHT).  
● DHT의 압축된 포맷(BTYPE이 10 이진수와 같은 압축된 데이터 블록의 컨텐츠)을 만났고, 이는 코드 길이들의 수를 명시하며, 상기 코드 길이들의 수는, HLIT 필드, HDIST 필드의 값들과, 그리고, 예를 들어, 258의 합에 의해서 명시된, DHT의 후프만 코드들의 수보다 크다. 이것은, 예들로서, 코드 길이들 16, 17, 및 18의 부적절한 사용들로 가능하다(무효 DHT).
● DHT의 압축된 포맷(BTYPE이 10 이진수와 같은 압축된 데이터 블록의 컨텐츠)을 만났고, 이는 하나의 코드 길이를 명시하며, 상기 코드 길이는, 후프만 함수 트리를 명시하기 위해 후프만 알고리즘에 의해서 요구되는 길이보다 작은, 리터럴 바이트들, EOB 심볼 및 중복 스트링 길이들의 세트에 대한 코드 길이이다(무효 DHT).
● DHT의 압축된 포맷(BTYPE이 10 이진수와 같은 압축된 데이터 블록의 컨텐츠)을 만났고, 이는 하나의 코드 길이를 명시하며, 상기 코드 길이는, 후프만 함수 트리를 명시하기 위해 후프만 알고리즘에 의해서 요구되는 길이보다 작은, 중복 스트링 포인터 거리들의 세트에 대한 코드 길이이다(무효 DHT).
● BTYPE이 10 이진수와 같은 압축된 데이터 블록에서 만났던, 압축된 데이터 심볼은, 동일한 블록에 있는 DHT의 압축된 포맷으로부터 파생된 범용이 아닌(non-universal) DHT에 의해 정의되지 않은 후프만 코드를 명시한다. 이 경우에, 일반 오퍼랜드 데이터 예외를 인지할 목적을 위해, 처리에 이용 가능한 제2 오퍼랜드의 비트들의 수는 모델에 따라 다르다. 더 구체적으로, 정의되지 않은 코드를 디코드 하려고 시도하는 모델은, 더 적은 비트를 처리한 후에 예외가 결정될 수 있을지라도, 예외를 인지하기 전에, 예를 들어, 15비트를 처리할 수 있다. 
● 압축된 데이터 심볼을 만났고, 상기 심볼은 중복 스트링 포인터이며 심볼 처리 지점에서 이용 가능한 히스토리의 길이보다 큰 거리를 명시한다.
● BTYPE이 10 이진수와 같은 압축된 데이터 블록에서 만났던, 압축된 데이터 심볼은, 무효 코드를 명시한다(예를 들어, 중복 스트링 길이에 대해 11000110 또는 11000111 이진수의 코드를, 또는 중복 스트링 포인터 거리에 대해 11110 또는 11111 이진수의 코드를). 이 경우에, 일반 오퍼랜드 데이터 예외를 인지할 목적으로, 처리에 이용 가능한 제2 오퍼랜드의 비트들의 수는 모델에 따라 다르다. 더 구체적으로, 무효 코드를 디코드 하려고 하는 모델은, 더 적은 비트를 처리한 후 예외가 결정될 수 있을 지라도, 예외를 인지하기 전에, 예를 들어, 중복 스트링 길이의 경우에는 8비트를, 또는 중복 스트링 포인터 거리의 경우에는 5비트를 처리할 수 있다. 
[0326] 일반 오퍼랜드 데이터 예외가 인지될 때, 파라미터 블록의 연산 종료 보조 코드(OESC)(365) 및 모델 버전 번호(MVN) 필드(363)가 상기 예외와 관련된 추가 정보를 제공하도록 갱신되더라도, 연산은 억제된 것으로 간주된다.  
[0327] DFLTCC-CMPR 또는 DFLTCC-XPND 함수가 실행되고 있고 일반 오퍼랜드 데이터 예외가 제2 오퍼랜드에 대해 인지될 예정일 때, 결과는 예외가 인지되던지 또는 연산이 부분 완료로 종료되고 조건 코드, 예를 들어3이 세트 되던지 둘 중에 하나가 된다. 만일 조건 코드 3이 세트 되었다면, 예외는, 동일한 오퍼랜드들의 처리를 계속하기 위해 명령이 다시 실행되고 예외 조건이 여전히 존재할 때, 인지될 것이다.  
[0328] 기타 조건들은 예를 들어, 다음과 같다:    
[0329] 명령의 실행은 인터럽트 가능하다. 인터럽트가 발생할 때 일반 레지스터들 R1 및 R2의 주소들, 일반 레지스터들 R1 + 1 및 R2 + 1의 길이들, 및 파라미터 블록의 특정 필드들이 갱신되고, 그리하여 명령은, 재실행 될 때, 인터럽션 지점에서 재개한다. 
[0330] DFLTCC-CMPR 또는 DFLTCC-XPND 함수가 실행되고, 액세스 예외가 제1 또는 제2 오퍼랜드에 대해 인지될 예정일 때, 결과는 예외가 인지되던지 또는 연산이 부분 완료로 종료되고 조건 코드, 예를 들어3이 세트 되던지 둘 중에 하나가 된다. 만일 조건 코드 3이 세트 되었다면, 예외는, 동일한 오퍼랜드들의 처리를 계속하기 위해 명령이 다시 실행되고 예외 조건이 여전히 존재할 때, 인지될 것이다.  
[0331] 이 CPU, 다른 CPU들 및 채널 프로그램들에 의해 관찰된 바와 같이, 파라미터 블록, 제1, 제2, 및 제3 오퍼랜드들에 대한 참조들은 다수-액세스 참조들일 수 있고, 이들 스토리지 위치들에 대한 액세스들은 반드시 블록 동시(block concurrent)인 것은 아니며, 이들 액세스들 또는 참조들의 시퀀스는 정의되어 있지 않다. 
[0332] 일 실시예에서, 만일 DFLTCC-CMPR 또는 DFLTCC-XPND 함수가 명시되고 다음 중 어느 하나가 적용된다면, 결과들은 예측할 수 없다. 
● 파라미터 블록이 제1 또는 제2 오퍼랜드와 중첩된다.
● 제1 오퍼랜드가 제2 오퍼랜드와 중첩된다.
● 명시된 히스토리 버퍼 유형(HBT)가 서큘러이고 제3 오퍼랜드가 제1 오퍼랜드, 제2 오퍼랜드 또는 파라미터 블록과 중첩된다.
● 명시된 히스토리 버퍼 유형(HBT)이 인라인이고, DFLTCC-CMPR 함수가 명시되며, 그리고 히스토리가 제1 오퍼랜드 또는 파라미터 블록과 중첩된다.
● 명시된 히스토리 버퍼 유형(HBT)이 인라인이고, DFLTCC-XPND 함수가 명시되며, 히스토리가 제2 오퍼랜드 또는 파라미터 블록과 중첩된다. 
[0333] 특정 상황들에서, 처리된 바이트들의 CPU 결정된 수가 0인 디플레이트 변환 호출 명령의 실행을 종료하였음에도 불구하고, 데이터는 제1오퍼랜드 위치에 저장되었을 수 있고, 적용 가능할 때, 데이터는 제3 오퍼랜드 위치에 저장되었을 수도 있으며, 적용 가능할 때, 대응 변경 비트들이 세트 되었을 수도 있다. 이들 경우들에서, 파라미터 블록 및 일반 레지스터들의 컨텐츠는 원래 값들로부터 수정되지 않았다. 이들 상황들은 CPU가 디플레이트 변환 호출 명령을 실행하는 동안 정지 연산(a quiescing operation)을 수행하거나 또는 CPU를 재시도할 때 발생할 수 있다. 
[0334] 다음은 디플레이트 변환 호출 명령의 실행으로부터 생성되는 최종 조건 코드들(Resulting Condition Codes)의 예들이다:
[0335] 0 정상 완료 
[0336] 1 제1 오퍼랜드 길이가 연산을 완료하기에 충분하지 않다.
[0337] 2 제2 오퍼랜드 길이가 연산을 완료하기에 충분하지 않다(DFLTCC-XPND).
[0338] 3 CPU가 결정한 처리된 데이터 양 
[0339] 프로그램 예외들:
● 액세스(페치, 오퍼랜드 2, 인라인 히스토리, 페치 및 저장, 파라미터 블록, 오퍼랜드 1, 오퍼랜드 3)
● DXC 0을 갖는 데이터, 일반 오퍼랜드
● 연산(만일 디플레이트 변환 퍼실리티가 설치되지 않다면)
● 사양 
● 트랜잭션 제한  
[0340] 디플레이트 변환 호출 명령에 대한 실행의 우선 순위들의 예들은 아래와 같다:
[0341] 1.-6.  일반적인 경우의 프로그램 인터럽션 조건들의 우선순위와 동일한 우선순위를 갖는 예외들.
[0342] 7.A  제2 명령 하프워드에 대한 액세스 예외들.
[0343] 7.B  연산 예외.
[0344] 7.C  트랜잭션 제한.
[0345] 8.A  무효 함수 코드 또는 무효 레지스터 번호로 인한 명세 예외.
[0346] 8.B 4K-바이트 경계 상에 지정되지 않은 파라미터 블록으로 인한 명세 예외.
[0347] 8.C 4K-바이트 경계 상에 지정되지 않은 서큘러 히스토리 버퍼로 인한 명세 예외.
[0348] 9.  파라미터 블록에 대한 액세스에 대한 액세스 예외들.
[0349] 10.  파라미터 블록의 명시된 포맷이 모드에 의해서 지원되지 않을 때 일반 오퍼랜드 데이터 예외.
[0350] 11.  명령 실행 시작 시 0과 같게 되는 제2 오퍼랜드 길이와 0과 같게 되는CF로 인한 명세 예외.
[0351] 12.  명령의 실행 시작 시 0과 같게 되는 제1 오퍼랜드 길이로 인한 조건 코드 1 및 DFLTCC-CMPR이 명시된다.
[0352] 13.A  32,768보다 큰 히스토리 길이 필드로 인한 일반 오퍼랜드 데이터 예외 및 DFLTCC-CMPR 또는 DFLTCC-XPND가 명시될 때, 신규 작업 필드는 0이다.
[0353] 13.B  제1 오퍼랜드에 대한 액세스에 대한 액세스 예외들 및 제1 오퍼랜드 길이가 0이 아니다.
[0354] 13.C  제2 오퍼랜드에 대한 액세스에 대한 액세스 예외들 및 제2 오퍼랜드 길이가 0이 아니다.
[0355] 13.D  명령 실행 시작 시 명시된 인라인 히스토리에 대한 액세스에 대한 액세스 예외들.
[0356] 13.E  제3 오퍼랜드에 대한 액세스에 대한 액세스 예외들.
[0357] 14.A  위의 항목들 10 및 13.A에 포함된 조건들 이외의 조건들로 인한 일반 오퍼랜드 데이터 예외.
[0358] 14.B  위의 항목 12에 포함된 조건들 이외의 조건들로 인한 조건 코드 1, 2 또는 3. 
[0359]15.  조건 코드 0. 
[0360] 사용하기 전에, DHT의 압축 포맷은 일반적으로 오퍼랜드 데이터 예외 조건의 존재 여부에 대해서 검사된다(examined). 일반적인 오퍼랜드 데이터 예외 조건으로 인해 DHT의 압축된 포맷의 길이가 정확히 정의되지 않을 때, 해석된 길이는 조건에 따라 달라질 수 있고, 모델에 따라 달라질 수 있으나, 예를 들어 286바이트를 초과하지는 않는다. 그 결과, DFLTCC-XPND 함수가 명시되고 일반 오퍼랜드 데이터 예외 조건을 갖는 DHT의 압축된 포맷이, 예를 들어, 제2 오퍼랜드의 최우측 286바이트에서 만났을 때(encountered), 예외 조건(우선순위 14.A) 또는 조건 코드 2(우선순위 14.B)가 인지되는지 여부는 모델에 따라 다르다. 
[0361] 프로그래밍 노트들의 예들이 아래에 제공된다:
1. 데이터를 압축하거나 또는 압축 해제할 때, 디플레이트 변환 호출 명령이 실행되는 최소 횟수로 연산이 수행될 때 전반적으로 더 효율적일 수 있다. 즉, 큰 오퍼랜드로 DFLTCC를 실행하는 것이 작은 오퍼랜드들로 여러 번 DFLTCC를 실행하는 것보다 더 효율적일 수 있다. 
2. 압축 및 압축 해제 연산들을 위해, 조건 코드 3이 세트 될 때, 명령에 의해서 사용된 일반 레지스터들과 파라미터 블록은 갱신되어 프로그램이 연산을 계속하도록 명령으로 다시 분기할 수 있게 한다. 
3. 일 실시예에서, 디플레이트 변환 호출 명령은 명령의 파라미터들에 의해서 명시된 처리의 CPU 결정된 서브-부분을 수행한 후에 완료될 수 있다. 모든 명시된 처리 대신에 CPU-결정된 처리 양만 수행한 후 명령이 완료될 때, 명령은 조건 코드 3을 세트 한다. 그러한 완료 시, PSW(프로그램 상태 워드)의 명령 주소는 다음 순차 명령을 지정하고, 명령의 오퍼랜드 파라미터들은 명령 처리를 재개할 수 있도록 조정되며, 명령 처리의 재개는 명령을 다시 실행하기 위해 명령으로 다시 분기함으로써 이루어진다. 명령이 모든 명시된 처리를 수행하였을 때, 3 이외의 조건 코드를 세트 한다.
4. DFLTCC-CMPR 함수가 명시되고 연산이 파라미터 블록의 서브-바이트 경계(SBB) 필드에서 0이 아닌 값으로 종료될 때, 연산은 최종 제1 오퍼랜드 주소에 의해서 지정된 바이트에 저장하는 것을 포함하였다. DFLTCC-XPND 함수가 명시되고 연산이 SBB에서 0이 아닌 값으로 종료될 때, 연산은 최종 제2 오퍼랜드 주소에 의해서 지정된 바이트를 페치하는 것을 포함하였다.
5. 연산이 0이 아닌 조건 코드 세트로 종료될 때, 파라미터 블록의 CSB 필드(392)는 부분적으로 처리된 데이터를 포함할 수 있으며 프로그램은 연산을 재개하기 위해 명령을 다시 실행할 것이 예상된다.
6. 작업이 0이 아닌 조건 코드 세트로 종료된 후 작업을 재개하기 위해 명령을 다시 실행하기 전에 프로그램은 파라미터 블록의 필드를 수정해서는 안된다. 그렇지 않으면 결과를 예측할 수 없다.
7. DFLTCC-GDHT 함수가 명시될 때, 생성된 DHT의 압축된 표현은, 후프만 알고리즘에 따라, 3개의 적절한-완전(proper-full) 후프만 코드 트리를 기술한다. 즉, 불완전(under-full) 후프만 코드 트리는 기술되지 않는다. 불완전 후프만 코드 트리는 적절한 후프만 함수 트리(a proper and functional Huffman tree)를 명시하기 위해 후프만 알고리즘에 의해서 요구되는 길이보다 큰 엘리멘트에 대한 코드 길이들을 명시하는 DHT의 압축된 표현으로부터 파생된다.
[0362]DFLTCC-CMPR 함수가 명시되고, HTT가 1이며, 그리고 DHT의 압축된 표현이 불완전 후프만 코드 트리의 기술을 포함할 때, 압축된 데이터 결과들은, 디플레이트 표준을 준수하고 결과들을 원래 압축 안된 데이터로 변환할 수 있는, 모든 디코더들이 아니라, DFLTCC-XPND를 사용하여 원래의 압축 안된 데이터로 변환될 수 있다. 예를 들어, 이 것은, DFLTCC-CMPR 함수에 대해 프로그램에 의해서 명시된 DHT의 압축된 표현이 DFLTCC-GDHT 함수를 수행한 것의 결과로서 생성되지 않았을 때, 발생할 수 있다.
8. DFLTCC-CMPR 함수가 조건 코드 1 세트로 종료될 때, 파라미터 블록의 서브-바이트 경계(SBB) 필드(381)에 저장된 결과는 000 이진수이다. 이 시나리오를 인지하는 것은 디플레이트 변환 호출 명령과 함께 사용할 출력 버퍼들을 할당하는 프로그램과 관련될 수 있다. 
[0363] 여기서 기술한 바와 같이, 본 발명의 일 실시 예에서,단일 명령(a single instruction )(예를 들어, 하드웨어/소프트웨어 인터페이스에서 단일 아키텍처된 머신 명령, 예를 들어,디플레이트 변환 호출 명령)이 범용 프로세서를 사용하여 압축 및/또는 압축 해제 연산들을 수행하기 위해 제공된다. 이 명령은, 예를 들어, 명령 세트 아키텍처(Instruction Set Architecture: ISA)에 정의된 하드웨어 명령이다. 그 결과, 압축 및/또는 압축해제 연사들과 관련된 프로그램의 복잡성이 감소된다. 또한, 연산들의 성능, 그리고, 따라서 프로세서의 성능이 개선된다. 
[0364] 바람직하게도, 상기 디플레이트 변환 호출 명령은, I/O 디바이스, I/O 인터페이스를 통해 연결된 애플리케이션 특정 디바이스, 또는 기타 유형의 특수 목적 프로세서들과 같은 특수 목적 프로세서가 아닌, 범용 프로세서(예를 들어, 중앙 처리 유닛, 이를 여기서는 프로세서라 함) 상의, 예를 들어, 프로그래머에 의해서, 디스패치 된다(dispatched). 소프트웨어 구현과 비교하여, 본 발명에서 개시된 명령을 실행하는 것은 동일한 작업을 수행하기 위해 훨씬 더 적은 실행 사이클을 요구한다. 또한, 연산을 I/O 디바이스에 디스패치하는 것과 비교하여, 본 발명에서 개시된 명령을 실행하는 것은 운영 체제에 의한 I/O 연산들을 요구하지 않으며 연산이 완료되기를 대기하는 동안 작업 스위치(a task switch)를 수행하도록 운영 체제를 트리거(trigger) 하지 않는다. 
[0365] 다양한 필드들 및 레지스터들이 기술되었을지라도, 본 발명의 하나 또는 그 이상의 실시 예들은, 다른, 추가의, 또는 더 적은 필드들 또는 레지스터들, 또는 다른 크기들의 필드들 및 레지스터들 등을 사용할 수 있다. 많은 변형들이 가능하다, 예를 들어, 묵시적 레지스터들이 명령의 명시적으로 명시된 레지스터들 또는 필드들 대신에 사용될 수 있고 및/또는 명시적으로 명시된 레지스터들 또는 필드들이 묵시적 레지스터들 또는 필드들 대신에 사용될 수 있다. 다른 변형도 또한 가능하다. 
[0366] 디플레이트 변환 호출 명령을 사용하는 것의 한 실시 예가 도 17을 참조하여 기술된다. 일 예에서, 범용 프로세서와 같은 프로세서 상에서 실행되는 프로그램은, 스토리지의 파라미터 블록에서 수행될 연산의 세부사항들을 명시하고 파라미터 블록의 위치를 명시한다(단계 1700). 예를 들어, 파라미터 블록(예를 들어, 파라미터 블록(340, 360 또는 370))의 필드들 중 하나 또는 그 이상이 수행될 함수에 따라 제공되거나 세트 된다. 또한, 프로그램은 수행될 연산(예: 쿼리, 생성, 압축, 확장 등)을 명시한다(단계 1702). 추가로, 프로그램은 스토리지에서 입력 데이터의 위치 및 양을 명시하거나 갱신한다(단계 1704). 또한 프로그램은 스토리지에서 결과 버퍼의 위치 및 크기를 명시하거나 갱신한다(단계 1706).
[0367] 그 후, 프로그램은 디플레이트 변환 호출 (DFLTCC) 명령을 실행한다(단계 1708). 일 예에서, 명령이 범용 프로세서 상에 디스패치 된다. 예들로서, 명령은 범용 프로세서에서 처리되거나, 또는 적어도 부분적으로 범용 프로세서에 연결되고 I/O 인터페이스를 사용함이 없이 액세스할 수 있는 하드웨어에 의해 처리된다. 
[0368] 명령 종료에 기초하여, 실행으로부터 발생하는 조건 코드가 제1의 정의된 값, 예를 들어, 0과 같은 지에 관한 결정이 내려진다(질의 단계 1710). 만일 조건 코드가 제1의 정의된 값과 같다면, 명령의 처리는 완료된다(단계 1712). 그러나, 만일 조건 코드가 제1의 정의된 값과 같지 않다면, 조건 코드가 제2의 정의된 값, 예를 들어, 3과 같은 지에 관한 추가의(further) 결정이 내려진다(질의 단계 1714). 만일 조건 코드가 처리될 추가의 데이터가 있음을 표시하는 제2의 정의된 값과 같다면, 명령은 재실행된다(단계 1708). 그러나 만일 조건 코드가 제2의 정의된 값과 같지 않다면, 조건 코드가 제3의 정의된 값, 예를 들어, 1에 세트 되었는 지에 관한 다른(another) 결정이 내려진다(질의 단계 1716). 만일 조건 코드가 제1오퍼랜드 길이가 불충분함을 표시하는 제3의 정의된 값에 세트 되었다면, 처리는 단계 1706으로 진행하여 계속되고; 그렇지 않으면, 제2 오퍼랜드 길이가 함수에 대해서 불충분하고 처리는 단계 1704로 진행하여 계속된다. 
[0369] 표시된 바와 같이, 디플레이트 변환 호출 명령은 단일 데이터 스트림을 압축 또는 압축 해제하기 위해 여러 번 실행될 수 있다. 따라서, 본 발명의 일 실시 예에서, 디플레이트 변환 호출 명령은 프로그램이 하나의 버퍼(예를 들어, 32K-바이트 버퍼)를 선언하는 메커니즘을 제공하는 속성(an attribute)을 포함하며, 이는 디플레이트 변환 호출 명령의 다수의 실행들에 걸쳐 있는 연산 동안 처리된 압축 안된 데이터의 히스토리를 축적하기 위해 사용된다. 상기 버퍼는, 예를 들어, 서큘러 히스토리 버퍼이다. 
[0370] 본 발명의 일 실시 예에서, 디플레이트 변환 호출 명령은 서큘러 히스토리 버퍼의 사용을 표시하기 위해 묵시적 레지스터(예를 들면, GR0.56)에서 표시자(indicator) (예를 들면, 비트)를 사용한다. 서큘러 히스토리 버퍼가 표시되고 디플레이트 변환 호출 명령에 의해 수행될 명시된 함수가 데이터를 압축하거나 또는 압축 해제할 때, 명령의 필드(예를 들어, R3 )는, 예를 들어 32 K-바이트 버퍼의 메모리 내 위치를 명시하는데, 이는 프로세서가 연산의 시작 시로부터 히스토리를 페치 하고 연산의 종료 시까지 히스토리를 저장하는 데 사용하기 위한 것이다. 서큘러 히스토리 버퍼 내 히스토리의 길이는 디플레이트 변환 호출 명령(예: HL 필드 385)와 관련된 파라미터 블록의 필드에 의해서 명시되고, 그리고 상기 버퍼 내 히스토리의 시작은 파라미터 블록의 다른 필드(예를 들어, HO 필드(386))에 포함된 오프셋에 의해서 명시된다. 
[0371] 서큘러 히스토리 버퍼를 사용하는 것에 관한 더 자세한 사항들은 도 18을 참조하여 기술된다. 한 예에서, 범용 프로세서와 같은 프로세서 상에서 실행되는 프로그램은 스토리지의 파라미터 블록에서 수행될 연산의 세부사항들을 명시하고 파라미터 블록의 위치를 명시한다(단계 1800). 예를 들어, 파라미터 블록(예를 들어, 파라미터 블록(360 또는 370))의 필드들 중 하나 또는 그 이상이, 수행될 함수에 따라서, 제공되거나 또는 세트 된다. 또한 프로그램은 수행될 연산(예를 들어, 압축, 확장 등)을 명시한다. 
[0372] 또한, 일 예에서, 프로그램은 미리-정의된 크기(예를 들면, 32 K-바이트)의 서큘러 버퍼의 메모리 내 위치를 할당하고 명시한다(단계1802). 추가로, 프로그램은 압축되지 않은 데이터 스트림의 일부분을 버퍼에 배치하고 디플레이트 변환 호출 명령에 대한 입력으로서 버퍼의 위치와 크기를 명시하며(단계 1804), 그리고 스토리지 내 결과 버퍼의 위치와 크기를 명시하거나 또는 갱신한다(단계 1806). 
[0373] 그 다음, 디플레이트 변환 호출 명령은 실행된다(단계 1808). 상기 명령의 실행에 기초하여, 프로세서는, 연산에 대한 입력으로서, 예를 들어, 서큘러 히스토리 버퍼로부터 히스토리를 페치 하고(단계 1820), 여기서 기술한 바와 같이, 명시된 연산을 수행한다(단계 1822). 또한, 프로세서는, 연산의 출력으로서, 서큘러 히스토리 버퍼 내의 히스토리를 수정한다(단계 1824). 전체 데이터 스트림이 처리되었는지 여부에 대한 결정이 내려진다(질의단계 1826). 만일 아니라며면, 처리는 단계 1804로 진하여 계속된다. 그렇지 않다면, 처리는 완료된다.
[0374] 서큘러 히스토리 버퍼의 사용은, 예들로서, 다음을 제공한다:
[0375] 디플레이트 변환 호출 명령의 개별 실행에 사용하기 위해 명시된, 입력 또는 출력 버퍼의 크기가, 상대적으로 작을 때(예를 들어,512바이트), 예를 들어, 최대 32K-바이트인, 버퍼된 데이터의 다수 세그먼트들에 걸친 히스토리는, 작은 수의 바이트들을 처리하는, 디플레이트 변환 호출 명령에 대한 입력으로 사용될 수 있다.
[0376] 디플레이트 변환 호출 명령의 개별 실행에 사용하기 위해 명시된, 입력 또는 출력 버퍼의 크기가, 상대적으로 클 때(예를 들어,128K-바이트), 예를 들어, 최대 32K-바이트인, 버퍼된 데이터의 이전 세그먼트의 히스토리는, 데이터의 제1 32K-바이트들을 처리하는, 디플레이트 변환 호출 명령에 대한 입력으로 사용될 수 있다.
[0377] 두 경우들 모두에서, 그렇지 않았다면 이용 가능했을 경우보다 더 많은 히스토리가 데이터를 처리하는 데 이용 가능하다. 그 결과, 중복 스트링들을 검출하는 것의 유효성이 향상되고, 전체 압축률이 개선되는 결과를 가져온다. 이는 컴퓨팅 환경 내에서 처리를 용이하게 하고 성능을 향상시킨다. 
[0378] 본 발명의 하나 또는 그 이상의 실시 예들은 불가분하게 컴퓨터 기술과 연결되어 있어, 컴퓨터에서 처리를 용이하게 하고, 이로 인해 성능을 개선한다, 압축 및/또는 압축 해제를 수행하기 위해 단일 아키텍처된 머신 명령을 사용하면 컴퓨팅 환경 내에서 성능이 향상된다. 압축/압축 해제된 데이터는, 컴퓨터 처리, 의료 처리, 보안, 재고 관리 등과 같이, 데이터를 관리 및/또는 사용하는 많은 기술 분야들에서 사용될 수 있다. 압축/압축 해제에서 최적화들을 제공함으로써 이들 기술 분야들은 실행 시간을 감소시킴으로써 개선된다. 
[0379] 본 발명의 하나 또는 그 이상의 실시 예들과 관련하여, 컴퓨팅 환경 내에서 처리를 용이하게 하는 일 실시예의 추가 세부사항들이 도 19-22를 참조하여 기술된다. 
[0380] 본 발명의 실시 예들과 관련된 기술들을 구체적으로 살펴보면, 디플레이트(DEFLATE)는 크기가 수 기가 바이트(several gigabytes (GBs) in size) 될 수 있는 데이터의 압축을 위한 앨고리듬이지만, 애플리케이션은 한번에 오직 작은 버퍼들만 가질 수 있어서 1메가바이트(MB) 또는 그보다 더 작을 수 있는 비교적 작은 블록들로 완료되어야 했다. 디플레이트는 일반적으로 가속기(accelerator) 또는 NXU상에서 실행되는 복잡한 명령들의 세트(a complex set of instructions)라 말할 수 있으며, 가속기(accelerator) 또는 NXU는 직접 메모리 액세스(DMA)를 위해 사용되는 I/O 인터페이스와 유사한 입/출력 인터페이스를 갖는 온칩 일관성 서브 시스템(an on-chip coherency subsystem) (예를 들어, L3 캐시)에 부착될 수 있다. 아키텍처 관점에서, 디플레이트는 다음의 특정 주요 규칙들을 따라야 한다. 
[0381] 또한, 예를 들어, 디플레이트, 즉 디플레이트 변환 호출 명령은 가속기 상에서 실행되는 복잡한 명령들의 세트로부터 나온 하나의 명령이고, 이는 복잡한 인터럽트 가능 명령이며, 인터럽트가 서비스된 후 상기 명령이 다시 시작될 수 있기 위해 저장되어야 하는 상태를 가지고 있다. 상기 상태는 재시작을 인에이블 하는데 필요한 모든 것이 될 수 있지만, 예를 들어, 파라미터 블록 포맷과 같은 특정 포맷팅 요건들을 충족해야 함(providing in meets particular formatting requirements)을 주목해야 한다. 상기 특정 포맷팅 요건들은 오리지널 머신 모델에 대해 특별히 마이크로 아키텍처 된(specifically micro-architected for an original machine model) 것일 수 있다. 다시 말하면, 동일한 복잡한 인터럽트 가능 명령을 갖는 신규 머신 모델이 도입될 때, 동일한 복잡한 인터럽트 가능 명령의 상태는 신규 머신 모델에 대해 특별히 마이크로 아키텍처 된다. 마이크로 아키텍처 된다는 것은, 소프트웨어 관점에서, 상태의 영역이 불명확하다(opaque)는 의미이며, 이는 생성된 머신 모델에 의해서만 이해될 수 있다는 것을 의미한다. 따라서 신규 머신 모델이 도입된 후 컴퓨팅 환경은 두 개의 다른 파라미터 블록 포맷들을 갖는 동일한 복잡한 인터럽트 가능 명령을 실행하는 두 개의 머신들(예를 들어, 원래 머신 모델 및 신규의 머신)을 포함한다. 
[0382] 복잡한 기능들 및 파라미터 블록들(complex functions and parameter blocks)을 포함하는 명령들을 위해, 본 발명의 하나 또는 그 이상의 실시예들에 따라 새로운 가상 아키텍처 레벨(a new virtual architecture level: VAL) 접근 방식 이 채택된다. 즉, 다양하고 복잡한 컴퓨팅 환경들에서, VAL이 시스템 마이그레이팅(migating)을 처리하기 위해 사용되는 데, 이는 모든 명령들이, 모든 가상 머신들을 위한 최저 공동 머신 레벨(the lowest common machine level)에 대해 세트되는 (VAL내에 있는) 표시자들(indicators)을 이용함에 의해서, 임의의 하위 머신 레벨로부터의 모든 입력들을 지원하기 위함이다.  따라서, 본 발명의 하나 또는 그 이상의 실시 예들은 다수의 머신 세대들에 걸치는 복잡한 기능들에 대한 호환성(예를 들어, 컴퓨팅 환경의 원래 머신 모델과 새로운 머신 사이의 호환성)을 유지함으로써, 전술한 단점들을 해결한다. 또한, 여기에서 기술된 하나 또는 그 이상의 실시 예들에서는 각 머신이 2개의 서로 다른 파라미터 블록 포맷만을 이해하도록 요구하는 세대들 간의 호환성 레벨을 정의한다. 이에 따라, 모든 머신은 자기 자신의 명령 및 파라미터 블록 레벨과 함께 최소 공통 분모를 구현한다. 
[0383] 도 19는 본 발명의 실시예들에 따른 시스템(1900)을 도시한다. 시스템 (1900)은 그 안에 팜블록 버전 n 1930(a parmblock version n 1930)을 포함하는 호환성 레벨 1929를 갖는 가상 머신 1920을 지원하는 머신 버전(n) 1910을 포함한다. 상기 팜블록 버전 n 1930은 모든 머신 버전들을 위한 최저 공통 분모의 표시자(예를 들어, 최저 공통 분모의 표시자 1931)를 포함한다.
[0384] 시스템(1900)은 또한 그 안에 팜블록 버전 n 1930 및 팜블록 버전 n+1 1960을 포함하는 호환성 레벨 1959를 갖는 가상 머신 1950을 지원하는 머신 버전(n+1) 1940을 포함한다. 시스템(1900)은 또한 그 안에 팜블록 버전 n 1930 및 팜블록 버전 n+2 1990을 포함하는 호환성 레벨 1989를 갖는 가상 머신 1980을 지원하는 머신 버전(n+2) 1970을 포함한다. 호환성 레벨들 1929, 1959 및 1989 내의 최저 공통 분모 표시자 1931은 특정 가상 머신1920, 1950 및 1980에서 이용 가능한 기능들을 식별하는 일련의 퍼실리티 비트들을 통해 제어된다.
[0385] 여기서, 'n'은 세대에 대한 지정이고, 따라서 만일 n - 0이면, 머신 버전 1910은 제1 세대 머신이고, 머신 버전 1940은 제2세대 머신이며, 머신 버전 1970은 제3세대 머신임을 주목해야한다. 머신 버전들1910, 1940, 및 1970은 하나 또는 그 이상의 가상 머신들(예를 들어, 가상 머신1920, 1950, 1980)을 지원하는 하드웨어/소프트웨어 조합을 포함하는 모든 디바이스가 될 수 있다. 예를 들어, 각각의 머신 버전들1910, 1940, 및 1970은 도 22의 시스템(2200)의 하나의 인스턴스(one instance)와 동등할 수 있다.  
[0386] 일반적으로, 운영 체제는 가상 머신들 1920, 1950, 및 1980 사이에서 마이그레이션 할 수 있기 때문에, 모든 가상 머신 1920, 1950, 및1980 은 동일 VAL을 가져야한다. 동일 VAL은, 만일 컴플렉스(예를 들어, 시스템 1900, 도 2의 CEC )가 머신 버전 1910 (예를 들어, 제1 세대 머신) 및 머신 버전 1940 (예를 들어, 제2 세대 머신 )을 가지고 있고 가상 머신 1950이 제1세대 머신으로부터 제2세대 머신으로 이동된다면, 일단 이동된 가상 머신1950은 제1세대 머신 명령들은 실행할 수 있다는 것을, 의미한다. 제 2 세대 머신 명령들은 제1세대 머신 상에서는 작동하지 않음을 주목해야 한다. 또한 제1 세대 및 제 2 세대의 머신 명령들은 제1세대 및 제2세대 머신들, 각각의 특정 포맷팅 요건들을 충족하는 복잡한 인터럽트 가능 명령 (예를 들어, 가속기 상에서 실행하는 복잡한 명령들의 세트로부터의 디플레이트 변환 호출 명령 또는 명령들)이 될 수 있음에도 주목해야 한다.
[0387] 시스템(1900)은, 각 가상 머신 1920, 1950, 및 1980의 VAL 내에, 복잡한 인터럽트 가능 명령을 위한 호환성 레벨들 1929, 1959, 및 1989를 유지한다. 각 호환성 레벨 1929, 1959 및 1989는 머신 버전들 1 910, 1940 및 1970에 걸치는 최저 공통 분모 머신 버전(a lowest common denominator machine version)과 복잡한 인터럽트 가능 명령에 대한 로컬 파라미터 블록 포맷을 위해 아키텍처 되었다. 로컬 파라미터 블록 포맷은 각각의 머신 버전 1910, 1940, 및 1970에 로컬한 머신을 위해 아키텍처 되었음에 주목해야 한다. 따라서, 가상 머신 1920은 머신 버전 1910(이것은 가장 초기 버전이므로) 상에서 실행할 수 있는 파라미터 블록 포맷을 지원하고; 가상 머신 1940은 머신 버전 1910(최저 공통 분모) 및 머신 버전 1950(로컬) 상에서 실행할 수 있는 파라미터 블록 포맷들을 지원하며; 그리고 가상 머신 1970은 머신 버전 1910(최저 공통 분모) 및 머신 버전 1980(로컬)상에서 실행할 수 있는 파라미터 블록 포맷들을 지원한다.보다 구체적으로, 버전 n이 최저 공통 분모이기 때문에, 팜블록 버전 n 1930은 각 가상 머신 1920, 1950 및 1980 상에서 각 호환성 레벨 1929, 1959 및 1989로 복제 된다 . 
[0388] 하나 또는 그 이상의 실시 예들에 따라, 호환성 레벨 들 1929, 1959, 및 1989는 대응 복잡한 인터럽트 가능 명령을 실행하기 위해 머신 버전들1910, 1940, 및 1970의 머신에 의해서 생성될 수 있다. 또한, 최저 공동 분모 표시자 1931도 대응 복잡한 인터럽트 가능 명령을 제1차로(first) 실행하는 머신 버전들 1910, 1940, 및 1970의 머신에 의해서 생성될 수 있다. VAL은 호환성 레벨 1929를 이용하여 이 최저 공동 분모 표시자 1931을 운반하는데, 그렇게 하여, 후속 호환성 레벨들 1959 및 1989가 생성될 때 팜블록 버전 n 1930은 복제된다. 최저 공통 분모 표시자 1931은 도시된 바와 같이 팜블록 버전 n 1930과 연관되거나 또는 호환성 레벨 1929 자체의 독립적인 부분이 될 수 있다. 하나 또는 그 이상의 실시예들에 따르면, 최저 공통 분모 표시자 및/또는 호환성 레벨은 복잡한 인터럽트 가능 명령을 제1차로(first) 실행하는 머신 버전들 1910, 1940 및 1970의 머신으로부터 머신 버전들1910, 1940, 및 1970의 나머지 머신으로 전파될 수 있다.
[0389] 도 20은 본 발명의 실시예들에 따른 프로세스 플로(2000)를 도시한다. 도 21은 본 발명의 실시예들에 따른 시스템(2100)을 도시한다. 시스템(2100)은 초기에 머신 버전 n, n-1 및 n-2(각각 2110, 2140 및 2170)를 갖는 머신을 포함하고, 이들 각각은 서로 다른 파라미터 블록 포맷들(각각 팜블록 버전 n 2130, 팜블록 버전 n-1 2160, 및 팜블록 n-2 2190)을 구현하는 것으로 묘사되었다. 하나 또는 그 이상의 실시예들에 따르면, 각각의 파라미터 블록(2130, 2160, 2190)은 머신 버전 n, n-1, n-2(각각 2110, 2140, 2170) 내에 개별적으로 저장될 수 있다. 
[0390] 프로세스 플로(2000)은 시스템(21 00)에 의해서 실행될 수 있다.  프로세스 플로(2000)는 블록(2010)에서 시작하고, 여기서 레벨 n-2 (2170)에 있는 머신은 복잡한 인터럽트 가능 명령(예를 들어, 디플레이트, 디플레이트 변환 호출 명령, 머신 2170)의 가속기 상에서 실행되는 복잡한 명령들 세트로부터의 명령)을 구현하는 제1 머신이다.
[0391] 블록(2020)에서, 시스템( 2100)의 가상 아키텍처 레벨은  최저 공통 분모 표시자( 2191)를 통해 제1 머신의 파라미터 블록(예를 들어, 팜블록 버전 n-2 21 90)이 복잡한 인터럽트 가능 명령을 위해 실행됨/지원됨을 표시한다. 팜블록 버전 n-2 2190포맷은 호환성 레벨 또는 제네시스 포맷이라 할 수 있다. 
[0392] 블록(2030)에서 최저 공통 분모 표시자 2191을 갖는 팜블록 버전 n - 2 2190 포맷은 시스템(2100)에서 현재 실행되는 각각의 가상 머신으로 전파된다. 도 21에서 화살표 B에 의해서 도시된 바와 같이, 팜블록 버전 n -2 2190 포맷은 가상 머신들 2120 및 2150과 공유된다. 이제, 머신 레벨들 n 및 n - 1에서 실행되는 두 개의 가상 머신 2120 및 2150은 복잡한 인터럽트 가능 명령을 팜블록 버전 n- 2 2190포맷으로 구현할 수 있다. 또한, 머신 레벨 n에서 실행되는, 가상 머신 2120은 복잡한 인터럽트 가능 명령을 대응하는 팜블록 버전 n 2130포맷으로 구현할 수 있고, 머신 레벨 n - 1에서 실행되는, 가상 머신 2150은 복잡한 인터럽트 가능 명령을 팜블록 버전 n- 1 2160포맷으로 구현할 수 있다. 
[0393] 블록(2040)에서, 시스템(2100)은 제1머신이 오프라인(offline)임을 검출한다. 도 21에서 X에 의해서 도시된 바와 같이, 레벨 n - 2 (2170)에 있는 머신은 오프라인 상태로 된다. 블록(2050)에서, 시스템(2100)은 신규의 머신이 온라인됨을 검출한다. 예를 들어, 레벨 n + 1(2191)에 있는 머신이 온라인 상태가 된다. 블록(2060)에서, 시스템(2100)은 제1 머신의 파라미터 블록을 머신 버전들에 걸친 최저 공통 분모로 식별한다. 
[0394] 블록(2070)에서, 시스템(2100)은 제1 머신의 파라미터 블록을 신규 머신에 전파한다. 도 21에 도시된 바와 같이, 시스템(2100)은 이제, 파라미터 블록 포맷(팜블록 버전 n+1 (2193))을 구현하는, 머신 버전 n + 1 (2191)을 가진 머신을 포함한다. 도 21에서 화살표 D에 의해서 도시된 바와 같이, 팜블록 버전 n - 2 2190 포맷은 가상 머신 2192와 공유된다. 따라서 임의의 가상 머신이 마이그레이트 될 때, 그 머신은 n-2 레벨의 기능을 사용한다. 
[0395] 여기서 설명하는 실시 예들의 기술적 효과들과 장점들은, 복잡한 명령/기능을 위해, 각각의 머신 세대가 기껏해야 오직 2개의 다른 파라미터 블록들만(자신의 파라미터 블록 및 호환성 레벨) 지원할 때, 포함할 수 있는데, 인증 및 검증은 단지 파라미터 블록들의 현재 및 호환성 버전에 대해서만 시험하는 것으로 감소된다. 여기서 설명하는 실시 예들의 기술적 효과들과 장점들은 또한, 제1세대를 위해, 포함할 수 있고, 제1세대의 파라미터 블록 포맷은 "제네시스"포맷을 대표하고, 오직 한 포맷만 지원되고/시험될 필요가 있다. 따라서, 모든 후속 세대의 머신 특정 파라미터 블록 컨텐트는 미래 머신에 대한 다운스트림 임팩트를 생성함이 없이 이 머신에 대해서 최적화될 수 있다.
[0396] 이제 도 22로 돌아가서 보면, 여기서 설명한 본 발명을 구현하기 위한 시스템(2200)이 본 발명의 하나 또는 그 이상의 실시 예들에 따라 도시되어 있다. 이 실시예에서, 시스템(2200)은 하나 또는 그 이상의 중앙 처리 유닛들(CPU들)(22 01a, 22 01b, 22 01c 등 )를 포함할 수 있는 프로세서(2201)를 갖는다. 
[0397] 프로세서(2201) 는또한, 처리 회로, 마이크로 프로세서, 컴퓨팅 유닛이라 하며, 이는 시스템 버스(2202)를 통해서 시스템 메모리(2203) 및 다양한 다른 컴포넨트들에 결합되어 있다. 시스템 메모리(2203)은 판독 전용 메모리(ROM)(2204) 및 랜덤 액세스 메모리(RAM)(2205)를 포함한다. ROM(2204)은 시스템 버스(2202)에 결합되고, 그리고 기본 입/출력 시스템 (BIOS)을 포함할 수 있으며, 이는 시스템(2200)의 특정 기본 기능들을 제어한다. RAM은 읽기-쓰기 메모리이고, 프로세서(2201)에 의한 사용을 위해 시스템 버스(2202)에 결합된다. 
[0398] 도 22의 시스템(2200)은 하드 디스크(2207)를 포함하는데, 이는 프로세서(2201)에 의해서 실행 가능하고 판독 가능한 유형의 스토리지 매체의 예이다. 하드 디스크(2207)은 소프트웨어(2208) 및 데이(2209)를 저장한다. 소프트웨어(2208)은 프로세서(2201)에 의해서 시스템(2200)상에서 실행하기 위한 (도 21-22의 프로세스 플로들2100, 2200과 같은, 프로세스들을 수행하기 위한) 명령들로서 저장된다. 데이터(2209)는 소프트웨어(2208)의 연산들을 지원하고 연산들에 의해 사용되기 위해 다양한 데이터 구조들로 조직된 질적 또는 양적 변수들의 값들의 세트를 포함한다. 
[0399]도22의 시스템(2200)은 하나 또는 그 이상의 어댑터들(예를 들어, 하드 디스크 컨트롤러들, 네트워크 어댑터들, 그래픽 어댑터들, 등)을 포함하는데, 이들은 프로세서(2201), 시스템 메모리(2203), 하드 디스크(2207), 그리고 시스템(2200)의 다른 컴포넌트들 (예를 들어, 주변 장치 및 외부 디바이스들)을 상호 연결하고 이들 사이의 통신들을 지원한다. 본 발명의 하나 또는 그 이상의 실시 예들에서, 하나 또는 그 이상의 어댑터들은 하나 또는 그 이상의 I/O버스들 에 연결될 수 있고, 이들은 중간 버스 브리지를 통해 시스템 버스(2202)에 연결 되며, 상기 하나 또는 그 이상의 I/O버스는, 주변장치 컴포넌트 인터커넥트 (Peripheral Component Interconnect: PCI)와 같은 공동 프로토콜들(common protocols)을 이용할 수 있다 . 
[0400] 도시 된 바와 같이, 시스템 (2200)은 키보드(2221), 마우스 (2222), 스피커(2223) 및 마이크(2224)를 시스템 버스(2202)에 상호 연결하는 인터페이스 어댑터(2220)를 포함한다. 시스템 (2200)은 시스템 버스(2202)를 디스플레이 (2231)에 상호 연결하는 디스플레이 어댑터(2230)을 포함한다. 디스플레이 어댑터(2230)(및/또는 프로세서2201)는 GUI(2232)의 디스플레이 및 관리와 같은, 그래픽 성능을 제공하는 그래픽 컨트롤러를 포함할 수 있다. 통신 어댑터(2241)는 시스템 버스(2202)를 네트워크(2250)과 상호 연결하는데, 이는 시스템(2200)을, 서버(2251) 및 데이터베이스(2252)와 같은, 다른 시스템들, 디바이스들, 데이터, 및 소프트웨어와 통신하도록 인에이블 한다. 본 발명의 하나 또는 그 이상의 실시 예들에서, 소프트웨어 (2208) 및 데이터(2209)의 연산들은 서버(22 51) 및 데이터베이스(2252)에 의해서 네트워크(2250) 상에서 구현될 수 있다. 예를 들어, 네트워크(2250), 서버(2251) 및 데이터베이스(2252)는 결합하여, 플랫폼 서비스, 소프트웨어 서비스, 및/또는 인프라스트럭처 서비스(예를 들어, 분산 시스템에서 웹 애플리케이션 프로그램으로서)로서, 소프트웨어 (2208) 및 데이터 (2209)의 내부 반복들을 제공할 수 있다.
[0401] 따라서, 도 22에서 구성된 바와 같이, 소프트웨어(2208) 및 데이터(2209)의 연산들(예를 들어, 시스템2200)은, 여기에 기술된 다른 머신의 머신들 사이의 워크로드들의 현대 마이그레이션들의 단점들을 극복하고 해결하기 위해서, 반드시 프로세서(2201) 및/또는 서버(2251)의 연산 능력에 근거해야 한다. 이에 관해서, 소프트웨어(2208) 및 데이터(2209)는 시스템(2200)의 프로세서(2201) 및/또는 서버(2251)의 연산 동작들을 개선하는데, 이는 다수 머신 세대들에 걸치는 복잡한 기증들에 대해 호환성을 유지함에 의해서 개선한다(이에 의해서 인증 및 검증은 감소되고 모든 후속 세대의 머신 특정 파라미터 블록 컨텐트는 다운스트림 임팩트를 생성함이 없이 최적화됨).
[0402] 본 발명의 다양한 실시 예들이 도면에 기초하여 설명된다. 본 발명의 범위를 벗어남이 없이 본 발명의 대안적인 실시예들이 고안될 수 있다. 다양한 연결들 및 위치 관계들(예를 들어, 위, 아래, 인접 등)는 다음 설명 및 도면에서 엘리멘트들 사이에 설명된다. 이러한 연결들 및/또는 위치 관계들은 달리 명시되지 않는 한 직접적이거나 간접적일 수 있으며, 본 발명은 이와 관련하여 제한하려는 의도가 없다. 따라서 엔티티의 결합은 직접적 또는 간접적인 결합을 의미할 수 있으며, 엔티티 간의 위치 관계는 직접적 또는 간접적인 위치 관계일 수 있다. 또한, 여기에 설명된 다양한 작업들 및 프로세스 단계들은 여기에 자세히 설명되지 않은 추가 단계들 또는 기능들을 갖는 보다 포괄적인 절차 또는 프로세스에 통합될 수 있다. 
[0403] 다음의 정의들 및 약어들은 명세서 및 청구 범위의 해석에 사용될 수 있다. 본 명세서에서 사용된 용어 "포함하다(comprise)", "포함하는(comprising)", "포함한다(include)", "포함하는(including)", "갖는다(has) ", "갖는(having)", "포함하다(contain)" 또는 "포함하는(containing)", 또는 이들의 다른 변형들은 비-배타적인 포함(a non-exclusive inclusion)을 커버하기 위한 것이다. 예를 들어, 엘리멘트들의 목록을 포함하는 구성, 혼합물, 공정, 방법, 물품 또는 장치는 반드시 그러한 엘리멘트들에만 제한되는 것은 아니며, 명시적으로 나열되지 않거나 또는 그러한 구성, 혼합물, 공정, 방법, 물품 또는 장치에 고유한 다른엘리멘트들도 포함될 수 있다.  
[0404] 또한, 용어 "예시적인"은 "예, 사례, 예시"라는 의미로 사용되었다. " 본 명세서에서 "예시적인" 것으로 설명된 임의의 실시예 또는 설계는 반드시 다른 실시예 또는 설계에 비해 선호되거나 유리한 것으로 해석되어서는 안 된다. "적어도 하나" 및 "하나 또는 그 이상"이라는 용어는 1 보다 크거나 같은 임의의 정수, 즉 1, 2, 3, 4 등을 포함 하는 것으로 이해될 수 있다. 용어 "복수"는 2보다 크거나 같은 정수, 즉 2, 3, 4, 5 등을 포함하는 것으로 이해될 수 있다. 용어 "연결"은 간접적인 "연결"과 직접적인 "연결"을 모두 포함할 수 있다. 
[0405] 용어들 "약", "실질적으로", "대략" 및 이들의 변형들은 출원 당시에 이용 가능했던 장비에 기초한 특정 양의 측정과 관련된 오차의 정도를 포함하기 위해 의도된 것이다. 예를 들어, "약"은 주어진 값의 ± 8% 또는 5% 또는 2%의 범위를 포함할 수 있다. 
[0406] 간결성을 위해, 본 발명의 실시 예들을 만들고 사용하는 것에 관련된 종래 기술들은 여기서 상세하게 설명되거나 또는 설명되지 않을 수 있다. 특히, 특히, 여기에 설명된 다양한 기술적 특징을 구현하기 위한 컴퓨팅 시스템 및 특정 컴퓨터 프로그램의 다양한 측면은 잘 알려져 있다. 따라서, 간결함을 위해, 많은 종래의 구현 세부사항은 여기에서 간략하게만 언급되거나 또는 잘 알려진 시스템 및/또는 프로세스 세부사항들을 제공하지 않고 완전히 생략된다. 
[0407] 본 발명의 실시 예들은 시스템, 방법, 및/또는 통합의 모든 가능한 기술적 세부 레벨에서 컴퓨터 프로그램 제품이 될 수 있다. 컴퓨터 프로그램 제품은 컴퓨터 판독 가능 스토리지 매체를 포함할 수 있으며, 이 매체 상에 프로세서가 본 발명의 실시 예들을 수행하도록 하는 컴퓨터 판독 가능 프로그램 명령들을 갖는다.
[0408] 상기 컴퓨터 판독 가능 스토리지 매체는 명령 실행 장치에 의해 사용될 명령들을 유지 및 저장할 수 있는 유형의(tangible) 디바이스일 수 있다. 상기 컴퓨터 판독 가능 ㅅ토리지 매체는, 예를 들면, 전자 스토리지 디바이스, 자기 스토리지 디바이스, 광 스토리지 디바이스, 전자기 스토리지 디바이스, 반도체 스토리지 디바이스, 또는 전술한 것들의 모든 적절한 조합일 수 있으며, 그러나 이에 한정되지는 않는다. 컴퓨터 판독 가능 스토리지 매체의 더 구체적인 예들의 비포괄적인 목록에는 다음이 포함될 수 있다: 휴대용 컴퓨터 디스켓, 하드 디스크, 랜덤 액세스 메모리(RAM), 판독-전용 메모리(ROM), 소거 및 프로그램가능 판독-전용 메모리(EPROM 또는 플래시 메모리), 정적 랜덤 액세스 메모리(SRAM), 휴대용 컴팩트 디스크 판독-전용 메모리(CD-ROM), 디지털 다용도 디스크(DVD), 메모리 스틱, 플로피 디스크, 천공-카드들 또는 명령들이 히스토리된 홈에 있는 융기된 구조들 같이 머신적으로 인코드 된 장치, 및 전술한 것들의 모든 적절한 조합. 본 명세서에서 사용될 때, 컴퓨터 판독 가능 스토리지 매체는 무선 전파들이나 다른 자유롭게 전파되는 전자기파들, 도파 관이나 기타 전송 매체(예를 들어, 광섬유 케이블을 통해 전달되는 광 펄스들)를 통해 전파되는 전자기파들, 또는 선(wire)을 통해 전송되는 전기 신호들 같이 그 자체로 일시적인(transitory) 신호들로 해석되지는 않는다.
[0409] 본 명세서에 기술되는 컴퓨터 판독 가능 명령들은, 예를 들어, 인터넷, 근거리 통신망, 광역 통신망 및/또는 무선 네트워크 등의 통신망(네트워크)을 통해 컴퓨터 판독 가능 스토리지 매체로부터 각각 컴퓨팅/처리 디바이스들로 또는 외부 스토리지 디바이스로부터 외부 컴퓨터로 다운로드 될 수 있다. 상기 통신망은 구리 전송 케이블들, 광 전송 섬유들, 무선 전송, 라우터들, 방화벽들, 스위치들, 게이트웨이 컴퓨터들 및/또는 엣지 서버들을 포함할 수 있다. 각 컴퓨팅/처리 장치 내 네트워크 어댑터 카드 또는 네트워크 인터페이스는 상기 통신망으로부터 컴퓨터 판독 가능 프로그램 명령들을 수신하고 그 컴퓨터 판독 가능 프로그램 명령들을 각각의 컴퓨팅/처리 디바이스 내의 컴퓨터 판독 가능 스토리지 매체에 저장하기 위해 전송한다.
[0410] 본 발명의 연산들을 실행하기 위한 컴퓨터 판독 가능 프로그램 명령들은 Smalltalk, C++ 또는 그와 유사 언어 등의 객체 지향 프로그래밍 언어와 "C" 프로그래밍 언어 또는 그와 유사한 언어 등의 종래의 절차적 프로그래밍 언어들을 포함하여, 하나 또는 그 이상의 프로그래밍 언어들을 조합하여 작성된(written) 어셈블러 명령들, 명령-세트-아키텍처(ISA) 명령들, 머신 명령들, 머신 종속 명령들, 마이크로코드, 펌웨어 명령들, 상태-셋팅 데이터, 집적회로를 위한 구성 데이터, 또는 소스 코드나 목적 코드일 수 있다. 상기 컴퓨터 판독 가능 프로그램 명령들은 전적으로 사용자의 컴퓨터상에서, 부분적으로 사용자의 컴퓨터상에서, 독립형(stand-alone) 소프트웨어 패키지로서, 부분적으로 사용자의 컴퓨터상에서 그리고 부분적으로 원격 컴퓨터상에서 또는 전적으로 원격 컴퓨터나 서버상에서 실행될 수 있다. 위에서 마지막의 경우에, 원격 컴퓨터는 근거리 통신망(LAN) 또는 광역 통신망(WAN)을 포함한 모든 종류의 네트워크를 통해서 사용자의 컴퓨터에 접속될 수 있고, 또는 이 접속은 (예를 들어, 인터넷 서비스 제공자를 이용한 인터넷을 통해서) 외부 컴퓨터에 이루어질 수도 있다. 일부 실시 예들에서, 예를 들어 프로그램 가능 로직 회로, 필드-프로그램 가능 게이트 어레이들(FPGA),또는 프로그램 가능 로직 어레이들(PLA)을 포함한 전자 회로는 본 발명의 실시 예들을 수행하기 위해 전자 회로를 맞춤화하도록 상기 컴퓨터 판독 가능 프로그램 명령들의 상태 정보를 활용하여 상기 컴퓨터 판독 가능 프로그램 명령들을 실행할 수 있다.
[0411] 본 명세서에서는 본 발명의 실시 예들에 따른 방법들, 장치들(시스템들), 및 컴퓨터 프로그램 제품들의 플로 차트 예시도들 및/또는 블록도들을 참조하여 본 발명의 실시 예들을 기술한다. 플로 차트 예시도들 및/또는 블록도들의 각 블록과 플로 차트 예시도들 및/또는 블록도들 내 블록들의 조합들은 컴퓨터 판독 가능 프로그램 명령들에 의해 구현될 수 있다는 것을 이해할 수 있을 것이다.
[0412] 이들 컴퓨터 판독 가능 프로그램 명령들은 범용 컴퓨터, 특수목적용 컴퓨터, 또는 기타 프로그램가능 데이터 처리 장치의 프로세서에 제공되어 머신(machine)을 생성하고, 그렇게 하여 그 명령들이 상기 컴퓨터 또는 기타 프로그램가능 데이터 처리 장치의 프로세서를 통해서 실행되어, 상기 플로 차트 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/동작들을 구현하기 위한 수단을 생성할 수 있다. 이들 컴퓨터 판독 가능 프로그램 명령들은 또한 컴퓨터 판독 가능 스토리지 매체에 저장될 수 있으며, 컴퓨터, 프로그램가능 데이터 처리 장치 및/또는 기타 디바이스들에 지시하여 명령들이 저장된 상기 컴퓨터 판독 가능 스토리지 매체가 상기 플로 차트 및/또는 블록도의 블록 또는 블록들에 명시된 기능/동작의 특징들을 구현하는 명령들을 포함하는 제조품(an article of manufacture)을 포함하도록 특정한 방식으로 기능하게 할 수 있다.
[0413] 상기 컴퓨터 판독 가능 프로그램 명령들은 또한 컴퓨터, 기타 프로그램가능 데이터 처리 장치, 또는 다른 디바이스에 로드 되어, 상기 컴퓨터, 기타 프로그램가능 장치 또는 다른 디바이스에서 일련의 동작 단계들이 수행되게 하여 컴퓨터 구현 프로세스를 생성하며, 그렇게 하여 상기 컴퓨터, 기타 프로그램가능 장치, 또는 다른 디바이스 상에서 실행되는 명령들이 플로 차트 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/동작들을 구현할 수 있다.
[0414] 도면들 내 플로 차트 및 블록도들은 본 발명의 여러 실시 예들에 따른 시스템들, 방법들 및 컴퓨터 프로그램 제품들의 가능한 구현들의 아키텍처, 기능(functionality), 및 연산(operation)을 예시한다. 이와 관련하여, 상기 플로 차트 또는 블록도들 내 각 블록은 상기 명시된 논리적 기능(들)을 구현하기 위한 하나 또는 그 이상의 실행 가능한 명령들을 포함한 모듈, 세그먼트 또는 명령들의 일부분을 나타낼 수 있다. 일부 다른 구현들에서, 상기 블록에 언급되는 기능들은 도면들에 언급된 순서와 다르게 일어날 수도 있다. 예를 들면, 연속으로 도시된 두 개의 블록들은 실제로는 사실상 동시에 실행될 수도 있고, 또는 이 두 블록들은 때때로 관련된 기능에 따라서는 역순으로 실행될 수도 있다. 블록도들 및/또는 순서 예시도의 각 블록, 및 블록도들 및/또는 순서 예시도 내 블록들의 조합들은 특수목적용 하드웨어 및 컴퓨터 명령들의 명시된 기능들 또는 동작들, 또는 이들의 조합들을 수행하는 특수목적용 하드웨어-기반 시스템들에 의해 구현될 수 있다는 것에 또한 주목해야 한다.
[0415] 본 발명의 하나 또는 그 이상의 실시 예들에 대한 설명은 예시와 설명의 목적으로 제공되는 것이며, 개시되는 형태로 빠짐없이 총 망라하거나 한정하려는 의도가 있는 것은 아니다. 이 기술 분야에서 통상의 지식을 가진 자들에게 기술된 실시 예들의 범위와 정신을 벗어남이 없이 많은 수정들 및 변형들이 있을 수 있다는 것이 명백하다. 여기서 사용된 용어는 본 발명의 실시 예는 여러 특징들 및 실제 응용을 가장 잘 설명하기 위해 그리고 고려되는 구체적인 용도에 적합하게 여러 수정들을 갖는 다양한 실시 예들을 이 기술 분야에서 통상의 지식을 가진 자들이 이해할 수 있도록 하기 위해, 선택되고 기술되었다.

Claims (25)

  1. 시스템에 있어서, 상기 시스템은:
    제1세대 머신 및 제2세대 머신을 포함하는 복수의 머신들을 포함하고, 상기 복수의 머신들 각각은 머신 버전(a machine version)을 포함하며, 상기 제1세대 머신은 제1 가상 머신 및 가상 아키텍처 레벨을 실행하고, 상기 제2세대 머신은 제2 가상 머신 및 가상 아키텍처 레벨을 실행하며,
    상기 가상 아키텍처 레벨은 복잡한 인터럽트 가능 명령(a complex interruptible instruction )에 대한 호환성 레벨을 상기 제1 및 제2 가상 머신들에 제공하고, 상기  호환성 레벨은 상기 복수의 머신들에 걸쳐 최저 공동 분모 머신 버전(a lowest common denominator machine version)에 대해 아키텍처 되며, 상기 호환성 레벨은 상기 최저 공동 분모 머신 버전을 식별하는 최저 공동 분모 표시자(a lowest common denominator indicator)를 포함하는
    시스템.
  2. 제1항에 있어서, 상기 호환성 레벨은 상기 복수의 머신들 각각에 대해 상기 복잡한 인터럽트 가능 명령을 위한 로컬 파라미터 블록 포맷을 포함하고, 상기 로컬 파라미터 블록 포맷은 상기 복수의 머신들 각각에 대해 로컬인 상기 머신 버전을 위해 아키텍처 되는
    시스템.
  3. 제1항 또는 제2항에 있어서, 상기 최저 공동 분모 표시자는 상기 복잡한 인터럽트 가능 명령을 제1차로(first) 실행하는 상기 복수의 머신들 중 하나의 머신에 의해서 생성되는
    시스템.
  4. 제1항 또는 제2항에 있어서, 상기 최저 공동 분모 표시자는 상기 복잡한 인터럽트 가능 명령을 제1차로(first) 실행하는 상기 복수의 머신들 중 하나의 머신으로부터 상기 복수의 머신들 중 나머지로 전파되는(propagated
    시스템.
  5. 제1항에 있어서, 상기 호환성 레벨 내의 상기 최저 공동 분모 표시자는 특정의 가상 머신에서 어느 기능들이 이용 가능한지를 식별하는 일련의 퍼실리티 비트들을 통해서 제어되는
    시스템.
  6. 이전의 항들 중 어느 한 항에 있어서, 상기 복잡한 인터럽트 가능 명령은 디플레이트 변환 호출 명령(a DEFLATE Conversion Call instruction)을 포함하는
    시스템.
  7. 제1항에 있어서, 상기 복잡한 인터럽트 가능 명령은 가속기 상에서 실행하는 복잡한 명령들의 세트로부터의 하나의 명령을 포함하는
    시스템.
  8. 방법에 있어서, 상기 방법은:
    복수의 머신들 중 제1세대 머신에 의해서 제1 가상 머신 및 가상 아키텍처 레벨을 실행하는 단계 - 상기 복수의 머신들은 제1세대 머신 및 제2세대 머신을 포함하고, 상기 복수의 머신들 각각은 머신 버전(a machine version)을 포함함-;
    상기 제2세대 머신에 의해서 제2 가상 머신 및 가상 아키텍처 레벨을 실행하는 단계; 및
    상기 가상 아키텍처 레벨에 의해서, 복잡한 인터럽트 가능 명령(a complex interruptible instruction)에 대한 호환성 레벨을 상기 제1 및 제2 가상 머신들에 제공하는 단계-상기  호환성 레벨은 상기 복수의 머신들에 걸친 최저 공동 분모 머신 버전(a lowest common denominator machine version)에 대해 아키텍처 되며, 상기 호환성 레벨은 상기 최저 공동 분모 머신 버전을 식별하는 최저 공동 분모 표시자(a lowest common denominator indicator)를 포함함-포함하는
    방법.
  9. 제8항에 있어서, 상기 호환성 레벨은 상기 복수의 머신들 각각에 대해 상기 복잡한 인터럽트 가능 명령을 위한 로컬 파라미터 블록 포맷을 포함하고, 상기 로컬 파라미터 블록 포맷은 상기 복수의 머신들 각각에 대해 로컬인 상기 머신 버전을 위해 아키텍처 되어 있는
    방법.
  10. 제8항에 있어서, 상기 최저 공동 분모 표시자는 상기 복잡한 인터럽트 가능 명령을 제1차로(first) 실행하는 상기 복수의 머신들 중 하나의 머신에 의해서 생성되는
    방법.
  11. 제8항에 있어서, 상기 최저 공동 분모 표시자는 상기 복잡한 인터럽트 가능 명령을 제1차로(first) 실행하는 상기 복수의 머신들 중 하나의 머신으로부터 상기 복수의 머신들 중 나머지로 전파되는(propagated)
    방법.
  12. 제8항에 있어서, 상기 호환성 레벨 내의 상기 최저 공동 분모 표시자는 특정의 가상 머신에서 어느 기능들이 이용 가능한지를 식별하는 일련의 퍼실리티 비트들을 통해서 제어되는
    방법.
  13. 제8항에 있어서, 상기 복잡한 인터럽트 가능 명령은 디플레이트 변환 호출 명령(a DEFLATE Conversion Call instruction)을 포함하는
    방법.
  14. 제8항에 있어서, 상기 복잡한 인터럽트 가능 명령은 가속기 상에서 실행하는 복잡한 명령들의 세트로부터의 하나의 명령을 포함하는
    방법.
  15. 구현된 프로그램 명령을 갖는 컴퓨터 판독가능 스토리지 매체를 포함하는 컴퓨터프로그램 제품에 있어서, 상기 프로그램 명령들은:
    복수의 머신들 중 제1세대 머신에 의해서 제1 가상 머신 및 가상 아키텍처 레벨을 실행하는 단계 - 상기 복수의 머신들은 제1세대 머신 및 제2세대 머신을 포함하고, 상기 복수의 머신들 각각은 머신 버전(a machine version)을 포함함-;
    상기 제2세대 머신에 의해서 제2 가상 머신 및 가상 아키텍처 레벨을 실행하는 단계; 및
    상기 가상 아키텍처 레벨에 의해서, 복잡한 인터럽트 가능 명령(a complex interruptible instruction)에 대한 호환성 레벨을 상기 제1 및 제2 가상 머신들에 제공하는 단계-상기  호환성 레벨은 상기 복수의 머신들에 걸친 최저 공동 분모 머신 버전(a lowest common denominator machine version)을 위해 아키텍처 되며, 상기 호환성 레벨은 상기 최저 공동 분모 머신 버전을 식별하는 최저 공동 분모 표시자(a lowest common denominator indicator)를 포함함-포함하는 연산들을 수행하는 것이 실행 가능한
    컴퓨터프로그램 제품.
  16. 제15항에 있어서, 상기 호환성 레벨은 상기 복수의 머신들 각각에 대해 상기 복잡한 인터럽트 가능 명령에 대한 로컬 파라미터 블록 포맷을 포함하고, 상기 로컬 파라미터 블록 포맷은 상기 복수의 머신들 각각에 대해 로컬인 상기 머신 버전을 위해 아키텍처 되는
    컴퓨터프로그램 제품.
  17. 제15항에 있어서, 상기 최저 공동 분모 표시자는 상기 복잡한 인터럽트 가능 명령을 제1차로(first) 실행하는 상기 복수의 머신들 중 하나의 머신에 의해서 생성되는
    컴퓨터프로그램 제품.
  18. 제15항에 있어서, 상기 최저 공동 분모 표시자는 상기 복잡한 인터럽트 가능 명령을 제1차로(first) 실행하는 상기 복수의 머신들 중 하나의 머신으로부터 상기 복수의 머신들 중 나머지로 전파되는(propagated)
    컴퓨터프로그램 제품.
  19. 제15항에 있어서, 상기 호환성 레벨 내의 상기 최저 공동 분모 표시자는 특정의 가상 머신에서 어느 기능들이 이용 가능한지를 식별하는 일련의 퍼실리티 비트들을 통해서 제어되는
    컴퓨터프로그램 제품.
  20. 제15항에 있어서, 상기 복잡한 인터럽트 가능 명령은 디플레이트 변환 호출 명령(a DEFLATE Conversion Call instruction)을 포함하는
    컴퓨터프로그램 제품.
  21. 제15항에 있어서, 상기 복잡한 인터럽트 가능 명령은 가속기 상에서 실행하는 복잡한 명령들의 세트로부터의 하나의 명령을 포함하는
    컴퓨터프로그램 제품.
  22. 방법에 있어서, 상기 방법은:
    제1 머신에 의해서 복잡한 인터럽트 가능 명령을 구현하는 단계;
    상기 제1 머신의 파라미터 블록이 상기 복잡한 인터럽트 가능 명령에 대해 지원됨을 가상 아키텍처 레벨에서 표시하는 단계; 및
    상기 제1 머신의 파라미터 블록을 콤플렉스에서 실행하는 각각의 가상 머신으로 전파하는 단계를 포함하는
    방법.
  23. 제22항에 있어서, 상기 방법은:
    신규의 머신이 온라인됨을 검출하는 단계;
    상기 콤플렉스의 머신 버전들에 걸친 최저 공동 분모로서 상기 제1 머신의 파라미터 블록을 식별하는 단계; 및
    상기 제1 머신의 파라미터 블록을 상기 신규의 머신에 전파하는 단계를 더 포함하는
    방법.
  24. 구현된 프로그램 명령을 갖는 컴퓨터 판독가능 스토리지 매체를 포함하는 컴퓨터프로그램 제품에 있어서, 상기 프로그램 명령들은:
    제1 머신에 의해서 복잡한 인터럽트 가능 명령을 구현하는 단계;
    상기 제1 머신의 파라미터 블록이 상기 복잡한 인터럽트 가능 명령에 대해 지원됨을 가상 아키텍처 레벨에서 표시하는 단계; 및
    상기 제1 머신의 파라미터 블록을 콤플렉스에서 실행하는 각각의 가상 머신으로 전파하는 단계를 포함하는 연산들을 수행하는 것이 실행 가능한
    컴퓨터프로그램 제품.
  25. 제24항에 있어서, 상기 프로그램 명령들은:
    신규의 머신이 온라인됨을 검출하는 단계;
    상기 콤플렉스의 머신 버전들에 걸치는 최저 공동 분모로서 상기 제1 머신의 파라미터 블록을 식별하는 단계; 및
    상기 제1 머신의 파라미터 블록을 상기 신규의 머신에 전파하는 단계를 더 포함하는 연산들을 수행하는 것이 실행 가능한
    컴퓨터프로그램 제품.
KR1020217024766A 2019-02-27 2020-02-20 다수 머신 세대들에서 복잡한 기능들의 호환성 유지 KR20210118094A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/286,990 2019-02-27
US16/286,990 US11226839B2 (en) 2019-02-27 2019-02-27 Maintaining compatibility for complex functions over multiple machine generations
PCT/EP2020/054518 WO2020173808A1 (en) 2019-02-27 2020-02-20 Maintaining compatibility for complex functions over multiple machine generations

Publications (1)

Publication Number Publication Date
KR20210118094A true KR20210118094A (ko) 2021-09-29

Family

ID=69701172

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217024766A KR20210118094A (ko) 2019-02-27 2020-02-20 다수 머신 세대들에서 복잡한 기능들의 호환성 유지

Country Status (10)

Country Link
US (1) US11226839B2 (ko)
EP (1) EP3931693B1 (ko)
JP (1) JP7430195B2 (ko)
KR (1) KR20210118094A (ko)
CN (1) CN113454593A (ko)
ES (1) ES2963352T3 (ko)
HU (1) HUE063682T2 (ko)
PL (1) PL3931693T3 (ko)
SG (1) SG11202105494SA (ko)
WO (1) WO2020173808A1 (ko)

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU6783394A (en) * 1993-05-05 1994-11-21 Apple Computer, Inc. Method and apparatus for verifying compatibility between modular components in a computer system
US5701442A (en) 1995-09-19 1997-12-23 Intel Corporation Method of modifying an instruction set architecture of a computer processor to maintain backward compatibility
US7882121B2 (en) * 2006-01-27 2011-02-01 Microsoft Corporation Generating queries using cardinality constraints
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
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
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
US8701109B1 (en) 2012-02-06 2014-04-15 Amazon Technologies, Inc. Immortal instance type
US10083027B2 (en) * 2013-03-14 2018-09-25 Solano Labs, Inc. Systems and methods for managing software development environments
US8766827B1 (en) * 2013-03-15 2014-07-01 Intel Corporation Parallel apparatus for high-speed, highly compressed LZ77 tokenization and Huffman encoding for deflate compression
US9374106B2 (en) 2013-08-28 2016-06-21 International Business Machines Corporation Efficient context save/restore during hardware decompression of DEFLATE encoded data
US9916185B2 (en) * 2014-03-18 2018-03-13 International Business Machines Corporation Managing processing associated with selected architectural facilities
US10560520B2 (en) 2016-05-20 2020-02-11 Sap Se Compatibility framework for cloud and on-premise application integration
US10630312B1 (en) * 2019-01-31 2020-04-21 International Business Machines Corporation General-purpose processor instruction to perform compression/decompression operations

Also Published As

Publication number Publication date
EP3931693C0 (en) 2023-10-11
ES2963352T3 (es) 2024-03-26
JP2022522113A (ja) 2022-04-14
EP3931693A1 (en) 2022-01-05
PL3931693T3 (pl) 2024-02-12
JP7430195B2 (ja) 2024-02-09
WO2020173808A1 (en) 2020-09-03
SG11202105494SA (en) 2021-06-29
EP3931693B1 (en) 2023-10-11
US11226839B2 (en) 2022-01-18
US20200272491A1 (en) 2020-08-27
CN113454593A (zh) 2021-09-28
HUE063682T2 (hu) 2024-01-28

Similar Documents

Publication Publication Date Title
US10698854B1 (en) Secure and efficient application data processing
JP7442529B2 (ja) データの圧縮/解凍で使用する履歴バッファを指定する圧縮/解凍命令
JP7442526B2 (ja) 圧縮/解凍オペレーションを実行するための汎用プロセッサ命令
AU2020230012B2 (en) Spilling temporary results for accommodation of memory boundaries
US11119928B2 (en) Instant quiescing of an accelerator
US11487547B2 (en) Extended asynchronous data mover functions compatibility indication
US11449367B2 (en) Functional completion when retrying a non-interruptible instruction in a bi-modal execution environment
JP7430195B2 (ja) 複数のマシン世代にわたる複合体の機能の互換性の維持

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E90F Notification of reason for final refusal