KR20180005663A - 가상 메모리 시스템에서 향상된 압축된 캐싱 - Google Patents

가상 메모리 시스템에서 향상된 압축된 캐싱 Download PDF

Info

Publication number
KR20180005663A
KR20180005663A KR1020177032271A KR20177032271A KR20180005663A KR 20180005663 A KR20180005663 A KR 20180005663A KR 1020177032271 A KR1020177032271 A KR 1020177032271A KR 20177032271 A KR20177032271 A KR 20177032271A KR 20180005663 A KR20180005663 A KR 20180005663A
Authority
KR
South Korea
Prior art keywords
input
look
word
input word
stream
Prior art date
Application number
KR1020177032271A
Other languages
English (en)
Inventor
아드리엔 밀너
아민 안사리
리차드 시니어
비토 레모 비카
Original Assignee
퀄컴 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20180005663A publication Critical patent/KR20180005663A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4043Adaptive prefix coding
    • H03M7/4062Coding table adaptation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4006Conversion to or from arithmetic code
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/42Conversion 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
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion 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/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/46Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind
    • H03M7/48Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind alternating with other codes during the code conversion process, e.g. run-length coding being performed only as long as sufficientlylong runs of digits of the same kind are present
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

데이터 압축 시스템, 방법 및 컴퓨터 프로그램 제품이 개시된다. 입력 스트림의 각각의 연속적인 입력 워드에 대해, 입력 워드가 룩백 테이블에 있는 엔트리에 일치하는지 여부가 결정된다. 룩백 테이블은 입력 워드에 응답하여 업데이트된다. 입력 워드는 룩백 테이블에 있는 엔트리와 완전 일치 또는 부분 일치 및 제로 런을 포함하는, 다수의 데이터 유형을 가질 수도 있다. 코드워드는 입력 워드에 대응하는 데이터 유형을 엔트로피 인코딩함으로써 생성된다. 룩백 테이블은 입력 스트림에서의 입력 워드의 위치에 의해 인덱싱될 수도 있다.

Description

