KR20050088078A - 메모리 압축된 머신을 모핑하는 방법 및 장치 - Google Patents

메모리 압축된 머신을 모핑하는 방법 및 장치 Download PDF

Info

Publication number
KR20050088078A
KR20050088078A KR1020057008502A KR20057008502A KR20050088078A KR 20050088078 A KR20050088078 A KR 20050088078A KR 1020057008502 A KR1020057008502 A KR 1020057008502A KR 20057008502 A KR20057008502 A KR 20057008502A KR 20050088078 A KR20050088078 A KR 20050088078A
Authority
KR
South Korea
Prior art keywords
memory
compressed
page
main memory
data
Prior art date
Application number
KR1020057008502A
Other languages
English (en)
Other versions
KR100734823B1 (ko
Inventor
비토리오 카스텔리
피터 프라나스제크
단 포프
찰스 숄츠
Original Assignee
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20050088078A publication Critical patent/KR20050088078A/ko
Application granted granted Critical
Publication of KR100734823B1 publication Critical patent/KR100734823B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • 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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • 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/10Address translation
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Memory System (AREA)
  • Reduction Or Emphasis Of Bandwidth Of Signals (AREA)
  • Stored Programmes (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

데이터를 압축된 형태로 저장하는 메인 메모리 및 압축 해제된 데이터를 저장하는 프로세서 캐시를 갖는 컴퓨터 시스템에서, 상기 메인 메모리의 데이터를 압축된 상태에서 미압축 상태로 변환하는 방법은, 상기 메인 메모리의 사용된 부분을 목표값으로 감소시키는 단계와, 미압축 데이터를 압축하는 데 사용되는 압축기를 디스에이블하는 단계와, 상기 메인 메모리의 상기 압축된 데이터를 압축 해제하는 단계와, 상기 압축 해제된 데이터를 실제 주소(real address)와 같은 물리 주소(physical address)로 이동시키는 단계와, 상기 단계들에서 사용된 데이터 구조 및 압축된 메모리 디렉토리(compressed memory directory)에 의해 점유된 메모리를 릴리스(release)하는 단계를 포함한다.

Description

메모리 압축된 머신을 모핑하는 방법 및 장치 {METHOD AND APPARATUS FOR MORPHING MEMORY COMPRESSED MACHINES}
본 발명은 메모리 내의 내용을 한 형태(format)에서 다른 형태로 변환하는 프로세싱 시스템 및 방법, 보다 상세하게는 오퍼레이팅 시스템 및 정규의 애플리케이션을 동시에 제거하면서 압축된 내용을 미압축된 형태로 변환(모핑)하거나 또는 그 역으로 변환하는 시스템 및 방법에 관한 것이다.
페이지 방식 오퍼레이팅 시스템(paged operating system)에서, 가상 주소 공간(virtual address space), 즉 프로그램에 의해 어드레싱가능한 주소의 집합은 페이지로 분할되며, 이 때 연속한 가상 주소의 집합은 고정된 길이를 갖는다. 일반적으로, 페이지는 4Kb를 포함한다. 프로그램의 가상 주소 공간은 일반적으로 이용가능한 물리 메모리보다 훨씬 더 크다. 오퍼레이팅 시스템은 이 특징을 지원하는 일련의 기능을 제공하며, 이 기능들을 일괄하여 가상 메모리 관리자(virtual memory manager)라고 부른다. 물리 메모리보다 더 큰 가상 메모리 공간을 지원하기 위해, 가상 메모리 관리자는 가상 페이지를 메모리와 보통 하드 디스크인 제3의 저장소 양쪽에 저장한다. 가상 페이지에 액세스할 때 그 페이지가 메인 메모리에 없는 경우, 그 페이지는 디스크로부터 판독한다[페이지-인 동작(page-in operation)]. 디스크로부터 판독되고 있는 페이지를 위한 이용가능한 물리적 공간이 없는 경우, 또 하나의 가상 페이지가 디스크에 기록되고[페이지-아웃 동작(page-out operation)] 그의 공간이 릴리스된다. 가상 페이지가 디스크로부터 판독될 때, 그 페이지는 시작 실제 주소(starting real address), 즉 프로세서에서 보는 주소를 할당받는다. 실제 메모리(프로세서의 주소 공간)는 논리 페이지(logical page)와 동일한 크기를 갖는 연속한 서로 겹치지 않는(contiguous and pairwise disjoint) 실제 주소 범위들의 집합으로 분할된다. 이들은 페이지 프레임(page frame)이라고 불리운다. 그러므로, 논리 페이지가 메모리로부터 판독될 때, 이는 페이지 프레임 내에 저장된다. 논리 페이지와 실제 페이지 간의 변환은 페이지 테이블(page table)이라고 하는 페이지들로 분할된 디렉토리 구조에 따라 다르다. 각각의 논리 페이지는 페이지 테이블 엔트리(page table entry)라고 하는, 페이지 테이블 내의 고유 엔트리를 가지며, 이 페이지 테이블 엔트리는 페이지를 포함하는 페이지 프레임의 시작 실제 주소를 포함하거나, 논리 페이지가 제3의 저장소 상에 있는 경우 디스크 상의 위치를 포함한다. 해제 페이지 프레임(free page frame)은 별도의 데이터 구조를 사용하여 관리된다.
프로세스(OS의 프로세스를 포함함)에 의해 사용되는 페이지 프레임들의 세트는 오퍼레이팅 시스템의 해당 모듈들에 의해 관리된다. 대부분의 오퍼레이팅 시스템은 가상 메모리 관리(virtual memory management)를 제공한다. 즉, 이용가능한 물리 메모리보다 통상 상당히 더 큰 주소 공간을 각각의 프로세스에 제공한다. 이를 달성하기 위해, 오퍼레이팅 시스템은 각 프로세스의 페이지들의 일부만을 메모리에 유지하고 나머지 페이지들은 하드 디스크 등의 대용량 저장 장치 상에 저장한다. 따라서, 연속한 물리 주소의 세트인 물리 페이지(physical page)는 프로세스의 가상 페이지(virtual page)를 포함할 수 있거나 일시적으로 미사용 상태일 수 있다. 물리 페이지는 통상 페이지 프레임(page frame)이라고 한다. 프로세스가 메모리에 있지 않은 페이지에 대한 동작을 실시할 때, 그 페이지는 디스크로부터 미사용 페이지 프레임으로 복사된다(이와 유사하게, 그 페이지가 새로운 페이지인 경우, 즉 그 페이지가 디스크 상에 저장되어 있지 않은 경우, 미사용 페이지 프레임이 그 페이지에 할당된다). 페이지 프레임은 적어도 3가지 이유로, 즉 (1) 머신이 최근 시동된 이래로 그 페이지가 결코 사용된 적이 없기 때문에, (2) 최근에 그 페이지를 사용한 프로세스가 종료되었기 때문에, 그리고 (3) 오퍼레이팅 시스템이 그 페이지를 해제(free)하기 때문에, 미사용 상태(unused)일 수 있다. 마지막 경우에, 오퍼레이팅 시스템은 또한 해제될 페이지 프레임의 내용의 복사본이 디스크 상에 존재하도록 보장할 책임이 있다. 보통, 페이지 프레임의 내용이 디스크로부터 복사되었거나 할당된 이래로 그 내용이 수정되었는지를 검출하기 위한 메카니즘이 존재한다. 페이지 프레임이 변경되지 않은 경우, 그 페이지 프레임을 다시 복사할 필요는 없다. 페이지 프레임 내용이 수정된 경우, 그 페이지 프레임 내용은 디스크로 복사되어야만 하며, 그렇지 않은 경우에는 그렇게 할 필요가 없다.
컴퓨터 구조에서의 최근의 발전은 컴퓨터 시스템의 메인 메모리에서의 데이터 압축의 사용이다. 메인 메모리 내의 데이터가 압축된 형태로 저장된다.
도 1은 메모리에 압축된 내용을 갖는 예시적인 프로세싱 시스템을 나타낸 것이다. 도 1에서, 중앙 처리 장치(CPU)(102)는 캐시(104)로부터 데이터를 판독하고 그에 데이터를 기록한다. 캐시 미스인 경우 캐시는 압축 제어기(106)에 의해 압축된 메인 메모리(compressed main memory)(110)로부터 판독 및 그에 기록하는 결과를 저장(store)한다. 실제 메모리(real memory), 즉 메모리에 저장된 데이터에 대응하는 프로세서 주소의 세트는 일반적으로 고정된 수의 연속한 프로세서 주소에 대응하는 다수의 서로 겹치지 않는 세그먼트(pairwise disjoint segment)로 분할된다. 서로 겹치지 않는다(pairwise disjoint)는 것은 각각의 실제 주소(real address)가 단 하나의 이러한 세그먼트에 속함을 의미한다. 이들 세그먼트는 메모리 라인(memory line)이라고 불리운다. 메모리 라인은 압축의 단위이다. 압축된 메모리에 저장된 메모리 라인은 압축되어 가변 수의 메모리 장소에 저장되며, 이 수는 그의 내용이 얼마나 잘 압축되는지에 달려 있다.
미국 특허 제5,761,536호 및 제5,729,228호는 메인 메모리의 내용이 압축되어 있는 컴퓨터 시스템을 개시하고 있다.
다시 도 1을 참조하면, 압축된 메모리는 2 부분, 즉 데이터 부분(108) 및 디렉토리(107)로 분할된다. 데이터 부분은 서로 겹치지 않는 섹터(sector)로 분할되는데, 이 섹터란 물리 메모리 장소의 고정 크기 구간이다. 예를 들어, 섹터는 연속한 물리 주소를 갖는 256개의 물리 바이트로 이루어질 수 있다. 압축된 메모리 라인의 내용은 가능한 최소 수의 물리 섹터에 저장된다. 압축된 라인을 포함하는 물리 섹터는 연속한 물리 주소를 가질 필요가 없으며 압축된 메인 메모리의 데이터 부분 내의 어떤 장소에라도 위치될 수 있다. 바이트의 실제 주소와 그 바이트를 포함하는 물리 섹터의 주소 간의 변환은 디렉토리(107)를 통해 수행된다.
도 2는 압축된 메모리의 동작을 보다 잘 이해하기 위한 추가의 상세를 나타낸 것이다. 프로세서 캐시(240)는 미압축 캐시 라인(241) 및 캐시 디렉토리(242)를 포함하며, 이 캐시 디렉토리는 각각의 캐시 라인의 실제 주소를 저장하고 있다. 이하의 설명에서, 캐시 라인이 메모리 라인(압축의 단위)과 동일한 크기를 갖는 것으로 가정한다. 캐시 미스(cache miss) 시에, 캐시는 그 미스를 야기한 실제 주소(270)를 제공함으로써 메모리에 대응하는 라인을 요청한다. 실제 주소는 2 부분으로 분할되고, log2(라인 길이) 하위 비트는 라인 내의 주소의 오프셋이고, 여기서 log2()는 밑이 2인 로그이다. 나머지 비트들은 지원되는 실제 주소 범위에서의 각 라인에 대한 라인 엔트리(line entry)를 포함하는 압축된 메모리 디렉토리(220)에서의 인덱스로서 사용된다. 주소 A1(271)은 라인 엔트리 1(221)에 대응하고, 주소 A2(272)는 라인 엔트리 2(222)에 대응하며, 주소 A3(273)은 라인 엔트리 3(513)에 대응하고, 주소 A4(274)는 라인 엔트리 4(514)에 대응하며, 이하 마찬가지이다. 이 예에서는, 압축된 메인 메모리에 압축된 데이터를 저장하는 서로 다른 방식을 나타내기 위해 서로 다른 주소가 사용되고 있다. 이 설명에서, 주소 A1을 갖는 라인은 압축성이 아주 좋다(예를 들어, 모두 0으로 이루어진 라인). 이러한 라인은 디렉토리 엔트리(221)에 완전히 저장되고 메모리 섹터를 필요로 하지 않는다. 주소 A2에 있는 라인은 압축성이 떨어지며, 데이터 섹션(230)에 저장되어 있는 2개의 메모리 섹터(231, 232)를 필요로 한다. 라인 엔트리 2(222)는 메모리 섹터(231, 232)에 대한 포인터를 포함한다. 유의할 점은 메모리 섹터(232)의 마지막 부분이 미사용 상태라는 것이다. 주소 A3을 갖는 라인은 3개의 메모리 섹터(233, 234, 235)를 필요로 한다. 섹터(235) 내에 미사용 상태로 남아 있는 공간은 실제 주소 A4를 갖는 압축된 라인의 일부를 저장하기에 충분히 크며, 주소 A4는 차례로 섹터(236) 및 섹터(235)의 일부를 사용한다. 주소 A4 및 주소 A3에 있는 라인을 룸메이트(roommate)라고 부른다. 캐시 내의 소위 더티 라인(dirty line)(예를 들어, 이전에 사용된 라인)이 메모리에 라이트백될 때 압축기가 사용된다. 캐시 라이트백(cache writeback) 시에, 더티 라인은 압축된다. 더티 라인이 라이트백 이전에 사용한 동일한 양의 메모리에 들어가는 경우, 그 라인은 그 자리에 저장된다. 그렇지 않은 경우, 그 라인은 적절한 수의 섹터에 기록된다. 요구되는 섹터의 수가 줄어드는 경우, 미사용 섹터가 해제-섹터 리스트(free-sector list)에 부가된다. 요구된 섹터의 수가 증가하면, 그 섹터는 해제-섹터 리스트로부터 검색된다.
도 3은 압축 디렉토리(220)에서의 엔트리의 가능한 구성을 나타낸 것이다. 동 도면은 3가지 서로 다른 라인 구성을 설명하고 있다. 엔트리 1(306)은 일련의 플래그(301), 및 4개의 섹터의 주소를 포함한다. 라인 크기가 1024 바이트이고 메모리 섹터 크기가 256인 경우, 라인은 최대 4개의 섹터를 필요로 한다. 엔트리 2(307)는 일련의 플래그, 라인에 의해 사용되는 첫번째 섹터의 주소, 압축된 라인의 시작, 및 라인에 의해 사용되는 마지막 섹터의 주소를 포함한다. 라인이 2개 이상의 메모리 섹터를 필요로 하는 경우, 섹터들은 포인터들의 연결 리스트(linked list of pointers)에 의해 연결되어 있다(즉, 각각의 메모리 섹터는 그 다음 섹터의 주소를 포함하고 있다). 엔트리 3은 일련의 플래그, 및 120 비트 이하로 압축되는 고도로 압축된 라인을 포함한다. 이 예에서의 플래그는 라인이 압축된 형태로 저장되어 있는지 미압축 형태로 저장되어 있는지를 나타내는 플래그(302), 라인이 고도로 압축가능하여 디렉토리 엔트리에 완전히 저장되어 있는지를 나타내는 플래그(303), 라인이 얼마나 많은 섹터를 사용하고 있는지를 나타내는 플래그(304)(2 비트), 및 프래그먼트 정보, 즉 최근 사용된 섹터의 어느 부분이 라인에 의해 점유되어 있는지[이 정보는 룸메이팅(roommating)을 위해 사용됨]를 포함하는 플래그(305)(4 비트)가 있다.
전술한 압축된 메모리 구성에 의존하는 메모리 압축을 갖는 시스템에서 달성가능한 최대 압축비는 디렉토리의 크기에 좌우된다. 즉, 실제 주소의 최대 수는 디렉토리 내의 디렉토리 엔트리의 수와 같다. 예를 들어 2:1 압축을 달성하도록 디렉토리의 크기를 제한하는 것은 더 높은 압축비가 관찰되는 것이 보통인 대부분의 컴퓨터 응용에서 차선책이다. 반면에, 큰 디렉토리는 상당한 양의 물리 메모리를 차지하며, 이는 메모리 내용의 압축성이 나쁜 경우 시스템 성능을 떨어뜨릴 수 있다. 기술 분야에 개시된 메모리 압축 방식은 머신이 부팅될 때 고정된 디렉토리 크기를 가지며 머신이 동작하는 동안 변경될 수 없다.
압축 및 압축 해제의 대가(즉, 지연)는 부분적으로 캐시에 의해 은폐된다. 대용량 캐시는 대부분의 전형적인 작업 부하(workload)에 대한 이들 지연을 거의 완전히 은폐시킨다. 그렇지만, 메모리 참조의 국부성(locality of memory reference)이 강하지 않은, 캐시 친숙성이 없는 작업 부하(non-cache-friendly workload)의 경우, 캐시는 지연을 은폐할 수 없으며, 메모리 압축을 갖는 시스템의 성능은 메모리 압축을 갖지 않는 유사한 시스템의 성능보다 상당히 더 나쁘다. 작업 부하의 특성이 선험적으로 알려져 있는 경우, 기술 분야에 개시된 메모리 압축 방식은 컴퓨터 시스템이 미압축 모드로(실제 주소가 물리 주소에 대응하는 표준 컴퓨터로서) 시동되어 동작할 수 있게 해준다. 그렇지만, 머신이 미압축 모드로 시동되는 경우, 그 머신은 재시동을 하지 않고는 압축 모드로 다시 변환될 수 없으며, 그 역도 마찬가지이다.
메모리 압축이 페이지 방식 메모리 시스템(paged memory system)에서 사용되는 경우, 프로세스에 의해 사용될 수 있는 페이지 프레임의 수는 동적으로 변한다. 프로세스에 의해 사용될 수 있는 페이지 프레임은 본 명세서에서 사용가능 페이지 프레임(usable page frame)이라고 한다. 데이터의 압축성(compressibility)이 증가하는 경우, 사용가능 페이지 프레임의 수가 증가될 수 있다. 이와 유사하게, 압축성이 떨어지면, 더 많은 페이지 프레임이 이용가능하지 않게 될 수 있다.
메인 메모리의 내용이 압축된 형태로 유지되는 컴퓨터 시스템에서, 프로세서에 의해 생성된 실제 주소와 압축된 데이터를 포함하는 메모리 셀의 물리 주소 간의 변환은 본 명세서에서 압축-변환 테이블(compressed-translation table, CTT)이라고 하는 디렉토리를 사용하여 수행된다. 캐시 라이트백 시에 데이터는 압축되어 메모리에 저장된다. 캐시 미스 시에, 메모리의 내용은 압축 해제된다. 압축 해제 프로세스의 지연은 대용량 캐시 메모리를 사용함으로써 은폐된다.
메모리가 압축성이 나쁜 데이터를 포함하는 경우, 메모리 내의 서로 다른 페이지 프레임의 수(실제 메모리의 크기)는 물리 페이지의 수보다 더 작을 수 있으며, 압축된 메모리 시스템의 성능은 페이지 오류(page fault)의 증가로 인해 동일한 양의 물리 메모리를 갖는 종래 시스템의 성능보다 더 낮을 수 있다. 작업 부하가 캐시 친숙성이 없는(cache-unfriendly) 경우, 즉 작업 부하가 많은 수의 캐시 미스를 야기하는 경우, 캐시는 그만큼 잘 압축 해제 지연을 은폐하지 않으며, 메모리 압축을 지원하는 시스템의 성능이 나빠진다. 캐시 친숙성이 없는 작업 부하가 장기간 동안 실행되는 경우, 시스템의 성능 저하는 사용자 눈에 띌 정도가 된다.
상기의 예들은 메모리의 내용이 미압축인 상태로 실제-물리 변환(real-to-physical translation)의 추가 비용 없는 종래의 방식으로 시스템을 실행하는 것이 유익할 수 있는 경우이다. 따라서, 메모리 압축을 지원하는 시스템의 하드웨어도 역시 종래의 미압축 모드에서 동작할 수 있다. 일반적으로, 시스템을 압축된 메모리 모드에서 동작시킬지 종래 모드에서 동작시킬지의 결정은 의도된 작업 부하 또는 데이터를 알고 있는지에 기초하고 있다. 일단 결정이 되면, 시스템은 그 다음 재부팅 시까지는 압축된 메모리 모드 또는 미압축 메모리 모드로 동작하며, 동작 모드는 시스템이 계산하고 있는 동안 변경될 수 없다. 따라서, 동작 모드를 CTT없이 압축된 메모리에서 미압축 메모리로 또는 그 역으로 전환하는 시스템 및 방법이 필요하며, 이 시스템 및 방법은 시스템을 재부팅하거나 애플리케이션의 동작을 중지시킬 필요가 없거나 압축된 메모리 디렉토리의 크기를 동적으로 변경시킬 수 있다.
도 1은 압축 메인 메모리를 갖는 종래의 컴퓨터 시스템을 나타낸 도면.
도 2는 도 1의 컴퓨터 시스템의 메모리 구조를 나타낸 도면.
도 3은 도 1의 컴퓨터 시스템에서의 메모리 디렉토리의 엔트리의 구조를 나타낸 도면.
도 4는 본 발명의 실시예에 따라 컴퓨터 시스템의 정상적인 동작을 중단시키지 않고 메인 메모리의 내용을 압축된 상태에서 압축 해제된 상태로 모핑하는 방법을 나타낸 도면.
도 5는 압축 메인 메모리의 사용된 부분을 원하는 값으로 감소시키는 방법을 나타낸 도면.
도 6은 프로세스에 의해 사용된 페이지의 실제 주소를 허용가능 영역으로 변경하고 페이지의 내용을 압축 해제하는 방법을 나타낸 도면.
도 7은 프로세스에 의해 사용된 페이지의 실제 주소를 허용가능 영역으로 변경하고 상기 페이지의 내용을 압축 해제하는 방법을 나타낸 도면.
도 8은 실제 주소와 물리 주소가 같도록 메모리의 내용을 이동시키는 방법을 나타낸 도면.
도 9는 본 발명의 양호한 실시에에 따라 컴퓨터 시스템의 정상적인 동작을 중단시키지 않고 메인 메모리의 내용을 미압축된 상태에서 압축된 상태로 변환하는 방법을 나타낸 도면.
도 10은 메인 메모리의 내용이 미압축된 상태에서 압축된 상태로 변환되는 동안 그 내용을 어드레싱하는 방법 및 정상적인 동작을 중단시키지 않고 내용을 압축하는 것의 상세를 나타낸 도면.
도 11은 정상적인 동작을 중단시키지 않고 메모리 압축 디렉토리의 크기를 증가시키는 방법을 나타낸 도면.
도 12는 정상적인 동작을 중단시키지 않고 메모리 압축 디렉토리의 크기를 감소시키는 방법을 나타낸 도면.
도 13은 본 발명의 실시예의 구현을 나타낸 도면.
도 14는 해제-섹터 리스트 섹터를 제거하는 장치를 나타낸 도면.
데이터를 압축된 형태로 저장하는 메인 메모리 및 압축 해제된 데이터를 저장하는 프로세서 캐시를 갖는 컴퓨터 시스템에서, 상기 메인 메모리의 데이터를 압축된 상태에서 미압축 상태로 변환하는 방법은, 상기 메인 메모리의 사용된 부분을 목표값으로 감소시키는 단계, 미압축 데이터를 압축하는 데 사용되는 압축기를 디스에이블하는 단계, 상기 메인 메모리의 상기 압축된 데이터를 압축 해제하는 단계, 상기 압축 해제된 데이터를 실제 주소(real address)와 같은 물리 주소(physical address)로 이동시키는 단계, 및 상기 단계들에서 사용된 데이터 구조 및 압축된 메모리 디렉토리에 의해 점유된 메모리를 릴리스(release)하는 단계를 포함한다.
양호하게는, 상기 압축된 메인 메모리의 사용된 부분을 감소시키는 상기 단계는 상기 메인 메모리 내의 페이지 프레임의 수를 임계값보다 낮은 수로 감소시키는 단계를 포함하며, 상기 임계값과 페이지의 크기를 곱한 것이 목표값과 같다.
양호하게는, 상기 메인 메모리 내의 페이지 프레임의 수를 상기 임계값보다 낮은 수로 감소시키는 상기 단계는, 새로운 페이지 프레임을 실제 메모리 공간에 부가하는 것을 디스에이블하는 단계, 제로 리스트(zero list)로부터 모든 페이지 프레임을 제거하는 단계, 상기 메인 메모리를 사용하여 프로세스의 작업 세트(working set)로부터 페이지를 프루닝(pruning)하는 단계, 및 상기 제로 리스트로부터 상기 프루닝된 페이지를 제거하는 단계를 더 포함한다.
양호하게는, 상기 메인 메모리 내의 페이지 프레임의 수에 대한 상기 임계값은 물리 메모리의 크기 - 상기 압축된 메모리 디렉토리의 크기 - 상기 데이터 구조의 크기보다 크지 않다.
양호하게는, 본 방법은 상기 메인 메모리를 메모리 섹터로 분할하는 단계 및 해제-섹터 리스트(free-sector list)를 사용하여 미사용 메모리 섹션을 관리하는 단계를 더 포함하며, 상기 메인 메모리의 상기 압축된 데이터를 압축 해제하는 상기 단계는, 실제 주소의 허용가능 영역을 정의하는 단계, 상기 해제-섹터 리스트로부터 상기 허용가능 영역 밖의 물리 주소를 갖는 섹터를 제거하는 단계, 상기 허용가능 영역 밖의 실제 주소를 상기 허용가능 영역 내의 실제 주소로 변경하는 단계, 및 압축/압축 해제의 단위를 나타내는 압축된 메모리 라인을 압축 해제하는 단계를 포함한다.
양호하게는, 허용가능 영역을 정의하는 상기 단계는, 임계값을 정의하는 단계, 및 상기 허용가능 영역을 상기 임계값 아래의 실제 주소의 세트 - 상기 압축된 메모리 디렉토리에 의해 사용된 상기 물리 주소와 같게 하는 단계를 포함한다.
양호하게는, 상기 임계값은 상기 메인 메모리의 사용된 부분의 상기 목표값 + 상기 압축된 메모리 디렉토리의 크기보다 더 크다.
양호하게는, 상기 임계값은 상기 메인 메모리의 물리적 크기 - 모핑에 의해 사용된 데이터 구조의 크기보다 작다.
양호하게는, 본 방법은 오퍼레이팅 시스템에 의해 페이지 방식 가상 메모리(paged virtual memory)를 관리하는 단계를 더 포함하며, 각각의 프로세스에 의해 사용된 메모리 상에서 수행되는, 모든 압축된 메모리 라인을 압축 해제하는 상기 단계는, 상기 프로세스의 페이지 테이블을 획득하는 단계와, 상기 메인 메모리에 포함된 페이지에 대응하는 상기 프로세스의 상기 페이지 테이블 내의 각각의 페이지 테이블 엔트리에 대해, 상기 페이지의 모든 메모리 라인을 캐시 내로 읽어들이는 단계, 및 상기 메모리 라인의 내용을 상기 메인 메모리로 라이트백(write back)하는 단계를 적용하는 단계를 포함한다.
본 방법은 양호하게는 오퍼레이팅 시스템에 의해 페이지 방식 가상 메모리를 관리하는 단계를 더 포함하며, 각각의 프로세스에 의해 사용된 메모리 상에서 수행되는, 상기 허용가능 영역 밖의 실제 주소를 상기 허용가능 영역 내의 실제 주소로 변경하는 상기 단계는, 상기 프로세스의 페이지 테이블을 획득하는 단계와, 상기 메인 메모리에 포함된 페이지에 대응하는 상기 프로세스의 상기 페이지 테이블 내의 각각의 페이지 테이블 엔트리에 대해, 상기 페이지의 주소가 상기 허용가능 영역 밖에 있는지 여부를 검사하는 단계 및 상기 허용가능 영역 밖의 상기 페이지의 주소를 상기 허용가능 영역 내의 주소로 변경하는 단계를 적용하는 단계를 포함한다.
본 방법은 양호하게는 상기 압축된 메모리 디렉토리의 첫번째 엔트리에 대한 포인터를 초기화하는 단계, 상기 포인터를 상기 허용가능 영역 내의 실제 주소에 대응하는 상기 압축된 메모리 디렉토리의 첫번째 미사용 엔트리로 전진(advance)시키는 단계, 상기 허용가능 영역 밖의 상기 페이지의 상기 주소를 상기 포인터에 포함된 주소로 변경하는 단계, 및 상기 포인터를 상기 허용가능 영역 내의 실제 주소에 대응하는 상기 압축된 메모리 디렉토리의 그 다음 미사용 엔트리로 전진시키는 단계를 더 포함한다.
양호하게는, 상기 메모리 내용을 실제 주소와 같은 물리 주소로 이동시키는 상기 단계는 물리-실제 주소 맵(physical-to-real address map)을 생성하는 단계, 및 상기 압축된 메모리 디렉토리에 인덱싱되어 있는 각각의 메모리 라인에 대해, 상기 메모리 라인을 그의 실제 주소와 같은 물리 주소로 이동시키는 단계를 포함한다.
양호하게는, 상기 메모리 라인을 그의 실제 주소와 같은 물리 주소로 이동시키는 상기 단계는, 상기 메모리 라인의 메모리 섹터의 실제 주소와 같은 물리 주소를 점유하는 메모리 섹터의 압축된 메모리 디렉토리 엔트리를 탐색하는 단계, 상기 메모리 라인의 메모리 섹터의 실제 주소와 같은 물리 주소를 갖는 메모리 섹터의 내용을 미사용 메모리 섹터로 복사하는 단계, 상기 메모리 섹터의 새로운 물리 메모리 주소를 포함하도록 상기 복사된 메모리 섹터의 압축된 메모리 디렉토리 엔트리를 갱신하는 단계, 상기 복사된 메모리 섹터의 새로운 장소로 물리-실제 맵을 갱신하는 단계, 상기 메모리 라인의 상기 물리 메모리 섹터의 내용을 그의 실제 주소와 같은 물리 주소를 갖는 메모리 섹터로 복사하는 단계, 상기 복사된 메모리 섹터의 새로운 장소를 사용하여 물리-실제 맵을 갱신하는 단계, 및 상기 물리-실제 맵으로부터 상기 복사된 메모리 섹터의 이전 장소를 제거하는 단계를 포함한다.
메인 메모리 내용이 압축된 형태 또는 미압축된 형태로 유지될 수 있는 양호한 컴퓨터 시스템에서, 상기 컴퓨터 시스템을 정지 및 재시동시킬 필요없이 동작 모드를 미압축 모드에서 압축 모드로 변환하는 방법은, 압축된 메모리 디렉토리의 크기를 선택하는 단계, 상기 압축된 메모리 디렉토리를 포함하도록 선택된 상기 메인 메모리의 부분의 내용을 제거하는 단계, 상기 압축된 메모리 디렉토리를 초기화하는 단계, 및 압축된 메인 메모리 모드를 인에이블시키는 단계를 포함한다.
본 방법은 압축된 메모리 디렉토리의 시작 장소를 선택하는 단계를 더 포함할 수 있다.
양호하게는, 상기 압축된 메모리 디렉토리를 포함하도록 선택된 상기 메인 메모리의 부분의 내용을 제거하는 상기 단계는, 가상 메모리 관리자가 상기 압축된 메모리 디렉토리를 포함하도록 선택된 상기 메인 메모리의 상기 부분의 일부를 프로세스에 할당하지 못하도록 하는 단계, 상기 가상 메모리 관리자에 의해서는 사용되지만 프로세스에 의해서는 사용되지 않는, 상기 압축된 메모리 디렉토리를 포함하도록 선택된 상기 메인 메모리의 상기 부분의 일부를 식별하는 단계, 수정되는 메모리의 상기 식별된 일부를 제3의 저장소에 기록하고 가상 메모리 관리자가 상기 식별된 일부를 사용하는 것을 허용하지 않는 단계, 및 수정되지 않는 메모리의 상기 식별된 일부를 가상 메모리 관리자가 사용하는 것을 허용하지 않는 단계를 포함한다.
양호하게는, 상기 압축된 메모리 디렉토리를 포함하도록 선택된 상기 메인 메모리의 부분의 내용을 제거하는 상기 단계는, 프로세스에 의해 사용된 메모리를 분석하는 단계, 프로세스에 의해 사용된 상기 메모리에서 상기 압축된 메모리 디렉토리를 포함하도록 선택된 상기 메인 메모리의 상기 부분의 일부를 식별하는 단계, 수정되는 메모리의 상기 식별된 일부를 제3의 저장소에 기록하고 가상 메모리 관리자가 상기 식별된 일부를 사용하는 것을 허용하지 않는 단계, 및 수정되지 않는 메모리의 상기 식별된 일부를 가상 메모리 관리자가 사용하는 것을 허용하지 않는 단계를 포함한다.
양호하게는, 상기 압축된 메모리 디렉토리를 포함하도록 선택된 상기 메인 메모리의 상기 부분은 페이지 프레임이다.
본 방법은 양호하게는 상기 압축된 메모리 디렉토리를 구축(populate)하는 단계를 더 포함한다.
양호하게는, 상기 압축된 메모리 디렉토리의 초기화를 인에이블하는 단계, 압축을 인에이블하는 단계, 및 상기 압축된 메모리 디렉토리를 구축하는 단계는 상기 압축된 메모리 디렉토리의 모든 엔트리를 압축된 엔트리를 나타내는 데 사용되지 않는 값으로 초기화하는 단계, 압축기를 인에이블시켜 압축된 메모리 관리를 역방향 모핑 모드(inverse-morphing mode)에서 초기화하는 단계, 및 메모리의 전체 내용이 역방향 모핑될 때까지 압축된 메모리 관리를 상기 역방향 모핑 모드에서 동작시키는 단계를 포함한다.
양호하게는, 압축된 메모리 관리를 상기 역방향 모핑 모드에서 동작시키는 상기 단계는, 제어 라인에 대한 검사 플래그를 캐시 판독/기록 동작으로 설정하는 단계, 모핑된 메모리 라인의 카운터를 영으로 초기화하는 단계, 캐시 기록 시에, 압축된 메모리 디렉토리 엔트리 값을 압축된 엔트리에 사용되지 않은 값과 비교하고 상기 비교된 값들이 같은 경우 카운터를 증가시킴으로써 메모리 라인이 역방향 모핑되지 않았는지를 검사하는 단계, 캐시 판독 시에, 압축된 메모리 디렉토리 엔트리 값을 압축된 엔트리에 사용되지 않은 값과 비교하고 상기 비교된 값들이 같지 않은 경우 실제-물리 변환을 수행하기 위해 CTT-엔트리를 사용함으로써 메모리 라인이 역방향 모핑되지 않았는지를 검사하는 단계, 캐시 판독 시에, 압축된 메모리 디렉토리 엔트리 값을 압축된 엔트리에 사용되지 않은 값과 비교하고 상기 비교된 값들이 같지 않은 경우 페이지 테이블 실제-물리 변환을 사용하여 CTT-엔트리를 수정하고 상기 카운터를 증가시킴으로써 CTT 라인이 역방향 모핑되지 않았는지를 검사하는 단계, 및 상기 카운터가 증가될 때, 카운터의 값을 상기 압축된 메모리 디렉토리 내의 엔트리의 수와 비교하고 상기 플래그를 리셋시키며 상기 비교된 값이 같은 경우 역방향 모핑 모드를 종료시키는 단계를 포함한다.
내용을 압축된 형태로 유지시키는 메인 메모리 및 압축된 메모리 디렉토리를 갖는 양호한 컴퓨터 시스템에서, 상기 컴퓨터 시스템을 정지 및 재시동시킬 필요가 없이 압축된 메모리 디렉토리의 크기를 증가시키는 방법은, 압축된 메모리 디렉토리에 대한 새로운 크기를 선택하는 단계, 상기 압축된 메모리 디렉토리의 부가의 부분을 포함하도록 선택된 상기 메인 메모리의 부분의 내용을 제거하는 단계, 및 상기 압축된 메모리 디렉토리의 확장 부분을 초기화하는 단계를 포함한다.
양호하게는, 상기 압축된 메모리 디렉토리의 부가의 부분을 포함하도록 선택된 상기 메인 메모리의 부분의 내용을 제거하는 상기 단계는, 상기 메인 메모리의 부분에 속하는 해제 메모리 섹터(free memory sector)가 해제-섹터 리스트(free-sector list)에 부가되지 않도록 하는 단계, 상기 메인 메모리의 부분에 속하는 메모리 섹터를 해제-섹터 리스트로부터 제거하는 단계, 및 상기 메인 메모리의 부분에 사용된 메모리 섹터를 미사용 메모리 섹터로 복사하는 단계를 포함한다.
컴퓨터 시스템에서 메인 메모리 내의 압축된 내용의 압축된 메모리 디렉토리의 크기를 감소시키는 방법을 수행하기 위한 컴퓨터 시스템 내의 프로세서에 의해 실행가능한 코드를 저장하는 양호한 장치는, M개의 페이지 프레임에 대한 엔트리를 포함하도록 압축된 메모리 디렉토리의 새로운 크기를 선택하는 단계, 페이지 프레임의 수를 상기 값 M으로 감소시키는 단계, 및 상기 선택된 새로운 크기를 갖는 상기 압축된 메모리 디렉토리에 의해 어드레싱가능한 범위 밖의 주소를 갖는 페이지 프레임의 주소를 상기 어드레싱가능한 범위 내의 주소로 변경하는 단계를 포함하는 방법을 수행한다.
양호하게는, 페이지 프레임의 수를 감소시키는 상기 단계는, 상기 값 M과 페이지 프레임 크기를 곱한 것보다 큰 실제 주소를 갖는 새로운 페이지 프레임의 할당을 방지하는 단계, 릴리스된 페이지 프레임을 재할당하는 데 사용된 데이터 구조에 상기 선택된 새로운 크기를 갖는 상기 압축된 메모리 디렉토리에 의해 어드레싱가능한 상기 주소 범위 밖의 실제 주소를 갖는 페이지 프레임을 부가하는 것을 방지하는 단계, 릴리스된 페이지 프레임을 재할당하는 데 사용된 상기 데이터 구조로부터 상기 선택된 새로운 크기를 갖는 상기 압축된 메모리 디렉토리에 의해 어드레싱가능한 상기 주소 범위 밖의 실제 주소를 갖는 모든 페이지 프레임을 제거하는 단계, 및 프로세스의 작업 세트를 프루닝함으로써 페이지 프레임의 수를 M으로 감소시키는 단계를 포함한다.
양호하게는, 릴리스된 페이지 프레임을 재할당하는 데 사용된 상기 데이터 구조는 수정된 페이지 대기 리스트(modified-page standby list), 해제-페이지 리스트(free-page list), 및 제로 페이지 리스트(zero page list) 중 하나를 포함한다.
양호하게는, 상기 새로운 크기를 갖는 상기 압축된 메모리 디렉토리에 의해 어드레싱가능한 범위 밖의 주소를 갖는 페이지 프레임의 주소를 변경하는 상기 단계는, 프로세스의 페이지 테이블에서 상기 어드레싱가능한 범위 밖의 주소를 갖는 페이지 프레임을 검색하는 단계, 상기 압축된 메모리 디렉토리에서 상기 새로운 어드레싱가능한 범위에 대응하는 해제 엔트리(free entry)를 검색하는 단계, 상기 페이지 테이블 엔트리 내의 실제 주소를 상기 해제 엔트리를 참조하도록 수정하는 단계, 및 상기 어드레싱가능한 범위 밖의 주소를 갖는 상기 페이지 프레임의 압축된 메모리 디렉토리 엔트리를 상기 해제 엔트리로 복사하는 단계를 포함한다.
데이터를 압축된 형태로 저장하는 메인 메모리 및 압축 해제된 데이터를 저장하는 프로세서 캐시를 갖는 양호한 컴퓨터 시스템에서, 상기 메인 메모리의 데이터를 압축된 상태에서 미압축된 상태로 변환하는 방법은, 상기 메인 메모리의 사용된 부분을 목표값으로 감소시키는 단계, 미압축 데이터를 압축하는 데 사용되는 압축기를 디스에이블시키는 단계, 상기 메인 메모리의 상기 압축된 데이터를 압축 해제시키는 단계, 상기 압축 해제된 데이터를 실제 주소와 같은 물리 주소로 이동시키는 단계, 및 상기 단계들에서 사용된 데이터 구조 및 압축된 메모리 디렉토리에 의해 점유된 메모리를 릴리스하는 단계를 포함한다.
데이터를 압축된 형태로 저장하는 메인 메모리 및 압축 해제된 데이터를 저장하는 프로세서 캐시를 갖는 양호한 컴퓨터 시스템에서, 상기 메인 메모리의 데이터를 압축된 상태에서 미압축된 상태로 변환하는 방법은, 상기 메인 메모리의 사용된 부분을 목표값으로 감소시키는 단계, 미압축 데이터를 압축하는 데 사용되는 압축기를 디스에이블시키는 단계, 상기 메인 메모리의 상기 압축된 데이터를 압축 해제시키는 단계, 상기 압축 해제된 데이터를 실제 주소와 같은 물리 주소로 이동시키는 단계, 및 상기 단계들에서 사용된 데이터 구조 및 압축된 메모리 디렉토리에 의해 점유된 메모리를 릴리스하는 단계를 포함한다.
메인 메모리 내용이 압축된 형태 및 미압축된 형태로 유지될 수 있는 양호한 컴퓨터 시스템에서, 상기 컴퓨터 시스템을 정지 및 재시동시킬 필요없이 동작 모드를 미압축 모드에서 압축 모드로 변환하는 방법은, 압축된 메모리 디렉토리의 크기를 선택하는 단계, 상기 압축된 메모리 디렉토리를 포함하도록 선택된 상기 메인 메모리의 부분의 내용을 제거하는 단계, 상기 압축된 메모리 디렉토리를 초기화하는 단계, 및 압축된 메인 메모리 모드를 인에이블시키는 단계를 포함한다.
내용을 압축된 형태로 유지하는 메인 메모리 및 압축된 메모리 디렉토리를 갖는 양호한 컴퓨터 시스템에서, 상기 컴퓨터 시스템을 정지 및 재시동시킬 필요없이 압축된 메모리 디렉토리의 크기를 증가시키는 방법은, 압축된 메모리 디렉토리의 새로운 크기를 선택하는 단계, 상기 압축된 메모리 디렉토리의 부가의 부분을 포함하도록 선택된 상기 메인 메모리의 부분의 내용을 제거하는 단계, 및 상기 압축된 메모리 디렉토리의 확장된 부분을 초기화하는 단계를 포함한다.
컴퓨터 시스템에 있는 메인 메모리 내의 압축된 내용의 압축된 메모리 디렉토리의 크기를 감소시키는 방법을 수행하기 위한 컴퓨터 시스템 내의 프로세서에 의해 실행가능한 코드를 저장하는 양호한 장치에서, 본 방법은 M개의 페이지 프레임에 대한 엔트리를 포함하도록 압축된 메모리 디렉토리의 크기를 선택하는 단계, 페이지 프레임의 수를 상기 값 M으로 감소시키는 단계, 및 상기 선택된 새로운 크기를 갖는 상기 압축된 메모리 디렉토리에 의해 어드레싱가능한 범위 밖의 주소를 갖는 페이지 프레임의 주소를 상기 어드레싱가능한 범위 내의 주소로 변경하는 단계를 포함한다.
데이터를 압축된 형태로 저장하는 메인 메모리 및 압축 해제된 데이터를 저장하는 프로세서 캐시를 갖는 양호한 컴퓨터 시스템에서, 상기 메인 메모리의 데이터를 압축된 상태에서 미압축된 상태로 변환하는 방법은, 상기 메인 메모리의 사용된 부분을 목표값으로 감소시키는 단계, 미압축된 데이터를 압축하는 데 사용되는 압축기를 디스에이블시키는 단계, 상기 메인 메모리의 상기 압축된 데이터를 압축 해제하는 단계, 상기 압축 해제된 데이터를 실제 주소와 같은 물리 주소로 이동시키는 단계, 및 상기 단계들에서 사용된 데이터 구조 및 압축된 메모리 디렉토리에 의해 점유된 메모리를 릴리스하는 단계를 포함한다.
본 발명의 양호한 실시예들의 한 측면은 연속한 디렉토리를 통해 압축된 메모리를 지원하는 컴퓨터의 실제 공간의 크기를 동적으로 변경한다.
도 4는 본 발명의 실시예에 따라 압축된 메모리 동작으로부터 미압축된 메모리 동작으로 모핑하는 방법의 예시적인 플로우차트를 나타낸 것이다. 프로세스에 의해 사용될 수 있는 페이지 프레임[이후 "사용가능 페이지 프레임"(usable page frame)이라 함]의 수는 본 발명의 특정 실시예에 따라 달라지는 값 M으로 감소된다(단계 401). M은 물리 메모리에 포함될 수 있는 페이지 프레임의 최대 수보다 작다. 단계 402는 메모리를 압축하는 압축기를 디스에이블시킨다. 단계 402 후에, 디스크로부터 페이지-인(page-in)된 각각의 논리 페이지는 메인 메모리에 미압축된 형식으로 저장되고, 도 3에 도시된 바와 같이 최대 수의 메모리 섹터를 차지한다. 이와 유사하게, 캐시로부터 메모리로 라이트백된 각각의 메모리 라인은 미압축된 상태로 저장된다. 단계 403에서, 메모리의 전체 내용이 압축 해제되고, 양호하게는 메모리의 전체 내용을 압축 해제하는 것은 각각의 메모리 라인을 캐시로 읽어들여 강제로 라이트백함으로써 달성된다. 메모리의 전체 내용이 압축 해제되고 각각의 메모리 라인이 최대 수의 섹터에 저장될 때, 단계 404는 메모리 섹터를 그의 실제 주소와 같은 물리 주소로 복사한다. 단계 404는 압축된 메모리(110) 내의 모든 섹터가 그의 실제 주소와 같은 물리 주소에 미압축 상태로 저장될 때 종료한다. 단계 405는 압축된 메모리 디렉토리에 의해 점유되고 또한 모핑 모듈에 의해 사용된 데이터 구조에 의해 점유된 메모리를 릴리스하고, 이는 오퍼레이팅 시스템에 미사용 페이지 프레임으로서 반환된다.
도 5는 페이지 프레임의 수를 단계 401의 원하는 값 M으로 감소시키는 양호한 프로세스를 나타낸 것이다. 단계 501은 사용가능 페이지 프레임의 수를 증가시키지 못하도록 한다. 즉, 압축성이 향상되는 경우(예를 들어, 해제-섹터 리스트 상의 메모리 섹터의 수가 임계값을 초과하는 경우) 페이지 프레임을 사용가능하게 만드는 압축된 메모리 메카니즘이 디스에이블된다. 대체 실시예에서, 사용가능 페이지 프레임의 수를 증가시키지 못하도록 하는 것이 아니라 페이지 프레임이 사용가능하게 만들어지는 속도를 제한하는 제어 정책이 사용되며, 따라서 도 5에 설명된 절차의 전체적인 효과는 사용가능 페이지 프레임의 수를 실제로 감소시킨다. 도 5의 후속 단계들은 해제-섹터 리스트 상의 섹터의 수를 증가시키는 전체적인 효과를 가질 수 있다. 캐시 친숙성이 없는 작업 부하에 의해 모핑이 트리거되는 양호한 실시예에서, 단계 501은 또한 해제-섹터 리스트 상의 섹터의 수가 적절한 임계값을 넘지 않는 한, 사용자 프로세스 상에서의 페이지-인을 일시적으로 디스에이블시킨다. 이 실시예에서, 페이지-인은 단계 506에서 재인에이블된다. 다른 실시예들에서, 페이지-인은 디스에이블되지 않는다.
오퍼레이팅 시스템은 어떤 프로세스에 의해서도 사용되지 않는 사용가능 페이지 프레임을 추적하기 위해 적절한 데이터 구조, 일반적으로는 하나 이상의 리스트를 사용한다. 상세히 설명하면, 이용가능한 사용가능 페이지 프레임(사용가능 페이지 프레임은 예를 들어 어떤 프로세스에 의해서도 사용되지 않고 그의 내용이 수정되었지만 아직 디스크에 기록되지 않은 경우, 이용가능하지 않은 상태일 수 있다)을 추적하는 데이터 구조가 있다. 어떤 오퍼레이팅 시스템에서, 이 구조는 제로 페이지 리스트(zero page list)라고 한다.
단계 502는 제로 페이지 리스트로부터 모든 사용가능 페이지 프레임을 제거한다. 양호한 실시예에서, 이들 페이지 프레임은 메모리 섹터와 연관되어 있지 않다. 즉, 도 3에 도시한 바와 같이, 압축성이 높은 메모리 라인은 대응하는 CTT-엔트리에 완전히 저장된다. 제로 페이지 리스트로부터 모든 페이지 프레임을 제거하는 것은 실제 메모리를 감소시키는 효과를 갖는다. 단계 503 및 504는 메모리 내의 사용가능 페이지 프레임의 수가 임계값 M으로 또는 그 이하로 감소될 때까지 반복적으로 실행된다. 상기할 점은 사용가능 페이지 프레임이 프로세스에 의해 사용되거나 미사용 상태로 오퍼레이팅 시스템에 의해 페이지 프레임을 프로세스가 이용가능하게 만들어주는 데이터 구조에 보관되어 있는 페이지 프레임이라는 것이다. 당업자라면 어떻게 사용가능 페이지 프레임의 정의가 페이지 프레임 관리를 위해 다른 데이터 구조를 사용하는 페이지 오퍼레이팅 시스템에 용이하게 적응될 수 있는지를 용이하게 이해할 수 있다.
단계 503은 프로세스에 의해 사용되는 페이지를 택하여, 수정된 페이지를 디스크에 기록하고, 미사용 페이지를 추적하는 데 사용되는 데이터 구조에 그 페이지를 추가한다. 이 프로세스는 Windows 2000 등의 오퍼레이팅 시스템에서 프로세스의 작업 세트를 프루닝하는 프로세스와 유사하다. 양호한 실시예에서, 단계 503에서 요구되는 동작들은 적당한 오퍼레이팅 시스템 모듈을 호출함으로써 수행된다. 단계 504는 미사용 페이지 프레임을 택하여 이들을 프로세스가 이용할 수 없도록 만든다. 단계 503 및 504는 동시에 실행될 수 있다.
단계 505는 단계 503 및 504의 동작을 제어하고 페이지 프레임의 수가 원하는 값 M과 같거나 M 이하로 떨어질 때 그의 실행을 종료한다.
양호한 실시예에서, M의 값은 이하의 식을 사용하여 선택된다.
M <= (물리 메모리 크기 - CTT 크기 - 모핑 구조 크기) / (페이지 크기)
수 M은 메모리에 저장된 데이터 구조 및 비페이지 대상(non-pageable) 코드를 포함할 정도로 충분히 커야만 한다. 유의할 점은 이들 M개의 페이지에, 상기 M개의 페이지 밖에 존재하는 모핑 프로세스에 의해 사용되는 데이터를 제외한, 컴퓨터 시스템의 동작을 위해 필요한 모든 코드 및 데이터가 포함된다는 것이다.
도 5에 개시된 방법은 페이지-인을 못하게 하지는 않는다. 예를 들어, 해제-섹터 리스트내의 메모리 섹터의 수가 충분히 큰 경우, 적당한 오퍼레이팅 시스템 모듈은 대기(standby) 페이지 리스트 및 해제-페이지 리스트 상의 페이지 프레임들을 재사용할 수 있고 또 이들을 그의 최초 프로세스의 작업 세트에 부가할 수 있다. 도 5의 방법이 종료하도록 보장하기 위해, 호출된 오퍼레이팅 시스템 모듈은 충분히 높은 우선순위를 가져야만 하고, 그 우선순위의 값은 원하는 속도로 메모리로부터 페이지 프레임을 제거하기 위해 모핑 동작 동안 수정될 수 있다.
도 6은 본 발명의 양호한 실시예에 따라 메모리(403)의 내용을 압축 해제하는 방법을 나타낸 도면이다. 단계 601에서, 이하의 2가지 제약조건을 만족하는 임계값 T가 선택된다.
(1) 임계값 T는 CTT의 크기(바이트 단위) + 물리 페이지의 크기의 M배보다 커야 한다.
(2) 임계값 T는 물리 메모리의 크기 - 모핑 동안 사용되는 데이터 구조의 크기보다 작아야 한다.
단계 602는 실제 메모리 공간의 허용가능 영역(allowable region)을, 단계 601에서 정의된 임계값 T 아래의 실제 주소의 세트 - CTT에 의해 점유되고 또한 메모리 압축 관리 시스템에 의해 사용되는 다른 데이터 구조에 의해 점유된 물리 주소의 세트로서 정의한다. 이 허용가능 영역은 이하의 2가지 주된 목적을 갖는다. 즉, 실제 공간에서, 그 영역은 모핑이 종료될 때 활성일 수 있는 실제 주소의 세트를 정의하고, 또한 물리 공간에서, 그 영역은 모핑이 종료된 직후에 사용 중에 있는 물리 주소의 세트를 정의한다. 따라서, 2가지 목표가 달성된다. 즉, 허용가능 영역 밖의 실제 주소를 갖는 모든 활성 페이지가 실제 공간으로부터 제거되고, 허용가능 영역 밖의 물리 주소를 가지며 또 사용 중에 있는 모든 메모리 섹터가 회수(reclaim)된다.
단계 603 및 604는 메모리 압축 시스템에 의해 유지되는 해제-섹터 리스트를 처리한다. 단계 603은 허용가능 영역 밖의 물리 주소를 갖는 해제-섹터를 해제-섹터 리스트에 부가하지 못하도록 한다. 이를 달성하는 한가지 방법에서, 해제-섹터 리스트의 관리를 제어하는 메카니즘이 적절히 수정된다. 이러한 관리 제어의 양호한 실시예가 도 13에 도시되어 있으며, 이에 대해서는 이하에 기술된다. 허용가능 영역 밖에 존재하는 해제 섹터가 해제-섹터 리스트 관리자에 제공될 때, 이 관리자는 그 섹터를 리스트에 부가하지 않고 그의 주소를 잊어버린다. 그러므로, 상기 섹터는 페이지 프레임에 의해 사용되지도 않고 해제-섹터 리스트 상에 있지도 않다. 그의 주소를 포함하는 어떤 포인터도 유지되지 않으며, 따라서 이후로 그 섹터는 압축 메모리 관리 시스템이 볼 수 없으며, 따라서 사용가능하지 않다. 유의할 점은 이것이 문제가 아니라는 것이며, 궁극적으로 허용가능 영역 밖에 존재하는 모든 메모리 섹터가 릴리스되고, 모핑 메카니즘은 직접적으로(즉, 물리 주소를 사용하여) 허용가능 영역 밖의 메모리 장소에 액세스하며, 따라서 릴리스된 섹터에 대한 포인터를 유지할 필요가 없다.
이어서, 단계 604는 메모리 압축 서브시스템에 의해 유지되는 해제-섹터 리스트를 분석한다. 이 서브시스템은 모든 그의 메모리 섹터를 검사하고 허용가능 영역 밖의 물리 주소를 갖는 섹터를 제거한다. 단계 603에서와 같이, 이들 섹터는 간단히 릴리스되고, 그 섹터에 대한 포인터가 메모리 압축 관리자에 의해 유지되지 않는다. 단계 604가 종료될 때, 단계 605는 시스템 내의 모든 프로세스를 분석한다. 양호한 실시예에서, 오퍼레이팅 시스템은 각각의 프로세스마다 고유의 프로세스 기술자(process descriptor), 즉 상기 프로세스와 관련된 정보를 포함하는 데이터 구조를 유지한다. 이 양호한 실시예에서, 단계 605는 각각의 프로세스 기술자에 대한 포인터를 획득하고 각각의 프로세스를 분석하기 위해 상기 프로세스 기술자를 사용한다. 단계 605는 단계 606 및 607의 실행을 제어하고 모든 프로세스가 분석되었을 때 도 6에 기술된 동작을 종료한다(단계 608). 단계 606에서, 분석되고 있는 프로세스와 연관된 페이지 프레임이 조사되고, 허용가능 영역 밖에 있는 페이지 프레임이 허용가능 영역으로 이동된다. 단계 607에서, 프로세스의 상주 페이지의 모든 라인들은 이들을 캐시로 읽어들여 강제로 라이트백함으로써 압축 해제된다.
도 7은 본 발명의 양호한 실시예에 따른 단계 606 및 607을 나타낸 것이다. 단계 701 및 702는 양호하게는 한번 실행된다. 이들 단계는 단계 601 이전에, 단계 601과 단계 602 사이에, 단계 603과 단계 604 사이에, 또는 단계 604 후 단계 704 전에 실행될 수 있다. 단계 704에서, 포인터 P는 CTT 내의 첫번째 엔트리로 초기화된다. 양호한 실시예에서, 포인터 P는 물리적으로 메모리 제어기 내의 특수 목적 레지스터에 저장된다. 단계 702에서, 포인터는 첫번째 미사용 CTT 엔트리가 발견될 때까지 전진된다. 양호한 실시예에서, CTT 엔트리가 사용되는지 여부에 관한 정보가 CTT 엔트리 자체에 포함되어 있지 않다. 다른 양호한 실시예에서, 미사용 CTT 엔트리의 리스트가 유지되며, 이 경우 단계 701은 포인터를 미사용 CTT 엔트리의 리스트의 처음으로 초기화하며, 단계 702는 단계 602에서 정의된 허용가능 영역 내의 실제 주소를 갖는 첫번째 미사용 CTT 엔트리를 만날 때까지 포인터를 전진시킨다. 단계 703 내지 단계 709는 이 양호한 실시예의 관점에서 단계 606 및 607에 대한 상세한 설명이다. 단계 704는 분석되고 있는 프로세스와 연관된 각각의 페이지 테이블 엔트리(page table entry, PTE)를 분석하고, 프로세스의 모든 PTE가 분석되었을 때 종료된다(단계 705). PTE가 가상 페이지를 메모리 내의 실제 페이지로 변환하면, 이하에 설명된 단계들이 실행된다. 단계 706은 페이지의 각 라인을 압축 해제한다. 캐시 미스 시에 메모리 라인이 압축 해제되어 캐시에 완전히 저장되는 양호한 실시예에서, 단계 706은 페이지의 각 라인을 캐시로 읽어들여 강제로 라이트백하며, 따라서 라인의 내용을 압축 해제한다[단계 402에서 압축기가 디스에이블되었기 때문임]. 양호한 실시예에서, 강제 라이트백은 하드웨어에 의해 지원된다. 즉, 캐시 제어기는 강제로 라이트백시키는 적절한 회로(예를 들어, 요구 시에 수정된 플래그를 설정하는 하드웨어)로 보강되어 있다. 다른 실시예에서, 단계 706은 소프트웨어에 의해 달성된다. 즉, 메모리 라인은 그 라인의 바이트들 중 하나, 예컨대 첫번째 바이트를 프로세스의 레지스터로 로드하고 그 바이트를 캐시 라인 내의 동일한 위치로 라이트백시키는 프로그램에 의해 캐시로 읽어들여진다. 이 방법의 경우, 캐시 제어기는 캐시 라인으로의 기록을 검출하고, 그 라인을 수정된 것으로서 표시하며, 따라서 라인이 캐시로부터 방출될 때 그 라인은 라이트백된다. 단계 707은 PTE에 의해 변환된 페이지의 실제 주소를 검사한다. 실제 주소가 허용된 영역에 있는 경우, 그 다음 PTE는 단계 704에 의해 분석된다. 그렇지 않은 경우, 단계 708은 PTE 내의 주소를 갖는 실제 페이지에 대응하는 CTT 엔트리의 내용을 P가 가리키고 있는 미사용 CTT 엔트리로 복사하고, PTE 내의 실제 주소를 P가 가리키고 있는 CTT 엔트리에 의해 변환된 실제 페이지로 변경한다. 이전의 CTT-엔트리를 미사용 엔트리 리스트에 부가할 필요가 없는데, 그 이유는 그것이 재사용되지 않기 때문이다. 단계 709는 포인터 P를 그 다음 미사용 CTT 엔트리로 전진시킨다.
CTT 엔트리가 자신이 사용되는지 사용되지 않는지에 관한 정보를 포함하고 있는 양호한 실시예에서, 포인터 P는 단순히 미사용 CTT-엔트리가 발견될 때까지 증분된다. 미사용 CTT 엔트리가 리스트에 속하는 양호한 실시예에서, 포인터 P는 허용가능 영역 내의 주소를 갖는 실제 페이지에 대응하는 CTT 엔트리가 발견될 때까지 리스트 내에서 전진된다. 당업자에게는 특정의 오퍼레이팅 시스템에 따라 오퍼레이팅 시스템이 허용되지 않은 영역 내의 새로운 페이지 프레임을 할당하지 못하도록 하기 위해 추가의 조치들이 취해질 필요가 있을 수 있음은 자명하다. Windows NT 및 Windows 2000 등의 오퍼레이팅 시스템에서, 이것은 필요하지 않은데, 그 이유는 제로 페이지 리스트 또는 해제-페이지 리스트 상에 없는 모든 페이지 프레임을 여전히 그 프레임이 속하는 프로세스의 CTT 엔트리 또는 그 프레임이 속하는 프로세스와 연관된 데이터 구조가 가리키고 있기 때문이다. 오퍼레이팅 시스템이 이러한 데이터 구조를 유지하고 있는 양호한 실시예에서, 상기 데이터 구조는 도 7에 기술된 동일한 방법을 사용하여 분석된다. 양호한 실시예에서, 제로 리스트 상의 페이지 프레임은 단계 703을 시작하기 전에 분석되고 그의 주소가 허용되지 않은 영역 내에 있는 경우 제로 리스트로부터 제거된다. 다른 실시예에서, 그 프레임은 단계 707, 708 및 709를 사용하여 분석되고 수정된다.
본 발명의 또 다른 실시예에 따르면, CTT는 물리 메모리 내의 일반 위치에 배치될 수 있으며 잠재적으로 연속한 구간의 집합으로 세분될 수 있다. 허용가능 영역의 정의는 형식상 동일하며, 페이지 프레임의 실제 주소 및 물리 섹터가 허용가능 영역 내에 있는지를 결정하는 테스트에 대한 적절한 변경이 당업자에 의해서는 용이하게 행해질 수 있다.
도 8은 본 발명의 단계 404를 구현하는 양호한 실시예를 나타낸 것이다. 단계 801은 메모리 섹터의 물리-실제 맵을 작성한다. 이 시점에서 새로운 페이지 프레임이 실제 메모리에 부가되지 않고 또 압축이 디스에이블되어 있기 때문에, 각각의 페이지 프레임과 연관된 섹터는 이제 물리 메모리 내의 고정 위치에 있고 그의 위치는 계산 동안 변하지 않는다. 물리-실제 맵을 작성하는 것은 이하의 단계들을 포함한다.
1. 허용된 영역 내의 각각의 물리 메모리 섹터마다 하나의 엔트리를 포함하는 포인터 어레이 A를 할당한다. 이 포인터 어레이는 단계 601에서 정의된 임계값 T보다 높은 주소를 갖는 물리 메모리의 부분에 할당된다.
2. CTT를 돌아본다. 이하의 의사 코드는 동작들을 설명한다.
for each CTT-entry E do:
for each pointer P in CTT-entry E do:
copy the index of the CTT entry into the each entry of the array A
corresponding to the address stored in P.
done
done
물리-실제 맵이 생성되었으면, 단계 802는 예를 들어 CTT의 끝에서부터 시작하여 CTT를 둘러보고 동 도면의 모든 후속 단계들의 실행을 제어한다. 당업자라면 실제 주소를 증가시키는 순서로 메모리의 내용을 재정렬하기 위해 이 알고리즘이 용이하게 수정될 수 있음을 잘 알 것이다. CTT가 페이지 프레임에 의해 사용되는 CTT 엔트리를 포함하는 동안, 단계 804 내지 단계 810이 실행된다. CTT가 더 이상 페이지 프레임에 의해 사용되는 CTT 엔트리를 포함하지 않는 경우, 도 9의 방법은 단계 803에서 종료된다.
E를 단계 902에서 선택된 CTT 엔트리라고 하자. E는 일정 수의 섹터를 포함하는 실제 주소 범위에 대응한다. 페이지의 크기가 4096 바이트이고 메모리 섹터의 크기가 256 바이트인 양호한 실시예에서, 페이지 프레임에 대응하는 실제 주소 범위는 4096/256 = 16개의 메모리 섹터를 포함한다.
단계 804는 E에 대응하는 실제 주소 영역과 같은 물리 주소 영역 내의 각각의 섹터 S에 단계 805, 806 및 807을 적용한다. 단계 805는 섹터 S를 사용하여 물리-실제 맵에서 실제 주소를 탐색하고 대응하는 CTT 엔트리 ES를 검색한다. 단계 806은 섹터 S의 내용을 해제-섹터 리스트로부터 획득한 미사용 섹터 S'에 복사한다. 당업자라면 단계 805 및 806이 임의의 순서로 실행될 수 있음을 잘 알 것이다. 단계 807은 S의 주소를 포함하는 CTT 엔트리 ES 내의 포인터에 S'의 주소를 복사한다. 단계 804가 반복을 종료하면, CTT 엔트리 E에 대응하는 실제 주소 범위에 대응하는 물리 주소 범위가 데이터 일관성을 떨어뜨리지 않고 덮어쓰기(overwrite)될 수 있다. 단계 808은 E에 의해 인덱싱된 데이터를 포함하는 메모리 섹터에 대해 반복된다. S"을 이러한 섹터를 나타내는 것으로 하자. 단계 809는 S"에 포함된 데이터를 S"의 실제 주소와 같은 물리 주소를 갖는 섹터로 복사한다.
양호한 실시예에서, 메모리 압축 및 모핑을 위한 하드웨어 및 소프트웨어는 모핑 동안 듀얼-어드레싱 모드를 지원한다. 보다 상세하게는, 모핑된 범위 내의 주소(즉, 이미 모핑 프로세스를 받은 주소)는 CTT의 추가의 간접 참조(indirection)없이 페이지 테이블을 통해 직접 액세스되고, 모핑된 범위 밖의 주소(즉, 모핑되기를 기다리는 주소)는 CTT에 의해 제공되는 부가의 간접 참조를 통해 액세스된다. 양호하게는, 메모리 내의 모든 실제 페이지가 모핑되었으면, 모핑 프로세스는 양호한 단계들에 의해 종료된다. 물리-실제 맵에 의해 점유된 물리 메모리는 페이지 프레임들로 분할되고, 이들은 해제 페이지 리스트에 부가되며, 또 CTT에 의해 점유된 물리 메모리는 페이지 프레임들로 분할되며, 이들은 해제 페이지 리스트에 부가된다.
도 9는 컴퓨터 시스템의 정상적인 동작을 중단시킬 필요없이 메인 메모리의 내용을 미압축된 상태에서 압축된 상태로 재변환하는 방법을 나타낸 것이다. 이 양호한 방법에 따르면, 오퍼레이팅 시스템은 I/O 버퍼가 피닝된 페이지(pinned page)에 존재할 때 a) 커널 및 b) I/O 동작을 위한 비페이지 대상 페이지의 범위를 제어한다.
단계 901에서, CTT의 크기가 선택된다. 양호한 실시예에서, CTT의 크기는 미리 정해진 값과 같게 정적으로 선택된다. 다른 실시예에서, 압축기는 캐시 라인이 라이트백될 때 캐시 라인의 압축성에 관한 통계를 수집하고(그렇지만 압축된 라인을 기록하지는 않음), 압축성 정보는 CTT의 크기를 결정하는 데 사용된다. 양호한 실시예에서, CTT는 미리 정해진 주소에서 시작한다. 다른 실시예에서, CTT의 시작 주소는 미리 정해진 전략을 사용하여 선택될 수 있으며 압축 메모리 관리의 파라미터로서 사용될 수 있다. 이 실시예에서, 단계 901은 또한 상기 미리 정해진 전략을 사용하여 CTT의 시작 주소를 선택한다. CTT의 시작 주소에서 시작하고 CTT의 크기와 같은 길이를 갖는 물리 주소의 범위를 본 발명에서는 CTT 범위라고 한다. 단계 902는 CTT 범위 내의 모든 페이지 프레임을 페이지 아웃하고 가상 메모리 관리자가 상기 페이지 프레임을 재사용하지 못하도록 한다. 오퍼레이팅 시스템이 Windows NT, Windows 2000 또는 유사한 가장 메모리 관리를 갖는 오퍼레이팅 시스템인 양호한 실시예에서, 단계 902는 이하의 예시적인 프로세스, 즉
작업 세트 관리자를 적절히 수정함으로써 메모리 관리자가 CTT 범위 내의 페이지 프레임들을 수정된 대기 페이지 리스트에 부가하지 못하도록 하는 단계,
CTT 범위 내의 페이지 프레임을 식별하기 위해 수정된 페이지 리스트, 대기 페이지 리스트, 해제 페이지 리스트 및 제로 페이지 리스트를 분석하는 단계,
수정된 페이지 리스트 상의 상기 식별된 페이지를 페이지 파일에 기록하고 이들을 수정된 페이지 리스트로부터 제거하는 단계,
상기 식별된 페이지를 대기 페이지 리스트, 해제 페이지 리스트 및 제로 페이지 리스트로부터 제거하는 단계,
프로세스의 페이지 테이블에서 CTT 범위 내의 페이지 프레임을 검색하는 단계, 및
상기 식별된 페이지 프레임을 페이지 파일에 기록하고 이들을 리스트로부터 제거하는 단계에 의해 수행될 수 있다.
마지막 2개의 작업은 도 7의 방법을 수정함으로써 달성될 수 있다.
단계 903은 CTT를 초기화하고, 단계 904는 압축 및 압축 메모리 관리를 인에이블시키며, 단계 905는 CTT를 구축(populate)한다.
도 10은 양호한 실시예를 나타낸 것이다. 단계 903, 904 및 905를 수행하는 단계 1001에서, CTT 엔트리의 내용은 CTT 엔트리가 실제 주소와 물리 주소 간에 변환할 때 결코 사용되지 않은 값으로 초기화된다. 따라서, CTT 엔트리의 내용을 상기 값과 비교함으로써, CTT 엔트리가 실제 주소와 물리 주소 간의 변환을 위해 현재 사용되고 있는지 또는 CTT 엔트리가 결코 사용된 적이 없는지를 결정하는 것이 가능하다. 단계 1002는 압축기를 인에이블시키고 플래그를 설정함으로써 역방향 모핑 모드에서 압축 메모리 관리를 초기화한다. 단계 1003은 역방향 모핑된 라인에 대응하는 CTT 엔트리의 수의 카운터를 영으로 초기화한다.
단계 1004는 캐시 기록 시에 플래그를 검사하고, 플래그가 역방향 모핑 모드를 나타내는 것으로 설정되어 있는 경우 단계 1005 및 1006이 실행된다. 단계 1005에서, 압축 메모리 관리 시스템은 라이트백되고 있는 라인이 그 라인을 라이트백하기에 앞서 변환되었는지를 검사한다. 라인이 변환되지 않은 경우, 단계 1005는 그 라인이 이제 변환되었음을 나타내기 위해 카운터를 증가시킨다. 단계 1007은 캐시 기록 시에 플래그를 검사하고, 플래그가 역방향 모핑 모드를 나타내는 것으로 설정되어 있는 경우 단계 1008이 실행되어 라인의 CTT 엔트리가 수정되고 그 라인이 변환되었는지를 검사한다. 라인이 변환된 경우, 단계 1011은 CTT 엔트리를 통해 실제 주소를 물리 주소로 변환함으로써 판독 동작을 계속한다. 라인이 변환되지 않은 경우, 단계 1009는 CTT 엔트리를 통해 실제 주소를 물리 주소로 변환함으로써 판독 동작을 계속한다. (예를 들어, 데이터 마이닝 작업에서와 같이 메모리의 내용이 대부분 판독되었지만 거의 기록되지 않은 경우) 역방향 모핑 동작의 완료를 가속화하기 위해, 단계 1010은 라인이 미압축 상태로 저장되어 있음을 나타내고 또 메모리 섹터 포인터를 라인에 의해 사용되는 메모리 섹터의 물리 장소로 초기화함으로서 CTT 엔트리를 수정하고, 카운터를 증가시킨다. 단계 1006은 단계 1005 또는 단계 1010 중 어느 하나에 의해 카운터가 증가될 때 호출된다. 카운터가 CTT 내의 엔트리의 수와 같은 경우, 역방향 모핑 프로세스는 종료되고, 플래그가 리셋된다.
도 11은 CTT의 크기를 동적으로 증가시키는 방법의 양호한 실시예를 나타낸 것이다. 단계 1101에서, CTT의 부가의 크기가 계산된다. 당업자에게는 적응적 제어 전략이 CTT의 부가의 크기를 결정하는 데 사용될 수 있음은 자명하다. 심볼 S는 이 부가의 크기를 나타내는 데 사용되며, 메모리 섹터의 수로 표현되고, A는 CTT에 의해 사용되어질 주소의 구간을 나타내는 데 사용된다. 단계 1102는 확장된 CTT 영역(물리 메모리 주소의 세트 A) 내에 속하는 해제된 섹터가 해제-섹터 리스트에 부가되지 않도록 한다. 양호한 실시예에서, 단계 1102는 해제 섹터를 관리하는 일을 맡고 있는 압축 메모리 관리 모듈에 대해, 메모리 섹터가 해제될 때 그의 주소가 A 내에 속하는지를 결정하기 위해 검사되어야만 한다는 것과 이러한 메모리 섹터가 해제-섹터 리스트에 부가되어서는 안됨을 통지한다. 단계 1103은 해제-섹터 리스트를 분석하고 그 리스트로부터 A 내의 주소를 갖는 모든 섹터를 제거한다. 양호한 실시예에서, 수 S는 단계 1103에 의해 제거된 메모리 섹터의 수만큼 감소된다. 단계 1104는 반복자(iterator)로서 그의 목적은 단계 1105 및 1106을 제어하는 것이며, 이 두 단계는 함께 해제-섹터 리스트로부터 S개의 미사용 메모리 섹터를 획득한다. 단계 1104는 S개의 미사용 메모리 섹터가 복구될 때 종료된다. 단계 1105는 해제-섹터 리스트로부터 섹터를 복구한다. 메모리 소진(memory exhaustion)을 피하기 위해, 단계 1105는 압축 메모리 관리 정책에 의해 정해진 바와 같이, 항상 해제 섹터 리스트 상에 최소 수의 해제 메모리 섹터를 남겨둔다. 단계 1105가 해제 섹터를 수집할 수 있도록 하기 위해, 단계 1106은 강제로 프로세스 작업 세트를 트리밍하며, 이는 해제-섹터 리스트의 크기를 증가시킨다. 당업자라면 단계 1105 및 1106이 임의의 순서로 실행될 수 있다는 것과 또한 동시에 실행될 수도 있다는 것을 용이하게 이해할 것이다. S개의 섹터가 해제-섹터 리스트로부터 검색된 경우, 단계 1107은 CTT 엔트리에 대해 반복된다. 단계 1107은 CTT 내의 각각의 CTT 엔트리에 대해 반복된다. 단계 1108은 CTT 엔트리의 각각의 섹터 포인터에 대해 반복된다. 섹터가 영역 A에 있는 경우, 섹터의 내용은 단계 1101-1106에서 복구된 S개의 섹터 중 하나로 복사되고, 포인터는 업그레이드된다(단계 1109). 룸메이트와의 문제를 방지하기 위해, 단계 1107, 1108 및 1109는 아마도 인터럽트를 마스킹하면서 코호트(cohort)(룸메이트에게 허용된 라인의 세트)의 모든 엔트리에 대해 원자적으로 실행될 수 있다. 당업자라면 일련의 단계 1104, 1105 및 1106과 일련의 단계 1107, 1108 및 1109가 순차적으로 실행될 필요가 없지만 동시에 실행될 수 있음을 잘 알 것이다. CTT 내의 모든 엔트리가 분석된 경우, 단계 1110은 CTT를 확장하고 그의 엔트리를 초기화한다.
도 12는 압축된 메모리 디렉토리의 크기를 M개의 페이지 프레임을 인덱싱하기 위해 요구되는 크기로 감소시키는 방법의 양호한 실시예를 나타낸 것이다. 페이지 프레임의 수 M은 메모리에 포함된 데이터의 압축성의 동적 거동을 분석함으로써 선택될 수 있다. 단계 1201에서, 압축 메모리 관리 시스템은 미압축 페이지의 크기의 M배보다 더 큰 주소를 갖는 신규의 페이지 프레임을 할당하지 못하게 되어 있다. 단계 1202는 압축된 페이지의 크기의 M배보다 큰 실제 주소를 갖는 페이지 프레임을 수정된 페이지 리스트, 대기 페이지 리스트, 해제 페이지 리스트 및 제로 페이지 리스트에 부가하지 못하도록 한다. 이러한 페이지 프레임을 수정된 리스트에 부가하지 않고, 압축 메모리 관리 시스템은 상기 페이지를 수정된 페이지 리스트의 헤드에 부가하고, 강제로 페이지 기록을 하게 하며, 페이지 프레임을 폐기한다. 이러한 페이지 프레임을 대기 페이지 리스트, 해제 페이지 리스트 및 제로 페이지 리스트에 부가하지 않고, 압축 메모리 관리 시스템은 이러한 페이지 프레임을 폐기한다. 단계 1203은 미압축 페이지의 크기의 M배보다 더 큰 실제 주소를 갖는 페이지 프레임을 검색하는 상기 리스트를 분석한다. 이러한 페이지 프레임이 수정된 리스트 상에서 발견되는 경우, 그 프레임은 리스트의 헤드로 이동되며 디스크에 기록(write-to-disk) 동작이 실시되고, 페이지 프레임은 폐기된다. 다른 실시예에서, 기록 동작은 수정된 페이지 리스트 전체가 분석될 때까지 지연된다. 이러한 페이지 프레임이 다른 리스트 상에서 발견되는 경우, 그 프레임은 폐기된다. 단계 1204는 예를 들어 도 5의 방법을 사용하여 메모리 내의 페이지 프레임의 수를 M으로 감소시킨다. 단계 1205는 포인터 P1을 메모리 압축 디렉토리의 시작으로 설정한다. 단계 1206은 차례로 컴퓨터 시스템 상에서 실행되는 각각의 프로세스를 분석한다. 단계 1207은 단계 1206에서 선택된 프로세스에 의해 사용되는 페이지의 모든 페이지 엔트리를 분석한다. 단계 1208은 단계 1207에서 선택된 페이지 테이블 엔트리에 의해 인덱싱된 페이지의 실제 주소를 미압축 페이지 프레임의 크기의 M배와 같은 임계값과 비교한다. 주소가 상기 임계값보다 더 큰 경우, 단계 1209는 포인터 P1이 CTT 내의 미사용 엔트리를 가리킬 때까지 이 포인터를 증가시키고, 단계 1210은 단계 1208에서 식별된 실제 주소에 대응하는 CTT 엔트리를 복사하며, 단계 1211은 단계 1207에 의해 선택된 페이지 테이블 엔트리 내의 상기 주소를 P1에 포함된 값으로 수정한다. 단계 1207은 단계 1206에 의해 선택된 프로세스의 마지막 PTE가 분석되었을 때 종료되는 반면(동 도면에서 "완료"로 표시됨), 단계 1206은는 마지막 프로세스가 분석되었을 때 종료된다. 당업자에게는 단계 1206이 단계 1204의 실행이 종료되기 전에 초기화되는 프로세스를 분석하기만 하면 됨이 자명하다. 또한, 단계 1206이 종료되기 전에 종료되는 프로세스는 분석될 필요가 없는데, 그 이유는 위반하는 페이지 프레임이 단계 1201 내지 단계 1203에서 초기화되는 압축 메모리 관리 컴포넌트에 의해 관리되기 때문이다.
도 13은 허용가능 영역 밖에 있는 메모리 섹터가 해제-섹터 리스트에 부가되지 못하도록 하는 장치의 실시예를 나타낸 것이다. 이 실시예에서, 허용가능 영역은 물리 주소의 구간의 집합을 포함한다. 이 집합은 최대 K개의 구간을 포함한다. 각각의 구간은 그의 하한(lower limit) 및 상한(upper limit)에 의해 식별된다. 이 실시예에서, 해제-섹터 리스트는 해제-섹터 리스트 관리 로직(1313)에 의해 하드웨어로 관리된다. 메모리 섹터를 해제-섹터 리스트에 부가하는 로직(1313)의 일부는 신호(1314)에 의해 인에이블된다. 예를 들어, 신호가 0이면, 로직은 메모리 섹터를 해제-섹터 리스트에 부가하지 않는 반면, 신호가 1이면, 로직은 메모리 섹터를 해제-섹터 리스트에 부가할 수 있다. 해제-섹터 리스트에 부가될 메모리 섹터의 시작 주소는 레지스터(1301)에 저장되어 있다. 허용된 영역의 첫번째 구간의 시작 주소는 레지스터(1302)에 저장되어 있는 반면, 허용된 영역의 첫번째 구간의 종료 주소는 레지스터(1303)에 저장되어 있다. 보다 구체적으로는, 종료 주소는 대응하는 구간에 속하는 마지막 메모리 섹터의 시작 주소이다. 이 예시적인 실시예에서, 허용된 영역의 각각의 구간에 대해 한쌍의 레지스터(시작 주소용 및 종료 주소용)가 사용된다. 설명의 목적상, 첫번째 구간 및 마지막 구간, 구간 K에 대한 것[즉, 레지스터(1307, 1308)]만이 도시되어 있다. 각각의 레지스터 쌍에 대해, 로직은 한쌍의 비교기를 포함한다. 첫번째 비교기는 레지스터(1301) 및 구간의 시작 주소를 포함하는 레지스터에 연결된다. 예를 들어, 비교기(1304)는 레지스터(1301)의 값과 레지스터(1302)의 값을 비교하는 반면, 비교기(1309)는 레지스터(1301)에 저장되어 있는 값과 레지스터(1307)에 저장되어 있는 값을 비교한다. 이 비교기는 레지스터(1301)에 포함된 값이 비교기에 연결된 다른 레지스터에 포함된 값보다 크거나 같은 경우 "1"을 출력한다. 두번째 비교기는 레지스터(1301) 및 구간의 종료 주소를 포함하는 레지스터에 연결된다. 예를 들어, 비교기(1305)는 레지스터(1301)의 값과 레지스터(1303)의 값을 비교하는 반면, 비교기(1310)는 레지스터(1301)에 저장되어 있는 값과 레지스터(1308)에 저장되어 있는 값을 비교한다. 이 비교기는 레지스터(1301)에 포함된 값이 비교기에 연결된 다른 레지스터에 포함된 값보다 작거나 같은 경우 "1"을 출력한다. 2개의 비교기의 출력은 이어서 AND 게이트로의 입력으로서 사용된다. 예를 들어, 비교기(1304, 1305)의 출력은 AND 게이트(1306)로의 입력으로서 사용되고, 비교기(1309, 1310)의 출력은 AND 게이트(1311)의 입력으로서 사용된다. AND 게이트(1306)는 그의 입력 둘다가 1인 경우 출력으로서 "1"을 생성하고 그렇지 않은 경우 "0"을 생성한다. 그러므로, AND 게이트(1306)는 레지스터(1301)에 포함된 값이 레지스터(1302)에 저장된 값보다 크거나 같고 레지스터(1303)에 저장된 값보다 작거나 같은 경우, 즉 레지스터(1301)에 저장된 시작 주소를 갖는 메모리 섹터가 레지스터(1302)에 저장된 시작 주소 및 레지스터(1303)에 저장된 종료 주소에 의해 정의되는 허용가능 영역의 구간 내에 속하는 경우에만 "1"을 생성한다. 이 실시예에 따르면, 허용가능 영역에 의해 실제로 사용되는 구간의 수가 k(여기서, k는 최대값 K보다 작음)인 경우, 마지막 K-k개의 레지스터 쌍의 AND 게이트는 디스에이블된다. 양호한 실시예에서, 이것은 각각의 레지스터 쌍에 1-비트 플래그를 부가함으로써 달성되는데, 이 플래그는 레지스터 쌍이 허용가능 영역의 구간에 대응하는 경우에는 1로 설정되고, 그렇지 않은 경우에는 0으로 설정된다. 이어서 이 1-비트 플래그는 비교기들의 출력과 함께 AND 게이트로의 입력으로서 사용된다. 모든 AND 게이트의 출력은 OR 게이트(1312)로의 입력으로서 사용되며, OR 게이트(1312)는 그의 입력 중 적어도 하나가 "1"이면 "1"을 생성하고, 그렇지 않은 경우 "0"을 생성한다. 따라서, 게이트(1312)의 출력(1314)은 레지스터(1301)에 저장된 주소를 갖는 메모리 섹터가 허용가능 영역의 구간들 중 하나에 속하는 경우 1이 된다.
도 14는 해제-섹터 리스트로부터 허용가능 영역 밖에 있는 섹터를 제거하는 장치를 나타낸 것이다. 해제 메모리 섹터는 메모리(1401) 내의 임의의 물리 위치에 위치될 수 있지만, 메모리 섹터 내의 첫번째 바이트의 주소가 메모리 섹터 크기의 배수이어야 하는 제약이 있다(여기서, 설명의 목적상, 메모리 내의 첫번째 바이트의 주소가 1이라고 가정하며, 메모리 내의 첫번째 바이트의 주소가 0인 경우, 제약은 메모리 섹터의 첫번째 바이트의 주소 모듈로 메모리 섹터 1의 크기의 연산 결과 0이 얻어져야 한다는 것이다). 이 실시예에서, 해제 메모리 섹터는 인용 문헌으로서 열거된 특허들에 기술된 바와 같이, 연결 리스트로 구성된다. 양호하게는, 각각의 해제 메모리 섹터는 포인터를 포함하며, 이 포인터는 해제 리스트 내의 그 다음 메모리 섹터의 주소를 포함한다. 예를 들어, 포인터는 메모리 섹터의 처음 4 바이트에 포함될 수 있다. 도 14에 도시한 바와 같이, 메모리 섹터(1402)는 리스트의 헤드에 있으며, 그의 포인터(1406)는 두번째 메모리 섹터(1403)의 주소를 포함한다. 계속하여 리스트를 아래쪽을 내려가면, 섹터(1403) 내의 포인터(1407)는 리스트 내의 세번째 메모리 섹터(1404)의 주소를 포함하고, 이 섹터(1404) 다음에는 네번째 메모리 섹터(1405)가 뒤따라오며, 이하 마찬가지이다. 섹터(1405)의 주소는 섹터(1404)에 포함된 포인터(1408)에 저장된다.
이 실시예에서, 해제-섹터 리스트는 2개의 레지스터(1410, 1411)를 사용하여 관리된다. 32-비트 머신의 경우, 이들 레지스터 둘다는 길이가 4 바이트이고, 64-비트 머신의 경우, 이들 레지스터는 길이가 8 바이트이다. 레지스터(1410)는 해제-섹터 리스트의 헤드에 있는 메모리 섹터의 주소를 포함한다. 레지스터(1411)는 헤드 바로 다음에 오는 메모리 섹터의 주소를 포함한다. 해제 메모리 섹터에 대한 요청이 수신되고 그 리스트가 비어 있는 경우, 레지스터(1410)의 내용이 반환된다. 동시에, 판독/기록 유닛(1412)은 메모리 섹터의 처음 4 바이트를 판독하는데, 그의 주소는 레지스터(1411)에 있다. 이 실시예에서, 이들 4 바이트는 해제-섹터 리스트 상의 그 다음 메모리 섹터의 주소를 포함한다. 당업자라면 이 방식이 해제-섹터 리스트 내의 다른 위치를 갖는, 서로 다른 길이의 포인터를 수용하기 위해 또한 해제-섹터 리스트가 해제-섹터 자체에 존재하지 않는 데이터 구조에 의해 관리되는 경우에 이 방식을 적용하기 위해 어떻게 수정될 수 있는지를 잘 알 것이다. 해제-섹터 리스트가 비어 있음을 나타내고 또 해제 메모리-섹터의 수를 추적하는 데 사용되는 회로도 또한 공지되어 있으며 도시하지 않았다. 해제-섹터 리스트로부터 허용가능 영역 밖의 모든 메모리 섹터를 제거하라는 명령이 하드웨어에 의해 수신될 때, 로직(1413)이 호출된다. 이 로직은 이하의 동작을 수행한다.
1. 해제-메모리 섹터 리스트로부터 해제-메모리 섹터의 할당을 디스에이블시킴.
2. 레지스터(1410)의 값을 허용가능 영역의 설명(1414)과 비교함.
3. 리스트의 헤드가 허용가능 영역 밖에 있는 경우, 설명(1414)에 포함된 값을 레지스터(1410)로 복사함으로써 섹터를 폐기하고 판독/기록 유닛(1412)의 동작을 호출하며, 다시 단계 2로 감.
4. 해제-메모리 섹터 리스트로부터 해제-메모리 섹터의 할당을 인에이블하고, 레지스터(1410)의 값을 레지스터(1415)로 복사하고 레지스터(1411)의 값을 레지스터(1416)로 복사하며, 제어를 리스트 제어 로직(1417)으로 넘김.
유의할 점은 해제-섹터 리스트로부터 해제-메모리 섹터를 할당하는 것을 디스에이블하는 것은 일반적으로 오랫동안 머신의 동작을 방해하지는 않는다는 것이다. 최악의 시나리오는 허용가능 영역 밖의 모든 메모리 섹터가 해제-섹터 리스트 상에서 허용가능 영역 내의 임의의 메모리 섹터 이전에 있을 때 발생한다. 물리-실제 맵을 포함하도록 떼어 놓고 데이터 구조를 지원하는 허용불가 영역의 부분만이 이 단계에 관여하고 있으며 CTT와 중첩하는 해제-메모리 섹터나 메모리 압축에 의해 사용된 데이터 구조는 해제-메모리 리스트 상에 있을 수 없음을 상기하기 바란다.
허용가능 영역의 설명(1414)은 한쌍의 레지스터 또는 레지스터쌍들의 집합으로서 구현될 수 있다.
로직(1413)이 리스트 청소 제어 로직(list cleaning control logic)(1417)으로 제어를 넘길 때, 레지스터 3(1415)의 내용은 허용가능 영역 내의 주소이다.
로직(1417)은 이하의 동작을 수행한다.
A. 레지스터 3(1415)의 값을 레지스터 1(1410)의 값과 비교함. 비교가 성공적인 경우, 해제-메모리 섹터 리스트로부터 해제-메모리 섹터를 할당하는 것을 디스에이블하고 그렇지 않은 경우 할당을 인에이블된 상태로 둠.
B. 이전의 동작과 병렬로, 레지스터 4(1416)에 포함된 값을 허용가능 영역의 설명(1414)과 비교함.
레지스터 4(1416)에 포함된 주소가 허용가능 영역 내에 있는 경우, 이하의 동작을 수행한다.
i. 레지스터 4(1416)에 포함된 값을 레지스터 3(1415)으로 복사함.
ii. 판독/기록 유닛(1412)을 호출하여 상기 단계 1 동안에 레지스터 4(1416)에 있는 주소를 갖는 메모리-섹터의 처음 4 바이트를 레지스터 4(1416)로 읽어들임.
레지스터 4(1416)에 포함된 주소가 허용가능 영역 내에 있지 않은 경우,
1. 판독/기록 유닛(1412)을 호출하고 상기 단계 1 동안에 레지스터 4(1416)에 있는 주소를 갖는 메모리-섹터의 처음 4 바이트를 레지스터 4(1416)로 읽어들임.
2. 레지스터 4(1416)의 내용이 허용가능 영역 내에 있을 때까지 단계 1을 반복함.
3. 레지스터 4(1416)의 내용을 판독/기록 유닛(1412)을 사용하여 레지스터 3(1415)에 있는 주소를 갖는 메모리-섹터의 처음 4 바이트로 복사함.
4. 레지스터 3(1415)의 내용이 레지스터 1(1410)의 내용과 같은 경우, 레지스터 4(1416)의 내용을 레지스터 2(1411)로 복사함.
5. 단계 B로 되돌아감.
로직(1417)은 또한 리스트의 테일(tail)에 도달될 때 동작들을 적절히 종료시키는 특징도 갖는다. 로직(1417)이 활성인 동안, 레지스터 3은 항상 허용가능 범위 내의 메모리-섹터를 가리키고 있으며, 레지스터 4의 내용은 그 내용이 허용가능 영역 내의 주소와 같을 때까지 변한다. 레지스터 4의 값을 레지스터 3(1415) 내의 주소를 갖는 섹터의 처음 4 바이트로 복사함으로써, 로직은 해제-섹터 리스트로부터 허용가능 범위 밖에 있는 그 메모리-섹터를 "분리(detach)"시킨다. 레지스터 3(1415)의 내용이 레지스터 1(1410)의 내용과 같은 동안 해제-섹터를 할당하는 것을 허용하지 않음으로써, 해제-섹터 리스트의 헤드에 대한 동작을 제어하기 위한 회로에 대한 변경이 최소화된다.
본 발명의 양호한 실시예가 Windows 95, Windows 98, Windows NT, Windows 2000, Linux, AIX 및 UNIX, MacOS, IBM OS/400 등의 모든 다른 버전 등의 페이지 오퍼레이팅 시스템에 기초하여 기술되었다. 당업자라면 비페이지 오퍼레이팅 시스템이 본 발명의 실시예들에 똑같이 적용가능함을 잘 알 것이다.
본 발명이 그의 어떤 양호한 실시예들을 참조하여 기술되어 있지만, 당업자라면 본 발명의 범위를 벗어나지 않고 형태 및 상세에 있어서의 여러가지 변경이 본 발명 내에서 행해질 수 있음을 이해할 것이다.

