KR102069940B1 - 페이지 기반 압축 저장 관리 - Google Patents

페이지 기반 압축 저장 관리 Download PDF

Info

Publication number
KR102069940B1
KR102069940B1 KR1020167000940A KR20167000940A KR102069940B1 KR 102069940 B1 KR102069940 B1 KR 102069940B1 KR 1020167000940 A KR1020167000940 A KR 1020167000940A KR 20167000940 A KR20167000940 A KR 20167000940A KR 102069940 B1 KR102069940 B1 KR 102069940B1
Authority
KR
South Korea
Prior art keywords
memory
pages
memory pages
page
compressed
Prior art date
Application number
KR1020167000940A
Other languages
English (en)
Other versions
KR20160019949A (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 KR20160019949A publication Critical patent/KR20160019949A/ko
Application granted granted Critical
Publication of KR102069940B1 publication Critical patent/KR102069940B1/ko

Links

Images

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
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • 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
    • 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)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

메모리는 복수의 페이지로 이루어지고, 상이한 페이지들은 상이한 우선순위 레벨들을 가질 수 있다. 적어도 유사한 우선순위 레벨을 갖는 메모리 페이지들의 집합이 식별되어, 적어도 유사한 우선순위 레벨을 갖는 추가 메모리 페이지 집합으로 압축된다. 메모리 페이지들의 추가 집합은 압축된 메모리 페이지들의 집합과 동일한 타입의 페이지인 것으로 분류된다(예를 들어, 용도 재설정될 수 있는 메모리 페이지들). 따라서, 특정한 메모리 페이지 집합은 동일한 타입이면서 적어도 유사한 우선순위 레벨들에 대응하는 메모리 페이지들의 다른 집합으로 압축될 수 있다. 그러나, 압축으로 인해, 메모리 페이지 집합이 압축되어지는 메모리 페이지들의 수량이 감소되고, 따라서 메모리 내에 저장될 수 있는 데이터의 양이 증가한다.

Description

