説明

マルチプロセッサシステム及びその動作方法

【課題】ディレクトリでの訂正不可能障害から継続動作可能状態に復帰することを可能とするマルチプロセッサシステムを提供する。
【解決手段】主記憶装置107と複数のプロセッサ101とメモリコントローラ105とディレクトリ106とを具備するマルチプロセッサシステムを用いる。プロセッサ101はプロセッサキャッシュ102を有する。ディレクトリ106は、エントリ情報を格納する。メモリコントローラ105は、プロセッサキャッシュ間のコヒーレンシを保証し、ディレクトリ106から得た第1アドレス情報に対応する第1エントリ情報に異常が有る場合、第1エントリ情報を無効化する指示をプロセッサ101へ出力する。プロセッサ101は、プロセッサキャッシュ102の第1エントリ情報を無効化し、第1アドレス情報で特定される最新データが主記憶装置107にあることを示す返信をメモリコントローラ105へ出力する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、マルチプロセッサシステム及びその動作方法に関し、特にRAM(Random Access Memory)で構成されるディレクトリの訂正不可能障害を救済可能なマルチプロセッサシステム及びその動作方法に関する。
【背景技術】
【0002】
複数のCPUやI/Oプロセッサを搭載したマルチプロセッサシステムが知られている。このようなマルチプロセッサシステムは、例えば、内部に主記憶データを一時的に格納するMESIなどの一般的なプロトコルを採用するストアイン方式のキャッシュメモリ(プロセッサキャッシュ)を搭載している。そして、複数のCPUやIOプロセッサのキャッシュ間コヒーレンシ保証方式としてすべての自メモリコントローラ搭載主記憶データをキャッシュラインサイズ単位でその状態を管理するフルディレクトリ方式を採用するキャッシュコヒーレンシ制御回路や、主記憶制御回路を有するメモリコントローラとを接続するシステムインタフェースを有している。例えば、特開2005−250830号公報に開示された主記憶共有マルチプロセッサは、プロセッサが内部にプロセッサキャッシュを内蔵し、主記憶の各ページごとにその主記憶がプロセッサキャッシュに登録されているかどうかを示すディレクトリを有し、それらプロセッサキャッシュやディレクトリを管理する制御回路を有している。
【0003】
特開平4−115339号公報にメモリエラー処理システムが開示されている。このメモリエラー処理システムは、主記憶装置から読み出したデータを一時格納する緩衝記憶装置のメモリエラー処理システムである。エラー検出手段と、エラーアドレスレジスタと、エラーデータレジスタと、データフェッチ手段と、書き込み手段と、比較手段とを含む。エラー検出手段は、前記緩衝記憶装置からの読み出しデータのエラーをチェックする。エラーアドレスレジスタは、このエラー検出手段によりエラーが検出されたときのアドレスを保持する。エラーデータレジスタは、前記エラー検出時の読み出しデータを保持する。データフェッチ手段は、前記エラーアドレスレジスタの保持アドレスにより前記主記憶装置からデータフェッチする。書き込み手段は、このフェッチされたデータを前記緩衝記憶装置の対応アドレスへ格納する。比較手段は、この書き込み後の該当データを前記緩衝記憶装置から読み出して前記エラーデータレジスタの格納データと比較する。
【0004】
特開平4−326436号公報にキャッシュコントローラが開示されている。このキャッシュコントローラは、テーブルと、不良アドレス検索手段と、アドレス変換手段からなる。テーブルは、キャッシュメモリの読み出しまたは書き込み時に発生したメモリエラーの発生アドレスを記憶しておく。不良アドレス検索手段は、データをキャッシュメモリに読み出しまたは書き込み時に、上記テーブルを検索する。アドレス変換手段は、上記検索の結果、不良アドレスがあれば代替アドレスを指示して代替アドレスにデータを読み出し又は書き込ませる。
【0005】
特開平5−165719号公報にメモリアクセス処理装置が開示されている。このメモリアクセス処理装置は、データアレイとアドレスアレイとキャッシュと第1のエラー検出訂正手段を備えている。情報処理装置は、前記アドレスアレイのMビットを強制的に有効にするMビット変更手段を更に備える。主記憶をリードし前記データアレイにデータを登録し、対応するアドレスをアドレスアレイに登録するときに前記第1のエラー検出訂正手段により主記憶の訂正可能なエラーが検出された場合には、前記Mビット変更手段により強制的にMビットを有効状態にしてアドレスアレイに登録するようにしている。
【0006】
特開平9−305489号公報に情報処理システム及びその制御方法が開示されている。この情報処理システムは、複数のノードによって共有分散メモリを実現する。第1記憶手段と、第2記憶手段と、実行手段と、第1更新手段とを備える。第1記憶手段は、当該情報処理システムにおけるマルチキャストの宛て先を、各マルチキャストのエントリ毎に、1つ又は複数のノードを含むグループを単位として記憶する。第2記憶手段は、マルチキャストを実行すべきエントリについて、前記第1記憶手段よりキャッシュの状態を獲得してノード単位の情報に展開し、これをマルチキャスト情報として記憶する。実行手段は、前記第2記憶手段に記憶されたマルチキャスト情報に基づいて、当該エントリについてマルチキャストを実行する。第1更新手段は、前記実行手段によるマルチキャストの結果に基づいて前記第2記憶手段に記憶されたマルチキャスト情報をノード毎に更新する。
【0007】
特開平11−232240号公報にマルチプロセッサシステムのキャッシュ障害処理方法が開示されている。ここで、マルチプロセッサシステムは、複数のプロセッサとバス制御回路と第1のバスとを有する系を少なくとも一つ備える。複数のプロセッサは、キャッシュメモリを有する。バス制御回路は、前記キャッシュメモリに格納されたデータのキーアドレス及びステータスからなるアドレスアレイのコピーデータを保持するコピーキャッシュを有する前記キャッシュメモリの内容と主記憶装置のキャッシュコヒーレンシを保証する。第1のバスは、前記プロセッサ及び前記バス制御回路を接続する。前記系と前記主記憶装置が第2のバスによって接続されている。このマルチプロセッサシステムのキャッシュ障害処理方法は、マルチプロセッサシステムで、前記アドレスアレイのデータに訂正不可能なエラーが発生した場合に実行される。前記アドレスアレイのデータで発生した前記エラーの検出回数をカウントし、予め設定された回数になるまで、前記コピーキャッシュで保持した前記コピーデータを用いて前記アドレスアレイのデータを回復させる。
【0008】
【特許文献1】特開2005−250830号公報
【特許文献2】特開平4−115339号公報
【特許文献3】特開平4−326436号公報
【特許文献4】特開平5−165719号公報
【特許文献5】特開平9−305489号公報
【特許文献6】特開平11−232240号公報
【発明の開示】
【発明が解決しようとする課題】
【0009】
従来、メモリコントローラに接続されRAMで構成されるディレクトリにおけるディレクトリの情報は、ECC(Error Correcting Code)により保護されている。ここで、このディレクトリにおいて訂正不可能障害が検出された場合、該当データのプロセッサキャッシング情報が失われる。そうなると、プロセッサキャッシュ間コヒーレンシ保証が不可能となり、即システム停止とせざるを得ない状況が起こり得る。その場合、比較的障害の可能性の高いRAM障害にシステム全体の可用性が制限されるおそれがある。訂正不可能障害から継続動作可能状態に復帰することを可能とする技術が望まれる。また、ディレクトリのRAM障害が固定障害であった場合でも、継続動作可能状態に復帰することを可能とする技術が望まれる。
【0010】
本発明の目的は、RAMで構成されるディレクトリでの訂正不可能障害から継続動作可能状態に復帰することを可能とするマルチプロセッサシステム及びマルチプロセッサシステムの動作方法を提供することにある。
【0011】
本発明の他の目的は、ディレクトリのRAM障害が固定障害であった場合でも、継続動作可能状態に復帰することを可能とするマルチプロセッサシステム及びマルチプロセッサシステムの動作方法を提供することにある。
【課題を解決するための手段】
【0012】
以下に、発明を実施するための最良の形態で使用される番号・符号を用いて、課題を解決するための手段を説明する。これらの番号・符号は、特許請求の範囲の記載と発明を実施するための最良の形態との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、特許請求の範囲に記載されている発明の技術的範囲の解釈に用いてはならない。
【0013】
上記課題を解決するために、本発明のマルチプロセッサシステムは、主記憶装置(107)と複数のプロセッサ(101)とメモリコントローラ(105)とディレクトリ(106)とを具備する。複数のプロセッサ(101)は、プロセッサキャッシュ(102)を有する。メモリコントローラ(105)は、複数のプロセッサ(101)の各々から主記憶装置(107)へのアクセスを制御し、プロセッサキャッシュ間のコヒーレンシを保証する。ディレクトリ(106)は、主記憶装置(107)のアドレス情報毎のキャッシュ制御状態を示すエントリ情報(202、203、204)を格納する。メモリコントローラ(105)は、ディレクトリ(106)から読み出した第1アドレス情報に対応する第1エントリ情報(202、203、204)に異常が有る場合、第1エントリ情報(202、203、204)を無効化する指示を複数のプロセッサ(101)へ出力する。複数のプロセッサ(101)の各々は、プロセッサキャッシュ(102)の第1エントリ情報(202、203、204)を無効化する。第1アドレス情報で特定されるデータの最新のものが主記憶装置(107)にあることを示す返信をメモリコントローラ(105)へ出力する。
本発明では、ディレクトリ(RAM:106)で訂正不可能な障害を検出した際に、該当アドレスの無効化を全プロセッサキャッシュ(102)に指示する機能を用意することで、ディレクトリ(RAM:106)で訂正不可能な障害を検出したエントリ情報(202、203、204)に対応する主記憶データが最新であることを保証することが出来る。
【0014】
上記のマルチプロセッサシステムにおいて、メモリコントローラ(105)は、複数のプロセッサ(101)からの返信の有無を確認する障害処理部(322)と、複数のプロセッサ(101)の全てから返信を受信したことを障害処理部(322)が確認するまで読み出し要求を受け付けない調停部(305)とを備えることが好ましい。
本発明では、ディレクトリ(RAM:106)で訂正不可能な障害を検出した際に、更に、全プロセッサキャッシュ(102)の無効化完了を待ち合わせる機能を用意することで、ディレクトリ(RAM:106)で訂正不可能な障害を検出したアドレス情報(エントリ)に対応する主記憶データが最新であることを保証することが出来る。
【0015】
上記のマルチプロセッサシステムにおいて、プロセッサ(101)は、自身のプロセッサキャッシュ(102)に第1アドレス情報で特定されるデータとして最新データを有している場合、最新データをメモリコントローラ(105)へ出力することが好ましい。メモリコントローラ(105)は、主記憶装置(105)の第1アドレス情報において最新データに上書きする主記憶制御部(313)を備えることが好ましい。
本発明では、ディレクトリ(RAM:106)で訂正不可能な障害を検出した際に、該ディレクトリ(RAM:106)のエントリ情報を、主記憶データが最新データであることを示す値に強制的に上書きすることで、障害状態から通常状態への復旧を行うことが出来る。
【0016】
上記のマルチプロセッサシステムにおいて、メモリコントローラ(105)は、ディレクトリ(106)から再度読み出した第1アドレス情報に対応する第2エントリ情報(202、203、204)に異常が有る場合、第1アドレス情報に対応するエントリ情報(202、203、204)を格納する固定障害処理部(327)を備えることが好ましい。ディレクトリ(106)に対する第1アドレス情報に対応するデータへの読み出し要求を受けたとき、固定障害処理部(327)は、第1アドレス情報に対応するエントリ情報(202、203、204)を、ディレクトリ(106)に替わって出力することが好ましい。
本発明では、更に、上記処理によっても同ディレクトリ(RAM:106)のアドレス情報(エントリ)での障害がなくならない場合、これを固定障害と判断し、ディレクトリ(RAM:106)の該エントリ情報(202、203、204)を、ディレクトリ(106)とは別に用意する固定障害処理部(327:例示、レジスタ)に移し、その後は該ディレクトリ(106)のアドレス情報(エントリ)に対するアクセスは、ディレクトリ(106)ではなくこの固定障害処理部(327)に対して行うことで、ディレクトリ(106)で固定障害が発生した場合でも、システムの継続動作を可能にできる。
【0017】
本発明のメモリコントローラ(105)は、接続される主記憶装置(107)のアドレス情報毎のキャッシュ制御状態を示すエントリ情報を格納するディレクトリ(106)から読み出した第1アドレス情報に対応する第1エントリ情報(202、203、204)に異常が有るか否かを検出する異常検出部(310)と、異常の検出に基づいて、第1エントリ情報(202、203、204)を無効化する指示を複数のプロセッサ(101)へ出力するリクエスト部(311)とを具備する。
【0018】
上記のメモリコントローラ(105)において、接続される複数のプロセッサ(101)からの第1アドレス情報で特定されるデータの最新のものが主記憶装置(107)にあることを示す返信の有無を確認する障害処理部(322)と、複数のプロセッサ(101)の全てから返信を受信したことを障害処理部(322)が確認するまで読み出し要求を受け付けない調停部(305)とを備えることが好ましい。
【0019】
上記のメモリコントローラ(105)において、プロセッサ(101)は、自身のプロセッサキャッシュ(102)に第1アドレス情報で特定されるデータとして最新データを有している場合、最新データをメモリコントローラ(105)へ出力することが好ましい。メモリコントローラ(105)は、主記憶装置(105)の第1アドレス情報において最新データに上書きする主記憶制御部(313)を備えることが好ましい。
【0020】
上記のメモリコントローラ(105)において、ディレクトリ(106)から再度読み出した第1アドレス情報に対応する第2エントリ情報(202、203、204)に異常が有る場合、第1アドレス情報に対応するエントリ情報(202、203、204)を格納する固定障害処理部(327)を備えることが好ましい。ディレクトリ(106)に対する第1アドレス情報に対応するデータへの読み出し要求を受けたとき、固定障害処理部(327)は、第1アドレス情報に対応するエントリ情報(202、203、204)を、ディレクトリ(106)に替わって出力することが好ましい。
【0021】
上記課題を解決するために、本発明は、マルチプロセッサシステムの動作方法である。ここで、マルチプロセッサシステムは、主記憶装置(107)と、プロセッサキャッシュ(102)を有する複数のプロセッサ(101)と、複数のプロセッサ(101)の各々から主記憶装置(107)へのアクセスを制御し、プロセッサキャッシュ間のコヒーレンシを保証するメモリコントローラ(105)と、主記憶装置(107)のアドレス情報毎のキャッシュ制御状態を示すエントリ情報(202、203、204)を格納するディレクトリ(106)とを具備する。マルチプロセッサシステムの動作方法は、(a)メモリコントローラ(105)が、ディレクトリ(106)から読み出した第1アドレス情報に対応する第1エントリ情報(202、203、204)に異常が有る場合、第1エントリ情報(202、203、204)を無効化する指示を複数のプロセッサ(101)へ出力するステップと、(b)複数のプロセッサ(101)の各々が、プロセッサキャッシュ(102)の第1エントリ情報(202、203、204)を無効化するステップと、(c)複数のプロセッサ(101)の各々が、第1アドレス情報で特定されるデータの最新のものが主記憶装置(107)にあることを示す返信をメモリコントローラ(105)へ出力するステップとを具備する。
【0022】
上記のマルチプロセッサシステムの動作方法において、メモリコントローラ(105)は、障害処理部(322)と調停部(305)を備えることが好ましい。マルチプロセッサシステムの動作方法は、(d)調停部(305)が、複数のプロセッサ(101)の全てから返信を受信したことを障害処理部(322)が確認するまで、読み出し要求を受け付けないステップを更に具備することが好ましい。
【0023】
上記のマルチプロセッサシステムの動作方法において、メモリコントローラ(105)は、主記憶制御部(313)を備えることが好ましい。前記マルチプロセッサシステムの動作方法は、(e)プロセッサ(101)が、自身のプロセッサキャッシュ(102)に第1アドレス情報で特定されるデータとして最新データを有している場合、最新データをメモリコントローラ(105)へ出力するステップと、(f)主記憶制御部(313)が、主記憶装置(105)の第1アドレス情報において最新データに上書きするステップとを更に具備することが好ましい。
【0024】
上記のマルチプロセッサシステムの動作方法において、メモリコントローラ(105)は、固定障害処理部(327)を備えることが好ましい。マルチプロセッサシステムの動作方法は、(g)固定障害処理部(327)が、ディレクトリ(106)から再度読み出した第1アドレス情報に対応する第2エントリ情報(202、203、204)に異常が有る場合、第1アドレス情報に対応するエントリ情報(202、203、204)を格納するステップと、(h)メモリコントローラ(105)が、ディレクトリ(106)に対する第1アドレス情報に対応するデータへの読み出し要求を受けたとき、固定障害処理部(327)が、第1アドレス情報に対応するエントリ情報(202、203、204)を、ディレクトリ(106)に替わって出力するステップを更に具備することが好ましい。
【0025】
上記課題を解決するために、本発明は、マルチプロセッサシステムの動作方法を実行するプログラムである。ここで、マルチプロセッサシステムは、主記憶装置(107)と、プロセッサキャッシュ(102)を有する複数のプロセッサ(101)と、複数のプロセッサ(101)の各々から主記憶装置(107)へのアクセスを制御し、プロセッサキャッシュ間のコヒーレンシを保証するメモリコントローラ(105)と、主記憶装置(107)のアドレス情報毎のキャッシュ制御状態を示すエントリ情報(202、203、204)を格納するディレクトリ(106)とを具備する。プログラムは、(a)メモリコントローラ(105)が、ディレクトリ(106)から読み出した第1アドレス情報に対応する第1エントリ情報(202、203、204)に異常が有る場合、第1エントリ情報(202、203、204)を無効化する指示を複数のプロセッサ(101)へ出力するステップと、(b)複数のプロセッサ(101)の各々がプロセッサキャッシュ(102)の第1エントリ情報(202、203、204)を無効化し、第1アドレス情報で特定されるデータの最新のものが主記憶装置(107)にあることを示す返信を出力したとき、メモリコントローラ(105)が、返信を受信するステップとを具備する。
【0026】
上記のプログラムにおいて、メモリコントローラ(105)は、障害処理部(322)と調停部(305)とを備えることが好ましい。プログラムは、(c)調停部(305)が、複数のプロセッサ(101)の全てから返信を受信したことを障害処理部(322)が確認するまで、読み出し要求を受け付けないステップを更に具備することが好ましい。
【0027】
上記のプログラムにおいて、メモリコントローラ(105)は、主記憶制御部(313)を備えることが好ましい。プログラムは、(d)主記憶制御部(313)が、プロセッサ(101)が自身のプロセッサキャッシュ(102)に第1アドレス情報で特定されるデータとして最新データを有している場合にメモリコントローラ(105)へ出力した最新データを、主記憶装置(105)の第1アドレス情報において最新データに上書きするステップとを更に具備することが好ましい。
【0028】
上記のプログラムにおいて、メモリコントローラ(105)は、固定障害処理部(327)を備えることが好ましい。プログラムは、(e)固定障害処理部(327)が、ディレクトリ(106)から再度読み出した第1アドレス情報に対応する第2エントリ情報(202、203、204)に異常が有る場合、第1アドレス情報に対応するエントリ情報(202、203、204)を格納するステップと、(f)メモリコントローラ(105)が、メモリコントローラ(105)が、ディレクトリ(106)に対する第1アドレス情報に対応するデータへの読み出し要求を受けたとき、固定障害処理部(327)が、第1アドレス情報に対応するエントリ情報(202、203、204)を、ディレクトリ(106)に替わって出力するステップを更に具備することが好ましい。
【発明の効果】
【0029】
本発明により、RAMで構成されるディレクトリでの訂正不可能障害から継続動作可能状態に復帰することが可能となり、ディレクトリのRAM障害が固定障害であった場合でも継続動作可能状態に復帰することが可能となる。
【発明を実施するための最良の形態】
【0030】
以下、本発明のマルチプロセッサシステムの実施の形態に関して、添付図面を参照して説明する。図1は、本発明のマルチプロセッサシステムの実施の形態の構成の一例を示すブロック図である。マルチプロセッサシステムは、複数のプロセッサ101(101−i:i=1〜mの自然数、以下同じ)、メモリコントローラ105、ディレクトリ106、主記憶装置107、システムインタフェース108(108−i)を具備する。
【0031】
この例において、マルチプロセッサシステムは、メモリコントローラ105と複数のプロセッサ101の各々とを1:1接続している。ここでは、m=4、すなわち、プロセッサ数は4個、メモリコントローラは1個である。ただし、この例は本発明を説明するにあったっての簡略化のためであり、本発明はこの個数に限定されるものではない。また、この例ではプロセッサ101とメモリコントローラ105とを1:1接続しているが、これも同様に簡略化のためであり、バス接続などの他の接続方法でも本発明を実現可能である。
【0032】
プロセッサ101(101−i)は、CPU(Central Processing Unit)やI/Oプロセッサに例示される演算装置である。プロセッサ101は、MESI(Modified Exclusive Shared Invalid)プロトコルのような一般的なキャッシュプロトコルを採用するストアイン方式のプロセッサキャッシュ(102−i)を搭載している。プロセッサ101−iは主記憶アクセスリクエストのリクエスタになるものであり、一般的なものでよく、ここではその詳細については言及しない。
【0033】
メモリコントローラ105は、プロセッサ101からの主記憶アクセスリクエストを処理し、プロセッサキャッシュ間コヒーレンシを保証する。メモリコントローラには、主記憶装置107とディレクトリ106とが接続されている。
【0034】
主記憶装置107は、DIMM(Dual Inline Memory Module)などで構成され、SDRAM(Synchronous dynamic random access memory)に例示される。
【0035】
ディレクトリ106は、RAM(Randam Access Memory)で構成される。このマルチプロセッサシステムのプロセッサキャッシュ間コヒーレンシを保証するために用いられる。主記憶装置107の各アドレスデータに対応するプロセッサキャッシング情報(例示:キャッシュステータス、キャッシングエージェント(後述))を保持する。ディレクトリ106は、主記憶装置107の全てのデータをプロセッサキャッシュラインサイズで管理可能なフルディレクトリ方式を実現可能な容量を備えるものである。
【0036】
システムインタフェース108(108−i)は、プロセッサ101(101−i)とメモリコントローラ105とを接続している。プロセッサ101からメモリコントローラ105上の主記憶装置107への主記憶アクセスリクエスト及びそのデータリプライや、メモリコントローラ105からプロセッサ101への主記憶データのキャッシング状態問い合わせリクエスト(以降スヌープリクエスト)及びそのリプライは、このインタフェースを通じて行われる。
【0037】
図2は、本発明のマルチプロセッサシステムにおけるディレクトリの構成を示す概略図である。このディレクトリ201は、図1のディレクトリ106と同じである。このディレクトリ201は、本発明のマルチプロセッサシステムがキャッシュコヒーレンシ保証方式として採用するフルディレクトリ方式を実現可能とする。そのために、ディレクトリ201は、メモリコントローラ105に接続される主記憶装置107をキャッシュラインサイズ単位で管理可能な容量とする。したがって、ディレクトリ201の1エントリで一つのキャッシュラインサイズを管理するとすると、このディレクトリ201の総エントリ数は、[(主記憶装置107の総容量)/(キャッシュラインサイズ)]となる。この計算結果を(n)とすると、ディレクトリ201はエントリ0からエントリnまでの(n)個のエントリ(キャッシュライン)で構成されることになる。また、このディレクトリ201の各エントリは主記憶装置107に対してダイレクトにマッピングされる。すなわち主記憶アクセスリクエストのアドレスと、それに対応するディレクトリ107のエントリは1:1である。
【0038】
ディレクトリ201の各エントリ(エントリj:j=0〜nの整数)は、主記憶装置107をキャッシュラインサイズ単位で管理するための情報を格納している。エントリは、キャッシュステータス202、キャッシングエージェント情報203、ECC(Error Correcting Code)204を有する。
【0039】
ECC204は、キャッシュステータス202、及び、キャッシュエージェント情報203のECCである。
【0040】
キャッシュステータス202は、プロセッサ101が対応する主記憶データをキャッシングしているか否かを示し、「MESI」のいずれかの状態を示すコードを格納する。ここで用いるMESIプロトコルは一般的なものである。図8は、MESIプロトコルを説明する表である。すなわち「M」401は、「Modified」である。プロセッサ101−1〜101−4の中の唯一つのプロセッサ101(例示:101−i)が、主記憶データとは異なる状態でシステム唯一の最新データをプロセッサキャッシュ102(例示:102−i)内に保持していることを示す。
【0041】
「E」402は「Exclusive」である。プロセッサ101−1〜101−4の中の唯一つのプロセッサ101(例示:101−i)が、主記憶と同じデータを、又は、主記憶データとは異なる状態でシステム唯一の最新データを、プロセッサキャッシュ102(例示:102−i)内に保持している可能性があることを示す。場合により、プロセッサキャッシュ102内にデータを保持していないこともある。このように状態が異なる可能性があるのは、「E」402で主記憶データをキャッシュしたプロセッサ101は、そのデータをプロセッサキャッシュ102内で更新したり、あるいはプロセッサキャッシュ102内データを更新する前ならば(主記憶と同じデータならば)メモリコントローラ105に通知することなくこれを廃棄することが許可されているためである。「E」402のプロセッサ101が主記憶装置107と同じ状態のデータをプロセッサキャッシュ102内に保持しているか、主記憶装置107とは異なる最新データを保持しているか、又は、データをプロセッサキャッシュ102内に保持していないかは、メモリコントローラ105からシステムインタフェース108を通じてスヌープリクエストを発行しない限り確認できない。
【0042】
「S」403は「Shared」である。プロセッサ101−1〜101−4の中の複数、又は一つのプロセッサ101が主記憶装置107と同じデータをプロセッサキャッシュ102内に保持している可能性があることを示す。場合により、プロセッサキャッシュ102内にデータを保持していないこともある。このように状態が異なる可能性があるのは、「S」403で主記憶データをキャッシュしたプロセッサ101は、そのデータ(主記憶と同じデータ)をメモリコントローラ105に通知することなくこれを廃棄することが許可されているためである。「S」403のプロセッサが主記憶装置107と同じ状態のデータをプロセッサキャッシュ102内に保持しているかは、メモリコントローラ105からシステムインタフェース108を通じてスヌープリクエストを発行しない限り確認できない。
【0043】
「I」404は「Invalidate」であり、プロセッサ101−1〜101−4のいずれのプロセッサ101も主記憶装置107と同じデータをプロセッサキャッシュ102内に保持していないことを示す。
【0044】
図2を参照して、キャッシングエージェント情報203は、キャッシュステータス202が「M」401、「E」402、「S」403の場合に、この状態でそのディレクトリ201のエントリに対応する主記憶データをキャッシングしているプロセッサ情報を示す。キャッシングエージェント情報203は、プロセッサキャッシュ102を搭載するプロセッサ数と同じビット数で構成される。図9は、キャッシングエージェント情報を説明する表である。例えば、キャッシングエージェント情報203のビット「0」501が“1”ならば、プロセッサ101−1のプロセッサキャッシュ102−1にディレクトリ201のエントリに対応する主記憶データがキャッシュされている可能性があることを示す。同様に、ビット「1」502が“1”ならば、プロセッサ101−2のプロセッサキャッシュ102−2にディレクトリ201のエントリに対応する主記憶データが保持されている可能性があることを示す。ビット「2」503が“1”ならば、プロセッサ101−3のプロセッサキャッシュ102−3にディレクトリ201のエントリに対応する主記憶データが保持されている可能性があることを示す。ビット「3」504が“1”ならば、プロセッサ101−4のプロセッサキャッシュ102−4にディレクトリ201のエントリに対応する主記憶データが保持されている可能性があることを示す。
【0045】
ここで、キャッシュステータス202が「M」401、「E」402ならば、キャッシングエージェント情報203の中の唯一つのビットのみが“1”であることは自明である。また、「S」ならば一つ又は複数のビットが「1」となる。そして「I」ならばすべてのビットが“0”となる。
【0046】
図10A及び図10Bは、システムインタフェースで使用するリクエストと、そのリクエストによるプロセッサキャッシュステータス遷移、ディレクトリ内キャッシュステータス遷移を示す表である。
【0047】
ここで記すリクエストのアドレス情報は、全て同一主記憶データに対するものである。図中、「M[A]」という表記は、ディレクトリ106のキャッシュステータス202は「M」、キャッシングエージェント情報203はプロセッサAに対応するビットのみが“1”であることを示す。また「S[A&X]」という表記は、ディレクトリ106のキャッシュステータス202は「S」、キャッシングエージェント情報203はプロセッサAと「X」に対応するビットが“1”であることを示す。他の表記についても同様である。
【0048】
また、図中、「プロセッサXキャッシュステータス」及び「プロセッサAキャッシュステータス」は、プロセッサX及びプロセッサA(それぞれプロセッサ101−1〜101−4のいずれか)のプロセッサキャッシュ102内に有するキャッシュステータスである。そのキャッシュステータスは、図2に示すキャッシュステータス202と同様であり、アドレス情報とデータとに対応付けられて格納されている。
【0049】
メモリリードfor loadリクエストは、プロセッサ101が主記憶データをloadしたとき、自プロセッサキャッシュ102にミス、すなわち自キャッシュステータスが「I」であった場合に発行されるリクエストである。
【0050】
欄601、602、603、604は、メモリコントローラ105がメモリリードfor loadリクエストを受け付けたとき、ディレクトリキャッシュステータス202/キャッシングエージェント情報203が「M[X]」であった場合のディレクトリキャッシュステータス202、プロセッサキャッシュステータス、システムインタフェースリクエストの動きを示すものである。欄601、602、603、604のときメモリコントローラ105は、プロセッサAから受け付けたメモリリードfor loadリクエストの処理を一旦保留するとともに、プロセッサXに対してスヌープfor loadリクエストを発行する。
【0051】
ここで、スヌープfor loadリクエストによる索引の結果、プロセッサXキャッシュステータスが「M」である場合(欄601)、プロセッサXキャッシュステータスは「I」に更新される。それとともに、プロセッサXはシステムインタフェース108を通じてメモリコントローラ105に対して主記憶装置107を最新状態に書き戻すためのライトバックリクエストを発行する。ライトバックリクエストを受け付けたメモリコントローラ105は、後述の欄620の場合と同様、ディレクトリ内のキャッシュステータス202を「I」に更新し、その後、保留していたメモリリードfor loadリクエストの処理を再開する。再開されたメモリリードfor loadリクエストが索引するディレクトリキャッシュステータス202は「I」となるので、後述の欄609の場合と同様、これを「E[A]」に更新し、更にプロセッサAに主記憶読み出しデータをリプライする。これを受け取ったプロセッサAキャッシュステータスは「E」に更新され、処理を終了する。
【0052】
スヌープfor loadリクエストによる索引の結果、プロセッサXキャッシュステータスが「E」である場合(欄602)や、「S」である場合(欄603)はありえない。これは、ディレクトリキャッシュステータス202が「M」に更新されるのは、後述のメモリリードfor storeリクエストの場合のみであり、メモリリードfor storeリクエストを発行したプロセッサ101のプロセッサキャッシュ102は必ず「M」に更新されるためである。
【0053】
スヌープfor loadリクエストによる索引の結果、プロセッサXキャッシュステータスが「I」である場合はありえる(欄604)。これはプロセッサXが、メモリコントローラ105からのスヌープリクエストを受け取る前にキャッシュリプレースが発生し、ライトバックリクエストを発行した場合である。この場合プロセッサXはキャッシュを「I」のまま更新せず、システムインタフェース108を通じてメモリコントローラ105に対してディレクトリキャッシュステータス202を「I」に更新するためのスヌープリプライIを転送する。スヌープリプライIを受け付けたメモリコントローラ105はディレクトリキャッシュステータス202を「I」に更新し、その後、保留していたメモリリードfor loadリクエストの処理を再開する。再開されたメモリリードfor loadリクエストが索引するディレクトリキャッシュステータス202は「I」となるので、後述の欄609の場合と同様、これを「E[A]」に更新し、更にプロセッサAに主記憶読み出しデータをリプライする。これを受け取ったプロセッサAのキャッシュステータスは「E」に更新され、処理を終了する。
【0054】
欄605、606、607は、メモリコントローラ105がメモリリードfor loadを受け付けたとき、ディレクトリキャッシュステータス202/キャッシングエージェント情報203がE[X]であった場合のディレクトリキャッシュステータス202、プロセッサキャッシュステータス、システムインタフェースリクエストの動きを示すものである。欄605、606、607のときメモリコントローラ105は、プロセッサAから受け付けたメモリリードfor loadリクエストの処理を一旦保留するとともに、プロセッサXに対してスヌープfor loadリクエストを発行する。
【0055】
スヌープfor loadリクエストによる索引の結果、プロセッサXキャッシュステータスが「E」である場合(欄605)、プロセッサXはキャッシュステータスを「S」に更新し、システムインタフェース108を通じてメモリコントローラ105に対してディレクトリキャッシュステータス202を「S」にするためのスヌープリプライSを転送する。スヌープリプライSを受け付けたメモリコントローラ105はディレクトリキャッシュステータス202を「S」に更新し、その後、保留していたメモリリードfor loadリクエストの処理を再開する。再開されたメモリリードfor loadリクエストが索引するディレクトリキャッシュステータス202は「I」となるので、後述の欄608の場合と同様、これを「E[A&X]」に更新し、更にプロセッサAに主記憶読み出しデータをリプライする。これを受け取ったプロセッサAのキャッシュステータスは「S」に更新され、処理を終了する。
【0056】
スヌープfor loadリクエストによる索引の結果、プロセッサXキャッシュステータスが「S」である場合(欄606)はありえない。これは、ディレクトリステータス202が「E」に更新されるのは、メモリリードfor loadリクエストあるいは再開されたメモリリードfor loadリクエストがディレクトリキャッシュステータス202を索引し「I」であった場合のみであり、メモリリードfor storeリクエストを発行したプロセッサのキャッシュは必ず「E」に更新されるためである。そして「E」の状態から「S」の状態に遷移するのは、欄605の場合のように、必ず他プロセッサのメモリリードfor loadリクエストを要因とするスヌープfor loadリクエストによる場合であり、この場合、最終状態としてディレクトリキャッシュステータス202は「S」に遷移する。
【0057】
スヌープfor loadリクエストによる索引の結果、プロセッサXキャッシュステータスが「I」である場合はありえる(欄607)。これはプロセッサXが、メモリコントローラからのスヌープリクエストを受け取る前にキャッシュリプレースが発生した場合である。この場合プロセッサXはキャッシュステータスを「I」のまま更新せず、システムインタフェース108を通じてメモリコントローラ105に対してディレクトリキャッシュステータス202を「I」に更新するためのスヌープリプライIを転送する。スヌープリプライIを受け付けたメモリコントローラ105はディレクトリキャッシュステータス202を「I」に更新し、その後、保留していたメモリリードfor loadリクエストの処理を再開する。再開されたメモリリードfor loadリクエストが索引するディレクトリキャッシュステータス202は「I」となるので、後述の欄609の場合と同様、これを「E[A]」に更新し、更にプロセッサAに主記憶読み出しデータをリプライする。これを受け取ったプロセッサAのキャッシュステータスは「E」に更新され、処理を終了する。
【0058】
欄608は、メモリコントローラ105がメモリリードfor loadを受け付けたとき、ディレクトリキャッシュステータス202/キャッシングエージェント情報203が「S[X1(&X2...)]」であった場合のディレクトリキャッシュステータス202、プロセッサキャッシュステータス、システムインタフェースリクエストの動きを示すものである。欄608のときメモリコントローラ105は、プロセッサAから受け付けたメモリリードfor loadリクエストによってディレクトリキャッシュステータス202を「S[A&X1(&X2...)]」に更新し、さらにプロセッサAに主記憶読み出しデータをリプライする。スヌープリクエストは発行しない。メモリコントローラ105からの主記憶読み出しデータを受け取ったプロセッサAのキャッシュステータスは「S」に更新され、処理を終了する。
【0059】
欄609は、メモリコントローラ105がメモリリードfor loadを受け付けたとき、ディレクトリキャッシュステータス202/キャッシングエージェント情報203が「I」であった場合のディレクトリキャッシュステータス202、プロセッサキャッシュステータス、システムインタフェースリクエストの動きを示すものである。欄609の場合、メモリコントローラ105は、プロセッサAから受け付けたメモリリードfor loadリクエストによってディレクトリキャッシュステータス202を「E[A]」に更新し、さらにプロセッサAに主記憶読み出しデータをリプライする。スヌープリクエストは発行しない。メモリコントローラ105からの主記憶読み出しデータを受け取ったプロセッサAのキャッシュステータスは「E」に更新され、処理を終了する。
【0060】
メモリリードfor storeリクエストは、プロセッサ101が主記憶データにsotoreしようとしたとき、自プロセッサキャッシュ102にミス、すなわち自キャッシュステータスが「I」、「S」、「E」の、このままでは更新不可能な状態であった場合に発行されるリクエストである。
【0061】
欄610、611、612、613は、メモリコントローラ105がメモリリードfor storeリクエストを受け付けたとき、ディレクトリキャッシュステータス202/キャッシングエージェント情報203が「M[X]」であった場合のディレクトリキャッシュステータス202、プロセッサキャッシュステータス、システムインタフェースリクエストの動きを示すものである。欄610、611、612、613のときメモリコントローラ105は、プロセッサAから受け付けたメモリリードfor storeリクエストの処理を一旦保留するとともに、プロセッサXに対してスヌープfor storeリクエストを発行する。
【0062】
ここで、スヌープfor storeリクエストによる索引の結果、プロセッサXキャッシュステータスが「M」である場合(欄610)、プロセッサXキャッシュステータスは「I」に更新されるとともに、プロセッサXはシステムインタフェース108を通じてメモリコントローラ105に対して主記憶を最新状態に書き戻すためのライトバックリクエストを発行する。ライトバックリクエストを受け付けたメモリコントローラ105は、後述の欄620の場合と同様、ディレクトリキャッシュステータス202を「I」に更新し、その後、保留していたメモリリードfor storeリクエストの処理を再開する。再開されたメモリリードfor storeリクエストが索引するディレクトリキャッシュステータス202は「I」となるので、後述の欄619の場合と同様、これを「M[A]」に更新し、更にプロセッサAに主記憶読み出しデータをリプライする。これを受け取ったプロセッサAのキャッシュステータスは「M」に更新され、処理を終了する。
【0063】
スヌープfor storeリクエストによる索引の結果、プロセッサXキャッシュステータスが「E」である場合(欄611)や、「S」である場合(欄612)はありえない。これは、ディレクトリキャッシュステータス202が「M」に更新されるのは、メモリリードfor storeリクエストの場合のみであり、メモリリードfor storeリクエストを発行したプロセッサのキャッシュステータスは必ず「M」に更新されるためである。
【0064】
スヌープfor storeリクエストによる索引の結果、プロセッサXキャッシュステータスが「I」であることはありえる(613)。これはプロセッサXが、メモリコントローラ105からのスヌープリクエストを受け取る前にキャッシュリプレースが発生し、ライトバックリクエストを発行した場合である。この場合プロセッサXはキャッシュを「I」のまま更新せず、システムインタフェース108を通じてメモリコントローラ105に対してディレクトリキャッシュステータス202を「I」に更新するためのスヌープリプライIを転送する。スヌープリプライIを受け付けたメモリコントローラ105はディレクトリキャッシュステータス202を「I」に更新し、その後、保留していたメモリリードfor storeリクエストの処理を再開する。再開されたメモリリードfor storeリクエストが索引するディレクトリキャッシュステータス202は「I」となるので、後述の619同様、これを「M[A]」に更新し、更にプロセッサAに主記憶読み出しデータをリプライする。これを受け取ったプロセッサAのキャッシュステータスは「M」に更新され、処理を終了する。
【0065】
欄614、615、616は、メモリコントローラ105がメモリリードfor storeリクエストを受け付けたとき、ディレクトリキャッシュステータス202/キャッシングエージェント情報203が「E[X]」であった場合のディレクトリキャッシュステータス202、プロセッサキャッシュステータス、システムインタフェースリクエストの動きを示すものである。欄614、615、616のときメモリコントローラ105は、プロセッサAから受け付けたメモリリードfor storeリクエストの処理を一旦保留するとともに、プロセッサXに対してスヌープfor storeリクエストを発行する。
【0066】
スヌープfor storeリクエストによる索引の結果、プロセッサXキャッシュステータスが「E」である場合(欄614)、プロセッサXはキャッシュステータスを「I」に更新し、システムインタフェース108を通じてメモリコントローラ105に対してディレクトリキャッシュステータス202を「I」にするためのスヌープリプライIを転送する。スヌープリプライIを受け付けたメモリコントローラ105はディレクトリキャッシュステータス202を「I」に更新し、その後、保留していたメモリリードfor storeリクエストの処理を再開する。再開されたメモリリードfor storeリクエストが索引するディレクトリキャッシュステータス202は「I」となるので、後述の欄619の場合と同様、これを「M[A]」に更新し、更にプロセッサAに主記憶読み出しデータをリプライする。これを受け取ったプロセッサAのキャッシュステータスは「M」に更新され、処理を終了する。
【0067】
スヌープfor storeリクエストによる索引の結果、プロセッサXキャッシュステータスが「S」である場合(欄615)はありえない。これは、ディレクトリステータスが「E」に更新されるのは、メモリリードfor loadリクエストあるいは再開されたメモリリードfor loadリクエストがディレクトリキャッシュステータス202を索引し「I」であった場合のみであり、メモリリードfor storeリクエストを発行したプロセッサのキャッシュは必ず「E」に更新されるためである。そして「E」の状態から「S」の状態に遷移するのは、欄605の場合のように、必ず他プロセッサのメモリリードfor loadリクエストを要因とするスヌープfor loadリクエストによる場合であり、この場合、最終状態としてディレクトリキャッシュステータス202は「S」に遷移する。
【0068】
スヌープfor storeリクエストによる索引の結果、プロセッサXキャッシュステータスが「I」である場合(欄616)はありえる。これはプロセッサXが、メモリコントローラ105からのスヌープリクエストを受け取る前にキャッシュリプレースが発生した場合である。この場合、プロセッサXはキャッシュを「I」のまま更新せず、システムインタフェース108を通じてメモリコントローラ105に対してディレクトリキャッシュステータス202を「I」に更新するためのスヌープリプライIを転送する。スヌープリプライIを受け付けたメモリコントローラ105はディレクトリキャッシュステータス202を「I」に更新し、その後、保留していたメモリリードfor storeリクエストの処理を再開する。再開されたメモリリードfor loadリクエストが索引するディレクトリキャッシュステータス202は「I」となるので、後述の欄619の場合と同様、これを「M[A]」に更新し、更にプロセッサAに主記憶読み出しデータをリプライする。これを受け取ったプロセッサAのキャッシュステータスは「M」に更新され、処理を終了する。
【0069】
欄617、618は、メモリコントローラ105がメモリリードfor storeリクエストを受け付けたとき、ディレクトリキャッシュステータス202/キャッシングエージェント情報203が「S[X1(&X2...)]」であった場合のディレクトリキャッシュステータス202、プロセッサキャッシュステータス、システムインタフェースリクエストの動きを示すものである。欄617、618のときメモリコントローラ105は、プロセッサ「X1」を初め、複数個のプロセッサが「S」である場合にはそのすべてのプロセッサに対してスヌープfor store(S)リクエストを発行する。この場合は、プロセッサAから受け付けたメモリリードfor storeリクエストの処理を一旦保留することはせず、ディレクトリキャッシュステータス202/キャッシングエージェント情報203を「M[A]」に更新し、更にプロセッサAに主記憶読み出しデータをリプライする。これを受け取ったプロセッサAのキャッシュステータスは「M」に更新される。
【0070】
上記メモリコントローラ105の処理と並行して、スヌープfor store(S)リクエストによる索引の結果、プロセッサXキャッシュステータスが「S」であった場合(欄617)、プロセッサXキャッシュステータスは「I」に更新される。この場合、プロセッサXはスヌープリプライを転送せず、処理を終了する。
【0071】
上記メモリコントローラ105の処理と並行して、スヌープfor store(S)リクエストによる索引の結果、プロセッサXキャッシュステータスが「I」であった場合(欄618)、プロセッサXキャッシュステータスは「I」のまま更新されない。この場合、プロセッサXはスヌープリプライを転送せず、処理を終了する。
【0072】
欄619は、メモリコントローラ105がメモリリードfor storeを受け付けたとき、ディレクトリキャッシュステータス202/キャッシングエージェント情報203が「I」であった場合のディレクトリキャッシュステータス202、プロセッサキャッシュステータス、システムインタフェースリクエストの動きを示すものである。欄619のときメモリコントローラ105は、プロセッサAから受け付けたメモリリードfor storeリクエストによってディレクトリキャッシュステータス202を「M[A]」に更新し、さらにプロセッサAに主記憶読み出しデータをリプライする。スヌープリクエストは発行しない。メモリコントローラ105からの主記憶読み出しデータを受け取ったプロセッサAのキャッシュステータスは「M」に更新され、処理を終了する。
【0073】
ライトバックリクエストは、プロセッサが新たなデータをキャッシングしようとするたキャッシュに空きがない場合、あるアルゴリズムに従って、キャッシュ内に「M」で格納されているデータを主記憶に書き戻す際に発行されるリクエストである。
【0074】
欄620は、メモリコントローラ105がライトバックリクエストを受け付けたときのディレクトリキャッシュステータス202、プロセッサキャッシュステータス、システムインタフェースリクエストの動きを示すものである。このときディレクトリキャッシュステータス202/キャッシングエージェント情報203は必ず「M[A]」であるので、ディレクトリを索引する必要はなく、直接ディレクトリキャッシュステータス202を「I」に更新し、ライトバックリクエストに付与されるデータを主記憶装置107へ書き戻し処理を終了する。
【0075】
図3〜図7は、本発明のマルチプロセッサシステムにおけるメモリコントローラ内のディレクトリ制御部の構成を示すブロック図である。図3はディレクトリ制御部400の全体図であり、図4〜図7はその一部の詳細図である。
【0076】
図4を参照して、プロセッサ間インタフェース300aは、プロセッサ間インタフェース入力部301、コマンドデコーダ302、リードリクエストバッファ303、ライトバックリクエストバッファ304を備える。
【0077】
プロセッサ間インタフェース入力部301は、プロセッサ101とメモリコントローラ105とを接続するインタフェースである。プロセッサ間インタフェース入力部301は、プロセッサ101からのメモリアクセスリクエスト、及びメモリコントローラ105から各プロセッサ101に発行したキャッシュスヌープリクエストに対するリプライを受け付ける。コマンドデコーダ302は、プロセッサ間インタフェース300aで受信されたリクエスト、リプライを判別し、リードリクエストバッファ303とライトバックリクエストバッファ304に振り分けるデコーダである。リードリクエストバッファ303は、プロセッサ101からのメモリアクセスリクエストのうち、主記憶リードリクエストを格納するバッファである。ライトバックリクエストバッファ304は、プロセッサ101からのメモリアクセスリクエストのうち、プロセッサ101のキャッシュデータを主記憶装置107に書き戻すライトバックリクエストと、メモリコントローラ105が発行したキャッシュスヌープリクエストに対するスヌープリプライを格納するバッファである。
【0078】
図3を参照して、調停回路305は、リードリクエストバッファ303で受信したリクエストやリプライ、ライトバックリクエストバッファ304で受信したリクエストやリプライ、ディレクトリ索引後のディレクトリ更新リクエスト(後述)、及び、ディレクトリ固定障害検出のためのディレクトリチェックリクエスト(後述)の中から、ディレクトリ制御部400で処理するリクエスト、リプライをひとつ選択する。
【0079】
コマンド/アドレスレジスタ307は、調停回路305で選択したリードリクエスト、ライトバックリクエスト、リプライのコマンド情報、アドレス情報を保持するためのレジスタである。このレジスタの情報は、ディレクトリ索引、更新、主記憶リード、更新の各々において使用される。
【0080】
データ生成回路306は、調停回路305で選択したライトバックリクエスト、スヌープリプライ、ディレクトリ索引後のディレクトリ更新リクエスト(後述)によってディレクトリを更新する際に、ディレクトリ書き込みデータを生成する。ディレクトリ書き込みデータレジスタ308は、生成されたディレクトリ書き込みデータを保持する。
【0081】
主記憶書き込みデータレジスタ328は、ライトバックリクエストデータ、すなわち主記憶更新データを保持するである。
【0082】
ディレクトリ309は、プロセッサキャッシュ間コヒーレンシを保証するための情報を保持するディレクトリである。その内部情報は、図2で示したとおりである。すなわち、ディレクトリ309は、ディレクトリ201であり、ディレクトリ106である。障害検出回路310は、ディレクトリ309から読み出したデータのECCチェックを行い、訂正可能障害検出時にはデータ訂正を行い、訂正不可能障害時にはこれをディレクトリ更新/プロセッサキャッシュスヌープリクエスト生成部311および訂正不可能障害処理部322へ通知する。
【0083】
ディレクトリ更新/プロセッサキャッシュスヌープリクエスト生成部311は、プロセッサ101からのリードリクエストによってディレクトリ309を索引した結果、いずれかのプロセッサキャッシュ102にデータが存在することが判明した場合、図10A及び図10Bに従い、ディレクトリ更新リクエストを生成し信号線321により調停回路305にディレクトリ索引後のディレクトリ更新リクエストを発行したり、信号線323によりプロセッサキャッシュスヌープリクエストバッファ315にキャッシュスヌープリクエストを発行したりする。特に本発明では、障害検出回路310でディレクトリ309の訂正不可能障害を検出した場合にもプロセッサキャッシュスヌープリクエスト生成を行う。
【0084】
セレクタ312は、ディレクトリ309情報を使用するか、ディレクトリ固定障害処理部327情報を使用するかを選択する回路である。
【0085】
主記憶制御部313は、プロセッサ101からのメモリアクセスリクエスト種別およびディレクトリ索引結果により主記憶アクセスを制御する。主記憶装置314は主記憶装置107である。
【0086】
図5を参照して、プロセッサ間インタフェース300bは、プロセッサキャッシュスヌープリクエストバッファ315、リプライデータバッファ316、調停回路317、プロセッサ間インタフェース出力部318を備える。
【0087】
プロセッサキャッシュスヌープリクエストバッファ315は、ディレクトリ更新/プロセッサキャッシュスヌープリクエスト生成部311で生成されたプロセッサキャッシュスヌープリクエストを格納し、プロセッサ間システムインタフェース出力部318に転送するためのバッファである。リプライデータバッファ316は、プロセッサ101からのメモリリードリクエストに対してプロセッサ101に返却するディレクトリ索引情報、主記憶データリプライを格納し、プロセッサ間システムインタフェース出力部318に転送する。調停回路317は、プロセッサキャッシュスヌープリクエストバッファ315とリプライデータバッファ316内のリクエスト、リプライのうち、プロセッサ間インタフェース出力部318に転送するリクエスト、リプライを選択する。プロセッサ間インタフェース出力部318は、プロセッサ101とメモリコントローラ105とを接続するシステムインタフェース108に調停回路317で選択したリクエスト、リプライを出力するための回路である。
【0088】
図6を参照して、訂正不可能障害処理部322は、レジスタ319、カウンタレジスタ320を備える。
【0089】
レジスタ319は、障害検出回路310でディレクトリ309データの訂正不可能障害を検出した際に点灯し、本発明のためのディレクトリ訂正不可能障害救済処理中であることを示す。カウンタレジスタ320は、障害検出回路310でディレクトリ309データの訂正不可能障害を検出した際に、本発明のマルチプロセッサシステム内に存在するプロセッサキャッシュ個数を格納する。本発明において訂正不可能障害検出時に、ディレクトリ更新/プロセッサキャッシュスヌープリクエスト生成部311で生成され全プロセッサに転送するプロセッサキャッシュスヌープリクエストに対するスヌープリプライを調停回路305で受け取るたびに1減算するカウンタレジスタである。このカウンタレジスタ値が0でない場合、本発明の障害救済処理のためのスヌープリプライ待ち合わせ状態であることを示す。
【0090】
図7を参照して、ディレクトリ固定障害処理部327は、レジスタ324、固定障害エントリ情報レジスタ325、固定障害ディレクトリ情報レジスタ326を備える。
【0091】
レジスタ324は、訂正不可能障害処理部322で全スヌープリプライ受付後に行う、ディレクトリ固定障害確認リクエストによるディレクトリ索引で、訂正不可能障害が検出された場合に点灯する。このレジスタが「1」の場合、訂正不可能障害が検出されたディレクトリ309のエントリ情報は今後無視され、固定障害ディレクトリ情報レジスタ326(後述)の値が使用されることを示す。固定障害エントリ情報レジスタ325は、上記固定障害が検出されたディレクトリ309のエントリ情報を保持する。コマンド/アドレスレジスタ307にメモリアクセスリクエスト、スヌープリプライが存在し、レジスタ324が「1」でかつコマンドアドレスレジスタ307のアドレス情報が固定障害エントリレジスタ情報と一致する場合、ディレクトリ情報としてディレクトリ309データではなく、固定障害ディレクトリ情報レジスタ326データ(後述)が使用される。固定障害ディレクトリ情報レジスタ326は、上記固定障害が検出されたディレクトリ309エントリに対応するディレクトリ情報を保持する。
【0092】
次に、本発明のマルチプロセッサシステムの実施の形態の動作について説明する。図11は、本発明のマルチプロセッサシステムの実施の形態の動作を示すフローチャートである。
【0093】
メモリコントローラ105は、プロセッサ間インタフェース入力部301からメモリリードリクエストを受け付けた場合、コマンドデコーダ302でこのメモリリードリクエストをデコードする。その後、リードリクエストバッファ303にリードリクエストを格納する(S01)。
【0094】
調停回路305は、このリードリクエストを選択し、コマンド/アドレスレジスタ307に格納する。その後、ディレクトリ309から、リクエストアドレスに該当するエントリ情報を読み出す(S02)。ここで、エントリ情報は、リクエストアドレスに対応する図2に示すエントリ番号のプロセスキャッシング情報(キャッシュステータス202、キャッシングエージェント情報203、ECC204)である。
【0095】
障害検出回路10は、エントリ情報が正常か否かを、例えばECC204により検査する(S03)。そして、ディレクトリ309からの読み出しデータに障害がない場合(S03:Yes)、読み出しデータをディレクトリ更新/プロセッサキャッシュスヌープリクエスト生成部311に送る。ディレクトリ更新/プロセッサキャッシュスヌープリクエスト生成部311は、エントリ情報に基づいて、図10A及び図10Bに従い、信号線321を介してディレクトリ索引後のディレクトリ更新リクエストを調停回路305へ発行する。それにより、データ生成回路306及びディレクトリ書き込みデータレジスタ308を介して、ディレクトリ309が適切に更新される(S04)。
【0096】
また、コマンド/アドレスレジスタ307からのリードリクエストに基づいて、主記憶制御部313は、主記憶装置314のデータを読み出し、プロセッサ間インターフェース部300bへ出力する。プロセッサ間インタフェース出力部318は、リプライデータバッファ316及び調停回路317を介して受信した主記憶データを、メモリリードリクエストを発行したプロセッサ101へ転送する(S05)。
【0097】
ディレクトリ309からの読み出しデータに障害がある場合(S03:No)、特に障害検出回路310で訂正不可能を検出した場合、従来は、その時点でプロセッサキャッシュコヒーレンシ保証が不可能となるためシステム停止としていた。
【0098】
本発明では、そのような場合でも、以下のようにして対応可能である。すなわち、ディレクトリ309からの読み出しデータについて障害検出回路310で訂正不可能障害を検出した場合(S03:No)、ディレクトリ更新/プロセッサキャッシュスヌープリクエスト生成部311は、図10A及び図10B中のコマンド(「fromメモリコントローラtoプロセッサX」欄)にあるスヌープリクエストfor storeを発行する(S06)。マルチプロセッサシステム内全プロセッサに対し該当エントリ情報の無効化を指示するためである。これにより、後述されるように、全プロセッサキャッシュ102のプロセッサXキャッシュステータスが「I」に更新されると共に、プロセッサXキャッシュステータスが「M」のプロセッサ101が存在する場合、そのデータがライトバックリクエストによって主記憶装置314へ書き戻される。
【0099】
また、これと並行して本発明のディレクトリ障害救済処理中であることを示すレジスタ319を“1”に設定し、カウンタレジスタ320に、本発明のマルチプロセッサシステム内の全プロセッサキャッシュ個数の値、すなわち上記スヌープリクエストfor storeを発行した個数と同じ値を設定する(S07)。そしてこのカウンタレジスタ320の値が0でない間は、これを調停回路305に通知し、リードリクエストバッファ303を選択することを停止する。これは、後続のリードリクエストバッファ303内リクエストを選択し、そのリクエストでも訂正不可能障害が検出されることにより本発明の障害処理が複雑化することを避けるためである。
【0100】
ディレクトリ更新/プロセッサキャッシュスヌープリクエスト生成部311で生成されたスヌープリクエストfor storeは、プロセッサキャッシュスヌープリクエストバッファ315、調停回路317、プロセッサ間インタフェース出力部318を介して全プロセッサ101に発行される。
【0101】
上記のスヌープリクエストfor storeを受け取った各プロセッサ101は、図10A及び図10B中の通常のスヌープリクエストfor storeを受け取った場合と同じ動き(スヌープリプライ)を行う。すなわち、プロセッサXキャッシュステータスが「M」のプロセッサは、欄610の場合と同様、キャッシュステータスを「I」に更新し、スヌープリプライとして主記憶データ書き戻しのためのライトバックリクエストを発行する。プロセッサキャッシュステータスが「E」、「S」のプロセッサは、それぞれ欄614、617の場合と同様、キャッシュステータスを「I」に更新し、スヌープリプライとしてスヌープリプライIを発行する。プロセッサキャッシュステータスが「I」のプロセッサは、欄613の場合と同様、キャッシュステータスは「I」のまま更新を行わず、スヌープリプライとしてスヌープリプライIを発行する。
【0102】
このように全てのプロセッサが必ずライトバックリクエストまたはスヌープリプライIを発行するため、どのような場合でも本発明の訂正不可能障害救済処理完了後のディレクトリ309のステータスは「I」であると言える。そして、そのステータスが示すとおり主記憶装置314のデータがシステム内で唯一の最新データであることも保証できる。
【0103】
プロセッサ間インターフェース入力部301は、上記ライトバックリクエスト、スヌープリプライIを受け取る(S08)。ライトバックリクエストバッファ304は、上記ライトバックリクエスト、スヌープリプライIを格納する。
【0104】
プロセッサキャッシュ102が「M」であった場合、プロセッサ101は欄601に従ってライトバックリクエストを生成する。そのライトバックリクエストは、ライトバックリクエストバッファ304に格納される。調停回路305は、そのライトバックリクエストのうち、コマンド/アドレスをコマンド/アドレスレジスタ307へ格納し、データをディレクトリ書き込みデータレジスタ308に格納する。ディレクトリ309は、そのコマンド/アドレスに基づいて、ステータス情報を「I」とし、エージェント情報を、どのプロセッサキャッシュ102もキャッシングしていないことを示す「All_0」とする(S09)。また、調停回路305は、そのライトバックリクエストを主記憶書込データレジスタ328に格納する。主記憶制御部313は、そのライトバックリクエストに基づいて、主記憶装置314にライトバックデータを書き込む。
【0105】
プロセッサキャッシュ102が「M以外」であった場合、プロセッサ101は欄604に従ってスヌープリプライIを生成する。そのスヌープリプライIは、ライトバックリクエストバッファ304に格納される。調停回路305は、そのスヌープリプライIのうち、コマンド/アドレスをコマンド/アドレスレジスタ307へ格納する。ディレクトリ309は、そのコマンド/アドレスに基づいて、ステータス情報を「I」とし、エージェント情報を、どのプロセッサキャッシュ102もキャッシングしていないことを示す「All_0」とする(S09)。
【0106】
マルチプロセッサシステム内のプロセッサの個数により、上記のディレクトリ更新は複数回行われる。しかし、どれも同じ情報を書き込むので特に問題ない。また、「M」のキャッシュはシステム内に最高1つなので、主記憶への書き込みは0回あるいはただ1回のみ行われる。
【0107】
上記ライトバックリクエスト、スヌープリプライIが調停回路305を通過するたびに調停回路305は、訂正不可能障害処理部322にこの旨を通知し、訂正不可能障害処理部322内のカウンタレジスタ320はそのたびに1ずつ減算を実施する。
【0108】
このようにして全プロセッサに発行した本発明のためのスヌープリクエストfor sotreに対するライトバックリクエストまたはスヌープリプライIを全て受け付けると、本発明の障害処理中であることを示すレジスタ319は“1”、カウンタレジスタ320は「All_0」、ディレクトリ309の障害エントリのディレクトリキャッシュステータス202は「I」、キャッシングエージェント情報203は「All_0」、主記憶314のディレクトリ309障害検出エントリに対応するアドレスのデータはシステム内で唯一最新、という状態となる。
【0109】
ディレクトリ309の障害が間欠障害である場合、ここまででマルチプロセッサシステム内唯一の最新データのある場所と、ディレクトリ情報とが一致している、マルチプロセッサシステムとしてプロセッサキャッシュ間コヒーレンシ制御可能な状態に復帰した、と言える。
【0110】
本発明は、更にディレクトリ309の障害が固定障害である場合にも備えている。
【0111】
上記のとおり障害状態からの復旧が完了したならば、すなわち、本発明の障害処理中であることを示すレジスタ319は「1」、カウンタレジスタ320は「All_0」の状態となったならば、本発明の訂正不可能障害救済処理に移入する原因となったディレクトリ309の障害が間欠障害か、固定障害かを確認する(S10)。そのために、信号線329により調停回路305にディレクトリ固定障害検出のためのディレクトリチェックリクエストを兼ねてプロセッサ101からのリクエストを再実行しリクエストを発行する。このリクエストは通常のリードリクエストと同様に動作し、すなわち、ディレクトリ309にて先に障害を検出したエントリデータを読み出す。また、通常のリードリクエストと同様に主記憶装置314のデータも読み出す。
【0112】
ここで、障害検出回路310で障害を検出しなかった場合、間欠障害であったと判断する(S10:No)。その場合、通常のリードリクエスト同様に主記憶装置314から読み出したデータをリクエスト発行元のプロセッサへ返却し、本発明の訂正不可能障害救済処理を全て完了する。
【0113】
障害検出回路310で障害を検出した場合、固定障害であると判断する(S10:Yes)。その場合、障害検出回路310は、ディレクトリ固定障害処理部327のレジスタ324が“1”であるか否かを判定する(S11)。すなわち、ディレクトリ309の別のエントリの固定障害で既にディレクトリ固定障害処理部327が未使用か否かを判定する。
【0114】
ディレクトリ固定障害処理部327のレジスタ324が“1”(使用中)の場合(S11:No)、すなわちディレクトリ309の別のエントリの固定障害で既にディレクトリ固定障害処理部327が使用されていた場合、救済不可能障害となり、システムを停止する(S12)。
【0115】
ディレクトリ固定障害処理部327のレジスタ324が“0”(未使用)の場合(S11:Yes)、障害検出回路310は、ディレクトリ固定障害処理部327のレジスタ324を“1”に設定し、コマンド/アドレスレジスタ307のアドレス情報を固定障害エントリ情報レジスタ325に設定し、対応するデータは主記憶装置314のみに存在することを示す情報、すなわちディレクトリキャッシュステータス202「I」、キャッシングエージェント情報203「All_0」を固定障害ディレクトリ情報レジスタ326に設定する(S13)。
【0116】
ディレクトリ固定障害処理部327が有効、すなわちレジスタ324を“1”に設定後、固定障害エントリ情報325と同じアドレスのメモリアクセスリクエストをコマンド/アドレスレジスタ307に受け付けた場合、ディレクトリ索引指示に対してはセレクタ312をディレクトリ障害処理部327側に切り替え、ディレクトリ309データではなく、固定障害ディレクトリ情報レジスタ326のデータを使用する。また、ディレクトリ更新指示に対しては固定障害ディレクトリ情報レジスタ326の値を更新する。そして通常のリードリクエスト同様に主記憶装置314から読み出したデータをリクエスト発行元のプロセッサへ返却し、処理を終了する。
【0117】
こうすることで、ディレクト309に固定障害が発生した場合でも、外部に用意したレジスタをあたかもディレクトリ309の1エントリのように使用することで、システムの継続運用を可能に出来る。
【0118】
ディレクトリで訂正不可能障害を検出した場合には、システム内全プロセッサにキャッシュ無効化指示を発行することにより主記憶内データを最新にし、ディレクトリキャッシュステータス202を必ず「I」とすることでディレクトリキャッシュステータス202とシステム内唯一の最新データのありかを一致させ、訂正不可能障害から継続動作可能状態に復帰する。またディレクトリ障害が固定障害であった場合は、ディレクトリの固定障害エントリをディレクトリとは別に用意するレジスタで代替することにより可用性を高めることが出来る
【0119】
本発明は上記各実施の形態に限定されず、本発明の技術思想の範囲内において、各実施例は適宜変形又は変更され得ることは明らかである。
【図面の簡単な説明】
【0120】
【図1】図1は、本発明のマルチプロセッサシステムの実施の形態の構成の一例を示すブロック図である。
【図2】図2は、本発明のマルチプロセッサシステムにおけるディレクトリの構成を示す概略図である。
【図3】図3は、本発明のマルチプロセッサシステムにおけるメモリコントローラ内のディレクトリ制御部の全体の構成を示すブロック図である。
【図4】図4は、本発明のマルチプロセッサシステムにおけるメモリコントローラ内のディレクトリ制御部の一部の構成を示すブロック図である。
【図5】図5は、本発明のマルチプロセッサシステムにおけるメモリコントローラ内のディレクトリ制御部の一部の構成を示すブロック図である。
【図6】図6は、本発明のマルチプロセッサシステムにおけるメモリコントローラ内のディレクトリ制御部の一部の構成を示すブロック図である。
【図7】図7は、本発明のマルチプロセッサシステムにおけるメモリコントローラ内のディレクトリ制御部の構成を示すブロック図である。
【図8】図8は、MESIプロトコルを説明する表である。
【図9】図9は、キャッシングエージェント情報を説明する表である。
【図10A】図10Aは、システムインタフェースで使用するリクエストと、そのリクエストによるプロセッサキャッシュステータス遷移、ディレクトリ内キャッシュステータス遷移を示す表である。
【図10B】図10Bは、システムインタフェースで使用するリクエストと、そのリクエストによるプロセッサキャッシュステータス遷移、ディレクトリ内キャッシュステータス遷移を示す表である。
【図11】図11は、本発明のマルチプロセッサシステムの実施の形態の動作を示すフローチャートである。
【符号の説明】
【0121】
101(101−i:i=1〜mの自然数、以下同じ) プロセッサ
105 メモリコントローラ
106、201 ディレクトリ
107 主記憶装置
108(108−i) システムインタフェース
202 キャッシュステータス
203 キャッシングエージェント情報
204 ECC
300a、 プロセッサ間インタフェース
300b プロセッサ間インタフェース
301 プロセッサ間インタフェース入力部
302 コマンドデコーダ
303 リードリクエストバッファ
304 ライトバックリクエストバッファ
305 調停回路
306 データ生成回路
307 コマンド/アドレスレジスタ
308 ディレクトリ書き込みデータレジスタ
309 ディレクトリ
310 障害検出回路
311 ディレクトリ更新/プロセッサキャッシュスヌープリクエスト生成部
312 セレクタ
313 主記憶制御部
314 主記憶装置
315 プロセッサキャッシュスヌープリクエストバッファ
316 リプライデータバッファ
317 調停回路
318 プロセッサ間システムインタフェース出力部
319 レジスタ
320 カウンタレジスタ
321、323、329 信号線
322 訂正不可能障害処理部
324 レジスタ
325 固定障害エントリ情報レジスタ
326 固定障害ディレクトリ情報レジスタ
327 ディレクトリ固定障害処理部
328 主記憶書き込みデータレジスタ
400 ディレクトリ制御部
401 「M」
402 「E」
403 「S」
404 「I」
501 「0」
502 「1」
503 「2」
504 「3」
601〜620 欄