Claims (10)

  1. 데이터를 압축된 형태로 저장하는 메인 메모리 및 압축 해제된 데이터를 저장하는 프로세서 캐시를 갖는 컴퓨터 시스템에서, 상기 메인 메모리의 데이터를 압축된 상태에서 미압축 상태로 변환하는 방법으로서,
    상기 메인 메모리의 사용된 부분을 목표값으로 감소시키는 단계와;
    미압축 데이터를 압축하는 데 사용되는 압축기를 디스에이블하는 단계와;
    상기 메인 메모리의 상기 압축된 데이터를 압축 해제하는 단계와;
    상기 압축 해제된 데이터를 실제 주소(real address)와 같은 물리 주소(physical address)로 이동시키는 단계와;
    상기 단계들에서 사용된 데이터 구조 및 압축된 메모리 디렉토리에 의해 점유된 메모리를 릴리스(release)하는 단계
    를 포함하는 데이터 변환 방법.
  2. 제1항에 있어서, 상기 압축된 메인 메모리의 사용된 부분을 감소시키는 단계는 상기 메인 메모리 내의 페이지 프레임의 수를 임계값보다 낮은 수로 감소시키는 단계를 포함하며,
    상기 임계값과 페이지의 크기를 곱한 것이 목표값과 같은 것인 데이터 변환 방법.
  3. 제2항에 있어서, 상기 메인 메모리 내의 페이지 프레임의 수를 임계값보다 낮은 수로 감소시키는 단계는,
    새로운 페이지 프레임을 실제 메모리 공간에 부가하는 것을 디스에이블하는 단계와;
    제로 리스트(zero list)로부터 모든 페이지 프레임을 제거하는 단계와;
    상기 메인 메모리를 사용하여 프로세스의 작업 세트(working set)로부터 페이지를 프루닝(pruning)하는 단계와;
    상기 제로 리스트로부터 상기 프루닝된 페이지를 제거하는 단계를 더 포함하는 것인 데이터 변환 방법.
  4. 제2항에 있어서, 상기 메인 메모리 내의 페이지 프레임의 수에 대한 상기 임계값은 물리 메모리의 크기 - 상기 압축된 메모리 디렉토리의 크기 - 상기 데이터 구조의 크기보다 크지 않은 것인 데이터 변환 방법.
  5. 제1항에 있어서, 상기 메인 메모리를 메모리 섹터로 분할하는 단계와;
    해제-섹터 리스트(free-sector list)를 사용하여 미사용 메모리 섹션을 관리하는 단계를 더 포함하고,
    상기 메인 메모리의 상기 압축된 데이터를 압축 해제하는 단계는,
    실제 주소의 허용가능 영역을 정의하는 단계와,
    상기 해제-섹터 리스트로부터 상기 허용가능 영역 밖의 물리 주소를 갖는 섹터를 제거하는 단계와,
    상기 허용가능 영역 밖의 실제 주소를 상기 허용가능 영역 내의 실제 주소로 변경하는 단계와,
    압축/압축 해제의 단위를 나타내는 압축된 메모리 라인을 압축 해제하는 단계를 포함하는 것인 데이터 변환 방법.
  6. 제5항에 있어서, 상기 허용가능 영역을 정의하는 단계는,
    임계값을 정의하는 단계와,
    상기 허용가능 영역을 상기 임계값 아래의 실제 주소의 세트 - 상기 압축된 메모리 디렉토리에 의해 사용된 상기 물리 주소와 같게 하는 단계를 포함하는 것인 데이터 변환 방법.
  7. 제6항에 있어서, 상기 임계값은 상기 메인 메모리의 사용된 부분의 상기 목표값 + 상기 압축된 메모리 디렉토리의 크기보다 더 큰 것인 데이터 변환 방법.
  8. 제6항에 있어서, 상기 임계값은 상기 메인 메모리의 물리적 크기 - 모핑에 의해 사용된 데이터 구조의 크기보다 작은 것인 데이터 변환 방법.
  9. 제5항에 있어서, 오퍼레이팅 시스템에 의해 페이지 방식 가상 메모리(paged virtual memory)를 관리하는 단계를 더 포함하고,
    각각의 프로세스에 의해 사용되는 메모리 상에서 수행되는, 모든 압축된 메모리 라인을 압축 해제하는 단계는,
    상기 프로세스의 페이지 테이블을 획득하는 단계와,
    상기 메인 메모리에 포함된 페이지에 대응하는 상기 프로세스의 상기 페이지 테이블 내의 각각의 페이지 테이블 엔트리에 대해,
    상기 페이지의 모든 메모리 라인을 캐시 내로 읽어들이는 단계, 및 상기 메모리 라인의 내용을 상기 메인 메모리로 라이트백(write back)하는 단계를 적용하는 단계를 포함하는 것인 데이터 변환 방법.
  10. 데이터를 압축된 형태로 저장하는 메인 메모리 및 압축 해제된 데이터를 저장하는 프로세서 캐시를 갖는 컴퓨터 시스템에서, 상기 메인 메모리의 데이터를 압축된 상태에서 미압축 상태로 변환하는 장치로서,
    상기 메인 메모리의 사용된 부분을 목표값으로 감소시키는 수단과;
    미압축 데이터를 압축하는 데 사용되는 압축기를 디스에이블하는 수단과;
    상기 메인 메모리의 상기 압축된 데이터를 압축 해제하는 수단과;
    상기 압축 해제된 데이터를 실제 주소와 같은 물리 주소로 이동시키는 수단과;
    상기 단계들에서 사용된 데이터 구조 및 압축된 메모리 디렉토리에 의해 점유된 메모리를 릴리스(release)하는 수단
    을 포함하는 데이터 변환 장치.
