KR20160134750A - 공유가능한 메모리 페이지의 비동기 프리페칭 - Google Patents

공유가능한 메모리 페이지의 비동기 프리페칭 Download PDF

Info

Publication number
KR20160134750A
KR20160134750A KR1020167028519A KR20167028519A KR20160134750A KR 20160134750 A KR20160134750 A KR 20160134750A KR 1020167028519 A KR1020167028519 A KR 1020167028519A KR 20167028519 A KR20167028519 A KR 20167028519A KR 20160134750 A KR20160134750 A KR 20160134750A
Authority
KR
South Korea
Prior art keywords
memory
shareable
page
request
pages
Prior art date
Application number
KR1020167028519A
Other languages
English (en)
Inventor
예브게니 엠. 백
메흐메트 이이군
Original Assignee
마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 filed Critical 마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Publication of KR20160134750A publication Critical patent/KR20160134750A/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1663Access to shared memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/18Handling requests for interconnection or transfer for access to memory bus based on priority control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4234Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus
    • G06F13/4239Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus with asynchronous protocol
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4418Suspend and resume; Hibernate and awake
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/656Address space sharing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

프로세스가 메모리로부터 스왑아웃될 때, 프로세스의 공유가능한 메모리 페이지의 레코드가 유지된다. 그 후 공유가능한 메모리 페이지는 용도 변경될 수 있다. 프로세스가 추후에 메모리로 다시 스왑될 때, 프로세스 실행과 동시에 프로세스의 공유가능한 메모리 페이지가 프리페치된다. 이 프리페칭 동안에 프로세스가 물리적 메모리에 현재 없는 메모리를 요청하면, 그 메모리 페이지에 대해 높은 우선순위의 I/O 요청이 발행된다. 높은 우선순위의 I/O 요청은 I/O 큐의 앞에 위치하며, 따라서 보류중인 프리페치 요청 전에 높은 우선순위의 I/O 요청이 처리된다.

Description

