(57)【特許請求の範囲】
【請求項１】
バスに接続された１つ以上のデバイスからパケットを受信し前記１つ以上のデバイスにパケットを渡すスイッチを備え、前記スイッチと前記１つ以上のデバイスの各々との間における前記バス上にコンポーネントは存在しておらず、
前記スイッチに組込まれ仮想アドレスから物理アドレスへのマッピングを格納するためのメモリと、
前記スイッチに組込まれ前記スイッチによって実行可能な命令を格納する非一時的なコンピュータ読取可能な記憶媒体とを備え、前記命令は実行されると前記スイッチに複数の動作を実行させ、前記複数の動作は、
前記スイッチが、前記バスによって前記スイッチに接続されているデバイスのためのアドレス変換要求に対する応答を受信することを含み、前記応答は、仮想アドレスから物理アドレスへのマッピングを含み、前記複数の動作は、
前記デバイスのための前記アドレス変換要求に対する前記応答を受信したことに応じて、前記仮想アドレスから前記物理アドレスへの前記マッピングを前記メモリに格納することと、
特定の物理アドレスを含むメモリアクセス要求を前記デバイスから受信することと、
前記特定の物理アドレスは前記メモリに格納されていると判断することと、
前記特定の物理アドレスは前記メモリに格納されていると判断したことに応じて、前記メモリアクセス要求をサービスのために別のデバイスに転送することとを含む、システム。
【請求項２】
前記スイッチに組込まれＩＯＭＭＵメモリを含む入出力メモリ管理ユニット（ＩＯＭＭＵ）を備え、
前記メモリは前記ＩＯＭＭＵメモリを含み、
前記スイッチが、前記デバイスのためのアドレス変換要求に対する応答を受信することは、前記スイッチが、前記デバイスのためのページテーブルの一部を受信することを含み、
前記仮想アドレスから前記物理アドレスへの前記マッピングを前記メモリに格納することは、前記ページテーブルの前記一部を前記ＩＯＭＭＵに格納することを含む、請求項１に記載のシステム。
【請求項３】
前記メモリは変換ルックアサイドバッファ（ＴＬＢ）を含み、
前記仮想アドレスから前記物理アドレスへの前記マッピングを前記メモリに格納することは、前記仮想アドレスから前記物理アドレスへの前記マッピングを前記ＴＬＢに格納することを含む、請求項１に記載のシステム。
【請求項４】
前記スイッチのための予め定められた数のポートを備え、前記ポートは各々、特定のデバイスに対応し、前記スイッチは、前記特定のデバイスに対して１つのＴＬＢを含む、請求項３に記載のシステム。
【請求項５】
前記複数の動作は、
前記デバイスのための前記アドレス変換要求に対する前記応答を受信したことに応じて、前記ＴＬＢは空の場所を含まないと判断することと、
前記ＴＬＢ内の場所からエントリを削除することと、
前記ＴＬＢ内の前記場所に、前記仮想アドレスを前記物理アドレスにマッピングする新たなエントリを格納することとを含む、請求項３に記載のシステム。
【請求項６】
前記複数の動作は、
仮想アドレスから物理アドレスへのマッピングを前記デバイスが前記デバイスのＴＬＢに現在格納していることを前記デバイスに固有の設定が示すと判断することと、
仮想アドレスから物理アドレスへのマッピングを前記デバイスが前記デバイスのＴＬＢに現在格納していることを前記デバイスに固有の設定が示すと判断したことに応じて、前記デバイスのＴＬＢからエントリを削除することを前記デバイスに指示するメッセージを前記デバイスに送信することと、
仮想アドレスから物理アドレスへのマッピングを前記デバイスが前記デバイスのＴＬＢに現在格納していることを前記デバイスに固有の設定が示すと判断したことに応じて、前記仮想アドレスから前記物理アドレスへの前記マッピングを前記デバイスに与えることとを含む、請求項３に記載のシステム。
【請求項７】
前記複数の動作は、前記デバイスが前記デバイスのＴＬＢから前記エントリを削除したという確認を、前記デバイスから受信することを含み、前記仮想アドレスから前記物理アドレスへの前記マッピングを前記デバイスに与えることは、前記デバイスが前記デバイスのＴＬＢから前記エントリを削除したという確認を受信したことに応じて、前記仮想アドレスから前記物理アドレスへの前記マッピングを前記デバイスに与えることを含む、請求項６に記載のシステム。
【請求項８】
前記スイッチは、前記デバイスを含む２つ以上のデバイスからパケットを受信し前記２つ以上のデバイスにパケットを渡し、前記２つ以上のデバイスは各々バスに接続されており、前記スイッチと前記２つ以上のデバイス各々との間における前記バス上にコンポーネントは存在しておらず、
前記メモリは、前記デバイスに固有のメモリであり、前記バスによって前記スイッチに接続され前記２つ以上のデバイスに含まれるその他のデバイスのための仮想アドレスから物理アドレスへのマッピングを含まず、
前記システムは、１つ以上の追加のメモリを備え、前記１つ以上の追加のメモリは各々、
ａ）前記デバイス以外の前記２つ以上のデバイスのうちの特定のデバイスに固有であり、
ｂ）前記バスによって前記スイッチに接続され前記２つ以上のデバイスに含まれるその他のデバイスのための仮想アドレスから物理アドレスへのマッピングを含まない、請求項１に記載のシステム。
【請求項９】
前記スイッチに組込まれている１つ以上の追加のメモリを備え、前記追加のメモリ各々と、特定のデバイスに固有の前記メモリとは、前記バスによって前記スイッチに接続されており、
前記特定の物理アドレスが前記メモリに格納されていると判断することは、
前記スイッチにおける特定のポートが前記メモリアクセス要求を受信したと判断することと、
前記メモリと前記追加のメモリとを含む群から、前記特定のポートを用いて前記デバイスのための前記メモリを選択することと、
前記特定のポートを用いて前記デバイスのための前記メモリを選択したことに応じて、前記特定の物理アドレスが前記メモリに格納されていると判断することとを含む、請求項１に記載のシステム。
【請求項１０】
中央処理装置と、
キャッシュとを備え、
前記デバイスのためのアドレス変換要求に対する応答を受信することは、前記仮想アドレスから前記物理アドレスへの前記マッピングを前記キャッシュから受信することを含み、
前記メモリアクセス要求をサービスのために別のデバイスに転送することは、前記メモリアクセス要求を前記中央処理装置に転送することを含む、請求項１に記載のシステム。
【請求項１１】
第２のバス上のコントローラを備え、前記コントローラは、前記第２のバスを介して、前記スイッチを、前記中央処理装置および前記キャッシュに接続し、前記スイッチと前記中央処理装置および前記キャッシュとの間でやり取りされる応答および要求を、前記第２のバスを用いてルーティングする、請求項１０に記載のシステム。
【請求項１２】
前記コントローラはルートコンプレックスを含む、請求項１１に記載のシステム。
【請求項１３】
前記スイッチを含む複数のスイッチと、
第２のバス上のコントローラとを備え、前記コントローラは、前記第２のバスを介して、前記複数のスイッチ各々を、前記中央処理装置および前記キャッシュに接続し、前記複数のスイッチ各々と前記中央処理装置および前記キャッシュとの間でやり取りされる応答および要求を、前記第２のバスを用いてルーティングする、請求項１０に記載のシステム。
【請求項１４】
マザーボードと、
前記マザーボードに組込まれている前記バスとを備え、前記マザーボードに対し、前記スイッチは、ソースデバイスからの要求を宛先デバイスにルーティングすることにより、周辺装置が前記マザーボードに接続することを可能にするように構成されている、請求項１に記載のシステム。
【請求項１５】
バスに接続された１つ以上のデバイスからパケットを受信し前記１つ以上のデバイスにパケットを渡すスイッチを備え、前記スイッチと前記１つ以上のデバイス各々との間における前記バス上にコンポーネントは存在しておらず、
前記スイッチに組込まれ仮想アドレスから物理アドレスへのマッピングを格納するためのメモリと、
前記スイッチに組込まれ前記スイッチによって実行可能な命令を格納する非一時的なコンピュータ読取可能な記憶媒体とを備え、前記命令は実行されると前記スイッチに複数の動作を実行させ、前記複数の動作は、
前記スイッチが、前記バスによって前記スイッチに接続されているデバイスのためのアドレス変換要求に対する応答を受信することを含み、前記応答は、仮想アドレスから物理アドレスへのマッピングを含み、
前記デバイスのための前記アドレス変換要求に対する前記応答を受信したことに応じて、前記仮想アドレスから前記物理アドレスへの前記マッピングを前記メモリに格納することと、
特定の物理アドレスを含むメモリアクセス要求を前記デバイスから受信することと、
前記仮想アドレスから前記物理アドレスへの前記マッピングを含む前記メモリからのデータを用いて、前記デバイスは前記特定の物理アドレスによって特定される記憶場所にアクセスすることを許可されないと判断することと、
前記デバイスは前記特定の物理アドレスによって特定される記憶場所にアクセスすることを許可されないと判断したことに応じて、前記メモリアクセス要求を破棄することと、
前記デバイスは前記特定の物理アドレスによって特定される記憶場所にアクセスすることを許可されないと判断したことに応じて、前記デバイスをリセットすることとを含む、システム。
【請求項１６】
前記複数の動作は、
前記スイッチが、前記デバイスから、前記仮想アドレスを含む前記アドレス変換要求を受信することと、
前記仮想アドレスは前記メモリに格納されていないと判断することと、
前記仮想アドレスから前記物理アドレスへの前記マッピングを要求することとを含み、前記スイッチが、前記デバイスのためのアドレス変換要求に対する応答を受信することは、前記仮想アドレスから前記物理アドレスへの前記マッピングを要求したことに応じて、前記応答を受信することを含む、請求項１に記載のシステム。
【請求項１７】
前記複数の動作は、
前記仮想アドレスから前記物理アドレスへの前記マッピングを用いて、前記仮想アドレスに対応する物理アドレスを求めることと、
前記対応する物理アドレスを含む、前記アドレス変換要求に対する第２の応答を、前記デバイスに与えることとを含む、請求項１６に記載のシステム。
【請求項１８】
前記複数の動作は、前記仮想アドレスから前記物理アドレスへの前記マッピングを要求するのと同時に、前記仮想アドレスから前記物理アドレスへの前記マッピングを前記メモリが含むか否かを判断することを含む、請求項１６に記載のシステム。
【請求項１９】
前記仮想アドレスから前記物理アドレスへの前記マッピングを要求することは、前記仮想アドレスから前記物理アドレスへの前記マッピングを中央処理装置に要求することを含む、請求項１６に記載のシステム。
【請求項２０】
前記仮想アドレスから前記物理アドレスへの前記マッピングを要求することは、前記仮想アドレスから前記物理アドレスへの前記マッピングをメモリに要求することを含む、請求項１６に記載のシステム。
【請求項２１】
前記仮想アドレスから前記物理アドレスへの前記マッピングを要求することは、前記仮想アドレスから前記物理アドレスへの前記マッピングを入出力メモリ管理ユニット（ＩＯＭＭＵ）に要求することを含む、請求項１６に記載のシステム。
【請求項２２】
前記スイッチに組込まれた予め定められた数のポートを備え、前記ポートは各々、特定のデバイスに対応し、前記特定のデバイスに対し、前記メモリは、仮想アドレスから物理アドレスへの対応するマッピングを格納するように構成され、前記メモリのサイズは前記予め定められた数のポートに対応する、請求項１に記載のシステム。
【請求項２３】
コンピュータによって実現される方法であって、
スイッチが、バスによって前記スイッチに接続されているデバイスのためのアドレス変換要求に対する応答を受信するステップを含み、前記スイッチは、前記バスに接続された１つ以上のデバイスからパケットを受信し前記１つ以上のデバイスにパケットを渡し、前記スイッチと前記1つ以上のデバイス各々との間における前記バス上にコンポーネントは存在しておらず、前記応答は、仮想アドレスから特定の物理アドレスへのマッピングを含み、
前記デバイスのための前記アドレス変換要求に対する前記応答を受信したことに応じて、前記スイッチに組込まれ仮想アドレスから物理アドレスへのマッピングを格納するためのメモリに、前記仮想アドレスから前記物理アドレスへのマッピングを格納するステップと、
仮想アドレスから物理アドレスへのマッピングを前記デバイスが前記デバイスの変換ルックアサイドバッファ（ＴＬＢ）に現在格納していることを、前記デバイスに固有の前記スイッチの設定が示すと判断するステップとを含み、前記スイッチの設定は前記スイッチに組み込まれたメモリに格納されており、
仮想アドレスから物理アドレスへのマッピングを前記デバイスが前記デバイスの変換ルックアサイドバッファ（ＴＬＢ）に現在格納していることを、前記デバイスに固有の前記スイッチの設定が示すと判断したことに応じて、前記デバイスのＴＬＢからエントリを削除することを前記デバイスに指示するメッセージを前記デバイスに送信するステップと、
仮想アドレスから物理アドレスへのマッピングを前記デバイスが前記デバイスの変換ルックアサイドバッファ（ＴＬＢ）に現在格納していることを、前記デバイスに固有の前記スイッチの設定が示すと判断したことに応じて、前記仮想アドレスから前記物理アドレスへの前記マッピングを前記デバイスに与えるステップとを含む、方法。
【請求項２４】
前記デバイスは前記特定の物理アドレスによって特定される記憶場所にアクセスすることを許可されないと判断することは、前記特定の物理アドレスは前記メモリに格納されていないと判断することを含む、請求項１５に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
背景
本明細書は、スイッチ、たとえばスイッチチップに関する。
【背景技術】
【０００２】
入出力メモリ管理ユニット（input/output memory management unit）（ＩＯＭＭＵ）は、変換要求に応じて、仮想マシンを走らせるシステムにおける保護のために、ページテーブルウォークを行なってデバイスアドレスを変換する。いくつかの例において、ＩＯＭＭＵは、部分ページウォークキャッシュを行なう場合がある。部分ページウォークキャッシュを行なうのは、たとえば、ａ）利用できるメモリが限られているときに空間を節約するため、ｂ）ＩＯＭＭＵが多数のデバイスのための変換要求に応じるとき、または、これら双方の場合である。
【０００３】
周辺コンポーネント相互接続エクスプレス（Peripheral Component Interconnect Express）（ＰＣＩｅ）アドレス変換サービス（address translation service）（ＡＴＳ）により、デバイスは、ＩＯＭＭＵにアドレス変換を要求し、この変換を当該デバイス上に、たとえば変換ルックアサイドバッファ（translation lookaside buffer）（ＴＬＢ）に、ローカルキャッシュすることができる。いくつかの場合において、デバイスのＴＬＢは、このデバイスが使用するであろうすべての仮想アドレス−物理アドレスマッピングを格納するのに十分な大きさではない場合がある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
概要
バス、たとえばＰＣＩまたは周辺コンポーネント相互接続エクスプレス（ＰＣＩｅ）バスに対して使用されるスイッチチップは、変換されたアドレスを受信し、この変換されたアドレスを使用して、当該スイッチチップによって少なくとも一部が管理される上記バスに接続されているデバイスからのメモリアクセス要求が有効であるか否かを検査する。たとえば、スイッチチップは、ページテーブルをキャッシュに格納し、または、仮想アドレスから物理アドレスへのマッピングを変換ルックアサイドバッファ（ＴＬＢ）に格納し、このページテーブルまたはＴＬＢからのアドレスを用いることにより、当該スイッチチップによって少なくとも一部が管理される上記バスに接続されているデバイスからの変換要求に応じるか、これらのデバイスからのアクセス要求を検査するか、またはこれら双方を行なう。簡略化のために、本明細書では、「スイッチチップに接続されている」デバイスと言う場合、これは、メモリ要求およびアドレス変換要求が少なくとも一部スイッチチップによって制御または管理される、バスへの接続、または、ポイント・ツー・ポイント接続を意味すると理解される。
【０００５】
スイッチチップは、デバイスごとにページテーブルまたはページテーブルの一部を格納する入出力メモリ管理ユニット（ＩＯＭＭＵ）を含み得る。スイッチチップは、デバイスから変換要求を受けると、組込まれているＩＯＭＭＵにこの変換要求を与え、それに応じた組込まれているＩＯＭＭＵから物理アドレスを受け、上記デバイスにこの物理アドレスを与えることができる。
【０００６】
スイッチチップは、物理アドレスを含むメモリアクセス要求をデバイスから受けると、組込まれているＩＯＭＭＵに格納されているこのデバイス用のページテーブルを用いて、このページテーブルが上記物理アドレスを含むか否かを検査し、含む場合、上記デバイスは、対応する記憶場所にアクセスすることができる。ページテーブルが上記物理アドレスを含まない場合、スイッチチップは、デバイスが上記記憶場所にアクセスすることを阻止する。
【０００７】
いくつかの例において、スイッチチップは、ＴＬＢ、たとえばキャッシュを含む。スイッチチップは、ＴＬＢ、たとえばキャッシュに、仮想アドレスを物理アドレスにマッピングするテーブルを、たとえばデバイスごとに格納する。スイッチチップは、個々のテーブルをデバイスに対応付けてもよく、この対応付けは、当該デバイスがこのスイッチチップと通信するときのポート番号を用いて行なわれてもよい。
【０００８】
スイッチチップは、デバイスから特定の仮想アドレスとともにアドレス変換要求を受けると、ＴＬＢがこの特定の仮想アドレスのマッピングを含むか否かを判断し、含む場合は、対応する物理アドレスを当該デバイスに与える。含まない場合、スイッチチップは、このアドレス変換要求を別のデバイス、たとえばルートコンプレックスに転送し、この別のデバイスから応答を受信する。スイッチチップは、この応答を、要求を出したデバイスに転送するとともに、ＴＬＢにキャッシュする。スイッチチップがデバイスごとにＴＬＢを含む場合、スイッチは、当該デバイスのＴＬＢの中だけを調べてマッピングを探してもよく、このマッピングがＴＬＢに格納されていない場合は、上記別のデバイスから受けたマッピングを当該デバイス用のＴＬＢに格納する。
【０００９】
スイッチチップは、デバイスからアクセス要求を受けると、当該デバイス用のＴＬＢを用いて、このアクセス要求に含まれる物理アドレスによって特定される記憶場所に当該デバイスがアクセスできるか否かを検査する、たとえば、上記物理アドレスが当該デバイスのＴＬＢに含まれているか否かを検査する。上記物理アドレスが当該デバイスのＴＬＢに含まれている場合、スイッチチップは、当該デバイスが上記記憶場所にアクセスすることを許可する。上記物理アドレスが当該デバイスのＴＬＢに含まれていない場合、スイッチチップは、当該デバイスが上記記憶場所にアクセスすることを阻止し、たとえば、この要求を別のデバイスに転送しない。
【課題を解決するための手段】
【００１０】
概して、本明細書に記載の主題のある革新的な側面は、以下のシステムにおいて実現することができる。このシステムは、バスに接続された１つ以上のデバイスからパケットを受信し当該１つ以上のデバイスにパケットを渡すスイッチを備え、スイッチとデバイス各々との間におけるバス上にコンポーネントは存在していない。上記システムはさらに、スイッチに組込まれ仮想アドレスから物理アドレスへのマッピングを格納するためのメモリと、スイッチに組込まれスイッチによって実行可能な命令を格納する非一時的なコンピュータ読取可能な記憶媒体とを備える。命令は実行されるとスイッチに複数の動作を実行させ、複数の動作は、スイッチが、バスによってスイッチに接続されているデバイスのためのアドレス変換要求に対する応答を受信することを含み、応答は、仮想アドレスから物理アドレスへのマッピングを含み、上記複数の動作は、デバイスのためのアドレス変換要求に対する応答を受信したことに応じて、仮想アドレスから物理アドレスへのマッピングをメモリに格納することを含む。この側面のその他の実施形態は、対応するコンピュータシステム、装置、方法、および、１つ以上のコンピュータ記憶装置に記録されたコンピュータプログラムを含み、これらは各々上記動作の処理を実行するように構成されている。１つ以上のコンピュータからなるシステムを、システムにインストールされ動作時にこのシステムに処理を実行させる、ソフトウェア、ファームウェア、ハードウェア、またはこれらを組合わせたものによって、特定の動作または処理を実行するように構成してもよい。１つ以上のコンピュータプログラムを、データ処理装置によって実行されるとこの装置に処理を実行させる命令を含むことによって、特定の動作または処理を実行するように構成してもよい。
【００１１】
概して、本明細書に記載の主題のある革新的な側面は、以下のシステムによって実現することができる。このシステムは、バスを通してパケットをルーティングするスイッチと、スイッチに組込まれ仮想アドレスから物理アドレスへのマッピングを格納するためのメモリと、スイッチに組込まれスイッチによって実行可能な命令を格納する非一時的なコンピュータ読取可能な記憶媒体とを備える。命令は、そのように実行されると、スイッチに以下の動作を実行させる。上記複数の動作は、スイッチが、デバイスのためのアドレス変換要求に対する、仮想アドレスから物理アドレスへのマッピングを含む応答を、受信することと、デバイスのためのアドレス変換要求に対する応答を受信したことに応じて、仮想アドレスから物理アドレスへのマッピングをメモリに格納することと、特定の物理アドレスを含むメモリアクセス要求をデバイスから受信することと、特定の物理アドレスがメモリに格納されていると判断することと、特定の物理アドレスがメモリに格納されていると判断したことに応じて、メモリアクセス要求をサービスのために別のデバイスに転送することとを含む。この側面のその他の実施形態は、対応するコンピュータシステム、装置、方法、および、１つ以上のコンピュータ記憶装置に記録されたコンピュータプログラムを含み、これらは各々上記動作の処理を実行するように構成されている。１つ以上のコンピュータからなるシステムを、システムにインストールされ動作時にこのシステムに処理を実行させる、ソフトウェア、ファームウェア、ハードウェア、またはこれらを組合わせたものによって、特定の動作または処理を実行するように構成してもよい。１つ以上のコンピュータプログラムを、データ処理装置によって実行されるとこの装置に処理を実行させる命令を含むことによって、特定の動作または処理を実行するように構成してもよい。
【００１２】
概して、本明細書に記載の主題のある革新的な側面は、以下のシステムによって実現することができる。このシステムは、バスを通してパケットをルーティングするスイッチと、スイッチに組込まれ仮想アドレスから物理アドレスへのマッピングを格納するためのメモリと、スイッチに組込まれスイッチによって実行可能な命令を格納する非一時的なコンピュータ読取可能な記憶媒体とを備える。命令は、そのように実行されると、スイッチに以下の動作を実行させる。上記複数の動作は、スイッチが、デバイスのためのアドレス変換要求に対する、仮想アドレスから物理アドレスへのマッピングを含む応答を、受信することと、デバイスのためのアドレス変換要求に対する応答を受信したことに応じて、仮想アドレスから物理アドレスへのマッピングをメモリに格納することと、特定の物理アドレスを含むメモリアクセス要求をデバイスから受信することと、特定の物理アドレスがメモリに格納されていないと判断することと、特定の物理アドレスがメモリに格納されていないと判断したことに応じて、メモリアクセス要求を破棄することとを含む。この側面のその他の実施形態は、対応するコンピュータシステム、装置、方法、および、１つ以上のコンピュータ記憶装置に記録されたコンピュータプログラムを含み、これらは各々上記動作の処理を実行するように構成されている。１つ以上のコンピュータからなるシステムを、システムにインストールされ動作時にこのシステムに処理を実行させる、ソフトウェア、ファームウェア、ハードウェア、またはこれらを組合わせたものによって、特定の動作または処理を実行するように構成してもよい。１つ以上のコンピュータプログラムを、データ処理装置によって実行されるとこの装置に処理を実行させる命令を含むことによって、特定の動作または処理を実行するように構成してもよい。
【００１３】
上記およびその他の実施形態は各々、任意で、以下の特徴のうちの１つ以上を、単独でまたは組合わせとして含み得る。上記システムは、スイッチに組込まれＩＯＭＭＵメモリを含む入出力メモリ管理ユニット（ＩＯＭＭＵ）を含み得る。メモリはＩＯＭＭＵメモリを含み得る。スイッチが、デバイスのためのアドレス変換要求に対する応答を受信することは、スイッチが、デバイスのためのページテーブルの一部を受信することを含み得る。仮想アドレスから物理アドレスへのマッピングをメモリに格納することは、ページテーブルの一部をＩＯＭＭＵに格納することを含み得る。
【００１４】
いくつかの実装例において、メモリは変換ルックアサイドバッファ（ＴＬＢ）を含み得る。仮想アドレスから物理アドレスへのマッピングをメモリに格納することは、仮想アドレスから物理アドレスへのマッピングをＴＬＢに格納することを含み得る。システムは、スイッチのための予め定められた数のポートを含み得る。ポートは各々、特定のデバイスに対応し、スイッチは、特定のデバイスに対して１つのＴＬＢを含む。上記複数の動作は、デバイスのためのアドレス変換要求に対する応答を受信したことに応じて、ＴＬＢが空の場所を含まないと判断することと、ＴＬＢ内の場所からエントリを削除することと、ＴＬＢ内の場所に、仮想アドレスを物理アドレスにマッピングする新たなエントリを格納することとを含み得る。上記複数の動作は、デバイスがＴＬＢを含むと判断するとともに仮想アドレスから物理アドレスへのマッピングをデバイスがデバイスのＴＬＢに現在格納していることをデバイスのための設定が示すと判断することと、デバイスがＴＬＢを含むと判断するとともに仮想アドレスから物理アドレスへのマッピングをデバイスがデバイスのＴＬＢに現在格納していることをデバイスのための設定が示すと判断したことに応じて、デバイスのＴＬＢからエントリを削除することをデバイスに指示するメッセージをデバイスに送信することと、デバイスがＴＬＢを含むと判断するとともに仮想アドレスから物理アドレスへのマッピングをデバイスがデバイスのＴＬＢに現在格納していることをデバイスのための設定が示すと判断したことに応じて、仮想アドレスから物理アドレスへのマッピングをデバイスに与えることとを含み得る。上記複数の動作は、デバイスがデバイスのＴＬＢからエントリを削除したという確認を、デバイスから受信することを含み得る。仮想アドレスから物理アドレスへのマッピングをデバイスに与えることは、デバイスがデバイスのＴＬＢからエントリを削除したという確認を受信したことに応じて、仮想アドレスから物理アドレスへのマッピングをデバイスに与えることを含む。
【００１５】
いくつかの実装例において、上記複数の動作は、特定の物理アドレスを含むメモリアクセス要求をデバイスから受信することと、特定の物理アドレスがメモリに格納されていると判断することと、特定の物理アドレスがメモリに格納されていると判断したことに応じて、メモリアクセス要求をサービスのために別のデバイスに転送することとを含み得る。メモリは、デバイスに固有のメモリであってもよく、バスによってスイッチに接続されているその他のデバイスのための仮想アドレスから物理アドレスへのマッピングを含まなくてもよい。システムは、スイッチに組込まれている１つ以上の追加のメモリを含み得る。追加のメモリ各々と、特定のデバイスに固有のメモリとは、バスによってスイッチに接続されている。特定の物理アドレスがメモリに格納されていると判断することは、スイッチにおける特定のポートがメモリアクセス要求を受信したと判断することと、特定のポートを用いてデバイスのためのメモリを選択することと、特定のポートを用いてデバイスのためのメモリを選択したことに応じて、特定の物理アドレスがメモリに格納されていると判断することとを含み得る。システムは、中央処理装置とキャッシュとを含み得る。デバイスのためのアドレス変換要求に対する応答を受信することは、仮想アドレスから物理アドレスへのマッピングをキャッシュから受信することを含み得る。メモリアクセス要求をサービスのために別のデバイスに転送することは、メモリアクセス要求を中央処理装置に転送することを含み得る。システムは、第２のバス上のコントローラを含み得る。コントローラは、第２のバスを介して、スイッチを、中央処理装置およびキャッシュに接続し、スイッチと中央処理装置およびキャッシュとの間でやり取りされる応答および要求を、第２のバスを用いてルーティングする。コントローラはルートコンプレックスを含み得る。システムは、上記スイッチを含む複数のスイッチと、第２のバス上のコントローラとを含み得る。コントローラは、第２のバスを介して、複数のスイッチ各々を、中央処理装置およびキャッシュに接続し、複数のスイッチ各々と中央処理装置およびキャッシュとの間でやり取りされる応答および要求を、第２のバスを用いてルーティングする。
【００１６】
いくつかの実装例において、システムは、マザーボードと、マザーボードに組込まれているバスとを備え、マザーボードに対し、スイッチは、ソースデバイスからの要求を宛先デバイスにルーティングすることにより、周辺装置がマザーボードに接続することを可能にするように構成されている。上記複数の動作は、特定の物理アドレスを含むメモリアクセス要求をデバイスから受信することと、デバイスは特定の物理アドレスによって特定される記憶場所にアクセスすることを許可されないと判断することと、デバイスは特定の物理アドレスによって特定される記憶場所にアクセスすることを許可されないと判断したことに応じて、メモリアクセス要求を破棄することとを含み得る。上記複数の動作は、特定の物理アドレスがメモリに格納されていないと判断したことに応じてデバイスをリセットすることを含み得る。
【００１７】
いくつかの実装例において、上記複数の動作は、スイッチが、デバイスから、仮想アドレスを含むアドレス変換要求を受信することと、仮想アドレスはメモリに格納されていないと判断することと、仮想アドレスから物理アドレスへのマッピングを要求することとを含み得る。スイッチが、デバイスのためのアドレス変換要求に対する応答を受信することは、仮想アドレスから物理アドレスへのマッピングを要求したことに応じて、応答を受信することを含む。上記複数の動作は、仮想アドレスから物理アドレスへのマッピングを用いて、仮想アドレスに対応する物理アドレスを求めることと、対応する物理アドレスを含む、変換要求に対する応答を、デバイスに与えることとを含み得る。上記複数の動作は、仮想アドレスから物理アドレスへのマッピングを要求するのと同時に、仮想アドレスから物理アドレスへのマッピングをメモリが含むか否かを判断することを含み得る。仮想アドレスから物理アドレスへのマッピングを要求することは、仮想アドレスから物理アドレスへのマッピングを中央処理装置に要求することを含み得る。仮想アドレスから物理アドレスへのマッピングを要求することは、仮想アドレスから物理アドレスへのマッピングをメモリに要求することを含み得る。仮想アドレスから物理アドレスへのマッピングを要求することは、仮想アドレスから物理アドレスへのマッピングを入出力メモリ管理ユニット（ＩＯＭＭＵ）に要求することを含み得る。
【００１８】
いくつかの実装例において、システムは、スイッチに組込まれた予め定められた数のポートを含み得る。ポートは各々、特定のデバイスに対応し、特定のデバイスに対し、メモリは、仮想アドレスから物理アドレスへの対応するマッピングを格納するように構成され、メモリのサイズは予め定められた数のポートに対応する。スイッチはスイッチチップであってもよい。
【００１９】
本明細書に記載の主題は、特定の実施形態において実現することができ、その結果、以下の利点のうちの１つ以上が得られるであろう。いくつかの実装例において、システムは、仮想アドレスから物理アドレスへのマッピングを格納するメモリを有するスイッチチップを備えることにより、追加のスイッチチップが加えられるときにスケールアウトすることができる。たとえば、スイッチチップにより、システムは、当該スイッチチップによって少なくとも一部管理されるバスに接続されているより多くのデバイス、他のスイッチチップによって少なくとも一部管理されるバスに接続されているより多くのデバイス、またはこれら両方を、含むことができる。いくつかの実装例において、下記システムおよび方法により、システムは、仮想アドレスから物理アドレスへのマッピング用のメモリを有するスイッチチップを含まないシステムよりも素早く、アドレス変換要求に応じることができる。いくつかの実装例において、下記システムおよび方法により、システムは、デバイスからのメモリアクセス要求に含まれる特定の物理アドレスにデバイスがアクセスできるか否かを検査することができる。
【００２０】
本明細書の主題の１つ以上の実施形態の詳細は、添付の図面および以下の説明に記載されている。この主題のその他の特徴、側面、および利点は、以下の説明、図面、および請求項から明らかになるであろう。
【図面の簡単な説明】
【００２１】
【図１】仮想アドレスから物理アドレスへのマッピングをスイッチチップが格納する環境の一例を示す図である。
【図２】変換要求に応答するプロセスのフロー図である。
【図３】物理アドレスがメモリに格納されているか否かを判断するプロセスのフロー図である。
【発明を実施するための形態】
【００２２】
各種図面において同様の参照番号および符号は同様の要素を示す。
詳細な説明
概観
いくつかの実装例において、スイッチチップ、たとえば周辺コンポーネント相互接続エクスプレス（ＰＣＩｅ）スイッチチップは、当該スイッチチップが管理するバスに接続されているデバイスに代わってアドレス変換サービス（ＡＴＳ）変換をキャッシュする。たとえば、あるデバイスが、周辺コンポーネント相互接続（ＰＣＩ）読出または書込要求を、バス上に出力した場合、スイッチチップは、この要求に含まれている仮想アドレスを求めて、当該スイッチチップに含まれている変換ルックアサイドバッファ（ＴＬＢ）を調べ、ヒットした場合はこの仮想アドレスを変換して物理アドレスを求める。当該スイッチチップは、この物理アドレスを上記デバイスに与える、または、この物理アドレスを上記要求に含めてこの要求をたとえばサービスのために別のデバイスに転送することができる。
【００２３】
ＴＬＢがミスの場合、スイッチチップは、ＡＴＳ要求を、たとえば、別のバスによって当該スイッチチップに接続されているルートコンプレックス内の入出力メモリ管理ユニット（ＩＯＭＭＵ）に、仮想アドレスの変換のために出力し、変換を受信し当該スイッチチップのＴＬＢにキャッシュする。いくつかの実装例において、スイッチチップは、並列処理のために、仮想アドレスを求めてＴＬＢをチェックしつつ、同時に未変換の元の要求をルートコンプレックスに送信してもよい。
【００２４】
スイッチチップは、当該スイッチチップによって少なくとも一部が管理されるバスに接続されているデバイスへのＰＣＩｅコンフィギュレーション空間アクセスをインターセプトすることにより、ＡＴＳケイパビリティ（capability）ビットを強制的に１にすることができる、たとえば、ＡＴＳケイパビリティビットをイネーブルすることができる。そうすると、上記スイッチチップおよびデバイスを含むハードウェア上で実行されているオペレーティングシステムまたはこのオペレーディングシステムのデバイスドライバは、このデバイスのためのＡＴＳをイネーブルすることができる。このデバイスのためのＡＴＳがイネーブルされると、ＩＯＭＭＵは、アドレス変換要求、読出もしくは書込アクセス要求、またはこれら双方に応じて、上記スイッチチップおよびデバイス（このデバイスがＡＴＳをサポートする場合）に、仮想アドレスから物理アドレスへのマッピングを与える。
【００２５】
いくつかの例において、オペレーティングシステムのデバイスドライバがデバイスのためのＡＴＳをイネーブルしたとき、このデバイスドライバは、オペレーティングシステムが、既知の信頼できるスイッチチップをホワイトリストに入れることを可能にする。たとえば、このデバイスドライバは、オペレーティングシステムが、メモリたとえばＴＬＢを含むスイッチチップを含むハードウェア上で実行され仮想アドレス−物理アドレスマッピングを格納することを可能にし、メモリを含まないスイッチチップが、仮想アドレス−物理アドレスマッピングを格納することを可能にしてもよい。デバイスドライバは、メモリを含むスイッチチップをホワイトリストに入れることによってこれらのスイッチチップがマッピングを受信し得ることを示してもよく、これらのスイッチチップからの要求は検証不要であることを示してもよく、またはこれら両方であってもよい。
【００２６】
たとえば、スイッチチップは、自身のメモリに格納されているマッピングを用いて、当該スイッチチップによって少なくとも一部が管理されるバスに接続されているデバイスから受けた読出要求、書込要求、またはこれら双方を検証してもよい。別のハードウェアデバイス、たとえばＩＯＭＭＵまたはプロセッサが当該スイッチチップから要求を受けたとき、この別のハードウェアデバイスは、ホワイトリストを利用することにより、上記要求を検証すべきか否かを判断するとともに上記要求を出したデバイスが対応する記憶場所にアクセスすることを許可すべきか否かを判断してもよい。この別のハードウェアデバイスは、ホワイトリスト上にないスイッチチップから要求を受けたときは、この要求を検証することによって、上記要求を出したデバイスが、たとえば悪意があるデバイスである場合、間違ったソフトウェアを含む場合、またはこれら双方の場合に、このデバイスがアクセスできない記憶場所にアクセスすることを許可されないことを保証してもよい。
【００２７】
いくつかの実装例において、スイッチチップたとえばＰＣＩｅスイッチチップは、ＩＯＭＭＵを含み、任意でページテーブル記憶装置を含む。たとえば、スイッチチップは、ページテーブルウォーカーと、ページテーブルを格納するためのオンボードメモリとを含む。スイッチチップは、当該スイッチチップによって少なくとも一部が管理されるバスに接続されているデバイスからアドレス変換要求を受け、対応する物理アドレスがページテーブルに含まれているか否かを判断してもよい。含まれている場合、スイッチチップは、要求を出したデバイスに、対応する物理アドレスを与える。含まれていない場合、スイッチチップは、この要求を別のデバイスたとえばキャッシュまたはルートコンプレックスＩＯＭＭＵに転送し、この別のデバイスから受けた応答を、当該スイッチチップのメモリ、たとえばページテーブル記憶装置に格納してもよい。こうして当該スイッチチップは元の要求に応じることができる。
【００２８】
システムの例
図１は、仮想アドレスから物理アドレスへのマッピングをスイッチチップＡ  １０２ａが格納する環境１００の一例である。いくつかの実装例において、スイッチチップＡ  １０２ａは、スイッチチップＡ  １０２ａがマッピングを格納するＴＬＢ１０４を含む。
【００２９】
たとえば、デバイスＡ  １０８ａ〜デバイスＣ  １０８ｃのうちの１つが環境１００に追加されスイッチチップＡ  １０２ａにバス１０１を介して接続されると、スイッチチップＡ  １０２ａは、ポートアドレスを、このデバイス、たとえばデバイスＡ  １０８ａに割当てる。デバイスＡ  １０８ａが、仮想アドレスから物理アドレスへの変換を要求すると、スイッチチップＡ  １０２ａは、ＴＬＢ１０４が要求された仮想アドレスの変換を含むか否かを判断する。スイッチチップＡ  １０２ａは、最初に、ＴＬＢ１０４がアドレス変換を含んでいないと判断し、変換を、コントローラ１１０に、たとえばコントローラ１１０に含まれるＩＯＭＭＵ１１２に、またはプロセッサ１１４もしくはキャッシュ１１６等の別のデバイスに要求してもよい。
【００３０】
いくつかの実装例において、環境１００がＰＣＩｅバスを含む場合、たとえばバス１０１がＰＣＩｅバスである場合、コントローラ１１０はルートコンプレックスであってもよい。たとえば、ルートコンプレックスは、異なるスイッチチップＡ  １０２ａ〜スイッチチップＣ  １０２ｃ間でデータをルーティングしこれらスイッチチップに対する要求を管理するスイッチであってもよい。
【００３１】
スイッチチップＡ  １０２ａは、変換要求に対する応答を受け、要求された仮想アドレスに対する物理アドレスを求め、この物理アドレスをデバイスＡ  １０８ａに与える。いくつかの例において、上記応答は、仮想アドレスから物理アドレスへの１つのマッピングを含み得る。いくつかの例において、この応答は、複数の異なる仮想アドレスのマッピングを含み得る。これらのマッピングは、デバイスＡ  １０８ａに割当てられ、各々が、デバイスＡ  １０８ａがアクセスできる対応する物理アドレスに対するマッピングである。
【００３２】
スイッチチップＡ  １０２ａは、スイッチチップＡ  １０２ａが管理するバス１０１にデバイスＡ  １０８ａが接続されたときに、デバイスＡ  １０８ａのためのマッピングを要求してもよい。たとえば、スイッチチップＡ  １０２ａは、スイッチチップＡ  １０２ａが管理するバス１０１にデバイスＡ  １０８ａが接続されたときに、別のデバイス、たとえばコントローラ１１０に、予め定められた数のアドレス変換を要求してもよい。このアドレス変換は、数が小さい仮想アドレス、数が大きい仮想アドレス、デバイスＡ  １０８ａがアクセスする可能性が最も高い仮想アドレス、またはこれらのうちの２つ以上を組合わせたものに対するアドレス変換であってもよい。
【００３３】
スイッチチップＡ  １０２ａは、仮想アドレスから物理アドレスへのマッピングをＴＬＢ１０４に格納すると、別のデバイスに変換を要求することなく、デバイスＡ  １０８ａからのアドレス変換要求に応じることができる。たとえば、スイッチチップＡ  １０２ａは、特定の仮想アドレスについて、ＴＬＢ１０４がこの特定の仮想アドレスから特定の物理アドレスへのマッピングを含むと判断してこの特定の物理アドレスをデバイスＡ  １０８ａに与えることができる。
【００３４】
スイッチチップＡ  １０２ａは、デバイスＡ  １０８ａに関するポート番号、バス−デバイス−機能番号、またはこれら双方を用いることにより、デバイスＡ  １０８ａに関するマッピングを求めてもよい。たとえば、ＴＬＢ１０４は、デバイスＡ  １０８ａおよびデバイスＢ  １０８ｂ双方に関するマッピングを含んでいてもよく、スイッチチップＡ  １０２ａは、デバイスＡ  １０８ａに関するポート番号およびバス−デバイス−機能番号を用いることにより、デバイスＢ  １０８ｂではなくデバイスＡ  １０８ａの特定の機能に関するマッピングのみに注目してもよい。
【００３５】
いくつかの例において、スイッチチップＡ  １０２ａは、アドレス変換要求をデバイスＡ  １０８ａから受けたとき、この要求を、サービスのために別のデバイスたとえばコントローラ１１０に転送してもよく、同時に、ＴＬＢ１０４が上記要求に対する応答を含むか否かを判断してもよい。ここで、スイッチチップＡ  １０２ａは、ＴＬＢ１０４が対応する物理アドレスを含まないという判断を、上記要求をサービスのために別のデバイスに転送する前に下す。
【００３６】
たとえばスイッチチップＡ  １０２ａが追加のマッピングをＴＬＢ１０４に格納できないとき、スイッチチップＡ  １０２ａは、適切な追出（eviction）ポリシーを用いてＴＬＢ１０４からエントリを追出してもよい。たとえば、スイッチチップＡ  １０２ａは、最も長く使用されていないエントリまたは最も最近使用されたエントリを追出してもよい。
【００３７】
あるデバイスが自身のメモリにマッピングを格納しておりスイッチチップＡ  １０２ａがＴＬＢ１０４からあるエントリを追出す場合の実装例において、スイッチチップＡ  １０２ａは、対応するデバイスたとえばデバイスＡ  １０８ａにメッセージを送信してデバイスＡ  １０８ａに同じエントリをこのデバイスのメモリから追出すことを指示してもよい。たとえば、ＴＬＢ１０４がデバイスＡ  １０８ａに関するマッピングを含まない場合にスイッチチップＡ  １０２ａがデバイスＡ  １０８ａからアドレス変換要求を受けたとき、スイッチチップＡ  １０２ａは、コントローラ１１０に変換を要求してもよい。スイッチチップＡ  １０２ａは、ＴＬＢ１０４が未使用の記憶場所を含まないと判断するとともに、最も長く使用されていないエントリはＴＬＢ１０４から追出すべきであると判断する。スイッチチップＡ  １０２ａは、コントローラ１１０から受信した変換を、新たに空にされた記憶場所に格納し、デバイスＡ  １０８ａにメッセージを送信してデバイスＡのメモリから同じ最も長く使用されていないエントリを追出すよう指示する。スイッチチップＡ  １０２ａは、デバイスＡ  １０８ａがエントリを追出したという確認を受けてもよい。スイッチチップＡ  １０２ａは、たとえば最も長く使用されていないエントリをデバイスＡ  １０８ａが追出したという確認を受けたことに応じて、コントローラ１１０から受けた変換をデバイスＡ  １０８ａに送信する。
【００３８】
環境１００は、アドレス変換サービス（ＡＴＳ）を用いて、スイッチチップＡ  １０２ａ〜スイッチチップＣ  １０２ｃおよびデバイスＡ  １０８ａ〜デバイスＣ  １０８ｃがアドレス変換マッピングをメモリに格納し得るか否かを判断してもよい。たとえば、環境１００は、ＡＴＳビットを用いることにより、デバイスＡ  １０８ａがＡＴＳを使用することができＡＴＳの使用を許可されるか否かを示してもよい。デバイスＡ  １０８ａが、スイッチチップＡ  １０２ａによって管理されるバス１０１に接続すると、スイッチチップＡ  １０２ａは、デバイスＡ  １０８ａのためのコンフィギュレーション設定、たとえばＰＣＩｅコンフィギュレーション空間設定をインターセプトすることにより、デバイスＡ  １０８ａに対するＡＴＳを「イネーブル」してもよい、たとえば、上記ビットを「１」という値に設定してもよい。
【００３９】
デバイスＡ  １０８ａがＡＴＳをサポートしない例において、スイッチチップＡ  １０２ａは、アクセス要求をデバイスＡ  １０８ａから受信しこの要求を変換のためにコントローラ１１０に転送してもよい、または、このアクセス要求自体に含まれる１つまたは複数の仮想アドレスを変換してもよい。たとえば、スイッチチップＡ  １０２ａは、デバイスＡ  １０８ａのためのＡＴＳをイネーブルし、アクセス要求をデバイスＡ  １０８ａから受け、この要求に含まれる仮想アドレスを求め、この要求中の仮想アドレスから対応する物理アドレスへのマッピングを求めるメッセージをコントローラ１１０に送り、このマッピングを受け、受けたマッピングを用いて、デバイスＡ  １０８ａから受けた仮想アドレスを対応する物理アドレスに変換してもよい。
【００４０】
いくつかの実相例において、デバイスＡ  １０８ａがＡＴＳをサポートしない場合、スイッチチップＡ  １０２ａは、デバイスＡ  １０８ａがＡＴＳをサポートしていることを示すＡＴＳビットはイネーブルしない。たとえば、スイッチチップＡ  １０２ａが、デバイスＡ  １０８ａから受けた要求中のいかなる仮想アドレスも対応する物理アドレスに変換しない場合、スイッチチップＡ  １０２ａはＡＴＳビットをイネーブルしない。
【００４１】
デバイスＡ  １０８ａがＡＴＳをサポートする例において、環境１００は、デバイスＡ  １０８ａがＡＴＳ機能を使用することを許可してもしなくてもよい。たとえば、デバイスＡ  １０８ａがＡＴＳ機能を使用することを環境１００が許可する場合、スイッチチップＡ  １０２ａは、デバイスＡ  １０８ａに関する設定をチェックすることにより、確実にＡＴＳビットがイネーブルされる、たとえば１に設定されるようにしてもよく、ＡＴＳビットがイネーブルされると判断すると、ＡＴＳビットを修正しなくてもよい。スイッチチップＡ  １０２ａは、アドレス変換要求をデバイスＡ  １０８ａから受けて上記のようにアドレス変換要求に応じてもよい。
【００４２】
スイッチチップＡ  １０２ａは、デバイスＡ  １０８ａからの、物理アドレス、たとえば変換されたアドレスを含む要求を、検証してもよい。たとえば、スイッチチップＡ  １０２ａがデバイスＡ  １０８ａからメモリアクセス要求を受けた場合、スイッチチップＡ  １０２ａは、この要求がメモリアクセス要求であって、たとえば変換要求ではないと判断する。スイッチチップＡ  １０２ａは、この要求に含まれる１つまたは複数の物理アドレスを求めこれらのアドレスがＴＬＢ１０４に含まれているか否かを判断する。これらのアドレスがＴＬＢ１０４に含まれている場合、スイッチチップＡ  １０２ａはこの要求を、サービスのために、別のデバイス、たとえば、プロセッサ１１４、キャッシュ１１６、またはランダムアクセスメモリ１１８に転送する。
【００４３】
スイッチチップＡ  １０２ａが、デバイスＡ  １０８ａからのアクセス要求に含まれている物理アドレスのうちの１つ以上がＴＬＢ１０４に含まれていないと判断した場合、スイッチチップＡ  １０２ａは、このアクセス要求を別のデバイスには転送しない。たとえば、スイッチチップＡ  １０２ａは、デバイスＡ  １０８ａが、ＴＬＢ１０４に含まれていない物理アドレスにはアクセスできないと判断し、このアクセス要求をサービスすべきではないと判断する。
【００４４】
スイッチチップＡ  １０２ａは、メモリアクセス要求をサービスすべきであると判断する場合、この要求をルートコンプレックスを介して転送してもよい。これらの例において、コントローラ１１０は、スイッチチップＡ  １０２ａがこの要求を検証したと判断してもよく、たとえば、スイッチチップＡ  １０２ａの識別子を用いることにより、スイッチチップＡ  １０２ａが、自身が受けたすべてのメモリアクセス要求を検証すると判断する。コントローラは、この要求を、この要求をサービスする別のデバイス、たとえばこの要求における物理アドレスによって特定される記憶場所を含む別のデバイス、たとえば宛先デバイスに、転送してもよい。
【００４５】
デバイスＡ  １０８ａがＡＴＳをサポートするがデバイスＡ  １０８ａがＡＴＳ機能を使用することを環境１００が許可しない例において、スイッチチップＡ  １０２ａは、デバイスＡ  １０８ａからの要求を、デバイスＡ  １０８ａがＡＴＳ機能をサポートしないときと同様のやり方で、処理する。たとえば、スイッチチップ１０２ａは、デバイスＡ  １０８ａからのメモリアクセス要求に含まれている仮想アドレスを変換してもよい。いくつかの例において、スイッチチップ１０２ａは、たとえば適切な方法を用いて、デバイスＡ  １０８ａからの要求をチェックすることにより、これらの要求が物理アドレスを含まないと判断してもよい。
【００４６】
いくつかの実装例において、スイッチチップＡ  １０２ａはＩＯＭＭＵ１０６を含み、スイッチチップＡ  １０２ａはメモリアドレスをこのＩＯＭＭＵに格納する。たとえば、スイッチチップＡ  １０２ａは、ＩＯＭＭＵ１０６を含むがＴＬＢ１０４は含まない。ＩＯＭＭＵ１０６はメモリを含み、このメモリにＩＯＭＭＵはページテーブル、たとえばページテーブル記憶装置を含めることができる。
【００４７】
デバイスＢ  １０８ｂが、スイッチチップＡ  １０２ａによって管理されるバス１０１に接続したとき、たとえば、デバイスＢ  １０８ｂが、デバイスＢ  １０８ｂとプロセッサ１１４との間の経路上におけるバス１０１とスイッチチップＡ  １０２ａとを含む物理接続を用いてマザーボードに接続したとき、スイッチチップＡ  １０２ａは、デバイスＢ  １０８ｂのための１つ以上のページテーブルを要求してもよい。いくつかの例において、スイッチチップＡ  １０２ａは、デバイスＢ  １０８ｂからアドレス変換要求を受けたことに応じて、またはデバイスＢ  １０８ｂからメモリアクセス要求を受けたことに応じて、または、これら両方を受けたことに応じて、デバイスＢ  １０８ｂのためのページテーブルを要求する。
【００４８】
スイッチチップＡ  １０２ａは、デバイスＢ  １０８ｂのためのアドレス変換要求に対し、ＩＯＭＭＵ１０６に格納されているページテーブルであって、たとえばバス１０１を介してスイッチチップＡ  １０２ａが接続されている別のデバイスではなくデバイスＢ  １０８ｂに固有であるページテーブルを用いて、応答する。たとえば、スイッチチップＡ  １０２ａは、仮想アドレスを含むアドレス変換要求をデバイスＢ  １０８ｂから受ける。スイッチチップＡ  １０２ａは、ＩＯＭＭＵ１０６がこの仮想アドレスから対応する物理アドレスへのマッピングを含むか否かを、たとえばＩＯＭＭＵ１０６に含まれるページテーブル記憶装置にアクセスするページテーブルウォーカーを用いて判断する。ＩＯＭＭＵ１０６がこのマッピングを含む場合、スイッチチップＡ  １０２ａは、対応する物理アドレスを求め、この物理アドレスをデバイスＢ  １０８ｂに与える。ＩＯＭＭＵ１０６がこのマッピングを含まない場合、スイッチチップＡ  １０２ａは、別のデバイス、たとえばキャッシュ１１６、ランダムアクセスメモリ１１８、またはコントローラ１１０内のＩＯＭＭＵ１１２に、追加のページテーブルを要求する。
【００４９】
ＩＯＭＭＵ１０６は、ＩＯＭＭＵのメモリに格納されているページテーブルに対して追出ポリシーを用いてもよい。たとえば、ＩＯＭＭＵ１０６が別のページテーブル用の空間を含まない場合、ＩＯＭＭＵ１０６は、最も長く使用されていないまたは最も最近使用されたページテーブルを、たとえば、スイッチチップＡ  １０２ａによって管理されるバス１０１に接続されているいずれかのデバイスのために、または、そのためにスイッチチップＡ  １０２ａがＩＯＭＭＵ１０６内に新たなページテーブルを格納する特定のデバイスのために、追出してもよい。
【００５０】
スイッチチップＡ  １０２ａは、デバイスＢ  １０８ｂからメモリアクセス要求を受けると、このメモリアクセス要求が仮想アドレスを含むのかまたは物理アドレスを含むのかを判断してもよい。このメモリアクセス要求が仮想アドレスを含む場合、スイッチチップＡ  １０２ａは、ＩＯＭＭＵ１０６中のページテーブルを用いて対応する物理アドレスを求め、メモリアクセス要求内の仮想アドレスのインスタンスを対応する物理アドレスに置換する。スイッチチップＡ  １０２ａは次に、このメモリアクセス要求を、サービスのために別のデバイス、たとえばプロセッサ１１４、キャッシュ１１６、またはランダムアクセスメモリ１１８に転送してもよい。
【００５１】
スイッチチップＡ  １０２ａは、物理アドレスを含むメモリアクセス要求をデバイスＢ  １０８ｂから受けたときは、この物理アドレスを検証する。たとえば、スイッチチップＡ  １０２ａは、ＩＯＭＭＵ１０６内のデバイスＢ  １０８ｂ用のページテーブルを求め、求めたページテーブルにこの物理アドレスが含まれるか否かを判断する。スイッチチップＡ  １０２ａは、デバイスＢ  １０８ｂに関するポート番号またはバス−デバイス−機能番号を用いて、ＩＯＭＭＵ１０６内のデバイスＢ  １０８ｂ用のページテーブルを求める。スイッチチップＡ  １０２ａは、デバイスＢ  １０８ｂ用のページテーブルを用いることにより、デバイスＡ  １０８ａまたは別のデバイスはアクセスできるがデバイスＢ  １０８ｂはアクセスできない物理記憶場所にデバイスＢ  １０８ｂがアクセスしないことを保証する。
【００５２】
いくつかの実装例において、予め定められたページ範囲、たとえば４Ｋページ範囲ごとに、環境１００たとえばスイッチチップＡ  １０２ａは、当該ページ範囲がデバイスにマッピングされていることを示すビット、たとえば「マッピングされている」ビットを有する、または、読出および書込許可を示す２ビットを有する。環境１００は、デバイスのバス−デバイス−機能番号ごとに、たとえばバス−デバイス−機能という組合わせごとに、ビット識別子、たとえば１ビットまたは２ビットを含んでいてもよい。
【００５３】
デバイスＢ  １０８ｂ用のページテーブルに物理アドレスが含まれている場合、スイッチチップＡ  １０２ａは、メモリアクセス要求をサービスのために別のデバイス、たとえばプロセッサ１１４、キャッシュ１１６、またはランダムアクセスメモリ１１８に転送する。デバイスＢ  １０８ｂ用のページテーブルに物理アドレスが含まれていない場合、スイッチチップＡ  １０２ａはこの要求をサービスしない。いくつかの例において、デバイスＢ  １０８ｂ用のページテーブルに物理アドレスが含まれていない場合、スイッチチップＡ  １０２ａは、デバイスＢ  １０８ｂをリセットしてもよく、またはデバイスＢ  １０８ｂを停止してもよく、または両方を行なってもよい。
【００５４】
いくつかの実装例において、環境１００は、マザーボードと、１つのコンピュータ、またはたとえばａ）スイッチチップＡ  １０２ａ〜スイッチチップＣ  １０２ｃのうちの１つ以上、ｂ）コントローラ１１０、ｃ）プロセッサ１１４、ｄ）キャッシュ１１６、ランダムアクセスメモリ１１８、またはこれらのうちの２つ以上を含む、複数のコンピュータとを、含み得る。環境１００は、ハードウェア上で実行される、たとえばマザーボード上で、またはコンピュータ上で、またはこれら双方の上で実行されるオペレーティングシステムを含む。
【００５５】
デバイスＡ  １０８ａに対するＡＴＳビットをイネーブルすること、たとえばＡＴＳビットの値を１に設定することは、デバイスＡ  １０８ａに対するＡＴＳをイネーブルすることにより、デバイスＡ  １０８ａおよびスイッチチップＡ  １０２ａが、仮想アドレスから物理アドレスへのマッピングをたとえばＴＬＢ１０４にキャッシュすることを許可するよう、スイッチチップＡ  １０２ａを含むハードウェア上で実行されているオペレーティングシステムに指示することであってもよい。スイッチチップＡ  １０２ａは、スイッチチップＡ  １０２ａが管理するバス１０１にデバイスＡ  １０８ａが接続したことに応じて、デバイスＡ  １０８ａに対するＡＴＳビットをイネーブルしてもよい。
【００５６】
いくつかの例において、ソフトウェアに含まれるデバイスドライバは、たとえばスイッチチップＡ  １０８ａが管理するバス１０１にデバイスＡ  １０８ａが接続したときのスイッチチップＡ  １０２ａからのメッセージに応答して、ＡＴＳビットをイネーブルしてもよい。これらの例において、デバイスドライバは、オペレーティングシステムが、アドレスマッピングをキャッシュすることができる既知のスイッチチップをホワイトリストに入れることによりこれらのスイッチチップがたとえばＴＬＢ１０４内のスイッチチップのメモリにアドレスマッピングをキャッシュできるようにすることを、許可してもよい。
【００５７】
環境１００またはオペレーティングシステムは、上記ホワイトリストを用いることにより、対応するスイッチチップの機能を判断するとともに、このスイッチチップが特定のアクション、たとえばアドレスマッピングを一体化されたメモリにキャッシュすること、またはアドレスを検証すること、またはこれら両方を行なうことを許可すべきか否かを判断してもよい。たとえば、環境１００は、異なる種類のスイッチチップを含んでいてもよく、ホワイトリストを用いて、これらのスイッチチップ各々がどのようなアクションの実行を許可されるかを判断してもよい。
【００５８】
いくつかの例において、スイッチチップＡ  １０２ａはＴＬＢを含んでいてもよく、スイッチチップＢ  １０２ｂはＩＯＭＭＵを含んでいてもよく、スイッチチップＣ  １０２ｃはＴＬＢおよびＩＯＭＭＵどちらも含まなくてもよい。環境１００は、ＡＴＳを用いるデバイスを、スイッチＡ  １０２ａが管理するバス１０１に接続してもよく、別の方法を用いて物理記憶アドレスをデバイスにローカルにキャッシュするデバイスを、スイッチチップＢ  １０２ｂが管理する第２のバスに接続してもよく、物理記憶アドレスをデバイスにローカルにキャッシュしないデバイスを、スイッチチップＣ  １０２ｃが管理する第３のバスに接続してもよい。環境１００は、適切な種類のデバイスが、対応するバスを介して適切な種類のスイッチチップに接続することを許可してもよい。
【００５９】
アドレス変換プロセスフローの例
図２は、変換要求に応答するプロセス２００のフロー図である。たとえば、プロセス２００は、環境１００のスイッチＡ  １０２ａによって使用されてもよい。
【００６０】
スイッチは、仮想アドレスを含むアドレス変換要求をデバイスから受信する（２０２）。たとえば、スイッチは、アドレス変換要求をＡＴＳイネーブルされたデバイスから受信する。
【００６１】
スイッチは、仮想アドレスはスイッチのメモリに格納されていないと判断する（２０４）。たとえば、スイッチは、当該スイッチに含まれるＴＬＢまたはＩＯＭＭＵをチェックすることにより、ＴＬＢまたはＩＯＭＭＵが仮想アドレスおよび仮想アドレスから対応する物理アドレスへのマッピングを含むか否かを判断する。スイッチは、ＴＬＢまたはＩＯＭＭＵが仮想アドレスおよび対応する物理アドレスを含まないと判断する。
【００６２】
スイッチは、仮想アドレスから物理アドレスへのマッピングを要求するためのアドレス変換要求を送信する（２０６）。いくつかの例において、仮想アドレスがメモリに格納されていないという判断に応じて、スイッチは、アドレス変換要求を別のデバイスに送信する。たとえば、スイッチは、このアドレス変換要求を、たとえばメモリがＴＬＢのときはルートコンプレックスに送信する、または、たとえばメモリがＩＯＭＭＵのときはキャッシュまたはランダムアクセスメモリに送信する。
【００６３】
スイッチは、アドレス変換要求に対する、仮想アドレスから物理アドレスへのマッピングを含む応答を受信する（２０８）。スイッチは、仮想アドレスから物理アドレスへのマッピングをメモリに格納する（２１０）。たとえば、スイッチは、アドレス変換要求を送信し、アドレス変換要求に対する応答を、たとえばルートコンプレックスから受信し、この応答またはこの応答からのデータを、メモリに格納する。スイッチは、この応答からのデータを用いることにより、ＴＬＢ内のエントリを生成する。いくつかの例において、スイッチは、あるページテーブルの一部またはすべてを受けてこのページテーブルの一部をＩＯＭＭＵに格納してもよい。
【００６４】
スイッチは、仮想アドレスから物理アドレスへのマッピングを用いて仮想アドレスに対する物理アドレスを求める（２１２）。たとえば、スイッチは、メモリに格納されている応答またはデータを用いることにより、仮想アドレスがマッピングされている物理アドレスを求める。
【００６５】
スイッチは、物理アドレスを含む、変換要求に対する応答を、デバイスに与える（２１４）。たとえば、スイッチは、ルートコンプレックスから受信した応答をデバイスに転送してもよい。いくつかの例において、スイッチは、物理アドレスを含む新たな応答を生成しこの新たな応答をデバイスに与える。
【００６６】
上記プロセス２００におけるステップの順序は一例にすぎず、変換要求への応答は異なる順序で実行されてもよい。たとえば、スイッチは、アドレス変換要求の送信、たとえばステップ２０６を、仮想アドレスがメモリに格納されていないという判断、たとえばステップ２０４の実行の前に、実行してもよい。いくつかの例において、スイッチは、ステップ２０４とステップ２０６とを同時に実行してもよい。
【００６７】
いくつかの実装例において、プロセス２００は、追加のステップを含んでいてもよく、より少ないステップを含んでいてもよく、または、上記ステップのうちのいくつかのステップが複数のステップに分割されてもよい。たとえば、スイッチは、アドレス変換要求を受け、たとえばステップ２０４〜２１０を実行することなく、仮想アドレスがメモリに格納されていると判断し、仮想アドレスから物理アドレスへのマッピングを用いて物理アドレスを求めてもよい。
【００６８】
いくつかの実装例において、スイッチは、複数の異なるアドレス変換要求に対し、プロセス２００またはプロセス２００の一部を実行してもよい。たとえば、スイッチは、第１のアドレス変換要求を第１のデバイスから受け、第１の要求に応じた第１の物理アドレスがメモリに格納されていると判断し、第１の物理アドレスを第１のデバイスに与えてもよい。スイッチは、第２のアドレス変換要求を第１のデバイスまたはそれとは異なる第２のデバイスから受け、第２の要求に応じた第２の物理アドレスがメモリに格納されていないと判断し、たとえば、第２の要求からの仮想アドレスがメモリに格納されていないと判断し、この仮想アドレスに対するマッピングを、別のデバイスたとえばルートコンプレックスまたはキャッシュに要求してもよい。スイッチは、上記別のデバイスから、この要求に対する、マッピングを含む応答を受け、第２の物理アドレスを、要求を出したデバイスに与える。
【００６９】
スイッチは、デバイスのために仮想アドレスから物理アドレスへのマッピングを格納しており、これらのデバイス各々について、独立したメモリを含んでいてもよい。いくつかの例において、スイッチは、ＴＬＢおよびＩＯＭＭＵ双方を含んでいてもよい。
【００７０】
検証プロセスフローの例
図３は、物理アドレスがメモリに格納されているか否かを判断するためのプロセス３００のフロー図である。たとえば、プロセス３００は、環境１００のスイッチチップＡ  １０２ａまたはコントローラ１１０によって使用されてもよい。
【００７１】
スイッチは、特定の物理アドレスを含むメモリアクセス要求をデバイスから受信する（３０２）。たとえば、スイッチは読出または書込要求を受信する。
【００７２】
スイッチは、この特定の物理アドレスがスイッチのメモリに格納されているか否かを判断する（３０４）。メモリは、ＴＬＢまたはＩＯＭＭＵであってもよい。スイッチは、この特定の物理アドレスがメモリに格納されているか否かを判断しかつデバイスはこの特定の物理アドレスにアクセスすることを許可されるか否かを判断することにより、この要求を検証する。このメモリは、たとえば、スイッチが仮想アドレスから物理アドレスへのマッピングをデバイスごとに格納しておりスイッチがこのデバイスごとに１つのメモリを有するときは、デバイス固有のメモリであってもよい。メモリは、対応するバスを介してスイッチが接続しているすべてのデバイスのためのメモリであってもよい。
【００７３】
スイッチは、上記特定の物理アドレスがメモリに格納されていると判断する（３０６）。デバイスごとに１つのメモリがある場合に、この特定の物理アドレスがデバイス用のメモリに格納されているとスイッチが判断したときに、スイッチは要求を検証する。上記特定の物理アドレスがすべてのデバイス用の単一のメモリに格納されておりかつデバイスが上記特定の物理アドレスへのアクセスを許可されるとスイッチが判断したときに、スイッチは要求を検証する。
【００７４】
上記特定の物理アドレスがスイッチのメモリに格納されていると判断すると、スイッチは、メモリアクセス要求をサービスのために別のデバイスに転送する（３０８）。たとえば、スイッチは、要求を、この要求に応じたデータを有する宛先デバイスに転送する。この要求の転送は、この要求を１つ以上の中間デバイスを通してルーティングしてもよい。いくつかの例において、キャッシュがこの要求に応じたデータを含む場合、スイッチは、この要求をルートコンプレックスを介して上記キャッシュに転送してもよい。
【００７５】
スイッチは、上記特定の物理アドレスはメモリに格納されていないと判断する（３１０）。たとえば、スイッチは、上記特定の物理アドレスによって特定される記憶場所にアクセスすることをデバイスは許可されないと判断する。各デバイスが自身のメモリを有するときに、上記特定の物理アドレスが、デバイス用ではない、スイッチの別のメモリに格納されている場合、または、すべてのデバイス用の単一のメモリに格納されているものの上記特定の物理アドレスが当該デバイスに対応付けられていない場合、たとえばデバイスが特定の物理アドレスへのアクセスを許可されるべきではない場合、スイッチは要求を検証しない。
【００７６】
上記特定の物理アドレスがスイッチのメモリに格納されていないと判断したことに応じて、スイッチは、メモリアクセス要求を破棄する（３１２）。たとえば、スイッチは、この要求をサービスのために別のデバイスに転送しない、または、要求に応答しない、またはいずれも実行しない。いくつかの例において、スイッチは、破棄されたメモリアクセス要求の詳細を特定するエラーを、たとえば、スイッチのメモリに格納されていない上記特定の物理アドレスと、上記要求をスイッチに送信したソースデバイスの識別子とを、ログ記録してもよい。
【００７７】
上記特定の物理アドレスがスイッチのメモリに格納されていないと判断したことに応じて、スイッチはデバイスをリセットする（３１４）。たとえば、スイッチは、デバイスに悪意があるまたはソフトウェアバグがあるまたはこれら両方があると判断して、デバイスをリセットすることにより、たとえば、デバイスがアクセスできない記憶場所に当該デバイスがアクセスすることを防止してもよい。
【００７８】
上記プロセス３００におけるステップの順序は一例にすぎず、物理アドレスがメモリに格納されているか否かの判断は、異なる順序で実行されてもよい。たとえば、スイッチはデバイスをリセットしてからメモリアクセス要求を破棄してもよい、たとえばステップ３１４を実行してからステップ３１２を実行してもよい。
【００７９】
いくつかの実装例において、プロセス３００は、追加のステップを含んでいてもよく、より少ないステップを含んでいてもよく、または、上記ステップのうちのいくつかのステップが複数のステップに分割されてもよい。たとえば、複数の異なるメモリアクセス要求、複数の異なる種類のメモリアクセス要求たとえば読出要求、書込要求またはこれら両方、スイッチによって管理されるバスに接続されている複数の異なるデバイス、またはこれらのうちの２つ以上を組合わせたものに対し、スイッチは、プロセス３００の一部を実行してもよくまたはすべてを実行してもよい。スイッチは、要求のうちのいくつかを検証してもよく、要求のうちのいくつかを無効にしてもよく、または、要求のうちのいくつかを検証するとともにいくつかを無効にしてもよい。
【００８０】
いくつかの実装例では、ＴＬＢまたはＩＯＭＭＵを有する別のデバイスが要求を検証する。たとえば、ルートコンプレックスがプロセス３００を実行することにより要求を検証してもよい。
【００８１】
任意の実装の詳細
いくつかの実装例において、スイッチチップは、デバイスごとにアドレスマッピングを格納しデバイスごとにＴＬＢを含んでいてもよく、たとえば、スイッチチップが管理するバスにデバイスが接続できるようにする各ポートであってそのためにスイッチチップがアドレスマッピングを格納する各ポートについて、ＴＬＢを含んでいてもよい。スイッチチップは、ポート情報を用いることにより、どのＴＬＢにアクセスすべきかを判断してもよく、たとえば、特定のデバイス用のアドレスマッピングを求めてもよく、または、特定のデバイスのメモリアクセス要求を検証してもよい。スイッチチップは、適切な方法を用いることにより、特定のデバイスのためにどのＴＬＢにアクセスするかを判断してもよい。
【００８２】
いくつかの実装例において、スイッチチップは、識別子、たとえばポート識別子を用いることにより、デバイスを特定し、当該デバイスがアドレスマッピングをこのデバイスにローカルにキャッシュできるかできないかを判断してもよい。たとえば、スイッチチップは、バスを介してそのポートに接続されているデバイスがＡＴＳをサポートするか否かおよびスイッチチップがそのデバイスからのアドレス変換要求に応じるべきか否かを示すビットを、ポートごとに含む。
【００８３】
スイッチチップ内のメモリたとえばＩＯＭＭＵのサイズは、そのためにメモリがアドレスマッピングを格納するデバイスの数に基づいて、たとえば、各ポートがデバイスに対応し当該デバイスはスイッチチップが管理するバスに接続することができＩＯＭＭＵが当該デバイスのためにページテーブルを格納している場合はスイッチチップ内のポートの数に基づいて、選択されてもよい。たとえば、バスを介して接続する機能を有し１６以下のデバイス用のページテーブルを格納するスイッチチップは、別のバスを介して接続する機能を有し４以下のデバイス用のページテーブルを格納する別のスイッチチップよりも、大きなＩＯＭＭＵを含み得る。
【００８４】
いくつかの実装例において、ＩＯＭＭＵは、１つ以上のデバイス用のページテーブルの総数のうちのある割合を格納してもよい。たとえば、特定のデバイスが多数の記憶場所にアクセスし得る場合、ＩＯＭＭＵは、この特定のデバイス用のページテーブルのうちのすべてではなく一部を格納してもよい。
【００８５】
スイッチチップは、ＩＯＭＭＵのうちの所定の割合を、ＩＯＭＭＵがページテーブルを格納する対象である各デバイスのためのページテーブルの格納に割当ててもよい。たとえば、１６以下のデバイスに対して、スイッチチップがバスを介して接続しページテーブルを格納することができ、かつ、当該スイッチチップが管理するバスに１つのデバイスが接続している場合、当該スイッチチップは、ＩＯＭＭＵ全体を、この１つのデバイスのためのページテーブルを格納するために割当ててもよい。当該スイッチチップが管理するバスに別のデバイスが接続している場合、スイッチチップは、ＩＯＭＭＵ内のメモリのうちの２分の１をデバイス各々に割当て、それ以外のデバイスに対しても同様に割当てを行なってもよい。いくつかの実装例において、ＩＯＭＭＵは、スイッチチップが管理するバスに実際に接続しているデバイスの数とは関係なく、メモリの１６分の１を各デバイスに割当ててもよい。
【００８６】
いくつかの実装例において、スイッチチップは、ＩＯＭＭＵに代えてメモリ管理ユニット（ＭＭＵ）を含み得る。たとえば、スイッチチップは、当該スイッチチップが管理するバスに接続されているデバイスのために、ＭＭＵを用いて仮想アドレスを物理アドレスに変換してもよい。
【００８７】
その他実装の詳細
本明細書に記載の主題および機能的動作の実施形態は、デジタル電子回路において、有形に実現されたコンピュータソフトウェアまたはファームウェアにおいて、本明細書に開示されている構造およびそれらの構造的均等物を含むコンピュータハードウェアにおいて、または、これらのうちの１つ以上を組合わせたものにおいて、実現することができる。本明細書に記載の主題の実施形態は、１つ以上のコンピュータプログラムとして、すなわち、データ処理装置によって実行されるかまたはデータ処理装置の動作を制御するための有形の非一時的なプログラムキャリア上で符号化されているコンピュータプログラム命令の１つ以上のモジュールとして、実現することができる。コンピュータ記憶媒体は、機械読取可能な記憶装置、機械読取可能な記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、または、これらのうちの１つ以上を組合わせたものであってもよい。
【００８８】
「データ処理装置」という用語は、データ処理ハードウェアのことであり、例として１つのプログラマブルプロセッサ、１つのコンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのすべての種類の装置、デバイス、およびマシンを包含する。この装置は、専用論理回路、たとえばＦＰＧＡ（フィールドプログラマブルゲートアレイ）またはＡＳＩＣ（特定用途向け集積回路）であってもよく、これをさらに含んでいてもよい。この装置は、任意で、ハードウェアに加えて、コンピュータプログラムのための実行環境を生成するコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはこれらのうちの１つ以上を組合わせたものを構成するコードを、含み得る。
【００８９】
コンピュータプログラムは、プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、またはコードと呼ばれることもありまたはそういうものとして説明されることもあり、コンパイルされたもしくは解釈言語または宣言型もしくは手続型言語を含む任意の形態のプログラミング言語で書込むことができ、スタンドアロンプログラムとしてまたはモジュールまたはコンポーネントまたはサブルーチンまたは計算環境で使用するのに適したその他のユニットを含む、任意の形態で、デプロイすることができる。コンピュータプログラムは、ファイルシステム内のファイルに対応していてもよいが、ファイルシステム内のファイルに対応している必要はない。プログラムは、その他のプログラムまたはデータたとえばマークアップ言語文書に格納された１つ以上のスクリプトを保持するファイルの一部に、当該プログラム専用の１つのファイルに、または、複数の統合されたファイルたとえば１つ以上のモジュール、サブプログラム、またはコードの部分を格納するファイルに、格納することができる。コンピュータプログラムは、１つのコンピュータ上で、または、１つの場所に位置しまたは複数の場所に分散しており通信ネットワークによって相互に接続されている複数のコンピュータ上で、デプロイして実行することができる。
【００９０】
本明細書に記載のプロセスおよび論理フローは、１つ以上のコンピュータプログラムを実行して入力データに対して動作し出力を生成することによって機能を果たす１つ以上のプログラマブルコンピュータによって実行することができる。上記プロセスおよび論理フローは、専用論理回路、たとえばＦＰＧＡ（フィールドプログラマブルゲートアレイ）またはＡＳＩＣ（特定用途向け集積回路）によって実行することもでき、装置は、専用論理回路、たとえばＦＰＧＡまたはＡＳＩＣとして実装することもできる。
【００９１】
コンピュータプログラム命令およびデータを格納するのに適したコンピュータ読取可能な媒体は、すべての形態の不揮発性メモリ、媒体、および記憶装置を含み、これらは例として、半導体記憶装置、たとえばＥＰＲＯＭ、ＥＥＰＲＯＭ、およびフラッシュメモリデバイスと、磁気ディスクたとえば内部ハードディスクまたはリムーバブルディスクと、光磁気ディスクと、ＣＤ-ＲＯＭおよびＤＶＤ−ＲＯＭディスクとを含む。プロセッサおよびメモリに、専用論理回路を補充してもよくまたは組込んでもよい。
【００９２】
本明細書には多数の具体的な実装の詳細が含まれているが、これらは、クレームし得るものの範囲を限定するものとして解釈されるべきものではなく、むしろ、特定の実施形態に固有であってもよい特徴の説明であると解釈されるべきものである。別々の実装例の文脈において本明細書に記載されている特定の特徴を、１つの実施形態における組合わせとして実装することも可能である。逆に、１つの実施形態の文脈において記載されているさまざまな特徴を、複数の実施形態において別々に、または適切なサブコンビネーションとして実装することも可能である。加えて、特徴は特定の組合わせにおいて作用するものとして説明されそういうものとして最初にクレームされる場合があるが、クレームされている組合わせからの１つ以上の特徴は、場合によってはこの組合わせから削除されることがあり、クレームされている組合わせが、サブコンビネーションまたはサブコンビネーションの変形に関連する場合がある。
【００９３】
同様に、図面では動作を特定の順序で示しているが、これは、所望の結果を得るために、このような動作を、示されている特定の順序でもしくは連続して順番に実行すること、または、示されているすべての動作を実行することを、要求しているのではない。特定の状況では、マルチタスキングおよび並列処理が好都合であろう。加えて、上記実施形態ではさまざまなシステムコンポーネントが分離されているが、これは、すべての実施形態においてこのような分離が必要であると理解されるべきものではなく、記載されているプログラムコンポーネントおよびシステムは概ね１つのソフトウェアプロダクトに統合することができるまたは複数のソフトウェアプロダクトにパッケージングすることができると理解されるべきものである。
【００９４】
主題の特定の実施形態について説明してきた。その他の実施形態は以下の請求項の範囲に含まれる。たとえば、請求項に記載の動作は、異なる順序で実行してもよくそれでもなお所望の結果を得ることができる。一例として、添付の図面に記載のプロセスは、所望の結果を得るために、必ずしも示されている特定の順序または連続した順序でなければならない訳ではない。場合によってはマルチタスクおよび並列処理が好都合であろう。
【図１】
0006434168.tif 000002
【図２】
0006434168.tif 000003
【図３】
0006434168.tif 000004