KR1020057008502A 2002-12-12 2003-12-05 메모리 압축된 머신을 모핑하는 방법 및 장치 KR100734823B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/317,590 2002-12-12
US10/317,590 US6956507B2 (en) 2002-12-12 2002-12-12 Method and apparatus for morphing memory compressed machines

Publications (2)

Publication Number Publication Date
KR20050088078A true KR20050088078A (ko) 2005-09-01
KR100734823B1 KR100734823B1 (ko) 2007-07-06

Family

ID=32506166

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020057008502A KR100734823B1 (ko) 2002-12-12 2003-12-05 메모리 압축된 머신을 모핑하는 방법 및 장치

Country Status (9)

Country Link
US (1) US6956507B2 (ko)
EP (1) EP1588265B1 (ko)
KR (1) KR100734823B1 (ko)
CN (1) CN100394405C (ko)
AT (1) ATE507617T1 (ko)
AU (1) AU2003292388A1 (ko)
CA (1) CA2511752C (ko)
DE (1) DE60336929D1 (ko)
WO (1) WO2004053697A2 (ko)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1176833A3 (en) * 2000-07-25 2012-06-27 Panasonic Corporation Image decoding method, image decoding apparatus, and data storage medium
US7761497B1 (en) * 2001-07-13 2010-07-20 Vignette Software, LLC Storage medium having a manageable file directory structure
US7733888B2 (en) * 2002-06-04 2010-06-08 Alcatel-Lucent Usa Inc. Pointer allocation by prime numbers
US7146058B2 (en) * 2003-04-26 2006-12-05 Hewlett-Packard Development Company, L.P. Compression of images using object maps
JPWO2005033952A1 (ja) * 2003-09-30 2006-12-14 ソニー株式会社 情報再生装置および方法、並びにプログラム
US7240177B2 (en) * 2004-05-27 2007-07-03 International Business Machines Corporation System and method for improving performance of dynamic memory removals by reducing file cache size
US7383399B2 (en) * 2004-06-30 2008-06-03 Intel Corporation Method and apparatus for memory compression
JP4615337B2 (ja) * 2005-03-16 2011-01-19 株式会社日立製作所 ストレージシステム
US7533234B2 (en) * 2005-05-13 2009-05-12 Intel Corporation Method and apparatus for storing compressed code without an index table
US20080010324A1 (en) * 2006-06-25 2008-01-10 Michael Stebner System and method for high speed device access
US7962700B2 (en) * 2006-09-06 2011-06-14 International Business Machines Corporation Systems and methods for reducing latency for accessing compressed memory using stratified compressed memory architectures and organization
US20080229050A1 (en) * 2007-03-13 2008-09-18 Sony Ericsson Mobile Communications Ab Dynamic page on demand buffer size for power savings
US7689577B2 (en) * 2007-04-16 2010-03-30 Hewlett-Packard Development Company, L.P. Rearranging data sections within a page file
US7895242B2 (en) * 2007-10-31 2011-02-22 Microsoft Corporation Compressed storage management
US8037251B2 (en) 2008-03-04 2011-10-11 International Business Machines Corporation Memory compression implementation using non-volatile memory in a multi-node server system with directly attached processor memory
US7966455B2 (en) * 2008-03-04 2011-06-21 International Business Machines Corporation Memory compression implementation in a multi-node server system with directly attached processor memory
US7984240B2 (en) 2008-03-04 2011-07-19 International Business Machines Corporation Memory compression implementation in a system with directly attached processor memory
US7930483B2 (en) * 2008-03-04 2011-04-19 International Business Machines Corporation Associativity implementation in a system with directly attached processor memory
US9507811B2 (en) * 2008-12-22 2016-11-29 Oracle International Corporation Compressed data page with uncompressed data fields
US8347055B2 (en) * 2009-06-30 2013-01-01 Incard S.A. Method to defrag a memory of an IC card
CN102447604B (zh) * 2010-09-30 2016-01-27 迈普通信技术股份有限公司 路由表信息存储方法以及路由设备
US8738962B2 (en) 2010-11-17 2014-05-27 International Business Machines Corporation Memory mirroring with memory compression
US8495267B2 (en) 2010-11-24 2013-07-23 International Business Machines Corporation Managing shared computer memory using multiple interrupts
JP5712609B2 (ja) * 2010-12-24 2015-05-07 富士通株式会社 データ処理装置及びデータ記録方法
US9378560B2 (en) * 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
US10102148B2 (en) 2013-06-13 2018-10-16 Microsoft Technology Licensing, Llc Page-based compressed storage management
US9612833B2 (en) * 2014-02-28 2017-04-04 Intel Corporation Handling compressed data over distributed cache fabric
US9684625B2 (en) 2014-03-21 2017-06-20 Microsoft Technology Licensing, Llc Asynchronously prefetching sharable memory pages
US9471237B1 (en) * 2015-02-04 2016-10-18 Amazon Technologies, Inc. Memory consumption tracking
US9632924B2 (en) 2015-03-02 2017-04-25 Microsoft Technology Licensing, Llc Using memory compression to reduce memory commit charge
US10037270B2 (en) 2015-04-14 2018-07-31 Microsoft Technology Licensing, Llc Reducing memory commit charge when compressing memory
CN107193642A (zh) * 2016-03-14 2017-09-22 阿里巴巴集团控股有限公司 任务数据压缩切换方法、宜压缩程度评价方法及相关装置
US11481255B2 (en) * 2019-09-10 2022-10-25 International Business Machines Corporation Management of memory pages for a set of non-consecutive work elements in work queue designated by a sliding window for execution on a coherent accelerator
EP4170536A4 (en) * 2020-07-10 2023-08-02 Huawei Technologies Co., Ltd. DATA PROCESSING METHOD AND DEVICE, AND STORAGE MEDIA
CN112540984B (zh) * 2020-11-23 2023-10-03 成都佳华物链云科技有限公司 数据存储方法、查询方法、装置、电子设备及存储介质

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4430246C2 (de) * 1994-08-25 1997-08-28 Siemens Ag Verfahren und Anordnung zum Überwachen von Stromversorgungsnetzen
US5812817A (en) * 1994-10-17 1998-09-22 International Business Machines Corporation Compression architecture for system memory application
US5729228A (en) * 1995-07-06 1998-03-17 International Business Machines Corp. Parallel compression and decompression using a cooperative dictionary
US5802553A (en) * 1995-12-19 1998-09-01 Intel Corporation File system configured to support variable density storage and data compression within a nonvolatile memory
US5864859A (en) * 1996-02-20 1999-01-26 International Business Machines Corporation System and method of compression and decompression using store addressing
US5761536A (en) * 1996-08-21 1998-06-02 International Business Machines Corporation System and method for reducing memory fragmentation by assigning remainders to share memory blocks on a best fit basis
US6279092B1 (en) * 1999-01-06 2001-08-21 International Business Machines Corporation Kernel identification for space management in compressed memory systems
US6341325B2 (en) * 1999-01-12 2002-01-22 International Business Machines Corporation Method and apparatus for addressing main memory contents including a directory structure in a computer system
US6822589B1 (en) * 1999-01-29 2004-11-23 Quickshift, Inc. System and method for performing scalable embedded parallel data decompression
US7538694B2 (en) * 1999-01-29 2009-05-26 Mossman Holdings Llc Network device with improved storage density and access speed using compression techniques
US6353871B1 (en) * 1999-02-22 2002-03-05 International Business Machines Corporation Directory cache for indirectly addressed main memory
US6349372B1 (en) * 1999-05-19 2002-02-19 International Business Machines Corporation Virtual uncompressed cache for compressed main memory
US6779088B1 (en) * 2000-10-24 2004-08-17 International Business Machines Corporation Virtual uncompressed cache size control in compressed memory systems
US6539460B2 (en) * 2001-01-19 2003-03-25 International Business Machines Corporation System and method for storing data sectors with header and trailer information in a disk cache supporting memory compression
US6877081B2 (en) * 2001-02-13 2005-04-05 International Business Machines Corporation System and method for managing memory compression transparent to an operating system
US7039769B2 (en) * 2002-05-30 2006-05-02 International Business Machines Corporation Direct addressed shared compressed memory system
US7958289B2 (en) * 2002-08-08 2011-06-07 International Business Machines Corporation Method and system for storing memory compressed data onto memory compressed disks