페이지 기반 압축 저장 관리{PAGE-BASED COMPRESSED STORAGE MANAGEMENT}
본 발명은 페이지 기반 압축 저장 관리에 관한 것이다.
컴퓨터 기술이 진보함에 따라, 컴퓨터 프로세서들의 성능이 높아졌다. 그러나, 그러한 컴퓨터 프로세서의 성능이 때로는 컴퓨터 내의 다른 병목에 의해 방해를 받는다. 예를 들어, 하드 디스크 드라이브로부터 랜덤 액세스 메모리(RAM)으로의 데이터 전송의 속도는 컴퓨터 성능의 병목이다. 컴퓨터 내에서의 병목의 영향을 감소시키는 방법 중 하나는 RAM 내에 더 많은 데이터를 저장하는 것이다. 그러나, RAM의 비용은 컴퓨터 내에서 매우 큰 용량의 RAM을 이용하는 비용이 통상적으로 막대할 정도로 충분히 높게 남아있다.
본 개요는 이하의 상세한 설명에서 더 설명되는 개념들 중 선택된 것들을 단순한 형태로 소개하기 위해 제공된 것이다. 본 개요는 청구되는 발명의 주제의 핵심적인 특징 또는 본질적인 특징을 식별하도록 의도된 것이 아니며, 청구되는 발명의 주제의 범위를 제한하기 위해 사용되도록 의도되지 않는다.
하나 이상의 양태에 따르면, 메모리 페이지들의 제1 집합이 식별된다. 메모리 페이지들의 제1 집합은 메모리 페이지들의 제2 집합으로 이루어진 영역 내로 압축된다. 압축된 메모리 페이지들로 영역을 실질적으로 채운 후에, 메모리 관리자는 메모리 페이지들의 제2 집합을 용도 재설정하도록 허용된다. 또한, 메모리 페이지들의 제1 집합 중의 적어도 하나의 메모리 페이지에 대한 요청이 메모리 관리자로부터 수신될 수 있다. 요청에 응답하여, 압축된 적어도 하나의 메모리 페이지가 검색되고(retrieved) 압축해제되어 메모리 관리자에 리턴된다.
하나 이상의 양태에 따르면, 컴퓨팅 디바이스는 메모리, 메모리의 페이지들을 관리하도록 구성된 메모리 관리자, 및 압축 저장 관리자를 포함한다. 압축 저장 관리자는 복수의 메모리 페이지를 식별하도록 구성되며, 그 복수의 메모리 페이지 각각은 복수의 우선순위 레벨 중 대응하는 우선순위 레벨을 갖는다. 압축 저장 관리자는 복수의 우선순위 레벨 중 적어도 유사한 우선순위 레벨을 각각 갖는 메모리 페이지들의 제1 집합을 식별하고, 메모리 페이지들의 제1 집합을 메모리 페이지들의 제2 집합으로 이루어진 영역 내로 압축하도록 더 구성되고, 메모리 페이지들의 제2 집합은 복수의 우선순위 레벨 중 적어도 유사한 우선순위 레벨을 각각 갖는다. 압축된 메모리 페이지들로 영역을 실질적으로 채운 후에, 메모리 관리자는 메모리 페이지들의 제2 집합을 용도 재설정하도록 허용된다.
도면들 전체에서 동일한 참조 번호들이 유사한 부분들을 지칭하기 위해 이용된다.
도 1은 하나 이상의 실시예에 따른 페이지 기반 압축 저장 관리를 이용하는 예시적인 시스템을 도시한다.
도 2는 하나 이상의 실시예에 따른 페이징된 메모리의 예시적인 레코드를 도시한다.
도 3은 하나 이상의 실시예에 따라 메모리 페이지들을 압축하는 예를 도시한다.
도 4는 하나 이상의 실시예에 따른 페이지 기반 압축 저장 관리를 구현하기 위한 예시적인 프로세스를 도시하는 흐름도이다.
도 5는 하나 이상의 실시예에 따른 예시적인 메모리 페이지 맵을 도시한다.
도 6은 하나 이상의 실시예에 따른 예시적인 영역 맵을 도시한다.
도 7은 본원에 설명된 다양한 기술들을 구현할 수 있는 하나 이상의 시스템 및/또는 디바이스를 나타내는 예시적인 컴퓨팅 디바이스를 포함하는 예시적인 시스템을 도시한다.
여기에서는 페이지 기반 압축 저장 관리가 논의된다. 시스템 내의 메모리는 메모리 페이지(또는 간단하게는 페이지)라고 지칭되는 복수의 블록 또는 부분으로 이루어지며, 상이한 메모리 페이지들은 상이한 우선순위 레벨들을 가질 수 있다. 메모리 페이지들은 용도 재설정될 수 있는 것(예를 들어, 동일 또는 다른 프로그램을 위해서, 또는 시스템 내의 다른 용도를 위해서와 같이 무언가 다른 것을 위해 재이용될 수 있는 것), 또는 용도 재설정될 수 없는 것으로서 분류될 수 있다. 적어도 유사한 우선순위 레벨을 갖는 메모리 페이지들의 집합이 식별되어 적어도 유사한 우선순위 레벨을 갖는 메모리 페이지들의 추가 집합으로 압축된다. 메모리 페이지들의 추가 집합은 압축된 메모리 페이지들의 집합과 동일한 타입의 페이지인 것으로 분류되고, 압축된 메모리 페이지들의 집합이 해제되어, 시스템의 메모리 관리자가 그 메모리 페이지들의 집합을 갖고서 무엇이든 할 수 있게 한다. 따라서, 메모리 페이지들의 특정 집합은 동일한 타입(예를 들어, 스탠바이 또는 재배정가능)이면서 적어도 유사한 우선순위 레벨들에 대응하는 메모리 페이지들의 다른 집합으로 압축될 수 있다. 그러나, 압축으로 인해, 메모리 페이지들의 집합이 압축되어지는 메모리 페이지들의 수량이 감소되고, 따라서 메모리 내에 저장될 수 있는 데이터의 양이 증가한다.
도 1은 하나 이상의 실시예에 따른 페이지 기반 압축 저장 관리를 이용하는 예시적인 시스템(100)을 도시한다. 시스템(100)은 메모리 관리자(102), 압축 저장 관리자(104), 및 페이징된 메모리(106)를 포함한다. 일반적으로, 메모리 관리자(102)는 페이징된 메모리(106) 내에서의 데이터의 저장을 관리한다. 메모리 관리자(102)는 시스템(100) 내의 다양한 프로그램들(108)에 페이징된 메모리(106)의 부분들을 할당한다. 프로그램들(108)은 애플리케이션들, 운영 체제 프로그램들, 또는 다른 컴포넌트들 또는 모듈들일 수 있다. 메모리 관리자(102)는 페이징된 메모리(106)로부터 데이터를 검색하고 페이징된 메모리(106)에 데이터를 기입하기 위해, 이 프로그램들(108)로부터의 요청들을 수신할 수 있다. 아래에 더 상세하게 논의되는 바와 같이, 메모리 관리자(102)는 또한 페이징된 메모리(106)의 하나 이상의 부분을 압축 형태로의 데이터 저장을 위해 압축 저장 관리자(104)에 할당한다. 페이징된 메모리(106)는 예를 들어 휘발성 메모리(예를 들어, RAM) 또는 비휘발성 메모리(예를 들어, 플래쉬 메모리)와 같은 임의의 타입의 CPU(Central Processing Unit) 어드레싱가능한 메모리일 수 있다.
시스템(100)은 하나 이상의 디바이스를 나타낸다. 하나 이상의 실시예에서, 시스템(100) 내에 도시된 컴포넌트들(102-108)은 동일한 컴퓨팅 디바이스의 부분으로서 포함된다. 대안적으로, 컴포넌트들은 둘 이상의 디바이스에 걸쳐 분산될 수 있다.
하나 이상의 실시예에서, 메모리 관리자(102)는 페이징을 이용하여, 페이징된 메모리(106)를 관리한다. 메모리 관리자(102)는 메모리(106)(예를 들어, RAM)를 페이지들로 조직화하고, 그 페이지들은 특정한(예를 들어, 고정된) 사이즈 유닛의 데이터이다. 페이징하는 동작은 특정 타입의 데이터(예를 들어, 프라이빗 데이터)가 메모리(106) 내에 있지 않을 때 그 데이터에 대해 백킹 파일(backing file) 또는 페이지 파일(예를 들어, 페이지 파일(110))로부터 페이지들의 유닛으로 데이터를 판독하는 것을 지칭한다. 페이징하는 동작은 또한 특정 타입의 데이터(예를 들어, 프라이빗 데이터를 저장하는 프라이빗 페이지들, 또는 이미지 또는 데이터 파일들을 저장하는 페이지들)에 대해, 더티 데이터(dirty data)를 페이지들의 유닛들로 백킹 파일 또는 페이지 파일(예를 들어, 페이지 파일(110)) 내에 다시 기입하는 것을 지칭한다. 그러한 페이징 기술들은 본 기술분야의 숙련된 자들에게 잘 알려져 있다.
본원의 논의에서, 관리자(102)가 메모리 관리자이며, 메모리의 블록들 또는 부분들은 메모리 페이지들(예를 들어, RAM의 페이지들)이라는 것이 언급된다. 본원에 논의된 기술들은 다양한 타입의 저장 자원들(예를 들어, 다른 타입의 메모리)에 적용되며, 페이징된 메모리(106)는 다양한 타입의 저장 자원들 중 임의의 것일 수 있음을 알아야 한다. 본원에 논의된 기술들을 이용하면, 메모리 페이지들은 임의의 저장 자원의 블록들 또는 부분들을 지칭하며, 메모리 관리자(102)는 임의의 주어진 시간에서 어느 블록들 또는 부분들이 저장 자원에 저장되는지를 관리하고, 저장 자원으로부터 다른 저장 자원(예를 들어, 디스크 드라이브)으로의 블록들 또는 부분들의 전송을 조정하고, 다른 저장 자원으로부터 저장 자원으로의 블록들 또는 부분들의 검색을 조정한다.
페이징된 메모리(106)는 임의의 주어진 시간에서 복수의 상이한 타입의 페이지들 중 하나로서 각각 분류될 수 있는 복수의 페이지를 포함하며, 이러한 분류는 시간에 따라 변할 수 있다. 한 타입의 메모리 페이지는 작업중(working) 또는 배정된(assigned) 페이지이며, 그것은 프로그램(108)에 할당되었고 프로그램(108)에 의해 현재 이용되고 있는 메모리 페이지이다. 현재 이용되고 있는 메모리 페이지는 임계 시간량(예를 들어, 선행하는 20초) 내에서 프로그램(108)에 의해 액세스되었거나, 그렇지 않으면 메모리 페이지가 메모리 관리자(102)에 의해 용도 재설정되지 않는 방식으로 프로그램(108)에 의해 다르게 액세스되고 있는 메모리 페이지를 지칭한다. 메모리 페이지를 용도 재설정하는 것은, 메모리 페이지가 동일 또는 다른 프로그램을 위해 또는 시스템 내의 다른 용도를 위해 상이한 데이터를 저장하는 것과 같이, 무언가 다른 것을 위해 메모리 관리자(102)에 의해 재이용되는 것을 지칭한다.
다른 타입의 메모리 페이지는 스탠바이(standby) 또는 재배정가능(re-assignable) 페이지이며, 그것은 프로그램(108)에 할당되었고 프로그램(108)에 의해 현재 이용되고 있지 않은 메모리 페이지이다. 현재 이용되고 있지 않은 메모리 페이지는 임계 시간량(예를 들어, 선행하는 20초) 내에서 프로그램(108)에 의해 액세스되지 않았거나, 그렇지 않으면 메모리 페이지가 메모리 관리자(102)에 의해 용도 재설정될 수 있는 방식으로 프로그램(108)에 의해 액세스되고 있는 페이지를 지칭한다. 메모리 페이지는 예를 들어 다른 타입의 페이지(예를 들어, 작업중 또는 배정된 페이지)에 배정되는 것, 다른 프로그램에 할당되는 것 등에 의해 용도 재설정될 수 있다.
다른 타입의 메모리 페이지는 수정된(modified) 또는 더티(dirty) 페이지이며, 그것은 내용이 수정되었지만 아직 페이지 파일(110)에 복사되지는 않은 메모리 페이지이다. 수정된 또는 더티 메모리 페이지는 메모리 관리자(102)에 의해 용도 재설정되지 않는다. 그러나, 수정된 또는 더티 메모리 페이지를 페이지 파일(110)에 복사한 후, 메모리 페이지의 분류는 스탠바이 또는 재배정가능한 페이지로 변경될 수 있다. 다른 타입의 메모리 페이지는 프리(free) 또는 할당해제된(de-allocated) 페이지이며, 그것은 프로그램(108)에 현재 할당되어 있지 않은 메모리 페이지이고, 메모리 관리자(102)는 그것을 이용하여 무엇이든(용도 재설정을 포함) 할 수 있다.
메모리 관리자(102)는 페이징된 메모리(106)의 메모리 페이지들이 언제 프로그램들(108)에 할당되는지, 어느 메모리 페이지들이 어느 프로그램들(108)에 할당되는지, 이전에 프로그램(108)에 할당되었던 어느 메모리 페이지들이 용도 재설정될지 등을 결정하기 위해 다양한 규칙들 또는 기준들을 이용한다. 메모리 관리자(102)는 또한 메모리 페이지들의 타입들에 대한 분류를 결정하여, 메모리 페이지들의 분류를 적절하게 변경한다. 하나 이상의 실시예에서, 메모리 관리자(102)는 페이징된 메모리(106)의 어느 메모리 페이지들이 어느 타입의 페이지로서 분류되는지에 대한 리스트 또는 다른 레코드를 유지한다. 예를 들어, 메모리 관리자(102)는 작업중 또는 배정된 페이지들의 리스트 또는 다른 레코드, 스탠바이 또는 재배정가능한 페이지들의 리스트 또는 다른 레코드, 수정된 또는 더티 페이지들의 리스트 또는 레코드, 프리 또는 할당해제된 페이지들의 리스트 또는 레코드 등을 유지할 수 있다.
페이징된 메모리(106)의 하나 이상의 페이지는 각각 대응하는 우선순위 레벨을 갖는다. 특정 타입의 메모리 페이지들(예를 들어, 스탠바이 또는 재배정가능한 페이지들)만이 우선순위 레벨들을 가질 수 있거나, 대안적으로는 모든 타입의 메모리 페이지들이 우선순위 레벨들을 가질 수 있다. 메모리 관리자(102)는 각각의 메모리 페이지의 우선순위 레벨을 설정하고, 여러 상이한 방식으로 메모리 페이지에 대한 우선순위 레벨을 결정할 수 있다. 하나 이상의 실시예에서, 메모리 페이지의 우선순위 레벨은 운영 체제에 의해 메모리 페이지의 할당을 요청한 프로세스 또는 스레드에 배정되는 우선순위 레벨이다. 대안적으로 및/또는 추가적으로, 메모리 페이지의 우선순위 레벨을 결정하기 위해, 프로그램(108)으로부터의 요청, 메모리 페이지가 특정 타입의 검색(예를 들어, 페이지들의 추론 검색)에 연관되어 있는 것 등과 같은 다른 기준이 이용될 수 있다. 메모리 관리자(102)는 또한 시간에 따라 메모리 페이지들의 우선순위 레벨들을 변경할 수 있다(예를 들어, 임계 시간량 동안 프로그램(108)에 의해 액세스되지 않은 메모리 페이지들의 우선순위 레벨들을 낮춘다).
도 2는 하나 이상의 실시예에 따른 페이징된 메모리의 예시적인 레코드(200)를 도시한다. 복수의(X개의) 우선순위 레벨들(202)의 집합이 도시되어 있고, 우선순위 레벨들(202)의 집합은 페이지들에 대응할 수 있는 우선순위 레벨들을 포함한다. 페이징된 메모리의 레코드(200)는 예를 들어 도 1의 페이징된 메모리(106)의 스탠바이 또는 재배정가능한 페이지들의 레코드이다. 큰 숫자를 갖는 우선순위 레벨들이 작은 숫자를 갖는 우선순위 레벨들보다 높은 우선순위일 수 있거나(예를 들어, 우선순위 레벨 4가 우선순위 레벨 1보다 높은 우선순위일 수 있음), 그 반대일 수 있다. 대안적으로, 문자 또는 다른 캐릭터와 같이, 숫자가 아닌 레벨들도 우선순위 레벨들을 식별하기 위해 이용될 수 있다.
각각의 우선순위 레벨(202)에 대해, 레코드(200)는 그 우선순위 레벨을 갖는 0개 이상의 메모리 페이지의 집합을 식별한다. 예를 들어, 페이지들(204)은 우선순위 레벨 1에 대응하고, 페이지들(206)은 우선순위 레벨 3에 대응하는 등이다. 레코드(200)는 특정 우선순위 레벨에 대응하는 메모리 페이지들을 식별하는 리스트 또는 다른 데이터 구조, 상이한 우선순위 레벨들에 대응하는 메모리 페이지들에 대해 상이한 저장 영역들(예를 들어, 상이한 캐시들)을 이용하는 것 등과 같은 여러 상이한 방식 중 임의의 것으로 유지될 수 있다.
도 1로 되돌아가면, 하나 이상의 실시예에서, 압축 저장 관리자(104)는 페이징된 메모리(106)의 페이지들을 언제 압축할지를 결정한다. 압축 저장 관리자(104)는 아래에 더 상세하게 논의되는 바와 같이, 페이징된 메모리(106)의 어느 페이지들이 압축될지를 결정하기 위해 다양한 규칙 또는 기준을 이용할 수 있다. 일반적으로, 압축 저장 관리자(104)는 페이징된 메모리(106)의 페이지들을 페이징된 메모리(106)의 영역 내로 압축한다. 페이징된 메모리(106)의 영역은 메모리 관리자(102)에 의해 압축 저장 관리자(104)에 할당되는, 페이징된 메모리(106)의 복수의 메모리 페이지로 이루어진다. 예를 들어, 영역은 128 킬로바이트일 수 있고, 메모리 페이지들은 각각 4 킬로바이트일 수 있지만, 이러한 값들은 예시이며, 대안적으로 다른 영역 및/또는 페이지 크기들이 이용될 수 있다. 특정 영역 내로 압축되고 있는 페이징된 메모리(106)의 페이지들은 적어도 유사한 우선순위 레벨들을 가지며, 페이징된 메모리(106)의 영역을 이루는 메모리 페이지들은 그 영역 내로 압축되는 메모리 페이지들과 적어도 유사한 우선순위 레벨들을 갖는다. 적어도 유사한 우선순위 레벨들을 갖는 메모리 페이지들은 동일 또는 유사한 우선순위 레벨을 갖는 메모리 페이지들을 지칭한다.
하나 이상의 실시예에서, 특정 영역 내로 압축되고 있는 페이징된 메모리(106)의 페이지들은 동일한 우선순위 레벨을 가지며, 상이한 영역들은 상이한 우선순위 레벨들을 위해 이용된다. 페이징된 메모리(106)의 영역을 이루는 메모리 페이지들은 그 영역 내로 압축되는 메모리 페이지들과 동일한 우선순위 레벨들을 갖는다. 예를 들어, 압축 저장 관리자(104)는 도 2의 페이지들(204)을 압축 저장 관리자(104)에 할당되고 우선순위 레벨 1을 갖는 메모리 페이지들로 이루어진 하나의 영역 내로 압축할 수 있다. 다른 예로서, 압축 저장 관리자(104)는 도 2의 페이지들(206)을 압축 저장 관리자(104)에 할당되고 우선순위 레벨 3을 갖는 메모리 페이지들로 이루어진 다른 영역 내로 압축할 수 있다. 각각의 우선순위 레벨에 대해, 압축 저장 관리자(104)는 그 우선순위 레벨에 대응하는 메모리 페이지들로 이루어진 0개 이상의 영역을 생성할 수 있음에 주목해야 한다.
대안적으로, 특정 영역 내로 압축되고 있는 페이징된 메모리(106)의 페이지들은 유사하지만 반드시 동일할 필요는 없는 우선순위 레벨들을 가질 수 있다. 어느 우선순위 레벨이 유사한지는, 우선순위 레벨들이 서로의 레벨들의 임계 수치(예를 들어, 1 또는 2) 내에 있는지에 기초하는 것과 같은 상이한 방식들로 결정될 수 있다. 예를 들어, 우선순위 레벨 1과 우선순위 레벨 2는 유사할 수 있고, 따라서 우선순위 레벨 1의 페이지들 및 우선순위 레벨 2의 페이지들은 동일 영역 내로 압축될 수 있지만, 우선순위 레벨 1과 우선순위 레벨 5는 유사하지 않을 수 있고, 우선순위 레벨 1의 페이지들 및 우선순위 레벨 5의 페이지들은 동일 영역 내로 압축되지 않는다.
마찬가지로, 페이징된 메모리(106)의 영역을 이루는 메모리 페이지들은 그 영역 내로 압축되는 메모리 페이지들과 유사하지만 반드시 동일할 필요는 없는 우선순위 레벨을 가질 수 있다. 예를 들어, 페이징된 메모리(106)의 영역을 이루는 메모리 페이지들은 우선순위 레벨 3을 가질 수 있고, 그 영역 내로 압축되는 메모리 페이지들은 우선순위 레벨 2 또는 우선순위 레벨 3을 가질 수 있다. 또한, 영역은 동일 또는 유사한 우선순위 레벨의 메모리 페이지들로 이루어질 수 있다. 예를 들어, 영역은 우선순위 레벨 2를 갖는 몇몇 메모리 페이지 및 우선순위 레벨 3을 갖는 몇몇 메모리 페이지로 이루어질 수 있다.
영역을 생성하기 위해, 압축 저장 관리자(104)는 페이징된 메모리(106)의 페이지들의 집합이 메모리 관리자(102)에 의해 관리자(104)에 할당될 것을 요청한다. 할당된 페이지들의 집합은 작업중 또는 배정된 페이지들로서 분류된다. 압축 저장 관리자(104)는 스탠바이 또는 재배정가능한 페이지들인 페이지들과 같은, 페이징된 메모리(106) 내의 페이지들의 다른 집합을 압축한다. 압축 저장 관리자(104)는 압축 저장 관리자(104)에 할당된 페이지들의 집합 내에 그러한 압축된 페이지들을 저장하고, 압축 저장 관리자(104)에 할당된 페이지들의 집합의 컨트롤을 메모리 관리자(102)에 리턴하여(예를 들어, 페이지들의 집합은 스탠바이 또는 재배정가능한 페이지들로서 재분류됨), 메모리 관리자(102)가 원하는 경우 압축 저장 관리자(104)에 할당되는 페이지들의 집합이 메모리 관리자(102)에 의해 용도 재설정될 수 있게 한다.
따라서, 예를 들어, 압축되는 페이지들의 특정 집합은 적어도 유사한 우선순위 레벨들에 대응하는 스탠바이 또는 재배정가능한 페이지들의 집합일 수 있다. 페이지들의 그러한 특정 집합은 적어도 유사한 우선순위 레벨에 대응하는 페이지들의 추가 집합으로 압축된다. 페이지들의 그러한 특정 집합이 압축된 후, 페이지들의 추가 집합은 또한 스탠바이 또는 재배정가능한 페이지로서 분류된다. 따라서, 압축 저장 관리자(104)는 페이지들의 그 특정 집합을 동일한 타입(예를 들어, 스탠바이 또는 재할당가능)이면서 적어도 유사한 우선순위 레벨들에 대응하는 메모리 페이지들의 다른 집합으로 압축한다. 그러나, 압축 저장 관리자(104)가 그러한 페이지들의 특정 집합을 압축할 때, 그 페이지들의 특정 집합 내의 페이지들의 양은 페이지들의 압축된 집합 내의 페이지들의 양보다 전형적으로 크다.
도 3은 하나 이상의 실시예에 따라 메모리 페이지들을 압축하는 예를 도시한다. 페이징된 메모리(106)는 302에 도시된 바와 같이, 동일한 우선순위 레벨(예를 들어, 위에서 논의된 우선순위 레벨 3)을 갖는 5개의 메모리 페이지(206)를 포함한다. 압축 저장 관리자(104)는 메모리 페이지들(206)과 적어도 유사한 우선순위 레벨들을 갖는 2개의 메모리 페이지(304)를 포함하는 영역에 할당된다. 압축 저장 관리자(104)는 306에 도시된 바와 같이, 메모리 페이지들(206)을 메모리 페이지들(304)로 압축한다. 압축 후에, 메모리 페이지들(206)의 압축된 버전이 메모리 페이지들(304)로서 페이징된 메모리(106) 내에 저장되므로, 메모리 관리자(102)는 메모리 페이지들(206)을 해방할 수 있다. 따라서, 압축 후에, 페이징된 메모리(106)는 메모리 페이지들(304)을 저장하지만, 메모리 페이지들(206)을 저장할 필요는 없다.
도 4는 하나 이상의 실시예에 따른 페이지 기반 압축 저장 관리를 구현하기 위한 예시적인 프로세스(400)를 도시하는 흐름도이다. 프로세스(400)는 도 1의 압축 저장 관리자(104)와 같은 압축 저장 관리자에 의해 수행되고, 소프트웨어, 펌웨어, 하드웨어 또는 그들의 조합으로 구현될 수 있다. 프로세스(400)는 단계들의 집합으로서 보여지며, 다양한 단계들의 동작을 수행하기 위해 도시된 순서로 한정되지 않는다. 프로세스(400)는 페이지 기반 압축 저장 관리를 구현하기 위한 예시적인 프로세스이고; 페이지 기반 압축 저장 관리를 구현하는 추가의 논의들은 상이한 도면들을 참조하여 여기에 포함된다.
프로세스(400)에서, 다양한 우선순위 레벨들을 갖는 복수의 메모리 페이지가 식별된다(단계(402)). 단계(402)에서 식별된 이러한 메모리 페이지들은 스탠바이 또는 재배정가능한 페이지와 같은 특정 타입의 메모리 페이지들일 수 있다. 단계(402)에서, 이하에 더 상세하게 논의되는 것과 같이, 특정 타입의 페이지에 의해 저장되는 데이터에 관한 규칙 또는 기준, 캐싱 속성들에 관한 규칙 또는 기준 등과 같은 다양한 추가 규칙 또는 기준도 메모리 페이지들을 식별하기 위해 이용될 수 있다.
적어도 유사한 우선순위 레벨을 각각 갖는 메모리 페이지들의 집합이 식별된다(단계(404)). 이러한 메모리 페이지들의 집합은 단계(402)에서 식별된 복수의 메모리 페이지 중의 페이지들이다. 페이지들의 집합은 레코드 또는 리스트 내에서의 발생의 순서로, 무작위로 등과 같은 다양한 방식으로 식별될 수 있다.
단계(404)에서 식별된 메모리 페이지들의 집합은 페이징된 메모리의 영역 내로 압축된다(단계(406)). 페이징된 메모리의 이러한 영역은 단계(404)에서 식별된 메모리 페이지들의 집합과 적어도 유사한 우선순위 레벨들을 갖는 페이징된 메모리의 메모리 페이지들의 추가 집합으로 이루어진다. 영역을 이루는 메모리 페이지들의 추가 집합은 메모리 관리자에 의해 압축 저장 관리자에 할당된다. 단계(406)에서의 압축의 일부로서, 압축 저장 관리자는 메모리 페이지들의 집합의 각각의 메모리 페이지의 압축된 버전이 어느 영역에 저장되는지의 레코드를 유지한다. 이러한 레코드는 각각의 압축된 메모리 페이지에 대해, 압축 저장 관리자에 할당되는 어느 하나 이상의 메모리 페이지가 메모리 페이지의 압축된 버전을 저장하는지의 레코드, 각각의 압축된 메모리 페이지에 대해, 메모리 페이지의 압축된 버전을 저장하는 영역 내의 어드레스 범위의 레코드 등과 같은 다양한 형태를 취할 수 있다.
메모리 페이지를 압축하는 것은 메모리 페이지의 내용(예를 들어, 메모리 페이지 내에 저장된 데이터)을 압축하는 것을 지칭한다. 여러 상이한 공용 및/또는 전용 압축 기술들 중 임의의 것이 메모리 페이지를 압축하기 위해 이용될 수 있다. 예를 들어, 메모리 페이지는 런-랭스 인코딩 압축 알고리즘, LZW 압축 알고리즘, 호프만 코딩 알고리즘 등을 이용하여 압축될 수 있다. 선택사항으로서, 상이한 타입의 컨텐츠를 위한 상이한 압축 알고리즘들과 같이, 복수의 상이한 압축 알고리즘이 이용될 수 있다. 예를 들어, 영숫자 및/또는 텍스트 컨텐츠를 위해 하나의 압축 알고리즘이 이용될 수 있고, 이미지 컨텐츠를 위해 다른 압축 알고리즘이 이용될 수 있고, 오디오 컨텐츠를 위해 다른 압축 알고리즘이 이용될 수 있다. 메모리 페이지를 압축하기 위해 이용되는 압축 기술은 전형적으로 무손실 압축 알고리즘이지만, 일부 경우들에서(예를 들어, 특정 이미지 및/또는 오디오 컨텐츠를 위해) 손실 압축 알고리즘이 대안적으로 이용될 수 있다. 특정 압축 알고리즘은 또한 디바이스 의존적일 수 있으며, 그 경우 (예를 들어, 더 강력한 하나 이상의 프로세서를 갖는) 고속 디바이스는 더 양호하게 압축하는 더 프로세서 집약적인 압축 알고리즘을 갖고서 구성될 수 있는 반면에, (예를 들어, 덜 강력한 하나 이상의 프로세서를 갖는) 저속 디바이스는 또한 압축하지 않는 덜 프로세서 집약적인 알고리즘을 갖고서 구성될 수 있다.
하나 이상의 실시예에서, 메모리 페이지들은 단계(406)에서 개별적으로 압축된다. 대안적으로, 둘 이상의 메모리 페이지가 함께 압축될 수 있다(예를 들어, 압축 알고리즘은 개별적으로보다는 둘 이상의 메모리 페이지에서 함께 실행될 수 있다).
선택사항으로서, 메모리 페이지의 추가 처리가 또한 단계(406)에서 수행될 수 있다. 이러한 추가 처리는 (예를 들어, 대칭 키 암호화, 공개 키 암호화 등을 이용하여) 메모리 페이지의 컨텐츠를 암호화하는 것, 메모리 페이지를 위해 CRC(cyclic redundancy check) 데이터와 같은 에러 검출 데이터를 생성하는 것, 메모리 페이지를 위한 HMAC(Hash Message Authentication Code) 데이터와 같은 인증 정보를 생성하는 것 등일 수 있다.
다음으로, 메모리 관리자는 영역을 이루는 메모리 페이지들의 추가 집합을 용도 재설정하도록 허용된다(단계(408)). 압축 저장 관리자가 메모리 관리자에게 메모리 페이지들의 추가 집합이 스탠바이 또는 재배정가능한 페이지들로 분류되어야 함을 통지하는 것과 같은 상이한 방식들로, 메모리 관리자는 메모리 페이지들의 추가 집합을 용도 재설정하도록 허용될 수 있다. 단계(408)에서 메모리 관리자가 메모리 페이지들의 추가 집합을 용도 재설정하는 것을 허용하는 데에 있어서, 메모리 관리자(102)는 메모리 페이지들의 추가 집합(페이지들의 추가 집합 내에 저장되는 데이터)이 페이지 파일(110)에 복사될 필요가 없다는 것, 즉 적절한 경우에는(예를 들어, 더티인 경우) 메모리 페이지들의 압축되지 않은 집합이 페이지 파일(110)에 이미 복사되었으며, 따라서 메모리 페이지들의 추가 집합을 페이지 파일(110)에 물론 복사할 필요가 없다는 것을 통지받는다. 따라서, 메모리 페이지들의 추가 집합을 페이지 파일(110)에 기입하는 것이 회피된다.
추가로, 메모리 관리자는 단계(404)에서 식별된 메모리 페이지들의 집합을 해방할 수 있다. 메모리 관리자는 메모리 페이지들이 메모리 페이지들의 추가 집합으로 압축된 후에, 또는 대안적으로는 더 이른 시간에서(예를 들어, 요청되는 경우, 페이지 파일(110)로부터 메모리 페이지들의 집합을 검색할 수 있는 것에 의존하여) 그 메모리 페이지들의 집합을 해방할 수 있다. 메모리 관리자는 그러한 해방된 메모리 페이지들을 여러 상이한 프로그램(108)에 할당하는 것을 포함하여, 그것들을 갖고서 원하는 것은 무엇이든 할 수 있다. 동일한 메모리 페이지의 두가지 버전(한 버전은 압축되지 않고, 한 버전은 압축됨)을 페이징된 메모리 내에 유지하는 것은 페이징된 메모리의 효율적인 사용이 전형적으로 아니기 때문에, 그러한 두가지 버전이 페이징된 메모리 내에 전형적으로 유지되지 않으므로, 단계(404)에서 식별된 메모리 페이지들의 집합은 해방될 수 있다.
하나 이상의 실시예에서, 메모리 관리자는 또한 압축 저장 관리자에 의해 압축된 메모리 페이지들의 집합의 레코드를 유지할 수 있다. 메모리 페이지에 대한 프로그램으로부터의 후속 요청에 응답하여, 메모리 관리자는 압축 저장 관리자로부터 메모리 페이지를 획득하고자 시도할지를 결정하기 위해 이 레코드를 검사할 수 있다. 레코드가 메모리 페이지가 압축 저장 관리자에 의해 압축되었음을 나타낸다면, 메모리 관리자는 압축 저장 관리자로부터 메모리 페이지를 요청할 수 있고, 레코드가 메모리 페이지가 압축 저장 관리자에 의해 압축되지 않았음을 나타낸다면, 메모리 관리자는 압축 저장 관리자로부터 메모리 페이지를 요청하기보다는 페이지 파일로부터 메모리 페이지를 획득할 수 있다. 대안적으로, 메모리 관리자는 그러한 레코드를 유지하지 않을 수 있고/있거나, 그러한 메모리 페이지들이 압축 저장 관리자에 의해 압축되었는지를 고려하지 않고서 압축 저장 관리자로부터 메모리 페이지들을 요청할 수 있다.
하나 이상의 실시예에서, 압축 저장 관리자는 메모리 페이지들의 추가 집합으로 이루어진 영역이 실질적으로 채워질 때까지, 메모리 관리자가 메모리 페이지들의 추가 집합을 용도 재설정하는 것을 허용하지 않는다. 영역이 실질적으로 채워진다는 것은, 메모리 페이지들의 추가 집합 내에는 추가의 압축된 메모리 페이지들이 저장될 수 있는 저장 공간이 거의 남아있지 않다는 것을 언급하는 것이다. 예를 들어, 메모리 페이지들의 추가 집합의 저장 공간의 적어도 임계량이 압축된 메모리 페이지들을 저장하기 위해 이용되었다.
압축된 메모리 페이지들의 집합 중의 적어도 하나의 메모리 페이지에 대한 요청이 메모리 관리자로부터 후속하여 수신될 수 있다(단계(410)). 이 요청은 예를 들어 도 1의 프로그램(108)으로부터의 요청에 응답하여, 압축된 메모리 페이지 내의 컨텐츠에의 액세스를 후속하여 요청하는 것일 수 있다. 요청은 키라고도 지칭되는 적어도 하나의 메모리 페이지의 식별자를 포함한다.
요청에 응답하여, 요청된 적어도 하나의 메모리 페이지가 이용가능한지에 대한 검사가 이루어진다(단계(412)). 위에서 논의된 바와 같이, 메모리 페이지들이 압축되어지는 페이지들의 추가 집합은 메모리 관리자에 의해 용도 재설정될 수 있다. 따라서, 적어도 하나의 메모리 페이지를 압축한 후, 그 적어도 하나의 메모리 페이지가 압축되어진 하나 이상의 메모리 페이지는 메모리 관리자에 의해 용도 재설정되었을 수 있다. 메모리 관리자는, 특정 페이지가 용도 재설정되었는지를 메모리 관리자가 결정할 수 있게 해 주는 레코드 또는 다른 정보를 유지한다.
요청된 적어도 하나의 메모리 페이지가 이용가능한지에 관한 검사는 적어도 하나의 메모리 페이지가 압축되어진 하나 이상의 메모리 페이지를 메모리 관리자로부터 요청하는 것과 같은 다양한 방식으로 수행될 수 있다. 압축 저장 관리자가 압축된 적어도 하나의 메모리 페이지가 영역의 어느 하나 이상의 메모리 페이지에 저장되었는지를 인식하는 상황들에서, 압축 저장 관리자는 하나 이상의 메모리 페이지의 식별자들을 명시함으로써 그러한 하나 이상의 메모리 페이지를 요청할 수 있다. 압축 저장 관리자가 압축된 적어도 하나의 메모리 페이지가 영역의 어느 하나 이상의 메모리 페이지에 저장되었는지를 인식하지 못하는 상황들에서, 압축 저장 관리자는 (예를 들어, 아래에 논의되는 도 5 및/또는 도 6의 데이터 구조를 이용하여 나타난 바와 같이) 압축된 적어도 하나의 메모리 페이지가 저장되었던 영역의 메모리 어드레스 범위를 명시함으로써 하나 이상의 메모리 페이지를 요청할 수 있고, 압축 저장 관리자에 할당되고 명시된 메모리 어드레스 범위에 연관된 하나 이상의 메모리 페이지를 식별하기 위해 메모리 관리자에 의존할 수 있다. 그러한 요청에 응답하여, 하나 이상의 페이지 전부가 이용가능하다면(용도 재설정되지 않았다면), 메모리 관리자는 요청된 하나 이상의 메모리 페이지를 리턴한다(이 경우, 적어도 하나의 메모리 페이지가 이용가능함). 그러나, 하나 이상의 페이지 전부가 이용가능하지 않다면(예를 들어, 적어도 하나가 용도 재설정되었다면), 메모리 관리자는 하나 이상의 메모리 페이지가 용도 재설정되었거나 다르게 이용가능하지 않다는 표시를 리턴한다(이 경우, 적어도 하나의 메모리 페이지가 이용가능하지 않음).
(예를 들어, 단계(406)를 참조하여 위에서 논의된 바와 같이) 둘 이상의 메모리 페이지가 함께 압축되는 경우, 압축 저장 관리자는 그러한 둘 이상의 메모리 페이지 각각을 요청할 것이며, 적어도 하나의 메모리 페이지는 그러한 둘 이상의 메모리 페이지 각각이 이용가능한 경우에만 이용가능할 것이라는 점에 주목해야 한다.
적어도 하나의 메모리 페이지가 이용가능하지 않다면, 요청된 적어도 하나의 메모리 페이지에서의 요청이 이용가능하지 않다는 표시가 메모리 관리자에게 리턴된다(단계(414)). 다음으로, 메모리 관리자는 압축 저장 관리자(104)가 이용되고 있지 않던 것과 똑같이, 페이지 파일(110) 또는 다른 소스로부터 메모리 페이지를 획득할 수 있다.
그러나, 적어도 하나의 메모리 페이지가 이용가능하다면, 압축된 적어도 하나의 메모리 페이지가 검색된다(단계(416)). 압축된 적어도 하나의 메모리 페이지를 검색한다는 것은, 적어도 하나의 메모리 페이지가 압축되어진 하나 이상의 메모리 페이지를 검색하는 것을 지칭한다. 적어도 하나의 메모리 페이지가 압축되어진 하나 이상의 메모리 페이지의 이러한 검색은 적어도 하나의 메모리 페이지가 압축되어진 하나 이상의 메모리 페이지가 이용가능한지를 결정하는 데에 있어서 내재하는 것이라는 점에 주목해야 한다. 예를 들어, 단계(412)를 참조하여 위에서 논의된 바와 같이, 요청된 적어도 하나의 메모리 페이지가 이용가능한지에 관한 검사는 적어도 하나의 메모리 페이지가 압축되어진 하나 이상의 메모리 페이지를 메모리 관리자로부터 요청하는 것에 의해 수행될 수 있고, 메모리 관리자는 요청된 하나 이상의 메모리 페이지가 이용가능한 경우에는 그들을 리턴한다.
적어도 하나의 메모리 페이지가 압축해제되고(단계(418)), 메모리 관리자에게 리턴된다(단계(420)). 적어도 하나의 메모리 페이지가 압축해제되는 방식은 적어도 하나의 메모리 페이지를 압축하기 위해 이용되는 기술에 적어도 부분적으로 기초하여 달라질 수 있다. 선택사항으로서, 단계(406)의 압축 및 단계(418)의 압축해제는 압축된 페이지들에의 액세스 시간을 증가시키기 위해 복수의 프로세서 및/또는 프로세서 코어에서 병렬로 수행될 수 있다. 메모리 페이지를 복호화하는 것, 에러 검출 데이터를 검증하는 것, 인증 정보를 검증하는 것, 이러한 검증에 실패한 경우에 (가능하다면) 데이터를 정정하는 것 등과 같이, 메모리 페이지 상에서 수행되는 임의의 다른 처리는 또한 단계(418)에서 검증되거나 취소된다. 에러 검출 데이터 또는 인증 정보가 검증될 수 없고/없거나 데이터가 정정될 수 없다면, 압축해제된 적어도 하나의 메모리 페이지가 아니라, 요청된 적어도 하나의 메모리 페이지가 이용가능하지 않다는 표시가 메모리 관리자에게 리턴된다(단계(414)).
도 1로 되돌아가면, 각각의 메모리 페이지는 그것에 연관된 식별자(키라고도 지칭됨)를 가지며, 식별자는 메모리 페이지들이 서로 구별될 수 있게 해 준다. 이러한 식별자는 메모리 관리자(102) 또는 압축 저장 관리자(104)와 같은 다양한 컴포넌트들 중 임의의 것에 의해 배정될 수 있다. 메모리 페이지의 압축된 버전은 페이징된 메모리(106) 내에서 메모리 페이지 자체보다 적은 공간을 차지하며, 따라서 압축 저장 관리자(104)에 의해서는 동일한 데이터 유닛 구조가 이용되지 않는다. 예를 들어, 메모리 관리자(102)는 페이징된 메모리(106)를 메모리 페이지들에 의해 관리할 수 있지만, 압축 저장 관리자(104)는 그러지 않을 것이다.
압축 저장 관리자(104)는 다양한 압축된 메모리 페이지들이 메모리 페이지들의 어느 영역들에 저장되는지를 식별하기 위해 메모리 페이지 맵을 유지한다. 도 5는 하나 이상의 실시예에 따른 예시적인 메모리 페이지 맵(502)을 도시한다. 페이징된 메모리(106) 내에 저장된 각각의 압축된 메모리 페이지에 대하여, 메모리 페이지 맵(502)은 그 압축된 메모리 페이지가 메모리 페이지들의 영역들 내에서 어디에 저장되는지를 식별하는 대응하는 레코드(504)를 유지한다. 페이징된 메모리(106)는 하나 이상의(n개의) 상이한 영역(506(1),..., 506(n))으로서 도시되며, 이들 각각은 그 자체가 위에서 논의된 것과 같은 복수의 메모리 페이지로 이루어진다.
각각의 레코드(504)는 페이지 키 필드(510), 영역 번호 필드(512), 오프셋 필드(514), 사이즈 필드(516), 및 플래그 필드(518)를 포함한다. 페이지 키 필드(510)는 대응하는 압축된 메모리 페이지의 식별자를 저장한다. 이 식별자는 여러 상이한 형태를 취할 수 있다. 예를 들어, 그것은 프로세스 식별자 및 가상 어드레스, 레코드 식별자 등일 수 있다.
영역 번호 필드(512)는 대응하는 압축된 메모리 페이지가 저장되는 특정 영역(506)의 식별자를 저장한다. 전형적으로 번호이지만, 이 영역은 다양한 다른 방식들 중 임의의 것으로 식별될 수 있다. 오프셋 필드(514)는 오프셋의 식별자를 대응하는 압축된 메모리 페이지에 대한 데이터의 저장이 시작하는 특정 영역(506)에의 오프셋의 식별자를 저장한다. 대안적으로, 영역 및 오프셋 식별자들보다는, 대응하는 압축된 메모리 페이지가 저장되는 압축된 부분 내의 위치의 임의의 다른 식별자를 저장하는 하나 이상의 필드가 이용될 수 있다.
사이즈 필드(516)는 대응하는 압축된 메모리 페이지의 크기(예를 들어, 바이트)의 식별자를 저장한다. 영역, 특정 영역에의 오프셋, 및 압축된 메모리 페이지의 크기가 주어지면, 압축된 메모리 페이지가 저장되는 메모리 어드레스 범위가 쉽게 식별될 수 있다. 플래그 필드(518)는 대응하는 압축된 메모리 페이지에 관한 다양한 상태 정보를 저장한다. 그러한 플래그들의 예는 어느 메모리 페이지들이 압축되도록 선택되는지를 결정하기 위해 이용되는 메모리 페이지를 위한 선택 우선순위, 메모리 페이지에 대응하는 우선순위 레벨, 사용자가 마지막으로 로그인한 때 또는 도 1의 시스템(100)을 마지막으로 능동적으로 이용한 때에 메모리 페이지가 액세스되었는지의 표시, 어느 컴포넌트(예를 들어, 압축 저장 관리자 또는 메모리 관리자)가 압축을 위해 메모리 페이지를 선택 또는 추가했는지 등을 포함한다.
메모리 페이지 맵(502)은 예시일 뿐이라는 점을 알아야 한다. 다른 실시예들에서, 추가 필드들이 맵(502)의 각각의 레코드 내에 포함될 수 있다. 예를 들어, CRC 데이터와 같은 에러 검출 데이터, HMAC 데이터와 같은 인증 정보, 메모리 페이지의 사용 이력 및/또는 빈도를 설명하는 정보 등이 맵(502)의 각각의 레코드 내에 포함될 수 있다. 또한, 필드들(510-518) 중 하나 이상이 맵(502)의 레코드들로부터 생략될 수 있다. 추가로, 필드들(510-518) 중 하나 이상의 데이터는 별개의 레코드 내에 저장되기보다는, 페이징된 메모리(106) 내의 메모리 페이지와 함께 저장될 수 있다.
메모리 페이지 맵(502)에 더하여, 압축 저장 관리자(104)는 또한 어떤 메모리 페이지가 영역의 특정 위치에 저장되는지를 식별하기 위해 영역 맵을 유지한다. 따라서, 메모리 페이지 맵(502)은 식별된 압축된 메모리 페이지가 어디에 저장되는지를 식별하도록 동작하는 반면, 영역 맵은 어느 압축된 메모리 페이지가 영역의 주어진 위치에 저장되는지를 식별하도록 동작한다.
도 6은 하나 이상의 실시예에 따른 예시적인 영역 맵(602)을 도시한다. 다른 메모리 페이지가 저장된 영역에의 각각의 오프셋에 대해, 영역 맵(602)은 그 오프셋에서 저장된 대응하는 압축된 메모리 페이지를 식별하는 레코드(604)를 유지한다. 각각의 레코드(604)는 페이지 키 필드(606), 영역 번호 필드(608) 및 오프셋 필드(610)를 포함한다.
페이지 키 필드(606)는 도 5의 레코드(504)의 페이지 키 필드(510)와 유사하게, 대응하는 압축된 메모리 페이지의 식별자를 저장한다. 영역 번호 필드(608)는 레코드(504)의 영역 번호 필드(512)와 유사하게, 대응하는 압축된 메모리 페이지가 저장되는 특정 영역(506)의 식별자를 저장한다. 오프셋 필드(610)는 레코드(504)의 오프셋 필드(514)와 유사하게, 대응하는 압축된 메모리 페이지에 대한 데이터의 저장이 시작되는 특정 영역(506)에의 오프셋의 식별자를 저장한다. 대안적으로, 영역 및 오프셋 식별자들보다는, 대응하는 압축된 메모리 페이지가 저장되는 압축된 부분 내의 위치의 임의의 다른 식별자를 저장하는 하나 이상의 필드가 이용될 수 있다.
영역 맵(602)은 예시일 뿐이라는 점을 알아야 한다. 다른 실시예들에서, 추가 필드들이 맵(602)의 각각의 레코드 내에 포함될 수 있고/있거나 필드들(606-610) 중 하나 이상이 맵(602)의 레코드들로부터 생략될 수 있다. 추가로, 필드들(606-610) 중 하나 이상의 데이터는 별개의 레코드 내에 저장되기보다는, 도 1의 페이징된 메모리(106) 내의 메모리 페이지와 함께 저장될 수 있다.
도 5의 메모리 페이지 맵(502) 및 도 6의 영역 맵(602)은 여러 상이한 방식들 중 임의의 것으로 구현될 수 있다. 하나 이상의 실시예에서, 이러한 맵들은 개별 레코드들을 액세스하는 데에 있어서의 성능 증가를 위해 B+ 트리로서 각각 구현된다. 대안적으로, AVL 트리, 해쉬 테이블, 어레이 등과 같은 다양한 다른 종래의 데이터 구조들 중 임의의 것이 이러한 맵들을 구현하기 위해 이용될 수 있다.
도 1로 되돌아가면, 위에서 논의된 바와 같이, 메모리 관리자(102)는 일부 메모리 페이지의 컨텐츠를 페이지 파일(110)에 복사할 수 있다. 메모리 페이지의 컨텐츠를 페이지 파일(110)에 복사함으로써, 원하는 경우에는 컨텐츠가 페이지 파일(110)로부터 검색될 수 있기 때문에, 메모리 관리자(102)는 자신이 페이징된 메모리(106) 내의 메모리 페이지의 컨텐츠를 용도 재설정하거나 다르게 상실할 수 있음을 알게 된다.
하나 이상의 실시예에서, 메모리 관리자(102)는 페이지들이 클린(clean)(예를 들어, 수정되지 않음)이며 따라서 메모리 관리자(102)가 상실하는 것이 허용가능한 것으로서 마킹되는 것을 허용하는 기능을 지원한다. 메모리 페이지를 상실한다는 것(또는 메모리 페이지가 상실된다는 것)은 메모리 페이지가 용도 재설정된다는 것, 또는 메모리 페이지의 컨텐츠가 다르게 삭제되거나 액세스불가능하게 된다는 것을 언급한다. 메모리 페이지를 클린으로 마킹함으로써, 메모리 관리자(102)는 메모리 페이지의 한 버전이 어딘가 다른 곳에 저장되기 때문에(예를 들어, 페이지 파일(110)에 복사되기 때문에) 메모리 페이지가 상실될 수 있음을 알게 된다. 메모리 관리자(102)는 클린 메모리 페이지들의 레코드(예를 들어, 리스트, 각각의 메모리 페이지에 연관된 플래그 등)를 유지한다. 하나 이상의 실시예에서, 메모리 페이지가 클린으로 마킹되어야 한다는 것을 메모리 관리자에게 식별하는 프로세스는 메모리 페이지 상에서 메모리 리셋을 수행하는 것으로서 지칭된다.
클린으로 마킹된 메모리 페이지는 후속하여 더티(예를 들어, 수정됨)로 변경된 마킹을 가질 수 있으며, 이는 메모리 페이지가 더티이고 따라서 상실이 허용불가능한 것으로 취급되게 한다. 메모리 페이지를 더티로서 마킹하는 것에 응답하여, 메모리 관리자(102)는 메모리 페이지가 페이지 파일(110)에 복사될 때까지 메모리 페이지의 컨텐츠를 용도 재설정하거나 다르게 상실하지 않는다. 그러나, 메모리 페이지가 이미 상실되었다면, 이러한 마킹은 변경될 수 없다. 예를 들어, 메모리 페이지가 클린으로서 마킹되는 경우, 메모리 관리자(102)는 후속하여 메모리 페이지를 더티로서 마킹하려 시도하기 전에 페이지를 용도 재설정할 수 있으며, 이 경우 메모리 페이지는 상실되고 따라서 더티로서 마킹되지 않는다. 하나 이상의 실시예에서, 메모리 페이지가 더티로서 마킹되어야 한다는 것을 메모리 관리자에게 식별하는 프로세스는 메모리 페이지 상에서 메모리 리셋 취소를 수행하는 것으로서 지칭된다.
하나 이상의 실시예에서, 압축 저장 관리자(104)는 메모리 페이지들의 압축을 관리하는 데에 있어서 메모리 관리자(102)의 이러한 가능성을 레버리지한다. 도 4의 단계(408)과 관련하여 위에서 논의된 바와 같이, 메모리 관리자는 영역을 이루는 메모리 페이지들의 추가 집합을 용도 재설정하도록 허용된다. 메모리 관리자는 압축 저장 관리자(104)가 메모리 페이지들의 추가 집합 상에서 메모리 리셋을 수행하는 것에 의해 메모리 페이지들의 추가 집합을 용도 재설정하도록 허용될 수 있다. 메모리 페이지들의 추가 집합 상에서 메모리 리셋을 수행하는 것에 응답하여, 메모리 관리자(102)는 메모리 페이지들을 페이지 파일(110)에 복사하지 않고, 메모리 페이지들을 상실 허용가능한 것으로서 취급한다(예를 들어, 메모리 페이지들을 스탠바이 또는 재배정가능한 페이지로 분류한다).
또한, 도 4의 단계들(412 및 416)에 관련하여 위에서 논의된 바와 같이, 적어도 하나의 메모리 페이지가 압축되어진 하나 이상의 메모리 페이지에 대한 요청이 메모리 관리자에 대해 이루어질 수 있다. 이러한 요청은 압축 저장 관리자(104)가 하나 이상의 메모리 페이지 상에서 메모리 리셋 취소를 수행하는 것일 수 있다. 하나 이상의 메모리 페이지 상에서 메모리 리셋 취소를 수행하는 것에 응답하여, 하나 이상의 메모리 페이지가 이미 상실되었다면, 메모리 관리자(102)는 하나 이상의 메모리 페이지가 상실되었다는 표시를 압축 저장 관리자(104)에게 리턴한다. 그러나, 하나 이상의 메모리 페이지가 이미 상실되지 않았다면, 메모리 관리자는 하나 이상의 메모리 페이지를 압축 저장 관리자(104)에게 리턴하고, 그 하나 이상의 메모리 페이지를 더티로서 취급한다(예를 들어, 하나 이상의 메모리 페이지를 더 이상 스탠바이 또는 재배정가능한 페이지가 아니라 수정된 또는 더티 페이지로서 분류한다).
메모리 리셋 취소는 요청된 적어도 하나의 메모리 페이지가 압축되어진 하나 이상의 메모리 페이지 상에서 수행된다는 점, 즉 메모리 리셋 취소는 하나 이상의 메모리 페이지를 포함하는 영역의 메모리 페이지들 전부 상에서 수행될 필요가 없다는 점에 주목해야 한다. 하나 이상의 메모리 페이지 중 임의의 것이 압축 저장 관리자(104)에 리턴되는 한편 용도 재설정되는 것을 방지하기 위해, 하나 이상의 메모리 페이지를 압축 저장 관리자(104)에 리턴하는 것은 원자적으로 행해진다는 점에 주목해야 한다.
하나 이상의 메모리 페이지 상에서 메모리 리셋 취소를 수행하고, 하나 이상의 메모리 페이지 상에서 압축된 적어도 하나의 메모리 페이지를 압축해제하고, 압축해제된 적어도 하나의 메모리 페이지를 메모리 관리자(102)에게 리턴한 후, 압축 저장 관리자(104)는 하나 이상의 메모리 페이지 상에서 메모리 리셋을 다시 수행할 수 있다(하나 이상의 메모리 페이지를 재-리셋하는 것으로도 지칭됨). 리턴되는 적어도 하나의 메모리 페이지는 페이지 파일(110)에 복사될 때까지는 상실이 허용불가능한 메모리 페이지의 타입으로서 분류된다(예를 들어, 작업 중 또는 배정된 페이지, 또는 대안적으로는 수정된 또는 더티 페이지로서 분류). 메모리 리셋 취소를 수행함으로써, 적어도 하나의 메모리 페이지가 압축되어진 하나 이상의 페이지는 더티로서 마킹될 것이고, 압축해제된 적어도 하나의 메모리 페이지는 상실이 허용불가능한 타입으로서 이미 분류되었기 때문에, 이는 필요하지 않다. 따라서, 압축 저장 관리자(104)는 하나 이상의 메모리 페이지 상에서 메모리 리셋을 다시 수행할 수 있고(예를 들어, 하나 이상의 메모리 페이지를 재-리셋함), 그에 의해, 메모리 관리자(102)가 메모리 페이지들을 페이지 파일(110)에 복사하는 상황을 피하고, 메모리 관리자(102)가 하나 이상의 메모리 페이지를 다시 상실 허용가능한 것으로 취급하는 것을 허용한다.
메모리 페이지들의 재-리셋은 다양한 시간들에서 수행될 수 있다. 하나 이상의 실시예에서, 압축 저장 관리자(104)는 재-리셋될 압축된 메모리 페이지들의 영역들의 메모리 페이지들의 레코드를 유지한다. 이 레코드는 각각의 영역에 연관된 비트맵과 같은 다양한 형태를 취할 수 있으며, 여기에서 비트맵의 각각의 비트는 영역의 일부분을 이루는 메모리 페이지에 대응하고, 그 대응하는 메모리 페이지가 재-리셋되어야 하는지를 나타낸다. 레코드는 압축해제된 적어도 하나의 메모리 페이지를 메모리 관리자(102)에게 리턴하는 것과 거의 동시에(또는 리턴하기 전 또는 후의 임계 시간량 내에서) 업데이트될 수 있다. 압축 저장 관리자(104)(예를 들어, 관리자(104)의 프로세스)는 유지되는 레코드에 의해 나타나는 바와 같이 재-리셋될 메모리 페이지들을 재-리셋하기 위해, 후속하여 낮은 프로세서 우선순위 레벨에서 및/또는 배경에서, 예컨대 낮은 시스템 자원 사용(예를 들어, 낮은 프로세서 이용 또는 페이징된 메모리(106)에의 낮은 액세스 레이트)의 시간들에서 실행된다. 메모리 페이지들을 재-리셋하기를 기다림으로써, 압축 저장 관리자(104)는 메모리 관리자(104)에 액세스하여, 메모리 관리자가 압축해제된 적어도 하나의 메모리 페이지를 그 적어도 하나의 메모리 페이지를 요청한 프로그램(108)에 리턴하는 속도를 방해하는 것을 피한다.
대안적으로, 메모리 페이지들의 재-리셋은 다른 시간들에서, 예컨대 압축해제된 적어도 하나의 메모리 페이지를 메모리 관리자(102)에게 리턴하는 것과 거의 동시에 또는 그 직후에 수행될 수 있다.
낮은 프로세서 우선순위 레벨에서 및/또는 배경에서 실행되는 압축 저장 관리자에 의해 다른 유지 타입 태스크들이 또한 수행될 수 있음에 주목해야 한다. 아래에 더 상세하게 논의되는 바와 같이, 페이징된 메모리(106) 내의 압축 메모리 페이지들을 저장하는 영역들의 컴팩트화(compaction)와 같이, 여러 상이한 타입들의 유지 태스크들이 압축 저장 관리자(104)에 의해 수행될 수 있다.
하나 이상의 실시예에서, 압축 저장 관리자(104)는 (예를 들어, 도 4의 단계(402)에서와 같이) 어느 메모리 페이지들의 압축될 수 있는지를 식별하기 위해 다양한 규칙 또는 기준을 이용한다. 규칙 또는 기준은 메모리 페이지 분류(예를 들어, 스탠바이 또는 재배정가능한 페이지), 특정 타입이 데이터가 저장되어 있는 메모리 페이지들(예를 들어, 그것의 데이터 저장을 위한 프로세스에 할당되는 페이지들(프라이빗 페이지들이라고 지칭될 수 있음), 라이브러리 또는 프로세스에 의해 오픈되는 다른 파일로부터의 데이터를 포함하는 페이지들 등), 페이지들의 캐싱 속성들(예를 들어, 페이지들이 CPU 캐싱가능한지의 여부) 등에 기초하는 것과 같이, 여러 상이한 방식들로 메모리 페이지들을 식별할 수 있다. 추가적으로 또는 대안적으로, 규칙 또는 기준은 시스템(100) 내의 데이터 액세스 및 사용 패턴들, 메모리 페이지들의 랜덤 또는 의사랜덤 선택 등에 기초하여 메모리 페이지들을 식별할 수 있다.
하나 이상의 실시예에서, 압축 저장 관리자(104)는 (예를 들어, 도 4의 단계(404)에서와 같이) 그러한 식별된 메모리 페이지들 중 어느 것들의 집합을 압축할지를 식별하기 위해 다양한 규칙 또는 기준을 이용한다. 규칙 또는 기준은 시스템(100) 내에서의 데이터 액세스 및 사용 패턴들에 기초하여, 레코드 또는 리스트 내에서의 발생의 순서(예를 들어, 메모리 페이지들이 스탠바이 리스트에 추가된 순서)로, 랜덤으로 또는 의사 랜덤으로 등과 같이, 여러 다양한 방식으로메모리 페이지 집합을 식별할 수 있다. 압축 메모리 페이지를 이미 저장한 영역의 일부분인 메모리 페이지는 압축할 메모리 페이지로서 선택되지 않는다는 점에 주목해야 한다. 식별된 메모리 페이지들 전부가 압축될 수 있고, 대안적으로는 메모리 페이지들의 부분집합이 압축될 수 있다(예를 들어, 특정 개수의 메모리 페이지, 하나 이상의 특정 우선순위 레벨에 대응하는 메모리 페이지들 등).
메모리 페이지들을 언제 압축할지에 대한 결정은 여러 다양한 방식으로 이루어질 수 있다. 하나 이상의 실시예에서, 압축될 메모리 페이지들을 식별하기 위해, 서비스 또는 프로그램이 일정한 간격 또는 불규칙한 간격(예를 들어, 거의 수 분 또는 십 분마다)으로 실행된다. 대안적으로, 서비스 또는 프로그램은 페이징된 메모리(106) 내에 존재하는 특정 타입의 메모리 페이지들의 양, 낮은 시스템 자원 사용(예를 들어, 낮은 프로세서 이용 또는 페이징된 메모리(106)에의 낮은 액세스 레이트)의 시간들에서 등과 같이, 다른 이벤트들에 응답하여 실행될 수 있다.
하나 이상의 실시예에서, 압축 저장 관리자(104)는 시스템(100)을 구현하는 디바이스 내에 포함되는 복수의 프로세서 및/또는 프로세서 코어의 기능을 레버리지한다. 압축 저장 관리자(104)는 복수의 프로세서 및/또는 프로세서 코어를 레버리지하기 위해 복수의 스레드를 생성하고/생성하거나 사용할 수 있고, 각각의 개별 스레드가 페이징된 메모리(106)에 액세스할 수 있고, 복수의 스레드가 페이징된 메모리(106)에 동시에 액세스할 수 있다. 각각의 그러한 개별 스레드는 메모리 페이지들의 집합을 압축하는 단계들(예를 들어, 위에서 논의된 도 4의 단계들(404-408)) 및/또는 메모리 페이지들의 집합을 압축해제하는 단계들(예를 들어, 위에서 논의된 단계들(410-420))을 수행한다. 각각의 상이한 스레드는 상이한 프로세서 및/또는 프로세서 코어에 의해 실행될 수 있고, 그에 의해 압축 및/또는 압축해제의 복수의 단계가 동시에 수행되는 것이 허용된다. 예를 들어, 3개의 스레드가 동시에 실행될 수 있는데, 하나의 스레드는 메모리 페이지들의 하나의 집합을 압축하는 단계들을 수행하고, 제2 스레드는 하나의 프로그램으로부터의 요청에 응답하여 적어도 하나의 메모리 페이지를 압축해제하는 단계들을 수행하고, 제3 스레드는 상이한 프로그램으로부터의 상이한 요청에 응답하여 상이한 적어도 하나의 메모리 페이지를 압축해제하는 단계를 수행한다.
마찬가지로, 하나 이상의 실시예에서, 압축 저장 관리자(104)는 압축된 메모리 페이지들의 프리페칭(pre-fetching)을 지원한다. 프리페칭은 복수의 메모리 페이지에 대한 단일 또는 동시적 요청을 지칭하며, 이는 다수의 압축된 메모리 페이지에 대한 동시의 요청을 야기할 수 있다. 압축 저장 관리자(104)는 압축된 메모리 페이지들의 프리페칭을 다양한 방식으로 지원할 수 있다. 하나 이상의 실시예에서, 압축 저장 관리자(104)는 압축해제의 단계들을 수행하는 추가 스레드들의 생성 및/또는 사용을 관리하는 프리페칭 스레드를 포함한다. 프리페칭 스레드는 메모리 페이지들 중 어느 것에 대해 압축해제하는 단계가 수행될 것인지를 추가 스레드들에게 지정하고, 추가 스레드들은 프리페칭 스레드에 의해 지정되는 메모리 페이지들에 대해 압축해제의 단계들을 수행한다. 복수의 추가 스레드는 상이한 프로세서들 및/또는 프로세서 코어들 상에서 동시에 실행될 수 있고, 이는 시스템(100)을 구현하는 디바이스 내에 포함되는 복수의 프로세서 및/또는 프로세서 코어가 단일 프로세서 및/또는 프로세서 코어를 이용하는 것보다 더 신속하게 메모리 페이지들을 프리페칭하는 것에 연관된 압축해제를 수행하도록 레버리지되는 것을 허용한다.
하나 이상의 실시예에서, 압축 저장 관리자(104)는 이용가능한 압축된 메모리 페이지들 및/또는 이용가능하지 않은 압축된 메모리 페이지들의 영역들의 메모리 페이지들의 레코드를 유지한다. 이 레코드는 각각의 영역에 연관된 비트맵과 같은 다양한 형태를 취할 수 있으며, 여기에서 비트맵의 각각의 비트는 그 영역 내로 압축되는 압축된 메모리 페이지에 대응하고, 그 대응하는 메모리 페이지가 이용가능한지를 나타낸다. 압축 저장 관리자(104)(예를 들어, 관리자(104)의 프로세스)는 어느 메모리 페이지들이 더 이상 이용가능하지 않은지를 결정하기 위해, 낮은 프로세서 우선순위 레벨에서 및/또는 배경에서, 예컨대 낮은 시스템 자원 사용(예를 들어, 낮은 프로세서 이용 또는 페이징된 메모리(106)에의 낮은 액세스 레이트)의 시간들에서 실행된다. 이러한 결정은 메모리 관리자(102)로부터 메모리 페이지가 압축되어지는 하나 이상의 메모리 페이지를 요청하는 것에 의한 것과 같이 다양한 방식으로 이루어질 수 있다(메모리 페이지가 압축되어지는 하나 이상의 메모리 페이지가 메모리 관리자(102)에 의해 리턴되는 경우에는 메모리 페이지가 이용가능한 것이고, 그렇지 않은 경우에는 이용가능하지 않은 것이다). 이용가능하지 않은 압축된 메모리 페이지들의 이러한 레코드를 유지함으로써, 압축 저장 관리자(104)는 메모리 페이지들에 대한 메모리 관리자(102)로부터의 일부 요청들에 더 신속하게 응답할 수 있다. 예를 들어, 압축 저장 관리자(104)에 의해 유지되는 레코드에 나타나는 대로 이용가능하지 않은 메모리 페이지에 대한 요청이 메모리 관리자(102)로부터 수신되는 경우, 요청된 메모리 페이지가 압축되어지는 하나 이상의 메모리 페이지를 검색하려고 시도하는 데에 시간을 소비하지 않고서, 메모리 페이지가 이용가능하지 않다는 표시가 압축 저장 관리자(104)에 의해 리턴될 수 있다.
하나 이상의 실시예에서, 압축 저장 관리자(104)는 또한 페이징된 메모리(106) 내의 압축된 메모리 페이지들을 저장한 영역들을 컴팩트화한다. 시간에 따라, 영역 내에 압축되고 저장되었던 메모리 페이지들이 영역으로부터 제거될 수 있다. 그러한 제거는 다양한 이유로 발생할 수 있다. 예를 들어, 프로그램은 영역 내에 저장되는 메모리 페이지에의 액세스를 요청할 수 있다. 그러한 요청에 응답하여, 압축 저장 관리자(104)는 위에서 논의된 바와 같이, 압축된 메모리 페이지를 영역으로부터 제거하고, 메모리 페이지를 압축해제하고, 메모리 페이지를 메모리 관리자(102)에 리턴한다.
영역으로부터 압축된 메모리 페이지들을 제거하는 것은 압축된 메모리 페이지들을 저장하는 영역들의 메모리 페이지들 내에 비어있는 갭 또는 블록을 야기한다. 압축화 프로세스 동안, 압축 저장 관리자(104)는 남아있는 압축된 메모리 페이지들을 통합하고, 그에 의해 이러한 비어있는 갭 또는 블록이 채워진다.
압축 저장 관리자(104)는 영역들이 얼마나 잘 이용되고 있는지를 추적한다. 영역들이 얼마나 잘 알고 있는지를 나타내는 값은 얼마나 많은 데이터가 영역들의 메모리 페이지들 내에 저장되는지(예를 들어, 영역의 메모리 페이지들 내에 저장된 압축된 메모리 페이지들 전부의 크기의 총합) 및 영역의 현재 크기(여전히 이용가능한 영역의 메모리 페이지들의 크기의 총합)에 기초하여 결정된다. 이러한 두 개의 값의 차이 또는 비율이 임계값을 초과하면, 압축 저장 관리자(104)는 컴팩트화가 수행되어야 한다고 결정한다. 이러한 컴팩트화 임계 값은 고정된 양 또는 가변양, 영역의 현재 크기의 10%, 제로 등일 수 있다. 다른 실시예들에서, 영역들의 메모리 페이지들 중 임의의 메모리 페이지 내에 임의의 비어있는 갭 또는 블록이 있을 때마다 컴팩트화가 수행된다.
컴팩트화는 영역의 하나의 메모리 페이지로부터의 압축된 메모리 페이지들을 동일 또는 상이한 영역의 다른 메모리 페이지에 재위치시킴으로써 수행된다. 각각의 메모리 페이지 내의 다양한 압축된 메모리 페이지들의 크기는 (예를 들어, 도 5에 관련하여 위에서 논의된 바와 같이) 압축 저장 관리자(104)에 의해 이용되는 데이터 구조들에 액세스함으로써 쉽게 결정될 수 있다. 하나 이상의 실시예에서, 특정 영역 내의 압축된 메모리 페이지들은 (영역의 시작 또는 끝에서) 함께 컴팩트화되고, 그에 의해 그 영역 내의 비어있는 갭들 전부가 합쳐진다. 이것은 영역 내에서 수 개의 작은 갭이 아니라 더 큰 갭을 야기할 수 있고, 더 큰 압축된 메모리 페이지가 그 영역 내에 재위치되는 것을 허용할 수 있다. 대안적으로, 그러한 영역-내 압축화가 수행되지 않을 수 있고, 압축된 메모리 페이지들이 영역들 내의 기존 갭들에 단순히 재위치될 수 있다.
컴팩트화는 영역으로부터의 압축된 메모리 페이지들이 하나 이상의 다른 영역에 재위치되는 것을 야기할 수 있고, 그에 따라 영역의 메모리 페이지들을 비운다. 영역의 메모리 페이지가 비워지고 나면, 압축 저장 관리자(104)는 (적어도 유사한 우선순위 레벨들의) 추가 메모리 페이지들을 그 메모리 페이지 내에 압축하여 저장할 수 있거나, 그 메모리 페이지를 메모리 관리자(102)에게 릴리즈한다(예를 들어, 그 메모리 페이지를 해제한다).
어느 압축된 메모리 페이지들이 어느 영역들 내에 재위치될지에 대한 결정은 다양한 방식들 중 임의의 것으로 이루어질 수 있다. 예를 들어, 대부분 비어있는 갭들(그리고, 그에 따른 그것의 메모리 페이지들 내의 가장 작은 양의 데이터)을 갖는 영역으로부터의 압축된 메모리 페이지들이 재위치를 위해 먼저 선택될 수 있는데, 압축 저장 관리자(104)가 그 영역으로부터의 모든 압축된 메모리 페이지를 다른 영역들 내에 재위치시킬 수 있는 가능성이 가장 높기 때문이다. 다른 예로서, 더 작은 압축된 메모리 페이지들로 더 큰 갭들을 채우는 것을 피하기 위해, 더 큰 압축된 메모리 페이지들이 먼저 선택될 수 있다. 다른 예로서, 하나의 영역으로부터 다른 영역으로 복사하는 양을 감소시키기 위해, 압축된 메모리 페이지들이 재위치를 위해 선택될 수 있다. 또 다른 예로서, 어느 압축된 메모리 페이지들이 재위치될 것인지를 결정하는 데에 있어서 영역들의 연령이 고려될 수 있다. 압축된 메모리 페이지의 연령은 압축된 메모리 페이지가 영역 내에 압축되어 저장되어 있던 시간의 양을 지칭한다. 영역의 연령은 예를 들어 그 영역 내의 압축된 메모리 페이지들의 평균, 최대 및/또는 최소 연령을 지칭한다.
컴팩트화의 임계 값은 고정된 양(예를 들어, 영역의 현재 크기의 25% 이하가 비어있는 갭이어야 함)이거나, 대안적으로는 동적인 양일 수 있다. 이러한 동적인 양은 영역들 내에 저장되는 압축된 메모리 페이지들의 압축률(예를 들어, 압축된 메모리 페이지들의 더 양호한 압축률은 영역들 내에 허가되는 비어있는 갭을 증가시킬 수 있음), 시스템(100) 내의 자원 압력(예를 들어, 더 높은 압력은 영역들 내에 허가되는 비어있는 갭들을 감소시킬 수 있음) 등과 같은 상이한 기준에 기초하여 달라질 수 있다. 시스템(100)의 현재 상태에 관한 다양한 다른 기준은 컴팩트화를 위한 임계값, 예컨대 히트 레이트(예를 들어, 영역 내의 메모리 페이지들이 얼마나 자주 액세스되는지), 시각 또는 다른 사용자 컨텍스트(예를 들어, 이른 아침, 점심 동안, 점심 후에 등), 배터리 수명 등을 변경하는 데에 이용될 수 있다. 예를 들어, 프로세서 이용이 매우 높은 경우, 메모리 페이지들을 재위치시키는 데에 있어서의 프로세서의 부담을 감소시키기 위해 영역들 내에 허가되는 비어있는 갭들이 증가될 수 있다. 다른 예로서, 시스템(100) 내의 전력 상태가 전력이 보존되어야 함을 나타내는 경우, 또는 배터리 레벨이 낮은 경우, 더 적은 압축된 메모리 페이지들이 재위치되는 것을 요구함으로써 프로세서의 전력 소비를 감소시키기 위해, 영역들 내에 허가되는 비어있는 갭들이 증가될 수 있다.
압축 저장 관리자(104)는 상이한 시간들에서 영역을 컴팩트화할지를 결정을 할 수 있다. 예를 들어, 압축 저장 관리자(104)는 일정한 간격 또는 불규칙한 간격에서 결정을 내릴 수 있다. 다른 예로서, 압축 저장 관리자(104)는 시스템(100) 내의 상이한 이벤트들, 예컨대 프로세서가 임계 시간량 동안 유휴상태인 것, 시스템(100) 내의 자원 압력이 증가하고 있다는 표시 등에 응답하여 결정을 할 수 있다.
본원에 논의되는 기술들은 다양한 기능을 지원한다. 그러한 기능 중 하나는 페이징된 메모리 내의 데이터가 페이징된 메모리 내에 압축되어 유지되는 것이며, 그에 의해 데이터를 저장하는 데에 이용되는 페이징된 메모리의 양을 감소시킨다. 본원에 논의된 기술을 이용하여 어떠한 페이징된 메모리도 상실될 필요가 없다(예를 들어, 페이징된 메모리 내의 데이터는 페이징되지 않은 메모리 내의 압축된 데이터와 교환되지 않는다). 그러한 기능 중 다른 것은 압축된 메모리 페이지들이 그러한 메모리 페이지들이 압축 전에 가졌던 것과 적어도 유사한 우선순위 레벨들에서 페이징된 메모리 내에 저장되는 것이다. 메모리 페이지들의 적어도 유사한 우선순위 레벨들을 유지함으로써, 더 낮은 우선순위 메모리 페이지들을 상실하기 전에, 상당히 더 높은 우선순위 메모리 페이지들이 상실되는 우선순위 역전 시나리오들이 회피된다.
또한, 본원에 논의되는 기술들은 메모리 페이지들의 분류를 유지한다. 압축된 메모리 페이지들은 그 메모리 페이지들이 압축 전에 가졌던 것과 동일 타입의 메모리 페이지들(예를 들어, 스탠바이 또는 재배정가능)로서 저장된다. 따라서, 압축으로 인한 시스템 내에서의 이용가능한 메모리의 상실의 인지 또는 표시는 존재하지 않는다.
본원에서는 특정 기능이 특정 모듈들을 참조하여 논의되지만, 본원에서 논의되는 개별 모듈들의 기능은 복수의 모듈로 분리될 수 있고/있거나 복수의 모듈 중 적어도 일부의 기능이 단일 모듈로 결합될 수 있음에 주목해야 한다. 추가적으로, 본원에서 동작을 수행하는 것으로서 논의되는 특정 모듈은 그 자신이 동작을 수행하는 특정 모듈, 또는 대안적으로는 동작을 수행하는(또는 그 특정 모듈과 함께 동작을 수행하는) 다른 컴포넌트 또는 모듈을 불러오거나 다르게 액세스하는 특정 모듈을 포함한다. 따라서, 동작을 수행하는 특정 모듈은 그 자신이 동작을 수행하는 특정 모듈, 및/또는 동작을 수행하는 그 특정 모듈에 의해 불러와지거나 다르게 액세스되는 다른 모듈을 포함한다.
도 7은 본원에 설명된 다양한 기술들을 구현할 수 있는 하나 이상의 시스템 및/또는 디바이스를 나타내는 예시적인 컴퓨팅 디바이스(702)를 포함하는 예시적인 시스템을 개괄적으로 700에서 도시하고 있다. 컴퓨팅 디바이스(702)는 예를 들어 서비스 공급자의 서버, 클라이언트에 연관된 디바이스(예를 들어, 클라이언트 디바이스), 온-칩 시스템, 및/또는 임의의 다른 적절한 컴퓨팅 디바이스 또는 컴퓨텅 시스템일 수 있다.
도시된 것과 같은 예시적인 컴퓨팅 디바이스(702)는 처리 시스템(704), 하나 이상의 컴퓨터 판독가능한 매체(706), 및 서로 통신 연결된 하나 이상의 I/O 인터페이스(708)를 포함한다. 도시되지는 않았지만, 컴퓨팅 디바이스(702)는 다양한 컴포넌트들을 서로 연결하는 시스템 버스 또는 데이터 및 커맨드 전달 시스템을 더 포함할 수 있다. 시스템 버스는 메모리 버스 또는 메모리 컨트롤러, 주변 버스, 유니버설 시리얼 버스, 및/또는 다양한 버스 아키텍쳐들 중 임의의 것을 이용하는 프로세서 또는 로컬 버스와 같은 상이한 버스 구조들 중 임의의 것 또는 그들의 조합을 포함할 수 있다. 제어 및 데이터 라인과 같은 다양한 다른 예들도 예상된다.
처리 시스템(704)은 하드웨어를 이용하여 하나 이상의 동작을 수행하기 위한 기능을 나타낸다. 따라서, 처리 시스템(704)은 프로세서, 기능 블록 등으로서 구성될 수 있는 하드웨어 요소들(710)을 포함하는 것으로서 도시되어 있다. 이것은 하나 이상의 반도체를 이용하여 형성되는 ASIC(application specific integrated circuit) 또는 다른 로직 디바이스로서의 하드웨어 구현을 포함할 수 있다. 하드웨어 요소들(710)은 그들을 형성하는 재료들 또는 그들이 이용하는 처리 메커니즘에 의해 한정되지 않는다. 예를 들어, 프로세서들은 반도체(들) 및/또는 트랜지스터들(예를 들어, 전자 집적 회로(IC))로 구성될 수 있다. 그러한 맥락에서, 프로세서 실행가능한 명령어들은 전자적으로 실행가능한 명령어들일 수 있다.
컴퓨터 판독가능한 매체(706)는 메모리/저장소(712)를 포함하는 것으로서 도시되어 있다. 메모리/저장소(712)는 하나 이상의 컴퓨터 판독가능한 매체에 연관된 메모리/저장 용량을 나타낸다. 메모리/저장소(712)는 휘발성 매체(예를 들어, 랜덤 액세스 메모리(RAM)) 및/또는 비휘발성 매체(예를 들어, 판독 전용 메모리(ROM), 플래시 메모리, 광학 디스크, 자기 디스크 등)를 포함할 수 있다. 메모리/저장소(712)는 고정식 매체(예를 들어, RAM, ROM, 고정식 하드 드라이브 등)는 물론, 이동식 매체(예를 들어, 플래시 메모리, 이동식 하드 드라이브, 광학 디스크 등)를 포함할 수 있다. 컴퓨터 판독가능한 매체(706)는 아래에 더 설명되는 것과 같은 다양한 다른 방식들로 구성될 수 있다.
입력/출력 인터페이스(들)(708)는 사용자가 컴퓨팅 디바이스(702)에 커맨드들 및 정보를 입력하는 것을 허용하고, 또한 정보가 다양한 입력/출력 디바이스를 이용하여 사용자 및/또는 다른 컴포넌트들 또는 디바이스들에 표시되는 것을 허용한다. 입력 디바이스들의 예는 키보드, 커서 컨트롤 디바이스(예를 들어, 마우스), 마이크로폰(예를 들어, 음성 입력을 위한 것), 스캐너, 터치 기능(예를 들어, 물리적인 터치를 검출하도록 구성된 용량성 또는 다른 센서들), 카메라(예를 들어, 제스처로서의 터치를 수반하지 않는 움직임을 검출하기 위해 가시 파장 또는 적외선 주파수와 같은 비-가시 파장을 이용할 수 있음) 등을 포함한다. 출력 디바이스들의 예는 디스플레이 디바이스(예를 들어, 모니터 또는 프로젝터), 스피커, 프린터, 네트워크 카드, 촉각-응답 디바이스 등을 포함한다. 따라서, 컴퓨팅 디바이스(702)는 사용자 상호작용을 지원하기 위해 아래에 더 설명되는 다양한 방식으로 구성될 수 있다.
컴퓨팅 디바이스(702)는 또한 저장 관리자(714)를 포함한다. 저장 관리자(714)는 위에서 논의된 것과 같은 다양한 페이지 기반 압축 관리 기능을 제공한다. 저장 관리자(714)는 예를 들어 도 1의 압축 저장 관리자(104)를 구현할 수 있다.
본원에서는 다양한 기술들이 소프트웨어, 하드웨어 요소 또는 프로그램 모듈의 일반적인 맥락에서 설명될 수 있다. 일반적으로, 그러한 모듈들은 특정 태스크를 수행하거나 특정 추상 데이터 타입을 구현하는 루틴, 프로그램, 개체, 요소, 컴포넌트, 데이터 구조 등을 포함한다. 본원에서 이용될 때의 용어 "모듈", "기능", 및 "컴포넌트"는 일반적으로 소프트웨어, 펌웨어, 하드웨어 또는 그들의 조합을 나타낸다. 본원에 설명되는 기술들의 특징들은 플랫폼에 독립적인데, 이는 기술들이 다양한 프로세서를 갖는 다양한 컴퓨팅 플랫폼 상에서 구현될 수 있음을 의미한다.
설명된 모듈들 및 기술들의 구현은 소정 형태의 컴퓨터 판독가능한 매체 상에 저장되거나 그러한 매체에 걸쳐 전송될 수 있다. 컴퓨터 판독가능한 매체는 컴퓨팅 디바이스(702)에 의해 액세스될 수 있는 다양한 매체를 포함할 수 있다. 제한이 아닌 예로서, 컴퓨터 판독가능한 매체는 "컴퓨터 판독가능한 저장 매체" 및 "컴퓨터 판독가능한 신호 매체"를 포함할 수 있다.
"컴퓨터 판독가능한 저장 매체"는 단순한 신호 전송, 반송파 또는 신호 자체와는 대조적으로, 정보의 영구적 저장 및/또는 실체있는 저장을 가능하게 하는 매체 및/또는 디바이스를 지칭한다. 따라서, 컴퓨터 판독가능한 저장 매체는 비-신호 포함 매체를 지칭한다. 컴퓨터 판독가능한 저장 매체는 컴퓨터 판독가능한 명령어, 데이터 구조, 프로그램 모듈, 로직 요소/회로, 또는 다른 데이터와 같은 정보의 저장에 적합한 방법 또는 기술로 구현된 휘발성 및 비휘발성의 이동식 및/또는 비-이동식 매체, 및/또는 저장 디바이스와 같은 하드웨어를 포함한다. 컴퓨터 판독가능한 저장 매체의 예들은 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 다른 광학 저장소, 하드 디스크, 자기 카세트, 자기 테이프, 자기 디스크 저장소 또는 다른 자기 저장 디바이스, 또는 다른 저장 디바이스, 실체있는 매체, 또는 원하는 정보를 저장하는 데에 적합하고 컴퓨터에 의해 액세스될 수 있는 제조품을 포함할 수 있지만, 그에 한정되지 않는다.
"컴퓨터 판독가능한 신호 매체"는 네트워크를 통하는 것과 같이, 명령어들을 컴퓨팅 디바이스(702)의 하드웨어에 전송하도록 구성된 신호-포함 매체를 지칭한다. 신호 매체는 전형적으로 컴퓨터 판독가능한 명령어, 데이터 구조, 프로그램 모듈 또는 다른 데이터를 반송파, 데이터 신호 또는 다른 전송 메커니즘과 같은 변조된 데이터 신호의 형태로 구현할 수 있다. 신호 매체는 또한 임의의 정보 전달 매체를 포함한다. "변조된 데이터 신호"라는 용어는 그것의 특성들 중 하나 이상이 신호 내에 정보를 인코딩하는 방식으로 세팅되거나 변경된 신호를 의미한다. 제한이 아닌 예로서, 통신 매체는 유선 네트워크 또는 직접 배선 접속과 같은 유선 매체, 및 음향, RF, 적외선 및 다른 무선 매체와 같은 무선 매체를 포함한다.
앞에서 설명된 바와 같이, 하드웨어 요소들(710) 및 컴퓨터 판독가능한 매체(706)는 본원에 설명된 기술들의 적어도 일부의 양태를 구현하기 위해 일부 실시예들에서 이용될 수 있는 하드웨어 형태로 구현된 명령어들, 모듈들, 프로그래밍가능한 디바이스 로직 및/또는 고정된 디바이스 로직을 나타낸다. 하드웨어 요소는 집적 회로 또는 온-칩 시스템, ASIC(application-specific integrated circuit), FPGA(field-programmable gate array), CPLD(complex programmable logic device), 및 실리콘 또는 다른 하드웨어 디바이스의 다른 구현들의 컴포넌트들을 포함할 수 있다. 이러한 맥락에서, 하드웨어 요소는 하드웨어 요소에 의해 구현되는 명령어들 모듈들 및/또는 로직에 의해 정의되는 프로그램 태스크들을 수행하는 프로세싱 디바이스는 물론, 실행을 위해 명령어들을 저장하기 위해 이용되는 하드웨어 디바이스, 예를 들어 앞에서 설명된 컴퓨터 판독가능한 저장 매체로서 동작할 수 있다.
상술한 것들의 조합들도 본원에 설명된 다양한 기술들 및 모듈들을 구현하기 위해 이용될 수 있다. 따라서, 소프트웨어, 하드웨어 또는 프로그램 모듈들은 소정 형태의 컴퓨터 판독가능한 저장 매체 상에서 구현되는 하나 이상의 명령어 및/또는 로직으로서, 및/또는 하나 이상의 하드웨어 요소(710)에 의해 구현될 수 있다. 컴퓨팅 디바이스(702)는 소프트웨어 및/또는 하드웨어 모듈에 대응하는 특정한 명령어들 및/또는 기능들을 구현하도록 구성될 수 있다. 따라서, 소프트웨어로서 컴퓨팅 디바이스(702)에 의해 실행가능한 모듈로서의 모듈의 구현은 예를 들어 프로세싱 시스템의 컴퓨터 판독가능한 저장 매체 및/또는 하드웨어 요소(710)의 사용을 통해, 적어도 부분적으로는 하드웨어로 달성될 수 있다. 명령어들 및/또는 기능들은 본원에 설명되는 기술들, 모듈들 및 예시들을 구현하기 위해 하나 이상의 제조품(예를 들어, 하나 이상의 컴퓨팅 디바이스(702) 및/또는 프로세싱 시스템(704))에 의해 실행가능/동작가능할 수 있다.
도 7에 더 도시되어 있는 바와 같이, 예시적인 시스템(700)은 퍼스널 컴퓨터(PC), 텔레비젼 디바이스, 및/또는 모바일 디바이스 상에서 애플리케이션을 실행할 때의 심리스한(seamless) 사용자 경험을 위한 유비쿼터스 환경을 가능하게 한다. 애플리케이션을 이용하고, 비디오 게임을 하고, 비디오를 시청하는 등의 동안 하나의 디바이스로부터 다음 디바이스로 옮겨갈 때의 공통의 사용자 경험을 위해, 서비스들 및 애플리케이션들은 3개의 환경 전부에서 실질적으로 유사하게 운영된다.
예시적인 시스템(700)에서, 복수의 디바이스는 중앙 컴퓨팅 디바이스를 통해 상호접속된다. 중앙 컴퓨팅 디바이스는 복수의 디바이스에 로컬일 수 있거나 복수의 디바이스로부터 원격 위치되어 있을 수 있다. 하나 이상의 실시예에서, 중앙 컴퓨팅 디바이스는 네트워크, 인터넷 또는 다른 데이터 통신 링크를 통해 복수의 디바이스에 접속되는 하나 이상의 서버 컴퓨터의 클라우드일 수 있다.
하나 이상의 실시예에서, 이러한 상호접속 아키텍쳐는 복수의 디바이스의 사용자에게 공통적이고 심리스한 경험을 제공하기 위해 복수의 디바이스에 걸쳐 기능이 전달될 수 있게 한다. 복수의 디바이스 각각은 상이한 물리적 요건들 및 능력들을 가질 수 있고, 중앙 컴퓨팅 디바이스는 그 디바이스에 맞춰지면서도 모든 디바이스에 공통인 경험을 디바이스에 전달하는 것을 가능하게 하기 위해 플랫폼을 이용한다. 하나 이상의 실시예에서, 타겟 디바이스들의 클래스가 생성되고, 경험들은 디바이스들의 포괄적인 클래스에 맞춰진다. 디바이스들의 클래스는 디바이스들의 물리적 특징들, 사용 타입들, 또는 다른 공통적 특성들에 의해 정의될 수 있다.
다양한 구현들에서, 컴퓨팅 디바이스(702)는 컴퓨터(716), 모바일(718) 및 텔레비젼(720) 사용을 위한 것과 같이 여러 상이한 구성을 취할 수 있다. 이러한 구성들 각각은 일반적으로 상이한 구조 및 능력을 가질 수 있는 디바이스들을 포함하고, 따라서 컴퓨팅 디바이스(702)는 상이한 디바이스 클래스들 중 하나 이상에 따라 구성될 수 있다. 예를 들어, 컴퓨팅 디바이스(702)는 퍼스널 컴퓨터, 데스크탑 컴퓨터, 멀티스크린 컴퓨터, 랩탑 컴퓨터, 넷북 등을 포함하는 컴퓨터(714) 클래스의 디바이스로서 구현될 수 있다.
컴퓨팅 디바이스(702)는 또한 이동 전화, 휴대용 뮤직 플레이어, 휴대용 게임 디바이스, 태블릿 컴퓨터, 멀티스크린 컴퓨터 등과 같은 모바일 디바이스를 포함하는 모바일(718) 클래스의 디바이스로서 구현될 수 있다. 컴퓨팅 디바이스(702)는 일상의 시청 환경에서 일반적으로 더 큰 스크린을 갖거나 그에 연결되는 디바이스들을 포함하는 텔레비젼(720) 클래스의 디바이스로서도 구현될 수 있다. 이 디바이스들은 텔레비젼, 셋탑 박스, 게이밍 콘솔 등을 포함한다.
본원에 설명된 기술들은 컴퓨팅 디바이스(702)의 이러한 다양한 구성들에 의해 지원될 수 있고, 본원에 설명되는 기술들의 구체적인 예시들에 한정되지 않는다. 이러한 기능은 또한 위에서 설명된 바와 같이 플랫폼(724)을 통해 "클라우드"(722)를 통하는 것과 같이, 분산된 시스템의 이용을 통해 부분적으로 또는 완전하게 구현될 수 있다.
클라우드(722)는 자원들(726)을 위한 플랫폼(724)을 포함하고/포함하거나 나타낸다. 플랫폼(724)은 클라우드(722)의 하드웨어(예를 들어, 서버들) 및 소프트웨어 자원들의 기저 기능을 추상화한다. 자원들(726)은 컴퓨터 프로세싱이 컴퓨팅 디바이스(702)로부터 멀리 떨어져 있는 서버들 상에서 실행되는 동안 이용될 수 있는 애플리케이션들 및/또는 데이터를 포함할 수 있다. 자원들(726)은 인터넷을 통해 및/또는 가입자 네트워크, 예를 들어 셀룰러 또는 WiFi 네트워크를 통해 제공되는 서비스들도 포함할 수 있다.
플랫폼(724)은 컴퓨팅 디바이스(702)를 다른 컴퓨팅 디바이스들에 접속하기 위해 자원들 및 기능들을 추상화할 수 있다. 플랫폼(724)은 플랫폼(724)을 통해 구현되는 자원들(726)에 대한 직면되는 요구에 대해 대응하는 레벨의 스케일을 제공하기 위해 자원들의 스케일링을 추상화하는 역할도 할 수 있다. 따라서, 상호접속되는 디바이스 실시예에서, 본원에 설명된 기능의 구현은 시스템(700) 전반에 분산될 수 있다. 예를 들어, 기능은 컴퓨팅 디바이스(702) 상에서 부분적으로 구현될 수 있는 것은 물론, 클라우드(722)의 기능을 추상화하는 플랫폼(724)을 통해서도 구현될 수 있다.
발명의 주제가 구조적 특징들 및/또는 방법론적 동작들에 특정한 언어로 설명되었지만, 첨부된 청구항들에 정의된 발명의 주제가 반드시 위에서 설명된 구체적인 특징들 또는 단계들에 한정되는 것은 아니라는 점이 이해되어야 한다. 오히려, 위에서 설명된 구체적인 특징들 및 단계들은 청구항들을 구현하는 예시적인 형태로서 개시된다.

