KR20210108995A - 압축/압축해제 연산들을 수행하기 위한 범용 프로세서 명령 - Google Patents
압축/압축해제 연산들을 수행하기 위한 범용 프로세서 명령 Download PDFInfo
- Publication number
- KR20210108995A KR20210108995A KR1020217023382A KR20217023382A KR20210108995A KR 20210108995 A KR20210108995 A KR 20210108995A KR 1020217023382 A KR1020217023382 A KR 1020217023382A KR 20217023382 A KR20217023382 A KR 20217023382A KR 20210108995 A KR20210108995 A KR 20210108995A
- Authority
- KR
- South Korea
- Prior art keywords
- function
- instruction
- data
- operand
- compressed
- Prior art date
Links
- 238000007906 compression Methods 0.000 title claims abstract description 76
- 230000006835 compression Effects 0.000 title claims abstract description 76
- 230000006837 decompression Effects 0.000 title claims abstract description 51
- 230000001131 transforming effect Effects 0.000 claims abstract description 12
- 230000006870 function Effects 0.000 claims description 309
- 238000012545 processing Methods 0.000 claims description 103
- 238000003860 storage Methods 0.000 claims description 91
- 238000000034 method Methods 0.000 claims description 52
- 230000015654 memory Effects 0.000 claims description 40
- 238000004590 computer program Methods 0.000 claims description 19
- 230000001419 dependent effect Effects 0.000 claims description 17
- 238000006243 chemical reaction Methods 0.000 abstract description 12
- 239000000872 buffer Substances 0.000 description 101
- 230000008859 change Effects 0.000 description 25
- 230000036961 partial effect Effects 0.000 description 15
- 230000008569 process Effects 0.000 description 14
- 238000004422 calculation algorithm Methods 0.000 description 11
- 230000015572 biosynthetic process Effects 0.000 description 10
- 238000010586 diagram Methods 0.000 description 10
- 230000007246 mechanism Effects 0.000 description 8
- 238000005192 partition Methods 0.000 description 8
- 230000003247 decreasing effect Effects 0.000 description 7
- 238000007726 management method Methods 0.000 description 6
- 239000013598 vector Substances 0.000 description 6
- 230000000295 complement effect Effects 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 4
- 238000001514 detection method Methods 0.000 description 4
- 238000003491 array Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000013144 data compression Methods 0.000 description 3
- 230000002829 reductive effect Effects 0.000 description 3
- 230000000153 supplemental effect Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000001902 propagating effect Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000012384 transportation and delivery Methods 0.000 description 2
- 238000013316 zoning Methods 0.000 description 2
- RYGMFSIKBFXOCR-UHFFFAOYSA-N Copper Chemical compound [Cu] RYGMFSIKBFXOCR-UHFFFAOYSA-N 0.000 description 1
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000009172 bursting Effects 0.000 description 1
- 229910052802 copper Inorganic materials 0.000 description 1
- 239000010949 copper Substances 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 238000013439 planning Methods 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 210000003813 thumb Anatomy 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
- H03M7/4043—Adaptive prefix coding
- H03M7/4062—Coding table adaptation
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/42—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
압축/압축해제 연산들을 수행하기 위한 범용 프로세서 명령
디플레이트 변환 호출(A DEFLATE Conversion Call)은 범용 프로세서 명령이다. 컴퓨팅 환경의 범용 프로세서에 의해서 하나의 명령이 획득된다. 상기 명령은 압축을 위한 산업 표준을 준수하는 명령 세트 아키텍처의 단일 아키텍처 된 명령이다. 상기 명령이 실행되고, 상기 실행하는 단계는 변환된 상태의 데이터를 제공하기 위해 압축되지 않은 형식의 입력 데이터와 압축된 포맷의 입력 데이터 사이에서 상기 입력 데이터의 상태를, 압축 함수 또는 압축해제 함수인 상기 함수에 기초하여, 변환하는 단계(transforming)를 포함한다. 상기 변환된 상태의 데이터는 하나의 작업을 수행하는데 사용될 출력으로 제공된다.
디플레이트 변환 호출(A DEFLATE Conversion Call)은 범용 프로세서 명령이다. 컴퓨팅 환경의 범용 프로세서에 의해서 하나의 명령이 획득된다. 상기 명령은 압축을 위한 산업 표준을 준수하는 명령 세트 아키텍처의 단일 아키텍처 된 명령이다. 상기 명령이 실행되고, 상기 실행하는 단계는 변환된 상태의 데이터를 제공하기 위해 압축되지 않은 형식의 입력 데이터와 압축된 포맷의 입력 데이터 사이에서 상기 입력 데이터의 상태를, 압축 함수 또는 압축해제 함수인 상기 함수에 기초하여, 변환하는 단계(transforming)를 포함한다. 상기 변환된 상태의 데이터는 하나의 작업을 수행하는데 사용될 출력으로 제공된다.
Description
[0001] 본 발명의 하나 또는 그 이상의 실시 예들은, 일반적으로, 컴퓨팅 환경 내에서의 처리에 관한 것으로, 특히 압축/압축해제 연산들의 처리를 용이하게 하기 위한 것에 관한 것이다.
[0002] 하나 또는 그 이상의 컴퓨팅 환경들에서, 정보는, 원래의 압축되지 않은 형태가 아니라, 압축된 형태가 스토리지 디바이스들에서 유지된다. 압축된 형태는 원래의 형태보다 적은 바이트를 차지한다. 그 결과, 압축된 형태의 정보를 전송하고 유지하는 것이, 원래 형태의 정보로 동일 함수들을 수행하는 것과 비교하여, 시간과 공간을, 각각, 적게 요구한다.
[0003] 그러한 환경들에서, 운영 체제(OS)는 압축 및 압축해제 연산들을 수행하는 메커니즘을 제공한다. 일 예에서, 이들 연산들을 제공하기 위해, 운영 체제는 zlib 오픈-소스 소프트웨어 라이브러리(zlib open-source software library)를 포함하는데, 이는, 인터넷 엔지니어링 태스크 포스 요청 코멘트 1951 사양(the IETF (Internet Engineering Task Force) RFC (Request for Comments) 1951 specification)에 명시된, 디플레이트 표준 압축 기술(the DEFLATE standard compression technique)을 준수한다. 상기 메커니즘은 소프트웨어 구현을 포함할 수 있는데, 상기 소프트웨어 구현에서 사용자는 압축 또는 압축해제를 수행하기 위해 범용 프로세서 상에서 많은 명령들을 실행할 수도 있고, 또는 시스템의 입력/출력(I/O) 포트에 연결된 특수 목적 하드웨어 구현을 사용하여, I/O 디바이스가 상기 연산들을 수행하게 할 수도 있다.
[0004] 컴퓨팅 환경에서 처리를 용이하게 하기 위한 컴퓨터 프로그램 제품의 제공을 통해 종래 기술의 단점들이 극복되고 추가의 장점들이 제공된다.
상기 컴퓨터 프로그램 제품은 처리 회로에 의해 판독 가능하고, 방법을 수행하기 위해 명령들을 저장하는 컴퓨터 판독 가능 스토리지 매체를 포함한다. 상기 방법은 하나의 명령에 의해서 지원되는 복수의 함수들 중 하나의 함수를 수행하기 위해 상기 명령을, 상기 컴퓨팅 환경의 범용 프로세서에 의해서, 획득하는 단계(obtaining)를 포함한다. 상기 명령은 압축을 위한 산업 표준(industry standard for compression)을 준수하는 명령 세트 아키텍처의 단일 아키텍처 된 명령(a single architected machine instruction of an instruction set architecture)이다. 상기 명령은 실행되고, 상기 실행하는 단계는 변환된 상태의 데이터를 제공하기 위해 압축 안된 포맷의 입력 데이터와 압축된 포맷의 입력 데이터 사이에서 상기 입력 데이터의 상태를, 압축 함수 또는 압축해제 함수인 상기 함수에 기초하여, 변환하는 단계(transforming)를 포함한다. 상기 변환된 상태의 데이터는 하나의 작업을 수행하는데 사용될 출력으로 제공된다.
[0005] 압축 및/또는 압축해제 함수(또한, 연산이라고도 함)을 수행하기 위해 범용 프로세서 상에 디스패치 된 단일 아키텍처 된 명령을 사용함으로써, 이들 함수들을 수행하기 위한 원시 소프트웨어 명령들(primitive software instructions)의 상당한 서브세트가 상기 단일 아키텍처 된 명령에 의해서 대체된다. 이들 원시 명령들을 단일 아키텍처 된 명령으로 대체하는 것은 프로그램의 복잡성을 감소시키고 원시 명령들을 최적화하기 위한 코드를 포함할 필요를 제거한다. 전반적인 성능이 향상된다. 또한, 입력/출력 디바이스로 연산들을 디스패치 하지 않음으로써, 운영 체제는 입력/출력 디바이스가 연산을 수행하기 위해 대기하는 동안 작업 스위치들을 피할 수 있다.
[0006] 예로서, 상기 입력 데이터의 상태를 변환하는 단계는 상기 산업 표준을 준수하는 압축 포맷을 사용한다. 상기 압축 포맷은, 예를 들어, 디플레이트 압축 포맷(a DEFLATE compression format)을 포함한다.
[0007] 일 실시 예에서, 상기 작업은, 압축된 데이터를 포함하는, 상기 출력을 사용하는 하나 또는 그 이상의 연산들을 수행하는 단계, 상기 출력을 전송하는 단계, 압축되지 않은 데이터를 포함하는, 상기 출력을 사용하는 하나 또는 그 이상의 연산들을 수행하는 단계를 포함하는 작업들의 그룹으로부터 선택된다.
[0008] 일 실시 예에서, 상기 명령은 하나의 연산을 명시하기 위한 연산 코드를 포함하는 연산 코드 필드와 상기 명령에 의해서 사용되는 복수의 레지스터들을 명시하기 위한 복수의 레지스터 필드들을 포함한다. 상기 복수의 레지스터들은 출력으로 상기 명령에 의해서 사용될 출력 오퍼랜드 위치를 식별하기 위해 사용되는 하나의 레지스터와 입력으로 상기 명령에 의해서 사용될 입력 오퍼랜드 위치를 식별하기 위해 사용되는 다른 레지스터를 포함하고, 상기 입력은 수행될 상기 함수에 따라 달라진다(depending).
[0009] 예를 들어, 상기 함수가 압축 함수인 것에 기초하여, 상기 입력은 상기 출력 오퍼랜드 위치에 저장되는 압축된 데이터 심벌들을 제공하기 위해 엔코드 될 상기 입력 오퍼랜드 위치로부터 데이터를 포함하고, 상기 함수가 압축해제 함수인 것에 기초하여, 상기 입력은 상기 출력 오퍼랜드 위치에 저장되는 압축되지 않은 데이터를 제공하기 위해 디코드 될 상기 입력 오퍼랜드 위치로부터 상기 압축된 데이터 심벌들을 포함한다.
[0010] 압축 함수를 수행함에 있어서, 정보는, 원래의 압축되지 않은 원래의 형태가 아니라, 압축된 형태가 스토리지 디바이스들에서 유지된다. 정보의 압축된 형태는 원래의 형태보다 적은 바이트를 차지한다. 그 결과, 압축된 형태의 정보를 전송하고 유지하는 것이, 원래 형태의 정보로 동일 함수들을 수행하는 것과 비교하여, 시간과 공간을, 각각, 적게 요구한다.
[0011] 일 실시 예에서, 상기 명령은 상기 명령에 의해서 수행될 복수의 함수들 중 상 기 함수를 표시하기 위해 하나의 선택된 레지스터를 더 사용한다. 상기 복수의 함수들은 질의 함수(a query function), 상기 압축 함수, 동적-후프만 테이블 생성 함수(a generate dynamic-Huffman table function) 및 상기 압축해제 함수를 포함한다.
[0012] 일 실시 예에서, 상기 명령은 상기 복수의 함수들 중 하나 또는 그 이상의 함수들에 대해서 상기 명령에 의해서 사용되는 파라미터 블록의 주소를 제공하기 위해 다른 선택된 레지스터를 더 사용한다.
[0013] 다른 실시 예에서, 상기 수행될 함수는 동적-후프만 테이블 생성 함수(a generate dynamic-Huffman table function)이고, 상기 실행하는 단계는, 상기 함수가 동적-후프만 테이블 생성 함수임에 기초하여, 상기 수행될 함수가, 상기 명령의 다른 실행에서, 상기 압축 함수 또는 상기 압축 해제 함수 일 때, 사용될 동적 후프만 테이블의 압축된 표현(a compressed representation)을 생성하는 단계를 포함한다.
[0014] 본 발명의 하나 또는 그 이상의 실시 예들과 관련된 컴퓨터-구현 방법들 및 시스템들 또한 기술되고 이 출원에서 청구된다. 또한 본 발명의 하나 또는 그 이상의 실시 예들과 관련된 서비스들도 또한 기술되고 이 출원에서 청구될 수 있다.
[0015] 추가적인 특징들 및 장점들이 이 출원에서 설명된 기술들을 통해서 실현된다. 다른 실시 예들 및 특징들이 이 출원에서 상세하게 설명되고 청구항들의 일부로서 고려된다.
[0016] 본 발명의 하나 또는 그 이상의 특징들이 이 명세서의 결론 부분의 청구항들에 예 들로서 구체적으로 기재되고 명확하게 청구되었다. 본 발명의 하나 또는 그 이상의 실시 예들의 전술 한 목적들, 특징들, 및 장점들은 아래에 첨부된 도면들과 함께 작성된 상세한 설명으로부터 명백하다.
도 1a는 본 발명의 하나 또는 그 이상의 실시 예들을 통합하고 사용하기 위한 컴퓨팅 환경의 일 예를 도시한다;
도 1b는 본 발명의 하나 또는 그 이상의 실시 예들에 따라, 도 1a의 프로세서의 세부 사항들을 도시한다;
도 2는, 본 발명의 하나 또는 그 이상의 실시 예들을 통합하고 사용하기 위한 컴퓨팅 환경의 다른 예를 도시한다;
도 3a는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령(a DEFLATE Conversion Call (DFLTCC) instruction)의 일 포맷을 도시한다;
도 3b는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 사용되는, 묵시적 레지스터(an implied register), 일반 레지스터 0의 필드들의 일 예를 도시한다;
도 3c는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령을 위한 함수코드들의 일 예를 도시한다;
도 3d는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 사용되는, 묵시적 레지스터, 일반 레지스터 1의 필드의 일 예를 도시한다;
도 3e는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 명시되는, 레지스터, R1의 컨텐츠의 일 예를 도시한다;
도 3f는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 사용되는, 레지스터, R1+1의 컨텐츠의 일 예를 도시한다;
도 3g는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 명시되는, 레지스터, R2의 컨텐츠의 일 예를 도시한다;
도 3h는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 사용되는, 레지스터, R2+1의 컨텐츠의 일 예를 도시한다;
도 3i는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 명시되는, 레지스터, R3의 컨텐츠의 일 예를 도시한다;
도 3j는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령의 DFLTCC-QAF(질의 이용가능 함수들) 함수에 의해서 사용되는 파라미터 블록의 컨텐츠의 일 예를 도시한다;
도 3k는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령의 DFLTCC-GDHT(동적-후프만 테이블 생성) 함수에 의해서 사용되는 파라미터 블록의 컨텐츠의 일 예를 도시한다;
도 3l은, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령의 DFLTCC-CMPR(압축) 및 DFLTCC-XPND(확장)함수들에 의해서 사용되는 파라미터 블록의 컨텐츠의 일 예를 도시한다;
도 4는, 본 발명의 하나 또는 그 이상의 실시 예들에 따라, 서브-바이트 경계(a sub-byte boundary)의 일 예를 도시한다;
도 5a-5c는, 본 발명의 일 실시 예에 따라, 서브-바이트 경계가 DFLTCC-CMPR 함수에 대하여 어떻게 적용되는 지를 예시하는 예들을 도시한다;
도 6은, 본 발명의 일 실시 예에 따라, 압축 없는 한 블록의 데이터의 일 예를 도시한다;
도 7은, 본 발명의 일 실시 예에 따라, 고정-후프만 테이블(a fixed-Huffman table (FHT))을 사용하여 압축된 데이터 한 블록의 일 예를 도시한다;
도 8은, 본 발명의 일 실시 예에 따라, 동적-후프만 테이블(a dynamic-Huffman table (DHT))을 사용하여 압축된 데이터 한 블록의 일 예를 도시한다;
도 9는, 본 발명의 일 실시 예에 따라, 스토리지에 세트 된 압축된 데이터의 일 예를 도시한다;
도 10은, 본 발명의 일 실시 예에 따라, 데이터를 3 블록들의 압축된 데이터로 압축하는 프로그램의 샘플의 일 예를 도시한다;
도 11은, 본 발명의 일 실시 예에 따라, 한 세트의 제1 압축된 데이터 블록 상에서 연산하는(operating) DFLTCC-CMPR 함수를 위한 파라미터 블록 컨텐츠의 일 예를 도시한다;
도 12는, 본 발명의 일 실시 예에 따라, 한 세트의 제2 압축된 데이터 블록 상에서 연산하는(operating) DFLTCC-CMPR 함수를 위한 파라미터 블록 컨텐츠의 일 예를 도시한다;
도 13은, 본 발명의 일 실시 예에 따라, 압축된 데이터 세트로부터 데이터를 압축해제 하는 프로그램의 샘플의 일 예를 도시한다;
도 14a-14c는, 본 발명의 일 실시 예에 따라, DFLTCC-CMPR을 여러 번(multiple times) 실행한 전 및 후의 인-라인 히스토리 (an in-line history)의 예들을 도시한다;
도 15a-15c는, 본 발명의 일 실시 예에 따라, DFLTCC를 여러 번(multiple times) 실행한 전 및 후의 서큘러 히스토리 버퍼(a circular history buffer)의 예들을 도시한다;
도 16a-16c는, 본 발명의 일 실시 예에 따라, DFLTCC-XPND를 여러 번(multiple times) 실행한 전 및 후의 인-라인 히스토리 (an in-line history)의 예들을 도시한다;
도 17은, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령을 사용하는 것의 일 예를 도시한다;
도 18은, 본 발명의 일 실시 예에 따라, 서큘러 히스토리 버퍼를 사용하는 것의 일 예를 도시한다;
도 19a-19b는, 본 발명의 일 실시 예에 따라, 컴퓨팅 환경에서 처리를 용이하게 하는 것의 일 예를 도시한다;
도 20a는 본 발명의 하나 또는 그 이상의 실시 예들을 통합하고 사용하기 위한 컴퓨팅 환경의 다른 예를 도시한다;
도 20b는 도 20a의 메모리의 더 상세한 컨텐츠들을 도시한다;
도 21은 클라우드 컴퓨팅 환경의 일 실시 예를 도시한다; 그리고
도 22는 추상화 모델 게층들의 일 예를 도시한다.
도 1a는 본 발명의 하나 또는 그 이상의 실시 예들을 통합하고 사용하기 위한 컴퓨팅 환경의 일 예를 도시한다;
도 1b는 본 발명의 하나 또는 그 이상의 실시 예들에 따라, 도 1a의 프로세서의 세부 사항들을 도시한다;
도 2는, 본 발명의 하나 또는 그 이상의 실시 예들을 통합하고 사용하기 위한 컴퓨팅 환경의 다른 예를 도시한다;
도 3a는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령(a DEFLATE Conversion Call (DFLTCC) instruction)의 일 포맷을 도시한다;
도 3b는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 사용되는, 묵시적 레지스터(an implied register), 일반 레지스터 0의 필드들의 일 예를 도시한다;
도 3c는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령을 위한 함수코드들의 일 예를 도시한다;
도 3d는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 사용되는, 묵시적 레지스터, 일반 레지스터 1의 필드의 일 예를 도시한다;
도 3e는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 명시되는, 레지스터, R1의 컨텐츠의 일 예를 도시한다;
도 3f는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 사용되는, 레지스터, R1+1의 컨텐츠의 일 예를 도시한다;
도 3g는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 명시되는, 레지스터, R2의 컨텐츠의 일 예를 도시한다;
도 3h는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 사용되는, 레지스터, R2+1의 컨텐츠의 일 예를 도시한다;
도 3i는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령에 의해서 명시되는, 레지스터, R3의 컨텐츠의 일 예를 도시한다;
도 3j는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령의 DFLTCC-QAF(질의 이용가능 함수들) 함수에 의해서 사용되는 파라미터 블록의 컨텐츠의 일 예를 도시한다;
도 3k는, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령의 DFLTCC-GDHT(동적-후프만 테이블 생성) 함수에 의해서 사용되는 파라미터 블록의 컨텐츠의 일 예를 도시한다;
도 3l은, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령의 DFLTCC-CMPR(압축) 및 DFLTCC-XPND(확장)함수들에 의해서 사용되는 파라미터 블록의 컨텐츠의 일 예를 도시한다;
도 4는, 본 발명의 하나 또는 그 이상의 실시 예들에 따라, 서브-바이트 경계(a sub-byte boundary)의 일 예를 도시한다;
도 5a-5c는, 본 발명의 일 실시 예에 따라, 서브-바이트 경계가 DFLTCC-CMPR 함수에 대하여 어떻게 적용되는 지를 예시하는 예들을 도시한다;
도 6은, 본 발명의 일 실시 예에 따라, 압축 없는 한 블록의 데이터의 일 예를 도시한다;
도 7은, 본 발명의 일 실시 예에 따라, 고정-후프만 테이블(a fixed-Huffman table (FHT))을 사용하여 압축된 데이터 한 블록의 일 예를 도시한다;
도 8은, 본 발명의 일 실시 예에 따라, 동적-후프만 테이블(a dynamic-Huffman table (DHT))을 사용하여 압축된 데이터 한 블록의 일 예를 도시한다;
도 9는, 본 발명의 일 실시 예에 따라, 스토리지에 세트 된 압축된 데이터의 일 예를 도시한다;
도 10은, 본 발명의 일 실시 예에 따라, 데이터를 3 블록들의 압축된 데이터로 압축하는 프로그램의 샘플의 일 예를 도시한다;
도 11은, 본 발명의 일 실시 예에 따라, 한 세트의 제1 압축된 데이터 블록 상에서 연산하는(operating) DFLTCC-CMPR 함수를 위한 파라미터 블록 컨텐츠의 일 예를 도시한다;
도 12는, 본 발명의 일 실시 예에 따라, 한 세트의 제2 압축된 데이터 블록 상에서 연산하는(operating) DFLTCC-CMPR 함수를 위한 파라미터 블록 컨텐츠의 일 예를 도시한다;
도 13은, 본 발명의 일 실시 예에 따라, 압축된 데이터 세트로부터 데이터를 압축해제 하는 프로그램의 샘플의 일 예를 도시한다;
도 14a-14c는, 본 발명의 일 실시 예에 따라, DFLTCC-CMPR을 여러 번(multiple times) 실행한 전 및 후의 인-라인 히스토리 (an in-line history)의 예들을 도시한다;
도 15a-15c는, 본 발명의 일 실시 예에 따라, DFLTCC를 여러 번(multiple times) 실행한 전 및 후의 서큘러 히스토리 버퍼(a circular history buffer)의 예들을 도시한다;
도 16a-16c는, 본 발명의 일 실시 예에 따라, DFLTCC-XPND를 여러 번(multiple times) 실행한 전 및 후의 인-라인 히스토리 (an in-line history)의 예들을 도시한다;
도 17은, 본 발명의 일 실시 예에 따라, 디플레이트 변환 호출 명령을 사용하는 것의 일 예를 도시한다;
도 18은, 본 발명의 일 실시 예에 따라, 서큘러 히스토리 버퍼를 사용하는 것의 일 예를 도시한다;
도 19a-19b는, 본 발명의 일 실시 예에 따라, 컴퓨팅 환경에서 처리를 용이하게 하는 것의 일 예를 도시한다;
도 20a는 본 발명의 하나 또는 그 이상의 실시 예들을 통합하고 사용하기 위한 컴퓨팅 환경의 다른 예를 도시한다;
도 20b는 도 20a의 메모리의 더 상세한 컨텐츠들을 도시한다;
도 21은 클라우드 컴퓨팅 환경의 일 실시 예를 도시한다; 그리고
도 22는 추상화 모델 게층들의 일 예를 도시한다.
[0017] 본 발명의 일 실시 예에 따라 컴퓨팅 환경에서 처리를 용이하게 하는 능력이 제공된다. 일 예로서, 단일 명령(예를 들어, 하드웨어/소프트웨어 인터페이스에서 단일 아키텍처 된 하드웨어 머신 명령)이 데이터를 압축 및/또는 압축해제(압축 안됨이라고 도 함) 하기 위한, 압축 또는 압축해제 함수와 같은, 함수를 수행하기 위해 제공된다. 상기 명령은 범용 프로세서 명령 세트 아키텍처(ISA)의 일부이고, 이는 범용 프로세서 상에서 프로그램(예를 들어, 운영 체제 도는 사용자 프로그램)에 의해서 디스패치 된다. 압축/압축해제를 수행하기 위해 ISA 명령을 사용함으로써, 운영 체제에 의한 작업스위치들(task switches)은 압축/압축해제 연산들을 수행하기 위해 필요하지 않으며, 이 때문에 실행 사이클들을 절약할 수 있다. 또한, 데이터를 압축 및/또는 압축해제 하기 위해 단일 명령을 사용함으로써, 범용 프로세서와 같은, 프로세서 내의 실행 시간이 감소된다.
[0018] 일 예에서, 상기 명령은 디플레이트 표준(the DEFLATE standard)과 같은, 산업 표준을 준수하는 압축 및 압축해제 연산들을 수행하며, 상기 명령은 디플레이트 변환 호출 명령(a DEFLATE Conversion Call instruction)이라 한다. 디플레이트 표준은 데이터의 원래 형태에서(데이터의 압축 안된 형태에서) 중복 스트링들(duplicate strings)을 나타내는 압축된 데이터 심볼들을 위한 설명들(descriptions)을 포함한다. 그러한 심볼들은, 처리될 데이터의 현재 위치와 관련하여, 이전에 처리되었던, 중복 스트링의 위치 및 길이를 설명하는 중복 스트링의 포인터(a pointer) 및 길이를 포함한다. 데이터의 이전에 처리되었던 압축 안된 형태를 히스토리라 한다. 일 예에서, 히스토리는 메모리 내의 연속되는 바이트들의 수 (a contiguous number of bytes)이고, 이는, 예를 들어, 32K-바이트만큼 클 수 있다.
[0019] 본 발명의 하나 또는 그 이상의 특징들을 통합하고 사용하기 위한 컴퓨팅 환경의 일 실시 예를 도 1a를 참조하여 설명한다. 컴퓨팅 환경(100)은, 예를 들어, 프로세서(102)(예를 들어, 중앙 처리 유닛), 메모리(104)(예를 들어, 메인 메모리, 일명 시스템 메모리, 메인 스토리지, 중앙 스토리지, 스토리지), 및, 예를 들어, 하나 또는 그 이상의 버스들(108) 및/또는 다른 연결들을 통해 서로 결합된, 하나 또는 그 이상의 입력/출력(I/O) 디바이스들 및/또는 인터페이스들(106)을 포함한다.
[0020] 일 예에서, 프로세서(102)는 미국, 뉴욕주 아몽크에 소재하는 인터내셔널 비즈니스 머신즈 코포레이션에 의해 공급되는, z/Architecture® 하드웨어 아키텍처에 기초하고, IBM Z® 서버와 같은, 서버의 일부이며, 이 또한 인터내셔널 비즈니스 머신즈 코포레이션에 의해 공급되고, z/Architecture 하드웨어 아키텍처를 구현한다. z/Architecture 하드웨어 아키텍처의 한 실시 예는, 2017년 9월 발표된 IBM 공보 No. SA22-7832-11, 12판의 "z/아키텍처 연산 원리들"에 기술되어 있고, 이는 전체로서 이 명세서에 참조로 포함된다. z/Architecture 하드웨어 아키텍처는, 그러나, 오직 하나의 예시적인 아키텍처일 뿐이고, 다른 아키텍처들 및/또는 다른 유형의 컴퓨팅 환경들도 본 발명의 하나 또는 그 이상의 특징들을 포함하고 및/또는 사용할 수 있다. 일 예에서, 상기 프로세서는, 또한 인터내셔널 비즈니스 머신즈 코포레이션에 의해 공급되는, z/OS® 운영 체제와 같은, 운영 체제를 실행한다.
[0021] 프로세서(102)는 명령들을 실행하기 위해 사용되는 복수의 함수 컴포넌트들(functional components)을 포함한다. 도 1b에 도시한 바와 같이, 이들 함수 컴포넌트들은, 예를 들어, 실행될 명령들을 페치하기 위한 명령 페치 컴포넌트(120), 페치된 명령들을 디코드하고 디코드된 명령들의 오퍼랜드들을 획득하기 위한 명령 디코드 유닛(122), 디코드된 명령들을 실행하기 위한 명령 실행 컴포넌트(124), 명령 실행을 위해 메모리를 액세스하기 위한 메모리 액세스 컴포넌트(126), 필요하다면, 그리고 실행된 명령들의 결과들을 제공하기 위한 라이트 백 컴포넌트(130)을 포함한다. 하나 또는 그 이상의 이들 컴포넌트들은, 본 발명의 하나 또는 그 이상의 실시 예들에 따라, 압축/압축해제 처리(또는 본 발명의 하나 또는 그 이상의 실시 예들을 사용할 수 있는 다른 처리)에 사용되는 하나 또는 그 이상의 다른 컴포넌트들의 적어도 일부를 포함하거나, 또는 상기 하나 또는 그 이상의 다른 컴포넌트들에 대해 액세스 하며, 이에 관하여 후술한다. 상기 하나 또는 그 이상의 이들 컴포넌트들은, 예를 들어, 압축/압축해제 컴포넌트(또는 다른 컴포넌트)(136)을 포함한다.
[0022] 본 발명의 하나 또는 그 이상의 실시 예들을 통합하고 사용하는 컴퓨팅 환경의 다른 예가 도 2를 참조하여 설명된다. 한 예에서, 컴퓨팅 환경은 z/Architecture 하드웨어 아키텍처를 기초한다; 그러나, 컴퓨팅 환경은 인터내셔널 비즈니스 머신즈 코포레이션 또는 타사에서 제공하는 다른 아키텍처들에 기초할 수 있다.
[0023] 도 2를 참조하면, 일 예에서, 컴퓨팅 환경은 중앙 전자 콤플렉스(CEC)(200)를 포함한다. CEC(200)는, 예를 들어, 하나 또는 그 이상의 프로세서들(일명, 중앙 처리 유닛들(CPU들))(204) 및 입력/출력 서브시스템(206)에 결합된 메모리(202)(일명, 시스템 메모리, 메인 메모리, 메인 스토리지, 중앙 스토리지)와 같은 복수의 컴포넌트들을 포함한다.
[0024] 메모리(202)는, 예를 들어, 하나 또는 그 이상의 논리 파티션들(208), 논리적 파티션들을 관리하는 하이퍼 바이저(210), 및 프로세서 펌웨어(212)를 포함한다. 하이퍼 바이저(210)의 일 예는, 미국 뉴욕주, 아몽크에 소재하는, 인터내셔널 비즈니스 머신즈 코포레이션에 의해서 공급되는, 프로세서 리소스/시스템 매니저(PR /SMTM) 하이퍼 바이저이다. 본 명세서에 사용된 바와 같은, 펌웨어는, 예를 들어, 프로세서의 마이크로코드를 포함한다. 예를 들어, 펌웨어는 더 높은 수준의 머신 코드 구현에 사용되는 하드웨어 수준 명령들 및/또는 데이터 구조들이 포함된다. 일 실시예에서, 펌웨어는, 예를 들어, 기본 하드웨어에 특정한 마이크로코드 또는 신뢰할 수 있는 소프트웨어를 포함하고 시스템 하드웨어에 대한 운영 체제 액세스를 제어하는 마이크로코드로서 일반적으로 전달되는 재산권 있는 코드(proprietary code)를 포함한다.
[0025] 각각의 논리 파티션(208)은 별도의 시스템으로서 기능 할 수 있다. 즉, 각 논리 파티션은 독립적으로 리세트 될 수 있고, z/OS 운영 체제와 같은 게스트 운영 체제(220) 또는 다른 운영 체제를 실행하고, 다른 프로그램들(222)과 함께 작동할 수 있다. 논리 파티션에서 실행되는 운영 체제 또는 애플리케이션 프로그램은 전체적으로 완전하게(full and complete) 시스템에 액세스하는 것처럼 보이지만, 실제로는 그 중 일부만 이용 가능하다.
[0026] 메모리(202)는, 논리적 파티션에 할당될 수 있는 물리적 프로세서 리소스들인, 프로세서들(예를 들어, CPU의 204)에 결합된다. 예를 들어, 논리 파티션(208)은 하나 또는 그 이상의 논리 프로세서들을 포함하며, 이들 각각은 논리 파티션에 동적으로 할당될 수 있는 물리적 프로세서 리소스(204)의 전체 또는 공유를 나타낸다.
[0027] 또한, 메모리(202)는I/O 서브 시스템(206)에 결합된다. I/O 서브 시스템(206)은 중앙 전자 콤플렉스의 일부이거나 또는 그로부터 분리되어 있을 수 있다. 이는 메인 스토리지(202)와 입/출력 제어 유닛들(230) 및 중앙 전자 콤플렉스에 연결된 입/출력(I/O) 디바이스들(240) 사이의 정보 흐름을 지시한다(direct).
[0028] 많은 유형의 I/O 디바이스들이 사용될 수 있다. 하나의 특정 유형은 데이터 스토리지 디바이스(250)이다. 데이터 스토리지 디바이스(250)는 하나 또는 그 이상의 프로그램들(252), 하나 또는 그 이상의 컴퓨터 판독 가능 프로그램 명령들(254), 및/또는 데이터 등을 저장할 수 있다. 컴퓨터 판독 가능 프로그램 명령들은 본발명의 실시 예들의 기능들을 수행하도록 구성될 수 있다.
[0029] 하나의 예로서, 각각의 프로세서(204)는 캐시 계층의 적어도 하나의 캐시(260) (예를 들어, 로컬 캐시)를 포함하고, 캐시 계층은, 하나 또는 그 이상의 로컬 캐시들 및/또는 하나 또는 그 이상의 공유 캐시들을 포함하는, 복수의 레벨들의 캐시를 포함한다. 또한, 일 실시예에서, 로컬 캐시들 및 메모리(202)는 데이터의 압축 및/또는 압축해제(및/또는 하나 또는 그 이상의 본 발명의 실시 예들의 다른 연산들)를 수행하는 데 사용되는 압축/압축 해제 컴포넌트(또는 다른 컴포넌트)(262)에 결합된다. 다양한 예들에서, 이들 작업들을 수행하는 하나 또는 그 이상의 컴포넌트들이 있을 수 있다. 많은 변형들이 가능하다.
[0030] 일 실시 예에서, 프로세서 (예를 들어, 프로세서(204))는 명령(예를 들어,디플레이트 변환 호출 명령)을 획득하고, 상기 명령을 디코드 하며, 상기 명령에 의해서 사용될 주소들을 변환하는 것을 포함하는, 상기 명령을 위한 셋업을 수행하고, 상기 명령에 의해서 명시된 기능을 수행하기 위해, 컴포넌트(262)와 같은, 프로세서에 결합된 컴포넌트로 상기 명령을 위한 커맨드들을 보낸다. 컴포넌트(262)는 캐시 계층 및 메모리에 액세스하여, 명시된 기능을 수행함에 있어서, 데이터를 읽고, 처리하고 처리된 데이터를 다시 저장한다. 예로서, 컴포넌트(262)는 하드웨어 컴포넌트이다.
[0031]추가의 실시 예에서, 컴포넌트(262)의 적어도 일부는 상기 프로세서의 일부로서 포함된다. 많은 변형들이 가능하다.
[0032] 중앙 전자 콤플렉스 (200)는, 착탈식/비착탈식(removable/non-removable), 휘발성/비휘발성(volatile/non-volatile) 컴퓨터 시스템 스토리지 매체를 포함하거나 및/또는 이들에 결합 될 수 있다. 예를 들어, 중앙 전자 콤플렉스 (200)는, 비착탈식, 비휘발성 자기 매체(일반적으로 "하드 드라이브"라고 함), 착탈식, 비휘발성 자기 디스크(예를 들어, "플로피 디스크")에서 읽고 쓰기 위한 자기 디스크 드라이브, 및/또는, CD-ROM, DVD-ROM 또는 기타 광 매체와 같은, 착탈식, 비휘발성 광 디스크에서 읽거나 쓰기 위한 광 디스크 드라이브를 포함하거나 및/또는 이들에 결합될 수 있다. 다른 하드웨어 및/또는 소프트웨어 컴포넌트들이 중앙 전자 콤플렉스(200)와 함께 사용될 수 있음을 이해해야 한다. 예들은 마이크로코드, 디바이스 드라이버들, 리던던트 처리 유닛들, 외부 디스크 드라이브 어레이들, RAID 시스템들, 테이프 드라이브들, 및 데이터 아카이벌 스토리지 시스템들(data archival storage systems) 등을 포함하지만, 이에 국한되지는 않는다.
[0033] 또한, 중앙 전자 콤플렉스(200)는 다수의 다른 범용 또는 특수 목적 컴퓨팅 시스템 환경들 또는 구성들과 함께 운영 될 수 있다. 중앙 전자 콤플렉스(200)와 함께 사용하기에 적합할 수 있는 잘 알려진 컴퓨팅 시스템들, 환경들 및/또는 구성들의 예들은 개인용 컴퓨터(PC) 시스템들, 서버 컴퓨터 시스템들, 씬 클라이언트들, 씩 클라이언트들, 핸드헬드 또는 랩톱 디바이스들, 멀티 프로세서 시스템들, 마이크로프로세서 기반 시스템들, 셋톱 박스들, 프로그래밍 가능한 가전 제품들, 네트워크 PC들, 미니 컴퓨터 시스템들, 메인프레임 컴퓨터 시스템들 및 상기 시스템들 또는 디바이스들 중 어느 하나를 포함하는 분산 클라우드 컴퓨팅 환경들 등을 포함하나, 이에 한정하지는 않는다.
[0034] 컴퓨팅 환경들의 다양한 예들이 본 명세서에서 설명되었지만, 본 발명의 하나 또는 그 이상의 실시 예들은 많은 유형의 환경들에서 사용될 수 있다. 여기에 제공된 컴퓨팅 환경들은 오직 예시일 뿐이다.
[0035]본 발명의 일 실시 예에 따라, 컴퓨팅 환경(100) 또는 중앙 전자 콤플렉스(200)과 같은, 컴퓨팅 환경은 데이터를 압축하고 압축해제 하기 위한 메커니즘을 제공하는 변환 퍼실리티(a conversion facility)를 채용한다. 일 예에서, 변환 퍼실리티는 디플레이트 변환된 데이터 포맷을 이용하여 데이터를 압축하고 압축해제 하기 위한 메커니즘을 제공하는 퍼실리티 디플레이트 변환 퍼실리티(a DEFLATE conversion facility)이다. 일 예에서, 변환 퍼실리티는 퍼실리티 표시자(a facility indicator)가, 예를 들어, 1로 세트 될 때 시스템 내에 설치된다. z/Architecture 하드웨어 아키텍처의 일 특정 예로서, 변환 퍼실리티가 z/Architecture 아키텍처 모드에서 설치될 때, 퍼실리티 비트(151)는, 예를 들어, 1로 세트 된다. 상기 퍼실리티는, 예를 들어, 디플레이트 변환 호출 명령(the DEFLATE Conversion Call instruction)을 포함하며, 이에 관한 실시 예는 후술한다.
[0036]일 예에서, 디플레이트 변환 호출 명령은 원래(압축 안된) 형태의 데이터와 압축된 표현의 데이터 사이의 데이터의 상태를 변환하는 것에 관한 함수들을 수행하는데, 이는, IETF(인터넷 엔지니어링 태스크 포스)RFC(코멘트에 대한 요청) 1951 사양-이는 디플레이트 압축된 데이터 포맷 사양 버전 1.3 인터넷 엔지니어링 태스크 포스, 코멘트에 대한 요청 1951, 1996년 5월,에 기술되어 있다- 과 같은, 선택된 표준에 의해서 명시된다.
[0037]일 예에서, 압축 안된 데이터는 바이트들의 시퀀스이고, 데이터의 압축된 표현은 심볼들을 포함한다. 심볼들은,"리트럴 바이트(a literal byte)"라 불리는, 압축 안된 데이터의 개별 바이트를 나타내거나, 또는 "중복 스트링(a duplicate string)" 이라 불리는, 압축 안된 데이터의 리커링 시퀀스를 나타낸다. 예로서, 후프만 테이블(Huffman table)은 압축된 데이터 심볼들과 압축 안된 데이터 사이의 엔코딩 및 디코딩을 명시한다. 후프만 테이블들은 2개의 유형이 있다: 예를 들어, 가능한 모든 코딩들을 포함하는 미리 정해진 사양인 고정-후프만 테이블(FHT)과; 그리고 모든 가능한 코딩들의 서브세트가 될 수 있는, 압축될 데이터에 대해 구체적으로 생성된 한 세트의 코딩들인, 동적-후프만 테이블(DHT)의 2개의 유형이 있다. DHT로 생성된 데이터의 압축된 표현은 통상적으로 FHT로 생성된 동일 데이터의 압축된 표현보다 더 적다. 히스토리라 불리는, 최근에 가장 많이 처리된 압축 안된 데이터의 일부는 중복 스트링들을 나타내는 압축된 데이터 심볼들을 엔코딩 및 디코딩 하기 위해 유지된다. 히스토리는 중복 스트링들에 대한 참조 소스이다. 히스토리는 연산 동안 데이터가 처리됨에 따라 갱신된다.
[0038] 일 예에서, 표시한 바와 같이, 디플레이트 변환 호출 명령은 디플레이트 압축된 데이터 포맷을 사용하는데, 이는 RCF 1951, 디플레이트 압축된 데이터 포맷 사양 버전 1.3에 기술되어 있다. 디플레이트 변환 호출 명령에 적용되는 디플레이트 표준의 속성들은, 예를 들어, 다음과 같다:
●
압축된 데이터 세트는 일련의 블록들을 포함한다. 이들은 세가지 유형의 블록들이다. 한 유형은 길이 정보와 압축 안된 데이터가 뒤따르는 3-비트헤더(a 3-bit header)를 포함하고, 두개의 유형의 블록들은 압축된 데이터 엘리멘트들이 뒤따르는 3-비트헤더를 포함한다.
●
압축된 데이터 엘리멘트들은 동적-후프만 테이블, 압축된 데이터 심볼들, 및 엔드-오브-블록(EOB)심볼의 압축된 표현을 포함할 수 있다.
●
압축된 데이터 엘리멘트들은 다양한 비트 길이들을 갖는다.
●
압축된 데이터 엘리멘트들은 스토리지 내 바이트 경계들 사이에서 시작하거나 또는 종료될 수 있다.
●
압축된 데이터 엘리멘트들은, 예를 들어, 최우측 비트 위치로부터 최좌측 비트 위치까지 순서로 바이트들에 로드 된다.
[0039] 압축된 데이터 엘리멘트들이 스토리지 내 바이트의 일부를 차지하고, 전부를 차지하지 않을 때도, 스토리지 내 전체 바이트가 액세스된다. 스토리지 오퍼랜드 길이들은 주소지정 가능 바이트들의 수를 명시하는데, 이는 압축된 데이터가 차지하는 것 보다 더 많은 비트들을 명시한다.
[0040] 압축된 데이터 블록들에 관한 추가적인 상세한 설명은 후술한다.
[0041] 디플레이트 변환 호출(DFLTCC) 명령의 일 실시 예가 도 3a-3l을 참조하여기술된다. 일 예에서, 상기 명령은 범용 프로세서(예를 들어, 프로세서 102 또는 204)를 이용하여 실행된다. 본 명세서에서, 특정 위치들, 특정 필드들 및/또는 필드들의 특정 크기들이 표시된다(예를 들어, 특정 바이트들 및/또는 비트들). 그러나, 다른 위치들, 필드들 및/또는 크기들도 제공될 수 있다. 또한, 비트를, 예를 들어, 1 또는 0의 특정 값에 세트 하더라도, 이건은 오직 예 일뿐이다. 다른 예들에서, 비트는 반대 값과 같은 다른(different) 값 또는 또다른(another) 값에 세트 될 수 있다. 많은 변형들이 가능하다.
[0042] 일 실시 예에서, 프로그램(예를 들어, 운영 체제 또는 사용자 프로그램)은 단일 데이터 스트림을 압축 또는 압축해제 하기 위해 여러 차례 디플레이트 변환 호출 명령을 실행할 수 있다. 예를 들어, 애플리케이션이 대규모 데이터 스트림(1M-바이트보다 큰)을 압축하거나, 또는 압축해제 할 때, 연산은 상기 데이터 스트림의 버퍼 된 부분들을 압축, 또는 압축해제 하기 위해 다수의 호출들을 포함할 수 있다. 본 발명의 일 실시 예에 따라, 프로그램은 버퍼(예를 들어, 32K-바이트 버퍼)를 선언하는데, 이는 디플레이트 변환 호출 명령의 다수 실행들에 걸친 연산 동안 처리된 압축 안된 데이터의 히스토리를 축적하기 위해 사용된다. 상기 버퍼를 서큘러 히스토리 버퍼라 하는데, 이는, 여기서 기술하는 바와 같이, 디플레이트 변환 호출 명령을 이용하여 정의된다.
[0043] 도 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들을 포함하며; 그렇지 않으면, 프로그램은 향후 호환되게 연산하지 못한다. 여기서 사용된, 상기 프로그램은 디플레이트 변환 호출 명령을 발행하는 프로그램이다. 그것은 사용자 프로그램, 운영 치제 또는 다른 유형의 프로그램일 수 있다.
[0044] 일 실시 예에서, 상기 명령의 실행은 하나 또는 그 이상의 묵시적 일반 레지스터들(one or more implied general registers)(즉, 상기 명령에 의해서 명시적으로 지정되지 않은 레지스터들)의 사용을 포함한다. 예를 들어, 일반 레지스터들 0 및 1이, 전술 한, 디플레이트 변환 호출 명령의 실행에 사용된다. 일반 레지스터 0은, 일 예에서, 수행될 함수(및 히스토리 버퍼 유형, 후술한다)를 명시하기 위해 사용되고, 일반 레지스터 1은 상기 명령에 의해서 사용된 파라미터 블록의 위치를 제공하기 위해 사용된다.
[0045] 일 예로서, 도 3b를 참조하며, 일반 레지스터 0(309)은 히스토리 버퍼 유형 필드(310) 및 함수 코드 필드(312)를 포함한다. 하나의 특정 예에서, 일반 레지스터 0의 비트 위치(56)는 히스토리 버퍼 유형을 포함하고, 일반 레지스터 0의 비트 위치들(57-63)은 함수 코드를 포함한다; 그러나 다른 실시 예들에서, 히스토리 버퍼 유형 및/또는 함수 코드를 포함하기 위해 다른 비트들이 사용될 수 있다. 일반 레지스터 0의 비트들 57-63이 할당되지 않거나 또는 설치되지 않은 함수 코드를 지정할 때, 한 예에서, 명세 예외(a specification exception )가 인지된다.
[0046] 디플레이트 변환 호출 명령을 위해 할당된 함수 코드의 예가 도 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바이트이다. 다른 함수 코드들은 이 예에서 할당되지 않았다. 예시적인 함수들 및 함수 코드들이 설명되었지만, 다른 함수들 및/또는 함수 코드들이 사용될 수 있다.
[0047] 명시된 함수가 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들을 포함해야 한다; 그렇지 않으면 향후 프로그램이 호환되지 않을 수 있다.
[0048] 디플레이트 변환 호출 명령에 의해 사용되는, 다른 묵시적 레지스터, 일반 레지스터 1에 관한 더 자세한 사항은 도 3d를 참조하여 설명한다. 일반 레지스터 1(314)의 컨텐츠는, 예를 들어, 스토리지에 있는 파라미터 블록의 최좌측 바이트의 논리 주소(316)를 명시한다. 한 예에서 파라미터 블록은 4K 바이트 경계에서 지정된다; 그렇지 않으면 명세 예외가 인지된다. 파라미터 블록에 대한 자세한 사항은 아래에서 자세히 설명한다.
[0049] 명시된 함수들(예를 들어, DFLTCC-QAF, DFLTCC-GDHT, DFLTCC-CMPR, DFLTCC-XPND)을 위해, 일반 레지스터들 0, 1, 및 R3의 컨텐츠는 수정되지 않는다. 또한, 일 예에서, R1 필드(304)는 일반 레지스터들의 짝수-홀수 쌍을 지정한다. 짝수 레지스터를 지정하는 것이지 일반 레지스터 0을 지정하는 것이 아니다; 그렇지 않으면 명세 예외가 인지된다.
[0050] 도 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오퍼랜드의 길이를 보여주는 예들을 제공한다:
[0051] 명시된 함수가 DFLTCC-XPND일 때, 일반 레지스터 R 1 + 1의 컨텐츠는 제1오퍼랜드의 길이를 명시한다. 명시된 함수가 DFLTCC-CMPR 또는 DFLTCC-XPND일 때, 데이터 압축 또는 압축 해제의 결과들은 제1오퍼랜드 위치에 저장된다. DFLTCC-QAF 또는 DFLTCC-GDHT 함수가 명시될 때, 일반 레지스터 R1 및 R1 + 1의 컨텐츠는 무시된다.
[0052] 또한, 명시된 함수들(예를 들면, DFLTCC-QAF, DFLTCC-GDHT, DFLTCC-CMPR 및 DFLTCC-XPND)을 위해서, 일 실시 예에서, R2 필드(306)는 일반 레지스터들의 짝수 - 홀수 쌍을 지정한다. 짝수 레지스터를 지정하는 것이지 일반 레지스터 0을 지정하는 것이 아니다; 그렇지 않으면 명세 예외가 인지된다.
[0053] 도 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오퍼랜드는 액세스되지 않는다.
[0054] DFLTCC-QAF 함수가 명시될 때, 일반 레지스터들 R2 및 R2 + 1의 컨텐츠는 무시된다. DFLTCC-GDHT 함수가 명시되고 일반 레지스터 R2 + 1의 컨텐츠가 0과 같은 길이를 명시할 때, 명세 예외가 인지되고 제2오퍼랜드는 액세스되지 않는다. DFLTCC-CMPR 또는 DFLTCC-XPND 함수가 명시되고, 파라미터 블록의 계속 플래그(CF) 필드가 상기 명령 실행 시작 시에 0이며, 일반 레지스터 R2 + 1의 컨텐츠가 0과 같은 길이를 명시할 때, 명세 예외가 인지되고 제2오퍼랜드는 액세스되지 않는다.
[0055] 도 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을 명시하지 않는다; 그렇지 않으면, 한 예에서, 명세 예외가 인지된다.
[0056] 연산의 일부로서, 명시된 함수가 DFLTCC-CMPR이고, 일반 레지스터 R1의 주소는 처리 비트 위치 0을 포함했던 제1오퍼랜드의 처리 된 바이트 수만큼 증가되며, 그리고 일반 레지스터 R1 + 1의 길이가 같은 수만큼 감소될 때, 일반 레지스터 R2 의 주소는 제2오퍼랜드의 처리된 바이트 수만큼 증가되고, 그리고 일반 레지스터 R2 + 1의 길이는 같은 수만큼 감소된다. 처리 비트 위치 0을 포함했던 제1오퍼랜드의 처리된 바이트 수는, 예를 들어, 처리된 출력 비트 수와 SBB의 원래 값의 합인 피제수(dividend)와 8의 값인 제수(divisor)를 갖는 정수 나눗셈(an integer division)의 결과인 정수 몫(integer quotient)이다. 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 달라지며, 이에 관하여 후술한다.
[0057] 연산의 일부로서, 명시된 함수가 DFLTCC-XPND이고, 일반 레지스터 R1의 주소가 제1오퍼랜드의 처리된 바이트 수만큼 증가되며, 그리고 일반 레지스터 R1 + 1의 길이가 같은 수만큼 감소될 때, 일반 레지스터 R2 의 주소는 처리 비트 위치 0을 포함했던 제2오퍼랜드의 처리된 바이트 수만큼 증가되고, 그리고 일반 레지스터 R2 + 1의 길이는 같은 수만큼 감소된다. 처리 비트 위치 0을 포함했던 제2오퍼랜드의 처리된 바이트 수는 처리된 입력 비트 수와 SBB의 원래 값의 합인 피제수와 8의 값인 제수를 갖는 정수 나눗셈의 결과인 정수 몫이다. 주소들 및 길이들의 형성 및 갱신은 주소 지정 모드에 따라 달라지며, 이에 관하여 후술한다.
[0058] 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의 컨텐츠는 변경되지 않은 상태로 유지된다.
[0059] 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의 컨텐츠는 변경되지 않은 상태로 유지된다.
[0060] 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의 대응 비트를 대체한다.
[0061] 상기 액세스 레지스터 모드에서, 액세스 레지스터들 1, R1, R2 및 R3은 파라미터 블록, 제1오퍼랜드, 제2오퍼랜드, 및 서큘러 히스토리 버퍼를, 각각, 포함하는 주소 공간을 명시한다. 인라인 히스토리 버퍼가 있는 DFTCC-CMPR이 액세스 레지스터 모드에서 명시될 때, 액세스 레지스터 R2 는 인라인 히스토리를 포함하는 주소 공간을 명시한다. 인라인 히스토리 버퍼가 있는 DFTCC-XPND가 액세스 레지스터 모드에서 명시 될 때, 액세스 레지스터 R1 은 인라인 히스토리를 포함하는 주소 공간을 명시한다.
[0062] 여러 가지 함수들에 대한 자세한 사항들은 아래에 설명된다:
함수 코드 0: DFLTCC-QAF(쿼리 이용 가능 함수들)
[0063] DFLTCC-QAF(쿼리 이용 가능 함수들)함수는 설치된 함수들 및 설치된 파라미터 블록 포맷들의 이용 가능성을 표시하기 위한 메커니즘을 제공한다. DFLTCC-QAF 함수에 대한 파라미터 블록의 한 가지 예시적인 포맷이 도 3j를 참조하여 설명된다. 일 예에서, DFLTCC-QAF함수(예를 들어, 함수 코드 0)에 대한 파라미터 블록(340)은 설치된 함수들 벡터(342) 및 설치된 파라미터 블록 포맷 벡터(346)를 포함한다. 하나의 특정 예에서, 이들 벡터들은 파라미터 블록의 바이트 0-15 및 바이트 24-25에, 각각, 저장된다. 상기 벡터들의 각각은 아래에서 더 설명된다.
[0064] 예를 들어, 설치된 함수들 벡터(342)의 비트0-127은, 각각, 디플레이트 변환 호출 명령의 함수 코드0-127에 대응된다. 비트가, 예를 들어, 1일 때, 대응 함수가 설치된다; 그렇지 않으면 상기 함수는 설치되지 않는다.
[0065] 또한, 일 예에서, 설치된 파라미터 블록 포맷들 벡터(346)의 비트0-15는 DFLTCC-GDHT, DFLTCC-CMPR 및 DFLTCC-XPND 함수들에 대한 파라미터 블록 포맷들 0-15에, 각각, 대응한다. 비트가, 예를 들어, 1일 때, 대응 파라미터 블록 포맷은 설치된다; 그렇지 않으면 파라미터 블록 포맷은 설치되지 않는다. 한 예에서, 0들이 파라미터 블록의 유보된 바이트 16-23 및 26-31에 저장된다.
[0066] 특정 필드들이 파라미터 블록(340)에 대하여 설명되었지만, 추가의, 더 적은 및/또는 다른 필드들이 다른 실시 예들에서는 포함될 수 있다.
[0067] 일 실시 예에서, 일반 레지스터들 R1, R2, R3, R1 + 1 및 R2 + 1의 컨텐츠는 DFLTCC-QAF 함수에 의해 무시된다.
[0068] PER(프로그램 이벤트 히스토리) 스토리지 변경 이벤트가, 적용 가능할 때, 파라미터 블록에 대해서, 인지된다. 적용 가능할 때, 파라미터 블록에 대해서, PER 0 주소 검출 이벤트가 인지된다.
[0069] 일 예에서, DFLTCC-QAF 함수의 실행이 완료 될 때, 조건 코드 0이 세트 된다; 한 예에서, 조건 코드들 1, 2, 3은 쿼리 함수에 대해서는 적용할 수 없다.
함수 코드 1: DFLTCC-GDHT(동적-후프만 테이블 생성)
[0070] DFLTCC-GDHT 함수가 명시될 때, 제2오퍼랜드는, 예를 들어, 디플레이트 표준(DEFLATE standard)에 의해 명시된 바와 같은, 동적-후프만 테이블(DHT)의 압축된 표현을 생성하기 위한 소스로서, 사용된다.
[0071] 일 예에서, DFLTCC-GDHT 함수는 파라미터 블록을 사용하는데, 이에 관한 예가 도 3k를 참조하여 설명된다. 본 명세서에 설명된 예시적인 파라미터 블록에서는, 특정 필드들에 대한 파라미터 블록 내의 특정 위치들 및 상기 필드들의 특정 크기들이 표시된다(예를 들어, 특정 바이트 및/또는 비트). 그러나 다른 위치들 및/또는 크기들이 상기 필드들의 하나 또는 그 이상을 위해 제공될 수 있다. 또한, 비트를 특정 값, 예를 들어, 1 또는 0에 세트 하는 것이 명시되더라도, 이는 오직 예시일 뿐이다. 비트는, 다른 예에서 반대 값 또는 다른 값과 같은, 다른 값으로 세트 될 수 있다. 많은 변형들이 가능하다.
[0072] 또한, 일 예에서, 파라미터 블록은 하나 또는 그 이상의 보존된 필드들(preserved fields)과 하나 또는 그 이상의 유보된 필드들(reserved fields)을 포함한다. 보존된 필드들은 DFLTCC-GDHT 함수에 의해 수정되지 않는다. 보존된 필드들은 프로그램이 단일 스토리지 위치를 초기화하여, DFLTCC-GDHT 함수의 파라미터 블록을 위해 해당 스토리지 위치를 사용하고, 이후에 DFLTCC-CMPR 함수의 파라미터 블록을 위해 동일한 스토리지 위치를 사용할 수 있도록 하기 위해 유보된 필드들과는 구별된다. 유보된 필드들은 0들을 포함해야 한다; 그렇지 않으면 프로그램이 향후 호환되지 않을 수 있다. 연산이 종료될 때, 유보된 필드들은 0들로 저장되거나 변경되지 않은 상태로 유지될 수 있다.
[0073] 또한, 상기 필드들 중 일부는 다른 함수들(예를 들어, DFLTCC-CMPR 또는 DFLTCC-XPND)에 의해 사용되며, 따라서 이러한 함수들과 관련된 실시 예들은, 또한, 이들 필드들의 설명과 함께 기술될 수도 있다.
[0074] 일 예에서, DFLTCC-GDHT 함수를 위한 파라미터 블록(360)은 다음 필드들을 포함한다:
[0075] 파라미터 블럭 버전 번호(PBVN)(362): 파라미터 블록의0-1 바이트 파라미터 블록의 버전과 크기를 명시한다. PBVN의 비트 0-11은 유보되고 0들을 포함해야 한다; 그렇지 않으면 프로그램이 향후 호환되지 않을 수 있다. PBVN의 비트 12-15는 파라미터 블록의 포맷을 명시하는 부호 없는 이진 정수를 포함한다. DFLTCC-QAF 함수는 이용 가능한 파라미터 블록 포맷을 표시하기 위한 메커니즘을 제공한다. 명시된 파라미터 블록의 포맷이 모델에 의해서 지원되지 않을 때, 일반 오퍼랜드 데이터 예외가 인지된다. PBVN은 프로그램에 의해 명시되고 상기 명령의 실행 중에는 수정되지 않는다.
[0076] 모델 버전 번호(MVN)(363): 파라미터 블록 바이트 2는 상기 명령을 실행했던 모델을 식별하는 부호 이진 정수이다. 프로그램은 MVN을 초기화하는 데 필요하지 않다. MVN은 상기 명령의 실행 중에 갱신된다. MVN에 저장된 값은 모델에 따라 다르다(model-dependent).
[0077] 동적-후프만 테이블(DHT) 생성 제어(DHTGC)(364): 파라미터 블록의 바이트 17의 비트 2는 동적-후프만 테이블(DHT)을 생성하는데 적용된다. DHT는 리터럴 바이트들(literal bytes), 중복 스트링 길이들, 엔드-오브-블록(EOB) 심볼, 및 중복 스트링 포인터 거리들을 나타내는 심볼들에 대해 후프만 코드들을 명시한다. 특정 심볼에 대한 후프만 코드의 값은, 데이터의 압축 안된 포맷에서, 심볼이 나타내는, 엔터티(entity)에 대한 발생들의 카운트(the count of occurrences)의 함수이다. 심볼에 대한 카운트가 0일 때, 상기 심볼에 대한 DHT의 후프만 코드는 존재하지 않는다. DHTGC는, 한 예에서, 0과 같은 카운트들이 다음과 같이 취급될 것임을 명시한다.
[0078] 리터럴 바이트들, EOB 심볼, 중복 스트링 길이들, 및 중복 스트링 포인터 거리들의 모든 가능한 값에 대한 후프만 코드를 명시하는 DHT를, 범용 DHT(a universal DHT)라 부른다. 데이터의 압축 안된 형태에서 발생하지 않는 리터럴 바이트들, 중복 스트링 길이들, 또는 중복 스트링 포인터 거리들의 값들에 대해 후프만 코드를 명시하지 않는 DHT를 비범용 DHT(a non-universal DHT )라 한다.
[0079] DHTGC의 모든 값들에 대해, 최종 DHT는, 디플레이트 표준에 의해 정의된, 모든 가능한 중복 스트링 길이들 및 포인터 거리들에 대한 후프만 코드들을 명시한다. 따라서, DHT의 최종 압축된 포맷의 HLIT(후프만 리터럴) 및 HDIST(후프만 거리들) 서브 엘리멘트들은, 아래에서 추가로 설명되며, 각각은, 예를 들어, 29의 값을 포함한다.
[0080] DHTGC는 DFLTCC-GDHT 함수가 명시될 때 연산에 대한 입력이다. DHTGC는 DFLTCC-CMPR 또는 DFLTCC-XPND 함수가 명시될 때는 연산에 적용되지 않는다. DHTGC는, 일 실시 예에서, 상기 명령의 실행 동안 수정되지 않는다.
[0081] 연산 종료 보조 코드(Operation Ending Supplemental Code: OESC)(365): 파라미터 블록의 바이트19는 프로그램에 보고되는 조건에 대한 추가 정보를 제공하는 부호 없는 이진 정수이다. 이 필드는 다수의 함수들에 의해 사용되기 때문에, 일부 조건들은 다른 함수들에 의해서 사용되는 파라미터 블록(예를 들어, DFLTCC-CMPR 및 DFLTCC-XPND 함수들에 의해서 사용되는 도 3l의 파라미터 블록)의 필드들을 참조한다. 보고되는 조건이 일반 오퍼랜드 데이터 예외일 때, 파라미터 블록의 OESC 필드가 갱신되더라도 연산이 억제된 것으로 간주되며, 이 경우가, 한 예에서, 다음과 같이 정의된다.
[0082] 일반 오퍼랜드 데이터 예외의 보고 없이 연산이 종료될 때, 0들이 OESC 필드에 저장된다.
[0083] 0이 아닌 보조 코드들(supplemental codes)에 대한 지원은 모델에 따라 다르다. 여러 조건들이 존재할 때, 만일 있다면, 어떤 코드가 OESC 필드에서 보고되는지는 모델에 따라 다르다.
[0084] 압축 동적-후프만 테이블 길이(CDHTL)(366): 파라미터 블록의 바이트 56의 비트 4로 시작하여 바이트 57의 비트7에 걸친, 12 비트들은, 파라미터 블록의 CDHT 필드(예를 들어, CDHT367)에 있는 DHT의 압축된 포맷의, 비트 카운트로서, 길이를 명시하는 부호 없는 이진 정수를 포함한다.
[0085] CDHTL은 DFLTCC-GDHT 함수가 명시되었을 때 연산으로부터의 출력이다.
[0086] CDHTL은 DFLTCC-CMPR 함수가 명시되고, 후프만 테이블 유형(예를 들어, 도 3l의 HTT(376))이 1일 때, 연산으로의 입력이다. CDHTL이 CDHT에 대하여 적절한 길이를 명시하지 않을 때, 일반 오퍼랜드 데이터 예외가 인지된다. CDHTL은 DFLTCC-CMPR 함수가 명시될 때 수정되지는 않는다.
[0087] DFLTCC-XPND 함수가 명시되고 BTYPE이 10 이진수인 블록의 일부만을 디코드 한 후에 연산이 종료될 때, 상기 블록 내의 DHT의 압축된 표현의 길이는 이 필드에 저장된다. DFLTCC-XPND함수가 명시되고 연산이 블록 경계에서 종료되거나 또는 BTYPE이 00 또는 01 이진수인 블록의 일부만 디코드 한 후 종료될 때, 0들이 이 필드에 저장된다. 압축 해제 연산이 BTYPE이 10 이진수인 블록 내에서 재개될 때(즉, CF(도 3l의 계속 플래그 373)가 1이고 IFS(불완전 함수 상태 383)가 C 또는 D 16진수와 같을 때, 아래에 설명됨), 이 필드는 상기 연산에 대한 입력이 된다.
[0088] 압축 동적-후프만 테이블(CDHT)(367): 파라미터 블록의 바이트 64-351은 동적-후프만 테이블(DHT)의 압축 포맷을 포함한다.
[0089] DHT는 2 세트의 엘리먼트들을 나타내기 위한 후프만 코드(비트 시퀀스들)를 명시한다. 한 세트의 엘리멘트들에는 리터럴 바이트들, EOB 심볼, 및 중복 스트링 길이들이 포함된다. 다른 세트의 엘리멘트들에는 중복 스트링 포인터 거리들이 포함된다. DHT의 압축된 표현은 코드 길이들의 세트를 정의하고 각 세트의 각 엘리멘트에 대한 코드 길이(CL)를 명시한다. 연산 중에 참조될 것으로 예상되는 엘리멘트에 대한 후프만 코드는 해당 엘리멘트에 대해 명시된 CL과 동일 명시된 CL을 갖는 동일한 세트의 엘리멘트들의 수로부터 파생된다. 구체적으로, DHT의 압축된 표현은, 예로서, 다음을 포함한다:
●
리터럴 바이트들, EOB 심볼 및 중복 스트링 길이들을 나타내는 후프만 코드들의 수를 명시하기 위한 HLIT 필드.
●
중복 스트링 포인터 거리들을 나타내는 후프만 코드들의 수를 명시하기 위한 HDIST 필드.
●
코드 길이들을 나타내는 후프만 코드들의 수를 명시하기 위한 HCLEN(후프만 코드 길이들) 필드.
●
각각, 예를 들어, 압축된 DHT에 대해 정의된 19개의 코드 길이들의 각각에 대한 비트 길이를 명시하는 코드들의 시퀀스.
●
리터럴 바이트들, EOB 심볼, 및 중복 스트링 길이들로 구성된 세트의 엘리멘트들의 각각에 대한 코드 길이를 명시하는 코드들의 시퀀스.
●
중복 스트링 포인터 거리들로 구성된 세트의 엘리멘트들의 각각에 대한 코드 길이를 명시하는 코드들의 시퀀스.
[0090] DHT의 압축된 표현의 더 자세한 사항들은 블록 유형 10 이진수로 압축된 데이터 블록에 대한 설명을 참조하여 설명한다.
[0091] 일 실시 예에서, DHT의 압축된 표현은 CDHT 필드에서 좌측에 정렬된다 (justified). 즉, 바이트 64의 최우측 비트는 DHT의 압축된 표현의 HLIT 서브-엘리멘트의 최하위 비트(the least-significant bit)를 포함한다.
[0092] DHT의 압축된 표현은 DFLTCC-GDHT 함수가 명시될 때, 연산으로부터의 출력이다.
[0093] DHT의 압축된 표현은 DFLTCC-CMPR 함수가 명시되고, HTT가, 후술하는 바와 같이, 1일 때, 연산에 대한 입력이다. CDHT 필드는 DFLTCC-CMPR 함수에 의해 수정되지 않는다.
[0094] DFLTCC-XPND 함수가 명시되고 BTYPE이 10 이진수인 블록의 일부만을 디코드 한 후에 연산이 종료될 때, 상기 블록 내의 DHT의 압축된 표현은 이 필드에 저장된다. DFLTCC-XPND 함수가 명시되고 연산이 블록 경계에서 종료되거나 또는 BTYPE이 00 혹은 01 이진수인 블록의 일부만 디코드 한 후 종료될 때, 0들이 이 필드에 저장된다. 압축 해제 연산이 BTYPE 이10 이진수인 블록 내에서 재개될 때(즉, CF가 1과 같고 IFS가 C 또는 D 16진수와 같을 때), 이 필드는 상기 연산에 대한 입력이다.
[0095]CDHT가 수정될 때, DHT의 압축된 표현을 나타내기 위해 사용되지 않는 필드의 비트들은 0들로서 저장된다.
[0096] 다양한 필드들이 파라미터 블록(360)에 대해 위에서 상술되었지만, 추가의, 더 적은 및/또는 다른 필드들이 다른 실시 예들에서 포함될 수 있다.
[0097] DHT 생성의 실시 예들은 파라미터 블록의 동적-후프만 테이블 생성 제어부(DHTGC) 필드(364)를 사용하여 프로그램에 의해서 머신에 대해 명시된다. 소스는 압축되지 않은 데이터를 포함하고 연산을 완료한 후, 생성된 결과는 DFLTCC-CMPR 함수로 명시되어 동일한 소스를 압축하도록 되어 있다.
[0098] 일 실시 예에서, 현재 연산을 처리하는 동안은 이전의 연산들로부터 참조할 히스토리가 없다.
[0099] 일반 레지스터 R2 + 1의 컨텐츠가, 예를 들어, 32K-바이트들보다 더 큰 길이를 명시할 때, 일 예에서, 다음이 적용된다:
●
제2오퍼랜드의 제1 32K-바이트만 DHT를 생성하는 데 사용된다.
●
액세스 예외가 제2오퍼랜드의 처음 32K-바이트를 초과하는 위치들에 대해서는 인지되지 않는다.
[00100] 일반 레지스터 R2 + 1의 컨텐츠가 0과 같은 길이를 명시할 때, 명세 예외가 인지되고, 제2오퍼랜드는 액세스되지 않는다.
[00101] 최종 압축된 DHT(resulting compressed DHT)는 엔드-오브-블록(EOB) 심볼을 나타내는 후프만 코드를 포함한다.
[00102] 생성된 DHT의 압축된 포맷은 파라미터 블록의 압축된 동적-후프만 테이블(CDHT) 필드(367)에 저장된다. 생성된 DHT의 압축된 포맷의 길이는 파라미터 블록의 CDHTL 필드(366)에 저장된다.
[00103] 연산은 파라미터 블록의 모델 버전 번호 필드(363)에 모델 식별(a model identification)을 저장하는 단계를 포함한다.
[00104] 일반 오퍼랜드 데이터 예외를 인지함이 없이 연산이 종료될 때, 0들이 파라미터 블록의 연산 종료 보조 코드(operation ending supplemental code: OESC) 필드(365)에 저장된다.
[00105] DFLTCC-GDHT 함수의 실행이 완료된 때, 조건 코드 0이 세트 된다; 조건 코드 1, 2 및 3은 DFLTCC-GDHT 함수에 적용될 수 없다.
[00106] 일반 레지스터 R2 및 R2 + 1의 컨텐츠는 상기 연산에 의해 변경되지 않는다.
[00107] 일반 레지스터 R1, R1 + 1 및 R3의 컨텐츠는DFLTCC-GDHT 함수가 명시될 때 무시된다.
[00108] 적용 가능한 때, 제2 오퍼랜드 위치 및 파라미터 블록에 대해 PER 영 주소 검출 이벤트(PER zero address detection event)가 인지된다.
함수 코드 2: DFLTCC-CMPR(압축)
[00109] DFLTCC-CMPR 함수가 명시될 때, 압축 연산이 수행된다. 상기 연산은 제2 오퍼랜드 위치로부터의 데이터를, 제1 오퍼랜드 위치에 저장되는, 압축된 데이터 심볼들로 인코드 하는 것을 포함한다.
[00110] 일 예에서, DFLTCC-CMPR 함수는 파라미터 블록을 사용하는데, 이에 관한 일 예는 도 3l을 참조하여 기술된다. 일부 필드들은 파라미터 블록(360)과 관련하여 위에서 설명되었으며, 따라서 동일한 참조 번호로 아래에 나열되며 더 이상 상세하게 설명되지 않는다.
[00111] 일 실시 예에서, 파라미터 블록(370)은 다음을 포함한다.
파라미터 블록 버전 번호(PBVN)(362).
모델 버전 번호(MVN)(363).
[00112] 계속 플래그(CF)(373): 파라미터 블록의 비트 63 은, 1일 때, 연산이 부분적으로 완료하고, 계속 상태 버퍼(예를 들어, 계속 상태 버퍼 필드(392)에서)의 컨텐츠는 연산을 다시 시작하는데 사용될 수 있음을 표시한다. 프로그램은 연산을 재개할 목적으로 명령이 다시 실행해야 하는 경우 계속 플래그(CF)를 0으로 초기화하고 CF를 수정하지 않는다; 그렇지 않으면 결과들은 예측 불가능 하다.
[00113] 신규 태스크(NT)(374): 파라미터 블록의 바이트 16의 비트 0은, 1일 때, 연산이 압축된 데이터 세트의 시작에 적용됨을 표시한다. 따라서 이전 연산으로부터의 히스토리 및 체크 값이 현재 연산에는 적용 되지 않는다. NT가 연산의 시작 시에 1이고, 연산이 부분 완료 후 종료될 때, 0이 NT 필드에 저장된다. NT가 0일 때, 이전 연산으로부터의 히스토리 및 체크 값이 현재 연산에 적용된다.
[00114] 체크 값 유형(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 비트는 명령 실행 중에 수정되지 않는다.
[00115] 후프만 테이블 유형(HTT)(376): 파라미터 블록의 바이트 16의 비트 4는, 0일 때, 디플레이트 표준에 의해서 정의된, 고정-후프만 코드들(FHT)을 포함하는 테이블이, 압축 연산 중에 사용됨을 명시한다. HTT가 1일 때, 파라미터 블록의 CDHT 필드에 명시된, DHT(Dynamic-Huffman Codes)를 포함하는 테이블이 압축 연산 중에 사용된다. HTT는 압축 해제 연산에는 적용되지 않는다. HTT 비트는 명령 실행 중에는 수정되지 않는다.
[00116] 블록 계속 플래그(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 비트는 명령 실행 중에는 수정되지 않는다.
[00117] 블록 클로징 제어(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 비트는 명령 실행 중에 수정되지 않는다.
[00118] 블록 헤더 파이널(BHF)(379): 파라미터 블록의 16 바이트의 비트 7은 DFLTCC-CMPR 함수가 명시되고 BCF(377)이 0이거나 또는 NT(374)가 1일 때 적용된다; 그렇지 않으면 BHF는 적용되지 않는다. 적용 가능하고 1일 때, 블록 헤더(BFINAL)의 제1비트는 블록 헤더를 제1오퍼랜드 위치에 저장하기 전에 1로 세트 된다. 적용 가능하고 0일 때, 블록 헤더(BFINAL)의 제1비트는 블록 헤더를 제1 오퍼랜드 위치에 저장하기 전에 0으로 세트 된다. BHF 비트는 명령 실행 중에 수정되지 않는다.
[00119] DHT 생성 제어(DHTGC)(364): DHTGC는 DFLTCC-CMPR 함수가 명시될 때 연산에 적용되지 않는다. DHTGC 는 명령 실행 중에 수정되지 않는다.
[00120] 서브-바이트 경계(SBB)(381): 파라미터 블록의 바이트18의 비트 5-7은 압축된 데이터 스트림의 바이트 내에서 처리된 비트들과 처리되지 않은 비트들 사이의 경계를 명시하는 부호 없는 이진 정수를 포함한다. 참조된 스트림의 바이트는, 연산이 종료될 때, 최우측 바이트를 의미하는, 참조된 마지막 바이트이고, 연산이 시작되거나 재개될 때, 최좌측 바이트를 의미하는, 참조될 제1 바이트이다. DFLTCC-CMPR 함수가 명시될 때, SBB는 제1오퍼랜드 주소에 의해서 지정된 바이트에 적용된다. DFLTCC-XPND 함수가 명시될 때, SBB는 제2오퍼랜드 주소에 의해서 지정된 바이트에 적용된다. SBB는 처리된 최우측 비트들의 수를 명시한다. SBB는 연산의 입력이고 연산의 출력이다.
[00121] SBB가 011 이진수의 값을 가질 때 압축된 데이터 스트림의 일 예가 도 4에 도시된다. 연산 종료 후 처리된 데이터가 (400)에 도시되고; 연산 시작 전에 처리될 데이터는 (402)에 도시된다.
[00122] 또한, 도 5a-5c는 SBB가 DFLTCC-CMPR 함수에 어떻게 적용되는지를 보여주는 예를 제공한다. 예를 들어, DFLTCC-CMPR 함수를 실행하기 전과 후에 SBB가 어떻게 적용되는지에 대한 일 예가 도 5a에 도시되어 있다. 다른 예들은 도 5b-5c에 도시되어 있다. NT(374)가 1일 때, SBB(381)은 000 이진수와 같은 것으로 처리된다.
[00123] 도 3l로 돌아가서, 파라미터 블록(370)의 추가 필드를 설명한다:
연산 종료 보조 코드(OESC)(365).
[00124] 불완전 함수 상태(IFS)(383): 파라미터 블록의 바이트21의 비트 4-7은 특정 연산들이 종료될 때 상태 정보를 포함한다. 압축 해제 연산이 종료될 때, IFS는, 일 예에서, 제2오퍼랜드에 대한 정보를 다음과 같이 전달한다:
[00125] 일 실시 예에서, 압축 해제 연산은 0000 이진수와 같은 IFS로 종료될 수 있고 정상 완료를 만족할 수 없다. 그러한 경우들에서, 조건 코드 1 또는 3이 세트 된 상태로 연산이 종료된다.
[00126] 압축 연산이 종료될 때, IFS 필드가 정의되지 않지만, 수정 될 수 있다.
[00127] IFS는 연산에 대한 입력이 아니다.
[00128] 불완전 함수 길이(IFL)(384): 파라미터 블록의 바이트22-23은 특정 연산이 종료될 때 길이 정보를 포함한다. 압축 해제 연산이 BTYPE이 00 이진수와 같은 블록의 전체가 아닌 일부를 디코드 한 후 종료될 때, IFL은, 아직 처리되지 않은, 제2 오퍼랜드 내의 블록의 바이트들의 수를 명시하는 부호 없는 이진 정수를 포함한다. 바이트 22-23은, 예를 들어, 리틀 엔디안 바이트 순서로 되는, BTYPE가 00 이진수와 같은 블록의 LEN 필드와는 달리, 예를 들어, 빅 엔디안 바이트 순서로 IFL을 포함한다.
[00129] 압축 해제 연산이 BTYPE이 00 이진수와 같고 BFINAL 이 1과 같은 완전한 블록을 디코드 한 후 종료될 때, 0들이 IFL 필드에 저장된다. BTYPE이 0이 아닌 블록의 전부가 아닌, 일부를 디코드 한 후 종료되거나, 또는 블록 경계에서 종료될 때, IFL 필드는 정의되지 않지만, 수정될 수 있다.
[00130] 압축 연산이 종료 될 때, IFL 필드가 정의되지 않지만, 수정 될 수 있다.
[00131] IFL은 연산에 대한 입력은 아니다.
[00132] 히스토리 길이(HL)(385): 파라미터 블록의 바이트 44-45는 연산 중에 참조 될 수 있는 히스토리 버퍼 내의 히스토리의 바이트들의 수를 명시하는 부호 없는 이진 정수를 포함한다. HL은 인라인 및 서큘러 히스토리 버퍼들에 적용된다. 신규 작업(NT)이 1과 같을 때, 연산의 시작에 히스토리가 적용되지 않고 히스토리 길이는 연산에 대한 입력으로서 0으로 취급된다.
[00133] 일반 오퍼랜드 데이터 예외는 히스토리 길이가, 예를 들어, 32,768 보다 크고 NT가 0과 같을 때 인지된다.
[00134] 히스토리 길이는 압축 및 압축 해제 연산들 동안 수정된다. 원래 HL과 연산 동안 처리된 압축되지 않은 데이터 바이트들의 수의 합이, 예를 들어, 32,768보다 작거나 같을 때, 갱신된 HL은 원래 HL과 연산 동안 처리된 압축되지 않은 데이터 바이트들의 수의 합과 같다; 그렇지 않으면 갱신된 HL은 32,768의 값과 같다.
[00135] 히스토리 오프셋(HO)(386): 파라미터 블록의, 바이트46의 비트 1부터 시작하여 바이트 47의 비트 7에 걸치는, 15비트는, 히스토리 버퍼가 서큘러일 때, 제3 오퍼랜드 내의 오프셋을 명시하는 부호 없는 이진 정수를 포함한다. R3 의 컨텐츠와 히스토리 오프셋의 합은 서큘러 히스토리 버퍼 내에서, 상기 버퍼에서 압축되지 않은 데이터의 최근에 가장 적게 처리된 바이트인, 히스토리의 제1 바이트의 위치를 지정한다. 히스토리 버퍼 유형이 서큘러 일 때, 히스토리 오프셋은 연산에 대한 입력이고 연산의 종료 시에 갱신 된다. 원래 HL과 연산 동안 처리된 압축 안된 데이터 바이트들의 수의 합이, 예를 들어, 32,768보다 작거나 같을 때, 갱신된 HO는 원래 HO와 같게 된다; 그렇지 않으면 갱신된 HO는 원래 HO, 원래 HL, 및 연산 동안 처리된 압축 안된 데이터 바이트들의 수의 합인, 모듈로(modulo) 32,768과 같다.
[00136] 히스토리 버퍼 유형이 인라인(in-line) 일 때, 파라미터 블록의 HO 필드는 정의되지 않지만, 수정 될 수 있다.
[00137] 체크 값(387): 파라미터 블록의 바이트 48-51은 체크 값을 포함한다. 연산의 일부로서 체크 값이 생성된다. 체크 값은 압축되지 않은 데이터 오퍼랜드에 적용된다. 즉, 체크 값은 DFLTCC-CMPR 함수에 대한 제2오퍼랜드에 적용되고 DFLTCC-XPND 함수에 대한 제1오퍼랜드에 적용된다. CVT 비트(375)가 0일 때, 예를 들어, 32-비트 사이클릭-리던던시-체크 체크 값(CRC-32)이 생성된다. CVT 비트가 1일 때, 예를 들어, 32-비트 아들러 체크섬 체크 값(Adler-32)이 생성된다.
[00138] 체크 값을 생성하는 것에 대한 입력은, 예를 들어, 4바이트 베이스(base) 및 연산 중에 처리되는 압축되지 않은 데이터이다. 베이스 입력은, 압축된 데이터 블록의 완전한 세트 를 처리하기 위해 DFLTCC 명령이 실행되는 횟수에 관계없이, 압축된 데이터 블록 세트에 대한 단일의 일관된 체크 값을 계산하기 위한 수단을 제공한다. NT 비트가 0일 때, 체크 값 필드의 원래 값은 체크 값을 생성할 때 베이스 입력을 위해 사용된다.
[00139] 아들러-32 체크 값이 생성될 때, 일 예에서, 다음이 적용된다:
●
NT 비트가 1일 때, 1의 값이 4-바이트 베이스 입력을 위해 사용된다.
●
아들러-32 체크 값 생성에서 정의된 합들은 모듈로 65,521이다.
●
결과는 빅엔디안 바이트 순서로 체크 값 필드에 저장된다. 즉, 체크 값의 최상위 바이트는 바이트 48에 위치하고 체크 값의 최하위 바이트는 바이트 51에 위치한다.
[00140] 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에 위치한다.
[00141] 일 실시 예에서, 체크 값은 연산이 조건 코드 0 세트로 종료될 때 프로그램에만 의미가 있을 뿐이다; 그렇지 않으면 체크 값은 중간 결과일 뿐이며 연산을 재개하는 데에만 의미가 있을 뿐이다. DFLTCC-CMPR 함수가 명시되고 연산이 조건 코드 1, 2 또는 3 세트로 종료될 때, 제2오퍼랜드 주소에 의해서 지정된 바이트의 왼쪽에 있는 일부 바이트들은 최종 체크 값의 계산에 포함되지 않을 수도 있다. DFLTCC-XPND 함수가 명시되고 조건 코드 1, 2 또는 3세트로 연산이 종료될 때, 제1오퍼랜드 주소에 의해서 지정된 바이트의 오른쪽에 아직 저장되지 않은 일부 결과 바이트는 최종 체크 값의 계산에 이미 포함되어 있을 수 있다.
[00142] 엔드-오브-블록 심볼(EOBS)(388): 파라미터 블록의, 바이트 52의 비트0에서 시작하여, 바이트 53의 비트6에 걸친, 열 다섯 비트들은 엔드-오브-블록(EOB) 심볼을 포함한다. 파라미터 블록의 엔드-오브-블록 길이(end-of-block length: EOBL) 필드(389)는 EOBS 필드 내 EOB 심볼의 길이를 명시한다. EOB 심볼은 EOBS 필드에서 왼쪽에 정렬된다(left justified). EOB 심볼에 의해서 점유되지 않는 EOBS 필드의 비트들은 0들로 저장된다. EOBS 필드는 어느 유형의 후프만 테이블이 적용되는지에 관계없이 데이터를 압축할 때 연산의 출력이 된다. EOBS 필드는 연산에 대한 입력으로는 사용되지 않는다.
[00143] 바이트 52의 비트0은 EOB 심볼의 최상위 비트를 포함한다. EOB 심볼의 길이가 7비트들일 때, 바이트 52의 비트 6은 EOB 심볼의 최하위 비트를 포함한다. EOB 심볼의 길이가 15비트들일 때, 바이트 53의 비트 6은 EOB 심볼의 최하위 비트를 포함한다.
[00144] FHT를 사용하는 블록들에 있어서, EOB 심볼은, 디플레이트 표준에 의해 정의된 바와 같이, 0000000이진수이다. DHT를 사용하는 블록들에 있어서, EOB 심볼은 DHT에 의해 정의된다. EOB 심볼은 프로그램이 블록을 닫는 능력을 제공하기 위해 전달된다.
[00145] EOBS 필드는 DFLTCC-XPND함수가 명시되지만 수정될 수 있을 때 정의되지 않는다.
[00146] 엔드-오브-블록 길이(EOBL)(389): 파라미터 블록의 바이트 54의 비트들 0-3은 파라미터 블록의 EOBS 필드(388) 내에 엔드-오브-블록(EOB) 심볼의 길이를 명시하는 부호 없는 이진 정수를 포함한다. 길이는 EOBS 필드에서 EOB 심볼이 차지하는 비트들의 수를 명시한다. EOBL 필드는, 어느 유형의 후프만 테이블이 적용되는지에 관계없이, 데이터를 압축할 때 연산의 출력이다. EOBL 필드는 연산에 대한 입력으로는 사용되지 않는다.
[00147] EOBL 필드는 DFLTCC-XPND 함수가 명시되지만 수정될 수 있을 때 정의되지 않는다.
압축된 동적-후프만 테이블 길이(CDHTL)(366).
[00148] 압축된 동적-후프만 테이블(CDHT)(367): DHT의 압축된 표현은 DFLTCC-CMPR 함수가 명시되고 HTT가 1일 때 연산에 대한 입력이다. CDHT 필드는 DFLTCC-CMPR 함수에 의해 수정되지 않는다.
[00149] 계속 상태 버퍼(CSB)(392): 조건들이 1의 값을 CF 필드(373)에 저장되게 할 때, 내부 상태 데이터(internal state data)는 파라미터 블록의 바이트들384-1535에 저장된다; 그렇지 않으면 파라미터 블록의 바이트들 384-1535는 정의되지 않고 수정될 수 있다. 저장된 내부 상태 데이터는 모델에 따라 다르며(model-dependent) 이후에 연산을 재개하기 위해 사용할 수 있다. 계속 상태 버퍼가, 예를 들어, 모두 0들을 포함하도록 프로그램이 계속 상태 버퍼를 초기화하는 것이 예상되지만, 요구되는 것은 아니다. 명령이 0이 아닌 조건 코드 세트로 종료된 후 연산을 재개할 목적으로 명령을 다시 실행하기 전에 프로그램은 계속 상태 버퍼를 수정해서는 안된다; 그렇지 않으면 결과들은 예측 불가능하게 된다(unpredictable).
[00150] 다양한 필드들이 파라미터 블록(370)에 관하여 위에서 기술되었지만, 추가의, 더 적은 및/또는 다른 필드들이 다른 실시 예들에 포함될 수 있다.
[00151] 압축 연산의 일 예가 데이터를 압축하는 것에 관하여 아래에서 기술된다.
[00152] 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이 세트 된다.
[00153] 주소들 및 길이들의 형성 및 갱신하는 것은 주소지정 모드에 따라 다르다.
[00154] 정상 완료가 발생할 때, 파라미터 블록의 CSB 필드(392)는 연산이 종료된 후에는 정의되지 않는다.
[00155] 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이 세트 된다.
[00156] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다.
[00157] CPU-결정된 수의 바이트들은 모델에 따라 다르고 명령이 실행될 때마다 그 수가 다를 수 있다(a different number).
[00158] 조건 코드 3 세트로 명령이 종료된 이후, 프로그램은 명령에 대한 입력 또는 출력 사양을 수정하지 않고 연산을 재개하기 위해 명령을 다시 실행하려고 다시 분기할 것으로 예상된다.
[00159] 특정 상황들에서, 조건 코드 3 세트로 명령을 종료함에도 불구하고, 파라미터 블록 및 일반 레지스터들은 갱신되지 않는다. 이들 상황들은 CPU가 디플레이트 변환 호출 명령을 실행하는 동안 정지 연산(a quiescing operation) 또는 CPU 재시도(retry)를 수행할 때 발생할 수 있다. 이들 경우들에서, CPU-결정된 처리된 바이트들의 수는 0이고, 데이터는 제1오퍼랜드 위치에 저장되었을 수 있고, 데이터는, 적용 가능 할 때, 제3 오퍼랜드 위치에 저장되었을 수 있으며, 대응 변경 비트들은 세트 되었다.
[00160] 제1 오퍼랜드 길이는, 일 예에서, 다음 조건 중 하나가 적용될 때 일 실시 예에서, 연산을 완료하기에 불충분하다:
●
일반 레지스터 R1 + 1의 컨텐츠에 의해서 명시된, 제1 오퍼랜드 길이는 명령의 실행 시작 시에 0이다.
●
제1 오퍼랜드 길이는 명령 실행 중에 0과 같게 되어 정상 완료가 발생하지 않는다.
[00161] 일 예에서, 제1 오퍼랜드의 길이는, 일반 레지스터 R1 + 1의 컨텐트가 0일 때, 파라미터 블록의 NT 및 SBB 필드 값들에 상관없이, 0이다.
[00162] 제 오퍼랜드 길이가 명령의 실행 중에 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이 세트 된다.
[00163] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다.
[00164] 제1 오퍼랜드 길이가 명령 실행 시작 시에 0일 때, 연산은 종료되고, 일 실시예에서, 다음이 발생한다.
●
조건 코드 1이 세트 된다.
[00165] 조건 코드 1 세트로 명령이 종료된 이후, 프로그램이 제1 오퍼랜드의 길이, 제1오퍼랜드의 주소, 또는 둘 모두를 수정하고 연산을 재개하도록 명령을 다시 실행하는 것이 예상된다.
[00166] 다음 사항에 대해서, 적용 가능할 때, PER 스토리지 변경 이벤트가 인지된다:
●
후술하는 바와 같이, 파라미터 블록에 저장한다.
●
제1 오퍼랜드 위치에 저장한다.
●
제3 오퍼랜드 위치에 저장하고, 이는, 예를 들어, 히스토리 버퍼 유형(HBT)이 1(서큘러)일 때, 발생한다.
[00167] 전체 파라미터 블록은 PER 스토리지 영역 지정과 중첩될 때, 파라미터 블록에 대해서, 적용 가능 할 때, PER 스토리지 변경 이벤트가 인지된다. 파라미터 블록의 일부만 PER 스토리지 영역 지정과 중첩될 때, 다음 중 어떤 일이 발생하는지는 모델에 따라 다르다.
●
PER 스토리지 변경 이벤트는, 적용 가능할 때, 파라미터 블록에 대해 인지된다.
●
PER 스토리지 변경 이벤트는, 적용 가능할 때, 저장된 파라미터 블록 부분에 대해 인지된다.
[00168] PER 0-주소-검출 이벤트는, HBT가 1(서큘러)일 때, 파라미터 블록, 제1오퍼랜드 위치, 제2오퍼랜드 위치, 및 제3오퍼랜드 위치에 대해서, 적용 가능할 때, 인지된다.
[00169] 조건 코드 2는 DFLTC-CCMPR 함수에 대해서는 적용 가능하지 않다.
[00170] 명령이 조건 코드 1 또는 3 세트로 종료될 때, 제2 오퍼랜드 위치로부터 참조되는 입력 데이터는 완전하게, 또는 부분적으로만 처리될 수 있다. 입력 데이터가 부분적으로만 처리될 때, 파라미터 블록의 제1 오퍼랜드 위치, 제1 오퍼랜드 주소, 제1 오퍼랜드 길이 및 SBB 필드가 갱신된 제2 오퍼랜드 주소 및 길이와 일치하는 상태를 나타내지 않는다. 이들 경우들에서, 부분적으로 처리된 데이터와 내부 상태 정보는 파라미터 블록의 CSB 필드에 배치될 수 있다. 부분적으로 처리되는 데이터의 양은 연산이 종료되는 시점에 존재하는 조건들과 모델에 따라 다르다. 일부 데이터는 부분적으로만 처리될 수 있더라도, 갱신된 제1 오퍼랜드 주소에 의해서 지정된 위치의 왼쪽에 저장된 결과들은 완전하므로(complete) 연산이 재개될 때 수정되지 않는다. 또한 프로그램은 이후에 연산을 재개하기 위해 명령을 다시 실행하는 것이 예상되고, 이때 CSB 필드의 컨텐츠는 연산을 재개하기 전에 참조된다. 명령이 조건 코드 0 세트로 모든 데이터는 완전하게 처리되고 입력 및 출력 데이터와 관련된 모든 결과들은 일관된 상태를 나타낸다.
[00171] 0이 아닌 조건 코드 세트로 명령이 종료된 이후, 및 연산을 재개할 목적으로 명령을 재-실행하기 전에, 프로그램은 파라미터 블록의 어떤 필드들도 수정해서는 안된다; 그렇지 않으면 결과들은 예측할 수 없게 된다.
함수 코드 4: DFLTCC-XPND(확장)
[00172] DFLTCC-XPND 함수가 명시된 때, 압축 해제 연산이 수행된다. 연산은 제2 오퍼랜드 위치로부터 압축된 데이터 심볼들을, 제1 오퍼랜드 위치에 저장되는, 압축 안된 데이터로 디코드 하는 것을 포함한다.
[00173] 일 예에서, DFLTCC-XPND 함수는 파라미터 블록을 사용하며, 이에 대한 일 예가 도 3k-3l과 관련하여 위에서 기술되었다.
[00174] DFLTCC-XPND 연산의 일 예는 데이터를 압축 해제하는 것과 관련하여 아래에서 설명한다.
[00175] 제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이 세트 된다.
[00176] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다.
[00177] 정상 종료가 발생할 때, 파라미터 블록의 CSB 필드(392)는 연산이 종료된 후에는 정의되지 않는다.
[00178] 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이 세트 된다.
[00179] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다.
[00180] CPU-결정된 수의 바이트들은 모델에 따라 다르고, 명령이 실행될 때마다 다른 수가 될 수 있다.
[00181] 조건 코드 3 세트로 명령이 종료된 이후, 프로그램은 명령에 대한 어떠한 입력 또는 출력 사양도 수정하지 않고 연산을 재개하기 위해 명령을 다시 실행하도록 다시 분기하는 것이 예상된다.
[00182] 특정 상황들에서, 조건 코드 3 세트로 명령을 종료함에도 불구하고, 파라미터 블록 및 일반 레지스터들은 갱신되지 않는다. 이들 상황들은 CPU가 디프레이트 변환 호출 명령을 실행하는 동안 정지 연산 또는 CPU 재시도를 수행할 때 발생할 수 있다. 이들 경우들에서, CPU-결정된 바이트들의 수는 0이고, 데이터는 제1 오퍼랜드 위치에 저장되었을 수 있고, 적용 가능 할 때, 데이터는 제3 오퍼랜드 위치에 저장되었을 수 있으며, 그리고 대응 변경 비트들은 세트 되었다.
[00183] 예를 들어, 다음이 적용될 때, 제2 오퍼랜드 길이는 연산을 완료하기에 충분하지 않다:
●
BFINAL이 1과 같은 압축된 데이터 블록의 마지막 엘리멘트는 연산 중에 디코드 되지 않았고, 제2 오퍼랜드 길이와 SBB에 의해서 지정된, 제2 오퍼랜드의 비트 수는 디코드할 다음 엘리멘트의 비트들의 수보다 적으며, 제2 오퍼랜드 위치로 부터의 데이터를 디코드 하는 것으로부터의 모든 결과들은 제1 오퍼랜드 위치에 배치되었다.
[00184] 제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가 세트 된다.
[00185] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다.
[00186] 조건 코드 2 세트로 명령이 종료된 이후에, 프로그램은 제2오퍼랜드 길이, 제2오퍼랜드 주소, 또는 둘 모두를 수정하고 연산을 재개하기 위해 명령을 다시 실행하는 것이 예상된다.
[00187] 예를 들어, 다음이 적용될 때, 제1 오퍼랜드 길이는 연산을 완료하기에 충분하지 않다:
●
제2 오퍼랜드 위치로부터의 데이터를 디코드 하는 것으로부터의 결과들은 제1 오퍼랜드 길이가 0과 같기 때문에 제1 오퍼랜드 위치에 배치될 수 없다.
[00188] 제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이 세트 된다.
[00189] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다.
[00190] 조건 코드 1 세트로 명령이 종료된 이후, 프로그램은 제1 오퍼랜드 길이, 제1오퍼랜드 주소, 또는 둘 모두를 수정하고 연산을 재개하도록 명령을 다시 실행하는 것이 예상된다.
[00191] PER 스토리지-변경 이벤트가, 적용 가능 할 때, 다음에 대해서, 인지된다:
●
여기서 기술한 바와 같은, 파라미터 블록에 대한 저장들.
●
제1 오퍼랜드 위치에 대한 저장들.
●
제3 오퍼랜드 위치에 대한 저장들. 이는, 예를 들어, 히스토리 버퍼 유형(HBT)이 1(서큘러)일 때 발생한다.
[00192] 일 예에서, 전체 파라미터 블록이 PER 스토리지 영역 지정과 중첩될 때, PER 스토리지 변경 이벤트는, 적용 가능 할 때, 파라미터 블록에 대해서, 인지된다. 파라미터 블록의 일부만이 PER 스토리지 영역 지정과 중첩될 때, 일 실시 예에서, 다음 중 어느 것이 발생하는지는 모델에 따라 다르다.
●
PER 스토리지 변경 이벤트는, 적용 가능할 때, 파라미터 블록에 대해 인지된다.
●
PER 스토리지 변경 이벤트는, 적용 가능할 때, 저장된 파라미터 블록 부분에 대해 인지된다.
[00193] PER 0-주소-검출 이벤트는, HBT가 1(서큘러)일 때, 파라미터 블록, 제1 오퍼랜드 위치, 제2 오퍼랜드 위치 및 제3오퍼랜드 위치에 대해서, 적용 가능할 때, 인지된다.
[00194] 명령이 조건 코드 1, 2 또는 3 세트로 종료될 때, 제2 오퍼랜드 위치로부터 참조된 입력 데이터는 완전하게 또는 부분적으로만 처리될 수 있다. 입력 데이터가 부분적으로만 처리될 때, 파라미터 블록의 제1 오퍼랜드 위치, 제1 오퍼랜드 주소, 제1 오퍼랜드 길이, SBB 필드, 파라미터 블록의 체크 값 필드, 파라미터 블록의 HL 필드, 파라미터 블록의 IFS 필드 블록 및, 적용 가능 할 때, 파라미터 블록의 제3 오퍼랜드 위치 및 HO 필드는, 갱신된 제2 오퍼랜드 주소 및 길이와 일치하는 상태를 나타내지 않는다. 이들 경우들에서, 부분적으로 처리된 데이터와 내부 상태 정보는 파라미터 블록의 CSB 필드에 배치될 수 있다. 부분적으로 처리되는 데이터의 양은 연산이 종료되는 시점에 존재하는 조건들과 모델에 따라 다르다. 일부 데이터가 부분적으로만 처리될 수 있을지라도, 갱신된 제1 오퍼랜드 주소에 의해서 지정된 위치의 왼쪽에 저장된 결과들은 완전하며(complete) 연산이 재개될 때 수정되지 않는다. 또한 프로그램은 이후에 연산을 재개하기 위한 명령을 다시 실행하는 것이 예상되고, 이때 CSB 필드의 컨텐츠는 연산을 재개하기 전에 참조된다. 조건 코드 0 세트로 연산이 종료될 때, 모든 데이터가 완전하게 처리 되고 입력 및 출력 데이터와 관련된 모든 결과들은 일관된 상태를 나타낸다.
[00195] 0이 아닌 조건 코드 세트로 명령이 종료된 이후에, 그리고 연산을 재개할 목적으로 명령을 다시 실행하기 전에, 프로그램은 파라미터 블록의 어떠한 필드도 수정해서는 안 된다; 그렇지 않으면 결과들은 예측 불가능하게 된다.
압축된 데이터 블록들
[00196] 일 예에서, 스토리지의 압축된 데이터 블록의 바이트들은, 예를 들어, 왼쪽에서 오른쪽으로 처리된다. 압축된 데이터 블록은 바이트 경계에서 시작하거나 끝나지 않을 수 있다. 압축된 데이터 블록은, 예를 들어, 비트 스트림이다. 블록의 엘리멘트들은 한 번에 한 비트씩 스토리지에 로드 된다. 비트 스트림은, 예를 들어, 스토리지의 각 바이트 내에서 오른쪽에서 왼쪽으로 그리고, 예를 들어, 왼쪽에서 오른쪽으로 바이트 순서로 로드 된다. 엘리멘트가 후프만 코드일 때, 비트들은, 예를 들어, 엘리멘트의 최상위 비트로부터 최하위 비트 순으로 저장된다. 엘리멘트가 후프만 코드가 아닐 때, 비트들은, 예를 들어, 엘리멘트의 최하위 비트로부터 최상위 비트 순으로 저장된다.
[00197] 도 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)이므로, 이들 엘리멘트들은 바이트 단위로 처리될 수 있으며, 반드시 비트 단위로 처리될 필요는 없다.
[00198] 도 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은, 압축된 데이터 블록의 마지막 비트인, 비트 스트림의 마지막 비트를 포함한다.
[00199] 도 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의 합과 같다. 리터럴 바이트들, 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은, 압축된 데이터 블록의 마지막 비트인, 비트 스트림의 마지막 비트를 포함한다.
[00200] 다양한 블록 유형들에 관한 상기 설명에서, 특정 비트들, 바이트들, 디렉션들, 등뿐만 아니라, 특정 상수 값들(certain constant values)도 명시된다. 이들은 단지 예들일 뿐이다. 다른 상수 값들, 비트들, 바이트들, 디렉션들, 등이 다른 실시 예들에서 명시될 수 있다.
압축 데이터 세트의 처리
[00201] 디플레이트 변환 호출 명령의 예시적인 사용들을 설명하고, 파라미터 블록의 다양한 필드에 대한 설명을 증가시키기 위해 압축된 데이터 세트를 처리하는 예들이 제공된다. 예들은 가능한 모든 시나리오들, 요구 사항들 및 능력들을 설명하지는 않지만, 다양한 시나리오들, 요구 사항들 및/또는 능력들을 보여준다. 예들 및 설명들은, 예를 들어, 스토리지에 압축된 데이터 세트에 적용되며, 그 예가 도 9에 도시되어 있다. 도시된 바와 같이, 압축된 데이터 세트(900)는 복수의 압축 데이터 블록들(902)을 포함하고, 데이터 세트(900)의 시작은 압축 데이터 세트 시작 주소(CDSBA)(904)로 표시된다.
[00202] 여기서 설명한 예들을 위해, 일 실시 예에서, 압축된 데이터 세트를 처리하는 프로그램은 다음을 고려하도록 의도되었다:
●
단일 파라미터 블록은 전체 압축된 데이터 세트를 처리하기 위해 디플레이트 변환 호출 명령의 다수 사용들에 의해서 정의되고 참조될 수 있다. 파라미터 블록의 체크 값(387) 및 체크 값 유형(375) 필드들은 압축 데이터 세트 내의 압축 데이터 블록들(예를 들어, 모든 블록들)에 적용된다. 파라미터 블록의 서브-바이트 경계 필드(381)는 개별 블록 간의 전환들(transitions)에 적용된다. 히스토리 길이(385) 및 히스토리 오프셋(386)은 다수 블록들에 적용될 수 있다. 파라미터 블록의 나머지 필드들은, 한 예에서, 오직 디플레이트 변환 호출 명령의 특정 실행에 의해 처리되는 개별 압축된 데이터 블록에 대해서만 적용된다.
●
개별 체크 값은, 예를 들어, 압축된 데이터 세트가 나타내는 모든 압축 안된 데이터에 적용된다.
●
블록 1의 제1 압축된 데이터 심볼이 참조할 히스토리는 없다. 블록 1의 후속 심볼들은 블록 1에서 이전에 만났던 심볼들에 대응하는 히스토리를 참조할 수 있다. 블록 2의 심볼들은 블록 2 및 블록 1의 이전에 만났던 심볼들에 대응하는 히스토리를 참조할 수 있다. 블록 3의 심볼들은 블록 3의 이전에 만났던 심볼들에 대응하는 히스토리를 참조할 수 있다.
[00203] 도 10은 도 9에 기술된 압축 데이터 세트(900)의 데이터를 압축하는데 사용되는 샘플 프로그램(1000)의 일부의 일 예를 나열한다. 또한, 도 11은 도 10의 IABLK1(1002)로 라벨이 붙여진 명령 주소에 위치한 DFLTCC 명령의 실행 동안 사용되는 파라미터 블록의 특정 필드들에 대한 값들을 나열한다. 예를 들어, 도 11은 다양한 파라미터 블록 필드들(1100)을 도시한다; 압축 연산의 시작 시 이들 필드들에 대한 값들(1102); 조건 코드 1, 2 또는 3이 세트 될 때 연산의 종료 시 이들 필드들에 대한 값들(1104); 및 조건 코드 0이 세트 될 때 연산의 종료 시 이들 필드들에 대한 값들(1106)이다.
[00204] 유사하게, 도 12는 도 10의 IABLK2(1004)로 라벨이 붙여진 명령 주소에 위치한 DFLTCC 명령의 실행 동안 사용되는 파라미터 블록의 특정 필드들에 대한 값들을 나열한다. 이들 수치들은 그림은 전체 압축된 데이터 세트를 처리하기 위해 디플레이트 변환 호출 명령을 여러 번 사용하는 것과 관련된 세부 사항들의 일부를 보여준다.
[00205] 또한, 도 13을 참조하면, 도 9의 압축된 데이터 세트로부터 데이터를 압축 해제하는데 사용되는 샘플 프로그램(1300)의 일부의 일 예가 도시된다.
데이터 압축
[00206] 데이터를 압축하는 프로세스는 하나 또는 그 이상의 압축된 데이터 블록을 생성하는 것을 포함한다. 디플레이트 변환 호출 명령의 압축 함수는 개별 블록의 일부분을 구축하는 데 사용된다. 상기 일부분은 전체 블록일 수 있다. 이 함수는 블록 유형(BTYPE)이 01 또는 10 이진수이고 00 이진수가 아닌 블록의 일부분들을 생성한다. 파라미터 블록의 신규 작업 비트(NT)가 1일 때, 압축된 데이터의 제1 블록이 생성되고 이전에 수행된 압축 연산들로부터의 참조할 히스토리는 없다.
[00207] 일 예에서, 개별 블록은 나열된 순서대로 다음 엘리멘트들을 포함한다:
1. 최종 블록 표시(BFINAL).
2. 블록 유형(BTYPE).
3. 적용 가능할 때, 동적-후프만 테이블의 압축된 포맷.
4. 압축된 데이터 심볼.
5. 엔드-오브-블록(EOB) 심볼.
[00208] 압축 연산은 블록에 대해 정의된 순서로 명시된 엘리멘트들을 생성한다. 상기 엘리멘트들은 스토리지의 바이트 경계들 사이에서 시작하거나 종료될 수 있다. 서브-바이트 경계(SBB)는 제1 엘리멘트를 제1 오퍼랜드 위치에 저장하는 데 적용된다. 압축된 데이터 블록은 비트 스트림이다. 블록의 컴포넌트들은 한 번에 한 비트씩 스토리지로 로드 된다. 예로서, 비트 스트림은 스토리지의 각 바이트 내에서 오른쪽에서 왼쪽으로 그리고 왼쪽에서 오른쪽으로 바이트 순서로 로드 된다.
[00209]를 SBB가 0이 아닐 때, 제1오퍼랜드 위치의 제1바이트에 대한 참조가 갱신 참조이다.
[00210] 제2 오퍼랜드 위치로부터의 압축 안된 데이터는 압축되어 제1 오퍼랜드 위치에 압축된 데이터 심볼들로서 저장된다.
[00211] 제1오퍼랜드의 길이가 명령의 실행의 시작에서 0 일 때, 제1 오퍼랜드는 액세스되지 않고, 일반 레지스터들 R1 과R1 + 1의 제1 오퍼랜드 주소 및 제1오퍼랜드 길이는, 각각, 변경되지 않는다. 이것은 CF 필드(373)(도 3l)의 값이 명령 실행의 시작에서 0 또는 1일 때 적용된다.
[00212] 제2 오퍼랜드의 길이가 명령의 실행의 시작에서 0 일 때, 제2 오퍼랜드는 액세스되지 않고, 일반 레지스터들 R2 와R2 + 1의 제2 오퍼랜드 주소 및 제2 오퍼랜드 길이는, 각각, 변경되지 않는다. 예로서, 다음의 경우에 제2 오퍼랜드 길이는 명령 실행 시작 시 0이다.
●
명령은 연산을 재개하기 위해 재실행되고(파라미터 블록의 CF 필드(373)는 명령 실행 시작 시에 1임) 연산을 완료하는 단계는 파라미터 블록의 CSB 필드(392)를 참조하고, 제2 오퍼랜드에 대한 참조 없이 수행될 수 있다.
[00213] 일 실시 예에서, 프로그램은 다음의 연산들을 수행하기 위해서는 디플레이트 변환 호출 명령을 사용하지 않는다:
●
빈 압축된 데이터 블록을 생성한다. 빈 압축된 데이터 블록은, 예를 들어, 블록 헤더, 적용 가능 할 때 DHT의 압축된 포맷 및 EOB 심볼로 구성된다.
●
열려 있는 압축된 데이터 블록을 닫는다. 즉, 압축된 데이터 블록의 끝에 EOB 심볼만 저장한다.
[00214] 압축 알고리즘 제2오퍼랜드 위치로부터 현재 압축되고 있는 데이터와 일치하는 바이트들의 스트링에 대해 최근에 압축된 데이터의 갱신된 히스토리를 서치하는 단계를 포함한다. 압축 연산이 시작되거나 재개되기 전에, 일 실시예에서, 다음이 적용된다:
●
신규 작업(NT)(374)가 1일 때, 참조에 이용 가능한 초기 히스토리가 없다.
●
NT가 0이고, 일반 레지스터 0(HBT)의 비트 56이 0(인라인)일 때, 참조에 이용 가능한 초기 히스토리는 제2 오퍼랜드의 최좌측 바이트의 왼쪽에, 인접하여, 위치하고, 초기 히스토리의 길이는 파라미터 블록의 히스토리 길이(HL) 필드(385)에 의해 명시된다.
●
NT가 0이고, 일반 레지스터 0(HBT)의 비트 56이 1(서큘러)일 때, 참조에 이용 가능한 초기 히스토리는 파라미터 블록의 히스토리 오프셋(HO)(386) 및 히스토리 길이(HL)에 의해서 명시된, 제3 오퍼랜드 위치에 위치한다.
[00215] 압축 연산 동안, 전체 히스토리에 대한 페치-유형의 참조들이, 히스토리 바이트들이 연산을 수행하는데 사용되는 지에 관계없이, 만들어질 수 있다. 또한, 히스토리 버퍼 유형이 서큘러일 때, 전체 32K 바이트 히스토리 버퍼에 대한 페치 유형 참조가, 히스토리 바이트들이 연산을 수행하는데 사용되는 지에 관계없이, 만들어질 수 있다.
[00216] 압축 연산 동안, 히스토리는 갱신된다. 일반 오퍼랜드 데이터 예외 조건을 만남이 없이 소스 데이터의 하나 또는 그 이상의 바이트들을 압축된 데이터 심볼들로 인코드 한 이후, 소스 바이트들은 히스토리의 끝에 연결된다(concatenated). 소스 데이터의 최근에 가장 많이 처리된 가장 최근에 처리된 바이트들(최대 32K-바이트들까지)은 소스 데이터의 후속 바이트들을 처리하는 동안 참조에 이용 가능한 갱신된 히스토리를 구성한다.
[00217] 압축 연산이 종료될 때, 일 예에서, 다음이, 이후에 연산을 재개하거나, 다른 연산을 시작하는데 이용 가능한 최종 히스토리에 적용된다:
●
HBT가 인라인일 때, 제2 오퍼랜드 위치에 대한 스토리지 갱신들이 히스토리가 갱신될 때는 요구되지 않는다. 갱신된 제2 오퍼랜드 주소와 갱신된 HL은 최종 히스토리의 갱신된 위치와 갱신된 길이를 명시한다.
●
HBT가 사큘러일 때, 제3 오퍼랜드 위치에 대한 스토리지 갱신들이 히스토리가 갱신될 때 수행된다. 제3 오퍼랜드 주소, 갱신된 HO 및 갱신된 HL은 최종 히스토리의 갱신된 위치와 갱신된 길이를 명시한다.
[00218] 예들로서, 도 14a-14c는 DFLTCC-CMPR 함수가 명시된 디플레이트 변환 호출 명령의 다수 실행들 전후의 제2 오퍼랜드에 대한 인라인 히스토리 버퍼의 위치와, 또한 각 실행이 부분 완료로 끝날 때, 명시된 인라인 히스토리(예를 들어, 비트 310 = 0)를 예시한다. 예를 들어, 도 14a는 DFLTCC-CMPR 실행 번호 1 이전의 인라인 히스토리를 도시한다; 도 14b는 DFLTCC-CMPR 실행 번호 2 이전 및 실행 번호 1 이후의 인라인 히스토리를 도시한다; 그리고 도 14c는 DFLTCC-CMPR 실행 번호 2 이후의 인라인 히스토리를 도시한다. 도 14c에 제공된 설명은 또한 도 14a 및 도 14b에도 적용된다.
[00219] 일반 레지스터 0의 비트 56에 의해 명시된 HBT(히스토리 버퍼 유형)이 서큘러 일 때(예를 들어, 비트310+1), 히스토리는, 예를 들어, 제 3 오퍼랜드 위치에 위치한 32 K-바이트 버퍼에 유지된다. 버퍼(HB) 내의 히스토리의 제1 바이트의 위치는, 예를 들어, 일반 레지스터 R3의 컨텐츠와 히스토리 오프셋(HO)(386)(도 3l)의 합에 의해서 지정된다. 히스토리의 제1바이트는 버퍼 내의 압축 안된 데이터의 최근에 가장 적게 처리된 바이트이다. 버퍼(HE) 내 히스토리의 마지막 바이트 위치는, 예로서, 다음 방정식에 의해서 지정된다.
HE = R3 + 모듈로 32K(H2O + HL - 1)
[00220] 히스토리의 최종 바이트는 버퍼내의 압축 안된 데이터의 최근에 가장 많이 처리된 바이트이다. 히스토리 오프셋(HO)(386)(도 3l)과 히스토리 길이(HL)(385)의 합이 제3 오퍼랜드의 크기(예를 들어, 32K-바이트들)를 초과할 때, 히스토리는 제3 오퍼랜드의 끝으로부터 제3 오퍼랜드의 시작까지 랩 한다(wrap).
[00221] 예들로서. 도 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에도 적용된다.
[00222] HBT가 서큘러이고, 제2 오퍼랜드 위치로부터 처리된 바이트들의 수가, 예를 들어, 32,768보다 적을 때, 일 예에서, 다음이 적용된다:
●
제3 오퍼랜드 위치의 바이트들의 범위에 저장된다. 상기 바이트들의 범위는, 예를 들어, 다음에 의해서 지정된 위치를 포함하고 지정된 위치에서 시작한다:
●
R3 + modulo 32K(HOO + HLO), 여기서
HOO: 명령이 실행되기 전의 히스토리 오프셋이고.
HLO: 명령이 실행되기 전의 히스토리 길이이다.
●
바이트들의 범위는, 예를 들어, 다음에 의해서 지정된 위치를 포함하고 지정된 위치에서 종료된다.
R3 + 모듈로32K(HOO + HLO + BP -1), 여기서
BP: 명령 실행 중 제2 오퍼랜드 위치로부터 처리된 바이트들의 수이다.
[00223] 방금 설명한 바이트들의 범위에 대한 저장들은, 예로서, 저장-유형 액세스 예외들, PER 스토리지 변경 이벤트들, 및 변경 비트들을 세트 하는 것에 따라서 이루어진다(subject to).
●
저장 위치의 컨텐츠를 수정하지도 않고 필요하지도 않는 저장들이, 방금 설명한 범위에 포함되지 않은 제3 오퍼랜드 위치의 바이트들로 만들어질 수 있다. 그러한 위치에 대한 저장들은 또한 저장 유형 액세스 예외들, PER 스토리지 변경 이벤트들 및 변경 비트들을 세트 하는 것에 따라서 이루어진다(subject to).
[00224] HBT가 서큘러이고 제2 오퍼랜드 위치로부터 처리된 바이트들의 수가, 예를 들어, 32,768보다 크거나, 또는 같을 때, 저장들은 제3 오퍼랜드 위치의 모든 바이트들로 이루어지는데, 저장 유형 액세스 예외들, PER 스토리지 변경 이벤트들 및 변경 비트들을 세트 하는 것에 따라서 이루어진다.
[00225] 블록 계속 플래그(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일 때, 블록 헤더가 저장되지 않는다.
[00226] 후프만 테이블 타입(HTT)이 1일 때, 파라미터 블록에서 명시된 동적- 후프만 테이블(DHT)(367)의 압축된 포맷은 일반 오퍼랜드 데이터 예외 조건들에 대해서 검사된다. DHT의 명시된 압축된 포맷에 대한 일반 오퍼랜드 데이터 예외 조건들이 존재할 때, 상기 압축된 DHT는 무효로 되고 데이터 압축에는 사용되지 않는다. 일반 오퍼랜드 데이터 예외 조건들의 정의의 예들이 아래에서 자세히 설명된다. DHT의 압축된 포맷이, 적절한 후프만 함수 트리(a proper and functional Huffman tree)를 명시하기 위해 후프만 알고리즘에 의해서 요구되는 길이보다 더 큰, 코드 길이에 대한 비트 길이, 또는 리터럴 바이트, EOB 심볼, 중복 스트링 길이 또는 중복 스트링 포인터 거리에 대한 코드 길이를 명시할 때, 압축된 DHT는 여전히 DHT 함수를 유도하고 데이터를 압축하는 데 사용된다. 블록 계속 플래그(BCF)가 0이고 HTT가 1일 때, 파라미터 블록의 CDHT 필드(367)에 명시된, DHT의 압축된 포맷은 제1 오퍼랜드 위치에 저장된다.
[00227] 압축 연산 동안, 제2 오퍼랜드 위치로부터의 소스 데이터는 압축된 데이터 심볼들로 인코드 된다. 인코딩의 일부로서, 소스 데이터는 히스토리와 비교된다. 매치(a match)가 발견되지 않을 때, 소스 데이터의 중간 표현은, 소스 데이터와 동일한, 리터럴 바이트이다. 매치가 발견될 때, 소스 데이터의 중간 표현은 소스 데이터의 중복 복사본을 포함하는 히스토리 내의 위치에 대한 포인터이다. 포인터는 길이와 거리로 구성된다. 길이는 히스토리의 스트링과 일치하는 소스 데이터 바이트들의 수이다. 거리는 히스토리의 끝으로부터 소스 데이터와 매치하는 스트링의 시작까지의 바이트들의 수이다. 후프만 테이블로부터의 2개의 후프만 코드 트리는, 한 예에서, 소스 데이터의 중간 표현을 압축 데이터 심볼들로 인코드 하는 데 사용된다. HTT(후프만 테이블 유형)가 0일 때, 디플레이트 표준에 의해서 기술된, FHT(고정-후프만 테이블)가 중간 결과들을 인코드 하는 데 사용되는 두 개의 후프만 코드 트리를 명시한다. HTT(376)가 1일 때, 파라미터 블록의 CDHT 필드(367)에 명시된, DHT의 압축된 표현으로부터 파생된, 동적-후프만 테이블(DHT)은 중간 결과들을 인코드 하는 데 사용되는 두 개의 후프만 코드 트리를 명시한다. 인코딩은 디플레이트 표준에 의해서 기술된 대로 수행된다. 소스 데이터의 중간 표현을 인코드 하는 데 사용될 후프만 코드를 명시하지 않는 비-범용(anon-universal) DHT가 사용될 때, 일반 오퍼랜드 데이터 예외가 인지된다. 최종 압축된 데이터 심볼의 비트들은 결과를 제1 오퍼랜드 위치에 저장하기 전에 디플레이트 표준에 의해서 명시된 순서로 정렬된다.
[00228] 하나의 예에서, 중복-스트링 길이들은 3 내지 258 바이트들의 범위에 있다.
[00229] 추가 소스 데이터를 처리하기 전에, 히스토리는, 여기에 설명된 대로, 갱신된다.
[00230] 일 예에서, 프로세스는, 모든 소스 바이트가 처리될 때까지, 반복된다.
[00231] 소스 바이트들(예를 들어, 모든 소스 바이트들)이 처리되고 블록 클로징 제어(BCC)(378)가 1일 때, 엔드-오브-블록(EOB) 심볼이 제1 오퍼랜드 위치에 저장된다. 고정-후프만 테이블이 사용될 때, 후프만 코드 0000000 이진수가 EOB 심볼에 대해서 사용된다. 동적-후프만 테이블(DHT)이 사용될 때, EOB 심볼에 대해 사용되는 후프만 코드는 DHT에 의해 명시된다. EOB 심볼의 비트들은 EOB 심볼을 제1 오퍼랜드 위치에 저장하기 전에 디플레이트 표준에서 명시된 순서로 정렬된다.
[00232] 연산의 마지막 압축 데이터 심볼(EOB 심볼 포함)이 저장할 마지막 바이트의 일부분만을 차지할 때, 한 예에서, 마지막 심볼의 일부를 포함하지 않는 비트들은 0들로서 저장된다.
[00233] 마지막 압축된 데이터 심볼의 처리 이후, 일 실시 예에서, 다음이 발생한다:
●
모델-디펜던트 값은 파라미터 블록의 모델 버전 번호(MVN) 필드(363)에 저장된다.
●
파라미터 블록의 서브-바이트 경계(SBB) 필드(381)가 갱신된다.
파라미터 블록의 엔드-오브-블록 길이(EOBL)(389) 및 엔드-오브-블록 심볼(EOBS)(388) 필드가 갱신된다.
●
일반 레지스터 R1의 주소는 처리 비트 0을 포함했던 제1 오퍼랜드의 처리된 바이트들의 수만큼 증가되고, 일반 레지스터 R1 + 1의 길이는 같은 수만큼 감소된다. 처리 비트 0을 포함하는 제1 오퍼랜드의 처리된 바이트들 수는 처리된 출력들 비트 수와 SBB의 원래 값의 합인 피제수와, 8의 값인 제수를 갖는 정수 나눗셈의 결과인 정수 몫이다.
●
일반 레지스터 R2의 주소는 처리된 소스 바이트들의 수만큼 증가되고, 일반 레지스터 R2 + 1의 길이는 같은 수만큼 감소된다.
[00234] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다.
[00235] 소스 데이터를 압축할 대, 소스 데이터는, 위에서 설명한 바와 같이, 32비트 체크 값을 생성하기 위한 입력이다. 최종 체크 값은 파라미터 블록의 체크 값 필드(387)에 저장된다.
데이터 압축 해제
[00236] 일 실시 예에서, 디플레이트 변환 호출 명령의 확장 함수가 압축된 데이터 세트를 압축 안된 데이터로 디코드 하는데 사용된다. 제2 오퍼랜드 위치의 압축된 데이터 세트는 하나 또는 그 이상의 연속 압축된 데이터 블록들을 포함한다. 일 예에서, 상기 데이터 세트의 블록들은 왼쪽에서 오른쪽으로 처리되고, 한 블록의 바이트들도, 예를 들어, 왼쪽에서 오른쪽으로 처리된다. 블록들은 바이트 경계들에서 시작하거나 끝나지 않을 수 있다. 각 블록은 데이터 세트의 다른 블록과 독립적으로 디코드 된다. 일반 레지스터 R2는 데이터 세트의 제1 블록의 최좌측 바이트의 논리 주소를 명시한다. 데이터 세트의 마지막 블록은 BFINAL 비트가 1일 때 처리 중에 만나는 블록이다. 일 예에서, 처리할 블록들에는 세 가지 유형들이 있다. 블록의 컨텐츠를 디코드 하는 기술은 블록 유형(BTYPE)의 함수이다.
[00237] 연산이 시작될 때(예를 들어, 파라미터 블록의 계속 플래그 필드 (373)가 0 일 때), 일반 레지스터 R2 , 신규 태스크 (NT) 필드(374), 및 서브-바이트 경계(SBB) 필드(381)에 의해 지정된 비트는 압축된 데이터 블록의 제1 비트(블록 헤더의 BFINAL 비트)로 해석된다.
[00238] 확장 함수는 최근에 디코드 된 압축 안된 데이터의 갱신된 히스토리를 참조하는 것을 포함한다. 압축해제 연산이 시작되거나 재개되기 전에, 일 실시예에서, 다음이 적용된다:
●
신규 작업(NT)(374)가 1일 때, 참조에 이용 가능한 초기 히스토리는 없다.
●
NT가 0이고, 일반 레지스터 0(HBT)의 비트 56이 0(인라인)일 때, 참조에 이용 가능한 초기 히스토리는 제1 오퍼랜드의 최좌측 바이트의 왼쪽에, 인접하여, 위치하고, 초기 히스토리의 길이는 파라미터 블록의 히스토리 길이(HL) 필드(385)에 의해 명시된다.
●
NT가 0이고, 일반 레지스터 0(HBT)의 비트 56이 1(서큘러)일 때, 참조에 이용 가능한 초기 히스토리는, 파라미터 블록의 히스토리 오프셋(HO)(386) 및 히스토리 길이(HL) 필드들에 의해서 명시된, 제3 오퍼랜드 위치에 위치한다.
[00239] 연산 동안, 전체 히스토리에 대한 페치-유형 참조들은, 히스토리의 어느 바이트들이 연산을 수행하는 데 사용되는 지에 관계없이, 만들어질 수 있다. 더욱이, 히스토리 버퍼 타입이 서큘러일 때, 전체 히스토리 버퍼(예를 들어, 32K-바이트)에 대한 페치-유형 참조들은, 히스토리의 어느 바이트들이 연산을 수행하는 데 사용되는 지에 관계없이, 만들어질 수 있다.
[00240] 압축 해제 연산 동안, 히스토리는 갱신된다. 일반 오퍼랜드 데이터 예외 조건을 만나는 일 없이 소스 데이터를 디코드 한 이후에, 압축 안된 데이터의 최종 바이트들은 히스토리의 끝에 연결된다(concatenated). 압축 안된 데이터의 최근에 가장 많이 디코드 된 바이트들, 예를 들어 최대 32K-바이트들은, 후속 소스 데이터를 처리하는 동안 참조에 이용 가능한 갱신된 히스토리를 구성한다.
[00241] 압축 해제 연산이 종료될 때, 일 실시 예에서, 연산을 재개하거나, 다른 연산을 시작하기 위해 이용 가능한 최종 히스토리에 대해 다음이 적용된다:
●
HBT가 인라인일 때, 제1 오퍼랜드 위치에 대한 스토리지 갱신들은 또한 최종 히스토리에 대한 갱신들도 구성한다. 갱신된 제1 오퍼랜드 주소와 갱신된 HL은 결과 히스토리의 갱신된 위치와 갱신된 길이를 지정한다.
●
HBT가 서큘러형일 때 히스토리가 갱신될 때 제3 오퍼랜드 위치에 대한 스토리지 갱신이 수행된다. 제3 오퍼랜드 주소인 갱신된 HO 및 갱신된 HL은 최종 히스토리의 갱신된 위치와 갱신된 길이를 명시한다.
[00242] 예들로서, 도 16a-16c는 DFLTCC-XPND가 명시된 디플레이트 변환 호출 명령의 다수 실행들 전 및 후에 제1 오퍼랜드에 관한 인라인 히스토리 버퍼의 위치뿐만 아니라, 각 실행이 부분 완료로 종료되는 때, 명시되는 인라인 히스토리의 예들을 예시한다. 히스토리 길이(HL)(385)는 연산 동안에 수정된다. 예를 들어, 도 16a는 DFLTCC-XPND 실행 번호 1 이전의 인라인 히스토리의 일 예를 도시한다; 도 16b는 DFLTCC-XPND 실행 번호 2 이전 및 실행 번호 1 이후의 인라인 히스토리의 예를 도시한다; 그리고 도 16c는 DFLTCC-XPND 실행 번호 2 이후의 인라인 히스토리의 예를 도시한다. 도 16c에 제공된 설명은 도 16a-16b에도 적용된다.
[00243] 일반 레지스터 0의 비트 56에 의해서 명시된 HBT가 서큘러일 때, 히스토리는, 예를 들어, 제 3 오퍼랜드 위치에 위치된 32K-바이트 버퍼에 유지된다. 버퍼(HB) 내 히스토리의 제1바이트의 위치는 일반 레지스터 R3의 컨텐츠와 히스토리 오프셋(HO)(386)의 합에 의해서 지정된다. 히스토리의 제1바이트는 압축 안된 데이터 중에 최근에 가장 적게 처리된 바이트이다. 버퍼(HE) 내 히스토리의 마지막 바이트의 위치는, 예를 들어, 다음 방정식에 의해서 지정된다:
HE = R3 + 모듈로 32K(H2O + HL - 1).
[00244] 히스토리의 마지막 바이트는 버퍼에서의 압축 안된 데이터의 최근에 가장 많이 처리된 바이트이다. 히스토리 오프셋(HO)과 히스토리 길이(HL)의 합이 제3 오퍼랜드의 크기(예를 들어, 32K-바이트들)를 초과할 때, 히스토리는 제3 오퍼랜드의 끝으로부터 제3 오퍼랜드의 시작까지 랩된다. 여기에 설명된, 도15a-15e는, 각 실행이 부분 완료로 종료될 때, DFLTCC-XPND 함수와 서큘러 히스토리 버퍼가 명시된 디플레이트 변환 호출 명령의 다수 실행들 전 및 후에 서큘러 히스토리 버퍼 내의 히스토리 위치의 예들을 예시한다.
[00245] HBT가 서큘러이고 제1 오퍼랜드 위치에 저장된 바이트들의 수가, 예를 들어, 32,768보다 작을 때, 일 예에서, 다음이 적용된다:
●
제3 오퍼랜드 위치 내의 바이트 범위로 저장들이 만들어진다. 바이트들의 범위는 다음에 의해 지정된 위치를 포함하고 지정된 위치로 시작한다:
R3 + 모듈로 32K(HOO + HLO), 여기서
HOO: 명령이 실행되기 전의 히스토리 오프셋이고.
HLO: 명령이 실행되기 전의 히스토리 길이이다.
바이트들의 범위는, 예를 들어, 다음에 의해서 지정된 위치를포함하고 지정된 위치로 종료된다.
R3 + 모듈로32K(HOO + HLO + BP -1), 여기서
BP: 명령의 실행 동안 제1 오퍼랜드 위치에 저장된 바이트들의 수이다.
방금 설명한 바이트들의 범위에 만들어진 저장들은 저장-유형 액세스 예외들, PER 스토리지 변경 이벤트들 및 변경 비트들을 세트하는 것에 따라 만들어진다.
●
스토리지 위치들을 수정하지도 않고 필요하지도 않는 저장들은, 방금 설명한 범위에 포함되지 않은 제3 오퍼랜드 위치 내의 바이트들로 만들어 질 수 있다. 그러한 위치들에 대한 저장들은 또한 저장-유형 액세스 예외들, PER 스토리지 변경 이벤트들 및 변경 비트들을 세트 하는 것에 따라서 만들어 진다.
[00246] HBT가 서큘러이고 제1 오퍼랜드 위치에 저장되는 바이트들의 수가, 예를 들어, 32,768보다 크거나, 또는 같을 때, 저장들은, 예를 들어, 제3 오퍼랜드 위치의 모든 바이트들에 대해서 만들어지고 그리고 저장-유형 액세스 예외들, PER 스토리지 변경 이벤트들 및 변경 비트를 세트 하는 것에 따라 만들어진다.
[00247] BTYPE이 00 이진수일 때, 상기 블록은 압축된 데이터를 포함하지 않는다. 여기서 설명한 바와 같이, 도 6은 BTYPE이 00 이진수인 블록의 일 예를 예시한다. LEN 필드는 블록 내의 리터럴 바이트들의 수를 명시한다. LEN 필드의 바이트 순서는 리틀 엔디안이다. LEN 필드는 0 리터럴 바이트들을 명시할 수 있다. 블록의 리터럴 바이트는 제1 오퍼랜드 위치에 배치된다. 히스토리도 또한, 앞에서 설명한 바와 같이, 블록의 각 리터럴 바이트로 갱신된다.
[00248] BTYPE 01 이진수일 때, 상기 블록은 고정-후프만 테이블(FHT)을 사용하여 생성된 압축된 데이터 심볼들을 포함한다. FHT는 디플레이트 표준에 의해 정의되며 블록의 일부는 아니다. 도 7은, 본 명세서에 기술된 바와 같이, BTYPE이 01 이진수인 블록의 일 예를 예시한다. 블록 헤더를 해석한 이후, 압축된 데이터 심볼들은 블록에 나타나는 순서로 디코드 된다. 블록의 바이트들은, 예를 들어, 왼쪽으로부터 오른쪽으로 처리되고 블록의 각 바이트 내의 비트들은, 예를 들어 오른쪽에서 왼쪽으로 처리된다. 일 예에서, 각 심볼은 블록의 다음 심볼을 처리하기 전에 완전하게 처리된다. 엔드-오브-블록(EOB) 심볼이 아닌 각 심볼은 리터럴 값 또는 히스토리 버퍼 내에서 이전에 디코드 된 서브스트링에 대한 포인터를 나타낸다. 이전에 디코드 된 서브 스트링은 또한 중복 스트링이라고도 한다. 한 예에서 중복 스트링 길이들의 범위는 3에서 258바이트들이다. 포인터는 서브스트링 길이와 히스토리 끝으로부터 서브스트링 시작까지의 거리를 나타내는 코드들로 구성된다. 심볼이 히스토리 내의 서브스트링을 나타낼 때, 상기 서브스트링은 히스토리 버퍼로부터 참조된다. 심볼을 디코드하는 것으로부터 나온 압축 안된 데이터는 제1 오퍼랜드 위치에 배치된다.
[00249] 추가 소스 데이터를 처리하기 전에, 이전에 설명한 바와 같이, 히스토리는 갱신된다.
[00250] 갱신된 히스토리는 블록의 다음 심볼을 디코드 하는 데에 적용된다. EOB 심볼을 만날 때, 블록 처리는 완료된다.
[00251] BTYPE이 10 이진수 일 때, 블록은 동적-후프만 테이블(DHT)을 사용하여 생성된 압축된 데이터 심볼들을 포함한다. 사용된 DHT의 압축된 포맷 은 압축된 데이터 블록의 엘리멘트이다. 본 명세서에서 설명된 바와 같이, 도 8은 BTYPE이 10 이진수와 같은 블록의 일 예를 예시한다. 블록 헤더를 해석한 이후, 압축된 데이터 블록 내에 제공된 DHT의 압축된 포맷은 일반 오퍼랜드 데이터 예외 조건들에 대해 검사된다. 일반 오퍼랜드 데이터 예외 조건이 제공된 DHT의 압축된 포맷에 대해 존재할 때, DHT의 압축된 포맷은 무효라 하고 데이터 압축을 해제하는 데 사용되지 않는다. DHT의 압축된 포맷이, 적절한 후프만 함수 트리를 명시하기 위한 후프만 알고리즘에 의해서 요구되는 길이보다 더 큰, 코드 길이에 대한 비트 길이, 또는 리터럴 바이트, EOB 심볼, 중복 스트링 길이 또는 중복 스트링 포인터 거리에 대한 코드 길이를 명시할 때, 압축된 DHT는 여전히 기능적 DHT를 유도하고 데이터를 압축하는 데 사용된다. DHT의 압축된 포맷을 검사한 이후, 압축된 데이터 심볼들은 블록에 나타나는 순서로 디코드 된다. 블록의 바이트들은, 예를 들어, 왼쪽에서 오른쪽으로 처리되고, 블록의 각 바이트 내의 비트들은, 예를 들어, 오른쪽에서 왼쪽으로 처리된다. 한 예에서 각 심볼은 블록의 다음 심볼을 처리하기 전에 완전하게 처리된다. BTYPE이 10 이진수인 블록 내의 심볼들의 처리는 BTYPE이 01이진수인 블록의 심볼들의 처리에 대해 앞에서 설명한 것과 동일하지만, 전자는 심볼 디코하기 위해 제공된 DHT를 사용하고 후자는 FHT를 사용하여 심볼들을 디코드 한다. 압축된 데이터 심볼을 디코드 하는 데 사용할 후프만 코드를 명시하지 않는 비-범용 DHT가 제공될 때, 일반 오퍼랜드 데이터 예외가 인지된다.
[00252] 제2 오퍼랜드를 압축 해제할 때, 압축 안된 데이터가 체크 값(예를 들어, 32비트 체크 값)을 생성하는 것에 대한 입력이다. 최종 체크 값은 파라미터 블록의 체크 값 필드(387)에 저장된다.
[00253] 상기 데이터 세트의 마지막 블록을 처리한 이후, 일 실시 예에서, 다음이 발생한다:
●
모델-디펜던트 값은 파라미터 블록의 모델 버전 번호(MVN) 필드(363)에 저장된다.
●
파라미터 블록의 서브-바이트 경계(SBB) 필드(381)가 갱신된다.
●
일반 레지스터 R1에서의 주소는 제1 오퍼랜드 위치에 저장된 바이트들의 수만큼 증가되고, 일반 레지스터 R1 + 1에서의 길이는 같은 수만큼 감소된다.
●
일반 레지스터 R2 에서의 주소는 처리 비트 0을 포함했던 제2 오퍼랜드의 처리된 바이트들의 수만큼 증가되고, 일반 레지스터 R2 + 1에서의 길이는 같은 수만큼 감소된다. 처리 비트 0을 포함했던 제2 오퍼랜드의 처리된 바이트들의 수는 처리된 입력 비트 수와 SBB의 원래 값의 합인 피제수와, 8의 값인 제수를 갖는 정수 나눗셈의 결과인 정수 몫이다.
[00254] 주소들 및 길이들의 형성 및 갱신은 주소지정 모드에 따라 다르다.
[00255] 제1오퍼랜드의 길이가 명령의 실행의 시작에서 0 일 때, 제1 오퍼랜드는 액세스되지 않고, 일반 레지스터들 R1 과 R1 + 1에서의 제1 오퍼랜드 주소 및 제1 오퍼랜드 길이는, 각각, 변경되지 않는다. 이는 명령 실행 시작 시 CF 필드(373)의 값이 0 또는 1일 때 적용된다.
[00256] 제2 오퍼랜드의 길이가 명령의 실행의 시작에서 0 일 때, 제2 오퍼랜드는 액세스되지 않고, 일반 레지스터들 R2 및 R2 + 1에서의 제2 오퍼랜드 주소 및 제2 오퍼랜드 길이는, 각각, 변경되지 않는다. 제2 오퍼랜드 길이는, 일 실시예에서, 다음의 경우에 대해서 명령 실행 시작 시에는 0이다.
●
명령이 이전에 실행되었을 때 명령은 다시 실행되고(예를 들어, 파라미터 블록의 CF 필드(373)가 명령의 실행 시작 시에 1이고) 전체 제2 오퍼랜드는 처리되었다.
[00257] 데이터가 제2 오퍼랜드 위치로부터 처리되었을 지라도, 압축 해제 연산은 어떠한 결과들도 제1 오퍼랜드 위치에 저장함이 없이 종료될 수 있다. 이것은, 일 예에서, 오직 제2 오퍼랜드 위치로부터 만 처리된 데이터가 다음의 압축된 데이터 블록 엘리멘트들 중 어느 하나를 포함할 때 발생한다:
●
블록 헤더.
●
블록 유형이 00 이진수인 블록의 LEN 필드.
●
블록 유형이 00 이진수인 블록의 NLEN 필드.
●
동적-후프만 테이블의 압축된 포맷.
●
엔드-오브-블록(EOB) 심볼.
[00258] 다음 조건들은, 하나 또는 이상의 실시 예들에서, 디플레이트 변환 호출 명령을 실행하는 것에 적용된다:
[00259] 일반적인 오퍼랜드 데이터 예외는, 한 예에서, DFLTCC-GDHT 함수가 명시되고 다음 조건이 발생할 때, 인지된다.
●
파라미터 블록 버전 번호(362)로 명시된, 파라미터 블록의 포맷은 모델에 의해서 지원되지 않는다.
[00260] 일 예에서, 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) 해당 중복 스트링 길이 또는 포인터 거리에 대응하는 후프만 코드를 명시하지 않는다.
[00261] 예를 들어, 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비트를 처리할 수 있다.
[00262] 일반 오퍼랜드 데이터 예외가 인지될 때, 파라미터 블록의 연산 종료 보조 코드(OESC)(365) 및 모델 버전 번호(MVN) 필드(363)가 상기 예외와 관련된 추가 정보를 제공하도록 갱신되더라도, 연산은 억제된 것으로 간주된다.
[00263] DFLTCC-CMPR 또는 DFLTCC-XPND 함수가 실행되고 있고 일반 오퍼랜드 데이터 예외가 제2 오퍼랜드에 대해 인지될 예정일 때, 결과는 예외가 인지되던지 또는 연산이 부분 완료로 종료되고 조건 코드, 예를 들어 3이 세트 되던지 둘 중에 하나가 된다. 만일 조건 코드 3이 세트 되었다면, 예외는, 동일한 오퍼랜드들의 처리를 계속하기 위해 명령이 다시 실행되고 예외 조건이 여전히 존재할 때, 인지될 것이다.
[00264] 기타 조건들은 예를 들어, 다음과 같다:
[00265] 명령의 실행은 인터럽트 가능하다. 인터럽트가 발생할 때 일반 레지스터들 R1 및 R2의 주소들, 일반 레지스터들 R1 + 1 및 R2 + 1의 길이들, 및 파라미터 블록의 특정 필드들이 갱신되고, 그리하여 명령은, 재실행 될 때, 인터럽션 지점에서 재개한다.
[00266] DFLTCC-CMPR 또는 DFLTCC-XPND 함수가 실행되고, 액세스 예외가 제1 또는 제2 오퍼랜드에 대해 인지될 예정일 때, 결과는 예외가 인지되던지 또는 연산이 부분 완료로 종료되고 조건 코드, 예를 들어 3이 세트 되던지 둘 중에 하나가 된다. 만일 조건 코드 3이 세트 되었다면, 예외는, 동일한 오퍼랜드들의 처리를 계속하기 위해 명령이 다시 실행되고 예외 조건이 여전히 존재할 때, 인지될 것이다.
[00267] 이 CPU, 다른 CPU들 및 채널 프로그램들에 의해 관찰된 바와 같이, 파라미터 블록, 제1, 제2, 및 제3 오퍼랜드들에 대한 참조들은 다수-액세스 참조들일 수 있고, 이들 스토리지 위치들에 대한 액세스들은 반드시 블록 동시(block concurrent)인 것은 아니며, 이들 액세스들 또는 참조들의 시퀀스는 정의되어 있지 않다.
[00268] 일 실시예에서, 만일 DFLTCC-CMPR 또는 DFLTCC-XPND 함수가 명시되고 다음 중 어느 하나가 적용된다면, 결과들은 예측할 수 없다.
●
파라미터 블록이 제1 또는 제2 오퍼랜드와 중첩된다.
●
제1 오퍼랜드가 제2 오퍼랜드와 중첩된다.
●
명시된 히스토리 버퍼 유형(HBT)가 서큘러이고 제3 오퍼랜드가 제1 오퍼랜드, 제2 오퍼랜드 또는 파라미터 블록과 중첩된다.
●
명시된 히스토리 버퍼 유형(HBT)이 인라인이고, DFLTCC-CMPR 함수가 명시되며, 그리고 히스토리가 제1 오퍼랜드 또는 파라미터 블록과 중첩된다.
●
명시된 히스토리 버퍼 유형(HBT)이 인라인이고, DFLTCC-XPND 함수가 명시되며, 히스토리가 제2 오퍼랜드 또는 파라미터 블록과 중첩된다.
[00269] 특정 상황들에서, 처리된 바이트들의 CPU 결정된 수가 0인 디플레이트 변환 호출 명령의 실행을 종료하였음에도 불구하고, 데이터는 제1오퍼랜드 위치에 저장되었을 수 있고, 적용 가능할 때, 데이터는 제3 오퍼랜드 위치에 저장되었을 수도 있으며, 적용 가능할 때, 대응 변경 비트들이 세트 되었을 수도 있다. 이들 경우들에서, 파라미터 블록 및 일반 레지스터들의 컨텐츠는 원래 값들로부터 수정되지 않았다. 이들 상황들은 CPU가 디플레이트 변환 호출 명령을 실행하는 동안 정지 연산(a quiescing operation)을 수행하거나 또는 CPU를 재시도할 때 발생할 수 있다.
[00270] 다음은 디플레이트 변환 호출 명령의 실행으로부터 생성되는 조건 코드들(Resulting Condition Codes)의 예들이다:
0
정상 완료
1
제1 오퍼랜드 길이가 연산을 완료하기에 충분하지 않다.
2
제2 오퍼랜드 길이가 연산을 완료하기에 충분하지 않다(DFLTCC-XPND).
3
CPU가 결정한 처리된 데이터 양
[00271] 프로그램 예외들:
●
액세스(페치, 오퍼랜드 2, 인라인 히스토리, 페치 및 저장, 파라미터 블록, 오퍼랜드 1, 오퍼랜드 3)
●
DXC 0을 갖는 데이터, 일반 오퍼랜드
●
연산(만일 디플레이트 변환 퍼실리티가 설치되지 않다면)
●
사양
●
트랜잭션 제한
[00272] 디플레이트 변환 호출 명령에 대한 실행의 우선 순위들의 예들은 아래와 같다:
1.-6. 일반적인 경우의 프로그램 인터럽션 조건들의 우선순위와 동일한 우선순위를 갖는 예외들.
7.A 제2 명령 하프워드에 대한 액세스 예외들.
7.B 연산 예외.
7.C 트랜잭션 제한.
8.A 무효 함수 코드 또는 무효 레지스터 번호로 인한 명세 예외.
8.B 4K-바이트 경계 상에 지정되지 않은 파라미터 블록으로 인한 명세 예외.
8.C 4K-바이트 경계 상에 지정되지 않은 서큘러 히스토리 버퍼로 인한 명세 예외.
9. 파라미터 블록에 대한 액세스에 대한 액세스 예외들.
10. 파라미터 블록의 명시된 포맷이 모드에 의해서 지원되지 않을 때 일반 오퍼랜드 데이터 예외.
11. 명령 실행 시작 시 0과 같게 되는 제2 오퍼랜드 길이와 0과 같게 되는CF로 인한 명세 예외.
12. 명령의 실행 시작 시 0과 같게 되는 제1 오퍼랜드 길이로 인한 조건 코드 1 및 DFLTCC-CMPR이 명시된다.
13.A 32,768보다 큰 히스토리 길이 필드로 인한 일반 오퍼랜드 데이터 예외 및 DFLTCC-CMPR 또는 DFLTCC-XPND가 명시될 때, 신규 작업 필드는 0이다.
13.B 제1 오퍼랜드에 대한 액세스에 대한 액세스 예외들 및 제1 오퍼랜드 길이가 0이 아니다.
13.C 제2 오퍼랜드에 대한 액세스에 대한 액세스 예외들 및 제2 오퍼랜드 길이가 0이 아니다.
13.D 명령 실행 시작 시 명시된 인라인 히스토리에 대한 액세스에 대한 액세스 예외들.
13.E 제3 오퍼랜드에 대한 액세스에 대한 액세스 예외들.
14.A 위의 항목들 10 및 13.A에 포함된 조건들 이외의 조건들로 인한 일반 오퍼랜드 데이터 예외.
14.B 위의 항목 12에 포함된 조건들 이외의 조건들로 인한 조건 코드 1, 2 또는 3.
15. 조건 코드 0.
[00273] 사용하기 전에, DHT의 압축 포맷은 일반적으로 오퍼랜드 데이터 예외 조건의 존재 여부에 대해서 검사된다(examined). 일반적인 오퍼랜드 데이터 예외 조건으로 인해 DHT의 압축된 포맷의 길이가 정확히 정의되지 않을 때, 해석된 길이는 조건에 따라 달라질 수 있고, 모델에 따라 달라질 수 있으나, 예를 들어 286바이트를 초과하지는 않는다. 그 결과, DFLTCC-XPND 함수가 명시되고 일반 오퍼랜드 데이터 예외 조건을 갖는 DHT의 압축된 포맷이, 예를 들어, 제2 오퍼랜드의 최우측 286바이트에서 만났을 때(encountered), 예외 조건(우선순위 14.A) 또는 조건 코드 2(우선순위 14.B)가 인지되는지 여부는 모델에 따라 다르다.
[00274] 프로그래밍 노트들의 예들이 아래에 제공된다:
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의 압축된 표현으로부터 파생된다.
DFLTCC-CMPR 함수가 명시되고, HTT가 1이며, 그리고 DHT의 압축된 표현이 불완전 후프만 코드 트리의 기술을 포함할 때, 압축된 데이터 결과들은, 디플레이트 표준을 준수하고 결과들을 원래 압축 안된 데이터로 변환할 수 있는, 모든 디코더들이 아니라, DFLTCC-XPND를 사용하여 원래의 압축 안된 데이터로 변환될 수 있다. 예를 들어, 이 것은, DFLTCC-CMPR 함수에 대해 프로그램에 의해서 명시된 DHT의 압축된 표현이 DFLTCC-GDHT 함수를 수행한 것의 결과로서 생성되지 않았을 때, 발생할 수 있다.
8. DFLTCC-CMPR 함수가 조건 코드 1 세트로 종료될 때, 파라미터 블록의 서브-바이트 경계(SBB) 필드(381)에 저장된 결과는 000 이진수이다. 이 시나리오를 인지하는 것은 디플레이트 변환 호출 명령과 함께 사용할 출력 버퍼들을 할당하는 프로그램과 관련될 수 있다.
[00275] 여기서 기술한 바와 같이, 본 발명의 일 실시 예에서,단일 명령(a single instruction)(예를 들어, 하드웨어/소프트웨어 인터페이스에서 단일 아키텍처된 머신 명령, 예를 들어,디플레이트 변환 호출 명령)이 범용 프로세서를 사용하여 압축 및/또는 압축 해제 연산들을 수행하기 위해 제공된다. 이 명령은, 예를 들어, 명령 세트 아키텍처(Instruction Set Architecture: ISA)에 정의된 하드웨어 명령이다. 그 결과, 압축 및/또는 압축해제 연사들과 관련된 프로그램의 복잡성이 감소된다. 또한, 연산들의 성능, 그리고, 따라서 프로세서의 성능이 개선된다.
[00276] 바람직하게도, 상기 디플레이트 변환 호출 명령은, I/O 디바이스, I/O 인터페이스를 통해 연결된 애플리케이션 특정 디바이스, 또는 기타 유형의 특수 목적 프로세서들과 같은 특수 목적 프로세서가 아닌, 범용 프로세서(예를 들어, 중앙 처리 유닛, 이를 여기서는 프로세서라 함) 상의, 예를 들어, 프로그래머에 의해서, 디스패치 된다(dispatched). 소프트웨어 구현과 비교하여, 본 발명에서 개시된 명령을 실행하는 것은 동일한 작업을 수행하기 위해 훨씬 더 적은 실행 사이클을 요구한다. 또한, 연산을 I/O 디바이스에 디스패치하는 것과 비교하여, 본 발명에서 개시된 명령을 실행하는 것은 운영 체제에 의한 I/O 연산들을 요구하지 않으며 연산이 완료되기를 대기하는 동안 작업 스위치(a task switch)를 수행하도록 운영 체제를 트리거(trigger) 하지 않는다.
[00277] 다양한 필드들 및 레지스터들이 기술되었을지라도, 본 발명의 하나 또는 그 이상의 실시 예들은, 다른, 추가의, 또는 더 적은 필드들 또는 레지스터들, 또는 다른 크기들의 필드들 및 레지스터들 등을 사용할 수 있다. 많은 변형들이 가능하다, 예를 들어, 묵시적 레지스터들이 명령의 명시적으로 명시된 레지스터들 또는 필드들 대신에 사용될 수 있고 및/또는 명시적으로 명시된 레지스터들 또는 필드들이 묵시적 레지스터들 또는 필드들 대신에 사용될 수 있다. 다른 변형도 또한 가능하다.
[00278] 디플레이트 변환 호출 명령을 사용하는 것의 한 실시 예가 도 17을 참조하여 기술된다. 일 예에서, 범용 프로세서와 같은 프로세서 상에서 실행되는 프로그램은, 스토리지의 파라미터 블록에서 수행될 연산의 세부사항들을 명시하고 파라미터 블록의 위치를 명시한다(단계 1700). 예를 들어, 파라미터 블록(예를 들어, 파라미터 블록(340, 360 또는 370))의 필드들 중 하나 또는 그 이상이 수행될 함수에 따라 제공되거나 세트 된다. 또한, 프로그램은 수행될 연산(예: 쿼리, 생성, 압축, 확장 등)을 명시한다(단계 1702). 추가로, 프로그램은 스토리지에서 입력 데이터의 위치 및 양을 명시하거나 갱신한다(단계 1704). 또한 프로그램은 스토리지에서 결과 버퍼의 위치 및 크기를 명시하거나 갱신한다(단계 1706).
[00279] 그 후, 프로그램은 디플레이트 변환 호출 (DFLTCC) 명령을 실행한다(단계 1708). 일 예에서, 명령이 범용 프로세서 상에 디스패치 된다. 예들로서, 명령은 범용 프로세서에서 처리되거나, 또는 적어도 부분적으로 범용 프로세서에 연결되고 I/O 인터페이스를 사용함이 없이 액세스할 수 있는 하드웨어에 의해 처리된다.
[00280] 명령 종료에 기초하여, 실행으로부터 발생하는 조건 코드가 제1의 정의된 값, 예를 들어, 0과 같은 지에 관한 결정이 내려진다(질의 단계 1710). 만일 조건 코드가 제1의 정의된 값과 같다면, 명령의 처리는 완료된다(단계 1712). 그러나, 만일 조건 코드가 제1의 정의된 값과 같지 않다면, 조건 코드가 제2의 정의된 값, 예를 들어, 3과 같은 지에 관한 추가의(further) 결정이 내려진다(질의 단계 1714). 만일 조건 코드가 처리될 추가의 데이터가 있음을 표시하는 제2의 정의된 값과 같다면, 명령은 재실행된다(단계 1708). 그러나 만일 조건 코드가 제2의 정의된 값과 같지 않다면, 조건 코드가 제3의 정의된 값, 예를 들어, 1에 세트 되었는 지에 관한 다른(another) 결정이 내려진다(질의 단계 1716). 만일 조건 코드가 제1오퍼랜드 길이가 불충분함을 표시하는 제3의 정의된 값에 세트 되었다면, 처리는 단계 1706으로 진행하여 계속되고; 그렇지 않으면, 제2 오퍼랜드 길이가 함수에 대해서 불충분하고 처리는 단계 1704로 진행하여 계속된다.
[00281] 표시된 바와 같이, 디플레이트 변환 호출 명령은 단일 데이터 스트림을 압축 또는 압축 해제하기 위해 여러 번 실행될 수 있다. 따라서, 본 발명의 일 실시 예에서, 디플레이트 변환 호출 명령은 프로그램이 하나의 버퍼(예를 들어, 32K-바이트 버퍼)를 선언하는 메커니즘을 제공하는 속성(an attribute)을 포함하며, 이는 디플레이트 변환 호출 명령의 다수의 실행들에 걸쳐 있는 연산 동안 처리된 압축 안된 데이터의 히스토리를 축적하기 위해 사용된다. 상기 버퍼는, 예를 들어, 서큘러 히스토리 버퍼이다.
[00282] 본 발명의 일 실시 예에서, 디플레이트 변환 호출 명령은 서큘러 히스토리 버퍼의 사용을 표시하기 위해 묵시적 레지스터(예를 들면, GR0.56)에서 표시자(indicator) (예를 들면, 비트)를 사용한다. 서큘러 히스토리 버퍼가 표시되고 디플레이트 변환 호출 명령에 의해 수행될 명시된 함수가 데이터를 압축하거나 또는 압축 해제할 때, 명령의 필드(예를 들어, R3 )는, 예를 들어 32 K-바이트 버퍼의 메모리 내 위치를 명시하는데, 이는 프로세서가 연산의 시작 시로부터 히스토리를 페치 하고 연산의 종료 시까지 히스토리를 저장하는 데 사용하기 위한 것이다. 서큘러 히스토리 버퍼 내 히스토리의 길이는 디플레이트 변환 호출 명령(예: HL 필드 385)와 관련된 파라미터 블록의 필드에 의해서 명시되고, 그리고 상기 버퍼 내 히스토리의 시작은 파라미터 블록의 다른 필드(예를 들어, HO 필드(386))에 포함된 오프셋에 의해서 명시된다.
[00283] 서큘러 히스토리 버퍼를 사용하는 것에 관한 더 자세한 사항들은 도 18을 참조하여 기술된다. 한 예에서, 범용 프로세서와 같은 프로세서 상에서 실행되는 프로그램은 스토리지의 파라미터 블록에서 수행될 연산의 세부사항들을 명시하고 파라미터 블록의 위치를 명시한다(단계 1800). 예를 들어, 파라미터 블록(예를 들어, 파라미터 블록(360 또는 370))의 필드들 중 하나 또는 그 이상이, 수행될 함수에 따라서, 제공되거나 또는 세트 된다. 또한 프로그램은 수행될 연산(예를 들어, 압축, 확장 등)을 명시한다.
[00284] 또한, 일 예에서, 프로그램은 미리-정의된 크기(예를 들면, 32 K-바이트)의 서큘러 버퍼의 메모리 내 위치를 할당하고 명시한다(단계1802). 추가로, 프로그램은 압축되지 않은 데이터 스트림의 일부분을 버퍼에 배치하고 디플레이트 변환 호출 명령에 대한 입력으로서 버퍼의 위치와 크기를 명시하며(단계 1804), 그리고 스토리지 내 결과 버퍼의 위치와 크기를 명시하거나 또는 갱신한다(단계 1806).
[00285] 그 다음, 디플레이트 변환 호출 명령은 실행된다(단계 1808). 상기 명령의 실행에 기초하여, 프로세서는, 연산에 대한 입력으로서, 예를 들어, 서큘러 히스토리 버퍼로부터 히스토리를 페치 하고(단계 1820), 여기서 기술한 바와 같이, 명시된 연산을 수행한다(단계 1822). 또한, 프로세서는, 연산의 출력으로서, 서큘러 히스토리 버퍼 내의 히스토리를 수정한다(단계 1824). 전체 데이터 스트림이 처리되었는지 여부에 대한 결정이 내려진다(질의단계 1826). 만일 아니라며면, 처리는 단계 1804로 진하여 계속된다. 그렇지 않다면, 처리는 완료된다.
[00286] 서큘러 히스토리 버퍼의 사용은, 예들로서, 다음을 제공한다:
디플레이트 변환 호출 명령의 개별 실행에 사용하기 위해 명시된, 입력 또는 출력 버퍼의 크기가, 상대적으로 작을 때(예를 들어,512바이트), 예를 들어, 최대 32K-바이트인, 버퍼된 데이터의 다수 세그먼트들에 걸친 히스토리는, 작은 수의 바이트들을 처리하는, 디플레이트 변환 호출 명령에 대한 입력으로 사용될 수 있다.
디플레이트 변환 호출 명령의 개별 실행에 사용하기 위해 명시된, 입력 또는 출력 버퍼의 크기가, 상대적으로 클 때(예를 들어,128K-바이트), 예를 들어, 최대 32K-바이트인, 버퍼된 데이터의 이전 세그먼트의 히스토리는, 데이터의 제1 32K-바이트들을 처리하는, 디플레이트 변환 호출 명령에 대한 입력으로 사용될 수 있다.
[00287] 두 경우들 모두에서, 그렇지 않았다면 이용 가능했을 경우보다 더 많은 히스토리가 데이터를 처리하는 데 이용 가능하다. 그 결과, 중복 스트링들을 검출하는 것의 유효성이 향상되고, 전체 압축률이 개선되는 결과를 가져온다. 이는 컴퓨팅 환경 내에서 처리를 용이하게 하고 성능을 향상시킨다.
[00288] 본 발명의 하나 또는 그 이상의 실시 예들은 불가분하게 컴퓨터 기술과 연결되어 있어, 컴퓨터에서 처리를 용이하게 하고, 이로 인해 성능을 개선한다, 압축 및/또는 압축 해제를 수행하기 위해 단일 아키텍처된 머신 명령을 사용하면 컴퓨팅 환경 내에서 성능이 향상된다. 압축/압축 해제된 데이터는, 컴퓨터 처리, 의료 처리, 보안, 재고 관리 등과 같이, 데이터를 관리 및/또는 사용하는 많은 기술 분야들에서 사용될 수 있다. 압축/압축 해제에서 최적화들을 제공함으로써 이들 기술 분야들은 실행 시간을 감소시킴으로써 개선된다.
[00289] 본 발명의 하나 또는 그 이상의 실시 예들과 관련하여, 컴퓨팅 환경 내에서 처리를 용이하게 하는 일 실시예의 추가 세부사항들이 도 19a-19b를 참조하여 기술된다.
[00290] 도 19a를 참조하면, 일 실시예에서, 컴퓨팅 환경의 범용 프로세서는 명령에 의해서 지원되는 복수의 함수들 중 하나의 함수를 수행하기 위한 명령을 획득한다(1900). 예를 들어, 명령은 압축에 대한 산업 표준을 준수하는 명령 세트 아키텍처의 단일 아키텍처된 명령이다(1902). 명령이 실행되고(1904), 상기 실행 단계는 데이터의 변환된 상태를 제공하기 위해 입력 데이터의 압축되지 않은 형태와 입력 데이터의 압축된 형태 사이에서 입력 데이터의 상태를, 상기 함수가 압축 함수 또는 압축 해제 함수인 것에 기초하여, 변환하는 단계(transforming)를 포함한다(1906). 데이터의 변환된 상태는 작업을 수행하는 데 사용되기 위해 출력으로서 제공된다(1908).
[00291] 일 실시 예에서, 상기 입력 데이터의 상태를 변환하는 단계는 산업 표준을 준수하는 압축 포맷을 사용한다(1910). 상기 압축된 포맷은, 예를 들어, 디플레이트 압축 포맷을 포함한다(1912).
[00292] 예들로서, 상기 작업은: 압축된 데이터를 포함하는, 상기 출력을 사용하는 하나 또는 그 이상의 연산들을 수행하는 단계; 상기 출력을 전송하는 단계; 압축되지 않은 데이터를 포함하는, 상기 출력을 사용하는 하나 또는 그 이상의 연산들을 수행하는 단계를 포함하는 작업들의 그룹으로부터 선택된다(1914).
[00293] 일 실시 예에서, 도 19b를 참조하면, 상기 명령은 하나의 연산을 명시하기 위한 연산 코드를 포함하는 연산 코드 필드와 상기 명령에 의해서 사용되는 복수의 레지스터들을 명시하기 위한 복수의 레지스터 필드들을 포함한다(1920). 상기 복수의 레지스터들은, 예를 들어, 출력으로서 상기 명령에 의해서 사용될 출력 오퍼랜드 위치를 식별하기 위해 사용되는 하나의 레지스터와 입력으로서 상기 명령에 의해서 사용될 입력 오퍼랜드 위치를 식별하기 위해 사용되는 다른 레지스터를 포함하고, 상기 입력은 상기 함수에 따라 달라진다(1922).
[00294] 일 예로서, 상기 함수가 압축 함수인 것에 기초하여, 상기 입력은 상기 출력 오퍼랜드 위치에 저장되는 압축된 데이터 심벌들을 제공하기 위해 엔코드 될 상기 입력 오퍼랜드 위치로부터의 데이터를 포함하고(1924), 상기 함수가 압축해제 함수인 것에 기초하여, 상기 입력은 상기 출력 오퍼랜드 위치에 저장되는 압축 안된 데이터를 제공하기 위해 디코드 될 상기 입력 오퍼랜드 위치로부터의 상기 압축된 데이터 심벌들을 포함한다(1926).
[00295] 또한, 일 실시 예에서, 상기 명령은 상기 명령에 의해서 수행될 복수의 함수들 중 하나의 함수를 표시하기 위해 선택된 레지스터를 사용한다(1928). 상기 복수의 함수들은, 예를 들어, 질의 함수(a query function), 상기 압축 함수, 동적-후프만 테이블 생성 함수(a generate dynamic-Huffman table function) 및 상기 압축해제 함수를 포함한다(1930). 또한, 일 실시 예에서, 상기 명령은 상기 복수의 함수들 중 하나 또는 그 이상의 함수들에 대해서 상기 명령에 의해서 사용되는 파라미터 블록의 주소를 제공하기 위해 다른 선택된 레지스터를 사용한다(1932).
[00296] 추가의 실시 예에서, 상기 수행될 함수는 동적-후프만 테이블 생성 함수이고, 상기 실행하는 단계는, 상기 함수가 동적-후프만 테이블 생성 함수임에 기초하여, 상기 수행될 함수가, 상기 명령의 다른 실행에서, 상기 압축 함수 또는 상기 압축 해제 함수 일 때, 사용될 동적 후프만 테이블의 압축된 표현(a compressed representation)을 생성하는 단계를 포함한다(1934).
[00297] 다른 변형들 및 실시 예들이 가능하다.
[00298] 본 발명의 실시 예들은 많은 유형의 컴퓨팅 환경들에 의해서 사용될 수 있다. 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하는 컴퓨팅 환경의 다른 실시 예가 도 20a를 참조하여 설명된다. 이 예에서, 컴퓨팅 환경(10)은, 예컨대, 네이티브 중앙 처리 유닛(CPU)(12), 메모리(14), 및, 예를 들어, 하나 또는 그 이상의 버스들(18) 및/또는 다른 접속들을 통해, 서로 연결된 하나 또는 그 이상의 입출력 장치들 및/또는 인터페이스들(16)을 포함한다. 예로서, 컴퓨팅 환경(10)은 미국 뉴욕 주 아몽크에 있는 인터내셔널 비즈니스 머신즈 코포레이션이 공급하는 PowerPC® 프로세서; 미국 캘리포니아 주 팔로 알토에 있는 Hewlett Packard Co.가 공급하는 Intel Itanium II 프로세서가 장착 된 HP Superdome; 및/또는 인터내셔널 비즈니스 머신즈 코포레이션, Hewlett Packard, Intel, Oracle 또는 기타 회사들이 공급하는 아키텍처들에 기초하는 기타 머신들을 포함할 수 있다. IBM Z, z/OS, PR/SM 및 PowerPC는 적어도 한 국가(관할 구역)에서 인터내셔널 비즈니스 머신즈 코포레이션의 상표들 또는 등록 상표들이다. Intel 및 Itanium 은 미국 및 기타 국가들에서 인텔 코포레이션 또는 그 자회사들의 상표들 또는 등록 상표들이다.
[00299] 네이티브 중앙 처리 유닛(12)는 환경 내에서 처리 중에 사용되는 하나 또는 그 이상의 범용 레지스터들 및/또는 하나 또는 그 이상의 특수 목적 레지스터들과 같은 하나 또는 그 이상의 네이티브 레지스터들(20)을 포함한다. 이들 레지스터들은 특정 시점에서 환경 상태를 나타내는 정보를 포함한다.
[00300] 더 나아가서, 네이티브 중앙 처리 유닛(12)은 메모리(14)에 저장된 명령들 및 코드를 실행한다. 하나의 특정 예에서, 상기 중앙 처리 유닛은 메모리 (14)에 저장된 에뮬레이터 코드(22)를 실행한다. 이 코드는 한 아키텍처에서 구성된 컴퓨팅 환경이 다른 아키텍처를 에뮬레이트 할 수 있게 해 준다. 예를 들어, 에뮬레이터 코드(22)는 z/Architecture 하드웨어 아키텍처가 아닌 아키텍처들에 기초한 머신들, 예를 들어 PowerPC 프로세서들, HP Superdome 서버들, 또는 다른 서버들이 z/Architecture 하드웨어 아키텍처를 에뮬레이트 하여 z/Architecture 하드웨어 아키텍처에 기초하여 개발된 소프트웨어 및 명령들을 실행할 수 있게 해 준다.
[00301] 에뮬레이터 코드(22)에 관한 더 상세한 설명은 도 20b 를 참조하여 기술된다. 메모리(14)에 저장된 게스트 명령들(30)은 네이티브 CPU(12)의 아키텍쳐가 아닌 아키텍쳐에서 실행되도록 개발 된 소프트웨어 명령들(예를 들어, 머신 명령들에 관련되는)을 포함한다. 예를 들어, 게스트 명령들(30)은 z/Architecture 하드웨어 아키텍처에 기초한 프로세서 상에서 실행하도록 설계되었지만, 예를 들어 Intel Itanium II 프로세서인, 네이티브 CPU(12)상에서 에뮬레이트 될 수 있다. 한 예에서, 에뮬레이터 코드(22)는 메모리(14)로부터 하나 또는 그 이상의 게스트 명령들 (30)을 획득하고 획득 된 명령들에 대한 로컬 버퍼링을 선택적으로 제공하기 위한 명령 페치 루틴(32)을 포함한다. 또한, 획득 된 게스트 명령의 유형을 결정하고 상기 게스트 명령을 하나 또는 그 이상의 대응하는 네이티브 명령들 (36)로 변환하기 위한 명령 변환 루틴(34)을 포함한다. 이 변환은, 예를 들어, 상기 게스트 명령에 의해 수행 될 함수를 식별하는 것과 그 함수를 수행하기 위한 네이티브 명령(들)을 선택하는 것을 포함한다.
[00302] 또한, 에뮬레이터 코드(22)는 네이티브 명령들이 실행되도록 하는 에뮬레이션 제어 루틴(40)을 포함한다. 에뮬레이션 제어 루틴(40)은 네이티브 CPU(12)로 하여금 하나 또는 그 이상의 이전에 획득 된 게스트 명령들을 에뮬레이트하는 네이티브 명령들의 루틴을 실행하게 하고, 그러한 실행의 종료 시에, 다음 게스트 명령 또는 일 군의 게스트 명령들을 획득하는 것을 에뮬레이트 하기 위해 상기 명령 페치 루틴에 제어를 반환(return)하게 할 수 있다. 네이티브 명령들(36)의 실행은 메모리(14)로부터 레지스터로 데이터를 로드하는 단계; 레지스터로부터 데이터를 메모리에 다시 저장하는 단계; 또는 변환 루틴에 의해 결정되는, 어떤 유형의 산술 또는 논리 연산을 수행하는 단계를 포함 할 수 있다.
[00303] 각 루틴은, 예를 들어, 소프트웨어로 구현되고, 상기 소프트웨어는 메모리에 저장되며, 네이티브 중앙 처리 유닛(12)에 의해 실행된다. 다른 예들에서, 하나 또는 그 이상의 루틴들 또는 연산들은 펌웨어, 하드웨어, 소프트웨어 또는 이들의 조합으로 구현된다. 에뮬레이트된 프로세서의 레지스터들은 상기 네이티브 CPU의 레지스터들(20)을 사용하여 또는 메모리(14) 내의 위치들을 사용하여 에뮬레이트 될 수 있다. 실시 예들에서, 게스트 명령들(30), 네이티브 명령들 (36) 및 에뮬레이터 코드(22)는 동일한 메모리 내에 상주 하거나 또는 다른 메모리들 사이에서 분산 될 수 있다.
[00304] 전술한 컴퓨팅 환경들은 사용될 수 있는 컴퓨팅 환경들 중 예들일 뿐이다. 다른 비-파티션 환경들, 다른 파티션 환경들 및/또는 다른 에뮬레이트 된 환경들을 포함하나, 이에 한정되지 않는, 다른 환경들이 사용될 수 있다; 본 발명의 실시 예들은 어느 하나의 환경에 한정되지 않는다.
[00305] 각각의 컴퓨팅 환경은 본 발명의 하나 또는 그 이상의 특징들을 포함하도록 구성될 수 있다. 예를 들어, 각각은 본 발명의 하나 또는 그 이상의 실시 예들에 따라, 소팅 및/또는 병합을 제공하도록 구성될 수 있다.
[00306] 본 발명의 하나 또는 그 이상의 실시 예들은 클라우드 컴퓨팅과 관련될 수 있다.
[00307] 본 명세서는 클라우드 컴퓨팅에 관해서 상세한 설명들을 포함하지만, 여기서 설명된 그러한 컨텐츠들의 구현은 클라우드 컴퓨팅 환경에만 한정되는 것은 아님을 이해 하여야 한다. 오히려, 본 발명의 실시 예들은 지금 알려져 있거나 또는 나중에 개발될 모든 다른 유형의 컴퓨팅 환경과 함께 구현될 수 있다.
[00308] 클라우드 컴퓨팅은, 최소한의 관리 노력 또는 서비스 제공자와의 상호작용으로 빠르게 제공되고 해제될 수 있는, 구성 가능한(configurable) 컴퓨팅 리소스들(예를 들어, 네트워크, 네트워크 대역폭, 서버, 처리, 메모리, 스토리지, 애플리케이션, 가상 머신, 및 서비스)의 공유 풀에 대한 편리한 주문형(on-demand) 네트워크 액세스를 가능하게 하는 서비스 전달 모델이다. 이 클라우드 모델은 적어도 5가지의 특성(characteristics), 적어도 3가지 서비스 모델(service models), 및 적어도 4가지 배치 모델(deployment models)을 포함할 수 있다.
[00309] 클라우드 컴퓨팅 특성들은 다음과 같다:
주문형 셀프-서비스(On-demand self-service): 클라우드 소비자는, 서비스 제공자와의 인적 상호작용을 필요로 하지 않고 필요한 만큼 자동적으로, 서버 시간(server time) 및 네트워크 스토리지 같은 컴퓨팅 기능들을 일방적으로 제공(provision)할 수 있다.
광역 네트워크 액세스(Broad network access): 혼성의 씬 또는 씩 클라이언트 플랫폼들(heterogeneous thin or thick client platforms)(예를 들어, 모바일폰, 랩탑, 및 PDA)에 의한 사용을 장려하는 표준 메커니즘들을 통해 액세스되는 기능들을 네트워크를 통해서 이용할 수 있다.
리소스 풀링(Resource pooling): 제공자의 컴퓨팅 리소스들은 멀티-테넌트 모델(a multi-tenant model)을 이용하여, 각기 다른 물리적 및 가상 리소스들을 요구(demand)에 따라 동적으로 할당 및 재할당하면서, 다수의 소비자들에게 서비스할 수 있도록 풀에 넣어둔다(pooled). 소비자는 일반적으로 제공된 리소스들의 정확한 위치를 제어할 수 없거나 그에 대한 지식이 없지만 더 높은 추상 수준에서(예를 들어, 국가, 주, 또는 데이터센터) 위치를 명시할 수 있다는 점에서 위치 독립성이 있다.
기민한 탄력성(Rapid elasticity): 용량들(capabilities)이 기민하게 탄력적으로 제공되어 (어떤 경우엔 자동으로) 신속히 규모를 확장할 수도 있고(scale out) 그리고 탄력적으로 해제되어 신속히 규모를 축소할 수도 있다(scale in). 소비자에게 제공할 수 있는 가능성이 종종 무제한이고 언제든지 얼마든지 구매할 수 있는 것처럼 보인다.
측정 가능한 서비스(Measured service): 클라우드 시스템은 리소스 사용을 자동으로 제어하고 최적화하는데, 서비스의 유형(예를 들어, 스토리지, 처리, 대역폭, 및 활성 사용자 계정)에 적절한 추상화 수준에서(at some level of abstraction) 계측 기능을 이용하여서 그렇게 한다. 리소스 사용량은 모니터되고, 제어되고, 그리고 보고될 수 있으며 이로써 이용하는 서비스의 제공자와 사용자 모두에게 투명성을 제공한다.
[00310] 서비스 모델들(Service Models)은 다음과 같다:
소프트웨어 서비스(Software as a Service)(SaaS): 소비자에게 제공되는 서비스는 클라우드 인프라스트럭처 상에서 실행되는 제공자의 애플리케이션들을 사용하게 해주는 것이다. 애플리케이션들은 웹 브라우저(예를 들어, 웹기반 이메일) 같은 씬(thin) 클라이언트 인터페이스를 통해 여러 클라이언트 장치들에서 액세스 가능하다. 소비자는 네트워크, 서버, 운영체제, 스토리지, 또는 개별 애플리케이션 성능을 포함하는 하부 클라우드 인프라스트럭처를 관리하거나 제어하지 않는다. 단, 제한된 사용자-특화 애플리케이션 구성 세팅들은 예외로서 가능하다.
플랫폼 서비스(Platform as a Service)(PaaS): 소비자에게 제공되는 서비스는 제공자에 의해 지원되는 프로그래밍 언어들 및 도구들을 이용하여 생성된 소비자-생성 또는 획득 애플리케이션들을 클라우드 인프라스트럭처에 배치하게 해주는 것이다. 소비자는 네트워크, 서버, 운영체제, 또는 스토리지를 포함하는 하부 클라우드 인프라스트럭처를 관리하거나 제어하지 않는다. 그러나 배치된 애플리케이션들에 대해서 그리고 가능한 경우 애플리케이션 호스팅 환경 구성들에 대해서 제어할 수 있다.
인프라스트럭처 서비스(Infrastructure as a Service)(IaaS): 소비자에게 제공되는 서비스는 처리, 스토리지, 네트워크, 및 기타 기본 컴퓨팅 리소스들을 제공하여 주는 것이며, 여기서 소비자는 임의의 소프트웨어를 배치 및 실행할 수 있고, 이 소프트웨어에는 운영체제와 애플리케이션들이 포함될 수 있다. 소비자는 하부 클라우드 인프라스트럭처를 관리하거나 제어하지 않지만, 운영체제, 스토리지, 배치된 애플리케이션들, 및 가능한 경우 선택된 네트워킹 컴포넌트들의 제한적인 제어(예를 들어, 호스트 방화벽들)에 대하여 제어할 수 있다.
[00311] 배치 모델들(Deployment Models)은 다음과 같다:
사설 클라우드(Private cloud): 클라우드 인프라스트럭처는 오직 한 조직(an organization)을 위해서 운영되고, 그 조직 또는 제3자에 의해 관리될 수 있으며 옥내(on-premises) 또는 옥외(on-premises)에 위치할 수 있다.
커뮤니티 클라우드(Community cloud): 클라우드 인프라스트럭처는 여러 조직들에 의해 공유되고 관심사(예를 들어, 선교, 보안 요건, 정책, 및 규정 준수 심사)를 공유하는 특정 커뮤니티를 지원하며, 여러 조직들 또는 제3자에 의해 관리될 수 있으며 옥내(on-premises) 또는 옥외(on-premises)에 위치할 수 있다.
공공 클라우드(Public cloud): 클라우드 인프라스트럭처는 일반 대중 또는 대규모 산업 집단에서 이용할 수 있으며 클라우드 서비스를 판매하는 조직이 소유한다.
하이브리드 클라우드(Hybrid cloud): 클라우드 인프라스트럭처는 둘 또는 그 이상의 클라우드들(사설, 커뮤니티, 또는 공공)이 혼합된 구성이며, 이들은 고유한 독립체들로 있지만 데이터 및 애플리케이션 이식가능성(portability)을 가능하게 해주는 표준화된 또는 소유권 있는 기술(예를 들어, 클라우드들 사이의 부하 균형을 위한 클라우드 버스팅(cloud bursting))에 의해 서로 결합되어 있다.
[00312] 클라우드 컴퓨팅 환경은 무국적(statelessness), 낮은 결합(low coupling), 모듈 방식(modularity), 및 의미적 상호운용성(semantic interoperability)에 집중하는 서비스를 지향한다. 클라우드 컴퓨팅의 중심에는 상호 연결된 노드들의 네트워크를 포함하는 인프라스트럭처가 있다.
[00313] 이제 도 21을 참조하면, 예시적인 클라우드 컴퓨팅 환경(50)이 도시된다. 도시된 바와 같이, 클라우드 컴퓨팅 환경(50)은 하나 또는 그 이상의 클라우드 컴퓨팅 노드들(52)을 포함하며, 이들은 예를 들어 개인 휴대 정보 단말기(PDA) 또는 휴대폰(54A), 데스크탑 컴퓨터(54B), 랩탑 컴퓨터(54C), 및/또는 자동차용 컴퓨터 시스템(54N)과 통신할 수 있다. 노드들(52)은 서로 통신할 수 있다. 이들은 여기에 기술된 바와 같은 사설, 커뮤니티, 공공, 또는 하이브리드 클라우드들 또는 이들의 조합 등의 하나 또는 그 이상의 네트워크들에서 물리적으로 또는 가상으로 그룹화될 수 있다(도시되지 않음). 이것은 클라우드 소비자가 로컬 컴퓨팅 장치 상에 리소스들을 유지할 필요가 없게 클라우드 컴퓨팅 환경(50)이 인프라스트럭처, 플랫폼들 및/또는 소프트웨어를 서비스로서 제공할 수 있게 해준다. 도 21에 도시된 컴퓨팅 장치들(54A-N)의 유형들은 단지 예시의 목적으로 기술한 것이며 컴퓨팅 노드들(52)과 클라우드 컴퓨팅 환경(50)은 모든 유형의 네트워크 및/또는 네트워크 주소지정가능 연결을 통해서 (예를 들어, 웹 브라우저를 사용하여) 모든 유형의 컴퓨터화된 장치와 통신할 수 있다는 것을 이해해야 한다.
[00314] 이제 도 22를 참조하면, 클라우드 컴퓨팅 환경(50) (도 21)에 의해 제공되는 일 세트의 기능별 추상화 계층들이 도시된다. 도 22에 도시된 컴포넌트들, 계층들, 및 기능들은 단지 예시의 목적이며 본 발명의 바람직한 실시 예들은 이것에 한정되지 않는다는 것을 미리 이해해야 한다. 도시된 바와 같이, 다음의 계층들과 그에 대응하는 기능들이 제공된다:
하드웨어 및 소프트웨어 계층(60)은 하드웨어 및 소프트웨어 컴포넌트들을 포함한다. 하드웨어 컴포넌트들의 예들에는: 메인프레임들(61); RISC(Reduced Instruction Set Computer) 아키텍처 기반 서버들(62); 서버들(63); 블레이드 서버들(64); 스토리지 디바이스들(65); 그리고 네트워크 및 네트워킹 컴포넌트들(66)이 포함된다. 일부 실시 예들에서, 소프트웨어 컴포넌트들은 네트워크 애플리케이션 서버 소프트웨어(67) 및 데이터베이스 소프트웨어(68)를 포함한다.
가상화 계층(70)은 추상화 계층을 제공하며 이로부터 다음의 가상 실체들의 예들이 제공될 수 있다: 가상 서버들(71); 가상 스토리지(72); 가상 사설 네트워크를 포함하는, 가상 네트워크들(73); 가상 애플리케이션들 및 운영체제들(74); 및 가상 클라이언트들(75).
[00315] 한 예에서, 관리 계층(80)은 아래에 기술하는 기능들을 제공한다. 리소스 제공(Resource provisioning)(81)은 클라우드 컴퓨팅 환경 내에서 작업들을 수행하는 데 이용되는 컴퓨팅 리소스들 및 기타 리소스들의 동적 조달을 제공한다. 계측 및 가격 책정(Metering and Pricing)(82)은 리소스들이 클라우드 컴퓨팅 환경 내에서 이용될 때 비용 추적, 및 이 리소스들의 소비에 대한 요금 청구를 제공한다. 한 예에서, 이 리소스들은 애플리케이션 소프트웨어 라이센스를 포함할 수 있다. 보안(Security)은 데이터 및 기타 리소스들뿐 아니라 클라우드 소비자들과 작업들에 대한 신원 확인을 제공한다. 사용자 포털(User portal)(83)은 소비자들 및 시스템 관리자들에게 클라우드 컴퓨팅 환경에 대한 액세스를 제공한다. 서비스 수준 관리(Service level management)(84)는 요구되는 서비스 수준이 충족되도록 클라우드 컴퓨팅 리소스 할당 및 관리를 제공한다. 서비스 수준 협약서(SLA) 기획 및 충족(planning and fulfillment)(85)은 SLA에 부합하는 예상되는 미래 요건에 맞는 클라우드 컴퓨팅 리소스들의 사전-배치(pre-arrangement) 및 조달(procurement)을 제공한다.
[00316] 워크로드 계층(90)은 클라우드 컴퓨팅 환경이 이용될 수 있는 기능들의 예들을 제공한다. 이 계층에서 제공될 수 있는 워크로드들과 기능들의 예들은 다음과 같다: 맵핑 및 네비게이션(91); 소프트웨어 개발 및 라이프사이클 관리(92); 가상 교실 교육 전달(93); 데이터 분석 처리(94); 트랜잭션 처리(95); 및 압축/압축해제 처리(96).
[00317] 본 발명의 실시 예들은 시스템, 방법, 및/또는 통합의 모든 가능한 기술적 세부 수준에서 컴퓨터 프로그램 제품이 될 수 있다. 컴퓨터 프로그램 제품은 컴퓨터 판독 가능 스토리지 매체를 포함할 수 있으며, 이 매체 상에 프로세서가 본 발명의 실시 예들을 수행하도록 하는 컴퓨터 판독 가능 프로그램 명령들을 갖는다.
[00318] 상기 컴퓨터 판독 가능 스토리지 매체는 명령 실행 장치에 의해 사용될 명령들을 유지 및 저장할 수 있는 유형의(tangible) 디바이스일 수 있다. 상기 컴퓨터 판독 가능 스토리지 매체는, 예를 들면, 전자 스토리지 디바이스, 자기 스토리지 디바이스, 광 스토리지 디바이스, 전자기 스토리지 디바이스, 반도체 스토리지 디바이스, 또는 전술한 것들의 모든 적절한 조합일 수 있으며, 그러나 이에 한정되지는 않는다. 컴퓨터 판독 가능 스토리지 매체의 더 구체적인 예들의 비포괄적인 목록에는 다음이 포함될 수 있다: 휴대용 컴퓨터 디스켓, 하드 디스크, 랜덤 액세스 메모리(RAM), 판독-전용 메모리(ROM), 소거 및 프로그램가능 판독-전용 메모리(EPROM 또는 플래시 메모리), 정적 랜덤 액세스 메모리(SRAM), 휴대용 컴팩트 디스크 판독-전용 메모리(CD-ROM), 디지털 다용도 디스크(DVD), 메모리 스틱, 플로피 디스크, 천공-카드들 또는 명령들이 히스토리된 홈에 있는 융기된 구조들 같이 기계적으로 인코드 된 장치, 및 전술한 것들의 모든 적절한 조합. 본 명세서에서 사용될 때, 컴퓨터 판독 가능 스토리지 매체는 무선 전파들이나 다른 자유롭게 전파되는 전자기파들, 도파 관이나 기타 전송 매체(예를 들어, 광섬유 케이블을 통해 전달되는 광 펄스들)를 통해 전파되는 전자기파들, 또는 선(wire)을 통해 전송되는 전기 신호들 같이 그 자체로 일시적인(transitory) 신호들로 해석되지는 않는다.
[00319] 본 명세서에 기술되는 컴퓨터 판독 가능 명령들은, 예를 들어, 인터넷, 근거리 통신망, 광역 통신망 및/또는 무선 네트워크 등의 통신망(네트워크)을 통해 컴퓨터 판독 가능 스토리지 매체로부터 각각 컴퓨팅/처리 디바이스들로 또는 외부 스토리지 디바이스로부터 외부 컴퓨터로 다운로드 될 수 있다. 상기 통신망은 구리 전송 케이블들, 광 전송 섬유들, 무선 전송, 라우터들, 방화벽들, 스위치들, 게이트웨이 컴퓨터들 및/또는 엣지 서버들을 포함할 수 있다. 각 컴퓨팅/처리 장치 내 네트워크 어댑터 카드 또는 네트워크 인터페이스는 상기 통신망으로부터 컴퓨터 판독 가능 프로그램 명령들을 수신하고 그 컴퓨터 판독 가능 프로그램 명령들을 각각의 컴퓨팅/처리 디바이스 내의 컴퓨터 판독 가능 스토리지 매체에 저장하기 위해 전송한다.
[00320] 본 발명의 연산들을 실행하기 위한 컴퓨터 판독 가능 프로그램 명령들은 Smalltalk, C++ 또는 그와 유사 언어 등의 객체 지향 프로그래밍 언어와 "C" 프로그래밍 언어 또는 그와 유사한 언어 등의 종래의 절차적 프로그래밍 언어들을 포함하여, 하나 또는 그 이상의 프로그래밍 언어들을 조합하여 작성된(written) 어셈블러 명령들, 명령-세트-아키텍처(ISA) 명령들, 머신 명령들, 머신 종속 명령들, 마이크로코드, 펌웨어 명령들, 상태-셋팅 데이터, 집적회로를 위한 구성 데이터, 또는 소스 코드나 목적 코드일 수 있다. 상기 컴퓨터 판독 가능 프로그램 명령들은 전적으로 사용자의 컴퓨터상에서, 부분적으로 사용자의 컴퓨터상에서, 독립형(stand-alone) 소프트웨어 패키지로서, 부분적으로 사용자의 컴퓨터상에서 그리고 부분적으로 원격 컴퓨터상에서 또는 전적으로 원격 컴퓨터나 서버상에서 실행될 수 있다. 위에서 마지막의 경우에, 원격 컴퓨터는 근거리 통신망(LAN) 또는 광역 통신망(WAN)을 포함한 모든 종류의 네트워크를 통해서 사용자의 컴퓨터에 접속될 수 있고, 또는 이 접속은 (예를 들어, 인터넷 서비스 제공자를 이용한 인터넷을 통해서) 외부 컴퓨터에 이루어질 수도 있다. 일부 실시 예들에서, 예를 들어 프로그램 가능 로직 회로, 필드-프로그램 가능 게이트 어레이들(FPGA), 또는 프로그램 가능 로직 어레이들(PLA)을 포함한 전자 회로는 본 발명의 실시 예들을 수행하기 위해 전자 회로를 맞춤화하도록 상기 컴퓨터 판독 가능 프로그램 명령들의 상태 정보를 활용하여 상기 컴퓨터 판독 가능 프로그램 명령들을 실행할 수 있다.
[00321] 본 명세서에서는 본 발명의 실시 예들에 따른 방법들, 장치들(시스템들), 및 컴퓨터 프로그램 제품들의 플로 차트 예시도들 및/또는 블록도들을 참조하여 본 발명의 실시 예들을 기술한다. 플로 차트 예시도들 및/또는 블록도들의 각 블록과 플로 차트 예시도들 및/또는 블록도들 내 블록들의 조합들은 컴퓨터 판독 가능 프로그램 명령들에 의해 구현될 수 있다는 것을 이해할 수 있을 것이다.
[00322] 이들 컴퓨터 판독 가능 프로그램 명령들은 범용 컴퓨터, 특수목적용 컴퓨터, 또는 기타 프로그램가능 데이터 처리 장치의 프로세서에 제공되어 머신(machine)을 생성하고, 그렇게 하여 그 명령들이 상기 컴퓨터 또는 기타 프로그램가능 데이터 처리 장치의 프로세서를 통해서 실행되어, 상기 플로 차트 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/동작들을 구현하기 위한 수단을 생성할 수 있다. 이들 컴퓨터 판독 가능 프로그램 명령들은 또한 컴퓨터 판독 가능 스토리지 매체에 저장될 수 있으며, 컴퓨터, 프로그램가능 데이터 처리 장치 및/또는 기타 디바이스들에 지시하여 명령들이 저장된 상기 컴퓨터 판독 가능 스토리지 매체가 상기 플로 차트 및/또는 블록도의 블록 또는 블록들에 명시된 기능/동작의 특징들을 구현하는 명령들을 포함하는 제조품(an article of manufacture)을 포함하도록 특정한 방식으로 기능하게 할 수 있다.
[00323] 상기 컴퓨터 판독 가능 프로그램 명령들은 또한 컴퓨터, 기타 프로그램가능 데이터 처리 장치, 또는 다른 디바이스에 로드 되어, 상기 컴퓨터, 기타 프로그램가능 장치 또는 다른 디바이스에서 일련의 동작 단계들이 수행되게 하여 컴퓨터 구현 프로세스를 생성하며, 그렇게 하여 상기 컴퓨터, 기타 프로그램가능 장치, 또는 다른 디바이스 상에서 실행되는 명령들이 플로 차트 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/동작들을 구현할 수 있다.
[00324] 도면들 내 플로 차트 및 블록도들은 본 발명의 여러 실시 예들에 따른 시스템들, 방법들 및 컴퓨터 프로그램 제품들의 가능한 구현들의 아키텍처, 기능(functionality), 및 연산(operation)을 예시한다. 이와 관련하여, 상기 플로 차트 또는 블록도들 내 각 블록은 상기 명시된 논리적 기능(들)을 구현하기 위한 하나 또는 그 이상의 실행 가능한 명령들을 포함한 모듈, 세그먼트 또는 명령들의 일부분을 나타낼 수 있다. 일부 다른 구현들에서, 상기 블록에 언급되는 기능들은 도면들에 언급된 순서와 다르게 일어날 수도 있다. 예를 들면, 연속으로 도시된 두 개의 블록들은 실제로는 사실상 동시에 실행될 수도 있고, 또는 이 두 블록들은 때때로 관련된 기능에 따라서는 역순으로 실행될 수도 있다. 블록도들 및/또는 순서 예시도의 각 블록, 및 블록도들 및/또는 순서 예시도 내 블록들의 조합들은 특수목적용 하드웨어 및 컴퓨터 명령들의 명시된 기능들 또는 동작들, 또는 이들의 조합들을 수행하는 특수목적용 하드웨어-기반 시스템들에 의해 구현될 수 있다는 것에 또한 주목해야 한다.
[00325] 전술 한 것에 추가하여, 본 발명의 하나 또는 그 이상의 실시 예들은 고객 환경들의 관리를 공급하는 서비스 제공자에 의해 제공, 공급, 배치, 관리, 서비스 등이 될 수 있다. 예를 들면, 서비스 제공자는 하나 또는 그 이상의 고객들을 위해 본 발명의 하나 또는 그 이상의 실시 예들을 수행하는 컴퓨터 코드 및/또는 컴퓨터 인프라스트럭처의 제작, 유지, 지원 등을 할 수 있다. 그 대가로, 서비스 제공자는, 예를 들어, 가입제(subscription) 및/또는 수수료 약정에 따라 고객으로부터 대금을 수령할 수 있다. 추가적으로 또는 선택적으로, 서비스 제공자는 하나 또는 그 이상의 제3자들에게 광고 콘텐츠를 판매하고 대금을 수령할 수 있다.
[00326] 한 예에서, 본 발명의 하나 또는 그 이상의 실시 예들을 수행하기 위해 하나의 애플리케이션이 배치될 수 있다. 한 예로서, 하나의 애플리케이션의 배치는 본 발명의 하나 또는 그 이상의 실시 예들을 수행하기 위해 동작 가능한 컴퓨터 인프라스트럭처를 제공하는 것을 포함할 수 있다.
[00327] 추가의 예로서, 컴퓨터 판독 가능 코드를 컴퓨팅 시스템으로 통합하는 것을 포함하는 컴퓨팅 인프라스트럭처가 배치될 수 있으며, 상기 컴퓨팅 인프라스트럭처에서 상기 코드는 상기 컴퓨팅 시스템과 결합하여 본 발명의 하나 또는 그 이상의 실시 예들을 수행할 수 있다.
[00328] 추가 예로서, 컴퓨터 판독 가능 코드를 컴퓨터 시스템으로 통합시키는 것을 포함하는 컴퓨팅 인프라스트럭처를 통합하기 위한 프로세스가 제공될 수 있다. 상기 컴퓨터 시스템은 컴퓨터 판독 가능 매체를 포함하고, 상기 컴퓨터 시스템에서 컴퓨터 매체는 본 발명의 하나 또는 그 이상의 실시 예들을 포함한다. 상기 코드는 상기 컴퓨터 시스템과 결합하여 본 발명의 하나 또는 그 이상의 실시 예들을 수행할 수 있다.
[00329] 위에서 다양한 실시 예들이 기술되었지만, 이들은 단지 예시들일 뿐이다. 예를 들면, 다른 아키텍처들의 컴퓨팅 환경들이 본 발명의 하나 또는 그 이상의 실시 예들을 포함하고 사용하는 데 사용될 수 있다. 또한, 다른(different) 명령들, 또는 연산들이 사용될 수 있다. 추가적으로, 다른 레지스터들이 사용될 수 있고 및/또는 다른 유형의 표시들(레지스터 번호들이 아닌)이 명시될 수 있다. 많은 변형들이 가능하다.
[00330] 또한, 다른 유형의 컴퓨팅 환경들도 유익을 얻을 수 있고 사용될 수 있다. 예로서, 프로그램 코드를 저장 및/또는 실행하기에 적합한 데이터 처리 시스템이 사용될 수 있으며, 이 시스템은 시스템 버스를 통해서 메모리 엘리먼트들에 직접적으로 또는 간접적으로 결합된 적어도 두 개의 프로세서를 포함한다. 상기 메모리 엘리먼트들은, 예를 들어 프로그램 코드의 실제 실행 동안 사용되는 로컬 메모리, 대용량 스토리지(bulk storage), 및 코드가 실행 동안에 대용량 스토리지로부터 검색되어야 하는 횟수를 줄이기 위해 적어도 일부 프로그램 코드의 임시 스토리지(temporary storage)를 제공하는 캐시 메모리를 포함한다.
[00331] 입력/출력 또는 I/O 디바이스들(키보드, 디스플레이, 포인팅 디바이스, DASD, 테이프, CD들, DVD들, 썸 드라이브들 및 기타 메모리 매체 등을 포함하나 이에 한정되지는 않음)은 직접 또는 중개(intervening) I/O 제어기들을 통해서 시스템에 결합될 수 있다. 네트워크 어댑터 또한 상기 시스템에 결합되어 데이터 처리 시스템이 중개하는 사설 또는 공공 네트워크를 통해서 기타 데이터 처리 시스템 또는 원격 포인터 또는 저장 장치에 결합되는 것을 가능하게 한다. 모뎀들, 케이블 모뎀들, 및 이더넷 카드들은 이용 가능한 유형의 네트워크 어댑터들의 단지 일부 예이다.
[00332] 본 명세서에서 사용된 용어들은 단지 본 발명의 특정 실시 예들을 기술할 목적으로 사용된 것이지 한정하려는 의도로 사용된 것은 아니다. 본 명세서에서 사용할 때, 단수 형태는 그 컨텍스트에서 그렇지 않은 것으로 명확히 명시되어 있지 않으면, 복수 형태도 또한 포함할 의도로 기술된 것이다. 또한, "포함한다" 및/또는 "포함하는" 이라는 말들은 본 명세서에서 사용될 때, 언급되는 특징들, 정수들, 단계들, 동작들, 엘리먼트들, 및/또는 컴포넌트들의 존재를 명시하지만, 하나 또는 그 이상의 다른 특징들, 정수들, 단계들, 동작들, 엘리먼트들, 컴포넌트들 및/또는 이들의 그룹들의 존재 또는 추가를 배제하는 것은 아니라는 것을 이해할 수 있을 것이다.
[00333] 이하의 청구항들에서, 대응하는 구조들(structures), 재료들(materials), 동작들(acts), 및 모든 수단의 등가물들 또는 단계 플러스 기능 엘리먼트들은, 만일 있다면, 구체적으로 청구되는 다른 청구된 엘리먼트들과 함께 그 기능을 수행하기 위한 구조, 재료, 또는 동작을 포함할 의도가 있다. 본 발명의 하나 또는 그 이상의 실시 예들에 대한 설명은 예시와 설명의 목적으로 제공되는 것이며, 개시되는 형태로 빠짐없이 총 망라하거나 한정하려는 의도가 있는 것은 아니다. 이 기술 분야에서 통상의 지식을 가진 자라면 많은 수정들 및 변형들이 있을 수 있다는 것을 알 수 있다. 본 발명의 실시 예는 여러 특징들 및 실제 응용을 가장 잘 설명하기 위해 그리고 고려되는 구체적인 용도에 적합하게 여러 수정들을 갖는 다양한 실시 예들을 이 기술 분야에서 통상의 지식을 가진 자들이 이해할 수 있도록 하기 위해, 선택되고 기술되었다.
Claims (20)
- 컴퓨팅 환경에서 처리를 용이하게 하기 위한 컴퓨터 프로그램 제품에 있어서, 상기 컴퓨터 프로그램 제품은:
처리 회로에 의해 판독 가능하고, 방법을 수행하기 위해 명령들을 저장하는 컴퓨터 판독 가능 스토리지 매체를 포함하고, 상기 방법은:
하나의 명령에 의해서 지원되는 복수의 함수들 중 하나의 함수를 수행하기 위해상기 명령을, 상기 컴퓨팅 환경의 범용 프로세서에 의해서, 획득하는 단계(obtaining)-상기 명령은 압축을 위한 산업 표준을 준수하는 명령 세트 아키텍처의 단일 아키텍처된 명령임-; 및
상기 명령을 실행하는 단계(executing)를 포함하고, 상기 실행하는 단계는:
변환된 상태의 데이터를 제공하기 위해 압축되지 않은 형식의 입력 데이터와 압축된 포맷의 입력 데이터 사이에서 상기 입력 데이터의 상태를, 압축 함수 또는 압축해제 함수인 상기 함수에 기초하여, 변환하는 단계(transforming); 및
하나의 작업을 수행하는데 사용될 상기 변환된 상태의 데이터를 출력으로 제공하는 단계(providing)를 포함하는
컴퓨터 프로그램 제품. - 제1항에 있어서, 상기 입력 데이터의 상태를 변환하는 단계는 상기 산업 표준을 준수하는 압축 포맷을 사용하는
컴퓨터 프로그램 제품. - 제2항에 있어서, 상기 압축 포맷은 디플레이트 압축 포맷(a DEFLATE compression format)을 포함하는
컴퓨터 프로그램 제품. - 제1항에 있어서, 상기 작업은:
압축된 데이터를 포함하는, 상기 출력을 사용하는 하나 또는 그 이상의 연산들을 수행하는 단계; 상기 출력을 전송하는 단계; 압축 안된 데이터를 포함하는, 상기 출력을 사용하는 하나 또는 그 이상의 연산들을 수행하는 단계를 포함하는 작업들의 그룹으로부터 선택되는
컴퓨터 프로그램 제품. - 제1항에 있어서, 상기 명령은 하나의 연산을 명시하기 위한 연산 코드를 포함하는 연산 코드 필드와 상기 명령에 의해서 사용되는 복수의 레지스터들을 명시하기 위한 복수의 레지스터 필드들을 포함하는
컴퓨터 프로그램 제품. - 제5항에 있어서, 상기 복수의 레지스터들은 출력으로 상기 명령에 의해서 사용될 출력 오퍼랜드 위치를 식별하기 위해 사용되는 하나의 레지스터와 입력으로 상기 명령에 의해서 사용될 입력 오퍼랜드 위치를 식별하기 위해 사용되는 다른 레지스터를 포함하고, 상기 입력은 수행될 상기 함수에 따라 달라지는(depending)
컴퓨터 프로그램 제품. - 제6항에 있어서, 상기 함수가 압축 함수인 것에 기초하여, 상기 입력은 상기 출력 오퍼랜드 위치에 저장되는 압축된 데이터 심벌들을 제공하기 위해 엔코드 될 상기 입력 오퍼랜드 위치로부터 데이터를 포함하고, 상기 함수가 압축해제 함수인 것에 기초하여, 상기 입력은 상기 출력 오퍼랜드 위치에 저장되는 압축 안된 데이터를 제공하기 위해 디코드 될 상기 입력 오퍼랜드 위치로부터 상기 압축된 데이터 심벌들을 포함하는
컴퓨터 프로그램 제품. - 제5항에 있어서, 상기 명령은 상기 명령에 의해서 수행될 복수의 함수들 중 상 기 함수를 표시하기 위해 하나의 선택된 레지스터를 더 사용하는
컴퓨터 프로그램 제품. - 제8항에 있어서, 상기 명령은 상기 복수의 함수들 중 하나 또는 그 이상의 함수들에 대해서 상기 명령에 의해서 사용되는 파라미터 블록의 주소를 제공하기 위해 다른 선택된 레지스터를 더 사용하는
컴퓨터 프로그램 제품. - 제1항에 있어서, 상기 복수의 함수들은 질의 함수(a query function), 상기 압축 함수, 동적-후프만 테이블 생성 함수(a generate dynamic-Huffman table function) 및 상기 압축해제 함수를 포함하는
컴퓨터 프로그램 제품. - 제1항에 있어서, 상기 수행될 함수는 동적-후프만 테이블 생성 함수(a generate dynamic-Huffman table function)이고, 상기 실행하는 단계는, 상기 함수가 동적-후프만 테이블 생성 함수임에 기초하여, 상기 수행될 함수가, 상기 명령의 다른 실행에서, 상기 압축 함수 또는 상기 압축 해제 함수 일 때, 사용될 동적-후프만 테이블의 압축된 표현(a compressed representation)을 생성하는 단계를 포함하는
컴퓨터 프로그램 제품. - 컴퓨팅 환경 내에서 처리를 용이하게 하기 위한 컴퓨터 시스템에 있어서, 상기 컴퓨터 시스템은:
메모리; 및
상기 메모리와 결합된 범용프로세서를 포함하고, 상기 컴퓨터 시스템은 방법을 수행하도록 구성되며, 상기 방법은:
하나의 명령에 의해서 지원되는 복수의 함수들 중 하나의 함수를 수행하기 위해상기 명령을, 상기 컴퓨팅 환경의 범용 프로세서에 의해서, 획득하는 단계(obtaining)-상기 명령은 압축을 위한 산업 표준을 준수하는 명령 세트 아키텍처의 단일 아키텍처 된 명령임-; 및
상기 명령을 실행하는 단계(executing)를 포함하고, 상기 실행하는 단계는:
변환된 상태의 데이터를 제공하기 위해 압축되지 않은 형식의 입력 데이터와 압축된 포맷의 입력 데이터 사이에서 상기 입력 데이터의 상태를, 압축 함수 또는 압축해제 함수인 상기 함수에 기초하여, 변환하는 단계(transforming); 및
하나의 작업을 수행하는데 사용될 상기 변환된 상태의 데이터를 출력으로 제공하는 단계(providing)를 포함하는
컴퓨터 시스템. - 제12항에 있어서, 상기 입력 데이터의 상태를 변환하는 단계는 상기 산업 표준 준수하는 압축 포맷을 사용하는
컴퓨터 시스템. - 제12항에 있어서, 상기 명령은 하나의 연산을 명시하기 위한 연산 코드를 포함하는 연산 코드 필드와 상기 명령에 의해서 사용되는 복수의 레지스터들을 명시하기 위한 복수의 레지스터 필드들을 포함하는
컴퓨터 시스템. - 제14항에 있어서, 상기 복수의 레지스터들은 출력으로 상기 명령에 의해서 사용될 출력 오퍼랜드 위치를 식별하기 위해 사용되는 하나의 레지스터와 입력으로 상기 명령에 의해서 사용될 입력 오퍼랜드 위치를 식별하기 위해 사용되는 다른 레지스터를 포함하고, 상기 입력은 상기 함수에 따라 달라지며(depending),상기 함수가 압축 함수인 것에 기초하여, 상기 입력은 상기 출력 오퍼랜드 위치에 저장되는 압축된 데이터 심벌들을 제공하기 위해 엔코드 될 상기 입력 오퍼랜드 위치로부터 데이터를 포함하고, 상기 함수가 압축해제 함수인 것에 기초하여, 상기 입력은 상기 출력 오퍼랜드 위치에 저장되는 압축되지 않은 데이터를 제공하기 위해 디코드 될 상기 입력 오퍼랜드 위치로부터 상기 압축된 데이터 심벌들을 포함하는
컴퓨터 시스템. - 제12항에 있어서, 상기 수행될 함수는 동적-후프만 테이블 생성 함수(a generate dynamic-Huffman table function)이고, 상기 실행하는 단계는, 상기 함수가 동적-후프만 테이블 생성 함수임에 기초하여, 상기 수행될 함수가, 상기 명령의 다른 실행에서, 상기 압축 함수 또는 상기 압축 해제 함수 일 때, 사용될 동적-후프만 테이블의 압축된 표현(a compressed representation)을 생성하는 단계를 포함하는
컴퓨터 시스템. - 컴퓨팅 환경 내에서 처리를 용이하게 하는 컴퓨터-구현 방법(a computer-implemented method)에 있어서, 상기 컴퓨터-구현 방법은:
하나의 명령에 의해서 지원되는 복수의 함수들 중 하나의 함수를 수행하기 위해상기 명령을, 상기 컴퓨팅 환경의 범용 프로세서에 의해서, 획득하는 단계(obtaining)-상기 명령은 압축을 위한 산업 표준을 준수하는 명령 세트 아키텍처의 단일 아키텍처 된 명령임-; 및
상기 명령을 실행하는 단계(executing)를 포함하고, 상기 실행하는 단계는:
변환된 상태의 데이터를 제공하기 위해 압축되지 않은 형식의 입력 데이터와 압축된 포맷의 입력 데이터 사이에서 상기 입력 데이터의 상태를, 압축 함수 또는 압축해제 함수인 상기 함수에 기초하여, 변환하는 단계(transforming); 및
하나의 작업을 수행하는데 사용될 상기 변환된 상태의 데이터를 출력으로 제공하는 단계(providing)를 포함하는
컴퓨터-구현 방법. - 제17항에 있어서, 상기 입력 데이터의 상태를 변환하는 단계는 상기 산업 표준 준수하는 압축 포맷을 사용하는
컴퓨터-구현 방법. - 제17항에 있어서, 상기 명령은 하나의 연산을 명시하기 위한 연산 코드를 포함하는 연산 코드 필드와 상기 명령에 의해서 사용되는 복수의 레지스터들을 명시하기 위한 복수의 레지스터 필드들을 포함하고, 상기 복수의 레지스터들은 출력으로 상기 명령에 의해서 사용될 출력 오퍼랜드 위치를 식별하기 위해 사용되는 하나의 레지스터와 입력으로 상기 명령에 의해서 사용될 입력 오퍼랜드 위치를 식별하기 위해 사용되는 다른 레지스터를 포함하며, 상기 입력은 상기 함수에 따라 달라지며(depending),상기 함수가 압축 함수인 것에 기초하여, 상기 입력은 상기 출력 오퍼랜드 위치에 저장되는 압축된 데이터 심벌들을 제공하기 위해 엔코드 될 상기 입력 오퍼랜드 위치로부터 데이터를 포함하고, 그리고 상기 함수가 압축해제 함수인 것에 기초하여, 상기 입력은 상기 출력 오퍼랜드 위치에 저장되는 압축되지 않은 데이터를 제공하기 위해 디코드 될 상기 입력 오퍼랜드 위치로부터 상기 압축된 데이터 심벌들을 포함하는
컴퓨터-구현 방법. - 제17항에 있어서, 상기 수행될 함수는 동적-후프만 테이블 생성 함수(a generate dynamic-Huffman table function)이고, 상기 실행하는 단계는, 상기 함수가 동적-후프만 테이블 생성 함수임에 기초하여, 상기 수행될 함수가, 상기 명령의 다른 실행에서, 상기 압축 함수 또는 상기 압축 해제 함수 일 때, 사용될 동적-후프만 테이블의 압축된 표현(a compressed representation)을 생성하는 단계를 포함하는
컴퓨터-구현 방법.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/263,735 US10630312B1 (en) | 2019-01-31 | 2019-01-31 | General-purpose processor instruction to perform compression/decompression operations |
US16/263,735 | 2019-01-31 | ||
PCT/EP2020/051658 WO2020156926A1 (en) | 2019-01-31 | 2020-01-23 | General-purpose processor instruction to perform compression/decompression operations |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20210108995A true KR20210108995A (ko) | 2021-09-03 |
KR102598928B1 KR102598928B1 (ko) | 2023-11-03 |
Family
ID=69192075
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020217023382A KR102598928B1 (ko) | 2019-01-31 | 2020-01-23 | 압축/압축해제 연산들을 수행하기 위한 범용 프로세서 명령 |
Country Status (14)
Country | Link |
---|---|
US (1) | US10630312B1 (ko) |
EP (1) | EP3918469A1 (ko) |
JP (1) | JP7442526B2 (ko) |
KR (1) | KR102598928B1 (ko) |
CN (1) | CN113383309A (ko) |
AU (1) | AU2020213853B2 (ko) |
BR (1) | BR112021015027A2 (ko) |
CA (1) | CA3127849A1 (ko) |
IL (1) | IL283617B2 (ko) |
MX (1) | MX2021009157A (ko) |
SG (1) | SG11202104106WA (ko) |
TW (1) | TWI764078B (ko) |
WO (1) | WO2020156926A1 (ko) |
ZA (1) | ZA202104999B (ko) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10831497B2 (en) * | 2019-01-31 | 2020-11-10 | International Business Machines Corporation | Compression/decompression instruction specifying a history buffer to be used in the compression/decompression of data |
US11226839B2 (en) * | 2019-02-27 | 2022-01-18 | International Business Machines Corporation | Maintaining compatibility for complex functions over multiple machine generations |
US11663119B2 (en) * | 2020-05-29 | 2023-05-30 | International Business Machines Corporation | Select decompression headers and symbol start indicators used in writing decompressed data |
US11669331B2 (en) * | 2021-06-17 | 2023-06-06 | International Business Machines Corporation | Neural network processing assist instruction |
US20230267003A1 (en) * | 2022-02-23 | 2023-08-24 | International Business Machines Corporation | Padding input data for artificial intelligence accelerators |
TWI820994B (zh) * | 2022-11-01 | 2023-11-01 | 大陸商星宸科技股份有限公司 | 指令壓縮方法、指令解壓縮方法及流程壓縮方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20160003732A (ko) * | 2013-06-29 | 2016-01-11 | 인텔 코포레이션 | 압축 및 압축해제 연산들을 가속화하기 위한 장치 및 방법 |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5926208A (en) * | 1992-02-19 | 1999-07-20 | Noonen; Michael | Video compression and decompression arrangement having reconfigurable camera and low-bandwidth transmission capability |
US5442350A (en) * | 1992-10-29 | 1995-08-15 | International Business Machines Corporation | Method and means providing static dictionary structures for compressing character data and expanding compressed data |
US6604158B1 (en) * | 1999-03-11 | 2003-08-05 | Realtime Data, Llc | System and methods for accelerated data storage and retrieval |
US20030185301A1 (en) * | 2002-04-02 | 2003-10-02 | Abrams Thomas Algie | Video appliance |
US7159122B2 (en) * | 2003-05-12 | 2007-01-02 | International Business Machines Corporation | Message digest instructions |
GB0513433D0 (en) * | 2005-06-30 | 2005-08-10 | Nokia Corp | Signal message compressor |
US7991622B2 (en) * | 2007-03-20 | 2011-08-02 | Microsoft Corporation | Audio compression and decompression using integer-reversible modulated lapped transforms |
US20100223237A1 (en) * | 2007-11-05 | 2010-09-02 | University Of Florida Research Foundation, Inc. | Lossless data compression and real-time decompression |
JP4758494B2 (ja) * | 2009-04-21 | 2011-08-31 | インターナショナル・ビジネス・マシーンズ・コーポレーション | ビット長を符号に変換する回路及び方法 |
CN101977061B (zh) | 2010-10-19 | 2012-12-26 | 广西师范大学 | 一种通用信息的无损压缩与解压缩方法 |
WO2012053015A2 (en) * | 2010-10-22 | 2012-04-26 | Jana, Tejaswini, Ramesh | Compression and decompression of data at high speed in solid state storage |
US9766812B2 (en) | 2011-07-20 | 2017-09-19 | Veritas Technologies Llc | Method and system for storing data in compliance with a compression handling instruction |
US20130099946A1 (en) * | 2011-10-21 | 2013-04-25 | International Business Machines Corporation | Data Compression Utilizing Variable and Limited Length Codes |
US10534606B2 (en) * | 2011-12-08 | 2020-01-14 | Oracle International Corporation | Run-length encoding decompression |
US8593308B1 (en) * | 2012-05-31 | 2013-11-26 | International Business Machines Corporation | Method of accelerating dynamic Huffman decompaction within the inflate algorithm |
US20140006536A1 (en) | 2012-06-29 | 2014-01-02 | Intel Corporation | Techniques to accelerate lossless compression |
US9154157B2 (en) * | 2012-09-27 | 2015-10-06 | Intel Corporation | Search unit to accelerate variable length compression/decompression |
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 |
US9337862B2 (en) * | 2014-06-09 | 2016-05-10 | Tidal Systems, Inc. | VLSI efficient Huffman encoding apparatus and method |
US9306596B2 (en) | 2014-06-27 | 2016-04-05 | Intel Corporation | Hybrid CAM assisted deflate decompression accelerator |
US10102215B2 (en) * | 2015-03-27 | 2018-10-16 | Intel Corporation | Apparatus for hardware implementation of lossless data compression |
JP6363581B2 (ja) * | 2015-05-11 | 2018-07-25 | ヴィア アライアンス セミコンダクター カンパニー リミテッド | 入力ブロックのスキャンと同時にソート済みシンボル・リストを維持するハードウェア・データ圧縮器 |
US10303759B2 (en) | 2015-12-03 | 2019-05-28 | International Business Machines Corporation | Memory preserving parse tree based compression with entropy coding |
US9564917B1 (en) * | 2015-12-18 | 2017-02-07 | Intel Corporation | Instruction and logic for accelerated compressed data decoding |
CN105871382B (zh) | 2016-03-29 | 2019-10-18 | 中海油信息科技有限公司 | 一种Micaps第四类格点数据无损压缩算法 |
-
2019
- 2019-01-31 US US16/263,735 patent/US10630312B1/en active Active
-
2020
- 2020-01-03 TW TW109100211A patent/TWI764078B/zh active
- 2020-01-23 IL IL283617A patent/IL283617B2/en unknown
- 2020-01-23 WO PCT/EP2020/051658 patent/WO2020156926A1/en unknown
- 2020-01-23 MX MX2021009157A patent/MX2021009157A/es unknown
- 2020-01-23 BR BR112021015027-7A patent/BR112021015027A2/pt unknown
- 2020-01-23 CA CA3127849A patent/CA3127849A1/en active Pending
- 2020-01-23 AU AU2020213853A patent/AU2020213853B2/en active Active
- 2020-01-23 CN CN202080011700.4A patent/CN113383309A/zh active Pending
- 2020-01-23 KR KR1020217023382A patent/KR102598928B1/ko active IP Right Grant
- 2020-01-23 SG SG11202104106WA patent/SG11202104106WA/en unknown
- 2020-01-23 JP JP2021532806A patent/JP7442526B2/ja active Active
- 2020-01-23 EP EP20701986.0A patent/EP3918469A1/en active Pending
-
2021
- 2021-07-15 ZA ZA2021/04999A patent/ZA202104999B/en unknown
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20160003732A (ko) * | 2013-06-29 | 2016-01-11 | 인텔 코포레이션 | 압축 및 압축해제 연산들을 가속화하기 위한 장치 및 방법 |
Also Published As
Publication number | Publication date |
---|---|
JP2022518665A (ja) | 2022-03-16 |
SG11202104106WA (en) | 2021-05-28 |
AU2020213853B2 (en) | 2022-09-08 |
IL283617A (en) | 2021-07-29 |
IL283617B1 (en) | 2023-10-01 |
CA3127849A1 (en) | 2020-08-06 |
ZA202104999B (en) | 2022-08-31 |
CN113383309A (zh) | 2021-09-10 |
EP3918469A1 (en) | 2021-12-08 |
BR112021015027A2 (pt) | 2021-10-05 |
TWI764078B (zh) | 2022-05-11 |
IL283617B2 (en) | 2024-02-01 |
MX2021009157A (es) | 2022-03-17 |
WO2020156926A1 (en) | 2020-08-06 |
KR102598928B1 (ko) | 2023-11-03 |
US10630312B1 (en) | 2020-04-21 |
TW202034161A (zh) | 2020-09-16 |
JP7442526B2 (ja) | 2024-03-04 |
AU2020213853A1 (en) | 2021-06-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102598928B1 (ko) | 압축/압축해제 연산들을 수행하기 위한 범용 프로세서 명령 | |
AU2020214177B2 (en) | Compression/decompression instruction specifying a history buffer to be used in the compression/decompression of data | |
US10698854B1 (en) | Secure and efficient application data processing | |
KR102527963B1 (ko) | 범용 프로세서를 위한 정렬 및 병합 명령 | |
US10673460B1 (en) | Spilling temporary results for accommodation of memory boundaries | |
JP2022521132A (ja) | ベクトル文字列検索命令 | |
US11449367B2 (en) | Functional completion when retrying a non-interruptible instruction in a bi-modal execution environment | |
US11119928B2 (en) | Instant quiescing of an accelerator | |
WO2020169366A1 (en) | Load/store elements reversed instructions | |
US11487547B2 (en) | Extended asynchronous data mover functions compatibility indication | |
JP7430195B2 (ja) | 複数のマシン世代にわたる複合体の機能の互換性の維持 | |
WO2020169365A1 (en) | Load/store bytes reversed elements instructions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
E601 | Decision to refuse application | ||
AMND | Amendment | ||
X701 | Decision to grant (after re-examination) | ||
GRNT | Written decision to grant |