가상 메모리 시스템에서 향상된 압축된 캐싱{IMPROVED COMPRESSED CACHING IN A VIRTUAL MEMORY SYSTEM}
관련 출원에 대한 상호 참조
2015 년 5 월 11 일자로 출원된 "IMPROVED COMPRESSED CACHING IN A VIRTUAL MEMORY SYSTEM"이라는 명칭의 미국 특허 가출원 제62/159,871호 및 2015 년 7 월 14 일자로 출원된 " IMPROVED COMPRESSED CACHING IN A VIRTUAL MEMORY SYSTEM" 이라는 명칭의 미국 특허 가출원 제62/192,136호에 대한 혜택이 이로써 청구되며, 이들의 명세서들은 이 참조에 의해 전부 본원에 원용된다.
데스크톱, 랩톱 또는 태블릿 컴퓨터, 스마트폰, 휴대용 정보 단말기 (PDA), 휴대용 게임 콘솔 등과 같은 컴퓨팅 디바이스는 중앙 처리 장치, 그래픽 처리 장치, 디지털 신호 프로세서 등과 같은 하나 이상의 프로세서, 및 하나 이상의 메모리를 포함한다. 컴퓨터 주변 디바이스들과 같은 다른 전자 디바이스들 그리고 컴퓨팅 디바이스들로 전통적으로 언급되지 않은 가전 디바이스들은 또한 하나 이상의 프로세서 및 메모리를 포함할 수도 있다.
휴대용 디바이스들과 같은 일부 유형의 디바이스들은 프로세서가 필요로 하는 양과 관련하여 물리적 시스템 메모리 (저장) 용량의 양이 제한될 수도 있다. 제한된 물리적 시스템 메모리의 문제를 해결하기 위해 일반적으로 가상 메모리 및 페이징으로 알려진 기술들을 사용할 수도 있다. 가상 메모리는 프로세서가 액세스할 수 있는 더 큰 "가상" 어드레스 공간을 동적 랜덤 액세스 메모리 ( "DRAM") 와 같은 시스템 메모리가 동작하는 더 작은 물리적 어드레스 공간으로 매핑하는 것을 나타낸다. 페이징은 전통적으로 시스템 메모리와 비휘발성 스토리지 또는 다른 2차적 스토리지, 이를테면 디스크 드라이브 또는 플래시 메모리 사이에 정보를 전송하는 기술을 나타냈다. 프로세서가 즉시 액세스할 필요가 없는 페이지들은 시스템 메모리로부터 2차적 스토리지로 축출 (evict) 된다. 제한된 양의 2차적 스토리지를 갖거나, 또는 2차적 스토리지에 대한 액세스가 증가된 레이턴시의 대가로 오는 휴대용 디바이스 또는 다른 디바이스들에서, 페이징은 축출된 페이지들을 2차적 스토리지에 저장하는 대신에 압축된 형태로 시스템 메모리에 저장하는 것을 포함하도록 진화했다. 이 기술은 압축된 캐싱 (compressed caching) 이라고 할 수도 있다.
LZ 및 WKDM 을 비롯한 여러 압축된 캐싱 방법들이 알려져 있다. WKDM 방법에서, 페이지에서의 연속적인 입력 워드들은, 접하게 되는 마지막 16 개의 고유한 입력 워드들의 룩백 테이블을 유지하고 각각의 입력 워드를 분류하는 태그 또는 코드워드를 생성함으로써 처리된다. 단지 4 개의 코드워드들이 있는데, 이들은 다음의 2 비트들로 표현될 수 있다: 입력 워드가 모두 제로임을 나타내는 제 1 코드워드 (예를 들어, "00"); 입력 워드가 룩백 테이블에 있는 16개의 엔트리들 중 하나와 완전히 일치함을 나타내는 제 2 코드워드 (예를 들어, "01"); 입력 워드가 부분적으로만 (즉, 최상위 비트들만이) 룩백 테이블에 있는 엔트리들 중 하나에 일치함을 나타내는 제 3 코드워드 (예컨대, "10"); 및 입력 워드가 룩백 테이블에 있는 엔트리들 중 어느 것과도 일치하지 않음을 나타내는 제 4 코드워드 (예를 들어, "11"). 압축된 출력은 코드워드들; 룩백 테이블에 있는 일치하는 엔트리들에 대한 완전한 워드 일치를 나타내는 그러한 코드워드들을 관련시키는 인덱스들의 테이블; 룩백 테이블에 있는 어느 엔트리와도 완전히 일치하지 않는 입력 워드들; 및 룩백 테이블에 있는 엔트리들에 부분적으로 일치하는 입력 워드들의 비일치하는 부분들 (즉, 최하위 비트들) 을 포함한다. 룩백 테이블에 효율적인 인덱싱을 제공하기 위해 입력 워드에 대해 해시 함수가 채용된다.
개시의 요약
데이터 스트림들을 압축 및 압축해제하기 위한 시스템, 방법 및 컴퓨터 프로그램이 개시된다.
입력 스트림을 압축하기 위한 예시적인 방법에서, 입력 스트림의 각각의 연속적인 입력 워드에 대해, 입력 워드가 룩백 테이블에 있는 엔트리에 일치하는지 여부가 결정된다. 룩백 테이블은 입력 워드에 응답하여 업데이트된다. 코드워드는 입력 워드에 대응하는 데이터 유형을 엔트로피 인코딩함으로써 생성된다. 입력 워드는 복수의 데이터 유형일 수도 있다. 데이터 유형은, 입력 워드와 룩백 테이블에 있는 엔트리 간의 완전 일치를 나타내는 제 1 데이터 유형, 및 입력 워드와 룩백 테이블에 있는 엔트리 간에 부분적 일치를 나타내는 제 2 데이터 유형을 적어도 포함한다. 코드워드를 포함하는 출력 스트림이 생성된다.
입력 스트림을 압축하기 위한 예시적인 시스템은 메모리 및 프로세서를 포함한다. 프로세서는 메모리로부터 연속적인 입력 워드들을 판독하도록 구성된다. 입력 스트림의 각각의 연속적인 입력 워드에 대해, 프로세서는 입력 워드가 룩백 테이블에 있는 엔트리에 일치하는지 여부를 결정한다. 프로세서는 입력 워드에 응답하여 룩백 테이블을 업데이트한다. 프로세서는 입력 워드에 대응하는 데이터 유형을 엔트로피 인코딩함으로써 코드워드를 생성된다. 입력 워드는 복수의 데이터 유형일 수도 있다. 데이터 유형은, 입력 워드와 룩백 테이블에 있는 엔트리 간의 일치를 나타내는 제 1 데이터 유형, 및 입력 워드와 룩백 테이블에 있는 엔트리 간에 부분적 일치를 나타내는 제 2 데이터 유형을 적어도 포함한다. 프로세서는 코드워드들을 포함하는 출력 스트림을 생성한다.
입력 스트림을 압축하기 위한 예시적인 컴퓨터 프로그램 제품은 비일시적 저장 매체에 수록된 컴퓨터 실행 가능 로직을 포함한다. 프로세서에 의한 로직의 실행은, 입력 스트림의 각각의 연속적인 입력 워드에 대해, 입력 워드가 룩백 테이블에 있는 엔트리에 일치하는지 여부를 결정하도록 프로세서를 구성한다. 프로세서는 입력 워드에 응답하여 룩백 테이블을 업데이트한다. 프로세서는 입력 워드에 대응하는 데이터 유형을 엔트로피 인코딩함으로써 코드워드를 생성된다. 입력 워드는 복수의 데이터 유형일 수도 있다. 데이터 유형은, 입력 워드와 룩백 테이블에 있는 엔트리 간의 완전 일치를 나타내는 제 1 데이터 유형, 및 입력 워드와 룩백 테이블에 있는 엔트리 간에 부분적 일치를 나타내는 제 2 데이터 유형을 적어도 포함한다. 프로세서는 코드워드들을 포함하는 출력 스트림을 생성한다.
도면들에서, 달리 지시되지 않으면 여러 도면들 전체에 걸쳐 같은 도면 부호들은 같은 부분들을 지칭한다. "102A" 또는 "102B" 와 같은 문자 표기를 갖는 참조부호들에 있어서, 그 문자 표기는 동일한 도면에 존재하는 2개의 같은 부분들 또는 엘리먼트들을 구별할 수도 있다. 참조부호들을 위한 문자 표기는, 참조부호가 모든 도면들에서 동일한 참조부호를 갖는 모든 부분들을 포괄하도록 의도될 경우에 생략될 수도 있다.
도 1은 데이터 압축 특징을 갖는 처리 시스템의 블록도이다.
도 2는 데이터를 압축하기 위한 예시적인 방법을 나타내는 흐름도이다.
도 3은 데이터를 압축하기 위한 예시적인 방법을 나타내는 또 다른 흐름도이다.
도 4는 해시 함수를 사용하여 룩백 테이블에 액세스하는 것을 나타내는 개념도이다.
도 5는 입력 스트림에서의 입력 워드 위치에 의한 룩백 테이블 엔트리들을 인덱싱하는 것을 나타내는 개념도이다.
도 6a는 제로 런 (zero run) 에 대한 코드워드를 포함하는 출력 스트림의 일부를 나타내는 데이터 구조도이다.
도 6b는 일치 없음 및 비일치하는 전체 입력 워드에 대한 코드워드를 포함하는 출력 스트림의 일부를 나타내는 데이터 구조도이다.
도 6c는 완전 일치를 위한 코드워드를 포함하는 출력 스트림의 부분 및 입력 스트림에서의 일치하는 워드의 위치를 나타내는 데이터 구조도이다.
도 6d는 부분적 일치를 위한 코드워드를 포함하는 출력 스트림의 부분, 입력 스트림에서의 부분적으로 일치하는 워드의 위치, 및 입력 워드의 비일치하는 부분을 나타내는 데이터 구조도이다.
도 7은 데이터 압축 특징들을 갖는 하나 이상의 처리 시스템들을 갖는 휴대용 컴퓨팅 디바이스의 블록도이다.
상세한 설명
"예시적" 이라는 용어는 "예, 실례, 또는 예시의 역할을 하는 것" 을 의미하는 것으로 여기에서 사용된다. "예시적" 으로서 여기에 설명된 임의의 양태는 반드시 다른 양태들보다 바람직하거나 또는 유리한 것으로 해석될 필요는 없다.
용어 "컴포넌트", "데이터베이스", "모듈", "시스템" 등은, 컴퓨터 관련 엔티티, 하드웨어, 펌웨어, 하드웨어와 소프트웨어의 조합, 소프트웨어, 또는 실행 소프트웨어 중 어느 쪽을 나타내는 것으로 의도된다. 예를 들면, 컴포넌트는 프로세서 상에서 실행되는 프로세스, 프로세서, 오브젝트, 실행 파일 (executable), 실행의 스레드, 프로그램 및/또는 컴퓨터일 수도 있지만 이들에 한정되지는 않는다. 예시로서, 컴퓨팅 디바이스 상에서 실행되는 애플리케이션 및 컴퓨팅 디바이스 양쪽 모두는 컴포넌트일 수도 있다. 하나 이상의 컴포넌트들은 프로세스 및/또는 실행의 스레드 내에 상주할 수도 있고 컴포넌트는 하나의 컴퓨터 상에 로컬화될 수도 있거나 및/또는 2개 이상의 컴퓨터들 사이에 분산될 수도 있다. 또한, 이들 컴포넌트들은, 저장된 다양한 데이터 구조들을 갖는 다양한 컴퓨터 판독가능 매체로부터 실행될 수도 있다. 컴포넌트들은, 로컬 및/또는 원격 프로세스들에 의해, 이를테면 하나 이상의 데이터 패킷들을 갖는 신호에 따라서 통신할 수도 있다 (예를 들면, 하나의 컴포넌트로부터 데이터는 로컬 시스템, 분산 시스템 및/또는 인터넷과 같은 네트워크에 걸쳐 다른 시스템들에 있는 다른 컴포넌트와 신호에 의해 상호작용한다).
용어 "애플리케이션" 또는 "이미지" 는 또한 오브젝트 코드, 스트립트, 바이트 코드, 마크업 랭귀지 파일 및 패치 등의 실행 가능한 콘텐트를 갖는 파일들을 포함할 수도 있다. 또한, 여기에서 언급되는 "애플리케이션" 은 또한, 열 필요가 있을 수도 있는 문서들 또는 액세스될 필요가 있는 다른 데이터 파일들과 같은, 사실상 실행가능하지 않은 파일들을 포함할 수도 있다.
용어 "콘텐츠" 는 또한 오브젝트 코드, 스트립트, 바이트 코드, 마크업 랭귀지 파일 및 패치 등의 실행 가능한 콘텐츠를 갖는 파일들을 포함할 수도 있다. 또한, 여기에서 언급되는 "콘텐츠" 는 또한 열 필요가 있을 수도 있는 문서들 또는 액세스될 필요가 있는 다른 데이터 파일들과 같은, 사실상 실행가능하지 않은 파일들을 포함할 수도 있다.
"작업"이라는 용어는 프로세스, 스레드 또는 디바이스에서의 임의의 다른 실행 단위를 포함할 수도 있다. "방법"과 "프로세스"라는 용어는 동의어로 사용될 수도 있다.
"가상 메모리"라는 용어는 메모리를 참조하는 애플리케이션 또는 이미지로부터 실제 물리적 메모리를 추상화하는 것을 나타낸다. 가상 메모리 어드레스를 물리적 메모리 어드레스로 변환하기 위해 트랜스레이션 (translation) 또는 매핑을 사용할 수도 있다. 매핑은 1 대 1처럼 단순하거나 (예 : 물리적 어드레스가 가상 어드레스와 같음), 중간 정도로 복잡하거나 (예 : 물리적 어드레스가 가상 어드레스로부터 일정한 오프셋과 같음), 또는 매핑이 복잡할 수도 있다 (예 : 모든 4KB 페이지가 고유하게 매핑됨). 매핑은 정적일 수도 있거나 (예를 들어, 시작시 한번 수행됨), 또는 맵핑은 동적일 수도 있다 (예를 들어, 메모리가 할당되고 해제됨에 따라 연속적으로 진전됨).
이 설명에서, 용어 "통신 디바이스", "무선 디바이스", "무선 전화기", "무선 통신 디바이스", 및 "무선 핸드셋" 은 상호교환가능하게 사용된다. 제 3 세대 (“3G”) 및 4 세대 (“4G”) 무선 기술의 도래에 따라, 더 큰 대역폭 이용가능성은 더 큰 다양성의 무선 능력들을 갖는 더 많은 휴대 컴퓨팅 디바이스들을 가능하게 했다. 그러므로, 휴대 컴퓨팅 디바이스는 셀룰러 전화기, 페이저, PDA, 스마트폰, 네비게이션 디바이스, 또는 무선 접속 또는 링크를 갖는 핸드핼드 컴퓨터를 포함할 수도 있다.
도 1에 나타낸 바와 같이, 예시적인 실시형태에서, 처리 시스템 (100) 은 프로세서 (102) 및 시스템 메모리 (104) 를 포함한다. 프로세서 (102) 및 시스템 메모리 (104) 는 버스와 같은 하나 이상의 상호접속들 (106) 을 통해 서로 그리고 다른 디바이스들 (도 1에 도시되지 않음) 과 신호를 통신할 수도 있다. 종래의 컴퓨팅 원리에 따라, 프로세서 (102) 는 다양한 기능들 또는 방법들을 수행하도록 프로세서 (102) 를 구성하는 운영 시스템 코드 및 애플리케이션 프로그램 코드 (명료성을 위해 도시되지 않음) 와 같은 프로그래밍 코드의 제어하에 동작한다. 이러한 방법들은 여기에 설명된 데이터 압축 방법들을 포함한다. 이러한 코드를 통해, 프로세서 (102) 는 여기에 기술된 데이터 압축 방법들에 관련된 데이터 압축 로직 (108) 으로 구성될 수도 있다. 데이터 압축 로직 (108) 은 입력 로직 (110), 엔트로피 인코딩 로직 (112), 런-길이 로직 (114), 룩백 테이블 로직 (116) 및 출력 로직 (118) 을 포함할 수도 있다. 로직 (108-118) 은 설명의 목적을 위해 시스템 메모리 (104) 에 저장되거나 또는 상주하는 것으로 개념적으로 나타내었지만, 로직 (108-118) 은 시스템 메모리 (104) 또는 다른 메모리 (도 1 에 나타내지 않음) 에 저장될 수도 있는 소프트웨어의 동작을 통해 일어난다는 것이 이해된다. 로직 (108-118) 으로 프로그래밍되거나 또는 구성되는 바와 같이, 프로세서 (102) 와 시스템 메모리 (104) 의 조합은 일반적으로, 여기에 설명된 데이터 압축 방법을 수행하도록 구성된 처리 시스템 (100) 을 정의한다. 명확성의 목적을 위해 도 1에는 도시되지 않았지만, 본 명세서에서 설명된 데이터 압축 방법을 수행하도록 구성되는 것이외에도, 처리 시스템 (100) 은 예를 들어, 운영 시스템 방법 및 애플리케이션 프로그램 방법들과 같은 종래의 방법들을 수행하도록 구성될 수도 있다. 또한, 로직 (108-118) 또는 관련 소프트웨어 요소 및 이들이 저장되거나 이들이 비일시적 형태로 상주하는 매체 (예를 들어, 시스템 메모리 (104)) 의 조합은 일반적으로 특허 어휘에서 "컴퓨터 프로그램 제품"으로 지칭되는 것을 정의한다는 것에 유의해야 한다. 또한, 로직 (108-118) 은 이하에서 설명되는 기능들을 수행하기 위한 수단을 정의한다.
후술하는 예시적인 데이터 압축 방법에 따라, 처리 시스템 (100) 은 입력 데이터 (120) 를 출력 데이터 (122) 로 압축한다. 당업자라면 이해하는 바와 같이, 입력 데이터 (120) 는 프로세서 (102) 가 직접 이용할 수도 있는 "비압축"또는 네이티브 형태로 존재하지만, 출력 데이터 (122) 는 프로세서 (102) 에 의해 직접 이용될 수 없지만, 입력 데이터 (120) 보다 시스템 메모리 (104) 에서 더 적은 저장 공간을 차지하는 압축된 형태로 존재한다. 예시적인 실시형태를 설명하기 위한 목적을 위해, 입력 데이터 (120) 및 출력 데이터 (122) 는 개념적으로 시스템 메모리 (104) 에 상주하거나 저장되는 것으로 도시되어 있지만, 다른 실시형태들에서는 이러한 입력 데이터 및 출력 데이터가 임의의 다른 적절한 저장 또는 통신 매체에 상주할 수도 있다는 것이 이해되야 한다. 예시적인 방법과 관련하여 후술되는 바와 같이, 입력 데이터 (120) 는 연속적인 입력 워드들의 스트림의 형태로 수신되고, 출력 데이터 (122) 는 연속적인 출력 워드들의 스트림의 형태로 생성된다.
예시적인 실시형태에서, 입력 데이터 (120) 는 압축된 캐싱 스킴에 따라 출력 데이터 (122) 로 압축될 수도 있다. 예를 들어, 캐싱 스킴이 프로세서 (102) 가 즉시 액세스할 필요가 없다고 결정하는 입력 데이터 (120) 의 하나 이상의 페이지들은 출력 데이터 (122) 로 압축될 수도 있고, 그러한 페이지들에 의해 이전에 점유된 시스템 메모리 (104) 내의 공간은 다른 용도로 이용가능해진다. 캐싱 스킴이 프로세서 (102) 가 이들 페이지 중 하나 이상을 다시 필요로 한다는 것을 나타낼 때, 압축된 페이지는 압축해제되고 시스템 메모리 (104) 에 비압축된 형태로 다시 저장될 수도 있다. "입력" 및 "출력"이라는 용어는 압축 방법을 나타내기 위해 명확성의 목적으로 본 명세서에서 사용되지만, 압축된 데이터가 대응하는 압축해제 방법에 대한 입력의 역할을 수도 있음을 이해해야 한다. 그러한 캐싱 스킴은 당해 기술 분야에서 잘 이해되어 있으므로, 여기에 설명된 실시형태들의 캐싱 양태들은 더 자세히 설명하지 않는다.
후술되는 바와 같이, 허프만 코딩과 같은 엔트로피 코딩이 채용된다. 엔트로피 코딩은 당업자라면 잘 이해할 수 있으므로 여기에서는 자세히 설명하지 않는다. 그러나, 입력 데이터를 압축하기 전에, 입력 데이터에서 발생할 가능성이 있는 상이한 데이터 유형의 상대적 발생 빈도가 결정될 수도 있다는 것을 인식해야한다. 예를 들어, 당업계에서 잘 이해되는 바와 같이, 통계적으로 유의한 데이터 샘플을 분석함으로써 히스토그램이 구성될 수도 있다. 다음으로, 코드워드 길이와 빈도가 반비례하는 방식으로 코드워드들이 데이터 유형에 할당될 수도 있다. 즉, 더 짧은 코드워드들은 더 높은 빈도 데이터 유형들에 할당되는 반면, 더 긴 코드워드들은 더 낮은 빈도 데이터 유형들에 할당된다. 예시적인 실시형태에서 인코딩된 데이터 유형들이 아래에서 설명된다.
아래에 기술된 시스템은 허프만 코딩 외에 다른 엔트로피 코딩 스킴들에도 적용될 수도 있다. 이 시스템은 임의의 유형의 사전 기반 코딩에 적용될 수도 있다. 이 시스템은 데이터 스트림에서 발견되는 패턴들을 사용하여 사전이 구축되는 임의의 유형의 사전 기반 코딩에 적용가능하다.
예를 들어, 시스템은 증분 인코딩과 같은 다른 사전 기반 코딩 스킴들에 적용가능할 수도 있다. 당업자에 의해 이해되는 바와 같이, 증분 인코딩 스킴들은 코딩 스킴에 대한 그의 사전을 구축하기 위해 그 코드워드들와 함께 접미사 또는 접두사를 사용할 수도 있다. 이러한 코딩 스킴은 또한 당업자가 이해하는 바와 같이 텍스트-기반 무손실 코딩 스킴으로 지칭될 수도 있다. 시스템에 의해 채용될 수도 있는 다른 사전-기반 코딩 스킴들은 WKDM 을 포함한다.
이 시스템은 또한, 데이터 스트림을 압축하기 위해 더 작은 세트의 압축 기술을 선택하기 전에 수십 개의 압축 기술들을 샘플링하는 최상의 성능 방법들에 의해 사용될 수도 있다. 이러한 무손실 압축 기술은 WinRAR 및 7-Zip과 같이 당 기술 분야에 알려져 있다. 이 시스템은 JPEG (Joint Photographic Experts Group)와 같은 손실성 이미지 압축 기술뿐만 아니라 휴대용 문서 형식 (PDF) 과 같은 Adobe(TM) 이미지들을 저장하는 데 사용되는 그러한 형식들과 같은 이미지 압축 도구들에 채용될 수도 있다. 이 시스템은 또한 PNG (Portable Network Graphics) 압축과 같은 무손실 이미지 압축 기술에 의해 채용될 수도 있다.
도 2의 흐름도에 의해 나타낸 바와 같이, 예시적인 실시형태에서 도 1과 관련하여 위에서 설명된 시스템은 입력 스트림을 압축할 수도 있다. 블록 202 에 의해 나타낸 바와 같이, 본 방법은 입력 스트림들로부터 판독되는 입력 워드로 시작한다. 입력 로직 (110) (도 1) 이 이 기능에 기여할 수도 있으며, 입력 버퍼 (미도시) 를 포함할 수도 있다. 블록 204 에 나타낸 바와 같이, 이 방법은 입력 워드가 제로의 값을 갖는지 여부, 즉 모든 비트들이 제로인지 여부를 결정한다. 예를 들어, 입력 워드는 당업자가 잘 이해할 수 있는 바와 같이, 예를 들어 16 비트, 32 비트 또는 임의의 다른 적합한 비트 수로 구성될 수도 있다. 입력 워드가 제로의 값을 갖는 것으로 결정되면, 블럭 (206) 에 나타낸 바와 같이, 유사하게 제로 값을 갖는 연속적인 입력 워드들의 수의 카운트 ("ZERO_COUNT") 가 증분된다. 그러나, 입력 워드가 제로의 값을 갖지 않는다고 결정되면, 블록 208 에 나타낸 바와 같이, ZERO_COUNT 가 제로보다 큰지 여부가 결정된다. 입력 워드가 제로의 값을 갖지 않지만 ZERO_COUNT가 제로보다 크다는 결정은 제로 런 (zero run) 이 발생했음을 표시한다. 즉, 2개 이상의 연속 입력 워드들이 제로의 값을 가진다. 제로 런이 발생했다고 결정되면, 블럭 210 에 나타낸 바와 같이, 입력 워드는 제로 런을 나타내기 위해 허프만 인코딩된다. 즉, 길이 ZERO_COUNT 의 제로 런의 데이터 유형에 대해 코드워드가 생성된다. 생성된 코드워드는 출력 스트림의 일부가 된다.
도 6a에 나타낸 바와 같이, 제로의 값을 갖는 2개 이상의 연속 입력 워드들의 데이터 유형에 대한 다수의 생성된 코드워드들 (606 내지 608) 중 하나를 포함하는 출력 스트림의 일부 (602) 가 생성될 수도 있다. 복수의 상이한 코드워드들 (604, 606, 608 등) 에 의해 도 6a에 나타낸 바와 같이, 각 런 길이 ("ZERO_COUNT") 가 고유하게 인코딩된다. 즉, N개의 상이한 길이의 제로 런들이 대응하는 수 N의 상이한 빈도들을 갖는 입력 스트림에서 발생할 수 있는 것으로 결정되는 실시형태에서, 코드워드들 (604-608) 은 수가 N일 수도 있다. 예를 들어, 코드워드 (604) 는 제로의 값을 갖는 단일 입력 워드의 데이터 유형에 대해 생성될 수도 있지만, 코드워드 (606) 는 제로의 값을 갖는 2 개의 연이은 또는 연속적인 입력 워드들의 데이터 유형에 대해 생성될 수도 있으며, 코드워드 (608) 는 제로의 값을 갖는 N개의 연이은 또는 연속적인 입력워드들의 데이터 유형에 대해 생성될 수도 있다. 제로의 값을 갖는 3개 그리고 N-1개의 연이은 또는 연속적인 입력 워드들 사이의 데이터 유형들에 대해 생성될 수도 있는 또 다른 코드워드들은 명확성의 목적을 위해 도 6a에 개별적으로 도시되지 않았지만, 코드워드들 (606 및 608) 사이의 생략 ( "..." ) 심볼들에 의해 표시된다.
잘 이해되는 허프만 코딩 원리들에 따르면, X 개의 연속적인 제로의 런은, (예를 들어, 히스토그램 방법 또는 당 기술분야에 알려진 다른 적합한 방법에 의해) X개 연속적인 제로들의 런이 Y개의 연속적인 제로들의 런보다 입력 데이터에서 더 빈번히 발생하기 쉬운 것으로 결정되면 Y개의 연이은 제로들의 런보다 더 짧은 코드워드에 의해 인코딩될 수도 있다.
이 방법은 블록 212 으로 계속된다. 블록 212 에 나타낸 바와 같이, 해시 함수가 입력 워드에 적용된다. 블록 208 과 관련하여 전술한 바와 같이 제로 런이 검출되면, 입력 워드는 제로 런의 최종 제로 값 입력 워드를 따르는 것임에 유의한다. 도 4에 나타낸 바와 같이, 해시 함수를 적용한 결과는 룩백 테이블 구조 (400) 에서 로케이션 ("LOCATION") 을 식별 또는 어드레싱하는데 사용된다. 룩백 테이블 구조 (400) 는 각 로케이션에서 값 ("VALUE") 및 위치 ("POSITION") 를 저장하도록 구성된다. 즉, 룩백 테이블 구조 (400) 에서의 각 로케이션은 값과 위치 모두를 참조한다. 후술되는 바와 같이, 그 위치는 룩백 테이블 구조 (400) 에서 대응하는 로케이션에 있는 값에 액세스하기 위해 사용될 수도 있다. 룩백 테이블 구조 (400) 는 예를 들어 2048 또는 2k와 같은 임의의 수의 로케이션들을 가질 수도 있다. 따라서, 이러한 룩백 테이블 구조 (400) 는 2048개의 값 및 2048개의 대응하는 위치들을 저장하도록 구성된다. 초기에, 즉 압축 (또는 압축해제) 방법을 시작할 시에, 룩백 테이블 구조 (400) 에 저장된 값 또는 다른 엔트리는 없다.
도 2를 다시 참조하면, 블록 214 에 나타낸 바와 같이, 입력 워드에 일치되는 룩백 테이블 구조 (400) 에서의 식별된 로케이션 (즉, 해시 함수에 의해 식별된 LOCATION) 에 저장된 값이 있는지 여부가 결정된다. 블럭 220 의 문맥에서 "일치" (match) 라는 용어는 2개 워드들에서의 모든 비트의 비트 단위 일치를 나타낸다. 이 유형의 일치는 또한, 완전 일치 (full match) 로 지칭될 수도 있다.
입력 워드와 룩백 테이블 구조 (400) 에서 식별된 로케이션에 저장된 값 사이에 완전 일치가 있다고 결정되면 (블록 214), 블록 216 에 나타낸 바처럼, 이 데이터 유형 (즉, 완전 일치) 에 대한 코드워드가 생성된다. 완전 매치인 입력 워드에 대한 코드워드를 생성하는 것과 연관하여, 입력 스트림에서의 입력 워드의 위치 ("POSITION") 의 표시가 생성된 출력에 포함된다. 따라서, 완전 일치하는 입력 워드의 데이터 유형에 대한 생성된 코드워드 (618) 그리고 입력 스트림 내의 입력 워드의 위치 (620) 의 표시를 포함하는 출력 스트림의 부분 (616) (도 6c) 이 생성될 수도 있다. 입력 스트림에서의 입력 워드의 위치 ("POSITION") 의 표시는 또한 룩백 테이블 구조 (400) 내에 식별된 로케이션에서 삽입된다. 블록 216 에 후속하여, 그 방법은 블록 202 으로 되돌아갈 수도 있고, 여기서 입력 스트림 내의 다음 입력 워드가 처리된다.
완전 일치가 없다고 결정되면 (블록 214), 부분 일치가 있는지 여부가 더 결정된다. 블록 218 에 나타낸 바와 같이, 해시 함수를 입력 워드의 수정된 버전에 적용함으로써 로케이션 ("LOCATION") 이 먼저 결정된다. 입력 워드의 수정된 버전은 부분 일치를 위해 테스트될 입력 워드의 비트들을 조작함으로써 생성될 수도 있다. 예를 들어, 각 입력 워드의 길이가 32 비트이고, 부분 일치가 입력 워드의 12 상위 또는 최상위 비트 ( "MSB") 와 룩백 테이블 구조 (400) 에서 식별된 로케이션에 저장된 값의 비트 단위 일치로서 정의되는 실시 형태에서, 수정된 워드 ("MODIFIED_WORD") 는, 입력 워드의 12 MSB들을 마스킹 오프 (masking off) 하고 20 비트만큼 시프팅 (shifting) 하여 12개의 관련 비트를 최하위 비트 ("LSB") 위치들에 놓음으로써 만들어질 수도 있다. 다음으로, 블록 220 에 나타낸 바처럼, 입력 스트림에서의 입력 워드의 위치 ("POSITION") 의 표시는 식별된 로케이션 (“LOCATION”) 에서 룩백 테이블 구조 (400) 에 삽입된다.
블록 222 에 나타낸 바와 같이, 입력 워드 일치의 인접하거나 연속한 비트들의 부분 또는 서브세트과 룩백 테이블 구조 (400) 에서 식별된 로케이션 ("LOCATION") 에 저장된 값의 대응하는 비트들을 비교함으로써 부분 일치가 있는지 여부를 결정한다. 입력 워드와 룩백 테이블 구조 (400) 에서 식별된 로케이션에 저장된 값 사이에 부분 일치가 있다고 결정되면 (블록 222), 블록 224 에 나타낸 바처럼, 이 데이터 유형 (즉, 부분 일치) 에 대한 코드워드가 생성된다. 부분 일치인 입력 워드에 대한 코드워드를 생성하는 것과 연관하여, 입력 스트림에서의 입력 워드의 위치 ( "POSITION") 의 표시가 생성된 출력에 포함된다. 입력 워드의 비일치하는 부분이 또한 생성된 출력에 포함된다. 따라서, 출력 스트림의 부분 (622) (도 6d) 이 생성될 수도 있으며, 이것은 부분적으로 일치하는 입력 워드의 데이터 유형에 대한 생성된 코드워드 (624); 입력 스트림내의 입력 워드의 위치 (626) 의 표시; 및 입력 워드의 비일치하는 부분 (628) 을 포함한다. 예를 들어, 입력 워드가 32 비트로 이루어지고 부분 일치가 12개 MSB의 일치로서 정의되는 실시형태에서, 입력 워드의 비일치하는 부분 (628) 은 20개의 최하위 비트 (LSB) 들로 이루어진다. 입력 스트림에서의 입력 워드의 위치 ("POSITION") 의 표시는 또한 룩백 테이블 구조 (400) 내에 식별된 로케이션에서 삽입된다. 블록 224 에 후속하여, 그 방법은 블록 202 으로 되돌아갈 수도 있고, 여기서 입력 스트림 내의 다음 입력 워드가 처리된다.
블록들 (214 및 222)에 따라, 입력 워드가 룩백 테이블 구조 (400) 내의 임의의 엔트리와 완전히 일치하지도 부분적으로 일치하지도 않는다고 결정되면, 블록 226 에 나타낸 바처럼, 수정된 워드 ("MODIFIED_WORD") 가 룩백 테이블 구조 (400) 에 추가된다 (즉, 룩백 테이블 구조 (400) 에 있는 식별된 로케이션에 저장된다). 블록 228 에 나타낸 바와 같이, 예시적인 실시형태에서 허프만 코딩 스킴에 따라 (즉, 완전 일치도 부분 일치도 아닌) 이 데이터 유형에 대해 코드워드가 생성된다. 완전 일치도 부분 일치도 아닌 입력 워드에 대한 코드워드를 생성하는 것과 연관하여, 전체 비일치하는 입력 워드 자체 (이것은 또한 "원시" (raw) 입력 워드로 지칭될 수도 있음) 가 생성된 출력에 포함된다. 따라서, 비일치하는 입력 워드의 데이터 유형에 대해 생성된 코드워드 (612) 그리고 입력 워드 (614) 의 사본 또는 인스턴스를 포함하는 출력 스트림의 부분 (610) (도 6b) 이 생성될 수도 있다. 블록 208 에 후속하여, 그 방법은 블록 202 으로 되돌아갈 수도 있고, 여기서 입력 스트림 내의 다음 입력 워드가 처리된다. 명확성의 목적을 위해 도 2에는 도시되지 않았지만, 입력 스트림 내의 모든 입력 워드들이 처리되었을 때 방법이 종료될 수도 있다. 입력 스트림은 입력 데이터 (120) (도 1) 의 하나 이상의 페이지들을 표현할 수도 있다.
도 5를 간단히 참조하면, 입력 스트림의 예시적인 부분 (502) 은 연속적인 입력 워드들 (16 진법 표기) (0101, 7D10, ADD1, 0101, 33A5 등) 을 갖는 것으로 도시되어 있다 (이들 입력 워드 값들은 중요하지 않다, 즉 임의적이며, 이 예에서는 오직 설명의 목적에 알맞다. 또한, 설명의 편의상 16 비트 워드들로 도시되어 있지만, 이들 입력 워드들은 32 비트일 수도 있다). 또한, 도 5 에는 룩백 테이블 구조 (400) (도 4) 와 관련하여 위에서 설명한 것과 동일한 구조를 갖는 예시적인 룩백 테이블 (500) 이 도시되어 있다.
따라서, 예를 들어, 예시적인 룩백 테이블 (500) 은 2048개의 값 및 2048개의 대응하는 위치들을 저장하도록 구성될 수도 있다. 이 예에서, 입력 워드 0101 은 입력 스트림에서 위치 0 에 위치된다. 따라서, 입력 워드 0101 가 완전 일치도 부분 일치도 아닌 것으로 결정되는 경우 (블록 214 및 222), 입력 워드 0101 및 그의 위치 0 이 위에 언급된 해시 함수를 입력 워드 0101 에 적용함으로써 결정된 예시적인 룩백 테이블 500 내의 로케이션에 저장된다. 이 예에서 마찬가지로, 입력 워드 7D10 가 완전 일치도 부분 일치도 아닌 것으로 결정되는 경우 (블록 214 및 222), 입력 워드 7D10 및 그의 위치 1 이 위에 언급된 해시 함수를 입력 워드 7D10 에 적용함으로써 결정된 예시적인 룩백 테이블 500 내의 로케이션에 저장된다.
이 예에서 유사하게, 입력 워드 ADD1 가 완전 일치도 부분 일치도 아닌 것으로 결정되는 경우 (블록 214 및 222), 입력 워드 ADD1 및 그의 위치 2 이 위에 언급된 해시 함수를 입력 워드 ADD1 에 적용함으로써 결정된 예시적인 룩백 테이블 500 내의 로케이션에 저장된다. 그러나, 이 예에서, 위치 3에서 입력 워드 0101 을 처리한 결과는 "3" 에 의해 인덱싱되는 예시적인 룩백 테이블 (500) 의 로케이션에 저장된 값과 완전 일치한다. 전술한 바와 같이, 룩백 테이블 구조 (400) 에 저장된 위치들은 룩백 테이블 구조 (400) 내의 대응하는 로케이션들에서의 값들을 인덱싱하거나 또는 액세스하는데 사용될 수도 있다. 이 예에서, 예시적인 룩백 테이블 (500) 내의 대응하는 로케이션에 저장된 값에 액세스하기 위해 입력 워드 0101 의 위치 "3" 을 사용하는 것은 그 로케이션에 저장된 값이 0101임을 드러낸다. 그 로케이션에 저장된 값 0101과 위치 3에서의 입력 워드 0101을 비교하는 것은 완전 일치를 드러낸다. 종래의 압축 기술에 비해, 본 발명의 방법 및 시스템은 해시 인덱스들을 룩백 위치들로 대체한다.
입력 워드의 위치 620 또는 626 (도 6c 및 도 6d) 의 표시는, 이것이 생성된 출력 스트림의 일부를 형성하고 룩백 테이블 구조 (400) 에 저장된 값을 인덱싱하거나 이를 포인팅하기 때문에 출력 인덱스로서 지칭될 수도 있음에 주목한다 출력 스트림 내의 출력 인덱스는 룩백 테이블 구조 (400) 가 저장하도록 구성된 위치에 대응한다. 룩백 테이블 구조 (400) 에 저장된 각각의 위치가 룩백 테이블 구조 (400) 에 저장된 값을 인덱싱하거나 또는 이에 대응하므로, 룩백 테이블 구조 (400) 에 저장된 대응하는 값에 액세스하기 위해 출력 인덱스가 사용될 수도 있다.
출력 인덱스는 관련 입력 워드의 입력 스트림에서 위치의 베이스-2 로그 (base-2 logarithm) 를 사용하여 출력 스트림에서 경제적으로 표현될 수도 있다. 그 방법은 각각의 입력 워드의 입력 스트림에서의 위치를, 그것이 처리됨에 따라, 추적하므로, 그 방법은 입력 스트림에서의 위치에 의해 표현되는 크기의 2 진수가 표현될 수 있는 최소 비트를 초과하여 출력 인덱스를 표현할 필요가 없다. 예를 들어, 3의 출력 인덱스는 출력 스트림에서 2 비트를 초과하여 표현될 필요가 없는데, 그 방법은 입력 스트림에서 위치 3을 넘는 입력 워드들을 처리할 때 그러한 출력 인덱스를 생성할 수 없기 때문이다. 3의 베이스-2 로그를 취하면 약 1.5가 되고, 그 결과에 천장 함수를 적용하면 2가 된다.
따라서, 3 미만의 입력 스트림 내의 임의의 위치는 2 비트 만큼 적게 표현될 수 있다고 결정될 수 있다. 마찬가지로, 예를 들어, 15의 출력 인덱스는 출력 스트림에서 4 비트를 초과하여 표현될 필요가 없는데, 그 방법은 입력 스트림에서 위치 15 를 넘는 입력 워드들을 처리할 때 그러한 출력 인덱스를 생성할 수 없기 때문이다. 15의 베이스-2 로그를 취하면 약 3.9 가 되고, 그 결과에 천장 함수를 적용하면 4가 된다. 따라서, 15 미만의 입력 스트림 내의 임의의 위치는 4 비트 만큼 적게 표현될 수 있다고 결정될 수 있다.
룩백 위치들로의 해시 인덱스 대체 기술은 데이터 압축 기술에서 사용되는 임의의 사전-기반 코딩에 의해 채용될 수도 있다. 예시적인 사전-기반 코딩 방법은, 몇 개만 들자면, WKDM, 증분 인코딩 및 Lempel-Ziv 기반 방법들, 이를테면 LZ78, LZW, LZ77, LZMS, LZO, LZS 및 LZRW 를 포함하지만 이들에 한정되지는 않는다. 룩백 위치들로의 해시 인덱스들의 대체는 또한, 프랙탈 압축과 같은 이미지들의 다른 압축 기술에서 유용할 수도 있다. 당업자가 이해하는 바와 같이, 프랙탈 압축 기술은 통상적으로 이미지를 여러 개의 서브 섹션들로 분할하고, 그 기술은 이미지의 제 1 서브 섹션들이 이미지의 제 2 및 제 3 서브 섹션들 등에 상당히 유사하게 보이면 서브 섹션들이 서로에 대해 복사될 수도 있는지 등을 결정한다.
해시 인덱스들을 룩백 위치들로 대체하면 프로세서에 의한 액세스를 필요로 하는 다수의 데이터 구조들을 없앨 수 있기 때문에, 이것은 데이터 스트림을 압축해제하기 위해 액세스/검토할 데이터 구조들이 적어지므로, 데이터스트림을 압축해제할 수 있는 속도를 증가시킬 수 있다. 본 발명의 방법 및 시스템의 또 다른 이점은, (해시 인덱스들 대신) 룩백 위치들의 사전이 해시 인덱스만을 저장할 수도 있는 사전들에 비해 크기면에서 무한히 클 수도 있다는 것이다. 해시 색인들 대신 룩백 위치들의 사전의 또 다른 이점은 해시들이 더 이상 사전에 채용되지 않으므로 해시 충돌을 줄이거나 또는 없앨 수도 있다는 것이다.
본 발명의 방법 및 시스템에 있어서, 룩백 위치를 포함하는 각각의 룩백 테이블 엔트리는 데이터 스트림의 길이의 함수인 크기를 가질 수도 있다. 예를 들어, 데이터 스트림의 제 1 워드에 대해, 이 단일 워드에 대한 룩백 엔트리는 제로의 값 (크기가 단일 비트) 을 갖는 포인터를 포함할 수도 있다. 데이터스트림의 제 2 워드에 대해, 룩백 위치 엔트리 (또는 포인터) 길이는 1의 값 (크기가 단일 비트) 을 포함할 수도 있다. 4 킬로바이트 길이 데이터 스트림에 대해, 마지막 워드에 대한 룩백 엔트리 (포인터 길이) 는 12 비트의 값을 갖는 포인터 길이를 포함할 수도 있다. 따라서, 본 발명의 방법 및 시스템의 포인터 길이는 점차 증가하며 데이터 스트림은 (해시 인덱스 대신에) 룩백 위치들을 사용하여 인코딩된다.
도 3에 나타낸 바와 같이, 전술한 방법은 또한 다음의 보다 상위 레벨 방식으로 특성화될 수도 있다. 블록 302 에 나타낸 바와 같이, 입력 스트림 내의 연속적인 입력 워드들에 대해, 입력 워드가 룩백 테이블 엔트리에 완전히 또는 부분적으로 일치하는지 여부가 결정된다. 블록 304 에 나타낸 바와 같이, 룩백 테이블은 입력 워드에 응답하여 업데이트된다. 블록 306 에 나타낸 바와 같이, 엔트로피 인코딩을 사용하여, 입력 워드가 어떤 데이터 유형으로 결정되든지 코드워드가 생성된다. 예시적인 실시형태에서 엔트로피 코딩 스킴은 허프만 코딩이지만, 다른 실시형태들에서 그러한 엔트로피 코딩 스킴은 임의의 다른 유형일 수도 있다. 2개 이상의 데이터 유형들이 있을 수도 있으며, 그 중 적어도 하나는 입력 워드와 룩백 테이블 엔트리 간의 완전 일치를 나타내고 그 중 다른 하나는 입력 워드와 룩백 테이블 엔트리 간의 부분 일치를 나타낸다. 도 2 와 관련하여 전술한 예시적인 실시 형태에서, 4 개의 1차 데이터 유형들, 즉 제로 런 (및 이 데이터 유형의 서브 타입은 상이한 길이의 제로 런을 나타낼 수도 있다); 완전 일치; 부분 일치; 및 일치 없음이 있다. 블록 308 에 나타낸 바와 같이, 출력 스트림이 생성된다. 출력 스트림의 각각의 연속적인 부분은 입력 스트림 내의 연속적인 입력 워드들 중 하나에 대응하는 코드워드를 포함하고 또한, 도 6a 내지 도 6d 에 대해 위에서 설명된 바와 같이, 출력 인덱스, 전체 워드 또는 워드의 일부와 같은 추가 정보를 포함할 수도 있다.
예시적인 압축 방법의 전술한 설명을 고려하여, 당업자는 대응하는 압축해제 방법을 용이하게 이해할 것이다. 압축된 데이터의 각각의 연속적인 부분은 입력 스트림에서 연속적인 입력 워드들 중 하나에 대응하는 코드워드를 포함하고, 또한 그 코드워드와 연관하여, 출력 인덱스, 전체 워드 또는 워드의 부분을 포함할 수도 있다. 제로 런에 대한 코드워드의 검출에 응답하여, 압축해제 방법은 코드워드에 의해 표시된 연속 번호의 제로 값 워드들을 압축해제된 데이터로서 출력한다. 일치 없음에 대한 코드워드의 검출에 응답하여, 압축해제 방법은 그 코드워드와 연관하여 압축된 데이터에 존재하는 워드를 압축해제된 데이터로서 출력한다. 완전 일치에 대한 코드워드의 검출에 응답하여, 압축해제 방법은 그 코드워드와 연관하여 압축된 데이터에 존재하는 출력 인덱스를 사용하여 룩백 테이블 엔트리를 취출하고, 다음으로 이것을 압축해제 방법이 압축해제된 데이터로서 출력한다. 부분 일치에 대한 코드워드의 검출에 응답하여, 압축해제 방법은 그 코드워드와 연관하여 압축된 데이터에 존재하는 출력 인덱스를 사용하여 룩백 테이블 엔트리를 취출하고, 다음으로 이것을 압축해제 방법이 그 코드워드와 연관하여 압축된 데이터에 존재하는 부분 워드와 함께 출력한다. 예를 들어, 입력 워드가 32 비트로 이루어지는 실시 형태에서, 압축해제 방법은 룩백 테이블 엔트리로부터 취출된 10 LSB 내지 22 MSB를 표현하는 부분 워드를 첨부하여 압축해제된 출력을 형성할 수도 있다.
처리 시스템 (100) (도 1) 은 예를 들어 도 7에 나타낸 휴대용 통신 디바이스 (700) 와 같은 임의의 적합한 유형의 디바이스를 나타내거나 또는 이에 포함될 수도 있다. 휴대용 통신 디바이스 (700) 는 중앙 처리 장치 ("CPU") (704)를 포함하는 온칩 시스템 (702) 을 포함한다. 아날로그 신호 프로세서 (706) 는 CPU (704) 에 연결된다. CPU (704) 는 위에서 설명된 압축 및 캐싱 방법들에 관하여 전술한 방식으로 동작하도록 구성될 수도 있다. 디스플레이 제어기 (708) 및 터치스크린 제어기 (710) 가 CPU (704) 에 연결된다. 온칩 시스템 (702) 에 대해 외부의 터치스크린 디스플레이 (712) 가 디스플레이 제어기 (708) 및 터치스크린 제어기 (710) 에 연결된다. 비디오 인코더 (714), 예를 들면, "PAL" (phase-alternating line) 인코더, "SECAM" (sequential couleur avec memoire) 인코더, "NTSC" (national television system(s) committee) 인코더 또는 임의의 다른 비디오 인코더가 CPU (704) 에 연결된다. 또한, 비디오 증폭기 (716) 는 비디오 인코더 (714) 및 터치스크린 디스플레이 (712) 에 연결된다. 비디오 포트 (718) 는 비디오 증폭기 (716) 에 연결된다. USB 제어기 (720) 는 CPU (704) 에 연결된다. USB 포트 (722) 는 USB 제어기 (720) 에 연결된다. 메모리 (104) (도 1) 에 관하여 전술한 방식으로 동작할 수도 있는 메모리 (724) 는 CPU (704) 에 연결된다. 가입자 식별 모듈 ("SIM") 카드 (726) 및 디지털 카메라 (728) 는 또한 CPU (704) 에 연결될 수도 있다. 예시적인 양태에서, 디지털 카메라 (728) 는 "CCD" (charge-coupled device) 카메라 또는 "CMOS" (complementary metal-oxide semiconductor) 카메라이다.
스테레오 오디오 CODEC (730) 은 아날로그 신호 프로세서 (706) 에 연결될 수도 있다. 또한, 오디오 증폭기 (732) 는 스테레오 오디오 CODEC (730) 에 연결될 수도 있다. 예시적인 양태에서, 제 1 스테레오 스피커 (734) 및 제 2 스테레오 스피커 (736) 는 오디오 증폭기 (732) 에 연결된다. 추가적으로, 마이크로폰 증폭기 (738) 가 스테레오 오디오 CODEC (730) 에 연결될 수도 있다. 마이크로폰 (740) 은 마이크로폰 증폭기 (738) 에 연결될 수도 있다. 특정 양태에서, 주파수 변조 ("FM") 라디오 튜너 (742) 가 스테레오 오디오 코덱 (730) 에 연결될 수도 있다. 또한, FM 안테나 (744) 는 FM 라디오 튜너 (742) 에 연결된다. 또한, 스테레오 헤드폰 (746) 은 스테레오 오디오 CODEC (730) 에 연결될 수도 있다.
무선 주파수 (“RF”) 트랜시버 (748) 는 아날로그 신호 프로세서 (706) 에 연결될 수도 있다. RF 스위치 (750) 는 RF 트랜시버 (748) 와 RF 안테나 (752) 사이에 연결될 수도 있다. RF 트랜시버 (748) 는 위성 위치확인 시스템 ("GPS") 위성뿐만 아니라 이동 전화 네트워크와 같은 종래의 지상 통신 네트워크와 통신하도록 구성될 수도 있다.
마이크로폰 (756) 을 지닌 모노 헤드셋이 아날로그 신호 프로세서 (706) 에 연결될 수도 있다. 또한, 바이브레이터 디바이스 (758) 가 아날로그 신호 프로세서 (706) 에 연결될 수도 있다. 전력 공급부 (760) 는 온칩 시스템 (702) 에 연결될 수도 있다. 특정 양태에서, 전력 공급부 (760) 는, 전력을 필요로 하는 휴대용 통신 디바이스 (700) 의 다양한 컴포넌트들에 전력을 제공하는 DC (직류) 전력 공급부이다. 또한, 특정 양태에서, 전력 공급부는, AC (alternating current) 전원에 접속된 AC - DC 변환기로부터 도출되는 DC 전력 공급부 또는 재충전가능한 DC 배터리이다.
키패드 (754) 는 아날로그 신호 프로세서 (706) 에 연결될 수도 있다. 터치스크린 디스플레이 (712), 비디오 포트 (718), USB 포트 (822), 카메라 (728), 제 1 스테레오 스피커 (734), 제 2 스테레오 스피커 (736), 마이크로폰 (740), FM 안테나 (744), 스테레오 헤드폰 (746), RF 스위치 (750), RF 안테나 (752), 키패드 (754), 모노 헤드셋 (756), 바이브레이터 (758), 및 전력 공급부 (760) 가 온칩 시스템 (702) 에 대해 외부에 있다.
(도 2 및 도 3과 관련하여 전술한 바와 같은) 여기에 기술된 방법 단계들은 컴퓨터 프로그램 명령들의 형태로 메모리 (724) 에 저장될 수도 있다. 여기에 기재된 방법들을 수행하기 위하여 이들 명령들은 CPU (704) 또는 다른 프로세서에 의해 실행될 수도 있다.
본 발명의 사상 및 범위로부터 벗어남이 없이 대안의 실시형태들이 본 발명이 속하는 당업계의 당업자에게 분명해질 것이다. 선택된 양태들이 예시되고 자세히 설명되었지만, 거기에서 다양한 치환 및 변경들이 다음의 청구항들에 의해 정의된 본 발명의 사상 및 범위로부터 이탈함이 없이 이루어질 수 있다는 것이 이해될 것이다.