공유가능한 메모리 페이지의 비동기 프리페칭{ASYNCHRONOUSLY PREFETCHING SHARABLE MEMORY PAGES}
컴퓨터 기술이 발전함에 따라, 컴퓨터 프로세서의 성능이 향상되어 왔다. 그러나, 이러한 컴퓨터 프로세서의 성능 향상은 때론 컴퓨터 내 다른 장애물(bottlenecks)로 인해 방해받는다. 예컨대, 프로세스를 실행하는데 이용가능한 RAM(random access memory)의 양이 컴퓨터 성능의 장애물이다. 컴퓨터에서 이러한 장애물들의 영향을 줄이기 위한 한 방법은 RAM의 양을 늘리는 것이다. 그러나, RAM은 여전히 고가이며, 따라서 컴퓨터에 RAM을 추가하기가 곤란할 수 있다.
본 개요는 후속하여 발명의 상세한 설명 부분에서 설명되는 개념들 중 선택된 것들을 단순화된 형태로 소개하고자 제공되는 것이다. 본 개요는 청구항의 청구대상의 핵심적인 특징이나 필수적인 특징들을 밝히고자 함이 아니며, 청구항의 청구대상의 범위를 결정하는 데 도움이 되고자 함도 아니다.
하나 이상의 특징에 따르면, 메모리로부터 스왑되는 컴퓨팅 장치의 프로세스에 대한 하나 이상의 공유가능한 후보 메모리 페이지가 식별된다. 하나 이상의 공유가능한 후보 메모리 페이지는 그 프로세스에 의해 컴퓨팅 장치의 하나 이상의 다른 프로세스와 공유가능한 메모리 페이지들을 포함한다. 하나 이상의 공유가능한 후보 메모리 페이지를 식별하는 레코드가 유지되고, 메모리 관리자는 하나 이상의 공유가능한 후보 메모리 페이지가 기록된 후에 하나 이상의 공유가능한 후보 메모리 페이지를 용도 변경(repurpose)할 수 있다.
하나 이상의 특징에 따르면, 컴퓨팅 장치는 메모리, 저장 장치, 및 메모리 관리자를 포함한다. 메모리 관리자는 컴퓨팅 장치의 프로세스를 메모리에 스왑하도록 구성되는데, 이 프로세스는 컴퓨팅 장치의 다른 프로세스와 공유가능한 하나 이상의 공유가능한 메모리 페이지를 사용한다. 메모리 관리자는 또한 이 프로세스가 실행 재개하게 하도록 구성되며, 프로세스가 실행중인 동안 하나 이상의 공유가능한 메모리를 비동기로 프리페칭(prefetching)한다.
도면들에서 유사한 특징부를 가리키기 위해 동일한 참조번호가 사용된다.
도 1은 하나 이상의 실시예에 따른 공유가능한 메모리 페이지를 비동기로 프리페칭하는데 이용되는 예시적인 시스템을 도시한 것이다.
도 2는 하나 이상의 실시예에 따른 프로세스의 공유가능한 메모리 페이지를 스왑아웃(out-swapping)하는 예시적인 프로세스를 도시한 흐름도이다.
도 3은 하나 이상의 실시예에 따른 프로세스의 공유가능한 메모리 페이지를 스왑인(in-swapping)하는 예시적인 프로세스를 도시한 흐름도이다.
도 4는 하나 이상의 실시예에 따른 예시적인 I/O 큐를 도시한 것이다.
도 5는 본 명세서에 기술된 다양한 기법을 구현할 수 있는 하나 이상의 시스템 및/또는 장치를 나타내는 예시적인 컴퓨팅 장치를 포함하는 예시적인 시스템을 도시한 것이다.
본 명세서에서는 공유가능한 메모리 페이지를 비동기로 프리페칭하는 것을 논의한다. 시스템 내 메모리는 메모리 페이지(또는 간단히 페이지)라고 하는 복수의 블록 또는 부분으로 이루어진다. 일부 메모리 페이지는 시스템 내 복수의 프로그램에 의해 공유가능하며, 이들 메모리 페이지는 파일 시스템 내의 파일이나 페이지 파일에 의해 백킹(backing)된다. 공유가능한 메모리 페이지는, 그 메모리 페이지가 임의의 특정 시간에 시스템 내의 복수의 프로그램에 의해 실제 공유되고 있는지 여부에 관계없이, 그 시스템 내의 복수의 프로그램에 의해 공유될 수 있는 메모리 페이지를 지칭한다. 프로그램이 스왑아웃될 경우, 공유가능한 메모리 페이지의 레코드(record)는 유지된다. 그러면 (공유가능한 메모리 페이지가 더티(dirty)인 경우 페이지 파일 또는 백킹 파일(backing file)에 기록된 후에) 공유가능한 메모리 페이지는 다른 용도로 변경될 수 있다. 프로그램의 전용 메모리 페이지(private memory page)와 같은 다른 메모리 페이지의 경우, 페이지 파일 내의 공간은 선택적으로 보존될 수 있고 이러한 메모리 페이지는 나중에 페이지 파일에 선택적으로 기록될 수 있다.
스왑아웃된 프로그램이 그 후에 스왑인되면(in-swapped), 프로그램은 그 프로그램의 다른 메모리 페이지(예컨대, 전용 메모리 페이지)가 페이지 파일로부터 판독된 후에 선택적으로 실행가능하게 된다. 프로그램 실행과 동시에, 프로그램의 공유가능한 메모리 페이지를 프리페칭하기 위한 I/O(입력/출력) 요청이 발행된다. 이들 I/O 요청은 I/O 큐 내에 유지된다. 프로그램이 현재 물리적 메모리에 있지 않은 메모리 페이지를 요구하면, 그 메모리 페이지에 대해 높은 우선순위의 I/O 요청이 발행된다. 높은 우선순위의 I/O 요청은 I/O 큐의 앞에 위치하거나 아니면 적절히 처리되며, 따라서 높은 우선순위의 I/O 요청이 I/O 큐 내의 다른 I/O 요청 이전에 처리된다. 메모리 페이지에 대한 I/O 프리페치 요청이 I/O 큐 내에 이미 있으면, 이 I/O 요청이 후속해서 수행될 수 있고, 반환된 데이터는 단순히 드롭(drop)되거나 아니면 적절히 처리될 수 있다.
도 1은 하나 이상의 실시예에 따른 공유가능한 메모리 페이지를 비동기로 프리페칭하는데 이용되는 예시적인 시스템(100)을 도시한 것이다. 시스템(100)은 메모리 관리자(102), 정책 관리자(policy manager)(104), 및 페이징된 메모리(106)를 포함한다. 일반적으로, 메모리 관리자(102)는 페이징된 메모리 내의 데이터의 저장을 관리한다. 메모리 관리자(102)는 페이징된 메모리(106)의 부분들을 시스템(100) 내의 다양한 프로그램(108)에 할당한다. 본 명세서에서는 프로그램(108)이 실행 중일 때, 이 프로그램(108)을 프로세스(실행중인 프로그램(108)의 인스턴스임)라고 하며, 따라서 프로그램(108)에 할당된 페이징된 메모리(106)의 부분들을 프로그램(108)의 프로세스에 할당된 것으로 지칭한다. 프로그램(108)은 애플리케이션, 운영 체제 프로그램, 또는 다른 컴포넌트 또는 모듈일 수 있다. 메모리 관리자(102)는, 이들 프로그램(108)으로부터, 페이징된 메모리(106)에서 데이터를 찾아오고(retrieve) 또한 페이징된 메모리(106)에 데이터를 기록하라는 요청을 수신한다. 페이징된 메모리(106)는, 예컨대, 휘발성 메모리(예컨대, RAM) 또는 비휘발성 메모리(예컨대, 플래시 메모리)와 같은 임의의 유형의 CPU(Central Processing Unit) 어드레스가능 메모리(addressable memory)일 수 있다.
메모리 관리자(102)는 페이징(paging)을 사용하여 페이징된 메모리(106)를 관리한다. 메모리 관리자(102)는 메모리(106)(예컨대, RAM)를 특정한(예컨대, 고정된) 크기의 데이터 단위인 페이지들로 편성(organize)한다. 페이징 동작은 데이터가 메모리(106) 내에 없을 때 백킹 파일(112)이나 페이지 파일(114)로부터 페이지 단위로 데이터를 판독하는 것을 말한다. 페이징 동작은 또한 백킹 파일(112)이나 페이지 파일(114)에 페이지 단위로 더티(수정된) 데이터를 다시 기록하는 것을 말한다. 따라서 메모리 페이지는 파일 백킹된 메모리 페이지(file backed memory page) 또는 페이지 파일 백킹된 메모리 페이지(page file backed memory page)라고도 한다. 이러한 페이징 기법은 당업자에게 잘 알려져 있다.
시스템(100)은 또한 저장 장치(110)를 포함한다. 저장 장치(110)는 시스템(100)의 (메모리(106)에 대해 보조적인)보조 기억 장치이며, 하나 이상의 실시예에서 페이징된 메모리(106)보다 더 느린 판독/기록 시간을 갖지만 더 큰 저장 용량을 갖는다. 저장 장치(110)는, 예컨대, 플래시 메모리(예컨대, SSD(solid state disk)) 또는 자기 디스크일 수 있다. 하나 이상의 백킹 파일(112)이 저장 장치(110)에 저장된다. 하나 이상의 백킹 파일(112)은, 공유가능한 메모리 페이지와 같이, 메모리 페이지에 포함되는 콘텐츠(예컨대, 데이터 또는 명령어)를 저장하는 페이징된 메모리(106)의 메모리 페이지의 일부를 백킹할 수 있다. 페이징된 메모리(106)의 메모리 페이지가 용도 변경되면, 메모리 페이지의 콘텐츠가 백킹 파일(112)(이 백킹 파일에 의해 상기 메모리 페이지가 백킹된다)로부터 페이징된 메모리(106)로 읽어들여질 수 있다. 백킹 파일은, 라이브러리 파일(예컨대, 동적 링크 라이브러리), 이진 또는 다른 실행가능 파일 등과 같은 임의의 다양한 형태를 취할 수 있다.
시스템(100)은 또한 메모리 페이지가 저장될 수 있는 페이지 파일(114)을 포함한다. 페이지 파일은 메모리(106)(예컨대, RAM)나 저장 장치(110)에 포함될 수 있다. 도 1에는 하나의 페이지 파일(114)이 도시되어 있지만, 복수의 페이지 파일이 시스템(100)에 포함될 수도 있다는 점을 알아야 한다. 공유가능한 메모리 페이지는 통상적으로 백킹 파일(112)에 의해 백킹되지만, 대안으로 페이지 파일(114)에 의해 백킹될 수도 있다. 본 명세서에서는 공유가능한 메모리 페이지가 백킹 파일(112)에 의해 백킹되는 것에 대해 논의하지만, 공유가능한 메모리 페이지는 대안으로 페이지 파일(114)에 의해 백킹될 수도 있다는 점을 알아야 한다.
메모리 관리자(102)는 메모리 관리자(102)의 기능을 수행하도록 동작하는 메모리 컨트롤러(116)와, 페이징된 메모리(106)의 메모리 페이지에 대한 다양한 정보의 기록인 페이지 테이블(118)을 포함한다. 페이지 테이블(118)은 메모리 페이지가 임의의 주어진 시간에 어디에 저장되는지를 나타내는 정보이다. 메모리 페이지는 통상적으로 물리적 메모리(페이징된 메모리(106)) 또는 보조 기억 장치(110)에 저장된다. 보조 기억 장치(110)에 저장된 메모리 페이지는 (백킹 파일(112)에 의해) 백킹되는 페이지 파일이나 기타 파일에 저장될 수 있다. 메모리 페이지가 물리적 메모리에 저장된 경우에는, 메모리 관리자(102)가 메모리 페이지에 직접 액세스한다. 메모리 페이지가 저장 장치(110)에 저장된 경우에는, 메모리 관리자(102)가 저장 장치(110)에 대해 적절한 파일로부터 메모리 페이지를 회수하라는 I/O 요청을 발행하고 그 메모리 페이지를 물리적 메모리에 저장한다. 또는, 메모리 관리자(102)는, 저장 장치(110)에서(또는 다른 장소에서) 메모리 페이지의 압축 저장을 관리하는 압축 모듈과 같이, 결국 저장 장치(110)로부터 메모리 페이지의 회수(retrieval)를 관리하는 다른 컴포넌트에 대해 I/O 요청을 발행할 수 있다.
페이징된 메모리(106)는 임의의 주어진 시간에 복수의 상이한 유형의 페이지들 중 하나로서 각각 분류될 수 있는 복수의 페이지를 포함하며, 이 분류는 시간이 경과함에 따라 변할 수 있다. 한 유형의 메모리 페이지는 프로그램(108)에 할당되어 프로그램(108)에 의해 현재 사용되는 메모리 페이지인데, 이 유형의 메모리 페이지를 프로그램(108)의 프로세스의 작업 세트(working set)(프로그램(108)의 작업 세트라고도 함) 내의 작업 세트 페이지(또는 할당된 페이지)라고도 한다. 현재 사용 중인 메모리 페이지는 임계 시간(예컨대, 이전 20초) 내에 프로그램(108)에 의해 액세스되는 메모리 페이지 또는 메모리 페이지가 메모리 관리자(102)에 의해 용도 변경되지 않는 방식으로 프로그램(108)에 의해 액세스되는 메모리 페이지를 지칭한다. 메모리 페이지를 용도 변경한다는 것은, 메모리 페이지가, 동일하거나 상이한 프로그램을 위해 또는 시스템에서 다른 용도를 위해 다른 데이터를 저장하거나 사용하는 것과 같이, 다른 목적으로 메모리 관리자(102)에 의해 재사용되는 것을 말한다. 메모리 페이지는, 예컨대 다른 프로그램에 할당되거나 하는 등의 방식으로 용도 변경될 수 있다.
또 다른 유형의 메모리 페이지는 프로그램(108)에 할당되었지만 현재 프로그램(108)에 의해 사용되지는 않는 메모리 페이지이며, 이 유형의 메모리 페이지는 대기 페이지(또는 재할당가능한 페이지)라고 한다. 현재 사용되지 않는 페이지는 그 콘텐츠가 수정되지 않았고(또는 마지막 수정 이후 페이지 파일(114) 또는 백킹 파일(112)에 기록되었고) 임계 시간(예컨대, 이전 20초) 내에 프로그램(108)에 의해 액세스되지 않은 페이지를 말하는데, 그렇지 않으면 메모리 페이지가 메모리 관리자(102)에 의해 용도 변경될 수 있는 방식으로 프로그램(108)에 의해 액세스되고 있을 것이다.
또 다른 유형의 메모리 페이지는 그 콘텐츠가 수정되었지만 아직 페이지 파일(114) 또는 백킹 파일(112)에 복사되지는 않은 메모리 페이지이며, 이 유형의 메모리 페이지를 수정된 페이지(또는 더티 페이지)라고 한다. 수정된 메모리 페이지는 메모리 관리자(102)에 의해 용도 변경되지 않는다. 그러나, 수정된 메모리 페이지를 페이지 파일(114) 또는 백킹 파일(112)에 저장한 후에는, 메모리 페이지의 분류가 (대기 페이지(standby page) 또는 프리 페이지(free page)로) 변경될 수 있다.
또 다른 유형의 메모리 페이지는 현재 프로그램(108)에 할당되지 않은 메모리 페이지이며, 메모리 관리자(102)는 이 메모리 페이지를 가지고 (용도 변경을 포함하여) 무엇이든 할 수 있다. 이 유형의 메모리 페이지를 프리 페이지(또는 할당해제된(de-allocated) 페이지)라고도 한다.
메모리 관리자(102)는 페이징된 메모리(106)의 메모리 페이지가 언제 프로그램(108)에 할당되는지, 어느 메모리 페이지가 어느 프로그램(108)에 할당되는지, 이전에 프로그램(108)에 할당된 어느 메모리 페이지가 용도 변경되는지 등을 판단하기 위해 다양한 규칙 또는 기준을 사용한다. 메모리 관리자(102)는 또한 메모리 페이지의 유형에 대한 분류를 결정하고 메모리 페이지의 분류를 적절하게 변경한다. 하나 이상의 실시예에서, 메모리 관리자(102)는 페이징된 메모리(106)의 메모리 페이지가 어떠한 유형의 페이지로서 분류되는지를 나타내는 리스트 또는 기타 레코드를 유지한다. 예를 들어, 메모리 관리자(102)는 작업 세트 페이지의 리스트 또는 기타 레코드, 대기 페이지의 리스트 또는 기타 레코드, 수정된 페이지의 리스트 또는 레코드, 프리 페이지의 리스트 또는 레코드 등을 유지할 수 있다.
메모리 페이지는 전용 페이지(private page) 또는 공유가능한 페이지로도 지칭될 수 있다. 전용 페이지는 특정 프로세스에 의해 소유되거나 전용되며 그 특정 프로세스에 의해 사용되고 다른 프로세스에는 사용되지 않는 메모리 페이지이다. 공유가능한 페이지는 복수의 프로세스에 의해 공유될 수 있고 복수의 프로세스 각각에 의해 사용될 수 있는 페이지이다. 임의의 주어진 시간에, 공유가능한 메모리 페이지가 하나 이상의 프로세스에 의해 사용될 수 있다. 공유가능한 메모리 페이지의 경우, 메모리 페이지가 소정 시간에 저장되는 물리적 메모리는 복수의 프로세스의 어드레스 공간에 맵핑될 수 있다. 그러나, 전용 메모리 페이지의 경우, 메모리 페이지가 소정 시간에 저장되는 물리적 메모리는 메모리 페이지를 소유하는 프로세스의 어드레스 공간에만 맵핑된다.
시스템(100)은 하나 이상의 장치를 나타낸다. 하나 이상의 실시예에서, 시스템(100) 내에 도시된 컴포넌트(102, 104, 106, 110)는 동일한 컴퓨팅 장치의 일부로서 포함된다. 또는 이들 컴포넌트는 둘 이상의 장치에 걸쳐 분산될 수 있다.
언제 메모리로부터 프로그램의 공유가능한 메모리 페이지를 스왑아웃할지 또는 메모리에 프로그램의 공유가능한 메모리 페이지를 스왑인할지가 판정된다. 이러한 판정은 메모리 관리자(102) 또는 메모리 관리자(102)에게 판정을 통지하는 다른 컴포넌트(예컨대, 전술한 정책 관리자(104), 또는 커널 모드 또는 사용자 모드에서 실행되는 다른 컴포넌트)에 의해 이루어질 수 있다. 프로그램의 공유가능한 메모리 페이지를 스왑아웃(스와핑 아웃(swapping out)이라고도 함)하는 것은 프로그램의 실행 인스턴스인 프로세스의 공유가능한 메모리 페이지의 적어도 일부를 프로세스의 작업 세트(또는 어드레스 공간)로부터 제거하여 공유가능한 메모리 페이지를 다른 목적으로 사용할 수 있게 하는 것을 말한다. 프로세스 어드레스 공간에서 공유가능한 메모리 페이지의 어드레스 세트의 레코드가 유지되어, 메모리 페이지가 나중에 스왑인될 수 있다. 프로그램의 공유가능한 메모리 페이지를 스왑아웃하는 것은 또한 프로그램의 실행 인스턴스인 프로세스의 공유가능한 메모리 페이지를 스왑아웃하는 것을 말한다.
프로그램의 공유가능한 메모리 페이지를 스왑인(스와핑 인(swapping in)이라고도 함)하는 것은 백킹 파일(112) 및/또는 페이지 파일(114)로부터 프로그램의 실행 인스턴스인 프로세스에서 공유가능한 메모리 페이지의 적어도 일부를 회수하고, 이 메모리 페이지를 물리적 메모리에 두는 것을 말한다. 프로그램의 공유가능한 메모리 페이지의 스왑인을 프로그램의 실행 인스턴스인 프로세스의 공유가능한 메모리 페이지의 스왑인이라고도 한다.
공유가능한 메모리 페이지는 통상적으로 수정되지 않고 따라서 통상적으로 백킹 파일(112)에 다시 기록되지 않고 용도 변경될 수 있다는 점을 알아야 한다. 그러나, 공유가능한 메모리 페이지가 수정되면, 이들은 용도 변경되기 전에 백킹 파일(112)(또는 페이지 파일(114))에 기록된다. 공유가능한 메모리 페이지는 복수의 프로세스에 의해 공유될 수 있으므로, 통상적으로 공유가능한 메모리 페이지가 그 일부로서 저장될 수 있는 어떠한 단일 인접 블록도 존재하지 않는데, 이러한 인접한 블록 내의 다른 메모리 페이지들은 공유가능한 메모리 페이지를 공유하는 상이한 프로세스에 대해 상이해야 할 것이라는 점을 알아야 한다.
하나 이상의 실시예에서, 프로세스의 전용 메모리 페이지도 스왑아웃될 수 있다. 전용 메모리 페이지의 레코드가 유지되고, 전용 메모리 페이지가 인접한 블록 내의 페이지 파일(114)에 기록되어, 순차 기록 및 판독을 이용하여 메모리 페이지가 페이지 파일(114)에 효율적으로 기록되게(그리고 후속적으로 페이지를 스왑인할 때 이들 페이지가 페이지 파일(114)로부터 판독되게) 할 수 있다. 예를 들어, 전용 메모리 페이지의 총 크기가 계산될 수 있고, 그러면 전용 메모리 페이지를 저장하기에 충분한 공간이 페이지 파일(114) 내에 확보될 수 있다. 또한, 확보된 공간 내에 각각의 전용 메모리 페이지의 위치가 확보될 수 있고, 이어서 이들 위치는 전용 메모리 페이지의 가상 어드레스 순서에 따라 정해질 수 있다. 하나 이상의 기록 동작에서, 전용 메모리 페이지들 각각은 페이지 파일(114)의 확보된 공간 내의 지정된 특정 위치에 기록된다. 전용 메모리 페이지는 작업 세트 내에서는 인접하지 않을 수 있지만, 이들은 페이지 파일(114) 내의 인접한 위치에 기록된다. 프로세스의 전용 메모리 페이지는 페이지 파일(114)로부터 전용 메모리 페이지를 판독하여 물리적 메모리에 이들 전용 메모리 페이지를 위치시킴으로써 스왑인될 수 있다. 스왑아웃 때 후보 페이지들을 인접한, 순차적인, 확보 공간에 기록하면, 후속 판독 동작이, 후속하는 스왑인 동작 동안에 페이지들이 작업 세트 내로 읽혀질 때, 페이지 파일(114)의 대형의 순차적인 블록을 읽게 할 수 있다.
프로세스의 전용 메모리 페이지가 스왑아웃되고 스왑인될 수 있지만, 본 명세서에서 논의하는 기법들은 전용 메모리 페이지의 이러한 임의의 스왑아웃이나 스왑인과 독립적으로 동작할 수 있다. 본 명세서에서 논의하는 기법들은 프로세스의 전용 메모리 페이지가 스왑아웃되는지 아니면 스왑인되는지 여부에 관계없이 이용될 수 있다.
도 2는 하나 이상의 실시예에 따른 프로세스의 공유가능한 메모리 페이지를 스왑아웃(out-swapping)하는 예시적인 프로세스(200)를 도시한 흐름도이다. 프로세스(200)는 도 1의 메모리 관리자와 같은 메모리 관리자 또는 다른 운영 체제 모듈에 의해 수행되며, 소프트웨어, 펌웨어, 하드웨어 또는 이들의 조합으로 구현될 수 있다. 프로세스(200)는 동작 집합으로 도시되어 있으며, 다양한 동작을 수행하는 도시된 순서로 제한되지 않는다. 프로세스(200)는 프로세스의 공유가능한 메모리 페이지를 스왑아웃하는 예시적인 프로세스이며, 프로세스의 공유가능한 메모리 페이지의 스왑아웃에 대한 추가적인 논의는 여러 도면을 참고하여 본 명세서에 포함된다.
프로세스(200)에서, 프로세스의 공유가능한 메모리 페이지의 스왑아웃 결정이 이루어진다(동작(202)). 이 결정은, 프로세스가 정지(inactive) 또는 일시정지(suspended)라는 판정, 프로세스와 연관된 하나 이상의 스레드가 특정 시간 동안 활동하지 않았다는 판정, 프로세스가 특정 시간 동안 배경(background) 상태에 있었다는 판정, 프로세스가 특정 시간 동안 정해진 개수의 페이지를 사용하지 않았다는 판정, 시스템 전체가 일시정지되었거나 정지되었다는 판정 등과 같은, 다양한 기준에 기초하여 (예컨대, 정책 관리자(104), 또는 메모리 관리자(102)와 같은 다른 모듈에 의해) 이루어질 수 있다. 이 결정은, 프로세스를 스왑아웃하라는 요청이 프로세스로부터 수신된다는 판정(예컨대, 프로세스의 현재 메모리 상태의 저장 포인트를 기록하는 프로세스에 대해), 시스템의 현재 사용자가 시스템을 로그아웃하고 있다는 판정, 프로세스의 디스플레이가 최소화되었다는 판정 등과 같은 다른 기준에 기초하여 이루어질 수 있다.
하나 이상의 공유가능한 후보 메모리 페이지가 식별된다(동작(204)). 하나 이상의 실시예에서, 메모리 관리자(102)는 프로세스의 각각의 공유가능한 메모리 페이지를 분석하고 정해진 기준에 기초하여 각각의 공유가능한 메모리 페이지가 스왑아웃할 후보인지 여부를 판정한다. 이 기준은, 예컨대, 프로세스의 작업 세트 내에 있는 공유가능한 페이지가 스왑아웃할 후보임을 나타낼 수 있다. 예를 들어, 이 기준은 공유가능한 메모리 페이지가 프로세스의 작업 세트 내에 있는지 여부에 관계없이 프로세스의 어드레스 공간 내에 있는 공유가능한 메모리 페이지가 스왑아웃할 후보임을 나타낼 수 있다. 다른 예로서, 이 기준은 프로세스의 어드레스 공간 내에 있지만 프로세스의 작업 세트 내에는 없는 공유가능한 메모리 페이지가 스왑아웃할 후보임을 나타낼 수 있다. 다른 예로서, 이 기준은 더티가 아닌 공유가능한 메모리 페이지가 스왑아웃할 후보임을 나타낼 수 있다. 이 기준은 이력에 기초한(history based) 것일 수 있다. 예를 들어, 스왑인된 후에 실행을 재개할 때 통상적으로 (예컨대 적어도 임계 시간 백분률) 프로세스에 의해 액세스되는 공유가능한 메모리 페이지가 식별될 수 있고(예컨대, 정책 관리자(104)에 의해), 이들 식별된 공유가능한 메모리 페이지는 공유가능한 후보 메모리 페이지일 수 있다.
동작(204)에서 식별된 공유가능한 메모리 페이지의 레코드가 유지된다(동작(206)). 공유가능한 메모리 페이지의 레코드는 다양한 형태를 취할 수 있으며, 동작(204)에서 식별된 공유가능한 메모리 페이지들의 표시이다. 예를 들어, 레코드는 동작(206)에서 생성된 식별된 공유가능한 메모리 페이지의 가상 어드레스들의 리스트일 수 있다.
프로세스(200)는 작업 세트로부터 공유가능한 메모리 페이지를 제거하라는 결정이 있는지 여부에 기초하여 계속된다(동작(208)). 이러한 결정은, 메모리 압력으로 인해 물리적 메모리의 일부가 이용가능해지도록 하는 메모리 관리자(102)에 의한 결정과 같이, 다양한 방식으로 이루어질 수 있다. 아니면 정책 관리자(104) 또는 메모리 관리자(102)는 다양한 다른 정책 또는 기준을 이용하여 이 결정을 할 수 있다. 또는, 사용자 모드 서비스나 기타 컴포넌트가 메모리 관리자에게, 페이징된 메모리(106)로부터 공유가능한 메모리 페이지를 제거할 때 공유가능한 메모리 페이지가 용도 변경될 수 있도록, 명령할 수 있다.
작업 세트로부터 공유가능한 메모리 페이지를 제거하려는 요구가 있다는 판정에 응답하여, 프로세스의 공유가능한 메모리 페이지들 중 하나 이상이 작업 세트로부터 제거된다(동작(210)). 작업 세트로부터 제거된 공유가능한 메모리 페이지는 대기 리스트 또는 프리 리스트(free list)에 추가되고, 그 다음에 이들 메모리 페이지는 메모리 관리자에 의해 원하는 대로 용도 변경될 수 있다. 동작(206)에서 유지된 레코드 내의 공유가능한 메모리 페이지들 모두가 작업 세트로부터 제거될 수도 있고, 또는 이들 공유가능한 메모리 페이지의 서브세트가 작업 세트로부터 제거될 수도 있다. 다양한 정책이나 기준들 중 어느 하나를 이용하여 공유가능한 메모리 페이지의 어느 서브세트를 작업 세트로부터 제거할지 판단할 수 있다.
하나 이상의 실시예에서, 공유가능한 메모리 페이지들 중 하나 이상이 수정되는(더티인) 경우가 발생할 수 있다. 이러한 경우, 수정된 하나 이상의 공유가능한 메모리 페이지는 동작(210)에서 대기 리스트나 프리 리스트에 추가되기 전에 하나 이상의 공유가능한 메모리 페이지를 백킹하는 백킹 파일(112)에 기록된다.
도 3은 하나 이상의 실시예에 따른 프로세스의 공유가능한 메모리 페이지를 스왑인하는 예시적인 프로세스를 도시한 흐름도이다. 프로세스(300)는 도 1의 메모리 관리자(102)와 같은 메모리 관리자 또는 기타 운영 체제 모듈에 의해 수행되며, 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합으로 구현될 수 있다. 프로세스(300)는 동작 집합으로 도시되어 있으며, 다양한 동작을 수행하기 위해 도시된 순서에 제한되지 않는다. 프로세스(300)는 프로세스의 공유가능한 메모리 페이지를 스왑인하는 예시적인 프로세스이며, 프로세스의 공유가능한 메모리 페이지의 스왑인에 대한 추가적인 논의는 여러 도면을 참고하여 본 명세서에 포함된다.
프로세스(300)에서, 프로세스의 공유가능한 메모리 페이지의 스왑인 결정이 이루어진다(동작(302)). 하나 이상의 실시예에서, 이 결정은 메모리 관리자(102)나 정책 관리자(104)에 의해 이루어지며, 다양한 기준에 기초하여 이루어질 수 있다. 이러한 기준은 프로세스가 더 이상 정지(inactive) 또는 일시정지(suspended)하지 않는다는 판정, 도 2의 동작(202)에서 스왑아웃 결정을 내리게 하는 조건들의 중지 등을 수신하는 것을 포함한다. 이러한 기준은 프로세스로부터 그 프로세스를 스왑인(예컨대 프로세스의 이전에 기록된 저장 지점 복원)하라는 요청의 수신, 사용자가 시스템에 로그인하는 것, 프로세스가 사용자 인터페이스의 디스플레이를 재개하는 것(예컨대, 디스플레이가 더 이상 최소화되지 않는 것) 등을 포함할 수 있다.
프로세스의 공유가능한 메모리 페이지가 비동기로 프리페치되고, 메모리 페이지가 물리적 메모리에 추가된다(배치된다)(동작(304)). 메모리 페이지는, 수신될 때 물리적 메모리에 추가될 수도 있고, 아니면 모든 프리페치된 공유가능한 메모리 페이지가 수신된 후에 물리적 메모리에 추가될 수도 있다. 비동기로 프리페치되는 공유가능한 메모리 페이지는 (도 2의 동작(206)에서)이전에 프로세스를 스왑아웃할 때 기록된 공유가능한 메모리 페이지이다. 하나 이상의 실시예에서, 도 2의 동작(206)에서 기록된 공유가능한 메모리 페이지들 모두는 비동기로 프리페치된다. 또는, 도 2의 동작(206)에서 기록된 공유가능한 메모리 페이지들의 서브세트만이 비동기로 프리페치된다.
하나 이상의 실시예에서, 공유가능한 메모리 페이지는 공유가능한 메모리 페이지에 대한 프리페치 I/O 요청을 I/O 리스트 또는 큐에 추가함으로써 비동기로 프리페치된다. 이들 프리페치 I/O 요청은 공유가능한 메모리 페이지에 대한 요청을 판독한다. I/O 큐는 저장 스택(100)이라고 하는 시스템의 운영 체제의 모듈 또는 컴포넌트에 의해 유지되는데, 이것은 저장 장치(110)와의 통신을 허용하는 적어도 하나의 드라이버 또는 기타 모듈을 포함한다. 또는 I/O 큐는 메모리 관리자(102) 또는 시스템(100)의 운영 체제의 다른 모듈 또는 컴포넌트에 의해 유지될 수 있다. 또는 I/O 큐는 저장 장치 컨트롤러(예컨대, 디스크 컨트롤러)와 같은 저장 장치와 연관된 하드웨어 모듈 또는 컴포넌트에 의해 유지될 수 있다. 각각의 프리페치 I/O 요청은 공유가능한 메모리 페이지들 중 하나 이상을 식별하며, 프리페치 I/O 요청은 저장 장치(110)의 백킹 파일(112)로부터 공유가능한 메모리 페이지를 찾아오기 위해 저장 장치(110)에 발행된다. 저장 장치(110)는 요청된 메모리 페이지를 메모리 관리자(102)에게 반환함으로써 프리페치 I/O 요청을 충족시킨다.
도 4는 하나 이상의 실시예에 따른 예시적인 I/O 큐(400)를 도시한 것이다. I/O 큐(400)는 복수의(m) 프리페치 I/O 요청(402(1), ..., 402(m))을 포함한다. 프리페치 I/O 요청(402)은 큐의 앞 또는 맨위에서부터 순서대로 발행된다. 예를 들면, 프리페치 I/O 요청(402(1))이 프리페치 I/O 요청(402(3)) 발행 이전에 발행된다. 발행된 프리페치 I/O 요청에 응답하여, 프리페치 I/O 요청에 의해 식별된 하나 이상의 공유가능한 메모리 페이지가 메모리 관리자(102)에 의해 저장 장치(110)로부터 수신되고, 메모리 관리자(102)는 수신된 메모리 페이지를 물리적 메모리에 저장한다. 도 4에는 도시되어 있지 않지만, 다른 프로세스로부터의 다른 I/O 요청이 I/O 큐(400) 내에 있을 수도 있다.
I/O 큐(400)를 유지하는 모듈이나 컴포넌트는 I/O 큐(400)에서 I/O 요청에 대한 복수의 우선순위 레벨을 지원한다. 임의의 수의 우선순위 레벨이 지원될 수 있으며, 하나 이상의 실시예에서 이들 복수의 우선순위 레벨은 일반 우선순위 및 높은 우선순위를 포함한다. 높은 우선순위의 I/O 요청은, 예컨대, (메모리 관리자(102)의 모듈을 포함하는) 시스템(100)의 운영 체제에 의해서만 이루어질 수 있다. 높은 우선순위의 I/O 요청은 I/O 큐(400)의 앞이나 맨 위, I/O 큐(400) 내에 이미 있는 임의의 다른 더 낮은 우선순위의 I/O 요청 위에 두어지거나 또는 높은 우선순위의 I/O 요청이 더 낮은 우선순위의 I/O 요청에 앞서 수행되어 완료되도록 처리된다. 따라서, 높은 우선순위의 I/O 요청이 라인의 앞으로 효과적으로 점프하여, I/O 큐(400) 내의 더 낮은 우선순위의 I/O 요청들을 건너뛰어 이들보다 앞서 발행될 수 있다.
도 3으로 돌아가서, 프로세스는 또한 실행을 재개할 수 있다(동작(306)). 프로세스는 스왑인되고, 따라서 이 프로세스는 이전에 실행되고 있었고 스왑아웃되었으며 따라서 프로세스의 실행이 재개되는 것으로 상정된다. 동작(304, 306)은 나란히 또는 동시에 수행될 수 있으며, 따라서 이 프로세스는 공유가능한 메모리 페이지가 비동기로 프리페치되는 동안 실행을 재개할 수 있다. 공유가능한 메모리 페이지의 프리페칭은 프로세스를 차단하지 않아 이 프로세스는 공유가능한 메모리 페이지의 프리페칭이 실행 전에 완료되기를 기다릴 필요가 없기 때문에, 공유가능한 메모리 페이지는 비동기로 프리페치된다고 말할 수 있다.
비동기 프리페칭 동안의 일부 지점에서, 프로세스는 현재 물리적 메모리에 없는 메모리 페이지를 요청한다(동작(308)). 이 요청은 공유가능한 메모리 페이지에 대한 것일 수도 있고 다른 메모리 페이지(예컨대, 전용 메모리 페이지)에 대한 것일 수도 있다. 물리적 메모리에 없는 메모리 페이지에 대한 요청은 페이지 폴트(page fault)를 트리거링하는데, 이것은 메모리 관리자(102)가 요청된 메모리 페이지를 회수하여 요청 메모리 페이지를 물리적 메모리에 추가하는 것에 의해 충족된다.
프로세스로부터의 이러한 요청에 응답하여, 요청된 메모리 페이지에 대한 높은 우선순위의 I/O 요청이 도 4의 I/O 큐(400)에 추가되고(동작(310)), 그 메모리 페이지가 수신되면 수신된 메모리 페이지가 물리적 메모리에 추가된다. 높은 우선순위의 I/O 요청은 동작(308)에서 요청된 메모리 페이지에 대해 발행되기 때문에, 요청된 메모리 페이지는, I/O 요청 큐(400) 내의 다른 보다 낮은 우선순위의 I/O 요청에 응답하여 수신된 메모리 페이지(비동기로 프리페치된 메모리 페이지)가 물리적 메모리에 추가되기 전에, 물리적 메모리에 추가된다.
도 4는 높은 우선순위의 I/O 요청(404)을 I/O 큐(400)에 삽입하는 것을 보여준다. 높은 우선순위의 I/O 요청(404)은 I/O 큐(400)의 앞이나 맨 위, 프리페치 I/O 요청(402) 위에 두어진다.
도 3으로 돌아가서, 동작들(308, 310)은 프리페치 I/O 요청의 전부 또는 적어도 임계량이 발행되고 요청된 메모리 페이지가 물리적 메모리에 추가될 때까지 계속된다. 프리페치 I/O 요청의 전부 또는 적어도 임계량이 발행되고 요청된 메모리 페이지가 물리적 메모리에 추가된 후에, 프로세스(300)는 종료된다. 따라서, 물리적 메모리에 현재 없는 메모리 페이지에 대한 후속 요청은 메모리 관리자(102)에 의해 다른 정책이나 기준을 사용하여 충족되며, 동작(310)에서 높은 운선순위로 발행될 필요가 없다.
하나 이상의 실시예에서는, 프로세스의 페이지의 특정한 스왑인 동안에 프로세스에 대해 발행될 수 있는 높은 우선순위의 I/O 요청의 개수에 제한을 둔다. 이 제한은 하나의 프로세스가 자신의 높은 우선순위의 I/O 요청으로 저장 장치(110)에 대한 액세스를 장악하지 못하게 돕는다.
비동기 프리페치 I/O 요청이 발행되는 동안 현재 물리적 메모리에 없는 메모리 페이지에 대한 요청을 높은 우선순위의 I/O 요청으로서 발행함으로써, 프로세스의 공유가능한 메모리 페이지의 프리페칭은 프로세스의 실행을 차단하지 않는다. 프로세스가 현재 물리적 메모리에 없는 메모리 페이지를 요구하는 경우, 프로세스는 비동기 프리페칭이 완료되기를 기다릴 필요가 없다.
예를 들어, 동작(308)에서의 요청은 프리페치 I/O 요청(402)이 이미 I/O 큐(400) 내에 있지만 아직 저장 장치(110)에는 발행되지 않은 메모리 페이지에 대한 것일 수 있다. 이러한 상황에서, 이미 I/O 큐(400) 내에 있는 프리페치 I/O 요청이 발행되어 메모리 페이지가 저장 장치(110)로부터 회수되기를 기다리기보다는, 메모리 페이지에 대한 추가적인 I/O 요청이 I/O 큐(400)에 추가된다. 그러나, 이 추가적인 I/O 요청은 높은 우선순위의 I/O 요청이다(예컨대, 동작(310)). 따라서, 프리페치 I/O 요청이 발행되어 저장 장치(110)로부터 완료되기를 기다리지 않고 메모리 페이지가 회수되어 물리적 메모리에 추가되며, 프로세스는 프리페치 I/O 요청이 저장 장치(110)에 발행되기를 기다릴 필요가 없다. 프리페치 I/O 요청은 I/O 큐(400) 내에 유지될 수 있고 저장 장치(110)에 발행될 수 있지만, 프리페치 I/O 요청에 응답하여 회수되는 메모리 페이지는 드롭되거나 아니면 무시될 수 있다(메모리 페이지가 이미 물리적 메모리에 있기 때문에). 이와 달리, 프리페치 I/O 요청에 응답하여 회수되는 메모리 페이지는, 메모리 페이지를 메모리에 복사한다거나, 페이지 테이블 엔트리를, 물리적 메모리 내에 이미 있는 메모리 페이지보다는 프리페치 I/O 요청에 응답하여 회수되는 메모리 페이지에 대한 지점으로 업데이트한다거하 하는 다른 방식으로 처리될 수 있다.
한편, 동작(308)에서의 요청은 프리페치 I/O 요청이 I/O 큐(400) 내에 아직 없는 메모리 페이지에 대한 것일 수도 있다. 이러한 요청은 공유가능한 메모리 페이지에 대한 요청일 수 있지만 꼭 그럴 필요는 없다. 이러한 상황에서, 메모리 페이지에 대한 높은 우선순위의 I/O 요청이 I/O 큐(400)에 추가된다(예컨대, 동작(310)). 높은 우선순위의 I/O 요청은 보다 낮은 우선순위의 I/O 요청 이전에 발행되며, 따라서 이 메모리 페이지는 회수되어 I/O 큐(400) 내의 보다 낮은 우선순위의 I/O 요청이 저장 장치(110)에 발행되기를 기다리지 않고 물리적 메모리에 추가된다. 따라서, 프로세스는, 그 프로세스가 I/O 큐(400) 내의 모든 I/O 요청이 충족되기를 기다리는 경우보다 더 신속하게 물리적 메모리 내의 요청된 페이지에 액세스하게 된다.
저장 장치(110), 또는 저장 장치(110)와 연관된 저장 컨트롤러는 그 자신이 I/O 요청을 유지하는 큐를 갖는다는 점을 알아야 한다. 이러한 상황에서, 저장 장치(110)에 발행된 높은 우선순위의 I/O 요청이 저장 장치(110)의 I/O 큐 내 보다 낮은 I/O 요청 뒤에 위치할 수 있다. 이러한 보다 낮은 우선순위의 I/O 요청은 높은 우선순위의 I/O 요청 전에 저장 장치(110)에 의해 충족될 것이다. 또는 저장 장치(110) 또는 저장 컨트롤러가 높은 우선순위의 I/O 요청을 지원하면, 저장 장치(110) 또는 저장 컨트롤러는 또한 높은 우선순위의 I/O 요청을 자신의 큐의 맨 위 또는 앞에 둘 수 있다.
본 명세서에서 논의한 기법들은 저장 장치(110)의 유형에 기초하여 프로세스의 메모리 페이지를 스왑인할 때 상이한 성능을 제공할 수 있다. 예를 들어, 본 명세서에서 논의한 기법들을 이용하여 프로세스의 메모리 페이지를 스왑인하는 것은 회전식 매체(예컨대, 자기 디스크) 유형의 장치보다 플래시 메모리 유형의 저장 장치를 사용하면 더 빨리 수행될 수 있다. 이 성능차는 저장 장치의 상이한 부분을 판독하는 것과 관련된 탐색 시간(seek time) 때문일 수 있다. 본 명세서에서 논의한 기법들은 선택적인 구성 파라미터일 수 있으며, 따라서 사용자 또는 관리자는 공유가능한 메모리 페이지가 기록되어야 하는지 그리고 프로세스의 메모리 페이지를 스왑아웃할 때 용도 변경되도록 허용되는지(따라서 프로세스의 메모리 페이지를 스왑인할 때 공유가능한 메모리 페이지가 비동기로 프리페치되어야 하는지)를 선택할 수 있다. 또는, 구성 파라미터는 (예컨대, 메모리 관리자(102) 또는 정책 관리자(104)에 의해) 저장 장치(110)의 결정된 성능 특성에 기초하여 자동으로 설정될 수 있다. 저장 장치(110)의 이들 성능 특성은 다른 방식으로 결정될 수 있는데, 예컨대 장치의 운영 체제에 의해 자동으로 결정되거나 다른 장치 또는 서비스에 의해 제공되거나 할 수 있다.
본 명세서에서 논의한 기법들은 다양한 사용 시나리오를 지원한다. 컴퓨팅 장치 상에서의 프로세스의 메모리 페이지는, 예컨대 프로세스가 중지될 때, 다른 프로세스를 위해 해제된(free) 물리적 메모리로 스왑아웃될 수 있다. 공유가능한 메모리 페이지를 용도 변경하는 능력 덕분에, 전용 메모리 페이지를 용도 변경함으로써 해제될 수 있는 것 이상으로 추가적인 물리적 메모리가 해제될 수 있다. 프로세스가 재개될 때, 프로세스에 의해 사용되거나 할당된 메모리 페이지는 신속하고 효율적으로 물리적 메모리에 반환될 수 있다. 공유가능한 메모리 페이지는 프로세스 실행과 동시에 비동기로 프리페치되며, 페이지 폴트(프로세스가 물리적 메모리에 없는 메모리 페이지를 요청하는 것)가 프로세스의 실행을 차단하지 않도록 주의해야 한다. 이런 방식으로, 시스템은, 프로세스가 이 모든 선제적인 프리페칭이 동시에 완료되기를 기다리게(이렇게 되면 프로세스 재개 경험을 차단할 것이다) 하지 않으면서, 프로세스가 사용할 가능성이 많은 메모리 페이지를 선제적으로 가져온다.
도 5는 본 명세서에 기술된 다양한 기법들을 구현할 수 있는 하나 이상의 컴퓨팅 시스템 및/또는 장치를 나타내는 예시적인 컴퓨팅 장치(502)를 포함하는 예시적인 시스템(500)을 도시한 것이다. 컴퓨팅 장치(502)는, 예를 들어 서비스 제공자의 서버, 클라이언트(예컨대, 클라이언트 장치)와 연관된 장치, 온칩 시스템, 및/또는 기타 다른 적합한 컴퓨팅 장치 또는 컴퓨팅 시스템일 수 있다.
도시된 예시적인 컴퓨팅 장치(502)는 서로 통신가능하게 연결되어 있는 처리 시스템(504), 하나 이상의 컴퓨터 판독가능 매체(506), 및 하나 이상의 I/O 인터페이스(508)를 포함한다. 도시되어 있지는 않지만, 컴퓨팅 장치(502)는 다양한 컴포넌트들을 서로 연결하는 시스템 버스 또는 다른 데이터 및 커맨드 전송 시스템을 더 포함할 수 있다. 시스템 버스는 메모리 버스 또는 메모리 컨트롤러, 주변 버스, 범용 직렬 버스, 및/또는 다양한 버스 아키텍쳐 중 임의의 것을 사용하는 프로세서 또는 로컬 버스와 같은 상이한 버스 구조의 임의의 하나 이상의 조합을 포함할 수 있다. 제어 및 데이터 라인과 같은 다양한 다른 예들이 고려된다.
처리 시스템(504)은 하드웨어를 사용하여 하나 이상의 동작을 수행하는 기능을 나타낸다. 따라서, 처리 시스템(504)은 프로세서, 기능 블록 등으로 구성될 수 있는 하드웨어 요소(510)를 포함하는 것으로 도시되어 있다. 이것은 하나 이상의 반도체를 이용하여 형성된 ASIC(주문형 반도체) 또는 다른 로직 장치로서의 하드웨어 구현을 포함할 수 있다. 하드웨어 요소(510)는 이들을 형성하는 재료 또는 그 내부에서 이용되는 처리 메커니즘에 의해 제한되지 않는다. 예를 들어, 프로세서는 반도체 및/또는 트랜지스터(예컨대 전자 집적 회로(IC))로 이루어질 수 있다. 이러한 상황에서, 프로세서 실행가능 명령어는 전자적으로 실행가능한 명령어일 수 있다.
컴퓨터 판독가능 매체(506)는 메모리/저장부(512)를 포함하는 것으로 도시되어 있다. 메모리/저장부(512)는 하나 이상의 컴퓨터 판독가능 매체와 연관된 메모리/저장 용량을 나타낸다. 메모리/저장부(512)는 휘발성 매체(예컨대, RAM) 및/또는 비휘발성 매체(예컨대, ROM, 플래시 메모리, 광학 디스크, 자기 디스크 등)를 포함할 수 있다. 메모리/저장부(512)는 고정식 매체(예컨대, RAM, ROM, 고정식 하드 드라이브 등) 및 분리식 매체(예컨대, 플래시 메모리, 분리식 하드 드라이브, 광 디스크 등)를 포함할 수 있다. 컴퓨터 판독가능 매체(506)는 후술하는 바와 같이 다양한 방식으로 구성될 수 있다.
입력/출력 인터페이스(508)는, 사용자가 컴퓨팅 장치(502)에 커맨드 및 명령어를 입력할 수 있게 하고 또한 사용자 및/또는 다양한 입력/출력 장치에 사용하는 다른 컴포넌트 또는 장치에게 정보를 제시할 수 있게 하는 기능을 나타낸다. 입력 장치의 예로는 키보드, 커서 제어 장치(예컨대, 마우스), 마이크(예컨대, 음성 입력용), 스캐너, 터치 기능(예컨대, 물리적 터치를 검출하도록 구성되는 용량성 센서 또는 기타 센서), (예컨대, 터치를 제스처로서 포함하지 않는 움직임을 검출하기 위해 적외선 주파수와 같은 가시적 또는 비가시적 파장을 이용할 수 있는) 카메라 등을 들 수 있다. 출력 장치의 예로는 디스플레이 장치(예컨대, 모니터 또는 프로젝터), 스피커, 프린터, 네트워크 카드, 촉각 반응 장치 등을 들 수 있다. 따라서, 컴퓨팅 장치(502)는 후술하는 바와 같이 다양한 방식으로 구성되어 사용자 상호작용을 지원할 수 있다.
컴퓨팅 장치(502)는 또한 메모리 관리자(514)를 포함한다. 메모리 관리자(514)는 전술한 공유가능한 메모리 페이지 기능을 위한 다양한 비동기 프리페칭을 제공한다. 메모리 관리자(514)는, 예컨대 도 1의 메모리 관리자(102)를 구현할 수 있다. 메모리 관리자(514)는, 컴퓨터 판독가능 매체(506)와 별도로 도시되어 있지만, 컴퓨터 판독가능 매체(506)의 일부로서 구현될 수 있다는 점을 알아야 한다.
다양한 기법들은 소프트웨어, 하드웨어 요소, 또는 프로그램 모듈의 일반적인 상황으로 설명될 수 있다. 일반적으로, 그러한 모듈은 특정 태스크를 수행하거나 또는 특정 추상 데이터 타입을 구현하는 루틴, 프로그램, 오브젝트, 요소, 컴포넌트, 데이터 구조 등을 포함한다. 본 명세서에 사용된 "모듈", "기능(functionality)" 및 "컴포넌트"란 용어는 일반적으로 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다. 본 명세서에 기술된 기법들의 특징은 플랫폼 독립적인데, 이는 이들 기법이 다양한 프로세서를 갖는 다양한 컴퓨팅 플랫폼 상에서 구현될 수 있음을 의미한다.
전술한 모듈들 및 기법들의 구현예는 일부 형태의 컴퓨터 판독가능 매체 상에 저장되거나 또는 이들을 통해 전송될 수 있다. 컴퓨터 판독가능 매체는 컴퓨팅 장치(502)에 의해 액세스될 수 있는 다양한 매체를 포함할 수 있다. 예를 들어, 컴퓨터 판독가능 매체는 "컴퓨터 판독가능 저장 매체" 및 "컴퓨터 판독가능 신호 매체"를 포함할 수 있다.
"컴퓨터 판독가능 저장 매체"는 단순한 신호 전송, 반송파, 또는 신호 그 자체와 달리, 유형적인, 정보의 영구 저장 및/또는 저장을 가능하게 하는 매체 및/또는 장치를 지칭한다. 따라서, 컴퓨터 판독가능 저장 매체는 비신호(non-signal) 전달 매체를 지칭한다. 컴퓨터 판독가능 저장 매체는, 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 논리 소자/회로 또는 기타 데이터 등과 같은 정보의 저장에 적합한 방법 또는 기술로 구현된 휘발성 및 비휘발성, 분리식 및 비분리식 매체 및/또는 저장 장치를 포함한다. 컴퓨터 판독가능 저장 매체의 예로는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 다른 광학 저장부, 하드 디스크, 자기 카세트, 자기 테이프, 자기 디스크 저장부 또는 기타 자기 저장 장치, 또는 기타 저장 장치, 유형의 매체, 또는 원하는 정보를 저장하기에 적합하고 컴퓨터에 의해 액세스될 수 있는 제품을 들 수 있다.
"컴퓨터 판독가능 신호 매체"는 명령어를, 예컨대 네트워크를 통해, 컴퓨팅 장치(502)의 하드웨어에 전송하도록 구성된 신호 전달 매체를 지칭한다. 신호 매체는 통상적으로 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 또는 반송파, 데이터 신호, 또는 기타 전송 메커니즘과 같은 변조된 데이터 신호 내의 다른 데이터를 포함할 수 있다. 신호 매체는 또한 임의의 정보 전달 매체를 포함한다. "변조된 데이터 신호"란 용어는 신호 내의 정보를 인코딩하는 방식으로 설정되거나 변경된 특징들 중 하나 이상을 갖는 신호를 의미한다. 예를 들어, 통신 매체는 유선 네트워크 또는 직도선(direct-wired) 연결과 같은 유선 매체, 및 음향, RF, 적외선 및 기타 무선 매체와 같은 무선 매체를 포함한다.
전술한 바와 같이, 하드웨어 소자(510) 및 컴퓨터 판독가능 매체(506)는, 일부 실시예에서 본 명세서에 기술된 기법들 중 적어도 일부 특징을 구현하기 위해 이용될 수 있는 하드웨어 형태로 구현된 명령어, 모듈, 프로그램가능 장치 로직 및/또는 고정된 장치 로직을 나타낸다. 하드웨어 요소는 집적 회로 또는 온칩 시스템의 컴포넌트, ASIC(application-specific integrated circuit), FPGA(field-programmable gate array), CPLD(complex programmable logic device), 및 실리콘 또는 다른 하드웨어 장치의 다른 구현예들을 포함할 수 있다. 이런 맥락에서, 하드웨어 요소는 명령어, 모듈, 및/또는 하드웨어 요소에 의해 구현된 로직에 의해 정의된 프로그램 태스크를 수행하는 처리 장치뿐만 아니라 실행할 명령어를 저장하는데 이용되는 하드웨어 장치, 예컨대 전술한 컴퓨터 판독가능 저장 매체로서 동작할 수 있다.
본 명세서에 기술된 다양한 기법들 및 모듈들을 구현하기 위해 앞서 말한 것들의 조합이 이용될 수도 있다. 따라서, 소프트웨어, 하드웨어, 또는 프로그램 모듈은, 몇몇 형태의 컴퓨터 판독가능 저장 매체 상에 그리고/또는 하나 이상의 하드웨어 요소(510)에 의해 구현된 하나 이상의 명령어 및/또는 로직으로서 구현될 수 있다. 컴퓨팅 장치(502)는 소프트웨어 및/또는 하드웨어 모듈에 대응하는 특정한 명령어 및/또는 기능을 실행하도록 구성될 수 있다. 따라서, 컴퓨팅 장치(502)에 의해 소프트웨어로서 실행될 수 있는 모듈로서의 모듈의 구현은, 예컨대, 컴퓨터 판독가능 저장 매체 및/또는 처리 시스템의 하드웨어 요소(510)의 사용을 통해 적어도 부분적으로 하드웨어로 달성될 수 있다. 명령어 및/또는 기능은 하나 이상의 제품(예컨대, 본 명세서에 기술된 기법들, 모듈들, 및 예들을 구현하기 위한 하나 이상의 컴퓨팅 장치(502) 및/또는 처리 시스템(504))에 의해 실행가능/동작가능할 수 있다.
또한 도 5에 도시된 바와 같이, 예시적인 시스템(500)은 PC, 텔레비전 장치 및/또는 모바일 서비스에서 애플리케이션을 실행할 때 끊김없는 사용자 경험을 위해 유비쿼터스 환경을 제공할 수 있다. 서비스 및 애플리케이션은 애플리케이션을 활용하거나, 비디오 게임을 하거나, 비디오를 시청하거나 하는 동안 하나의 장치로부터 다음 장치로 전환할 때 공통의 사용자 경험을 위해 세 환경 모두에서 실질적으로 유사하게 실행된다.
예시적인 시스템(500)에서, 복수의 장치가 중앙 컴퓨팅 장치를 통해 상호연결된다. 중앙 컴퓨팅 장치는 복수의 장치에 대해 로컬일 수도 있고 또는 복수의 장치로부터 원격으로 위치할 수 있다. 하나 이상의 실시예에서, 중앙 컴퓨팅 장치는 네트워크, 인터넷, 또는 다른 데이터 통신 링크를 통해 복수의 장치에 연결되는 하나 이상의 서버 컴퓨터의 클라우드일 수 있다.
하나 이상의 실시예에서, 이 상호연결 구조는 복수의 장치의 사용자에게 공통의 끊김없는 경험을 제공하기 위해 복수의 장치에 걸쳐 기능이 전달되게 할 수 있다. 복수의 장치 각각은 상이한 물리적 요건 및 능력을 가질 수 있고, 중앙 컴퓨팅 장치는 장치에 맞게 조정되지만 모든 장치에 공통인 경험을 장치에 전달할 수 있는 플랫폼을 사용한다. 하나 이상의 실시예에서, 타겟 장치의 부류(class)가 생성되고 경험이 일반 부류의 장치에 맞게 조정된다. 장치의 부류는 장치의 물리적 특징, 사용 유형, 또는 기타 공통인 특징에 의해 정의될 수 있다.
다양한 구현예에서, 컴퓨팅 장치(502)는 컴퓨터(516), 모바일(518), 및 텔레비전(520) 사용 등의 다양한 구성을 취할 수 있다. 이들 구성 각각은 일반적으로 상이한 구성 및 능력을 가질 수 있는 장치를 포함하며, 따라서 컴퓨팅 장치(502)는 상이한 장치 부류 중 하나 이상에 따라 구성될 수 있다. 예를 들어, 컴퓨팅 장치(502)는 개인용 컴퓨터, 데스크탑 컴퓨터, 멀티스크린 컴퓨터, 랩탑 컴퓨터, 넷북 등을 포함하는 장치의 컴퓨터(516) 부류로서 구현될 수 있다.
컴퓨팅 장치(502)는 모바일 폰, 휴대형 뮤직 플레이어, 휴대형 게이밍 장치, 태블릿 컴퓨터, 멀티스크린 컴퓨터 등과 같은 모바일 장치를 포함하는 장치의 모바일(518) 부류로서 구현될 수 있다. 컴퓨팅 장치(502)는 일반적인 뷰잉 환경에서 일반적으로 대형 스크린을 갖거나 또는 연결된 장치를 포함하는 장치의 텔레비전(520) 부류로서 구현될 수 있다. 이들 장치는 텔레비전, 셋탑 박스, 게이밍 콘솔 등을 포함한다.
본 명세서에 기술된 기법들은 컴퓨팅 장치(502)의 이들 다양한 구성에 의해 지원될 수 있으며, 본 명세서에 기술된 기법들의 특정 예에 한정되지 않는다. 이 기능은 모두 또는 부분적으로, 전술한 플랫폼(524)을 경유한 예컨대 "클라우드"(522)에 걸친 분산 시스템의 사용을 통해 구현될 수 있다.
클라우드(522)는 리소스(526)에 대한 플랫폼(524)을 포함하고/또는 이러한 플랫폼을 나타낸다. 플랫폼(524)은 하드웨어(예컨대, 서버)의 기본 기능 및 클라우드의 소프트웨어 리소스를 추상화한다. 리소스(526)는 컴퓨터 프로세싱이 컴퓨팅 장치(502)로부터 원격인 서버에서 실행되는 동안 이용될 수 있는 애플리케이션 및/또는 데이터를 포함할 수 있다. 리소스(526)는 또한 인터넷 상에서 그리고/또는 셀룰러 또는 WiFi 네트워크와 같은 가입자 네트워크를 통해 제공된 서비스를 포함할 수 있다.
플랫폼(524)은 컴퓨팅 장치(502)를 다른 컴퓨팅 장치와 연결하기 위해 리소스 및 기능을 추상화할 수 있다. 플랫폼(524)은 또한 그 플랫폼(524)을 통해 구현되는 리소스(526)에 대해 마주치는 요청에 대해 대응하는 스케일 레벨을 제공하기 위해 리소스의 스케일링을 추상화하는 역할을 할 수도 있다. 따라서, 상호연결된 장치 실시예에서, 본 명세서에 기술된 기능의 구현이 시스템(500)에 걸쳐 분산될 수 있다. 예컨대, 이 기능은 컴퓨팅 장치(502) 상에서뿐만 아니라 클라우드(522)의 기능을 추상화하는 플랫폼(524)을 통해서도 부분적으로 구현될 수 있다.
본 발명은 구조적 특징 및/또는 방법론적 동작에 특정한 언어로 기술되었지만, 첨부된 청구항에 정의된 본 발명은 반드시 이러한 특정한 특징 또는 기술된 동작으로 한정되지는 않는다. 오히려, 특정한 특징 및 동작은 청구된 본 발명을 구현하는 예시적인 형태로서 개시된다.

