(57)【特許請求の範囲】
【請求項１】
情報の転送を提供するための相互接続手段と、
該相互接続手段に結合された主メモリと、
該相互接続手段に結合されたＩ／Ｏアダプタであって、Ｉ／Ｏページ番号をメモリ・アドレス・ページ番号へとマッピングする翻訳マップを含み、該翻訳マップがコヒーレンス・インデックスを含む、Ｉ／Ｏアダプタと、
前記相互接続手段に結合されたプロセッサであって、キャッシュと、該プロセッサにより実行される命令に応じて前記翻訳マップに格納されるべきコヒーレンス・インデックスを生成する命令実行手段とを含み、及び該命令実行手段がハードウェアにおいてハッシュ操作を行ってコヒーレンス・インデックスを生成し、該プロセッサ内に前記Ｉ／Ｏアダプタを含まない、プロセッサとを備えたコンピュータ・システムであって、
前記Ｉ／Ｏアダプタがデータ転送の実行中に該Ｉ／Ｏアダプタから前記プロセッサへコヒーレンス・インデックスを送る際に、前記プロセッサが、該コヒーレンス・インデックスを使用して、更新された関連するデータが前記キャッシュ内に存在するか否かを検出し、更新された関連するデータが前記キャッシュ内に存在することを該プロセッサが検出した際に、前記主メモリ内の旧いデータではなく該更新された関連するデータがデータ転送に使用される、コンピュータ・システム。
【請求項２】
前記命令が、コヒーレンス・インデックス・ロード操作、仮想メモリ・オフセット、及びスペース識別子を指定し、前記命令実行手段が、該命令に応じて、前記仮想メモリ・オフセットからのビット部分集合及び前記スペース識別子からのビット部分集合にハッシュ操作を実行してコヒーレンス・インデックスを生成する、請求項１に記載のコンピュータ・システム。
【請求項３】
前記仮想メモリ・オフセットが第１の汎用レジスタに格納され、前記スペース識別子が第２の汎用レジスタに格納され、前記コヒーレンス・インデックスが汎用ターゲット・レジスタに配置される、請求項２に記載のコンピュータ・システム。
【請求項４】
前記命令が、前記第１の汎用レジスタを識別することにより前記仮想メモリ・オフセットを指定し、前記第２の汎用レジスタを識別することにより前記スペース識別子を指定し、及び前記汎用ターゲット・レジスタを指定する、請求項３に記載のコンピュータ・システム。
【請求項５】
前記命令が、ベース・レジスタ、インデックス・レジスタ、選択スペース・レジスタ、及びターゲット・レジスタを指定し、前記命令実行手段が、該命令に応じて、前記ベース・レジスタ及び前記選択スペース・レジスタに格納された情報からスペース識別子を生成し、前記ベース・レジスタに格納された情報及び前記インデックス・レジスタに格納された情報からオフセットを生成し、該オフセットからのビット部分集合及び前記スペース識別子からのビット部分集合にハッシュ操作を実行してコヒーレンス・インデックスを生成する、請求項１に記載のコンピュータ・システム。
【請求項６】
前記ベース・レジスタが一般にベース値を格納する第１の汎用レジスタであり、前記インデックス・レジスタが一般にインデックス値を格納する第２の汎用レジスタであり、前記ターゲット・レジスタが前記コヒーレンス・インデックスを受信する第３の汎用レジスタである、請求項５に記載のコンピュータ・システム。
【請求項７】
前記命令が、仮想アドレスを生成するために用いられる少なくとも１つのレジスタを指定する、請求項１に記載のコンピュータ・システム。
【請求項８】
コンピュータ・システムにおいて、
（ａ）プロセッサによりコヒーレンス・インデックスを生成するステップであって、
（a.1）前記プロセッサにより実行されたコヒーレンス・インデックス・ロード命令に応じてハードウェアでハッシュ操作を実行してコヒーレンス・インデックスを生成する、
というサブ・ステップを含む、コヒーレンス・インデックス生成ステップと、
（ｂ）前記プロセッサ内に含まれないＩ／Ｏアダプタ内の翻訳マップであって、Ｉ／Ｏページ番号をメモリ・アドレス・ページ番号へとマッピングするものである前記翻訳マップに、前記コヒーレンス・インデックスを格納するステップと、
（ｃ）データ転送の実行時に前記Ｉ／Ｏアダプタから前記プロセッサに前記コヒーレンス・インデックスを送るステップと、
（ｄ）前記ステップ（ｃ）における前記Ｉ／Ｏアダプタからの前記コヒーレンス・インデックスを前記プロセッサが受信した際に、該コヒーレンス・インデックスを該プロセッサにより使用して該プロセッサ内のキャッシュ内に更新された関連するデータが存在するか否かを検出し、該プロセッサが該キャッシュ内に更新された関連するデータが存在することを検出した際に、該プロセッサの外部にある主メモリ内の旧いデータではなく前記更新された関連するデータをデータ転送に使用するステップと
からなる方法。
【請求項９】
前記サブステップ（a.1）において、前記コヒーレンス・インデックス・ロード命令が、コヒーレンス・インデックス・ロード操作、仮想メモリ・オフセット、及びスペース識別子を指定し、該サブステップ（a.1）が、前記仮想メモリ・オフセットからのビット部分集合及び前記スペース識別子からのビット部分集合にハッシュ操作を実行してコヒーレンス・インデックスを生成するステップを含む、請求項８に記載の方法。
【請求項１０】
前記サブステップ（a.1）において、前記仮想メモリ・オフセットが第１の汎用レジスタに格納され、前記スペース識別子が第２の汎用レジスタに格納され、前記コヒーレンス・インデックスが汎用ターゲット・レジスタに配置される、請求項９に記載の方法。
【請求項１１】
前記サブステップ（a.1）において、前記コヒーレンス・インデックス・ロード命令が、前記第１の汎用レジスタを識別することにより前記仮想メモリ・オフセットを指定し、前記第２の汎用レジスタを識別することにより前記スペース識別子を指定し、及び汎用ターゲット・レジスタを指定する、請求項１０に記載の方法。
【請求項１２】
前記サブステップ（a.1）において、前記コヒーレンス・インデックス・ロード命令が、ベース・レジスタ、インデックス・レジスタ、選択スペース・レジスタ、及びターゲット・レジスタを指定し、該サブステップ（a.1）が、前記ベース・レジスタ及び前記選択スペース・レジスタに格納された情報から前記スペース識別子を生成するステップと、前記ベース・レジスタに格納された情報及び前記インデックス・レジスタに格納された情報からオフセットを生成するステップと、該オフセットからのビット部分集合及び前記スペース識別子からのビット部分集合にハッシュ操作を実行してコヒーレンス・インデックスを生成するステップとを含む、請求項８に記載の方法。
【請求項１３】
前記サブステップ（a.1）において、前記ベース・レジスタが一般にベース値を格納する第１の汎用レジスタであり、前記インデックス・レジスタが一般にインデックス値を格納する第２の汎用レジスタであり、前記ターゲット・レジスタが前記コヒーレンス・インデックスを受信する第３の汎用レジスタである、請求項１２に記載の方法。
【請求項１４】
前記サブステップ（a.1）において、前記コヒーレンス・インデックス・ロード命令が、コヒーレンス・インデックス・ロード操作と、仮想アドレスを生成するために用いられる少なくとも１つのレジスタとを指定する、請求項８に記載の方法。
【請求項１５】
プロセッサであって、
キャッシュと、
該キャッシュに結合された命令実行手段であって、該プロセッサにより実行される命令に応じて、Ｉ／Ｏページ番号をメモリ・アドレス・ページ番号へとマッピングするＩ／Ｏアダプタ内の翻訳マップに格納すべきコヒーレンス・インデックスを生成し、ハードウェアでハッシュ操作を実行してコヒーレンス・インデックスを生成する、命令実行手段とを備えており、
前記Ｉ／Ｏアダプタが該プロセッサ内に含まれておらず、
該Ｉ／Ｏアダプタが、データ転送の実行時に前記コヒーレンス・インデックスを該Ｉ／Ｏアダプタから該プロセッサへと送り、該プロセッサが、該コヒーレンス・インデックスを使用して、更新された関連するデータが前記キャッシュ内に存在するか否かを検出し、更新された関連するデータが前記キャッシュ内に存在することを検出した際に、該プロセッサの外部にある主メモリ内の旧いデータではなく前記更新された関連するデータをデータ転送のために使用する、
プロセッサ。
【請求項１６】
前記命令が、コヒーレンス・インデックス・ロード操作、仮想メモリ・オフセット、及びスペース識別子を指定し、前記命令実行手段が、該命令に応じて、前記仮想メモリ・オフセットからのビット部分集合及び前記スペース識別子からのビット部分集合にハッシュ操作を実行してコヒーレンス・インデックスを生成する、請求項１５に記載のプロセッサ。
【請求項１７】
前記仮想メモリ・オフセットが第１の汎用レジスタに格納され、前記スペース識別子が第２の汎用レジスタに格納され、前記コヒーレンス・インデックスが汎用ターゲット・レジスタに配置される、請求項１６に記載のプロセッサ。
【請求項１８】
前記命令が、前記第１の汎用レジスタを識別することにより前記仮想メモリ・オフセットを指定し、前記第２の汎用レジスタを識別することにより前記スペース識別子を指定し、及び前記汎用ターゲット・レジスタを指定する、請求項１７に記載のプロセッサ。
【請求項１９】
前記命令が、ベース・レジスタ、インデックス・レジスタ、選択スペース・レジスタ、及びターゲット・レジスタを指定し、前記命令実行手段が、該命令に応じて、前記ベース・レジスタ及び前記選択スペース・レジスタに格納された情報からスペース識別子を生成し、前記ベース・レジスタに格納された情報及び前記インデックス・レジスタに格納された情報からオフセットを生成し、該オフセットからのビット部分集合及び前記スペース識別子からのビット部分集合にハッシュ操作を実行してコヒーレンス・インデックスを生成する、請求項１５に記載のプロセッサ。
【請求項２０】
前記ベース・レジスタが一般にベース値を格納する第１の汎用レジスタであり、前記インデックス・レジスタが一般にインデックス値を格納する第２の汎用レジスタであり、前記ターゲット・レジスタが前記コヒーレンス・インデックスを受信する第３の汎用レジスタである、請求項１９に記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、入力／出力アダプタにより使用されるコヒーレンス・インデックス生成に関する。
【０００２】
【従来の技術】
最新のコンピュータ・システムの大部分には、中央演算処理装置（ＣＰＵ）及び主メモリが含まれている。ＣＰＵが命令及びオペランドを復号化し、実行することが可能な速度は、命令及びオペランドを主メモリからＣＰＵに転送することが可能な速度に依存する。ＣＰＵが主メモリから命令及びオペランドを得るのに必要な時間を短縮する試みとして、多くのコンピュータ・システムには、ＣＰＵと主メモリの間にキャッシュ・メモリが含まれる。
【０００３】
キャッシュ・メモリは、ＣＰＵによって近い将来に用いられるであろうと思われる、主メモリの内容の一部を一時的に保持するために利用される、小形で、高速のバッファ・メモリである。キャッシュ・メモリの主要目的は、データまたは命令の取り出しのため、メモリのアクセスを実行するのに必要な時間を短縮することにある。キャッシュ・メモリに納められた情報は、主メモリに納められた情報に比べると、かなり短い時間でアクセスすることが可能である。従って、キャッシュ・メモリを備えたＣＰＵは、命令及びオペランドの取り出し、及び／又は格納の待機に費やす必要のある時間を大幅に短縮することになる。
【０００４】
キャッシュ・メモリは、１ワード以上のデータによる多くのブロックから構成される。各ブロックは、それが主メモリのどのブロックのコピーであるかを独自に識別するアドレス・タグに関連づけられている。プロセッサが、メモリを参照する毎に、アドレス・タグを比較して、要求されたデータのコピーが、キャッシュ・メモリに納められているか否かの確認が行われる。所望のメモリ・ブロックがキャッシュ・メモリ内になければ、該ブロックは、主メモリから検索され、キャッシュ・メモリに格納され、プロセッサに供給される。
【０００５】
キャッシュ・メモリを利用して、主メモリからデータを検索する以外に、ＣＰＵは、主メモリに直接ではなく、キャッシュ・メモリにデータを書き込むことも可能である。プロセッサが、メモリに対するデータの書き込みを所望する場合、キャッシュ・メモリは、アドレス・タグの比較を行って、データを書き込むべきデータ・ブロックがキャッシュ・メモリに残っているか否かを確認する。データ・ブロックがキャッシュ・メモリに存在する場合、データはキャッシュ・メモリのデータ・ブロックに書き込まれる。多くのシステムでは、次に、データ・ブロックに関するデータである「ダーティ・ビット」がセットされる。ダーティ・ビットは、データ・ブロック内のデータが、ダーティである（すなわち、変更された）ことを表しており、従って、キャッシュ・メモリからデータ・ブロックを削除する前に、変更されたデータを主メモリに書き込まなければならない。データを書き込むべきデータ・ブロックが、キャッシュ・メモリ内に存在しなければ、データ・ブロックをキャッシュ・メモリに取り出すか、又は主メモリに直接データを書き込まなければならない。新たなデータがキャッシュ・メモリに納められる場合、重ね書きされる、又はキャッシュ・メモリからコピーされるデータ・ブロックは、犠牲ブロックまたは犠牲ラインと呼ばれる。
【０００６】
１つ以上のプロセッサがキャッシュを利用するシステムにおいて、Ｉ／Ｏアダプタが、主メモリにアクセスする場合、メモリにおいてアクセスを受けるデータの完全性を保証するステップを踏む必要がある。例えば、Ｉ／Ｏアダプタが、メモリからデータをアクセスする（書き込むか、又は読み取る）場合、更新バージョンのデータが、システムにおけるプロセッサのキャッシュに残っているか否かを判定することが重要である。更新バージョンのデータが存在する場合には、Ｉ／Ｏアダプタが更新バージョンのデータをアクセスすることを保証するためにしなければならないことがある。ここで、更新バージョンのデータが利用されることを確実にする操作をコヒーレンス操作と呼ぶことにする。
【０００７】
コヒーレンス操作の成功を確実にするために、考慮すべき必要のある多くの要因がある。例えば、多くのシステムの場合、キャッシュに格納されたデータは、一般に、仮想アドレスから導き出されたインデックスを利用してアクセスされる。さらに、ハッシュ・アルゴリズムを用いて、キャッシュ内のデータを分散させる場合が多い。しかし、システム・メモリからのアクセスは、実アドレスを利用して実施される。
【０００８】
【発明が解決しようとする課題】
システム・メモリからＩ／Ｏアダプタによってアクセスされるデータのコヒーレンスを保証するため、さまざまな提案がされている。例えば、解決策の１つは、データが主メモリからアクセスを受ける毎に、ソフトウェアによって、システムにおける各プロセッサのキャッシュを明示的にフラッシュすることである。キャッシュをフラッシュすると、Ｉ／Ｏアダプタによるデータ・アクセスの前に、更新バージョンのデータが、確実に主メモリに戻されることになる。しかし、この案によれば、Ｉ／Ｏアダプタによるメモリ・アクセスのオーバヘッドが大幅に増大する可能性がある。
【０００９】
別の案では、各システム・プロセッサには、実アドレスを仮想アドレスに変換する「ＢＬＴ」テーブルが含まれる。Ｉ／Ｏアダプタが、システム・メモリにアクセスすると、各システム・プロセッサは、実アドレスを仮想アドレスに変換し、そのキャッシュにアクセスして、アクセスしたデータがキャッシュ内に存在するか否かを判定する。存在すれば、Ｉ／Ｏアダプタがアクセスを完了する前に、アクセスしたデータがメモリにフラッシュされる。代替案として、Ｉ／Ｏアダプタがキャッシュから直接データをアクセスすることも可能である。
【００１０】
別の案では、Ｉ／Ｏアダプタがメモリにアクセスすると、Ｉ／Ｏアダプタが、各プロセッサにコヒーレンス・インデックスを送る。コヒーレンス・インデックスは、各プロセッサによって、プロセッサに関連したキャッシュにアクセスし、アクセスしたデータがキャッシュに存在するか否かを判定するために利用される。存在すれば、Ｉ／Ｏアダプタがアクセスを完了する前に、アクセスしたデータは、メモリにフラッシュされる。代替案として、Ｉ／Ｏアダプタは、キャッシュから直接データをアクセスすることが可能である。
【００１１】
メモリ・アクセスに関するコヒーレンス・インデックスは、Ｉ／Ｏアダプタ内の翻訳テーブルに格納することが可能である。Ｉ／Ｏアクセスを開始するプロセッサは、適合するインデックスをＩ／Ｏアダプタ内の翻訳テーブルに配置することが可能である。仮想アドレスの一部を利用してプロセッサ・キャッシュにアクセスするコンピュータ・システムの場合、Ｉ／Ｏアダプタ内の翻訳テーブルに適当なインデックスを配置することは、仮想アドレスからキャッシュ・インデックスを抽出し、該インデックスのデータ転送をＩ／Ｏアダプタ内の翻訳テーブルに対して行うこととすることができる。しかし、仮想アドレスをハッシュすることによりキャッシュ・インデックスが導き出されるコンピュータ・システムの場合、コヒーレンス・インデックスを得るには、いくつかの追加操作を行ってハッシュ操作を実施することが必要となる可能性がある。これは、Ｉ／Ｏアダプタによるメモリ・アクセスのオーバヘッドを大幅に増大させるものとなり得る。
【００１２】
【課題を解決するための手段】
本発明の好適実施例によれば、コンピュータ・システムには、相互接続手段、主メモリ、入力／出力（Ｉ／Ｏ）アダプタ、及びプロセッサが含まれる。好適実施例の場合、相互接続手段はバスである。代替案として、相互接続手段は、リング・ネットワーク、クロス・バー・スイッチ、または、コヒーレントＩ／Ｏを利用する任意のメモリ相互接続とすることが可能である。
【００１３】
主メモリ、Ｉ／Ｏアダプタ、及びプロセッサは、バスに接続される。Ｉ／Ｏアダプタには、翻訳マップが含まれている。翻訳マップは、Ｉ／Ｏページ番号をメモリ・アドレス・ページ番号にマッピングする。翻訳マップには、コヒーレンス・インデックスが含まれる。プロセッサには、キャッシュ及び命令実行手段が含まれる。命令実行手段は、翻訳マップに格納すべきコヒーレンス・インデックスを生成する。命令実行手段は、ハードウェアにおいて、ハッシュ操作を実施して、コヒーレンス・インデックスを生成する。
【００１４】
本発明の好適実施例の場合、命令実行手段は、コヒーレンス・インデックス・ロード命令を実行する。コヒーレンス・インデックス・ロード命令には、パラメータとして、ベース・レジスタ、インデックス・レジスタ、選択スペース・レジスタ、及びターゲット・レジスタが含まれる。命令の実行においては、コヒーレンス・インデックス・ロード命令及びそれに伴うパラメータに応答して、仮想アドレスが生成される。次に、命令の実行において、仮想アドレスに基づくビット部分集合にハッシュ操作を実施し、コヒーレンス・インデックスが生成される。
【００１５】
好適実施例の場合、仮想アドレスが、ベース・レジスタ及び選択スペース・レジスタに格納された情報からスペース識別子を利用して形成される。仮想アドレスの形成には、また、ベース・レジスタに格納された情報、及びインデックス・レジスタに格納された情報からのオフセットも利用される。仮想アドレスは、スペース識別子、及びオフセットを連結したものである。
【００１６】
好適実施例の場合、ベース・レジスタは、一般にベース値を格納する第１の汎用レジスタである。インデックス・レジスタは、一般にインデックス値を格納する第２の汎用レジスタである。ターゲット・レジスタは、コヒーレンス・インデックスを受信する第３の汎用レジスタである。
【００１７】
一度生成されると、コヒーレンス・インデックスは、Ｉ／Ｏアダプタ内の翻訳マップに格納される。データ転送を実施すると、Ｉ／Ｏアダプタは、プロセッサに適合するコヒーレンス・インデックスを送る。プロセッサは、Ｉ／Ｏアダプタからコヒーレンス・インデックスを受信すると、コヒーレンス・インデックスを利用して、キャッシュ内のデータをアクセスする。
【００１８】
本発明の好適実施例によれば、入力／出力（Ｉ／Ｏ）アダプタ内の翻訳テーブルに関するコヒーレンス・インデックスの生成が、最小限のオーバヘッドで可能になる。キャッシュ・インデックスの生成に用いられる既存のハードウェアが、コヒーレンス・インデックス・ロード命令に応答して、コヒーレンス・インデックスの生成にも利用される場合、本発明の実施には、既存のハードウェアに最小限の変更しか必要としない。
【００１９】
【実施例】
図１には、コンピュータ・システムの簡略ブロック図が示されている。プロセッサ１０、プロセッサ１１、及びメモリ１２が、図示のように、メモリ・バス９に接続されている。プロセッサ１０はデータ・キャッシュ１７を利用する。プロセッサ１１はデータ・キャッシュ１８を利用する。メモリ・バス９には、入力／出力（Ｉ／Ｏ）アダプタ１３も接続されている。Ｉ／Ｏアダプタ１３は、Ｉ／Ｏバス１４に接続されている。Ｉ／Ｏバス１４には、Ｉ／Ｏ装置１５及びＩ／Ｏ装置１６も接続されている。翻訳マップ１９を利用して、Ｉ／Ｏバス１４で使用さられるアドレスがメモリ１２で使用されるアドレスに変換される。
【００２０】
図２には、本発明の好適実施例による翻訳マップ１９の実施態様が示されている。翻訳マップ１９を利用して、Ｉ／Ｏバス・アドレス２１がメモリ・アドレス２３に変換される。翻訳マップ１９は、Ｉ／Ｏ変換の直接マップ方式キャッシュとして実施される。代替案として、翻訳マップ１９は、完全連想方式キャッシュ、セット連想方式キャッシュ、又はＩ／Ｏページ翻訳が完全に納められたテーブルとして実施することも可能である。当業者であれば、どの実施態様についても明確に理解できるであろう。
【００２１】
好適実施例において、翻訳時に、Ｉ／Ｏページを用いて、翻訳マップ１９内の対応するメモリ・ページにアクセスする。図２に示す実施例の場合、Ｉ／Ｏページ・ビットの第１の部分が、翻訳マップ１９へのインデックスとして利用され、Ｉ／Ｏページ・ビットの第２の部分が、比較器２５によって、現在捜し求められている翻訳が翻訳マップ１９内にあるか否かの判定のために利用される。Ｉ／Ｏアドレス・オフセットは、メモリ・アドレス・オフセットと同じである。例えば、好適実施例の場合、Ｉ／Ｏバス１４は、それぞれ、２０ビットのＩ／Ｏページ番号と１２ビットのオフセットを備えた、３２ビットのアドレスを利用する。メモリ・バス９は、それぞれ、２８ビットのメモリ・ページ番号と１２ビットのオフセットを備えた、４０ビットのアドレスを利用する。  好適実施例の場合、各メモリ・ページ毎に、翻訳マップ１９には、コヒーレンス・インデックスも含まれる。コヒーレンス・インデックスは、仮想アドレスから導き出され、プロセッサ１０内のインデックス・キャッシュ１７、及びプロセッサ１１内のキャッシュ１８に対して用いられる。コヒーレンス・インデックスがメモリ・アクセス処理の一部として送られると、プロセッサ１０及び１１は、それぞれ、可能性のあるコヒーレンスの矛盾に対して、キャッシュ１７及び１８の情報を探索することが可能になる。
【００２２】
プロセッサ１０または１１で実行されるオペレーティング・システムのソフトウェアは、Ｉ／Ｏアダプタ１３内の翻訳マップ１９にアドレス翻訳情報をロードする。この情報には、コヒーレンス・インデックスが含まれる。例えば、図３には、仮想アドレス３１が示されている。仮想アドレス３１には、仮想部分と物理部分が含まれる。非ハッシュ仮想キャッシュ・インデックスを利用するシステムの場合、コヒーレンス・インデックス３２は、仮想アドレス３１の仮想部分を形成するビット部分集合を利用して生成される。キャッシュ・インデックス３８は、物理部分のビット部分集合に加えて、仮想アドレス３１の仮想部分を形成するビット部分集合を利用することにより生成される。こうしたシステムの場合、キャッシュ・インデックスの仮想部分は、コヒーレンス・インデックスであり、オペレーティング・システムが、仮想アドレスから直接これを抽出し、Ｉ／Ｏアダプタ１３内の翻訳マップ１９に格納することが可能である。
【００２３】
図３には、仮想アドレス３３も示されている。仮想アドレスには、スペース識別子、仮想ページ、及び物理部分が含まれている。このシステムにおいて、キャッシュ・インデックス３９は、ハッシュ・ハードウェア３６を利用して仮想アドレス３３のスペース識別子を形成するビット部分集合と、仮想アドレス３３の仮想部分を形成するビット部分集合をハッシュし、仮想アドレスの物理部分の部分集合を連結することによって、生成される。コヒーレンス・インデックス３７は、図３に示すように、キャッシュ・インデックス３９の仮想部分と同様に生成される。
【００２４】
以下の説明において、ビットは、左端または最上位端がビット０で、右端または最下位端が大きい番号のビットになる、「ビッグ・エンディアン」・フォーマットで番号が付けられる。
【００２５】
例えば、好適実施例の場合、仮想アドレス３３は、４８ビットのアドレスである。ビット０〜１５（spac[16,17,...,31]）は、スペース識別子を指定する。ビット１６〜３５（virt[0,1,...,19]）は、仮想ページ番号を指定する。ビット３６〜４７（virt[20,21,...,31]）は、アドレスの物理部分を指定する。キャッシュ・アドレス・ビット（cach[12,13,...,26]）は、下記の表１で示されるように導出されるキャッシュ１７にアクセスするために用いられる。
【００２６】
【表１】
0003662619.tif 000002
【００２７】
上記表１から明らかなように、本発明の好適実施例に用いられるハッシュには、キャッシュ・ビットのうちの８つ（cach[12...19]）を生成するために、実施すべき論理「排他的ＯＲ」（ＸＯＲ）機能が必要になる。ソフトウェアにおけるハッシュの実行は、キャッシュ・インデックスを生成するために、いくつかのソフトウェア命令を必要とする。さらに、プロセッサが異なる世代の場合、キャッシュにアクセスするために、異なるハッシュが用いられる可能性がある。従って、ソフトウェアは、プロセッサのタイプまたは改訂に依存して異なる計算を実行する必要がある。
【００２８】
しかし、本発明の好適実施例の場合、プロセッサ１０及びプロセッサ１１は、それぞれ、その命令セット内に、仮想コヒーレントＩ／Ｏを支援するプロセッサ命令を含んでいる。図４には、こうしたプロセッサ命令に関する簡略レイアウトが示されている。命令には、命令コード、スペース識別子を含む第１のソース・レジスタに対する参照（Ｒ１）、仮想オフセット（仮想ページに物理部分を加えたもの）を含む第２のソース・レジスタに対する参照（Ｒ２）、及びターゲット値（コヒーレンス・インデックス）が配置された宛先レジスタ（Ｄ）が含まれている。当業者であれば明らかなように、あるプロセッサ・アーキテクチャの中には、単一レジスタを利用して、仮想アドレスの指定を行うことができるものもある。一度生成されると、コヒーレンス・インデックスは、Ｉ／Ｏアダプタ１３内の翻訳マップ１９に格納することが可能である。好適実施例の場合、命令を実行する際、プロセッサ１０及びプロセッサ１１は、それぞれ、ハードウェアを用いて、コヒーレンス・インデックスを生成する。例えば、プロセッサ１０は、ハードウェア３３を用いて、コヒーレンス・インデックスを生成する。また、プロセッサ１０は、ハードウェア３３を利用して、キャッシュ１７へのアクセスに備えてキャッシュ・インデックスも生成する。従って、コヒーレンス・インデックスを生成する操作の好適実施態様では、下記の表２に示す機能を利用する。下記の表２に示す機能を利用して実施する場合、８ビットの規定された結果は、キャッシュ・インデックスのハッシュ部分の生成に用いられる計算と整合する。
【００２９】
【表２】
0003662619.tif 000003
【００３０】
図５には、本発明の好適実施例に従って、コヒーレンス・インデックスを生成する命令のためのフォーマットの別の実施例が示されている。図５に示されたコヒーレンス・インデックス・ロード命令５０を呼び出すアセンブリ言語は、ＬＣＩx(s,b),tである。参照命令「ＬＣＩ」によって、命令コード欄５１、命令コード欄５５、命令コード欄５６に格納すべき値が決まる。好適実施例の場合、６ビットの命令コード欄５１には、１６進数値０１が格納され、８ビットの命令コード欄５５には、１６進数値４Ｃが格納され、１ビットの命令コード欄５６には、１６進数値の０が格納される。さらに、インデックス値を格納する汎用レジスタ［ｘ］が、５ビットのパラメータ欄５３において指定され、ベース値を格納する汎用レジスタ［ｂ］が、５ビットのパラメータ欄５２において指定され、ターゲット値を受信する汎用レジスタ［ｔ］が、５ビットのパラメータ欄５７において指定され、スペース・レジスタ選択値［ｓ］が、２ビットのパラメータ欄５４において指定される。スペース・レジスタ選択欄５４は、４８ビットの仮想アドレスの生成に用いられる。
【００３１】
仮想アドレスに関するスペース識別子が、汎用レジスタ［ｂ］に格納されているベース値、及びスペース・レジスタ選択値［ｓ］の関数として生成される。オフセットは、汎用レジスタ［ｂ］に格納されているベース値、及び汎用レジスタ［ｘ］に格納されているインデックス値の関数として生成される。スペース及びオフセットからコヒーレンス・インデックスが計算され、ターゲット値として汎用レジスタ［ｔ］に配置される。例えば、表２を参照すると、ターゲット値（宛先ビット[0...31]）が生成される。
【００３２】
図６には、本発明の好適実施例に従って、コヒーレンス・インデックス・ロード命令５０から４８ビットの仮想アドレス６０を生成する方法が示されている。４８ビット仮想アドレス６０は、１６ビットのスペース識別子６１、及び３２ビットのオフセット６２を備える。５ビットのパラメータ欄５２のベース値が、汎用レジスタ７０へのインデックスとして使用される。汎用レジスタ７０は、それぞれ、３２ビットからなる３２個のレジスタを備えている。５ビットのパラメータ欄５２のベース値によって選択される汎用レジスタは、ベース・レジスタ・データ６８を提供する。５ビットのパラメータ欄５３において指定のインデックス値は、汎用レジスタ７０へのインデックスとしても利用される。５ビットのパラメータ欄５３において指定のインデックス値によって選択される汎用レジスタは、インデックス・レジスタ・データ６９を提供する。加算器６４は、ベース・レジスタ・データ６８とインデックス・レジスタ・データ６９を加算して、オフセット６２を生成する。
【００３３】
スペース識別子６１の値は、８つのスペース・レジスタ６３のうちの１つによって提供される。各スペース・レジスタは１６ビットである。コヒーレンス・インデックス・ロード命令５０の場合、スペース・レジスタは下記のように選択される。比較器６６による判定で、２ビットのパラメータ欄５４におけるスペース・レジスタ選択値がゼロに等しくない場合、セレクタ６７は、インデックスとして、２ビットのパラメータ欄５４におけるスペース・レジスタ選択値を利用して、スペース・レジスタ６３からスペース・レジスタを選択し、スペース識別子６１の値を得る。比較器６６による判定で、２ビットのパラメータ欄５４におけるスペース・レジスタ選択値がゼロに等しければ、セレクタ６７は、インデックスとして、ベース・レジスタ・データ６８の２つの最上位ビットと４を加えたものを利用し、スペース・レジスタ６３からスペース・レジスタを選択して、スペース識別子６１の値を得る。
【００３４】
本発明の好適実施例において、データ転送にコヒーレンス・インデックスを用いると、データがＩ／Ｏアダプタ１３と共用の場合に、データ・キャッシュ１７、又はキャッシュ１８からデータをフラッシュ、又は除去するソフトウェアの必要性が緩和される。Ｉ／Ｏ出力（例えば、Ｉ／Ｏアダプタ１３を介したメモリ１２からＩ／Ｏ装置への転送）の場合、Ｉ／Ｏアダプタ１３は、最新のコピーがどこに配置されているかに依存して、メモリ、又はプロセッサのデータ・キャッシュからデータを読み取るコヒーレント読み取り操作を実行する。Ｉ／Ｏ入力の場合、Ｉ／Ｏアダプタ１３は、メモリにデータを書き込み、さらに、プロセッサ１０内のキャッシュ１７、又はプロセッサ１１内のキャッシュ１８における整合ラインを更新、又は無効にするコヒーレント書き込み操作を実行する。コヒーレント読み取り、及び書き込み操作に関するより多くの情報を得るには、１９９０年にカリフォルニア州、San Mateo の Morgan Kauffman Publishers,Inc.から発行された、David A.Patterson、John L.Hennessy による「Computer Architecture A Quantitative Approach」第８章、４６６〜４７４ページを参照されたい。
【００３５】
以上の説明において、本発明の単なる例示の方法及び実施例を開示し、説明した。当業者には明らかなように、本発明は、その精神、又はその本質的な特性から逸脱することなく、他の特定の形態によって実施することも可能である。従って、本発明の開示は、特許請求項に規定された本発明の範囲の例示を意図したものであって、それを制限するものではない。
【００３６】
以下に、本発明の実施態様を列挙する。
【００３７】
１．情報の転送を提供するための相互接続手段と、
相互接続手段に結合された主メモリと、
翻訳マップが設けられており、この翻訳マップによって、Ｉ／Ｏページ番号がメモリ・アドレス・ページ番号にマッピングされ、該翻訳マップにコヒーレンス・インデックスが備わっている、相互接続手段に結合されたＩ／Ｏアダプタと、
キャッシュ、及び翻訳マップに格納されるコヒーレンス・インデックスを生成する命令実行手段が設けられており、該命令実行手段が、ハードウェアにおいてハッシュ操作を行い、コヒーレンス・インデックスを生成する、相互接続手段に結合されたプロセッサから構成される、コンピュータ・システム。
【００３８】
２．命令実行手段が、コヒーレンス・インデックス・ロード操作、仮想メモリ・オフセット、及びスペース識別子を指定する命令に応答して、仮想メモリ・オフセットからのビット部分集合、及びスペース識別子からのビット部分集合にハッシュ操作を実行し、コヒーレンス・インデックスを生成することを特徴とする前項１に記載のコンピュータ・システム。
【００３９】
３．仮想メモリ・オフセットが、第１の汎用レジスタに格納され、スペース識別子が、第２の汎用レジスタに格納され、コヒーレンス・インデックスが、汎用ターゲット・レジスタに配置されることを特徴とする前項２に記載のコンピュータ・システム。
【００４０】
４．命令レジスタが、第１の汎用レジスタを識別することによって、仮想メモリ・オフセットを指定し、第２の汎用レジスタを識別することによって、スペース識別子を指定し、汎用ターゲット・レジスタを指定することを特徴とする前項３に記載のコンピュータ・システム。
【００４１】
５．命令実行手段が、ベース・レジスタ、インデックス・レジスタ、選択スペース・レジスタ、及びターゲット・レジスタを指定する命令に応答して、ベース・レジスタ、及び選択スペース・レジスタに格納された情報からスペース識別子を生成し、ベース・レジスタに格納された情報、及びインデックス・レジスタに格納された情報からオフセットを生成し、オフセットからのビット部分集合、及びスペース識別子からのビット部分集合にハッシュ操作を実行し、コヒーレンス・インデックスを生成することを特徴とする前項１に記載のコンピュータ・システム。
【００４２】
６．ベース・レジスタが、一般に、ベース値を格納する第１の汎用レジスタであり、インデックス・レジスタが、一般に、インデックス値を格納する第２の汎用レジスタであり、ターゲット・レジスタが、コヒーレンス・インデックスを受信する第３の汎用レジスタであることを特徴とする前項５に記載のコンピュータ・システム。
【００４３】
７．命令実行手段が、仮想アドレスを生成するために用いられる少なくとも１つのレジスタを指定する命令に応答して、コヒーレンス・インデックスを生成することを特徴とする前項１に記載のコンピュータ・システム。
【００４４】
８．コンピュータ・システムにおいて、
（ａ）コヒーレンス・インデックス・ロード命令に応答して、ハードウェアでハッシュ操作を実行し、コヒーレンス・インデックスを生成するサブ・ステップ（a.1）から成る、プロセッサによってコヒーレンス・インデックスを生成するステップと、
（ｂ）Ｉ／Ｏアダプタ内の翻訳マップにコヒーレンス・インデックスを格納するステップと、
（ｃ）データ転送の実行の際に、Ｉ／Ｏアダプタからプロセッサにコヒーレンス・インデックスを送るステップと、
（ｄ）ステップ（ｃ）において、Ｉ／Ｏアダプタからコヒーレンス・インデックスを受信すると、プロセッサが、このコヒーレンス・インデックスを利用して、プロセッサ内のキャッシュ内のデータをアクセスするステップ、から構成される方法。
【００４５】
９．サブステップ（a.1）において、コヒーレンス・インデックス・ロード命令が、コヒーレンス・インデックス・ロード操作、仮想メモリ・オフセット、及びスペース識別子を指定し、サブステップ（a.1）には、仮想メモリ・オフセットからのビット部分集合、及びスペース識別子からのビット部分集合にハッシュ操作を実行して、コヒーレンス・インデックスを生成するステップが含まれることを特徴とする前項８に記載の方法。
【００４６】
１０．サブステップ（a.1）において、仮想メモリ・オフセットが第１の汎用レジスタに格納され、スペース識別子が第２の汎用レジスタに格納され、コヒーレンス・インデックスが汎用ターゲット・レジスタに配置されることを特徴とする前項９に記載の方法。
【００４７】
１１．サブステップ（a.1）において、命令レジスタが、第１の汎用レジスタを識別することによって、仮想メモリ・オフセットを指定し、第２の汎用レジスタを識別することによって、スペース識別子を指定し、汎用ターゲット・レジスタを指定することを特徴とする前項１０に記載の方法。
【００４８】
１２．  サブステップ（a.1）において、コヒーレンス・インデックス・ロード命令が、ベース・レジスタ、インデックス・レジスタ、選択スペース・レジスタ、及びターゲット・レジスタを指定し、サブステップ（a.1）には、ベース・レジスタ、及び選択スペース・レジスタに格納された情報からスペース識別子を生成するステップと、ベース・レジスタに格納された情報、及びインデックス・レジスタに格納された情報からオフセットを生成するステップと、オフセットからのビット部分集合、及びスペース識別子からのビット部分集合にハッシュ操作を実行して、コヒーレンス・インデックスを生成するステップ、とが含まれることを特徴とする前項８に記載の方法。
【００４９】
１３．サブステップ（a.1）において、ベース・レジスタが、一般に、ベース値を格納する第１の汎用レジスタであり、インデックス・レジスタが、一般に、インデックス値を格納する第２の汎用レジスタであり、ターゲット・レジスタが、コヒーレンス・インデックスを受信する第３の汎用レジスタであることを特徴とする前項１２に記載の方法。
【００５０】
１４．サブステップ（a.1）において、コヒーレンス・インデックス・ロード命令が、コヒーレンス・インデックス・ロード操作と、仮想アドレスを生成するために用いられる少なくとも１つのレジスタとを指定することを特徴とする前項８に記載の方法。
【００５１】
１５．キャッシュと、
キャッシュに結合されて、Ｉ／Ｏアダプタ内の翻訳マップに格納すべきコヒーレンス・インデックスを生成するための命令実行手段から構成され、該命令実行手段が、ハードウェアにおいてハッシュ操作を実行し、コヒーレンス・インデックスを生成することを特徴とする、プロセッサ。
【００５２】
１６．命令実行手段が、コヒーレンス・インデックス・ロード操作、仮想メモリ・オフセット、及びスペース識別子を指定する命令に応答して、仮想メモリ・オフセットからのビット部分集合、及びスペース識別子からのビット部分集合にハッシュ操作を実行し、コヒーレンス・インデックスを生成することを特徴とする前項１５に記載のプロセッサ。
【００５３】
１７．仮想メモリ・オフセットが、第１の汎用レジスタに格納され、スペース識別子が、第２の汎用レジスタに格納され、コヒーレンス・インデックスが、汎用ターゲット・レジスタに配置されることを特徴とする、請求項１６に記載のプロセッサ。
【００５４】
１８．命令レジスタが、第１の汎用レジスタを識別することによって、仮想メモリ・オフセットを指定し、第２の汎用レジスタを識別することによって、スペース識別子を指定し、汎用ターゲット・レジスタを指定することを特徴とする前項１７に記載のプロセッサ。
【００５５】
１９．命令実行手段が、ベース・レジスタ、インデックス・レジスタ、選択スペース・レジスタ、及びターゲット・レジスタを指定する命令に応答して、ベース・レジスタ、及び選択スペース・レジスタに格納された情報からスペース識別子を生成し、ベース・レジスタに格納された情報、及びインデックス・レジスタに格納された情報からオフセットを生成し、オフセットからのビット部分集合、及びスペース識別子からのビット部分集合にハッシュ操作を実行し、コヒーレンス・インデックスを生成することを特徴とする前項１５に記載のプロセッサ。
【００５６】
２０．ベース・レジスタが、一般に、ベース値を格納する第１の汎用レジスタであり、インデックス・レジスタが、一般に、インデックス値を格納する第２の汎用レジスタであり、ターゲット・レジスタが、コヒーレンス・インデックスを受信する第３の汎用レジスタであることを特徴とする前項１９に記載のプロセッサ。
【００５７】
２１．命令実行手段が、仮想アドレスを生成するために用いられる少なくとも１つのレジスタを指定する命令に応答して、コヒーレンス・インデックスを生成することを特徴とする前項１５に記載のプロセッサ。
【００５８】
【発明の効果】
本発明は上述のように構成したので、一度生成されると、コヒーレンス・インデックスは、Ｉ／Ｏアダプタ内の翻訳マップに格納される。データ転送を実施すると、Ｉ／Ｏアダプタは、プロセッサに適合するコヒーレンス・インデックスを送る。プロセッサは、Ｉ／Ｏアダプタからコヒーレンス・インデックスを受信すると、コヒーレンス・インデックスを利用して、キャッシュ内のデータをアクセスする。このようにして、Ｉ／Ｏアダプタ内の翻訳テーブルに関するコヒーレンス・インデックスの生成が、最小限のオーバヘッドで可能になる。また、キャッシュ・インデックスの生成に用いられる既存のハードウェアが、コヒーレンス・インデックス・ロード命令に応答して、コヒーレンス・インデックスの生成にも利用される場合、本発明の実施には、既存のハードウェアに最小限の変更しか必要としないという効果がある。
【図面の簡単な説明】
【図１】本発明の好適実施例による、入力／出力（Ｉ／Ｏ）アダプタを備えたコンピュータ・システムの簡略ブロック図を示す。
【図２】本発明の好適実施例による、図１に示すＩ／Ｏアダプタ内の変換マップの実施態様を示す。
【図３】本発明の好適実施例による、図１に示すコンピュータ・システムに対するキャッシュ／コヒーレンス・インデックスの生成を例示する。
【図４】本発明の好適実施例による、コヒーレンス・インデックスを生成する簡略化された命令に関するフォーマット、及び該命令によって着手する操作のハードウェア実施態様を示す。
【図５】本発明の好適実施例による、コヒーレンス・インデックスを生成する命令に関するフォーマットの別の実施態様を示す。
【図６】本発明の好適実施例による、仮想アドレスの生成を例示する。
【符号の説明】
9       メモリ・バス
10,11   プロセッサ
12      メモリ
13      入力／出力（Ｉ／Ｏ）アダプタ
14      Ｉ／Ｏバス
15,16   Ｉ／Ｏ装置
17,18   データ・キャッシュ
19      翻訳マップ
21      Ｉ／Ｏバス・アドレス
22      コヒーレンス・インデックス
23      メモリ・アドレス
25      比較器
31,33   仮想アドレス
36      ハッシュ・ハードウェア
37      コヒーレンス・インデックス
39      キャッシュ・インデックス
50      コヒーレンス・インデックス・ロード命令
51,55,56      命令コード欄
52      ベース欄
53      インデックス欄
54      スペース・レジスタ選択欄
57      ターゲット欄
60      仮想アドレス
61      スペース識別子
62      オフセット
63      スペース・レジスタ
64      加算器
66      比較器
67      セレクタ
68      ベース・レジスタ・データ
69      インデックス・レジスタ・データ
70      汎用レジスタ
【図１】
0003662619.tif 000004
【図２】
0003662619.tif 000005
【図３】
0003662619.tif 000006
【図４】
0003662619.tif 000007
【図５】
0003662619.tif 000008
【図６】
0003662619.tif 000009