Claims (30)

  1. 복수의 입력 워드들의 입력 스트림을 압축하는 방법으로서,
    상기 입력 스트림의 각각의 연속적인 입력 워드에 대해, 상기 입력 워드가 룩백 테이블에 있는 엔트리에 일치하는지 여부를 결정하는 단계로서, 상기 룩백 테이블은 복수의 엔트리들을 저장하는, 상기 엔트리에 일치하는지 여부를 결정하는 단계;
    상기 입력 워드에 응답하여 상기 룩백 테이블을 업데이트하는 단계;
    상기 입력 워드에 대응하는 데이터 유형을 엔트로피 인코딩하여 코드워드를 생성하는 단계로서, 각각의 입력 워드는 복수의 데이터 유형들 중 하나이고, 상기 복수의 데이터 유형들은 상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이의 완전 일치를 나타내는 제 1 데이터 유형 및 상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이의 부분 일치를 나타내는 제 2 데이터 유형을 적어도 포함하는, 상기 코드워드를 생성하는 단계; 및
    출력 스트림을 생성하는 단계를 포함하고,
    상기 출력 스트림은 상기 입력 스트림의 상기 입력 워드들에 대응하여 순서화된 코드워드들을 포함하는, 복수의 입력 워드들의 입력 스트림을 압축하는 방법.
  2. 제 1 항에 있어서,
    상기 복수의 데이터 유형들은 복수의 제 3 데이터 유형들을 포함하고, 각각의 제 3 데이터 유형은 고유한 개수의 제로들의 런 길이를 나타내고, 복수의 런 길이들의 각각은 상이한 코드워드로서 인코딩되는, 복수의 입력 워드들의 입력 스트림을 압축하는 방법.
  3. 제 1 항에 있어서,
    상기 복수의 데이터 유형들은 상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이에서 완전 일치도 부분 일치도 나타내지 않는 제 4 데이터 유형을 포함하는, 복수의 입력 워드들의 입력 스트림을 압축하는 방법.
  4. 제 1 항에 있어서,
    상기 룩백 테이블에서의 업데이트는 상기 룩백 테이블에 상기 입력 워드에 대한 테이블 인덱스를 저장하는 단계를 포함하고, 상기 테이블 인덱스는 상기 입력 스트림에서의 상기 입력 워드의 위치를 표현하고; 그리고
    출력 스트림을 생성하는 단계는, 상기 제 1 데이터 유형의 입력 워드에 대해 생성된 각각의 코드워드와 연관된 출력 인덱스를 생성하는 단계를 포함하며, 상기 출력 인덱스는 상기 입력 스트림에서 완전히 일치되는 입력 워드의 위치를 표현하는, 복수의 입력 워드들의 입력 스트림을 압축하는 방법.
  5. 제 4 항에 있어서,
    상기 출력 인덱스는 상기 입력 스트림에서의 상기 입력 워드의 위치의 베이스-2 로그에 응답하여 결정된 비트들의 수에 의해 압축된 출력에서 표현되는, 복수의 입력 워드들의 입력 스트림을 압축하는 방법.
  6. 제 1 항에 있어서,
    상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이의 부분 일치는 상기 입력 워드의 연이은 비트들의 서브세트 및 상기 룩백 테이블에 있는 상기 엔트리의 연이은 비트들의 대응하여 위치된 서브세트의 비트 단위 일치를 포함하는, 복수의 입력 워드들의 입력 스트림을 압축하는 방법.
  7. 제 1 항에 있어서,
    상기 룩백 테이블을 업데이트하는 단계는 상기 룩백 테이블에 상기 입력 워드에 대한 테이블 인덱스를 저장하는 단계를 포함하고, 상기 테이블 인덱스는 상기 입력 스트림에서의 상기 입력 워드의 위치를 표현하고; 그리고
    출력 스트림을 생성하는 단계는 상기 제 2 데이터 유형의 입력 워드에 대해 생성된 각각의 코드워드와 연관하여 비일치하는 워드 부분을 생성하는 단계 및 상기 제 2 데이터 유형의 입력 워드에 대해 생성된 각각의 코드워드와 연관하여 출력 인덱스를 생성하는 단계를 포함하고, 상기 출력 인덱스는 상기 입력 스트림에서 부분적으로 일치하는 입력 워드의 위치를 표현하는, 복수의 입력 워드들의 입력 스트림을 압축하는 방법.
  8. 제 7 항에 있어서,
    상기 출력 인덱스는 상기 입력 스트림에서의 상기 입력 워드의 위치의 베이스-2 로그에 응답하여 결정된 비트들의 수에 의해 압축된 출력에서 표현되는, 복수의 입력 워드들의 입력 스트림을 압축하는 방법.
  9. 제 1 항에 있어서,
    입력 워드와 상기 룩백 테이블에 있는 엔트리 사이의 완전 일치는 상기 입력 워드의 모든 비트들 및 상기 룩백 테이블에 있는 상기 엔트리의 모든 비트들의 비트 단위 일치를 포함하는, 복수의 입력 워드들의 입력 스트림을 압축하는 방법.
  10. 제 1 항에 있어서,
    상기 룩백 테이블을 업데이트하는 단계는 상기 룩백 테이블에 상기 입력 워드에 대한 테이블 인덱스를 저장하는 단계를 포함하고, 상기 테이블 인덱스는 상기 입력 스트림에서의 상기 입력 워드의 위치를 표현하고;
    상기 복수의 데이터 유형들은 상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이에서 완전 일치도 부분 일치도 나타내지 않는 제 4 데이터 유형을 포함하고; 그리고
    출력 스트림을 생성하는 단계는 상기 제 4 데이터 유형의 입력 워드에 대해 생성된 각각의 코드워드와 연관하여 비일치하는 전체 워드를 생성하는 단계를 포함하는, 복수의 입력 워드들의 입력 스트림을 압축하는 방법.
  11. 복수의 입력 워드들의 입력 스트림을 압축하기 위한 시스템으로서,
    메모리; 및
    프로세서를 포함하고,
    상기 프로세서는
    상기 메모리로부터 상기 입력 스트림의 연속적인 입력 워드들을 판독하는 단계 및, 각각의 연속적인 입력 워드에 대해,
    상기 입력 워드가 룩백 테이블에 있는 엔트리에 일치하는지 여부를 결정하는 단계로서, 상기 룩백 테이블은 복수의 엔트리들을 저장하는, 상기 엔트리에 일치하는지 여부를 결정하는 단계;
    상기 입력 워드에 응답하여 상기 룩백 테이블을 업데이트하는 단계;
    상기 입력 워드에 대응하는 데이터 유형을 엔트로피 인코딩하여 코드워드를 생성하는 단계로서, 각각의 입력 워드는 복수의 데이터 유형들 중 하나이고, 상기 복수의 데이터 유형들은 상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이의 완전 일치를 나타내는 제 1 데이터 유형 및 상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이의 부분 일치를 나타내는 제 2 데이터 유형을 적어도 포함하는, 상기 코드워드를 생성하는 단계; 및
    출력 스트림을 생성하는 단계로서, 상기 출력 스트림은 상기 입력 스트림의 상기 입력 워드들에 대응하여 순서화된 코드워드들을 포함하는, 상기 출력 스트림을 생성하는 단계를 포함하는 방법을 수행하도록 구성된, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 시스템.
  12. 제 11 항에 있어서,
    상기 복수의 데이터 유형들은 복수의 제 3 데이터 유형들을 포함하고, 각각의 제 3 데이터 유형은 고유한 개수의 제로들의 런 길이를 나타내고, 복수의 런 길이들의 각각은 상이한 코드워드로서 인코딩되는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 시스템.
  13. 제 11 항에 있어서,
    상기 복수의 데이터 유형들은 상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이에서 완전 일치도 부분 일치도 나타내지 않는 제 4 데이터 유형을 포함하는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 시스템.
  14. 제 11 항에 있어서,
    상기 룩백 테이블을 업데이트하는 단계는 상기 룩백 테이블에 상기 입력 워드에 대한 테이블 인덱스를 저장하는 단계를 포함하고, 상기 테이블 인덱스는 상기 입력 스트림에서의 상기 입력 워드의 위치를 표현하고; 그리고
    출력 스트림을 생성하는 단계는, 상기 제 1 데이터 유형의 입력 워드에 대해 생성된 각각의 코드워드와 연관된 출력 인덱스를 생성하는 단계를 포함하며, 상기 출력 인덱스는 상기 입력 스트림에서 완전히 일치되는 입력 워드의 위치를 표현하는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 시스템.
  15. 제 14 항에 있어서,
    상기 출력 인덱스는 상기 입력 스트림에서의 상기 입력 워드의 위치의 베이스-2 로그에 응답하여 결정된 비트들의 수에 의해 압축된 출력에서 표현되는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 시스템.
  16. 제 11 항에 있어서,
    상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이의 부분 일치는 상기 입력 워드의 연이은 비트들의 서브세트 및 상기 룩백 테이블에 있는 상기 엔트리의 연이은 비트들의 대응하여 위치된 서브세트의 비트 단위 일치를 포함하는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 시스템.
  17. 제 11 항에 있어서,
    상기 룩백 테이블을 업데이트하는 단계는 상기 룩백 테이블에 상기 입력 워드에 대한 테이블 인덱스를 저장하는 단계를 포함하고, 상기 테이블 인덱스는 상기 입력 스트림에서의 상기 입력 워드의 위치를 표현하고; 그리고
    출력 스트림을 생성하는 단계는 상기 제 2 데이터 유형의 입력 워드에 대해 생성된 각각의 코드워드와 연관하여 비일치하는 워드 부분을 생성하는 단계 및 상기 제 2 데이터 유형의 입력 워드에 대해 생성된 각각의 코드워드와 연관하여 출력 인덱스를 생성하는 단계를 포함하고, 상기 출력 인덱스는 상기 입력 스트림에서 부분적으로 일치하는 입력 워드의 위치를 표현하는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 시스템.
  18. 제 17 항에 있어서,
    상기 출력 인덱스는 상기 입력 스트림에서의 상기 입력 워드의 위치의 베이스-2 로그에 응답하여 결정된 비트들의 수에 의해 압축된 출력에서 표현되는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 시스템.
  19. 제 11 항에 있어서,
    입력 워드와 상기 룩백 테이블에 있는 엔트리 사이의 완전 일치는 상기 입력 워드의 모든 비트들 및 상기 룩백 테이블에 있는 상기 엔트리의 모든 비트들의 비트 단위 일치를 포함하는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 시스템.
  20. 제 11 항에 있어서,
    상기 룩백 테이블을 업데이트하는 단계는 상기 룩백 테이블에 상기 입력 워드에 대한 테이블 인덱스를 저장하는 단계를 포함하고, 상기 테이블 인덱스는 상기 입력 스트림에서의 상기 입력 워드의 위치를 표현하고;
    상기 복수의 데이터 유형들은 상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이에서 완전 일치도 부분 일치도 나타내지 않는 제 4 데이터 유형을 포함하고; 그리고
    출력 스트림을 생성하는 단계는 상기 데이터 유형의 입력 워드에 대해 생성된 각각의 코드워드와 연관하여 비일치하는 전체 워드를 생성하는 단계를 포함하는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 시스템.
  21. 복수의 입력 워드들의 입력 스트림을 압축하기 위한 컴퓨터 프로그램 제품으로서, 상기 컴퓨터 프로그램 제품은 컴퓨터 실행 가능 로직을 저장한 비일시적 컴퓨터 판독 가능 매체를 포함하며, 상기 컴퓨터 실행 가능 로직은
    상기 입력 스트림의 각각의 연속적인 입력 워드에 대해, 상기 입력 워드가 룩백 테이블에 있는 엔트리에 일치하는지 여부를 결정하도록 구성된 입력 로직으로서, 상기 룩백 테이블은 복수의 엔트리들을 저장하는, 상기 입력 로직;
    상기 입력 워드에 응답하여 상기 룩백 테이블을 업데이트하도록 구성된 룩백 테이블 로직;
    상기 입력 워드에 대응하는 데이터 유형을 엔트로피 인코딩하여 코드워드를 생성하도록 구성된 엔트로피 인코딩 로직으로서, 각각의 입력 워드는 복수의 데이터 유형들 중 하나이고, 상기 복수의 데이터 유형들은 상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이의 완전 일치를 나타내는 제 1 데이터 유형 및 상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이의 부분 일치를 나타내는 제 2 데이터 유형을 적어도 포함하는, 상기 엔트로피 인코딩 로직; 및
    출력 스트림을 생성하도록 구성된 출력 로직으로서, 상기 출력 스트림은 상기 입력 스트림의 상기 입력 워드들에 대응하여 순서화된 코드워드들을 포함하는, 상기 출력 로직
    을 포함하는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 컴퓨터 프로그램 제품.
  22. 제 21 항에 있어서,
    상기 복수의 데이터 유형들은 복수의 제 3 데이터 유형들을 포함하고, 각각의 제 3 데이터 유형은 고유한 개수의 제로들의 런 길이를 나타내고, 복수의 런 길이들의 각각은 상이한 코드워드로서 인코딩되는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 컴퓨터 프로그램 제품.
  23. 제 21 항에 있어서,
    상기 룩백 테이블 로직은 상기 룩백 테이블에 상기 입력 워드에 대한 테이블 인덱스를 저장하도록 구성되고, 상기 테이블 인덱스는 상기 입력 스트림에서의 상기 입력 워드의 위치를 표현하고; 그리고
    상기 출력 로직은, 상기 제 1 데이터 유형의 입력 워드에 대해 생성된 각각의 코드워드와 연관된 출력 인덱스를 생성하도록 구성되고, 상기 출력 인덱스는 상기 입력 스트림에서 완전히 일치되는 입력 워드의 위치를 표현하는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 컴퓨터 프로그램 제품.
  24. 제 23 항에 있어서,
    상기 출력 인덱스는 상기 입력 스트림에서의 상기 입력 워드의 위치의 베이스-2 로그에 응답하여 결정된 비트들의 수에 의해 압축된 출력에서 표현되는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 컴퓨터 프로그램 제품.
  25. 제 21 항에 있어서,
    상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이의 부분 일치는 상기 입력 워드의 연이은 비트들의 서브세트 및 상기 룩백 테이블에 있는 상기 엔트리의 연이은 비트들의 대응하여 위치된 서브세트의 비트 단위 일치를 포함하는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 컴퓨터 프로그램 제품.
  26. 제 21 항에 있어서,
    상기 룩백 테이블을 업데이트하는 것은 상기 룩백 테이블에 상기 입력 워드에 대한 테이블 인덱스를 저장하는 것을 포함하고, 상기 테이블 인덱스는 상기 입력 스트림에서의 상기 입력 워드의 위치를 표현하고; 그리고
    상기 출력 로직은 상기 제 2 데이터 유형의 입력 워드에 대해 생성된 각각의 코드워드와 연관하여 비일치하는 워드 부분을 생성하고 상기 제 2 데이터 유형의 입력 워드에 대해 생성된 각각의 코드워드와 연관하여 출력 인덱스를 생성하도록 구성되고, 상기 출력 인덱스는 상기 입력 스트림에서 부분적으로 일치하는 입력 워드의 위치를 표현하는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 컴퓨터 프로그램 제품.
  27. 제 26 항에 있어서,
    상기 출력 인덱스는 상기 입력 스트림에서의 상기 입력 워드의 위치의 베이스-2 로그에 응답하여 결정된 비트들의 수에 의해 압축된 출력에서 표현되는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 컴퓨터 프로그램 제품.
  28. 제 21 항에 있어서,
    상기 룩백 테이블 로직은 상기 룩백 테이블에 상기 입력 워드에 대한 테이블 인덱스를 저장하도록 구성되고, 상기 테이블 인덱스는 상기 입력 스트림에서의 상기 입력 워드의 위치를 표현하고; 그리고
    상기 복수의 데이터 유형들은 상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이에서 완전 일치도 부분 일치도 나타내지 않는 제 4 데이터 유형을 포함하고; 그리고
    출력 스트림을 생성하는 것은 상기 제 4 데이터 유형의 입력 워드에 대해 생성된 각각의 코드워드와 연관하여 비일치하는 전체 워드를 생성하는 것을 포함하는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 컴퓨터 프로그램 제품.
  29. 복수의 입력 워드들의 입력 스트림을 압축하기 위한 시스템으로서,
    상기 입력 스트림의 각각의 연속적인 입력 워드에 대해, 상기 입력 워드가 룩백 테이블에 있는 엔트리에 일치하는지 여부를 결정하는 수단으로서, 상기 룩백 테이블은 복수의 엔트리들을 저장하는, 상기 엔트리에 일치하는지 여부를 결정하는 수단;
    상기 입력 워드에 응답하여 상기 룩백 테이블을 업데이트하는 수단;
    상기 입력 워드에 대응하는 데이터 유형을 엔트로피 인코딩하여 코드워드를 생성하는 수단으로서, 각각의 입력 워드는 복수의 데이터 유형들 중 하나이고, 상기 복수의 데이터 유형들은 상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이의 완전 일치를 나타내는 제 1 데이터 유형 및 상기 입력 워드와 상기 룩백 테이블에 있는 엔트리 사이의 부분 일치를 나타내는 제 2 데이터 유형을 적어도 포함하는, 상기 코드워드를 생성하는 수단; 및
    출력 스트림을 생성하는 수단으로서, 상기 출력 스트림은 상기 입력 스트림의 상기 입력 워드들에 대응하여 순서화된 코드워드들을 포함하는, 상기 출력 스트림을 생성하는 수단
    을 포함하는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 시스템.
  30. 제 29 항에 있어서,
    상기 복수의 데이터 유형들은 복수의 제 3 데이터 유형들을 포함하고, 각각의 제 3 데이터 유형은 고유한 개수의 제로들의 런 길이를 나타내고, 복수의 런 길이들의 각각은 상이한 코드워드로서 인코딩되는, 복수의 입력 워드들의 입력 스트림을 압축하기 위한 시스템.
KR1020177032271A 2015-05-11 2016-04-15 가상 메모리 시스템에서 향상된 압축된 캐싱 KR20180005663A (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201562159871P 2015-05-11 2015-05-11
US62/159,871 2015-05-11
US201562192136P 2015-07-14 2015-07-14
US62/192,136 2015-07-14
US14/832,732 2015-08-21
US14/832,732 US9331712B1 (en) 2015-05-11 2015-08-21 Compressed caching in a virtual memory system
PCT/US2016/027741 WO2016182685A1 (en) 2015-05-11 2016-04-15 Improved compressed caching in a virtual memory system

Publications (1)

Publication Number Publication Date
KR20180005663A true KR20180005663A (ko) 2018-01-16

Family

ID=55807639

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177032271A KR20180005663A (ko) 2015-05-11 2016-04-15 가상 메모리 시스템에서 향상된 압축된 캐싱

Country Status (7)

Country Link
US (2) US9344114B1 (ko)
EP (1) EP3295568B1 (ko)
JP (1) JP2018521537A (ko)
KR (1) KR20180005663A (ko)
CN (1) CN107925421A (ko)
TW (1) TW201707388A (ko)
WO (2) WO2016182686A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10303383B1 (en) * 2015-12-09 2019-05-28 Travelport, Lp System and method for implementing non-blocking, concurrent hash tables
US10509580B2 (en) * 2016-04-01 2019-12-17 Intel Corporation Memory controller and methods for memory compression utilizing a hardware compression engine and a dictionary to indicate a zero value, full match, partial match, or no match
US10303402B2 (en) 2016-08-02 2019-05-28 Seagate Technology Llc Data compression using partial statistics
CN107967296B (zh) * 2017-10-31 2020-06-09 西安空间无线电技术研究所 一种快速低资源开销的改进lzo压缩方法
US10687062B1 (en) 2019-02-22 2020-06-16 Google Llc Compression across multiple images
CN118337217A (zh) * 2023-01-12 2024-07-12 华为技术有限公司 压缩数据的方法、解压数据的方法、装置、系统及介质

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4626829A (en) * 1985-08-19 1986-12-02 Intelligent Storage Inc. Data compression using run length encoding and statistical encoding
US5300931A (en) * 1987-09-04 1994-04-05 Unisys Corporation Memory based vector quantization
US5247357A (en) * 1989-05-31 1993-09-21 Scientific Atlanta, Inc. Image compression method and apparatus employing distortion adaptive tree search vector quantization with avoidance of transmission of redundant image data
US5231485A (en) * 1991-11-19 1993-07-27 Scientific-Atlanta, Inc. Method and apparatus for transforming between fixed-rate vector quantized data and variable rate vector quantized data
US5255090A (en) * 1991-11-19 1993-10-19 Scientific-Atlanta, Inc. Progressive transmission of vector quantized data
US5703581A (en) 1996-06-14 1997-12-30 Lucent Technologies Inc. Method and apparatus for data compression and decompression
US5973626A (en) * 1998-03-17 1999-10-26 Cornell Research Foundation, Inc. Byte-based prefix encoding
JP3778087B2 (ja) 2002-01-18 2006-05-24 富士ゼロックス株式会社 データ符号化装置及びデータ復号装置
US7079056B2 (en) 2003-01-15 2006-07-18 Delphi Technologies, Inc. Method of encoding and storing in a machine control computer a compressed data lookup table
DE10301362B4 (de) 2003-01-16 2005-06-09 GEMAC-Gesellschaft für Mikroelektronikanwendung Chemnitz mbH Blockdatenkompressionssystem, bestehend aus einer Kompressionseinrichtung und einer Dekompressionseinrichtung, und Verfahren zur schnellen Blockdatenkompression mit Multi-Byte-Suche
WO2005004495A1 (en) 2003-06-24 2005-01-13 Telecom Italia S.P.A. A method and system for decoding variable length encoded signals, computer program product therefor
US7129864B2 (en) 2004-12-31 2006-10-31 Intel Corporation Fast compact decoder for huffman codes
US7519470B2 (en) * 2006-03-15 2009-04-14 Microsoft Corporation Location-based caching for mobile devices
CN101622877A (zh) * 2006-12-22 2010-01-06 高通股份有限公司 用于有效空间帧内可预测性确定(或评估)的系统和方法
US7825835B2 (en) 2008-12-15 2010-11-02 Nvidia Corporation Method and system for encoded video compression
US8341501B2 (en) * 2009-04-30 2012-12-25 International Business Machines Corporation Adaptive endurance coding of non-volatile memories
US8681873B2 (en) 2010-02-19 2014-03-25 Skype Data compression for video
US8400335B2 (en) 2011-07-21 2013-03-19 International Business Machines Corporation Using variable length code tables to compress an input data stream to a compressed output data stream
US8248467B1 (en) 2011-07-26 2012-08-21 ByteLight, Inc. Light positioning system using digital pulse recognition
US8643515B2 (en) 2011-10-28 2014-02-04 International Business Machines Corporation Compressing data using an encoding table
US8692696B2 (en) 2012-01-03 2014-04-08 International Business Machines Corporation Generating a code alphabet of symbols to generate codewords for words used with a program
US9330001B2 (en) * 2012-05-21 2016-05-03 Zeropoint Technologies Ab Cache system and a method of operating a cache memory

Also Published As

Publication number Publication date
CN107925421A (zh) 2018-04-17
EP3295568A1 (en) 2018-03-21
EP3295568B1 (en) 2018-12-05
US9331712B1 (en) 2016-05-03
TW201707388A (zh) 2017-02-16
JP2018521537A (ja) 2018-08-02
WO2016182686A1 (en) 2016-11-17
WO2016182685A1 (en) 2016-11-17
US9344114B1 (en) 2016-05-17

Similar Documents

Publication Publication Date Title
EP3295568B1 (en) Improved compressed caching in a virtual memory system
US5870036A (en) Adaptive multiple dictionary data compression
US10268380B2 (en) Methods, devices and systems for semantic-value data compression and decompression
CN109075798B (zh) 可变大小符号基于熵的数据压缩
US10187081B1 (en) Dictionary preload for data compression
US20090060047A1 (en) Data compression using an arbitrary-sized dictionary
US10044370B1 (en) Lossless binary compression in a memory constrained environment
JP4814292B2 (ja) データ圧縮及び復元装置、並びに方法
JP2003218703A (ja) データ符号化装置及びデータ復号装置
US10855815B2 (en) Security-oriented compression
US20140289208A1 (en) Data compression apparatus, data compression method, data decompression apparatus, and data decompression method
US10897270B2 (en) Dynamic dictionary-based data symbol encoding
JP2014027658A (ja) 圧縮エンコーディング及びデコーディング方法並びに装置
Funasaka et al. Adaptive loss‐less data compression method optimized for GPU decompression
US9479195B2 (en) Non-transitory computer-readable recording medium, compression method, decompression method, compression device, and decompression device
US10103747B1 (en) Lossless binary compression in a memory constrained environment
US9160362B1 (en) Lempel-Ziv (LZ)-based data compression employing implicit variable-length distance coding
CN112449191B (zh) 压缩多个图像的方法、解压缩图像的方法和装置
JP2016052046A (ja) 圧縮装置、伸長装置およびストレージ装置
US10873836B2 (en) Efficient short message compression
US10623016B2 (en) Accelerated compression/decompression including predefined dictionary
JP2016149786A (ja) 圧縮プログラム、圧縮方法、圧縮装置、伸張プログラム、伸張方法、伸張装置およびデータ転送システム
JP2016134808A (ja) データ圧縮プログラム、データ復元プログラム、データ圧縮装置、及びデータ復元装置
Akil et al. FPGA-based architecture for hardware compression/decompression of wide format images
CN116309889A (zh) 图片压缩方法、装置、计算机设备及存储介质