KR102140061B1 - 상이한 명령 세트 아키텍쳐들을 갖는 프로세서들 상에서의 운영 시스템의 실행 - Google Patents

상이한 명령 세트 아키텍쳐들을 갖는 프로세서들 상에서의 운영 시스템의 실행 Download PDF

Info

Publication number
KR102140061B1
KR102140061B1 KR1020157025501A KR20157025501A KR102140061B1 KR 102140061 B1 KR102140061 B1 KR 102140061B1 KR 1020157025501 A KR1020157025501 A KR 1020157025501A KR 20157025501 A KR20157025501 A KR 20157025501A KR 102140061 B1 KR102140061 B1 KR 102140061B1
Authority
KR
South Korea
Prior art keywords
processor
task
instruction set
operating system
instructions
Prior art date
Application number
KR1020157025501A
Other languages
English (en)
Other versions
KR20150122178A (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 KR20150122178A publication Critical patent/KR20150122178A/ko
Application granted granted Critical
Publication of KR102140061B1 publication Critical patent/KR102140061B1/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • 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/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45537Provision of facilities of other operating environments, e.g. WINE
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45554Instruction set architectures of guest OS and hypervisor or native processor differ, e.g. Bochs or VirtualPC on PowerPC MacOS
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • 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/5083Techniques for rebalancing the load in a distributed system
    • G06F9/5088Techniques for rebalancing the load in a distributed system involving task migration
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Stored Programmes (AREA)

Abstract

장치는, 제 1 명령 세트를 갖는 제 1 프로세서, 및 제 1 명령 세트와 상이한 제 2 명령 세트를 갖는 제 2 프로세서를 포함한다. 장치는, 운영 시스템의 적어도 부분을 저장하는 메모리를 또한 포함한다. 운영 시스템은 제 1 프로세서 및 제 2 프로세서 상에서 동시에 실행가능하다.

Description

상이한 명령 세트 아키텍쳐들을 갖는 프로세서들 상에서의 운영 시스템의 실행{EXECUTING AN OPERATING SYSTEM ON PROCESSORS HAVING DIFFERENT INSTRUCTION SET ARCHITECTURES}
관련 출원들에 대한 상호-참조
[0001] 본 출원은, 2013년 2월 26일자로 출원된 공동 소유의 미국 정규 특허출원 제 13/777,314호를 우선권으로 주장하며, 상기 정규 특허출원의 내용들은 그 전체가 인용에 의해 본 명세서에 명백히 포함된다.
[0002] 본 개시는 일반적으로, 멀티-프로세서 디바이스들에서의 운영 시스템들의 실행에 관한 것이다.
[0003] 기술에서의 발전들은 더 소형이고 더 강력한(powerful) 컴퓨팅 디바이스들을 초래했다. 예를 들어, 소형이고, 경량이며, 사용자에 의해 용이하게 휴대될 수 있는 휴대용 무선 텔레폰들, 개인 휴대 정보 단말(PDA)들, 태블릿 컴퓨터들, 및 페이징(paging) 디바이스들과 같은 무선 컴퓨팅 디바이스들을 포함하는 다양한 휴대용 개인 컴퓨팅 디바이스들이 현재 존재한다. 많은 그러한 컴퓨팅 디바이스들은 그들 내에 포함된 다른 디바이스들을 포함한다. 예를 들어, 무선 텔레폰은 디지털 스틸 카메라(digital still camera), 디지털 비디오 카메라, 디지털 리코더, 및 오디오 파일 플레이어를 또한 포함할 수 있다. 또한, 그러한 컴퓨팅 디바이스들은, 인터넷에 액세스하기 위해 사용될 수 있는 웹 브라우저 애플리케이션 및 스틸 또는 비디오 카메라를 이용하고 그리고 멀티미디어 재생 기능을 제공하는 멀티미디어 애플리케이션들과 같은 소프트웨어 애플리케이션들을 포함하는 실행가능한 명령들을 프로세싱할 수 있다. 따라서, 이들 디바이스들은, 데스크톱 컴퓨터들과 같은 더 큰 디바이스들에 의해 통상적으로 수행되는 기능들을 수행할 수 있다.
[0004] 일부 전자 디바이스들은 다수의 프로세서들을 포함할 수도 있다. 예를 들어, 모바일 폰은 중앙 프로세싱 유닛(CPU)(종종 애플리케이션 프로세서로 지칭됨) 및 디지털 신호 프로세서(DSP)를 포함할 수도 있다. 각각의 프로세서는, 특정한 계산 태스크(task)들을 수행하는데 다른 프로세서(들)보다 더 양호하게 적합할 수도 있다. 예를 들어, 1차 프로세서로서 동작할 수도 있고 모바일 폰 운영 시스템을 실행할 수도 있는 CPU는, 웹 브라우저 및 스프레드시트(spreadsheet) 코드와 같은 "제어 코드"를 실행하는데 있어 더 효율적일 수도 있다. 반면에, DSP는, 신호 프로세싱 및 다른 계산-집약적인(math-intensive) 기능들을 실행하는 경우 CPU보다 더 효율적일 수도 있다.
[0005] 상이한 프로세서들은, 상이한 작업부하(workload)들에 대해 최적화될 수도 있고, 상이한 아키텍쳐들(예를 들어, 명령 세트들)을 가질 수도 있다. 예를 들어, 폰은, 제 1 아키텍쳐에 따라 구현된 CPU 및 제 2 아키텍쳐에 따라 구현된 DSP를 포함할 수도 있다. 상이한 프로세서들이 상이한 아키텍쳐들을 갖기 때문에, 각각의 프로세서는 자신의 고유 운영 시스템을 실행할 수도 있다. 동일한 운영 시스템이 프로세서들 상에서 실행된다 하더라도, 각각의 프로세서는, 자신의 고유 운영 시스템 인스턴스(instance)를 실행하는 별개의 머신으로 기능한다. 아키텍쳐에서의 차이들로 인해, 2개의 운영 시스템 인스턴스들은 데이터 및 오프로드(offload) 프로세싱 태스크들을 서로 공유하지 못할 수도 있다. 부가적으로, 메모리는 공유 풀(shared pool)보다는 각각의 환경으로부터 할당된다.
[0006] 모바일 애플리케이션들이 더 복잡해지는 경우, 특정한 애플리케이션들 또는 그들의 스레드(thread)들은, CPU 실행 또는 DSP 실행에 대해 더 양호하게 적합해질 수도 있다. 그러나, CPU 및 DSP가 상이한 운영 시스템들을 실행하기 때문에, 폰은, 오직 CPU 상에서 또는 오직 DSP 상에서 애플리케이션(및 그들의 각각의 스레드)을 실행하도록 강제될 수도 있다. 결과적으로, 모바일 애플리케이션들은 종래에 CPU들에 대해 개발되었고, DSP들과 같은 다른 이용가능한 프로세서들의 프로세싱 성능들을 레버리징(leverage)하려 시도하지 않는다.
[0007] 개인 컴퓨팅 영역에서, 몇몇 소프트웨어 제공자들은 "유니버셜(universal)" 바이너리(binary)들("패트(fat)" 바이너리들로 또한 지칭됨)을 제공함으로써, 상이한 컴퓨터들에서 상이한 아키텍쳐들의 사용을 어드레싱(address)하려 시도했다. 일반적으로, 유니버셜 바이너리는 다수의 아키텍쳐들 각각에 대한 상이한 버전의 동일한 소프트웨어를 포함한다. 특정한 컴퓨터에서의 유니버셜 바이너리의 설치 또는 실행 동안, 특정한 컴퓨터의 아키텍쳐에 기초하여 적절한 버전의 소프트웨어가 식별되고 설치 또는 실행된다. 그러나, 단일 아키텍쳐만이 각각의 컴퓨터 상에 존재하기 때문에, 유니버셜 바이너리들은, 상이한 아키텍쳐들을 갖는 프로세서들을 사용하여 동일한 소프트웨어 인스턴스를 동시에 실행하기 위한 방식을 제공하지 않는다. 부가적으로, 프로세서들 사이에 공유되어야 할 데이터 구조들을 구현 및 프로세싱하는 것은 어려울 수도 있다.
[0008] 상이한 아키텍쳐들을 갖는 다수의 프로세서들 상에서 소프트웨어(예를 들어, 운영 시스템)의 동일한 인스턴스를 동시에 실행하는 시스템들 및 방법들이 기재된다. 예를 들어, 본 개시에 기초하여, CPU 및 DSP가 상이한 명령 세트 아키텍쳐들을 갖는다 하더라도, 게임의 그래픽들 및 사용자 인터페이스(UI) 스레드들은 모바일 폰의 CPU 상에서 실행될 수도 있지만 게임의 멀티미디어 프로세싱 스레드는 모바일 폰의 DSP 상에서 실행된다. 설명된 기술들에 따르면, CPU 코드 및 DSP코드가, 대칭적 멀티프로세싱(SMP) 머신 상에 있는 것처럼 존재하는 것으로 보일 수도 있다. 따라서, 데이터 구조들 및 통신 프리미티브(primitive)들은 공유될 수도 있고, 이종의(disparate) 아키텍쳐들에 걸친 멀티-스레딩이 이용될 수도 있다.
[0009] 제 1 구현에 따르면, 다수의 프로세서들에 액세스했던 단일 운영 시스템 인스턴스 내에 운영 시스템 기능들(예를 들어, 커널(kernel) 코드)의 다수의 버전들이 제공될 수도 있다. 예를 들어, 운영 시스템은 하나 또는 그 초과의 기능들 각각의 제 1 버전 및 제 2 버전에 액세스했을 수도 있으며, 여기서, 제 1 버전은 CPU의 명령 세트를 사용하여 구현되고, 제 2 버전은 DSP의 명령 세트를 사용하여 구현된다. 기능들의 버전들 둘 모두가 런타임(runtime)에서 이용가능할 것이기 때문에, 애플리케이션 개발자들은 이용가능한 아키텍쳐들 중 하나 또는 그 초과의 아키텍쳐들 상에서의 실행을 위한 애플리케이션들(및 애플리케이션들의 개별적인 스레드들 또는 부분들)을 설계할 기회를 제공받을 수도 있음이 인식될 것이다.
[0010] 부가적으로, 운영 시스템의 스케줄러는, 특정한 코드가 CPU에 의해 실행되도록(또는 실행되어야만 하도록) 의도되었는지 또는 DSP에 의해 의해 실행되도록(또는 실행되어야만 하도록) 의도되었는지를 결정하도록 구성될 수도 있다. 메모리(예를 들어, 가상 및/또는 물리적 어드레스 공간) 및 커널 데이터 구조들은 프로세서들 및 프로세서들 상에서 실행되는 코드들에 의해 공유될 수도 있다. 일 구현에서, 운영 시스템에 대한 DSP 요청은 CPU에 전달될 수도 있고, 그 후, 프로세싱 결과들이 다시 DSP에 전송될 수도 있거나, 그 반대의 경우도 가능하다. 또한, 동일한 태스크(즉, 소프트웨어 스레드)의 상이한 부분들이 상이한 프로세서들에 의해 수행될 수도 있다.
[0011] 제 2 구현에 따르면, DSP 코드는 "원격(remoted)" 운영 시스템 환경을 구동할 수도 있다. DSP에서 발생하는 운영 시스템 이벤트들(예를 들어, 페이지 장애(fault)들, 익셉션(exception)들, 시스템 요청들, 트랩(trap)들 등)은 CPU에 의해 핸들링(handle)될 수도 있다. 따라서, 태스크가 DSP 환경에서 구동하는 것으로 나타난다 하더라도, 운영 시스템 요청들은 CPU 환경에 의해 실제로 핸들링될 수도 있다.
[0012] 특정한 실시예에서, 방법은, 제 1 프로세서(예를 들어, DSP) 상에서 제 1 코드를 실행하는 단계를 포함한다. 방법은 또한, 제 1 코드를 실행하면서 운영 시스템 이벤트를 실행하는 단계를 포함한다. 방법은 추가로, 운영 시스템 이벤트를 실행할 시, 제 1 코드의 실행을 중단하고 제 2 프로세서(예를 들어, CPU) 상에서 제 2 코드의 실행을 개시하는 단계를 포함하며, 제 2 코드는 운영 시스템 이벤트를 핸들링하기 위한 것이다. 방법은, 운영 시스템 이벤트를 핸들링하는 제 2 코드의 실행의 완료 시, 제 2 코드를 중단하고 제 1 프로세서(예를 들어, DSP) 상에서 제 1 코드의 실행을 재개(resume)하는 단계를 포함한다.
[0013] 다른 특정한 실시예에서, 장치는, 제 1 명령 세트를 갖는 제 1 프로세서를 포함한다. 장치는 또한, 제 2 명령 세트를 갖는 제 2 프로세서를 포함하며, 제 2 명령 세트는 제 1 명령 세트와 상이하다. 장치는 추가로, 제 1 프로세서 및 제 2 프로세서 상에서 동시에 실행가능한 운영 시스템의 적어도 부분을 저장하는 메모리를 포함한다.
[0014] 다른 특정한 실시예에서, 방법은, 실행을 위한 태스크를 스케줄링하기 위한 요청을 운영 시스템의 스케줄러에서 수신하는 단계를 포함한다. 운영 시스템은, 제 1 아키텍쳐를 갖는 제 1 프로세서 및 제 2 아키텍쳐를 갖는 제 2 프로세서 상에서 동시에 실행가능하다. 방법은 또한, 태스크가, 제 1 프로세서 상에서 제 1 아키텍쳐를 사용하고 제 2 프로세서 상에서 제 2 아키텍쳐를 사용하는 실행에 대해 이용가능하다고 결정하는 것에 응답하여, 적어도 하나의 선택 기준에 기초하여 제 1 프로세서 상에 태스크를 스케줄링하는 단계를 포함한다. 방법은 추가로, 태스크의 실행 동안, 태스크의 실행을 제 1 프로세서로부터 제 2 프로세서로 스위칭하는 단계를 포함한다.
[0015] 다른 특정한 실시예에서, 장치는, 제 1 명령 세트와 연관된 명령들을 프로세싱하기 위한 제 1 수단을 포함한다. 장치는 또한, 제 2 명령 세트와 연관된 명령들을 프로세싱하기 위한 제 2 수단을 포함한다. 장치는 추가로, 운영 시스템의 적어도 부분을 저장하기 위한 수단을 포함하며, 운영 시스템은, 프로세싱하기 위한 제 1 수단 및 프로세싱하기 위한 제 2 수단 상에서 동시에 실행가능하다.
[0016] 다른 특정한 실시예에서, 비-일시적 컴퓨터-판독가능 매체는 운영 시스템의 단일 인스턴스를 포함한다. 운영 시스템의 단일 인스턴스는, 제 1 프로세서 및 제 2 프로세서를 포함하는 전자 디바이스에서 실행되는 경우, 제 1 프로세서 및 제 2 프로세서 상에서의 운영 시스템의 동시 실행을 야기하는 명령들을 포함한다. 제 1 프로세서는 제 1 명령 세트 아키텍쳐와 연관되고, 제 2 프로세서는, 제 1 명령 세트 아키텍쳐와 상이한 제 2 명령 세트 아키텍쳐와 연관된다.
[0017] 다른 특정한 실시예에서, 장치는, 제 1 명령 세트 아키텍쳐와 연관된 제 1 프로세서 및 제 2 명령 세트 아키텍쳐와 연관된 제 2 프로세서에 액세스가능한 메모리를 포함한다. 메모리는 적어도 하나의 데이터 구조를 저장한다. 데이터 구조는, 제 1 명령 세트 아키텍쳐 상에서 실행하도록 컴파일(compile)된 제 1 기능의 제 1 위치 식별자를 포함한다. 데이터 구조는 또한, 제 2 명령 세트 아키텍쳐 상에서 실행하도록 컴파일된 제 2 기능의 제 2 위치 식별자를 포함한다.
[0018] 기재된 실시예들 중 적어도 하나에 의해 제공되는 일 특정한 이점은, 운영 시스템의 단일 인스턴스 및 운영 시스템과 연관된 애플리케이션들/스레드들을 이종의 아키텍쳐들을 갖는 다수의 프로세서들 상에서 동시에 실행하기 위한 능력이다. 예를 들어, 운영 시스템 코드 및/또는 애플리케이션 코드는 선택 기준들(예를 들어, 어느 프로세서가 최소로 로딩되는지, 어느 프로세서가 그 타입의 코드를 실행하는데 가장 양호하게 적합한지 등)에 기초하여 다수의 이용가능한 프로세서들 중 특정한 프로세서 상에서의 실행에 대해 스케줄링될 수도 있다. 기재된 실시예들 중 적어도 하나에 의해 제공되는 다른 이점은, 개발자를 위한, 제3자 애플리케이션(third party application)들(예를 들어, DSP들)에 대해 종래에 사용되지 않는 프로세서들의 컴퓨팅 성능들을 레버리징할 수 있는 애플리케이션들을 개발하기 위한 능력이다. 다른 양상들에서, 본 개시의 이점들 및 특성들은, 다음의 섹션들, 즉, 도면들의 간단한 설명, 상세한 설명, 및 청구항들을 포함하는 전체 출원을 검토한 이후 명백해질 것이다.
[0019] 도 1은, 상이한 아키텍쳐들을 갖는 다수의 프로세서들 상에서의 운영 시스템의 단일 인스턴스의 실행을 지원하도록 동작가능한 시스템의 특정한 실시예를 예시하기 위한 도면이다.
[0020] 도 2는, 도 1의 운영 시스템 데이터 구조의 특정한 실시예를 예시하기 위한 도면이다.
[0021] 도 3은, 상이한 아키텍쳐들을 갖는 다수의 프로세서들 상에서 운영 시스템의 단일 인스턴스를 실행하는 방법의 특정한 실시예를 예시하기 위한 흐름도이다.
[0022] 도 4는, 상이한 아키텍쳐들을 갖는 다수의 프로세서들 상에서 운영 시스템의 단일 인스턴스를 실행하는 방법의 다른 특정한 실시예를 예시하기 위한 흐름도이다.
[0023] 도 5는, 상이한 아키텍쳐들을 갖는 다수의 프로세서들 상에서의 운영 시스템의 단일 인스턴스의 실행을 지원하도록 동작가능한 컴포넌트들을 포함하는 무선 디바이스의 블록도이다.
[0024] 도 1은, 상이한 아키텍쳐들(대안적으로, "명령 세트 아키텍쳐(ISA)들 또는 "명령 세트들"로 지칭됨)을 갖는 다수의 프로세서들 상에서의 운영 시스템의 단일 인스턴스의 동시 실행을 지원하도록 동작가능한 시스템(100)의 예시적인 실시예의 도면이다. 예를 들어, 도 1의 시스템(100)에서, 운영 시스템(O/S)(104) 및 그와 연관된 컴포넌트들/애플리케이션들은, 제 1 ISA를 갖는 제 1 프로세서(110) 및 제 2 ISA를 갖는 제 2 프로세서(112) 상에서 동시에 실행될 수도 있다. 2개의 프로세서들이 도 1에 도시되지만, 이는 단지 예시를 위해서임이 유의되어야 한다. 본 명세서에 설명된 기술들은, 2개 초과의 프로세서들을 포함하는 시스템들에서 사용될 수도 있다.
[0025] 특정한 실시예에서, 프로세서들(110, 112) 중 적어도 하나는, 중앙 프로세싱 유닛(CPU) 명령 세트와 연관된 명령들을 실행하도록 구성되는 CPU와 같은 CPU일 수도 있다. 예를 들어, CPU는 다수의 실행 코어들(예를 들어, 듀얼-코어 CPU, 쿼드-코어 CPU 등)을 가질 수도 있다. 멀티-프로세서 전자 디바이스들(예를 들어, 모바일 폰들과 같은 모바일 컴퓨팅 디바이스들)에서, CPU는, 입력/출력(I/O) 코드, 사용자 인터페이스(U/I) 코드, 브라우저 코드, 스프레드시트 코드 등과 같은 제어 코드를 실행하는 것을 담당하고 그리고/또는 그를 실행하기에 더 양호하게-적합할 수도 있다. 예를 들어, U/I 태스크들(또는 스레드들) 및 멀티미디어 프로세싱 태스크들(또는 스레드들) 둘 모두를 포함하는 게임을 모바일 폰이 실행하는 경우, CPU는, 멀티미디어 프로세싱 태스크들을 실행하는 경우보다 U/I 태스크들을 실행하는 경우 더 효과적이게 수행할 수도 있다.
[0026] 특정한 실시예에서, 프로세서들(110, 112) 중 적어도 하나는, 디지털 신호 프로세서(DSP) 명령 세트와 연관된 명령들을 실행하도록 구성되는 프로세서와 같은 DSP일 수도 있다. 예를 들어, DSP는, 다수의 하드웨어 스레드들을 가질 수도 있고, 동적 인터리빙된(interleaved) 멀티스레딩 및 실-시간 프로세싱을 지원할 수도 있다. 멀티-프로세서 전자 디바이스들(예를 들어, 모바일 폰들)에서, DSP는, 무선 신호 프로세싱 기능들 및 계산-집약적인 코드를 실행하는 것을 담당하고 그리고/또는 그들을 실행하기에 더 양호하게-적합할 수도 있다. 예를 들어, U/I 태스크들(또는 스레드들) 및 멀티미디어 프로세싱 태스크들(또는 스레드들) 둘 모두를 포함하는 게임을 모바일 폰이 실행하는 경우, DSP는, U/I 태스크들을 실행하는 경우보다 멀티미디어 프로세싱 태스크들을 실행하는 경우 더 효과적이게 수행할 수도 있다.
[0027] 다양한 프로세서 결합들이 설명된 기술들과 함께 사용될 수도 있음이 유의되어야 한다. 일 예에서, 시스템(100)은, 동일한 타입이지만 상이한 명령 세트들을 갖는 다수의 프로세서들을 포함할 수도 있다. 예시를 위해, 프로세서들(110, 112) 둘 모두는 CPU들일 수도 있지만 CPU들의 ISA들은 상이할 수도 있다. 대안적으로, 프로세서들(110, 112) 둘 모두는 DSP들일 수도 있지만 DSP들의 ISA들은 상이할 수도 있다. 다른 예에서, 프로세서들(110, 112) 중 하나는 CPU일 수도 있고 프로세서들(110, 112) 중 다른 하나는 DSP일 수도 있다. CPU들 및 DSP들 이외의 프로세서들이 시스템(100)에 또한 존재할 수도 있다. 다른 타입들 또는 프로세서들은, 네트워크 프로세싱 유닛(NPU)들, 그래픽 프로세싱 유닛(GPU)들 등을 포함할 수도 있지만 이에 제한되지 않는다. 본 명세서에서의 설명이 CPU-타입 아키텍쳐들 및 DSP-타입 아키텍쳐들을 지칭하지만, 이것은 단지 예를 위한 것임이 또한 유의되어야 한다. 다양한 아키텍쳐들/명령 세트들이 설명된 기술들과 함께 사용될 수도 있다. 상이한 아키텍쳐들은, 상이한 기능들, 상이한 연산코드(opcode)들, 공통 기능들에 대한 상이한 타입들 및 개수들의 인수(argument)들 등을 지원할 수도 있다.
[0028] 시스템(100)은 데이터 저장 성능을 포함할 수도 있다. 데이터 저장부는, 휘발성 메모리(예를 들어, 랜덤 액세스 메모리(RAM), 레지스터-기반 메모리, 또는 캐시-기반(cached-based) 메모리) 및/또는 비-휘발성 메모리(예를 들어, 하드 디스크들)를 포함할 수도 있다. 도 1의 실시예에서, 시스템(100)은 메모리(116)를 포함한다. 본 명세서에서 추가적으로 설명되는 바와 같이, 메모리(116)는, 프로세서들(110, 112)에 걸쳐 운영 시스템(104)의 동시 실행을 지원하기 위해 적어도 하나의 운영 시스템 데이터 구조(118)를 저장하는 "코히어런트(coherent)" 메모리일 수도 있다. 예를 들어, 운영 시스템 데이터 구조(118)는, 도 2를 참조하여 추가로 설명되는 바와 같이, 록(lock)들, 스케줄링 큐(queue)들, 및 기능 포인터들의 테이블을 포함할 수도 있다.
[0029] 운영 시스템(104)은 일반적으로, 시스템(100)에서 시스템 레벨(예를 들어, 커널 레벨) 기능들을 수행하도록 동작가능할 수도 있다. 예를 들어, 운영 시스템(104)은, 블로킹(blocking)/언블로킹(unblocking)을 수행할 수도 있고, 하드웨어 리소스들(예를 들어, 프로세서들(110, 112) 및 메모리(116))에 대한 추상화(abstraction)들 및 멀티플렉싱된(multiplexed) 액세스를 제공할 수도 있다. 시스템 레벨 기능을 제공하는 것에 부가하여, 운영 시스템(104)은 하나 또는 그 초과의 애플리케이션들(예를 들어, 사용자 모드 애플리케이션들)의 실행을 지원할 수도 있다. 예를 들어, 애플리케이션(102)은, 사용자 또는 관리자에 의해 시스템(100)에 설치된 제3자 애플리케이션일 수도 있다.
[0030] 운영 시스템(104)은, 운영 시스템 기능들을 수행하기 위한 하나 또는 그 초과의 모듈들 또는 로직 블록들을 포함할 수도 있다. 예를 들어, 운영 시스템(104)은 스케줄러(106) 및 이벤트 핸들러(107)를 포함할 수도 있다. 스케줄러(106)는 프로세서들(110, 112)에서의 태스크들의 실행을 스케줄링하도록 구성될 수도 있고, 이벤트 핸들러(107)는 운영 시스템 이벤트들을 핸들링하도록(예를 들어, 응답하도록) 구성될 수도 있다. 특정한 실시예에서, 운영 시스템(104)은, 프로세서들(110, 112) 중 어느 하나가, 프로세서들(110, 112) 중 다른 것에 의해 사용되고 있거나 또는 그에 의존할 수도 있는 운영 시스템 상태(예를 들어, 메모리(116) 내의 데이터)를 변경하는 것을 방지하는 세이프가드(safeguard) 또는 제어부를 포함할 수도 있다.
[0031] 특정한 태스크(114)를 실행하기 위한 요청을 (예를 들어, 운영 시스템(104) 또는 애플리케이션(102)으로부터) 수신하는 것에 응답하여, 스케줄러(106)는, 특정한 태스크(114)가 제 1 프로세서(110)의 제 1 명령 세트, 제 2 프로세서(112)의 제 2 명령 세트, 또는 둘 모두를 지원하는지를(예를 들어, 이를 사용하는 실행에 대해 이용가능한지를) 결정할 수도 있다. 특정한 실시예에서, 태스크가 특정한 명령 세트를 지원하는지를 결정하는 것은, 특정한 명령 세트의 명령들을 사용하여 표현되는 태스크(및 임의의 연관된 서브-루틴들, 운영 시스템 호(call)들 등)에 대응하는 코드에 시스템(100)이 액세스했는지를 결정하는 것을 포함한다. 요청된 태스크(114)가 명령 세트들 중 하나만을 지원한다고 스케줄러(106)가 결정하는 경우, 스케줄러(106)는, 대응하는 지원되는 프로세서(110 또는 112) 상에서의 실행에 대해, 요청된 태스크(114)를 스케줄링할 수도 있다.
[0032] 요청된 태스크(114)가 다수의 명령 세트들/다수의 프로세서들을 지원한다고 스케줄러(106)가 결정하는 경우, 스케줄러(106)는, 실행을 위한 태스크(114)를 스케줄링할 특정한 프로세서를 선택할 수도 있다. 태스크(114)를 스케줄링할 특정한 프로세서(110, 112)를 선택할 시, 스케줄러(106)는, 대응하는 명령 세트를 사용하여 태스크를 시작하기 위해 시스템 호를 제공할 수도 있다.
[0033] 특정한 실시예에서, 스케줄러(106)는, 특정한 프로세서를 선택할 시 선택 기준들(108)을 사용할 수도 있다. 선택 기준들(108)은 최소로 로딩된 프로세서의 식별을 포함할 수도 있다. 예를 들어, 스케줄러(106)는, 로드 밸런싱을 달성하기 위해, 태스크(114)를 스케줄링할 프로세서들(110, 112) 중 최소로 로딩된 프로세서를 선택할 수도 있다. 대안적으로 또는 부가적으로, 선택 기준들(108)은 태스크의 타입을 포함할 수도 있다. 예를 들어, 스케줄러(106)는, CPU 상에 U/I 태스크를 스케줄링할 수도 있고, DSP 상에 계산-집약적인 태스크들을 스케줄링할 수도 있다. 대안적으로 또는 부가적으로, 선택 기준들(108)은, 태스크(114)와 연관된 가장 낮은 전력 사용의 식별을 포함할 수도 있다. 예를 들어, 스케줄러(106)는, 태스크(114)를 실행하는 동안 최소량의 전력을 소모할 프로세서(110 또는 112) 상에 태스크(114)를 스케줄링할 수도 있으며, 그에 의해, 시스템(100)에서의 전체 전력 소모를 감소시킨다. 다른 선택 기준들이 스케줄러(106)에 의해 또한 사용될 수도 있다.
[0034] 특정한 실시예에서, 태스크(114)가 제 1 프로세서(110)의 제 1 명령 세트 및 제 2 프로세서(112)의 제 2 명령 세트 둘 모두를 지원하는 경우, 스케줄러(106)는, 프로세서들(110, 112) 중 하나로부터 나머지 하나로 태스크의 실행을 스위칭하도록 구성될 수도 있다. 또한, 그러한 동적 스위칭은, 태스크(114)의 실행 동안, 그리고 시스템의 더 높은 레벨 컴포넌트들(예를 들어, 애플리케이션(102))에 관하여 투명하게(transparently) 수행될 수도 있다. 예를 들어, 태스크(114)는, (120)에 도시된 바와 같이, 제 1 프로세서(110)로부터 제 2 프로세서(112)로 (예를 들어, 시스템 호를 사용하여) "이동될(migrated)" 수도 있거나, 그 반대도 마찬가지이다. 그러한 이동은, 동일한 코히어런트 메모리(116) 및 그 메모리 상에 저장된 운영 시스템 데이터 구조(들)(118)에 액세스했던 제 1 프로세서(110) 및 제 2 프로세서(112)에 의해 적어도 부분적으로 가능해질 수도 있다. 다수의 명령 세트들을 지원하는 태스크들을 동적으로 이동시키기 위한 능력은, 오직 하나의 명령 세트를 지원하는 태스크들을 위해 프로세싱 리소스들을 자유롭게 둘 수 있음이 인식될 것이다.
[0035] 전술한 것은 태스크의 스케줄링 및 이동을 설명하지만, 서브-태스크들의 스케줄링 및 이동이 도 1의 시스템(100)에서 또한 수행될 수도 있음이 유의되어야 한다. 예를 들어, 게임의 I/O 태스크/스레드, 멀티미디어 프로세싱 태스크/스레드, 및 그래픽 태스크/스레드는, 각각 CPU, DSP, 및 GPU에서 동시에 스케줄링 및 실행될 수도 있다. 적절한 프로세서들 상에 태스크들을 스케줄링하는 것은, 도 1의 시스템(100)에서의 효율성을 증가시키고 전력 소모를 감소시킬 수도 있다. 따라서, 시스템(100)이 모바일 폰과 같이 배터리로 전력공급되는 디바이스 내에 통합되는 경우, 시스템(100)은, 증가된 성능 및 배터리 수명을 초래할 수도 있다. 예를 들어, 사용자는, 게임을 단독으로 CPU 상에서만 구동했을 경우보다 모바일 폰을 충전할 필요 없이 더 오래 자신의 모바일 폰 상에서 게임을 플레이하는 것이 가능할 수도 있다.
[0036] 동작 동안, 운영 시스템(104), 운영 시스템(104)의 태스크들(예를 들어, 태스크(114)), 및/또는 운영 시스템(104)과 연관된 애플리케이션들(예를 들어, 애플리케이션(102))은, 프로세서들(110, 112)이 상이한 아키텍쳐들을 갖는다 하더라도 프로세서들(110, 112) 중 하나 또는 그 초과, 즉 둘 모두 상에서 실행될 수도 있다. 예를 들어, 도 1의 시스템(100)에서의 동작의 제 1 실시예에 따르면, 프로세서들(110, 112) 중 하나는 "1차" 프로세서일 수도 있고, 다른 프로세서는 "2차" 프로세서일 수도 있다. 그러한 실시예에서, 2차 프로세서로부터 운영 시스템으로의 요청은 1차 프로세서에 전달될 수도 있고, 프로세싱 결과들이 다시 2차 프로세서로 전송될 수도 있다.
[0037] 예시를 위해, 1차 프로세서는 CPU일 수도 있고, 2차 프로세서는 DSP일 수도 있다. DSP는 "원격" 운영 시스템 환경을 실행할 수도 있다. 제 1 코드(예를 들어, DSP-특정 코드)의 실행 동안, DSP는 운영 시스템 이벤트를 검출 및/또는 실행할 수도 있다. 운영 시스템 이벤트는, 실행의 흐름을 운영 시스템의 사용자 모드로부터 운영 시스템의 커널 모드로 스위칭하게 하는 이벤트일 수도 있다. 운영 시스템 이벤트들의 예들은, 페이지 장애들, 트랩들, 시스템 장애들, (예를 들어, 뮤텍스(mutex)들 또는 세마포르(semaphore) 등과 같은 동기화 오브젝트들과 연관된) 시스템 요청들, 하드웨어 에러들(예를 들어, 버스 에러들), 어드레스 에러들, 허용 위반(permission violation)들 등을 포함하지만 이에 제한되지 않는다. DSP는 운영 시스템 이벤트들을 핸들링하기 위해 CPU에 의존할 수도 있다. 예를 들어, 운영 시스템 이벤트를 실행할 시, DSP는, 제 1 코드의 실행을 중단할 수도 있고, CPU 상에서 제 2 코드의 실행을 개시할 수도 있으며, 여기서, 제 2 코드는 운영 시스템 이벤트를 핸들링하도록 구성된다. 특정한 실시예에서, CPU에서 코드를 핸들링하는 이벤트의 개시는, 스케줄러(106)에 의해 프로세서간(inter-processor) 메시징을 사용하거나, 코히어런트 메모리(116)를 사용하거나, 애플리케이션 프로그래밍 인터페이스(API)를 사용하거나 또는 이들의 임의의 결합을 사용하여 수행된다. 따라서, 프로세서들(110, 112) 각각은, 코드를 실행하는 동안 및/또는 중단된 동안 프로세서들(110, 112) 중 다른 하나와 통신하도록 구성될 수도 있다. CPU에서 코드를 핸들링하는 이벤트는, 운영 시스템 이벤트를 핸들링할 수도 있고, 임의의 실행 결과들을 DSP에 제공할 수도 있다. 이벤트 핸들링의 완료 시, 이벤트 핸들러는 CPU에서 중단될 수도 있고, DSP 코드는 DSP에서 재개될 수도 있다.
[0038] 도 1의 시스템(100)의 동작의 제 2 실시예에 따르면, 운영 시스템(104)는 다수의 버전들의 운영 시스템 루틴들, 모듈들, 및 기능들을 포함할 수도 있다. 예를 들어, 제 1 프로세서(110)가 CPU이고 제 2 프로세서(112)가 DSP인 경우, 운영 시스템(104)의 단일 인스턴스는 하나 또는 그 초과의 루틴들, 모듈들, 및 기능들의 적어도 2개의 버전들, 즉, CPU의 ISA의 명령들로 표현되는 제 1 버전 및 DSP의 ISA의 명령들로 표현되는 제 2 버전을 포함할 수도 있다. 그러한 실시예에서, 스케줄러(106)는, 운영 시스템(104)이 어느 하나의 프로세서를 사용하여 애플리케이션(102)에 의해 행해진 운영 시스템 호들에 응답할 능력을 갖기 때문에, 프로세서들(110 또는 112) 중 어느 하나 상에서 애플리케이션(102)(또는 그 애플리케이션(102)의 컴포넌트들)을 자유롭게 스케줄링할 수도 있다.
[0039] 따라서, 도 1의 시스템(100)은, 상이한 아키텍쳐들을 갖는 다수의 프로세서들 상에서, 운영 시스템(104), 그의 컴포넌트들, 및 그와 연관된 애플리케이션들의 동시 실행을 가능하게 할 수도 있다. 이것은, 도 1의 시스템(100)에서의 효율성을 증가시키고 전력 소모를 감소시킬 수도 있다. 도 1의 시스템(100)은 또한, 애플리케이션 개발자들이, 제3자 애플리케이션들(예를 들어, DSP들)에 대해 종래에 사용되지 않은 프로세서들의 성능들을 레버리징하는 애플리케이션들을 개발하는 것을 가능하게 할 수도 있다. 이것은, 애플리케이션 개발자들에 대해, 상이한 아키텍쳐들을 갖는 프로세서들에 걸친 동적 애플리케이션 스케줄링 및 데이터 공유를 지원하지 않는 시스템들보다 도 1의 시스템(100)을 더 매력적이게 한다.
[0040] 도 2는, 도 1의 운영 시스템 데이터 구조(118)에 저장될 수도 있는 기능 테이블들의 특정한 실시예들을 예시하기 위한 도면이며, 일반적으로 (200)으로 지정된다. 도 1의 운영 시스템 데이터 구조(118)를 참조하여 설명된 바와 같이, 도 2의 테이블들은, 다수의 명령 세트들에서 이용가능한 기능의 "정확한" 버전(즉, 기능을 실행하려 시도하는 프로세서에 대한 명령 세트에 매칭하는 기능의 버전)을 식별하기 위해 사용될 수도 있다.
[0041] 공유 데이터 구조들을 갖는 공통 운영 시스템을 구동하는 것에서의 하나의 어려운 점은, 기능들의 어드레스들을 포함하는 데이터 구조들을 프로세싱하는 것일 수도 있다. 예를 들어, 제 1 명령 세트를 갖는 제 1 프로세서 및 제 2 명령 세트를 갖는 제 2 프로세서가 공통 운영 시스템을 갖는 경우, 제 1 명령 세트 및 제 2 명령 세트 둘 모두에서 구현되는 기능들이 이용가능할 필요가 있을 수도 있다. 그러나, 기능들은 상이한 어드레스들에서 나타날 수도 있다. 따라서, 기능의 어드레스를 저장하는 데이터 구조들(예를 들어, "기능 포인터")은, 특정한 프로세서/명령 세트에 대해 "정확한" 기능을 지칭할 수 있을 필요가 있으며, 그것의 어드레스는 프로세서의 명령 세트에 의존하여 상이할 수도 있다.
[0042] 설명된 기술들에 따르면, 그러한 데이터 구조들을 프로세싱하는 것에서의 어려운 점은 인디렉션(indirection)의 레벨을 사용함으로써 감소될 수도 있다. 예를 들어, 메모리는, 상이한 명령 세트 아키텍쳐들을 갖는 다수의 프로세서들에 액세스가능한 공유 데이터 구조(들)를 저장할 수도 있다. 데이터 구조(들)는, 제 1 명령 세트 아키텍쳐 상에서 실행하도록 컴파일된 제 1 기능의 제 1 위치 식별자 및 제 2 명령 세트 아키텍쳐 상에서 실행하도록 컴파일된 제 2 기능의 제 2 위치 식별자를 포함할 수도 있다. 위치 식별자들은, 본 명세서에 추가로 설명되는 바와 같이, 명령들, 오프셋들, 가상 어드레스들 등일 수도 있다. 또한, 제 1 기능 및 제 2 기능은, 동일한 운영 시스템 기능의 상이한 버전들일 수도 있다. 인디렉션의 레벨을 도입함으로써, 설명된 기술들은 유리하게, 다수의 아키텍쳐들 상에서의 동일한 고-레벨(예를 들어, 애플리케이션-레벨) 코드의 실행을 가능하게 할 수도 있다. 예를 들어, 코드는 운영 시스템 기능 "X"에 대한 호를 포함할 수도 있다. 제 1 아키텍쳐와 연관된 제 1 프로세서 상에서 실행되는 경우, "X"에 대한 호는, 제 1 아키텍쳐에 대해 특정하고 메모리 내의 제 1 물리적 어드레스에 로케이팅되는 "X"의 제 1 구현에 맵핑될 수도 있다. 제 2 아키텍쳐와 연관된 제 2 프로세서 상에서 실행되는 경우, 동일한 호 "X"는, 제 2 아키텍쳐에 대해 특정하고 메모리 내의 제 2 물리적 어드레스에 로케이팅되는 "X"의 제 2 구현에 맵핑될 수도 있다.
[0043] 그러한 "아키텍쳐-독립적" 코드 실행을 구현하는 3개의 실시예들이 본 명세서세 설명된다. 도 2에서, 3개의 운영 시스템 기능들, 즉 "OS 스케줄" 기능, 및 "OS 판독" 기능, 및 "OS 기입" 기능이 도시된다. 기능들 각각의 제 1 버전("proc1") 및 기능들 각각의 제 2 버전("proc2")은 메모리(202) 내의 상이한 위치들에서 이용가능하다.
[0044] 제 1 실시예(도 2에 "옵션 1"로 지정됨)에서, 테이블들(210, 212)은 "정확한" 기능으로 실행을 재지향(redirect)시키는 짧은(예를 들어, 일정한 길이) 명령 시퀀스들을 포함할 수도 있다. 제 1 테이블(210)은 제 1 프로세서 상의 특정한 가상 어드레스에 맵핑될 수도 있고, 제 2 테이블(212)은 제 2 프로세서 상의 동일한 가상 어드레스에 맵핑될 수도 있다. 그러나, 테이블들(210, 212)은, 프로세서 아키텍쳐에 의존하여 상이한 물리적 어드레스들로 유도(예를 들어, 브랜치(branch) 또는 점프(jump))할 수도 있다. 각각의 프로세서에 대한 가상 어드레스의 물리적 어드레스로의 변환은, "정확한" 테이블이 동일한 가상 어드레스에 맵핑되게 하는 것을 가능하게 할 수도 있다. 기능에 대한 인디렉트(indirect) 참조들은 실제 기능보다는 테이블 엔트리를 지시한다.
[0045] 예를 들어, 도 2에 도시된 바와 같이, 프로세서 1은 "브랜치" 명령을 지원할 수도 있고, 프로세서 2는 "점프" 명령을 지원할 수도 있다. 프로세서 1에 대한 테이블(210)은, "OS 스케줄" 기능, "OS 판독" 기능, 및 "OS 기입" 기능의 제 1 버전들에 대한 브랜치 명령 시퀀스들을 포함할 수도 있다. 프로세서 2에 대한 테이블(212)은, "OS 스케줄" 기능, "OS 판독" 기능, 및 "OS 기입" 기능의 제 2 버전에 대한 점프 명령 시퀀스들을 포함할 수도 있다. 고-레벨 코드에서의 기능 "OS 스케줄"에 대한 호는, 특정한 가상 어드레스에 저장된 테이블의 제 1 엔트리를 지시할 수도 있다. 고-레벨 코드의 관점으로부터, 어느 프로세서가 고-레벨 코드를 실행 중인지에 관계 없이, 동일한 가상 어드레스가 기능 맵핑 테이블에 대해 사용된다. 고-레벨 코드가 프로세서 1 상에서 실행되는 경우, 테이블(210)은 액세스될 수도 있고, "OS 스케줄" 기능의 "proc1" 버전으로의 브랜치가 수행될 수도 있다. 즉, 고-레벨 코드가 프로세서 1 상에서 실행되는 경우, 프로세서 1에 대해, 고-레벨 코드에서의 기능 맵핑 테이블에 대한 가상 어드레스가 (예를 들어, 프로세서 1에 대해 특정한 가상-투-물리적(vitrual-to-physical) 어드레스 맵핑 테이블을 통하여) 테이블(210)의 물리적 어드레스에 맵핑하기 때문에, 테이블(210)이 테이블(212) 대신 "선택"될 수도 있다. 고-레벨 코드가 프로세서 2 상에서 실행되는 경우, 테이블(212)이 액세스될 수도 있고, "OS 스케줄" 기능의 "proc2" 버전으로의 점프가 수행될 수도 있다. 즉, 고-레벨 코드가 프로세서 2 상에서 실행되는 경우, 프로세서 2에 대해, 고-레벨 코드에서의 기능 맵핑 테이블에 대한 가상 어드레스가 (예를 들어, 프로세서 2에 대해 특정한 가상-투-물리적 어드레스 맵핑 테이블을 통하여) 테이블(212)의 물리적 어드레스에 맵핑하기 때문에, 테이블(212)이 테이블(210) 대신 "선택"될 수도 있다. 따라서, 제 1 실시예는 포지션-독립적 코드에 대한 "절차 연계(procedure linkage) 테이블"과 유사할 수도 있다.
[0046] 제 2 실시예(도 2에 "옵션 2"로 지정됨)에서, 테이블들(220, 222)은 각각의 기능에 대한 어드레스들을 포함할 수도 있다. 어드레스를 기능에 직접 저장하는 대신, (예를 들어, 고-레벨 코드에 의해 사용되는) 데이터 구조들이 테이블들(220, 222)에서 어드레스 또는 인덱스를 포함할 수도 있다. 테이블들(220, 222)은, 각각 제 1 및 제 2 프로세서 아키텍쳐들에 대한 기능의 어드레스를 포함할 수도 있다. 각각의 프로세서에 대한 가상 어드레스의 물리적 어드레스로의 변환은, "정확한" 테이블(220, 222)이 동일한 가상 어드레스에 맵핑되게 하는 것을 가능하게 할 수도 있다.
[0047] 예를 들어, 도 2에 도시된 바와 같이, 프로세서 1에 대한 기능 테이블은 "OS 스케줄" 기능, "OS 판독" 기능, 및 "OS 기입" 기능의 제 1 버전들에 대한 어드레스들(예를 들어, 가상 어드레스들)을 포함할 수도 있다. 프로세서 2에 대한 기능 테이블은 "OS 스케줄" 기능, "OS 판독" 기능, 및 "OS 기입" 기능의 제 2 버전들에 대한 어드레스들(예를 들어, 가상 어드레스들)을 포함할 수도 있다. 고-레벨 코드에서의 기능 "OS 스케줄"에 대한 호는, 특정한 가상 어드레스에 저장된 테이블의 제 1 엔트리를 지시할 수도 있다. 위의 제 1 실시예를 참조하여 설명된 바와 같이, 고-레벨 코드의 관점으로부터, 어느 프로세서가 고-레벨 코드를 실행 중인지에 관계 없이, 동일한 가상 어드레스가 기능 맵핑 테이블에 대해 사용된다. 고-레벨 코드가 프로세서 1 상에서 실행되는 경우, 테이블(220)이 액세스될 수도 있고, 테이블(220)의 제 1 엔트리로부터의 "OS 스케줄"의 "proc1" 버전의 결과적인 어드레스가 사용될 수도 있다. 즉, 고-레벨 코드가 프로세서 1 상에서 실행되는 경우, 프로세서 1에 대해, 고-레벨 코드에서의 기능 맵핑 테이블에 대한 가상 어드레스가 (예를 들어, 프로세서 1에 특정한 가상-투-물리적 어드레스 맵핑 테이블을 통하여) 테이블(220)의 물리적 어드레스에 맵핑하기 때문에, 테이블(220)이 테이블(222) 대신 "선택"될 수도 있다. 고-레벨 코드가 프로세서 2 상에서 실행되는 경우, 테이블(222)이 액세스될 수도 있고, 테이블(220)의 제 1 엔트리로부터의 "OS 스케줄" 기능의 "proc2" 버전의 결과적인 어드레스가 사용될 수도 있다. 즉, 고-레벨 코드가 프로세서 2 상에서 실행되는 경우, 프로세서 2에 대해, 고-레벨 코드에서의 기능 맵핑 테이블에 대한 가상 어드레스가 (예를 들어, 프로세서 2에 특정한 가상-투-물리적 어드레스 맵핑 테이블을 통하여) 테이블(222)의 물리적 어드레스에 맵핑하기 때문에, 테이블(222)이 테이블(220) 대신 "선택"될 수도 있다. 따라서, 제 2 실시예는 포지션-독립적 코드에 대한 "글로벌 오프셋(global offset) 테이블"과 유사하다.
[0048] 제 3 실시예(도 2에 "옵션 3"으로 지정됨)에서, 단일 테이블(230)이 제 1 및 제 2 프로세서 명령 세트들 둘 모두에서 구현되는 기능들의 어드레스들을 포함할 수도 있다. 어드레스를 기능에 직접 저장하는 대신, (예를 들어, 고-레벨 코드에 의해 사용되는) 데이터 구조들이 테이블(230)에서 어드레스 또는 인덱스를 포함할 수도 있다. 2개의 상이한 테이블들 대신 단일 테이블(230)이 사용되기 때문에, 테이블(230)은 프로세서 명령 세트 아키텍쳐에 의해 추가로 인덱싱될 수도 있다. 따라서, 테이블(230)에서의 검색은 아키텍쳐(예를 들어, "proc1" 또는 "proc2") 뿐만 아니라 기능/테이블 인덱스/오프셋 둘 모두를 특정할 수도 있다. 테이블(230)은, 도시된 바와 같이, 제 1 및 제 2 프로세서 아키텍쳐들 둘 모두에 대한 기능의 어드레스를 포함할 수도 있다. 상술된 제 1 및 제 2 실시예들과 다르게, 제 3 실시예에서, 단일 테이블(230)이 사용되기 때문에, 가상 어드레스의 물리적 어드레스로의 맵핑들이 프로세서들에 걸쳐 동일하게 남아있을 수도 있음이 인식될 것이다.
[0049] 예를 들어, 도 2에 도시된 바와 같이, 기능 테이블은, 프로세서 1의 아키텍쳐 뿐만 아니라 프로세서 2의 아키텍쳐 둘 모두에서의 "OS 스케줄" 기능, "OS 판독" 기능, 및 "OS 기입" 기능의 버전들에 대한 어드레스들을 포함할 수도 있다. 고-레벨 코드에서의 기능 "OS 스케줄"에 대한 호는, 특정한 가상 어드레스에 저장된 테이블의 제 1 엔트리를 지시할 수도 있다. 고-레벨 코드가 프로세서 1 상에서 실행되는 경우, 테이블(230) 상에서의 검색이 수행될 수도 있으며, 여기서, 검색은, "OS 스케줄" 기능 및 "proc1" 아키텍쳐에 대한 오프셋을 특정하고, "OS 스케줄"의 "proc1" 버전의 결과적인 어드레스가 사용될 수도 있다. 고-레벨 코드가 프로세서 2 상에서 실행되는 경우, 테이블(230) 상에서의 검색이 수행될 수도 있으며, 여기서, 검색은, "OS 스케줄" 기능 및 "proc2" 아키텍쳐에 대한 오프셋을 특정하고, "OS 스케줄" 기능의 "proc2" 버전의 결과적인 어드레스가 사용될 수도 있다.
[0050] 제 2 및 제 3 실시예들에서, 기능에 대한 포인터는 결코 저장되지 않지만, 대신, 테이블 엔트리 표시가 저장되고, 기능에 대한 어드레스가 호 사이트(site)에서 매 시간마다 검색됨이 유의되어야 한다.
[0051] 동작 동안, 기능에 대한 데이터 구조에서의 포인터는, 대응하는 테이블 엔트리를 대신 지칭할 수도 있다. 옵션 1에서, 테이블에서의 엔트리들은 명령/명령 시퀀스들이므로, 포인터는, 도 2의 테이블들에 의해 도입되는 인디렉션의 레벨 없이 행해지는 동일한 방식으로 호출될 수도 있다. 옵션 2 및 옵션 3에 대해, 테이블이 판독될 수도 있고, 그 후, (예를 들어, 후속하는 브랜치 또는 점프에서 사용하기 위한) 특정한 프로세서에 대한 "정확한" 기능 어드레스가 이용가능할 수도 있다.
[0052] 도 2를 참조하여 설명된 옵션들이 결합될 수도 있음이 유의되어야 한다. 예를 들어, 도 2에 예시된 다수의 실시예들은, 시스템(예를 들어, 도 1의 시스템(100))에서 동시에 구현될 수도 있다. 예시를 위해, 테이블들(210 및 212)을 참조하여 설명된 "절차 연계 테이블들"의 실시예는 테이블들(220 및 222)을 참조하여 설명된 "글로벌 오프셋 테이블들"의 실시예와 함께 사용될 수도 있다. 프로세서 1 상에서, 기능이 제 1 시간에 대해 고-레벨 코드에서 호출되는 경우, 호는 테이블(210)에서의 코드의 세그먼트로 리졸빙(resolve)할 수도 있으며, 여기서, 코드의 세그먼트는 기능의 적절한 버전으로 브랜치하고, 또한, 브랜치의 목적지(destination)를 테이블(220)에 부가한다. 기능에 대한 후속하는 고-레벨 호들은, 목적지로서 테이블(220)에서의 어드레스를 사용하는 테이블(210)의 브랜치 명령을 초래한다. 부가적으로, 데이터 구조에서의 기능 표시를 주어진 명령 세트에 대한 정확한 기능의 어드레스로 변환하는 목적으로 기능하는 다른 구조들 또는 절차들이 사용될 수도 있음이 유의되어야 한다.
[0053] 도 3은, 상이한 아키텍쳐들을 갖는 다수의 프로세서들 상에서 운영 시스템의 단일 인스턴스를 실행하는 방법(300)의 특정한 실시예를 예시하기 위한 흐름도이다. 예시적인 실시예에서, 방법(300)은, 도 1의 시스템(100)에 의해 수행될 수도 있고, 도 2의 기능들 및 테이블들을 참조하여 설명될 수도 있다.
[0054] 방법(300)은 (302)에서, 제 1 프로세서 상에서 제 1 코드를 실행하는 단계를 포함할 수도 있다. 특정한 실시예에서, 제 1 프로세서는 멀티-스레딩된 DSP일 수도 있다. 예를 들어, 도 1의 제 1 프로세서(110)는, 도 2의 "OS 스케줄", "OS 판독", 또는 "OS 기입" 기능과 같은 제 1 태스크에 대응하는 제 1 코드를 실행할 수도 있다.
[0055] 방법(300)은 (304)에서, 제 1 코드를 실행하면서, 실행의 흐름을 사용자 모드로부터 커널 모드로 트랜지션(transition)하게 하는 운영 시스템 이벤트를 실행하는 단계를 또한 포함할 수도 있다. 운영 시스템 이벤트는, 페이지 장애, 트랩, 시스템 장애, 시스템 요청, 하드웨어 에러, 어드레스 에러, 허용 위반 등일 수도 있다. 예를 들어, 제 1 코드를 실행하면서, 도 1의 제 1 프로세서(110)는 운영 시스템 이벤트를 실행할 수도 있다.
[0056] 방법(300)은 (306)에서, 운영 시스템 이벤트를 실행할 시, 제 1 코드의 실행을 중단하고 제 2 프로세서 상에서 제 2 코드의 실행을 개시하는 단계를 더 포함할 수도 있다. 제 2 코드는 운영 시스템 이벤트를 핸들링하도록 구성될 수도 있다. 제 2 프로세서는 멀티-코어 CPU일 수도 있다. 예를 들어, 운영 시스템 이벤트를 실행할 시, 도 1의 제 1 프로세서(110)는, 제 1 코드의 실행을 중단할 수도 있고, 도 1의 제 2 프로세서(112) 상에서의 제 2 코드의 실행을 야기할 수도 있다.
[0057] 방법(300)은, (308)에서, 운영 시스템 이벤트를 핸들링하는 제 2 코드의 완료 시, 제 2 코드를 중단하고 제 1 프로세서 상에서 제 1 코드의 실행을 재개하는 단계를 포함할 수도 있다. 예를 들어, 제 2 코드의 실행은 도 1 의 제 2 프로세서(112)에서 중단될 수도 있고, 제 1 코드의 실행은 도 1 의 제 1 프로세서(110)에서 재개될 수도 있다.
[0058] 따라서, 도 3의 방법(300)은, "2차" 프로세서가 "원격" 운영 시스템 환경을 실행하는 것을 가능하게 하고, 운영 시스템 이벤트들을 핸들링하기 위해 "1차" 프로세서에 의존할 수도 있다. 예를 들어, 코드가 특정한 운영 시스템을 실행하는 CPU에 대해 기입 및 컴파일되었을 수 있다 하더라도, 코드는, CPU와 함께, 특정한 운영 시스템을 구동하는 DSP 상에서 실행될 수도 있으며, DSP는, 이벤트 핸들링 및 다른 운영 시스템 태스크들에 대해 CPU에 의존할 수도 있다. DSP 상에서 구동하는 프로세스의 관점으로부터, 프로세스가 CPU 상에서 구동 중이었으면 이용가능했었을 설비(facility)들/서비스들이 계속해서 이용가능할 수도 있다.
[0059] 특정한 실시예에서, 도 3의 방법(300)은, DSP, CPU, 제어기, 필드-프로그래밍가능 게이트 어레이(FPGA) 디바이스, 주문형 집적 회로(ASIC), 다른 하드웨어 디바이스, 펌웨어 디바이스, 또는 이들의 임의의 결합에 의해 구현될 수도 있다. 예로서, 도 3의 방법(300)은, 명령들을 실행하는 도 5에 관하여 설명된 바와 같은 프로세서에 의해 수행될 수 있다.
[0060] 도 4는, 상이한 아키텍쳐들을 갖는 다수의 프로세서들 상에서 운영 시스템의 단일 인스턴스를 실행하는 방법(400)의 다른 특정한 실시예를 예시하기 위한 흐름도이다. 일 예시적인 실시예에서, 방법(400)은, 도 1의 시스템(100)에 의해 수행될 수도 있고, 도 2의 기능들 및 테이블들을 참조하여 설명될 수도 있다.
[0061] 방법(400)은 (402)에서, 실행을 위한 태스크를 스케줄링하기 위한 요청을 운영 시스템의 스케줄러에서 수신하는 단계를 포함할 수도 있다. 운영 시스템은, 제 1 아키텍쳐를 갖는 제 1 프로세서 및 제 2 아키텍쳐를 갖는 제 2 프로세서 상에서 동시에 실행가능하다. 예를 들어, 도 1에서, 스케줄러(106)는 실행을 위한 태스크(114)를 스케줄링하기 위한 요청을 수신할 수도 있다.
[0062] 방법(400)은 (404)에서, 태스크가 다수의 명령 세트들을 지원하는지를 결정하는 단계를 또한 포함할 수도 있다. 예를 들어, 도 1에서, 스케줄러(106)는, 태스크(114)가 제 1 프로세서(110)의 제 1 명령 세트 및 제 2 프로세서(112)의 제 2 명령 세트 둘 모두를 지원하는지를 결정할 수도 있다. 태스크가 단일 명령 세트를 지원하는 경우, 방법(400)은 (406)에서, 지원되는 명령 세트를 갖는 프로세서 상에서 태스크를 스케줄링 및 시작하는 단계를 포함할 수도 있다.
[0063] 태스크가 다수의 명령 세트들을 지원하는 경우, 방법(400)은, (408)에서, 지원되는 프로세서들 중 하나 상에서 태스크를 스케줄링하는 단계를, 그리고 (410)에서, 스케줄링된 프로세서의 명령 세트를 사용하여 태스크를 시작하는 단계를 포함할 수도 있다. 스케줄링된 프로세서는, 선택 기준들(예를 들어, 최소로 로딩된 프로세서, 태스크의 타입, 태스크와 연관된 가장 낮은 전력 사용 등)에 기초하여 선택될 수도 있다. 예를 들어, 도 1에서, 스케줄러(106)는, 선택 기준들(108)에 기초하여 제 1 프로세서(110) 상에서 실행을 위한 태스크(114)를 스케줄링할 수도 있으며, 제 1 명령 세트를 사용하여 태스크(114)를 시작하기 위한 시스템 호를 생성할 수도 있다.
[0064] 방법(400)은 (412)에서, 태스크의 실행 동안, 태스크의 실행을 다른 프로세서로 그리고 다른 명령 세트로 스위칭하는 단계를 또한 포함할 수도 있다. 예를 들어, 도 1에서, 제 1 프로세서(110) 상에서의 태스크(114)의 실행 동안, 태스크(114)의 실행은 (120)에 도시된 바와 같이 제 2 프로세서(112)로 스위칭될 수도 있다.
[0065] 일 예시적인 실시예에서, 태스크의 실행을 스위칭하는 단계는, (414)에서, 태스크의 실행을 다른 명령 세트로 스위칭하기 위한 시스템 호를 제 1 프로세서 상에서 생성하는 단계를 포함할 수도 있다. (416)으로 진행하여, 태스크는 제 1 프로세서(즉, (410)에서 사용된 스케줄링된 프로세서)의 스케줄로부터 제거될 수도 있다. (418)로 진행하여, 태스크는 제 2 프로세서(즉, 다른 명령 세트와 연관된 다른 프로세서)의 스케줄에 부가될 수도 있다. (420)으로 계속되어, 방법(400)은, 제 2 명령 세트를 갖는 제 2 프로세서 상에서 시스템 호로부터 리턴하는 단계를 포함할 수도 있다.
[0066] 따라서, 도 4의 방법(400)은, 선택 기준들에 따라 멀티-ISA 시스템들에서의 태스크들의 동적 스케줄링을 가능하게 할 수도 있다(선택 기준들은, 그러한 시스템들에서의 실행 성능, 리소스 사용, 및/또는 전력 소모를 개선할 수도 있다).
[0067] 특정한 실시예에서, 도 4의 방법(400)은, DSP, CPU, 제어기, 필드-프로그래밍가능 게이트 어레이(FPGA) 디바이스, 주문형 집적 회로(ASIC), 다른 하드웨어 디바이스, 펌웨어 디바이스, 또는 이들의 임의의 결합에 의해 구현될 수도 있다. 예로서, 도 4의 방법(400)은, 명령들의 실행은 도 5에 관하여 설명된 바와 같은 프로세서에 의해 수행될 수 있다.
[0068] 도 5를 참조하면, 전자 디바이스(500)의 블록도가 도시된다. 특정한 실시예에서, 전자 디바이스(500) 또는 그들의 컴포넌트들은, 셋 톱 박스, 뮤직 플레이어, 비디오 플레이어, 엔터테인먼트 유닛, 내비게이션 디바이스, 통신 디바이스, 개인 휴대 정보 단말(PDA), 고정 위치 데이터 유닛, 컴퓨팅 디바이스, 또는 이들의 임의의 결합 내에 포함될 수도 있다.
[0069] 전자 디바이스(500)는, 메모리(532)에 커플링되는 DSP(574) 및 CPU(510)를 포함한다. CPU(510)는 다수의 코어들(예를 들어, 제 1 코어(570) 및 제 2 코어(572))을 포함할 수도 있고, DSP(574)는 다수의 하드웨어 스레드들(예를 들어, 제 1 하드웨어 스레드(576) 및 제 2 하드웨어 스레드(578))를 포함할 수도 있다. 2개의 코어들 및 2개의 하드웨어 스레드들이 도 5에 도시되지만, 상이한 개수의 코어들 및/또는 하드웨어 스레드들을 갖는 다른 구성들이 또한 사용될 수도 있음이 유의되어야 한다.
[0070] 도 5는 CPU(510) 및 디스플레이(528)에 커플링되는 디스플레이 제어기(526)를 포함한다. 코더/디코더(코덱)(534)는 CPU(510) 및 DSP(574)에 커플링될 수도 있다. 스피커(536) 및 마이크로폰(538)은 코덱(534)에 커플링될 수 있다. 도 5는, 무선 제어기(540)가 DSP(574) 및 안테나(542)에 (예를 들어, 라디오 주파수(RF) 인터페이스를 통하여) 커플링될 수 있음을 또한 표시한다. 따라서, 도 5의 실시예에서, CPU(510)는 디스플레이 기능들을 수행하기 위해 사용될 수도 있고, DSP(574)는 무선 신호 프로세싱 기능들을 수행하기 위해 사용될 수도 있으며, CPU(510) 및 DSP(574) 둘 모두가 오디오 I/O 기능들을 수행하는 것이 가능할 수도 있다.
[0071] 메모리(532)는 실행가능한 명령들(556)을 포함하는 유형의(tangible) 비-일시적인 컴퓨터-판독가능 또는 프로세서-판독가능 저장 매체일 수도 있다. 예를 들어, 메모리(532)는, 도 1의 스케줄러(106), 도 1의 이벤트 핸들러(107), 및 도 1의 선택 기준들(108)과 같은, 도 1의 운영 시스템(104)의 적어도 부분 및/또는 도 1의 운영 시스템(104)의 컴포넌트들을 저장할 수도 있다. 메모리(532)(예를 들어, RAM)가 운영 시스템의 부분을 저장하는 경우, 운영 시스템의 나머지는 다른 메모리 또는 저장 디바이스(예를 들어, 하드 디스크(들))에 저장될 수도 있다. 메모리(532)는 운영 시스템 데이터 구조(558)(예를 들어, 도 1의 운영 시스템 데이터 구조(118) 및/또는 도 2의 테이블들)를 또한 저장할 수도 있다. 명령들(556)은, CPU(510) 또는 DSP(574)와 같은 프로세서에 의해 실행되어 도 3 및 도 4의 방법들(300 및 400)을 포함하는 다양한 기능들 및 방법들을 수행할 수도 있다.
[0072] 특정한 실시예에서, CPU(510), DSP(574), 디스플레이 제어기(526), 메모리(532), 코덱(534), 및 무선 제어기(540)는 시스템-인-패키지(system-in-package) 또는 시스템-온-칩(system-on-chip) 디바이스(522) 내에 포함된다. 특정한 실시예에서, 입력 디바이스(530) 및 전력 공급부(544)는 시스템-온-칩 디바이스(522)에 커플링된다. 또한, 특정한 실시예에서, 도 5에 도시된 바와 같이, 디스플레이(528), 입력 디바이스(530), 스피커(536), 마이크로폰(538), 안테나(542), 및 전력 공급부(544)는 시스템-온-칩 디바이스(522) 외부에 있다. 그러나, 디스플레이(528), 입력 디바이스(530), 스피커(536), 마이크로폰(538), 안테나(542), 및 전력 공급부(544) 각각은, 인터페이스 또는 제어기와 같은 시스템-온-칩 디바이스(522)의 컴포넌트에 커플링될 수 있다.
[0073] 설명된 실시예들과 함께, 장치는, 제 1 명령 세트와 연관된 명령들을 프로세싱하기 위한 제 1 수단을 포함한다. 예를 들어, 프로세싱하기 위한 제 1 수단은, 도 1의 제 1 프로세서(110), 도 1의 제 2 프로세서(112), 도 5의 CPU(510), 도 5의 DSP(574), 다른 프로세서(예를 들어, NPU 또는 GPU), 명령들을 프로세싱하도록 구성되는 다른 디바이스 또는 모듈, 또는 이들의 임의의 결합을 포함할 수도 있다.
[0074] 장치는, 제 2 명령 세트와 연관된 명령들을 프로세싱하기 위한 제 2 수단을 또한 포함할 수도 있다. 예를 들어, 프로세싱하기 위한 제 2 수단은, 도 1의 제 1 프로세서(110), 도 1의 제 2 프로세서(112), 도 5의 CPU(510), 도 5의 DSP(574), 다른 프로세서(예를 들어, NPU 또는 GPU), 명령들을 프로세싱하도록 구성되는 다른 디바이스 또는 모듈, 또는 이들의 임의의 결합을 포함할 수도 있다.
[0075] 장치는, 운영 시스템의 적어도 부분을 저장하기 위한 수단을 더 포함할 수도 있으며, 운영 시스템은 프로세싱하기 위한 제 1 수단 및 프로세싱하기 위한 제 2 수단 상에서 동시에 실행가능하다. 예를 들어, 운영 시스템의 적어도 부분을 저장하기 위한 수단은, 도 1의 코히어런트 메모리(116), 도 5의 메모리(532), 데이터를 저장하도록 구성되는 다른 디바이스 또는 모듈, 또는 이들의 임의의 결합을 포함할 수도 있다.
[0076] 장치는, 운영 시스템과 연관된 적어도 하나의 공유 데이터 구조를 저장하기 위한 수단을 또한 포함할 수도 있다. 예를 들어, 적어도 하나의 공유 데이터 구조를 저장하기 위한 수단은, 도 1의 메모리(116), 도 5의 메모리(532), 데이터를 저장하도록 구성되는 다른 디바이스 또는 모듈, 또는 이들의 임의의 결합을 포함할 수도 있다.
[0077] 장치는, 프로세싱하기 위한 제 1 수단 또는 프로세싱하기 위한 제 2 수단 중 어느 하나 상에서 제 1 명령 세트 및 제 2 명령 세트 둘 모두를 지원하는 태스크의 실행을 스케줄링하기 위한 수단을 포함할 수도 있다. 예를 들어, 스케줄링하기 위한 수단은, 도 1의 스케줄러(106), 실행을 위한 태스크들을 스케줄링하도록 구성되는 디바이스 또는 모듈, 또는 이들의 임의의 결합을 포함할 수도 있다.
[0078] 당업자들은 본 명세서에 기재된 실시예들과 관련하여 설명된 로직 블록들, 구성들, 모듈들, 회로들, 및 알고리즘 단계들이 전자 하드웨어, 프로세서에 의해 실행되는 컴퓨터 소프트웨어, 또는 이 둘의 결합들로서 구현될 수도 있음을 추가로 인식할 것이다. 다양한 예시적인 컴포넌트들, 블록들, 구성들, 모듈들, 회로들, 및 단계들은 그들의 기능의 관점들에서 일반적으로 상술되었다. 그러한 기능이 하드웨어로서 구현되는지 또는 프로세서 실행가능 명령들로서 구현되는지는 특정 애플리케이션 및 전체 시스템에 부과된 설계 제한들에 의존한다. 당업자들은 설명된 기능을 각각의 특정한 애플리케이션에 대해 다양한 방식들로 구현할 수도 있지만, 그러한 구현 결정들이 본 개시의 범위를 벗어나게 하는 것으로서 해석되지는 않아야 한다.
[0079] 본 명세서에 기재된 실시예들과 관련하여 설명된 방법 또는 알고리즘의 단계들은 직접 하드웨어로, 프로세서에 의해 실행되는 소프트웨어 모듈로, 또는 이 둘의 결합으로 구현될 수도 있다. 소프트웨어 모듈은 랜덤 액세스 메모리(RAM), 플래시 메모리, 판독-전용 메모리(ROM), 프로그래밍가능 판독-전용 메모리(PROM), 소거가능한 프로그래밍가능 판독-전용 메모리(EPROM), 전기적으로 소거가능한 프로그래밍가능 판독-전용 메모리(EEPROM), 레지스터들, 하드 디스크, 착탈형 디스크, 콤팩트 디스크 판독-전용 메모리(CD-ROM), 디지털 다목적 디스크(DVD), 또는 당업계에 알려진 임의의 다른 형태의 비-일시적인 저장 매체에 상주할 수도 있다. 예시적인 저장 매체는, 프로세서가 저장 매체로부터 정보를 판독하고, 저장 매체에 정보를 기입할 수 있도록 프로세서에 커플링된다. 대안적으로, 저장 매체는 프로세서에 통합될 수도 있다. 프로세서 및 저장 매체는 주문형 집적 회로(ASIC)에 상주할 수도 있다. ASIC은 컴퓨팅 디바이스 또는 사용자 단말에 상주할 수도 있다. 대안적으로, 프로세서 및 저장 매체는 컴퓨팅 디바이스 또는 사용자 단말 내의 별개의 컴포넌트들로서 상주할 수도 있다.
[0080] 예를 들어, 설명된 실시예들에 따르면, 비-일시적인 컴퓨터-판독가능 저장 매체(예를 들어, CD, DVD, 메모리 디바이스 등)는 운영 시스템의 단일 인스턴스를 저장할 수도 있다. 운영 시스템은, 제 1 프로세서 및 제 2 프로세서를 포함하는 전자 디바이스에 의해 실행되는 경우, 제 1 프로세서 및 제 2 프로세서 상에서의 운영 시스템의 동시 실행을 야기하는 명령들을 포함할 수도 있다. 제 1 프로세서는 제 1 명령 세트 아키텍쳐와 연관되고, 제 2 프로세서는, 제 1 명령 세트 아키텍쳐와는 상이한 제 2 명령 세트 아키텍쳐와 연관된다.
[0081] 기재된 실시예들의 이전 설명은 당업자가 기재된 실시예들을 사용 또는 실시할 수 있도록 제공된다. 이들 실시예들에 대한 다양한 변형들은 당업자들에게 용이하게 명백할 것이며, 본 명세서에 정의된 원리들은 본 개시의 범위를 벗어나지 않으면서 다른 실시예들에 적용될 수도 있다. 따라서, 본 개시는 본 명세서에 나타낸 실시예들로 제한되도록 의도되는 것이 아니라, 다음의 청구항들에 의해 정의되는 바와 같은 원리들 및 신규한 특성들과 일치하는 가능한 가장 넓은 범위에 부합할 것이다.

Claims (32)

  1. 제 1 명령 세트 아키텍쳐와 연관되는 제 1 프로세서 ― 상기 제 1 프로세서는, 공유 데이터 구조의 가상 어드레스에 저장된 기능 테이블의 제 1 테이블 엔트리에 액세스하도록 구성됨 ―;
    제 2 명령 세트 아키텍쳐와 연관되는 제 2 프로세서 ― 상기 제 2 명령 세트 아키텍쳐는 상기 제 1 명령 세트 아키텍쳐와 상이하고, 상기 제 2 프로세서는 상기 공유 데이터 구조의 상기 가상 어드레스에 저장된 상기 기능 테이블의 제 2 테이블 엔트리에 액세스하도록 구성됨 ―;
    상기 제 1 프로세서 및 상기 제 2 프로세서 상에서 동시에 실행가능하도록 구성되는 운영 시스템의 적어도 일부를 저장하는 메모리; 및
    제 1 명령 세트의 제 1 명령들을 사용하여 상기 제 1 프로세서 상에서 상기 운영 시스템의 태스크(task)의 실행을 스케줄링하고 그리고 상이한 명령 세트의 제 2 명령들을 사용하여 상기 제 2 프로세서 상에서 상기 태스크의 실행을 스케줄링하도록 구성되는 스케줄러를 포함하고,
    상기 제 1 프로세서는 상기 기능 테이블의 상기 제 1 테이블 엔트리에 기초하여 상기 제 1 명령들에 액세스하도록 구성되고, 상기 제 2 프로세서는 상기 기능 테이블의 상기 제 2 테이블 엔트리에 기초하여 상기 제 2 명령들에 액세스하도록 구성되는, 장치.
  2. 제 1 항에 있어서,
    상기 제 1 테이블 엔트리 및 상기 제 2 테이블 엔트리는 상이하고,
    상기 제 1 프로세서 및 상기 제 2 프로세서는 모바일 컴퓨팅 디바이스에 통합되는, 장치.
  3. 제 1 항에 있어서,
    상기 메모리는 상기 기능 테이블을 포함하고,
    상기 제 1 테이블 엔트리 및 상기 제 2 테이블 엔트리는 각각 상기 기능 테이블에서 제 1 위치 식별자 및 제 2 위치 식별자에 대응하는, 장치.
  4. 제 3 항에 있어서,
    상기 제 1 위치 식별자는, 상기 제 1 명령 세트를 사용하여 표현되고 그리고 제 1 어드레스와 연관되는 상기 태스크의 제 1 버전의 위치를 식별하고,
    상기 제 2 위치 식별자는, 상기 제 2 명령 세트를 사용하여 표현되고 그리고 상기 제 1 어드레스와 상이한 제 2 어드레스와 연관되는 상기 태스크의 제 2 버전의 위치를 식별하는, 장치.
  5. 제 3 항에 있어서,
    상기 기능 테이블은,
    상기 제 1 프로세서에 액세스가능하고 그리고 상기 제 1 위치 식별자를 저장하는 제 1 기능 테이블 ― 상기 제 1 위치 식별자는 제 1 어드레스로의 제 1 점프(jump) 또는 브랜치(branch) 명령을 포함함 ―; 및
    상기 제 2 프로세서에 액세스가능하고 그리고 상기 제 2 위치 식별자를 저장하는 제 2 기능 테이블을 포함하고,
    상기 제 2 위치 식별자는 상기 제 1 어드레스와 상이한 제 2 어드레스로의 제 2 점프 또는 브랜치 명령을 포함하고,
    상기 제 1 기능 테이블 및 상기 제 2 기능 테이블은, 상이한 물리적 어드레스들과 연관되는, 장치.
  6. 제 3 항에 있어서,
    상기 기능 테이블은,
    상기 제 1 프로세서에 액세스가능하고 그리고 상기 제 1 위치 식별자를 저장하는 제 1 기능 테이블 ― 상기 제 1 위치 식별자는 제 1 어드레스를 포함함 ―; 및
    상기 제 2 프로세서에 액세스가능하고 그리고 상기 제 2 위치 식별자를 저장하는 제 2 기능 테이블을 포함하며,
    상기 제 2 위치 식별자는 상기 제 1 어드레스와 상이한 제 2 어드레스를 포함하고,
    상기 제 1 기능 테이블 및 상기 제 2 기능 테이블은, 상이한 물리적 어드레스들과 연관되는, 장치.
  7. 제 1 항에 있어서,
    상기 공유 데이터 구조 내의 상기 제 1 테이블 엔트리는, 상기 제 1 명령 세트를 사용하여 표현되는 상기 태스크의 제 1 버전과 연관된 제 1 어드레스를 포함하고,
    상기 공유 데이터 구조 내의 상기 제 2 테이블 엔트리는, 상기 제 2 명령 세트를 사용하여 표현되는 상기 태스크의 제 2 버전과 연관된 제 2 어드레스를 포함하고,
    상기 공유 데이터 구조는, 특정한 명령 세트에 적어도 부분적으로 기초하여 인덱싱(index)되는 하나 이상의 기능 테이블들을 포함하는, 장치.
  8. 제 1 항에 있어서,
    상기 운영 시스템은 상기 스케줄러를 포함하고,
    상기 스케줄러는, 상기 제 1 프로세서, 상기 제 2 프로세서, 또는 상기 제 1 프로세서와 상기 제 2 프로세서 둘 모두에 의한 완료를 위해 태스크들의 실행을 스케줄링하도록 구성되는, 장치.
  9. 제 1 항에 있어서,
    상기 스케줄러는, 상기 제 1 프로세서, 상기 제 2 프로세서, 또는 상기 제 1 프로세서와 상기 제 2 프로세서 둘 모두에 의한 완료를 위해 상기 태스크의 실행을 스케줄링하도록 구성되는, 장치.
  10. 제 1 항에 있어서,
    상기 스케줄러는 상기 태스크와 연관된 가장 낮은 전력 사용의 식별에 기초하여 상기 태스크를 실행하기 위해 상기 제 1 프로세서 또는 상기 제 2 프로세서를 선택하도록 구성되는, 장치.
  11. 제 1 항에 있어서,
    상기 스케줄러는, 최소로 로딩된 프로세서의 식별, 상기 태스크의 타입, 상기 태스크와 연관된 가장 낮은 전력 사용의 식별, 또는 이들의 조합을 포함하는 선택 기준들에 기초하여 상기 태스크를 실행하기 위해 상기 제 1 프로세서 또는 상기 제 2 프로세서를 선택하는, 장치.
  12. 제 1 항에 있어서,
    상기 장치는,
    상기 제 1 프로세서에 커플링되는 무선 제어기; 및
    상기 무선 제어기를 통해 상기 제 1 프로세서에 커플링되는 안테나
    를 더 포함하고,
    상기 운영 시스템은, 특정된 명령 세트를 사용하여 하나 이상의 태스크들을 시작하기 위한 시스템 호(call)를 제공하도록 구성되는, 장치.
  13. 제 1 항에 있어서,
    상기 운영 시스템은, 특정한 명령 세트를 사용하는 특정한 태스크의 진행 중인 실행을 상이한 명령 세트로 스위칭하기 위한 시스템 호를 제공하도록 구성되는, 장치.
  14. 실행을 위한 태스크를 스케줄링하기 위한 요청을, 제 1 명령 세트 아키텍쳐를 갖는 제 1 프로세서 및 상이한 제 2 명령 세트 아키텍쳐를 갖는 제 2 프로세서 상에서 동시에 실행가능한 운영 시스템의 스케줄러에서 수신하는 단계 ― 상기 제 1 프로세서는 공유 데이터 구조의 가상 어드레스에 저장된 기능 테이블의 제 1 테이블 엔트리에 액세스하도록 구성되고, 상기 제 2 프로세서는 상기 공유 데이터 구조의 상기 가상 어드레스에 저장된 상기 기능 테이블의 제 2 테이블 엔트리에 액세스하도록 구성됨 ―;
    상기 제 1 프로세서 상의 제 1 명령 세트의 제 1 명령들을 사용하고 그리고 상기 제 2 프로세서 상의 상이한 명령 세트의 제 2 명령들을 사용하는 실행에 대해 상기 태스크가 이용가능하다고 결정하는 것에 응답하여, 적어도 하나의 선택 기준에 기초하여 상기 제 1 프로세서 상에 상기 태스크를 스케줄링하는 단계 ― 상기 제 1 프로세서는 상기 기능 테이블의 상기 제 1 테이블 엔트리에 기초하여 상기 제 1 명령들에 액세스하도록 구성되고, 상기 제 2 프로세서는 상기 기능 테이블의 상기 제 2 테이블 엔트리에 기초하여 상기 제 2 명령들에 액세스하도록 구성됨 ―; 및
    상기 태스크의 실행 동안, 상기 제 1 프로세서로부터 상기 제 2 프로세서로 상기 태스크의 실행을 스위칭하는 단계를 포함하는, 방법.
  15. 제 14 항에 있어서,
    상기 제 1 프로세서 상에 상기 태스크를 스케줄링하는 것에 응답하여, 상기 제 1 프로세서 상에서 제 1 코드를 실행하는 단계;
    상기 제 1 코드를 실행하는 동안 운영 시스템 이벤트를 실행하는 단계;
    상기 운영 시스템 이벤트를 실행할 시, 상기 제 1 코드의 실행을 중단하고 그리고 상기 제 2 프로세서 상에서 제 2 코드의 실행을 개시하는 단계 ― 상기 제 2 코드는 상기 운영 시스템 이벤트를 핸들링하기 위한 것임 ―; 및
    상기 운영 시스템 이벤트를 핸들링하는 상기 제 2 코드의 실행의 완료 시, 상기 제 2 코드를 중단하고 그리고 상기 제 1 프로세서 상에서 상기 제 1 코드의 실행을 재개(resume)하는 단계를 더 포함하는, 방법.
  16. 제 14 항에 있어서,
    상기 제 1 테이블 엔트리 및 상기 제 2 테이블 엔트리는 각각 상기 공유 데이터 구조에서 제 1 위치 식별자 및 제 2 위치 식별자에 대응하고, 상기 제 1 위치 식별자 및 상기 제 2 위치 식별자는 상이한, 방법.
  17. 제 14 항에 있어서,
    상기 제 1 프로세서 및 상기 제 2 프로세서는 동일한 코히어런트(coherent) 메모리에 액세스하도록 각각 구성되고, 상기 코히어런트 메모리는 상기 공유 데이터 구조를 포함하고, 상기 제 1 프로세서 및 상기 제 2 프로세서는 모바일 컴퓨팅 디바이스에 통합되는, 방법.
  18. 제 15 항에 있어서,
    상기 기능 테이블은,
    상기 제 1 프로세서 상에서 실행하도록 컴파일된 상기 태스크의 제 1 버전에 대응하는 제 1 기능 테이블 ― 상기 태스크의 상기 제 1 버전은 상기 제 1 코드를 사용하여 표현됨 ―, 및
    상기 제 2 프로세서 상에서 실행하도록 컴파일된 상기 태스크의 제 2 버전에 대응하는 제 2 기능 테이블 ― 상기 태스크의 상기 제 2 버전은 상기 제 2 코드를 사용하여 표현됨 ― 을 포함하는, 방법.
  19. 제 14 항에 있어서,
    상기 제 1 프로세서 및 상기 제 2 프로세서는, 프로세서간(inter-processor) 메시징, 공유 메모리, 애플리케이션 프로그래밍 인터페이스(API), 또는 이들의 조합을 통해 서로 통신하도록 구성되는, 방법.
  20. 제 14 항에 있어서,
    상기 제 1 프로세서는 다수의 하드웨어 스레드들(threads)을 갖는 디지털 신호 프로세서(DSP)를 포함하고, 상기 제 2 프로세서는 멀티-코어 중앙 프로세싱 유닛(CPU)을 포함하는, 방법.
  21. 제 15 항에 있어서,
    상기 운영 시스템 이벤트는, 페이지 장애(fault), 트랩(trap), 시스템 장애, 시스템 요청, 하드웨어 에러, 어드레스 에러, 허용 위반(permission violation), 또는 이들의 조합을 포함하는, 방법.
  22. 제 15 항에 있어서,
    상기 운영 시스템 이벤트는, 실행의 흐름을 상기 운영 시스템의 사용자 모드로부터 상기 운영 시스템의 커널(kernel) 모드로 트랜지션(transition)하게 하는, 방법.
  23. 제 14 항에 있어서,
    상기 적어도 하나의 선택 기준은 상기 태스크와 연관된 가장 낮은 전력 사용을 포함하는, 방법.
  24. 제 14 항에 있어서,
    상기 적어도 하나의 선택 기준은, 최소로 로딩된 프로세서, 상기 태스크의 타입, 상기 태스크와 연관된 가장 낮은 전력 사용, 또는 이들의 조합을 포함하며,
    상기 태스크의 실행을 스위칭하는 단계는,
    상기 제 1 프로세서로부터 시스템 호를 개시하는 단계;
    상기 제 1 프로세서의 스케줄로부터 상기 태스크를 제거하는 단계;
    상기 제 2 프로세서의 스케줄에 상기 태스크를 부가하는 단계; 및
    상기 제 2 프로세서 상에서 상기 시스템 호로부터 리턴하는 단계를 포함하는, 방법.
  25. 제 1 명령 세트 아키텍쳐와 연관된 명령들을 프로세싱하기 위한 제 1 수단 ― 상기 명령들을 프로세싱하기 위한 제 1 수단은 공유 데이터 구조의 가상 어드레스에 저장된 기능 테이블의 제 1 테이블 엔트리에 액세스하도록 구성됨 ―;
    상기 제 1 명령 세트 아키텍쳐와 상이한 제 2 명령 세트 아키텍쳐와 연관된 명령들을 프로세싱하기 위한 제 2 수단 ― 상기 명령들을 프로세싱하기 위한 제 2 수단은 상기 공유 데이터 구조의 상기 가상 어드레스에 저장된 상기 기능 테이블의 제 2 테이블 엔트리에 액세스하도록 구성됨 ―;
    운영 시스템의 적어도 일부를 저장하기 위한 수단 ― 상기 운영 시스템은 상기 프로세싱하기 위한 제 1 수단 및 상기 프로세싱하기 위한 제 2 수단 상에서 동시에 실행가능하고, 상기 저장하기 위한 수단은 상기 공유 데이터 구조를 포함함 ―; 및
    제 1 명령 세트의 제 1 명령들을 사용하여 상기 프로세싱하기 위한 제 1 수단 상에서 상기 운영 시스템의 태스크의 실행을 스케줄링하고 그리고 상이한 명령 세트의 제 2 명령들을 사용하여 상기 프로세싱하기 위한 제 2 수단 상에서 상기 태스크의 실행을 스케줄링하기 위한 수단을 포함하고,
    상기 프로세싱하기 위한 제 1 수단은 상기 기능 테이블의 상기 제 1 테이블 엔트리에 기초하여 상기 제 1 명령들에 액세스하도록 구성되고, 상기 프로세싱하기 위한 제 2 수단은 상기 기능 테이블의 상기 제 2 테이블 엔트리에 기초하여 상기 제 2 명령들에 액세스하도록 구성되는, 장치.
  26. 제 25 항에 있어서,
    상기 실행을 스케줄링하기 위한 수단은, 상기 태스크와 연관된 가장 낮은 전력 사용의 식별에 기초하여 상기 태스크의 실행을 스케줄링하도록 구성되고,
    상기 태스크는, 상기 프로세싱하기 위한 제 1 수단 또는 상기 프로세싱하기 위한 제 2 수단 중 어느 하나 상에서 상기 제 1 명령 세트 및 상기 제 2 명령 세트 둘 모두를 지원하는, 장치.
  27. 제 25 항에 있어서,
    상기 태스크는, 상기 프로세싱하기 위한 제 1 수단 또는 상기 프로세싱하기 위한 제 2 수단 중 어느 하나 상에서 상기 제 1 명령 세트 및 상기 제 2 명령 세트 둘 모두를 사용하여 실행되고,
    상기 프로세싱하기 위한 제 1 수단 및 상기 프로세싱하기 위한 제 2 수단은 모바일 컴퓨팅 디바이스에 통합되는, 장치.
  28. 운영 시스템의 단일 인스턴스(instance) ― 상기 운영 시스템의 단일 인스턴스는, 제 1 프로세서 및 제 2 프로세서를 포함하는 전자 디바이스에서 실행되는 경우, 상기 제 1 프로세서 및 상기 제 2 프로세서 상에서의 상기 운영 시스템의 동시 실행을 야기하는 명령들을 포함하고, 상기 제 1 프로세서는 제 1 명령 세트 아키텍쳐와 연관되고, 상기 제 2 프로세서는 상기 제 1 명령 세트 아키텍쳐와 상이한 제 2 명령 세트 아키텍쳐와 연관됨 ―; 및
    제 1 명령 세트의 제 1 명령들을 사용하여 상기 제 1 프로세서 상에서 상기 운영 시스템의 태스크의 실행을 스케줄링하고 그리고 상이한 명령 세트의 제 2 명령들을 사용하여 상기 제 2 프로세서 상에서 상기 태스크의 실행을 스케줄링하도록 구성되는 스케줄러를 포함하고,
    상기 제 1 프로세서는 공유 데이터 구조의 가상 어드레스에 저장된 기능 테이블의 제 1 테이블 엔트리에 기초하여 상기 제 1 명령들에 액세스하도록 구성되고, 상기 제 2 프로세서는 상기 공유 데이터 구조의 상기 가상 어드레스에 저장된 상기 기능 테이블의 제 2 테이블 엔트리에 기초하여 상기 제 2 명령들에 액세스하도록 구성되는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  29. 장치로서,
    공유 메모리; 및
    스케줄러를 포함하고,
    상기 공유 메모리는, 제 1 명령 세트 아키텍쳐와 연관된 제 1 프로세서 및 상이한 제 2 명령 세트 아키텍쳐와 연관된 제 2 프로세서에 액세스가능하고, 상기 공유 메모리는 하나 이상의 기능 테이블들을 저장하고, 상기 하나 이상의 기능 테이블들은:
    상기 제 1 명령 세트 아키텍쳐 상에서 실행하도록 컴파일된 운영 시스템의 태스크의 제 1 위치 식별자 ― 상기 제 1 위치 식별자는 상기 공유 메모리의 가상 어드레스에서 상기 제 1 프로세서에 액세스가능함 ―,
    상기 제 2 명령 세트 아키텍쳐 상에서 실행하도록 컴파일된 상기 태스크의 제 2 위치 식별자 ― 상기 제 2 위치 식별자는 상기 공유 메모리의 상기 가상 어드레스에서 상기 제 2 프로세서에 액세스가능함 ― 를 포함하고,
    상기 스케줄러는, 제 1 명령 세트의 제 1 명령들을 사용하여 상기 제 1 프로세서 상에서 상기 태스크의 실행을 스케줄링하고 그리고 상이한 명령 세트의 제 2 명령들을 사용하여 상기 제 2 프로세서 상에서 상기 태스크의 실행을 스케줄링하도록 구성되고,
    상기 제 1 프로세서는 상기 제 1 위치 식별자에 기초하여 상기 제 1 명령들에 액세스하도록 구성되고, 상기 제 2 프로세서는 상기 제 2 위치 식별자에 기초 상기 제 2 명령들에 액세스하도록 구성되는, 장치.
  30. 제 29 항에 있어서,
    상기 하나 이상의 기능 테이블들은,
    상기 제 1 프로세서에 액세스가능하고 그리고 상기 태스크의 제 1 어드레스로의 제 1 점프 또는 브랜치 명령을 저장하는 제 1 테이블; 및
    상기 제 2 프로세서에 액세스가능하고 그리고 상기 태스크의 제 2 어드레스로의 제 2 점프 또는 브랜치 명령을 저장하는 제 2 테이블을 포함하고,
    상기 제 1 어드레스는 상기 제 2 어드레스와 상이하고,
    상기 제 1 테이블 및 상기 제 2 테이블은, 상이한 물리적 어드레스들과 연관되는, 장치.
  31. 제 29 항에 있어서,
    상기 하나 이상의 기능 테이블들은,
    상기 제 1 프로세서에 액세스가능하고 그리고 상기 태스크의 제 1 어드레스로의 제 1 점프 또는 브랜치 명령을 저장하는 제 1 기능 테이블; 및
    상기 제 2 프로세서에 액세스가능하고 그리고 상기 태스크의 제 2 어드레스로의 제 2 점프 또는 브랜치 명령을 저장하는 제 2 기능 테이블을 포함하고,
    상기 제 1 어드레스는 상기 제 2 어드레스와 상이하고,
    상기 제 1 기능 테이블 및 상기 제 2 기능 테이블은, 상이한 물리적 어드레스들과 연관되는, 장치.
  32. 제 29 항에 있어서,
    상기 제 1 프로세서, 상기 제 2 프로세서, 및 상기 메모리는 모바일 컴퓨팅 디바이스에 통합되고,
    상기 하나 이상의 기능 테이블들은, 상기 제 1 명령들과 연관된 제 1 어드레스 및 상기 제 2 명령들과 연관된 제 2 어드레스를 저장하고,
    상기 하나 이상의 기능 테이블들은, 제 3 명령 세트에 적어도 부분적으로 기초하여 인덱싱되고,
    상기 제 1 어드레스는 상기 제 2 어드레스와 상이한, 장치.
KR1020157025501A 2013-02-26 2014-02-14 상이한 명령 세트 아키텍쳐들을 갖는 프로세서들 상에서의 운영 시스템의 실행 KR102140061B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/777,314 2013-02-26
US13/777,314 US10437591B2 (en) 2013-02-26 2013-02-26 Executing an operating system on processors having different instruction set architectures
PCT/US2014/016391 WO2014133784A2 (en) 2013-02-26 2014-02-14 Executing an operating system on processors having different instruction set architectures

Publications (2)

Publication Number Publication Date
KR20150122178A KR20150122178A (ko) 2015-10-30
KR102140061B1 true KR102140061B1 (ko) 2020-07-31

Family

ID=50272697

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157025501A KR102140061B1 (ko) 2013-02-26 2014-02-14 상이한 명령 세트 아키텍쳐들을 갖는 프로세서들 상에서의 운영 시스템의 실행

Country Status (6)

Country Link
US (1) US10437591B2 (ko)
EP (2) EP2962198B1 (ko)
JP (1) JP6430970B2 (ko)
KR (1) KR102140061B1 (ko)
CN (1) CN105074666B (ko)
WO (1) WO2014133784A2 (ko)

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10114756B2 (en) * 2013-03-14 2018-10-30 Qualcomm Incorporated Externally programmable memory management unit
US9606818B2 (en) 2013-03-14 2017-03-28 Qualcomm Incorporated Systems and methods of executing multiple hypervisors using multiple sets of processors
US9396012B2 (en) 2013-03-14 2016-07-19 Qualcomm Incorporated Systems and methods of using a hypervisor with guest operating systems and virtual processors
WO2016003646A1 (en) * 2014-06-30 2016-01-07 Unisys Corporation Enterprise management for secure network communications over ipsec
WO2016090554A1 (en) * 2014-12-09 2016-06-16 Intel Corporation System and method for execution of application code compiled according to two instruction set architectures
CN107273101A (zh) * 2016-04-06 2017-10-20 晨星半导体股份有限公司 嵌入式系统的操作方法与控制芯片
US10223235B2 (en) 2016-05-26 2019-03-05 International Business Machines Corporation Comprehensive testing of computer hardware configurations
US10216599B2 (en) 2016-05-26 2019-02-26 International Business Machines Corporation Comprehensive testing of computer hardware configurations
US10157164B2 (en) * 2016-09-20 2018-12-18 Qualcomm Incorporated Hierarchical synthesis of computer machine instructions
JP6859642B2 (ja) * 2016-09-23 2021-04-14 カシオ計算機株式会社 制御装置、電子時計、処理制御方法、及びプログラム
US10684984B2 (en) * 2016-12-21 2020-06-16 Intel Corporation Computing devices and server systems with processing cores having different instruction set architectures
US10552207B2 (en) 2016-12-21 2020-02-04 Intel Corporation Systems and methods for multi-architecture computing including program stack translation
US10713213B2 (en) 2016-12-21 2020-07-14 Intel Corporation Systems and methods for multi-architecture computing
EP3343267B1 (en) 2016-12-30 2024-01-24 Magic Leap, Inc. Polychromatic light out-coupling apparatus, near-eye displays comprising the same, and method of out-coupling polychromatic light
CN106791152B (zh) * 2016-12-30 2019-08-27 Oppo广东移动通信有限公司 一种通信方法及移动终端
US11275709B2 (en) 2017-05-02 2022-03-15 Intel Corporation Systems and methods for multi-architecture computing
US10578870B2 (en) 2017-07-26 2020-03-03 Magic Leap, Inc. Exit pupil expander
WO2019113570A1 (en) 2017-12-10 2019-06-13 Magic Leap, Inc. Anti-reflective coatings on optical waveguides
KR102491606B1 (ko) * 2018-01-09 2023-01-26 삼성전자주식회사 커맨드 세트 기반 리플레이를 통해 수행 정보를 수집하는 프로세서 장치
US10755676B2 (en) 2018-03-15 2020-08-25 Magic Leap, Inc. Image correction due to deformation of components of a viewing device
US11579441B2 (en) 2018-07-02 2023-02-14 Magic Leap, Inc. Pixel intensity modulation using modifying gain values
CN112585581A (zh) * 2018-07-10 2021-03-30 奇跃公司 用于跨指令集架构过程调用的线程编织
EP3830631A4 (en) 2018-08-03 2021-10-27 Magic Leap, Inc. NON-FUSED POSE DRIFT CORRECTION OF A FUSED TOTEM IN A USER INTERACTION SYSTEM
US10915493B2 (en) 2018-09-25 2021-02-09 International Business Machines Corporation Component building blocks and optimized compositions thereof in disaggregated datacenters
US11012423B2 (en) 2018-09-25 2021-05-18 International Business Machines Corporation Maximizing resource utilization through efficient component communication in disaggregated datacenters
US11650849B2 (en) 2018-09-25 2023-05-16 International Business Machines Corporation Efficient component communication through accelerator switching in disaggregated datacenters
US11163713B2 (en) 2018-09-25 2021-11-02 International Business Machines Corporation Efficient component communication through protocol switching in disaggregated datacenters
US10802988B2 (en) 2018-09-25 2020-10-13 International Business Machines Corporation Dynamic memory-based communication in disaggregated datacenters
US11182322B2 (en) * 2018-09-25 2021-11-23 International Business Machines Corporation Efficient component communication through resource rewiring in disaggregated datacenters
US10831698B2 (en) 2018-09-25 2020-11-10 International Business Machines Corporation Maximizing high link bandwidth utilization through efficient component communication in disaggregated datacenters
KR20210017249A (ko) * 2019-08-07 2021-02-17 삼성전자주식회사 프로세서 코어들과 다양한 버전의 isa들을 이용하여 명령어들을 실행하는 전자 장치
US11080400B2 (en) * 2019-08-28 2021-08-03 Palo Alto Networks, Inc. Analyzing multiple CPU architecture malware samples
US10840961B1 (en) * 2019-10-23 2020-11-17 Motorola Solutions, Inc. Method and apparatus for managing feature based user input routing in a multi-processor architecture using single user interface control
US11334324B2 (en) * 2019-11-08 2022-05-17 Software Ag Systems and/or methods for error-free implementation of non-java program code on special purpose processors
US11256522B2 (en) * 2019-11-22 2022-02-22 Advanced Micro Devices, Inc. Loader and runtime operations for heterogeneous code objects
WO2021151487A1 (en) * 2020-01-30 2021-08-05 Huawei Technologies Co., Ltd. Devices, methods and computer programs for executing extension set processor instructions on a multi-core processor
US11962518B2 (en) 2020-06-02 2024-04-16 VMware LLC Hardware acceleration techniques using flow selection
US11716383B2 (en) 2020-09-28 2023-08-01 Vmware, Inc. Accessing multiple external storages to present an emulated local storage through a NIC
US11606310B2 (en) 2020-09-28 2023-03-14 Vmware, Inc. Flow processing offload using virtual port identifiers
US11829793B2 (en) 2020-09-28 2023-11-28 Vmware, Inc. Unified management of virtual machines and bare metal computers
US11636053B2 (en) 2020-09-28 2023-04-25 Vmware, Inc. Emulating a local storage by accessing an external storage through a shared port of a NIC
CN113176928B (zh) * 2021-04-27 2022-08-30 深圳市研唐科技有限公司 一种异构虚拟机的运行方法和装置
US11748074B2 (en) 2021-05-28 2023-09-05 Software Ag User exit daemon for use with special-purpose processor, mainframe including user exit daemon, and associated methods
US11995024B2 (en) 2021-12-22 2024-05-28 VMware LLC State sharing between smart NICs
US11863376B2 (en) 2021-12-22 2024-01-02 Vmware, Inc. Smart NIC leader election
US11899594B2 (en) 2022-06-21 2024-02-13 VMware LLC Maintenance of data message classification cache on smart NIC
US11928062B2 (en) 2022-06-21 2024-03-12 VMware LLC Accelerating data message classification with smart NICs
US11928367B2 (en) 2022-06-21 2024-03-12 VMware LLC Logical memory addressing for network devices

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007004382A (ja) * 2005-06-22 2007-01-11 Renesas Technology Corp マルチプロセッサシステム
US20080244599A1 (en) * 2007-03-30 2008-10-02 Microsoft Corporation Master And Subordinate Operating System Kernels For Heterogeneous Multiprocessor Systems

Family Cites Families (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62286155A (ja) 1986-06-05 1987-12-12 Sharp Corp マルチcpu制御方式
US5369767A (en) * 1989-05-17 1994-11-29 International Business Machines Corp. Servicing interrupt requests in a data processing system without using the services of an operating system
US6286092B1 (en) 1999-05-12 2001-09-04 Ati International Srl Paged based memory address translation table update method and apparatus
US6526462B1 (en) 1999-11-19 2003-02-25 Hammam Elabd Programmable multi-tasking memory management system
US6904483B2 (en) 2001-03-20 2005-06-07 Wind River Systems, Inc. System and method for priority inheritance
GB2378277B (en) 2001-07-31 2003-06-25 Sun Microsystems Inc Multiple address translations
JP2003099272A (ja) 2001-09-20 2003-04-04 Ricoh Co Ltd タスク切替システムと方法およびdspとモデム
US6981072B2 (en) 2003-06-05 2005-12-27 International Business Machines Corporation Memory management in multiprocessor system
US7424709B2 (en) 2003-09-15 2008-09-09 Intel Corporation Use of multiple virtual machine monitors to handle privileged events
US20050251806A1 (en) 2004-05-10 2005-11-10 Auslander Marc A Enhancement of real-time operating system functionality using a hypervisor
US7962909B1 (en) 2004-05-11 2011-06-14 Globalfoundries Inc. Limiting guest execution
US8271976B2 (en) 2004-06-30 2012-09-18 Microsoft Corporation Systems and methods for initializing multiple virtual processors within a single virtual machine
US7299337B2 (en) 2005-05-12 2007-11-20 Traut Eric P Enhanced shadow page table algorithms
US20070006178A1 (en) 2005-05-12 2007-01-04 Microsoft Corporation Function-level just-in-time translation engine with multiple pass optimization
US7739476B2 (en) 2005-11-04 2010-06-15 Apple Inc. R and C bit update handling
US7945913B2 (en) 2006-01-19 2011-05-17 International Business Machines Corporation Method, system and computer program product for optimizing allocation of resources on partitions of a data processing system
JP4936517B2 (ja) 2006-06-06 2012-05-23 学校法人早稲田大学 ヘテロジニアス・マルチプロセッサシステムの制御方法及びマルチグレイン並列化コンパイラ
US8468532B2 (en) * 2006-06-21 2013-06-18 International Business Machines Corporation Adjusting CPU time allocated to next thread based on gathered data in heterogeneous processor system having plurality of different instruction set architectures
US8082551B2 (en) 2006-10-30 2011-12-20 Hewlett-Packard Development Company, L.P. System and method for sharing a trusted platform module
US7685409B2 (en) 2007-02-21 2010-03-23 Qualcomm Incorporated On-demand multi-thread multimedia processor
US8250254B2 (en) 2007-07-31 2012-08-21 Intel Corporation Offloading input/output (I/O) virtualization operations to a processor
US8284205B2 (en) 2007-10-24 2012-10-09 Apple Inc. Methods and apparatuses for load balancing between multiple processing units
US8296743B2 (en) 2007-12-17 2012-10-23 Intel Corporation Compiler and runtime for heterogeneous multiprocessor systems
US8245236B2 (en) 2008-02-27 2012-08-14 International Business Machines Corporation Lock based moving of threads in a shared processor partitioning environment
US20090282198A1 (en) 2008-05-08 2009-11-12 Texas Instruments Incorporated Systems and methods for optimizing buffer sharing between cache-incoherent cores
US8312230B2 (en) 2008-06-06 2012-11-13 International Business Machines Corporation Dynamic control of partition memory affinity in a shared memory partition data processing system
US8516260B2 (en) 2008-10-27 2013-08-20 Advanced Micro Devices, Inc. Method, apparatus, and device for providing security among a calling function and a target function
US8301863B2 (en) 2008-11-17 2012-10-30 International Business Machines Corporation Recursive logical partition real memory map
CN101739235A (zh) 2008-11-26 2010-06-16 中国科学院微电子研究所 将32位dsp与通用risc cpu无缝混链的处理器装置
US8291414B2 (en) 2008-12-11 2012-10-16 International Business Machines Corporation Shared resource service provisioning using a virtual machine manager
US20100242014A1 (en) 2009-03-17 2010-09-23 Xiaohan Zhu Symmetric multi-processor operating system for asymmetric multi-processor architecture
US20110010716A1 (en) * 2009-06-12 2011-01-13 Arvind Raghuraman Domain Bounding for Symmetric Multiprocessing Systems
US9152200B2 (en) 2009-06-23 2015-10-06 Hewlett-Packard Development Company, L.P. Resource and power management using nested heterogeneous hypervisors
US8479196B2 (en) 2009-09-22 2013-07-02 International Business Machines Corporation Nested virtualization performance in a computer system
CN102741828B (zh) 2009-10-30 2015-12-09 英特尔公司 对计算机平台的异构处理器的双向通信支持
US8868848B2 (en) 2009-12-21 2014-10-21 Intel Corporation Sharing virtual memory-based multi-version data between the heterogenous processors of a computer platform
US8443376B2 (en) 2010-06-01 2013-05-14 Microsoft Corporation Hypervisor scheduler
US20110320766A1 (en) 2010-06-29 2011-12-29 Youfeng Wu Apparatus, method, and system for improving power, performance efficiency by coupling a first core type with a second core type
WO2012023150A2 (en) 2010-08-19 2012-02-23 Ineda Systems Pvt. Ltd Handheld electronic devices
US8739171B2 (en) 2010-08-31 2014-05-27 International Business Machines Corporation High-throughput-computing in a hybrid computing environment
US20120072638A1 (en) 2010-09-16 2012-03-22 Unisys Corp. Single step processing of memory mapped accesses in a hypervisor
JP5875530B2 (ja) 2011-01-31 2016-03-02 株式会社ソシオネクスト プログラム生成装置、プログラム生成方法、プロセッサ装置及びマルチプロセッサシステム
US8307169B2 (en) 2011-03-10 2012-11-06 Safenet, Inc. Protecting guest virtual machine memory
JP5648544B2 (ja) 2011-03-15 2015-01-07 富士通株式会社 スケジューリングプログラム、および情報処理装置
US8984330B2 (en) 2011-03-28 2015-03-17 Siemens Corporation Fault-tolerant replication architecture
WO2012141677A1 (en) 2011-04-11 2012-10-18 Hewlett-Packard Development Company, L.P. Performing a task in a system having different types of hardware resources
US9043562B2 (en) 2011-04-20 2015-05-26 Microsoft Technology Licensing, Llc Virtual machine trigger
US8677360B2 (en) 2011-05-12 2014-03-18 Microsoft Corporation Thread-related actions based on historical thread behaviors
US20130013889A1 (en) 2011-07-06 2013-01-10 Jaikumar Devaraj Memory management unit using stream identifiers
US9250969B2 (en) 2011-08-30 2016-02-02 At&T Intellectual Property I, L.P. Tagging a copy of memory of a virtual machine with information for fetching of relevant portions of the memory
US20140053272A1 (en) 2012-08-20 2014-02-20 Sandor Lukacs Multilevel Introspection of Nested Virtual Machines
US20140101405A1 (en) * 2012-10-05 2014-04-10 Advanced Micro Devices, Inc. Reducing cold tlb misses in a heterogeneous computing system
US9606818B2 (en) 2013-03-14 2017-03-28 Qualcomm Incorporated Systems and methods of executing multiple hypervisors using multiple sets of processors
US9396012B2 (en) 2013-03-14 2016-07-19 Qualcomm Incorporated Systems and methods of using a hypervisor with guest operating systems and virtual processors
US10114756B2 (en) 2013-03-14 2018-10-30 Qualcomm Incorporated Externally programmable memory management unit

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007004382A (ja) * 2005-06-22 2007-01-11 Renesas Technology Corp マルチプロセッサシステム
US20080244599A1 (en) * 2007-03-30 2008-10-02 Microsoft Corporation Master And Subordinate Operating System Kernels For Heterogeneous Multiprocessor Systems

Also Published As

Publication number Publication date
CN105074666A (zh) 2015-11-18
EP3525099A1 (en) 2019-08-14
US20140244983A1 (en) 2014-08-28
WO2014133784A3 (en) 2014-10-23
KR20150122178A (ko) 2015-10-30
WO2014133784A2 (en) 2014-09-04
JP6430970B2 (ja) 2018-11-28
JP2016507849A (ja) 2016-03-10
EP2962198B1 (en) 2019-04-24
US10437591B2 (en) 2019-10-08
CN105074666B (zh) 2020-04-21
EP2962198A2 (en) 2016-01-06

Similar Documents

Publication Publication Date Title
KR102140061B1 (ko) 상이한 명령 세트 아키텍쳐들을 갖는 프로세서들 상에서의 운영 시스템의 실행
US9529643B2 (en) Method and system for accelerating task control flow
EP2972898B1 (en) Externally programmable memory management unit
US9606818B2 (en) Systems and methods of executing multiple hypervisors using multiple sets of processors
KR101759266B1 (ko) 프로세서들에 걸쳐 데이터-병렬 쓰레드들을 지닌 프로세싱 로직을 매핑하는 방법
US9619298B2 (en) Scheduling computing tasks for multi-processor systems based on resource requirements
US20110047544A1 (en) Para-virtualization in a nested virtualization enviroment
JP5666473B2 (ja) マルチスレッド式データ処理システム
KR102187912B1 (ko) 인터럽트들의 세트들을 구성하는 장치 및 방법
JP2004362564A (ja) 統一イベント通知およびコンシューマ−プロデューサメモリ演算による仮想プロセッサ方法および装置
JP2017538212A (ja) 中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構
JP5982581B2 (ja) 補助プロセッサへのホストオペレーティングシステムサービスの公開
US20060212840A1 (en) Method and system for efficient use of secondary threads in a multiple execution path processor
US20130135327A1 (en) Saving and Restoring Non-Shader State Using a Command Processor
US11526358B2 (en) Deterministic execution replay for multicore systems
US9710315B2 (en) Notification of blocking tasks
US20150363227A1 (en) Data processing unit and method for operating a data processing unit
CN114579264A (zh) 处理装置、处理系统和处理方法

Legal Events

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