(57)【特許請求の範囲】
【請求項１】
複数のＩ／Ｏデバイスからのメモリアクセス要求を受信し、保護モードを実行するように構成されたメモリ管理ユニットを備え、
前記メモリ管理ユニットは、前記保護モードで実行する間、前記メモリアクセス要求の各々を、メモリアドレス変換データの同じセットにマッピングすることによって、前記複数のＩ／Ｏデバイスによるメモリアクセスを阻止するように構成されており、
前記メモリ管理ユニットは、前記保護モードで実行していない間、異なるメモリアクセス要求を、メモリアドレス変換データのそれぞれ異なるセットにマッピングすることによって、前記複数のＩ／Ｏデバイスからのメモリアクセス要求を許可するように構成されている、
装置。
【請求項２】
前記メモリアドレス変換データの少なくとも一部は、一つ以上のメモリアドレス変換テーブルを用いてメモリに記憶されており、又は、ハードウェアレジスタに記憶されている、請求項１に記載の装置。
【請求項３】
前記メモリ管理ユニットは、前記メモリ管理ユニットの保護フラグを設定するソフトウェアに応じて、前記保護モードに移行するように設定可能である、請求項１に記載の装置。
【請求項４】
前記メモリアクセス要求をメモリアドレス変換データの前記同じセットにマッピングすることは、デバイス識別子のデフォルト値を用いて、前記メモリアクセス要求をタグ付けすることを含む、請求項１に記載の装置。
【請求項５】
前記デバイス識別子のデフォルト値は、デバイステーブルの制限エントリに対応し、前記制限エントリは、前記Ｉ／Ｏデバイスによるシステムメモリへのアクセスが許可されていないことを示す、請求項４に記載の装置。
【請求項６】
前記デバイス識別子のデフォルト値は、デバイステーブルの制限エントリに対応し、前記制限エントリは、前記メモリ管理ユニットが、全てのメモリアドレスをシステムメモリの同じ制限部分にマッピングするアドレス変換データを用いて、前記Ｉ／Ｏデバイスからのメモリアクセス要求を変換するように示している、請求項４に記載の装置。
【請求項７】
前記システムメモリの制限部分はゼロサイズである、請求項６に記載の装置。
【請求項８】
前記システムメモリの制限部分は、信頼されたブート手順を実行するために用いられる部分以外の部分である、請求項６に記載の装置。
【請求項９】
前記メモリ管理ユニットは、一つの前記Ｉ／Ｏデバイスからメモリアクセス要求を受信したことに応じてエラーコードを返すことによって、前記メモリアクセスを阻止するように構成されている、請求項１に記載の装置。
【請求項１０】
処理システムのメモリ管理ユニットを用いてメモリを保護するコンピュータ実行方法であって、
前記メモリ管理ユニットが、保護モードで実行する間、
メモリアクセス要求をＩ／Ｏデバイスから受信するステップと、
前記メモリアクセス要求の受信に応じて、前記メモリアクセス要求の各々をメモリアドレス変換データの同じセットにマッピングすることによって、前記要求されたメモリアクセスを阻止するステップと、
前記メモリ管理ユニットが、非保護モードで実行する間、
他のメモリアクセス要求を二つ以上の前記Ｉ／Ｏデバイスから受信するステップと、
前記二以上のＩ／Ｏデバイスの各々について、メモリアドレス変換データのセットを決定するステップと、
前記他のメモリアクセス要求ごとに、前記他のメモリアクセス要求を、前記他のメモリアクセス要求を行った前記Ｉ／Ｏデバイスに対応する前記メモリアドレス変換データのセットにマッピングするステップと、を含む、
方法。
【請求項１１】
前記メモリアドレス変換データの少なくとも一部は、一つ以上のメモリアドレス変換テーブルを用いてメモリに記憶されており、又は、ハードウェアレジスタに記憶されている、請求項１０に記載の方法。
【請求項１２】
前記メモリ管理ユニットが、前記メモリ管理ユニットの保護フラグを設定するソフトウェアに応じて、前記保護モードに移行するステップをさらに含む、請求項１０に記載の方法。
【請求項１３】
前記メモリアクセス要求を前記メモリアドレス変換データの同じセットにマッピングすることは、デバイス識別子のデフォルト値を用いて、前記メモリアクセス要求をタグ付けすることを含む、請求項１０に記載の方法。
【請求項１４】
前記デバイス識別子のデフォルト値は、デバイステーブルの制限エントリに対応し、前記制限エントリは、前記Ｉ／Ｏデバイスによるシステムメモリへのアクセスが許可されていないことを示す、請求項１３に記載の方法。
【請求項１５】
前記デバイス識別子のデフォルト値は、デバイステーブルの制限エントリに対応し、前記制限エントリは、前記メモリ管理ユニットが、全てのメモリアドレスをシステムメモリの同じ制限部分にマッピングするアドレス変換データを用いて、前記Ｉ／Ｏデバイスからのメモリアクセス要求を変換するように示している、請求項１３に記載の方法。
【請求項１６】
前記システムメモリの制限部分はゼロサイズである、請求項１５に記載の方法。
【請求項１７】
前記システムメモリの制限部分は、信頼されたブート手順を実行するために用いられる部分以外の部分である、請求項１５に記載の方法。
【請求項１８】
信頼された初期化手順を実行するために、コンピュータシステムによって実行可能なプログラム命令を記憶したコンピュータ可読記憶媒体であって、
前記信頼された初期化手順は、メモリ管理ユニットを保護モードで実行させるように設定することを含み、
前記メモリ管理ユニットは、前記保護モードの間、複数のＩ／Ｏデバイスからのメモリアクセス要求をメモリアドレス変換データの同じセットにマッピングすることによって、前記複数のＩ／Ｏデバイスによるメモリアクセスを阻止し、前記保護モードではない間、前記複数のＩ／ＯデバイスからのＩ／Ｏ要求を、メモリアドレス変換データのそれぞれ異なるセットにマッピングするように構成されている、
コンピュータ可読記憶媒体。
【請求項１９】
前記メモリアドレス変換データの少なくとも一部は、一つ以上のメモリアドレス変換テーブルを用いてメモリに記憶されており、又は、ハードウェアレジスタに記憶されている、請求項１８に記載のコンピュータ可読記憶媒体。
【請求項２０】
前記信頼された初期化手順は、
一つ以上の周辺デバイスによる直接的なメモリアクセスからシステムメモリの一部を保護するために、セキュアカーネルの初期化命令を実行することと、
前記システムメモリの保護された部分内に一つ以上のアドレス変換テーブルの前記セットを作成することと、をさらに含む、請求項１８に記載のコンピュータ可読記憶媒体。
【請求項２１】
前記信頼された初期化手順を実行可能な前記プログラム命令は、オペレーティングシステム、ゲストオペレーティングシステム又は仮想マシンモニタの一部である、請求項１８に記載のコンピュータ可読記憶媒体。
【請求項２２】
前記メモリ管理ユニットを前記保護モードで実行するように設定することは、前記メモリ管理ユニットの保護フラグを設定することを含む、請求項１８に記載のコンピュータ可読記憶媒体。
【請求項２３】
信頼された初期化手順を実行するコンピュータ実行方法であって、
複数のＩ／Ｏデバイスによる直接的なメモリアクセスからシステムメモリの一部を保護するために、セキュアカーネルの初期化命令を実行するステップと、
前記システムメモリの保護された部分内に一つ以上のアドレス変換テーブルのセットを作成するステップであって、前記一つ以上のメモリアドレス変換テーブルのセットは、メモリアクセスを阻止する、ステップと、
メモリ管理ユニットを保護モードで実行するように設定するステップとを含み、
前記メモリ管理ユニットは、前記保護モードの間、前記複数のＩ／Ｏデバイスからのメモリアクセス要求を、メモリアクセスを阻止する前記一つ以上のメモリアドレス変換テーブルのセットにマッピングすることによって、前記複数のＩ／Ｏデバイスによるメモリアクセスを阻止し、前記保護モードでない間、前記複数のＩ／ＯデバイスからのＩ／Ｏ要求を一つ以上のメモリアドレス変換テーブルのそれぞれ異なるセットにマッピングするように構成されている、
方法。
【請求項２４】
前記メモリアクセス要求を前記メモリアドレス変換テーブルのセットにマッピングすることは、デバイステーブルの制限エントリに対応するデバイス識別子のデフォルト値を用いて前記メモリアクセス要求をタグ付けすることを含み、前記制限エントリは、前記Ｉ／Ｏデバイスによるシステムメモリへのアクセスが許可されていないことを示している、請求項２３に記載の方法。
【請求項２５】
前記メモリアクセス要求を前記メモリアドレス変換データのセットにマッピングすることは、デバイステーブルの制限エントリに対応するデバイス識別子のデフォルト値を用いて前記メモリアクセス要求をタグ付けすることを含み、前記制限エントリは、前記メモリ管理ユニットが、全てのメモリアドレスをシステムメモリの同じ制限部分にマッピングするアドレス変換データを用いて、前記Ｉ／Ｏデバイスからのメモリアクセス要求を変換するように示している、請求項２３に記載の方法。
【請求項２６】
前記システムメモリの制限部分はゼロサイズである、請求項２５に記載の方法。
【請求項２７】
前記システムメモリの制限部分は、信頼されたブート手順を実行するために用いられる部分以外の部分である、請求項２５に記載の方法。
【請求項２８】
前記メモリ管理ユニットを保護モードで実行するように設定するステップは、前記メモリ管理ユニットの保護フラグを設定するステップを含む、請求項２３に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
セキュリティは、多くのコンピュータシステムの設計における重要な検討事項である。例えば、デスクトップコンピュータ上の電子文書にアクセスしたいユーザは、当該文書を開くことによって、何かしらの悪意のある行為者が、文書の内容を読み取り及び／又は改ざんできないようにしたいと考えている。しかしながら、コンピュータ環境が、ウィルス、スパイウェア又はバグ等の悪意のあるソフトウェアを含む場合には、文書の内容が漏えい及び／又は改ざんされる場合がある。
【０００２】
悪意のある行為者から文書を保護するために、ユーザは、コンピュータ環境が、公知であって信頼されているソフトウェアのみを含むことを確実にしたいと考えている。例えば、デスクトップコンピュータ上の文書を開くユーザは、コンピュータ環境が、公知であって信頼されているコードのみを確実に実行し、文書の内容を漏えい及び／又は改ざんするおそれのある、悪意のあるソフトウェアが一つも存在しないようにしたいと考えている。他の例では、自動投票機を使用するユーザは、自動投票機が、信頼された自動投票機ソフトウェアのみを実行することを確実にしたいと考えており、当該ソフトウェアが、ユーザの投票を改ざんしたり、権限無き第三者による投票内容の閲覧を可能としてしまうような誤作動を起こさない状態にしたいと考えている。
【０００３】
幾つかのシステムでは、信頼されたソフトウェアのみが読み込まれることを保証する、信頼された初期化手順のためのハードウェア支援を提供する。例えば、中央処理装置（ＣＰＵ）の指示セットは、信頼されたブートストラップを実施するために使用され得る、例えばＳＫＩＮＩＴ等のセキュアカーネルの初期化命令を有し得る。信頼されたブートストラップを実施するために、セキュアカーネルの初期化命令は、メモリのごく一部を保護してから、信頼されたソフトウェアを、当該保護された一部にロードし得る。次に、信頼されたブート（ＴＢＯＯＴ）シーケンスとして本明細書で言及する、信頼されたソフトウェアは、ソフトウェア構成部をセットアップして、追加の信頼されたソフトウェアを安全な方法でロードし得る。例えば、ＳＫＩＮＩＴ命令は、割り込みを無効にし、保護されたメモリ領域に対する周辺デバイスからの直接的なメモリアクセス（ＤＭＡ）を無効にし、及び、ＳＫＩＮＩＴ命令を実行するコア以外のコア全てを無効にすることによって、メモリの６４Ｋ領域を保護する、セキュアカーネルの初期化命令である。６４Ｋ領域が保護されると、ＳＫＩＮＩＴは、ＴＢＯＯＴシーケンスを、保護された領域にロードし得る。幾つかの例では、ＳＫＩＮＩＴ命令は、システムのコンポーネント（例えば、信頼された処理モジュール）にＴＢＯＯＴシーケンスのチェックサムを記憶するように命令してもよく、これは後に、ＴＢＯＯＴシーケンスが改ざん又は危険にさらされることなく安全に読み込まれたか否かを検証するために使用され得る。
【発明の概要】
【課題を解決するための手段】
【０００４】
メモリ管理ユニットは、複数の入出力（Ｉ／Ｏ）デバイスからのメモリアクセス要求を受信するように構成されている。メモリ管理ユニットは、保護モードを実行し、（Ｉ／Ｏデバイスからの）メモリアクセス要求を、メモリアドレス変換データの同じセットにマッピングすることによって、複数のＩ／Ｏデバイスによるメモリアクセスを阻止する。メモリ管理ユニットが保護モードでない場合には、メモリ管理ユニットは、複数のＩ／Ｏデバイスからのメモリアクセス要求を、メモリアドレス変換データのそれぞれ異なるセットにマッピングする。従って、メモリ管理ユニットは、通常必要とされるアドレス変換テーブルよりも少ないテーブルを使用して、Ｉ／Ｏデバイスのアクセスからメモリを保護し得る。種々の実施形態では、メモリアドレス変換データは、一つ以上のメモリアドレス変換テーブルを用いてメモリに記憶されてもよいし、及び/又は一つ以上のハードウェアレジスタに記憶されてもよい。
【０００５】
幾つかの実施形態では、ソフトウェアは、メモリ管理ユニットを用いて、信頼された初期化手順を実行してもよい。セキュアな初期化手順は、セキュアカーネルの初期化命令を実行して、複数のＩ／Ｏデバイスによる直接的なメモリアクセスからシステムのメモリの一部を保護することを含んでもよい。次に、この手順は、メモリの保護された部分に、一つ以上のアドレス変換テーブルのセットを生成してもよく、前記変換テーブルは、メモリへのアクセスを阻止する。次に、ソフトウェアは、メモリ管理ユニットが、Ｉ／Ｏデバイスからのメモリアクセス要求を、メモリアクセスを防止する一以上のアドレス変換テーブルのセットにマッピングすることによって、前記Ｉ／Ｏデバイスによるメモリアクセスを阻止するように、前記保護モードで実行するように前記メモリ管理ユニットを構成してもよい。メモリ管理ユニットは、保護モードで実行しない場合には、複数のＩ／ＯデバイスからのＩ／Ｏ要求を、それぞれ異なる一以上のメモリアドレス変換テーブルのセットにマッピングするように構成されている。
【図面の簡単な説明】
【０００６】
【図１】幾つかの実施形態に係る、メモリアクセスパラメータ注入を実行するように構成された入出力メモリ管理ユニット（ＩＯＭＭＵ）を備えるコンピュータシステムのハイレベルビュー（ｈｉｇｈ−ｌｅｖｅｌ  ｖｉｅｗ）を示すブロック図である。
【図２】本明細書で説明する、ＩＯＭＭＵが提供するメモリ保護を実行するように構成されたシステムのブロック図である。
【図３】幾つかの実施形態に係る、保護モードを実行するように構成されたＩＯＭＭＵを動作させる方法を示すフロー図である。
【図４】本明細書で説明する、幾つかの実施形態に係る保護モードを実行可能なＩＯＭＭＵを用いて、信頼されたブート手順を開始するための方法を示すフロー図である。
【図５】本明細書で説明する、幾つかの実施形態に係るメモリアクセスパラメータ注入を実行するように構成されたコンピュータシステムを示すブロック図である。
【発明を実施するための形態】
【０００７】
本明細書は、「ある実施形態（ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ）」又は「一実施形態（ａｎ  ｅｍｂｏｄｉｍｅｎｔ）」との言及を含む。「ある実施形態では（ｉｎ  ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ）」又は「一実施形態では（ｉｎ  ａｎ  ｅｍｂｏｄｉｍｅｎｔ）という表現は、必ずしも同一の実施形態を指すものではない。特定の特徴、構造又は特性は、本開示と一致する任意の好適な方法で組み合わされてもよい。
【０００８】
専門用語。以下の段落において、（添付の請求の範囲を含む）本開示で見られる用語の定義及び／又は文脈（ｃｏｎｔｅｘｔ）を提供する。
【０００９】
「備える（Ｃｏｍｐｒｉｓｉｎｇ）」。本用語は制約を持たない。添付の請求の範囲で使用されるように、本用語は、追加の構造又は工程を除外するものではない。「一つ以上のプロセッサユニットを備える装置・・・」と記載された請求項を検討すると、このような請求項は、追加のコンポーネント（例えば、ネットワークインタフェースユニットや、グラフィックス回路など）を装置が含むことを除外しない。
【００１０】
「ように構成されている（Ｃｏｎｆｉｇｕｒｅｄ  Ｔｏ）」。種々のユニット、回路又は他のコンポーネントは、一つ以上のタスクを実行する「ように構成されている」と記載又は主張されてもよい。このような文脈において、「ように構成されている」とは、ユニット／回路／コンポーネントが、動作中に前記一つ以上のタスクを実行する構造（例えば回路）を備えることを示すことによって、構造を暗示するように用いられる。よって、ユニット／回路／コンポーネントは、特定のユニット／回路／コンポーネントが動作中ではない（例えば、ＯＮ状態ではない）場合であっても、タスクを実行するように構成されていると言うことができる。「ように構成されている」との記載が用いられるユニット／回路／コンポーネントは、例えば、回路や、動作を行うための実行可能なプログラム命令を記憶するメモリなどのハードウェアを備えている。ユニット／回路／コンポーネントが一つ以上のタスクを実行する「ように構成されている」と記載することは、ユニット／回路／コンポーネントに対し、３５  Ｕ．Ｓ．Ｃ．  §  １１２、第４段落が行使されないことを明確に意図している。さらに、「ように構成されている」とは、対象のタスクを実行可能な方法で動作するように、ソフトウェア及び／又はファームウェア（例えば、ソフトウェアを実行するＦＰＧＡ若しくは汎用プロセッサ）によって操作される一般構造（例えば、一般回路）を含む場合もある。また、「構成する（Ｃｏｎｆｉｇｕｒｅ  ｔｏ）」との記載は、製造プロセス（例えば、半導体工程設備）を、一つ以上のタスクを実施又は実行するように適合されたデバイス（例えば、集積回路）を組み立てるように適合させることを含んでもよい。
【００１１】
「第１（Ｆｉｒｓｔ）」、「第２（Ｓｅｃｏｎｄ）」等。本明細書で使用するように、これらの用語は、先行する名詞のラベルとして使用され、（例えば、空間的、時間的、論理的などの）どのような種類の順序も示唆しない。例えば、８つの処理要素又はコアを有するプロセッサにおいて、「第１」の処理要素、「第２」の処理要素という用語は、８つの処理要素のうち任意の２つの処理要素を指すために使用することができる。換言すれば、「第１」及び「第２」の処理要素は、論理処理要素である０及び１に限定されない。
【００１２】
「基づく（Ｂａｓｅｄ  Ｏｎ）」。本明細書で使用するように、本用語は、決定に影響を与える一つ以上の因子を説明するために使用される。本用語は、決定に影響を与え得る追加の因子を除外しない。すなわち、決定は、専らこれらの因子、少なくとも一部の因子に基づくものであってよい。「Ｂに基づいてＡを特定する」という記載について検討すると、ＢはＡの決定に影響を与え得るが、このような記載は、Ｃに基づくＡの決定を除外するものではない。他の例では、Ａは専らＢに基づいて特定されてもよい。
【００１３】
幾つかのコンピュータシステムは、信頼されたブート動作に対してハードウェア支援を提供する。例えば、ＳＫＩＮＩＴ命令は、種々のプロセッサ及び周辺デバイスによるアクセスからメモリの６４Ｋ領域を保護し、信頼されたプログラムシーケンス（ＴＢＯＯＴ）を保護された領域にロードし、ＴＢＯＯＴが他の信頼されたソフトウェアを安全な方法でロードすることを許可する。
【００１４】
現在のソフトウェア及びハードウェアシステムは大型化し複雑であるので、ＳＫＩＮＩＴ命令により保護されるメモリの６４Ｋ領域は、効果的なＴＢＯＯＴシーケンスを記憶するには小さすぎるようになってきている。例えば、幾つかの現在のシステムでは、メモリアクセス要求において特定された仮想メモリアドレスをシステム物理アドレスに変換することによってメモリ制限を実行するように構成されたＩ／Ｏメモリ管理ユニット（ＩＯＭＭＵ）を介して、周辺デバイスによるメモリアクセス（例えばＤＭＡ）の実行を可能としている。このようなＩＯＭＭＵの例は、「Ｉ／Ｏ用複数段階アドレス変換を備えるＩ／Ｏメモリ管理ユニット及びコンピュータオフロード（Ｉ／Ｏ  Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ  Ｉｎｃｌｕｄｉｎｇ  Ｍｕｌｔｉｌｅｖｅｌ  Ａｄｄｒｅｓｓ  Ｔｒａｎｓｌａｔｉｏｎ  ｆｏｒ  Ｉ／Ｏ  ａｎｄ  Ｃｏｍｐｕｔａｔｉｏｎ  Ｏｆｆｌｏａｄ）」と題する米国特許公開第２０１１／００２３０２７号明細書に開示されており、当該内容は参照により本明細書に組み込まれる。このようなシステムでは、ＴＢＯＯＴシーケンスは、ＩＯＭＭＵ用のＩ／Ｏ変換テーブルを作成することによって、ＩＯＭＭＵを、メモリへのアクセス操作をブロックするように理論的に構成することができ、前記テーブルは所望のメモリ制限を実行する。しかしながら、Ｉ／Ｏ変換テーブルは、かなり多くのメモリが必要となり、それ故、こうしたデータ構造を、ＳＫＩＮＩＴ命令により保護された６４Ｋ領域に適合させることが困難又は不可能となる場合がある。例えば、１６ビットのバス／デバイス／機能識別子（ＢＤＦ（登録商標））を使用して周辺デバイスを識別するＩＯＭＭＵは、最大で６５５３６台の周辺デバイスそれぞれの変換テーブルが必要となる場合がある。各デバイスは２バイト以上のメモリを必要とすることから、６４Ｋメモリのみを有するＴＢＯＯＴシーケンスは、周辺装置全てからのメモリアクセス操作を制限するようにＩＯＭＭＵを設定するための十分なリソースを持てない場合がある。
【００１５】
幾つかの実施形態によれば、ＩＯＭＭＵは、保護モードで動作するようにソフトウェアによって設定可能であってもよく、ＩＯＭＭＵは、著しい量の記憶容量を必要とすることなく、周辺デバイスによるメモリアクセスを無効にする。幾つかの実施形態では、ＩＯＭＭＵは、受け取った全てのメモリアクセス要求を、同一のデバイスから受け取った要求として扱うようＩＯＭＭＵに命令するように設定され得る、保護フラグを備えてもよい。例えば、ＩＯＭＭＵがＢＤＦ（登録商標）識別子を用いて複数のデバイスを識別する場合には、保護フラグが設定されたＩＯＭＭＵは、どのデバイスが要求を送信したかに関わらず、受け取った全てのＤＭＡ要求をＢＤＦ（登録商標）  ０から受け取った要求として扱ってもよい。デフォルトのＢＤＦ（登録商標）値（例えば０）に対応するＩＯＭＭＵデバイステーブルエントリは、ＩＯＭＭＵの任意の機能を用いてプログラミングされてもよく、任意の機能的サブセットに限定される必要はない。ＩＯＭＭＵは、単一のセットのテーブルを用いて、全てのメモリアクセス要求を変換してもよく、これはＢＤＦ（登録商標）  ０に対応する。従って、関連する全てのＩ／Ｏ変換テーブルは、単一のページに記憶されてもよく、幾つかの実施形態では、ページ内の最初の８〜１６バイトの後の任意のメモリが、ＩＯＭＭＵ以外の目的に使用され得る。
【００１６】
幾つかの実施形態では、メモリアクセスを阻止する一セットのテーブル（例えば、上記ＢＤＦ（登録商標）  ０に対応するテーブル）が、メモリに記憶されたテーブルとして実行されてもよい。しかしながら、種々の実施形態では、そのようなテーブル（又はテーブルに含まれる情報）の幾つか又は全ては、他の記憶メカニズムを使用して記憶されてもよい。例えば、幾つかの実施形態では、ＩＯＭＭＵは、一つ以上のレジスタに変換データを記憶してもよく、このレジスタは、メモリにマッピングされた入出力（ＭＭＩＯ）空間に現れてもよい。従って、変換情報のメモリ容量（ｆｏｏｔｐｒｉｎｔ）はゼロに低減され得る。以下で説明する実施形態の多くは、メモリを利用して、メモリアクセスを阻止する変換データを記憶するが、種々の実施形態では、変換データの一部又は全てが、例えばＩＯＭＭＵレジスタなどの他のメカニズムを使用して記憶されてもよいことが理解されるべきである。変換データという用語は、データが記憶されるシステムの場所に関わらず、メモリアドレス変換を特定するのに使用される任意のデータを指すように、本明細書では概ね使用されている。
【００１７】
保護モードで動作する場合にＩＯＭＭＵに必要な変換テーブルのサイズを縮小することによって、上述したメカニズムは、ＴＢＯＯＴシーケンスが、小規模なＩＯＭＭＵデータ構造（例えば、ページテーブル）を用いて、周辺デバイスによるアクセスからメモリ全てを保護することを可能にする。保護モードにおけるＩＯＭＭＵの保護下において、ＴＢＯＯＴシーケンスは、ＳＫＩＮＩＴの保護限界よりも規模の大きい、より複雑なＩＯＭＭＵデータ構造及び／又はページテーブルをセットアップしてもよい。そのような構造及びテーブルが作成されると、ソフトウェアは、保護フラグを外すことでＩＯＭＭＵを通常動作に戻すことができる。
【００１８】
図１は、幾つかの実施形態に係る、メモリアクセスパラメータ注入を実行するように構成されたＩＯＭＭＵを備えるコンピュータシステムのハイレベルビューを示すブロック図である。図に示す実施形態では、システム１０は、一つ以上のプロセッサ１２と、メモリ管理ユニット（ＭＭＵ１４）と、メモリコントローラ（ＭＣ１８）と、メモリ２０と、一つ以上の周辺Ｉ／Ｏデバイス２２と、ＩＯＭＭＵ２６とを備えている。ＭＭＵ１４は、一つ以上のトランスレーションルックアサイドバッファ（ＴＬＢ）１６備えており、周辺Ｉ／Ｏデバイス２２は、一つ以上のＩ／Ｏ  ＴＬＢ（ＩＯＴＬＢ）２４を備えている。図に示す実施形態によると、Ｉ/Ｏ  ＭＭＵ（ＩＯＭＭＵ）２６は、テーブルウォーカー２８と、キャッシュ３０と、制御レジスタ３２と、制御ロジック３４とを備えている。プロセッサ１２は、メモリコントローラ１８に接続されたＭＭＵ１４に接続されている。Ｉ／Ｏデバイス２２は、メモリコントローラ１８に接続されたＩＯＭＭＵ２６に接続されている。ＩＯＭＭＵ２６内では、テーブルウォーカー２８と、キャッシュ３０と、制御レジスタ３２と、制御部３４とは、相互に接続されている。
【００１９】
システム１０は、システムの上位機能を示しており、実際の物理的実装は任意の形態を取り得る。例えば、ＭＭＵ１４は各プロセッサ１２に統合されてもよい。メモリ２０が示されているが、メモリシステムは分散型メモリシステムであってもよく、幾つかの実施形態では、メモリアドレス空間は、物理的に分離したメモリコントローラに接続された、物理的に分離した複数のメモリにマッピングされている。ＩＯＭＭＵ２６は、Ｉ／Ｏソースのメモリ要求とメモリ２０との間のパスに沿って任意の場所に設置されてもよく、二つ以上のＩＯＭＭＵが存在し得る。さらに、ＩＯＭＭＵは、システムの様々なパーツの様々な位置に配置され得る。
【００２０】
プロセッサ１２は、任意の所望の命令セットアーキテクチャを実行する、任意のプロセッサハードウェアを備えてもよい。ある実施形態では、プロセッサ１２は、ｘ８６アーキテクチャ、より詳細にはＡＭＤ６４（登録商標）アーキテクチャを実行する。種々の実施形態では、プロセッサは、スーパーパイプライン及び／又はスーパースカラであってもよい。二つ以上のプロセッサ１２を備える実施形態では、離散的に実行されてもよいし、チップ多層プロセッサ（ＣＭＰ）及び／又はチップ多層スレッド（ＣＭＴ）として実行されてもよい。
【００２１】
メモリコントローラ１８は、メモリ２０と、システム１０の他の部分との間でインタフェースをとるために設計された任意の回路を備えてもよい。メモリ２０は、例えば、一つ以上のＲＡＭＢＵＳ  ＤＲＡＭ（ＲＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、ＤＤＲ  ＳＤＲＡＭ、スタティック型ＲＡＭなどの任意の半導体メモリを備えてもよい。メモリ２０は、システム内に分散されてもよく、従って、複数のメモリコントローラ１８が存在してもよい。
【００２２】
ＭＭＵ１４は、プロセッサ１２から供給されたメモリ要求のためのメモリ管理ユニットを備えてもよい。ＭＭＵは、トランスレーションルックアサイドバッファ（ＴＬＢ）１６とともに、テーブルウォーク機能性を備えてもよい。ＭＭＵ１４が変換を行う場合に、ＭＭＵ１４は、ＣＰＵ変換テーブル５０に対する変換メモリ要求（例えば、図１の破線矢印４６，４８として図示する）を生成してもよい。ＣＰＵ変換テーブル５０は、プロセッサ１２により実行される命令セットアーキテクチャで定義されるような変換データを記憶してもよい。
【００２３】
Ｉ／Ｏデバイス２２は、コンピュータシステム１０と他のデバイスとの通信を行い、コンピュータシステム１０のためのヒューマンインタフェースを提供し、ストレージ（例えば、ディスクドライブ、コンパクトディスク（ＣＤ）又はデジタルビデオディスク（ＤＶＤ）ドライブ、固体ストレージ等）を提供し、及び／又は、コンピュータシステム１０に強化機能性を提供する任意のデバイスを備えてもよい。例えば、Ｉ／Ｏデバイス２２は、一つ以上のネットワークインタフェースカードと、一つ以上の統合ネットワークインタフェース機能と、一つ以上のモデムと、一つ以上のビデオアクセラレータと、一つ以上のオーディオカード若しくは統合オーディオハードウェアと、一つ以上のハードディスクドライブ、フロッピー（登録商標）ディスクドライブ若しくはドライブコントローラと、例えばキーボード、マウス、タブレットなどのユーザ入力デバイスに接続するための一つ以上のハードウェアと、一つ以上のビデオ表示用ビデオコントローラと、一つ以上のプリンタインタフェース用ハードウェアと、例えば周辺コンポーネントインタフェース（ＰＣＩ）、ＰＣＩエクスプレス（ＰＣＩｅ）、ＰＣＩ−Ｘ、ＵＳＢ、ファイアーワイヤ、ＳＣＳＩ（小型コンピュータシステム用インタフェース）等の一つ以上の複数の周辺インタフェースのための一つ以上のブリッジと、一つ以上のサウンドカードと、例えば汎用インタフェースバス（ＧＰＩＢ）若しくはフィールドバスインタフェースカードなどの一つ以上の様々なデータ取得カードとを備えてもよい。「周辺デバイス」という用語は、幾つかのＩ／Ｏデバイスを説明するために使用されてもよい。
【００２４】
幾つかの例では、一つ以上のＩ／Ｏデバイス２２は、例えばＩＯＴＬＢ２４及び／又はＭＭＵなどの入出力トランスレーションルックアサイドバッファ（ＩＯＴＬＢ）を備えてもよい。こうしたＩＯＴＬＢは、ＩＯＭＭＵ２６の外部に存在することから、「リモートＩＯＴＬＢ」と呼ばれ得る。この場合、既に変換されたアドレスは、ＩＯＭＭＵ２６がメモリ要求の変換を再度試みることのない何らかの方法でマークされる。ある実施形態では、変換されたアドレスは、「予め変換されたもの（ｐｒｅｔｒａｎｓｌａｔｅｄ）」として単にマークされてもよい。
【００２５】
以下に説明するように、ＩＯＭＭＵ２６は、システム１０において容易に仮想化するための種々の特徴を備えてもよい。以下の説明では、（下層ハードウェアでの実行をスケジューリングする）仮想マシンを管理し、種々のシステムリソースへのアクセスを制御し、及び／又は、他の機能を提供する仮想マシンモニタ（ＶＭＭ）について言及する。ＶＭＭ及びハイパーバイザという用語は、本開示において交互に使用され得る。
【００２６】
説明する実施形態では、プロセッサ１２は、仮想環境でソフトウェアを実行するように構成されている。従って、図１は、ＶＭＭ１０６上で実行する三つの仮想マシン１００Ａ，１００Ｂ，１００Ｃ（すなわち、ＶＭゲスト１〜３）を示している。所定の実施形態における仮想マシンの数は、様々な時間で変更されてもよく、ユーザが仮想マシンを開始及び停止するまで、使用中に動的に変化してもよい。図に示す実施形態では、仮想マシン１００Ａは、一つ以上のゲストアプリケーション１０２と、サービスを実行及び提供し及び／又はアプリケーション１０２の実行を管理するように構成されたゲストオペレーティングシステム（ＯＳ）１０４とを備える。ＯＳ１０４は、システム１０の物理ハードウェアではなく、ＶＭＭ１０６によってＯＳのために作成された仮想マシンを制御するため、「ゲスト」ＯＳと呼ぶ。同様に、ＶＭ１００Ｂ及びＶＭ１００Ｃの各々は、一つ以上のゲストアプリケーション及びゲストＯＳを備え得る。
【００２７】
仮想マシンにおけるアプリケーションは、仮想マシンの仮想アドレス空間、すなわちゲスト仮想アドレス（ＧＶＡ）を使用する。仮想マシンのゲストＯＳは、ＩＯＭＭＵ２６の設定（例えばページテーブル）を管理して、ＩＯＭＭＵが仮想マシンのＧＶＡのゲスト物理アドレス（ＧＰＡ）へマッピングするのを可能にする。ＧＰＡは、同一の仮想マシンに固有である。ＶＭＭが介在することなくシステムのハードウェアで直接的に起動するのであれば、ＯＳ設定が生成する物理アドレスは、実際には、システム１０のシステム物理アドレス（ＳＰＡ）である。しかしながら、ゲストＯＳは仮想マシンで起動するために、ゲスト固有のＧＶＡから同一ゲスト固有のＧＰＡへ変換するための設定を提供するだけである。したがって、幾つかの実施形態では、仮想マシンモニタ（例えば、ＶＭＭ１０６）は、下層システムのＳＰＡに対応する種々のゲストマシンのＧＰＡをマッピングするために、ＩＯＭＭＵで設定を管理してもよい。従って、Ｉ／Ｏデバイス２２が、ゲスト１００ＡのＧＶＡを特定するメモリへのアクセス要求を行う場合には、ＩＯＭＭＵ２６は、ＶＭＭ１０６及びゲストＯＳ１０４からの設定を使用してＧＶＡをＳＰＡに変換し得る。
【００２８】
図１に示すように、Ｉ／Ｏデバイス２２からメモリ２０へのパスは、プロセッサ１２からメモリ２０へのパスと少なくとも部分的に分離している。具体的には、Ｉ／Ｏデバイス２２からメモリ２０へのパスは、ＭＭＵ１４を通らない代わりにＩＯＭＭＵ２６を通る。従って、ＭＭＵ１４は、Ｉ／Ｏデバイス２２から供給されたメモリ要求についてのメモリ管理を提供しなくてもよい。
【００２９】
一般的に、メモリ管理は、アドレス変換とメモリ保護とを提供してもよい。アドレス変換は、仮想アドレスを物理アドレスに変換する（例えば、上述したように、ＧＶＡをＳＰＡに変換する）。メモリ保護機能は、ある程度の粒度（例えば、ページ）でのメモリに対する読み出しアクセス及び／又は書き込みアクセスとともに、例えば、特権レベルの要件、キャッシュ可能性及びキャッシュ制御（例えば、ライトスルー又はライトバック）、コヒーレンス、非実行フラグ（ＮＸ）などの種々の他のメモリアクセスパラメータを制御してもよい。任意の一連のメモリ保護が種々の実施形態で実施されてもよい。幾つかの実施形態では、ＩＯＭＭＵ２６によって実行されたメモリ保護は、ＭＭＵ１４によって実行されたメモリ保護と少なくともある点において異なってもよい。ある実施形態では、ＩＯＭＭＵ２６によって実行されたメモリ保護は、ＩＯＭＭＵ２６及びＭＭＵ１４によって使用される変換データを記憶する変換テーブルが（考察を簡易にするために図１では別々に示す）共有され得るように、規定されてもよい。他の実施形態では、変換テーブルは、種々の内容に対し、ＩＯＭＭＵ２６及びＭＭＵ１４間で分離され、共有されなくてもよい。
【００３０】
Ｉ／Ｏデバイス２２は、直接的なメモリアクセス（ＤＭＡ）、アドレス変換サービス（ＡＴＳ）アクセス、ページ要求インタフェース（ＰＲＩ）アクセス、及び／又はメモリ２０にアクセスするための他の種類の操作などのメモリアクセス要求を発行するように構成されてもよい。幾つかの操作タイプは、さらにサブタイプに分けられる。例えば、ＤＭＡ操作は、読み出し操作、書き込み操作又は連結操作であり得る。しかしながら、ＤＭＡという用語は、Ｉ／Ｏデバイスから任意のメモリへのアクセス要求を指すように本明細書では概ね使用され得る。メモリアクセス操作は、一つ以上のプロセッサ１２上で実行するソフトウェアによって起動され得る。ソフトウェアは、Ｉ／Ｏデバイス２２を直接的又は間接的にプログラミングして、ＤＭＡ操作を行い得る。
【００３１】
ソフトウェアは、このソフトウェアが実行するアドレス空間に対応するアドレスを、Ｉ／Ｏデバイス２２に提供してもよい。例えば、プロセッサ１２上で実行するゲストアプリケーション（例えば、Ａｐｐ１０２）は、ＧＶＡをＩ／Ｏデバイス２２に提供してもよく、プロセッサ１２上で実行するゲストＯＳ（例えば、ＯＳ１０４）は、ＧＰＡをＩ／Ｏデバイス２２に提供してもよい。
【００３２】
Ｉ／Ｏデバイス２２がメモリアクセスを要求する場合には、ゲストアドレス（ＧＶＡ又はＧＰＡ）は、ＩＯＭＭＵ２６によって、対応するシステム物理アドレス（ＳＰＡ）に変換されてもよい。ＩＯＭＭＵは、メモリ２０へのアクセスのために、ＳＰＡをメモリコントローラ１８に提示してもよい。すなわち、ＩＯＭＭＵ２６は、Ｉ／Ｏデバイス２２により供給されたメモリ要求を修正して、当該要求において受信したアドレスをＳＰＡに変更（例えば、変換）し、その後、メモリ２０へアクセスするためにＳＰＡをメモリコントローラ１８に転送してもよい。
【００３３】
種々の実施形態では、ＩＯＭＭＵ２６は、Ｉ／Ｏデバイスから受信するアドレスの種類に応じて、一段変換、二段変換を提供し、又は変換しない場合もある。例えば、ＩＯＭＭＵ２６は、ＧＰＡの受信に応じて、ＧＰＡからＳＰＡ（一段）変換を提供してもよく、ＧＶＡの受信に応じて、ＧＶＡからＳＰＡ（二段）変換を提供してもよい。よって、ゲストアプリケーションは、メモリアクセスを要求する際に、ＧＶＡアドレスをＩ／Ｏデバイスに直接的に提供することによって、従来のＶＭＭの受け取り及び変換を不要にする。一段変換、二段変換又は変換無しが記載されているが、他の実施形態では、追加アドレス空間が使用され得ることが想定される。そのような実施形態では、追加アドレス空間に適合させるため、ＩＯＭＭＵ２６によって追加段階の変換（複数段階による変換）が行われてもよい。
【００３４】
図１に示すＩＯＭＭＵ２６は、所定のメモリ要求に対する変換を行うためのＩ／Ｏ変換テーブル３６を検索するテーブルウォーカー２８を備えてもよい。テーブルウォーカー２８は、メモリ要求を生成して、変換テーブル３６から変換データを読み出してもよい。変換テーブルの読み出しは、図１の破線矢印３８，４０で示されている。
【００３５】
より迅速な変換を促進するために、ＩＯＭＭＵ２６は、幾つかの変換データをキャッシュしてもよい。例えば、キャッシュ３０は、ＴＬＢに類似するキャッシュの形態であってもよく、ゲスト仮想ページ番号及びゲスト物理ページ番号をシステムの物理ページ番号及び対応する変換データにマッピングした過去の変換結果をキャッシュする。所定のメモリ要求に対する変換がキャッシュ３０内で検出されない場合には、テーブルウォーカー２８が呼び出されてもよい。種々の実施形態では、テーブルウォーカー２８は、ハードウェア若しくはマイクロコントローラ、又は他のプロセッサ及び対応する実行可能コード（例えば、ＩＯＭＭＵ２６の読取り専用メモリ（ＲＯＭ））で実現されてもよい。他のキャッシュは、ページテーブル若しくはその一部及び／又はデバイステーブル若しくはその一部をキャッシュするために、キャッシュ３０の一部として含まれてもよい。従って、ＩＯＭＭＵ２６は、メモリ２０に記憶された変換データから読み出され又は引き出された変換データを記憶するための一つ以上のメモリを備えてもよい。
【００３６】
制御ロジック３４は、キャッシュ３０にアクセスして、所定のメモリ要求に対する変換のヒット／ミスを検出するように構成されてもよく、テーブルウォーカー２８を呼び出してもよい。また、制御ロジック３４は、変換されたアドレスを用いて、Ｉ／Ｏデバイスからのメモリ要求を変更し、この要求を上流のメモリコントローラ１８に転送するように構成されてもよい。
【００３７】
制御ロジック３４は、制御レジスタ３２内にプログラミングされた、ＩＯＭＭＵ２６の他の種々の機能を制御してもよい。例えば、制御レジスタ３２は、メモリ管理ソフトウェアのコマンドキュー４２となるメモリ領域を定義して、制御コマンドをＩＯＭＭＵ２６に伝えてもよい。制御ロジック３４は、コマンドキュー４２から制御コマンドを読み出し、当該制御コマンドを実行するように構成されてもよい。幾つかの実施形態では、制御レジスタ３２は、イベントログバッファ４４となるメモリの他の領域を定義してもよい。制御ロジック３４は、種々のイベントを検知して、当該イベントをイベントログバッファ４４に書き込んでもよい。イベントは、ＩＯＭＭＵ２６の変換及び／又は他の機能に関して制御ロジック３４によって検出された種々のエラーを含んでもよい。また、制御ロジック３４は、ＩＯＭＭＵ２６の他の特徴を実装してもよい。
【００３８】
幾つかの実施形態では、制御レジスタ３２は、ソフトウェアによって用いられ、ＩＯＭＭＵを保護モードにし得る一つ以上の保護フラグ及び／又はフィールドを備えてもよい。本明細書で説明する実施形態の多くは、ＩＯＭＭＵを保護モードに移行するようにソフトウェアによって設定され、ビットがオフにされるとＩＯＭＭＵを通常操作に戻し得る保護フラグ（例えば、１ビット）を用いている。しかしながら、種々の他の実施形態では、フラグ及び／又はフィールドの組み合わせによって、同様の機能が実現されてもよい。
【００３９】
本明細書で説明するように、図２は、ＩＯＭＭＵが提供するメモリ保護を実行するように構成されたシステムのブロック図である。幾つかの実施形態では、システム２００は、図１のＩ／Ｏデバイス２２と、ＩＯＭＭＵ２６と、メモリ２０とに対応してもよい。類似点が分かり易くなるように、システム２００の幾つかのコンポーネントは、システム１０のうち類似するコンポーネントに対応する番号を使用してラベル付けされている。しかしながら、そのようなコンポーネントにより提供される機能は、特定の実施詳細に応じて二つのシステムによって異なってもよい。
【００４０】
図に示す実施形態によると、システム２００は、図１における一つのＩ／Ｏデバイス２２に対応し得るＩ／Ｏデバイス２０５を備える。Ｉ／Ｏデバイス２０５は、ＩＯＭＭＵ２６に対するメモリアクセスを要求（例えばＤＭＡ）するように構成され得る。上述したように、周辺デバイスからメモリへのアクセス要求は、特定のメモリへのアクセス要求を生じさせた特定のデバイスを示すＢＤＦ（登録商標）番号などのデバイス識別子を含み得る。例えば、デバイス２０５からメモリへのアクセス要求は、デバイスＩＤ２０７を用いてタグ付けされる。
【００４１】
ＩＯＭＭＵ２６は、メモリアクセス要求を作動させ、メモリアドレス変換を行い、メモリ保護を実施し、及び／又は、ＩＯＭＭＵ２６の他の種々の機能を実行するように構成され得る制御ロジック３４を備える。制御ロジック３２の機能は、種々の制御レジスタ３２の各々に記憶された値によって決まり得る。
【００４２】
メモリ変換を行うために、ＩＯＭＭＵ２６は、メモリ２０に記憶された種々の変換テーブルへのアクセスを要求してもよい。上記テーブルは、デバイステーブル２２５であってよく、メモリアクセス要求を行うことが可能なＩ／Ｏデバイスごとのエントリを含んでもよい。ＩＯＭＭＵ２６は、デバイステーブルが記憶されたメモリ２０のメモリアドレスを記憶し得るデバイステーブル基準レジスタ２１５に記憶されたメモリアドレスを使用して、デバイステーブルを配置するように構成されてもよい。従って、メモリアドレスを変換する場合には、ＩＯＭＭＵは、基準レジスタ２１５からテーブルのメモリアドレスを読み出すことによって、デバイステーブルを配置し得る。
【００４３】
幾つかの実施形態では、（例えば、２２５などの）デバイステーブルは、メモリへのアクセス要求を行うことが可能なＩ／Ｏデバイスごとのデバイステーブルエントリ（ＤＴＥ）を備えてもよい。図に示す実施形態では、デバイステーブル２２５は、デバイステーブルエントリ（ＤＴＥ）２３０を備える。一般的な操作（例えば、非保護モード）では、各ＤＴＥはそれぞれの周辺デバイスに対応する。例えば、各ＤＴＥはデバイスに対応するそれぞれのデバイス識別子（例えば、デバイスＩＤ２０７など）に対応し得る。ＤＴＥは、上記デバイスからのメモリアクセス要求のメモリアドレスを変換するのに使用可能なポインタ及び／又は他のデータ構造を含み得る。
【００４４】
デバイステーブル２２５は、ＢＤＦ（登録商標）番号などのデバイス識別子によって索引付けられてもよい。従って、ＩＯＭＭＵの制御ロジックは、所定のメモリアクセス要求の一部として受信したデバイス識別子を使用して、要求元のデバイスに対応するＤＴＥを配置し得る。例えば、図に示す実施形態では、Ｉ／Ｏデバイス２０５は、ＩＯＭＭＵと通信する際にデバイスＩＤ２０７を備え得る。Ｉ／Ｏデバイス２０５から受信したメッセージに応じて、ＩＯＭＭＵは、デバイスＩＤ２０７を使用して、デバイス毎のＤＴＥ２３５のうち対応するＤＴＥをデバイステーブル２２５に配置し得る。
【００４５】
異なる実施形態では、デバイス識別子は、様々な方法で規定されてもよく、デバイスが設けられた周辺インタコネクタに基づいてもよい。例えば、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）デバイスは、バス番号、デバイス番号及び機能番号（ＢＤＦ（登録商標））からデバイスＩＤを形成してもよく、一方で、ハイパートランスポート（ＨＴ）デバイスは、バス番号とユニットＩＤとを使用してデバイスＩＤを形成してもよい。
【００４６】
各ＤＴＥは、ＩＯＭＭＵが対応デバイスからのメモリアドレスを変換するのに使用可能な変換テーブル（例えば、テーブル２４０）のセットに対する一つ以上のポインタを備え得る。ポインタ及び変換テーブル２４０の特定の数及び種類は実施形態によって異なる場合があり、複数段階の変換を実行する種々の変換及び／又はページテーブルを備え得る。例えば、ポインタは、変換テーブル２４０における検索変換のための開始点であるページテーブルを指してもよい。開始ページテーブルは、階層的な方法で、他のページテーブルに対するポインタを備えてもよい。幾つかのテーブルは、処理アドレス空間識別子（ＰＡＳＩＤ）などの処理識別子によって索引付けられてもよく、他のテーブルは、変換されるアドレス（例えば、ＧＶＡ又はＧＰＡ）の種々のビットを使用して索引付けられてもよい。従って、変換テーブル２４０は、一段又は二段の種々の変換を支援し得る。
【００４７】
幾つかの実施形態では、ＤＴＥ２３０は、制限ＤＴＥを備えてもよい。制限ＤＴＥは、制限ＤＴＥにマッピングする任意のデバイスからのメモリアクセス操作を許可しないように構成されてもよい。例えば、幾つかの実施形態では、制限ＤＴＥは、対応するデバイスによるメモリアクセスを明確に禁止する種々の制御フラグを備え得る。他の実施形態では、制限ＤＴＥ又は制限ＤＴＥに示されたメモリテーブル２４０は、ＤＴＥに対応するデバイスが、メモリのうち、信頼されるブートシーケンスに脅威を与えないごくわずかな部分又はゼロサイズの部分にのみアクセスし得ることを示してもよい。制限ＤＴＥにマッピングするデバイスのメモリアクセスを禁止する他の種々のメカニズムが可能である。
【００４８】
幾つかの実施形態では、（２２０などの）ソフトウェアは、保護モードで実行するようにＩＯＭＭＵを構成してもよく、ＩＯＭＭＵは、全てのメモリアクセス要求を制限ＤＴＥ２３０にマッピングし得る。種々の実施形態では、ソフトウェア２２０は、オペレーティングシステム、仮想オペレーティングシステム、仮想マシンモニタ、ＴＢＯＯＴシーケンス及び／又は他のソフトウェアに対応し得る。図２では、ソフトウェア２２０は、保護フラグ２１０を制御レジスタ３２に設定することによって保護モードで実行するように、ＩＯＭＭＵ２６を構成してもよい。
【００４９】
保護モードで実行する間、ＩＯＭＭＵ２６は、あらゆるメモリアクセス要求を制限ＤＴＥにマッピングしてもよく、これにより、周辺デバイスによるメモリアクセスを効果的に禁止する。あらゆるメモリアクセス要求が同一のＤＴＥ（すなわち制限ＤＴＥ）にマッピングされるため、ＩＯＭＭＵが保護モードで実行する間、デバイステーブル２２５は、制限ＤＴＥを含めることのみを要する。それ故、信頼されたブート初期化中にデバイステーブルのデータ構造を記憶するのに必要なメモリ容量は、少量である。例えば、幾つかの実施形態では、ＴＢＯＯＴシーケンスは、一つのエントリである制限ＤＴＥのみを含むデバイステーブル２２５を作成してもよい。そのようなテーブルは、ＤＴＥ２３０に他のデバイス毎のＤＴＥを含める必要がないので、テーブルを比較的小さく、ＳＫＩＮＩＴ命令によって作成された、保護された６４Ｋのメモリ領域内に適合することができる。制限ＤＴＥが作成されると、ＴＢＯＯＴシーケンスは、保護フラグ２１０を設定して、周辺装置によるメモリアクセスを全て無効にしてもよい。
【００５０】
図３は、幾つかの実施形態による、保護モードを実行するように構成されたＩＯＭＭＵの操作方法を示すフロー図である。図３の方法は、図１のＩＯＭＭＵ２６などのＩＯＭＭＵによって実行される。
【００５１】
３０５に示すように、ＩＯＭＭＵ２６がＩ／Ｏデバイスからメモリアクセス要求を受信すると、方法３００が開始する。種々の状況では、要求は、メモリデータの読み出し及び／又は書き込みのためのＤＭＡ要求に対応してもよい。要求は、少なくとも一つのメモリアドレス（例えば、データを読み出し及び／又は書き込みするためのアドレス）を備えてもよく、メモリアドレスは、仮想アドレス空間で特定されてもよい。また、要求は、ＢＤＦ（登録商標）番号などのデバイス識別子を含んでもよい。
【００５２】
３１０にて、ＩＯＭＭＵは、保護モードで実行するか否かを判断する。幾つかの実施形態では、ＩＯＭＭＵは、保護フラグ２１０（図２に図示）などの一つ以上の保護フラグを検査して、３１０の判断を行ってもよい。例えば、保護フラグ２１０がセットされている場合には、ＩＯＭＭＵが保護モードにあると判断してもよい。
【００５３】
ＩＯＭＭＵが保護モードであると判断した場合には、３１０からの肯定的な出口で示されるように、要求のデバイス識別子をデフォルト値に設定する。例えば、３１５にて、ＩＯＭＭＵは、ＢＤＦ（登録商標）値を例えば０などのデフォルト値に設定する。他の実施形態では、様々なデフォルト値が使用されてもよく、及び／又は、デバイスを識別するためにＢＤＦ（登録商標）値以外の識別子が使用されてもよい。
【００５４】
３２０にて、ＩＯＭＭＵは、要求に関連付けられたＢＤＦ（登録商標）番号に対応するＤＴＥを読み出してもよい。３１０からの否定的な出口に示されるように、ＩＯＭＭＵが保護モードで実行していない場合には、ＢＤＦ（登録商標）番号は、ＤＭＡ要求を行うＩ／Ｏデバイスに対応してもよい。この場合、ＩＯＭＭＵは、（３２０にて）Ｉ／Ｏデバイスに対応するＤＴＥを識別及び呼び出してもよい。しかしながら、（３１０からの肯定的な出口で示されるように）ＩＯＭＭＵが保護モードで実行している場合には、ＢＤＦ（登録商標）番号は、３１５にてデフォルト値（例えば０）に設定されている。それ故、そのような場合、ＩＯＭＭＵは、（３２０で）制限ＤＴＥを識別し及び呼び出す。
【００５５】
３２５にて、ＩＯＭＭＵは、３２０からのＤＴＥを使用して、３０５におけるＤＭＡ要求が許可されるか否かを決定してもよい。上述したように、制限ＤＴＥは、制限ＤＴＥにマッピングするデバイスからのメモリアクセス操作を許可しないように構成されてもよい。異なる実施形態では、制限ＤＴＥは、メモリアクセスを明確に禁止する制御フラグを備えてもよく、デバイスを示す変換テーブルへのポインタは、メモリの少量若しくはゼロサイズの部分、及び／又は信頼されたブート処理をＤＭＡアクセスが妨害するのを禁止する他のメカニズムにのみアクセスしてもよい。
【００５６】
ＩＯＭＭＵは、ＤＭＡ操作が許可されると判断した場合には、３２５からの肯定的な出口で示されるように、３３０にて示すようにＤＭＡの一つ以上のアドレスを変換し、３３５にて示すようにＤＭＡ操作を行う。上述したように、ＤＭＡ要求で検出されたアドレスを変換することは、Ｉ／Ｏ変換テーブル３６及び／又はテーブル２４０などの一つ以上の変換テーブルを分析することを含んでもよい。
【００５７】
上述したように、幾つかの実施形態では、ＩＯＭＭＵは、保護モードを実行する変換データを、一つ以上のメモリベースの変換テーブルではなく、ハードウェアレジスタに記憶してもよい。保護モードを実行するために、ＩＯＭＭＵは、（３１５及び／又は３２０など）メモリではなくハードウェアレジスタから変換データを読み出すことによって、（３１０からの肯定的な出口で示されるように）保護モードであると判断し得る。レジスタから変換データを読み出した後、方法は、３２５にて再開してもよい。
【００５８】
３２５からの否定的な出口で示されるように、ＤＭＡ操作が許可されないと判断した場合には、ＩＯＭＭＵは、３４０に示すようにメモリアクセス操作を拒否してもよい。種々の実施形態では、上記操作の拒否は、様々な方法で行われ得る。例えば、幾つかの実施形態では、メモリアクセス要求の拒否は、要求元のデバイスに対してエラーコードを返すことを含み得る。種々の実施形態では、ＩＯＭＭＵは、周辺デバイスに種々のコードを返すか、又は全く返さないなどの他の行為を行い得る。
【００５９】
図４は、本明細書で説明するように、幾つかの実施形態による、保護モードを実行可能なＩＯＭＭＵを使用して、信頼されたブート手順を開始するための方法を示すフロー図である。種々の実施形態では、方法４００は、オペレーティングシステム、ゲストオペレーティングシステム、仮想マシン、ＴＢＯＯＴシーケンス及び／又は他のソフトウェアなどのソフトウェアによって行われてもよい。
【００６０】
方法４００は、４０５に示すように、メモリの一部を保護することによって開始する。例えば、ソフトウェアは、上述したように、６４Ｋメモリを保護するように構成されたＳＫＩＮＩＴ命令などの特殊目的の命令を実行することによって、メモリの一部を保護してもよい。
【００６１】
４１０にて、ソフトウェアは、ＴＢＯＯＴシーケンスを、４０５にて保護されたメモリの一部にロードする。４１５にて、ＴＢＯＯＴシーケンスは、（例えば、２２５などの）メモリの保護部分にデバイステーブルを作成し、制限ＤＴＥをデバイステーブルに含める。制限ＤＴＥは、デバイステーブル内のＤＴＥのみであってもよく、ＤＴＥにマッピングするデバイスがＤＭＡアクセスするのを防止する一つ以上のフラグ、フィールド及び／又はポインタを備えてもよい。
【００６２】
４２０にて、ソフトウェアは、ＩＯＭＭＵの保護フラグを設定する。保護フラグは、システム２００の保護フラグ２１０に対応してもよい。保護フラグを設定することは、保護モードの実行を開始するようにＩＯＭＭＵに命令することであってもよい。保護モードで実行する間、ＩＯＭＭＵは、どのデバイスが実際に要求を送信したかに関わらず、ＩＯＭＭＵが受信したあらゆるメモリアクセス要求に対して、デフォルトのデバイス識別子を取り得る。幾つかの実施形態では、デフォルトのデバイス識別子は、４１５にて作成された制限ＤＴＥに対応してもよい。このような実施形態では、制限ＤＴＥは、制限ＤＴＥにマッピングする周辺デバイスによるメモリアクセスを防止するように構成されており、保護モードで実行するＩＯＭＭＵは、全てのデバイスを制限ＤＴＥにマッピングすることから、ＩＯＭＭＵが保護モードである間、どのデバイスもＤＭＡ操作を行わない。
【００６３】
４２５にて、ＴＢＯＯＴシーケンス又はＴＢＯＯＴシーケンスによってロードされた他のソフトウェアなどのソフトウェアは、種々の周辺デバイスによるＤＭＡアクセスを規制するように構成された追加の変換テーブルを構築してもよい。例えば、４２５にて、ソフトウェアは、追加のＤＴＥをデバイステーブルに作成してもよい。追加のＤＴＥの各々は、それぞれの周辺デバイスに対応してもよく、それぞれのデバイスからのＤＭＡ操作のアドレスを変換するように構成された一つ以上の変換テーブルのためのポインタを備えてもよい。４２５にて構築された変換テーブルは、対応する周辺デバイスによる、メモリの信頼された種々の部分へのアクセスを無効にする規制を備えてもよい。
【００６４】
ソフトウェアは、４２５に示すように周辺装置からメモリへのＤＭＡアクセスを制御するように構成された変換テーブルを構築すると、４３０に示すように保護フラグをオフ（ｕｎｓｅｔ）してもよい。保護フラグがオフにされると、ＩＯＭＭＵは、非保護モードでの実行に戻ってもよい。非保護モードで実行する際、ＩＯＭＭＵは、要求がタグ付けされたデバイス識別子（すなわち、要求元のデバイスの識別子）を特定し、特定したデバイス識別子に対応する一つ以上の変換テーブル（例えば、４２５で構築された変換テーブル）を配置し、配置されたテーブルを使用して、メモリアクセス要求内で特定された一つ以上の複数のメモリアドレスを変換することによって、受け取ったメモリアクセス要求を処理してもよい。
【００６５】
図５は、本明細書で説明するように、幾つかの実施形態による、メモリアクセスパラメータ注入を行うように構成されたコンピュータシステムを示すブロック図である。コンピュータシステム５００は、限定されるものではないが、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ若しくはノートブックコンピュータ、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、コンシューマデバイス、アプリケーションサーバ、ストレージデバイス、スイッチ、モデム、ルータなどの周辺デバイス、又は一般的な任意の種類のコンピューティングデバイスを含む、種々の任意の種類のデバイスに対応し得る。
【００６６】
コンピュータシステム５００は、複数の物理及び／又は論理コアを備え得る一つ以上のプロセッサ５６０を備えてもよい。何れかのプロセッサ５６０は、図１のプロセッサ１２に対応してもよく、ＶＭＭ及び／又は複数のゲストオペレーティングシステムを実行してもよい。また、コンピュータシステム５００は、図１のＩ／Ｏデバイス２２に対応し得る一つ以上の周辺デバイス５５０と、本明細書で説明したように、図１のＩＯＭＭＵ２６に対応し得るＩＯＭＭＵデバイス５５５とを備えてもよい。
【００６７】
図に示す実施形態によれば、コンピュータシステム５００は、一つ以上のプロセッサ５６０などの複数の処理コア間で共有され得る一つ以上の共有メモリ５１０（例えば、一つ以上のキャッシュ、ＳＲＡＭ、ＤＲＡＭ、積層メモリ、ＲＤＲＡＭ、ＥＤＯ  ＲＡＭ、ＤＤＲ  ５  ＲＡＭ、ＳＤＲＡＭ、Ｒａｍｂｕｓ  ＲＡＭ、ＥＥＰＲＯＭなど）を備えてもよい。幾つかの実施形態では、様々なプロセッサ５６０は、様々な待ち時間及び／又は帯域特性で共有メモリ５１０にアクセスするように構成されてもよい。メモリ５１０の一部又は全ては、図１のメモリ２０に対応してもよい。
【００６８】
一つ以上のプロセッサ５６０と、周辺デバイス５５０と、共有メモリ５１０とは、相互接続５４０及び相互接続５４１を介して連結されてもよい。種々の実施形態では、システムは、より少ないコンポーネントを備えてもよいし、図５に示されない追加のコンポーネントを備えてもよい。さらに、図５に示す様々なコンポーネントは、追加のコンポーネントに組み込まれてもよいし、追加のコンポーネント内で分離されてもよい。
【００６９】
幾つかの実施形態では、共有メモリ５１０は、例えばプラットフォームネイティブバイナリ、Ｊａｖａ（登録商標）バイトコードなどの任意の解釈言語、例えばＣ／Ｃ＋＋、Ｊａｖａ（登録商標）などの他の任意の言語、又はそれらの任意の組み合わせで符号化され得るプログラム命令５２０を記憶してもよい。プログラム命令５２０は、ＶＭＭ５２８、任意数の仮想マシン、ＴＢＯＯＴシーケンス５２６、任意数のオペレーティングシステム５２４（ゲスト型又は従来型）、ＯＳ５２４上で実行するように構成された任意数のアプリケーション５２２（ゲスト型又は従来型）などのソフトウェアを実行するためのプログラム命令を備えている。ソフトウェア５２２〜５２８のうち何れかは、単一又は複数のスレッドであってよい。種々の実施形態では、本明細書で説明したように、ＯＳ５２４及び／又はＶＭＭ５２８は、保護フラグ５５７をＩＯＭＭＵ５５５に設定して、ＩＯＭＭＵ５５５を保護モードで実行させてもよい。
【００７０】
図に示す実施形態によれば、共有メモリ５１０はデータ構造５３０を備え、データ構造５３０は、ＩＯＭＭＵ５５５を介して各プロセッサ５６０及び／又は各周辺デバイス５５０によりアクセスされ得る。データ構造５３０は、図３の３２５及び図１の３６などの種々のＩ／Ｏ変換テーブルを備えてもよい。各プロセッサ５６０は、共有メモリ５１０の種々のコンポーネントをローカルキャッシュにキャッシュしてもよく、キャッシュコヒーレンスプロトコルに従ってメッセージを交換することによって、これらのキャッシュにデータを統合してもよい。
【００７１】
ソフトウェア５２２〜５２８を実行するために使用されるプログラムなどのプログラム命令５２０は、コンピュータ可読記憶媒体に記憶されてもよい。コンピュータ可読記憶媒体は、機械（例えば、コンピュータ）が読み取り可能な形式（例えば、ソフトウェア、処理アプリケーション）に情報を記憶する任意の仕組みを備え得る。コンピュータ可読記憶媒体は、限定されるものではないが、磁気記憶媒体（例えば、フロッピー（登録商標）ディスク）、光学記憶媒体（例えば、ＣＤ−ＲＯＭ）、光磁気記憶媒体、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能メモリ（例えば、ＥＰＲＯＭ及びＥＥＰＲＯＭ）、フラッシュメモリ、又はプログラム命令を記憶するのに好適な電気若しくは他の種類の媒体を備え得る。
【００７２】
上述したように、幾つかの実施形態では、コンピュータ可読記憶媒体は、プログラムにより読み込まれた命令を記憶するために使用されてもよく、一つ以上のプロセッサ５５０を備えるハードウェアを直接的又は間接的に組み立てるために使用され得る。例えば、命令は、Ｖｅｒｉｌｏｇ又はＶＨＤＬなどの上位設計言語（ＨＤＬ）でハードウェア機能の行動レベル又はレジスタトランスファレベルを記述する一つ以上のデータ構造を記述し得る。記述は、ネットリストを生成する記述を合成し得る合成ツールにより読み出される。ネットリストは、プロセッサ５００の機能を表す（例えば、合成ライブラリで規定される）一式のゲートを備え得る。次に、ネットリストは、マスクがかけられた幾何学的形態を記述し得るデータセットを生成するために設置及び送信される。次に、マスクは、半導体回路又はプロセッサ５０及び／又は５５０に対応する回路を製造する種々の半導体製造工程で使用され得る。代替的に、データベースは、所望の（合成ライブラリを有する、若しくは有さない）ネットリスト又はデータセットであり得る。
【００７３】
具体的な実施形態を先に説明したが、特定の特徴に対し単一の実施形態が説明されたとしても、これらの実施形態は本開示の範囲を限定することを意図するものではない。本開示で提供される特徴の例は、特に明記しない限り、限定的ではなく例示的であることを意図する。上記説明は、本開示の利益を有する当業者には明白であろうそのような代替、変更及び均等を包含することを意図する。
【００７４】
本開示の範囲は、本明細書で（明確的若しくは黙示的に）開示した任意の特徴及び特徴の組合せ、又はその任意の一般化を含み、いずれにせよ、本明細書で取り組んだ問題の何れか又は全てを軽減させる。従って、そのような特徴の任意の組合せに対し、本出願（又は本出願の優先権を主張する出願）の手続過程において新規の請求の範囲が策定され得る。特に、添付の特許請求の範囲に対し、従属請求項から得られる特徴は独立請求項の特徴と組み合わされてもよく、従属請求項それぞれの特徴は任意の適切な方法で組み合わされてもよく、添付の特許請求の範囲に列挙される特定の組合せにおいてのみ組み合わされるものではない。
【図１】
0005690024.tif 000002
【図２】
0005690024.tif 000003
【図３】
0005690024.tif 000004
【図４】
0005690024.tif 000005
【図５】
0005690024.tif 000006