Also Published As

Publication number Publication date
KR100734823B1 (ko) 2007-07-06
EP1588265A2 (en) 2005-10-26
ATE507617T1 (de) 2011-05-15
US20040117578A1 (en) 2004-06-17
EP1588265B1 (en) 2011-04-27
AU2003292388A1 (en) 2004-06-30
CN100394405C (zh) 2008-06-11
DE60336929D1 (de) 2011-06-09
US6956507B2 (en) 2005-10-18
CA2511752A1 (en) 2004-06-24
AU2003292388A8 (en) 2004-06-30
WO2004053697A3 (en) 2006-01-05
WO2004053697A2 (en) 2004-06-24
CA2511752C (en) 2009-06-09
CN1799032A (zh) 2006-07-05

Similar Documents

Publication Publication Date Title
KR100734823B1 (ko) 메모리 압축된 머신을 모핑하는 방법 및 장치
USRE43483E1 (en) System and method for managing compression and decompression of system memory in a computer system
US7089391B2 (en) Managing a codec engine for memory compression/decompression operations using a data movement engine
JP5255348B2 (ja) クラッシュダンプ用のメモリアロケーション
US6857045B2 (en) Method and system for updating data in a compressed read cache
EP1969475B1 (en) Data compression method for supporting virtual memory management in a demand paging system
US6968424B1 (en) Method and system for transparent compressed memory paging in a computer system
US6633968B2 (en) Pre-fetching of pages prior to a hard page fault sequence
US8307148B2 (en) Flash management techniques
Franaszek et al. Algorithms and data structures for compressed-memory machines
US9081692B2 (en) Information processing apparatus and method thereof
JP6608468B2 (ja) ストレージ装置及びその制御方法
US20090164715A1 (en) Protecting Against Stale Page Overlays
KR20080030756A (ko) 플래시 메모리 파일 시스템을 효율적으로 관리하기 위한장치 드라이버 및 방법
KR100443320B1 (ko) 메모리 저장 장치를 관리하기 위한 시스템 및 방법과, 컴퓨터 판독가능한 기록 매체
US20120084531A1 (en) Adjusting memory allocation of a partition using compressed memory paging statistics
US6889296B2 (en) Memory management method for preventing an operating system from writing into user memory space
US20100161934A1 (en) Preselect list using hidden pages
US20230142948A1 (en) Techniques for managing context information for a storage device
US11354233B2 (en) Method and system for facilitating fast crash recovery in a storage device
JP4792065B2 (ja) データ記憶方法
JPH0399345A (ja) データ出力制御方法

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20110502

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee