"キャッシュおよびTLBを有する複数のプロセッサがシステムメモリを共有するマルチプロセッサシステムのキャッシュコヒーレンシを制御する方法であって、プロセッサが、TLB検索でTLB割り込みを生じてページフォールトではないと判定したときに、TLBにアドレスのマッチする登録情報が存在しない場合であるTLBミス割り込みを処理するTLBミス例外処理ステップ、または、TLBにアドレスのマッチする登録情報は存在するがアクセス権限が違反している場合であるストレージ割り込みを処理するストレージ例外処理ステップ、を実行することを含む、キャッシュコヒーレンシ制御の方法。前記TLBミス例外処理ステップは、TLBリプレースメントを実行した時に、エビクションされて破棄されるビクティムTLBエントリがカバーする物理ページに属するキャッシュのデータキャッシュラインをフラッシュするステップを含む、請求項1に記載の方法。前記TLBミス例外処理ステップまたは前記ストレージ例外処理ステップは、前記TLBミス割り込みまたは前記ストレージ割り込みを生じたメモリアクセスがデータアクセスであるか命令アクセスであるかを判定するステップと、前記メモリアクセスがデータアクセスであると判定したときに、当該アクセスについて置換または更新されるTLBエントリによりカバーされる物理ページに関する書き込み、読み出しおよび実行の権限に、他のプロセッサのTLBに設けられた当該物理ページのアクセス権限に対して排他的となる制約を加える処理ステップと、を含む、請求項2に記載の方法。前記排他的となる制約を加える処理ステップは、書き込み時無効化方式の制約を加える処理ステップを含む、請求項3に記載の方法。前記書き込み時無効化方式の制約を加える処理ステップは、MESIプロトコルの制約を加えるMESIエミュレーション処理ステップを含む、請求項4に記載の方法。前記MESIエミュレーション処理ステップは、前記メモリアクセスがデータ書き込みか読み出しかを判定するステップと、前記読み出しと判定したときに、前記プロセッサのTLBと前記複数のプロセッサのTLBの登録情報を保持するTLBディレクトリメモリとにおける、当該アクセスの物理ページについての読み出しの属性をオンにするステップと、前記TLBディレクトリメモリを当該アクセスの物理ページについて検索して、他のプロセッサのTLBが当該アクセスの物理ページについての書き込みの権限を持っているか否かを判定するステップと、前記書き込みの権限を持っているときに、前記他のプロセッサに対しクリーンコマンドをプロセッサ間割り込みで通知して、前記他のプロセッサに当該アクセスの物理ページへの書き込みの権限をクリアにさせるステップと、前記TLBディレクトリメモリでの前記他のプロセッサのTLBに関する当該アクセスの物理ページについての書き込みの属性をクリアにするステップと、を含む、請求項5に記載の方法。前記他のプロセッサに前記アクセスの物理ページへの書き込みの権限をクリアにさせるステップは、前記他のプロセッサが、データキャッシュをコピーバックして、当該プロセッサのTLBにおける前記アクセスの物理ページについての書き込みの属性をディスエーブルにするステップを含む、請求項6に記載の方法。前記MESIエミュレーション処理ステップは、前記書き込みと判定したときに、前記プロセッサのTLBと前記TLBディレクトリメモリとにおける、前記アクセスの物理ページについての書き込みの属性をオンするステップと、前記TLBディレクトリメモリを前記アクセスの物理ページについて検索して、前記他のプロセッサのTLBが前記アクセスの物理ページについての読み出し、書き込みまたは実行の権限を持っているか否かを判定するステップと、前記読み出し、書き込みまたは実行の権限を持っているときに、前記他のプロセッサに対しフラッシュコマンドをプロセッサ間割り込みで通知して、前記他のプロセッサに前記アクセスの物理ページへの読み出し、書き込みおよび実行の権限をクリアにさせるステップと、前記TLBディレクトリメモリでの前記他のプロセッサのTLBに関する前記アクセスの物理ページについての読み出し、書き込みおよび実行の属性をクリアにするステップと、を含む、請求項6または7に記載の方法。前記他のプロセッサに前記アクセスの物理ページへの読み出し、書き込みおよび実行の権限をクリアにさせるステップは、前記他のプロセッサが、データキャッシュをコピーバックして無効化し、当該プロセッサのTLBにおける前記アクセスの物理ページについての読み出し、書き込みおよび実行の属性をディスエーブルにするステップを含む、請求項8に記載の方法。前記TLBミス例外処理ステップまたは前記ストレージ例外処理ステップは、前記TLBミス割り込みまたは前記ストレージ割り込みを生じたメモリアクセスがデータアクセスであるか命令アクセスであるかを判定するステップと、前記メモリアクセスが命令アクセスであると判定したときに、命令フェッチで前記TLBミス割り込みを起こした物理ページについて前記システムメモリのページテーブルのエントリがユーザー書き込み許可の権限を持つかを判定するステップと、前記ページテーブルのエントリがユーザー書き込み許可の権限を持つときは、当該物理ページについて他のプロセッサのTLBがユーザー書き込み許可の権限を持つかを判定するステップと、前記他のプロセッサのTLBがユーザー書き込み許可の権限を持つときは、前記他のプロセッサに対しクリーンコマンドをプロセッサ間割り込みで通知して、前記他のプロセッサに当該ユーザー書き込み許可の権限をクリアにさせるステップと、を含む、請求項2に記載の方法。前記TLBミス例外処理ステップまたは前記ストレージ例外処理ステップは、前記他のプロセッサのTLBがユーザー書き込み許可の権限を持たないとき、または、前記他のプロセッサに前記ユーザー書き込み許可の権限をクリアにさせるステップの後に、前記アクセスをしたプロセッサの命令キャッシュを無効化するステップを含む、請求項10に記載の方法。前記TLBミス例外処理ステップまたは前記ストレージ例外処理ステップは、前記ページテーブルのエントリがユーザー書き込み許可の権限を持たないとき、または、前記アクセスをしたプロセッサの命令キャッシュを無効化するステップの後に、前記アクセスをしたプロセッサのTLBと前記複数のプロセッサのTLBの登録情報を保持するTLBディレクトリメモリとにおける、前記命令フェッチでTLBミス割り込みを起こした物理ページについての実行の属性をオンにするステップを含む、請求項10または11に記載の方法。前記MESIエミュレーション処理ステップは、前記TLBディレクトリメモリを前記アクセスの物理ページについて検索するときにセマフォを使用して逐次アクセスを行うステップを含む、請求項6または8に記載の方法。プロセッサに、請求項1~13のいずれか1項に記載の方法の各ステップを実行させるコンピュータプログラム。キャッシュおよびTLBを有する複数のプロセッサがシステムメモリを共有するマルチプロセッサシステムのキャッシュコヒーレンシを制御するシステムであって、プロセッサが、TLB検索を実行するTLB検索部と前記TLB検索でヒットせずTLB割り込みを生じたときにTLBの登録情報処理を実行するコヒーレンシハンドラとを有するTLB制御部を含み、前記コヒーレンシハンドラが、システムメモリのページテーブルの検索およびTLBの登録情報置換を実行するTLBリプレースメントハンドラと、前記TLB割り込みがページフォールトではないときに、TLBにアドレスのマッチする登録情報が存在しない場合であるTLBミス割り込みを処理するTLBミス例外処理部と、TLBにアドレスのマッチする登録情報は存在するがアクセス権限が違反している場合であるストレージ割り込みを処理するストレージ例外処理部とを含む、キャッシュコヒーレンシ制御のシステム。前記TLBミス例外処理部は、TLBリプレースメントが実行された時に、エビクションされて破棄されるビクティムTLBエントリがカバーする物理ページに属するキャッシュのデータキャッシュラインをフラッシュする、請求項15に記載のシステム。前記TLBミス例外処理部および前記ストレージ例外処理部は、それぞれ、前記TLBミス割り込みおよび前記ストレージ割り込みを生じたメモリアクセスがデータアクセスであるか命令アクセスであるかを判定し、前記メモリアクセスがデータアクセスであると判定したときに、当該アクセスについて置換または更新されるTLBエントリによりカバーされる物理ページに関する書き込み、読み出しおよび実行の権限に、他のプロセッサのTLBに設けられた当該物理ページのアクセス権限に対して排他的となる制約を加える処理を実行する、請求項16に記載のシステム。前記TLBミス例外処理部および前記ストレージ例外処理部は、それぞれ、前記TLBミス割り込みおよび前記ストレージ割り込みを生じたメモリアクセスがデータアクセスであるか命令アクセスであるかを判定し、前記メモリアクセスが命令アクセスであると判定したときに、命令フェッチで前記TLBミス割り込みを起こした物理ページについて前記システムメモリのページテーブルのエントリがユーザー書き込み許可の権限を持つかを判定し、前記ページテーブルのエントリがユーザー書き込み許可の権限を持つときは、当該物理ページについて他のプロセッサのTLBがユーザー書き込み許可の権限を持つかを判定し、前記他のプロセッサのTLBがユーザー書き込み許可の権限を持つときは、前記他のプロセッサに対しクリーンコマンドをプロセッサ間割り込みで通知して、前記他のプロセッサに当該ユーザー書き込み許可の権限をクリアにさせる、請求項16に記載のシステム。さらに、前記複数のプロセッサのTLBの登録情報を保持して前記複数のプロセッサからは物理ページについての検索がなされるTLBディレクトリメモリを含む、請求項15~18のいずれか1項に記載のシステム。前記マルチプロセッサシステムは複数のノードからなり、当該各ノードは、それぞれ、前記複数のプロセッサと、コヒーレント共有バスにより前記複数のプロセッサに接続された前記システムメモリと、ブリッジ機構により前記コヒーレント共有バスに接続された前記TLBディレクトリメモリおよび前記複数のプロセッサの前記TLBディレクトリメモリへのセマフォによる逐次アクセスのためのセマフォハンドラとを含んで、NCCNUMA機構により相互に接続される、請求項19に記載のシステム。本発明は、共有メモリ型マルチプロセッサシステムのスケーラビリティを向上させると共にハードウェアとソフトウェアのコストを抑えてコストパフォーマンスを向上させるキャッシュコヒーレンシ制御の実現を目的とする。本発明の目的には、そのようなキャッシュコヒーレンシ制御を実現する方法、システムおよびプログラムを提供することが含まれる。また、本発明の目的には、キャッシュコヒーレンシ制御を廉価なハードウェア構成によりソフトウェアで実現することが含まれる。さらに、本発明の目的には、キャッシュコヒーレンシ制御をソフトウェアでアプリケーションプログラムから透過的に、即ちアプリケーションプログラムを書き換えることなく実現することが含まれる。本発明による1実施態様のキャッシュコヒーレンシ制御の方法は、キャッシュおよびTLBを有する複数のプロセッサがシステムメモリを共有するマルチプロセッサシステムのキャッシュコヒーレンシを制御し、プロセッサが、TLB検索でTLB割り込みを生じてページフォールトではないと判定したときに、TLBにアドレスのマッチする登録情報が存在しない場合であるTLBミス割り込みを処理するTLBミス例外処理ステップ、または、TLBにアドレスのマッチする登録情報は存在するがアクセス権限が違反している場合であるストレージ割り込みを処理するストレージ例外処理ステップを実行することを含む。TLBミス例外処理ステップは、TLBリプレースメントを実行した時に、エビクションされて破棄されるビクティムTLBエントリがカバーする物理ページに属するキャッシュのデータキャッシュラインをフラッシュするステップを含む。TLBミス例外処理ステップまたはストレージ例外処理ステップは、TLBミス割り込みまたはストレージ割り込みを生じたメモリアクセスがデータアクセスであるか命令アクセスであるかを判定するステップと、メモリアクセスがデータアクセスであると判定したときに、当該アクセスについて置換または更新されるTLBエントリによりカバーされる物理ページに関する書き込み、読み出しおよび実行の権限に、他のプロセッサのTLBに設けられた当該物理ページのアクセス権限に対して排他的となる制約を加える処理ステップとを含む。好ましくは、排他的となる制約を加える処理ステップは、書き込み時無効化方式の制約を加える処理ステップを含む。書き込み時無効化方式の制約を加える処理ステップは、MESIプロトコルの制約を加えるMESIエミュレーション処理ステップを含む。好ましくは、MESIエミュレーション処理ステップは、メモリアクセスがデータ書き込みか読み出しかを判定するステップと、読み出しと判定したときに、プロセッサのTLBと複数のプロセッサのTLBの登録情報を保持するTLBディレクトリメモリとにおける、当該アクセスの物理ページについての読み出しの属性をオンにするステップと、TLBディレクトリメモリを当該アクセスの物理ページについて検索して、他のプロセッサのTLBが当該アクセスの物理ページについての書き込みの権限を持っているか否かを判定するステップと、書き込みの権限を持っているときに、他のプロセッサに対しクリーンコマンドをプロセッサ間割り込みで通知して、他のプロセッサに当該アクセスの物理ページへの書き込みの権限をクリアにさせるステップと、TLBディレクトリメモリでの他のプロセッサのTLBに関する当該アクセスの物理ページについての書き込みの属性をクリアにするステップとを含む。他のプロセッサにアクセスの物理ページへの書き込みの権限をクリアにさせるステップは、他のプロセッサが、データキャッシュをコピーバックして、当該プロセッサのTLBにおけるアクセスの物理ページについての書き込みの属性をディスエーブルにするステップを含む。好ましくは、MESIエミュレーション処理ステップは、書き込みと判定したときに、プロセッサのTLBとTLBディレクトリメモリとにおける、アクセスの物理ページについての書き込みの属性をオンするステップと、TLBディレクトリメモリをアクセスの物理ページについて検索して、他のプロセッサのTLBがアクセスの物理ページについての読み出し、書き込みまたは実行の権限を持っているか否かを判定するステップと、読み出し、書き込みまたは実行の権限を持っているときに、他のプロセッサに対しフラッシュコマンドをプロセッサ間割り込みで通知して、他のプロセッサにアクセスの物理ページへの読み出し、書き込みおよび実行の権限をクリアにさせるステップと、TLBディレクトリメモリでの他のプロセッサのTLBに関するアクセスの物理ページについての読み出し、書き込みおよび実行の属性をクリアにするステップとを含む。他のプロセッサにアクセスの物理ページへの読み出し、書き込みおよび実行の権限をクリアにさせるステップは、他のプロセッサが、データキャッシュをコピーバックして無効化し、当該プロセッサのTLBにおけるアクセスの物理ページについての読み出し、書き込みおよび実行の属性をディスエーブルにするステップを含む。好ましくは、TLBミス例外処理ステップまたはストレージ例外処理ステップは、TLBミス割り込みまたはストレージ割り込みを生じたメモリアクセスがデータアクセスであるか命令アクセスであるかを判定するステップと、メモリアクセスが命令アクセスであると判定したときに、命令フェッチでTLBミス割り込みを起こした物理ページについてシステムメモリのページテーブルのエントリがユーザー書き込み許可の権限を持つかを判定するステップと、ページテーブルのエントリがユーザー書き込み許可の権限を持つときは、当該物理ページについて他のプロセッサのTLBがユーザー書き込み許可の権限を持つかを判定するステップと、他のプロセッサのTLBがユーザー書き込み許可の権限を持つときは、他のプロセッサに対しクリーンコマンドをプロセッサ間割り込みで通知して、他のプロセッサに当該ユーザー書き込み許可の権限をクリアにさせるステップとを含む。TLBミス例外処理ステップまたはストレージ例外処理ステップは、他のプロセッサのTLBがユーザー書き込み許可の権限を持たないとき、または、他のプロセッサにユーザー書き込み許可の権限をクリアにさせるステップの後に、アクセスをしたプロセッサの命令キャッシュを無効化するステップを含む。TLBミス例外処理ステップまたはストレージ例外処理ステップは、ページテーブルのエントリがユーザー書き込み許可の権限を持たないとき、または、アクセスをしたプロセッサの命令キャッシュを無効化するステップの後に、アクセスをしたプロセッサのTLBと複数のプロセッサのTLBの登録情報を保持するTLBディレクトリメモリとにおける、命令フェッチでTLBミス割り込みを起こした物理ページについての実行の属性をオンにするステップを含む。好ましくは、MESIエミュレーション処理ステップは、TLBディレクトリメモリをアクセスの物理ページについて検索するときにセマフォを使用して逐次アクセスを行うステップを含む。本発明の1実施態様により、プロセッサに上記方法の各ステップを実行させるキャッシュコヒーレンシ制御のコンピュータプログラムが提供される。本発明による1実施態様のキャッシュコヒーレンシ制御のシステムは、キャッシュおよびTLBを有する複数のプロセッサがシステムメモリを共有するマルチプロセッサシステムのキャッシュコヒーレンシを制御する。プロセッサは、TLB検索を実行するTLB検索部とTLB検索でヒットせずTLB割り込みを生じたときにTLBの登録情報処理を実行するコヒーレンシハンドラとを有するTLB制御部を含む。コヒーレンシハンドラは、システムメモリのページテーブルの検索およびTLBの登録情報置換を実行するTLBリプレースメントハンドラと、TLB割り込みがページフォールトではないときに、TLBにアドレスのマッチする登録情報が存在しない場合であるTLBミス割り込みを処理するTLBミス例外処理部と、TLBにアドレスのマッチする登録情報は存在するがアクセス権限が違反している場合であるストレージ割り込みを処理するストレージ例外処理部とを含む。TLBミス例外処理部は、TLBリプレースメントが実行された時に、エビクションされて破棄されるビクティムTLBエントリがカバーする物理ページに属するキャッシュのデータキャッシュラインをフラッシュする。TLBミス例外処理部およびストレージ例外処理部は、それぞれ、TLBミス割り込みおよびストレージ割り込みを生じたメモリアクセスがデータアクセスであるか命令アクセスであるかを判定し、メモリアクセスがデータアクセスであると判定したときに、当該アクセスについて置換または更新されるTLBエントリによりカバーされる物理ページに関する書き込み、読み出しおよび実行の権限に、他のプロセッサのTLBに設けられた当該物理ページのアクセス権限に対して排他的となる制約を加える処理を実行する。TLBミス例外処理部およびストレージ例外処理部は、それぞれ、TLBミス割り込みおよびストレージ割り込みを生じたメモリアクセスがデータアクセスであるか命令アクセスであるかを判定し、メモリアクセスが命令アクセスであると判定したときに、命令フェッチでTLBミス割り込みを起こした物理ページについてシステムメモリのページテーブルのエントリがユーザー書き込み許可の権限を持つかを判定し、ページテーブルのエントリがユーザー書き込み許可の権限を持つときは、当該物理ページについて他のプロセッサのTLBがユーザー書き込み許可の権限を持つかを判定し、他のプロセッサのTLBがユーザー書き込み許可の権限を持つときは、他のプロセッサに対しクリーンコマンドをプロセッサ間割り込みで通知して、他のプロセッサに当該ユーザー書き込み許可の権限をクリアにさせる。キャッシュコヒーレンシ制御のシステムは、さらに、複数のプロセッサのTLBの登録情報を保持して複数のプロセッサからは物理ページについての検索がなされるTLBディレクトリメモリを含む。好ましくは、マルチプロセッサシステムは複数のノードからなり、当該各ノードは、それぞれ、複数のプロセッサと、コヒーレント共有バスにより複数のプロセッサに接続されたシステムメモリと、ブリッジ機構によりコヒーレント共有バスに接続されたTLBディレクトリメモリおよび複数のプロセッサのTLBディレクトリメモリへのセマフォによる逐次アクセスのためのセマフォハンドラとを含んで、NCCNUMA機構により相互に接続される。本発明によれば、共有メモリ型マルチプロセッサシステムのスケーラビリティを向上させると共にハードウェアとソフトウェアのコストを抑えてコストパフォーマンスを向上させるキャッシュコヒーレンシ制御が実現される。特に、そのようなキャッシュコヒーレンシ制御を実現する方法、システムおよびプログラムが提供され、キャッシュコヒーレンシ制御を廉価なハードウェア構成によりソフトウェアで実現することができ、さらに、アプリケーションプログラムを書き換えることなく実現することができる。以下、本発明を実施するための最良の形態を図面に基づいて詳細に説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。本発明は多くの異なる態様で実施することが可能であり、記載された実施形態の内容に限定して解釈されるべきではない。なお、実施形態の説明の全体を通じて同じ構成部分乃至構成要素には同じ番号を付している。図1は、本発明によるキャッシュコヒーレンシ制御の実施に使用できるマルチプロセッサシステム100を概略的に示すブロック図である。マルチプロセッサシステム100では、複数のプロセッサ101がそれぞれメモリバス102でシステムメモリ103に結合されている。各プロセッサ101にはCPU104、MMU105およびキャッシュ106があり、MMU105にはTLB107がある。各プロセッサ101のキャッシュ106にシステムメモリ103の内容の一部が保持される。マルチプロセッサシステム100等のSMPシステムでは、各プロセッサ101はシステムメモリ103に対して読み取りまたは書き込みを行うことができるので、システムメモリ103およびキャッシュ106内のデータおよび命令がコヒーレントになるようにする必要がある。システムメモリ103内にページテーブル108を提供するのが好ましく、ページテーブル108内の複数のエントリ、即ち登録情報を使用して、仮想アドレスをシステムメモリ103内の物理アドレスに効率的にマップすることができる。システムメモリ103は、メモリコントローラ109を有し、接続され外部記憶装置120との間でも記憶情報に関するやり取り、即ち読み出しおよび書き込みを行う。各プロセッサ101では、TLB107を使用して、ページテーブル108の各エントリに含まれる情報を複製することにより、命令またはデータの仮想アドレスをシステムメモリ103内の物理アドレスに変換することができる。TLB107がメモリ空間のアドレス情報を提供するので、TLB107の正確な動作を確保するために、マルチプロセッサシステム100内の各TLB107間でコヒーレンシを維持するよう制御することが重要である。図2は、本発明の1実施形態に係るキャッシュコヒーレンシ制御のシステムを有するプロセッサ101を概略的に示すブロック図である。プロセッサ101のキャッシュ106は、命令キャッシュ106’およびデータキャッシュ106’’を含む。プロセッサ101は、メモリバス102の他には、すべてのプロセッサ101がアクセスできるように設けられたTLBディレクトリメモリ121に接続される。TLBディレクトリメモリ121は、ローカルのプロセッサ101がプロセッサ間割り込みを使ってリモートのプロセッサ101を割り込むことなくリモートのプロセッサ101のTLB107の内容を調べることができるようにするために、すべてのプロセッサ101のTLB107が保持する物理ページ番号、読み取り/書き込み/実行のアクセス権限および有効Validステータスの各情報を複製して、すべてのプロセッサ101のCPU104が参照できるようなグローバルアドレスにマップしたものである。CPU104はAPApplicationProgram処理122を実行する動作モードユーザモードと、OSカーネル処理124を実行する動作モードスーパバイザモードと、割り込みハンドラを実行する動作モードとを持つ。コヒーレンシハンドラ126は、第3の動作モードで実行される。TLB制御部123は、AP処理122のキャッシュ106へのアクセス時またはOSカーネル処理124のキャッシュ106へのアクセス時にTLB検索を実行するTLB検索部125と、TLB検索を実行してヒットせずTLB割り込みを生じたときにTLB107の登録情報処理を実行するコヒーレンシハンドラ126とを含む。コヒーレンシハンドラ126は、図2に示されるように、ページフォールトを処理するOSカーネル処理124の外に位置する。TLB検索部125は、TLB検索を実行してヒットしたときにキャッシュタグを検索するキャッシュタグ検索部127を含む。キャッシュタグ検索部127は、キャッシュタグ検索でヒットしたときには、AP処理122によるキャッシュ106へのアクセスを指示する。また、キャッシュタグ検索部127は、キャッシュタグ検索でヒットせずキャッシュタグミスを生じたときには、キャッシュ106ではなくて、AP処理122によるシステムメモリ103へのアクセスを指示する。コヒーレンシハンドラ126は、TLBリプレースメントハンドラ128、TLBミス例外処理部129およびストレージ例外処理部130を含む。TLBリプレースメントハンドラ128は、ページテーブル検索部131とページフォールト判定部132を含む。ページテーブル検索部131は、TLB検索部125でTLB割り込みとなったときにシステムメモリ103にあるページテーブル108の検索を処理する。ページフォールト判定部132は、ページテーブル検索部131の検索処理からページフォールトか否かを判定する。ページフォールト判定部132がページテーブル検索部131の検索処理からページフォールトでない、即ちページテーブル108にTLBエントリのページがあると判定したときは、TLBミス例外処理部129またはストレージ例外処理部130がコヒーレンシ制御を実行する。ところで、ページテーブル108にTLBエントリのページがありページフォールトではないが、しかしTLB検索でヒットせずに生じるTLB割り込みに関して、アドレスのマッチするエントリ、即ち登録情報がTLBに存在しない場合をTLBミス割り込みと称し、アドレスのマッチするエントリ、即ち登録情報はTLBに存在するがアクセス権限が違反している場合をストレージ割り込みと称することにする。TLBミス例外処理部129はTLBミス割り込みを処理し、ストレージ例外処理部130はストレージ割り込みを処理する。コヒーレンシハンドラ126は、ページフォールトではないときにコヒーレンシ制御を実行するので、ページフォールトであるときにコヒーレンシ処理を行うVMベース共有メモリ技術と異なる。OSカーネル処理124は、メモリ管理部133を含む。ページフォールト判定部132がページテーブル検索部131の検索処理からページフォールトであると判定したとき、TLBリプレースメントハンドラ128はページフォールト割り込みを発生し、OSカーネル処理124のメモリ管理部133がページフォールトの処理を実行する。コヒーレンシハンドラ126のTLBミス例外処理部129およびストレージ例外処理部130は、ローカルのプロセッサ101のTLB107のエントリに登録している物理ページだけがキャッシュ106に保持されるように、コヒーレンシ制御を実行する。そのために、コヒーレンシハンドラ126がTLBリプレースメントを実行する時、ビクティムvictim:犠牲としてエビクションeviction:追い出しされて破棄されるTLBエントリ、即ち登録情報がカバーする物理ページはキャッシュからフラッシュFLUSH、即ちコピーバックと無効化をする。さらに、追加されるTLBエントリ、即ち登録情報によりカバーされる物理ページの書き込み/読み出し/実行の権限に、リモートのプロセッサ101のTLB107に設けられたその物理ページのアクセス権限に対して排他的となる制約を加える。排他的制約の例としては、書き込み時無効化方式、特にはMESIプロトコルの制約を挙げることができる。MESIプロトコルは、書き込み-無効化WriteInvalidate型に分類されるコヒーレンシプロトコルであるが、この他に、書き込み-更新WriteUpdate型があり、どちらを採用しても構わない。MESIプロトコルの制約については後で言及する。その制約を加えれば、TLBミスを起こさない限り、コヒーレンシを処理する必要が生じない。VMベース共有メモリ技術では、ページテーブルに保持される論理ページを排他的にキャッシュさせるため、同じ物理ページを複数の異なる論理ページへマッピングする場合には、コヒーレンシについては対応できない。TLBミス割り込みおよびストレージ割り込みのときにTLBエントリ、即ち登録情報を入れ替えたり、即ち置換したり更新したりする場合、MESIプロトコルの制約に従った読み出し/書き込み/実行の権限が与えられる。ページテーブルの検索をハードウェアによりアシストするプロセッサでは、TLBはページテーブルの一部をキャッシュしたものに過ぎないが、図2に示されたキャッシュコヒーレンシ制御では、ソフトウェアで制御されるTLBを利用して、ページテーブルに記録されたアクセス権限のうちでMESIプロトコルの排他制約に合致するアクセス権限だけをTLB107に設定する。従って、TLB107に記録されるアクセス権限は、システムメモリ103のページテーブル108に記録されるアクセス権限と同じか制約の加えられたものとなる。TLBミス割り込みまたはストレージ割り込みのとき、ローカルのプロセッサ101は、TLBディレクトリメモリ121を参照することにより、MESIプロトコルの排他制約に合致させるために更新する必要があるリモートのプロセッサ101のTLBエントリ、即ち登録情報を検索する。複数のプロセッサ101がTLBディレクトリメモリ121を同時に更新することから保護するため、TLBディレクトリメモリ121へのアクセスは、セマフォを使って逐次アクセスにすると良い。また、TLBディレクトリメモリ121は、連想メモリCAM:ContentAddressableMemoryにより実装すると良い。CAM使用の場合、検索ワードに物理ページ番号、書き込み/読み出し/実行のアクセス許可ビットが含まれ、プロセッサIDとTLBエントリ番号を連結したものをCAMのアドレス入力とする。CAMアクセスに使用するバスは、メモリバスと独立でCPU専用であることが望ましい。そのようなバスの例には、デバイスコントロールレジスタDCR:DeviceControlRegisterバスがある。図3に、TLBディレクトリメモリ121の構成を概略的に示す。各プロセッサ101のTLB107のエントリ、即ち登録情報を保持するTLBディレクトリメモリ121を設けて、各プロセッサ101がプロセッサ間割り込みを使わなくても他のプロセッサ101のTLB107のエントリ、即ち登録情報をトラッキングできるようにしてある。また、各プロセッサ101のTLB107に登録されたエントリ、即ち登録情報のページのみがキャッシングを許されるようにキャッシングを制御して、それらのTLB107を検索すれば各キャッシュのページの利用状況が判断できるようにしてある。TLBディレクトリメモリ121は、全てのプロセッサ101がアクセスできるようグローバルアドレス空間にマップされる。TLBディレクトリメモリ121の各エントリは、VSValidStatusと記された有効ステータス情報300、PPNPhysicalPageNumberと記された物理ページ番号情報301およびRWEPReadWriteExecuteProtectionと記された読み取り/書き込み/実行のアクセス権限保護情報302を含む。これらは、すべてのプロセッサ101のTLB107が保持するそれらの情報から複製したものである。左端には、TLBディレクトリメモリ121のアドレスがプロセッサIDとTLBエントリ番号の組み合わせからできることを示し、右端には、各エントリのグループがそれぞれプロセッサ0からプロセッサNまでに対応することを示す。TLBディレクトリメモリ121を用いて各プロセッサ101のTLB107にある物理ページ番号を検索するようにして、異なるプロセス同士のコヒーレンシを扱うことができるようにしてある。好ましい態様として、TLBディレクトリメモリ121をCAMにより実装して高速化し、次の2つの検索操作ができるようにする。1つは、書き込み許可があって物理ページ番号のマッチするページの検索であり、もう1つは、読み出し、書き込みまたは実行の許可があって物理ページ番号のマッチするページの検索である。CAMの検索ワード入力に物理ページ番号とページへのアクセス許可を含め、CAMのアドレス入力にプロセッサIDとTLBエントリ番号を連結させたものを入力して検索する。CAMをアクセスするバスは、DCRバスのようにプロセッサが占有するバスが適している。図4は、本発明の1実施形態に係るキャッシュコヒーレンシ制御の方法を概略的に示すフローチャート400図である。この方法は、図2に示されたようなTLBがソフトウェアにより制御されるプロセッサ101で実施できる。アプリケーションプログラムがキャッシュへアクセスすると開始しステップ401、プロセッサ101はTLB検索を実行するステップ402。TLB検索を実行してヒットしたときには、プロセッサ101はヒットしたTLBエントリのキャッシュタグを検索するステップ403。キャッシュタグ検索でヒットしたときには、プロセッサ101は、キャッシュへのアクセスを指示し、キャッシュへのアクセスを実行するステップ404。キャッシュタグ検索でヒットせずキャッシュタグミスを生じたときには、プロセッサ101は、システムメモリへのアクセスを指示し、システムメモリへのアクセスを実行するステップ405。TLB検索を実行してヒットせずTLB割り込みを生じたときにはステップ402、プロセッサ101はTLB割り込みがページフォールトであるか否かを判定するステップ406。いいえと記された、TLB割り込みがページフォールトでない、即ちページテーブルにTLBエントリ、即ち登録情報のページがあると判定したときは、プロセッサ101はコヒーレンシハンドラによりTLBミス例外処理またはストレージ例外処理のサブルーチンを実行するステップ407。はいと記された、ページフォールトであると判定したときは、プロセッサ101はページフォールト割り込みを発生し、OSカーネル処理メモリ管理部によりページフォールト処理のサブルーチンを実行するステップ408。図5は、コヒーレンシハンドラのTLBミス例外処理およびストレージ例外処理のサブルーチン図4のステップ407参照におけるビクティムTLBエントリ、即ち登録情報のエビクション処理を示すフローチャート500図である。コヒーレンシハンドラのTLBミス例外処理およびストレージ例外処理のサブルーチンは、それぞれTLBミス例外処理入口ステップ501およびストレージ例外処理入口ステップ502から開始する。TLBミス例外処理では、アドレスのマッチするエントリ、即ち登録情報がTLB107には存在しないので、プロセッサ101は、ページテーブル108からマッチするエントリ、即ち登録情報をTLB107に取り込むTLBリプレースメントを実行するステップ503。この時、TLBディレクトリメモリ121ではエントリ、即ち登録情報の更新が行われる。TLBリプレースメントを実行した時、プロセッサ101は、エビクションされて破棄されるビクティムTLBエントリ、即ち登録情報がカバーする物理ページに属するローカルのデータキャッシュラインをフラッシュコピーバックおよび無効化するステップ504。これにより、ローカルのプロセッサではTLBに登録されるエントリ、即ち登録情報のページだけが確実にキャッシュされているので、コヒーレンシ制御が必要であるかどうかは、TLBミス割り込みまたはストレージ割り込みの時にリモートのプロセッサのTLBを調べるだけで判定することができる。その後、プロセッサ101は、TLBミス割り込みまたはストレージ割り込みを生じたメモリアクセスがデータアクセスであるか命令アクセスであるかを判定するステップ505。プロセッサ101は、データアクセスであるときには、MESIエミュレーション処理のサブルーチン506へ進み、命令アクセスであるときには、命令キャッシュコヒーレンシ処理のサブルーチン507へ進む。先に少し言及したが、TLBミス割り込みおよびストレージ割り込みの両方の場合でTLBエントリ、即ち登録情報を入れ替えたり更新したりする時に、ローカルのTLBとリモートのTLBの間で、排他的制約、例えば、書き込み時無効化方式である次のようなMESIプロトコルの制約に従った読み出し書き込み実行の権限を設定する。リードオンリーデータの共有複数のプロセッサは、同じ物理ページへの読み出しと実行の権限を共有可能にする。データ読み出しまたは命令フェッチでTLB割り込みを生じ、リモートのプロセッサがその物理ページへ書き込みの権限を持つ場合は、そのリモートのプロセッサに対して、クリーンCLEANコマンドをプロセッサ間割り込みIPIで通知して、リモートのプロセッサにその物理ページへの書き込みの権限をクリアにさせる。書き込みデータの排他制御あるプロセッサが書き込みの権限を持つ物理ページに対し、他のプロセッサはどのようなアクセス権限も持たないようにする。つまり、ローカルのTLBに書き込みの権限が存在する物理ページには、リモートのTLBにどのようなアクセス権限も与えない。従って、書き込みアクセスがTLBミス割り込みまたはストレージ割り込みを起こしたときに、リモートのプロセッサがその物理ページへのアクセス権を持っているかどうかリモートのTLBを調べ、持っていれば、プロセッサ間割り込みIPIを使って、リモートのプロセッサにその物理ページのデータをリモートのキャッシュからフラッシュFLUSHさせる。図6に、ソフトウェアの制御でMESIプロトコルの制約を設ける1例として、MESIエミュレーション処理のフローチャート600を示す。プロセッサ101は、図5でデータアクセスであると判定したときステップ505、MESIエミュレーション処理のサブルーチン506へ進み、その処理を開始するステップ601。先ず、プロセッサ101は、TLB割り込みを生じた誤アクセスがデータ書き込みか読み出しかを判定するステップ602。誤アクセスが読み出しの場合、プロセッサ101は、ローカルのTLB107とTLBディレクトリメモリ121における、誤アクセスの物理ページに対応するエントリ、即ち登録情報のRRead:読み出しの属性attributeを、ページテーブル108のPTEPageTableEntry:ページテーブルエントリのURUserReadonly:ユーザーリードオンリーおよびSRSupervisorReadonly:スーパーバイザーリードオンリーのビットによりマスクされて、オンにするステップ603。次に、プロセッサ101は、TLBディレクトリメモリ121を誤アクセスの物理ページについて検索して、リモートのTLBがその物理ページについてのWWrite:書き込みの権限を持っているか否かを判定するステップ604。いいえと記された、Wの権限を持っていないときは、終了するステップ605。はいと記された、Wの権限を持っているときは、プロセッサ101は、リモートのプロセッサに対して、クリーンコマンドをプロセッサ間割り込みIPIで通知して、リモートのプロセッサにその物理ページへの書き込みの権限をクリアにさせる。即ち、リモートのプロセッサは、データキャッシュをコピーバックして、リモートのTLBにおけるその物理ページに対応するエントリ、即ち登録情報のWの属性をディスエーブルにするステップ606。リモートのTLBのそのエントリに論理から物理へのアドレス変換は残る。続いて、プロセッサ101は、TLBディレクトリメモリ121でのリモートのTLBに関するその物理ページに対応するエントリ、即ち登録情報のWの属性をクリアにしステップ607、そして、終了するステップ608。一方、誤アクセスが書き込みの場合ステップ602、プロセッサ101は、ローカルのTLB107とTLBディレクトリメモリ121における、誤アクセスの物理ページに対応するエントリ、即ち登録情報のWの属性を、ページテーブル108のPTEのUWUserWrite:ユーザー書き込みおよびSWSupervisorWrite:スーパーバイザー書き込みのビットによりマスクされて、オンにするステップ609。次に、プロセッサ101は、TLBディレクトリメモリ121を誤アクセスの物理ページについて検索して、リモートのTLBがその物理ページについてのR、WまたはXeXecute:実行の権限を持っているか否かを判定するステップ610。いいえと記された、R、WまたはXの権限を持っていないときは、終了するステップ605。はいと記された、R、WまたはXの権限を持っているときは、プロセッサ101は、リモートのプロセッサに対して、フラッシュコマンドをプロセッサ間割り込みIPIで通知して、リモートのプロセッサにその物理ページへのアクセス権限を与えずにその物理ページのデータをリモートのキャッシュからフラッシュさせる。即ち、リモートのプロセッサは、データキャッシュをコピーバックして無効化し、リモートのTLBにおけるその物理ページに対応するエントリ、即ち登録情報のR、W、Xの属性をディスエーブルにするステップ611。リモートのTLBのそのエントリに論理から物理へのアドレス変換は残る。続いて、プロセッサ101は、TLBディレクトリメモリ121でのリモートのTLBに関するその物理ページに対応するエントリ、即ち登録情報のR、W、Xの属性をクリアにしステップ612、そして、終了するステップ608。このように、MESIプロトコルの制約に従った読み出し書き込み実行の権限設定によるTLB使用のスヌープフィルタリング、即ちスヌープの削減が行われる。ハードウェアでMESIプロトコルを実施するときに問題となるスヌープ要求のブロードキャストは、そのデータをカバーする物理ページがリモートのTLBにも登録されている場合に限定する、という判断ステップが加えられる。従って、ソフトウェアの制御でMESIプロトコルの制約を設けるMESIエミュレーション処理の方が、ハードウェアでMESIプロトコルを実施するよりも、スケーラビリティを高めることができる。本発明の1実施形態に係るキャッシュコヒーレンシ制御のコヒーレンシハンドラにより、データキャッシュ同士のコヒーレンシだけでなく、命令キャッシュとデータキャッシュのコヒーレンシを制御することができる。それは、書き込み許可の権限を持つ書き込み可能なページへの命令フェッチでTLBミス割り込みを起こしたとき、その命令キャッシュラインを無効化させることにより実現される。Linuxのように、ダイナミックリンクライブラリ等をサポートするには、命令キャッシュがデータキャッシュにコヒーレントである必要があるが、Linuxでは、ユーザスペースで書き込み可能なページをフェッチしたときにだけ、命令キャッシュを無効化すれば良い。図7に、ソフトウェアの制御による命令キャッシュコヒーレンシ処理のフローチャート700を示す。プロセッサ101は、図5で命令アクセスであると判定したときステップ505、命令キャッシュコヒーレンシ処理のサブルーチン507へ進み、その処理を開始するステップ701。先ず、プロセッサ101は、命令フェッチでTLBミス割り込みを起こした物理ページについて、ページテーブル108のPTEがユーザー書き込み許可の権限を持つかを判定するステップ702。はいと記された、そのPTEがユーザー書き込み許可の権限を持つときは、プロセッサ101は、その物理ページについてリモートのTLBがユーザー書き込み許可の権限を持つかを判定するステップ703。はいと記された、そのTLBがユーザー書き込み許可の権限を持つときは、プロセッサ101は、リモートのプロセッサに対して、クリーンコマンドをプロセッサ間割り込みIPIで通知して、リモートのプロセッサにユーザー書き込み許可の権限をクリアにさせる。即ち、リモートのプロセッサは、データキャッシュについてdcbstdatacacheblockstore命令を出してデータキャッシュラインを格納し、リモートのTLBにおけるWの属性をディスエーブルにするステップ704。リモートのTLBのそのエントリにおいて論理から物理へのアドレス変換は残る。次に、プロセッサ101は、ステップ703での判定でいいえと記された、そのTLBがユーザー書き込み許可の権限を持たないときと同様に、命令キャッシュ合同クラスを無効にするiccciinstructioncachecongruenceclassinvalidateにより、ローカルの命令キャッシュを無効化するステップ705。続いて、プロセッサ101は、ステップ702での判定でいいえと記された、そのPTEがユーザー書き込み許可の権限を持たないときと同様に、ローカルのTLB107とTLBディレクトリメモリ121における、命令フェッチでTLBミス割り込みを起こした物理ページに対応するエントリ、即ち登録情報のXの属性を、そのPTEのUXUsereXecute:ユーザー実行およびSXSupervisoreXecute:スーパーバイザー実行のビットによりマスクされて、オンにしステップ706、そして、終了するステップ707。TLBディレクトリメモリ121にはセマフォを使って逐次にアクセスする。これにより、複数のプロセッサ101がTLBディレクトリメモリ121を同時に更新することからTLBディレクトリメモリ121は保護される。図8に、セマフォの使用をコヒーレンシハンドラの入口と出口のフロー800にて示す。コヒーレンシハンドラの入口では、開始ステップ801し、セマフォを取得してステップ802、終了するステップ803。コヒーレンシハンドラの出口では、開始ステップ804し、セマフォを通知してステップ805、終了するステップ806。TLBディレクトリメモリ121全体を1つのセマフォで排他的にアクセスすることもできるが、より好ましい実装態様としては、複数のプロセッサがスケーラビリティを良くしてTLBディレクトリメモリ121を同時にアクセスできるように、複数のグループに分割された物理ページのグループ毎にセマフォを分割して割り当てる。例えば、物理ページ番号をSで割った剰余系をセマフォIDとしながら、S個のセマフォを生成し、分割された物理ページをグループ毎独立に保護する。ここで、セマフォID=mod物理ページ番号、Smoda,bはaをbで割った余りを表すである。この考え方を分散共有メモリシステムであるNUMAに適用するならば、異なるセマフォをNUMAノード毎に割り当てることができる。そうすると、リモートアクセスの行われる時にだけ、リモートのTLBディレクトリメモリの参照とそのセマフォの獲得がなされ、そうでなければ、ローカルのTLBディレクトリメモリの参照とそのセマフォの獲得をするだけで良い。NUMAシステムでは、ローカルのシステムメモリへのアクセス頻度がリモートのシステムメモリへのアクセス頻度よりも高くなるよう、ジョブのプロセッサと物理メモリへの割り付けは最適化される。そのようなNUMAシステムに適用する場合、好ましい態様として、TLBディレクトリメモリとセマフォの両方をNUMAノードへ分散させる。分散されたTLBディレクトリメモリは、ローカルのシステムメモリの物理ページ番号と、それをキャッシュするプロセッサのIDを記録し、分散されたセマフォに、対応して分散したTLBディレクトリメモリを保護させる。結果として、リモートのTLBディレクトリメモリとリモートのセマフォは、リモートアクセスが生じた時にだけ参照される。それ以外のローカルのアクセスは、ローカルのTLBディレクトリメモリとローカルのセマフォだけを使って処理することができる。コヒーレンシのハードウェアサポートのコストは、ローカルのシステムメモリへのアクセスでは安価であるが、リモートのシステムメモリへのアクセスでは高価である。そこで、ローカルのシステムメモリへのアクセスには安価なスヌープバスを用い、リモートのシステムメモリへのアクセスには本発明に係るキャッシュコヒーレンシ制御を適用するという、SMPとNCCNUMAのハイブリッドシステムへ拡張することができる。つまり、ローカルのシステムメモリへのアクセスにコヒーレンシのハードウェアサポートがあり、リモートのシステムメモリへのアクセスには本発明に係るキャッシュコヒーレンシのソフトウェア制御を使って、全体としてコヒーレントな共有メモリ型マルチプロセッサシステムを構成することができる。図9に、そのようなSMPとNCCNUMAのハイブリッドシステムへ拡張した構成の1例として、コヒーレントな共有メモリ型マルチプロセッサシステム900を示す。各ノードは、複数のプロセッサ901と、コヒーレント共有バス、即ち共有バスコヒーレントSMP902により各プロセッサ901に接続されたシステムメモリ903と、ブリッジ機構904により共有バスコヒーレントSMP902に接続されたTLBディレクトリメモリ905およびセマフォハンドラ906とを含む。セマフォハンドラ906は、複数のプロセッサ901がTLBディレクトリメモリ905にセマフォによって逐次アクセスするために設けられる。また、各ノードは、NCCNUMA機構907により相互に接続される。各ノードが安価なNCCNUMA機構907により相互に接続されるので、共有メモリ型マルチプロセッサシステム900は、ハードウェアのコストを抑えてノードの数を増大させる、即ちスケーラビリティを向上させることができる。TLBディレクトリメモリのエントリ数に制約なく、ローカルのシステムメモリでもリモートのシステムメモリでも自由に対応付けできるとすると、TLBディレクトリメモリのサイズはプロセッサの数に比例して増える。例えば、1024のプロセッサがそれぞれ1024のエントリのTLBを持ち、1エントリにつき4バイトであれば、次の計算より、1024プロセッサ1024エントリ4バイト=4MバイトTLBディレクトリメモリのサイズは4Mバイトである。そこで、TLBディレクトリメモリのサイズを節約するために、例えばNUMAシステムに適用する場合、図10に示すように、個々のプロセッサ1001がリモートのシステムメモリRSMRemoteSystemMemoryに割り当てるRSM用のTLBエントリ1002の数に制約を加えて、残りをローカルのシステムメモリLSMLocalSystemMemoryに割り当てるLSM用のTLBエントリ1003として用いる。そうすると、LSM用のローカルのTLBディレクトリメモリ1000は、TLBエントリの数が制約された、リモートのプロセッサRPRemoteProcessor用のTLBディレクトリを複製したエントリと、残りのTLBエントリの数が割り当てられた、ローカルのプロセッサLPLocalProcessor用のTLBディレクトリを複製したエントリとで構成され、その容量を削減することができる。特に、NUMAノードの数をN、CPUあたりのTLBエントリ数をEそのうち、リモートのシステムメモリに割り当てるエントリ数をRとすれば、ローカルのシステムメモリへ割り当てられるTLBエントリの数はE-Rになるので、ノード当たりTLBディレクトリメモリのエントリ数は、ENからN-1R1E-Rに削減される。上記の例では、1024のプロセッサが256のNUMAノードに分散し、ノード内は4-wayのSMPである構成で、リモートのTLBに割り当てるTLBエントリの数を16に制約を加えれば、TLBディレクトリメモリのサイズは、次の計算より、81.4Kバイトになる。1020プロセッサ16エントリ4バイト4プロセッサ1008エントリ4バイト=81.4KバイトそれをCAMに実装すると、45nmの半導体テクノロジでは、TLBディレクトリメモリに要する領域面積はわずか1mm2である。上記説明のとおり、本発明によるソフトウェアでのキャッシュコヒーレンシの制御を実施すれば、共有メモリ型マルチプロセッサシステムを汎用部品のような廉価な部品で構成できるので、ハードウェアコストをクラスタ並みに抑えてスケーラビリティを向上させることができる。また、各プロセッサのTLB情報だけを管理する小規模なTLBディレクトリメモリで物理ページの検索を行うことにより、複数のプロセスを扱えるようにするばかりでなく、アプリケーションプログラムの変更をも不要にして、ソフトウェアコストを生じずにスケーラビリティを向上させることができる。以上、実施態様を用いて本発明の説明をしたが、本発明の技術的範囲は実施態様について記載した範囲には限定されない。実施態様に種々の変更又は改良を加えることが可能であり、そのような変更又は改良を加えた態様も当然に本発明の技術的範囲に含まれる。"