KR101971389B1 - 연합 기반 메모리 관리 - Google Patents

연합 기반 메모리 관리 Download PDF

Info

Publication number
KR101971389B1
KR101971389B1 KR1020177031395A KR20177031395A KR101971389B1 KR 101971389 B1 KR101971389 B1 KR 101971389B1 KR 1020177031395 A KR1020177031395 A KR 1020177031395A KR 20177031395 A KR20177031395 A KR 20177031395A KR 101971389 B1 KR101971389 B1 KR 101971389B1
Authority
KR
South Korea
Prior art keywords
memory
association
application
processes
helper
Prior art date
Application number
KR1020177031395A
Other languages
English (en)
Other versions
KR20170132296A (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 KR20170132296A publication Critical patent/KR20170132296A/ko
Application granted granted Critical
Publication of KR101971389B1 publication Critical patent/KR101971389B1/ko

Links

Images

Classifications

    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • 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
    • 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
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • 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
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • 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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0638Combination of memories, e.g. ROM and RAM such as to permit replacement or supplementing of words in one module by words in another module
    • 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/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • G06F9/44526Plug-ins; Add-ons
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1072Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers for memories with random access ports synchronised on clock signal pulse trains, e.g. synchronous memories, self timed memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/205Hybrid memory, e.g. using both volatile and non-volatile memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

소프트웨어 프로세스들의 하나 이상의 메모리 연합들은, 데이터 프로세싱 시스템에 대해 메모리 감소 동작들을 수행할지 여부를 판정하기 위해 생성 및 사용된다. 일 실시예에서의 하나의 방법은, 제2 프로세스가 제1 프로세스를 포함하는 메모리 연합의 일부가 되어야 한다고 결정하는 것에 대한 응답으로, 새로 론칭되는 제2 프로세스를 기존의 메모리 연합에 추가하는 단계를 포함한다. DRAM과 같은 이용가능한 시스템 메모리가 낮다고 결정하는 것에 대한 응답으로, 시스템은 전경 애플리케이션들의 어느 메모리 연합이 가장 많은 양의 시스템 메모리를 사용하는지 결정하고, 그 다음 더 많은 시스템 메모리를 다른 프로세스들에 이용가능하게 하기 위해 그 메모리 연합에 대해 하나 이상의 메모리 감소 동작들을 수행한다.

Description

연합 기반 메모리 관리
본 개시내용은 데이터 프로세싱 시스템들에서의 자원 관리에 관한 것이고, 더 상세하게는 데이터 프로세싱 시스템을 제어하는 운영 체제에 의한 메모리 관리에 관한 것이다.
애플사로부터의 iOS 또는 OS X 또는 마이크로소프트로부터의 마이크로소프트 윈도우즈와 같은 운영 체제(OS)는, 디바이스 하드웨어 자원들을 관리하고 애플리케이션 소프트웨어와 같은 컴퓨터 프로그램들에 대한 공통 서비스들을 제공하는 소프트웨어의 집합체이다. 애플리케이션 소프트웨어는 컴퓨터 또는 다른 데이터 프로세싱 시스템으로 하여금 사용자 요청들 또는 다른 요청들 또는 다른 입력들에 대한 응답으로 유용한 작업들을 수행하게 하는 컴퓨터 프로그램으로 간주될 수 있다. 애플리케이션 소프트웨어의 특정 인스턴스는 소프트웨어 애플리케이션, 애플리케이션 프로그램, 애플리케이션 또는 앱으로 지칭되며, 이들은 본 명세서에서 상호 교환가능하게 사용된다. 애플리케이션 프로그램들은 통상적으로 운영 체제가 기능할 것을 요구한다.
점점 더 많은 앱들 및 서비스들이 소형 또는 모바일 디바이스들(예를 들어, 스마트폰)에 대해 이용가능해짐에 따라, 단일 디바이스에서 동시에 실행되는 애플리케이션들의 수는 상당히 증가되었다. 또한, 이러한 애플리케이션들 중 많은 것들은, 사용자가 이들을 사용하는 것을 종료한 후에 사용자에 의해 종료되거나 끝나지 않아서, 계속 실행되고, 따라서 이들이 더 이상 사용되고 있지 않은 경우에도 메모리(예를 들어, DRAM과 같은 휘발성 메모리)와 같은 시스템 자원들을 계속 사용한다. 또한, 유휴 배경 및 전경 애플리케이션들은 이들이 하나 이상의 마이크로프로세서들과 같은 프로세싱 또는 계산 자원들을 사용하지 않을 수 있는 동안에도, 이들이 유휴이고 사용중이 아닌 동안 RAM과 같은 메모리 자원들을 종종 사용한다. 동일한 디바이스 내의 이러한 다수의 애플리케이션들 또는 프로세스들은 디바이스 내에 내장된 동일한 메모리 자원들 및 계산 자원들을 공유함으로써 서로 경합하고, 운영 체제는 동시 컴퓨팅에서 자원 경합을 처리하기 위해 메모리 관리와 같은 자원 관리를 수행한다. 실행되는 또는 유휴 애플리케이션들에 의한 메모리의 사용을 제어하는 메모리 관리는 데이터 프로세싱 시스템에서 메모리(예를 들어, DRAM)의 사용에 대한 하나 이상의 표시에 기초하여 애플리케이션들을 종료시키는 기술들을 포함하였다. 미국 특허 제7,827,358호 및 제8,892,827호 및 공개된 미국 특허 출원 번호 제2013/0332936호 및 제2013/0326166호는, 캐시들을 삭제하는 것과 같은 다른 기술들을 또한 포함하는 이러한 기술들의 예들을 설명한다.
본 명세서에 설명된 하나 이상의 실시예들에서, 제1 호스트 애플리케이션과 같은 호스트 프로세스 및 임의의 헬퍼 프로세스들의 연합은, 그 연합 또는 프로세스들의 다른 연합들에 대해 메모리 관리 동작들을 수행할지 여부 또는 어떻게 수행할지를 결정하기 위해, 연합에서 프로세스들의 메모리 사용량(예를 들어, 총 메모리 풋프린트)을 결정하기 위해 사용된다. 일 실시예에서, 연합은, 메모리를 소비하고 메모리 관리를 위해 메모리 사용을 평가하는 경우 함께 고려되는 별개의 프로세스들의 그룹으로서 정의될 수 있다. 일 실시예에서, 시스템은 각각의 연합의 총 메모리 사용 풋프린트를 결정할 수 있고, 이러한 결정된 풋프린트들을 사용하여 (선택된 연합에서 하나 이상의 헬퍼 프로세스들을 종료하는 것과 같은) 메모리 사용 감소 동작들을 위한 하나의(또는 그 초과의) 연합을 선택할 수 있다. 일 실시예에서, 호스트 프로세스는 통상적으로 이의 연합에서 론칭된 제1 프로세스이고, 호스트 프로세스는, 연합이 메모리를 사용하는 동안 호스트 프로세스에 서비스들을 제공하는 헬퍼 프로세스들의 론칭을 유발한다. 호스트 프로세스가 헬퍼 프로세스의 론칭을 위해 (예를 들어, 애플리케이션 프로그래밍 인터페이스(API)를 통해) 호출하는 경우, 시스템은 헬퍼 프로세스가 호스트 프로세스의 연합의 일부로서 추가되어야 하는지 여부를 결정한다. 헬퍼 프로세스가 호스트 프로세스의 연합의 일부가 되어야 하면, 그 연합의 메모리 사용 풋프린트를 측정하거나 달리 결정하기 위해 그 헬퍼 프로세스는 호스트 프로세스의 연합에 추가된다.
일 실시예에 따른 방법은, 제1 호스트 애플리케이션으로 간주될 수 있는 제1 프로세스를 실행하는 단계; 제2 프로세스의 론칭에 대한 응답으로, 제2 프로세스가, 제1 호스트 애플리케이션을 포함하는 제1 메모리 연합의 일부인지 여부를 결정하는 단계; 제2 프로세스가 제1 메모리 연합의 일부인 것으로 결정한 것에 대한 응답으로 제2 프로세스를 제1 메모리 연합에 추가하는 단계; 데이터 프로세싱 시스템에서 이용가능한 메모리가 낮다고 결정하는 단계; 이용가능한 메모리가 낮다고 결정하는 것에 대한 응답으로, (제1 메모리 연합을 포함하는) 하나 이상의 메모리 연합들의 세트 내의 각각의 메모리 연합에 의해 사용되는 메모리의 양을 결정하는 단계; 및 제1 메모리 연합이 메모리 연합들의 세트 내의 임의의 다른 메모리 연합보다 많은 메모리를 사용하는 것으로 결정한 것에 대한 응답으로, 이용가능한 메모리의 양을 증가시키기 위해 제1 메모리 연합에 대해 하나 이상의 메모리 사용 감소 동작들을 수행하는 단계를 포함한다. 일 실시예에서, 이용가능한 메모리는 휘발성 동적 랜덤 액세스 메모리(DRAM)를 포함하고, 각각의 메모리 연합은 호스트 애플리케이션, 및 다른 호스트 애플리케이션들의 소프트웨어로부터 인스턴스화되거나 호스트 애플리케이션의 헬퍼 소프트웨어로부터 또는 다른 소스들로부터 인스턴스화되는 연관된 하나 이상의 프로세스들을 포함한다. 일 실시예에서, 제2 프로세스는 제2 호스트 애플리케이션의 소프트웨어로부터 인스턴스화될 수 있고 제2 프로세스는 제1 프로세스가 동작하는 제1 샌드박스와 별개이고 상이한 제2 샌드박스에서 동작한다. 일 실시예에서, 메모리 사용 감소 동작들은 하나 이상의 전경 애플리케이션들의 메모리 연합들에 대한 메모리 사용 감소 동작들을 수행하기 전에 배경 호스트 애플리케이션들 및 다른 배경 프로세스들에 대해 수행된다.
일 실시예에서, 각각의 메모리 연합은 연합 식별자를 가지며, 제1 메모리 연합에 대한 연합 식별자를 특정하는 호출을 통해 제2 프로세스가 론칭되는 경우, 제2 프로세스는 제1 메모리 연합의 일부로 결정된다. 일 실시예에서, 제1 호스트 애플리케이션이 론칭되는 경우, 제1 호스트 애플리케이션은 운영 체제 컴포넌트로부터 제1 메모리 연합에 대한 연합 식별자를 획득한다.
일 실시예에서, 제1 호스트 애플리케이션을 포함하는 제1 메모리 연합에 대해 메모리 사용 감소 동작들이 수행되는 경우, 제1 호스트 애플리케이션은 전경 애플리케이션이다. 일 실시예에서, 배경 애플리케이션들에 대한 메모리 감소 동작들은, 그러한 배경 애플리케이션들을 포함하는 메모리 연합들에 의해 사용되는 메모리의 양과 무관하게 수행되는데; 즉, 배경 애플리케이션들의 메모리 연합의 메모리 사용 풋프린트들은, 배경 애플리케이션들 또는 그러한 배경 애플리케이션들과 연관된 프로세스들에 대해 메모리 감소 동작들이 수행되는지 여부 또는 어떻게 수행되는지를 결정하기 위해 사용되지 않는다. 일 실시예에서, 제1 프로세스는 데몬 프로세스일 수 있다. 일 실시예에서, 제2 프로세스는 운영 체제에 의해 제공되는 소프트웨어 라이브러리 또는 제1 호스트 애플리케이션과 함께 제공되는 헬퍼 프로세스, 예를 들어, 제1 호스트 애플리케이션과 함께 또는 제1 호스트 애플리케이션의 번들에서 제공되는 헬퍼 프로세스들의 라이브러리로부터의 소프트웨어로부터 인스턴스화될 수 있다.
일 실시예에서, 메모리 연합들의 세트 내의 각각의 메모리 연합은 오직 하나의 호스트 애플리케이션 및 하나 이상의 헬퍼 프로세스들을 갖고, 제2 프로세스는 헬퍼 프로세스이다. 일 실시예에서 각각의 헬퍼 프로세스는 그 전체 라이프 사이클에서 오직 하나의 메모리 연합에 속하고, 메모리 연합 내의 호스트 애플리케이션이 종료되는 경우, 그 메모리 연합 내의 모든 헬퍼 프로세스들이 또한 종료된다. 일 실시예에서, 애플리케이션이 하나 초과의 메모리 연합에 대한 헬퍼 프로세스를 인스턴스화하기 위해 사용되는 경우, 그 헬퍼 프로세스의 고유한 인스턴스는 하나 이상의 메모리 연합들 각각에 대해 인스턴스화된다.
일 실시예에서, 메모리 연합 내의 프로세스들은, 선택된 메모리 연합 내에서 하나의 카테고리 내의 프로세스들이 그와 동일한 선택된 메모리 연합 내에서 다른 카테고리 내의 프로세스들을 종료하기 전에 종료되도록 메모리 감소 동작들을 구현하는 순서를 특정하는 상대적 우선순위를 각각 갖는 카테고리들로 그룹화된다. 일 실시예에서, 선택된 메모리 연합 내의 호스트 애플리케이션의 프로세스 또는 메인 프로세스는, 그 선택된 메모리 연합에 대해 메모리 감소 동작을 수행하는 경우 종료될 그 메모리 연합 내의 마지막 프로세스이다.
다양한 데이터 프로세싱 시스템들 및 방법들 및 DRAM 또는 플래시 메모리와 같은 비일시적 머신 판독가능 매체는 설명된 다양한 실시예들의 일부로서 본 명세서에서 설명된다.
위 발명의 내용은 본 개시내용 내에 모든 실시예들의 총망라한 목록을 포함하는 것은 아니다. 모든 시스템 및 방법은 위에서 정리된 다양한 양태들 및 실시예들의 모든 적합한 조합들, 및 또한 아래 발명을 실시하기 위한 구체적인 내용에 개시된 것들로부터 실시될 수 있다.
본 발명은 첨부 도면의 도면들에 제한이 아닌 예로서 도시되며 첨부 도면에서 유사한 도면 부호는 유사한 요소들을 나타낸다.
도 1은 본 명세서에 설명된 하나의 실시예에서 사용될 수 있는 프로세스들의 연합의 예를 도시한다.
도 2a는 다른 애플리케이션들의 메모리 연합들의 일부가 되는 그 다른 소프트웨어 애플리케이션들에 헬퍼 프로세스들을 제공할 수 있는 몇몇 소프트웨어 애플리케이션들의 실시예의 예를 도시한다.
도 2b는 본 명세서에 설명된 일 실시예에 따른 메모리 연합에 대한 데이터 구조의 예를 도시한다.
도 2c는 다양한 애플리케이션 프로그램들 및 운영 체제 소프트웨어 컴포넌트들을 포함하는 다양한 소프트웨어 컴포넌트들을 저장하기 위해 사용될 수 있는 비휘발성 저장 시스템의 예를 도시한다.
도 3은 메모리 연합들을 생성 및 사용하기 위한 일 실시예에 따른 방법의 흐름도이다.
도 4a 및 도 4b는 메모리 연합을 사용하기 위한 하나 이상의 방법들의 실시예를 예시하는 흐름도들이다.
도 5는 본 명세서에 설명된 실시예들에 따라 사용될 수 있는 프로세스들의 계층의 예를 도시한다.
도 6은 본 명세서에 설명된 하나 이상의 방법들과 함께 사용될 수 있고 휘발성 DRAM 또는 플래시 메모리 등과 같은 하나 이상의 비일시적 머신 판독가능 매체를 포함할 수 있는 데이터 프로세싱 시스템의 실시예를 도시한다.
아래에 논의된 상세들을 참조하여 다양한 실시예들 및 양태들이 설명될 것이고, 첨부된 도면들은 다양한 실시예들을 도시할 것이다. 하기의 설명 및 도면들은 예시적이며, 제한적인 것으로 해석되어서는 안 된다. 많은 구체적인 세부사항들이 다양한 실시예들의 철저한 이해를 제공하기 위해 기술된다. 그러나, 특정 예들에서, 주지된 또는 종래의 상세사항들은 실시예들의 간결한 논의를 제공하기 위해 설명되지 않는다.
본 명세서에서의 "하나의 실시예" 또는 "일 실시예"에 대한 언급은 그 실시예와 관련하여 기술된 특정한 특징, 구조, 또는 특성이 적어도 하나의 실시예에 포함될 수 있음을 의미한다. 본 명세서 내의 여러 곳에 나오는 문구 "일 실시예에서"는 반드시 모두 동일한 실시예를 언급하는 것은 아니다. 다음의 도면들에 도시된 프로세스들은 하드웨어(예컨대 회로부, 전용 로직 등), 소프트웨어, 또는 이 둘의 조합을 포함하는 프로세싱 로직에 의해 수행된다. 프로세스들이 일부 순차적 동작들의 관점에서 하기에 기술되지만, 기술된 동작들 중 일부는 상이한 순서로 수행될 수 있음이 이해되어야 한다. 또한, 일부 동작들은 순차적인 대신에 동시에 수행될 수 있다.
소프트웨어 프로세스들의 하나 이상의 메모리 연합들은, 데이터 프로세싱 시스템에 대해 메모리 감소 동작들을 수행할지 여부를 판정하기 위해 생성 및 사용된다. 일 실시예에서의 하나의 방법은, 제2 프로세스가 제1 프로세스를 포함하는 메모리 연합의 일부가 되어야 한다고 결정하는 것에 대한 응답으로, 새로 론칭되는 프로세스(제2 프로세스로 지칭됨)를 기존의 메모리 연합에 추가하는 단계를 포함한다. DRAM과 같은 이용가능한 시스템 메모리가 낮다고 결정하는 것에 대한 응답으로, 시스템은 전경 애플리케이션들의 메모리 연합들의 세트 내의 어느 메모리 연합이 가장 많은 양의 시스템 메모리를 사용하는지 결정하고, 그 다음 더 많은 시스템 메모리를 다른 프로세스들에 이용가능하게 하기 위해 그 메모리 연합에 대해 하나 이상의 메모리 감소 동작들을 수행한다. 일 실시예에서, 새로 론칭된 제2 프로세스는 다른 소프트웨어 애플리케이션 또는 호스트 애플리케이션으로부터의 확장과 같은 헬퍼 프로세스일 수 있거나, 헬퍼 프로세스들의 시스템-전체 라이브러리로부터 또는 제1 프로세스를 인스턴스화한 제1 호스트 애플리케이션에 의해 제공되는 헬퍼 프로세스들의 라이브러리로부터 인스턴스화될 수 있다. 일 실시예에서, 제1 호스트 애플리케이션은 웹 브라우저일 수 있고 제2 호스트 애플리케이션은 소셜 네트워크 애플리케이션(예를 들어, 페이스북)일 수 있고, 페이스북으로부터의 소프트웨어는 헬퍼 프로세스의 인스턴스를 생성하기 위해 사용될 수 있는 확장을 포함할 수 있어서, 웹 브라우저가 페이스북에 포스트를 생성하거나, 웹 브라우저 및 페이스북으로부터의 헬퍼 프로세스가 이들 각각의 샌드박스들에서 분리되어 유지되고 공지된 프로세스간 통신들을 통해 서로 통신하는 동안 일부 다른 페이스북 관련 기능을 수행하도록 허용한다.
도 1은 도 1에 도시된 메모리 연합의 호스트 애플리케이션인 호스트 애플리케이션 프로세스(102)를 포함하고 상이한 소프트웨어 소스들로부터의 몇몇 헬퍼 프로세스들을 또한 포함하는 프로세스들의 연합(101)의 예를 도시한다. 일 실시예에서 이들 헬퍼 프로세스들 각각은 공지된 프로세스간 통신 절차들에 의해 호스트 프로세스(102)와 소프트웨어 기반 메시지들을 통해 통신한다. 일 실시예에서, 헬퍼 프로세스들 각각은, 호스트 애플리케이션 프로세스(102)가 실행되는 샌드박스와 별개이고 구별되는 자기 자신의 별개의 및 구별되는 샌드박스에서 실행될 수 있다. 일 실시예에서, 상이한 헬퍼 프로세스들은 메모리 감소 동작들을 수행할지 여부 및 어떻게 수행할지를 결정하는 경우 본 명세서에 설명된 바와 같이 활용될 수 있는 상이한 카테고리들에서 카테고리화될 수 있다. 일 실시예에서, 각각의 헬퍼 프로세스의 카테고리는 헬퍼 프로세스에 할당된 역할 카테고리에 의존할 수 있다. 예를 들어, 확장 프로세스(104) 및 확장 프로세스(108)와 같은 확장 프로세스들은, 호스트 애플리케이션 프로세스(102)와 상이하고 호스트 애플리케이션 프로세스(102)를 인스턴스화한 소프트웨어와 상이한 다른 소프트웨어 애플리케이션들로부터 발생할 수 있다. 예를 들어, 확장 프로세스(104)는 호스트 애플리케이션 프로세스(102)를 인스턴스화한 애플리케이션 프로그램과 상이한 다른 애플리케이션 프로그램으로부터 발생할 수 있다. 유사하게, 확장 프로세스(108)는 호스트 애플리케이션 프로세스(102)를 인스턴스화한 소프트웨어 애플리케이션과 상이한 소프트웨어 애플리케이션으로부터 인스턴스화될 수 있다. 예를 들어, 도 2a를 참조하면, 호스트 애플리케이션 프로세스(102)가 웹 브라우저 애플리케이션(215)인 경우, 확장 프로세스(104)는 도 2a에 호스트 애플리케이션(201)으로서 도시된 소셜 네트워크 애플리케이션에 대한 소프트웨어 번들에 포함된 헬퍼 프로세스로부터의 소프트웨어로부터 인스턴스화된 확장 A(219)일 수 있다. 일 실시예에서, 확장 프로세스 카테고리는 애플리케이션 프로세스(102)를 인스턴스화한 애플리케이션 프로그램과 상이한 다른 애플리케이션들로부터 인스턴스화된 그러한 프로세스들일 수 있다. 헬퍼 프로세스(106)는, 애플리케이션 프로세스(102)를 인스턴스화한 소프트웨어와 번들링되거나 또는 달리 그에 포함되거나 그에 의해 제공된 소프트웨어 라이브러리로부터 기인할 수 있다. 헬퍼 프로세스(106)는 확장 프로세스들(104 및 108)과 상이한 역할 또는 카테고리를 갖는다. 헬퍼 프로세스(110)는 미지의 역할 또는 미지의 프로세스이고, 헬퍼 프로세스들의 자기 자신의 카테고리를 갖는다. 일 실시예에서, 미지의 프로세스들 또는 카테고리는, 미지인 그러한 프로세스들이 연합 내에서 먼저 종료될 것인 한편 호스트 애플리케이션 프로세스는 마지막으로 종료될 것이라는 관점에서, 가장 낮은 우선순위를 갖는다. 헬퍼 프로세스들(104, 106, 108 및 110) 각각은, 호스트 애플리케이션 프로세스(102)를 또한 포함하는 메모리 연합 내에 포함된다. 일 실시예에서, 도 1에 도시된 이러한 메모리 연합 내의 프로세스들 모두에 의해 소비되는 전체 메모리는, 메모리 연합들 중 적어도 하나에 대해 메모리 감소 동작들을 수행할지 여부 및 어떻게 수행할지를 결정하는 경우 다른 메모리 연합들에 대해 함께 합산 및 고려될 것이며; 일 실시예에 따라 메모리 감소 동작들이 어떻게 수행될 수 있는지와 관련된 추가적인 정보는 아래에서 추가로 제공될 것이다.
일 실시예에서, 태블릿 컴퓨터 또는 스마트폰 또는 랩탑 컴퓨터 또는 데스크탑 컴퓨터 또는 다른 유형의 데이터 프로세싱 시스템과 같은 데이터 프로세싱 시스템은 운영 체제 소프트웨어 및 운영 체제와 연관된 다른 소프트웨어에 추가로 복수의 애플리케이션 프로그램들을 포함할 수 있어서, 다양한 애플리케이션들이 데이터 프로세싱 시스템의 하드웨어와 함께 기능하도록 허용한다.
도 2c는 이러한 소프트웨어 및 하드웨어 시스템의 일반적인 버전을 도시하는 한편, 도 2a는 적어도 4개의 애플리케이션 프로그램들(웹 브라우저 프로그램, 이메일 프로그램, 사진 편집 프로그램 및 소셜 네트워크 애플리케이션 프로그램)을 포함하는 데이터 프로세싱 시스템의 보다 구체적인 예를 도시한다. 도 2c를 참조하면, 비휘발성 저장 시스템(271)은, 헬퍼 프로세스들이 본 명세서에 설명된 방식으로 호스트 애플리케이션들에 대한 서비스들을 수행하도록 허용하기 위해 다양한 애플리케이션 번들들 및 그러한 애플리케이션 번들들로부터 인스턴스화된 소프트웨어 또는 인스턴스화된 프로세스들과 상호동작할 수 있는 운영 체제의 커널 소프트웨어(272) 및 프로세스간 통신 소프트웨어(273) 및 론칭 데몬 소프트웨어(274)를 포함하는 운영 체제의 몇몇 컴포넌트들과 함께 애플리케이션 번들(275 및 281)과 같은 몇몇 애플리케이션 번들들을 포함할 수 있다. 도 2c에 도시된 각각의 애플리케이션 번들은, 호스트 애플리케이션에 대한 메인 실행가능 프로세스를 인스턴스화할 수 있는 호스트 애플리케이션을 포함할 수 있고, 번들은 또한 본 명세서에 설명된 방식으로 다른 애플리케이션들에 대한 서비스들을 제공할 수 있는 애플리케이션 확장들을 포함할 수 있다. 예를 들어, 애플리케이션 번들(275)은 메인 실행가능 프로세스가 인스턴스화될 수 있는 호스트 애플리케이션(276)을 포함하고, 또한 다른 애플리케이션들을 위한 확장 또는 헬퍼 프로세스들을 인스턴스화하기 위해 사용될 수 있는 하나 이상의 애플리케이션 확장들(278)을 포함한다. 또한, 애플리케이션 번들(275)은 호스트 애플리케이션(276)에 포함된 서비스 라이브러리(예를 들어, XPC 서비스들)의 일부인 하나 이상의 헬퍼 프로세스들을 포함한다. XPC 서비스들은 캘리포니아 쿠퍼티노에 있는 애플사의 OS X 운영 체제를 사용하는 시스템들 상에서 제공될 수 있는 헬퍼 프로세스들의 예이다. 애플리케이션 번들(281)은 또한 호스트 애플리케이션(283)뿐만 아니라 XPC 카테고리의 하나 이상의 헬퍼 프로세스들(285) 및 헬퍼 프로세스 서비스들을 다른 애플리케이션들에 제공할 수 있는 하나 이상의 애플리케이션 확장들(287)을 포함한다. 커널 소프트웨어(272)는 OS X 운영 체제의 마흐 커널(Mach kernel)과 같은 종래의 커널 소프트웨어와 유사할 수 있다. IPC 소프트웨어(273)는 데이터 프로세싱 시스템 상에서 동시에 실행중인 상이한 소프트웨어 프로세스들 사이의 통신을 허용하는 종래의 프로세스간 통신 소프트웨어일 수 있다. 론칭 데몬 소프트웨어(274)는, 애플리케이션 또는 다른 프로세스의 론칭을 검출하고, 론칭의 결과로서, 개시된 소프트웨어에 대한 프로세스 또는 복수의 프로세스들을 인스턴스화하는 종래의 데몬 소프트웨어일 수 있다. 일 실시예에서, 론칭은, 사용자가 아이콘을 탭하거나 본 기술분야에서 공지된 바와 같이 그래픽 사용자 인터페이스에서 아이콘을 더블 클릭한 결과일 수 있다.
도 2a는 4개의 호스트 애플리케이션들 중 2개가 휘발성 스토리지에서 현재 실행중인 4개의 호스트 애플리케이션들을 포함하는 데이터 프로세싱 시스템의 특정 예를 도시한다. 도 2a에 도시된 예에서, 비휘발성 스토리지는 웹 브라우저 애플리케이션 및 이메일 애플리케이션의 저장된 이미지들을 포함하고, 휘발성 스토리지는 웹 브라우저 프로세스(웹 브라우저 애플리케이션에 의해 인스턴스화됨) 및 이메일 프로세스(이메일 애플리케이션에 의해 인스턴스화됨)를 포함한다. 웹 브라우저 프로세스는 웹 브라우저 연합(215)을 생성하고 이메일 프로세스는 이메일 연합(231)을 생성한다. 비휘발성 스토리지는 또한 소셜 네트워크 애플리케이션에 대한 호스트 애플리케이션 번들(201) 및 사진 편집 애플리케이션에 대한 호스트 애플리케이션 번들(207)을 포함한다. 일 실시예에서, 소셜 네트워크 애플리케이션은 페이스북 애플리케이션일 수 있고, 사진 편집 애플리케이션은 어도비 포토샵 애플리케이션일 수 있다. 각각의 경우에, 호스트 애플리케이션 번들은 다른 애플리케이션들의 헬퍼 프로세스들을 인스턴스화하기 위해 사용될 수 있는 하나 이상의 확장들을 포함한다. 또한, 각각의 애플리케이션 번들은 애플리케이션 번들(201)에 대한 메인 실행가능(203) 및 호스트 애플리케이션 번들(207)에 대한 메인 실행가능(209)과 같은 메인 실행가능 프로세스에 대한 소프트웨어의 이미지를 포함한다. 도 2a에 도시된 예에서, 사용자는 웹 브라우저 연합(215)에서 웹 브라우저 프로세스를 인스턴스화하고 또한 이메일 연합(231)에서 이메일 프로세스를 생성하기 위해 이메일 애플리케이션을 론칭한 웹 브라우저 애플리케이션을 론칭하였다. 웹 브라우저 연합(215)은 현재 실행중인 메인 실행가능 프로세스(217)(메인 웹 브라우저 프로세스)를 포함하는 복수의 프로세스 및 소셜 네트워크 애플리케이션 번들(201) 내로부터의 확장(205)으로부터 인스턴스화된 확장 A의 인스턴스를 포함하고, 웹 브라우저 연합(215)은 또한 일 실시예에서 XPC 서비스 프로세스일 수 있는 이러한 인스턴스에서 웹 브라우저의 소프트웨어 라이브러리로부터 인스턴스화된 헬퍼 프로세스(221)를 포함한다. 확장 A(219)는 프로세스간 통신(223)과 같이 본 기술분야에서 공지된 바와 같은 프로세스간 통신을 통해 메인 프로세스(217)와 통신할 수 있다. 유사하게, 메인 프로세스(217)는 프로세스간 통신(225)을 통해 헬퍼 프로세스(221)와 통신할 수 있다. 일 실시예에서, 메인 프로세스(217)는 제1 샌드박스에서 동작하는 한편, 확장 프로세스(219)는 제2 샌드박스에서 동작하고 헬퍼 프로세스(221)는 제3 샌드박스에서 동작한다. 일 실시예에서, 확장 프로세스(219)뿐만 아니라 확장 프로세스 또는 인스턴스(235)는, 발명자들 Peter Kiehtreiber, Olivier Gutknecht, Ivan Krstic, Adele Peterson, Samuel M. Weinig, Yongjun Zhang, Ian J. Baird에 의해 2014년 9월 16일에 출원되고 공동 계류중이며 발명의 명칭이 Consistent Extension Points To Allow An Extension To Extend Functionality Of An Application To Another Applications이고 대리인 열람번호 제04860.P23308호가 할당된 미국 출원 제14/488,126호에서 설명된 확장들과 유사할 수 있고, 상기 출원은 참조로 본 명세서에 통합되었다. 일 실시예에서, 확장 프로세스(219)는 웹 브라우저 프로세스(217)로부터의 호출에 대한 응답으로 인스턴스화될 수 있고, 이러한 호출은 확장 프로세스(219)가 웹 브라우저 연합(215)에 대한 메모리 연합에 추가되게 할 수 있는 도 3에 도시된 프로세스 또는 방법을 수행하는 것을 도출할 수 있다. 예를 들어, 일 실시예에서, 웹 브라우저의 사용자는 소셜 네트워크의 웹사이트로 이동하고 페이스북 항목을 업데이트하기 위한 요청과 같은 요청을 웹사이트 상에서 행할 수 있고, 그 다음, 이것은, 웹 브라우저가 헬퍼 프로세스에 대해 호출하게 하여 확장(219)을 인스턴스화한다. 이는 웹 브라우저의 메모리 연합의 메모리 연합 식별자를 특정하는 파라미터들을 포함할 수 있다. 유사하게, 헬퍼 프로세스(221)는 헬퍼 프로세스의 론칭을 유발하기 위해 웹 브라우저가 (메모리 연합 식별자를 특정할 수 있는) API를 통해 호출하는 요청에 대한 응답으로 론칭될 수 있다. 이메일 애플리케이션(231)은 사진 편집 애플리케이션(207)으로부터의 헬퍼 프로세스(211)로부터 인스턴스화된 확장 B 인스턴스(235)와 프로세스간 통신(237)을 통해 통신하는 메인 프로세스(233)를 포함한다. 일 실시예에서, 확장은 이메일 애플리케이션 내에서 사진 편집 능력들을 제공할 수 있고, 사진 편집 능력들은 사진 편집 애플리케이션의 번들(207) 내의 소프트웨어로부터 인스턴스화된 헬퍼 프로세스에 의해 제공된다. 전술한 바와 같이, 각각의 애플리케이션(215 및 231) 내의 프로세스들 각각은 강화된 보안을 제공하기 위해 그들 자신의 개별적이고 분리된 샌드박스 내에서 구현되고 동작할 수 있다.
도 2b는 하나 이상의 메모리 연합들에 대한 정보를 저장하기 위한 데이터 구조(251)의 예를 도시한다. 특히, 데이터 구조(251)는 웹 브라우저 메모리 연합(253) 및 이메일 메모리 연합(261)을 포함하는 2개의 메모리 연합들에 대한 데이터를 포함한다. 이러한 데이터 구조(251)는 도 2a에 도시된 웹 브라우저 연합(215) 및 이메일 연합(231)에 기초하며; 따라서, 웹 브라우저 메모리 연합(253)은 도 2a의 웹 브라우저 연합(215)에 대응하고, 이메일 메모리 연합(261)은 도 2a의 이메일 연합(231)에 대응한다. 각각의 메모리 연합은 메모리 연합 식별자(255) 및 메모리 연합 식별자(262)와 같은 메모리 연합 식별자를 포함할 수 있다. 이러한 메모리 연합 식별자들 각각은 호스트 프로세스의 론칭 시에 운영 체제(OS)에 의해 할당될 수 있고, OS에 의해 호스트 프로세스들 각각에 제공될 수 있다. 웹 브라우저 메모리 연합(253)은 호스트 애플리케이션의 카테고리 또는 역할을 갖는 호스트 웹 브라우저 애플리케이션에 대한 메인 실행가능 프로세스에 대한 메타데이터(257)를 포함할 수 있고, 연합(253)은 또한 헬퍼 프로세스 역할을 갖는 헬퍼 프로세스(221)에 대한 메타데이터(259)를 포함하고, 메모리 연합(253)에 대한 데이터 구조는 또한 확장의 역할을 갖는 확장 A 프로세스에 대한 메타데이터(260)를 포함한다. 메모리 연합(261)은 또한, 호스트 애플리케이션 역할을 갖는 이메일 애플리케이션에 대한 메인 실행가능 프로세스(263)를 식별하는 메타데이터 및 확장 역할을 갖는 확장 프로세스(264)에 대한 메타데이터를 포함하는, 메모리 연합 내의 다양한 프로세스들에 대한 정보를 포함할 수 있다. 데이터 구조(251)는 본 기술분야에서 공지된 다양한 방식들로 구현될 수 있고, 본 명세서에 설명된 이의 메모리 관리 프로세스들에서 사용하기 위한 운영 체제에 의해 유지될 수 있다.
도 2b에 도시된 데이터 구조(251)는, 시스템 메모리의 프로세스들에 의한 사용들을 제어하기 위해 메모리 관리 시스템의 프로세스들에 대한 정보를 제공하기 위해 사용될 수 있는 메모리 연합을 정의하기 위해 사용되는 정보의 일례이다. 일 실시예에서, 각각의 애플리케이션 연합은 연합에서 오직 하나의 호스트 프로세스를 가질 수 있고, 호스트 애플리케이션 또는 프로세스의 이러한 역할은 기존의 연합의 어느 포인트에서도 전송되거나 포기될 수 없다. 일 실시예에서, 호스트 역할을 갖는 호스트 애플리케이션의 종료는 연합 및 연합 내에서 연합의 모든 프로세스들의 종료를 도출할 것이다. 일 실시예에서, 헬퍼 프로세스들은 비-호스트 프로세스들이지만, 특히 호스트 애플리케이션에 대한 지원을 제공하기 위해 론칭되며, 프로세스 인스턴스는 이의 전체 라이프 사이클에서 오직 하나의 연합에 속할 수 있어서, 그 연합에 론칭되고, 호스트 애플리케이션이 종료되거나 헬퍼 프로세스 인스턴스가 종료될 때까지 그 연합의 일부이다. 일 실시예에서, 이메일 애플리케이션 프로그램 또는 웹 브라우저 프로그램 또는 소셜 네트워크 애플리케이션 프로그램과 같은 애플리케이션 프로그램이 둘 이상의 연합들에 의해 요구되는 기능을 제공하면, 그 프로세스의 고유한 인스턴스는 각각의 요청 연합에 스포닝되거나(spawned) 인스턴스화되어 어떠한 인스턴스도 연합들 사이에서 공유되지 않을 것이다. 일 실시예에서, 인스턴스는 기존의 메모리 연합에 대한 메모리 연합 식별자와 같은 속성들을 포함할 수 있는 (본 기술분야에 공지된 바와 같은) posix_spawn을 통해 스포닝된다. 이러한 호출들은 연합 식별자 및 연합 역할 또는 역할 식별자, 예를 들어, 헬퍼 프로세스가 확장인지 또는 XPC 서비스인지 또는 미지의 프로세스인지 또는 다른 유형들의 헬퍼 프로세스들인지 여부를 표시하는 식별자 둘 모두의 규격을 포함할 수 있다. 일 실시예에서, 연합에 론칭되는 각각의 비-호스트 프로세스는, 연합을 생성할 posix_spawn 호출에 대한 (속성으로서) 연합 ID를 제공해야 하고, 그 프로세스가 확장 또는 XPC 서비스 또는 연합에서 일부 다른 역할을 갖는지 여부를 커널에 알릴 그 호출에서의 속성을 사용하여 연합에서 자신의 역할을 특정할 수 있다.
메모리 연합 내의 프로세스들 각각은 멀웨어 등과 관련하여 강화된 보안을 제공하기 위해 메모리 연합 내의 다른 프로세스들의 샌드박스들과 분리된 자기 자신의 샌드박스 내에서 샌드박싱될 수 있다. 예를 들어, 샌드박싱된 프로세스에 의해 비휘발성 스토리지 내의 다른 저장 위치들이 액세스가능하지 않도록, 샌드박싱된 프로세스들에 대한 비휘발성 저장 시스템에서 허용되고 액세스가능한 (파일 시스템) 저장 위치들을 특정하는 상이한 콘테이너 디렉토리들; (b) 샌드박싱된 프로세스가 어느 하드웨어 또는 소프트웨어 자원들을 사용하도록 허용되는지 및 어느 자원들을 사용하도록 허용되지 않는지를 특정하는 자격; 또는 (c) 샌드박싱된 프로세스에 의해 다른 메모리 위치들이 액세스될 수 없도록, 샌드박싱된 프로세스가 액세스할 수 있는 메모리 위치들을 특정하는 메모리 공간 권한 중 하나 이상을 사용하는 것을 포함하는 샌드박싱 프로세스들에 대한 다양한 상이한 공지된 기술들이 사용될 수 있다. 다른 프로세스들로부터의 각각의 프로세스를 샌드박싱하고 다른 프로세스로부터 하나의 프로세스에서의 멀웨어를 분리시키기 위해, 샌드박싱 기술로부터 다양한 다른 추가적인 기술들이 사용될 수 있음을 인식할 것이다.
일 실시예에서, 각각의 프로세스가 데이터 프로세싱 시스템에서 론칭됨에 따라, 운영 체제는 특정한 새로 론칭되는 프로세스가 기존의 메모리 연합의 일부가 되어야 하는지 또는 생성될 새로운 메모리 연합의 일부인지 여부를 결정한다. 이는, 시스템이 데이터 프로세싱 시스템에서 런타임에 존재할 수 있는 메모리 연합들에 대해 메모리를 관리하기 위해, 새로 생성된 프로세스들이 새로운 또는 기존의 메모리 연합들로 파티셔닝되도록 허용한다.
도 3은 새로운 메모리 연합들을 생성하거나 기존의 메모리 연합들을 관리하기 위해 이용될 수 있는 방법의 예를 도시한다. 도 3에 도시된 방법은, 메모리 연합들을 활용하는 메모리 관리 시스템을 구현하기 위해, 도 2a 내지 도 2c에 도시된 아키텍처 뿐만 아니라 도 4a 및 도 4b에 도시된 방법과 함께 이용될 수 있다. 도 3에 도시된 방법의 동작(301)에서, 론칭 데몬 소프트웨어 프로세스는 프로세스를 론칭하기 위한 호출을 수신한다. 일 실시예에서, 이러한 호출은 연합 역할 및 연합 ID를 포함할 수 있지만, 연합 ID는 새로 론칭되는 프로세스의 역할이 호스트 애플리케이션인 경우 호스트 역할을 위한 론칭 시간에 생성될 수 있다. 동작(301)에서 수신된 호출에 대한 응답으로, 운영 체제는 일 실시예에서, 호출에서 특정된 하나 이상의 속성들을 조사함으로써 프로세스의 역할을 결정한다. 프로세스 역할이 호스트 역할인 것으로 하나 이상의 속성들이 표시하면, 동작(303)은, 호스트 애플리케이션에 할당되는 새로운 메모리 연합 식별자를 갖는 새로운 메모리 연합이 동작(305)에서 생성될 것으로 결정한다. 일 실시예에서, 호스트 애플리케이션은 자신의 메모리 연합 식별자를 알지 못하는데, 이는, 시스템이 그 식별자를 할당하고 그 식별자를 호스트 애플리케이션에 제공함이 없이 그 식별자를 사용하기 때문이고; 예를 들어, 론칭 데몬 소프트웨어 프로세스 및 OS의 커널은 각각의 호스트 애플리케이션에 대한 메모리 연합 식별자를 알고 사용하지만 각각의 호스트 애플리케이션은 자기 자신의 메모리 연합 식별자를 알지 못한다. 한편, 프로세스의 역할이 호스트 역할이 아니라고 동작(303)이 결정하면, 기존의 메모리 연합 식별자를 갖는 기존의 메모리 연합에 새로운 프로세스가 삽입되는 동작(307)이 수행된다. 새로운 프로세스가 역할 특정을 포함하면, 그 역할은 또한 아래에서 추가로 설명되는 바와 같이 메모리 감소 동작들을 수행하는 경우 사용될 수 있는 메모리 연합 데이터 구조(예를 들어, 도 2b에 도시된 데이터 구조(251)) 내에 포함된다. 동작들(305 또는 307)에 후속하여, DRAM과 같은 메모리에서 실행 프로세스를 생성하기 위해 저장된 소프트웨어로부터 프로세스를 인스턴스화하는 것을 포함할 수 있는 새로운 프로세스가 동작(309)에서 생성된다. 새로 생성된 프로세스가 호스트 애플리케이션 또는 프로세스가 아니면, 새로 생성된 프로세스는 기존의 메모리 연합에 추가되고, 일 실시예의 메모리 관리 시스템은 본 명세서에 설명된 바와 같이 다양한 메모리 연합들에 따라 동작한다.
도 4a 및 도 4b는, 데이터 프로세싱 시스템에서 다수의 프로세스들에 의해 사용되는 메모리의 양을 관리하기 위한 하나 이상의 메모리 관리 동작들에서 메모리 연합들이 사용되는 일 실시예에 따른 방법을 예시한다. 메모리 관리 동작들은 운영 체제에 의해 구현될 수 있고, 미국 특허 제7,827,358호 및 제8,892,827호 및 공개된 미국 출원 번호 제2013/0332936호 및 제2013/0326166호에 설명된 것들을 포함하는 이전의 메모리 관리 시스템들에서 수행되는 것과 동일한 많은 동작들을 수행할 수 있고, 상기 특허 및 출원 각각은 메모리 관리 동작들을 수행하기 위한 기술들의 예들을 설명하고, 이들 각각은 이로써 참조로 본 명세서에 통합된다. 또한, 2014년 5월 30일에 출원된 공동 계류중인 미국 특허 출원 제14/292,453호는 또한 메모리 관리 기술들을 설명하고, 이로써 또한 참조로 본 명세서에 통합된다. 메모리 관리 프로세스는 메모리의 상태를 결정하기 위해 예를 들어 DRAM 및 선택적으로 플래시 메모리 또는 다른 비휘발성 메모리를 포함하는 시스템의 메모리 컴포넌트들의 상태를 반복적으로 체크할 수 있다. 커널 동작들은 또한 메모리 이용가능성 또는 낮은 메모리 레벨들의 통지들을 제공할 수 있다. 일 실시예에서, 추가적인 사용을 위해 충분한 메모리가 비어 있는지 여부를 결정하기 위해, 시스템이 낮은 메모리를 갖는지 여부의 결정이 메모리 감소 프로세스 전반에 걸쳐 반복적으로 수행될 수 있고, 이는, 메모리 동작들이 또한 수행되고 있는 동안 프로세스 전반에 걸쳐 동작들(405 및 415 및 425 및 435)이 수행되는 도 4a에 도시되어 있다. 메모리 관리 프로세스는 동작(405)에서 메모리의 상태를 테스트하기 위해 진행되는 동작(401)에서 시작될 수 있다. 이용가능한 메모리가 충분히 높으면, 프로세스는 메모리의 상태를 테스트하기 위해 어느 시점에서 반복되고; 한편, 하나 이상의 벤치마크들 또는 다른 유형들의 임계치들에 기초하여 이용가능한 메모리가 낮은 것으로 결정되면, 일 실시예에서, 모든 높은 워터마크 위반자들이 종료되는 동작(410)이 후속된다. 일 실시예에서, 위반자들은 메모리의 과다 사용에 대한 이전의 통지들을 수신한 프로세스들이고, 이러한 통지를 수신한 유휴 또는 배경 애플리케이션일 수 있다. 이러한 위반자들의 종료는 동작(415)에서 다시 테스트되는 이용가능한 메모리를 비울 수 있다. 메모리가 여전히 낮으면, 예를 들어, 캐시들을 삭제하는 것 및 이용가능한 메모리를 증가시키기 위해 메모리를 비울 수 있는 다른 동작들과 같은 메모리 감소 동작들을 수행할 기회가 부여되는 메모리 압력 통지가 모든 애플리케이션들에 전송되는 동작(420)이 후속된다. 이용가능한 메모리는 동작(420)에서 통지들을 전송한 후에 동작(425)에서 다시 테스트된다. 이용가능한 메모리가 더 이상 낮지 않으면, 방법은 동작(401)으로 되돌아 가고; 그렇지 않고, 이용가능한 메모리가 여전히 낮으면, 시스템은 동작(430)에서 애플리케이션들의 우선순위에 기초하여 유휴의, 보류된 및 배경 애플리케이션들을 종료한다. 도 5는 우선순위들의 계층의 예를 도시한다. 우선순위는 프로세스 또는 애플리케이션의 사용의 최신성 또는 사용자에 대한 애플리케이션의 중요도에 대한 다른 표시들에 기초할 수 있다. 그 다음, 동작(430) 이후, 시스템은 동작(435)에서 메모리의 상태를 다시 결정할 수 있고, 메모리가 여전히 낮으면, 연합들을 정렬하기 위한 하나 이상의 규칙들의 세트에 기초하여 다양한 메모리 연합들이 정렬되는 동작(440)이 수행될 수 있다. 일 실시예에서, 연합들은 메모리 사용 풋프린트에 기초하여 정렬될 수 있다. 일 실시예에서, 메모리 연합들은 전경 애플리케이션들에 대해 사용되는 한편, 도 4a의 이전의 동작들은 (전경 애플리케이션들에 대해서가 아닌) 유휴의 또는 보류된 또는 배경 애플리케이션들과 관련하여 수행되었다. 하나 이상의 규칙들에 기초한 메모리 연합들의 정렬은, 동작(445)에 도시된 바와 같이 시스템이 추가적인 메모리 사용 감소 동작들을 위해 하나 이상의 메모리 연합들을 선택하도록 허용할 수 있다. 예를 들어, 시스템은 가장 큰 메모리 사용 풋프린트를 갖는 메모리 연합을 선택할 수 있다. 그 다음, 시스템은 선택된 메모리 연합 내의 프로세스 역할과 같은 타깃 프로세스 카테고리를 동작(450)에서 선택할 수 있다. 일 실시예에서, 프로세스 역할은 프로세스들을 우선순위 순서로 랭킹하기 위해 사용된다. 예를 들어, 시스템은 선택된 메모리 연합 내에서 미지의 프로세스 역할을 선택하고, 선택된 메모리 연합 내의 모든 미지의 프로세스들을 종료하기 시작할 수 있다. 예를 들어, 동작(455)에서, 시스템은 선택된 메모리 연합 내의 선택된 프로세스 카테고리에서 가장 큰 풋프린트에 기초하여 타깃 프로세스를 종료할 수 있다. 그 다음, 동작(460)에서, 시스템은 메모리 레벨이 여전히 너무 낮은지 여부를 결정할 수 있고, 그 다음, 호스트가 종료되지 않았으면 동일한 선택된 메모리 연합 상에서 계속 동작하거나, 또는 그 메모리 연합의 호스트가 아직 종료되지 않았으면 동일한 메모리 연합 내의 다른 프로세스들로 진행할 수 있다. 일 실시예에서, 다양한 프로세스 카테고리들 또는 역할은 종료 프로세스들의 시퀀스 또는 순서를 결정한다. 예를 들어, 일 실시예에서, 미지의 프로세스들이 선택된 메모리 연합 내에서 먼저 종료되고, 그 다음, 확장 프로세스들이 선택된 메모리 연합 내에서 다음으로 종료되고, 그 다음, XPC 서비스 프로세스들이 선택된 메모리 연합 내에서 다음으로 종료되고, 마지막으로 선택된 메모리 연합의 호스트 애플리케이션이 종료된다.
일 실시예에서 도 4a에 도시된 동작들은 전경 애플리케이션들 상에서 동작하기 전에 유휴의 또는 보류된 또는 배경 애플리케이션들 상에서 수행될 수 있고, 전경 애플리케이션들은 이들의 메모리 연합 크기에 따라 프로세싱된다. 메모리 감소 동작들의 프로세싱은 도 5에 도시된 계층과 같은 다양한 우선순위 레벨들을 고려할 수 있다. 이러한 계층에서, 유휴 애플리케이션들은 배경 애플리케이션들이 종료되기 전에 종료될 것이고, 배경 애플리케이션들은 확장들이 종료되기 전에 종료될 것이다. 마지막으로, 확장들은 전경 애플리케이션들이 종료되기 전에 종료될 것이고, 전경 애플리케이션들에 대한 메모리 감소 동작들의 프로세싱은 본 명세서에 설명된 방식으로 다양한 전경 애플리케이션들의 메모리 연합들에 기초한다.
도 6은 본 명세서에 설명된 실시예들 중 임의의 실시예와 함께 사용될 수 있는 데이터 프로세싱 시스템의 일례를 도시한다. 도 6은 데이터 프로세싱 시스템의 다양한 컴포넌트들을 예시하고 있지만, 이는, 이러한 세부사항들이 본 설명과 관련이 없기 때문에 컴포넌트들을 상호접속시키는 임의의 특정 아키텍처 또는 방식을 표현하도록 의도되지 않는다는 것에 유의한다. 또한, 더 적은 컴포넌트들 또는 아마도 더 많은 컴포넌트들을 갖는 네트워크 컴퓨터들, 태블릿 컴퓨터들, 소비자 전자 디바이스들 및 다른 데이터 프로세싱 시스템들이 또한 본 명세서에 설명된 하나 이상의 실시예들과 함께 사용될 수 있음을 이해할 것이다.
도 6에 도시된 바와 같이, 데이터 프로세싱 시스템의 형태인 컴퓨터 시스템(800)은 하나 이상의 마이크로프로세서(들)(805), ROM(Read Only Memory)(807), 휘발성 RAM(809), 및 비휘발성 메모리(811)에 커플링된 버스(803)를 포함한다. 마이크로프로세서(805)는 선택적인 캐시(804)에 커플링된다. 마이크로프로세서(805)는 메모리들(807, 809 및 811) 중 하나 이상으로부터 저장된 명령어들을 검색할 수 있고, 전술한 동작들을 수행하도록 명령어들을 실행할 수 있다. 이러한 메모리들은, 실행되는 경우 데이터 프로세싱 시스템으로 하여금 본 명세서에 설명된 하나 이상의 방법들을 수행하게 하는 컴퓨터 프로그램 명령어들을 저장 또는 포함할 수 있는 머신 판독가능 비일시적 저장 매체의 예들을 표현한다. 버스(803)는 이러한 다양한 컴포넌트들을 함께 상호접속시키고, 또한 이러한 컴포넌트들(805, 807, 809 및 811)을 디스플레이 제어기 및 디스플레이 디바이스(813)에 그리고 마우스, 터치 스크린들, 터치 패드들, 터치 감응 입력 디바이스들, 키보드들, 모뎀들, 네트워크 인터페이스들, 프린터들, 및 당업계에 널리 공지된 다른 디바이스들 중 하나 이상일 수 있는 입력/출력(I/O) 디바이스들(815)과 같은 주변기기 디바이스들에 상호접속시킨다. 통상적으로, 입력/출력 디바이스들(815)은 입력/출력 제어기들(817)을 통해 시스템에 커플링된다. 휘발성 RAM(Random Access Memory)(809)은, 통상적으로, 메모리에서 데이터를 리프레시시키거나 유지하기 위해 전력을 지속적으로 요구하는 동적 RAM(DRAM)으로서 구현된다.
대용량 스토리지(811)는, 통상적으로, 자기 하드 드라이브 또는 자기 광 드라이브 또는 광 드라이브 또는 DVD RAM 또는 플래시 메모리 또는 전력이 시스템으로부터 제거된 후에도 데이터(예를 들어, 대량의 데이터)를 유지하는 다른 유형들의 메모리 시스템이다. 통상적으로, 대용량 스토리지(811)는 또한 랜덤 액세스 메모리일 것이지만, 이것이 요구되지는 않는다. 도 6은 대용량 스토리지(811)가 데이터 프로세싱 시스템 내의 컴포넌트들 중 나머지에 직접적으로 커플링되는 로컬 디바이스인 것으로 도시하고 있지만, 하나 이상의 실시예들은 모뎀, 이더넷 인터페이스 또는 무선 네트워크와 같은 네트워크 인터페이스를 통해 데이터 프로세싱 시스템에 커플링되는 네트워크 저장 디바이스와 같은, 시스템으로부터 원격의 비휘발성 메모리를 활용할 수 있음을 인식할 것이다. 버스(803)는 당업계에 널리 공지된 바와 같은 다양한 브리지들, 제어기들 및/또는 어댑터들을 통해 서로 접속되는 하나 이상의 버스들을 포함할 수 있다.
전술한 명세서에서, 특정 예시적인 실시예들이 기재되었다. 다음의 청구범위에 기재된 바와 같은 보다 넓은 사상 및 범주로부터 벗어남이 없이 이 실시예들에 대하여 다양한 수정들이 이루어질 수 있음이 명백할 것이다. 이에 따라서, 명세서 및 도면들은 한정적 의미보다는 오히려 예시적 의미에서 고려되어야 한다.

Claims (22)

  1. 실행가능한 프로그램 명령어들을 저장하는 비일시적 머신 판독가능 저장 매체로서, 상기 실행가능한 프로그램 명령어들은 데이터 프로세싱 시스템에 의해 실행되는 경우 상기 데이터 프로세싱 시스템으로 하여금,
    제1 프로세스를 제1 호스트 애플리케이션으로서 실행하는 단계;
    제2 프로세스의 론칭에 대한 응답으로, 상기 제2 프로세스가, 상기 제1 호스트 애플리케이션을 포함하는 제1 메모리 연합의 일부가 되어야 하는지 여부를 결정하는 단계;
    상기 제2 프로세스가 상기 제1 메모리 연합의 일부가 되어야 하는 것으로 결정한 것에 대한 응답으로 상기 제2 프로세스를 상기 제1 메모리 연합에 추가하는 단계;
    상기 데이터 프로세싱 시스템에서 이용가능한 메모리가 낮다고 결정하는 단계;
    이용가능한 메모리가 낮다고 결정하는 것에 대한 응답으로, 상기 제1 메모리 연합을 포함하는 하나 이상의 메모리 연합들의 세트 내의 각각의 메모리 연합에 의해 사용되는 메모리의 양을 결정하는 단계;
    상기 제1 메모리 연합이 상기 메모리 연합들의 세트 내의 다른 메모리 연합들보다 많은 메모리를 사용하는 것으로 결정한 것에 대한 응답으로, 상기 이용가능한 메모리의 양을 증가시키기 위해 상기 제1 메모리 연합에 대해 하나 이상의 메모리 사용 감소 동작들을 수행하는 단계를 포함하는 방법을 수행하게 하는, 비일시적 머신 판독가능 저장 매체.
  2. 제1항에 있어서, 상기 이용가능한 메모리는 DRAM(dynamic random access memory)을 포함하고, 각각의 메모리 연합은 호스트 애플리케이션 및 다른 호스트 애플리케이션들의 소프트웨어로부터 인스턴스화된 연관된 하나 이상의 프로세스들을 포함하고, 상기 제2 프로세스는 제2 호스트 애플리케이션의 소프트웨어로부터 인스턴스화되고, 상기 제1 프로세스가 동작하는 제1 샌드박스와 별개이고 상이한 제2 샌드박스에서 동작하는, 비일시적 머신 판독가능 저장 매체.
  3. 제2항에 있어서, 메모리 사용 감소 동작들은 하나 이상의 전경 애플리케이션들의 메모리 연합들에 대한 메모리 사용 감소 동작들을 수행하기 전에 배경 호스트 애플리케이션들 또는 다른 배경 프로세스들에 대해 수행되는, 비일시적 머신 판독가능 저장 매체.
  4. 제3항에 있어서, 각각의 메모리 연합은 연합 식별자를 가지며, 상기 제1 메모리 연합에 대한 연합 식별자를 특정하는 호출을 통해 상기 제2 프로세스가 론칭되는 경우, 상기 제2 프로세스는 상기 제1 메모리 연합의 일부로 결정되는, 비일시적 머신 판독가능 저장 매체.
  5. 제4항에 있어서, 상기 제1 호스트 애플리케이션이 론칭되는 경우 상기 제1 메모리 연합에 대한 연합 식별자가 상기 제1 호스트 애플리케이션에 할당되고, 상기 메모리 사용 감소 동작들이 수행되는 경우 상기 제1 호스트 애플리케이션은 전경 애플리케이션인, 비일시적 머신 판독가능 저장 매체.
  6. 제5항에 있어서, 애플리케이션의 사용자 인터페이스가 디스플레이 상에 제시되는 경우 상기 애플리케이션은 전경 애플리케이션이고, 배경 애플리케이션들에 대한 메모리 감소 동작들은 상기 배경 애플리케이션들을 포함하는 메모리 연합들에 의해 사용되는 메모리의 양과 무관하게 수행되는, 비일시적 머신 판독가능 저장 매체.
  7. 제1항에 있어서, 상기 제1 프로세스는 데몬 프로세스이고, 상기 제2 프로세스는 애플리케이션의 소프트웨어로부터 인스턴스화되고, 상기 제2 프로세스는 상기 제1 프로세스가 동작하는 제1 샌드박스와 별개이고 상이한 제2 샌드박스에서 동작하는, 비일시적 머신 판독가능 저장 매체.
  8. 제1항에 있어서, 상기 제2 프로세스는 (1) 운영 체제에 의해 제공되는 소프트웨어 라이브러리 또는 (2) 상기 제1 호스트 애플리케이션과 함께 제공되는 헬퍼 소프트웨어로부터의 소프트웨어로부터 인스턴스화되는, 비일시적 머신 판독가능 저장 매체.
  9. 제1항에 있어서, 상기 제2 프로세스는 비휘발성 스토리지에 저장된 소프트웨어의 이미지로부터 인스턴스화되고, 상기 제1 프로세스가 동작하는 제1 샌드박스와 별개이고 상이한 제2 샌드박스에서 동작하고, 상기 제1 및 제2 샌드박스들 각각은 (a) 샌드박싱된 프로세스에 의해 비휘발성 메모리 내의 다른 저장 위치들이 액세스가능하지 않도록, 상기 샌드박싱된 프로세스에 대한 비휘발성 메모리에서 허용되고 액세스가능한 저장 위치들을 특정하는 하나 이상의 콘테이너 디렉토리들; (b) 샌드박싱된 프로세스가 어느 하드웨어 또는 소프트웨어 자원들을 사용하도록 그리고 사용하지 않도록 허용되는지를 특정하는 자격; 또는 (c) 상기 샌드박싱된 프로세스에 의해 다른 메모리 위치들이 액세스될 수 없도록, 상기 샌드박싱된 프로세스가 액세스할 수 있는 메모리 위치들을 특정하는 메모리 공간 권한 중 하나 이상을 사용하는, 비일시적 머신 판독가능 저장 매체.
  10. 제9항에 있어서, 상기 메모리 연합들의 세트 내의 각각의 메모리 연합은 오직 하나의 호스트 애플리케이션 및 하나 이상의 헬퍼 프로세스들을 갖고, 상기 제2 프로세스는 헬퍼 프로세스이고, 각각의 헬퍼 프로세스는 그 전체 라이프 사이클에서 오직 하나의 메모리 연합에 속하고, 메모리 연합 내의 호스트 애플리케이션이 종료되는 경우, 상기 메모리 연합 내의 모든 헬퍼 프로세스들이 또한 종료되고, 애플리케이션이 하나 초과의 메모리 연합에 대한 헬퍼 프로세스를 인스턴스화하기 위해 사용되는 경우, 상기 헬퍼 프로세스의 고유한 인스턴스는 상기 하나 초과의 메모리 연합 각각에 대해 인스턴스화되는, 비일시적 머신 판독가능 저장 매체.
  11. 제1항에 있어서, 메모리 연합 내의 프로세스들은, 선택된 메모리 연합 내에서 하나의 카테고리 내의 프로세스들이 상기 선택된 메모리 연합 내에서 다른 카테고리 내의 프로세스들을 종료하기 전에 종료되도록 메모리 감소 동작들을 구현하는 순서를 특정하는 상대적 우선순위를 각각 갖는 카테고리들로 그룹화되고, 상기 선택된 메모리 연합 내의 상기 호스트 애플리케이션의 프로세스는 종료될 상기 메모리 연합 내의 마지막 프로세스인, 비일시적 머신 판독가능 저장 매체.
  12. 머신 구현 방법으로서,
    제1 프로세스를 제1 호스트 애플리케이션으로서 실행하는 단계;
    제2 프로세스의 론칭에 대한 응답으로, 상기 제2 프로세스가, 상기 제1 호스트 애플리케이션을 포함하는 제1 메모리 연합의 일부가 되어야 하는지 여부를 결정하는 단계;
    상기 제2 프로세스가 상기 제1 메모리 연합의 일부가 되어야 하는 것으로 결정한 것에 대한 응답으로 상기 제2 프로세스를 상기 제1 메모리 연합에 추가하는 단계;
    데이터 프로세싱 시스템에서 이용가능한 메모리가 낮다고 결정하는 단계;
    이용가능한 메모리가 낮다고 결정하는 것에 대한 응답으로, 상기 제1 메모리 연합을 포함하는 하나 이상의 메모리 연합들의 세트 내의 각각의 메모리 연합에 의해 사용되는 메모리의 양을 결정하는 단계;
    상기 제1 메모리 연합이 상기 메모리 연합들의 세트 내의 다른 메모리 연합들보다 많은 메모리를 사용하는 것으로 결정한 것에 대한 응답으로, 상기 이용가능한 메모리의 양을 증가시키기 위해 상기 제1 메모리 연합에 대해 하나 이상의 메모리 사용 감소 동작들을 수행하는 단계를 포함하는, 방법.
  13. 제12항에 있어서, 상기 이용가능한 메모리는 DRAM(dynamic random access memory)을 포함하고, 각각의 메모리 연합은 호스트 애플리케이션 및 다른 호스트 애플리케이션들의 소프트웨어로부터 인스턴스화된 연관된 하나 이상의 프로세스들을 포함하고, 상기 제2 프로세스는 제2 호스트 애플리케이션의 소프트웨어로부터 인스턴스화되고, 상기 제1 프로세스가 동작하는 제1 샌드박스와 별개이고 상이한 제2 샌드박스에서 동작하는, 방법.
  14. 제13항에 있어서, 메모리 사용 감소 동작들은 하나 이상의 전경 애플리케이션들의 메모리 연합들에 대한 메모리 사용 감소 동작들을 수행하기 전에 배경 호스트 애플리케이션들 또는 다른 배경 프로세스들에 대해 수행되는, 방법.
  15. 제14항에 있어서, 각각의 메모리 연합은 연합 식별자를 가지며, 상기 제1 메모리 연합에 대한 연합 식별자를 특정하는 호출을 통해 상기 제2 프로세스가 론칭되는 경우, 상기 제2 프로세스는 상기 제1 메모리 연합의 일부로 결정되는, 방법.
  16. 제15항에 있어서, 상기 제1 호스트 애플리케이션이 론칭되는 경우 상기 제1 메모리 연합에 대한 연합 식별자가 상기 제1 호스트 애플리케이션에 할당되고, 상기 메모리 사용 감소 동작들이 수행되는 경우 상기 제1 호스트 애플리케이션은 전경 애플리케이션인, 방법.
  17. 제16항에 있어서, 애플리케이션의 사용자 인터페이스가 디스플레이 상에 제시되는 경우 상기 애플리케이션은 전경 애플리케이션이고, 배경 애플리케이션들에 대한 메모리 감소 동작들은 상기 배경 애플리케이션들을 포함하는 메모리 연합들에 의해 사용되는 메모리의 양과 무관하게 수행되는, 방법.
  18. 제12항에 있어서, 상기 제1 프로세스는 데몬 프로세스이고, 상기 제2 프로세스는 애플리케이션의 소프트웨어로부터 인스턴스화되고, 상기 제2 프로세스는 상기 제1 프로세스가 동작하는 제1 샌드박스와 별개이고 상이한 제2 샌드박스에서 동작하는, 방법.
  19. 제12항에 있어서, 상기 제2 프로세스는 (1) 운영 체제에 의해 제공되는 소프트웨어 라이브러리 또는 (2) 상기 제1 호스트 애플리케이션과 함께 제공되는 헬퍼 소프트웨어로부터의 소프트웨어로부터 인스턴스화되는, 방법.
  20. 제12항에 있어서, 상기 제2 프로세스는 비휘발성 스토리지에 저장된 소프트웨어의 이미지로부터 인스턴스화되고, 상기 제1 프로세스가 동작하는 제1 샌드박스와 별개이고 상이한 제2 샌드박스에서 동작하고, 상기 제1 및 제2 샌드박스들 각각은 (a) 샌드박싱된 프로세스에 의해 비휘발성 메모리 내의 다른 저장 위치들이 액세스가능하지 않도록, 상기 샌드박싱된 프로세스에 대한 비휘발성 메모리에서 허용되고 액세스가능한 저장 위치들을 특정하는 하나 이상의 콘테이너 디렉토리들; (b) 샌드박싱된 프로세스가 어느 하드웨어 또는 소프트웨어 자원들을 사용하도록 그리고 사용하지 않도록 허용되는지를 특정하는 자격; 또는 (c) 상기 샌드박싱된 프로세스에 의해 다른 메모리 위치들이 액세스될 수 없도록, 상기 샌드박싱된 프로세스가 액세스할 수 있는 메모리 위치들을 특정하는 메모리 공간 권한 중 하나 이상을 사용하는, 방법.
  21. 제20항에 있어서, 상기 메모리 연합들의 세트 내의 각각의 메모리 연합은 오직 하나의 호스트 애플리케이션 및 하나 이상의 헬퍼 프로세스들을 갖고, 상기 제2 프로세스는 헬퍼 프로세스이고, 각각의 헬퍼 프로세스는 그 전체 라이프 사이클에서 오직 하나의 메모리 연합에 속하고, 메모리 연합 내의 호스트 애플리케이션이 종료되는 경우, 상기 메모리 연합 내의 모든 헬퍼 프로세스들이 또한 종료되고, 애플리케이션이 하나 초과의 메모리 연합에 대한 헬퍼 프로세스를 인스턴스화하기 위해 사용되는 경우, 상기 헬퍼 프로세스의 고유한 인스턴스는 상기 하나 초과의 메모리 연합 각각에 대해 인스턴스화되는, 방법.
  22. 제12항에 있어서, 메모리 연합 내의 프로세스들은, 선택된 메모리 연합 내에서 하나의 카테고리 내의 프로세스들이 상기 선택된 메모리 연합 내에서 다른 카테고리 내의 프로세스들을 종료하기 전에 종료되도록 메모리 감소 동작들을 구현하는 순서를 특정하는 상대적 우선순위를 각각 갖는 카테고리들로 그룹화되고, 상기 선택된 메모리 연합 내의 상기 호스트 애플리케이션의 프로세스는 종료될 상기 메모리 연합 내의 마지막 프로세스인, 방법.
KR1020177031395A 2015-04-08 2016-03-17 연합 기반 메모리 관리 KR101971389B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/681,364 2015-04-08
US14/681,364 US9465734B1 (en) 2015-04-08 2015-04-08 Coalition based memory management
PCT/US2016/022987 WO2016164155A1 (en) 2015-04-08 2016-03-17 Coalition based memory management

Publications (2)

Publication Number Publication Date
KR20170132296A KR20170132296A (ko) 2017-12-01
KR101971389B1 true KR101971389B1 (ko) 2019-04-22

Family

ID=55699809

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177031395A KR101971389B1 (ko) 2015-04-08 2016-03-17 연합 기반 메모리 관리

Country Status (4)

Country Link
US (1) US9465734B1 (ko)
KR (1) KR101971389B1 (ko)
CN (2) CN112347004A (ko)
WO (1) WO2016164155A1 (ko)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10291472B2 (en) 2015-07-29 2019-05-14 AppFormix, Inc. Assessment of operational states of a computing environment
US10581687B2 (en) 2013-09-26 2020-03-03 Appformix Inc. Real-time cloud-infrastructure policy implementation and management
US9690685B2 (en) 2014-05-30 2017-06-27 Apple Inc. Performance management based on resource consumption
US9465734B1 (en) * 2015-04-08 2016-10-11 Apple Inc. Coalition based memory management
US11068314B2 (en) * 2017-03-29 2021-07-20 Juniper Networks, Inc. Micro-level monitoring, visibility and control of shared resources internal to a processor of a host machine for a virtual environment
US11323327B1 (en) 2017-04-19 2022-05-03 Juniper Networks, Inc. Virtualization infrastructure element monitoring and policy control in a cloud environment using profiles
US10649889B2 (en) 2017-06-04 2020-05-12 Apple Inc. Method and apparatus for managing kernel memory of data processing systems
US11240207B2 (en) 2017-08-11 2022-02-01 L3 Technologies, Inc. Network isolation
US11601467B2 (en) 2017-08-24 2023-03-07 L3 Technologies, Inc. Service provider advanced threat protection
US11178104B2 (en) 2017-09-26 2021-11-16 L3 Technologies, Inc. Network isolation with cloud networks
US11552987B2 (en) 2017-09-28 2023-01-10 L3 Technologies, Inc. Systems and methods for command and control protection
US11184323B2 (en) * 2017-09-28 2021-11-23 L3 Technologies, Inc Threat isolation using a plurality of containers
US11336619B2 (en) 2017-09-28 2022-05-17 L3 Technologies, Inc. Host process and memory separation
US11223601B2 (en) 2017-09-28 2022-01-11 L3 Technologies, Inc. Network isolation for collaboration software
US11374906B2 (en) 2017-09-28 2022-06-28 L3 Technologies, Inc. Data exfiltration system and methods
US11550898B2 (en) 2017-10-23 2023-01-10 L3 Technologies, Inc. Browser application implementing sandbox based internet isolation
US11170096B2 (en) 2017-10-23 2021-11-09 L3 Technologies, Inc. Configurable internet isolation and security for mobile devices
US11120125B2 (en) 2017-10-23 2021-09-14 L3 Technologies, Inc. Configurable internet isolation and security for laptops and similar devices
US10852968B2 (en) 2018-05-07 2020-12-01 Apple Inc. Techniques for managing memory allocation within a storage device to improve operation of a camera application

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6275857B1 (en) 1996-10-30 2001-08-14 Microsoft Corporation System and method for freeing shared resources in a computer system
US20080168235A1 (en) 2007-01-07 2008-07-10 Matt Watson Memory Management Methods and Systems
US20100318997A1 (en) 2009-06-15 2010-12-16 Microsoft Corporation Annotating virtual application processes
US20110179483A1 (en) 2010-01-15 2011-07-21 Apple Inc. Methods for handling a file associated with a program in a restricted program environment
US20120179882A1 (en) 2011-01-07 2012-07-12 Bernhard Iii Leroy Francis Cooperative memory management

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7024512B1 (en) * 1998-02-10 2006-04-04 International Business Machines Corporation Compression store free-space management
US7389512B2 (en) * 2003-05-09 2008-06-17 Sun Microsystems, Inc. Interprocess communication within operating system partitions
EP1492006B1 (en) 2003-06-24 2007-10-10 Research In Motion Limited Detection of out of memory and graceful shutdown
US20060230246A1 (en) * 2005-04-08 2006-10-12 Mather Clifford J Memory allocation technique using memory resource groups
US7552293B2 (en) 2006-02-28 2009-06-23 Red Hat, Inc. Kernel and application cooperative memory management
US8850154B2 (en) 2007-09-11 2014-09-30 2236008 Ontario Inc. Processing system having memory partitioning
US8381288B2 (en) 2008-09-30 2013-02-19 Intel Corporation Restricted component access to application memory
US8635630B2 (en) 2010-10-25 2014-01-21 Microsoft Corporation Application lifetime management
US8799994B2 (en) * 2011-10-11 2014-08-05 Citrix Systems, Inc. Policy-based application management
US9002929B2 (en) * 2012-03-02 2015-04-07 Fisher Controls International Llc Methods and apparatus to reduce memory requirements for process control system software applications
US8990534B2 (en) 2012-05-31 2015-03-24 Apple Inc. Adaptive resource management of a data processing system
US9286120B2 (en) 2012-06-08 2016-03-15 Apple Inc. Resource management with dynamic resource budgeting
US20140122614A1 (en) * 2012-11-01 2014-05-01 F-Secure Corporation Cooperation In An Application Store Environment
KR101999132B1 (ko) * 2012-12-17 2019-10-01 삼성전자주식회사 가상 머신 환경에서 메모리 관리 방법 및 장치
US9207972B2 (en) * 2013-03-14 2015-12-08 International Business Machines Corporation Meta-application management in a multitasking environment
EP2782007A1 (en) * 2013-03-19 2014-09-24 STMicroelectronics (Grenoble 2) SAS Launching multiple applications in containers on a processor
CN104102537B (zh) * 2013-04-07 2017-09-29 华为技术有限公司 一种应用调用方法及用户终端
CN104252389B (zh) * 2013-06-27 2016-04-13 腾讯科技(深圳)有限公司 应用程序运行方法、系统
US9588897B2 (en) * 2013-07-19 2017-03-07 Samsung Electronics Co., Ltd. Adaptive application caching for mobile devices
US9465734B1 (en) * 2015-04-08 2016-10-11 Apple Inc. Coalition based memory management

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6275857B1 (en) 1996-10-30 2001-08-14 Microsoft Corporation System and method for freeing shared resources in a computer system
US20080168235A1 (en) 2007-01-07 2008-07-10 Matt Watson Memory Management Methods and Systems
US20100318997A1 (en) 2009-06-15 2010-12-16 Microsoft Corporation Annotating virtual application processes
US20110179483A1 (en) 2010-01-15 2011-07-21 Apple Inc. Methods for handling a file associated with a program in a restricted program environment
US20120179882A1 (en) 2011-01-07 2012-07-12 Bernhard Iii Leroy Francis Cooperative memory management

Also Published As

Publication number Publication date
KR20170132296A (ko) 2017-12-01
CN107430549B (zh) 2020-10-13
US9465734B1 (en) 2016-10-11
US20160299840A1 (en) 2016-10-13
CN107430549A (zh) 2017-12-01
CN112347004A (zh) 2021-02-09
WO2016164155A1 (en) 2016-10-13

Similar Documents

Publication Publication Date Title
KR101971389B1 (ko) 연합 기반 메모리 관리
US10664348B2 (en) Fault recovery management in a cloud computing environment
US20110093861A1 (en) Assigning A Portion Of Physical Computing Resources To A Logical Partition
US8904386B2 (en) Running a plurality of instances of an application
US10877793B2 (en) Extending the base address register by modifying the number of read-only bits associated with a device to be presented to a guest operating system
US20170177415A1 (en) Thread and/or virtual machine scheduling for cores with diverse capabilities
TWI667588B (zh) 用以偵測未經授權之記憶體存取的計算裝置、方法及機器可讀儲存媒體(二)
US20160300044A1 (en) Anti-debugging method
KR20180069807A (ko) 동기화를 리매핑하는 것에 의한 태스크 서브그래프들의 가속화
US10248581B2 (en) Guarded memory access in a multi-thread safe system level modeling simulation
KR101751515B1 (ko) 테스트 실행 장치, 방법 및 컴퓨터 프로그램
US20110173594A1 (en) Selective Loading of Code Elements for Code Analysis
AU2017232694B2 (en) Method, apparatus, server and storage medium of erasing cloud host in cloud-computing environment
US11016886B2 (en) Multi-ring shared, traversable, and dynamic advanced database
US20180203726A1 (en) Virtual machine migration method and apparatus
CN113741991B (zh) 提升ssd服务质量方法、装置、计算机设备和存储介质
US10241838B2 (en) Domain based resource isolation in multi-core systems
CN109840151B (zh) 一种用于多核处理器的负载均衡方法和装置
WO2019062615A1 (zh) 一种用户界面渲染方法及装置
US20160246629A1 (en) Gpu based virtual system device identification
US9575788B2 (en) Hypervisor handling of processor hotplug requests
US9235427B2 (en) Operating system load device resource selection
US9766948B2 (en) Selecting processor micro-threading mode
US9535713B2 (en) Manipulating rules for adding new devices
US11068250B2 (en) Crowdsourced API resource consumption information for integrated development environments

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant