(57)【特許請求の範囲】
【請求項１】
補助プロセッサ上で汎用アプリケーション動作を実行する方法であって、
コンピューティングデバイスのアプリケーションプロセッサ中で第1のプロセスと第2のプロセスとを作成するステップであって、前記第1および第2のプロセスが第1のコンテキストを有する、作成するステップと、
前記アプリケーションプロセッサの前記第2のプロセスが、前記補助プロセッサの第1のサービスを呼び出し、前記第1のサービスからの通信を待つブロック状態に入るステップと、
前記第1のプロセスによって、前記補助プロセッサの第2のサービスを呼び出すステップであって、前記第2のサービスが第2のコンテキストを有する、呼び出すステップと、
前記補助プロセッサの前記第1のサービスからの前記通信を前記第2のプロセスが受信したことに応答して、前記補助プロセッサの前記第1のサービスによって前記第2のプロセスをアンブロックするステップと、
前記アンブロックされた第2のプロセスによって、前記アプリケーションプロセッサ中で前記第1のコンテキスト内のコンテキストベース動作を実行するステップと、
前記アプリケーションプロセッサから前記補助プロセッサにコンテキストベース動作を実行するステップの結果を送るステップであって、前記補助プロセッサが、前記第2のサービスを達成するためにコンテキストベース動作を実行するステップの前記結果に基づいて追加の動作を実行する、送るステップと、
前記第1のプロセスによって、前記第2のサービスを達成したときに前記補助プロセッサ中で生成された情報を受信するステップと
を含む、方法。
【請求項２】
前記補助プロセッサの第1のサービスを呼び出すステップが、デジタル信号プロセッサ中で前記第1のサービスを呼び出すステップを含む、請求項1に記載の方法。
【請求項３】
前記補助プロセッサの第1のサービスを呼び出すステップが、モデムプロセッサ中で前記第1のサービスを呼び出すステップを含む、請求項1に記載の方法。
【請求項４】
前記補助プロセッサの第1のサービスを呼び出すステップが、前記コンピューティングデバイスのプロセッサ中で前記第1のサービスを呼び出すステップを含む、請求項1に記載の方法。
【請求項５】
前記補助プロセッサの第1のサービスを呼び出すステップが、リモートコンピューティングデバイスのプロセッサ中で前記第1のサービスを呼び出すステップを含む、請求項1に記載の方法。
【請求項６】
前記アプリケーションプロセッサから前記補助プロセッサにコンテキストベース動作を実行するステップの結果を送るステップは、前記アプリケーションプロセッサが通信バス上に、前記生成されたコンテキストベース情報をプッシュするステップを含む、請求項1に記載の方法。
【請求項７】
プロセッサと、
動作を実行するためのプロセッサ実行可能命令で構成された、前記プロセッサ上で実行されるアプリケーションプロセッサと
を含み、前記動作は、
前記アプリケーションプロセッサ中で第1のプロセスと第2のプロセスとを作成するステップであって、前記第1および第2のプロセスが第1のコンテキストを有する、作成するステップと、
前記アプリケーションプロセッサの前記第2のプロセスが、補助プロセッサの第１のサービスを呼び出し、前記第1のサービスからの通信を待つブロック状態に入るステップと、
前記第1のプロセスによって、前記補助プロセッサの第2のサービスを呼び出すステップであって、前記第2のサービスが第2のコンテキストを有する、呼び出すステップと、
前記補助プロセッサの前記第1のサービスからの前記通信を受信したことに応答して前記第2のプロセスをアンブロックするステップと、
前記アンブロックされた第2のプロセスによって、前記第1のコンテキスト内のコンテキストベース動作を実行するステップと、
前記補助プロセッサに、前記第2のサービスを達成するためにコンテキストベース動作を実行するステップの結果に基づいて追加の動作を実行させるために、前記補助プロセッサにコンテキストベース動作を実行するステップの前記結果を送るステップと、
前記第1のプロセスによって、前記第2のサービスを達成したときに前記補助プロセッサ中で生成された情報を受信するステップと
を含む、コンピューティングデバイス。
【請求項８】
前記補助プロセッサがデジタル信号プロセッサであり、前記アプリケーションプロセッサは、前記補助プロセッサの第1のサービスを呼び出すステップが前記デジタル信号プロセッサのサービスを呼び出すステップを含むようにプロセッサ実行可能命令で構成された、請求項7に記載のコンピューティングデバイス。
【請求項９】
前記補助プロセッサがモデムプロセッサであり、前記アプリケーションプロセッサは、前記補助プロセッサの第1のサービスを呼び出すステップが前記モデムプロセッサのサービスを呼び出すステップを含むようにプロセッサ実行可能命令で構成された、請求項7に記載のコンピューティングデバイス。
【請求項１０】
前記アプリケーションプロセッサは、前記補助プロセッサの第1のサービスを呼び出すステップが前記コンピューティングデバイスのプロセッサ中の前記第1のサービスを呼び出すステップを含むようにプロセッサ実行可能命令で構成された、請求項7に記載のコンピューティングデバイス。
【請求項１１】
前記アプリケーションプロセッサは、前記補助プロセッサの第1のサービスを呼び出すステップがリモートコンピューティングデバイスのプロセッサ中の前記第1のサービスを呼び出すステップを含むようにプロセッサ実行可能命令で構成された、請求項7に記載のコンピューティングデバイス。
【請求項１２】
通信バスをさらに含み、前記アプリケーションプロセッサは、前記アプリケーションプロセッサから前記補助プロセッサにコンテキストベース動作を実行するステップの結果を送るステップが、前記アプリケーションプロセッサが前記通信バス上に、前記生成されたコンテキストベース情報をプッシュするステップを含むようにプロセッサ実行可能命令で構成された、請求項7に記載のコンピューティングデバイス。
【請求項１３】
アプリケーションプロセッサと、
第1のプロセスと第2のプロセスとが第1のコンテキストを有するように前記アプリケーションプロセッサ中で前記第1および第2のプロセスを作成するための手段と、
前記アプリケーションプロセッサの前記第2のプロセスに、補助プロセッサの第1のサービスを呼び出させ、前記第1のサービスからの通信を待つブロック状態に入らせるための手段と、
前記第1のプロセスに、前記補助プロセッサの第2のサービスを呼び出させるための手段であって、前記第2のサービスが第2のコンテキストを有する、呼び出させるための手段と、
前記補助プロセッサの前記第1のサービスからの前記通信を受信したことに応答して前記第2のプロセスをアンブロックするための手段と、
前記アンブロックされた第2のプロセスに、前記アプリケーションプロセッサ中で前記第１のコンテキスト内のコンテキストベース動作を実行させるための手段と、
前記補助プロセッサに、前記第2のサービスを達成するためにコンテキストベース動作を実行するステップの結果に基づいて追加の動作を実行させるために、前記アプリケーションプロセッサから前記補助プロセッサにコンテキストベース動作を実行するステップの前記結果を送るための手段と、
前記アプリケーションプロセッサ中で、前記第2のサービスを達成したときに前記補助プロセッサ中で生成された情報を受信するための手段と
を含む、コンピューティングデバイス。
【請求項１４】
前記補助プロセッサの第1のサービスを呼び出すための手段が、デジタル信号プロセッサ中で前記第1のサービスを呼び出すための手段を含む、請求項13に記載のコンピューティングデバイス。
【請求項１５】
前記補助プロセッサの第1のサービスを呼び出すための手段が、モデムプロセッサ中で前記第1のサービスを呼び出すための手段を含む、請求項13に記載のコンピューティングデバイス。
【請求項１６】
前記補助プロセッサの第1のサービスを呼び出すための手段が、前記コンピューティングデバイスのプロセッサ中で前記第1のサービスを呼び出すための手段を含む、請求項13に記載のコンピューティングデバイス。
【請求項１７】
前記補助プロセッサの第1のサービスを呼び出すための手段が、リモートコンピューティングデバイスのプロセッサ中で前記第1のサービスを呼び出すための手段を含む、請求項13に記載のコンピューティングデバイス。
【請求項１８】
前記アプリケーションプロセッサから前記補助プロセッサにコンテキストベース動作を実行するステップの結果を送るための手段は、通信バス上に、前記生成されたコンテキストベース情報をプッシュするための手段を含む、請求項13に記載のコンピューティングデバイス。
【請求項１９】
補助プロセッサに汎用アプリケーション動作をオフロードするための動作をアプリケーションプロセッサに実行させるように構成されたアプリケーションプロセッサ実行可能ソフトウェア命令を記憶した非一時的コンピュータ可読記憶媒体であって、前記動作が、
前記アプリケーションプロセッサ中で第1のプロセスと第2のプロセスとを作成するステップであって、前記第1および第2のプロセスが第1のコンテキストを有する、作成するステップと、
前記アプリケーションプロセッサの前記第2のプロセスが、前記補助プロセッサの第1のサービスを呼び出し、前記第1のサービスからの通信を待つブロック状態に入るステップと、
前記第1のプロセスによって、前記補助プロセッサの第2のサービスを呼び出すステップであって、前記第2のサービスが第2のコンテキストを有する、呼び出すステップと、
前記補助プロセッサの前記第1のサービスからの前記通信を受信したことに応答して前記第2のプロセスをアンブロックするステップと、
前記アンブロックされた第2のプロセスによって、前記アプリケーションプロセッサ中で前記第1のコンテキスト内のコンテキストベース動作を実行するステップと、
前記アプリケーションプロセッサから前記補助プロセッサにコンテキストベース動作を実行するステップの結果を送るステップであって、前記補助プロセッサが、前記第2のサービスを達成するためにコンテキストベース動作を実行するステップの前記結果に基づいて追加の動作を実行する、送るステップと、
前記第1のプロセスによって、前記第2のサービスを達成したときに前記補助プロセッサ中で生成された情報を受信するステップと
を含む、非一時的コンピュータ可読記憶媒体。
【請求項２０】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記補助プロセッサの第1のサービスを呼び出すステップが、デジタル信号プロセッサ中で前記第1のサービスを呼び出すステップを含むように動作をプロセッサに実行させるように構成された、請求項19に記載の非一時的コンピュータ可読記憶媒体。
【請求項２１】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記補助プロセッサの第1のサービスを呼び出すステップが、モデムプロセッサ中で前記第1のサービスを呼び出すステップを含むように動作をプロセッサに実行させるように構成された、請求項19に記載の非一時的コンピュータ可読記憶媒体。
【請求項２２】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記補助プロセッサの第1のサービスを呼び出すステップが、前記補助プロセッサを含むコンピューティングデバイス中で前記第1のサービスを呼び出すステップを含むように動作をプロセッサに実行させるように構成された、請求項19に記載の非一時的コンピュータ可読記憶媒体。
【請求項２３】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記補助プロセッサの第1のサービスを呼び出すステップが、リモートコンピューティングデバイス中で前記第1のサービスを呼び出すステップを含むように動作をプロセッサに実行させるように構成された、請求項19に記載の非一時的コンピュータ可読記憶媒体。
【請求項２４】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記アプリケーションプロセッサから前記補助プロセッサにコンテキストベース動作を実行するステップの結果を送るステップが、前記アプリケーションプロセッサが通信バス上に、前記生成されたコンテキストベース情報をプッシュするステップを含むように動作をプロセッサに実行させるように構成された、請求項19に記載の非一時的コンピュータ可読記憶媒体。
【請求項２５】
プロセッサと、
補助プロセッサと、
前記補助プロセッサに結合された前記プロセッサ上で実行されるアプリケーションプロセッサと
を含み、
前記アプリケーションプロセッサが、
前記アプリケーションプロセッサ中で第1のプロセスと第2のプロセスとを作成するステップであって、前記第1および第2のプロセスが第1のコンテキストを有する、作成するステップと、
前記アプリケーションプロセッサの前記第2のプロセスが、前記補助プロセッサの第1のサービスを呼び出し、第1のサービスからの通信を待つブロック状態に入るステップと、
前記第1のプロセスによって、前記補助プロセッサの第2のサービスを呼び出すステップと、
前記補助プロセッサの前記第1のサービスからの前記通信を受信したことに応答して前記第2のプロセスをアンブロックするステップと、
前記アンブロックされた第2のプロセスによって、前記第1のコンテキスト内のコンテキストベース動作を実行するステップと、
前記補助プロセッサにコンテキストベース動作を実行するステップの結果を送るステップと、
前記第1のプロセスによって、前記第2のサービスを達成したときに前記補助プロセッサ中で生成された情報を受信するステップと
を含む動作を実行するためのアプリケーションプロセッサ実行可能命令で構成され、
前記補助プロセッサが、
前記アプリケーションプロセッサの前記第2のプロセスを前記ブロック状態に入らせるために前記第1のサービスを実行するステップと、
前記第1のプロセスからプロシージャ呼出しを受信したことに応答して前記第2のサービスを実行するステップと、
前記第1のコンテキストへのアクセスを必要とする動作に遭遇すると前記第2のサービスの実行を中断するステップと、
前記第1のサービスから、前記アプリケーションプロセッサ中で前記第2のプロセスをアンブロックするために前記通信を送るステップと、
前記第1のコンテキスト中の前記アプリケーションプロセッサ上で実行されたコンテキストベース動作を実行するステップの前記結果を受信するステップと、
前記第2のサービスの実行を再開し、コンテキストベース動作を実行するステップの前記受信された結果に基づいて追加の動作を実行するステップと
を含む動作を実行するための補助プロセッサ実行可能命令で構成された、システム。
【請求項２６】
前記補助プロセッサがデジタル信号プロセッサであり、前記アプリケーションプロセッサは、前記補助プロセッサの第1のサービスを呼び出すステップが前記デジタル信号プロセッサのサービスを呼び出すステップを含むようにプロセッサ実行可能命令で構成された、請求項25に記載のシステム。
【請求項２７】
前記補助プロセッサがモデムプロセッサであり、前記アプリケーションプロセッサは、前記補助プロセッサの第1のサービスを呼び出すステップが前記モデムプロセッサのサービスを呼び出すステップを含むようにプロセッサ実行可能命令で構成された、請求項25に記載のシステム。
【請求項２８】
前記アプリケーションプロセッサは、前記補助プロセッサの第1のサービスを呼び出すステップが前記システムのプロセッサ中の前記第1のサービスを呼び出すステップを含むようにプロセッサ実行可能命令で構成された、請求項25に記載のシステム。
【請求項２９】
前記アプリケーションプロセッサは、前記補助プロセッサの第1のサービスを呼び出すステップがリモートコンピューティングデバイスのプロセッサ中の前記第1のサービスを呼び出すステップを含むようにプロセッサ実行可能命令で構成された、請求項25に記載のシステム。
【請求項３０】
通信バスをさらに含み、前記アプリケーションプロセッサは、前記アプリケーションプロセッサから前記補助プロセッサにコンテキストベース動作を実行するステップの結果を送るステップが、前記アプリケーションプロセッサが前記通信バス上に、前記生成されたコンテキストベース情報をプッシュするステップを含むようにプロセッサ実行可能命令で構成された、請求項25に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本出願は、その内容全体が参照により本明細書に組み込まれる、2012年11月9日に出願された「Exposing Host Operating System Services to an Auxiliary Processor」と題する米国仮出願第61/724,378号の優先権の利益を主張する。
【背景技術】
【０００２】
モバイル技術およびワイヤレス技術は、過去数年の間に爆発的な発展をとげてきた。この発展は、より優れた通信、ハードウェア、およびより信頼できるプロトコルによって促進されている。ワイヤレスサービスプロバイダは現在、向上し続ける多数の機能およびサービスを自分の顧客に提供し、かつ情報、リソースおよび通信に対するかつてないレベルのアクセスをユーザに提供することができる。これらの強化と歩調を合わせるために、モバイル電子デバイス(たとえば、携帯電話、時計、ヘッドフォン、遠隔制御装置など)は、今までよりも複雑になり、今や一般的に、多重プロセッサ、システムオンチップ(SoC)、およびモバイルデバイスユーザが彼らのモバイルデバイス上で複雑で電力負荷の大きいソフトウェアアプリケーション(たとえば、ビデオストリーミング、ビデオ処理など)を実行することを可能にする他のリソースを含む。複雑さおよび電力消費量のこの増加に伴い、モバイルデバイスのリソースおよび能力をより良く利用する新しい改善された処理ソリューションが消費者に有益であろう。
【発明の概要】
【課題を解決するための手段】
【０００３】
様々な態様は、補助プロセッサ上で汎用アプリケーション動作を実行する方法であって、コンピューティングデバイスのアプリケーションプロセッサ中で第1のプロセスと第2のプロセスとを作成するステップであって、第1および第2のプロセスが第1のコンテキストを有する、作成するステップと、第2のプロセスによって、補助プロセッサの第1のサービスを呼び出すステップであって、第1のサービスによって、第2のプロセスをブロック状態に入らせる、呼び出すステップと、第1のプロセスによって、補助プロセッサの第2のサービスを呼び出すステップであって、第2のサービスが第2のコンテキストを有する、呼び出すステップと、補助プロセッサの第1のサービスからの通信を受信したことに応答して第2のプロセスをアンブロックするステップと、アンブロックされた第2のプロセスによって、アプリケーションプロセッサ中で第1のコンテキスト内のコンテキストベース動作を実行するステップと、アプリケーションプロセッサから補助プロセッサにコンテキストベース動作を実行するステップの結果を送るステップであって、補助プロセッサが、第2のサービスを達成するためにコンテキストベース動作を実行するステップの結果に基づいて追加の動作を実行する、送るステップと、第1のプロセスによって、第2のサービスを達成したときに補助プロセッサ中で生成された情報を受信するステップとを含む、方法を含む。
【０００４】
一態様では、補助プロセッサの第1のサービスを呼び出すステップは、デジタル信号プロセッサ中で第1のサービスを呼び出すステップを含み得る。さらなる態様では、補助プロセッサの第1のサービスを呼び出すステップは、モデムプロセッサ中で第1のサービスを呼び出すステップを含み得る。さらなる態様では、補助プロセッサの第1のサービスを呼び出すステップは、コンピューティングデバイスのプロセッサ中で第1のサービスを呼び出すステップを含み得る。さらなる態様では、補助プロセッサの第1のサービスを呼び出すステップは、リモートコンピューティングデバイスのプロセッサ中で第1のサービスを呼び出すステップを含み得る。さらなる態様では、アプリケーションプロセッサ中でコンテキストベース動作を実行するステップは、アンブロックされた第2のプロセスによって、補助プロセッサ中で追加の動作を実行するために第2のサービスが必要とするコンテキストベース情報を生成するためにアプリケーションプロセッサ中でコンテキストベース動作を実行するステップを含み得る。さらなる態様では、アプリケーションプロセッサから補助プロセッサにコンテキストベース動作を実行するステップの結果を送るステップは、アプリケーションプロセッサが通信バス上に、生成されたコンテキストベース情報をプッシュするステップを含み得る。
【０００５】
さらなる態様は、コンピューティングデバイスであって、第1のプロセスと第2のプロセスとを作成するステップであって、第1および第2のプロセスが第1のコンテキストを有する、作成するステップと、第2のプロセスによって、補助プロセッサの第1のサービスを呼び出すステップであって、第1のサービスによって、第2のプロセスをブロック状態に入らせる、呼び出すステップと、第1のプロセスによって、補助プロセッサの第2のサービスを呼び出すステップであって、第2のサービスが第2のコンテキストを有する、呼び出すステップと、補助プロセッサの第1のサービスからの通信を受信したことに応答して第2のプロセスをアンブロックするステップと、アンブロックされた第2のプロセスによって、第1のコンテキスト内のコンテキストベース動作を実行するステップと、補助プロセッサに、第2のサービスを達成するためにコンテキストベース動作を実行するステップの結果に基づいて追加の動作を実行させるために、補助プロセッサにコンテキストベース動作を実行するステップの結果を送るステップと、第1のプロセスによって、第2のサービスを達成したときに補助プロセッサ中で生成された情報を受信するステップとを含む動作を実行するためのプロセッサ実行可能命令で構成されたアプリケーションプロセッサを含み得るコンピューティングデバイスを含む。
【０００６】
一態様では、補助プロセッサはデジタル信号プロセッサであり得、アプリケーションプロセッサは、補助プロセッサの第1のサービスを呼び出すステップがデジタル信号プロセッサのサービスを呼び出すステップを含み得るようなプロセッサ実行可能命令で構成され得る。さらなる態様では、補助プロセッサはモデムプロセッサであり得、アプリケーションプロセッサは、補助プロセッサの第1のサービスを呼び出すステップがモデムプロセッサのサービスを呼び出すステップを含み得るようなプロセッサ実行可能命令で構成され得る。さらなる態様では、補助プロセッサの第1のサービスを呼び出すステップは、コンピューティングデバイスのプロセッサ中で第1のサービスを呼び出すステップを含み得る。さらなる態様では、補助プロセッサの第1のサービスを呼び出すステップは、リモートコンピューティングデバイスのプロセッサ中で第1のサービスを呼び出すステップを含み得る。さらなる態様では、アプリケーションプロセッサは、アプリケーションプロセッサ中でコンテキストベース動作を実行するステップが、アンブロックされた第2のプロセスによって、補助プロセッサ中で追加の動作を実行するために第2のサービスが必要とするコンテキストベース情報を生成するために、アプリケーションプロセッサ中でコンテキストベース動作を実行するステップを含み得るようなプロセッサ実行可能命令で構成され得る。さらなる態様では、コンピューティングデバイスは、通信バスを含み得、アプリケーションプロセッサは、アプリケーションプロセッサから補助プロセッサにコンテキストベース動作を実行するステップの結果を送るステップが、アプリケーションプロセッサが通信バス上に、生成されたコンテキストベース情報をプッシュするステップを含み得るようなプロセッサ実行可能命令で構成され得る。
【０００７】
さらなる態様は、コンピューティングデバイスであって、アプリケーションプロセッサと、第1のプロセスと第2のプロセスとが第1のコンテキストを有するようにアプリケーションプロセッサ中で第1および第2のプロセスを作成するための手段と、第2のプロセスに、補助プロセッサの第1のサービスを呼び出させるための手段であって、第1のサービスによって、第2のプロセスをブロック状態に入らせる、呼び出させるための手段と、第1のプロセスに、補助プロセッサの第2のサービスを呼び出させるための手段であって、第2のサービスが第2のコンテキストを有する、呼び出させるための手段と、補助プロセッサの第1のサービスからの通信を受信したことに応答して第2のプロセスをアンブロックするための手段と、アンブロックされた第2のプロセスに、アプリケーションプロセッサ中で第1のコンテキスト内のコンテキストベース動作を実行させるための手段と、補助プロセッサに、第2のサービスを達成するためにコンテキストベース動作を実行するステップの結果に基づいて追加の動作を実行させるために、アプリケーションプロセッサから補助プロセッサにコンテキストベース動作を実行するステップの結果を送るための手段と、アプリケーションプロセッサ中で、第2のサービスを達成したときに補助プロセッサ中で生成された情報を受信するための手段とを有するコンピューティングデバイスを含む。
【０００８】
一態様では、補助プロセッサの第1のサービスを呼び出すための手段は、デジタル信号プロセッサ中で第1のサービスを呼び出すための手段を含み得る。さらなる態様では、補助プロセッサの第1のサービスを呼び出すための手段は、モデムプロセッサ中で第1のサービスを呼び出すための手段を含み得る。さらなる態様では、補助プロセッサの第1のサービスを呼び出すための手段は、コンピューティングデバイスのプロセッサ中で第1のサービスを呼び出すための手段を含み得る。さらなる態様では、補助プロセッサの第1のサービスを呼び出すための手段は、リモートコンピューティングデバイスのプロセッサ中で第1のサービスを呼び出すための手段を含み得る。さらなる態様では、アプリケーションプロセッサ中でコンテキストベース動作を実行するための手段は、アンブロックされた第2のプロセスによって、補助プロセッサ中で追加の動作を実行するために第2のサービスが必要とするコンテキストベース情報を生成するために、アプリケーションプロセッサ中でコンテキストベース動作を実行するための手段を含み得る。さらなる態様では、アプリケーションプロセッサから補助プロセッサにコンテキストベース動作を実行するステップの結果を送るための手段は、通信バス上に、生成されたコンテキストベース情報をプッシュするための手段を含み得る。
【０００９】
さらなる態様は、補助プロセッサに汎用アプリケーション動作をオフロードするための動作をプロセッサに実行させるように構成されたアプリケーションプロセッサ実行可能ソフトウェア命令を記憶した非一時的コンピュータ可読記憶媒体であって、動作が、アプリケーションプロセッサ中で第1のプロセスと第2のプロセスとを作成するステップであって、第1および第2のプロセスが第1のコンテキストを有する、作成するステップと、第2のプロセスによって、補助プロセッサの第1のサービスを呼び出すステップであって、第1のサービスによって、第2のプロセスをブロック状態に入らせる、呼び出すステップと、第1のプロセスによって、補助プロセッサの第2のサービスを呼び出すステップであって、第2のサービスが第2のコンテキストを有する、呼び出すステップと、補助プロセッサの第1のサービスからの通信を受信したことに応答して第2のプロセスをアンブロックするステップと、アンブロックされた第2のプロセスによって、アプリケーションプロセッサ中で第1のコンテキスト内のコンテキストベース動作を実行するステップと、アプリケーションプロセッサから補助プロセッサにコンテキストベース動作を実行するステップの結果を送るステップであって、補助プロセッサが、第2のサービスを達成するためにコンテキストベース動作を実行するステップの結果に基づいて追加の動作を実行する、送るステップと、第1のプロセスによって、第2のサービスを達成したときに補助プロセッサ中で生成された情報を受信するステップとを含む、非一時的コンピュータ可読記憶媒体を含む。
【００１０】
一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、補助プロセッサの第1のサービスを呼び出すステップが、デジタル信号プロセッサ中で第1のサービスを呼び出すステップを含み得るような動作をプロセッサに実行させるように構成され得る。さらなる態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、補助プロセッサの第1のサービスを呼び出すステップが、モデムプロセッサ中で第1のサービスを呼び出すステップを含み得るような動作をプロセッサに実行させるように構成され得る。さらなる態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、補助プロセッサの第1のサービスを呼び出すステップが、コンピューティングデバイスのプロセッサ中で第1のサービスを呼び出すステップを含み得るような動作をプロセッサに実行させるように構成され得る。さらなる態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、補助プロセッサの第1のサービスを呼び出すステップが、リモートコンピューティングデバイスのプロセッサ中で第1のサービスを呼び出すステップを含み得るような動作をプロセッサに実行させるように構成され得る。さらなる態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、アプリケーションプロセッサ中でコンテキストベース動作を実行するステップが、アンブロックされた第2のプロセスによって、補助プロセッサ中で追加の動作を実行するために第2のサービスが必要とするコンテキストベース情報を生成するために、アプリケーションプロセッサ中でコンテキストベース動作を実行するステップを含み得るような動作をプロセッサに実行させるように構成され得る。さらなる態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、アプリケーションプロセッサから補助プロセッサにコンテキストベース動作を実行するステップの結果を送るステップが、アプリケーションプロセッサが通信バス上に、生成されたコンテキストベース情報をプッシュするステップを含み得るような動作をプロセッサに実行させるように構成され得る。
【００１１】
さらなる態様は、補助プロセッサと、補助プロセッサに結合されたアプリケーションプロセッサとを有するシステムを含む。アプリケーションプロセッサは、第1のプロセスと第2のプロセスとを作成するステップであって、第1および第2のプロセスが第1のコンテキストを有する、作成するステップと、第2のプロセスによって、第2のプロセスをブロック状態に入らせるために補助プロセッサの第1のサービスを呼び出すステップと、第1のプロセスによって、補助プロセッサの第2のサービスを呼び出すステップと、補助プロセッサの第1のサービスからの通信を受信したことに応答して第2のプロセスをアンブロックするステップと、アンブロックされた第2のプロセスによって、第1のコンテキスト内のコンテキストベース動作を実行するステップと、補助プロセッサにコンテキストベース動作を実行するステップの結果を送るステップと、第1のプロセスによって、第2のサービスを達成したときに補助プロセッサ中で生成された情報を受信するステップとを含む動作を実行するためのアプリケーションプロセッサ実行可能命令で構成され得、補助プロセッサは、アプリケーションプロセッサの第2のプロセスをブロック状態に入らせるために第1のサービスを実行するステップと、第1のプロセスからプロシージャ呼出しを受信したことに応答して第2のサービスを実行するステップと、第1のコンテキストへのアクセスを必要とする動作に遭遇すると第2のサービスの実行を中断するステップと、第1のサービスから、アプリケーションプロセッサ中で第2のプロセスをアンブロックするために通信を送るステップと、第1のコンテキスト中のアプリケーションプロセッサ上で実行されたコンテキストベース動作を実行するステップの結果を受信するステップと、第2のサービスの実行を再開し、コンテキストベース動作を実行するステップの受信された結果に基づいて追加の動作を実行するステップとを含む動作を実行するための補助プロセッサ実行可能命令で構成され得る。
【００１２】
一態様では、補助プロセッサはデジタル信号プロセッサであり得、アプリケーションプロセッサは、補助プロセッサの第1のサービスを呼び出すステップがデジタル信号プロセッサのサービスを呼び出すステップを含み得るようなプロセッサ実行可能命令で構成され得る。さらなる態様では、補助プロセッサはモデムプロセッサであり得、アプリケーションプロセッサは、補助プロセッサの第1のサービスを呼び出すステップがモデムプロセッサのサービスを呼び出すステップを含み得るようなプロセッサ実行可能命令で構成され得る。さらなる態様では、補助プロセッサの第1のサービスを呼び出すステップは、コンピューティングデバイスのプロセッサ中で第1のサービスを呼び出すステップを含み得る。さらなる態様では、補助プロセッサの第1のサービスを呼び出すステップは、リモートコンピューティングデバイスのプロセッサ中で第1のサービスを呼び出すステップを含み得る。さらなる態様では、アプリケーションプロセッサは、アプリケーションプロセッサ中でコンテキストベース動作を実行するステップが、アンブロックされた第2のプロセスによって、補助プロセッサ中で追加の動作を実行するために第2のサービスが必要とするコンテキストベース情報を生成するために、アプリケーションプロセッサ中でコンテキストベース動作を実行するステップを含み得るようなプロセッサ実行可能命令で構成され得る。さらなる態様では、コンピューティングデバイスは、通信バスを含み得、アプリケーションプロセッサは、アプリケーションプロセッサから補助プロセッサにコンテキストベース動作を実行するステップの結果を送るステップが、アプリケーションプロセッサが通信バス上に、生成されたコンテキストベース情報をプッシュするステップを含み得るようなプロセッサ実行可能命令で構成され得る。
【００１３】
本明細書に組み込まれ、本明細書の一部をなす添付の図面は、本発明の例示的実施形態を示し、上記の全般的な説明および下記の詳細な説明とともに、本発明の特徴を説明する働きをする。
【図面の簡単な説明】
【００１４】
【図１】様々な態様を実装するのに好適な、例示的なシステムオンチップのアーキテクチャ図である。
【図２】様々な態様による、プロシージャ呼出しを実行するように構成されたコンピューティングシステム中の例示的な論理および機能構成要素を示す階層ブロック図である。
【図３】補助プロセッサ上で汎用アプリケーション動作を実行するためにプロシージャ呼出しを実行する態様方法のプロセスフロー図である。
【図４】一態様による、プロシージャ呼出しを実行する態様アプリケーションプロセッサ方法のプロセスフロー図である。
【図５】様々な実施形態とともに使用するのに好適な例示的なスマートフォンの図である。
【図６】様々な実施形態とともに使用するのに好適な例示的なラップトップコンピュータの図である。
【図７】様々な実施形態とともに使用するのに好適な例示的なサーバコンピュータの図である。
【発明を実施するための形態】
【００１５】
様々な実施形態について添付の図面を参照しながら詳細に説明する。可能な場合には必ず、同じ参照番号は、図面全体にわたって同じまたは同様の部分を指すために使用される。特定の例および実装形態に行われる参照は、説明を目的とし、本発明の範囲または特許請求の範囲を限定するものではない。
【００１６】
「コンピューティングデバイス」という用語は、総称的に、サーバ、パーソナルコンピュータ、モバイルデバイス、携帯電話、タブレットコンピュータ、ラップトップコンピュータ、ネットブック、ウルトラブック、パームトップコンピュータ、携帯情報端末(PDA)、ワイヤレス電子メール受信機、マルチメディアインターネット対応携帯電話、グローバルポジショニングシステム(GPS)受信機、ワイヤレスゲームコントローラ、ならびに、プログラマブルプロセッサを含む同様のパーソナル電子デバイスのいずれか1つまたはすべてを指すように、本明細書で使用される。様々な態様は、処理電力とバッテリー寿命とが限られたスマートフォンなどのモバイルデバイスに特に有用であるが、これらの態様は、概して、プログラマブルプロセッサを含む任意のコンピューティングデバイスにおいて有用である。
【００１７】
概して、様々な態様は、コンピューティングデバイスの補助プロセッサ上で汎用アプリケーションを実行することを可能にする方法ならびに本方法を実行するように構成されたコンピューティングデバイスおよびプロセッサを含む。本方法は、アプリケーションプロセッサ中で、その両方が第1のコンテキストを有する第1のプロセスと第2のプロセスとを作成するステップを含み得る。実行されたとき、第2のプロセスは、第2のプロセスをブロック状態に入らせる補助プロセッサの第1のサービスを呼び出し得る。次いで、第1のプロセスは、実行されると、補助プロセッサの第2のサービスを呼び出し、補助プロセッサの第1のサービスからの通信を受信したことに応答して第2のプロセスをアンブロックする。アプリケーションプロセッサ上での第2のプロセス動作の実行は、補助プロセッサに第1のコンテキストを送り、これにより、補助プロセッサは、受信したコンテキストを使用して、第1のプロセスによって呼び出されるサービスを達成することが可能になる。補助プロセッサは、次いで、アプリケーションプロセッサ上で実行される第1のプロセスに第2のサービスの結果を送り得る。
【００１８】
様々な態様の動作を遂行するためにプログラマブルプロセッサ上で実行するためのコンピュータプログラムコードすなわち「プログラムコード」は、C、C++、C#、Smalltalk、Java(登録商標)、Java(登録商標)Script、Visual Basic、Structured Query Language (たとえば、Transact-SQL)、Perlなどの高水準プログラミング言語で、または様々な他のプログラミング言語で記述され得る。本明細書で使用するコンピュータ可読記憶媒体に記憶されるプログラムコードまたはプログラムは、そのフォーマットがプロセッサによって理解可能であるマシン語コード(オブジェクトコードなど)を指す。
【００１９】
多くのモバイルコンピューティングデバイスのオペレーティングシステムのカーネルは、(非特権コードが動作する場合)ユーザ空間内に編成され、(特権コードが動作する場合)カーネル空間内に編成される。この分離は、カーネル空間の一部であるコードがGPL許諾される必要がある一方で、ユーザ空間内で動作するコードがGPL許諾されなくてもよい、Android(登録商標)および他の一般公有使用許諾(GPL)環境において特に重要である。本明細書で説明する様々なソフトウェア構成要素/モジュールは、明示的に別段の記述がない場合、カーネル空間またはユーザ空間のいずれかに実装され得ることを理解されたい。
【００２０】
「システムオンチップ」(SOC)という用語は、単一の基板に統合された複数のリソースおよび/またはプロセッサを含む単一の集積回路(IC)チップを指すように本明細書で使用される。単一のSOCは、デジタル、アナログ、混合信号、および無線周波数機能のための回路を含み得る。単一のSOCは、任意の数の汎用および/または専用のプロセッサ(デジタル信号プロセッサ、モデムプロセッサ、ビデオプロセッサなど)、メモリブロック(たとえば、ROM、RAM、Flashなど)、およびリソース(たとえば、タイマー、電圧調整器、発振器など)も含み得る。SOCは、統合されたリソースおよびプロセッサを制御するための、また周辺デバイスを制御するためのソフトウェアも含み得る。
【００２１】
「マルチコアプロセッサ」という用語は、プログラム命令を読み取り、実行するように構成された2つ以上の独立した処理コア(たとえば、CPUコア)を含む単一の集積回路(IC)チップまたはチップパッケージを指すように本明細書で使用される。SOCは、複数のマルチコアプロセッサを含み得、SOCにおける各プロセッサは、コアと呼ばれ得る。「マルチプロセッサ」という用語は、本明細書では、プログラム命令を読み出して実行するように構成された2つ以上の処理ユニットを含むシステムまたはデバイスを指すように使用される。
【００２２】
本出願で使用されるように、「コンポーネント」、「モジュール」、「システム」、「サービス」、「エンジン」、「リスナー」、「マネージャ」などの用語は、限定はしないが、特定の動作または機能を実行するように構成された、ハードウェア、ファームウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、または実行中のソフトウェアなど、コンピュータ関連のエンティティを含むものとする。たとえば、コンポーネントは、限定はされないが、プロセッサ上で実行されるプロセス、プロセッサ、オブジェクト、実行ファイル、実行スレッド、プログラム、および/またはコンピュータであり得る。例を挙げると、コンピューティングデバイス上で実行されるアプリケーションとコンピューティングデバイスの両方が、コンポーネントと呼ばれ得る。1つまたは複数のコンポーネントは、プロセスおよび/または実行スレッドの中に存在してよく、1つのコンポーネントは、1つのプロセッサまたはコアに局在してよく、かつ/または2つ以上のプロセッサまたはコアの間に分散してよい。加えて、これらのコンポーネントは、様々な命令および/またはデータ構造を記憶している様々な非一時的コンピュータ可読媒体から実行することができる。コンポーネントは、ローカルプロセスおよび/またはリモートプロセス、関数呼出しまたはプロシージャ呼出し、電子信号、データパケット、メモリ読出し/書込み、ならびに他の知られているコンピュータ、プロセッサ、および/またはプロセスに関する通信方法によって通信できる。
【００２３】
「コンテキスト情報」という用語は、本明細書では、ホストオペレーティングシステム(たとえば、Android、Windows(登録商標) 8、LINUX(登録商標)など)の中で実行されるプロセスに対して利用可能な任意の情報を指すように使用され、オペレーティングシステムサービス、ライブラリ、ファイルシステム、およびプロセスまたはアプリケーションプログラムがアクセス可能な他のリソースを識別する、動作状態データならびに許可および/またはアクセス制限を含み得る。
【００２４】
一般に、複数のプロセスが単一のプロセッサで同時に実行されているように見えるように、プロセスがプロセッサ上で短いタイムスライスの間に実行される。プロセスがタイムスライスの終わりにおいてプロセッサから除かれると、プロセスの現在の動作状態に関する情報がメモリに記憶されるので、プロセスは、プロセッサ上での実行に戻るときに、シームレスに動作を再開することができる。この動作状態データは、プロセスのアドレス空間、スタック空間、仮想アドレス空間、レジスタセットイメージ(たとえば、プログラムカウンタ、スタックポインタ、命令レジスタ、プログラムステータス語など)、アカウンティング情報、許可、アクセス制限、および状態情報を含み得る。
【００２５】
プロセスの状態情報は、プロセスが実行状態、準備状態、ブロック状態などにあるのかどうかを示す情報を含み得る。プロセスは、そのプロシージャがプロセッサによって実行されているとき、実行状態にある。プロセスは、すべてのプロセスの実行のための必須条件を満たしており(たとえば、メモリおよびリソースが利用可能であるなど)、プロセスにプロセッサが割り当てられるのを待っているとき、準備状態にある。プロセスは、イベント(たとえば、入出力完了イベントなど)の発生を待っているとき、ブロック状態にある。
【００２６】
プロセスは他のプロセスをスポーンすることがあり、スポーンされたプロセス(すなわち、子プロセス)は、スポーンしたプロセス(すなわち、親プロセス)の許可およびアクセス制限(すなわち、コンテキスト)の一部を受け継ぐことがある。プロセスは、複数の軽量のプロセスまたはスレッドを含む重量のプロセスであってよく、軽量のプロセスは、そのコンテキスト(たとえば、アドレス空間、スタック、許可、および/またはアクセス制限など)のすべてまたは部分を他のプロセス/スレッドと共有するプロセスである。したがって、単一のプロセスは、単一のコンテキスト(すなわち、プロセッサのコンテキスト)を共有する、それへのアクセス権を有する、かつ/またはその中で動作する、複数のスレッドを含み得る。
【００２７】
概して、同じコンテキストを共有する、同じコンテキストへのアクセス権を有する、かつ/または同じコンテキスト内で動作するプロセスは、高速メモリ読取り/書込み動作を介して通信し得る。一方、コンテキストを共有しない独立プロセス間の通信は、しばしば、比較的遅い関数呼出し、メソッド呼出し、プロシージャ呼出し、メッセージ交換、ドメインソケット(たとえば、Unix(登録商標)ドメインソケット)、および他の形態のプロセス間通信(IPC)を介して達成される。
【００２８】
リモートプロシージャ呼出し(RPC)およびリモートメソッド呼出し(RMI)は、呼出しプロセスがサブルーチン、プロシージャ、プロセス、またはサービス(本明細書では総称して「サービス」)を、通常は別のプロセッサ、チップまたはコンピューティングデバイス上の別のアドレス空間内で実行させることを可能にするプロセス間通信(IPC)である。
【００２９】
マルチプロセッサおよび分散コンピューティングシステムでは、異なるプロセッサにとって利用可能なメモリおよびリソースは、しばしば、個別のドメイン(たとえば、保護ドメイン、物理ドメインなど)の中にある。加えて、複数のプロセッサの各々は、異なるオペレーティングシステムで構成され得る、かつ/または異なるハードウェア記述言語(HDL)もしくは命令セットアーキテクチャ(ISA)を実装し得る。そのようなシステムでは、RPC/RMI機構は、第1のプロセッサ上の呼出しプロセスがサービスを第2のプロセッサ中で実行させることを可能にし、第2のプロセッサがサービスの実行の結果を第1のプロセッサに送り返すことを可能にする明確なインターフェースを提供し得る。
【００３０】
いくつかの状況では、呼び出されたサービス(called/invoked service)は、呼出しプロセスと同じコンテキストを共有しないプロセスにとってすぐに利用可能でない情報へのアクセスを必要とし得る。そのような状況では、既存のRPCソリューションは、呼出しプロセスが、プロシージャ呼出し/メソッド呼出し中に、呼び出されたサービスによって使用されるべきであるすべてのコンテキスト情報(すなわち、状態情報、許可など)を含むことを必要とする。
【００３１】
プロシージャ呼出しまたはメソッド呼出し中にコンテキスト情報を含むと、モバイルデバイスリソースの使用効率が悪い。さらに、呼出しプロセスのプロセッサおよび呼び出されたサービスのプロセッサは、異なるオペレーティングシステムを有し、かつ/または異なるハードウェア記述言語(HDL)を実装し得る。そのような場合、呼び出されたサービスは、呼び出されたサービスの環境が呼出しプロセスのオペレーティングシステムに一致するように呼出しプロセスのコンテキストを再作成するために複雑で電力負荷の大きい動作を実行する必要があり得る。さらに、コンテキストを再作成するには、呼出しプロセスを実行するアプリケーションプロセッサのカーネルまたはホストオペレーティングシステムへの変更が必要となり得る。これらおよび他の理由で、既存のソリューションは、モバイルデバイスの性能および電力消費特性を劣化または低減させ、ユーザエクスペリエンスを劣化させ得る。
【００３２】
様々な態様は、デジタル信号プロセッサ、モデムプロセッサ、コプロセッサなどの補助プロセッサ上でサービスを呼び出すためのソリューションを改善する。
【００３３】
様々な態様は、コンピューティングデバイス中で、またはネットワークを介して2方向プロシージャ呼出しおよび/または逆方向プロシージャ呼出しを実行するための機構を含み得る。そのような2方向プロシージャ呼出しおよび/または逆方向プロシージャ呼出しにより、補助プロセッサは、呼出しプロセスが(たとえば、プロシージャ呼出し/メソッド呼出しの一部などとして)補助プロセッサにコンテキスト情報に送ることを必要とせずに、アプリケーションプロセッサのまたは呼出しプロセスのコンテキスト情報へのアクセスを必要とするサブルーチンを含む動作を実行することが可能になる。
【００３４】
様々な態様は、汎用プロセッサ上のローカルのコンテキスト情報へのアクセスを必要とする動作を実行しながら、汎用プロセッサから補助プロセッサに処理動作の大部分をオフロードするために、2方向プロシージャ呼出しおよび/または逆方向プロシージャ呼出しを実行し得る。様々な態様は、カーネルへのいかなる変更もせずに、オペレーティングシステムのユーザ空間中に2方向プロシージャ呼出しおよび/または逆方向プロシージャ呼出しを実装し得る。
【００３５】
様々な態様は、汎用プロセッサ(たとえば、アプリケーションプロセッサ、CPUなど)と補助プロセッサとの間でコンテキスト情報を通信することに関連するオーバーヘッドを低減することによって、コンピューティングデバイスの性能および/または電力消費特性を改善する。様々な態様はまた、第2の/補助プロセッサ上で呼出しプロセスまたはアプリケーションプロセッサのコンテキストを再作成することに関連するオーバーヘッドを低減することによって、コンピューティングデバイスの性能および/または電力消費特性を改善する。
【００３６】
様々な態様は、同じコンテキスト内で、かつ/または1次プロセスおよび2次プロセスが同じコンテキスト情報へのアクセス権を有するように、アプリケーションプロセッサ上で1次プロセス(またはスレッド)および複数の2次プロセス(またはスレッド)を生成するように構成されたシステム、方法、およびデバイスを含み得る。1次プロセスは、汎用ソフトウェアアプリケーションの1つまたは複数の動作を達成するためのプロシージャを含み得、2次プロセスの各々は、コンテキスト情報へのアクセスを必要とする1次プロセスのサブルーチンを達成するためのプロシージャを含み得る。
【００３７】
2次プロセスは、2次プロセスをブロック状態に入らせる補助プロセッサ上でサービスを呼び出すように構成され得る。2次プロセスがブロック状態のままである間、1次プロセスは、補助プロセッサ上でサービスを呼び出し得る。サービスは、1次プロセスの1つまたは複数の動作またはタスクを達成するために補助プロセッサ上でサブルーチンを実行し始め得る。
【００３８】
サービスが、コンテキスト情報へのアクセスを必要とするサブルーチンに遭遇すると、サービスは、遭遇したサブルーチンを達成する、かつ/または必要なコンテキスト情報を取り出すのに好適な2次プロセスをアンブロックし得る。アンブロックされた2次プロセスは、サービスによって必要とされるコンテキスト情報を取り出す、かつ/またはコンテキスト情報へのアクセスを必要とする動作を達成するために、1次プロセスのコンテキスト内でアプリケーションプロセッサ上で実行され得る。一態様では、アンブロックされた2次プロセスがアプリケーションプロセッサ上で実行される間、サービスは、待機またはブロック状態に入り得る。別の態様では、アンブロックされた2次プロセスがアプリケーションプロセッサ上で実行される間、サービスはタスクを処理し続け得る。したがって、一態様では、サービスと2次プロセスとは同時にまたは並行して実行され得る。
【００３９】
アンブロックされた2次プロセスは、補助プロセッサに、取り出されたコンテキスト情報および/またはその処理の結果を送り、ブロック状態に戻り得る。サービスは、補助プロセッサ上で追加の動作を実行するために2次プロセスから受信した情報を使用し、1次プロセスに通知および/またはその動作の結果を送り得る。1次プロセスは、汎用ソフトウェアアプリケーションの動作を完了するために、かつ/または受信した通知に基づいてそのステータスを更新するために、受信した結果を使用し得る。このようにして、1次プロセスは、(たとえば、プロシージャ呼出し/メソッド呼出しなどの一部として)補助プロセッサの煩雑なコンテキスト情報を送らずに補助プロセッサに汎用処理動作をオフロードし得る。
【００４０】
様々な態様は、システムオンチップ(SOC)を含む、いくつかのマルチプロセッサコンピュータシステム上に実装され得る。図1に、様々な態様を実装するコンピューティングデバイス中で使用され得る例示的なシステムオンチップ(SOC)100アーキテクチャを示す。SOC100は、デジタル信号プロセッサ(DSP)102、モデムプロセッサ104、グラフィクスプロセッサ106、およびアプリケーションプロセッサ108など、いくつかの異種プロセッサを含み得る。SOC100はまた、異種プロセッサ102、104、106、108のうちの1つまたは複数に接続された1つまたは複数のコプロセッサ110(たとえば、ベクトルコプロセッサなど)を含み得る。各プロセッサ102、104、106、108、110は、1つまたは複数のコアを含み得、各プロセッサ/コアは、他のプロセッサ/コアとは無関係に動作を実行し得る。たとえば、SOC100は、第1のタイプのオペレーティングシステム(たとえば、FreeBSD、LINUX(登録商標)、OS Xなど)を実行するプロセッサと、第2のタイプのオペレーティングシステム(たとえば、Microsoft Windows(登録商標) 8)を実行するプロセッサとを含み得る。
【００４１】
SOC100はまた、センサーデータ、アナログデジタル変換、ワイヤレスデータ送信を管理し、かつウェブブラウザにおいてレンダリングするための符号化されたオーディオ信号およびビデオ信号を処理するなど、他の特殊な動作を実行するためのアナログ回路およびカスタム回路114を含み得る。SOC100は、電圧調整器、発振器、位相ロックループ、周辺ブリッジ、データコントローラ、メモリコントローラ、システムコントローラ、アクセスポート、タイマー、ならびにプロセッサ、およびコンピューティングデバイス上で実行されるソフトウェアクライアント(たとえば、ウェブブラウザなど)をサポートするために使用される他の同様の構成要素など、システム構成要素およびリソース116をさらに含み得る。
【００４２】
システム構成要素/リソース116およびカスタム回路114はまた、カメラ、電子ディスプレイ、ワイヤレス通信デバイス、外部メモリチップなどの周辺デバイスに接続するための回路を含み得る。プロセッサ102、104、106、108は、相互接続され、一連の再構成可能な論理ゲートを含み、かつ/またはバスアーキテクチャ(たとえば、CoreConnect、AMBAなど)を実装し得る相互接続/バスモジュール124を介して、1つまたは複数のメモリ要素112、システム構成要素およびリソース116ならびにカスタム回路114に相互接続され得る。通信は、高性能ネットワークオンチップ(NoC)など、高度相互接続によって提供され得る。
【００４３】
SOC100は、クロック118および電圧調整器120など、SOCの外部のリソースと通信するための入出力モジュール(図示せず)をさらに含み得る。SOCの外部のリソース(たとえば、クロック118、電圧調整器120)は、内部SOCプロセッサ/コア(たとえば、DSP102、モデムプロセッサ104、グラフィクスプロセッサ106、アプリケーションプロセッサ108など)のうちの2つ以上によって共有され得る。
【００４４】
プロセッサ102、104、106、108、110は、互いに(たとえば、単一の基板、ダイ、集積チップなどの上で)極めて近接している独立した処理コアであり得る。プロセッサ102、104、106、108、110が近接していることで、メモリ112は、信号がチップ外で移動しなければならない場合に可能な周波数/クロック速度よりもはるかに高い周波数/クロック速度で動作することが可能になる。その上、プロセッサ102、104、106、108、110が近接していることで、オンチップメモリおよびリソース(たとえば、電圧レール)の共有、ならびにコア間のより協調した連携が可能になる。
【００４５】
図1を参照しながら上記で説明したようなマルチプロセッサハードウェア設計は、同じパッケージの内側の、しばしば同じシリコン片上に、異なる機能の複数の処理コアを含み得る。対称な多重処理ハードウェアは、単一のオペレーティングシステムによって制御される単一の共有されたメインメモリに接続された2つ以上の同一のプロセッサを含む。非対称のまたは「疎結合」の多重処理ハードウェアは、それぞれ、独立したオペレーティングシステムおよびハードウェア記述言語または命令セットアーキテクチャによって制御され、1つまたは複数の共有されたメモリ/リソースに接続され得る、2つ以上の異種プロセッサ/コアを含み得る。
【００４６】
図2に、一態様における、2方向リモートプロシージャ呼出しおよび/または逆方向リモートプロシージャ呼出しを実行するように構成されたコンピューティングシステム200中の例示的な論理および機能構成要素を示す。図示されたコンピュータシステム200は、ハードウェア構成要素とソフトウェア構成要素の両方を含む。ハードウェア構成要素は、アプリケーションプロセッサ108と、デジタル信号プロセッサ(DSP)102と、相互接続モジュール124と、メモリ112モジュールとを含み得る。
【００４７】
ソフトウェア構成要素は、ホストオペレーティングシステム202と、ホストオペレーティングシステムユーザプロセス204と、ホストリスナースレッド206と、DSPオペレーティングシステム208と、DSPサービス210と、DSPリスナー212とを含み得る。一態様では、ホストオペレーティングシステム202は、ホストオペレーティングシステムユーザプロセス204から高水準言語(HLL)ライブラリ呼出しを受信し、ホストオペレーティングシステム202上で(たとえば、オペレーティングシステム呼出しを介して)オペレーティングシステムサービスを呼び出すように構成されたライブラリモジュール(図示せず)を含み得る。一態様では、ホストオペレーティングシステムユーザプロセス204は、ソフトウェアアプリケーションプログラムのプロセスであり得る。
【００４８】
ホストオペレーティングシステムユーザプロセス204は、コンテキスト情報を含むかまたは参照し得、コンテキスト情報は、ホストオペレーティングシステムユーザプロセス204がアクセスし得るホストオペレーティングシステムユーザプロセス204のサービス、ライブラリ、ファイルシステム、および他のリソースを識別する動作状態データおよび許可および/またはアクセス制限情報を含み得る。ホストリスナースレッド206は、ホストオペレーティングシステムユーザプロセス204のコンテキスト情報へのアクセス権を有するホストオペレーティングシステムユーザプロセス204のスレッドであり得る。
【００４９】
DSPサービス210は、1つまたは複数の動作をデジタル信号プロセッサ102に実行させるように構成されたサブルーチン、プロシージャ、プロセス、またはサービスであり得る。DSPサービス210はまた、ホストオペレーティングシステムユーザプロセス204についてのスレッドコンテキストを提供し得る。DSPリスナー212は、DSPサービス210のスレッドであり得る。DSPリスナー212は、ホストリスナースレッド206についてのスレッドコンテキストを提供し得る。
【００５０】
図3に、補助プロセッサに汎用プロセスの作業負荷の大部分をオフロードするためにリモートプロシージャ呼出しを実行するための態様方法300を示す。ブロック302において、ホストオペレーティングシステムリスナースレッド206は、ホストオペレーティングシステムリスナースレッド206がDSPリスナー212からの命令を待つ間、それをブロック状態に無期限に入らせる補助プロセッサのサービスを呼び出し得る。
【００５１】
ブロック304において、ホストオペレーティングシステムユーザプロセス204はDSPユーザサービス210を呼び出し得、これは、補助プロセッサ上で汎用アプリケーションプログラム動作を実行し始め得る。DSPユーザサービス210は、ホストオペレーティングシステム202のサービスへのアクセスを必要とする、かつ/またはホストオペレーティングシステムユーザプロセス204のコンテキスト情報へのアクセスを必要とする動作またはサブルーチンに遭遇するまで、汎用アプリケーションプログラム動作を実行し続け得る。図3に示す例では、DSPユーザサービス210は、「オープン(「ファイル1」)」動作に遭遇するまで、汎用アプリケーションプログラム動作を実行し続ける。
【００５２】
ブロック306において、DSPユーザサービス210は、遭遇した「オープン(「ファイル1」)」動作を実行するために、DSPリスナー212スレッドにコマンドを発行し得る。ブロック308において、DSPユーザサービス210は、DSPリスナー212からの命令を待つ間、ブロック状態に無期限に入り得る。一態様では、ブロック306およびブロック308の動作は、単一の動作で達成され得る。
【００５３】
ブロック310において、DSPリスナー212は、ホストオペレーティングシステムリスナースレッド206をアンブロックし得る。ブロック312において、DSPリスナー212は、ホストオペレーティングシステムリスナースレッド206に「オープン(「ファイル1」)」動作を実行するように命令し得る。一態様では、ブロック310およびブロック312の動作は、単一の動作で達成され得る。
【００５４】
ブロック314において、ホストオペレーティングシステムリスナースレッド206は、ホストオペレーティングシステム202上で「オープン(「ファイル1」)」動作を実行し得る。ブロック316において、ホストオペレーティングシステムリスナースレッド206は、DSPリスナー212スレッドに「オープン(「ファイル1」)」動作の結果を送り得る。ブロック316において、ホストオペレーティングシステムリスナースレッド206は、DSPリスナー212からさらなる命令を待つ間、ブロック状態に再び入り得る。一態様では、ブロック316およびブロック318の動作は、単一の動作で達成され得る。
【００５５】
ブロック320において、DSPリスナー212は、DSPユーザサービス210をアンブロックし得る。ブロック322において、DSPリスナー212は、DSPユーザサービス210に「オープン(「ファイル1」)」動作の結果を送り得る。一態様では、ブロック320およびブロック322の動作は、単一の動作で達成され得る。
【００５６】
ブロック324において、DSPユーザサービス210は、DSPリスナー212から受信した「オープン(「ファイル1」)」動作の結果を用いて残りの汎用アプリケーションプログラム動作を実行し、ホストオペレーティングシステムユーザプロセス204にそれらの動作の結果を戻し得る。このようにして、DSPユーザサービス210は、ホストオペレーティングシステム202のコンテキストを再作成せずにホストオペレーティングシステム202上のサービスを呼び出し得る。さらに、ホストオペレーティングシステムユーザプロセス204は、DSPユーザサービス210にそのコンテキスト情報を送る必要はなく、これは、汎用プロセッサと補助プロセッサとの間で通信される情報の量を低減する。
【００５７】
図4に、補助プロセッサにオペレーティングシステムサービスへのアクセスを必要とする動作をオフロードするための態様アプリケーションプロセッサ方法400を示す。ブロック402において、アプリケーションプロセッサは、補助プロセッサにオフロードされ得る動作を含む第1のプロセスを作成し得る。ブロック404において、アプリケーションプロセッサは、第1のプロセスと同じコンテキスト中に第2のプロセスを作成し得る。一態様では、第2のプロセスは、第1のプロセスのスレッドであり得る。一態様では、第1のプロセスは、ホストオペレーティングシステムユーザプロセス204であり得、第2のプロセスは、ホストオペレーティングシステムリスナースレッド206であり得る。
【００５８】
ブロック406において、第2のプロセスは、第2のプロセスをブロック状態に無期限に入らせる補助プロセッサのサービスを呼び出し得る。ブロック408において、第2のプロセスは、ブロック状態に入り、補助プロセッサからの命令を待ち得る。
【００５９】
ブロック410において、第1のプロセスは、補助プロセッサのサービスを呼び出すことによって補助プロセッサにその動作をオフロードし得る。ブロック412において、第2のプロセスは、ブロック状態を出て、アプリケーションプロセッサ上で1つまたは複数の動作を実行するために、補助プロセッサから命令を受信し得る。ブロック414において、第2のプロセスは、アプリケーションプロセッサ上で1つまたは複数の動作を実行し得る。ブロック416において、第2のプロセスは、補助プロセッサにアプリケーションプロセッサ上で実行された動作の結果を送り得る。ブロック418において、第2のプロセスは、ブロック状態に入り得る。ブロック420において、第1のプロセスは、補助プロセッサからサービス実行の結果を受信し得る。
【００６０】
様々な態様が、様々なコンピューティングデバイス上に実装され得、それらの例を図5〜図7に示す。図5に、内部メモリ502に結合されたマルチコアプロセッサ501と、ディスプレイ504(たとえば、タッチスクリーンディスプレイ)と、スピーカー506とを含むスマートフォン500を示す。加えて、スマートフォン500は、マルチコアプロセッサ501に結合されたワイヤレスデータリンクおよび/あるいはモデムまたは携帯電話トランシーバ510に接続され得る、電磁放射を送信および受信するためのアンテナ508を含み得る。スマートフォン500は、通常、ユーザ入力を受け取るためのメニュー選択ボタンまたはロッカースイッチ512も含む。
【００６１】
マルチコアプロセッサ501は、上記で説明し、図1〜図2に示したものと同様の回路および構造を含み得る。モデム510はまた、複数の処理コアを含み得、無線周波数信号を受信および送信するためのアンテナ508に結合され得る。
【００６２】
一般的なスマートフォン500はまた、マイクロフォンから受信した音をワイヤレス送信に適したデータパケットにデジタル化し、受信した音のデータパケットを復号し、スピーカーに供給して音を発生させるアナログ信号を生成する、音の符号化/復号(CODEC)回路514を含む。さらに、マルチコアプロセッサ501、ワイヤレストランシーバ510およびCODEC514のうちの1つまたは複数は、デジタル信号プロセッサ(DSP)回路(個別に図示せず)を含み得る。
【００６３】
典型的なモバイルコンピューティングデバイスは、共通して、例示的なパーソナルラップトップコンピュータ600を示す図6に示した構成要素を有することになる。そのようなパーソナルコンピュータ600は、一般に、揮発性メモリ602、およびディスクドライブ604などの大容量不揮発性メモリに結合されたマルチコアプロセッサ601を含む。コンピュータ600はまた、プロセッサ601に結合されたコンパクトディスク(CD)および/またはDVDドライブ608を含み得る。コンピュータデバイス600はまた、プロセッサ601をネットワークに結合するためのネットワーク接続回路などの、データ接続を確立するか、または外部メモリデバイスを受け入れるための、プロセッサ601に結合されたいくつかのコネクタポートを含み得る。コンピューティングデバイス600は、プロセッサ601に結合されたワイヤレスデータリンクに接続された電磁放射を送信および受信するための無線/アンテナ610を有し得る。コンピュータ600は、コンピュータ技術分野においてよく知られているようにキーボード618と、ポインティングパッド620と、ディスプレイ622とをさらに含み得る。
【００６４】
様々な態様はまた、図7に示されるサーバ700などの様々な市販のサーバデバイスのうちのいずれにも実装され得る。そのようなサーバ700は、通常、複数のプロセッサシステムを含み、プロセッサシステムのうちの1つまたは複数は、マルチコアプロセッサ701であるか、マルチコアプロセッサ701を含み得る。プロセッサ701は、揮発性メモリ702、およびディスクドライブ703などの大容量不揮発性メモリに結合され得る。サーバ700はまた、プロセッサ701に結合された、フロッピー(登録商標)ディスクドライブ、コンパクトディスク(CD)またはDVDディスクドライブ704を含み得る。サーバ700はまた、他のブロードキャストシステムコンピュータおよびサーバに結合されたローカルエリアネットワークなど、ネットワーク707とデータ接続を確立するための、プロセッサ701に結合されたネットワークアクセスポート706を含み得る。
【００６５】
プロセッサ501、601、701は、本明細書で説明する様々な態様の機能および動作を含む、様々な機能を実行するためのソフトウェア命令(アプリケーション)によって構成され得る、任意のプログラマブルマルチコアマルチプロセッサ、マイクロコンピュータまたは複数のプロセッサチップであり得る。1つのプロセッサをワイヤレス通信機能専用とし、1つのプロセッサを他のアプリケーションの実行専用とするなど、複数のプロセッサが設けられ得る。典型的には、ソフトウェアアプリケーションは、アクセスされてプロセッサ501、601、701にロードされる前に、内部メモリ502、602、702に記憶され得る。いくつかのモバイルコンピューティングデバイスでは、追加のメモリチップ(たとえば、Secure Data(SD)カード)が、モバイルデバイスに差し込まれ、プロセッサ501、601、701に結合され得る。内部メモリ502、602、702は、揮発性メモリ、もしくはフラッシュメモリなどの不揮発性メモリ、または両方の混合物であり得る。本明細書では、メモリに対する一般的な言及は、内部メモリ502、602、702、モバイルデバイスに差し込まれたリムーバブルメモリ、およびプロセッサ501、601、701自体の中のメモリを含む、プロセッサ501、601、701によってアクセス可能なすべてのメモリを指す。
【００６６】
上記の方法の説明およびプロセスフロー図は、単に説明のための例として提供され、様々な態様のブロックが、提示された順序で実施されなければならないことを要求または暗示するものではない。当業者が諒解するように、上記の態様におけるブロックの順序は、どのような順序で実行されてもよい。「その後」、「次いで」、「次に」などの単語は、ブロックの順序を限定するものではなく、これらの単語は、方法の説明を通して読者を案内するために使用されるにすぎない。さらに、たとえば、冠詞「a」、「an」または「the」の使用による単数形での請求要素へのいかなる言及も、その要素を単数に限定するものとして解釈されるべきではない。
【００６７】
本明細書で開示された態様に関して説明された、様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムブロックは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得る。ハードウェアおよびソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップについて、上記では概してそれらの機能性に関して説明した。そのような機能性をハードウェアとして実装するか、またはソフトウェアとして実装するかは、特定の適用例および全体的なシステムに課される設計制約に依存する。当業者は、説明された機能を具体的な適用例ごとに様々な方法で実装し得るが、そのような実装の決定は、本発明の範囲から逸脱するものと解釈されるべきではない。
【００６８】
本明細書で開示された態様に関して記載された様々な例示的な論理、論理ブロック、モジュール、および回路を実装するために使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタ論理、個別のハードウェア構成要素、または、本明細書に記載された機能を実行するように設計されたそれらの任意の組合せで、実装または実行され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替として、そのプロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと連携する1つまたは複数のマイクロプロセッサ、あるいは任意の他のそのような構成として実装され得る。代替として、いくつかのステップまたは方法は、所与の機能に固有の回路によって実行され得る。
【００６９】
1つまたは複数の例示的な態様では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。機能は、ソフトウェアで実装される場合、1つまたは複数の命令またはコードとして、非一時的コンピュータ可読媒体または非一時的プロセッサ可読媒体に記憶され得る。本明細書で開示された方法またはアルゴリズムのステップは、非一時的コンピュータ可読記憶媒体またはプロセッサ可読記憶媒体上に存在し得るプロセッサ実行可能ソフトウェアモジュール内で具現化され得る。非一時的コンピュータ可読記憶媒体またはプロセッサ可読記憶媒体は、コンピュータまたはプロセッサによってアクセスされ得る任意の記憶媒体であってよい。限定ではなく例として、そのような非一時的コンピュータ可読媒体またはプロセッサ可読媒体は、RAM、ROM、EEPROM、FLASHメモリ、CD-ROMもしくは他の光ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または、命令もしくはデータ構造の形式で所望のプログラムコードを記憶するために使用され得るとともに、コンピュータによってアクセスされ得る任意の他の媒体を含み得る。本明細書で使用する場合、ディスク(disk)およびディスク(disc)は、コンパクトディスク(CD)、レーザーディスク(登録商標)、光ディスク、デジタル多用途ディスク(DVD)、フロッピー(登録商標)ディスク、およびブルーレイディスクを含み、ディスク(disk)は、通常、磁気的にデータを再生し、ディスク(disc)は、レーザーで光学的にデータを再生する。上記の組合せも、非一時的コンピュータ可読媒体およびプロセッサ可読媒体の範囲内に含まれる。加えて、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれ得る、非一時的プロセッサ可読媒体および/またはコンピュータ可読媒体上のコードおよび/または命令の、1つまたは任意の組合せ、またはそのセットとして存在し得る。
【００７０】
開示された態様の上記の説明は、任意の当業者が本発明を製作または使用できるように提供されたものである。これらの態様への様々な修正が当業者には容易に明らかとなり、本明細書で定義された一般的な原理は、本発明の趣旨または範囲を逸脱することなく、他の態様に適用され得る。したがって、本発明は、本明細書で示された態様に限定されるものではなく、以下の特許請求の範囲ならびに本明細書で開示された原理および新規の特徴に合致する、最も広い範囲を与えられるべきである。
【符号の説明】
【００７１】
100  システムオンチップ(SOC)
102  デジタルシグナルプロセッサ(DSP)
104  モデムプロセッサ
106  グラフィクスプロセッサ
108  アプリケーションプロセッサ
110  コプロセッサ
112  メモリ要素、メモリ
114  アナログ回路およびカスタム回路
116  システム構成要素およびリソース
118  クロック
120  電圧調整器
124  相互接続/バスモジュール
200  コンピューティングシステム
202  ホストオペレーティングシステム
204  ホストオペレーティングシステムユーザプロセス
206  ホストリスナースレッド
208  DSPオペレーティングシステム
210  DSPサービス
212  DSPリスナー
500  スマートフォン
501  マルチコアプロセッサ
502  内部メモリ
504  ディスプレイ
506  スピーカー
508  アンテナ
510  モデムまたはセルラー電話トランシーバ、ワイヤレストランシーバ
512  メニュー選択ボタンまたはロッカースイッチ
514  符号化/復号(CODEC)回路
600  パーソナルラップトップコンピュータ
601  マルチコアプロセッサ
602  揮発性メモリ、内部メモリ
604  ディスクドライブ
608  コンパクトディスク(CD)および/またはDVDドライブ
610  無線/アンテナ
618  キーボード
620  ポインティングパッド
622  ディスプレイ
700  サーバ
701  マルチコアプロセッサ
702  揮発性メモリ、内部メモリ
703  ディスクドライブ
704  フロッピー(登録商標)ディスクドライブ、コンパクトディスク(CD)またはDVDディスクドライブ
706  ネットワークアクセスポート
707  ネットワーク
【図１】
0005982581.tif 000002
【図２】
0005982581.tif 000003
【図３】
0005982581.tif 000004
【図４】
0005982581.tif 000005
【図５】
0005982581.tif 000006
【図６】
0005982581.tif 000007
【図７】
0005982581.tif 000008