KR20160040214A - 이종 멀티프로세서 시스템에서 공유 메모리 영역들을 위한 동적 어드레스 협상 - Google Patents

이종 멀티프로세서 시스템에서 공유 메모리 영역들을 위한 동적 어드레스 협상 Download PDF

Info

Publication number
KR20160040214A
KR20160040214A KR1020167003798A KR20167003798A KR20160040214A KR 20160040214 A KR20160040214 A KR 20160040214A KR 1020167003798 A KR1020167003798 A KR 1020167003798A KR 20167003798 A KR20167003798 A KR 20167003798A KR 20160040214 A KR20160040214 A KR 20160040214A
Authority
KR
South Korea
Prior art keywords
address
processing core
shared memory
map
virtual address
Prior art date
Application number
KR1020167003798A
Other languages
English (en)
Other versions
KR101722379B1 (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 KR20160040214A publication Critical patent/KR20160040214A/ko
Application granted granted Critical
Publication of KR101722379B1 publication Critical patent/KR101722379B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • 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/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Multi Processors (AREA)

Abstract

이동 컴퓨팅 디바이스들은, 공유 메모리에 대해 정보를 읽고 쓰는 것에 의해 멀티프로세서 시스템의 보조 프로세서 (예를 들어, DSP) 에서의 범용 소프트웨어 애플리케이션의 부분들을 컴파일 및 실행하도록 구성될 수도 있다. 애플리케이션 프로세서들 상의 제 1 프로세스 (P1) 은 보조 프로세서 상의 제 2 프로세스 (P2) 와 어드레스 협상을 요청하고, 제 1 운영 시스템으로부터 제 1 어드레스 맵을 획득하고, 제 1 어드레스 맵을 보조 프로세서에 전송할 수도 있다. 제 2 프로세서 (P2) 는 제 1 어드레스 맵을 수신하고, 제 2 운영 시스템으로부터 제 2 어드레스 맵을 획득하고, 제 1 및 제 2 어드레스 맵들에서 매칭 어드레스들을 식별하고, 공통 가상 어드레스로서 매칭 어드레스들을 저장하고, 공통 가상 어드레스들을 다시 애플리케이션 프로세서에 전송할 수도 있다. 제 1 및 제 2 프로세스들 (즉, P1 및 P2) 각각은 물리적 페이지들을 메모리에 맵핑하기 위하여 공통 가상 어드레스들을 사용할 수도 있다.

Description

이종 멀티프로세서 시스템에서 공유 메모리 영역들을 위한 동적 어드레스 협상{DYNAMIC ADDRESS NEGOTIATION FOR SHARED MEMORY REGIONS IN HETEROGENEOUS MULIPROCESSOR SYSTEMS}
이동 및 무선 기술들은 지난 수년 동안 폭발적인 성장을 겪어왔다. 이 성장은 보다 나은 통신, 하드웨어, 및 보다 신뢰적인 프로토콜들에 의해 가열되었다. 이제 무선 서비스 제공자들은 그들의 고객들에게 계속 확대되는 다수의 특징 및 서비스들을 제공할 수 있고, 사용자들에게 정보, 리소스 및 통신에 대한 전례 없는 수준의 액세스를 제공할 수 있다. 이들 향상들과 보조를 맞추기 위하여, 이동 전자 디바이스 (예를 들어, 셀룰러 폰, 시계, 미디어 플레이어 등) 들은 여느때보다도 더 복잡해졌고, 이제는 일반적으로, 다수의 프로세서, 시스템 온 칩 (SoC), 및 이동 디바이스 사용자들로 하여금 복잡하고 전력 집약적인 (power intensive) 소프트웨어 애플리케이션들 (예를 들어, 비디오 스트리밍, 비디오 프로세싱 등) 을 그들의 이동 디바이스 상에서 실행할 수 있게 하는 다른 리소스들을 포함한다. 복잡성 및 전력 소비에 있어서 이러한 상승으로, 이동 디바이스들의 계산 및 전력 관리 성능을 개선시키는 새롭고 개선된 메모리 관리 솔루션들이 소비자들에게 이로울 것이다.
개요
다양한 양태들은 제 1 프로세싱 코어 및 제 2 프로세싱 코어를 갖는 멀티프로세서 컴퓨팅 디바이스의 공유 메모리 영역에 대한 액세스를 제공하는 방법을 포함하고, 상기 방법은, 제 1 프로세싱 코어에서의 제 1 프로세스에 의해, 제 2 프로세싱 코어에서의 제 2 프로세스와 어드레스 협상을 요청하는 단계, 제 1 프로세싱 코어에서의 제 1 프로세스의 제 1 어드레스 맵을 획득하는 단계, 제 2 프로세싱 코어에 제 1 어드레스 맵을 전송하는 단계, 제 1 어드레스 맵을 전송하는 것에 응답하여 제 1 프로세싱 코어에서의 공통 가상 어드레스를 수신하는 단계, 제 1 프로세싱 코어의 제 1 운영 시스템 커널의 내부에 공유 메모리 영역의 제 1 속성으로서 공통 가상 어드레스를 저장하는 단계, 및 제 1 프로세스의 공통 가상 어드레스에서 공유 메모리 영역을 맵핑하는 단계를 포함한다.
일 양태에서, 그 방법은, 제 2 프로세싱 코어에서 제 1 어드레스 맵을 수신하는 단계, 제 2 프로세싱 코어에서의 제 2 프로세스의 제 2 어드레스 맵을 획득하는 단계, 제 1 및 제 2 어드레스 맵들이 매칭 가상 어드레스를 포함하는지 여부를 결정하기 위하여 제 2 프로세싱 코어에서의 어드레스 매칭 동작들을 수행하는 단계, 공통 가상 어드레스로서 그리고 제 2 프로세싱 코어의 제 2 운영 시스템 커널의 공유 메모리 영역의 제 2 속성으로서 매칭 가상 어드레스를 저장하는 단계, 제 1 프로세싱 코어에 공통 가상 어드레스를 전송하는 단계, 및 제 2 프로세싱 코어에서의 제 2 프로세스를 위한 공통 가상 어드레스에서 공유 메모리 영역의 물리적 페이지들을 맵핑하는 단계를 포함할 수도 있다.
다른 양태에서, 제 1 및 제 2 프로세싱 코어들의 각각은 하드웨어 메모리 관리 유닛 (MMU) 을 포함할 수도 있다. 다른 양태에서, 제 2 프로세싱 코어에서 제 1 어드레스 맵을 수신하는 단계는 제 2 프로세싱 코어의 어드레스 협상 핸들러 스레드에서 제 1 어드레스 맵을 수신하는 단계를 포함할 수도 있다.
추가 양태들은, 제 1 프로세싱 코어에서의 제 1 프로세스에 의해, 제 2 프로세싱 코어에서의 제 2 프로세스와 어드레스 협상을 요청하는 수단, 제 1 프로세싱 코어에서의 제 1 프로세스의 제 1 어드레스 맵을 획득하는 수단, 제 2 프로세싱 코어에 제 1 어드레스 맵을 전송하는 수단, 제 1 어드레스 맵을 전송하는 것에 응답하여 제 1 프로세싱 코어에서의 공통 가상 어드레스를 수신하는 수단, 제 1 프로세싱 코어의 제 1 운영 시스템 커널의 내부에 공유 메모리 영역의 제 1 속성으로서 공통 가상 어드레스를 저장하는 수단, 및 제 1 프로세스의 공통 가상 어드레스에서 공유 메모리 영역을 맵핑하는 수단을 포함할 수도 있는 멀티프로세서 컴퓨팅 디바이스를 포함한다.
일 양태에서, 멀티프로세서 컴퓨팅 디바이스는, 제 2 프로세싱 코어에서 제 1 어드레스 맵을 수신하는 수단, 제 2 프로세싱 코어에서의 제 2 프로세스의 제 2 어드레스 맵을 획득하는 수단, 제 1 및 제 2 어드레스 맵들이 매칭 가상 어드레스를 포함하는지 여부를 결정하기 위하여 제 2 프로세싱 코어에서의 어드레스 매칭 동작들을 수행하는 수단, 공통 가상 어드레스로서 그리고 제 2 프로세싱 코어의 제 2 운영 시스템 커널의 공유 메모리 영역의 제 2 속성으로서 매칭 가상 어드레스를 저장하는 수단, 제 1 프로세싱 코어에 공통 가상 어드레스를 전송하는 수단, 및 제 2 프로세싱 코어에서의 제 2 프로세스를 위한 공통 가상 어드레스에서 공유 메모리 영역의 물리적 페이지들을 맵핑하는 수단을 포함할 수도 있다.
다른 양태에서, 멀티프로세서 컴퓨팅 디바이스는 제 2 프로세싱 코어에서 제 1 어드레스 맵을 수신하는 수단이 제 2 프로세싱 코어의 어드레스 협상 핸들러 스레드에서 제 1 어드레스 맵을 수신하는 수단을 포함할 수도 있는 것을 포함할 수도 있다.
추가 양태들은 제 1 프로세싱 코어, 제 2 프로세싱 코어, 및 제 1 및 제 2 프로세싱 코어들에 연결된 공유 메모리 영역을 갖고, 제 1 프로세싱 코어가, 제 1 프로세스에 의해, 제 2 프로세싱 코어에서의 제 2 프로세스와 어드레스 협상을 요청하는 것, 제 1 프로세스의 제 1 어드레스 맵을 획득하는 것, 제 2 프로세싱 코어에 제 1 어드레스 맵을 전송하는 것, 제 2 프로세싱 코어에 제 1 어드레스 맵을 전송하는 것에 응답하여 공통 가상 어드레스를 수신하는 것, 제 1 운영 시스템 커널의 내부에 공유 메모리 영역의 제 1 속성으로서 공통 가상 어드레스를 저장하는 것, 및 제 1 프로세스의 공통 가상 어드레스에서 공유 메모리 영역을 맵핑하는 것을 포함하는 동작들을 수행하기 위한 프로세서 실행가능 명령들로 구성된다.
일 양태에서, 제 2 프로세싱 코어는, 제 1 어드레스 맵을 수신하는 것, 제 2 프로세스의 제 2 어드레스 맵을 획득하는 것, 제 1 및 제 2 어드레스 맵들이 매칭 가상 어드레스를 포함하는지 여부를 결정하기 위하여 어드레스 매칭 동작들을 수행하는 것, 공통 가상 어드레스로서 그리고 제 2 운영 시스템 커널의 공유 메모리 영역의 제 2 속성으로서 매칭 가상 어드레스를 저장하는 것, 제 1 프로세싱 코어에 공통 가상 어드레스를 전송하는 것, 및 제 2 프로세스를 위한 공통 가상 어드레스에서 공유 메모리 영역의 물리적 페이지들을 맵핑하는 것을 포함하는 동작들을 수행하기 위한 프로세서 실행가능 명령들로 구성될 수도 있다.
일 양태에서, 제 1 및 제 2 프로세싱 코어들의 각각은 하드웨어 메모리 관리 유닛 (MMU) 을 포함할 수도 있다. 추가 양태에서, 제 2 프로세싱 코어는, 제 1 어드레스 맵을 수신하는 것이 어드레스 협상 핸들러 스레드에서 제 1 어드레스 맵을 수신하는 것을 포함할 수 있도록 동작들을 수행하기 위한 프로세서 실행가능한 명령들로 구성될 수도 있다.
추가 양태들은, 멀티프로세서 컴퓨팅 디바이스의 제 1 프로세싱 코어로 하여금, 제 1 프로세스에 의해, 제 2 프로세싱 코어에서의 제 2 프로세스와 어드레스 협상을 요청하는 것, 제 1 프로세스의 제 1 어드레스 맵을 획득하는 것, 제 2 프로세싱 코어에 제 1 어드레스 맵을 전송하는 것, 제 2 프로세싱 코어에 제 1 어드레스 맵을 전송하는 것에 응답하여 공통 가상 어드레스를 수신하는 것, 제 1 운영 시스템 커널의 내부에 공유 메모리 영역의 제 1 속성으로서 공통 가상 어드레스를 저장하는 것, 및 제 1 프로세스의 공통 가상 어드레스에서 공유 메모리 영역을 맵핑하는 것을 포함하는 동작들을 수행하게 하도록 구성되는 저장된 프로세서 실행가능 소프트웨어 명령들을 갖는 비일시적 컴퓨터 판독가능 저장 매체를 포함한다.
일 양태에서, 저장된 프로세서 실행가능 소프트웨어 명령들은, 멀티프로세서 컴퓨팅 디바이스의 제 2 프로세싱 코어로 하여금, 제 1 어드레스 맵을 수신하는 것, 제 2 프로세스의 제 2 어드레스 맵을 획득하는 것, 제 1 및 제 2 어드레스 맵들이 매칭 가상 어드레스를 포함하는지 여부를 결정하기 위하여 어드레스 매칭 동작들을 수행하는 것, 공통 가상 어드레스로서 그리고 제 2 운영 시스템 커널의 공유 메모리 영역의 제 2 속성으로서 매칭 가상 어드레스를 저장하는 것, 제 1 프로세싱 코어에 공통 가상 어드레스를 전송하는 것, 및 제 2 프로세스를 위한 공통 가상 어드레스에서 공유 메모리 영역의 물리적 페이지들을 맵핑하는 것을 포함하는 동작들을 수행하게 하도록 구성될 수도 있다.
추가 양태에서, 저장된 프로세서 실행가능 소프트웨어 명령들은, 멀티프로세서 컴퓨팅 디바이스의 제 2 프로세싱 코어로 하여금, 제 1 어드레스 맵을 수신하는 것이 어드레스 협상 핸들러 스레드에서 제 1 어드레스 맵을 수신하는 것을 포함할 수 있도록 동작들을 수행하게 하도록 구성될 수도 있다.
본원에 포함되고 본 명세서의 일부를 구성하는 첨부 도면들은 본 발명의 예시적 양태를 예시하고, 위에 주어진 일반적인 설명과 아래에 주어진 상세한 설명과 함께, 본 발명의 특징들을 설명하는 역할을 한다.
도 1은 다양한 양태들을 구현하는데 적합한 일 예의 시스템 온 칩의 구성도이다.
도 2는, 어드레스 맵들 및 공통 가상 어드레스들을 전달하도록 구성된 2개 프로세서들을 포함하는 일 양태의 멀티프로세서 컴퓨팅 시스템에서의 예의 논리적 및 기능적 컴포넌트들을 예시하는 블록도이다.
도 3은 다양한 양태들에 따른 메모리 관리 솔루션을 구현하도록 구성될 수도 있는 일 예의 프로세싱 코어의 논리적 컴포넌트들 및 인터페이스들을 예시하는 블록도이다.
도 4는 독립적인 운영 시스템들 및 별개의 메모리 관리 유닛 (MMU) 들을 포함하는 복수의 이종 프로세서들 및 공유 메모리를 갖는 일 양태의 멀티프로세서 컴퓨팅 시스템을 예시하는 블록도이다.
도 5a 는 멀티프로세서 컴퓨팅 디바이스의 범용 애플리케이션 프로세서와 보조 프로세서 사이에 공유되는 메모리 영역에 대한 액세스를 제공하는 일 양태의 방법을 예시하는 프로세스 흐름도이다.
도 5b 는 멀티프로세서 컴퓨팅 디바이스의 애플리케이션 프로세서로부터 보조 프로세서로 범용 소프트웨어 애플리케이션의 부분들을 오프로딩 (offloading) 하는 일 양태의 방법을 예시하는 프로세스 흐름도이다.
도 6은 다양한 양태들에 사용하기 적합한 일 예의 모바일 컴퓨팅 디바이스의 컴포넌트 블록 도이다.
도 7은 다양한 양태들에 사용하기 적합한 일 예의 랩톱 컴퓨터의 컴포넌트 블록 도이다.
도 8은 다양한 양태들에 사용하기 적합한 일 예의 서버 컴퓨터의 컴포넌트 블록 도이다.
다양한 양태들이 첨부 도면을 참조하여 상세히 설명될 것이다. 가능한 경우는 언제나, 동일 참조 부호들이 동일 또는 유사 부분들을 지칭하기 위해 도면들 전체에 걸쳐 사용될 것이다. 특정 예들 및 구현들에 대해 이루어지는 참조는 예시적인 목적을 위한 것이며 본 발명의 범위 또는 특허청구범위를 제한하도록 의도되지 않았다.
개관에서, 다양한 양태들은, 시스템 온 칩 (SOC) 에서 범용 애플리케이션 프로세서와 보조 프로세서 (예를 들어, DSP) 사이에 공유되는 메모리에 대한 액세스를 제공하는 방법 및 그 방법을 수행하도록 구성된 프로세서들을 포함한다. 공유 메모리에 대한 액세스는, (예를 들어, 운영 시스템 커널에 대한 시스템 호출을 통해) 애플리케이션 프로세서 상의 제 1 프로세스 (P1) 가 보조 프로세서 상의 제 2 프로세스 (P2) 와 어드레스 협상을 요청하고, 제 1 운영 시스템으로부터 제 1 어드레스 맵을 획득하고, 보조 프로세서에 제 1 어드레스 맵을 전송하도록 프로세서들을 구성하는 것에 의해 제공될 수도 있다. 제 2 프로세서 (P2) 는 제 1 어드레스 맵을 수신하고, 제 2 운영 시스템으로부터 제 2 어드레스 맵을 획득하고, 제 1 및 제 2 어드레스 맵들에서 매칭/오버랩핑 어드레스들을 식별하기 위하여 어드레스 맵칭 알고리즘 또는 루틴을 호출 (invoke) 하고, 공통 가상 어드레스로서 매칭/오버랩핑 어드레스들을 저장하고, (예를 들어, 시스템 호출, 원격 메소드 호출 등을 통해) 애플리케이션 프로세서에 공통 가상 어드레스들을 전송할 수도 있다. 제 1 및 제 2 프로세스들 (즉, P1 및 P2) 각각은 물리적 페이지들을 메모리에 맵핑하기 위하여 공통 가상 어드레스들을 사용할 수도 있다. 어드레스 맵들 및 공통 가상 어드레스들을 공유하는 것에 의해, 다양한 양태들은 2개의 이종 프로세서들이 보다 효율적으로 통신할 수 있게 한다.
용어들 "컴퓨팅 시스템" 및 "컴퓨팅 디바이스" 는 일반적으로 본원에서, 서버, 개인용 컴퓨터, 및 이동 디바이스, 이를테면 셀룰러 전화기, 스마트폰, 태플릿 컴퓨터, 랩톱 컴퓨터, 넷북, 울트라북, 팜톱 컴퓨터, 휴대 정보 단말 (PDA), 무선 전자 메일 수신기, 멀티미디어 인터넷 가능형 셀룰러 전화기, 위성 위치확인 시스템 (GPS) 수신기, 무선 게이밍 제어기, 및 프로그램 가능한 프로세서를 포함하는 유사한 개인용 전자 디바이스 중의 어느 하나 또는 전부를 지칭하기 위해 사용된다. 다양한 양태들은 제한된 프로세싱 능력 및 배터리 수명을 갖는 스마트폰과 같은 이동 디바이스들에서 특히 유용하지만, 양태들은 일반적으로, 프로그램가능한 프로세서 및 보조 프로세서를 포함하는 임의의 컴퓨팅 디바이스에서 유용하다.
용어 "모니터 에이전트" 는 일반적으로 본원에서, 하드웨어 모니터, 칩 상에 제작된 특수 하드웨어, 하이퍼바이저 (hypervisor), 가상 머신 모니터, 하이 레벨 운영 시스템 (HLOS) 의 외부에서 실행되는 모니터 소프트웨어, 및 HLOS 의 외부에 있을 수도 있는 디바이스 드라이버, 그의 메모리 관리 시스템 및/또는 그의 할당자 기능의 부분으로서 실행되는 소프트웨어 모니터 중의 어느 하나 또는 전부를 포함하는, 시각화 기술을 지원하거나 및/또는 컴퓨팅 리소스들의 추상화 (또는 시각화) 를 가능하게 하는 임의의 하드웨어 컴포넌트 또는 소프트웨어를 지칭하기 위하여 사용된다.
용어 "시스템 온 칩" (SOC) 은 본원에서, 단일 기판 상에 집적된 다수의 리소스들 및/또는 프로세서들을 포함하는 단일 집적 회로 (IC) 칩을 지칭하기 위하여 사용된다. 단일 SOC 는 디지털, 아날로그, 혼합 신호, 및 무선 주파수 기능들을 위한 회로를 포함할 수도 있다. 단일 SOC 는 또한, 임의의 수의 범용 및/또는 특수 프로세서 (디지털 신호 프로세서, 모뎀 프로세서, 비디오 프로세서 등), 메모리 블록 (예를 들어, ROM, RAM, 플래시 등), 및 리소스들 (예를 들어, 타이머, 전압 레귤레이터, 오실레이터 등) 을 포함할 수도 있다. SOC 는 또한, 집적 리소스 및 프로세서들을 제어하고, 주변 디바이스들을 제어하기 위한 소프트웨어를 포함할 수도 있다.
최근에, 이동 컴퓨팅 디바이스 아키텍처들은 복잡성이 커졌고, 이제 일반적으로 다수의 프로세서 코어, SOC, 코프로세서, 전용 프로세서들 (예를 들어, 통신 모뎀 칩, GPS 수신기 등) 을 포함하는 기능성 모듈, 복잡한 메모리 시스템, 얽히고 설킨 전기 상호접속들 (예를 들어, 버스 및/또는 패브릭), 그리고 복잡하고 전력 집약적인 소프트웨어 애플리케이션 (예를 들어, 비디오 스트리밍 애플리케이션 등) 을 실행하는데 적합한 수많은 다른 리소스들을 포함한다. 이러한 복잡성의 상승으로, 이동 디바이스들의 성능 및 전력 소비 특성들을 개선시키기 위하여 새로운 프로세싱 및 메모리 관리 솔루션들이 요구된다.
성능을 개선하고 배터리 수명을 최대화하기 위하여, 이동 디바이스 애플리케이션 프로세서는 보조 프로세서로 동작들을 오프로딩하도록 구성될 수도 있으며, 그에 의해 프로세싱 및/또는 전력 효율에 있어서 개선을 가능하게 한다. 보조 프로세서로 동작들을 오프로딩하는 동작들은, 디바이스의 보조 프로세서 상의 실행에 적합한 코드로 소프트웨어 애플리케이션의 부분들을 컨버팅 또는 변환하는 것, 상이한 이종 프로세서들에서 그 소프트웨어 애플리케이션의 상이한 부분들을 동시에 실행하는 것, 및 실행의 결과들을 다시 애플리케이션 프로세서로 전달하는 것을 포함할 수도 있다. 예를 들어, 이동 디바이스는, 소프트웨어 애플리케이션의 오브젝트 코드를 분석하고, 오브젝트 코드의 실행 동안 수행될 필요가 있는 동작들을 식별하고, 식별된 동작들에 기초하여 오브젝트 코드를 오브젝트 코드 세그먼트들로 파티셔닝하고, 오브젝트 코드 세그먼트가 보조 프로세서에서 프로세싱될 수 있는지 여부를 결정하고, 보조 프로세서에서의 실행에 적합한 포맷으로 하나 이상의 오브젝트 코드 세그먼트들을 변환하고, 보조 프로세서로 하여금, 애플리케이션 프로세서 상에서 실행되는 변환되지 않은 오브젝트 코드 세그먼트들과 병렬로 변환된 오브젝트 코드 세그먼트들을 실행하게 하도록 구성될 수도 있다.
보조 프로세서에서 코드 부분들 중의 일부를 실행시키는 것에 의해, 단순히 이동 디바이스의 주 애플리케이션 프로세서 또는 CPU 에서 전체 소프트웨어 애플리케이션을 실행시키는 것과 비교하여, 성능, 효율 및/또는 전력 소비 (여기에서 "성능 특성") 에서의 현저한 이득이 실현될 수도 있다. 하지만, 기존 메모리 관리 시스템들은 이동 디바이스들에서 그러한 솔루션들을 사용하는 효과를 제한할 수도 있다.
현대 이동 컴퓨팅 디바이스 아키텍처의 복잡성에 기인하여, 이동 디바이스의 성능 특성은 대개, 디바이스의 통신 버스의 속도, 폭 및 대역폭에 의존한다. 하지만, 기존 메모리 관리 시스템들은, 보조 프로세서에 코드 부분들을 오프로딩하고 실행 결과들을 애플리케이션 서버에 전송할 때 메모리에 대한 데이터의 읽기 및 쓰기를 위해 시스템 버스의 광범위한 사용을 필요로 할 수도 있다. 그러한 디바이스의 통신 버스들의 광범위한 사용은, 오프로딩 동작들에 의해 달성되는 성능, 효율 또는 전력 소비에 있어서의 이득을 감소시키거나 또는 상쇄시킬 수도 있다.
다양한 양태들은, 멀티프로세서 시스템에서 2개 이상의 이종 프로세서들 (예를 들어, 애플리케이션 프로세서 및 보조 프로세서) 간에 공유되는 메모리 영역에 대한 액세스를 제공하는 개선된 메모리 관리 솔루션들을 제공한다. 이종 프로세서들로 하여금 동일한 메모리 영역들에 대해 쓰기 및 읽기를 허용하고, 그러한 공유 메모리 영역들에 대한 액세스 및 이용을 제공함으로써, 다양한 양태들은, 이동 디바이스의 보조 프로세서에서 소프트웨어 애플리케이션의 부분들을 오프로딩 및 실행할 때 시스템 버스 및/또는 패브릭들을 통하여 전달되는 정보의 양을 감소시킨다.
일반적으로, 멀티프로세서 시스템에서 각각의 이종 프로세서는, 시스템에 있는 다른 운영 시스템 및 프로세서들과 관계 없이 메모리 관리 동작들을 수행하는 운영 시스템을 포함한다. 예를 들어, 멀티프로세서 시스템은, 제 1 타입의 운영 시스템 (예를 들어, FreeBSD, LINUX, OS X 등) 을 실행하는 제 1 프로세서 및 제 2 타입의 운영 시스템 (예를 들어, Microsoft Windows 8) 을 실행하는 제 2 프로세서를 포함할 수도 있다. 이들 운영 시스템들의 각각은, 그의 프로세서 상에서 실행되는 애플리케이션 프로그램에 의해 시스템 메모리의 할당 및 사용을 관리하기 위한 메모리 관리 시스템을 포함할 수도 있다. 예를 들어, 각각의 운영 시스템은, 가상 메모리 어드레스를 애플리케이션 프로그램에 할당하고 하나의 프로세스에 의해 사용되는 메모리가 또 다른 프로세스에 의해 이미 사용중인 메모리와 간섭하지 않도록 보장하도록 구성된 가상 메모리 관리자 (OS VMM) 를 포함할 수도 있다. 프로세스가 물리적 메모리에 대한 액세스를 필요로 할 때, 이들 가상 어드레스들은, 프로세서에 특유한 메모리 관리 유닛 (MMU) 에 의해 물리적 메모리 어드레스들로 변환된다.
따라서, 기존 시스템들에서는, 각각의 프로세서가, 독립적인 운영 시스템 및 별개의 MMU 를 사용하여 메모리 관리 동작들을 수행하고, 메모리 어드레스들의 할당 또는 사용을 조정하기 위한 프로세서들간의 실행 제어가 없다. 하지만, 멀티프로세서 시스템은, 그의 이종 프로세서들 중의 2개 이상에 대해 액세스가능한 메모리 영역들을 포함할 수도 있다. 그러므로, 오프로딩 동작들을 수행할 때 이 공유 메모리에 대한 참조 (reference) 를 통해 2개 이상의 프로세서들이 통신할 수 있다면 유리할 것이다. 예를 들어, 소프트웨어 애플리케이션의 부분들을 보조 프로세서로 오프로딩할 때 시스템 버스/패브릭을 통해 전달되는 정보의 양은, 프로세서들이 공유 메모리에 대한 참조를 통해 통신가능하다면 감소될 것이다. 하지만, 기존 메모리 관리 솔루션들은, 각각의 프로세서가 시스템에 있는 다른 프로세서들과 관계 없이 메모리 어드레싱 동작들을 수행하는 것을 필요로 하고, 결과적으로, 프로세서들은 포인터, 상대 어드레스, 가상 어드레스, 또는 공유 메모리에 대한 참조를 통해 통신할 수 없다.
예를 들어, 기존 메모리 관리 솔루션들을 이용하여 공유 메모리 영역에 액세스하는 것은, 제 1 프로세서에서의 제 1 프로세스 (P1) 에게 공유 메모리 영역을 작성할 것을 요구하고, 공유 메모리의 존재를 제 2 프로세서에서의 제 2 프로세스 (P2) 에 통지하고, 공유 메모리 영역을 그의 어드레스 공간내에 맵핑하기 위하여 제 1 프로세서에서 제 1 운영 시스템 커널에 요청을 이슈 (issue) 하고, 그 공유 메모리 영역에 대해 가상 어드레스 (VA1) 배정을 수신할 수도 있다 (즉, 제 1 운영 시스템들은 가상 어드레스 (VA1) 를 제 1 프로세스에 배정할 수도 있다). 제 2 프로세스 (P2) 는, 공유 메모리 영역의 존재의 통지를 수신하고, 공유 메모리 영역을 맵핑하기 위하여 제 2 프로세서에서 제 2 운영 시스템 커널에 요청을 이슈하고, 그 동일한 공유 메모리 영역에 대한 상이한 가상 어드레스 (VA2) 배정을 수신할 수도 있다.
종래 시스템에서는 각각의 운영 시스템이 가상 어드레스들을 독립적으로 배정하고 이들 메모리 어드레스들의 할당 또는 사용을 조정하기 위한 프로세서들 간의 실행 제어가 없으므로, 공유 메모리 장소에 대해 제 1 프로세서에 의해 배정된 가상 어드레스 (VA1) 는 동일한 공유 메모리 장소에 대해 제 2 프로세서에 의해 배정된 가상 어드레스 (VA2) 와 동일하지 않을 것이다. 이들 가상 어드레스들은 상이하므로, 2개의 프로세서들은 직접 포인터들, 상대 어드레스들, 가상 어드레스들 또는 공유 메모리에 대한 참조를 통해 통신할 수 없다.
일 예로서, 제 1 프로세서에서 실행되는 제 1 프로세스 (P1) 가, 공유 메모리 영역에서 링크된 리스트 (예를 들어, 리스트 [데이터, 다음]) 를 작성하여, 링크 리스트의 "다음" 필드가 후속 노드들/어드레스들의 가상 어드레스들을 포함하는, 상황을 고려한다. P1 이, 기존 솔루션들을 이용하여 리스트의 헤드의 가상 어드레스를 P2 로 보내는 것에 의해 제 2 프로세싱 코어에서 실행되는 제 2 프로세스 (P2) 와 링크된 리스트를 공유하려고 시도하면, P2 는 모든 "다음" 포인터들을 재계산해야 하는데, 왜냐하면 그것은 공유된 메모리 영역에 대해 상이한 가상 어드레스 (즉, VA2) 를 가지기 때문이다. 이들 포인트들을 재계산하는 것은, 멀티프로세서 시스템의 성능 및 전력 소비 특성에 부정적인 영향을 주는 비효율적인 리소스의 이용이다.
다양한 양태들은, 동일한 물리적 어드레스를 참조하기 위하여 2개의 상이한 이종 프로세서들에서 동일한 가상 어드레스가 사용되도록 메모리 어드레스를 배정하도록 멀티프로세서 시스템들을 구성하는 것에 의해 종래 시스템에서의 이들 제한들을 극복한다. 상이한 프로세서들에서 동일한 가상 어드레스를 배정하는 것에 의해, 다양한 양태들은 프로세서들로 하여금 어드레스 변환 동작들을 수행하는 것을 회피할 수 있게 하고 보다 직접적으로, 포인터들, 상대 어드레스, 가상 어드레스 또는 공유 메모리에 대한 참조를 통해 통신할 수 있게 한다. 다양한 양태들은, 범용 소프트웨어 애플리케이션의 부분들을 보조 프로세서에 오프로딩할 때 수행되는 동작들의 수를 감소시키고, 그에 의해 이동 디바이스의 성능 특성을 개선시킨다. 다양한 양태들은 또한, 시스템 버스 및 패브릭을 통해 전달되는 정보의 양을 감소시키고, 또한 디바이스의 성능 특성을 개선시킨다.
일 양태에서, 이동 디바이스의 제 1 프로세싱 코어는 공유 메모리 영역을 작성하고, 공유 메모리 영역의 맵을 생성하고, 이동 디바이스의 제 2 프로세싱 코어에 맵을 전송하도록 구성될 수도 있다. 제 2 프로세싱 코어는, 맵을 수신하고, 수신된 맵을 그의 가상 메모리 지역 (VMA) 에서의 어드레스 범위들 또는 그 자신의 공유 메모리 영역의 맵에 비교하고, 2개 맵들/어드레스들 (예를 들어, 양측에 미사용인 가상 어드레스의 범위) 사이의 교차들을 식별하고, 식별된 교차들을 다시 제 1 프로세싱 코어로 전달하도록 구성될 수도 있다. 제 1 및 제 2 프로세싱 코어들 양자 모두는 공유 메모리 영역에서 물리적 어드레스들을 참조하기 위하여 식별된 교차들에 포함된 공통 가상 어드레스들을 사용할 수도 있다. 이것은, 제 1 및 제 2 프로세서들 상의 제 1 및 제 2 프로세스들 (즉, P1 및 P2) 로 하여금 포인터, 상대 어드레스, 가상 어드레스, 메모리 참조 등을 전달할 수 있게 한다.
다양한 양태들이, 도 1에 예시된 것과 같은 시스템 온 칩 (SOC) 을 포함한, 다수의 멀티프로세서 컴퓨터 시스템들 상에서 구현될 수도 있다. SOC (100) 는 다수의 이종 프로세싱 코어들, 이를테면 디지털 신호 프로세서 (DSP) (102), 모뎀 프로세서 (104), 그래픽 프로세서 (106), 및 애플리케이션 프로세서 (108) 를 포함할 수도 있다. SOC (100) 는 또한, 이종 프로세서들 (102, 104, 106, 108) 중의 하나 이상에 접속된 하나 이상의 코프로세서들 (110) (예를 들어, 벡터 코프로세서 등) 을 포함할 수도 있다. 각각의 프로세서 (102, 104, 106, 108, 110) 는 하나 이상의 코어들을 포함할 수도 있고, 각각의 프로세서/코어는 다른 프로세서들/코어들과 관계 없이 동작들을 수행할 수도 있다. 예를 들어, SOC (100) 은, 제 1 타입의 운영 시스템 (예를 들어, FreeBSD, LINUX, OS X 등) 을 실행하는 프로세서 및 제 2 타입의 운영 시스템 (예를 들어, Microsoft® Windows 8) 을 실행하는 프로세서를 포함할 수도 있다.
프로세서들 (102, 104, 106, 108, 110) 은, 서로 아주 인접한 (예를 들어, 단일 기판, 다이, 집적 칩 등 상에 있는) 독립적인 프로세싱 코어들일 수도 있다. 프로세서들 (102, 104, 106, 108, 110) 의 인접은, 데이터 신호가 오프칩 (off-chip) 이동해야 하는 경우에 가능한 것보다 훨씬 더 높은 주파수/클록 레이트에서 메모리 (112) 가 동작할 수 있게 한다. 더욱이, 프로세서들 (102, 104, 106, 108, 110) 의 인접은, 온칩 (on-chip) 메모리 및 리소스들 (예를 들어, 전압 레일) 의 공유, 그리고 코어들 간의 보다 조직적인 협동을 가능하게 한다.
프로세서들 (102, 104, 106, 108) 은, 서로 그리고 하나 이상의 메모리 엘리먼트들 (112), 시스템 리소스들 (116), 및 커스텀 회로 (114) 에 상호접속/버스 모듈 (124) 을 통해 상호접속될 수도 있고, 이는 재구성가능 로직 게이트의 어레이를 포함하거나 및/또는 버스 아키텍처 (예를 들어, CoreConnect, AMBA 등) 을 구현할 수도 있다. 통신은, 고 성능 네트워크 온 칩 (NoC) 과 같은 진보된 인터커넥트 (interconnect) 들에 의해 제공될 수도 있다.
애플리케이션 프로세서 (108) 는 중앙 처리 유닛 (CPU), CPU 의 컴포넌트, 또는 CPU 에 연결된 프로세싱 유닛일 수도 있다. 일 양태에서, CPU 는 프로세서들 (102-110), 시스템 컴포넌트들, 리소스들, 또는 주변장치들의 다양한 메모리들에 대해 정보를 읽기 및 쓰기하도록 구성될 수도 있다. 일 양태에서, 프로세서들은 각각의 프로세서들 (102-110), 리소스들, 및/또는 주변장치들의 메모리 관리 시스템 제어기들을 통해 메모리들에 대해 읽기 및 쓰기할 수도 있다.
시스템 온 칩 (SOC) (100) 은 프로세서들 (102-108) 중의 하나 이상에 접속된 코프로세서들 (110) 을 포함할 수도 있다. 그러한 코프로세서들 (110) 은, 멀티미디어 및 비디오 스트리밍 애플리케이션과 같은, 고속 및 병렬 실행을 필요로 하는 프로세싱 애플리케이션에 특히 유용할 수도 있다. 일 양태에서, 코프로세서들 (110) 은, 독립 하드웨어 레지스터, 메모리 및/또는 실행 하드웨어를 포함하는 단일 명령 다중 데이터 (SIMD) 명령어 집합 아키텍처 (ISA) 를 구현할 수도 있다. 일 양태에서, SIMD 벡터 코프로세서는 애플리케이션 프로세서 (108) 의 일 부분일 수도 있거나, 또는 이에 밀접하게 연결될 수도 있다.
SOC (100) 는, 또한 센서 데이터, 아날로그-디지털 컨버젼, 무선 데이터 송신을 관리하고, 이동 디바이스의 전자 디스플레이 및 스피커 상에 렌더링하기 위한 인코딩된 오디오 및 비디오 신호들을 프로세싱하는 것과 같은 다른 특수 동작들을 수행하기 위한 아날로그 회로 및 커스텀 회로 (114) 를 포함할 수도 있다.
SOC (100) 는 또한, 시스템 컴포넌트들 및 리소스들 (116), 이를테면 전압 레귤레이터, 오실레이터, 위상 고정 루프, 주변 브리지 (peripheral bridge), 데이터 제어기, 메모리 제어기, 시스템 제어기, 액세스 포트, 타이머, 및 컴퓨터 상에서 실행되는 프로세서들 및 소프트웨어 클라이언트(예를 들어, 웹 브라우저 등) 을 지원하는데 사용되는 다른 유사한 컴포넌트들을 포함할 수도 있다. 시스템 컴포넌트들/리소스들 (116) 및 커스텀 회로 (114) 는 또한, 카메라, 전자 디스플레이, 무선 통신 디바이스, 외부 메모리 칩 등과 같은 주변 디바이스들과 인터페이스 접속하기 위한 회로를 포함할 수도 있다.
SOC (100) 는 또한, 클록 (118) 및 전압 레귤레이터 (120) 와 같은 SOC 외부의 리소스들과 통신하기 위한 입력/출력 모듈 (미도시) 를 포함할 수도 있다. SOC 외부의 리소스들 (예를 들어, 클록 (118), 전압 레귤레이터 (120)) 는 2개 이상의 내부 SOC 프로세서들/코어들 (예를 들어, DSP (102), 모뎀 프로세서 (104), 그래픽 프로세서 (106), 애플리케이션 프로세서 (108) 등) 에 의해 공유될 수도 있다.
도 2는, 어드레스 맵들 및 공통 가상 어드레스들을 전달하도록 구성된 프로세서들을 포함하는 일 양태의 멀티프로세서 컴퓨팅 시스템 (200) 에서의 예의 논리적 및 기능적 컴포넌트들을 예시한다. 예시된 컴퓨터 시스템 (200) 은 하드웨어 컴포넌트들 및 소프트웨어 컴포넌트들 양자 모두를 포함한다. 하드웨어 컴포넌트들은 애플리케이션 프로세서 (108), 디지털 신호 프로세서 (DSP) (102), 상호접속 모듈 (124), 및 공유 메모리 (112) 모듈을 포함할 수도 있다. 소프트웨어 컴포넌트들은 호스트 운영 시스템 (202), DSP 운영 시스템 (204), 프로세서간 통신 모듈 (206), 호스트 운영 시스템 사용자 프로세스 (프로세스 A) (208) 및 DSP 프로세스 (프로세스 B) (210) 를 포함할 수도 있다. 다양한 양태들에서, 프로세서간 통신 모듈 (206) 은 가상 머신, 호스트 운영 시스템 (202), 게스트 운영 시스템, 하이 레벨 운영 시스템 (HLOS), 모니터 에이전트, 하이퍼바이저 등의 부분으로서 포함될 수도 있다. DSP 프로세스 (210) 는 서브루틴, 프로시저, 프로세스, 스레드, 또는 디지털 신호 프로세서 (102) 로 하여금 하나 이상의 동작들을 수행하게 하도록 구성된 서비스일 수도 있다. 호스트 운영 시스템 사용자 프로세스 (208) 는 범용 소프트웨어 애플리케이션 프로그램의 프로세스일 수도 있다.
일반적으로, 하나의 프로세싱 코어 내에서 공유하거나, 액세스하거나 및/또는 동작하는 프로세스들은 고속 메모리 읽기/쓰기 동작들을 통해 통신할 수도 있다. 다른 한편, 상이한 프로세싱 코어들에서의 독립적인 프로세스들 사이의 통신은 통상적으로, 상대적으로 느린 함수 호출 (function call), 메소드 호출 (method invocation), 프로시저 호출 (procedure call), 메시지 교환, 도메인 소켓 (예를 들어, Unix 도메인 소켓), 및 다른 형태의 프로세스간 통신 (IPC) 을 통해 달성된다. 원격 프로시저 호출 (RPC) 및 원격 메소드 호출 (RMI) 은, 호출 프로세스로 하여금 서브루틴, 프로시저, 프로세스, 스레드 또는 서비스 (여기서 총칭하여 "서비스") 로 하여금, 일반적으로 또 다른 프로세서, 칩 또는 컴퓨팅 디바이스 상의 또 다른 어드레스 공간에서 실행할 수 있게 하는 프로세스간 통신이다.
멀티프로세서 시스템들에서, 상이한 프로세서들 (예를 들어, 프로세서들 (108, 102)) 에 이용가능한 메모리 및 리소스들은 종종, 별개의 도메인들 (예를 들어, 보호 도메인들, 물리적 도메인들 등) 에 있다. 또한, 프로세서들은 통상적으로, 상이한 운영 시스템들로 구성되거나 및/또는 상이한 하드웨어 기술 언어 (HDL) 또는 명령어 세트 아키텍처 (ISA) 를 구현한다. 그러한 시스템들에서, RPC/RMI 메카니즘들은, 제 1 프로세서 상의 호출 프로세스로 하여금 서비스가 제 2 프로세서에서 실행되게 할 수 하고, 제 2 프로세서가 서비스의 실행 결과들을 제 1 프로세서로 전송할 수 있게 하는 잘 정의된 인터페이스를 제공할 수도 있다.
도 2를 참조하면, 호스트 운영 시스템 사용자 프로세스 (208) 는 DSP 프로세스 (210) 를 호출할 수도 있고, 그것이 DSP (102) 상의 일반 애플리케이션 프로그램 동작들을 수행하는 것을 시작하게 할 수도 있다. 동작들을 완료한 후에, DSP 서비스 (210) 는 호스트 운영 시스템 사용자 프로세스 (208) 에 그러한 동작들의 결과들을 전달할 수도 있다. 다양한 실시형태들에서, 그러한 프로세서간 통신은, 위에 논의된 IPC 메카니즘들 중 어느 것을 통해 또는 직접 메모리 읽기/쓰기 동작들을 통해 프로세서들 (108, 102) 사이의 통신을 수행, 관리, 또는 가능하게 하도록 구성될 수도 있는, 프로세서간 통신 모듈 (206) 을 통해 달성될 수도 있다.
도 3은, 다양한 양태들에 따른 메모리 관리 솔루션을 구현하도록 구성될 수도 있는 일 예의 프로세싱 코어 (예를 들어, 애플리케이션 프로세서 (108) 등) 의 논리적 컴포넌트들 및 인터페이스들을 예시한다. 예시된 컴퓨터 시스템 아키텍처 (300) 는 하드웨어 컴포넌트들 (322) 및 소프트웨어 컴포넌트들 (320) 양자 모두를 포함한다. 소프트웨어 컴포넌트들 (320) 은 운영 시스템 (302), 라이브러리 모듈 (304), 및 하나 이상의 애플리케이션 프로그램들 (A0 내지 An) (306) 를 포함할 수도 있다. 하드웨어 컴포넌트들 (322) 은 주변장치들 (308) (예를 들어, 하드웨어 가속기, 입력/출력 디바이스 등), 중앙 처리 유닛 (CPU) (310), 중앙 처리 유닛 메모리 관리 유닛 (CPU MMU) (316), 하나 이상의 시스템 메모리 관리 유닛들 (여기서, “시스템 MMU” 또는 “SMMU”) (312), 및 하나 이상의 메모리들 (314) 을 포함할 수도 있다.
일반적으로, 이동 컴퓨팅 디바이스들을 위해 쓰여진 애플리케이션 소프트웨어는, 일반적으로 "애플리케이션", "앱", 또는 애플리케이션 프로그램들 (306) 로 지칭되는 것인, 실행가능 코드로 컴파일될 수도 있다. 각각의 애플리케이션 프로그램 (306) 은 단일 프로세스 또는 스레드일 수도 있거나, 또는 복수의 프로세서들 또는 스레드들을 포함할 수도 있다. 애플리케이션 프로그램들 (306) 은 하이 레벨 언어 (HLL) 라이브러리 호출들을 라이브러리 모듈 (304) 에 애플리케이션 프로그램 인터페이스 (API) 를 통해 이슈할 수도 있다. 라이브러리 모듈 (304) 은 애플리케이션 바이너리 인터페이스 (ABI) 를 통해 운영 시스템 (302) 에 대한 서비스들을 (예를 들어, 운영 시스템 호출을 통해) 호출할 수도 있다. 운영 시스템 (302) 은, 하드웨어 (322) 에 의해 구현되는 특정 동작 코드 (opcode) 또는 네이티브 커맨드 (native command) 들의 리스팅인 특정 명령어 세트 아키텍처 (ISA) 를 이용하여 하드웨어 컴포넌트들과 통신할 수도 있다. 이런 식으로, 명령어 세트 아키텍처는 운영 시스템 (302) 에 의해 보여지는 바처럼 하드웨어 (322) 를 정의할 수도 있다.
운영 시스템 (302) 은, 애플리케이션 프로그램들 (306) 중에 다양한 메모리들 (314) 의 할당 및 사용을 조정 및 제어하도록 구성될 수도 있고, 이는 다수의 애플리케이션 프로그램들 (A0-An) (306) 에 걸쳐 물리적 메모리를 파티셔닝하는 것을 포함할 수도 있다. 일 양태에서, 이것은 메모리 어드레스 공간 변환 프로세스를 통해 달성될 수도 있고, 여기서 운영 시스템 (302) 이 가상 어드레스 (VA) 들을 각각의 애플리케이션 프로그램들 (A0-An) (306) 에 배정하고, 다음으로 애플리케이션 프로그램들 (A0-An) (306) 실행 전에 가상 어드레스 (VA) 들에 기초하여 물리적 메모리 어드레스 (PA) 들을 할당한다.
운영 시스템 (302) 은, 다양한 애플리케이션 프로그램들 (A0 내지 An) (306) 에 의해 시스템 메모리의 할당 및 사용을 관리하기 위한 하나 이상의 메모리 관리 시스템 (예를 들어, 가상 메모리 관리자 등) 을 포함할 수도 있다. 이들 메모리 관리 시스템은, 하나의 프로세스에 의해 사용되는 메모리가 또 다른 프로세스에서 이미 사용중인 메모리와 간섭하지 않도록 보장하기 위하여 기능할 수도 있다. 예를 들어, 운영 시스템 (302) 은, 운영 시스템 (302) 으로 하여금 특정 물리적 어드레스가 또 다른 어드레스 (즉, 가상 어드레스) 인 것으로 보이게 만드는 것을 가능하게 하는 가상 어드레싱 동작들을 수행하도록 구성된 소프트웨어 기반 메모리 관리자를 포함할 수도 있다. 이들 가상 어드레싱 동작들은, 가상 메모리 어드레스들을 애플리케이션 프로그램들 (A0-An) (306) 에 할당하는 것을 포함할 수도 있다.
위에 논의된 소프트웨어 기반 메모리 관리 시스템에 추가하여, 시스템은 하나 이상의 하드웨어 기반 메모리 관리 시스템들, 이를테면 예시된 중앙 처리 유닛 (CPU) 메모리 관리 유닛 (MMU) (316) 및 시스템 MMU (312) 을 포함할 수도 있다. CPU MMU (316) 및 시스템 MMU (312) 각각은, 물리적 어드레스들로의 가상 어드레스들의 변환, 캐시 제어, 버스 중재 (bus arbitration) 및 메모리 보호 등과 같은 다양한 메모리 관련 동작들을 수행하는 것을 담당하는 하나 이상의 하드웨어 컴포넌트들을 포함할 수도 있다.
일 양태에서, CPU MMU (316) 는 주 CPU (310) 에 어드레스 변환 서비스 및 보호 기능들을 제공하는 것을 담당할 수도 있고, 시스템 MMU (312) 는 다른 하드웨어 컴포넌트들 (예를 들어, 디지털 신호 프로세서, 모뎀 프로세서, 그래픽 프로세서 등) 에 어드레스 변환 서비스 및 보호 기능들을 제공하는 것을 담당할 수도 있다. 일 실시형태에서, 멀티프로세서 시스템에 있는 프로세서들의 각각은 독립적인 MMU 를 포함할 수도 있다.
메모리 관리 시스템들 (예를 들어, CPU MMU (316) 등) 은, 메모리 어드레스 변환 (예를 들어, 가상 어드레스들을 물리적 어드레스들로 변환하는 것 등) 에 사용될 수도 있는 캐시 메모리인 변환 참조 버퍼 (translation look-aside buffer; TLB) 를 포함할 수도 있다. 일 양태에서, 변환 참조 버퍼(TLB) 는 내용 주소화 메모리 (CAM) 일 수도 있고, 이는 저장된 정보가 키 값 포맷 (예를 들어, 해시 테이블) 로 조직되는 하드웨어 연관 어레이 메모리일 수도 있다. 키들은 가상 어드레스들일 수도 있고 그 값들은 물리적 어드레스들일 수도 있다. 다양한 양태들에서, 변환 참조 버퍼는 하드웨어 관리되거나, 소프트웨어 관리되거나, 또는 하드웨어 및 소프트웨어의 조합에 의해 관리될 수도 있다.
메모리 어드레스 변환 프로세스의 부분으로서, 메모리 관리 시스템 (예를 들어, OS VMM, 시스템 MMU (312), CPU MMU (316) 등) 은 내용 주소화 메모리 서치를 수행하여, 변환 참조 버퍼에 키로서 가상 어드레스를 전송하는 것에 의해 변환 참조 버퍼로부터 물리적 어드레스를 요청할 수도 있다. 가상 어드레스 키가 변환 참조 버퍼에서 대응하는 물리적 어드레스 값을 가지면 (즉, "TLB 히트" 가 일어나면), 내용 주소화 메모리 서치는 대응하는 물리적 어드레스를 취출 (retrieve) 및 반환할 수도 있다. 요청된 어드레스가 변환 참조 버퍼에 없으면 (즉, “TLB 미스” 가 일어나면), 메모리 어드레스 변환 프로세스는, 다수의 메모리 장소들의 내용들을 읽고 물리적 어드레스를 계산하는 것에 의해 페이지 워크 (page walk) (예를 들어, 소프트웨어 페이지 워크, 하드웨어 페이지 워크 등) 을 수행할 수도 있다. 물리적 어드레스가 페이지 워크에 의해 결정된 후에, 가상 어드레스에서 물리적 어드레스로의 맵핑이 변환 참조 버퍼에 저장될 수도 있다.
소프트웨어 관리된 변환 참조 버퍼를 포함하는 양태들에서, TLB 미스는 운영 시스템으로 하여금 페이지 테이블들을 워킹하고 소프트웨어에서 변환을 수행하게 할 수도 있다. 하드웨어 관리된 변환 참조 버퍼를 포함하는 양태들에서, 메모리 관리 시스템은 유효 페이지 테이블 엔트리가 특정 가상 어드레스 키에 대해 존재하는지를 결정하기 위하여 하드웨어 테이블 워크를 수행할 수도 있다.
도 4는, 독립적인 운영 시스템 및 별개의 메모리 관리 유닛 (MMU) (402, 408) 을 각각 포함하는 복수의 이종 프로세서들 (102, 108) 및 공유 메모리 (112) 을 갖는 일 양태의 멀티프로세서 컴퓨팅 시스템 (400) 을 예시한다.
기존 메모리 관리 솔루션들을 이용하여, 공유된 메모리 영역에 액세스하는 것은, 애플리케이션 프로세서 (108) 에서의 제 1 프로세스 (P1) 에게 공유 메모리 영역을 작성하고, 공유 메모리 영역의 존재를 DSP (102) 에서의 제 2 프로세스 (P2) 에 (에를 들어, 시스템 호출 또는 IPC 를 통해) 통지하고, 공유 메모리 영역을 그의 어드레스 공간으로 맵핑하기 위한 애플리케이션 프로세서의 운영 시스템 커널에 대한 요청을 이슈하고, 공유 메모리 영역을 위한 가상 어드레스 (VA1) 배정을 수신할 것을 요구할 수도 있다. 제 2 프로세스 (P2) 는, 제 1 프로세스 (P1) 으로부터 통지를 수신하고, 공유된 메모리 영역을 맵핑하기 위하여 DSP 운영 시스템 커널에 요청을 이슈하고, 그 동일한 공유 메모리 영역에 대한 상이한 가상 어드레스 (VA2) 배정을 수신할 수도 있다.
위에 논의된 바처럼, 각각의 운영 시스템이 가상 어드레스들을 독립적으로 배정하고 이들 메모리 어드레스들의 할당 또는 사용을 조정하기 위한 프로세서들 간의 실행 제어가 없으므로, 공유 메모리 장소에 대해 제 1 프로세서에 의해 배정된 가상 어드레스 (VA1) 는 그 동일한 공유 메모리 장소에 대해 제 2 프로세서에 의해 배정된 가상 어드레스 (VA2) 와 동일하지 않을 것이다. 그래서, 2개의 프로세서들은, 포인터들, 상대 어드레스들, 가상 어드레스들 또는 공유 메모리에 대한 참조를 통해 직접 통신할 수 없으며 상이한 가상 어드레스들이 상이한 프로세서들에서 배정되었다.
다양한 양태들에서, 멀티프로세서 컴퓨팅 시스템 (400) 은, 동일한 가상 어드레스가 공유 메모리 (114) 에서 동일한 물리적 어드레스들을 참조하기 위해 이종 프로세서들 (102, 108) 양자 모두에 의해 사용될 수 있도록 메모리 어드레스들을 할당하도록 구성될 수도 있다. 상이한 프로세서들에서 동일한 가상 어드레스를 배정하는 것에 의해, 다양한 양태들은 프로세서들로 하여금, 포인터들, 상대 어드레스, 가상 어드레스 또는 공유 메모리에 대한 참조를 통해 통신할 수 있게 한다. 다양한 양태들은 또한, 범용 소프트웨어 애플리케이션의 부분들을 보조 프로세서에 오프로딩할 때 수행되는 동작들의 수를 감소시키고, 그에 의해 시스템 (400) 의 성능 특성을 개선시킨다. 다양한 양태들은 또한, 시스템 버스 및 패브릭을 통해 전달되는 정보의 양을 감소시키고, 또한 디바이스의 성능 특성을 개선시킨다.
일반적으로, 운영 시스템은 가상 메모리 영역으로 불리는 어드레스 범위들의 리스트로서 프로세스 어드레스 공간을 기록한다. 운영 시스템 커널의 내부의 태스크 구조는, 프로세스에 의해 사용되는 가상 어드레스들의 범위를 식별하는 가상 메모리 구역 (VMA) 들의 리스트를 유지한다.
다양한 양태들에서, 멀티프로세서 컴퓨팅 시스템 (400) 은, 애플리케이션 프로세서 (108) 에서 실행되는 제 1 프로세스 (P1) 가 공유 메모리 영역을 작성할 때, 그것이 메모리 영역을 맵핑하고 그 맵을 DSP (102) 로 전송하도록 구성될 수도 있다. 다음으로, DSP (102) 에서 실행되는 제 2 프로세스 (P2) 는, 수신된 어드레스 맵을 그의 어드레스 범위 또는 그 자신의 공유 메모리 영역의 맵에 비교하고, 2개 맵들/어드레스들 (예를 들어, 양측에 미사용인 가상 어드레스의 범위) 사이의 교차들을 식별하고, 식별된 교차들을 다시 애플리케이션 프로세서 (108) 로 전달한다. 다음으로, 프로세서들 (102, 108) 양자 모두는 교차에서 식별되는 공통 가상 어드레스로 공유 메모리 영역을 맵핑한다.
도 5a 는, 멀티프로세서 컴퓨팅 디바이스에서의 범용 애플리케이션 프로세서와 보조 프로세서 (예를 들어, DSP) 사이에 공유되는 메모리 영역에 대한 액세스를 제공하는 일 양태의 방법 (500) 을 예시한다. 그 양태의 방법 (500) 은, 제 1 운영 시스템 (OS) 커널을 갖는 애플리케이션 프로세서 및 제 2 OS 커널을 갖는 보조 프로세서에 의해 이동 컴퓨팅 디바이스에서 수행될 수도 있다. 블록 (502) 에서, 애플리케이션 프로세서는 보조 프로세서와의 어드레스 협상을 (예를 들어, 제 1 OS 커널에 대한 시스템 호출을 통해) 요청할 수도 있다. 이것은, 제 2 프로세싱 코어에서 제 2 프로세스 (P2) 와의 어드레스 협상을 요청하는 제 1 OS 커널에 대한 시스템 호출을 이슈하는 애플리케이션 프로세서에서의 제 1 프로세스 (P1) 에 의해 달성될 수도 있다.
블록 (504) 에서, 애플리케이션 프로세서는 어드레스 협상을 요청하는 것에 응답하여 제 1 프로세스 (P1) 의 어드레스 맵을 수신/획득할 수도 있다. 일 양태에서, 제 1 프로세스 (P1) 의 어드레스 맵은 보조 프로세서에 있는 어드레스 협상 핸들러 스레드에 의해 보조 프로세서에서 수신될 수도 있다. 블록 (506) 에서, 애플리케이션 프로세서는 획득된 어드레스 맵을 제 2 프로세싱 코어에 전송할 수도 있다. 블록 (508) 에서, 애플리케이션 프로세서는 보조 프로세서로부터 응답을 대기할 수도 있거나 및/또는 다른 프로세싱 태스크들을 수행할 수도 있다.
블록 (510) 에서, 보조 프로세서는 애플리케이션 프로세서로부터 제 1 프로세스 (P1) 의 어드레스 맵을 수신할 수도 있다. 블록 (512) 에서, 보조 프로세서는, 시스템 호출을 제 2 OS 커널에 이슈하는 것에 의해서와 같이 제 2 프로세스 (P2) 의 어드레스 맵을 요청 및 획득할 수도 있다. 블록 (514) 에서, 보조 프로세서는, 제 1 및 제 2 프로세스들 (P1 및 P2) 의 어드레스 맵들이 임의의 매칭 가상 어드레스들 또는 교차들을 포함하는지 여부를 결정하기 위하여 어드레스 매칭 루틴/프로시저를 실행/수행할 수도 있다. 이것은, 어드레스들을 소팅 및 비교하는 것에 의해 또는 당업계에 알려져 있는 임의의 알려진 어드레스 매칭 알고리즘을 통해 달성될 수도 있다.
결정 블록 (516) 에서, 보조 프로세서는 어드레스 매칭 루틴이 임의의 매칭 어드레스들 또는 교차들을 식별했는지 여부를 결정할 수도 있다. 보조 프로세서가 제 1 및 제 2 프로세스들 (P1 및 P2) 의 어드레스 맵들이 매칭 어드레스 또는 교차들을 포함하지 않는다고 결정하는 경우 (즉, 결정 블록 (516) = "아니오"), 블록 (524) 에서, 보조 프로세서는 종래 솔루션들을 이용하여 제 2 프로세스 (P2) 에 대한 공유 메모리 영역의 물리적 페이지들을 맵핑할 수도 있다.
보조 프로세서가 제 1 및 제 2 프로세스들 (P1 및 P2) 의 어드레스 맵들이 매칭 어드레스 또는 교차들을 포함한다고 결정하는 경우 (즉, 결정 블록 (516) = "예"), 보조 프로세서는 블록 (518) 에서 매칭 가상 어드레스들을 공통 가상 어드레스들로서, 이들을 제 2 OS 커널에 공유 메모리 영역의 속성으로서 저장하는 것에 의해, 저장할 수도 있다. 즉, 각각의 프로세스의 논리적 어드레스 공간은 메모리의 맵핑된 영역들을 포함할 수도 있고, 각각의 맵핑된 메모리 영역은, 쓰기 보호를 제어하는 것 및 메모리가 공유가능한지 여부를 결정하기 위한 것과 같은 다양한 속성들을 포함할 수도 있다. 보조 프로세서는, 블록 (518) 에서, 공유 메모리 영역의 이들 속성들 중의 하나로서 매칭 가상 어드레스들을 저장할 수도 있다. 블록 (520) 에서, 보조 프로세서는 제 2 프로세스 (P2) 에 대한 공통 어드레스들에서 공유 메모리 영역의 물리적 페이지들을 맵핑할 수도 있다. 블록 (522) 에서, 보조 프로세서는 공통 가상 어드레스들을 애플리케이션 프로세서에 전송할 수도 있다.
결정 블록 (516) 에서, 애플리케이션 프로세서는 공통 가상 어드레스가 보조 어드레스로부터 수신되었는지 여부를 결정하기 위하여 통신 포트 또는 소켓을 폴링 (polling) 할 수도 있다. 애플리케이션 프로세서는 공통 가상 어드레스가 수신되지 않았고 충분한 시간 양이 경과했다고 결정하는 경우 (즉, 결정 블록 (526) = "아니오"), 블록 (532) 에서, 애플리케이션 프로세서는 종래 솔루션들을 이용하여 제 1 프로세스 (P1) 에 대한 공유 메모리 영역의 물리적 페이지들을 맵핑할 수도 있다.
애플리케이션 프로세서는 공통 가상 어드레스가 수신되었다고 결정하는 경우에 (즉, 결정 블록 (526) = "예"), 애플리케이션 프로세서는 블록 (528) 에서 제 1 OS 커널 내부의 공유 메모리 영역의 속성으로서 공통 가상 어드레스를 저장할 수도 있다. 블록 (530) 에서, 애플리케이션 프로세서는 제 1 프로세스 (P1) 에 대한 공통 어드레스들에서 공유 메모리 영역의 물리적 페이지들을 맵핑할 수도 있다.
도 5b 는 보조 프로세서 (예를 들어, DSP) 에 범용 소프트웨어 애플리케이션의 부분들을 오프로딩하는 일 양태의 방법 (550) 을 예시한다. 방법 (550) 의 동작들은 멀티프로세서 컴퓨팅 디바이스에서 애플리케이션 프로세서에 의해 수행될 수도 있다.
블록 (552) 에서, 애플리케이션 프로세서는 범용 소프트웨어 애플리케이션을 분석하여 애플리케이션 프로세서에서 그의 실행 동안 이동 디바이스에서 수행될 것이 요구되는 동작들을 식별할 수도 있다. 블록 (554) 에서, 애플리케이션 프로세서는 식별된 동작들에 기초하여 세그먼트들로 소프트웨어 애플리케이션을 파티셔닝할 수도 있다. 블록 (556) 에서, 애플리케이션 프로세서는 범용 소프트웨어 애플리케이션의 세그먼트가 보조 프로세서에서 수행될 수 있다는 것을 결정할 수도 있다. 블록 (558) 에서, 애플리케이션 프로세서는, 세그먼트를, 보조 프로세서에서의 실행에 적합한 코드로 컨버팅, 변환 또는 컴파일할 수도 있다. 블록 (560) 에서, 애플리케이션 프로세서는, 생성된 코드를, 애플리케이션 프로세서 및 보조 프로세서 양자 모두에 액세스가능한 공유 메모리 영역에 저장할 수도 있다. 블록 (562) 에서, 애플리케이션 프로세서는 보조 프로세서로 하여금 공유 메모리 영역으로부터 코드를 취출하고 코드를 실행하게 할 수도 있다. 일 양태에서, 이것은, 링크된 리스트의 헤더 또는 가상 메모리 어드레스를 보조 프로세서에 전송하는 것에 의해서와 같이, 애플리케이션 프로세서가 보조 프로세서에 메모리 참조를 전달하는 것에 의해, 달성될 수도 있다.
다양한 실시형태들은 다양한 컴퓨팅 디바이스들 상에 구현될 수도 있는데, 그의 예들이 도 6 내지 도 8에 예시되어 있다. 도 6은, 내부 메모리 (602) 에 연결된 멀티코어 프로세서 (601), 디스플레이 (604) (예를 들어, 터치 스크린 디스플레이), 및 스피커 (606) 를 포함하는 스마트폰 형태의 이동 컴퓨팅 디바이스를 예시한다. 추가적으로, 스마트폰 (600) 은 전자기 방사선을 전송 및 수신하기 위한 안테나 (608) 를 포함할 수도 있고, 그 안테나 (608) 는 멀티코어 프로세서 (601) 에 연결된 무선 데이터 링크 및/또는 모뎀 또는 셀룰러 전화 트랜시버 (610) 에 접속될 수도 있다. 또한, 스마트폰 (600) 은 통상적으로 사용자 입력들을 수신하기 위한 메뉴 선택 버튼 또는 로커 스위치 (rocker switch; 612) 를 포함한다.
멀티코어 프로세서 (601) 는, 위에 설명되어 있고 도 1 에 예시된 것들과 유사한 회로 및 구조들을 포함할 수도 있고, 도 2 및 도 3에 예시된 논리 또는 기능적 컴포넌트들 중의 어느 것 또는 전부를 포함할 수도 있다. 모뎀 (601) 은 또한, 다수의 프로세싱 코어들을 포함할 수도 있고, 무선 주파수 신호들을 수신 및 송신하기 위한 안테나 (608) 에 연결될 수도 있다.
통상적인 스마트폰 (600) 은 또한, 사운드 인코딩/디코딩 (CODEC) 회로 (614) 를 포함하고, 이는 마이크로폰으로부터 수신된 사운드를 무선 송신에 적합한 데이터 패킷들로 디지털화하고 수신된 사운드 데이터 패킷들을 디코딩하여, 사운드를 생성하기 위하여 스피커에 제공되는 아날로그 신호들을 생성한다. 또한, 멀티 코어 프로세서 (601), 무선 트랜시버 (610) 및 CODEC (614) 중의 하나 이상은 디지털 신호 프로세서 (DSP) 회로 (별도로 도시되지 않음) 를 포함할 수도 있다.
통상적인 이동 컴퓨팅 디바이스들은, 일 예의 개인용 랩톱 컴퓨터 (700) 를 예시하는 도 7에 예시된 컴포넌트들을 공통적으로 갖는다. 그러한 개인용 컴퓨터 (700) 는 일반적으로, 휘발성 메모리 (702) 및 대용량 비휘발성 메모리, 이를테면 디스크 드라이브 (704) 에 연결된 멀티 코어 프로세서 (701) 를 포함한다. 컴퓨터 (700) 는 또한, 프로세서 (701) 에 연결된 컴팩트 디스크 (CD) 및/또는 DVD 드라이브 (708) 를 포함할 수도 있다. 컴퓨터 디바이스 (700) 는 또한, 프로세서 (701) 을 네트워크에 연결하기 위한 네트워크 접속 회로와 같은, 외부 메모리 디바이스들을 수용하거나 또는 데이터 접속들을 확립하기 위해 프로세서 (701) 에 연결된 다수의 커넥터 포트들을 포함할 수도 있다. 컴퓨팅 디바이스 (700) 는 전자기 방사를 전송 및 수신하기 위한 라디오/안테나 (710) 를 가질 수도 있고, 그 라디오/안테나 (710) 는 프로세서 (701) 에 연결된 무선 데이터 링크에 접속된다. 컴퓨터 (700) 는, 컴퓨터 업계에 잘 알려져 있는 바처럼, 키보드 (718), 포인팅 마우스 패드 (720) 및 디스플레이 (722) 를 더 포함할 수도 있다.
다양한 양태들은 또한, 도 8에 예시된 서버 (800) 와 같은 다양한 상업적으로 이용가능한 서버 디바이스들 중 임의의 것 상에서 구현될 수도 있다. 그러한 서버 (800) 는 통상적으로, 다수의 프로세서 시스템들을 포함하고 이들 중 하나 이상은 멀티 코어 프로세서 (801) 일 수도 있거나 또는 이를 포함할 수도 있다. 프로세서 (801) 는 휘발성 메모리 (802) 및 대용량 비휘발성 메모리, 이를테면 디스크 드라이브 (803) 에 연결될 수도 있다. 서버 (800) 은 또한, 프로세서 (801) 에 연결된 플로피 디스크 드라이브, 컴팩트 디스크 (CD) 또는 DVD 디스크 드라이브 (804) 를 포함할 수도 있다. 서버 (800) 는, 또한 다른 브로드캐스트 시스템 컴퓨터들 및 서버들에 연결되는 로컬 영역 네트워크와 같은 네트워크 (808) 와의 데이터 접속들을 확립하기 위해 프로세서 (801) 에 연결되는 네트워크 액세스 포트들 (806) 를 포함할 수도 있다.
프로세서들 (601, 701, 801) 은 임의의 프로그램가능 멀티코어 멀티프로세서, 마이크로컴퓨터 또는 다중 프로세서 칩들일 수도 있는데, 이들은 여기에서 설명한 다양한 양태들의 기능들 및 동작들을 포함하는, 다양한 기능들을 수행하기 위한 소프트웨어 명령들 (애플리케이션들) 에 의해 구성될 수 있다. 무선 통신 기능들에 전용인 하나의 프로세서 및 다른 애플리케이션들을 실행하는 것에 전용인 하나의 프로세서와 같은 다수의 프로세서들이 제공될 수도 있다. 통상적으로, 소프트웨어 애플리케이션들은 액세스되고 프로세서 (601, 701, 801) 로 로딩되기 전에 내부 메모리 (602, 702, 802) 에 저장될 수도 있다. 일부 이동 컴퓨팅 디바이스들에서, 추가 메모리 칩들 (예를 들어, 보안 데이터 (SD) 카드) 가 이동 디바이스 내에 플러그되고 프로세서 (601, 701, 801) 에 연결될 수도 있다. 내부 메모리 (602, 702, 802) 는 휘발성 또는 비휘발성 메모리, 이를테면 플래시 메모리, 또는 양자의 혼합일 수도 있다. 이 설명을 위하여, 메모리에 대한 일반적인 언급은, 내부 메모리 (602, 702, 802), 이동 디바이스에 플러그되는 리무버블 메모리, 및 프로세서 (601, 701, 801) 자체 내부의 메모리를 포함한, 프로세서들 (601, 701, 801) 에 의해 액세스가능한 모든 메모리를 지칭한다.
도 1을 참조하여 위에서 논의된 것들과 같은 멀티프로세서 하드웨어 설계들은, 동일한 패키지 내부에, 종종 동일한 실리콘 조각 (piece of silicon) 상에 상이한 기능들의 다수의 프로세싱 코어들을 포함할 수도 있다. 대칭적인 멀티프로세싱 하드웨어는, 단일 공유 주 메모리에 접속되고 단일 운영 시스템에 의해 제어되는 2개 이상의 동일한 프로세서들을 포함한다. 비대칭적 또는 "느슨하게 연결된 (loosely-coupled)" 멀티프로세싱 하드웨어는, 독립적인 운영 시스템 및 하드웨어 기술 언어 또는 명령어 세트 아키텍처에 의해 각각 제어될 수도 있고, 하나 이상의 공유 메모리들/리소스들에 접속되는 2개 이상의 이종 프로세서들/코어들을 포함할 수도 있다.
다양한 양태들의 동작들을 수행하기 위한 프로그램가능 프로세서 상의 실행을 위한 컴퓨터 프로그램 코드 또는 "코드" 는 C, C++, C#, 스몰토크, 자바, 자바스크립트, 비주얼 베이직, 구조화 질의어 (예를 들어, 트랜잭트-SQL), 펄 (Perl) 과 같은 하이 레벨 프로그래밍 언어 또는 다양한 다른 프로그래밍 언어들에서 쓰여질 수도 있다. 본원에 사용된 컴퓨터 판독가능 저장 매체 상에 저장된 프로그램 코드 또는 프로그램들은, 프로세서에 의해 실행가능한 포맷을 갖는 기계어 코드 (이를테면 오브젝트 코드) 를 나타낸다.
많은 이동 컴퓨팅 디바이스 운영 시스템 커널들은 (비특권 코드가 실행되는) 사용자 공간 및 (특권 코드가 실행되는) 커널 공간으로 편성된다. 이러한 분리는, Android® 및 다른 일반 공중 라이선스 (GPL) 환경들에서 특히 중요한데, 여기서 커널 공간의 일부인 코드가 GPL 허가되야 하는 한편, 사용자 공간에서 실행되는 코드는 GPL 허가될 필요가 없다. 명시적으로 다르게 언급되지 않는 한, 여기서 논의된 다양한 소프트웨어 컴포넌트들/모듈들은 커널 공간 또는 사용자 공간 중 어느 일방에서 구현될 수도 있다는 것이 이해되야 한다.
본원에 사용된, 용어 "컴포넌트", "모듈", "시스템", "서비스", "엔진", "리스너 (listener)", "매니저" 등은, 특정 동작들 또는 기능들을 수행하도록 구성되는, 하드웨어, 펌웨어, 하드웨어와 소프트웨어의 조합, 소프트웨어, 또는 실행 소프트웨어 등과 같은 컴퓨터 관련 엔티티를 포함하도록 의도되지만, 이들에 한정되지 않는다. 예를 들면, 컴포넌트는 프로세서 상에서 실행되는 프로세스, 프로세서, 오브젝트, 실행 파일 (executable), 실행 스레드, 프로그램 및/또는 컴퓨터일 수도 있지만 이들에 한정되지는 않는다. 예시로서, 컴퓨팅 디바이스 상에서 실행되는 애플리케이션 및 컴퓨팅 디바이스는 양자 모두, 컴포넌트로 지칭될 수도 있다. 하나 이상의 컴포넌트들은 프로세스 및/또는 실행 스레드 내에 상주할 수도 있고 컴포넌트는 하나의 프로세서 또는 코어 상에 로컬화될 수 있거나 및/또는 2개 이상의 프로세서들 또는 코어들 사이에 분포될 수도 있다. 또한, 이들 컴포넌트들은, 저장된 다양한 명령들 및/또는 데이터 구조들을 갖는 다양한 비일시적 컴퓨터 판독가능 매체로부터 실행될 수도 있다. 컴포넌트들은, 로컬 및/또는 원격 프로세스들, 기능 또는 프로시저 호출, 전자 신호, 데이터 패킷, 메모리 읽기/쓰기, 및 다른 알려진 컴퓨터, 프로세서, 및/또는 프로세스 관련 통신 방법론에 의해 통신할 수도 있다.
다수의 상이한 타입의 메모리들 및 메모리 기술들이 향후 이용가능하거나 또는 고려되는데, 이들 전부 다양한 양태들에 사용하기 적합하다. 그러한 메모리 기술들/타입들은 상 변화 메모리 (PRAM), 동적 랜덤 액세스 메모리 (DRAM), 정적 랜덤 액세스 메모리 (SRAM), 비휘발성 랜덤 액세스 메모리 (NVRAM), 의사스태틱 랜덤 액세스 메모리 (PSRAM), 더블 데이터 레이트 동기 동적 랜덤 액세스 메모리 (DDR SDRAM), 및 당업계에 알려져 있는 다른 랜덤 액세스 메모리 (RAM) 및 읽기 전용 메모리 (ROM) 기술들을 포함한다. DDR SDRAM 메모리는, 더블 데이터 레이트 (DDR) 타입 1 동기 동적 랜덤 액세스 메모리 (SDRAM) 메모리, DDR 타입 2 SDRAM 메모리, DDR 타입 3 SDRAM 메모리, 또는 DDR 타입 4 SDRAM 메모리일 수도 있다. 위에 언급된 메모리 기술들의 각각은, 예를 들어, 컴퓨터 또는 다른 디지털 전자 디바이스에서의 또는 이에 의한 사용을 위해 명령, 프로그램, 제어 신호 및/또는 데이터를 저장하는데 적합한 엘리먼트들을 포함한다. 개개의 타입의 메모리, 인터페이스, 표준 또는 메모리 기술에 관한 기술용어 및/또는 기술적 상세들에 대한 임의의 언급은 단지 예시를 위한 것일 뿐이고, 청구항 문언에서 특별히 기재되지 않는 한 청구항들의 범위를 특정 메모리 시스템 또는 기술로 한정하도록 의도된 것은 아니다.
이전의 방법 설명들 및 프로세스 흐름도들은 단지 예시적인 예로서 제공되었고 다양한 양태들의 블록들이 제시된 순서대로 수행되야 하는 것을 요하거나 의미하도록 의도된 것은 아니다. 이전의 양태들에서의 블록들의 순서는 임의의 순서로 수행될 수도 있음을 당업자는 인식할 것이다. "그후", "그 다음", "다음" 등과 같은 단어들은 블록들의 순서를 한정하도록 의도된 것이 아니다: 이들 단어들은 단순히 방법들의 설명을 통하여 독자를 안내하기 위해 사용되었다. 또한, 예를 들어, 관사 "a", "an" 또는 "the" 를 사용하는, 단수형의 청구항 엘리먼트에 대한 임의의 언급은 엘리먼트를 단수형으로 제한하는 것으로 해석되지 않아야 한다.
여기에 개시된 양태들과 관련하여 설명된 다양한 예시적인 논리 블록, 모듈, 회로, 및 알고리즘 블록들이 전자 하드웨어, 컴퓨터 소프트웨어, 또는 이 양자의 조합으로 구현될 수도 있다. 하드웨어와 소프트웨어의 이러한 상호교환가능성을 명확히 예시하기 위해, 다양한 예시적인 컴포넌트, 블록, 모듈, 회로, 및 단계가 일반적으로 그들의 기능의 관점에서 위에서 설명되었다. 그러한 기능이 하드웨어 또는 소프트웨어로 구현될지 여부는, 전체 시스템에 부과된 설계 제약 및 특정 응용에 달려 있다. 당업자는 설명된 기능을 각각의 특정 애플리케이션에 대해 다른 방식으로 구현할 수도 있지만, 이러한 구현 결정이 본 발명의 범위로부터 이탈을 야기하는 것으로 해석되지는 않아야 한다.
여기에 개시된 양태들과 관련하여 설명된 다양한 예시적인 로직, 논리 블록, 모듈, 및 회로를 구현하기 위하여 사용된 하드웨어는 범용 프로세서, 디지털 신호 프로세서 (DSP), 주문형 집적 회로 (ASIC), 필드 프로그래밍가능 게이트 어레이 (FPGA) 또는 다른 프로그래밍가능 로직 디바이스, 이산 게이트 또는 트랜지스터 로직, 이산 하드웨어 컴포넌트 또는 여기에 설명된 기능을 수행하도록 설계된 이들의 임의의 조합으로 구현 또는 수행될 수도 있다. 범용 프로세서는 마이크로프로세서일 수도 있지만, 다르게는, 프로세서는 임의의 종래의 프로세서, 제어기, 마이크로제어기, 또는 상태 머신일 수도 있다. 또한, 프로세서는 컴퓨팅 디바이스들의 조합, 예를 들어, DSP 와 마이크로프로세서의 조합, 복수의 마이크로프로세서, DSP 코어와 결합한 하나 이상의 마이크로프로세서, 또는 임의의 다른 이러한 구성으로서 구현될 수도 있다. 다르게는, 일부 단계들 또는 방법들은 소정 기능에 특수한 회로에 의해 수행될 수도 있다.
하나 이상의 예시적 양태에서, 설명된 기능은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현되면, 기능들은 비일시적 컴퓨터 판독가능 매체 또는 비일시적 프로세서 판독가능 매체 상의 하나 이상의 명령들 또는 코드로서 저장될 수도 있다. 여기에 개시된 방법 또는 알고리즘의 단계들은, 비일시적 컴퓨터 판독가능 또는 프로세서 판독가능 저장 매체에 상주할 수도 있는 프로세서 실행가능 소프트웨어 모듈에서 구체화될 수도 있다. 비일시적 컴퓨터 판독가능 또는 프로세서 판독가능 저장 매체는, 컴퓨터 또는 프로세서에 의해 액세스될 수도 있는 임의의 저장 매체일 수도 있다. 비한정적 예로서, 이러한 비일시적 컴퓨터 판독가능 또는 프로세서 판독가능 매체는 RAM, ROM, EEPROM, FLASH 메모리, CD-ROM 또는 다른 광학 디스크 저장, 자성 디스크 저장 또는 다른 자성 저장 디바이스들, 또는 명령 또는 데이터 구조의 형태의 원하는 프로그램 코드를 저장하는데 사용될 수도 있고 컴퓨터에 의해 액세스될 수도 있는 임의의 다른 매체를 포함할 수도 있다. 여기에 설명된 바와 같이, 디스크 (disk) 및 디스크 (disc) 는 콤팩트 디스크 (CD), 레이저 디스크, 광 디스크, DVD (digital versatile disc), 플로피 디스크 및 블루레이 디스크를 포함하며, 여기서, 디스크 (disk) 는 일반적으로 데이터를 자기적으로 재생하지만, 디스크 (disc) 는 레이저를 이용하여 광학적으로 데이터를 재생한다. 또한, 상기의 조합은 비일시적 컴퓨터 판독가능 및 프로세서 판독가능 매체의 범위 내에 포함된다. 또한, 방법 또는 알고리즘의 동작들은, 컴퓨터 프로그램 제품에 포함될 수도 있는, 비일시적 프로세서 판독가능 매체 및/또는 컴퓨터 판독가능 매체 상에 하나 또는 임의의 조합 또는 세트의 코드들 및/또는 명령들로서 상주할 수도 있다.
개시된 양태들의 전술된 설명은 당업자가 본 발명을 제조 또는 사용하는 것을 가능하게 하기 위하여 제공된다. 이들 예시적 양태들에 대한 다양한 변형은 당업자에게는 용이하게 명백할 것이며, 여기에 정의된 일반적인 원리는 본 발명의 사상 또는 범위를 벗어남이 없이 다른 양태들에 적용될 수도 있다. 따라서, 본 발명은 여기에 나타낸 양태들에 한정되도록 의도된 것이 아니라, 여기에 개시된 원리 및 신규한 특징과 다음의 청구항들에 부합하는 최광의 범위가 허여되야 한다.

Claims (14)

  1. 제 1 프로세싱 코어 및 제 2 프로세싱 코어를 갖는 멀티프로세서 컴퓨팅 디바이스의 공유 메모리 영역에 대한 액세스를 제공하는 방법으로서,
    상기 제 1 프로세싱 코어에서의 제 1 프로세스에 의해, 상기 제 2 프로세싱 코어에서의 제 2 프로세스와 어드레스 협상을 요청하는 단계;
    상기 제 1 프로세싱 코어에서의 상기 제 1 프로세스의 제 1 어드레스 맵을 획득하는 단계;
    상기 제 2 프로세싱 코어에 상기 제 1 어드레스 맵을 전송하는 단계;
    상기 제 1 어드레스 맵을 전송하는 것에 응답하여 상기 제 1 프로세싱 코어에서의 공통 가상 어드레스를 수신하는 단계;
    상기 제 1 프로세싱 코어의 제 1 운영 시스템 커널의 내부에 상기 공유 메모리 영역의 제 1 속성으로서 상기 공통 가상 어드레스를 저장하는 단계; 및
    상기 제 1 프로세스의 상기 공통 가상 어드레스에서 상기 공유 메모리 영역을 맵핑하는 단계
    를 포함하는, 공유 메모리 영역에 대한 액세스를 제공하는 방법.
  2. 제 1 항에 있어서,
    상기 제 2 프로세싱 코어에서 상기 제 1 어드레스 맵을 수신하는 단계;
    상기 제 2 프로세싱 코어에서의 상기 제 2 프로세스의 제 2 어드레스 맵을 획득하는 단계;
    상기 제 1 어드레스 맵 및 상기 제 2 어드레스 맵이 매칭 가상 어드레스를 포함하는지 여부를 결정하기 위하여 상기 제 2 프로세싱 코어에서의 어드레스 매칭 동작들을 수행하는 단계;
    상기 공통 가상 어드레스로서 그리고 상기 제 2 프로세싱 코어의 제 2 운영 시스템 커널의 상기 공유 메모리 영역의 제 2 속성으로서 상기 매칭 가상 어드레스를 저장하는 단계,
    상기 제 1 프로세싱 코어에 상기 공통 가상 어드레스를 전송하는 단계; 및
    상기 제 2 프로세싱 코어에서의 상기 제 2 프로세스를 위한 상기 공통 가상 어드레스에서 상기 공유 메모리 영역의 물리적 페이지들을 맵핑하는 단계를 더 포함하는, 공유 메모리 영역에 대한 액세스를 제공하는 방법.
  3. 제 2 항에 있어서,
    상기 제 1 프로세싱 코어 및 상기 제 2 프로세싱 코어의 각각은 하드웨어 메모리 관리 유닛 (MMU) 을 포함하는, 공유 메모리 영역에 대한 액세스를 제공하는 방법.
  4. 제 2 항에 있어서,
    상기 제 2 프로세싱 코어에서 상기 제 1 어드레스 맵을 수신하는 단계는 상기 제 2 프로세싱 코어의 어드레스 협상 핸들러 스레드에서 상기 제 1 어드레스 맵을 수신하는 단계를 포함하는, 공유 메모리 영역에 대한 액세스를 제공하는 방법.
  5. 멀티프로세서 컴퓨팅 디바이스로서,
    제 1 프로세싱 코어에서의 제 1 프로세스에 의해, 제 2 프로세싱 코어에서의 제 2 프로세스와 어드레스 협상을 요청하는 수단;
    상기 제 1 프로세싱 코어에서의 상기 제 1 프로세스의 제 1 어드레스 맵을 획득하는 수단;
    상기 제 2 프로세싱 코어에 상기 제 1 어드레스 맵을 전송하는 수단;
    상기 제 1 어드레스 맵을 전송하는 것에 응답하여 상기 제 1 프로세싱 코어에서의 공통 가상 어드레스를 수신하는 수단;
    상기 제 1 프로세싱 코어의 제 1 운영 시스템 커널의 내부에 공유 메모리 영역의 제 1 속성으로서 상기 공통 가상 어드레스를 저장하는 수단; 및
    상기 제 1 프로세스의 상기 공통 가상 어드레스에서 상기 공유 메모리 영역을 맵핑하는 수단
    을 포함하는, 멀티프로세서 컴퓨팅 디바이스.
  6. 제 5 항에 있어서,
    상기 제 2 프로세싱 코어에서 상기 제 1 어드레스 맵을 수신하는 수단;
    상기 제 2 프로세싱 코어에서의 상기 제 2 프로세스의 제 2 어드레스 맵을 획득하는 수단;
    상기 제 1 어드레스 맵 및 상기 제 2 어드레스 맵이 매칭 가상 어드레스를 포함하는지 여부를 결정하기 위하여 상기 제 2 프로세싱 코어에서의 어드레스 매칭 동작들을 수행하는 수단;
    상기 공통 가상 어드레스로서 그리고 상기 제 2 프로세싱 코어의 제 2 운영 시스템 커널의 상기 공유 메모리 영역의 제 2 속성으로서 상기 매칭 가상 어드레스를 저장하는 수단,
    상기 제 1 프로세싱 코어에 상기 공통 가상 어드레스를 전송하는 수단; 및
    상기 제 2 프로세싱 코어에서의 상기 제 2 프로세스를 위한 상기 공통 가상 어드레스에서 상기 공유 메모리 영역의 물리적 페이지들을 맵핑하는 수단을 더 포함하는, 멀티프로세서 컴퓨팅 디바이스.
  7. 제 6 항에 있어서,
    상기 제 2 프로세싱 코어에서 상기 제 1 어드레스 맵을 수신하는 수단은 상기 제 2 프로세싱 코어의 어드레스 협상 핸들러 스레드에서 상기 제 1 어드레스 맵을 수신하는 수단을 포함하는, 멀티프로세서 컴퓨팅 디바이스.
  8. 멀티프로세서 컴퓨팅 디바이스로서,
    제 1 프로세싱 코어;
    제 2 프로세싱 코어; 및
    상기 제 1 프로세싱 코어 및 상기 제 2 프로세싱 코어에 연결되는 공유 메모리 영역을 포함하고,
    상기 제 1 프로세싱 코어는
    제 1 프로세스에 의해, 상기 제 2 프로세싱 코어에서의 제 2 프로세스와 어드레스 협상을 요청하는 것;
    상기 제 1 프로세스의 제 1 어드레스 맵을 획득하는 것;
    상기 제 2 프로세싱 코어에 상기 제 1 어드레스 맵을 전송하는 것;
    상기 제 2 프로세싱 코어에 상기 제 1 어드레스 맵을 전송하는 것에 응답하여 공통 가상 어드레스를 수신하는 것;
    제 1 운영 시스템 커널의 내부에 상기 공유 메모리 영역의 제 1 속성으로서 상기 공통 가상 어드레스를 저장하는 것; 및
    상기 제 1 프로세스의 상기 공통 가상 어드레스에서 상기 공유 메모리 영역을 맵핑하는 것
    을 포함하는 동작들을 수행하기 위한 프로세서 실행가능 명령들로 구성되는, 멀티프로세서 컴퓨팅 디바이스.
  9. 제 8 항에 있어서,
    상기 제 2 프로세싱 코어는
    상기 제 1 어드레스 맵을 수신하는 것;
    상기 제 2 프로세스의 제 2 어드레스 맵을 획득하는 것;
    상기 제 1 어드레스 맵 및 상기 제 2 어드레스 맵이 매칭 가상 어드레스를 포함하는지 여부를 결정하기 위하여 어드레스 매칭 동작들을 수행하는 것;
    상기 공통 가상 어드레스로서 그리고 제 2 운영 시스템 커널의 상기 공유 메모리 영역의 제 2 속성으로서 상기 매칭 가상 어드레스를 저장하는 것;
    상기 제 1 프로세싱 코어에 상기 공통 가상 어드레스를 전송하는 것; 및
    상기 제 2 프로세스를 위한 상기 공통 가상 어드레스에서 상기 공유 메모리 영역의 물리적 페이지들을 맵핑하는 것
    을 포함하는 동작들을 수행하기 위한 프로세서 실행가능 명령들로 구성되는, 멀티프로세서 컴퓨팅 디바이스.
  10. 제 9 항에 있어서,
    상기 제 1 프로세싱 코어 및 상기 제 2 프로세싱 코어의 각각은 하드웨어 메모리 관리 유닛 (MMU) 을 포함하는, 멀티프로세서 컴퓨팅 디바이스.
  11. 제 9 항에 있어서,
    상기 제 2 프로세싱 코어는, 상기 제 1 어드레스 맵을 수신하는 것이 어드레스 협상 핸들러 스레드에서 상기 제 1 어드레스 맵을 수신하는 것을 포함하도록 동작들을 수행하기 위한 프로세서 실행가능한 명령들로 구성되는, 멀티프로세서 컴퓨팅 디바이스.
  12. 저장된 프로세서 실행가능 소프트웨어 명령들을 갖는 비일시적 컴퓨터 판독가능 저장 매체로서,
    상기 저장된 프로세서 실행가능 소프트웨어 명령들은 멀티프로세서 컴퓨팅 디바이스의 제 1 프로세싱 코어로 하여금,
    제 1 프로세스에 의해, 상기 멀티프로세서 컴퓨팅 디바이스의 제 2 프로세싱 코어에서의 제 2 프로세스와 어드레스 협상을 요청하는 것;
    상기 제 1 프로세스의 제 1 어드레스 맵을 획득하는 것;
    상기 제 2 프로세싱 코어에 상기 제 1 어드레스 맵을 전송하는 것;
    상기 제 2 프로세싱 코어에 상기 제 1 어드레스 맵을 전송하는 것에 응답하여 공통 가상 어드레스를 수신하는 것;
    제 1 운영 시스템 커널의 내부에 공유 메모리 영역의 제 1 속성으로서 상기 공통 가상 어드레스를 저장하는 것, 및
    상기 제 1 프로세스의 상기 공통 가상 어드레스에서 상기 공유 메모리 영역을 맵핑하는 것
    을 포함하는 동작들을 수행하게 하도록 구성된, 비일시적 컴퓨터 판독가능 저장 매체.
  13. 제 12 항에 있어서,
    상기 저장된 프로세서 실행가능 소프트웨어 명령들은, 상기 멀티프로세서 컴퓨팅 디바이스의 상기 제 2 프로세싱 코어로 하여금,
    상기 제 1 어드레스 맵을 수신하는 것;
    상기 제 2 프로세스의 제 2 어드레스 맵을 획득하는 것;
    상기 제 1 어드레스 맵 및 상기 제 2 어드레스 맵이 매칭 가상 어드레스를 포함하는지 여부를 결정하기 위하여 어드레스 매칭 동작들을 수행하는 것;
    상기 공통 가상 어드레스로서 그리고 제 2 운영 시스템 커널의 상기 공유 메모리 영역의 제 2 속성으로서 상기 매칭 가상 어드레스를 저장하는 것;
    상기 제 1 프로세싱 코어에 상기 공통 가상 어드레스를 전송하는 것; 및
    상기 제 2 프로세스를 위한 상기 공통 가상 어드레스에서 상기 공유 메모리 영역의 물리적 페이지들을 맵핑하는 것
    을 포함하는 동작들을 수행하게 하도록 구성되는, 비일시적 컴퓨터 판독가능 저장 매체.
  14. 제 13 항에 있어서,
    상기 저장된 프로세서 실행가능 소프트웨어 명령들은, 상기 멀티프로세서 컴퓨팅 디바이스의 상기 제 2 프로세싱 코어로 하여금, 상기 제 1 어드레스 맵을 수신하는 것이 어드레스 협상 핸들러 스레드에서 상기 제 1 어드레스 맵을 수신하는 것을 포함하도록 동작들을 수행하게 하도록 구성되는, 비일시적 컴퓨터 판독가능 저장 매체.
KR1020167003798A 2013-08-07 2014-08-05 이종 멀티프로세서 시스템에서 공유 메모리 영역들을 위한 동적 어드레스 협상 KR101722379B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/961,085 2013-08-07
US13/961,085 US9311011B2 (en) 2013-08-07 2013-08-07 Dynamic address negotiation for shared memory regions in heterogenous multiprocessor systems
PCT/US2014/049764 WO2015021037A1 (en) 2013-08-07 2014-08-05 Dynamic address negotiation for shared memory regions in heterogeneous muliprocessor systems

Publications (2)

Publication Number Publication Date
KR20160040214A true KR20160040214A (ko) 2016-04-12
KR101722379B1 KR101722379B1 (ko) 2017-04-05

Family

ID=51390221

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167003798A KR101722379B1 (ko) 2013-08-07 2014-08-05 이종 멀티프로세서 시스템에서 공유 메모리 영역들을 위한 동적 어드레스 협상

Country Status (7)

Country Link
US (1) US9311011B2 (ko)
EP (1) EP3030967B1 (ko)
JP (1) JP6110038B2 (ko)
KR (1) KR101722379B1 (ko)
CN (1) CN105431827B (ko)
TW (1) TWI587209B (ko)
WO (1) WO2015021037A1 (ko)

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9236064B2 (en) 2012-02-15 2016-01-12 Microsoft Technology Licensing, Llc Sample rate converter with automatic anti-aliasing filter
US9678872B2 (en) * 2015-01-16 2017-06-13 Oracle International Corporation Memory paging for processors using physical addresses
US10157160B2 (en) 2015-06-04 2018-12-18 Intel Corporation Handling a partition reset in a multi-root system
US9990327B2 (en) 2015-06-04 2018-06-05 Intel Corporation Providing multiple roots in a semiconductor device
US9665415B2 (en) * 2015-09-26 2017-05-30 Intel Corporation Low-latency internode communication
US10095517B2 (en) * 2015-12-22 2018-10-09 Intel Corporation Apparatus and method for retrieving elements from a linked structure
US10628192B2 (en) * 2015-12-24 2020-04-21 Intel Corporation Scalable techniques for data transfer between virtual machines
CN105573852B (zh) * 2016-02-03 2018-11-30 南京大学 一种虚拟地址隔离环境下超高速数据对象通信的方法
KR102650828B1 (ko) * 2016-05-20 2024-03-26 삼성전자주식회사 둘 이상의 프로세서에 의해 공유되는 메모리 장치 및 상기 메모리 장치를 포함하는 시스템
US10380342B2 (en) * 2016-07-29 2019-08-13 Qualcomm Incorporated Kernel-based detection of target application functionality using virtual address mapping
US10296074B2 (en) * 2016-08-12 2019-05-21 Qualcomm Incorporated Fine-grained power optimization for heterogeneous parallel constructs
US10152243B2 (en) * 2016-09-15 2018-12-11 Qualcomm Incorporated Managing data flow in heterogeneous computing
US10248565B2 (en) * 2016-09-19 2019-04-02 Qualcomm Incorporated Hybrid input/output coherent write
CN106791152B (zh) 2016-12-30 2019-08-27 Oppo广东移动通信有限公司 一种通信方法及移动终端
CN106681847B (zh) * 2016-12-30 2020-08-11 深圳Tcl数字技术有限公司 基于Android系统的消息处理方法及装置
US10776144B2 (en) * 2017-01-08 2020-09-15 International Business Machines Corporation Address space management with respect to a coherent accelerator processor interface architecture
US10496292B2 (en) * 2017-01-19 2019-12-03 International Business Machines Corporation Saving/restoring guarded storage controls in a virtualized environment
KR101857907B1 (ko) 2017-02-15 2018-05-14 포항공과대학교 산학협력단 IoT 디바이스를 위한 이기종 분산 공유 메모리
US10289330B2 (en) 2017-03-30 2019-05-14 Western Digital Technologies, Inc. Allocating shared memory among multiple tasks in a multiprocessor environment
CN109426571B (zh) * 2017-08-28 2022-05-13 阿里巴巴集团控股有限公司 函数调用和数据访问的方法、系统、存储介质、处理器和装置
CN109460373B (zh) * 2017-09-06 2022-08-26 阿里巴巴集团控股有限公司 一种数据共享方法、终端设备和存储介质
CN109964208B (zh) * 2017-10-25 2021-07-09 华为技术有限公司 一种双活存储系统和地址分配方法
CN109840225B (zh) * 2017-11-27 2023-06-09 中国航空工业集团公司西安航空计算技术研究所 一种异构双核处理器访问eFPGA的控制电路
US10924508B2 (en) * 2017-12-21 2021-02-16 Sonicwall Inc. Providing access to data in a secure communication
US10853134B2 (en) * 2018-04-18 2020-12-01 Xilinx, Inc. Software defined multi-domain creation and isolation for a heterogeneous System-on-Chip
US11275587B2 (en) 2018-05-02 2022-03-15 Micron Technology, Inc. Static identifications in object-based memory access
CN109240602B (zh) * 2018-08-06 2021-01-15 联想(北京)有限公司 数据存取方法
US11347653B2 (en) * 2018-08-31 2022-05-31 Nyriad, Inc. Persistent storage device management
US11544069B2 (en) * 2018-10-25 2023-01-03 Micron Technology, Inc. Universal pointers for data exchange in a computer system having independent processors
US10296451B1 (en) * 2018-11-01 2019-05-21 EMC IP Holding Company LLC Content addressable storage system utilizing content-based and address-based mappings
EP3693856A1 (de) * 2019-02-11 2020-08-12 Siemens Aktiengesellschaft Verfahren zum übertragen einer nachricht in einem rechensystem sowie rechensystem
KR20200109973A (ko) * 2019-03-15 2020-09-23 에스케이하이닉스 주식회사 메모리 공유를 위한 메모리 시스템 및 그것을 포함하는 데이터 처리 시스템
US11748178B2 (en) * 2019-04-02 2023-09-05 Intel Corporation Scalable and accelerated function as a service calling architecture
US11169930B2 (en) 2019-05-28 2021-11-09 Micron Technology, Inc. Fine grain data migration to or from borrowed memory
US11061819B2 (en) 2019-05-28 2021-07-13 Micron Technology, Inc. Distributed computing based on memory as a service
US11100007B2 (en) 2019-05-28 2021-08-24 Micron Technology, Inc. Memory management unit (MMU) for accessing borrowed memory
US11334387B2 (en) 2019-05-28 2022-05-17 Micron Technology, Inc. Throttle memory as a service based on connectivity bandwidth
US11256624B2 (en) 2019-05-28 2022-02-22 Micron Technology, Inc. Intelligent content migration with borrowed memory
US11438414B2 (en) * 2019-05-28 2022-09-06 Micron Technology, Inc. Inter operating system memory services over communication network connections
CN110569066B (zh) * 2019-07-26 2023-08-01 深圳震有科技股份有限公司 多核系统共用代码段的控制方法、智能终端及存储介质
US11119931B1 (en) * 2019-09-18 2021-09-14 Facebook Technologies, Llc Data pipeline for microkernel operating system
CN110650020B (zh) * 2019-09-25 2022-05-10 天津市滨海新区信息技术创新中心 拟态模糊判决方法、装置及系统
CN111190854B (zh) * 2019-12-31 2024-03-26 京信网络系统股份有限公司 通信数据处理方法、装置、设备、系统和存储介质
US11385820B2 (en) * 2020-03-04 2022-07-12 Micron Technology, Inc. Command batching for a memory sub-system
US11474885B2 (en) * 2020-04-07 2022-10-18 Micron Technology, Inc. Method for an internal command of a first processing core with memory sub-system that caching identifiers for access commands
CN112214444A (zh) * 2020-09-24 2021-01-12 深圳云天励飞技术股份有限公司 一种核间通信方法、arm、dsp及终端
CN112230931B (zh) * 2020-10-22 2021-11-02 上海壁仞智能科技有限公司 适用于图形处理器的二次卸载的编译方法、装置和介质
CN115185450A (zh) 2021-04-01 2022-10-14 戴尔产品有限公司 用于迁移、复制和备份的基于阵列的拷贝机制
CN113641404A (zh) * 2021-07-20 2021-11-12 北京百度网讯科技有限公司 程序运行方法、装置、处理器芯片、电子设备和存储介质
CN116033342B (zh) * 2022-05-30 2023-11-24 荣耀终端有限公司 地理围栏的处理方法、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7073173B1 (en) * 2000-12-04 2006-07-04 Microsoft Corporation Code and thread differential addressing via multiplex page maps
US20080114887A1 (en) * 2001-07-06 2008-05-15 Juniper Networks, Inc. Content service aggregation system
US20090164749A1 (en) * 2007-12-19 2009-06-25 Microsoft Corporation Coupled symbiotic operating systems
US20110314238A1 (en) * 2010-06-16 2011-12-22 International Business Machines Corporation Common memory programming

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6601146B2 (en) 1998-06-16 2003-07-29 International Business Machines Corporation Technique for efficiently transferring moderate amounts of data across address space boundary
US7321958B2 (en) * 2003-10-30 2008-01-22 International Business Machines Corporation System and method for sharing memory by heterogeneous processors
US20060070069A1 (en) * 2004-09-30 2006-03-30 International Business Machines Corporation System and method for sharing resources between real-time and virtualizing operating systems
US8255922B1 (en) 2006-01-09 2012-08-28 Oracle America, Inc. Mechanism for enabling multiple processes to share physical memory
US7975260B1 (en) 2006-01-27 2011-07-05 Symantec Corporation Method of direct access and manipulation of debuggee memory from debugger
US7676514B2 (en) * 2006-05-08 2010-03-09 Emc Corporation Distributed maintenance of snapshot copies by a primary processor managing metadata and a secondary processor providing read-write access to a production dataset
US7734890B2 (en) * 2006-10-06 2010-06-08 Okralabs Llc Method and system for using a distributable virtual address space
US8819676B2 (en) 2007-10-30 2014-08-26 Vmware, Inc. Transparent memory-mapped emulation of I/O calls
US8531471B2 (en) 2008-11-13 2013-09-10 Intel Corporation Shared virtual memory
US8566537B2 (en) 2011-03-29 2013-10-22 Intel Corporation Method and apparatus to facilitate shared pointers in a heterogeneous platform

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7073173B1 (en) * 2000-12-04 2006-07-04 Microsoft Corporation Code and thread differential addressing via multiplex page maps
US20080114887A1 (en) * 2001-07-06 2008-05-15 Juniper Networks, Inc. Content service aggregation system
US20090164749A1 (en) * 2007-12-19 2009-06-25 Microsoft Corporation Coupled symbiotic operating systems
US20110314238A1 (en) * 2010-06-16 2011-12-22 International Business Machines Corporation Common memory programming

Also Published As

Publication number Publication date
US9311011B2 (en) 2016-04-12
KR101722379B1 (ko) 2017-04-05
JP6110038B2 (ja) 2017-04-05
EP3030967B1 (en) 2019-11-13
WO2015021037A1 (en) 2015-02-12
TWI587209B (zh) 2017-06-11
CN105431827A (zh) 2016-03-23
TW201519080A (zh) 2015-05-16
EP3030967A1 (en) 2016-06-15
US20150046661A1 (en) 2015-02-12
JP2016532959A (ja) 2016-10-20
CN105431827B (zh) 2017-08-22

Similar Documents

Publication Publication Date Title
KR101722379B1 (ko) 이종 멀티프로세서 시스템에서 공유 메모리 영역들을 위한 동적 어드레스 협상
US9047090B2 (en) Methods, systems and devices for hybrid memory management
US20160019168A1 (en) On-Demand Shareability Conversion In A Heterogeneous Shared Virtual Memory
US8578129B2 (en) Infrastructure support for accelerated processing device memory paging without operating system integration
US10860332B2 (en) Multicore framework for use in pre-boot environment of a system-on-chip
TWI721060B (zh) 用於輸入/輸出裝置之可縮放虛擬化的位址轉譯設備、方法及系統
US8943584B2 (en) Centralized device virtualization layer for heterogeneous processing units
US11526440B2 (en) Providing multiple memory modes for a processor including internal memory
JP2015135696A (ja) ローカル物理メモリとリモート物理メモリとの間で共有されるバーチャルメモリのためのハードウェアサポートの提供
KR20230041593A (ko) 프로그래밍가능한 인터리브 입도를 갖는 cxl 타입-2 디바이스들을 위한 확장가능한 주소 디코딩 체계
US11960420B2 (en) Direct memory control operations on memory data structures
US11221962B2 (en) Unified address translation
US10127064B2 (en) Read-only VM function chaining for secure hypervisor access
US11080188B1 (en) Method to ensure forward progress of a processor in the presence of persistent external cache/TLB maintenance requests

Legal Events

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