Claims (20)

  1. 방법에 있어서,
    제1 집합의 메모리 페이지를 식별하는 단계 - 상기 제1 집합의 메모리 페이지의 각 메모리 페이지는, 그 메모리 페이지의 할당을 요청한 프로세스 또는 스레드에 대하여 운영 체제(operating system)에 의해 배정된 우선순위 레벨(priority level)과 동일한 우선순위 레벨을 가짐 - 와,
    상기 제1 집합의 메모리 페이지의 각 메모리 페이지와 동일한 우선순위 레벨을 가지는 제2 집합의 메모리 페이지가 압축 저장 관리자(compressed storage manager)에게 할당되도록 요청하는 단계와,
    상기 제1 집합의 메모리 페이지를 상기 제2 집합의 메모리 페이지로 구성되는 영역으로 압축하는 단계 - 상기 제2 집합의 메모리 페이지의 각 메모리 페이지는 상기 제1 집합의 메모리 페이지의 각 메모리 페이지와 동일한 타입임 - 와,
    상기 영역이 압축된 메모리 페이지로 실질적으로 채워졌다고 결정하는 것에 응답하여, 상기 제2 집합의 메모리 페이지를 클린으로 마킹된 것으로 식별하는 단계 - 상기 영역은 적어도 상기 제2 집합의 메모리 페이지에서의 저장 공간의 임계량이 상기 압축된 메모리 페이지를 저장하는데 사용되었을 때 실질적으로 채워진 것임 - 와,
    프로그램으로부터, 상기 제1 집합의 메모리 페이지 중 적어도 하나의 메모리 페이지에 액세스하기 위한 요청을 수신하는 단계와,
    그 후에, 메모리 관리자로부터, 상기 제1 집합의 메모리 페이지 중 상기 적어도 하나의 메모리 페이지에 대한 요청을 수신하는 단계와,
    상기 요청에 응답하여,
    상기 메모리 관리자로 하여금, 상기 제2 집합의 메모리 페이지 중 압축된 적어도 하나의 메모리 페이지를 저장하는 하나 이상의 메모리 페이지가 더티(dirty)로 마킹된다는 것을 식별하게 함으로써, 상기 압축된 적어도 하나의 메모리 페이지를 검색(retrieve)하는 단계와,
    상기 압축된 적어도 하나의 메모리 페이지를 압축해제하는 단계와,
    상기 압축해제된 적어도 하나의 메모리 페이지를 상기 메모리 관리자에게 리턴시키는 단계와,
    상기 제2 집합의 메모리 페이지 중 상기 하나 이상의 메모리 페이지 각각을 클린으로 식별하는 단계 - 상기 메모리 관리자가 상기 압축해제된 적어도 하나의 메모리 페이지를 상기 프로그램으로 리턴하는 것을 방해하는 것을 피하기 위하여 상기 압축해제된 적어도 하나의 메모리 페이지를 리턴시키는 단계 이후까지 상기 제2 집합의 메모리 페이지 중 상기 하나 이상의 메모리 페이지 각각을 클린으로 식별하는 것을 대기하는 것을 포함함 -
    를 포함하는 방법.
  2. 제1항에 있어서, 상기 제2 집합의 메모리 페이지를 클린으로 마킹된 것으로 식별하는 단계는, 상기 메모리 관리자가 상기 제2 집합의 메모리 페이지를 페이지 파일에 복사하는 것을 피하기 위하여 상기 제2 집합의 메모리 페이지의 각 메모리 페이지를 클린으로 식별하는 단계를 포함하는 것인 방법.
  3. 제1항에 있어서, 상기 메모리 관리자가 상기 제2 집합의 메모리 페이지 중 상기 하나 이상의 메모리 페이지가 이용가능하지 않다는 표시를 리턴하는 것에 응답하여, 상기 압축해제된 적어도 하나의 메모리 페이지가 아니라, 상기 적어도 하나의 메모리 페이지가 이용가능하지 않다는 표시를, 상기 메모리 관리자에게 리턴시키는 단계를 더 포함하는 방법.
  4. 제1항에 있어서, 상이한 집합의 메모리 페이지에 대하여 동시에, 상기 제1 집합의 메모리 페이지를 식별하는 단계, 상기 제1 집합의 메모리 페이지를 압축하는 단계, 상기 제2 집합의 메모리 페이지를 클린으로 마킹된 것으로 식별하는 단계를 각각 수행하는 복수의 스레드를 사용하는 단계를 더 포함하는 방법.
  5. 제1항에 있어서, 상이한 메모리 페이지에 대하여 동시에, 검색, 압축해제 및 리턴을 각각 수행하는 복수의 스레드를 사용하는 단계를 더 포함하는 방법.
  6. 제5항에 있어서, 상기 상이한 메모리 페이지는, 복수의 메모리 페이지에 대한 단일 요청에서 식별되는 상이한 메모리 페이지를 포함하는 것인 방법.
  7. 제1항에 있어서,
    상기 제2 집합의 메모리 페이지 중 어느 메모리 페이지가 이용가능한지에 대한 레코드를 유지하는 단계와,
    상기 요청에 응답하여 상기 레코드를 검사(check)하는 단계와,
    상기 레코드가 상기 제2 집합의 메모리 페이지 중 상기 압축된 적어도 하나의 메모리 페이지를 저장하는 상기 하나 이상의 메모리 페이지가 이용가능하지 않다고 나타내는 것에 응답하여, 상기 압축해제된 적어도 하나의 메모리 페이지가 아니라, 상기 적어도 하나의 메모리 페이지가 이용가능하지 않다는 표시를, 상기 메모리 관리자에게 리턴시키는 단계를 더 포함하는 방법.
  8. 제1항에 있어서, 상기 영역 내의 비어 있는 갭을 채우도록 상기 영역을 컴팩트화하는 단계를 더 포함하는 방법.
  9. 컴퓨팅 디바이스에 있어서,
    메모리와,
    상기 메모리의 페이지를 관리하도록 구성된 메모리 관리자와,
    압축 저장 관리자
    를 포함하며,
    상기 압축 저장 관리자는,
    복수의 메모리 페이지를 식별하고 - 상기 복수의 메모리 페이지의 각 메모리 페이지는 복수의 우선순위 레벨 중 대응하는 우선순위 레벨을 갖음 -,
    상기 복수의 우선순위 레벨 중 동일한 우선순위 레벨을 각각 갖는 제1 집합의 메모리 페이지를 식별하고 - 상기 제1 집합의 메모리 페이지의 각 메모리 페이지는, 그 메모리 페이지의 할당을 요청한 프로세스 또는 스레드에 대하여 상기 컴퓨팅 디바이스의 운영 체제에 의해 배정된 우선순위 레벨과 동일한 우선순위 레벨을 갖음 -,
    제2 집합의 메모리 페이지가 상기 압축 저장 관리자에게 할당되도록 요청하고 - 상기 제2 집합의 메모리 페이지는 상기 제1 집합의 메모리 페이지의 각 메모리 페이지와 동일한 우선순위 레벨을 갖음 -,
    상기 제1 집합의 메모리 페이지를 상기 제2 집합의 메모리 페이지로 구성된 영역으로 압축하고 - 상기 제2 집합의 메모리 페이지의 각 메모리 페이지는 상기 제1 집합의 메모리 페이지의 각 메모리 페이지와 동일한 타입임 -,
    상기 영역이 압축된 메모리 페이지로 실질적으로 채워졌다고 결정하는 것에 응답하여, 상기 제2 집합의 메모리 페이지를 클린으로 마킹된 것으로 식별하고 - 상기 영역은 적어도 상기 제2 집합의 메모리 페이지에서의 저장 공간의 임계량이 상기 압축된 메모리 페이지를 저장하는데 사용되었을 때 실질적으로 채워진 것임 -,
    프로그램으로부터 상기 메모리 관리자에 의해 수신된 상기 제1 집합의 메모리 페이지 중 적어도 하나의 메모리 페이지에 액세스하기 위한 요청에 응답하여, 상기 메모리 관리자로부터, 상기 제1 집합의 메모리 페이지 중 적어도 하나의 메모리 페이지에 대한 요청을 수신하고,
    상기 요청에 응답하여,
    상기 메모리 관리자로 하여금, 상기 제2 집합의 메모리 페이지 중 압축된 적어도 하나의 메모리 페이지를 저장하는 하나 이상의 메모리 페이지가 더티(dirty)로 마킹된다는 것을 식별하게 함으로써, 상기 압축된 적어도 하나의 메모리 페이지를 검색하고,
    상기 압축된 적어도 하나의 메모리 페이지를 압축해제하고,
    상기 압축해제된 적어도 하나의 메모리 페이지를 상기 메모리 관리자에게 리턴시키고,
    상기 제2 집합의 메모리 페이지 중 상기 하나 이상의 메모리 페이지를 검색(retrieve)한 후에 상기 제2 집합의 메모리 페이지 중 상기 하나 이상의 메모리 페이지 각각을 클린으로서 식별하도록 - 상기 메모리 관리자가 상기 압축해제된 적어도 하나의 메모리 페이지를 상기 프로그램으로 리턴하는 것을 방해하는 것을 피하기 위하여 상기 압축해제된 적어도 하나의 메모리 페이지를 리턴시킨 이후까지 상기 제2 집합의 메모리 페이지의 각 메모리 페이지를 클린으로 식별하는 것을 대기하는 것을 포함함 -
    구성되는 것인 컴퓨팅 디바이스.
  10. 제9항에 있어서, 상기 압축 저장 관리자는 또한, 상기 복수의 우선순위 레벨의 각각에서의 메모리 페이지에 대하여, 하나의 집합의 메모리 페이지의 식별, 상기 집합의 메모리 페이지의 압축, 상기 제2 집합의 메모리 페이지를 클린으로 마킹된 것으로 식별하는 것을 반복하도록 구성되는 것인 컴퓨팅 디바이스.
  11. 제9항에 있어서, 상기 제2 집합의 메모리 페이지를 클린으로 마킹된 것으로 식별하는 것은, 상기 메모리 관리자가 상기 제2 집합의 메모리 페이지를 페이지 파일에 복사하는 것을 피하도록 상기 제2 집합의 메모리 페이지의 각 메모리 페이지를 클린으로 마킹된 것으로 식별하는 것인 컴퓨팅 디바이스.
  12. 제9항에 있어서, 상기 압축 저장 관리자는 또한, 상기 메모리 관리자가 상기 제2 집합의 메모리 페이지 중 상기 하나 이상의 메모리 페이지가 이용가능하지 않다는 표시를 리턴하는 것에 응답하여, 상기 압축해제된 적어도 하나의 메모리 페이지가 아니라, 상기 적어도 하나의 메모리 페이지가 이용가능하지 않다는 표시를, 상기 메모리 관리자에게 리턴시키도록 구성되는 것인 컴퓨팅 디바이스.
  13. 컴퓨팅 디바이스에 있어서,
    하나 이상의 프로세서와,
    복수의 명령어를 저장한 하나 이상의 컴퓨터 판독가능한 저장 매체
    를 구비하며,
    상기 복수의 명령어는, 상기 하나 이상의 프로세스에 의해 실행될 때, 상기 하나 이상의 프로세서로 하여금,
    복수의 우선순위 레벨 중 특정한 하나의 우선순위 레벨을 각각 갖는 제1 집합의 메모리 페이지를 식별하게 하고 - 상기 제1 집합의 메모리 페이지의 각 메모리 페이지는, 그 메모리 페이지의 할당을 요청한 프로세스 또는 스레드에 대하여 상기 컴퓨팅 디바이스의 운영 체제에 의해 배정된 우선순위 레벨과 동일한 우선순위 레벨을 갖음 -,
    제2 집합의 메모리 페이지가 압축 저장 관리자에게 할당되도록 요청하게 하고 - 상기 제2 집합의 메모리 페이지는 상기 특정한 하나의 우선순위 레벨을 갖음 -,
    상기 제1 집합의 메모리 페이지를 상기 제2 집합의 메모리 페이지로 구성된 영역으로 압축하게 하고 - 상기 제2 집합의 메모리 페이지의 각 메모리 페이지는 상기 제1 집합의 메모리 페이지의 각 메모리 페이지와 동일한 타입으로 분류됨 -,
    상기 영역이 압축된 메모리 페이지로 실질적으로 채워졌다고 결정하는 것에 응답하여, 상기 제2 집합의 메모리 페이지를 클린으로 마킹된 것으로 식별하게 하고 - 상기 영역은 적어도 상기 제2 집합의 메모리 페이지에서의 저장 공간의 임계량이 상기 압축된 메모리 페이지를 저장하는데 사용되었을 때 실질적으로 채워진 것임 -,
    프로그램으로부터, 상기 제1 집합의 메모리 페이지 중 적어도 하나의 메모리 페이지에 액세스하기 위한 요청을 수신하게 하고,
    그 후에, 메모리 관리자로부터, 상기 제1 집합의 메모리 페이지 중 상기 적어도 하나의 메모리 페이지에 대한 요청을 수신하게 하고,
    상기 적어도 하나의 메모리 페이지가 이용가능한지 여부를 검사(check)하게 하고,
    상기 적어도 하나의 메모리 페이지가 이용가능하다는 것에 응답하여,
    상기 메모리 관리자로 하여금, 상기 제2 집합의 메모리 페이지 중 압축된 적어도 하나의 메모리 페이지를 저장하는 하나 이상의 메모리 페이지가 더티로 마킹된다는 것을 식별하게 함으로써, 상기 압축된 적어도 하나의 메모리 페이지를 검색하게 하고,
    상기 압축된 적어도 하나의 메모리 페이지를 압축해제하게 하고,
    상기 압축해제된 적어도 하나의 메모리 페이지를 상기 메모리 관리자에게 리턴시키게 하고,
    상기 제2 집합의 메모리 페이지 중 상기 하나 이상의 메모리 페이지를 검색한 후에 상기 제2 집합의 메모리 페이지 중 상기 하나 이상의 메모리 페이지 각각을 클린으로서 식별하게 하고 - 상기 메모리 관리자가 상기 압축해제된 적어도 하나의 메모리 페이지를 상기 프로그램으로 리턴하는 것을 방해하는 것을 피하기 위하여 상기 압축해제된 적어도 하나의 메모리 페이지를 리턴시킨 이후까지 상기 제2 집합의 메모리 페이지의 각 메모리 페이지를 클린으로 식별하는 것을 대기하는 것을 포함함 -,
    상기 적어도 하나의 메모리 페이지가 이용가능하지 않다는 것에 응답하여, 상기 적어도 하나의 메모리 페이지가 이용가능하지 않다는 표시를 상기 메모리 관리자에게 리턴시키게 하는 것인 컴퓨팅 디바이스.
  14. 제1항에 있어서, 상기 제2 집합의 메모리 페이지의 각 메모리 페이지의 타입은, 스탠바이(standby) 타입 또는 재배정 가능(re-assignable) 타입을 포함하는 것인 방법.
  15. 제13항에 있어서, 상기 제2 집합의 메모리 페이지를 클린으로 마킹된 것으로 식별하는 것은, 상기 메모리 관리자가 상기 제2 집합의 메모리 페이지를 페이지 파일에 복사하는 것을 피하기 위하여 상기 제2 집합의 메모리 페이지의 각 메모리 페이지를 클린으로서 식별하는 것을 포함하는 것인 컴퓨팅 디바이스.
  16. 제13항에 있어서, 상기 복수의 명령어는, 상이한 집합의 메모리 페이지에 대하여 동시에, 상기 제1 집합의 메모리 페이지를 식별하는 것, 상기 제1 집합의 메모리 페이지를 압축하는 것, 상기 제2 집합의 메모리 페이지를 클린으로 마킹된 것으로 식별하는 것을 각각 수행하는 복수의 스레드를 사용하여 실행되는 것인 컴퓨팅 디바이스.
  17. 제13항에 있어서, 상기 복수의 명령어는, 상이한 메모리 페이지에 대하여 동시에, 검색, 압축해제 및 리턴을 각각 수행하는 복수의 스레드를 사용하여 실행되는 것인 컴퓨팅 디바이스.
  18. 제17항에 있어서, 상기 상이한 메모리 페이지는 복수의 메모리 페이지에 대한 단일 요청에서 식별되는 상이한 메모리 페이지를 포함하는 것인 컴퓨팅 디바이스.
  19. 제13항에 있어서, 상기 복수의 명령어는 또한, 상기 하나 이상의 프로세서로 하여금,
    상기 제2 집합의 메모리 페이지 중 어느 메모리 페이지가 이용가능한지에 대한 레코드를 유지하게 하고,
    상기 요청에 대한 응답으로 상기 레코드를 검사함으로써 상기 적어도 하나의 메모리 페이지가 이용가능한지 여부를 검사하게 하는 것인 컴퓨팅 디바이스.
  20. 제13항에 있어서, 상기 제2 집합의 메모리 페이지의 각 메모리 페이지의 타입은, 스탠바이 타입 또는 재배정 가능 타입을 포함하는 것인 컴퓨팅 디바이스.
KR1020167000940A 2013-06-13 2013-09-19 페이지 기반 압축 저장 관리 KR102069940B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/917,149 2013-06-13
US13/917,149 US10102148B2 (en) 2013-06-13 2013-06-13 Page-based compressed storage management
PCT/US2013/060505 WO2014200526A1 (en) 2013-06-13 2013-09-19 Page-based compressed storage management

Publications (2)

Publication Number Publication Date
KR20160019949A KR20160019949A (ko) 2016-02-22
KR102069940B1 true KR102069940B1 (ko) 2020-02-11

Family

ID=49305139

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167000940A KR102069940B1 (ko) 2013-06-13 2013-09-19 페이지 기반 압축 저장 관리

Country Status (5)

Country Link
US (1) US10102148B2 (ko)
EP (1) EP3008602B1 (ko)
KR (1) KR102069940B1 (ko)
CN (1) CN105474180B (ko)
WO (1) WO2014200526A1 (ko)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9678748B2 (en) * 2013-12-17 2017-06-13 Infosys Limited Methods, systems and computer-readable media for managing a local stack
JP5928505B2 (ja) * 2014-02-26 2016-06-01 コニカミノルタ株式会社 画像処理装置、同装置における画像処理方法及び画像処理プログラム
US9684625B2 (en) 2014-03-21 2017-06-20 Microsoft Technology Licensing, Llc Asynchronously prefetching sharable memory pages
US9940167B2 (en) * 2014-05-20 2018-04-10 Red Hat Israel, Ltd. Identifying memory devices for swapping virtual machine memory pages
US9454308B2 (en) 2014-06-27 2016-09-27 International Business Machines Corporation Page compression strategy for improved page out process
CN105718206B (zh) * 2014-12-03 2018-08-03 中国人民解放军国防科学技术大学 能够感知raid的闪存转换层及其实现方法
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
US9871895B2 (en) * 2015-04-24 2018-01-16 Google Llc Apparatus and methods for optimizing dirty memory pages in embedded devices
JP6524945B2 (ja) * 2016-03-25 2019-06-05 日本電気株式会社 制御装置、記憶装置、記憶制御方法およびコンピュータプログラム
US10963377B2 (en) 2016-04-29 2021-03-30 Hewlett Packard Enterprise Development Lp Compressed pages having data and compression metadata
US9946660B2 (en) * 2016-07-29 2018-04-17 Hewlett Packard Enterprise Development Lp Memory space management
CN107018175B (zh) * 2017-01-11 2021-01-19 杨立群 移动云计算平台的调度方法和装置
US11216513B1 (en) * 2017-02-28 2022-01-04 Palo Alto Networks, Inc. Focused URL recrawl
US10715177B2 (en) * 2017-06-20 2020-07-14 Samsung Electronics Co., Ltd. Lossy compression drive
US10558364B2 (en) * 2017-10-16 2020-02-11 Alteryx, Inc. Memory allocation in a data analytics system
US11029879B2 (en) * 2018-01-29 2021-06-08 Samsung Electronics Co., Ltd Page size synchronization and page size aware scheduling method for non-volatile memory dual in-line memory module (NVDIMM) over memory channel
KR102533726B1 (ko) 2018-04-06 2023-05-18 삼성전자주식회사 전자 장치 및 그의 제어방법
US10592162B2 (en) * 2018-08-22 2020-03-17 Intel Corporation Distributed storage location hinting for non-volatile memories
US10944423B2 (en) * 2019-03-14 2021-03-09 International Business Machines Corporation Verifying the correctness of a deflate compression accelerator
US20210345177A1 (en) * 2020-05-04 2021-11-04 Qualcomm Incorporated Methods and apparatus for managing compressor memory
US20220357980A1 (en) * 2021-05-06 2022-11-10 Dell Products L.P. Selectively offloading the compression and decompression of files to a hardware controller

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020073298A1 (en) 2000-11-29 2002-06-13 Peter Geiger System and method for managing compression and decompression of system memory in a computer system
US20090112949A1 (en) 2007-10-31 2009-04-30 Microsoft Corporation Compressed storage management

