(57)【要約】  物理アドレス入力を使用してリバーストランスレーションルックアサイドバッファ(TLB)ルックアップを実行するための方法、デバイス、および命令であって、第1のプロセッサによって物理アドレス入力を取得することであって、物理アドレス入力が共有メモリに対応する物理アドレスを示すことと、第1のプロセッサに関連するTLB内の第1のTLBエントリから第1の仮想アドレスに関連する第1のマスクを取得することであって、取得される第1のマスクがビットパターンであることと、共有メモリに関連する第1のページフレーム番号を第1のTLBエントリから取得することと、第1の値を生成するために取得された第1のマスクを取得された第1のページフレーム番号に適用することと、第2の値を生成するために取得された第1のマスクを取得された物理アドレス入力に適用することと、第1の値および第2の値が一致するかどうかを判定するために第1の値と第2の値を比較することとを含む方法、デバイス、および命令。
2016535883.tif 000002
【特許請求の範囲】
【請求項１】
物理アドレス入力を使用してリバーストランスレーションルックアサイドバッファ(TLB)ルックアップを実行するための方法であって、
第1のプロセッサによって前記物理アドレス入力を取得するステップであって、前記物理アドレス入力は、共有メモリに対応する物理アドレスを示すステップと、
前記第1のプロセッサに関連するTLB内の第1のTLBエントリから第1の仮想アドレスに関連する第1のマスクを取得するステップであって、前記取得された第1のマスクはビットパターンであるステップと、
前記第1のTLBエントリから前記共有メモリに関連する第1のページフレーム番号を取得するステップと、
第1の値を生成するために前記取得された第1のマスクを前記取得された第1のページフレーム番号に適用するステップと、
第2の値を生成するために前記取得された第1のマスクを前記取得された物理アドレス入力に適用するステップと、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較するステップとを含む方法。
【請求項２】
前記第1の値および前記第2の値が一致しないと判定したことに応答して前記TLB内の他のTLBエントリから第2のマスクおよび第2のページフレーム番号を反復的に取得するステップと、
前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用するステップと、
前記第2の値を生成するために前記取得された第2のマスクを前記取得された物理アドレス入力に反復的に適用するステップとをさらに含み、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較するステップは、前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を反復的に比較するステップを含む、請求項1に記載の方法。
【請求項３】
前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用するステップは、システムページテーブル内のエントリから得たページフレーム番号を複製せずに再使用するステップを含む、請求項2に記載の方法。
【請求項４】
前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリをフラッシングするステップをさらに含む、請求項1に記載の方法。
【請求項５】
TLBアクションおよび前記物理アドレスを示すメッセージを第2のプロセッサに送信するステップをさらに含み、前記TLBアクションはTLBフラッシュ演算を含む、請求項1に記載の方法。
【請求項６】
前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリのインデックスを返すステップをさらに含む、請求項1に記載の方法。
【請求項７】
第1のプロセッサによって前記物理アドレス入力を取得するステップは、TLBアクションと前記物理アドレスとを含むメッセージを第2のプロセッサから受信するステップを含み、
前記方法は、
前記第2のプロセッサによって送信された前記メッセージを受信したことに応答してアクティブフラグをクリアするステップと、
前記第1のTLBエントリの前記返されたインデックスを使用して前記受信されたメッセージ内に示された前記TLBアクションを実行するステップと、
前記TLBアクションを実行したことに応答して前記アクティブフラグをセットするステップとをさらに含む、請求項6に記載の方法。
【請求項８】
マルチコア異種コンピューティングデバイスであって、
第1のプロセッサによって物理アドレス入力を取得するための手段であって、前記物理アドレス入力は、共有メモリに対応する物理アドレスを示す手段と、
前記第1のプロセッサに関連するTLB内の第1のTLBエントリから第1の仮想アドレスに関連する第1のマスクを取得するための手段であって、前記取得された第1のマスクはビットパターンである手段と、
前記第1のTLBエントリから前記共有メモリに関連する第1のページフレーム番号を取得するための手段と、
第1の値を生成するために前記取得された第1のマスクを前記取得された第1のページフレーム番号に適用するための手段と、
第2の値を生成するために前記取得された第1のマスクを前記取得された物理アドレス入力に適用するための手段と、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較するための手段とを備えるマルチコア異種コンピューティングデバイス。
【請求項９】
前記第1の値および前記第2の値が一致しないと判定したことに応答して前記TLB内の他のTLBエントリから第2のマスクおよび第2のページフレーム番号を反復的に取得するための手段と、
前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用するための手段と、
前記第2の値を生成するために前記取得された第2のマスクを前記取得された物理アドレス入力に反復的に適用するための手段とをさらに備え、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較するための手段は、前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を反復的に比較するための手段を備える、請求項8に記載のマルチコア異種コンピューティングデバイス。
【請求項１０】
前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用するための手段は、システムページテーブル内のエントリから得たページフレーム番号を複製せずに再使用するための手段を備える、請求項9に記載のマルチコア異種コンピューティングデバイス。
【請求項１１】
前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリをフラッシングするための手段をさらに備える、請求項8に記載のマルチコア異種コンピューティングデバイス。
【請求項１２】
TLBアクションおよび前記物理アドレスを示すメッセージを第2のプロセッサに送信するための手段をさらに備え、前記TLBアクションはTLBフラッシュ演算を含む、請求項8に記載のマルチコア異種コンピューティングデバイス。
【請求項１３】
前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリのインデックスを返すための手段をさらに備える、請求項8に記載のマルチコア異種コンピューティングデバイス。
【請求項１４】
第1のプロセッサによって前記物理アドレス入力を取得するための手段は、TLBアクションと前記物理アドレスとを含むメッセージを第2のプロセッサから受信するための手段を備え、
前記マルチコア異種コンピューティングデバイスは、
前記第2のプロセッサによって送信された前記メッセージを受信したことに応答してアクティブフラグをクリアするための手段と、
前記第1のTLBエントリの前記返されたインデックスを使用して前記受信されたメッセージ内に示された前記TLBアクションを実行するための手段と、
前記TLBアクションを実行したことに応答して前記アクティブフラグをセットするための手段とをさらに備える、請求項13に記載のマルチコア異種コンピューティングデバイス。
【請求項１５】
マルチコア異種コンピューティングデバイスであって、
第1のプロセッサと、
第2のプロセッサと、
共有メモリであって、前記第1のプロセッサは、動作を実行するためのプロセッサ実行可能命令を有するように構成され、前記動作は、
前記第1のプロセッサによって物理アドレス入力を取得することであって、前記物理アドレス入力は、共有メモリに対応する物理アドレスを示すことと、
前記第1のプロセッサに関連するTLB内の第1のTLBエントリから第1の仮想アドレスに関連する第1のマスクを取得することであって、前記取得された第1のマスクはビットパターンであることと、
前記第1のTLBエントリから前記共有メモリに関連する第1のページフレーム番号を取得することと、
第1の値を生成するために前記取得された第1のマスクを前記取得された第1のページフレーム番号に適用することと、
第2の値を生成するために前記取得された第1のマスクを前記取得された物理アドレス入力に適用することと、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較することとを含むマルチコア異種コンピューティングデバイス。
【請求項１６】
前記第1のプロセッサは、動作を実行するためのプロセッサ実行可能命令を有するように構成され、前記動作は、
前記第1の値および前記第2の値が一致しないと判定したことに応答して前記TLB内の他のTLBエントリから第2のマスクおよび第2のページフレーム番号を反復的に取得することと、
前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用することと、
前記第2の値を生成するために前記取得された第2のマスクを前記取得された物理アドレス入力に反復的に適用することとをさらに含み、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較することは、前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を反復的に比較することを含む、請求項15に記載のマルチコア異種コンピューティングデバイス。
【請求項１７】
前記第1のプロセッサは、前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用することが、システムページテーブル内のエントリから得たページフレーム番号を複製せずに再使用することを含むように動作を実行するためのプロセッサ実行可能命令を有するように構成される、請求項16に記載のマルチコア異種コンピューティングデバイス。
【請求項１８】
前記第1のプロセッサは、前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリをフラッシングすることをさらに含む動作を実行するためのプロセッサ実行可能命令を有するように構成される、請求項15に記載のマルチコア異種コンピューティングデバイス。
【請求項１９】
前記第1のプロセッサは、TLBアクションおよび前記物理アドレスを示すメッセージを第2のプロセッサに送信することをさらに含む動作を実行するためのプロセッサ実行可能命令を有するように構成され、前記TLBアクションはTLBフラッシュ演算を含む、請求項15に記載のマルチコア異種コンピューティングデバイス。
【請求項２０】
前記第1のプロセッサは、前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリのインデックスを返すことをさらに含む動作を実行するためのプロセッサ実行可能命令を有するように構成される、請求項15に記載のマルチコア異種コンピューティングデバイス。
【請求項２１】
前記第1のプロセッサは、前記第1のプロセッサによって前記物理アドレス入力を取得することが、TLBアクションと前記物理アドレスとを含むメッセージを前記第2のプロセッサから受信することを含むように動作を実行するためのプロセッサ実行可能命令を有するように構成され、
前記第1のプロセッサは、動作を実行するためのプロセッサ実行可能命令を有するように構成され、前記動作は、
前記第2のプロセッサによって送信された前記メッセージを受信したことに応答してアクティブフラグをクリアすることと、
前記第1のTLBエントリの前記返されたインデックスを使用して前記受信されたメッセージ内に示された前記TLBアクションを実行することと、
前記TLBアクションを実行したことに応答して前記アクティブフラグをセットすることとをさらに含む、請求項20に記載のマルチコア異種コンピューティングデバイス。
【請求項２２】
プロセッサ実行可能ソフトウェア命令を記憶した非一時的プロセッサ可読記憶媒体であって、前記プロセッサ実行可能ソフトウェア命令は、第1のプロセッサに、
前記第1のプロセッサによって物理アドレス入力を取得することであって、前記物理アドレス入力は、共有メモリに対応する物理アドレスを示すことと、
前記第1のプロセッサに関連するTLB内の第1のTLBエントリから第1の仮想アドレスに関連する第1のマスクを取得することであって、前記取得された第1のマスクはビットパターンであることと、
前記第1のTLBエントリから前記共有メモリに関連する第1のページフレーム番号を取得することと、
第1の値を生成するために前記取得された第1のマスクを前記取得された第1のページフレーム番号に適用することと、
第2の値を生成するために前記取得された第1のマスクを前記取得された物理アドレス入力に適用することと、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較することとを含む動作を実行させるように構成される非一時的プロセッサ可読記憶媒体。
【請求項２３】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記第1のプロセッサに、
前記第1の値および前記第2の値が一致しないと判定したことに応答して前記TLB内の他のTLBエントリから第2のマスクおよび第2のページフレーム番号を反復的に取得することと、
前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用することと、
前記第2の値を生成するために前記取得された第2のマスクを前記取得された物理アドレス入力に反復的に適用することとをさらに含む動作を実行させるように構成され、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較することは、前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を反復的に比較することを含む、請求項22に記載の非一時的プロセッサ可読記憶媒体。
【請求項２４】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記第1のプロセッサに、前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用することが、システムページテーブル内のエントリから得たページフレーム番号を複製せずに再使用することを含むように動作を実行させるように構成される、請求項23に記載の非一時的プロセッサ可読記憶媒体。
【請求項２５】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記第1のプロセッサに、前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリをフラッシングすることをさらに含む動作を実行させるように構成される、請求項22に記載の非一時的プロセッサ可読記憶媒体。
【請求項２６】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、第1のプロセッサに、TLBアクションおよび前記物理アドレスを示すメッセージを第2のプロセッサに送信することをさらに含む動作を実行させるように構成され、前記TLBアクションはTLBフラッシュ演算を含む、請求項22に記載の非一時的プロセッサ可読記憶媒体。
【請求項２７】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記第1のプロセッサに、前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリのインデックスを返すことをさらに含む動作を実行させるように構成される、請求項22に記載の非一時的プロセッサ可読記憶媒体。
【請求項２８】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記第1のプロセッサに、前記第1のプロセッサによって前記物理アドレス入力を取得することが、TLBアクションと前記物理アドレスとを含むメッセージを第2のプロセッサから受信することを含むように動作を実行させるように構成され、
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記第1のプロセッサに、
前記第2のプロセッサによって送信された前記メッセージを受信したことに応答してアクティブフラグをクリアすることと、
前記第1のTLBエントリの前記返されたインデックスを使用して前記受信されたメッセージ内に示された前記TLBアクションを実行することと、
前記TLBアクションを実行したことに応答して前記アクティブフラグをセットすることとをさらに含む動作を実行させるように構成される、請求項27に記載の非一時的プロセッサ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコア異種システム変換のルックアサイドバッファコヒーレンシに関する。
【背景技術】
【０００２】
コンピューティングデバイスは、様々な命令/システムを実行するための多数のプロセッサを含むことが多い。たとえば、スマートフォンモバイルデバイスは、ダウンロードされたアプリケーションに関するルーチンを実行するためにアプリケーションプロセッサを利用するとともに、信号処理演算を実行するためにデジタル信号プロセッサを利用する場合がある。そのようなプロセッサの各々は、プロセッサのそれぞれの処理がシステムメモリ内の様々な物理アドレスにマッピングされる単純化したメモリアドレスを使用してデータにアクセスできるように仮想メモリアドレス方式を利用するように構成されてもよい。たとえば、アプリケーションプロセッサは、アプリケーションのデータに関連する任意のRAMロケーションにアクセスするために連続的な仮想アドレスを利用する場合がある。
【０００３】
デバイスは次に、それぞれに異なるアーキテクチャの様々なプロセッサの利用を開始する。そのような異種システムは、ソフトウェアが共有メモリから恩恵を受ける可能性を高める場合があり、OpenCL、Renderscriptなどの様々なアプリケーションプログラミングインターフェース(API)を利用することがある。しかし、アドレス指定方式が異なるので、従来の手法を使用する非効率的な機構が必要になる場合がある。たとえば、現代のスマートフォンなどの異種システムデバイスは、64ビットと32ビットの両方のプロセッサおよび/または処理コアを使用する場合がある。様々なアーキテクチャによって、様々なプロセッサが、同じ(または共有)システムメモリにアクセスするためにそれぞれに異なる仮想メモリアドレス方式を利用する場合がある。たとえば、RAMの同じページ(またはメモリブロック)が第1のプロセッサと第2のプロセッサの両方によって使用されてもよいが、そのページが2つのプロセッサにより2つの異なる仮想アドレスによって参照される場合がある。そのような異種システムにおけるプロセッサの各々は、仮想アドレスを介してシステムメモリにアクセスするための速度および効率を改善するトランスレーションルックアサイドバッファ(TLB)を利用してもよく、したがって、TLBコヒーレンスのロバストなサポートが必要になる場合がある。TLBは、システムまたは共通のメモリにおいて仮想ページから物理ページへの多対1マッピングを使用し、したがって、エントリをコヒーレントに識別することは処理時間および電力消費量に関してコストがかかる場合がある。
【０００４】
マルチコアシステムにおいてコヒーレンシを維持するための技術が存在する。たとえば、Linux(登録商標) ARM TLBフラッシュメソッドであるflush_tlb_all()、flush_tlb_mm(memory_block_identifier)、flush_tlb_range(memory_block_identifier, start_index, end_index)、およびflush_tlb_page(virtual_address, virtual_mask)などの、仮想アドレスを使用してTLBエントリを修正するAPIコマンドがある。別の例として、システムによっては、TLB内のエントリに関するルックアップ演算および無効化演算に仮想アドレスを利用するTLB「シュートダウン」技法を実行する場合がある。代表的なTLBシュートダウン手順は、第1のプロセッサが、第2のプロセッサのページテーブルにおいて無効化すべき仮想アドレスを含む割込みを第2のプロセッサに送信することを含んでもよい。
【発明の概要】
【課題を解決するための手段】
【０００５】
一態様では、物理アドレス入力を使用してリバーストランスレーションルックアサイドバッファ(TLB)ルックアップを実行するための方法は、第1のプロセッサによって物理アドレス入力を取得することであって、物理アドレス入力が共有メモリに対応する物理アドレスを示すことと、第1のプロセッサに関連するTLB内の第1のTLBエントリから第1の仮想アドレスに関連する第1のマスクを取得することであって、取得される第1のマスクがビットパターンであることと、共有メモリに関連する第1のページフレーム番号を第1のTLBエントリから取得することと、第1の値を生成するために取得された第1のマスクを取得された第1のページフレーム番号に適用することと、第2の値を生成するために取得された第1のマスクを取得された物理アドレス入力に適用することと、第1の値および第2の値が一致するかどうかを判定するために第1の値と第2の値を比較することとを含んでもよい。別の態様では、この方法は、第1の値および第2の値が一致しないと判定したことに応答してTLB内の他のTLBエントリから第2のマスクおよび第2のページフレーム番号を反復的に取得することと、第1の値を生成するために取得された第2のマスクを取得された第2のページフレーム番号に反復的に適用することと、第2の値を生成するために取得された第2のマスクを取得された物理アドレス入力に反復的に適用することとをさらに含んでもよく、第1の値および第2の値が一致するかどうかを判定するために第1の値と第2の値を比較することは、第1の値および第2の値が一致するかどうかを判定するために第1の値と第2の値を反復的に比較することを含んでもよい。別の態様では、第1の値を生成するために取得された第2のマスクを取得された第2のページフレーム番号に反復的に適用することは、システムページテーブル内のエントリから得たページフレーム番号を複製せずに再使用することを含んでもよい。別の態様では、この方法は、第1の値および第2の値が一致すると判定したことに応答して第1のTLBエントリをフラッシングすることをさらに含んでもよい。別の態様では、この方法は、TLBアクションおよび物理アドレスを示すメッセージを第2のプロセッサに送信することをさらに含んでもよく、TLBアクションはTLBフラッシュ演算を含んでもよい。別の態様では、この方法は、第1の値および第2の値が一致すると判定したことに応答して第1のTLBエントリのインデックスを返すことをさらに含んでもよい。別の態様では、第1のプロセッサによって物理アドレス入力を取得することは、TLBアクションおよび物理アドレスを含むメッセージを第2のプロセッサから受信することを含んでもよく、この方法は、第2のプロセッサから送信されたメッセージを受信したことに応答してアクティブフラグをクリアすることと、第1のTLBエントリの返されたインデックスを使用して受信されたメッセージにおいて示されたTLBアクションを実行することと、TLBアクションを実行したことに応答してアクティブフラグをセットすることとをさらに含んでもよい。
【０００６】
一態様では、マルチコア異種コンピューティングデバイスは、第1のプロセッサによって物理アドレス入力を取得するための手段であって、物理アドレス入力が共有メモリに対応する物理アドレスを示す手段と、第1のプロセッサに関連するTLB内の第1のTLBエントリから第1の仮想アドレスに関連する第1のマスクを取得するための手段であって、取得される第1のマスクがビットパターンであってもよい手段と、共有メモリに関連する第1のページフレーム番号を第1のTLBエントリから取得するための手段と、第1の値を生成するために取得された第1のマスクを取得された第1のページフレーム番号に適用するための手段と、第2の値を生成するために取得された第1のマスクを取得された物理アドレス入力に適用するための手段と、第1の値および第2の値が一致するかどうかを判定するために第1の値と第2の値を比較するための手段とを含んでもよい。
【０００７】
一態様では、マルチコア異種コンピューティングデバイスは、第1のプロセッサと、第2のプロセッサと、共有メモリとを含んでもよく、第1のプロセッサは、第1のプロセッサによって物理アドレス入力を取得することであって、物理アドレス入力が共有メモリに対応する物理アドレスを示すことと、第1のプロセッサに関連するTLB内の第1のTLBエントリから第1の仮想アドレスに関連する第1のマスクを取得することであって、取得される第1のマスクがビットパターンであってもよいことと、共有メモリに関連する第1のページフレーム番号を第1のTLBエントリから取得することと、第1の値を生成するために取得された第1のマスクを取得された第1のページフレーム番号に適用することと、第2の値を生成するために取得された第1のマスクを取得された物理アドレス入力に適用することと、第1の値および第2の値が一致するかどうかを判定するために第1の値と第2の値を比較することとを含んでもよい動作を実行するためのプロセッサ実行可能命令を有するように構成されてもよい。
【０００８】
一態様では、第一のプロセッサに動作を行わせるように構成されたプロセッサ実行可能ソフトウェア命令を記憶する非一時的プロセッサ可読記憶媒体であって、動作は、第1のプロセッサによって物理アドレス入力を取得することであって、物理アドレス入力が共有メモリに対応する物理アドレスを示すことと、第1のプロセッサに関連するTLB内の第1のTLBエントリから第1の仮想アドレスに関連する第1のマスクを取得することであって、取得される第1のマスクがビットパターンであることと、共有メモリに関連する第1のページフレーム番号を第1のTLBエントリから取得することと、第1の値を生成するために取得された第1のマスクを取得された第1のページフレーム番号に適用することと、第2の値を生成するために取得された第1のマスクを取得された物理アドレス入力に適用することと、第1の値および第2の値が一致するかどうかを判定するために第1の値と第2の値を比較することとを含んでもよい。
【０００９】
添付の図面は、本明細書に組み込まれており、かつ本明細書の一部を構成するが、本発明の例示的な態様を示し、上記で与えられた概略的な説明および以下に与えられる詳細な説明とともに、本発明の特徴について説明する働きをする。
【図面の簡単な説明】
【００１０】
【図１】第1の種類の第1のプロセッサと第2の種類の第2のプロセッサとを含むマルチコア異種コンピューティングデバイスの構成要素ブロック図である。
【図２】リバースTLBルックアップ演算を実行するために共有システムメモリに関連付けられた物理アドレスを利用するように構成された論理回路態様の構成要素ブロック図である。
【図３Ａ】マルチコア異種コンピューティングデバイスがリバースTLBルックアップ演算を実行するために共有システムメモリに関連付けられた物理アドレスを利用するための方法態様を示すプロセスフロー図である。
【図３Ｂ】マルチコア異種コンピューティングデバイスがリバースTLBルックアップ演算を実行するために共有システムメモリに関連付けられた物理アドレスを利用するための方法態様を示すプロセスフロー図である。
【図４】マルチコア異種コンピューティングデバイス内の第1のプロセッサおよび第2のプロセッサによって実行されるリバースTLBルックアップ演算を使用する方法態様を示すプロセスフロー図である。
【図５】様々な態様において使用するのに適したマルチコア異種コンピューティングデバイスの構成要素ブロック図である。
【発明を実施するための形態】
【００１１】
様々な態様について、添付図面を参照して詳細に説明する。可能な場合はいつでも、同じまたは同様の部分を指すために図面全体を通して同じ参照番号が使用される。特定の例および実装形態へと行われる言及は、説明を目的とし、本発明の範囲または特許請求の範囲を限定するものではない。
【００１２】
「例示的」という言葉は、「一例、事例、または例示として役立つ」ことを意味するように本明細書で使用される。「例示的」として本明細書で説明する任意の実装形態は、必ずしも他の実装形態よりも好ましいか、または有利であると解釈されるべきではない。
【００１３】
本明細書では「コンピューティングデバイス」および「マルチコア異種コンピューティングデバイス」という用語は、セルラー電話、スマートフォン(たとえば、iPhone)、ウェブパッド、タブレットコンピュータ、インターネット対応セルラー電話、WiFi対応電子デバイス、携帯情報端末(PDA)、ラップトップコンピュータ、デスクトップコンピュータ、パーソナルコンピュータ、および少なくとも第1のプロセッサ(または第1の処理ユニット)および第2のプロセッサ(または第2の処理ユニット)が装備され、第1のプロセッサのアーキテクチャまたは技術が第2のプロセッサのアーキテクチャまたは技術とは異なる同様の電子デバイスのうちの任意の1つまたはすべてを指すために使用される。たとえば、マルチコア異種コンピューティングデバイスは、64ビットアプリケーションプロセッサと32ビット補助プロセッサとを含んでもよい。様々な態様では、そのようなデバイスは、ワイドエリアネットワーク(WAN)またはローカルエリアネットワーク(LAN)接続(たとえば、LTE、3Gまたは4Gワイヤレスワイドエリアネットワークトランシーバ、インターネットとの有線接続、またはWiFi)を確立するためにネットワークトランシーバを含むように構成されてもよい。
【００１４】
現在、マルチコアシステムにおいてコヒーレンシを維持するための回路、ハードウェア、命令、ソフトウェア、および/またはコマンドは、多対1仮想アドレス方式を使用する異種システムには不適切である。たとえば、仮想アドレスを利用する既存のAPIコマンドは、システム内のプロセッサによって使用される仮想アドレス間のパリティを想定しているので異種システムでは機能しない。別の例として、コヒーレンシを維持するための公知のシュートダウン技法は、一致する物理フレームを有するエントリを識別するために仮想アドレスおよび/またはプロセッサのTLB内の順次読出しを使用する場合があり、多くのサイクルを要する(たとえば、プロセッサは、システムメモリ内の特定の物理メモリアドレスに関係するエントリを識別するために各TLBエントリを反復的に調べてもよい)。
【００１５】
様々な態様は、マルチコア異種コンピューティングデバイスにおいてトランスレーションルックアサイドバッファ(TLB)を利用するためのデバイス、命令、および方法を提供する。様々な態様では、マルチコア異種コンピューティングデバイスのプロセッサは、関連するTLB上の物理アドレスを使用してTLBルックアップを実行する(すなわち、「リバースTLBルックアップ」)ように構成されてもよい。そのようなリバースTLBルックアップ演算は、TLBに関連する(したがって、仮想アドレス方式を利用する)マルチコア異種コンピューティングデバイス内の任意のプロセッサまたはプロセッサコアによって実行されてもよい。たとえば、マルチコア異種コンピューティングデバイス内のアプリケーションプロセッサおよびDSPは、そのそれぞれのTLBに関係するTLBルックアップ演算を同時に実行してもまたは別々に実行してもよい。説明を簡単にするために、動作態様について以下に、マルチコア異種コンピューティングデバイス内の「第1のプロセッサ」および「第2のプロセッサ」を参照しながら説明する。しかし、そのような一般的な参照は、プロセッサの特定の順序、優先度、または種類を必要とするものでも、あるいはそれらを暗示するものでもない。
【００１６】
マルチコア異種コンピューティングデバイス内の第1のプロセッサは、リバースTLBルックアップの方法態様を実行する際、第1のプロセッサによってコンテキスト切替えに基づいて修正されるページに関連するシステムメモリロケーションなどの物理アドレス(または物理アドレス入力)を受信してもよい。受信された物理アドレスは、システム呼出し(たとえば、APIコマンド)または命令(たとえば、縮小命令セット内の下位レベル命令)内のパラメータであってもよい。第1のプロセッサは、第1のプロセッサに関連するTLBの第1のエントリ内の仮想アドレスに対応するマスクを取得してもよい。第1のプロセッサは、システムメモリに関係付けられTLBエントリ内に仮想アドレスとともに記憶されるページフレーム番号などの、仮想アドレスに関連するページフレーム番号を取得してもよい。第1のプロセッサは、取得されたマスクを取得されたページフレーム番号に適用することによって第1の値を生成してもよい。第1のプロセッサは、これと並行して、マスクを受信された物理アドレスに適用することによって第2の値を生成してもよい。第1のプロセッサは次いで、第1の値および第2の値が一致するかどうかを判定するために第1の値と第2の値を比較してもよい。一致する場合、第1のプロセッサは、ページサイズ情報を考慮して、どのTLBエントリが物理アドレスを有するかを示すのに使用されるヒットベクトルにマスクに関連するTLBエントリのインデックス(およびTLBエントリに対応する仮想アドレス)を記憶してもよい。そのような「ヒット」TLBエントリは、そのエントリを無効化またはフラッシングしてコヒーレンシを推進するため第1のプロセッサデバイスによって使用されてもよい。一態様では、複数のヒットがヒットベクトルに記憶されてもよい(すなわち、複数のTLBエントリが受信された物理アドレスに対応してもよい)。
【００１７】
第1の値と第2の値を比較したときに一致しないと判定されると、第1のプロセッサは、他のTLBエントリ内の仮想アドレスに関連して記憶された新しいマスクおよびページフレーム番号を使用して新しい第1の値および第2の値を生成することを継続してもよい。言い換えれば、第1のプロセッサは、第2の値との一致が存在するかどうかを判定するためにTLB内に表されたマスクを反復的に適用してもよい。第1のプロセッサは、このことを様々なTLBエントリのすべての仮想アドレスに対して反復的に継続してもよい。一態様では、TLBは連想メモリ(CAM)であってもよい。
【００１８】
一態様では、マルチコア異種コンピューティングデバイス内の第2のプロセッサは、リバースTLBルックアップを実行するために命令レベル機能である下位抽象化を利用してもよい。特に、第1のプロセッサは、物理アドレスを制御レジスタ(たとえば、ARMプロセッサ内の制御レジスタのうちの1つ)にコピーし、TLBエントリの仮想アドレスに関連するマスクを物理アドレスに適用し、マスクを有する物理アドレスとマスクを有するページフレーム番号(PFM)とが一致するときにTLBエントリインデックスを返すリバースTLBプローブ命令を利用してもよい。この命令レベル機能によって、第2のプロセッサは、TLBルックアップ演算を高速に非逐次的に実行することができる。この命令レベル機能のハードウェア実装態様を以下の図2に示す。
【００１９】
様々な態様では、マルチコア異種コンピューティングデバイス内のプロセッサは、どのTLBエントリを無効化またはフラッシングすべきかを示す入力などの、様々なTLB演算に関する入力値として物理アドレスを使用するAPIコマンドを利用するように構成されてもよい。APIコマンドは、マルチコア異種コンピューティングデバイスにリバースTLBルックアップのソフトウェア実装形態またはハードウェア実装形態を利用させてもよい。たとえば、マルチコア異種コンピューティングデバイス内のプロセッサは、特定のメモリブロックの範囲内の物理アドレスと一致する第1のプロセッサのTLBエントリを無効化するメソッドを実行させる場合があるAPIコマンド(たとえば、flush_tlb_range(memory_block_identifier, start_PA, end_PA))を使用してもよい。別の例として、マルチコア異種コンピューティングデバイス内のプロセッサは、特定の物理アドレスと一致する第1のプロセッサのTLBエントリ(たとえば、flush_tlb_page(physical_address, memory_block_identifier))をフラッシングするハードウェアまたは回路を使用させる場合がある別のAPIコマンドを使用してもよい。そのようなAPIコマンドは、TLB動作を実装するための物理アドレス空間プロトコルを実施するための好都合な方法をプロセッサが実行できるようにするうえで有用である場合がある。一態様では、マルチコア異種コンピューティングデバイス内のプロセッサは、複数のTLBエントリのバッチ無効化を実行するためにAPIコマンドを利用するように構成されてもよい。
【００２０】
別の態様では、マルチコア異種コンピューティングデバイス内のプロセッサは、プロセッサが、無効化すべきであるTLBエントリを識別するために仮想アドレスではなく物理アドレスを入力として利用する場合がある拡張TLBシュートダウン方法(またはシュートダウンプロトコル)を実行するように構成されてもよい。そのような方法では、マルチコア異種コンピューティングデバイスは、後述のようにリバースTLBルックアップ演算を実行するためにハードウェア、命令、API呼出し、またはソフトウェア方法を利用してもよい。たとえば、マルチコア異種コンピューティングデバイス内の第1のプロセッサは、第1のTLB内のページの仮想アドレスに関係する変換情報を修正する必要があることを検出したことに応答して、プロセッサ間割込みを無効化し、第1のTLB(および第1のプロセッサ)に関連するアクティブフラグをクリアし、システムページテーブルをロックし、物理アドレスを使用しリバースTLB命令または回路を使用して第1のプロセッサのTLB上でルックアップを実行し、物理アドレスに関連するTLBエントリをフラッシングし、マルチコア異種コンピューティングデバイス内の第2のプロセッサが第2のプロセッサのTLB内の物理アドレスに対応するエントリに対して無効化演算を実行すべきであることを示すメッセージを送信してもよい。第2のプロセッサは、上述のような方法を使用して、リバースTLBルックアップ命令または回路を介することなどによって、物理アドレスを使用して第2のTLBに対してTLBルックアップ演算を実行してもよく、かつ任意の一致するTLBエントリをフラッシングしてもよい。
【００２１】
別の態様では、ARMアーキテクチャを利用するデバイスなどの分散仮想メモリ(DVM)を利用するように構成されたシステムまたはデバイスは、本開示の様々な方法および/または命令を利用するように構成されてもよい。メモリ内のメモリ管理ユニット(MMU)ページテーブルのコヒーレントなセットを共有するコヒーレントなマルチクラスタCPUシステムがTLBコヒーレンシを必要とする場合がある。たとえば、TLBがメモリ内のメモリ管理ユニット(MMU)ページテーブルのキャッシュであるとき、そのようなシステムは、マスタがページテーブルを更新するときにMMUページテーブルエントリの安定なコピーを含む場合があるTLBエントリの無効化を実行してもよい。キャッシュコヒーレンシプロトコルにおける分散仮想メモリサポートは、物理アドレスを使用して無効化メッセージをブロードキャストすることからなってもよい。DVMメッセージは、TLB無効化、分岐予測子、仮想または物理命令キャッシュ無効化(プロセッサがメモリに対してコードを書いた場合)およびすべての以前のDVMコマンドが完了するのを待つ同期をサポートする場合もある。DVMメッセージは、スヌープシグナリングを使用して読出しチャネル上で送信されてもよい。システムMMU(SMMU)は、そのエントリが最新のエントリになるように物理アドレスを使用するTLB無効化メッセージを利用してもよい。
【００２２】
図1は、第1の種類の第1のプロセッサ501と第2の種類の第2のプロセッサ531とを含むマルチコア異種コンピューティングデバイス500を示す。たとえば、第1のプロセッサ501は、64ビットアーキテクチャを有するアプリケーションプロセッサであってもよく、第2のプロセッサ531は、32ビットアーキテクチャを有するコプロセッサ(たとえば、グラフィックス処理ユニット、デジタル信号プロセッサ、など)であってもよい。第1のプロセッサ501および/または第2のプロセッサ531はシステムオンチップに含まれてもよい。第1のプロセッサ501は、第1のページテーブル120(図1では「Page Table_A」と呼ばれる)に関連付けられてもよく、第2のプロセッサ531は、第2のページテーブル140(図1では「Page Table_B」と呼ばれる)に関連付けられてもよく、各ページテーブル120、140は、アプリケーションデータの一部を記憶するランダムアクセスメモリ(RAM)内のインデックスブロックまたはページなどの共有システムメモリ502の物理アドレスに仮想アドレスをリンクする記憶されたデータを含む。一態様では、システムメモリ502は、システムページテーブル(図1には示されていない)に関連付けられてもよい。
【００２３】
例示のために、第1のページテーブル120は、第1の仮想アドレス(すなわち、第1のプロセッサ501に対応するアドレス"1")を第1の物理アドレスメモリブロック150(すなわち、メモリインデックス"2")にリンクする第1のデータレコード122と、第2の仮想アドレス(すなわち、第1のプロセッサ501に対応するアドレス"2")を第2の物理アドレスメモリブロック152(すなわち、メモリインデックス"3")にリンクする第2のデータレコード124と、第3の仮想アドレス(すなわち、第1のプロセッサ501に対応するアドレス"3")を第3の物理アドレスメモリブロック154(すなわち、メモリインデックス"X")にリンクする第3のデータレコード126とを含んでもよい。第2のページテーブル140は、第4の仮想アドレス(すなわち、第2のプロセッサ531に対応するアドレス"1")を第3の物理アドレスメモリブロック154(すなわち、メモリインデックス"X")にリンクする第4のデータレコード142と第5の仮想アドレス(すなわち、第2のプロセッサ531に対応するアドレス"2")を第4の物理アドレスメモリブロック156(すなわち、メモリインデックス"X+3")にリンクする第5のデータレコード144とを含んでもよい。
【００２４】
メモリ502は共有システムメモリであるので、第1のページテーブル120および第2のページテーブル140は、メモリ502の同じ物理アドレスの参照を含むデータレコードを含んでもよい。非限定的な例として、第3のデータレコード126は、第4の仮想アドレス(すなわち、第1のプロセッサ501に対応するアドレス"3")を第3の物理アドレスメモリブロック154(すなわち、メモリインデックス"X")にリンクしてもよく、第4のデータレコード142は、第4の仮想アドレス(すなわち、第2のプロセッサ531に対応するアドレス"1")を第3の物理アドレスメモリブロック154にリンクしてもよい。言い換えれば、ページテーブル120、140を介して、第1のプロセッサ501と第2のプロセッサ531の両方が、様々な仮想アドレスを使用して共有システムメモリ502に記憶された同じデータにリンクしアクセスしてもよい。
【００２５】
第1のプロセッサ501は第1のTLB 110(図1では"TLB_A"と呼ぶ)に関連付けられてもよく、第2のプロセッサ531は第2のTLB 130(図1では"TLB_B"と呼ぶ)に関連付けられてもよく、各TLB 110、130はそれぞれ、第1のページテーブル120および第2のページテーブル140から得た記憶されたデータを含む。たとえば、第1のTLB 110は第1のページテーブル120のデータレコード124、126のサブセットを含んでもよく、第2のTLB 130は第2のページテーブル140のデータレコード142、144のサブセット(またはすべて)を含んでもよい。
【００２６】
図2は、リバースTLBルックアップ演算を実行するために共有システムメモリに関連付けられた物理アドレスを利用するように構成されたマルチコア異種コンピューティングデバイス500態様を示す。マルチコア異種コンピューティングデバイス500は、TLBエントリまたはメモリエントリを複製せずにかつそれほどの時間衝撃なしにハードウェアリバースTLBプローブ命令を実行するための回路、ハードウェア、および/または様々なモジュールを含むように構成されてもよい。特に、マルチコア異種コンピューティングデバイス500は、物理アドレスに関連する仮想アドレス203〜205に対応するマスク206〜208のセットを記憶する場合がある連想メモリ(図2では"CAM"と呼ぶ)202を含んでもよい。CAM 202は、プロセッサ(たとえば、アプリケーションプロセッサ、第1のプロセッサ、第2のプロセッサなど)用のTLBとして働いてもよい。マスク206〜208は、ページフレーム番号または仮想アドレス値の最上位ビットの数を制御するのに使用されてもよく、一般にマスク206〜208に対応する仮想アドレス203〜205を有するTLBエントリに記憶されたビットフィールドとして実装されてもよい。一態様では、CAM 202は、ページフレーム番号のセットを仮想アドレス203〜205およびマスク206〜208に関連して記憶してもよい。たとえば、CAM 202は、ページフレーム番号を関連する仮想アドレス203〜205のTLBエントリに記憶できるようにシステムページテーブルから受信して記憶してもよい。
【００２７】
マルチコア異種コンピューティングデバイス500は、レジスタ、システム変数、またはその他のバッファ要素などの、物理アドレス入力220を受信して記憶するためのハードウェア/回路を含んでもよく、図2の目的に関して「入力モジュール」250と呼ばれる場合がある。たとえば、マルチコア異種コンピューティングデバイス500は、マルチコア異種コンピューティングデバイス500が物理アドレスを使用してTLBエントリを無効化するためのAPIコマンドのインスタンス化を検出したことに応答して、入力モジュール250に関連するレジスタ内に物理アドレス入力220を記憶してもよい。一態様では、入力ジュール250は、CAM 202の一部であってもよい。別の態様では、入力モジュール250および/またはCAM 202は、マルチコア異種コンピューティングデバイス500内の個々のプロセッサに関連付けられてもよい。
【００２８】
マルチコア異種コンピューティングデバイス500は、ランダムアクセスメモリ(またはRAM 502)などの共有システムメモリを管理するためのRAMコントローラ240を含んでもよい。RAMコントローラ240は、TLBルックアップ演算に関連する情報を記憶するためにRAMコントローラ240によって使用される場合があるバッファなどのヒットベクトルを利用してもよい。たとえば、RAMコントローラ240は、「ヒット」(すなわち、CAM 202のエントリに記憶されたデータと物理アドレスなどの探索トークンとの一致)を検出したことに応答してCAM 202のインデックス(またはエントリインデックス)を記憶してもよい。一態様では、ヒットベクトルは、CAM 202エントリの複数のインデックス(またはヒット)を記憶してもよい。RAMコントローラ240は、RAM 502の各メモリブロックに記憶されたデータをエントリごとに(またはサイクルごとに)評価することなどによってRAM 502のバースト読出しを行うように構成されてもよい。特に、RAMコントローラ240は、ブロック211〜213の各々に関連するページフレーム番号を識別するためにRAM 502のブロック211〜213を一度に1つずつ反復的に読み出すように構成されてもよい。一態様では、マルチコア異種コンピューティングデバイス500は、RAMコントローラ240が読出し/評価を行うエントリごとに1クロックサイクルを使用してもよい。一態様では、ページフレーム番号は、RAM 502に関連するシステムページテーブル内に示されてもよい。別の態様では、ブロック211〜213は、CAM 202のTLBエントリに関連付けられてもよい。たとえば、第1のブロック211のページフレーム番号(たとえば、"PFN_1")は、第1の仮想アドレス203(たとえば、"VA_1")およびTLBエントリに記憶された第1のマスク206(たとえば、"Mask_1")に関連付けられてもよい。
【００２９】
RAMコントローラ240は、RAM 502のブロック211〜213の各々を読み出したことに応答してページフレーム番号(たとえば、"PFN_1"、"PFN_2"、"PFN_n"など)を示す信号214を送信することなどによって様々なページフレーム番号を示す信号214を送信してもよい。RAMコントローラ240は、信号214を介して個々のページフレーム番号を反復的に一度に1つずつ送信してもよい。マルチコア異種コンピューティングデバイス500は、CAM 202において、RAMコントローラ240を介して送信された信号214を受信し、示されたページフレーム番号をCAM 202に記憶されたデータによる比較演算またはマスキング演算に使用するように構成されてもよい。
【００３０】
一態様では、マルチコア異種コンピューティングデバイス500は、CAM 202に記憶された仮想アドレス203〜205に対応する様々なマスク206〜208を示す信号210、210'を送信するように構成されてもよい。たとえば、マルチコア異種コンピューティングデバイス500は、入力モジュール250によって使用される信号210'および/またはCAM 202によって使用される信号210を送信してもよい。CAM 202に記憶された仮想アドレス203〜205に対応する個々のマスク206〜208は、信号210、210'を介して反復的に一度に1つずつ送信されてもよい。
【００３１】
マルチコア異種コンピューティングデバイス500は、信号210、210'を介して送信されるマスク206〜208と組み合わせてマスク適用構成要素201、201'を利用するように構成されてもよい。そのようなマスク適用構成要素201、201'は、マルチプレクサまたはゲートなど、2つの入力値を一意の値としてフィルタリングするか、増大させるか、復号するか、組み合わせるか、または場合によっては変更するための回路、ハードウェア、またはモジュールであってもよい。たとえば、マスク適用構成要素201、201'は、ページフレーム番号入力値に数学演算、ビットパターン、または数式を適用するハードウェア論理であってもよい。別の例として、マスク適用構成要素201、201'は、アドレス(たとえば、物理メモリアドレス)またはフレーム番号のどのビットがゼロ設定されるかを示すビットパターンとしてマスク206〜208のうちの1つを適用してもよい。別の例として、マスク適用構成要素201、201'はステートマシンであってもよい。
【００３２】
CAM 202は、第1のマスク適用構成要素201を介してマスク206〜208を適用するように構成されてもよく、入力モジュール250は、第2のマスク適用構成要素201'を介してマスク206〜208を適用するように構成されてもよい。特に、CAM 202は、第1のマスク適用構成要素201を使用して、信号210内に個々に示されたマスク206〜208を信号214内に個々に示されたページフレーム番号に適用するように構成されてもよい。たとえば、CAM 202は、出力値を生成するために信号214(たとえば、"PFN_1"など)を介して送信されるページフレーム番号に第1のマスク適用構成要素201を介してマスク206〜208を反復的に適用してもよい。一態様では、マルチコア異種コンピューティングデバイス500は、データを複製せずに受信された信号214内のデータを再使用する(すなわち、システムページテーブル内のエントリから得たページフレーム番号を再使用する)ように構成されてもよい。言い換えれば、CAM 202は、信号214を介して受信された様々なページフレーム番号をバッファリングするかまたはその他の方法で記憶することなどによって、マスク206〜208を第1のマスク適用構成要素201を介してページフレーム番号に反復的に適用する間にコンパレータを複製するのを回避するように構成されてもよい。CAM 202は、マスク206〜208を第1のマスク適用構成要素201を介して様々なページフレーム番号に適用することによる出力値を示す信号265を送信してもよい。
【００３３】
さらに、入力モジュール250は、第2のマスク適用構成要素201'を使用して、信号210'内に個々に示されたマスク206〜208を物理アドレス入力220に適用するように構成されてもよい。たとえば、入力モジュール250は、第2のマスク適用構成要素201'を介して、出力値を生成するために物理アドレス入力220によって示された物理アドレスに第1のマスク206を適用してもよい。入力モジュール250は、マスク206〜208を第2のマスク適用構成要素201'を介して適用することによる出力値を示す信号260を送信してもよい。
【００３４】
同じマスク206〜208がそれぞれ第1および第2のマスク適用構成要素201、201'を介してCAM 202および入力モジュール250によって使用される場合があるので、信号260、265において送信される出力値は、同じマスクを同じ値(すなわち、物理アドレス入力220または信号214内のページフレーム番号)に適用することによって生成されるときには同じであってもよい。たとえば、CAM 202に関連する第1のマスク適用構成要素201および入力モジュール250に関連する第2のマスク適用構成要素201'からの出力値は、物理アドレス入力220が信号214を介してCAM 202によって受信されるページフレーム番号と同じであるときには同じであってもよい。
【００３５】
マルチコア異種コンピューティングデバイス500は、マスク適用構成要素201、201'を介してマスク206〜208を適用することによって得られ信号260、265によって送信される出力値が同じであるかどうかを判定するために比較回路230を利用してもよい。言い換えれば、比較回路230は、CAM 202および入力モジュール250が互いに一致する出力値を生成したかどうかを判定し、したがって、CAM 202と入力モジュール250の両方がどちらもそれぞれのマスク適用構成要素201、201'に同じ入力値を使用したかどうか(すなわち、「ヒット」があるかどうか)を判定するのに使用されてもよい。CAM 202は、比較回路230を介して、信号214内で受信されたページフレーム番号に信号210内のマスク206〜208を適用した結果と並行して信号260内の出力値を比較するように構成されてもよい。比較回路230が、信号260、265からの出力値が同じである(すなわち、「ヒット」)と判定したときに、同じ出力値を生成するためにマスク適用構成要素201、201'に使用される入力値(すなわち、マスク206〜208)に対応するCAM 202(またはTLB)エントリまたはエントリインデックスを示す信号270がRAMコントローラ240に送信されてもよい。一態様では、CAM 202は、CAM 202内のエントリごとに1つの比較回路などの複数の比較回路を利用することによって並行比較を実行してもよい。
【００３６】
図3Aは、マルチコア異種コンピューティングデバイスのプロセッサがリバースTLBルックアップ演算を実行するために共有システムメモリに関連付けられた物理アドレスを利用するための方法態様300を示す。方法300は、マルチコア異種コンピューティングデバイス内の他のプロセッサによって実行される動作に応答して修正またはフラッシングすることが必要になる場合があるエントリなどの、特定の物理アドレスに対応するTLBエントリを識別するために実行されてもよい。たとえば、マルチコア異種コンピューティングデバイス内の第2のプロセッサは、第1のプロセッサがRAMの共有メモリブロック内のコンテンツを修正したことに応答して、TLBシュートダウン機構の一部として方法300を実行してもよい。様々な態様では、方法300は、上述のように、命令、ソフトウェアメソッド、またはハードウェアを介してマルチコア異種コンピューティングデバイス内のプロセッサにおいて実施されてもよい。説明を簡単にするために、方法300の動作態様について以下に、マルチコア異種コンピューティングデバイス内の「第1のプロセッサ」を参照しながら説明する。
【００３７】
ブロック302において、マルチコア異種コンピューティングデバイス内の第1のプロセッサは、APIコマンドに関して第1のプロセッサによって物理アドレス入力を受信することなどによって、共有メモリに対応する物理アドレス入力を取得してもよい。物理アドレス入力は、システムメモリブロック識別子、ページフレーム番号もしくは識別子、または共有システムメモリに関連するその他のインデックス値であってもよい。マルチコア異種コンピューティングデバイスは、物理アドレスに対応するTLBエントリに関するコマンドを呼び出した物理アドレスなどの物理アドレスを無効化またはフラッシングすべきであることを示す命令、APIコマンド、および/またはメソッドのインスタンス化があるかどうかを監視してもよい。たとえば、マルチコア異種コンピューティングデバイスは、APIコマンド"Invalidate(PA)"が実行されるように呼び出されたことを検出してもよく、この場合、"PA"は、無効化すべき特定の物理アドレスを表す入力変数または入力パラメータである。
【００３８】
ブロック304において、第1のプロセッサは、第1のプロセッサに関連するTLB内のTLBエントリを選択してもよい。様々な態様では、選択されるTLBエントリは、仮想アドレスと、仮想アドレスに関連するマスクと、デバイスの共有メモリに関連するシステムページテーブルから得たページフレーム番号とを含んでもよい。たとえば、TLBエントリは、特定の仮想アドレス、ビットパターンマスク、およびシステムページテーブルから得た関連するページフレーム番号を含む様々なデータを含むデータテーブルレコードであってもよい。TLBエントリは、対応するインデックス、またはTLBエントリに関連して記憶された情報を参照するのに使用される場合があるデータテーブルインデックスなどのその他の識別子を有してもよい。一態様では、TLBは上述のようにCAMであってもよい。
【００３９】
ブロック306において、第1のプロセッサは、選択されたTLBエントリから仮想アドレスに関連するマスクを取得してもよい。各TLBエントリは、様々なマスクサイズ(たとえば、4K、4MBなど)を有する場合があるマスクを含んでもよい。マスクは、ビットパターンまたはビット表現であってもよい。第1のプロセッサは、ブロック308において選択されたTLBエントリからページフレーム番号を取得してもよい。一態様では、マルチコア異種コンピューティングデバイスは、冗長サイクルを回避しボトルネックを回避するために、TLB実装時に、TLBに書き込むページフレーム番号を第1のプロセッサを介して取得してもよく、したがって、方法300の実行時にシステムメモリから何もフェッチする必要がない場合もある。たとえば、取得されるページフレーム番号は、TLBに記憶できるように実行時の前にシステムページテーブルから取り出され、現在システムメモリに記憶されているページの物理アドレスであってもよい。一態様では、ページフレーム番号は、インデックスまたはメモリブロック識別子を示す情報であってもよい。
【００４０】
ブロック310において、第1のプロセッサは、第1の出力値を生成するために取得されたマスクを取得されたページフレーム番号に適用してもよい。上述のように、第1のプロセッサは、フィルタ、数式、メソッド、または入力値(たとえば、取得されたマスクおよび取得されたページフレーム番号)を取り、同じ入力値を使用して複製するかまたは繰り返すことのできる出力値を生成するその他の動作を介してマスクを適用してもよい。たとえば、第1のプロセッサは、ビットをゼロ設定するために取得されたページフレーム番号にマスクビットパターンを適用してもよい。言い換えれば、同じマスクに同じ入力値(たとえば、ページフレーム番号)が使用されるとき、同じ出力値が生成される。第1のプロセッサは、ブロック310における動作と同様に、ブロック312において第2の出力値を生成するために取得されたマスクを取得された物理アドレス入力に適用してもよい。
【００４１】
ブロック314において、第1のプロセッサは、第1の出力値と第2の出力値を比較してもよい。たとえば、第1のプロセッサは、第1の出力値および第2の出力値が等価であることを検出するために第1および第2の出力値にパターン照合、数学演算、またはその他の比較演算を実行してもよい。判定ブロック316において、第1のプロセッサは、比較演算などに基づいて、第1の出力値および第2の出力値が一致するかどうかを判定してもよい。第1の出力値および第2の出力値が一致しないと判定された場合(すなわち、判定ブロック316=「No」)、第1のプロセッサは方法300を終了してもよい。第1の出力値および第2の出力値が一致する場合(すなわち、判定ブロック316=「Yes」)、第1のプロセッサは、ブロック318において選択されたTLBエントリのインデックスを返してもよい。たとえば、第1のプロセッサは、一致するTLBエントリのインデックスを無効化演算またはフラッシュ演算(またはフラッシング演算)において使用できるようにTLB(たとえば、CAM)に送信してもよい。任意のブロック320において、第1のプロセッサは、返されたインデックスを使用して、選択されたTLBエントリをフラッシングしてもよい。たとえば、第1のプロセッサは、仮想アドレスおよびリバースTLBルックアップ演算に基づいて選択されたTLBエントリに関連して記憶されたその他の情報を否定するか、削除するか、無効化するか、またはその他の方法によって取り消してもよい。
【００４２】
図3Bは、マルチコア異種コンピューティングデバイス内のプロセッサがリバースTLBルックアップ演算を実行するために共有システムメモリに関連付けられた物理アドレスを利用するための方法態様350を示す。方法350は、マルチコア異種コンピューティングデバイス内のプロセッサがシステムメモリに関係する各ページフレーム番号およびTLB内に示された仮想アドレスに関連する各マスクを含む出力値を反復的に生成するのを可能にする演算ループを有効化するための動作を含むことを除いて、図3Aを参照して上記で説明した方法300と同様である。言い換えれば、マルチコア異種コンピューティングデバイスは、TLBエントリからマスクおよびページフレーム番号を反復的に取得し、取得されたマスクを取得されたページフレーム番号ならびに受信/取得された物理アドレス(または物理アドレス入力)に反復的に適用し、得られた出力値同士が一致するかどうかを判定するために出力値同士を反復的に比較するように構成されてもよい。様々な態様では、方法350は、上述のように、命令、ソフトウェアメソッド、または専用ハードウェアを介してマルチコア異種コンピューティングデバイス内のプロセッサにおいて実施されてもよい。この場合も、説明を簡単にするために、方法350の動作態様について以下に、マルチコア異種コンピューティングデバイス内の「第1のプロセッサ」を参照しながら説明する。
【００４３】
ブロック302において、マルチコア異種コンピューティングデバイス内の第1のプロセッサは、共有メモリに対応する物理アドレス入力を取得してもよい。ブロック304'において、第1のプロセッサは、第1のプロセッサに関連するTLB内の次のTLBエントリを選択してもよい。ブロック304'における動作は、図3Aを参照しながら上記でブロック304において説明した動作と同じであってもよいが、第1のプロセッサは、TLBエントリを順に選択するように構成されてもよい。たとえば、次のTLBエントリは、方法350が最初に実行される場合、第1のTLBエントリであってもよい。ブロック306において、第1のプロセッサは、選択されたTLBエントリから仮想アドレスに関連するマスクを取得してもよい。第1のプロセッサは、ブロック308において選択されたTLBエントリからページフレーム番号を取得してもよい。ブロック310において、第1のプロセッサは、第1の出力値を生成するために取得されたマスクを取得されたページフレーム番号に適用してもよい。ブロック312において、第1のプロセッサは、第2の出力値を生成するために取得されたマスクを取得された物理アドレス入力に適用してもよい。
【００４４】
ブロック314において、第1のプロセッサは、第1の出力値と第2の出力値を比較してもよい。判定ブロック316において、第1のプロセッサは、比較演算などに基づいて、第1の出力値および第2の出力値が一致するかどうかを判定してもよい。第1の出力値および第2の出力値が一致しないと判定された場合(すなわち、判定ブロック316=「No」)、判定ブロック352において、第1のプロセッサは、選択されたTLBエントリがTLBにおける最後のエントリであるかどうかを判定してもよい。選択されたTLBエントリが最後のTLBエントリであると判定された場合(すなわち、判定ブロック352=「Yes」)、第1のプロセッサは方法350を終了してもよい。しかし、選択されたTLBエントリが最後のTLBエントリではないと判定された場合(すなわち、判定ブロック352=「No」)、第1のプロセッサは、次のTLBエントリを選択し、引き続き様々な出力値を生成し評価することによって、ブロック304'における動作を継続してもよい。第1の出力値および第2の出力値が一致すると判定された場合(すなわち、判定ブロック316=「Yes」)、第1のプロセッサは、ブロック318において選択されたTLBエントリのインデックスを返してもよい。第1のプロセッサは、返されたインデックスを使用して、任意のブロック320において選択されたTLBエントリをフラッシングしてもよい。
【００４５】
マルチコア異種コンピューティングデバイス内の様々なプロセッサは、TLBシュートダウン機構を実装するためにハンドシェイキング動作またはプロトコルを実行するように構成されてもよい。たとえば、第1のプロセッサは、そのTLB内の仮想アドレスに関係する変換情報を修正する必要があると判定したときに、第1のプロセッサは第1のプロセッサのアクティブフラグ(たとえば、マルチコア異種コンピューティングデバイスのオペレーティングシステムからアクセス可能なビット/変数)をクリアし、システムページテーブル(たとえば、システムメモリに関連するページテーブル)をロックし、仮想アドレスに関係するTLBエントリをフラッシングし、実行すべきTLBアクション(たとえば、TLBエントリを無効化する)を記述したメッセージ(または割込み)を第2のプロセッサに送信し、第2のプロセッサのアクティブフラグがクリアされるまでビジーウェイトしてもよい。第2のプロセッサは、メッセージを受信したことに応答して、第2のプロセッサのアクティブフラグをクリアし、システムページテーブルがロックされるまでビジーウェイトしてもよい(すなわち、第2のプロセッサに対してローカルなTLBを修正することが安全になるまで待つ)。第2のプロセッサのアクティブフラグがクリアされると、第1のプロセッサは次いで、システムメモリのページテーブルを修正し、第1のプロセッサのアクティブフラグをセットし、システムページテーブルをロック解除し、引き続き第1のプロセッサの通常のプロセスを実行してもよい。第2のプロセッサは次いで、メッセージ内に示されたTLBアクションを実行し(たとえば、TLBエントリを無効化し)、第2のプロセッサのアクティブフラグをセットし、第2のプロセッサのプロセスの実行を継続する。しかし、そのような従来のハンドシェイキング機構は、マルチコア異種コンピューティングデバイスにおいてコヒーレンシを維持するために各プロセッサ間の仮想アドレスパリティおよび/またはコストのかかる直列演算に依存する場合がある。
【００４６】
図4は、マルチコア異種コンピューティングデバイスが第1のプロセッサに関連する第1のTLBエントリを無効化(またはフラッシング)するために物理アドレスを利用するための方法態様400および第2のプロセッサに関連する第2のTLBエントリを無効化するために物理アドレスを利用する方法態様450を示す。言い換えれば、図4は、物理アドレスに一致する物理フレーム番号に対応する第1および第2のプロセッサのTLBエントリを無効化するための改善されたTLBシュートダウン機構を有効化するために2つのプロセッサによって並行して実行される場合がある方法400、450を示す。様々な態様では、方法400、450は、マルチコア異種コンピューティングデバイスの様々なプロセッサによって、同時に実行されるソフトウェア、アプリケーション、ルーチン、またはオペレーティングシステムスレッドとして実行されてもよい。
【００４７】
ブロック402において、マルチコア異種コンピューティングデバイス内の第1のプロセッサは、共有メモリに対応するTLBアクションおよび物理アドレス入力を取得してもよい。たとえば、マルチコア異種コンピューティングデバイスは、第1のプロセッサに関連するTLBのエントリをフラッシングするためのAPI呼出しを受信してもよい。TLBアクションおよび/または物理アドレス入力は割込み内のデータとして受信されてもよい。ブロック404において、第1のプロセッサは、第1のプロセッサに関連するシステムビットまたは変数をゼロ設定することなどによって、第1のプロセッサに関連するアクティブフラグをクリアしてもよい。そのようなアクティブフラグは、マルチコア異種コンピューティングデバイス内の様々なプロセッサおよび/またはマルチコア異種コンピューティングデバイス上で実行されるオペレーティングシステムルーチンからアクセス可能であり、または場合によってはそれらの様々なプロセッサおよび/またはオペレーティングシステムルーチンから見える。第1のプロセッサは、ブロック406においてTLBアクションおよび受信された物理アドレスを示す割込みなどのメッセージを第2のプロセッサに送信してもよい。ブロック407において、第1のプロセッサは、TLBアクションおよび物理アドレス入力を受信したことに応答してプロセッサ間割込み(またはIPI)を無効化するように構成されてもよい。第1のプロセッサは次に、ある期間の間スリープモードまたは待機モードに入ることなどによってブロック408においてビジーウェイト動作を実行してもよく、判定ブロック410において、マルチコア異種コンピューティングデバイス内の他のプロセッサのアクティブフラグがクリアされているかどうかを判定してもよい。一態様では、第1のプロセッサは、すべてのプロセッサのアクティブフラグを示す記憶された情報を周期的に評価してもよく、または代替的に、様々なプロセッサがそのそれぞれのアクティブフラグをクリアまたはセットするときに信号またはメッセージを受信してもよい。第1のプロセッサは、まだクリアされていないアクティブフラグがあると判定した場合(すなわち、判定ブロック410=「No」)、第1のプロセッサは、ブロック408においてビジーウェイト動作を継続してもよい。
【００４８】
方法450を参照するとわかるように、第1のプロセッサによってブロック406における動作が実行されたことに応答して、ブロック452において、マルチコア異種コンピューティングデバイス内の第2のプロセッサは、TLBアクションおよび物理アドレスを示すメッセージを第1のプロセッサから受信してもよい。ブロック454において、第2のプロセッサは、受信されたメッセージに基づいて第2のプロセッサのアクティブフラグをクリアしてもよい。第2のプロセッサは次に、ある期間の間スリープモードまたは待機モードに入ることなどによってブロック456においてビジーウェイト動作を実行してもよく、判定ブロック458において、システムページテーブルが第1のプロセッサによってロックされているかどうかを判定してもよい。一態様では、第2のプロセッサは、システムページテーブルのロックステータスを示す記憶された情報を周期的に評価してもよく、または代替的に、システムページテーブルがロックされるときに、マルチコア異種コンピューティングデバイスのオペレーティングシステムを介した信号などの信号またはメッセージを受信してもよい。第2のプロセッサは、システムページテーブルが第1のプロセッサによってロックされていないと判定した場合(すなわち、判定ブロック458=「No」)、第2のプロセッサは、ブロック456においてビジーウェイト動作を継続してもよい。
【００４９】
再び方法400を参照するとわかるように、第1のプロセッサは、ブロック412においてすべてのアクティブフラグがクリアされたと判定した場合(すなわち、判定ブロック410=「Yes」)、共有メモリに関連するページテーブルなどのシステムページテーブルをロックしてもよい。このことは、第1のプロセッサがオペレーティングシステムビット、変数、またはインジケータを設定するか、または代替的に、共有メモリのページテーブルをロックするためのシステムAPI呼出しを実行することによって実現されてもよい。
【００５０】
ブロック414において、第1のプロセッサは、受信された物理アドレスを使用して第1のプロセッサに関連する第1のTLBのエントリを識別するためにリバースTLBルックアップ演算を実行してもよい。様々な態様では、第1のプロセッサは、図3Bを参照しながら上記で説明した方法350を実行し、物理アドレスに関連するTLBエントリを見つけるためのAPIコマンドを実行し、かつ/または上述のようにハードウェア実装されたリバースTLBルックアップ命令を実行することによってリバースTLBルックアップ演算を実行してもよい。たとえば、ブロック414の動作は、上述の図3Bの方法350の動作または図2を参照しながら上記で説明したようなリバースTLBルックアップハードウェアの使用を含んでもよい。
【００５１】
ブロック416において、第1のプロセッサは、第1のTLBの識別されたエントリに対してTLBアクションを実行してもよい。たとえば、第1のプロセッサは、物理アドレスに対応する識別されたエントリをフラッシングするかまたは他の方法によって無効化してもよい。第1のプロセッサは、共有メモリ内のページのブロックまたはある範囲をクリアすることなどによって、ブロック418においてTLBアクションおよび物理アドレスに基づいてシステムページテーブルを修正してもよい。ブロック420において、第1のプロセッサは、システムページテーブルをロック解除し、ブロック422において第1のプロセッサのアクティブフラグをセットしてもよい。第1のプロセッサは次いで、ブロック424においてプロセッサ間割込みを再有効化し、TLBアクションおよび物理アドレスを受信する前に進行中のソフトウェアルーチンを実行することなどの通常の動作を継続してもよい。一実施形態では、第1のプロセッサは、第2のプロセッサがブロック464を参照しながら以下で説明する動作によって第2のプロセッサのアクティブフラグをセットしたことに応答してプロセッサ間割込みを再有効化してもよい。
【００５２】
再び方法450を参照するとわかるように、第2のプロセッサは、第1のプロセッサによってシステムページテーブルがロックされていると判定した場合(すなわち、判定ブロック458=「Yes」)、受信された物理アドレスを使用して第2のプロセッサに関連する第2のTLBのエントリを識別するためにリバースTLBルックアップ演算を実行してもよい。ブロック460における動作は、ブロック460における動作が第2のプロセッサに関連するTLBエントリを識別するために第2のプロセッサによって実行される場合があることを除いて、ブロック414を参照しながら上記で説明した動作と同様であってもよい。たとえば、第2のプロセッサは、上述の図3Bにおける方法350の動作を実行してもよい。ブロック462において、第2のプロセッサは、図2を参照しながら上記で説明したようなリバースTLBルックアップメソッド、APIコマンド、またはハードウェアを使用して識別されたTLBエントリのフラッシングまたは無効化などのTLBアクションを第2のTLBの識別されたエントリに対して実行してもよい。ブロック464において、第2のプロセッサは、そのアクティブフラグをセットし、保留中のアプリケーションもしくはルーチンまたはすでに起動されたアプリケーションもしくはルーチンなどの他のルーチンを引き続き実行してもよい。
【００５３】
図5は、様々な態様とともに使用するのに適したマルチコア異種コンピューティングデバイス500のシステムブロック図である。様々な実施形態では、マルチコア異種コンピューティングデバイス500は、タッチスクリーンコントローラ504および内部メモリ502に結合されたプロセッサ501を含んでもよい。プロセッサ501は、汎用または特定の処理タスクに指定された1つまたは複数のマルチコア集積回路であってもよい。様々な実施形態では、マルチコア異種コンピューティングデバイス500は、内部メモリ502に結合された第2のプロセッサ531を含んでもよい。一態様では、第1のプロセッサ501はアプリケーションプロセッサであってもよく、第2のプロセッサ531は補助プロセッサ(たとえば、デジタル信号プロセッサ、グラフィックスプロセッサ(またはGPU)など)であってもよい。内部メモリ502は、揮発性メモリまたは不揮発性メモリであってもよく、また、セキュアメモリおよび/もしくは暗号化メモリ、または非セキュアメモリおよび/もしくは非暗号化メモリ、またはそれらの任意の組合せであってもよい。タッチスクリーンコントローラ504およびプロセッサ501は、抵抗感知タッチスクリーン、容量感知タッチスクリーン、赤外線感知タッチスクリーンなどの、タッチスクリーンパネル512に結合される場合もある。マルチコア異種コンピューティングデバイス500は、互いに結合され、かつ/またはプロセッサ501に結合された、送信および受信用の1つまたは複数の無線信号トランシーバ508(たとえば、Peanut(登録商標)、Bluetooth(登録商標)、Zigbee(登録商標)、Wi-Fi、RF無線など)、およびアンテナ510を有する場合がある。トランシーバ508およびアンテナ510は、様々なワイヤレス送信のプロトコルスタックおよびインターフェースを実装するために、上述の回路とともに使用される場合がある。マルチコア異種コンピューティングデバイス500は、セルラーネットワークを介する通信を可能にし、かつプロセッサに結合されたセルラーネットワークワイヤレスモデムチップ516を含む場合がある。マルチコア異種コンピューティングデバイス500は、プロセッサ501に結合された周辺デバイス接続インターフェース518を含む場合がある。周辺デバイス接続インターフェース518は、1つのタイプの接続を受け入れるように単独で構成される場合があるか、または、USB、FireWire、Thunderbolt、もしくはPCIeなどの様々なタイプの物理接続および通信接続を共通もしくはプロプライエタリに受け入れるように、複数で構成される場合がある。周辺デバイス接続インターフェース518は、単独で構成された周辺デバイス接続ポート(図示せず)に結合される場合もある。マルチコア異種コンピューティングデバイス500は、オーディオ出力を実現するためのスピーカー514を含む場合もある。マルチコア異種コンピューティングデバイス500は、本明細書で論じた構成要素のすべてまたはいくつかを収容するための、プラスチック、金属、または材料の組合せから構築された筐体520を含む場合もある。マルチコア異種コンピューティングデバイス500は、使い捨てバッテリまたは充電可能なバッテリなどの、プロセッサ501に結合された電源522を含んでもよい。充電可能なバッテリは、マルチコア異種コンピューティングデバイス500の外部にある電源から充電電流を受けるために、周辺デバイス接続ポートに結合される場合もある。
【００５４】
プロセッサ501および531は、上で説明した様々な態様の機能を含む、種々の機能を実行するためのソフトウェア命令(アプリケーション)によって構成することのできる、任意のプログラマブルマイクロプロセッサ、マイクロコンピュータ、または1つもしくは複数の多重プロセッサチップであってもよい。様々なデバイスでは、1つのプロセッサをワイヤレス通信機能専用とし、1つのプロセッサを他のアプリケーションの実行専用とするなど、複数のプロセッサが設けられてもよい。通常、ソフトウェアアプリケーションは、それらがアクセスされ、プロセッサ501および531にロードされる前に、内部メモリ502内に記憶されてもよい。プロセッサ501および531は、アプリケーションソフトウェア命令を記憶するのに十分な内部メモリを含んでもよい。多くのデバイスでは、内部メモリは、揮発性メモリ、もしくはフラッシュメモリなどの不揮発性メモリ、または両方の混合であってもよい。本明細書では、メモリまたはシステムメモリへの一般的な言及は、様々なデバイスに差し込まれる内部メモリまたはリムーバブルメモリならびにプロセッサ501および531の中のメモリを含む、プロセッサ501および531によってアクセス可能なメモリを指す。
【００５５】
上記の方法の説明およびプロセスフロー図は、単に説明のための例として提供され、様々な態様のステップが提示された順序で実行されなければならないことを要求または意味するものではない。当業者によって諒解されるように、上記の態様におけるステップの順序は、いかなる順序で実施されてもよい。「したがって」、「次いで」、「次に」、などのような単語は、ステップの順序を限定することを意図しておらず、これらの単語は、単に、方法の説明を通じて読者を導くために使用される。さらに、たとえば、冠詞「a」、「an」、または「the」を使用して要素を単数で特許請求するどの参照も、要素を単数に限定するものとして解釈されるべきではない。
【００５６】
本明細書で開示された態様に関して記載された様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装される場合がある。ハードウェアおよびソフトウェアのこの互換性を明確に説明するために、上記では、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップについて、それらの機能に関して概略的に説明した。そのような機能がハードウェアとして実装されるか、またはソフトウェアとして実装されるかは、特定の適用例および全体的なシステムに課された設計制約によって決まる。当業者は、説明した機能を各々の特定の用途のために様々な方法で実装してもよいが、そのような実装の決定は、本発明の範囲からの逸脱を引き起こすものとして解釈されるべきではない。
【００５７】
本明細書において開示されている態様に関連して説明した様々な実例論理、論理ブロック、モジュールおよび回路を実現するために使用されるハードウェアは、本明細書において説明した機能を実施するために設計された、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、もしくは他のプログラマブル論理デバイス、離散ゲートもしくはトランジスタ論理、離散ハードウェア構成要素、またはそれらの任意の組合せを使用して実現または実施されてもよい。汎用プロセッサは、マイクロプロセッサであってもよいが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンであってもよい。プロセッサは、コンピューティングデバイスの組合せ、たとえば、DSPおよびマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと連携する1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装される場合もある。代替的に、いくつかのステップまたは方法は、所与の機能に固有の回路によって実行されてもよい。
【００５８】
1つまたは複数の例示的な態様では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実施されてもよい。機能は、ソフトウェアで実装される場合、1つまたは複数の命令またはコードとして、非一時的コンピュータ可読媒体もしくはサーバ可読媒体または非一時的プロセッサ可読記憶媒体に記憶され、または送信されてもよい。本明細書で開示された方法またはアルゴリズムのステップは、有形の、非一時的コンピュータ可読記憶媒体、非一時的サーバ可読記憶媒体、および/または非一時的プロセッサ可読記憶媒体上に存在する場合がある、プロセッサ実行可能ソフトウェアモジュールで具現化されてもよい。様々な実施形態では、そのような命令は、記憶されたプロセッサ実行可能命令または記憶されたプロセッサ実行可能ソフトウェア命令であってもよい。有形の非一時的コンピュータ可読記憶媒体は、コンピュータによってアクセスされる場合がある任意の利用可能な媒体であってもよい。限定ではなく例として、そのような非一時的コンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、または、命令またはデータ構造の形式で所望のプログラムコードを記憶するために使用される場合があり、コンピュータによってアクセスされる場合がある任意の他の媒体を含んでもよい。本明細書で使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(CD)、レーザディスク、光ディスク、デジタル多用途ディスク(DVD)、フロッピー(登録商標)ディスク、およびblu-rayディスクを含み、ここで、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、レーザを用いて光学的にデータを再生する。上記の組合せは、また、非一時的コンピュータ可読媒体の範囲内に含まれるべきである。加えて、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれる場合がある、有形の非一時的プロセッサ可読記憶媒体および/またはコンピュータ可読媒体上のコードおよび/または命令の、1つまたは任意の組合せ、またはそのセットとして存在してもよい。
【００５９】
開示した態様の上記の説明は、任意の当業者が本発明を作製または使用することができるように提供される。これらの態様に対する様々な修正は、当業者には容易に明らかであり、本明細書で定義された一般的な原理は、本発明の要旨または範囲から逸脱することなく、他の態様に適用されてもよい。したがって、本発明は、本明細書に示される態様に限定されることは意図されず、以下の特許請求の範囲、ならびに、本明細書で開示されている原理および新規な特徴と一致する最も広い範囲を与えられるべきである。
【符号の説明】
【００６０】
120  第1のページテーブル
122  第1のデータレコード
124  第2のデータレコード
126  第3のデータレコード
140  第2のページテーブル
142  第4のデータレコード
144  第5のデータレコード
150  第1の物理アドレスメモリブロック
152  第2の物理アドレスメモリブロック
154  第3の物理アドレスメモリブロック
156  第4の物理アドレスメモリブロック
201  第1のマスク適用構成要素
202  CAM
203  第1の仮想アドレス
206  第1のマスク
210  信号
210'  信号
211  第1のブロック
214  信号
220  物理アドレス入力
230  比較回路
240  RAMコントローラ
250  入力モジュール
260  信号
300  方法
350  方法
400  方法
450  方法
500  マルチコア異種コンピューティングデバイス
501  第1のプロセッサ
502  システムメモリ
504  タッチスクリーンコントローラ
508  トランシーバ
512  タッチスクリーンパネル
514  スピーカー
516  セルラーネットワークワイヤレスモデムチップ
518  周辺デバイス接続インターフェース
520  筐体
522  電源
531  第2のプロセッサ
【図１】
2016535883.tif 000003
【図２】
2016535883.tif 000004
【図３Ａ】
2016535883.tif 000005
【図３Ｂ】
2016535883.tif 000006
【図４】
2016535883.tif 000007
【図５】
2016535883.tif 000008
【手続補正書】
【提出日】平成28年4月6日(2016.4.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
物理アドレス入力を使用してリバーストランスレーションルックアサイドバッファ(TLB)ルックアップを実行するための方法であって、
第1のプロセッサによって前記物理アドレス入力を取得するステップであって、前記物理アドレス入力は、共有メモリに対応する物理アドレスのみを示すステップと、
前記第1のプロセッサに関連するTLB内の第1のTLBエントリから第1のマスクを取得するステップであって、前記取得された第1のマスクは前記第1のTLBエントリの第1の仮想アドレスに関連するビットパターンであるステップと、
前記第1のTLBエントリから前記共有メモリに関連する第1のページフレーム番号を取得するステップと、
第1の値を生成するために前記第1のTLBエントリからの前記取得された第1のマスクを前記取得された第1のページフレーム番号に適用するステップと、
第2の値を生成するために前記第1のTLBエントリからの同一の前記取得された第1のマスクを前記取得された物理アドレス入力に適用するステップと、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較するステップとを含む方法。
【請求項２】
前記第1の値および前記第2の値が一致しないと判定したことに応答して前記TLB内の他のTLBエントリから第2のマスクおよび第2のページフレーム番号を反復的に取得するステップと、
前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用するステップと、
前記第2の値を生成するために前記取得された第2のマスクを前記取得された物理アドレス入力に反復的に適用するステップとをさらに含み、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較するステップは、前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を反復的に比較するステップを含む、請求項1に記載の方法。
【請求項３】
前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用するステップは、システムページテーブル内のエントリから得たページフレーム番号を複製せずに再使用するステップを含む、請求項2に記載の方法。
【請求項４】
前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリをフラッシングするステップをさらに含む、請求項1に記載の方法。
【請求項５】
TLBアクションおよび前記物理アドレスを示すメッセージを第2のプロセッサに送信するステップをさらに含み、前記TLBアクションはTLBフラッシュ演算を含む、請求項1に記載の方法。
【請求項６】
前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリのインデックスを返すステップをさらに含む、請求項1に記載の方法。
【請求項７】
第1のプロセッサによって前記物理アドレス入力を取得するステップは、TLBアクションと前記物理アドレスとを含むメッセージを第2のプロセッサから受信するステップを含み、
前記方法は、
前記第2のプロセッサによって送信された前記メッセージを受信したことに応答してアクティブフラグをクリアするステップと、
前記第1のTLBエントリの前記返されたインデックスを使用して前記受信されたメッセージ内に示された前記TLBアクションを実行するステップと、
前記TLBアクションを実行したことに応答して前記アクティブフラグをセットするステップとをさらに含む、請求項6に記載の方法。
【請求項８】
マルチコア異種コンピューティングデバイスであって、
第1のプロセッサによって物理アドレス入力を取得するための手段であって、前記物理アドレス入力は、共有メモリに対応する物理アドレスのみを示す手段と、
前記第1のプロセッサに関連するTLB内の第1のTLBエントリから第1のマスクを取得するための手段であって、前記取得された第1のマスクは前記第1のTLBエントリの第1の仮想アドレスに関連するビットパターンである手段と、
前記第1のTLBエントリから前記共有メモリに関連する第1のページフレーム番号を取得するための手段と、
第1の値を生成するために前記第1のTLBエントリからの前記取得された第1のマスクを前記取得された第1のページフレーム番号に適用するための手段と、
第2の値を生成するために前記第1のTLBエントリからの同一の前記取得された第1のマスクを前記取得された物理アドレス入力に適用するための手段と、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較するための手段とを備えるマルチコア異種コンピューティングデバイス。
【請求項９】
前記第1の値および前記第2の値が一致しないと判定したことに応答して前記TLB内の他のTLBエントリから第2のマスクおよび第2のページフレーム番号を反復的に取得するための手段と、
前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用するための手段と、
前記第2の値を生成するために前記取得された第2のマスクを前記取得された物理アドレス入力に反復的に適用するための手段とをさらに備え、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較するための手段は、前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を反復的に比較するための手段を備える、請求項8に記載のマルチコア異種コンピューティングデバイス。
【請求項１０】
前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用するための手段は、システムページテーブル内のエントリから得たページフレーム番号を複製せずに再使用するための手段を備える、請求項9に記載のマルチコア異種コンピューティングデバイス。
【請求項１１】
前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリをフラッシングするための手段をさらに備える、請求項8に記載のマルチコア異種コンピューティングデバイス。
【請求項１２】
TLBアクションおよび前記物理アドレスを示すメッセージを第2のプロセッサに送信するための手段をさらに備え、前記TLBアクションはTLBフラッシュ演算を含む、請求項8に記載のマルチコア異種コンピューティングデバイス。
【請求項１３】
前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリのインデックスを返すための手段をさらに備える、請求項8に記載のマルチコア異種コンピューティングデバイス。
【請求項１４】
第1のプロセッサによって前記物理アドレス入力を取得するための手段は、TLBアクションと前記物理アドレスとを含むメッセージを第2のプロセッサから受信するための手段を備え、
前記マルチコア異種コンピューティングデバイスは、
前記第2のプロセッサによって送信された前記メッセージを受信したことに応答してアクティブフラグをクリアするための手段と、
前記第1のTLBエントリの前記返されたインデックスを使用して前記受信されたメッセージ内に示された前記TLBアクションを実行するための手段と、
前記TLBアクションを実行したことに応答して前記アクティブフラグをセットするための手段とをさらに備える、請求項13に記載のマルチコア異種コンピューティングデバイス。
【請求項１５】
マルチコア異種コンピューティングデバイスであって、
第1のプロセッサと、
第2のプロセッサと、
共有メモリであって、前記第1のプロセッサは、動作を実行するためのプロセッサ実行可能命令を有するように構成され、前記動作は、
前記第1のプロセッサによって物理アドレス入力を取得することであって、前記物理アドレス入力は、共有メモリに対応する物理アドレスのみを示すことと、
前記第1のプロセッサに関連するTLB内の第1のTLBエントリから第1のマスクを取得することであって、前記取得された第1のマスクは前記第1のTLBエントリの第1の仮想アドレスに関連するビットパターンであることと、
前記第1のTLBエントリから前記共有メモリに関連する第1のページフレーム番号を取得することと、
第1の値を生成するために前記第1のTLBエントリからの前記取得された第1のマスクを前記取得された第1のページフレーム番号に適用することと、
第2の値を生成するために前記第1のTLBエントリからの同一の前記取得された第1のマスクを前記取得された物理アドレス入力に適用することと、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較することとを含むマルチコア異種コンピューティングデバイス。
【請求項１６】
前記第1のプロセッサは、動作を実行するためのプロセッサ実行可能命令を有するように構成され、前記動作は、
前記第1の値および前記第2の値が一致しないと判定したことに応答して前記TLB内の他のTLBエントリから第2のマスクおよび第2のページフレーム番号を反復的に取得することと、
前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用することと、
前記第2の値を生成するために前記取得された第2のマスクを前記取得された物理アドレス入力に反復的に適用することとをさらに含み、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較することは、前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を反復的に比較することを含む、請求項15に記載のマルチコア異種コンピューティングデバイス。
【請求項１７】
前記第1のプロセッサは、前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用することが、システムページテーブル内のエントリから得たページフレーム番号を複製せずに再使用することを含むように動作を実行するためのプロセッサ実行可能命令を有するように構成される、請求項16に記載のマルチコア異種コンピューティングデバイス。
【請求項１８】
前記第1のプロセッサは、前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリをフラッシングすることをさらに含む動作を実行するためのプロセッサ実行可能命令を有するように構成される、請求項15に記載のマルチコア異種コンピューティングデバイス。
【請求項１９】
前記第1のプロセッサは、TLBアクションおよび前記物理アドレスを示すメッセージを第2のプロセッサに送信することをさらに含む動作を実行するためのプロセッサ実行可能命令を有するように構成され、前記TLBアクションはTLBフラッシュ演算を含む、請求項15に記載のマルチコア異種コンピューティングデバイス。
【請求項２０】
前記第1のプロセッサは、前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリのインデックスを返すことをさらに含む動作を実行するためのプロセッサ実行可能命令を有するように構成される、請求項15に記載のマルチコア異種コンピューティングデバイス。
【請求項２１】
前記第1のプロセッサは、前記第1のプロセッサによって前記物理アドレス入力を取得することが、TLBアクションと前記物理アドレスとを含むメッセージを前記第2のプロセッサから受信することを含むように動作を実行するためのプロセッサ実行可能命令を有するように構成され、
前記第1のプロセッサは、動作を実行するためのプロセッサ実行可能命令を有するように構成され、前記動作は、
前記第2のプロセッサによって送信された前記メッセージを受信したことに応答してアクティブフラグをクリアすることと、
前記第1のTLBエントリの前記返されたインデックスを使用して前記受信されたメッセージ内に示された前記TLBアクションを実行することと、
前記TLBアクションを実行したことに応答して前記アクティブフラグをセットすることとをさらに含む、請求項20に記載のマルチコア異種コンピューティングデバイス。
【請求項２２】
プロセッサ実行可能ソフトウェア命令を記憶した非一時的プロセッサ可読記憶媒体であって、前記プロセッサ実行可能ソフトウェア命令は、第1のプロセッサに、
前記第1のプロセッサによって物理アドレス入力を取得することであって、前記物理アドレス入力は、共有メモリに対応する物理アドレスのみを示すことと、
前記第1のプロセッサに関連するTLB内の第1のTLBエントリから第1のマスクを取得することであって、前記取得された第1のマスクは前記第1のTLBエントリの第1の仮想アドレスに関連するビットパターンであることと、
前記第1のTLBエントリから前記共有メモリに関連する第1のページフレーム番号を取得することと、
第1の値を生成するために前記第1のTLBエントリからの前記取得された第1のマスクを前記取得された第1のページフレーム番号に適用することと、
第2の値を生成するために前記第1のTLBエントリからの同一の前記取得された第1のマスクを前記取得された物理アドレス入力に適用することと、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較することとを含む動作を実行させるように構成される非一時的プロセッサ可読記憶媒体。
【請求項２３】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記第1のプロセッサに、
前記第1の値および前記第2の値が一致しないと判定したことに応答して前記TLB内の他のTLBエントリから第2のマスクおよび第2のページフレーム番号を反復的に取得することと、
前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用することと、
前記第2の値を生成するために前記取得された第2のマスクを前記取得された物理アドレス入力に反復的に適用することとをさらに含む動作を実行させるように構成され、
前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を比較することは、前記第1の値および前記第2の値が一致するかどうかを判定するために前記第1の値と前記第2の値を反復的に比較することを含む、請求項22に記載の非一時的プロセッサ可読記憶媒体。
【請求項２４】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記第1のプロセッサに、前記第1の値を生成するために前記取得された第2のマスクを前記取得された第2のページフレーム番号に反復的に適用することが、システムページテーブル内のエントリから得たページフレーム番号を複製せずに再使用することを含むように動作を実行させるように構成される、請求項23に記載の非一時的プロセッサ可読記憶媒体。
【請求項２５】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記第1のプロセッサに、前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリをフラッシングすることをさらに含む動作を実行させるように構成される、請求項22に記載の非一時的プロセッサ可読記憶媒体。
【請求項２６】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、第1のプロセッサに、TLBアクションおよび前記物理アドレスを示すメッセージを第2のプロセッサに送信することをさらに含む動作を実行させるように構成され、前記TLBアクションはTLBフラッシュ演算を含む、請求項22に記載の非一時的プロセッサ可読記憶媒体。
【請求項２７】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記第1のプロセッサに、前記第1の値および前記第2の値が一致すると判定したことに応答して前記第1のTLBエントリのインデックスを返すことをさらに含む動作を実行させるように構成される、請求項22に記載の非一時的プロセッサ可読記憶媒体。
【請求項２８】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記第1のプロセッサに、前記第1のプロセッサによって前記物理アドレス入力を取得することが、TLBアクションと前記物理アドレスとを含むメッセージを第2のプロセッサから受信することを含むように動作を実行させるように構成され、
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記第1のプロセッサに、
前記第2のプロセッサによって送信された前記メッセージを受信したことに応答してアクティブフラグをクリアすることと、
前記第1のTLBエントリの前記返されたインデックスを使用して前記受信されたメッセージ内に示された前記TLBアクションを実行することと、
前記TLBアクションを実行したことに応答して前記アクティブフラグをセットすることとをさらに含む動作を実行させるように構成される、請求項27に記載の非一時的プロセッサ可読記憶媒体。
【国際調査報告】
2016535883.tif 000009
2016535883.tif 000010
2016535883.tif 000011