(57)【要約】記載された実施形態は、２つ以上のメモリ素子と、コントローラと、を備える入出力メモリ管理ユニット（ＩＯＭＭＵ）を含む。コントローラは、１つ以上の要因に基づいて、ＩＯＭＭＵ内で仮想アドレスから物理アドレスへの変換を実行するために、２つ以上のメモリ素子から１つ以上の選択されたメモリ素子を選択するように構成されている。次に、コントローラは、１つ以上の選択されたメモリ素子を使用して、仮想アドレスから物理アドレスへの変換を実行する。【選択図】図３
2019521409.tif 000002
【特許請求の範囲】
【請求項１】
入出力メモリ管理ユニット（ＩＯＭＭＵ）であって、
２つ以上のメモリ素子と、
コントローラと、を備え、
前記コントローラは、
１つ以上の要因に基づいて、前記ＩＯＭＭＵ内で仮想アドレスから物理アドレスへの変換を実行するために、前記２つ以上のメモリ素子から１つ以上の選択されたメモリ素子を選択し、
前記１つ以上の選択されたメモリ素子を使用して、前記仮想アドレスから物理アドレスへの変換を実行する、
ように構成されている、
ＩＯＭＭＵ。
【請求項２】
前記ＩＯＭＭＵに接続された１つ以上の周辺機器は周辺メモリ素子を含み、周辺メモリ素子の各々は、仮想アドレスから物理アドレスへの変換情報を記憶するために対応する周辺機器によって使用され、前記仮想アドレスから物理アドレスへの変換情報は、仮想アドレスから物理アドレスへの変換をローカルに実行するために前記対応する周辺機器によって使用され、
前記１つ以上の要因は、前記１つ以上の周辺機器内の前記周辺メモリ素子のタイプを含み、
前記１つ以上の選択されたメモリ素子を選択することは、前記１つ以上の周辺機器内の前記周辺メモリ素子のタイプに基づいて、前記ＩＯＭＭＵ内で仮想アドレスから物理アドレスへの変換を実行するために使用される、少なくとも１つのタイプの選択されたメモリ素子を選択することを含む、
請求項１のＩＯＭＭＵ。
【請求項３】
前記１つ以上の要因は、仮想アドレスから物理アドレスへの変換情報の複製量を含み、
前記１つ以上の選択されたメモリ素子を選択することは、前記複製量に基づいて、前記ＩＯＭＭＵ内で仮想アドレスから物理アドレスへの変換を実行するために使用される、少なくとも１つのタイプの選択されたメモリ素子を選択することを含む、
請求項１のＩＯＭＭＵ。
【請求項４】
前記１つ以上の要因は、前記２つ以上のメモリ素子の一部又は全ての摩耗量を含み、
前記１つ以上の選択されたメモリ素子を選択することは、前記摩耗量に基づいて、前記ＩＯＭＭＵ内で仮想アドレスから物理アドレスへの変換を実行するために使用される、少なくとも１つのタイプの選択されたメモリ素子を選択することを含む、
請求項１のＩＯＭＭＵ。
【請求項５】
前記１つ以上の選択されたメモリ素子を使用することは、
前記１つ以上の選択されたメモリ素子のうち少なくとも１つに対して、前記ＩＯＭＭＵのトランスレーションルックアサイドバッファの仮想アドレスから物理アドレスへの変換情報を記憶することを含む、
請求項１のＩＯＭＭＵ。
【請求項６】
前記１つ以上の選択されたメモリ素子を使用することは、
前記１つ以上の選択されたメモリ素子のうち少なくとも１つに対して、ページテーブル情報の１つ以上のブロックのコピーを記憶することであって、ページテーブル情報の各ブロックは、仮想アドレスから物理アドレスへの変換情報を含む複数の対応するページテーブルエントリを含む、ことを含む、
請求項１のＩＯＭＭＵ。
【請求項７】
前記１つ以上の選択されたメモリ素子を使用することは、
前記１つ以上の選択されたメモリ素子のうち低電力状態にあるメモリ素子を、前記低電力状態から電源投入状態に移行させることを含む、
請求項１のＩＯＭＭＵ。
【請求項８】
前記ＩＯＭＭＵの電源が遮断されている間、前記ＩＯＭＭＵ内で仮想アドレスから物理アドレスへの変換を実行するのに使用される情報を記憶するように構成された不揮発性メモリ素子をさらに備え、
前記コントローラは、前記ＩＯＭＭＵの電源が投入された後に、
前記情報を前記不揮発性メモリ素子から取得し、
前記情報に基づいて、前記１つ以上の選択されたメモリ素子の一部又は全てを更新する、
ように構成されている、
請求項１のＩＯＭＭＵ。
【請求項９】
前記コントローラは、前記１つ以上の選択されたメモリ素子の一部又は全てを更新する前に、
前記ＩＯＭＭＵの動作環境に少なくとも部分的に基づいて、前記情報の有効性を検証する、
ように構成されている、
請求項８のＩＯＭＭＵ。
【請求項１０】
前記２つ以上のメモリ素子のうち少なくとも１つは、不揮発性タイプのメモリである、
請求項１のＩＯＭＭＵ。
【請求項１１】
２つ以上のメモリ素子を含む入出力メモリ管理ユニット（ＩＯＭＭＵ）を動作させる方法であって、
１つ以上の要因に基づいて、前記ＩＯＭＭＵ内で仮想アドレスから物理アドレスへの変換を実行するために、前記２つ以上のメモリ素子から１つ以上の選択されたメモリ素子を選択することと、
前記１つ以上の選択されたメモリ素子を使用して、前記仮想アドレスから物理アドレスへの変換を実行することと、を含む、
方法。
【請求項１２】
前記ＩＯＭＭＵに接続された１つ以上の周辺機器は周辺メモリ素子を含み、周辺メモリ素子の各々は、仮想アドレスから物理アドレスへの変換情報を記憶するために対応する周辺機器によって使用され、前記仮想アドレスから物理アドレスへの変換情報は、仮想アドレスから物理アドレスへの変換をローカルに実行するために前記対応する周辺機器によって使用され、
前記１つ以上の要因は、前記１つ以上の周辺機器内の前記周辺メモリ素子のタイプを含み、
前記１つ以上の選択されたメモリ素子を選択することは、前記１つ以上の周辺機器内の前記周辺メモリ素子のタイプに基づいて、前記ＩＯＭＭＵ内で仮想アドレスから物理アドレスへの変換を実行するために使用される、少なくとも１つのタイプの選択されたメモリを選択することを含む、
請求項１１の方法。
【請求項１３】
前記１つ以上の要因は、仮想アドレスから物理アドレスへの変換情報の複製量を含み、
前記１つ以上の選択されたメモリ素子を選択することは、前記複製量に基づいて、前記ＩＯＭＭＵ内で仮想アドレスから物理アドレスへの変換を実行するために使用される、少なくとも１つのタイプの選択されたメモリ素子を選択することを含む、
請求項１１の方法。
【請求項１４】
前記１つ以上の要因は、前記２つ以上のメモリ素子の一部又は全ての摩耗量を含み、
前記１つ以上の選択されたメモリ素子を選択することは、前記摩耗量に基づいて、前記ＩＯＭＭＵ内で仮想アドレスから物理アドレスへの変換を実行するために使用される、少なくとも１つのタイプの選択されたメモリ素子を選択することを含む、
請求項１１の方法。
【請求項１５】
前記１つ以上の選択されたメモリ素子を使用することは、
前記１つ以上の選択されたメモリ素子のうち少なくとも１つに対して、前記ＩＯＭＭＵのトランスレーションルックアサイドバッファの仮想アドレスから物理アドレスへの変換情報を記憶することを含む、
請求項１１の方法。
【請求項１６】
前記１つ以上の選択されたメモリ素子を使用することは、
前記１つ以上の選択されたメモリ素子のうち少なくとも１つに対して、ページテーブル情報の１つ以上のブロックを記憶することであって、ページテーブル情報の各ブロックは、仮想アドレスから物理アドレスへの変換情報を含む複数の対応するページテーブルエントリを含む、ことを含む、
請求項１１の方法。
【請求項１７】
前記１つ以上の選択されたメモリ素子を使用することは、
前記１つ以上の選択されたメモリ素子のうち低電力状態にあるメモリ素子を、前記低電力状態から電源投入状態に移行させることを含む、
請求項１１の方法。
【請求項１８】
仮想アドレスから物理アドレスへの変換を実行するのに使用される情報を前記ＩＯＭＭＵ内の不揮発性メモリ素子に記憶することと、
前記ＩＯＭＭＵの電源を遮断することと、
前記ＩＯＭＭＵへの電源を復帰することと、
前記ＩＯＭＭＵへの電源を復帰した後に、前記情報を前記不揮発性メモリ素子から取得し、前記情報に基づいて、前記ＩＯＭＭＵにおいて前記１つ以上の選択されたメモリ素子の一部又は全てを更新することと、を含む、
請求項１１の方法。
【請求項１９】
前記１つ以上の選択されたメモリ素子の一部又は全てを更新する前に、
前記ＩＯＭＭＵの動作環境に少なくとも部分的に基づいて、前記情報の有効性を検証することを含む、
請求項１８の方法。
【請求項２０】
前記２つ以上のメモリ素子のうち少なくとも１つは、不揮発性タイプのメモリである、
請求項１１の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
記載される実施形態は、コンピューティングデバイスに関する。より具体的には、記述される実施形態は、仮想アドレスから物理アドレスへの変換を実行するためのコンピューティングデバイスの入出力メモリ管理ユニット（ＩＯＭＭＵ）において複数のメモリ素子を使用することに関する。
【背景技術】
【０００２】
多くのコンピューティングデバイスは、グラフィックス処理ユニット（ＧＰＵ）、デジタル信号プロセッサ（ＤＳＰ）等の周辺機器を含む。いくつかのコンピューティングデバイスにおいて、周辺機器の一部又は全てには、コンピューティングデバイス内のメモリ（例えば、コンピューティングデバイス内のメインメモリ）へのアクセスが提供される。これらのコンピューティングデバイスのいくつかでは、周辺機器は、メモリにアクセスするための「仮想メモリ」技術を使用する。仮想メモリ技術では、周辺機器（又は周辺機器によって実行される作業負荷）は、データが共有メモリに配置されている物理位置の「物理アドレス」を使用してメモリをアドレス指定する代わりに、周辺機器に固有のアドレス空間である「仮想アドレス空間」の「仮想アドレス」を使用して、メモリをアドレス指定する。仮想アドレス空間は、対応する周辺機器へ固有であるアドレス空間である。周辺機器によって使用される仮想アドレスは、物理アドレスに直接マッピングされない場合があり、対応するデータを実際に記憶する共有メモリ内の位置を示すことができない。したがって、コンピューティングデバイスは、周辺機器についての物理アドレス変換に対して仮想アドレスを提供するように構成された入出力メモリ管理ユニット（ＩＯＭＭＵ）等の機構を含む。ＩＯＭＭＵは、仮想アドレスを含む周辺機器からの要求を受信すると、仮想アドレスを対応する物理アドレスに変換する。次に、ＩＯＭＭＵは、物理アドレスを、要求元の周辺機器に提供し、物理アドレスを使用してメモリアクセスを実行することができる。
【０００３】
上述した仮想アドレスから物理アドレスへの変換を有効にするために、コンピューティングデバイスは、「ページテーブル」を含む。ページテーブルは、メモリに記憶されたページ（例えば、４ＫＢのデータブロック）についての仮想アドレスから物理アドレスへの変換情報を含む、エントリ又は「ページテーブルエントリ」を含むコンピューティングデバイスのメモリに記憶されたレコードである。ＩＯＭＭＵは、所定の仮想アドレスを変換する要求を周辺機器から受信すると、仮想アドレスに関連する物理アドレスを提供するページテーブルエントリについて、ページテーブルが検索される間、可能であればエントリ毎に「ページテーブルウォーク」を実行することによって、対応する物理アドレス情報をページテーブルから取得する。
【０００４】
ページテーブルウォークは比較的遅いため、ページテーブルウォークの実行を避けることが望ましい。したがって、ＩＯＭＭＵは、ページテーブルウォーク中に取得されたページテーブルエントリの限られた数のコピーを記憶するために使用されるローカルキャッシュであるトランスレーションルックアサイドバッファ（ＴＬＢ）を含む。ＩＯＭＭＵは、最初に、仮想アドレスから物理アドレスへの変換を実行するために、キャッシュされたページテーブルエントリ情報を対応するＴＬＢから取得しようと試みる。ページテーブルエントリ情報が、対応するＴＬＢに存在しない場合（すなわち、「ＴＬＢミス」が発生した場合）、ＩＯＭＭＵは、上述したページテーブルウォークを実行し、次いで、取得したページテーブルエントリからの情報のコピーをＴＬＢにキャッシュすることができる。
【０００５】
異なるコンピューティングデバイスでは周辺機器の構成が異なるので、ＴＬＢ設計にワンサイズフィッツオール（one-size-fits-all）のアプローチを使用すると、ＩＯＭＭＵのパフォーマンスが最適にならなくなる場合がある。例えば、ＩＯＭＭＵ内のＴＬＢは、周辺機器の複数の可能な構成のうち少なくともいくつかの構成に最適ではないタイプのメモリ（例えば、同期ダイナミックランダムアクセスメモリ（ＳＲＡＭ））を使用して実装される場合がある。
【図面の簡単な説明】
【０００６】
【図１】いくつかの実施形態による、コンピューティングデバイスを示すブロック図である。
【図２】いくつかの実施形態による、入出力メモリ管理ユニット（ＩＯＭＭＵ）を示すブロック図である。
【図３】いくつかの実施形態による、ＩＯＭＭＵ内で仮想アドレスから物理アドレスへの変換を実行するために使用されるメモリ素子を選択するプロセスを示すフローチャートである。
【図４】いくつかの実施形態による、ＩＯＭＭＵ内のメモリ素子内の仮想アドレスから物理アドレスへの変換情報を更新するために状態保持メモリ素子を使用するプロセスを示すフローチャートである。
【発明を実施するための形態】
【０００７】
図面及び説明全体に亘って、同じ参照番号は同じ図面要素を指す。
【０００８】
以下の説明は、記載された実施形態を当業者が生成し使用することを可能にするために提示され、特定の用途及びその要件の文脈に提供される。記載された実施形態に対する様々な変更は、当業者には容易に明らかであり、本明細書で定義される一般的な原理は、他の実施形態に適用されてもよい。したがって、記載された実施形態は、示された実施形態に限定されず、本明細書に開示された原理及び特徴と一致する最も広い範囲が与えられるべきである。
【０００９】
（仮想メモリ）
記載された実施形態は、コンピューティングデバイスで実行されるソフトウェアプログラム及びコンピューティングデバイスの周辺機器がデータアクセスを処理するために、「仮想メモリ」技術を使用する。記載された実施形態において、プログラム又は周辺機器がデータにアクセスする場合、データを含む所定サイズ（例えば、４ＫＢ、６４ＫＢ等）のメモリブロックは、メモリの「ページ」と呼ばれ、大容量ストレージデバイスからコンピューティングデバイス内のメモリ内の利用可能な物理位置にコピーされ、又は、メモリ内の物理位置に新たに生成される。記載された実施形態では、プログラム又は周辺機器がメモリ内のページの物理位置の追跡を続けるように要求されるのを避けるために、対応するメモリ管理ユニット（又は、プロセッサ等の他のエンティティ）は、プログラム及び周辺機器用のページの物理位置を追跡する。例えば、プロセッサ内のメモリ管理ユニット（ＭＭＵ）は、プロセッサによって実行されるプログラムのページの物理位置を追跡することができる。別の例として、入出力メモリ管理ユニット（ＩＯＭＭＵ）は、周辺機器のページの物理位置を追跡することができる。これらの実施形態において、プログラム及び周辺機器（又は、周辺機器によって実行される作業負荷）は、ページの物理位置に基づくアドレス（又は「物理アドレス」）を使用してメモリをアドレス指定する代わりに、対応するプログラム又は周辺機器に固有のアドレス空間である「仮想アドレス空間」の「仮想アドレス」を使用して、メモリをアドレス指定する。プログラム又は周辺機器の観点から、仮想アドレスは、データが記憶されるメモリのページ内の位置を示しており、これに応じて、仮想アドレスを使用してメモリアクセスが行われる。しかしながら、仮想アドレスは、データが記憶されるメモリのページ内の物理位置の物理アドレスに直接マッピングされない場合がある。メモリ管理ユニットは、ページの物理位置を管理する一環として、メモリアクセス要求においてプログラム及び周辺機器によって使用される仮想アドレスを、データが実際に位置する物理アドレスに変換する。メモリ管理ユニットは、変換された物理アドレスをプログラム（若しくは、オペレーティングシステム等）又は周辺機器に提供し、この物理アドレスを使用してメモリアクセスを実行する。
【００１０】
上述した仮想アドレスから物理アドレスへの変換を可能にするために、記載された実施形態は、「ページテーブル」を含む。ページテーブルは、メモリに記憶されたページについての仮想アドレスから物理アドレスへの変換情報を含む、エントリ又は「ページテーブルエントリ」を含むコンピューティングデバイスのメモリに記憶されたレコードである。仮想アドレスでメモリにアクセスするためのプログラム又は周辺機器からの要求を受信すると、対応するメモリ管理ユニット（又は、プロセッサ等の他のエンティティ）は、仮想アドレスに関連する物理アドレスを提供するページテーブルエントリについて、ページテーブルが検索される間、可能であればエントリ毎に「ページテーブルウォーク」を実行することによって、対応する物理アドレス情報をページテーブルから取得する。
【００１１】
ページテーブルウォークは比較的遅いため、ページテーブルウォークの実行を避けることが望ましい。したがって、記載された実施形態は、ページテーブルウォーク中に取得されたページテーブルエントリに基づく限られた数の情報のコピーを記憶するために使用されるプロセッサ及びＩＯＭＭＵ（及び、可能であれば周辺機器）内のローカルキャッシュ、又は、これらに関連するローカルキャッシュであるトランスレーションルックアサイドバッファ（ＴＬＢ）を含む。メモリ管理ユニットは、仮想アドレスから物理アドレスへの変換を実行する場合に、キャッシュされたページテーブルエントリ情報を対応するＴＬＢから取得しようと試みる際に、対応するＴＬＢにおいてルックアップを最初に実行する。ページテーブルエントリ情報が対応するＴＬＢ内に存在しない場合（すなわち、「ミス」が発生した場合）、メモリ管理ユニットは、上述したページテーブルウォークを実行して所望のページテーブルエントリを取得し、取得したページテーブルエントリからの情報のコピーを対応するＴＬＢにキャッシュすることができる。
【００１２】
（概要）
記載された実施形態において、コンピューティングデバイスは、入出力メモリ管理ユニット（ＩＯＭＭＵ）と、１つ以上の周辺機器と、を含む。概して、ＩＯＭＭＵは、仮想アドレスから物理アドレスへの変換を含む、コンピューティングデバイス内のメモリへの周辺機器によるアクセスを処理する。記載された実施形態において、ＩＯＭＭＵは、仮想アドレスから物理アドレスへの変換を実行するために使用可能な２つ以上のメモリ素子を含む。例えば、ＩＯＭＭＵは、第１タイプのメモリ回路（例えば、スタティックランダムアクセスメモリ（ＳＲＡＭ）等）を含む第１メモリ素子と、第２タイプのメモリ回路（例えば、相変化メモリ（ＰＣＭ）等）を含む第２メモリ素子等と、を含み、これらの各々は、本明細書で説明する仮想アドレスから物理アドレスへの変換を実行するために使用することができる。
【００１３】
記載された実施形態において、ＩＯＭＭＵ内の２つ以上のメモリ素子は、ＩＯＭＭＵ内のトランスレーションルックアサイドバッファ（ＴＬＢ）についての仮想アドレスから物理アドレスへの変換情報（例えば、仮想アドレスから物理アドレスへの変換のレコード、関連するメタデータ等）を記憶するために使用することができる。記載された実施形態において、ＩＯＭＭＵ内のコントローラは、１つ以上の要因に基づいて、１つ以上のメモリ素子を、ＴＬＢの仮想アドレスから物理アドレスへの変換情報を記憶するために使用することを決定する。例えば、１つ以上の要因は、ＩＯＭＭＵ、周辺機器等における仮想アドレスから物理アドレスへの変換のパフォーマンスに関連していてもよいし、これに依存していてもよいし、そうでなければ関係していてもよい。次に、コントローラは、ＴＬＢの仮想アドレスから物理アドレスへの変換情報を記憶するために、１つ以上のメモリ素子を使用する。記載された実施形態において、特定のメモリ素子が、ＴＬＢの仮想アドレスから物理アドレスへの変換情報を記憶するのに使用されないことを決定すると、コントローラは、当該特定のメモリ素子を無効（例えば、この素子をパワーダウン（電源オフ）する）にしてもよいし、当該特定のメモリ素子を他の用途に使用してもよい。
【００１４】
いくつかの実施形態において、２つ以上のメモリ素子のうちいくつか又は全てを、ページテーブル情報のブロックを記憶するために使用することができる。これらの実施形態において、ページテーブルのブロック（例えば、マルチエントリセクション、領域等）を、コンピューティングデバイスのメモリの位置からメモリ素子に移動させることができる。これらの実施形態のいくつかにおいて、ＩＯＭＭＵ内のＴＬＢの仮想アドレスから物理アドレスへの変換を記憶するために使用されていないメモリ素子（又は、この一部）を、ページテーブル情報のブロックを記憶するために使用することができる。
【００１５】
いくつかの実施形態において、ＩＯＭＭＵは、ＩＯＭＭＵをパワーダウン（電源オフ）するときに仮想アドレスから物理アドレスへの変換を実行するための情報を記憶する（すなわち、保持する）のに使用される不揮発性メモリ素子を含む。これらの実施形態において、ＩＯＭＭＵをパワーオン（電源オン）した後に、不揮発性メモリ素子からの情報を使用して、ＩＯＭＭＵ内のＴＬＢの仮想アドレスから物理アドレスへの変換情報のうちいくつか若しくは全て、及び／又は、ＩＯＭＭＵ内のページテーブル情報のブロックを更新することができる。
【００１６】
上述したように、ＩＯＭＭＵ内の２つ以上のメモリ素子を使用して仮想アドレスから物理アドレスへの変換を実行することによって、記載された実施形態は、ＩＯＭＭＵ内の特定のタイプのメモリ素子、コンピューティングデバイス内の周辺機器等に適した方法で、ＩＯＭＭＵ内のメモリ素子の使用を可能にする。これにより、メモリ素子のより効率的な、バランスの取れた、及び／又は、最適化された使用が可能になることから、ＩＯＭＭＵ、周辺機器及びコンピューティングデバイスの全体的な動作を改善させることができる。
【００１７】
（コンピューティングデバイス）
図１は、いくつかの実施形態による、コンピューティングデバイス１００を示すブロック図である。図１に示すように、コンピューティングデバイス１００は、プロセッサ１０２と、メモリ１０４と、入出力（ＩＯ）ハブ１０６と、周辺機器１０８〜１１０と、を含む。プロセッサ１０２は、コンピューティングデバイス１００において計算動作を実行する機能ブロックである。いくつかの実施形態において、プロセッサ１０２は、１つ以上の中央処理装置（ＣＰＵ）コア、及び／又は、他の処理機能ブロックを含む。
【００１８】
メモリ１０４は、データ及び命令を、コンピューティングデバイス１００内の他の機能ブロックに記憶し、提供するための動作を実行する機能ブロックである。メモリ１０４は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、ダブルデータレート同期ＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、並びに／又は、他の機能ブロックの命令及びデータを記憶するために使用される他のタイプの揮発性及び／若しくは不揮発性メモリ回路のうち１つ以上と、メモリ回路に記憶された命令及びデータへのアクセスを処理するための制御回路と、を備える。いくつかの実施形態において、メモリ１０４は、コンピューティングデバイス１００内の「メインメモリ」である。
【００１９】
図１に示すように、プロセッサ１０２は、メモリ管理ユニット１１２を含む。メモリ管理ユニット１１２は、仮想アドレスから物理アドレスへの変換、メモリアクセス許可チェック等を行う等によって、プロセッサ１０２とメモリ１０４との間の相互作用を処理する機能ブロックである。
【００２０】
ＩＯハブ１０６は、周辺機器１０８〜１１０等の周辺機器と、コンピューティングデバイス１００内の他の機能ブロック（例えば、プロセッサ１０２、メモリ１０４等）との間の相互作用を処理する機能ブロックである。例えば、ＩＯハブ１０６は、周辺機器１０８〜１１０からの通信（入力、イベント、割り込み、データ等）を受信し、コンピューティングデバイス１００内の他の機能ブロックに通信を転送することができる。別の例として、ＩＯハブ１０６は、プロセッサ１０２、メモリ１０４、及び／又は、コンピューティングデバイス１００内の他の機能ブロックから通信（コマンド、出力、イベント、割り込み、データ等）を受信し、対応する周辺機器に通信を転送することができる。
【００２１】
図１に示すように、ＩＯハブ１０６は、ＩＯＭＭＵ１１４を含む。ＩＯＭＭＵ１１４は、周辺機器１０８〜１１０とメモリ１０４との間の相互作用を処理する機能ブロックである。例えば、ＩＯＭＭＵ１１４は、仮想アドレスから物理アドレスへの変換、周辺機器１０８〜１１０からのメモリ１０４に対するメモリアクセス保護、周辺機器のイベント及び割り込み処理等を実行することができる。記載された実施形態において、ＩＯＭＭＵ１１４は、以下により詳細に説明するように、仮想アドレスから物理アドレスへの変換を実行するために使用されるメモリ素子を選択する。
【００２２】
周辺機器１０８〜１１０は、コンピューティングデバイス１００内の他の機能ブロックと相互作用する実際／現実のデバイス又は仮想デバイスを含む。例えば、いくつかの実施形態において、周辺機器１０８〜１１０は、グラフィックス処理ユニット（ＧＰＵ）、組み込みプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、デジタル信号プロセッサ（ＤＳＰ）、ネットワークプロセッサ、ディスクドライブ、拡張カード（例えば、ビデオカード、サウンドカード、ネットワークインタフェースコントローラ等）、マウス／キーボード、マイクロホン、メディアプレイヤ、コントローラ、及び／又は、他の周辺機器のうち１つ以上を含む。いくつかの実施形態において、周辺機器１０８〜１１０は、ローピンカウント（ＬＰＣ）インタフェース、ＵＳＢ（商標）（universal serial bus）インタフェース、ＢｅａｖｅｒｔｏｎのＰＣＩ−ＳＩＧによるＰＣＩｅ(商標)（Peripheral Component Interconnect Express）バス、及び／又は、他の拡張バス等のうち１つ以上の対応するＩＯインタフェースを介してＩＯハブに接続されている。いくつかの実施形態において、一部又は全ての周辺機器は、オフロード機能を有しており、これにより、プロセッサ１０２及び／又はコンピューティングデバイス１００内の他の機能ブロックから計算作業をオフロードすることができる。
【００２３】
いくつかの実施形態において、周辺機器１０８〜１１０の１つ以上は、仮想アドレスから物理アドレスへの変換を実行するために使用されるメモリ素子を含む。例えば、周辺機器１０８〜１１０は、周辺機器内のＴＬＢの仮想アドレスから物理アドレスへの変換情報（仮想アドレスから物理アドレスへの変換、メタデータ等）を保持するために使用されるメモリ素子を含むことができる。これらの実施形態において、周辺機器１０８〜１１０は、かかる変換情報が周辺機器内のＴＬＢに存在する場合に、変換要求をＩＯＭＭＵ１１４に通信する代わりに、周辺機器内のＴＬＢにおいてルックアップを実行して、仮想アドレスを物理アドレスに変換することができる。
【００２４】
いくつかの実施形態において、コンピューティングデバイス１００内の様々な素子（プロセッサ１０２、メモリ１０４等）の間は、矢印線で示すように、通信パス（バス、ワイヤ、ガイド、及び／又は、接続のうち１つ以上を含む）で接続されている。通信パスを使用して、コマンド、データ、イベント通知、割り込み、及び／又は、他の情報が各素子間で送信される。いくつかの実施形態において、一部又は全ての通信パスは、通信パス上の通信、プロトコル変換等を処理するための機能ブロックを含む。例えば、いくつかの実施形態において、１つ以上の通信パスは、バス間の通信を変換する（すなわち、ブリッジする）ための異なるプロトコル及び機能ブロックのバスを含む。いくつかの実施形態において、通信パスは、カリフォルニア州サニーベールのＨｙｐｅｒＴｒａｎｓｐｏｒｔ  ＣｏｎｓｏｒｔｉｕｍによるＨｙｐｅｒＴｒａｎｓｐｏｒｔ（商標）バス、クイックパスインターコネクト（ＱＰＩ）バス、及び／又は、他のフロントサイドバスを含む。
【００２５】
コンピューティングデバイス１００は、特定の構成の機能ブロックで説明されているが、いくつかの実施形態は、異なる数及び／又は構成の機能ブロックを含む。例えば、いくつかの実施形態は、図１の複数の素子及び省略記号で示すように、複数のプロセッサ、メモリ、及び／又は、ＩＯハブを含む。別の例として、いくつかの実施形態において、コンピューティングデバイス１００は、いくつかのキャッシュメモリを含む。さらに別の例として、いくつかの実施形態において、コンピューティングデバイス１００は、異なる数の周辺機器（図１内の周辺機器１０８〜１１０間の省略記号によって示される）を含む。概して、記載された実施形態は、本明細書に記載の動作を実行することができる任意の数又は構成の機能ブロックを使用することができる。
【００２６】
特定のコンピューティングデバイス１００が説明のために示されているが、いくつかの実施形態において、コンピューティングデバイス１００は、本明細書に記載の動作及び／若しくは他の動作を実行するための追加の機能ブロック又は他の素子を含む。例えば、コンピューティングデバイス１００は、電源コントローラ、バッテリ、メディアプロセッサ、通信機構（例えば、ノースブリッジ、サウスブリッジ等）、ネットワーキング機構、表示機構等を含むことができる。
【００２７】
コンピューティングデバイス１００は、計算動作を実行する任意の電子デバイスであってもよいし、電子デバイス内に含まれてもよい。例えば、コンピューティングデバイス１００は、デスクトップコンピュータ、ラップトップコンピュータ、ウェアラブルコンピューティングデバイス、タブレットコンピュータ、スマートフォン、サーバ、ネットワークアプライアンス、玩具、オーディオビジュアル機器、家電製品、コントローラ、及び／又は、これらの組み合わせ等の電子デバイスであってもよいし、この電子デバイス内に含まれてもよい。
【００２８】
（入出力メモリ管理ユニット）
図２は、いくつかの実施形態による、ＩＯＭＭＵ１１４を示すブロック図である。図２に示すように、ＩＯＭＭＵ１１４は、コントローラ２００と、メモリ素子２０２〜２０４と、状態保持メモリ素子２０６と、を含む。コントローラ２００は、周辺機器１０８〜１１０とメモリ１０４との間の相互作用を処理するための動作を実行する機能ブロックである。コントローラ２００によって実行される動作は、仮想アドレスから物理アドレスへの変換、周辺機器１０８〜１１０からのメモリ１０４に対するメモリアクセス保護、周辺機器のイベント及び割り込み処理等を有することができる。いくつかの実施形態において、コントローラ２００は、マイクロコントローラ、ＡＳＩＣ、組み込みプロセッサ、ＣＰＵコア、及び／又は、別の機能ブロックを含む。いくつかの実施形態において、コントローラ２００は、本明細書に記載の動作の一部又は全てを実行するためのプログラムコード（例えば、ファームウェア、ソフトウェアルーチン等）を実行する汎用処理回路を含む。いくつかの実施形態において、コントローラ２００は、本明細書に記載の動作の一部又は全てを実行する専用回路（例えば、論理回路、計算回路、ディスクリート回路素子等）を含む。
【００２９】
メモリ素子２０２〜２０４は、ＩＯＭＭＵ１１４内で仮想アドレスから物理アドレスへの変換を実行するために使用されるメモリ回路を含む機能ブロックである。換言すれば、メモリ素子２０２〜２０４は、ＩＯＭＭＵ１１４内のトランスレーションルックアサイドバッファ（ＴＬＢ）及び／又はページテーブル情報のブロック（ここで、ページテーブル情報の「ブロック」は、複数のページテーブルエントリを含む）の仮想アドレスから物理アドレスへの変換情報及びメタデータを記憶するのに使用可能なメモリ回路を含む。メモリ素子２０２〜２０４の各々は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ等）、ＰＣＭ、メモリスタ、磁気抵抗ランダムアクセスメモリ（ＭＲＡＭ）、スピン注入型ＭＲＡＭ（ＳＴＴ  ＭＲＡＭ）、フラッシュメモリ、及び／若しくは、他のタイプのメモリ回路等の揮発性並びに／又は不揮発性メモリ回路を含む。
【００３０】
いくつかの実施形態において、各メモリ素子２０２〜２０４のメモリ回路は、１つ以上の異なる特性を有する。これらの特性には、例えば、速度、容量（利用可能なストレージのバイト数の観点から）、金銭的コスト、耐摩耗性（susceptibility to wear-out）消耗し易さ、エラーに対する平均読み出し／書き込みサイクル、電力消費、回路サイズ（レイアウト面積の観点から）、ハードウェアインタフェース、動作温度、ソフトウェアサポート（例えば、オペレーティングシステム、ドライバ、アプリケーション等のソフトウェアプログラムとの互換性）、通信インタフェース帯域幅、及び／又は、他の特性等が含まれ得る。例えば、いくつかの実施形態において、メモリ素子２０２は、高速であるが高価（金銭的コスト、電力消費、及び／又は、他のコストの観点から）である第１タイプのメモリ（例えば、ＳＲＡＭ）を含み、メモリ素子２０４は、より低速であるが、より安価で、さらにスケーラブルである第２タイプのメモリ（例えば、ＰＣＭ）を含む（例えば、大きな容量、インストール、動作等においてメモリ素子２０２よりも安価に購入することができる）。
【００３１】
上述したように、一方又は両方のメモリ素子２０２〜２０４を、ＩＯＭＭＵ１１４内のＴＬＢの仮想アドレスから物理アドレスへの変換情報を記憶するために使用可能である。例えば、メモリ素子２０２〜２０４は、仮想アドレスから物理アドレスへの変換、仮想アドレスから物理アドレスへの変換に関連するメタデータ、仮想アドレスから物理アドレスへの変換に関する要約情報、及び／又は、ＩＯＭＭＵ１１４内のＴＬＢに記憶され若しくは関連する他の情報を記憶するのに用いられる。仮想アドレスから物理アドレスへの変換は、対応する仮想アドレスがマッピングされるメモリ１０４内の物理位置（例えば、ページ、領域等）を決定するための情報を含む。例えば、仮想アドレスの一部又は全てのビットが与えられると、対応する物理アドレスの一部又は全てのビットをメモリ素子２０２及び／又は２０４から取得することができる。メタデータは、１つ以上の対応する仮想アドレスから物理アドレスへの変換に関連する情報、これらを特徴付ける情報、これらを制御する情報及び／又は他の関連する情報（例えば、有効性情報、エージング、アクセス数及び／若しくはタイプ、アクセス許可（例えば、読み出し、読み出し／書き込み、アクセス権レベル等）、ページサイズインジケータ、ダーティインジケータ（例えば、対応するページのデータがいつ変更されたかを示す）、並びに／又は、他の情報等）を含む。要約情報は、アクセスされたページ又はアドレス、特定のアクセスタイプを有するページ又はアドレスのレコード、指定された特性を有するページ又はアドレス、１つ以上のアドレス及び／又はページにアクセスしている周辺機器の識別等のレコード等のように、ＴＬＢ内の仮想アドレスから物理アドレスへの変換、ＴＬＢのアクセス等に関連する情報、これらを特徴付ける情報、これらを制御する情報、及び／又は、他の関連する情報を含む。
【００３２】
メモリ素子２０２〜２０４のうち何れかのメモリ素子を使用して、ＴＬＢの仮想アドレスから物理アドレスへの変換情報を記憶する場合に、コントローラ２００（及び、より具体的には、ＩＯＭＭＵ１１４）は、メモリ素子に記憶された情報を使用してＴＬＢ動作を実行することができる。例えば、コントローラ２００は、仮想アドレスから物理アドレスへの変換、メタデータ取得、ページ許可チェック、ＴＬＢ更新、要約データ取得等の動作を実行することができる。これらの実施形態において、コントローラ２００は、ＴＬＢの仮想アドレスから物理アドレスへの変換情報をメモリ素子に記憶して、上述したＴＬＢ動作を実行できるようにする。例えば、メモリ素子を、１セットのＴＬＢエントリに論理的に分割することができ、各ＴＬＢエントリは、対応するビット数（例えば、２５６ビット、９６ビット等）を含み、一部のビットが、仮想アドレスから物理アドレスへの変換情報、メタデータ等を記憶するために使用される。
【００３３】
いくつかの実施形態において、ＴＬＢ内の仮想アドレスから物理アドレスへの変換のルックアップに使用可能な２つ以上の階層ルックアップ構造を有する１つ以上のメモリ素子が構成される。例えば、１つ以上のメモリ素子を、可能な場合にフルルックアップを避けるために、ＴＬＢ情報がＴＬＢに存在しないかどうかを判別するために高速初期ルックアップを実行するのに用いられるディレクトリ、ブルームフィルタ等を記憶するために使用することができる。
【００３４】
記述された実施形態において、コントローラ２００は、ＩＯＭＭＵ１１４内のＴＬＢの仮想アドレスから物理アドレスへの変換情報を記憶するために使用されるメモリ素子２０２〜２０４から１つ以上のメモリ素子を選択することができる。より具体的には、コントローラ２００は、１つ以上の要因に基づいて、ＴＬＢの仮想アドレスから物理アドレスへの変換情報を記憶するために１つ以上のメモリ素子を使用することを決定する。概して、この要因には、ＩＯＭＭＵ１１４及び／又は周辺機器１０８〜１１０（及び、より具体的には、コンピューティングデバイス１００の動作）での仮想アドレスから物理アドレスへの変換のパフォーマンスに関連する要因、依存する要因又は他の関連する要因が含まれる（要因の例については後述する）。次に、コントローラ２００は、ＴＬＢの仮想アドレスから物理アドレスへの変換情報を記憶するために、決定された１つ以上のメモリ素子を使用する。例えば、１つ以上のメモリ素子の各々を、ＴＬＢの仮想アドレスから物理アドレスへの変換情報の対応する「部分」を記憶する（例えば、ＴＬＢの仮想アドレスから物理アドレスへの変換情報のセットのうち対応するサブセットを記憶する等）ために使用されてもよい。例えば、１つ以上の選択されたメモリ素子は、仮想アドレスから物理アドレスへの変換情報の所定の割合（例えば、半分等）、特定の周辺機器に関連する仮想アドレスから物理アドレスへの変換情報、特定の仮想アドレス範囲に対する仮想アドレスから物理アドレスへの変換情報等を記憶することができる。
【００３５】
いくつかの実施形態において、コントローラ２００は、仮想アドレスから物理アドレスへの変換情報を記憶するために使用される１つ以上のメモリ素子２０２〜２０４を決定した後に、電源投入し、電力状態間を移行し、及び／又は、他の方法によって、１つ以上のメモリ素子を利用可能にする。例えば、いくつかの実施形態において、メモリ素子は、無効にされており（例えば、パワーダウンや低電力状態等）、例えば、情報をメモリ素子に保持可能なレベルまでメモリ素子の電源電圧を設定することによって、メモリ素子の制御クロックを作動させることによって、メモリ素子のインタフェース機能ブロックを作動させること等によって、フルパワー状態に移行することができる。
【００３６】
いくつかの実施形態において、コントローラ２００は、メモリ素子２０２〜２０４のうち特定のメモリ素子を、ＴＬＢの仮想アドレスから物理アドレスへの変換情報を記憶するために使用しないことを決定すると、特定のメモリ素子を無効にし（例えば、パワーオフや低電力状態等に移行又は維持される）又は他の用途に使用可能にする。
【００３７】
いくつかの実施形態において、メモリ素子２０２〜２０４は、他の情報を記憶するために使用されてもよい。例えば、１つ以上のメモリ素子２０２〜２０４の一部又は領域（例えば、メモリ素子内の所定位置から開始する所定バイト数）は、ＴＬＢの仮想アドレスから物理アドレスへの変換を記憶するために割り当てられ、リザーブ等されてもよい。また、メモリ素子の他の部分又は領域は、他の用途のために割り当てられてもよい。
【００３８】
いくつかの実施形態において、１つ以上のメモリ素子２０２〜２０４を使用して、ページテーブル情報のブロックを記憶することができる。換言すれば、メモリ素子は、対応する仮想アドレスから物理アドレスへの変換情報、メタデータ等を有する複数のページテーブルエントリ（及び、可能であれば多数のページテーブルエントリ）を含むページテーブルの一部、セクション等を記憶することができる。メモリ素子に記憶されたページテーブル情報のブロックは、メモリ１０４に記憶されたページテーブル情報と同様に構成される（例えば、同様に構成された同様の情報を含む）。これらの実施形態において、ページテーブルウォークを、メモリ素子に記憶されたページテーブル情報のブロックを用いて、少なくとも部分的に実行することができる。
【００３９】
いくつかの実施形態において、コンピューティングデバイス１００（すなわち、コントローラ２００又はプロセッサ１０２等のエンティティ）は、ページテーブルアクセスを監視し、ＩＯＭＭＵ１１４及び／若しくは１つ以上の周辺機器がページテーブルの所定のブロックにアクセスしたこと、並びに／又は、アクセスが１つ以上のポリシー（例えば、アクセス数、アクセスする周辺機器の数等）に準拠することを認識することができる。次に、コンピューティングデバイス１００は、ページテーブルの所定のブロックを、メモリ１０４から、ＩＯＭＭＵ１１４内のページテーブルエントリのブロックを記憶するのに使用可能な１つ以上のメモリ素子２０２〜２０４に移動させることができる。換言すれば、ページテーブルのブロックを、メモリ１０４から除去又はコピーして、１つ以上のメモリ素子に記憶することができる。これらの実施形態において、１つ以上のメモリ素子に記憶されたページテーブルのブロックをウォークするコンピューティングデバイス１００内のエンティティは、ページテーブルのブロックをメモリ素子から取得し、上述したようにこれを検索する。
【００４０】
いくつかの実施形態において、メモリ素子２０２〜２０４は、ページテーブル情報のブロックを記憶するために利用可能な場合に、コンピューティングデバイス１００内のメモリ全体の一部として現れることができる。例えば、ＩＯＭＭＵ１１４及びメモリ素子２０２〜２０４は、不均一メモリアクセス（ＮＵＭＡ）システム内のノードとして現れることがある。
【００４１】
状態保持メモリ素子２０６は、ＩＯＭＭＵ１１４がパワーダウンされる場合に（例えば、ＩＯＭＭＵ１１４が低電力モード又はパワーオフの場合に）、仮想アドレスから物理アドレスへの変換を実行するための情報を記憶するのに使用される不揮発性メモリ回路（例えば、フラッシュ等）を含む機能ブロックである。例えば、状態保持メモリ素子２０６は、ＴＬＢからの仮想アドレスから物理アドレスへの変換情報のコピー及び／又はページテーブル情報のブロックを記憶するために使用されてもよい。いくつかの実施形態において、状態保持メモリ素子２０６からの情報は、例えばＩＯＭＭＵ１１４の電源投入中又は電源投入後に取得されてもよいし、ＴＬＢ内の仮想アドレスから物理アドレスへの変換情報及び／又はＩＯＭＭＵ内のページテーブル情報のブロックの一部又は全てを更新するために使用されてもよい。
【００４２】
いくつかの実施形態において、仮想アドレスから物理アドレスへの変換情報は、ＩＯＭＭＵ１１４をパワーダウンするためのシーケンスの一部として状態保持メモリ素子２０６に記憶される。例えば、ＩＯＭＭＵ１１４をパワーダウンする前に、ＴＬＢの仮想アドレスから物理アドレスへの変換情報及び／又はＩＯＭＭＵ内のページテーブル情報のブロックの一部又は全てを、状態保持メモリ素子２０６にコピーすることができる。いくつかの実施形態において、仮想アドレスから物理アドレスへの変換情報がＴＬＢに記憶される場合、及び／又は、ページテーブル情報のブロックがＩＯＭＭＵ内に記憶される場合に、状態保持メモリ素子２０６が動的に更新される。
【００４３】
いくつかの実施形態において、状態保持メモリ素子２０６に記憶された情報の妥当性は、仮想アドレスから物理アドレスへの変換を実行するための情報及び／又はページテーブル情報のブロックが最新で正確であることを検証すること等によって、更新のために使用される前に検証される。例えば、コントローラ２００は、情報が状態保持メモリ素子２０６内に記憶されたので、仮想アドレスと物理アドレスとの間のマッピングが変更されていないと決定することができる。
【００４４】
ＩＯＭＭＵ１１４は、２つのメモリ素子（すなわち、メモリ素子２０２〜２０４）で示されているが、いくつかの実施形態において、ＩＯＭＭＵ１１４は、（図２に省略記号で示すように）より多くのメモリ素子を含んでもよい。これらの実施形態において、本明細書に記載された動作（すなわち、選択されたメモリ素子の決定、選択されたメモリ素子の使用等）は、対応する数のメモリ素子に対して実行することができる。概して、記載された実施形態は、ＩＯＭＭＵ１１４内のいくつかの数のメモリ素子を用いて使用することができる。また、ＩＯＭＭＵ１１４は、状態保持メモリ素子２０６を含むように示されているが、いくつかの実施形態において、ＩＯＭＭＵ１１４は、状態保持メモリ素子２０６を含まなくてもよい。
【００４５】
（要因）
上述したように、コントローラ（例えば、コントローラ２００）は、１つ以上の要因に基づいて、ＩＯＭＭＵ（例えば、ＩＯＭＭＵ１１４）内の仮想アドレスから物理アドレスへの変換を実行するために使用されるメモリ素子を決定する。概して、決定を行う際に使用される要因には、ＩＯＭＭＵ、周辺機器（例えば、周辺機器１０８〜１１０）及び／若しくはコンピューティングデバイス内の仮想アドレスから物理アドレスへの変換のパフォーマンスに関連する要因、これに依存する要因又は他に関連する要因が含まれる。要因は、ＩＯＭＭＵ及び／若しくはＩＯＭＭＵ内のメモリ素子（例えば、メモリ素子２０２〜２０４）の動作、周辺機器及び周辺機器内のメモリ素子（存在する場合）の動作、並びに／又は、コンピューティングデバイスの動作の対応する態様を表すものである。例えば、要因は、仮想アドレスから物理アドレスへの変換がＩＯＭＭＵ及び／又は周辺機器において実行される速度に関連してもよいし、仮想アドレスから物理アドレスへの変換が実行されるＩＯＭＭＵ及び／又は周辺機器内の位置に関連してもよいし、ＩＯＭＭＵ及び／又は周辺機器内のメモリ素子のタイプ等に関連してもよい。
【００４６】
いくつかの実施形態において、要因には、ＩＯＭＭＵ内で利用可能なメモリ素子の特性が含まれる。例えば、いくつかの実施形態では、ＩＯＭＭＵ内の第１メモリ素子は、小容量であるが高速なアクセス時間を有する特性を含んでおり、ＩＯＭＭＵ内の第２メモリ素子は、より大きな容量を有するが、より低速なアクセス時間を有する特性を含む。コントローラは、メモリ素子の特性に少なくとも部分的に基づいて、ＩＯＭＭＵ内で仮想アドレスから物理アドレスへの変換を実行するために使用される１つ以上のメモリ素子を決定することができる。いくつかの実施形態において、コントローラは、メモリ素子の特性に基づいて決定を行う場合に、ＩＯＭＭＵ、周辺機器及び／又はコンピューティングデバイスの現在の動作条件、モード及び／又は状態（例えば、仮想アドレスから物理アドレスへの変換の実行回数、周辺機器の数等）を使用することができる。例えば、コントローラは、仮想アドレスから物理アドレスへの変換要求の数が多い可能性がある場合に、仮想アドレスから物理アドレスへの変換を実行するのに使用される、高速なメモリ素子を選択することができる。別の例として、コントローラは、ＩＯＭＭＵに記憶された仮想アドレスから物理アドレスへの変換がより多く存在する可能性がある場合に、より大容量のメモリ素子を選択することができる。説明したように、メモリ素子の特性を使用して、何れのメモリ素子を使用するかを決定することによって、ＩＯＭＭＵは、動作条件、モード又は状態に依存して、仮想アドレスから物理アドレスへの変換情報をより多く記憶し、仮想アドレスから物理アドレスへの変換をより速く実行し、より信頼性の高いメモリ回路を使用して仮想アドレスから物理アドレスへの変換を実行する等を行うことができる。
【００４７】
いくつかの実施形態において、要因は、周辺機器において仮想アドレスから物理アドレスへの変換を実行するために（すなわち、周辺機器が対応する仮想アドレスから物理アドレスへのＩＯＭＭＵからの変換を要求する代わりに、仮想アドレスから物理アドレスへの変換を周辺機器において「ローカル」に実行するために）利用可能な（又は利用不可能な）メモリ素子を含む。例えば、いくつかの実施形態において、周辺機器がＳＲＡＭ、ＤＲＡＭ、ＰＣＭ等に実装された１つ以上のＴＬＢを含む場合等のように、一部又は全ての周辺機器は、異なるタイプ及び／又はメモリ回路の構成を使用して実装されるローカルＴＬＢを有する。これらの実施形態において、周辺機器内のＴＬＢを使用して、仮想アドレスから物理アドレスへの変換情報（ＩＯＭＭＵ内のＴＬＢにキャッシュされてもよいし、されなくてもよい）をキャッシュすることができる。コントローラは、周辺機器内のＴＬＢとして使用されるメモリ回路のタイプ及び構成に少なくとも部分的に基づいて、ＩＯＭＭＵ内のＴＬＢの仮想アドレスから物理アドレスへの変換を記憶するために使用されるＩＯＭＭＵ内の１つ以上のメモリ素子を決定することができる。例えば、周辺機器が、周辺機器内のＴＬＢの仮想アドレスから物理アドレスへの変換情報を保持するために使用される所定の容量以上のメモリ素子（又は、複数のメモリ素子の組み合わせ）を有する場合に、コントローラは、仮想アドレスから物理アドレスへの変換をＩＯＭＭＵ内のＴＬＢに保持するために、より小容量及び／又はより低速のメモリ素子を使用することを決定することができる。これにより、周辺機器が、自身の仮想アドレスから物理アドレスへの変換の殆どを実行することができるので、ＩＯＭＭＵ内のＴＬＢの仮想アドレスから物理アドレスへの変換を保持するために使用されるメモリ素子が不足している状況及び／又は必要以上に高速である状況を回避することができる。
【００４８】
いくつかの実施形態において、要因には、ＩＯＭＭＵ内のＴＬＢにおけるＴＬＢエントリの複製量が含まれる。いくつかの実施形態において、周辺機器、及び、周辺機器によって実行されるプロセスは、ＩＯＭＭＵ内のＴＬＢを共有する。周辺機器及びプロセスは、（例えば、コンテキストスイッチの後等に）ＩＯＭＭＵ内のＴＬＢからのエントリのエビクトを引き起こす可能性があるため、周縁機器又はプロセスが、他の周辺機器又はプロセスによって使用されているＴＬＢエントリをエビクトする可能性がある。ＩＯＭＭＵ内のＴＬＢのＴＬＢエントリを複製することは、有用なＴＬＢエントリのエビクトと、周辺機器及び／又はプロセスの対応する非効率な動作を回避することと、に役立つことができる。コントローラは、ＴＬＢエントリに使用される複製量に少なくとも部分的に基づいて、ＩＯＭＭＵ内のＴＬＢの仮想アドレスから物理アドレスへの変換を記憶するのに使用されるメモリ素子を決定することができる。例えば、コントローラは、複製量が閾値以上の場合、より大容量のメモリ素子を決定することができる。いくつかの実施形態において、ＩＯＭＭＵ内のＴＬＢのＴＬＢエントリ（又は、要約情報）は、ＴＬＢエントリ及び／又は複製したＴＬＢエントリにアクセスした周辺機器及び／又はプロセスに関する情報を含む。これらの実施形態のうちいくつかにおいて、周辺機器間のページの共有量、特定のページに依存する処理の分布及び／若しくは優先順位、並びに／又は、ページにアクセスする周辺機器の性質等の情報を、ＴＬＢエントリを複製する際及び／又は複製に基づいてメモリ素子を決定する際に使用することができる。
【００４９】
いくつかの実施形態において、要因には、ＩＯＭＭＵ内及び／又は周辺機器内のメモリ素子の現在又は予測される将来の摩耗量（amount of wear）が含まれる。特定のタイプのメモリ技術（例えば、ＳＴＴ、ＰＣＭ等）は、消耗し易い（すなわち、読み出し／書き込みサイクルの数が増加するにつれて、コンポーネント／回路のエラーの可能性がより高くなる）。コントローラは、摩耗量、周辺機器によるアクセス数及び／若しくはタイプ（例えば、ＴＬＢルックアップ等）、並びに／又は、周辺機器内のＴＬＢの存在（若しくは欠如）に少なくとも部分的に基づいて、ＩＯＭＭＵ内で仮想アドレスから物理アドレスへの変換を実行するために使用されるメモリ素子を決定することができる。例えば、コントローラは、ＩＯＭＭＵ内のＴＬＢにおいて、１つ以上の周辺機器によって閾値以上のＴＬＢルックアップが行われるか予測される場合に、消耗し難いメモリを選択することができる。
【００５０】
いくつかの実施形態において、要因に関する情報は、決定に先立って既知であってもよいし、他の方法で取得されてもよい。例えば、コントローラは、（例えば、周辺機器内のＴＬＢとして）仮想アドレスから物理アドレスへの変換を実行する際に使用される特定のメモリ素子を含むように、特定の周辺機器を（リスト、テーブル等を介して）知ることができる。別の例として、管理者、設計者又は他のユーザは、要因に関する情報をコントローラ（又は、より具体的には、コンピューティングデバイス）に入力し、又は、他の方法によってコントローラに提供することができる。さらに別の例として、コントローラは、要因についてコンピューティングデバイス及び／又は周辺機器からレポートを受信することができる。さらに別の例として、コントローラは、おおよその所定期間（例えば、秒、時間、日等）に亘る要因を決定するために、仮想アドレスから物理アドレスへの変換及び／又は他の動作を監視することができる。
【００５１】
いくつかの実施形態において、ＩＯＭＭＵ及び周辺機器内で仮想アドレスを物理アドレスへの変換を実行するために使用されるメモリのタイプ間で所定の関係が維持される。例えば、周辺機器とＩＯＭＭＵとの間の対応するＴＬＢの仮想アドレスから物理アドレスへの変換情報を保持するための合計Ｎ個（Ｎは特定の整数）のエントリのターゲットを使用することができる。別の例として、周辺機器及びＩＯＭＭＵによって実行可能な仮想アドレスから物理アドレスへの変換の数又は割合のターゲット又は推定値が使用されてもよい。
【００５２】
いくつかの要因を上述したが、いくつかの実施形態において、一部又は全ての要因が使用されず、他の要因が使用され、及び／又は、要因の組み合わせが使用される。例えば、ＩＯＭＭＵ、周辺機器及び／又はコンピューティングデバイスの最新の動作条件、モード及び／又は状態は、例えば、複製、周辺機器内で利用可能なメモリ素子等の他の要因と組み合わせて使用されてもよい。上述したように、要因は、概して、ＩＯＭＭＵ及び／若しくは周辺機器内での仮想アドレスから物理アドレスへの変換のパフォーマンスに関連する要因、これに依存する要因、又は、他の関連する要因である。したがって、各要因を使用する１つの可能な目的は、仮想アドレスから物理アドレスへの変換を実行するためにどのメモリ素子を使用するか（又は使用しないか）に関するより良い決定を可能にすることである。
【００５３】
（仮想アドレスから物理アドレスへの変換を実行するために使用されるメモリ素子の選択）
上述したように、記載された実施形態において、コントローラ（例えば、コントローラ２００）は、仮想アドレスから物理アドレスへの変換を実行するために使用されるＩＯＭＭＵ（例えば、ＩＯＭＭＵ１１４）内の利用可能なメモリ素子の中からメモリ素子を選択する。図３は、いくつかの実施形態による、仮想アドレスから物理アドレスへの変換を実行するために使用されるメモリ素子を選択するプロセスを示すフローチャートである。なお、図３に示す動作は、いくつかの実施形態によって実行される動作の一般的な例として提示されることに留意されたい。他の実施形態によって実行される動作は、異なる動作及び／又は異なる順序で実行される動作を含む。また、動作を記載する際に特定の機構／素子（例えば、コントローラ等）が用いられているが、いくつかの実施形態において、他の機構が動作を実行し、及び／又は、動作が他の機構／素子上で実行されてもよい。
【００５４】
図３に示すプロセスは、コントローラが、１つ以上の要因に基づいて、仮想アドレスから物理アドレスへの変換を実行するために使用されるＩＯＭＭＵ内の利用可能なメモリ素子のセットの中から１つ以上の選択されたメモリ素子を決定する（ステップ３００）場合に開始される。この動作中に、コントローラは、ＴＬＢの仮想アドレスから物理アドレスへの変換情報を記憶するのに使用されるメモリ素子を選択する。より具体的には、コントローラは、ＴＬＢの仮想アドレスから物理アドレスへの変換情報の対応する部分を記憶するためにどのメモリ素子を使用するかを決定する。上述したように、１つ以上の要因には、ＩＯＭＭＵ及び／又は周辺機器内の仮想アドレスから物理アドレスへの変換のパフォーマンス（及び、より具体的には、ＩＯＭＭＵが配置されたコンピューティングデバイスの動作）に関連する要因、これに依存する要因、又は、他の関連する要因が含まれる。
【００５５】
いくつかの実施形態において、ＩＯＭＭＵがスタートアップすると（例えば、最初に電源投入された、低電力状態から復帰した等）、ステップ３００が実行される。これらの実施形態において、ＴＬＢの仮想アドレスから物理アドレスへの変換情報を記憶するために使用される特定のメモリ素子は、スタートアップの際に設定される。これらの実施形態のうちいくつかにおいて、メモリ素子は、スタートアップの際に設定された後に変更されない。これらの実施形態のうち他において、メモリ素子は、動的に変更されてもよい（すなわち、ＩＯＭＭＵが動作すると、可能な場合に複数回変更される）。これらの実施形態のいくつかにおいて、コントローラは、仮想アドレスから物理アドレスへの変換を実行するために使用されるメモリ素子を定期的（例えば、所定のイベントが発生した場合にＸ秒毎等）に確認し、仮想アドレスから物理アドレスへの変換を実行するために使用されるメモリ素子を動的に変更することができる。メモリ素子の動的な変更をサポートする実施形態において、コントローラ（又は、コンピューティングデバイス内の別のエンティティ）は、変更を有効にするために、仮想アドレスから物理アドレスへの変換情報をメモリ素子間でコピーするためのコピー機構を含む。
【００５６】
いくつかの実施形態において、ステップ３００の間、コントローラは、ページテーブル情報のブロックを記憶するために使用されるメモリ素子も選択する。これらの実施形態のうちいくつかにおいて、ＴＬＢの仮想アドレスから物理アドレスへの変換情報を記憶するのに使用されないメモリ素子及び／又はメモリ素子の一部を、ページテーブル情報のブロックを記憶するために使用することができる。例えば、メモリ素子の第１部分（例えば、半分、所定のバイト数等）は、ＴＬＢの仮想アドレスから物理アドレスへの変換情報を記憶するために予約され、割り当てられてもよく、第２部分は、ページテーブル情報のブロックを記憶するために予約又は割り当てられてもよい。
【００５７】
次に、コントローラは、ＩＯＭＭＵ内で仮想アドレスから物理アドレスへの変換を実行するために、１つ以上の選択されたメモリ素子を使用する（ステップ３０２）。より具体的には、コントローラは、仮想アドレスから物理アドレスへの変換に関連するメタデータを取得するために、及び／又は、ＩＯＭＭＵ内のＴＬＢのデータ（可能な場合、要約データを含む）に依存する他の動作を実行するために、仮想アドレスから物理アドレスへの変換を実行するための少なくともいくつかのメモリ素子を使用する。例えば、コントローラは、周辺機器から（又は、周辺機器によって実行される作業負荷から）、仮想アドレスを含む変換要求を受信することができ、ＴＬＢ内の（すなわち、対応するメモリ素子内の）対応する物理アドレスをルックアップすることができ、物理アドレスを要求元の周辺機器に返すことができる。また、コントローラは、ページテーブル情報のブロックを記憶するために、ページテーブル情報のブロックを記憶するのに使用されるメモリ素子（又は、その一部）を使用することができる。上述したように、この動作は、メモリ（例えば、メモリ１０４又はコンピューティングデバイス１００内の他の場所）からメモリ素子へのページテーブル情報のブロックの移動又はコピーすることと、ページテーブルウォークを実行するためにページテーブル情報のブロックを使用することと、等を含む。
【００５８】
上述したように、コントローラは、仮想アドレスから物理アドレスへの変換を実行するために使用されるメモリ素子に電源投入することができる。例えば、いくつかの実施形態において、メモリ素子は、仮想アドレスから物理アドレスへの変換を実行するために使用されていない場合に、低電力状態（例えば、電源電圧の低下（おおよそゼロまで）、制御クロック周波数の低減（おおよそゼロまで）等）に移行又は維持される。これらの実施形態において、コントローラが、仮想アドレスから物理アドレスへの変換を実行するためにメモリ素子を使用することを決定した場合に、メモリ素子は、電源投入状態（例えば、１つ以上の動作電圧への電源電圧の増加、１つ以上の動作周波数への制御クロック周波数の増加等）に移行することができる。
【００５９】
（状態保持メモリ素子を使用した、メモリ素子の仮想アドレスから物理アドレスへの変換情報の更新）
図４は、いくつかの実施形態による、ＩＯＭＭＵ（例えば、ＩＯＭＭＵ１１４）内のメモリ素子の仮想アドレスから物理アドレスへの変換情報を更新するために、状態保持メモリ素子（例えば、状態保持メモリ素子２０６）を使用するプロセスを示すフローチャートである。図４に示す動作は、いくつかの実施形態によって実行される動作の一般的な例として提示されることに留意されたい。他の実施形態によって実行される動作は、異なる動作及び／又は異なる順序で実行される動作を含む。また、動作を説明する際に特定の機構／素子（例えば、コントローラ等）が用いられているが、いくつかの実施形態において、他の機構が動作を実行し、及び／又は、動作が他の機構／素子上で実行されてもよい。
【００６０】
図４に示すプロセスは、コントローラ（例えば、コントローラ２００）が、仮想アドレスから物理アドレスへの変換を実行するために使用される情報を状態保持メモリ素子に記憶する（ステップ４００）場合に開始する。例えば、いくつかの実施形態において、コントローラは、ＩＯＭＭＵ内のＴＬＢからコピーされ及び／又は他の方法によりＴＬＢ内の情報に基づく、仮想アドレスから物理アドレスへの変換情報を、状態保持メモリ素子に記憶することができる。別の例として、いくつかの実施形態において、コントローラは、１つ以上のメモリ素子からコピーされたページテーブル情報のブロックを状態保持メモリ素子に記憶することができる。コントローラは、情報がＩＯＭＭＵ内のメモリ素子（例えば、メモリ素子２０２〜２０４）に追加、更新又は他の方法で変更される場合に、情報を状態保持メモリ素子に記憶することができ、及び／又は、ＩＯＭＭＵのパワーダウン動作の一部として（例えば、ＩＯＭＭＵがフルパワー状態から低電力状態に移行する場合に）実行することができる。
【００６１】
次に、ＩＯＭＭＵの電源が遮断される（ステップ４０２）。例えば、電力を節約するために、ＩＯＭＭＵを低電力状態に移行することができる。低電力状態において、仮想アドレスから物理アドレスへの変換情報を記憶するメモリ素子は、データをメモリ素子内に保持するには不十分な動作状態（すなわち、対応する電圧、電流、クロック周波数等）に維持され得る。仮想アドレスから物理アドレスへの変換情報を上述したように状態保持メモリ素子に記憶することによって、仮想アドレスから物理アドレスへの変換情報は、ＩＯＭＭＵが低電力状態にある間保持される。
【００６２】
次に、ＩＯＭＭＵの電力を復帰させる（ステップ４０４）。例えば、ＩＯＭＭＵは、低電力状態からフルパワー状態に移行することができる。フルパワー状態において、ＩＯＭＭＵ内のメモリ素子は、データをメモリ素子内に保持するのに十分な動作状態に維持される。しかしながら、低電力状態を介した早期の移行により、メモリ素子は、仮想アドレスから物理アドレスへの変換情報をもはや保持していない可能性がある（すなわち、メモリ素子がパワーダウンされたときに情報が失われた可能性がある）。したがって、コントローラは、状態保持メモリ素子に保持された仮想アドレスから物理アドレスへの変換情報を、状態保持メモリ素子から取得する（ステップ４０６）。次いで、コントローラは、仮想アドレスから物理アドレスへの変換情報を使用して、メモリ素子内の仮想アドレスから物理アドレスへの変換情報の一部又は全てを更新する（ステップ４０８）。例えば、コントローラは、状態保持メモリ素子から取得した仮想アドレスから物理アドレスへの変換情報を使用して、ＩＯＭＭＵ内のＴＬＢを更新することができる（例えば、１つ以上のエントリをＴＬＢに入力する等）。別の例として、コントローラは、ページテーブル情報のブロックを、状態保持メモリ素子からＩＯＭＭＵ内の１つ以上のメモリ素子にコピーすることができる。
【００６３】
いくつかの実施形態において、コントローラは、ステップ４０８のようにメモリ素子を更新する前に、仮想アドレスから物理アドレスへの変換情報の有効性を検証する。一般的に、この動作は、ＩＯＭＭＵの動作環境に少なくとも部分的に基づいて、仮想アドレスから物理アドレスへの変換情報が現在のままである（すなわち、ＩＯＭＭＵがパワーダウンされたため、変更されていない）ことを判別することを含む。例えば、コントローラは、ＩＯＭＭＵがパワーダウンさている間に、仮想アドレスから物理アドレスへの変換マッピング及び／又はページテーブル情報のブロックが変更されたかどうかを判別するために、コンピューティングデバイス（例えば、プロセッサ１０２等）内の１つ以上の他のエンティティに問い合わせることができる。
【００６４】
いくつかの実施形態において、コンピューティングデバイス（例えば、図１のコンピューティングデバイス１００及び／又はその一部）は、非一時的なコンピュータ可読記憶媒体に記憶されたコード及び／又はデータを使用して、本明細書に記載された動作の一部又は全てを実行する。より具体的には、コンピューティングデバイスは、記載された動作を実行する場合に、コンピュータ可読記憶媒体からコード及び／又はデータを読み出して、コードを実行し及び／又はデータを使用する。
【００６５】
コンピュータ可読記憶媒体は、コンピューティングデバイスによって使用されるコード及び／又はデータを記憶する任意のデバイス、媒体、これらの組み合わせであってもよい。例えば、コンピュータ可読記憶媒体は、限定されないが、フラッシュメモリ、ランダムアクセスメモリ（ＳＲＡＭ、ＤＲＡＭ、ＤＤＲ、ＤＤＲ２／ＤＤＲ３／ＤＤＲ４  ＳＤＲＡＭ等）、読み出し専用メモリ（ＲＯＭ）、磁気若しくは光学記憶媒体（例えば、ディスクドライブ、磁気テープ、ＣＤ、ＤＶＤ）を含む、揮発性メモリ又は不揮発性メモリを含むことができる。
【００６６】
いくつかの実施形態において、１つ以上のハードウェアモジュールは、本明細書に記載された動作を実行するように構成されている。例えば、ハードウェアモジュールには、限定されないが、１つ以上のプロセッサ／コア／中央処理装置（ＣＰＵ）、特定用途向け集積回路（ＡＳＩＣ）チップ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、コントローラ、メモリ管理ユニット（例えば、ＩＯＭＭＵ、ＭＭＵ等）、計算ユニット、組み込みプロセッサ、グラフィックスプロセッサ（ＧＰＵ）／グラフィックスコア、パイプライン、アクセラレーテッドプロセッシングユニット（ＡＰＵ）、及び／又は、他のプログラマブルロジックデバイスが含まれる。このようなハードウェアモジュールが起動すると、ハードウェアモジュールは、一部又は全ての動作を実行する。いくつかの実施形態において、ハードウェアモジュールは、動作を実行する命令（プログラムコード、ファームウェア等）を実行することによって構成された１つ以上の汎用回路を含む。
【００６７】
いくつかの実施形態において、本明細書に記載された構造及び機構（例えば、コンピューティングデバイス１００及び／又はその一部）のうち一部又は全てを表すデータ構造は、コンピューティングデバイスにより読み出され、直接的若しくは間接的に使用され、構造及び機構を含むハードウェアを製造することが可能な、データベース又は他のデータ構造を含むコンピュータ可読記憶媒体に記憶されている。例えば、データ構造は、Ｖｅｒｉｌｏｇ又はＶＨＤＬ等の高レベル設計言語（ＨＤＬ）におけるハードウェア機能の動作レベル記述又はレジスタ転送レベル（ＲＴＬ）記述であってもよい。この記述は、上述した構造及び機構を含むハードウェアの機能を表す合成ライブラリからゲート／回路素子のリストを含むネットリストを生成するために当該記述を合成する合成ツールによって読み出されてもよい。次に、ネットリストを配置及びルーティングして、マスクに適用される幾何学的形状を記述するデータセットを生成することができる。次いで、マスクは、上述した構造及び機構に対応する１つ以上の半導体回路を製造するために、様々な半導体製造ステップで使用されてもよい。或いは、コンピュータアクセス可能記憶媒体上のデータベースは、所望によりネットリスト（合成ライブラリを含む若しくは含まない）又はデータセットであってもよいし、グラフィックデータシステム（ＧＤＳ）ＩＩデータであってもよい。
【００６８】
この記載では、いくつかの実施形態の説明において機能ブロックを参照することができる。一般に、機能ブロックは、記載された動作を実行する１つ以上の相互に関連する回路を含む。いくつかの実施形態において、機能ブロック内の回路は、記載された動作を実行するためにプログラムコード（例えば、マイクロコード、ファームウェア、アプリケーション等）を実行する回路を含む。
【００６９】
上述した実施形態の説明は、例示及び説明のために示されたものである。これらは、実施形態が網羅的であること、又は、実施形態が開示されたものに限定されることを意図していない。したがって、当業者には、多くの変更及び変形形態が明らかであろう。また、上記の開示は、本発明を限定するものではない。本発明の範囲は、添付の特許請求の範囲によって定義される。
【図１】
2019521409.tif 000003
【図２】
2019521409.tif 000004
【図３】
2019521409.tif 000005
【図４】
2019521409.tif 000006
【国際調査報告】
2019521409.tif 000007
2019521409.tif 000008