Family Cites Families (82)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0097256B1 (en) 1982-06-21 1989-01-25 International Business Machines Corporation Method and apparatus for managing a buffer pool referenced by batch and interactive process
EP0346039A2 (en) 1988-06-06 1989-12-13 Demax Software, Inc Dynamic load balancing for multi-user computers
CA1329432C (en) 1988-11-02 1994-05-10 William Davy Method of memory and cpu time allocation for a multi-user computer system
US4965717A (en) 1988-12-09 1990-10-23 Tandem Computers Incorporated Multiple processor system having shared memory with private-write capability
US5125086A (en) 1989-06-29 1992-06-23 Digital Equipment Corporation Virtual memory paging apparatus with variable size in-page clusters
US5101485B1 (en) 1989-06-29 1996-12-10 Frank L Perazzoli Jr Virtual memory page table paging apparatus and method
US5394537A (en) 1989-12-13 1995-02-28 Texas Instruments Incorporated Adaptive page placement memory management system
US5247687A (en) 1990-08-31 1993-09-21 International Business Machines Corp. Method and apparatus for determining and using program paging characteristics to optimize system productive cpu time
CA2055295C (en) 1991-11-12 2000-05-23 Jean Gilles Fecteau Logical mapping of data objects using data spaces
US5826057A (en) 1992-01-16 1998-10-20 Kabushiki Kaisha Toshiba Method for managing virtual address space at improved space utilization efficiency
US5628023A (en) 1993-04-19 1997-05-06 International Business Machines Corporation Virtual storage computer system having methods and apparatus for providing token-controlled access to protected pages of memory via a token-accessible view
US5696926A (en) 1993-07-30 1997-12-09 Apple Computer, Inc. Method and apparatus for transparently compressing data in a primary storage device
AU1447295A (en) 1993-12-30 1995-08-01 Connectix Corporation Virtual memory management system and method using data compression
US5802599A (en) 1994-02-08 1998-09-01 International Business Machines Corporation System and method for allocating storage in a fragmented storage space
US5555399A (en) 1994-07-07 1996-09-10 International Business Machines Corporation Dynamic idle list size processing in a virtual memory management operating system
JP2831602B2 (ja) 1995-01-13 1998-12-02 富士通株式会社 圧縮データ管理装置及び圧縮データ管理方法
US5544349A (en) 1995-01-23 1996-08-06 International Business Machines Corporation Method and system for improving the performance of memory in constrained virtual memory environments by reducing paging activity
US5758174A (en) 1995-06-07 1998-05-26 International Business Machines Corporation Computer system having a plurality of stored system capability states from which to resume
US5966735A (en) 1996-11-22 1999-10-12 Digital Equipment Corporation Array index chaining for tree structure save and restore in a process swapping system
US6681239B1 (en) 1996-12-23 2004-01-20 International Business Machines Corporation Computer system having shared address space among multiple virtual address spaces
US6128713A (en) 1997-09-24 2000-10-03 Microsoft Corporation Application programming interface enabling application programs to control allocation of physical memory in a virtual memory system
US7024512B1 (en) 1998-02-10 2006-04-04 International Business Machines Corporation Compression store free-space management
WO2000004483A2 (en) 1998-07-15 2000-01-27 Imation Corp. Hierarchical data storage management
JP3444346B2 (ja) 1999-01-04 2003-09-08 日本電気株式会社 仮想メモリ管理方式
US6496912B1 (en) 1999-03-25 2002-12-17 Microsoft Corporation System, method, and software for memory management with intelligent trimming of pages of working sets
US6496909B1 (en) 1999-04-06 2002-12-17 Silicon Graphics, Inc. Method for managing concurrent access to virtual memory data structures
US6349372B1 (en) 1999-05-19 2002-02-19 International Business Machines Corporation Virtual uncompressed cache for compressed main memory
US6442664B1 (en) 1999-06-01 2002-08-27 International Business Machines Corporation Computer memory address translation system
US7089391B2 (en) * 2000-04-14 2006-08-08 Quickshift, Inc. Managing a codec engine for memory compression/decompression operations using a data movement engine
EP1182551B1 (en) * 2000-08-21 2017-04-05 Texas Instruments France Address space priority arbitration
US6564305B1 (en) 2000-09-20 2003-05-13 Hewlett-Packard Development Company Lp Compressing memory management in a device
US6877081B2 (en) 2001-02-13 2005-04-05 International Business Machines Corporation System and method for managing memory compression transparent to an operating system
US6516397B2 (en) 2001-04-09 2003-02-04 Hewlett-Packard Company Virtual memory system utilizing data compression implemented through a device
US7107299B2 (en) 2001-08-14 2006-09-12 Hewlett-Packard Development Company, L.P. Method and apparatus for managing large numbers of objects having the same property
US6775751B2 (en) 2002-08-06 2004-08-10 International Business Machines Corporation System and method for using a compressed main memory based on degree of compressibility
US6968424B1 (en) 2002-08-07 2005-11-22 Nvidia Corporation Method and system for transparent compressed memory paging in a computer system
US6910106B2 (en) 2002-10-04 2005-06-21 Microsoft Corporation Methods and mechanisms for proactive memory management
US6956507B2 (en) 2002-12-12 2005-10-18 International Business Machines Corporation Method and apparatus for morphing memory compressed machines
US20050132161A1 (en) 2003-12-15 2005-06-16 Nokia Corporation Creation of virtual memory space in a memory
US7296139B1 (en) 2004-01-30 2007-11-13 Nvidia Corporation In-memory table structure for virtual address translation system with translation units of variable range size
TWI267024B (en) 2004-06-18 2006-11-21 Winbond Electronics Corp Method and apparatus for connecting LPC bus and serial flash memory
US7587572B1 (en) 2004-08-31 2009-09-08 Sun Microsystems, Inc. Method and system for managing process memory configured in resizable uncompressed and compressed regions
US20060161912A1 (en) 2005-01-18 2006-07-20 Barrs John W Infrastructure for device driver to monitor and trigger versioning for resources
US7437529B2 (en) 2005-06-16 2008-10-14 International Business Machines Corporation Method and mechanism for efficiently creating large virtual memory pages in a multiple page size environment
WO2007005829A2 (en) 2005-07-01 2007-01-11 Nec Laboratories America, Inc. Operating system-based memory compression for embedded systems
US7984084B2 (en) 2005-08-03 2011-07-19 SanDisk Technologies, Inc. Non-volatile memory with scheduled reclaim operations
US7475183B2 (en) 2005-12-12 2009-01-06 Microsoft Corporation Large page optimizations in a virtual machine environment
US20070156386A1 (en) 2005-12-30 2007-07-05 Guenthner Russell W Linearization of page based memory for increased performance in a software emulated central processing unit
US7484074B2 (en) 2006-01-18 2009-01-27 International Business Machines Corporation Method and system for automatically distributing real memory between virtual memory page sizes
US8095931B1 (en) 2006-04-27 2012-01-10 Vmware, Inc. Controlling memory conditions in a virtual machine
US7624240B1 (en) 2006-10-17 2009-11-24 Vmware, Inc. Separate swap files corresponding to different virtual machines in a host computer system
US8015367B1 (en) 2007-02-16 2011-09-06 Vmware, Inc. Memory management methods in a computer system with shared memory mappings
US20090327621A1 (en) 2008-06-27 2009-12-31 Microsoft Corporation Virtual memory compaction and compression using collaboration between a virtual memory manager and a memory manager
KR101101789B1 (ko) 2009-07-20 2012-01-05 강명호 금속질감 성형품용 합성수지 조성물과 이를 이용한 사출성형방법 및 성형품
US8341380B2 (en) * 2009-09-22 2012-12-25 Nvidia Corporation Efficient memory translator with variable size cache line coverage
US8239610B2 (en) 2009-10-29 2012-08-07 Red Hat, Inc. Asynchronous page faults for virtual machines
US20110153978A1 (en) 2009-12-21 2011-06-23 International Business Machines Corporation Predictive Page Allocation for Virtual Memory System
US8386740B2 (en) 2010-03-29 2013-02-26 International Business Machines Corporation Modeling memory compression
US9015441B2 (en) 2010-04-30 2015-04-21 Microsoft Technology Licensing, Llc Memory usage scanning
US8484405B2 (en) 2010-07-13 2013-07-09 Vmware, Inc. Memory compression policies
CN103329112B (zh) * 2010-10-22 2015-12-16 意法爱立信有限公司 用于减少页面错误发生时压缩页面加载时间的方法和装置
US8495267B2 (en) 2010-11-24 2013-07-23 International Business Machines Corporation Managing shared computer memory using multiple interrupts
KR20120066198A (ko) 2010-12-14 2012-06-22 삼성전자주식회사 휘발성 메모리를 포함하는 저장 장치의 데이터 저장 방법
US8972696B2 (en) 2011-03-07 2015-03-03 Microsoft Technology Licensing, Llc Pagefile reservations
US8661221B2 (en) 2011-03-16 2014-02-25 International Business Machines Corporation Leasing fragmented storage between processes
US9286101B2 (en) * 2011-07-28 2016-03-15 Red Hat, Inc. Free page hinting
JP5385347B2 (ja) 2011-08-02 2014-01-08 レノボ・シンガポール・プライベート・リミテッド メイン・メモリのフリー・メモリ量を拡大する方法およびコンピュータ
KR101221241B1 (ko) 2011-08-26 2013-01-11 린나이코리아 주식회사 실 팩킹 및 조리장치와 외부 설치구조물의 실 팩킹구조
US8832411B2 (en) 2011-12-14 2014-09-09 Microsoft Corporation Working set swapping using a sequentially ordered swap file
US9053018B2 (en) 2012-06-29 2015-06-09 International Business Machines Corporation Compressed memory page selection based on a population count of a dataset
US9489293B2 (en) 2012-08-17 2016-11-08 Netapp, Inc. Techniques for opportunistic data storage
US9354916B2 (en) * 2012-11-29 2016-05-31 Red Hat Israel, Ltd. Detection of guest disk cache
KR102011135B1 (ko) 2012-12-11 2019-08-14 삼성전자주식회사 모바일 장치 및 그것의 스왑을 통한 데이터 관리 방법
US10565099B2 (en) * 2012-12-28 2020-02-18 Apple Inc. Methods and apparatus for compressed and compacted virtual memory
US9852055B2 (en) 2013-02-25 2017-12-26 International Business Machines Corporation Multi-level memory compression
US9396030B2 (en) 2013-03-13 2016-07-19 Samsung Electronics Co., Ltd. Quota-based adaptive resource balancing in a scalable heap allocator for multithreaded applications
KR20150043102A (ko) 2013-10-14 2015-04-22 한국전자통신연구원 하이브리드 메모리의 데이터 관리 장치 및 방법
US9400754B2 (en) 2013-12-19 2016-07-26 International Business Machines Corporation Asynchronous swap mechanism and page eviction from memory
US20150242432A1 (en) 2014-02-21 2015-08-27 Microsoft Corporation Modified Memory Compression
US9684625B2 (en) 2014-03-21 2017-06-20 Microsoft Technology Licensing, Llc Asynchronously prefetching sharable memory pages
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

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020073298A1 (en) 2000-11-29 2002-06-13 Peter Geiger System and method for managing compression and decompression of system memory in a computer system
US20090112949A1 (en) 2007-10-31 2009-04-30 Microsoft Corporation Compressed storage management