Claims (10)

  1. 컴퓨팅 장치로 구현되는, 컴퓨팅 장치의 물리적 메모리를 해제(free)하는 방법으로서,
    메모리로부터 스왑되는 상기 컴퓨팅 장치의 프로세스에 대한 하나 이상의 공유가능한 후보 메모리 페이지를 식별하는 단계 -상기 하나 이상의 공유가능한 후보 메모리 페이지는, 상기 프로세스에 의해 상기 컴퓨팅 장치의 하나 이상의 다른 프로세스와 공유가능한 메모리 페이지를 포함함- 와,
    상기 하나 이상의 공유가능한 후보 메모리 페이지를 식별하는 레코드를 유지하는 단계와,
    상기 컴퓨팅 장치의 메모리 관리자에 의해, 상기 하나 이상의 공유가능한 후보 메모리 페이지가 기록된 후에, 상기 하나 이상의 공유가능한 후보 메모리 페이지를 리스트에 추가하고, 상기 컴퓨팅 장치 내의 추가적인 프로세스에 의해 사용되도록 상기 하나 이상의 공유가능한 후보 메모리 페이지를 해제함으로써, 상기 메모리 관리자가 상기 하나 이상의 공유가능한 후보 메모리 페이지를 용도 변경하도록 허용하는 단계를 포함하는, 방법.
  2. 제1항에 있어서,
    상기 하나 이상의 공유가능한 후보 메모리 페이지는 상기 프로세스의 작업 세트 내의 공유가능한 메모리 페이지를 포함하는, 방법.
  3. 제1항에 있어서,
    상기 메모리 관리자가 상기 하나 이상의 공유가능한 후보 메모리 페이지를 용도 변경하도록 허용하는 것은, 상기 하나 이상의 공유가능한 후보 메모리 페이지 중 수정된 페이지가 백킹 파일(backing file)에 기록된 후에 상기 메모리 관리자가 상기 하나 이상의 공유가능한 후보 메모리 페이지 중 상기 수정된 페이지를 용도 변경하도록 허용하는 것을 포함하는, 방법.
  4. 제1항에 있어서,
    상기 식별하는 단계, 상기 유지하는 단계 및 상기 허용하는 단계를 수행한 후에,
    상기 프로세스를 메모리에 스왑하도록 결정하는 단계와,
    상기 레코드에 의해 식별된 상기 하나 이상의 공유가능한 후보 메모리 페이지를 비동기로 프리페칭하는 단계를 더 포함하는, 방법.
  5. 제4항에 있어서,
    상기 프로세스를 일시정지(suspend)하도록 한 결정에 응답하여 상기 식별하는 단계, 상기 유지하는 단계 및 상기 허용하는 단계를 수행하는 단계와,
    상기 프로세스의 일시정지 후에 상기 프로세스를 재개하기로 한 결정에 응답하여 상기 비동기로 프리페칭하는 단계를 더 포함하는, 방법.
  6. 컴퓨팅 장치로서,
    메모리와,
    저장 장치와,
    메모리 관리자를 포함하되,
    상기 메모리 관리자는
    상기 컴퓨팅 장치의 프로세스를 상기 메모리에 스왑하고 -상기 프로세스는 상기 컴퓨팅 장치의 다른 프로세스와 공유가능한 하나 이상의 공유가능한 메모리 페이지를 사용함- ,
    상기 프로세스가 실행을 재개하게 하며,
    상기 프로세스가 상기 하나 이상의 공유가능한 메모리 페이지를 기다리지 않고 실행을 신속하게 재개할 수 있게 하기 위해 상기 프로세스가 실행 중인 동안에 상기 하나 이상의 공유가능한 메모리 페이지를 비동기로 프리페치하도록 구성된, 컴퓨팅 장치.
  7. 제6항에 있어서,
    상기 메모리 관리자는, 상기 프로세스가 상기 메모리로부터 이전에 스왑되었을 때 생성된 상기 프로세스의 공유가능한 후보 메모리 페이지의 레코드에 액세스함으로써, 상기 하나 이상의 공유가능한 메모리 페이지를 식별하도록 더 구성되고, 상기 공유가능한 후보 메모리 페이지의 레코드는 상기 공유가능한 후보 메모리 페이지의 가상 어드레스의 리스트를 포함하는, 컴퓨팅 장치.
  8. 제6항에 있어서,
    상기 메모리 관리자는 상기 하나 이상의 공유가능한 메모리 페이지를 판독하라는 I/O 요청을 I/O 큐에 추가함으로써 상기 하나 이상의 공유가능한 메모리 페이지를 비동기로 프리페치하도록 구성되고,
    상기 메모리 관리자는 또한,
    상기 비동기 프리페치를 수행하는 동안, 상기 메모리에 없는 메모리 페이지 -상기 메모리 페이지에 대한 I/O 요청이 상기 I/O 큐에 이미 존재함- 에 대한 요청을 수신하고,
    상기 메모리 페이지에 대한 상기 요청에 응답하여, 높은 우선순위의 I/O 요청이 상기 I/O 큐 내의 다른 보다 낮은 우선순위의 I/O 요청 이전에 발행되도록 상기 높은 우선순위의 I/O 요청을 상기 I/O 큐에 추가하고,
    상기 높은 우선순위의 I/O 요청에 응답하여 수신된 상기 메모리 페이지를 상기 메모리에 추가하며,
    상기 I/O 큐 내에 이미 존재하는 상기 I/O 요청이 발행되게 하도록 구성되는, 컴퓨팅 장치.
  9. 제6항에 있어서,
    상기 메모리 관리자는 상기 하나 이상의 공유가능한 메모리 페이지를 판독하라는 I/O 요청을 I/O 큐에 추가함으로써 상기 하나 이상의 공유가능한 메모리 페이지를 비동기로 프리페치하도록 구성되고,
    상기 메모리 관리자는 또한,
    상기 비동기 프리페치를 수행하는 동안, 상기 메모리에 없는 메모리 페이지 -상기 메모리 페이지에 대한 I/O 요청은 상기 I/O 큐에 아직 존재하지 않음- 에 대한 요청을 수신하고,
    상기 메모리 페이지에 대한 상기 요청에 응답하여, 높은 우선순위의 I/O 요청이 상기 I/O 큐 내의 다른 보다 낮은 우선순위의 I/O 요청 이전에 발행되도록 상기 높은 우선순위의 I/O 요청을 상기 I/O 큐에 추가하고,
    상기 높은 우선순위의 I/O 요청에 응답하여 수신된 상기 메모리 페이지를 상기 메모리에 추가하도록 구성되는, 컴퓨팅 장치.
  10. 제6항에 있어서,
    상기 메모리 관리자는,
    상기 프로세스를 상기 메모리로부터 스왑아웃하고,
    상기 프로세스의 상기 하나 이상의 공유가능한 메모리 페이지를 식별하며,
    상기 프로세스의 상기 하나 이상의 공유가능한 메모리 페이지를 식별하는 레코드를 유지하고,
    상기 하나 이상의 공유가능한 메모리 페이지가 기록된 후에 상기 하나 이상의 공유가능한 메모리 페이지가 용도 변경되게 하도록 구성되는, 컴퓨팅 장치.
KR1020167028519A 2014-03-21 2015-03-18 공유가능한 메모리 페이지의 비동기 프리페칭 KR20160134750A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/221,829 US9684625B2 (en) 2014-03-21 2014-03-21 Asynchronously prefetching sharable memory pages
US14/221,829 2014-03-21
PCT/US2015/021129 WO2015142974A1 (en) 2014-03-21 2015-03-18 Asynchronously prefetching sharable memory pages

Publications (1)

Publication Number Publication Date
KR20160134750A true KR20160134750A (ko) 2016-11-23

Family

ID=52815290

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167028519A KR20160134750A (ko) 2014-03-21 2015-03-18 공유가능한 메모리 페이지의 비동기 프리페칭

Country Status (5)

Country Link
US (1) US9684625B2 (ko)
EP (1) EP3120251A1 (ko)
KR (1) KR20160134750A (ko)
CN (1) CN106462503A (ko)
WO (1) WO2015142974A1 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10102148B2 (en) 2013-06-13 2018-10-16 Microsoft Technology Licensing, Llc Page-based compressed storage management
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
US10439960B1 (en) * 2016-11-15 2019-10-08 Ampere Computing Llc Memory page request for optimizing memory page latency associated with network nodes
US11579855B2 (en) * 2017-12-15 2023-02-14 Microsoft Technology Licensing Llc Reduced memory consumption of compiler-transformed asynchronous methods
CN110704782A (zh) * 2019-09-30 2020-01-17 北京字节跳动网络技术有限公司 页面响应方法、装置、电子设备及存储介质
US11972034B1 (en) 2020-10-29 2024-04-30 Amazon Technologies, Inc. Hardware-assisted obscuring of cache access patterns
US11442865B1 (en) * 2021-07-02 2022-09-13 Vmware, Inc. Smart prefetching for remote memory
US11635919B1 (en) * 2021-09-30 2023-04-25 Amazon Technologies, Inc. Safe sharing of hot and cold memory pages