【特許請求の範囲】
【請求項1】
主記憶装置と、
プロセッサキャッシュを有する複数のプロセッサと、
前記複数のプロセッサの各々から前記主記憶装置へのアクセスを制御し、プロセッサキャッシュ間のコヒーレンシを保証するメモリコントローラと、
前記主記憶装置のアドレス情報毎のキャッシュ制御状態を示すエントリ情報を格納するディレクトリと
を具備し、
前記メモリコントローラは、
前記ディレクトリから読み出した第1アドレス情報に対応する第1エントリ情報に異常が有る場合、前記第1エントリ情報を無効化する指示を前記複数のプロセッサへ出力し、
前記複数のプロセッサの各々は、
前記プロセッサキャッシュの前記第1エントリ情報を無効化し、
前記第1アドレス情報で特定されるデータの最新のものが前記主記憶装置にあることを示す返信を前記メモリコントローラへ出力する
マルチプロセッサシステム。
【請求項2】
請求項1に記載のマルチプロセッサシステムにおいて、
前記メモリコントローラは、
前記複数のプロセッサからの前記返信の有無を確認する障害処理部と、
前記複数のプロセッサの全てから前記返信を受信したことを前記障害処理部が確認するまで、読み出し要求を受け付けない調停部と
を備える
マルチプロセッサシステム。
【請求項3】
請求項1又は2に記載のマルチプロセッサシステムにおいて、
前記プロセッサは、自身の前記プロセッサキャッシュに前記第1アドレス情報で特定されるデータとして最新データを有している場合、前記最新データを前記メモリコントローラへ出力し、
前記メモリコントローラは、前記主記憶装置の前記第1アドレス情報において前記最新データに上書きする主記憶制御部を備える
マルチプロセッサシステム。
【請求項4】
請求項1乃至3のいずれか一項に記載のマルチプロセッサシステムにおいて、
前記メモリコントローラは、
前記ディレクトリから再度読み出した前記第1アドレス情報に対応する第2エントリ情報に異常が有る場合、前記第1アドレス情報に対応する前記エントリ情報を格納する固定障害処理部を備え、
前記ディレクトリに対する前記第1アドレス情報に対応するデータへの読み出し要求を受けたとき、前記固定障害処理部は、前記第1アドレス情報に対応する前記エントリ情報を、前記ディレクトリに替わって出力する
マルチプロセッサシステム。
【請求項5】
接続される主記憶装置のアドレス情報毎のキャッシュ制御状態を示すエントリ情報を格納するディレクトリから読み出した第1アドレス情報に対応する第1エントリ情報に異常が有るか否かを検出する異常検出部と、
前記異常の検出に基づいて、前記第1エントリ情報を無効化する指示を複数のプロセッサへ出力するリクエスト部と
を具備する
メモリコントローラ。
【請求項6】
請求項5に記載のメモリコントローラにおいて、
接続される複数のプロセッサからの第1アドレス情報で特定されるデータの最新のものが前記主記憶装置にあることを示す返信の有無を確認する障害処理部と、
前記複数のプロセッサの全てから前記返信を受信したことを前記障害処理部が確認するまで、読み出し要求を受け付けない調停部と
を更に具備する
メモリコントローラ。
【請求項7】
請求項5又は6に記載のメモリコントローラにおいて、
前記プロセッサは、自身の前記プロセッサキャッシュに前記第1アドレス情報で特定されるデータとして最新データを有している場合、前記最新データを前記メモリコントローラへ出力し、
前記主記憶装置の前記第1アドレス情報において前記最新データに上書きする主記憶制御部を更に具備する
メモリコントローラ。
【請求項8】
請求項5乃至7のいずれか一項に記載のメモリコントローラにおいて、
前記ディレクトリから再度読み出した前記第1アドレス情報に対応する第2エントリ情報に異常が有る場合、前記第1アドレス情報に対応する前記エントリ情報を格納する固定障害処理部を更に具備し、
前記ディレクトリに対する前記第1アドレス情報に対応するデータへの読み出し要求を受けたとき、前記固定障害処理部は、前記第1アドレス情報に対応する前記エントリ情報を、前記ディレクトリに替わって出力する
メモリコントローラ。
【請求項9】
マルチプロセッサシステムの動作方法であって、
ここで、マルチプロセッサシステムは、
主記憶装置と、
プロセッサキャッシュを有する複数のプロセッサと、
前記複数のプロセッサの各々から前記主記憶装置へのアクセスを制御し、プロセッサキャッシュ間のコヒーレンシを保証するメモリコントローラと、
前記主記憶装置のアドレス情報毎のキャッシュ制御状態を示すエントリ情報を格納するディレクトリと
を具備し、
前記マルチプロセッサシステムの動作方法は、
(a)前記メモリコントローラが、前記ディレクトリから読み出した第1アドレス情報に対応する第1エントリ情報に異常が有る場合、前記第1エントリ情報を無効化する指示を前記複数のプロセッサへ出力するステップと、
(b)前記複数のプロセッサの各々が、前記プロセッサキャッシュの前記第1エントリ情報を無効化するステップと、
(c)前記複数のプロセッサの各々が、前記第1アドレス情報で特定されるデータの最新のものが前記主記憶装置にあることを示す返信を前記メモリコントローラへ出力するステップと
を具備する
マルチプロセッサシステムの動作方法。
【請求項10】
請求項9に記載のマルチプロセッサシステムの動作方法において、
前記メモリコントローラは、障害処理部と調停部とを備え、
前記マルチプロセッサシステムの動作方法は、
(d)前記調停部が、前記複数のプロセッサの全てから前記返信を受信したことを前記障害処理部が確認するまで、読み出し要求を受け付けないステップを更に具備する
マルチプロセッサシステムの動作方法。
【請求項11】
請求項9又は10に記載のマルチプロセッサシステムの動作方法において、
前記メモリコントローラは、主記憶制御部を備え、
前記マルチプロセッサシステムの動作方法は、
(e)前記プロセッサが、自身の前記プロセッサキャッシュに前記第1アドレス情報で特定されるデータとして最新データを有している場合、前記最新データを前記メモリコントローラへ出力するステップと、
(f)前記主記憶制御部が、前記主記憶装置の前記第1アドレス情報において前記最新データに上書きするステップと
を更に具備する
マルチプロセッサシステムの動作方法。
【請求項12】
請求項9乃至11のいずれか一項に記載のマルチプロセッサシステムの動作方法において、
前記メモリコントローラは、固定障害処理部を備え、
前記マルチプロセッサシステムの動作方法は、
(g)前記固定障害処理部が、前記ディレクトリから再度読み出した前記第1アドレス情報に対応する第2エントリ情報に異常が有る場合、前記第1アドレス情報に対応する前記エントリ情報を格納するステップと、
(h)前記メモリコントローラが、前記ディレクトリに対する前記第1アドレス情報に対応するデータへの読み出し要求を受けたとき、前記固定障害処理部が、前記第1アドレス情報に対応する前記エントリ情報を、前記ディレクトリに替わって出力するステップを更に具備する
マルチプロセッサシステムの動作方法。
【請求項13】
マルチプロセッサシステムの動作方法を実行するプログラムであって、
ここで、マルチプロセッサシステムは、
主記憶装置と、
プロセッサキャッシュを有する複数のプロセッサと、
前記複数のプロセッサの各々から前記主記憶装置へのアクセスを制御し、プロセッサキャッシュ間のコヒーレンシを保証するメモリコントローラと、
前記主記憶装置のアドレス情報毎のキャッシュ制御状態を示すエントリ情報を格納するディレクトリと
を具備し、
前記プログラムは、
(a)前記メモリコントローラが、前記ディレクトリから読み出した第1アドレス情報に対応する第1エントリ情報に異常が有る場合、前記第1エントリ情報を無効化する指示を前記複数のプロセッサへ出力するステップと、
(b)前記複数のプロセッサの各々が前記プロセッサキャッシュの前記第1エントリ情報を無効化し、前記第1アドレス情報で特定されるデータの最新のものが前記主記憶装置にあることを示す返信を出力したとき、前記メモリコントローラが、前記返信を受信するステップと
を具備する
マルチプロセッサシステムの動作方法を実行するためのプログラム。
【請求項14】
請求項13に記載のプログラムにおいて、
前記メモリコントローラは、障害処理部と調停部とを備え、
前記プログラムは、
(c)前記調停部が、前記複数のプロセッサの全てから前記返信を受信したことを前記障害処理部が確認するまで、読み出し要求を受け付けないステップを更に具備する
プログラム。
【請求項15】
請求項13又は14に記載のプログラムにおいて、
前記メモリコントローラは、主記憶制御部を備え、
前記プログラムは、
(d)前記主記憶制御部が、前記プロセッサが自身の前記プロセッサキャッシュに前記第1アドレス情報で特定されるデータとして最新データを有している場合に前記メモリコントローラへ出力した前記最新データを、前記主記憶装置の前記第1アドレス情報において前記最新データに上書きするステップと
を更に具備する
プログラム。
【請求項16】
請求項13乃至15のいずれか一項に記載のプログラムにおいて、
前記メモリコントローラは、固定障害処理部を備え、
前記プログラムは、
(e)前記固定障害処理部が、前記ディレクトリから再度読み出した前記第1アドレス情報に対応する第2エントリ情報に異常が有る場合、前記第1アドレス情報に対応する前記エントリ情報を格納するステップと、
(f)前記メモリコントローラが、前記メモリコントローラが、前記ディレクトリに対する前記第1アドレス情報に対応するデータへの読み出し要求を受けたとき、前記固定障害処理部が、前記第1アドレス情報に対応する前記エントリ情報を、前記ディレクトリに替わって出力するステップを更に具備する
プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10A】
image rotate

【図10B】
image rotate

【図11】
image rotate