Also Published As

Publication number Publication date
US20140372715A1 (en) 2014-12-18
WO2014200526A1 (en) 2014-12-18
US10102148B2 (en) 2018-10-16
KR20160019949A (ko) 2016-02-22
CN105474180A (zh) 2016-04-06
CN105474180B (zh) 2019-06-25
EP3008602A1 (en) 2016-04-20
EP3008602B1 (en) 2019-12-18

Similar Documents

Publication Publication Date Title
KR102069940B1 (ko) 페이지 기반 압축 저장 관리
EP3108371B1 (en) Modified memory compression
US10310893B2 (en) Managing container pause and resume
EP3283965B1 (en) Reducing memory commit charge when compressing memory
US10649905B2 (en) Method and apparatus for storing data
CN104995895A (zh) 兼容扩展卸载令牌大小
US20190370009A1 (en) Intelligent swap for fatigable storage mediums
CN107408073B (zh) 使用存储器压缩来减少存储器提交开销
US9298499B2 (en) Identifier generation using named objects
US20220357980A1 (en) Selectively offloading the compression and decompression of files to a hardware controller
CN112905575A (zh) 数据采集的方法、系统、存储介质及电子设备
US9654140B1 (en) Multi-dimensional run-length encoding
US11755233B2 (en) System and method for memory management using memory device cleansing
CN117370353A (zh) 对键值存储中数据分片读写方法、系统、设备及存储介质
CN117094878A (zh) 图集资源销毁方法、装置、计算机设备和存储介质

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right