Family Cites Families (86)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE3379081D1 (en) 1982-06-21 1989-03-02 Ibm 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
US5101485B1 (en) 1989-06-29 1996-12-10 Frank L Perazzoli Jr Virtual memory page table paging apparatus and method
US5125086A (en) 1989-06-29 1992-06-23 Digital Equipment Corporation Virtual memory paging apparatus with variable size in-page clusters
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
US6298422B1 (en) 1996-06-17 2001-10-02 Network Associates, Inc. Method for reducing the memory requirements for an application program executing in a multi-tasking environment
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
US6564305B1 (en) 2000-09-20 2003-05-13 Hewlett-Packard Development Company Lp Compressing memory management in a device
US7047382B2 (en) 2000-11-29 2006-05-16 Quickshift, Inc. System and method for managing compression and decompression and decompression of system memory in a computer system
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
US20070005911A1 (en) 2005-07-01 2007-01-04 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
US7461242B2 (en) 2005-11-03 2008-12-02 Ati Technologies Ulc Method and apparatus for providing context switching of logic in an integrated circuit using test scan circuitry
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
US7702843B1 (en) 2006-04-27 2010-04-20 Vmware, Inc. Determining 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
US7895242B2 (en) 2007-10-31 2011-02-22 Microsoft Corporation Compressed storage management
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
EP2630573B1 (en) 2010-10-22 2015-05-20 ST-Ericsson SA Methods and devices for reducing compressed page loading time on page fault
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
US9183015B2 (en) 2011-12-19 2015-11-10 Vmware, Inc. Hibernate mechanism for virtualized java virtual machines
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
US10102148B2 (en) 2013-06-13 2018-10-16 Microsoft Technology Licensing, Llc Page-based compressed storage management
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
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

