(57)【要約】  モバイルコンピューティングデバイスは、共有メモリを読み取り共有メモリに情報を書き込むことによって、マルチプロセッサシステムの補助プロセッサ(たとえば、DSP)において汎用ソフトウェアアプリケーションの部分をコンパイルして実行するように構成され得る。アプリケーションプロセッサ上の第1のプロセス(P1)は、補助プロセッサ上の第2のプロセス(P2)とのアドレスのネゴシエーションを要求し、第1のオペレーティングシステムから第1のアドレスマップを取得し、第1のアドレスマップを補助プロセッサに送ることができる。第2のプロセス(P2)は、第1のアドレスマップを受け取り、第2のオペレーティングシステムから第2のアドレスマップを取得し、第1のアドレスマップおよび第2のアドレスマップの中の一致するアドレスを特定し、一致したアドレスを共通仮想アドレスとして記憶し、共通仮想アドレスをアプリケーションプロセッサに送り返すことができる。第1のプロセスおよび第2のプロセス(すなわち、P1およびP2)は各々、共通仮想アドレスを使用して、物理ページをメモリにマッピングすることができる。
2016532959.tif 000002
【特許請求の範囲】
【請求項１】
第1のプロセッシングコアおよび第2のプロセッシングコアを有するマルチプロセッサコンピューティングデバイスの共有メモリ領域へのアクセス権を提供する方法であって、
前記第1のプロセッシングコアにおける第1のプロセスによって、前記第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するステップと、
前記第1のプロセッシングコアにおける前記第1のプロセスの第1のアドレスマップを取得するステップと、
前記第1のアドレスマップを前記第2のプロセッシングコアに送るステップと、
前記第1のアドレスマップを送ったことに応答して前記第1のプロセッシングコアにおいて共通仮想アドレスを受け取るステップと、
前記第1のプロセッシングコアの第1のオペレーティングシステムカーネルの内部の前記共有メモリ領域の第1の属性として前記共通仮想アドレスを記憶するステップと、
前記第1のプロセスの前記共通仮想アドレスにおいて前記共有メモリ領域をマッピングするステップと
を備える、方法。
【請求項２】
前記第1のアドレスマップを前記第2のプロセッシングコアにおいて受け取るステップと、
前記第2のプロセッシングコアにおける前記第2のプロセスの第2のアドレスマップを取得するステップと、
前記第2のプロセッシングコアにおいてアドレス照合動作を実行して、前記第1のアドレスマップおよび前記第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するステップと、
前記共通仮想アドレスとして、かつ、前記第2のプロセッシングコアの第2のオペレーティングシステムカーネルの前記共有メモリ領域の第2の属性として、前記一致した仮想アドレスを記憶するステップと、
前記共通仮想アドレスを前記第1のプロセッシングコアに送るステップと、
前記第2のプロセッシングコアにおける前記第2のプロセスのための前記共通仮想アドレスにおいて前記共有メモリ領域の物理ページをマッピングするステップと
をさらに備える、請求項1に記載の方法。
【請求項３】
前記第1のプロセッシングコアおよび前記第2のプロセッシングコアの各々が、ハードウェアメモリ管理ユニット(MMU)を含む、請求項2に記載の方法。
【請求項４】
前記第2のプロセッシングコアにおいて前記第1のアドレスマップを受け取るステップが、前記第2のプロセッシングコアのアドレスネゴシエーションハンドラスレッドにおいて前記第1のアドレスマップを受け取るステップを備える、請求項2に記載の方法。
【請求項５】
第1のプロセッシングコアにおける第1のプロセスによって、第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するための手段と、
前記第1のプロセッシングコアにおける前記第1のプロセスの第1のアドレスマップを取得するための手段と、
前記第1のアドレスマップを前記第2のプロセッシングコアに送るための手段と、
前記第1のアドレスマップを送ったことに応答して前記第1のプロセッシングコアにおいて共通仮想アドレスを受け取るための手段と、
前記第1のプロセッシングコアの第1のオペレーティングシステムカーネルの内部の共有メモリ領域の第1の属性として前記共通仮想アドレスを記憶するための手段と、
前記第1のプロセスの前記共通仮想アドレスにおいて前記共有メモリ領域をマッピングするための手段と
を備える、マルチプロセッサコンピューティングデバイス。
【請求項６】
前記第1のアドレスマップを前記第2のプロセッシングコアにおいて受け取るための手段と、
前記第2のプロセッシングコアにおける前記第2のプロセスの第2のアドレスマップを取得するための手段と、
前記第2のプロセッシングコアにおいてアドレス照合動作を実行して、前記第1のアドレスマップおよび前記第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するための手段と、
前記共通仮想アドレスとして、かつ、前記第2のプロセッシングコアの第2のオペレーティングシステムカーネルの前記共有メモリ領域の第2の属性として、前記一致した仮想アドレスを記憶するための手段と、
前記共通仮想アドレスを前記第1のプロセッシングコアに送るための手段と、
前記第2のプロセッシングコアにおける前記第2のプロセスのための前記共通仮想アドレスにおいて前記共有メモリ領域の物理ページをマッピングするための手段とをさらに備える、請求項5に記載のマルチプロセッサコンピューティングデバイス。
【請求項７】
前記第2のプロセッシングコアにおいて前記第1のアドレスマップを受け取るための手段が、前記第2のプロセッシングコアのアドレスネゴシエーションハンドラスレッドにおいて前記第1のアドレスマップを受け取るための手段を備える、請求項6に記載のマルチプロセッサコンピューティングデバイス。
【請求項８】
第1のプロセッシングコアと、
第2のプロセッシングコアと、
前記第1のプロセッシングコアおよび前記第2のプロセッシングコアに結合された共有メモリ領域と
を備え、前記第1のプロセッシングコアが、
第1のプロセスによって、前記第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するステップと、
前記第1のプロセスの第1のアドレスマップを取得するステップと、
前記第1のアドレスマップを前記第2のプロセッシングコアに送るステップと、
前記第1のアドレスマップを前記第2のプロセッシングコアに送ったことに応答して、共通仮想アドレスを受け取るステップと、
第1のオペレーティングシステムカーネルの内部の前記共有メモリ領域の第1の属性として前記共通仮想アドレスを記憶するステップと、
前記第1のプロセスの前記共通仮想アドレスにおいて前記共有メモリ領域をマッピングするステップと
を備える動作を実行するように、プロセッサ実行可能命令によって構成される、マルチプロセッサコンピューティングデバイス。
【請求項９】
前記第2のプロセッシングコアが、
前記第1のアドレスマップを受け取るステップと、
前記第2のプロセスの第2のアドレスマップを取得するステップと、
アドレス照合動作を実行して、前記第1のアドレスマップおよび前記第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するステップと、
前記共通仮想アドレスとして、かつ、第2のオペレーティングシステムカーネルの前記共有メモリ領域の第2の属性として、前記一致した仮想アドレスを記憶するステップと、
前記共通仮想アドレスを前記第1のプロセッシングコアに送るステップと、
前記第2のプロセスのための前記共通仮想アドレスにおいて前記共有メモリ領域の物理ページをマッピングするステップと
を備える動作を実行するように、プロセッサ実行可能命令によって構成される、請求項8に記載のマルチプロセッサコンピューティングデバイス。
【請求項１０】
前記第1のプロセッシングコアおよび前記第2のプロセッシングコアの各々が、ハードウェアメモリ管理ユニット(MMU)を含む、請求項9に記載のマルチプロセッサコンピューティングデバイス。
【請求項１１】
前記第2のプロセッシングコアが、前記第1のアドレスマップを受け取るステップがアドレスネゴシエーションハンドラスレッドにおいて前記第1のアドレスマップを受け取るステップを備えるように動作を実行するように、プロセッサ実行可能命令によって構成される、請求項9に記載のマルチプロセッサコンピューティングデバイス。
【請求項１２】
マルチプロセッサコンピューティングデバイスの第1のプロセッシングコアに、
第1のプロセスによって、前記マルチプロセッサコンピューティングデバイスの第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するステップと、
前記第1のプロセスの第1のアドレスマップを取得するステップと、
前記第1のアドレスマップを前記第2のプロセッシングコアに送るステップと、
前記第1のアドレスマップを前記第2のプロセッシングコアに送ったことに応答して、共通仮想アドレスを受け取るステップと、
第1のオペレーティングシステムカーネルの内部の共有メモリ領域の第1の属性として前記共通仮想アドレスを記憶するステップと、
前記第1のプロセスの前記共通仮想アドレスにおいて前記共有メモリ領域をマッピングするステップと
を備える動作を実行させるように構成されるプロセッサ実行可能ソフトウェア命令を記憶した、非一時的コンピュータ可読記憶媒体。
【請求項１３】
前記記憶されたプロセッサ実行可能ソフトウェア命令が、前記マルチプロセッサコンピューティングデバイスの前記第2のプロセッシングコアに、
前記第1のアドレスマップを受け取るステップと、
前記第2のプロセスの第2のアドレスマップを取得するステップと、
アドレス照合動作を実行して、前記第1のアドレスマップおよび前記第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するステップと、
前記共通仮想アドレスとして、かつ、第2のオペレーティングシステムカーネルの前記共有メモリ領域の第2の属性として、前記一致した仮想アドレスを記憶するステップと、
前記共通仮想アドレスを前記第1のプロセッシングコアに送るステップと、
前記第2のプロセスのための前記共通仮想アドレスにおいて前記共有メモリ領域の物理ページをマッピングするステップと
を備える動作を実行させるように構成される、請求項12に記載の非一時的コンピュータ可読記憶媒体。
【請求項１４】
前記記憶されたプロセッサ実行可能ソフトウェア命令が、前記マルチプロセッサコンピューティングデバイスの前記第2のプロセッシングコアに、前記第1のアドレスマップを受け取るステップがアドレスネゴシエーションハンドラスレッドにおいて前記第1のアドレスマップを受け取るステップを備えるように動作を実行させるように構成される、請求項13に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、異種マルチプロセッサシステムにおける共有メモリ領域のための動的なアドレスのネゴシエーションに関する。
【背景技術】
【０００２】
モバイル技術およびワイヤレス技術は、過去数年の間に爆発的な発展をとげてきた。この発展は、より優れた通信、ハードウェア、およびより信頼できるプロトコルによって促進されている。ワイヤレスサービスプロバイダは現在、拡大し続ける多数の機能およびサービスを自分の顧客に提供し、かつ情報、リソースおよび通信に対するかつてないレベルのアクセスをユーザに提供することができる。これらの強化と歩調を合わせるために、モバイル電子デバイス(たとえば、携帯電話、腕時計、メディアプレーヤーなど)は、以前よりも複雑になり、今や一般的に、複数のプロセッサ、システムオンチップ(SoC)、および、モバイルデバイスのユーザがモバイルデバイス上で複雑かつ電力負荷の大きいソフトウェアアプリケーション(たとえば、ビデオストリーミング、ビデオ処理など)を実行することを可能にする他のリソースを含む。複雑さおよび電力消費のこの増加に伴い、モバイルデバイスの計算性能および電力管理性能を改善する新しい改善されたメモリ管理の方法が、消費者に有益であろう。
【発明の概要】
【課題を解決するための手段】
【０００３】
様々な方法は、第1のプロセッシングコアにおける第1のプロセスによって、第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するステップと、第1のプロセッシングコアにおける第1のプロセスの第1のアドレスマップを取得するステップと、第1のアドレスマップを第2のプロセッシングコアに送るステップと、第1のアドレスマップを送ったことに応答して第1のプロセッシングコアにおいて共通仮想アドレスを受け取るステップと、第1のプロセッシングコアの第1のオペレーティングシステムカーネルの内部の共有メモリ領域の第1の属性として共通仮想アドレスを記憶するステップと、第1のプロセスの共通仮想アドレスにおいて共有メモリ領域をマッピングするステップとを含む、第1のプロセッシングコアおよび第2のプロセッシングコアを有するマルチプロセッサコンピューティングデバイスの共有メモリ領域へのアクセス権を提供する方法を含む。
【０００４】
ある態様では、方法は、第2のプロセッシングコアにおいて第1のアドレスマップを受け取るステップと、第2のプロセッシングコアにおいて第2のプロセスの第2のアドレスマップを取得するステップと、第2のプロセッシングコアにおいてアドレス照合動作を実行して、第1のアドレスマップおよび第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するステップと、共通仮想アドレスとして、かつ、第2のプロセッシングコアの第2のオペレーティングシステムカーネルの共有メモリ領域の第2の属性として、一致した仮想アドレスを記憶するステップと、共通仮想アドレスを第1のプロセッシングコアに送るステップと、第2のプロセッシングコアにおける第2のプロセスのための共通仮想アドレスにおいて共有メモリ領域の物理ページをマッピングするステップとを含み得る。
【０００５】
さらなる態様では、第1のプロセッシングコアおよび第2のプロセッシングコアの各々は、ハードウェアメモリ管理ユニット(MMU)を含み得る。さらなる態様では、第2のプロセッシングコアにおいて第1のアドレスマップを受け取るステップは、第2のプロセッシングコアのアドレスネゴシエーションハンドラスレッドにおいて第1のアドレスマップを受け取るステップを含み得る。
【０００６】
さらなる態様は、第1のプロセッシングコアにおける第1のプロセスによって、第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するための手段と、第1のプロセッシングコアにおける第1のプロセスの第1のアドレスマップを取得するための手段と、第1のアドレスマップを第2のプロセッシングコアに送るための手段と、第1のアドレスマップを送ったことに応答して第1のプロセッシングコアにおいて共通仮想アドレスを受け取るための手段と、第1のプロセッシングコアの第1のオペレーティングシステムカーネルの内部の共有メモリ領域の第1の属性として共通仮想アドレスを記憶するための手段と、第1のプロセスの共通仮想アドレスにおいて共有メモリ領域をマッピングするための手段とを含み得る、マルチプロセッサコンピューティングデバイスを含む。
【０００７】
ある態様では、マルチプロセッサコンピューティングデバイスは、第2のプロセッシングコアにおいて第1のアドレスマップを受け取るための手段と、第2のプロセッシングコアにおいて第2のプロセスの第2のアドレスマップを取得するための手段と、第2のプロセッシングコアにおいてアドレス照合動作を実行して、第1のアドレスマップおよび第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するための手段と、共通仮想アドレスとして、かつ、第2のプロセッシングコアの第2のオペレーティングシステムカーネルの共有メモリ領域の第2の属性として、一致した仮想アドレスを記憶するための手段と、共通仮想アドレスを第1のプロセッシングコアに送るための手段と、第2のプロセッシングコアにおける第2のプロセスのための共通仮想アドレスにおいて共有メモリ領域の物理ページをマッピングするための手段とを含み得る。
【０００８】
さらなる態様では、第2のプロセッシングコアにおいて第1のアドレスマップを受け取るための手段は、第2のプロセッシングコアのアドレスネゴシエーションハンドラスレッドにおいて第1のアドレスマップを受け取るための手段を含み得る。
【０００９】
さらなる態様は、第1のプロセッシングコアと、第2のプロセッシングコアと、第1のプロセッシングコアおよび第2のプロセッシングコアに結合された共有メモリ領域とを有するマルチプロセッサコンピューティングデバイスを含み、ここで、第1のプロセッシングコアは、第1のプロセスによって、第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するステップと、第1のプロセスの第1のアドレスマップを取得するステップと、第1のアドレスマップを第2のプロセッシングコアに送るステップと、第1のアドレスマップを第2のプロセッシングコアに送ったことに応答して共通仮想アドレスを受け取るステップと、第1のオペレーティングシステムカーネルの内部の共有メモリ領域の第1の属性として共通仮想アドレスを記憶するステップと、第1のプロセスの共通仮想アドレスにおいて共有メモリ領域をマッピングするステップとを含む動作を実行するように、プロセッサ実行可能命令によって構成される。
【００１０】
ある態様では、第2のプロセッシングコアは、第1のアドレスマップを受け取るステップと、第2のプロセスの第2のアドレスマップを取得するステップと、アドレス照合動作を実行して、第1のアドレスマップおよび第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するステップと、共通仮想アドレスとして、かつ、第2のオペレーティングシステムカーネルの共有メモリ領域の第2の属性として、一致した仮想アドレスを記憶するステップと、共通仮想アドレスを第1のプロセッシングコアに送るステップと、第2のプロセスのための共通仮想アドレスにおいて共有メモリ領域の物理ページをマッピングするステップとを含む動作を実行するように、プロセッサ実行可能命令によって構成され得る。
【００１１】
ある態様では、第1のプロセッシングコアおよび第2のプロセッシングコアの各々は、ハードウェアメモリ管理ユニット(MMU)を含み得る。さらなる態様では、第2のプロセッシングコアは、第1のアドレスマップを受け取るステップがアドレスネゴシエーションハンドラスレッドにおいて第1のアドレスマップを受け取るステップを含み得るように動作を実行するように、プロセッサ実行可能命令によって構成され得る。
【００１２】
さらなる態様は、第1のプロセスによって、第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するステップと、第1のプロセスの第1のアドレスマップを取得するステップと、第1のアドレスマップを第2のプロセッシングコアに送るステップと、第1のアドレスマップを第2のプロセッシングコアに送ったことに応答して共通仮想アドレスを受け取るステップと、第1のオペレーティングシステムカーネルの内部の共有メモリ領域の第1の属性として共通仮想アドレスを記憶するステップと、第1のプロセスの共通仮想アドレスにおいて共有メモリ領域をマッピングするステップとを含む動作を、マルチプロセッサコンピューティングデバイスの第1のプロセッシングコアに実行させるように構成される、プロセッサ実行可能ソフトウェア命令を記憶した、非一時的コンピュータ可読記憶媒体を含む。
【００１３】
ある態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、マルチプロセッサコンピューティングデバイスの第2のプロセッシングコアに、第1のアドレスマップを受け取るステップと、第2のプロセスの第2のアドレスマップを取得するステップと、アドレス照合動作を実行して、第1のアドレスマップおよび第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するステップと、共通仮想アドレスとして、かつ、第2のオペレーティングシステムカーネルの共有メモリ領域の第2の属性として、一致した仮想アドレスを記憶するステップと、共通仮想アドレスを第1のプロセッシングコアに送るステップと、第2のプロセスのための共通仮想アドレスにおいて共有メモリ領域の物理ページをマッピングするステップとを含む動作を実行させるように構成され得る。
【００１４】
さらなる態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、マルチプロセッサコンピューティングデバイスの第2のプロセッシングコアに、第1のアドレスマップを受け取るステップがアドレスネゴシエーションハンドラスレッドにおいて第1のアドレスマップを受け取るステップを含み得るように動作を実行させるように構成され得る。
【００１５】
本明細書に組み込まれ、本明細書の一部を構成している添付の図面は、本発明の例示的な態様を示すものであり、上で与えられた一般的な説明および下で与えられる詳細な説明とともに本発明の特徴を説明するのに役立つ。
【図面の簡単な説明】
【００１６】
【図１】様々な態様を実装するのに適した、例示的なシステムオンチップのアーキテクチャ図である。
【図２】アドレスマップと共通仮想アドレスとを通信するように構成される2つのプロセッサを含むある態様のマルチプロセッサコンピューティングシステムの中の例示的な論理コンポーネントと機能コンポーネントとを示すブロック図である。
【図３】様々な態様による、メモリ管理の方法を実施するように構成され得る例示的なプロセッシングコアの論理コンポーネントとインターフェースとを示すブロック図である。
【図４】独立したオペレーティングシステムと別個のメモリ管理ユニット(MMU)とを含む、共有メモリと複数の異種プロセッサとを有するある態様のマルチプロセッサコンピューティングシステムを示すブロック図である。
【図５Ａ】マルチプロセッサコンピューティングデバイスの汎用アプリケーションプロセッサと補助プロセッサとの間で共有されるメモリ領域へのアクセス権を提供するある態様の方法を示すプロセスフロー図である。
【図５Ｂ】マルチプロセッサコンピューティングデバイスのアプリケーションプロセッサから補助プロセッサへと汎用ソフトウェアアプリケーションの部分をオフロードするある態様の方法を示すプロセスフロー図である。
【図６】様々な態様とともに使用するのに適した例示的なモバイルコンピューティングデバイスのコンポーネントブロック図である。
【図７】様々な態様とともに使用するのに適した例示的なラップトップコンピュータのコンポーネントブロック図である。
【図８】様々な態様とともに使用するのに適した例示的なサーバコンピュータのコンポーネントブロック図である。
【発明を実施するための形態】
【００１７】
様々な態様が、添付の図面を参照して詳細に説明される。可能である場合、同じまたは同様の部分を参照するために図面全体を通じて同じ参照番号が使用される。特定の例および実装形態に対して行われる参照は、例示が目的であり、本発明の範囲および特許請求の範囲を限定することは意図されていない。
【００１８】
概して、様々な態様は、システムオンチップ(SOC)において汎用アプリケーションプロセッサと補助プロセッサ(たとえば、DSP)との間で共有されるメモリへのアクセス権を提供する方法、さらには、その方法を実行するように構成されるプロセッサを含む。共有メモリへのアクセス権は、アプリケーションプロセッサ上の第1のプロセス(P1)が(たとえば、オペレーティングシステムカーネルへのシステムコールを介して)補助プロセッサ上の第2のプロセス(P2)とのアドレスのネゴシエーションを要求し、第1のオペレーティングシステムから第1のアドレスマップを取得し、第1のアドレスマップを補助プロセッサに送るように、プロセッサを構成することによって提供され得る。第2のプロセス(P2)は、第1のアドレスマップを受け取り、第2のオペレーティングシステムから第2のアドレスマップを取得し、アドレス照合アルゴリズムまたはルーチンを呼び出して第1のアドレスマップおよび第2のアドレスマップの中の一致する/重複するアドレスを特定し、一致した/重複したアドレスを共通仮想アドレスとして記憶し、(たとえば、システムコール、remote method invocationなどを介して)共通仮想アドレスをアプリケーションプロセッサに送ることができる。第1のプロセスおよび第2のプロセス(すなわち、P1およびP2)は各々、共通仮想アドレスを使用して、物理ページをメモリにマッピングすることができる。アドレスマップおよび共通仮想アドレスを共有することによって、様々な態様は、2つの異種プロセッサがより効率的に通信することを可能にする。
【００１９】
「コンピューティングシステム」および「コンピューティングデバイス」という用語は、総称的に、サーバ、パーソナルコンピュータ、ならびに、携帯電話、スマートフォン、タブレットコンピュータ、ラップトップコンピュータ、ネットブック、ウルトラブック、パームトップコンピュータ、携帯情報端末(PDA)、ワイヤレス電子メール受信機、マルチメディアインターネット対応携帯電話、全地球測位システム(GPS)受信機、ワイヤレスゲームコントローラ、および、プログラマブルプロセッサを含む同様の個人用電子デバイスのような、モバイルデバイスの、いずれか1つまたはすべてを指すように、本明細書において使用される。様々な態様は、処理電力とバッテリー寿命とが限られたスマートフォンのようなモバイルデバイスにおいて特に有用であるが、これらの態様は、一般に、プログラマブルプロセッサおよび補助プロセッサを含む任意のコンピューティングデバイスにおいて有用である。
【００２０】
「モニタエージェント」という用語は、総称的に、ハードウェアモニタ、チップ上に製作される専用ハードウェア、ハイパーバイザ、仮想マシンモニタ、ハイレベルオペレーティングシステム(HLOS)の外部で実行されるモニタソフトウェア、ならびに、HLOS、メモリ管理システム、および/またはアロケータ機能の外部にあり得る、デバイスドライバの一部として実行されるソフトウェアモニタのいずれか1つまたはすべてを含む、仮想化技術をサポートする、かつ/またはコンピューティングリソースの抽象化(または仮想化)を可能にする、任意のハードウェアコンポーネントまたはソフトウェアを指すために本明細書において使用される。
【００２１】
「システムオンチップ」(SOC)という用語は、単一の基板上に統合された複数のリソースおよび/またはプロセッサを含む単一の集積回路(IC)チップを指すために本明細書において使用される。単一のSOCは、デジタル、アナログ、混合信号、および高周波機能のための回路を含み得る。単一のSOCは、任意の数の汎用および/または専用のプロセッサ(デジタル信号プロセッサ、モデムプロセッサ、ビデオプロセッサなど)、メモリブロック(たとえば、ROM、RAM、Flashなど)、およびリソース(たとえば、タイマー、電圧調整器、発振器など)も含み得る。SOCは、統合されたリソースおよびプロセッサを制御するための、また周辺デバイスを制御するためのソフトウェアも含み得る。
【００２２】
近年、モバイルコンピューティングデバイスのアーキテクチャは複雑さが増してきており、今では一般に、複数のプロセッサコア、SOC、コプロセッサ、専用プロセッサ(たとえば、通信モデムチップ、GPS受信機など)を含む機能モジュール、複合メモリシステム、複雑な電気配線(たとえば、バスおよび/または構造物)、複雑かつ電力負荷の大きなソフトウェアアプリケーション(たとえば、ビデオストリーミングアプリケーションなど)を実行するのに適した多数の他のリソースを含む。この複雑さの増大とともに、新たな処理およびメモリ管理の方法が、モバイルデバイスの性能および電力消費特性を改善するために必要とされる。
【００２３】
性能を改善しバッテリー寿命を最大にするために、モバイルデバイスのアプリケーションプロセッサは、補助プロセッサへと動作をオフロードして、それによって処理および/または電力効率の改善を可能にするように構成され得る。補助プロセッサへと動作をオフロードする動作は、デバイスの補助プロセッサ上での実行に適したコードへとソフトウェアアプリケーションの部分を変換または転換するステップと、異なる異種プロセッサにおいてそのソフトウェアアプリケーションの異なる部分を同時に実行するステップと、実行の結果をアプリケーションプロセッサに通信し戻すステップとを含み得る。たとえば、モバイルデバイスは、ソフトウェアアプリケーションのオブジェクトコードを分析し、オブジェクトコードの実行の間に実行されることが必要とされる動作を特定し、特定された動作に基づいてオブジェクトコードをオブジェクトコードセグメントへと区分し、オブジェクトコードセグメントが補助プロセッサにおいて処理され得るかどうかを判定し、補助プロセッサにおける実行に適したフォーマットへと1つまたは複数のオブジェクトコードセグメントを転換し、補助プロセッサに、アプリケーションプロセッサ上で実行される転換されていないオブジェクトコードセグメントと並列に転換されたオブジェクトコードセグメントを実行させるように構成され得る。
【００２４】
補助プロセッサにおいてコード部分のいくつかを実行することによって、単にモバイルデバイスのメインアプリケーションプロセッサまたはCPUにおいてソフトウェアアプリケーション全体を実行することと比較して、性能、効率、および/または電力消費(本明細書の「性能特性」)における大きな向上が実現され得る。しかしながら、既存のメモリ管理システムは、モバイルデバイスにおいてそのような方法を使用することの有効性を制限し得る。
【００２５】
現在のモバイルコンピューティングデバイスのアーキテクチャの複雑さにより、モバイルデバイスの性能特性は、デバイスの通信バスの速度、幅、および帯域幅に大きく依存する。それでも、既存のメモリ管理システムは、コードの部分を補助プロセッサにオフロードして実行の結果をアプリケーションプロセッサに送るときに、メモリからデータを読み取りメモリにデータを書き込むために、システムバスの大量の使用を必要とし得る。デバイスの通信バスのそのような大量の使用は、動作をオフロードすることによって達成される、性能、効率、または電力消費のあらゆる向上を低下させ、または打ち消し得る。
【００２６】
様々な態様は、マルチプロセッサシステム中の2つ以上の異種プロセッサ(たとえば、アプリケーションプロセッサおよび補助プロセッサ)の間で共有されるメモリ領域へのアクセス権を提供する、改善されたメモリ管理の方法を提供する。異種プロセッサが、同じメモリ領域を読み取り、そこへ書き込むことを可能にし、そのような共有メモリ領域へのアクセス権および使用権を提供することによって、様々な態様は、モバイルデバイスの補助プロセッサにおいてソフトウェアアプリケーションの部分をオフロードし実行するときに、システムバスおよび/または構造物を介して通信される情報の量を減らす。
【００２７】
全般に、マルチプロセッサシステム中の各々の異種プロセッサは、システム中の他のオペレーティングシステムおよびプロセッサとは独立にメモリ管理動作を実行するオペレーティングシステムを含む。たとえば、マルチプロセッサシステムは、第1のタイプのオペレーティングシステム(たとえば、FreeBSD、LINUX(登録商標)、OS Xなど)を実行する第1のプロセッサと、第2のタイプのオペレーティングシステム(たとえば、Microsoft Windows(登録商標)8)を実行する第2のプロセッサとを含み得る。これらのオペレーティングシステムの各々は、そのプロセッサ上で実行されるアプリケーションプログラムによるシステムメモリの割振りおよび使用を管理するための、メモリ管理システムを含み得る。たとえば、各オペレーティングシステムは、仮想メモリアドレスをアプリケーションプログラムに割り振り、あるプロセスによって使用されるメモリが別のプロセスによってすでに使用されているメモリと干渉しないことを確実にするように構成される、仮想メモリマネージャ(OS VMM)を含み得る。プロセスが物理メモリへのアクセス権を必要とするとき、これらの仮想アドレスが、プロセッサに固有のメモリ管理ユニット(MMU)によって物理メモリアドレスに転換される。
【００２８】
したがって、既存のシステムでは、各プロセッサは、独立のオペレーティングシステムおよび別個のMMUを使用してメモリ管理動作を実行し、メモリアドレスの割振りまたは使用を調整するためのプロセッサ間の実行上の制御権はない。しかしながら、マルチプロセッサシステムは、異種プロセッサの2つ以上にアクセス可能であるメモリ領域を含み得る。したがって、オフロード動作を実行するときに2つ以上のプロセッサがこの共有メモリへの参照を介して通信できれば、有利であろう。たとえば、補助プロセッサにソフトウェアアプリケーションの部分をオフロードするときにシステムバス/構造物を介して通信される情報の量は、プロセッサが共有メモリへの参照を介して通信するとすれば減らされるであろう。それでも、既存のメモリ管理の方法は、各プロセッサがシステム中の他のプロセッサとは独立にメモリアドレス指定動作を実行することを要求し、結果として、プロセッサは、ポインタ、相対アドレス、仮想アドレスを通信することができず、または共有メモリへの参照を介して通信することができない。
【００２９】
たとえば、既存のメモリ管理の方法を使用して共有メモリ領域にアクセスすることは、第1のプロセッサにおける第1のプロセス(P1)が、共有メモリ領域を作成することと、共有メモリの存在を第2のプロセッサにおける第2のプロセス(P2)に通知し、共有メモリ領域をそのアドレス空間にマッピングするための要求を第1のプロセッサにおける第1のオペレーティングシステムカーネルに出し、その共有メモリ領域のための仮想アドレス(VA1)割当てを受け取る(すなわち、第1のオペレーティングシステムが仮想アドレスVA1を第1のプロセスに割り当てることができる)ことを必要とし得る。第2のプロセス(P2)は、共有メモリ領域の存在の通知を受け取り、共有メモリ領域をマッピングするための要求を第2のプロセッサにおける第2のオペレーティングシステムカーネルに出し、同じ共有メモリ領域のための異なる仮想アドレス(VA2)割当てを受け取ることができる。
【００３０】
従来のシステムでは、各オペレーティングシステムが仮想アドレスを独立に割り当て、これらのメモリアドレスの割振りまたは使用を調整するためのプロセッサ間の実行上の制御権がないので、共有メモリ位置に対して第1のプロセッサによって割り当てられる仮想アドレス(VA1)は、同じ共有メモリ位置に対して第2のプロセッサによって割り当てられる仮想アドレス(VA2)と同じではない。これらの仮想アドレスは異なるので、2つのプロセッサは、ポインタ、相対アドレス、仮想アドレスを直接通信することができず、または共有メモリへの参照を介して通信することができない。
【００３１】
ある例として、リンクされたリスト(たとえば、list[data, next])の「next」フィールドが後続のノード/アドレスの仮想アドレスを含むように、第1のプロセッサにおいて実行される第1のプロセス(P1)が共有メモリ領域においてリンクされたリストを作る状況を考える。P1が、既存の方法を使用して、第2のプロセッシングコアにおいて実行される第2のプロセス(P2)にリストの先頭の仮想アドレスを渡すことによって、リンクされたリストをP2と共有することを試みるとすると、P2は、共有メモリ領域に対して異なる仮想アドレス(すなわち、VA2)を有するので、すべての「next」ポインタを再計算する必要があるであろう。これらのポインタを再計算するのはリソースの非効率な使用であり、これは、マルチプロセッサシステムの性能および電力消費特性に悪影響を与える。
【００３２】
様々な態様は、同じ仮想アドレスが同じ物理アドレスを参照するために2つの異なる異種プロセッサにおいて使用され得るように、メモリアドレスを割り当てるようにマルチプロセッサシステムを構成することによって、従来のシステムにおけるこれらの制約を克服する。異なるプロセッサにおいて同じ仮想アドレスを割り当てることによって、様々な態様は、プロセッサが、アドレス転換動作の実行を回避することと、ポインタ、相対アドレス、仮想アドレスをより直接的に通信すること、または共有メモリへの参照を介して通信することとを可能にする。様々な態様は、汎用ソフトウェアアプリケーションの部分を補助プロセッサにオフロードするときに実行される動作の数を減らし、それによって、モバイルデバイスの性能特性を改善する。様々な態様はまた、システムバスおよび構造物を介して通信される情報の量を減らし、さらに、デバイスの性能特性を改善する。
【００３３】
ある態様では、モバイルデバイスの第1のプロセッシングコアは、共有メモリ領域を作成し、共有メモリ領域のマップを生成し、マップをモバイルデバイスの第2のプロセッシングコアに送るように構成され得る。第2のプロセッシングコアは、マップを受け取り、受け取られたマップを仮想メモリエリア(VMA)中のアドレス範囲または共有メモリ領域の固有のマップと比較し、2つのマップ/アドレスの共通部分(たとえば、双方において使用されていない仮想アドレスの範囲)を特定し、特定された共通部分を第1のプロセッシングコアに通信し戻すように構成され得る。第1のプロセッシングコアと第2のプロセッシングコアの両方が、特定された共通部分に含まれる共通仮想アドレスを使用して、共有メモリ領域中の物理アドレスを参照することができる。これは、第1のプロセッサおよび第2のプロセッサ上の第1のプロセスおよび第2のプロセス(すなわち、P1およびP2)が、ポインタ、相対アドレス、仮想アドレス、メモリ参照などを通信することを可能にする。
【００３４】
様々な態様は、図1に示されるようなシステムオンチップ(SOC)を含む、いくつかのマルチプロセッサコンピュータシステム上で実装され得る。SOC 100は、デジタル信号プロセッサ(DSP)102、モデムプロセッサ104、グラフィクスプロセッサ106、およびアプリケーションプロセッサ108のような、いくつかの異質のプロセッシングコアを含み得る。SOC 100はまた、異種プロセッサ102、104、106、108の1つまたは複数に接続された1つまたは複数のコプロセッサ110(たとえば、ベクトルコプロセッサなど)を含み得る。各プロセッサ102、104、106、108、110は、1つまたは複数のコアを含んでよく、各プロセッサ/コアは、他のプロセッサ/コアとは独立に動作を実行することができる。たとえば、SOC 100は、第1のタイプのオペレーティングシステム(たとえば、FreeBSD、LINUX(登録商標)、OS Xなど)を実行するプロセッサと、第2のタイプのオペレーティングシステム(たとえば、Microsoft(登録商標) Windows(登録商標)8)を実行するプロセッサとを含み得る。
【００３５】
プロセッサ102、104、106、108、110は、互いに(たとえば、単一の基板、ダイ、集積チップなどの上で)極めて近接している独立したプロセッシングコアであり得る。プロセッサ102、104、106、108、110が近接していることで、メモリ112は、データ信号がチップ外を移動しなければならない場合に可能な周波数/クロック速度よりもはるかに高い周波数/クロック速度で動作することが可能になる。その上、プロセッサ102、104、106、108、110が近接していることで、オンチップメモリおよびリソース(たとえば、電圧レール)の共有、ならびにコア間のより協調した連携が可能になる。
【００３６】
プロセッサ102、104、106、108は、一連の再構成可能な論理ゲートを含み、かつ/またはバスアーキテクチャ(たとえば、CoreConnect、AMBAなど)を実装し得る、相互接続/バスモジュール124を介して、相互に接続され、かつ、1つまたは複数のメモリ要素112、システムリソース116ならびにカスタム回路114に相互接続され得る。通信は、高性能ネットワークオンチップ(NoC)のような、高度な相互接続によって提供され得る。
【００３７】
アプリケーションプロセッサ108は、中央処理装置(CPU)、CPUのコンポーネント、またはCPUに結合されるプロセッシングユニットであり得る。ある態様では、CPUは、プロセッサ102〜110の様々なメモリ、システムコンポーネント、リソース、または周辺機器から情報を読み取り、かつそれらに情報を書き込むように構成され得る。ある態様では、プロセッサは、それぞれのプロセッサ102〜110、リソース、および/または周辺機器のメモリ管理システムコントローラを介して、メモリを読み取り、メモリに書き込むことができる。
【００３８】
システムオンチップ(SOC)100は、プロセッサ102〜108の1つまたは複数に接続されるコプロセッサ110を含み得る。そのようなコプロセッサ110は特に、マルチメディアおよびビデオストリーミングアプリケーションのような、高速で並列の実行を必要とするアプリケーションを処理するのに有用であり得る。ある態様では、コプロセッサ110は、独立のハードウェアレジスタ、メモリ、および/または実行ハードウェアを含む、single instruction multiple data(SIMD)命令セットアーキテクチャ(ISA)を実装することができる。ある態様では、SIMDベクトルコプロセッサは、アプリケーションプロセッサ108の一部であってよく、またはそれと密接に結合されてよい。
【００３９】
SOC 100はまた、センサデータ、アナログデジタル変換、ワイヤレスデータ送信を管理し、モバイルデバイスの電子ディスプレイおよびスピーカーにおいてレンダリングするための符号化されたオーディオ信号およびビデオ信号の処理のような、他の特殊な動作を実行するための、アナログ回路およびカスタム回路114を含み得る。
【００４０】
SOC 100は、電圧調整器、発振器、位相ロックループ、周辺ブリッジ、データコントローラ、メモリコントローラ、システムコントローラ、アクセスポート、タイマー、ならびに、プロセッサ、およびコンピューティングデバイス上で実行されるソフトウェアクライアント(たとえば、ウェブブラウザなど)をサポートするために使用される他の同様のコンポーネントのような、システムコンポーネントおよびリソース116をさらに含み得る。システムコンポーネント/リソース116およびカスタム回路114はまた、カメラ、電子ディスプレイ、ワイヤレス通信デバイス、外部メモリチップなどのような周辺デバイスとインターフェースをとるための回路を含み得る。
【００４１】
SOC 100は、クロック118および電圧調整器120のような、SOCの外部のリソースと通信するための入力/出力モジュール(図示されず)をさらに含み得る。SOCの外部のリソース(たとえば、クロック118、電圧調整器120)は、内部SOCプロセッサ/コア(たとえば、DSP 102、モデムプロセッサ104、グラフィクスプロセッサ106、アプリケーションプロセッサ108など)の2つ以上によって共有され得る。
【００４２】
図2は、アドレスマップと共通仮想アドレスとを通信するように構成されるプロセッサを含むある態様のマルチプロセッサコンピューティングシステム200の中の例示的な論理コンポーネントと機能コンポーネントとを示す。示されたコンピュータシステム200は、ハードウェアコンポーネントとソフトウェアコンポーネントの両方を含む。ハードウェアコンポーネントは、アプリケーションプロセッサ108と、デジタル信号プロセッサ(DSP)102と、相互接続モジュール124と、共有メモリモジュール112とを含み得る。ソフトウェアコンポーネントは、ホストオペレーティングシステム202と、DSPオペレーティングシステム204と、プロセッサ間通信モジュール206と、ホストオペレーティングシステムユーザプロセス(プロセスA)208と、DSPプロセス(プロセスB)210とを含み得る。様々な態様において、プロセッサ間通信モジュール206は、仮想マシン、ホストオペレーティングシステム202、ゲストオペレーティングシステム、ハイレベルオペレーティングシステム(HLOS)、モニタエージェント、ハイパーバイザなどの一部として含まれ得る。DSPプロセス210は、1つまたは複数の動作をデジタル信号プロセッサ102に実行させるように構成されたサブルーチン、プロシージャ、プロセス、スレッド、またはサービスであり得る。ホストオペレーティングシステムユーザプロセス208は、汎用ソフトウェアアプリケーションプログラムのプロセスであり得る。
【００４３】
一般に、1つのプロセッシングコアを共有する、1つのプロセッシングコアへのアクセス権を有する、かつ/または1つのプロセッシングコア内で動作するプロセスは、高速なメモリ読取り/書込み動作を介して通信し得る。一方、異なるプロセッシングコアにおける独立したプロセスの間の通信は、通常、比較的遅い関数呼出し、メソッド呼出し、プロシージャ呼出し、メッセージ交換、ドメインソケット(たとえば、Unix(登録商標)ドメインソケット)、および他の形態のプロセス間通信(IPC)を介して達成される。リモートプロシージャ呼出し(RPC)およびremote method invocation(RMI)は、呼出しプロセスがサブルーチン、プロシージャ、プロセス、スレッド、またはサービス(本明細書では総称して「サービス」)を、通常は別のプロセッサ、チップまたはコンピューティングデバイス上の別のアドレス空間において実行させることを可能にするプロセス間通信である。
【００４４】
マルチプロセッサシステムでは、異なるプロセッサ(たとえば、プロセッサ108、102)にとって利用可能なメモリおよびリソースは、しばしば、別個のドメイン(たとえば、保護ドメイン、物理ドメインなど)の中にある。加えて、プロセッサは通常、異なるオペレーティングシステムで構成され、かつ/または異なるハードウェア記述言語(HDL)もしくは命令セットアーキテクチャ(ISA)を実装する。そのようなシステムでは、RPC/RMI機構は、第1のプロセッサ上の呼出しプロセスがサービスを第2のプロセッサにおいて実行させることを可能にし、第2のプロセッサがサービスの実行の結果を第1のプロセッサに送り返すことを可能にする明確なインターフェースを提供し得る。
【００４５】
図2を参照すると、ホストオペレーティングシステムユーザプロセス208は、DSPプロセス210を呼び出して、DSPプロセス210に、DSP 102上で汎用アプリケーションプログラムの動作の実行を開始させることができる。動作を完了した後で、DSPサービス210は、それらの動作の結果をホストオペレーティングシステムユーザプロセス208に通信することができる。様々な実施形態において、そのようなプロセッサ間通信は、プロセッサ間通信モジュール206を介して達成されてよく、プロセッサ間通信モジュール206は、上で論じられたIPC機構のいずれかを介して、または直接のメモリ読取り/書込み動作を介して、プロセッサ108、102の間の通信を実行し、管理し、または支援するように構成され得る。
【００４６】
図3は、様々な態様によるメモリ管理の方法を実施するように構成され得る、例示的なプロセッシングコア(たとえば、アプリケーションプロセッサ108など)の論理コンポーネントおよびインターフェースを示す。示されたコンピュータシステムアーキテクチャ300は、ハードウェアコンポーネント322とソフトウェアコンポーネント320の両方を含む。ソフトウェアコンポーネント320は、オペレーティングシステム302、ライブラリモジュール304、および1つまたは複数のアプリケーションプログラム(A0からAn)306を含み得る。ハードウェアコンポーネント322は、周辺機器308(たとえば、ハードウェアアクセラレータ、入力/出力デバイスなど)、中央処理装置(CPU)310、中央処理装置メモリ管理ユニット(CPU MMU)316、1つまたは複数のシステムメモリ管理ユニット(本明細書では「システムMMU」または「SMMU」)312、および1つまたは複数のメモリ314を含み得る。
【００４７】
一般に、モバイルコンピューティングデバイスのために書かれたアプリケーションソフトウェアは、一般に「アプリケーション」、「アプリ」、またはアプリケーションプログラム306と呼ばれるものである、実行可能コードへとコンパイルされ得る。各アプリケーションプログラム306は、単一のプロセスもしくはスレッドであってよく、または複数のプロセスもしくはスレッドを含んでよい。アプリケーションプログラム306は、アプリケーションプログラムインターフェース(API)を介して、高水準言語(HLL)ライブラリコールをライブラリモジュール304に出すことができる。ライブラリモジュール304は、アプリケーションバイナリインターフェース(ABI)を介して、オペレーティングシステム302上で(たとえば、オペレーティングシステムコールを介して)サービスを呼び出すことができる。オペレーティングシステム302は、ハードウェア322によって実装された固有のオペコード(opcode)およびネイティブコマンドのリストである固有の命令セットアーキテクチャ(ISA)を使用して、ハードウェアコンポーネントと通信することができる。このようにして、命令セットアーキテクチャは、オペレーティングシステム302によって見られるようにハードウェア322を定義することができる。
【００４８】
オペレーティングシステム302は、アプリケーションプログラム306の間での様々なメモリ314の割振りおよび使用を調整して制御するように構成されてよく、これは、複数のアプリケーションプログラム(A0〜An)306にわたって物理メモリを区分することを含み得る。ある態様では、これは、オペレーティングシステム302が仮想アドレス(VA)を各アプリケーションプログラム(A0〜An)306に割り当て、次いでアプリケーションプログラム(A0〜An)306の実行の前に仮想アドレス(VA)に基づいて物理メモリアドレス(PA)を割り振る、メモリアドレス空間転換処理を介して達成され得る。
【００４９】
オペレーティングシステム302は、様々なアプリケーションプログラム(A0からAn)306によるシステムメモリの割振りおよび使用を管理するための、1つまたは複数のメモリ管理システム(たとえば、仮想メモリマネージャなど)を含み得る。これらのメモリ管理システムは、あるプロセスによって使用されるメモリが別のプロセスによってすでに使用されているメモリと干渉しないことを確実にするように機能し得る。たとえば、オペレーティングシステム302は、オペレーティングシステム302が特定の物理アドレスを別のアドレス(すなわち、仮想アドレス)に見えるようにすることを可能にする、仮想アドレス指定動作を実行するように構成される、ソフトウェアベースのメモリマネージャを含み得る。これらの仮想アドレス指定動作は、仮想メモリアドレスをアプリケーションプログラム(A0〜An)306に割り振ることを含み得る。
【００５０】
上で論じられたソフトウェアベースのメモリ管理システムに加えて、システムは、示される中央処理装置(CPU)メモリ管理ユニット(MMU)316およびシステムMMU 312のような、1つまたは複数のハードウェアベースのメモリ管理システムを含み得る。CPU MMU 316およびシステムMMU 312は各々、物理アドレスへの仮想アドレスの転換、キャッシュ制御、バス調停、およびメモリ保護のような、様々なメモリに関連する動作を実行することを担う、1つまたは複数のハードウェアコンポーネントを含み得る。
【００５１】
ある態様では、CPU MMU 316は、アドレス転換サービスおよび保護機能をメインCPU 310に提供することを担ってよく、システムMMU 312は、アドレス転換サービスおよび保護機能を他のハードウェアコンポーネント(たとえば、デジタル信号プロセッサ、モデムプロセッサ、グラフィクスプロセッサなど)に提供することを担ってよい。ある実施形態では、マルチプロセッサ中のプロセッサの各々は、独立したMMUを含み得る。
【００５２】
メモリ管理システム(たとえば、CPU MMU 316など)は、メモリアドレス転換(たとえば、物理アドレスへの仮想アドレスの転換など)のために使用され得るキャッシュメモリである、トランスレーションルックアサイドバッファ(TLB)を含み得る。ある態様では、トランスレーションルックアサイドバッファ(TLB)は、記憶された情報がキー-値のフォーマット(たとえば、ハッシュテーブル)へと編成されるハードウェア連想アレイメモリであり得る、コンテンツアドレッサブルメモリ(CAM)であり得る。キーは仮想アドレスであってよく、値は物理アドレスであってよい。様々な態様において、トランスレーションルックアサイドバッファは、ハードウェアで管理され、ソフトウェアで管理され、またはハードウェアとソフトウェアの組合せによって管理され得る。
【００５３】
メモリアドレス転換処理の一部として、メモリ管理システム(たとえば、OS VMM、システムMMU 312、CPU MMU 316など)は、トランスレーションルックアサイドバッファをキーとして仮想アドレスに送ることによって、トランスレーションルックアサイドバッファから物理アドレスを要求するために、コンテンツアドレッサブルメモリの検索を実行することができる。仮想アドレスのキーがトランスレーションルックアサイドバッファ中に対応する物理アドレス値を有する(すなわち、「TLBヒット」が発生する)場合、コンテンツアドレッサブルメモリの検索は、対応する物理アドレスを取り出し、返すことができる。要求されたアドレスがトランスレーションルックアサイドバッファ中にない(すなわち、「TLBミス」が発生する)場合、メモリアドレス転換処理は、複数のメモリ位置の内容を読み取り、物理アドレスを計算することによって、ページウォーク(たとえば、ソフトウェアページウォーク、ハードウェアページウォークなど)を実行することができる。物理アドレスがページウォークによって決定された後で、仮想アドレスから物理アドレスへのマッピングが、トランスレーションルックアサイドバッファに記憶され得る。
【００５４】
ソフトウェアで管理されるトランスレーションルックアサイドバッファを含む態様では、TLBミスは、オペレーティングシステムに、ページテーブルをウォークさせ、ソフトウェアにおいて転換を実行させ得る。ハードウェアで管理されるトランスレーションルックアサイドバッファを含む態様では、メモリ管理システムは、ハードウェアテーブルウォークを実行して、指定された仮想アドレスキーに対して有効なページテーブルエントリーが存在するかどうかを判定することができる。
【００５５】
図4は、各々が独立したオペレーティングシステムと別個のメモリ管理ユニット(MMU)402、408とを含む、共有メモリ112と複数の異種プロセッサ102、108とを有するある態様のマルチプロセッサコンピューティングシステム400を示す。
【００５６】
既存のメモリ管理の方法を使用すると、共有メモリ領域にアクセスすることは、アプリケーションプロセッサ108における第1のプロセス(P1)が、共有メモリ領域を作成することと、共有メモリ領域の存在をDSP 102中の第2のプロセス(P2)に(たとえば、システムコールまたはIPCを介して)通知することと、共有メモリ領域をそのアドレス空間へとマッピングするための要求をアプリケーションプロセッサのオペレーティングシステムカーネルに出すことと、共有メモリ領域のための仮想アドレス(VA1)割当てを受け取ることとを必要とし得る。第2のプロセス(P2)は、第1のプロセス(P1)から通知を受け取り、共有メモリ領域をマッピングするための要求をDSPオペレーティングシステムカーネルに出し、同じ共有メモリ領域のための異なる仮想アドレス(VA2)割当てを受け取ることができる。
【００５７】
上で論じられたように、各オペレーティングシステムは、仮想アドレスを独立に割り当て、これらのメモリアドレスの割振りまたは使用を調整するためのプロセッサ間の実行上の制御権がないので、共有メモリ位置に対して第1のプロセッサによって割り当てられる仮想アドレス(VA1)は、その同じ共有メモリ位置に対して第2のプロセッサによって割り当てられる仮想アドレス(VA2)と同じではない。したがって、異なる仮想アドレスが異なるプロセッサに割り当てられた場合、2つのプロセッサは、ポインタ、相対アドレス、仮想アドレスを直接通信できず、または共有メモリへの参照を介して通信できない。
【００５８】
様々な態様において、マルチプロセッサコンピューティングシステム400は、共有メモリ112の中の同じ物理アドレスを参照するために両方の異種プロセッサ102、108によって同じ仮想アドレスが使用され得るように、メモリアドレスを割り当てるように構成され得る。異なるプロセッサにおいて同じ仮想アドレスを割り当てることによって、様々な態様は、プロセッサが、ポインタ、相対アドレス、仮想アドレスを通信すること、または共有メモリへの参照を介して通信することを可能にする。様々な態様はまた、汎用ソフトウェアアプリケーションの部分を補助プロセッサにオフロードするときに実行される動作の数を減らし、それによって、システム400の性能特性を改善する。様々な態様はまた、システムバスおよび構造物を介して通信される情報の量を減らし、さらに、デバイスの性能特性を改善する。
【００５９】
一般に、オペレーティングシステムは、仮想メモリエリアと呼ばれるアドレス範囲のリストとして、プロセスアドレス空間の記録をとる。オペレーティングシステムカーネルの内部のタスク構造は、プロセスによって使用される仮想アドレスの範囲を特定する仮想メモリエリア(VMA)のリストを保持する。
【００６０】
様々な態様において、マルチプロセッサコンピューティングシステム400は、アプリケーションプロセッサ108において実行される第1のプロセス(P1)が共有メモリ領域を作成するときに、P1がメモリ領域をマッピングしてマップをDSP 102に送るように構成され得る。DSP 102において実行される第2のプロセス(P2)は次いで、受け取られたアドレスマップをそのアドレス範囲または共有メモリ領域の固有のマップと比較し、2つのマップ/アドレスの共通部分(たとえば、双方において使用されていない仮想アドレスの範囲)を特定し、特定された共通部分をアプリケーションプロセッサ108に通信し戻す。次いで、両方のプロセッサ102、108は、共有メモリ領域を共通部分において特定される共通仮想アドレスにマッピングする。
【００６１】
図5Aは、マルチプロセッサコンピューティングデバイス中の汎用アプリケーションプロセッサと補助プロセッサ(たとえば、DSP)との間で共有されるメモリ領域へのアクセス権を提供するある態様の方法500を示す。態様の方法500は、第1のオペレーティングシステム(OS)カーネルを有するアプリケーションプロセッサおよび第2のOSカーネルを有する補助プロセッサによって、モバイルコンピューティングデバイスにおいて実行され得る。ブロック502において、アプリケーションプロセッサは、補助プロセッサとのアドレスのネゴシエーションを(たとえば、第1のOSカーネルへのシステムコールを介して)要求することができる。これは、アプリケーションプロセッサにおける第1のプロセッサ(P1)が、第2のプロセッシングコアにおける第2のプロセス(P2)とのアドレスのネゴシエーションを要求するシステムコールを第1のOSカーネルに出すことによって達成され得る。
【００６２】
ブロック504において、アプリケーションプロセッサは、アドレスのネゴシエーションを要求したことに応答して、第1のプロセス(P1)のアドレスマップを受け取る/取得することができる。ある態様では、第1のプロセス(P1)のアドレスマップは、補助プロセッサ中のアドレスネゴシエーションハンドラスレッドによって補助プロセッサにおいて受け取られ得る。ブロック506において、アプリケーションプロセッサは、取得されたアドレスマップを第2のプロセッシングコアに送ることができる。ブロック508において、アプリケーションプロセッサは、補助プロセッサからの応答を待機し、かつ/または他の処理タスクを実行することができる。
【００６３】
ブロック510において、補助プロセッサは、アプリケーションプロセッサから第1のプロセス(P1)のアドレスマップを受け取ることができる。ブロック512において、補助プロセッサは、システムコールを第2のOSカーネルに出すことなどによって、第2のプロセス(P2)のアドレスマップを要求して取得することができる。ブロック514において、補助プロセッサは、アドレス照合ルーチン/プロシージャを実行/実施して、第1のプロセスおよび第2のプロセス(P1およびP2)のアドレスマップが任意の一致する仮想アドレスまたは共通部分を含むかどうかを判定することができる。これは、アドレスを並べ替えて比較することによって、または、当技術分野において知られている任意の既知のアドレス照合アルゴリズムを介して、達成され得る。
【００６４】
判定ブロック516において、補助プロセッサは、アドレス照合ルーチンが任意の一致するアドレスまたは共通部分を特定したかどうかを判定することができる。第1のプロセスおよび第2のプロセス(P1およびP2)のアドレスマップが一致するアドレスまたは共通部分を含まないと補助プロセッサが判定するとき(すなわち、判定ブロック516=「No」)、ブロック524において、補助プロセッサは、従来の方法を使用して、第2のプロセス(P2)のための共有メモリ領域の物理ページをマッピングすることができる。
【００６５】
第1のプロセスおよび第2のプロセス(P1およびP2)のアドレスマップが一致するアドレスまたは共通部分を含むと補助プロセッサが判定するとき(すなわち、判定ブロック516=「Yes」)、補助プロセッサは、ブロック518において、一致した仮想アドレスを第2のOSカーネル中の共有メモリ領域の属性として記憶することによって、一致した仮想アドレスを共通仮想アドレスとして記憶することができる。すなわち、各プロセスの論理アドレス空間は、メモリのマッピングされた領域を含んでよく、各々のマッピングされたメモリ領域は、たとえば書込み保護を制御しメモリが共有可能かどうかを判定するための、様々な属性を含み得る。補助プロセッサは、ブロック518において、共有メモリ領域のこれらの属性の1つとして、一致した仮想アドレスを記憶することができる。ブロック520において、補助プロセッサは、第2のプロセス(P2)のための共通アドレスにおいて、共有メモリ領域の物理ページをマッピングすることができる。ブロック522において、補助プロセッサは、共通仮想アドレスをアプリケーションプロセッサに送ることができる。
【００６６】
判定ブロック516において、アプリケーションプロセッサは、通信ポートまたはソケットにポーリングして、共通仮想アドレスが補助プロセッサから受け取られたかどうかを判定することができる。共通仮想アドレスが受け取られておらず、十分な長さの時間が過ぎたとアプリケーションプロセッサが判定するとき(すなわち、判定ブロック526=「No」)、ブロック532において、アプリケーションプロセッサは、従来の方法を使用して、第1のプロセス(P1)のための共有メモリ領域の物理ページをマッピングすることができる。
【００６７】
共通仮想アドレスが受け取られたとアプリケーションプロセッサが判定するとき(すなわち、判定ブロック526=「Yes」)、アプリケーションプロセッサは、ブロック528において、共通仮想アドレスを第1のOSカーネルの内部の共有メモリ領域の属性として記憶することができる。ブロック530において、アプリケーションプロセッサは、第1のプロセス(P1)のための共通アドレスにおいて、共有メモリ領域の物理ページをマッピングすることができる。
【００６８】
図5Bは、汎用ソフトウェアアプリケーションの部分を補助プロセッサ(たとえば、DSP)にオフロードするある態様の方法550を示す。方法550の動作は、マルチプロセッサコンピューティングデバイス中のアプリケーションプロセッサによって実行され得る。
【００６９】
ブロック552において、アプリケーションプロセッサは、汎用ソフトウェアアプリケーションを分析して、アプリケーションプロセッサの実行の間にモバイルデバイスにおいて実行されることが必要とされる動作を特定することができる。ブロック554において、アプリケーションプロセッサは、特定された動作に基づいて、ソフトウェアアプリケーションをセグメントへと区分することができる。ブロック556において、アプリケーションプロセッサは、汎用ソフトウェアアプリケーションのセグメントが補助プロセッサにおいて実行され得ると決定することができる。ブロック558において、アプリケーションプロセッサは、補助プロセッサにおける実行に適したコードへと、セグメントを変換し、転換し、またはコンパイルすることができる。ブロック560において、アプリケーションプロセッサは、アプリケーションプロセッサと補助プロセッサの両方がアクセス可能である共有メモリ領域に、生成されたコードを記憶することができる。ブロック562において、アプリケーションプロセッサは、補助プロセッサに、共有メモリ領域からコードを取り出させ、コードを実行させることができる。ある態様では、これは、アプリケーションプロセッサが、たとえば補助プロセッサに仮想メモリアドレスまたはリンクされたリストのヘッダを送ることでメモリ参照を補助プロセッサに通信することによって、達成され得る。
【００７０】
様々な態様が、種々のコンピューティングデバイス上で実装されてよく、それらの例が図6〜図8に示される。図6は、内部メモリ602に結合されたマルチコアプロセッサ601と、ディスプレイ604(たとえば、タッチスクリーンディスプレイ)と、スピーカー606とを含むスマートフォン600の形態のモバイルコンピューティングデバイスを示す。加えて、スマートフォン600は、マルチコアプロセッサ601に結合されたワイヤレスデータリンクおよび/またはモデムもしくは携帯電話送受信機610に接続され得る、電磁放射を送信および受信するためのアンテナ608を含み得る。スマートフォン600は、通常、ユーザ入力を受け取るためのメニュー選択ボタンまたはロッカースイッチ612も含む。
【００７１】
マルチコアプロセッサ601は、上で説明され図1に示されたものと同様の回路および構造を含み、図2および図3に示される論理コンポーネントまたは機能コンポーネントのいずれかまたはすべてを含み得る。モデム601はまた、複数のプロセッシングコアを含んでよく、高周波信号を受信および送信するためのアンテナ608に結合され得る。
【００７２】
典型的なスマートフォン600はまた、マイクロフォンから受信された音をワイヤレス送信に適したデータパケットにデジタル化し、受信された音のデータパケットを復号し、スピーカーに供給されて音を発生させるアナログ信号を生成する、音声符号化/復号(コーデック)回路614を含む。また、マルチコアプロセッサ601、ワイヤレス送受信機610、およびコーデック614の1つまたは複数は、デジタル信号プロセッサ(DSP)回路(個別に図示されず)を含み得る。
【００７３】
典型的なモバイルコンピューティングデバイスは、共通して、例示的なパーソナルラップトップコンピュータ700を示す図7に示されたコンポーネントを有する。そのようなパーソナルコンピュータ700は、一般に、揮発性メモリ702、およびディスクドライブ704のような大容量不揮発性メモリに結合された、マルチコアプロセッサ701を含む。コンピュータ700はまた、プロセッサ701に結合されたコンパクトディスク(CD)および/またはDVDドライブ708を含み得る。コンピュータデバイス700はまた、プロセッサ701をネットワークに結合するためのネットワーク接続回路のような、データ接続を確立するための、または外部メモリデバイスを受け入れるための、プロセッサ701に結合されたいくつかのコネクタポートを含み得る。コンピューティングデバイス700は、プロセッサ701に結合されたワイヤレスデータリンクに接続された電磁放射を送受信するための無線/アンテナ710を有し得る。コンピュータ700は、コンピュータ技術分野においてよく知られているように、キーボード718と、ポインティングマウスパッド720と、ディスプレイ722とをさらに含み得る。
【００７４】
様々な態様はまた、図8に示されるサーバ800のような種々の市販のサーバデバイスのいずれでも実装され得る。そのようなサーバ800は通常、複数のプロセッサシステムを含み、プロセッサシステムの1つまたは複数は、マルチコアプロセッサ801であってよく、またはマルチコアプロセッサ801を含んでよい。プロセッサ801は、揮発性メモリ802、およびディスクドライブ803のような大容量不揮発性メモリに結合され得る。サーバ800はまた、プロセッサ801に結合された、フロッピー(登録商標)ディスクドライブ、コンパクトディスク(CD)、またはDVDディスクドライブ804を含み得る。サーバ800はまた、他のブロードキャストシステムコンピュータおよびサーバに結合されたローカルエリアネットワークのような、ネットワーク808とのデータ接続を確立するための、プロセッサ801に結合されたネットワークアクセスポート806を含み得る。
【００７５】
プロセッサ601、701、801は、本明細書で説明される様々な態様の機能および動作を含む、様々な機能を実行するためのソフトウェア命令(アプリケーション)によって構成され得る、任意のプログラマブルマルチコアマルチプロセッサ、マイクロコンピュータまたは複数のプロセッサチップであり得る。1つのプロセッサをワイヤレス通信機能専用とし、1つのプロセッサを他のアプリケーションの実行専用とするなど、複数のプロセッサが設けられ得る。通常、ソフトウェアアプリケーションは、アクセスされてプロセッサ601、701、801にロードされる前に、内部メモリ602、702、802に記憶され得る。いくつかのモバイルコンピューティングデバイスでは、追加のメモリチップ(たとえば、Secure Data (SD)カード)が、モバイルデバイスに差し込まれ、プロセッサ601、701、801に結合され得る。内部メモリ602、702、802は、揮発性メモリ、もしくはフラッシュメモリなどの不揮発性メモリ、または両方の混合物であり得る。本明細書では、メモリに対する一般的な言及は、内部メモリ602、702、802、モバイルデバイスに接続されたリムーバブルメモリ、およびプロセッサ601、701、801自体の中のメモリを含む、プロセッサ601、701、801によってアクセス可能なすべてのメモリを指す。
【００７６】
図1を参照して上で論じられたようなマルチプロセッサハードウェア設計は、同じパッケージの内部の、しばしば同じシリコン片上に、異なる機能の複数のプロセッシングコアを含み得る。対称なマルチプロセッシングハードウェアは、単一の共有されたメインメモリに接続され単一のオペレーティングシステムによって制御される2つ以上の同一のプロセッサを含む。非対称のまたは「緩く結合された」のマルチプロセッシングハードウェアは、各々、独立したオペレーティングシステムおよびハードウェア記述言語または命令セットアーキテクチャによって制御され、1つまたは複数の共有メモリ/リソースに接続され得る、2つ以上の異種プロセッサ/コアを含み得る。
【００７７】
様々な態様の動作を遂行するためにプログラマブルプロセッサ上で実行するためのコンピュータプログラムコードすなわち「コード」は、C、C++、C#、Smalltalk、Java(登録商標)、JavaScript(登録商標)、Visual Basic、Structured Query Language (たとえば、Transact-SQL)、Perlのような高水準プログラミング言語で、または様々な他のプログラミング言語で書かれ得る。本明細書で使用されるコンピュータ可読記憶媒体に記憶されるプログラムコードまたはプログラムは、そのフォーマットがプロセッサによって理解可能である機械語コード(オブジェクトコードのような)を指す。
【００７８】
多くのモバイルコンピューティングデバイスのオペレーティングシステムのカーネルは、(非特権コードが動作する場合)ユーザ空間へと編成され、(特権コードが動作する場合)カーネル空間へと編成される。この分離は、カーネル空間の一部であるコードが一般公有使用許諾(GPL)で許諾される必要がある一方で、ユーザ空間内で実行されるコードがGPLで許諾されることが必要とされない、Android(登録商標)および他のGPL環境において特に重要である。本明細書で説明される様々なソフトウェアコンポーネント/モジュールは、明示的に別段述べられない限り、カーネル空間またはユーザ空間のいずれかに実装され得ることを理解されたい。
【００７９】
本出願で使用されるような、「コンポーネント」、「モジュール」、「システム」、「サービス」、「エンジン」、「リスナー」、「マネージャ」などの用語は、限定はされないが、特定の動作または機能を実行するように構成された、ハードウェア、ファームウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、または実行中のソフトウェアなど、コンピュータ関連のエンティティを含むことが意図される。たとえば、コンポーネントは、限定はされないが、プロセッサ上で実行されるプロセス、プロセッサ、オブジェクト、実行ファイル、実行スレッド、プログラム、および/またはコンピュータであり得る。例を挙げると、コンピューティングデバイス上で実行されているアプリケーションとコンピューティングデバイスの両方が、コンポーネントと呼ばれ得る。1つまたは複数のコンポーネントは、プロセスおよび/または実行スレッドの中に存在してよく、1つのコンポーネントは、1つのプロセッサまたはコアに局在してよく、かつ/または2つ以上のプロセッサまたはコアの間に分散してよい。加えて、これらのコンポーネントは、様々な命令および/またはデータ構造を記憶している様々な非一時的コンピュータ可読媒体から実行することができる。コンポーネントは、ローカルおよび/またはリモートプロセス、関数呼出しまたはプロシージャ呼出し、電子信号、データパケット、メモリ読出し/書込み、ならびに他の知られているコンピュータ、プロセッサ、および/または通信方法に関するプロセスによって通信できる。
【００８０】
いくつかの異なるタイプのメモリおよびメモリ技術が利用可能であり、または将来考えられ、それらのすべてが様々な態様を実装し、様々な態様とともに使用するのに適している。そのようなメモリ技術/タイプは、相変化メモリ(PRAM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、非揮発性ランダムアクセスメモリ(NVRAM)、擬似ランダムアクセスメモリ(PSRAM)、ダブルデータレート同期ダイナミックランダムアクセスメモリ(DDR SDRAM)、および当技術分野で知られている他のランダムアクセスメモリ(RAM)および読取り専用メモリ(ROM)技術を含む。DDR SDRAMメモリは、ダブルデータレート(DDR)タイプ1同期ダイナミックランダムアクセスメモリ(SDRAM)メモリ、DDRタイプ2 SDRAMメモリ、DDRタイプ3 SDRAMメモリ、またはDDRタイプ4 SDRAMメモリであり得る。上で言及されたメモリ技術の各々は、たとえば、命令、プログラム、制御信号、および/または、コンピュータもしくは他のデジタル電子デバイスにおいて、またはそれらによって使用するためのデータを記憶するのに適した要素を含む。個々のタイプのメモリ、インターフェース、規格、またはメモリ技術に関連した用語および/または技術的詳細に対するいかなる参照も例示が目的にすぎず、請求項の文言に具体的に記載されない限り、特許請求の範囲を特定のメモリシステムまたはメモリ技術に限定することは意図されない。
【００８１】
前述の方法の説明およびプロセスフロー図は、単に説明のための例として提供され、様々な態様のブロックが、提示された順序で実行されなければならないことを要求または暗示するものではない。当業者により諒解されるように、前述の態様におけるブロックの順序は、どのような順序で実行されてもよい。「その後」、「次いで」、「次に」などの単語は、ブロックの順序を限定するものではなく、これらの単語は、方法の説明を通して読者を案内するために使用されるにすぎない。さらに、たとえば、冠詞「a」、「an」または「the」を使用する単数形での請求要素へのいかなる言及も、その要素を単数形に限定するものとして解釈されるべきではない。
【００８２】
本明細書で開示された態様に関して説明された、様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムブロックは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得る。ハードウェアおよびソフトウェアのこの互換性を明確に示すために、様々な例示的なコンポーネント、ブロック、モジュール、回路、およびステップは、全般にそれらの機能に関して上で説明されてきた。そのような機能がハードウェアとして実装されるか、またはソフトウェアとして実装されるかは、具体的な適用例およびシステム全体に課される設計制約に依存する。当業者は、説明された機能を具体的な適用例ごとに様々な方法で実装することができるが、そのような実装の決定は、本発明の範囲からの逸脱を引き起こすものと解釈されるべきではない。
【００８３】
本明細書において開示される態様に関連して説明されている様々な例示的な論理、論理ブロック、モジュール、および回路を実装するために使用されるハードウェアは、本明細書において説明される機能を実行するように設計された、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または、他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタ論理、個別ハードウェアコンポーネント、もしくはそれらの任意の組合せを使用して実装または実行され得る。汎用プロセッサは、マイクロプロセッサであり得るが、代替的に、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサは、また、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと連動する1つまたは複数のマイクロプロセッサ、または任意の他のそのような構成として実装され得る。代替的に、いくつかのステップまたは方法は、所与の機能に固有の回路によって実行され得る。
【００８４】
1つまたは複数の例示的な態様では、説明される機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、非一時的コンピュータ可読媒体上または非一時的プロセッサ可読媒体上の1つまたは複数の命令またはコードとして記憶され得る。本明細書で開示される方法またはアルゴリズムのステップは、非一時的コンピュータ可読記憶媒体またはプロセッサ可読記憶媒体上に存在し得るプロセッサ実行可能ソフトウェアモジュールにおいて具現化され得る。非一時的コンピュータ可読記憶媒体またはプロセッサ可読記憶媒体は、コンピュータまたはプロセッサによってアクセスされ得る、任意の記憶媒体であり得る。限定ではなく例として、そのような非一時的コンピュータ可読媒体または非一時的プロセッサ可読媒体は、RAM、ROM、EEPROM、フラッシュメモリ、CD-ROMもしくは他の光ディスク(disc)ストレージ、磁気ディスク(disk)ストレージもしくは他の磁気ストレージデバイス、または、命令もしくはデータ構造の形で所望のプログラムコードを記憶するのに使用されコンピュータによってアクセスされ得る任意の他の媒体を含み得る。ディスク(disk)およびディスク(disc)は、本明細書で使用される場合、コンパクトディスク(disc)(CD)、レーザディスク(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)、およびブルーレイディスク(disc)を含み、ディスク(disk)は、通常はデータを磁気的に再生し、ディスク(disc)は、レーザを用いてデータを光学的に再生する。上記の組合せも、非一時的コンピュータ可読媒体または非一時的プロセッサ可読媒体の範囲に含まれる。さらに、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれ得る、非一時的プロセッサ可読媒体/または非一時的コンピュータ可読媒体上のコードおよび/または命令の1つまたは任意の組合せまたはセットとして存在し得る。
【００８５】
開示される態様の前述の説明は、当業者が本発明を作成または使用することを可能にするために提供されている。これらの態様に対する様々な修正は、当業者には容易に明らかであり、本明細書で定義された一般的な定義は、本発明の要旨または範囲から逸脱することなく、他の態様に適用され得る。したがって、本発明は、本明細書に示される態様に限定されることは意図されず、以下の特許請求の範囲、ならびに、本明細書で開示されている原理および新規な特徴と一致する最も広い範囲を与えられるべきである。
【符号の説明】
【００８６】
100  SOC
102  デジタル信号プロセッサ
104  モデムプロセッサ
106  グラフィクスプロセッサ
108  アプリケーションプロセッサ
110  コプロセッサ
112  メモリ、メモリ要素、メモリモジュール
114  アナログおよびカスタム回路、共有メモリ
116  システムコンポーネントおよびリソース
118  クロック
120  電圧調整器
124  相互接続、相互接続/バス、相互接続/バスモジュール、相互接続モジュール
200  マルチプロセッサコンピューティングシステム、コンピュータシステム
202  ホストオペレーティングシステム
204  DSPオペレーティングシステム
206  プロセッサ間通信モジュール
208  プロセスA、ホストオペレーティングシステムユーザプロセス
210  プロセスB、DSPプロセス
300  コンピュータシステムアーキテクチャ
302  オペレーティングシステム
304  ライブラリ、ライブラリモジュール
306  アプリケーションプログラム
308  周辺機器
310  プロセッサ、中央処理装置(CPU)、メインCPU
312  システムMMU
316  CPU MMU、中央処理装置メモリ管理ユニット(CPU MMU)
320  ソフトウェア、ソフトウェアコンポーネント
322  ハードウェア、ハードウェアコンポーネント
400  マルチプロセッサコンピューティングシステム
402  MMU
408  MMU
500  方法
550  方法
600  スマートフォン
601  マルチコアプロセッサ、モデム
602  内部メモリ
604  ディスプレイ
606  スピーカー
608  アンテナ
610  携帯電話送受信機、ワイヤレス送受信機
612  メニュー選択ボタンまたはロッカースイッチ
614  コーデック回路、音声符号化/復号(コーデック)回路、コーデック
700  パーソナルラップトップコンピュータ、パーソナルコンピュータ、コンピュータ、コンピュータデバイス、コンピューティングデバイス
701  プロセッサ
702  揮発性メモリ、内部メモリ
704  ディスクドライブ
708  CDおよび/またはDVDドライブ
710  アンテナ、無線/アンテナ
718  キーボード
720  ポインティングマウスパッド
722  ディスプレイ
800  サーバ
801  マルチコアプロセッサ、プロセッサ
802  揮発性メモリ、内部メモリ
803  ディスクドライブ
804  フロッピー(登録商標)、CDまたはDVDディスクドライブ、フロッピー(登録商標)ディスクドライブ、コンパクトディスク(CD)、またはDVDディスクドライブ
806  ネットワークアクセスポート
808  ネットワーク
【図１】
2016532959.tif 000003
【図２】
2016532959.tif 000004
【図３】
2016532959.tif 000005
【図４】
2016532959.tif 000006
【図５Ａ】
2016532959.tif 000007
【図５Ｂ】
2016532959.tif 000008
【図６】
2016532959.tif 000009
【図７】
2016532959.tif 000010
【図８】
2016532959.tif 000011
【手続補正書】
【提出日】平成27年3月4日(2015.3.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第1のプロセッシングコアおよび第2のプロセッシングコアを有するマルチプロセッサコンピューティングデバイスの共有メモリ領域へのアクセス権を提供する方法であって、
前記第1のプロセッシングコアにおける第1のプロセスによって、前記第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するステップであって、前記第1のプロセッシングコアおよび前記第2のプロセッシングコアが異種である、ステップと、
前記第1のプロセッシングコアにおける前記第1のプロセスの第1のアドレスマップを取得するステップと、
前記第1のアドレスマップを前記第2のプロセッシングコアに送るステップと、
前記第1のアドレスマップを送ったことに応答して前記第1のプロセッシングコアにおいて共通仮想アドレスを受け取るステップと、
前記第1のプロセッシングコアの第1のオペレーティングシステムカーネルの内部の前記共有メモリ領域の第1の属性として前記共通仮想アドレスを記憶するステップと、
前記第1のプロセスの前記共通仮想アドレスにおいて前記共有メモリ領域をマッピングするステップと
を備える、方法。
【請求項２】
前記第1のアドレスマップを前記第2のプロセッシングコアにおいて受け取るステップと、
前記第2のプロセッシングコアにおける前記第2のプロセスの第2のアドレスマップを取得するステップと、
前記第2のプロセッシングコアにおいてアドレス照合動作を実行して、前記第1のアドレスマップおよび前記第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するステップと、
前記共通仮想アドレスとして、かつ、前記第2のプロセッシングコアの第2のオペレーティングシステムカーネルの前記共有メモリ領域の第2の属性として、前記一致した仮想アドレスを記憶するステップと、
前記共通仮想アドレスを前記第1のプロセッシングコアに送るステップと、
前記第2のプロセッシングコアにおける前記第2のプロセスのための前記共通仮想アドレスにおいて前記共有メモリ領域の物理ページをマッピングするステップと
をさらに備える、請求項1に記載の方法。
【請求項３】
前記第1のプロセッシングコアおよび前記第2のプロセッシングコアの各々が、ハードウェアメモリ管理ユニット(MMU)を含む、請求項2に記載の方法。
【請求項４】
前記第2のプロセッシングコアにおいて前記第1のアドレスマップを受け取るステップが、前記第2のプロセッシングコアのアドレスネゴシエーションハンドラスレッドにおいて前記第1のアドレスマップを受け取るステップを備える、請求項2に記載の方法。
【請求項５】
第1のプロセッシングコアにおける第1のプロセスによって、第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するための手段であって、前記第1のプロセッシングコアおよび前記第2のプロセッシングコアが異種である、手段と、
前記第1のプロセッシングコアにおける前記第1のプロセスの第1のアドレスマップを取得するための手段と、
前記第1のアドレスマップを前記第2のプロセッシングコアに送るための手段と、
前記第1のアドレスマップを送ったことに応答して前記第1のプロセッシングコアにおいて共通仮想アドレスを受け取るための手段と、
前記第1のプロセッシングコアの第1のオペレーティングシステムカーネルの内部の共有メモリ領域の第1の属性として前記共通仮想アドレスを記憶するための手段と、
前記第1のプロセスの前記共通仮想アドレスにおいて前記共有メモリ領域をマッピングするための手段と
を備える、マルチプロセッサコンピューティングデバイス。
【請求項６】
前記第1のアドレスマップを前記第2のプロセッシングコアにおいて受け取るための手段と、
前記第2のプロセッシングコアにおける前記第2のプロセスの第2のアドレスマップを取得するための手段と、
前記第2のプロセッシングコアにおいてアドレス照合動作を実行して、前記第1のアドレスマップおよび前記第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するための手段と、
前記共通仮想アドレスとして、かつ、前記第2のプロセッシングコアの第2のオペレーティングシステムカーネルの前記共有メモリ領域の第2の属性として、前記一致した仮想アドレスを記憶するための手段と、
前記共通仮想アドレスを前記第1のプロセッシングコアに送るための手段と、
前記第2のプロセッシングコアにおける前記第2のプロセスのための前記共通仮想アドレスにおいて前記共有メモリ領域の物理ページをマッピングするための手段と
をさらに備える、請求項5に記載のマルチプロセッサコンピューティングデバイス。
【請求項７】
前記第2のプロセッシングコアにおいて前記第1のアドレスマップを受け取るための手段が、前記第2のプロセッシングコアのアドレスネゴシエーションハンドラスレッドにおいて前記第1のアドレスマップを受け取るための手段を備える、請求項6に記載のマルチプロセッサコンピューティングデバイス。
【請求項８】
第1のプロセッシングコアと、
第2のプロセッシングコアであって、前記第1のプロセッシングコアおよび前記第2のプロセッシングコアが異種である、第2のプロセッシングコアと、
前記第1のプロセッシングコアおよび前記第2のプロセッシングコアに結合された共有メモリ領域と
を備え、前記第1のプロセッシングコアが、
第1のプロセスによって、前記第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するステップと、
前記第1のプロセスの第1のアドレスマップを取得するステップと、
前記第1のアドレスマップを前記第2のプロセッシングコアに送るステップと、
前記第1のアドレスマップを前記第2のプロセッシングコアに送ったことに応答して、共通仮想アドレスを受け取るステップと、
第1のオペレーティングシステムカーネルの内部の前記共有メモリ領域の第1の属性として前記共通仮想アドレスを記憶するステップと、
前記第1のプロセスの前記共通仮想アドレスにおいて前記共有メモリ領域をマッピングするステップと
を備える動作を実行するように、プロセッサ実行可能命令によって構成される、マルチプロセッサコンピューティングデバイス。
【請求項９】
前記第2のプロセッシングコアが、
前記第1のアドレスマップを受け取るステップと、
前記第2のプロセスの第2のアドレスマップを取得するステップと、
アドレス照合動作を実行して、前記第1のアドレスマップおよび前記第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するステップと、
前記共通仮想アドレスとして、かつ、第2のオペレーティングシステムカーネルの前記共有メモリ領域の第2の属性として、前記一致した仮想アドレスを記憶するステップと、
前記共通仮想アドレスを前記第1のプロセッシングコアに送るステップと、
前記第2のプロセスのための前記共通仮想アドレスにおいて前記共有メモリ領域の物理ページをマッピングするステップと
を備える動作を実行するように、プロセッサ実行可能命令によって構成される、請求項8に記載のマルチプロセッサコンピューティングデバイス。
【請求項１０】
前記第1のプロセッシングコアおよび前記第2のプロセッシングコアの各々が、ハードウェアメモリ管理ユニット(MMU)を含む、請求項9に記載のマルチプロセッサコンピューティングデバイス。
【請求項１１】
前記第2のプロセッシングコアが、前記第1のアドレスマップを受け取るステップがアドレスネゴシエーションハンドラスレッドにおいて前記第1のアドレスマップを受け取るステップを備えるように動作を実行するように、プロセッサ実行可能命令によって構成される、請求項9に記載のマルチプロセッサコンピューティングデバイス。
【請求項１２】
マルチプロセッサコンピューティングデバイスの第1のプロセッシングコアに、
第1のプロセスによって、前記マルチプロセッサコンピューティングデバイスの第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するステップであって、前記第1のプロセッシングコアおよび前記第2のプロセッシングコアが異種である、ステップと、
前記第1のプロセスの第1のアドレスマップを取得するステップと、
前記第1のアドレスマップを前記第2のプロセッシングコアに送るステップと、
前記第1のアドレスマップを前記第2のプロセッシングコアに送ったことに応答して、共通仮想アドレスを受け取るステップと、
第1のオペレーティングシステムカーネルの内部の共有メモリ領域の第1の属性として前記共通仮想アドレスを記憶するステップと、
前記第1のプロセスの前記共通仮想アドレスにおいて前記共有メモリ領域をマッピングするステップと
を備える動作を実行させるように構成されるプロセッサ実行可能ソフトウェア命令を記憶した、非一時的コンピュータ可読記憶媒体。
【請求項１３】
前記記憶されたプロセッサ実行可能ソフトウェア命令が、前記マルチプロセッサコンピューティングデバイスの前記第2のプロセッシングコアに、
前記第1のアドレスマップを受け取るステップと、
前記第2のプロセスの第2のアドレスマップを取得するステップと、
アドレス照合動作を実行して、前記第1のアドレスマップおよび前記第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するステップと、
前記共通仮想アドレスとして、かつ、第2のオペレーティングシステムカーネルの前記共有メモリ領域の第2の属性として、前記一致した仮想アドレスを記憶するステップと、
前記共通仮想アドレスを前記第1のプロセッシングコアに送るステップと、
前記第2のプロセスのための前記共通仮想アドレスにおいて前記共有メモリ領域の物理ページをマッピングするステップと
を備える動作を実行させるように構成される、請求項12に記載の非一時的コンピュータ可読記憶媒体。
【請求項１４】
前記記憶されたプロセッサ実行可能ソフトウェア命令が、前記マルチプロセッサコンピューティングデバイスの前記第2のプロセッシングコアに、前記第1のアドレスマップを受け取るステップがアドレスネゴシエーションハンドラスレッドにおいて前記第1のアドレスマップを受け取るステップを備えるように動作を実行させるように構成される、請求項13に記載の非一時的コンピュータ可読記憶媒体。
【手続補正書】
【提出日】平成28年6月13日(2016.6.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第1のプロセッシングコアおよび第2のプロセッシングコアを有するマルチプロセッサコンピューティングデバイスの共有メモリ領域へのアクセス権を提供する方法であって、
前記第1のプロセッシングコアにおける第1のプロセスによって、前記第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するステップと、
前記第2のプロセッシングコアにおける前記第2のプロセスとのアドレスのネゴシエーションを要求したことに応答して、前記第1のプロセッシングコアにおける前記第1のプロセスの第1のアドレスマップを取得するステップと、
前記第2のプロセッシングコアに、前記第2のプロセッシングコアにおける前記第2のプロセスの第2のアドレスマップを取得させるために、前記第1のアドレスマップを前記第2のプロセッシングコアに送るステップと、
前記第1のアドレスマップを前記第2のプロセッシングコアに送ったことに応答して前記第1のプロセッシングコアにおいて共通仮想アドレスを受け取るステップであって、前記受け取った共通仮想アドレスは、前記第1のプロセスの前記第1のアドレスマップと前記第2のプロセスの前記第2のアドレスマップとの両方に含まれたアドレスを含む、ステップと、
前記第1のプロセッシングコアの第1のオペレーティングシステムカーネルの内部の前記共有メモリ領域の第1の属性として前記受け取った共通仮想アドレスを記憶するステップと、
前記第1のプロセスの前記受け取った共通仮想アドレスにおいて前記共有メモリ領域をマッピングするステップと
を備える、方法。
【請求項２】
前記第2のプロセッシングコアにおいてアドレス照合動作を実行して、前記第1のアドレスマップおよび前記第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するステップと、
前記共通仮想アドレスとして、かつ、前記第2のプロセッシングコアの第2のオペレーティングシステムカーネルの前記共有メモリ領域の第2の属性として、前記一致した仮想アドレスを記憶するステップと、
前記共通仮想アドレスを前記第1のプロセッシングコアに送るステップと、
前記第2のプロセッシングコアにおける前記第2のプロセスのための前記共通仮想アドレスにおいて前記共有メモリ領域の物理ページをマッピングするステップと
をさらに備える、請求項1に記載の方法。
【請求項３】
前記第1のプロセッシングコアおよび前記第2のプロセッシングコアの各々が、ハードウェアメモリ管理ユニット(MMU)を含む、請求項2に記載の方法。
【請求項４】
前記第2のプロセッシングコアにおいて前記第1のアドレスマップを受け取るステップが、前記第2のプロセッシングコアのアドレスネゴシエーションハンドラスレッドにおいて前記第1のアドレスマップを受け取るステップを備える、請求項2に記載の方法。
【請求項５】
第1のプロセッシングコアにおける第1のプロセスによって、第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するための手段と、
前記第2のプロセッシングコアにおける前記第2のプロセスとのアドレスのネゴシエーションを要求したことに応答して、前記第1のプロセッシングコアにおける前記第1のプロセスの第1のアドレスマップを取得するための手段と、
前記第2のプロセッシングコアに、前記第2のプロセッシングコアにおける前記第2のプロセスの第2のアドレスマップを取得させるために、前記第1のアドレスマップを前記第2のプロセッシングコアに送るための手段と、
前記第1のアドレスマップを前記第2のプロセッシングコアに送ったことに応答して前記第1のプロセッシングコアにおいて共通仮想アドレスを受け取るための手段であって、前記受け取った共通仮想アドレスは、前記第1のプロセスの前記第1のアドレスマップと前記第2のプロセスの前記第2のアドレスマップとの両方に含まれたアドレスを含む、手段と、
前記第1のプロセッシングコアの第1のオペレーティングシステムカーネルの内部の共有メモリ領域の第1の属性として前記受け取った共通仮想アドレスを記憶するための手段と、
前記第1のプロセスの前記受け取った共通仮想アドレスにおいて前記共有メモリ領域をマッピングするための手段と
を備える、マルチプロセッサコンピューティングデバイス。
【請求項６】
前記第2のプロセッシングコアにおいてアドレス照合動作を実行して、前記第1のアドレスマップおよび前記第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するための手段と、
前記共通仮想アドレスとして、かつ、前記第2のプロセッシングコアの第2のオペレーティングシステムカーネルの前記共有メモリ領域の第2の属性として、前記一致した仮想アドレスを記憶するための手段と、
前記共通仮想アドレスを前記第1のプロセッシングコアに送るための手段と、
前記第2のプロセッシングコアにおける前記第2のプロセスのための前記共通仮想アドレスにおいて前記共有メモリ領域の物理ページをマッピングするための手段と
をさらに備える、請求項5に記載のマルチプロセッサコンピューティングデバイス。
【請求項７】
前記第2のプロセッシングコアにおいて前記第1のアドレスマップを受け取るための手段が、前記第2のプロセッシングコアのアドレスネゴシエーションハンドラスレッドにおいて前記第1のアドレスマップを受け取るための手段を備える、請求項6に記載のマルチプロセッサコンピューティングデバイス。
【請求項８】
第1のプロセッシングコアと、
第2のプロセッシングコアと、
前記第1のプロセッシングコアおよび前記第2のプロセッシングコアに結合された共有メモリ領域と
を備え、前記第1のプロセッシングコアが、
第1のプロセスによって、前記第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するステップと、
前記第2のプロセッシングコアにおける前記第2のプロセスとのアドレスのネゴシエーションを要求したことに応答して、前記第1のプロセスの第1のアドレスマップを取得するステップと、
前記第2のプロセッシングコアに、前記第2のプロセッシングコアにおける前記第2のプロセスの第2のアドレスマップを取得させるために、前記第1のアドレスマップを前記第2のプロセッシングコアに送るステップと、
前記第1のアドレスマップを前記第2のプロセッシングコアに送ったことに応答して、共通仮想アドレスを受け取るステップであって、前記受け取った共通仮想アドレスは、前記第1のプロセスの前記第1のアドレスマップと前記第2のプロセスの前記第2のアドレスマップとの両方に含まれたアドレスを含む、ステップと、
第1のオペレーティングシステムカーネルの内部の前記共有メモリ領域の第1の属性として前記受け取った共通仮想アドレスを記憶するステップと、
前記第1のプロセスの前記受け取った共通仮想アドレスにおいて前記共有メモリ領域をマッピングするステップと
を備える動作を実行するように、プロセッサ実行可能命令によって構成される、マルチプロセッサコンピューティングデバイス。
【請求項９】
前記第2のプロセッシングコアが、
アドレス照合動作を実行して、前記第1のアドレスマップおよび前記第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するステップと、
前記共通仮想アドレスとして、かつ、第2のオペレーティングシステムカーネルの前記共有メモリ領域の第2の属性として、前記一致した仮想アドレスを記憶するステップと、
前記共通仮想アドレスを前記第1のプロセッシングコアに送るステップと、
前記第2のプロセスのための前記共通仮想アドレスにおいて前記共有メモリ領域の物理ページをマッピングするステップと
を備える動作を実行するように、プロセッサ実行可能命令によって構成される、請求項8に記載のマルチプロセッサコンピューティングデバイス。
【請求項１０】
前記第1のプロセッシングコアおよび前記第2のプロセッシングコアの各々が、ハードウェアメモリ管理ユニット(MMU)を含む、請求項9に記載のマルチプロセッサコンピューティングデバイス。
【請求項１１】
前記第2のプロセッシングコアが、前記第1のアドレスマップを受け取るステップがアドレスネゴシエーションハンドラスレッドにおいて前記第1のアドレスマップを受け取るステップを備えるように動作を実行するように、プロセッサ実行可能命令によって構成される、請求項9に記載のマルチプロセッサコンピューティングデバイス。
【請求項１２】
マルチプロセッサコンピューティングデバイスの第1のプロセッシングコアに、
第1のプロセスによって、前記マルチプロセッサコンピューティングデバイスの第2のプロセッシングコアにおける第2のプロセスとのアドレスのネゴシエーションを要求するステップと、
前記第2のプロセッシングコアにおける前記第2のプロセスとのアドレスのネゴシエーションを要求したことに応答して、前記第1のプロセスの第1のアドレスマップを取得するステップと、
前記第2のプロセッシングコアに、前記第2のプロセッシングコアにおける前記第2のプロセスの第2のアドレスマップを取得させるために、前記第1のアドレスマップを前記第2のプロセッシングコアに送るステップと、
前記第1のアドレスマップを前記第2のプロセッシングコアに送ったことに応答して、共通仮想アドレスを受け取るステップであって、前記受け取った共通仮想アドレスは、前記第1のプロセスの前記第1のアドレスマップと前記第2のプロセスの前記第2のアドレスマップとの両方に含まれたアドレスを含む、ステップと、
第1のオペレーティングシステムカーネルの内部の共有メモリ領域の第1の属性として前記受け取った共通仮想アドレスを記憶するステップと、
前記第1のプロセスの前記受け取った共通仮想アドレスにおいて前記共有メモリ領域をマッピングするステップと
を備える動作を実行させるように構成されるプロセッサ実行可能ソフトウェア命令を記憶した、非一時的コンピュータ可読記憶媒体。
【請求項１３】
前記記憶されたプロセッサ実行可能ソフトウェア命令が、前記マルチプロセッサコンピューティングデバイスの前記第2のプロセッシングコアに、
アドレス照合動作を実行して、前記第1のアドレスマップおよび前記第2のアドレスマップが一致する仮想アドレスを含むかどうかを判定するステップと、
前記共通仮想アドレスとして、かつ、第2のオペレーティングシステムカーネルの前記共有メモリ領域の第2の属性として、前記一致した仮想アドレスを記憶するステップと、
前記共通仮想アドレスを前記第1のプロセッシングコアに送るステップと、
前記第2のプロセスのための前記共通仮想アドレスにおいて前記共有メモリ領域の物理ページをマッピングするステップと
を備える動作を実行させるように構成される、請求項12に記載の非一時的コンピュータ可読記憶媒体。
【請求項１４】
前記記憶されたプロセッサ実行可能ソフトウェア命令が、前記マルチプロセッサコンピューティングデバイスの前記第2のプロセッシングコアに、前記第1のアドレスマップを受け取るステップがアドレスネゴシエーションハンドラスレッドにおいて前記第1のアドレスマップを受け取るステップを備えるように動作を実行させるように構成される、請求項13に記載の非一時的コンピュータ可読記憶媒体。
【国際調査報告】
2016532959.tif 000012
2016532959.tif 000013
2016532959.tif 000014