Also Published As

Publication number Publication date
US20150269111A1 (en) 2015-09-24
WO2015142974A1 (en) 2015-09-24
US9684625B2 (en) 2017-06-20
EP3120251A1 (en) 2017-01-25
CN106462503A (zh) 2017-02-22

Similar Documents

Publication Publication Date Title
KR20160134750A (ko) 공유가능한 메모리 페이지의 비동기 프리페칭
KR101993915B1 (ko) 원격으로 액세스되는 데이터의 효율적인 라이브-이송
JP6412583B2 (ja) 修正されたメモリー圧縮
US9680954B2 (en) System and method for providing virtual desktop service using cache server
US8863123B2 (en) Apparatus and method for virtualizing input/output devices using shared memory in host-based mobile terminal virtualization environment
US9110806B2 (en) Opportunistic page caching for virtualized servers
KR102047769B1 (ko) 메모리 가상화 기반 스냅샷 부트 장치 및 방법
WO2014109007A1 (ja) ストレージ階層管理システム
EP3796168A1 (en) Information processing apparatus, information processing method, and virtual machine connection management program
US10534720B2 (en) Application aware memory resource management
US20160266923A1 (en) Information processing system and method for controlling information processing system
CN102708060B (zh) 一种镜像文件访问方法、装置及系统
CN105637470B (zh) 用于脏数据管理的方法和计算设备
US20190004841A1 (en) Memory Sharing For Virtual Machines
US9542100B2 (en) Management of memory pages
US10642493B2 (en) Mobile device and data management method of the same
CN107408073B (zh) 使用存储器压缩来减少存储器提交开销
US9563572B2 (en) Migrating buffer for direct memory access in a computer system
JP6198858B2 (ja) 計算機、及び、ハイパバイザによる資源スケジューリング方法
US9195601B2 (en) Selective release-behind of pages based on repaging history in an information handling system
JP6377304B1 (ja) データ書き込み装置及び方法
US20170277587A1 (en) Computer system and memory dump method
US12050807B2 (en) Memory management system and method
US10169235B2 (en) Methods of overriding a resource retry
JP6919277B2 (ja) ストレージシステム、ストレージ管理装置、ストレージ管理方法、及びプログラム