(57)【特許請求の範囲】
【請求項１】
少なくとも２台のプロセッサと、各プロセッサの参照する記憶領域を正側と副側に２重化した構成の少なくとも２台の記憶装置とを具備し、各記憶装置はデータを格納する記憶手段と各プロセッサからのリクエストを受けて該記憶手段を制御するリクエスト制御手段とを有する情報処理装置であって、
正側の記憶領域と副側の記憶領域を、所定アドレス単位に互いに異なる記憶装置に割り当てて構成し、
各プロセッサが発行する読み出しリクエストは正側の記憶領域が割り当てられた記憶装置に送り、各プロセッサが発行する書き込みリクエストは正側の記憶領域が割り当てられた記憶装置（以下、正側の記憶装置と呼ぶ）と副側の記憶領域が割り当てられた記憶装置（以下、副側の記憶装置と呼ぶ）の両方に送るプロセッサ対応のリクエスト送出手段を備え、
各記憶装置のリクエスト制御手段は、各プロセッサからのリクエストを格納するリクエストキューと、該リクエストキューから読み出しリクエスト又は正側記憶領域に対する書き込みリクエストを切り出して当該記憶手段に送ると共に、該リクエストが正側記憶領域に対する書き込みリクエストである場合には副側の記憶装置のリクエスト制御手段に切り出し信号を伝達し、他からの切り出し信号に応答して前記リクエストキューから副側記憶領域に対する書き込みリクエストを切り出して当該記憶手段に送るリクエスト切り出し手段とを有することを特徴とする情報処理装置。
【請求項２】
請求項１記載の情報処理装置において、
各プロセッサ対応のリクエスト送出手段は、正側の記憶装置へのリクエストには正識別子を付し、副側の記憶装置へのリクエストには副識別子を付し、
各記憶装置のリクエスト制御手段のリクエスト切り出し手段は、前記リクエストキューから正識別子が付された書き込みリクエストを切り出したとき、切り出し信号を副側の記憶装置のリクエスト制御手段へ伝達し、他からの切り出し信号に応答して前記リクエストキューから副識別子が付された書き込みリクエストを切り出すことを特徴とする情報処理装置。
【請求項３】
請求項２記載の情報処理装置において、
各プロセッサ対応のリクエスト送出手段は、記憶装置に送るリクエストに当該プロセッサのプロセッサＩＤを付し、
各記憶装置のリクエスト制御手段のリクエスト切り出し手段は、正識別子が付された書き込みリクエストを切り出したとき、当該リクエストに付されたプロセッサＩＤを含んだ切り出し信号を副側の記憶装置のリクエスト制御手段へ伝達し、他からのプロセッサＩＤを含んだ切り出し信号に応答して前記リクエストキューから当該プロセッサＩＤおよび副識別子が付された書き込みリクエストを切り出すことを特徴とする情報処理装置。
【請求項４】
請求項１乃至３のいずれか１項に記載の情報処理装置において、記憶装置が内部にキャッシュメモリを有し、
各記憶装置のリクエスト制御手段は、あるリクエストのキャッシュミス処理中に、該キャッシュミスを起こしたリクエストのアドレスと他のリクエストのアドレスを比較するアドレス比較手段を有し、アドレスが一致する場合にはリクエスト切り出し手段での他のリクエストの切り出しを抑止することを特徴とする情報処理装置。
【請求項５】
請求項４記載の情報処理装置において、
正側の記憶装置にて書き込みリクエストがキャッシュミスとなり、さらに副側の記憶装置においてもキャッシュミスとなった場合に、これら２つのキャッシュミス処理を並行に処理することを特徴とする情報処理装置。
【請求項６】
請求項１乃至５のいずれか１項に記載の情報処理装置において、
各プロセッサ内部に記憶領域の写しを保持するキャッシュメモリを有し、
正側の記憶領域が割り当てられた記憶装置が、正側記憶領域に対する書き込みリクエストを処理時、該リクエストを発行したプロセッサ以外のプロセッサに無効化リクエストを送ることを特徴とする情報処理装置。
【請求項７】
請求項１乃至６のいずれか１項に記載の情報処理装置において、
各プロセッサ対応のリクエスト送出手段は、リクエストの種類、参照アドレスに応じて、リクエスト送り先の記憶装置を決定することを特徴とする情報処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、記憶装置を２重化した情報処理装置に関し、詳しくは、２重化された記憶装置間の処理量の均等化や内容の同一化などに好適な情報処理装置に関する。
【０００２】
【従来の技術】
従来、２重化した記憶装置間の内容の同一化技術の例としては特開平６−２５９３３６号公報がある。ここには、正側と副側とに２重化された拡張記憶装置の間で内容を同一に保つため、正側拡張記憶装置の書き込み順序と副側拡張記憶装置の書き込み順序を同一にする手法が開示されている。ただし、読み出しに関しては一切言及されていない。
【０００３】
一方、情報処理装置の高速化手法の一つとしてキャッシュメモリが知られている。キャッシュメモリは、主記憶などと比べて小容量だが高速なメモリで、使用頻度の高いデータを保持する。参照データがキャッシュメモリに存在する場合
（キャッシュヒット）は、該キャッシュメモリを参照するだけなので、データ参照時間は短い。参照データがキャッシュメモリに存在しなかった場合（キャッシュミス）は、主記憶などを参照することになる。参照データがキャッシュメモリに存在した場合と存在しなかった場合とでデータ参照時間は大きく異なるが、参照頻度の高いデータをキャッシュメモリに保持することにより、実効的なデータ参照時間を短縮できる。ただし、記憶装置を２重化した場合、一方の記憶装置や両方の記憶装置でミスした際に、いかにして２重化動作を保持するか、言及したものがない。
【０００４】
また、キャッシュメモリを内部に持つプロセッサも知られている。一般にこれらのプロセッサでは、記憶装置のデータが他のプロセッサにより書き換えられた場合に、キャッシュメモリのデータを無効化することにより、キャッシュメモリのデータと記憶装置のデータとが不一致になるのを防ぐ機能を持っているが、記憶装置を２重化した場合、一致性制御の効率化について言及したものがない。
【０００５】
【発明が解決しようとする課題】
本発明で解決しようとする第１の課題は、２重化された記憶装置間の処理量を均等化することである。記憶装置を正側と副側に２重化した場合、書き込み処理は２重化状態を保つため正側と副側の両方で行う必要があるが、読み出し処理は例えば正側の一方だけでもよい。この場合、正側の記憶装置の処理量が副側の記憶装置の処理量よりも大きくなるため、正側と副側に同等な性能の記憶装置を用いる場合、記憶装置全体の処理性能が正側の記憶装置の処理性能に依存するという問題がある。２重化された記憶装置間の処理量を均等化できれば、記憶装置全体の処理性能はさらに向上する。
【０００６】
本発明で解決しようとする第２の課題は、読み出しリクエストを正側のみに発行する場合や、記憶装置にキャッシュメモリを設けた場合に、書き込みリクエストが一方の記憶装置ではヒットしたがもう一方の記憶装置ではミスした場合など、正側と副側とで記憶装置の動作タイミングが異なっても、２重化された記憶装置が２重化動作を矛盾無く継続できる様にすることである。ここで、特開平６−２５９３３６号公報に記載の様に、一義的に正側と副側の書き込み処理順序を同一にすると、２重化動作は保証できるが、アドレスが異なる書き込みリクエストについても処理順序を守るため、先行する書き込みリクエストが副側のみでキャッシュミスとなった場合に、副側の後続する書き込みリクエストが仮にキャッシュヒットであっても待たされるという性能上の問題が生じる。
【０００７】
本発明で解決しようとする第３の課題は、特に記憶装置にキャッシュメモリを設けた場合に、キャッシュミス処理時間を２重化時と非２重化時とで同等にすることである。例えば、記憶領域を正側と副側に２重化し、ある書き込みリクエストが正側と副側の両方でミスした場合に、正側のキャッシュミス処理が終わってから副側のキャッシュミス処理を起動すると、２重化時は非２重化時の２倍の処理時間がかかるという問題がある。
【０００８】
本発明で解決しようとする第４の課題は、特にプロセッサが内部にキャッシュメモリを持つ場合の、記憶装置のデータとプロセッサ内キャッシュメモリのデータとの一致制御に関して、記憶装置が２重化制御された場合に、プロセッサに対して必要最小限の無効化要求を発行することである。あるプロセッサが記憶装置上のデータを変更すると、他のプロセッサ内のキャッシュメモリに同じアドレスのデータが存在する場合は、そのデータを無効化する必要がある。この時、プロセッサに対して２重化された記憶装置がそれぞれ無効化要求を発行するのは過剰である。
【０００９】
【課題を解決するための手段】
第１の課題を解決するため、本発明では、正側と副側に分けられた記憶領域を、アドレス単位に互いに異なる記憶装置に割り当てる（インタリーブ）。各記憶装置に対して正側の記憶領域と副側の記憶領域をインタリーブして割り当てることにより、読み出し処理が正側の一方だけでも、記憶装置間の負荷を均等化できる。
【００１０】
第２の課題を解決するため、本発明では、参照アドレスが同じ書き込みリクエストについてのみ正側と副側の記憶装置間で書き込み順序を同一に保つようにする。アドレスが同じ書き込みリクエストについてのみ記憶装置間の処理順序を同一にすれば、正側と副側とで記憶装置の動作タイミングが異っても、２重化された記憶装置間の内容は同一に保たれる。例えば、先行リクエストがキャッシュミスした場合でも、後続リクエストの参照アドレスが異なる場合は先行リクエストの処理完了を待たずに処理を開始できる。
【００１１】
第３の課題を解決するため、本発明では、記憶装置にキャッシュメモリを設けた場合、正側のキャッシュメモリがミスした場合はキャッシュミス処理を起動した時点で、副側の処理を起動するようにする。この結果、さらに副側のキャッシュメモリがミスした場合でも、副側のキャッシュミス処理は正側のキャッシュミス処理と並列に行われるため、キャッシュミス処理時間は非２重化時と同等にできる。
【００１２】
第４の課題を解決するため、本発明では、プロセッサが内部にキャッシュメモリを有する場合、正側の記憶領域が割り当てられた記憶装置のみが、書き込みリクエストを処理する時にプロセッサに対して無効化要求を出すようにする。副側の記憶装置は、書き込みリクエストを処理しても、改めてプロセッサに対して無効化要求を発行する必要はなく、過剰な無効化要求の発行を防止できる。
【００１３】
【発明の実施の形態】
図１は本発明の実施例１の全体構成を示す。本実施例では、２台の記憶装置Ｓ（０)１，Ｓ(１)２と複数台のプロセッサＰ(０）３，Ｐ(１)４，…が相互に結合されている。プロセッサＰ(０)３は、処理装置ＰＵ(０)３３とリクエスト送出制御ユニットＲＳＣ(０)３４を有している。プロセッサＰ(１)４、及び他のプロセッサについても同様である。記憶装置Ｓ(０)１は、リクエスト制御ユニットＲＣ(０)１５と記憶ユニットＳＵ(０)１６からなり、ＲＣ(０)１５は各プロセッサＰ(０)３，Ｐ(１)４，…対応のリクエストキューＱ０(０)１８３，Ｑ０(１)１８４，…、及び、リクエスト切り出しユニット１７を有している。リクエストキュー１８３、１８４はＦＩＦ０形式のバッファメモリであり、リクエストがプロセッサ３、４から発行されてからリクエスト切り出しユニット１７で切り出されるまでの間、保持するために設けられる。記憶装置Ｓ(０)２の構成についても同様である。
【００１４】
プロセッサ３，４などは、記憶装置１，２上のデータを読み書きする場合，リクエスト信号線３１，３２，又は、４１，４２を用いて読み出しリクエストもしくは書き込みリクエストを記憶装置１，２に対して送る。リクエストの送り先の記憶装置は、ＰＵ(０)３３，ＰＵ(１)４３などからのリクエストの種類やアドレスに応じて、ＲＳＣ(０)３４，ＲＳＣ(ｎ)４４などで決定される。リクエストの形式やＲＳＣの詳細については後述する。
【００１５】
記憶装置Ｓ(０)１，Ｓ(１)２に送られたリクエストは、ＲＣ(０)１５，ＲＣ
(１)２５内のリクエストキュー１８３，１８４，又は、２８３，２８４などに貯えられ、リクエスト切り出しユニット１７，２７から一つずつ切り出される。書き込みリクエストを切り出した場合は、記憶ユニットＳＵ(０)１６，ＳＵ(０)２６にデータを書き込んで処理を終了する。読み出しリクエストを切り出した場合は、ＳＵ(０)１６，ＳＵ(１)２６からデータを読み出し、応答信号線１３，１４，又は、２３，２４を通して送り元のプロセッサ３，４にデータを転送する。また、リクエスト切り出しユニット１７，２７から正側の書き込みリクエストを切り出した場合は、信号線１２，２２を用いて切り出し信号を相手リクエスト切り出しユニットに伝達する。切出し信号や応答信号の形式、リクエスト切り出しユニットの詳細については後述する。
【００１６】
図２は、記憶装置Ｓ(０)１，Ｓ(１)２の記憶ユニットＳＵ(０)１６，ＳＵ(１)２６内のメモリマップの具体例を示す。これは、記憶領域がＳＵ(０)１６，ＳＵ(１)２６で正側と副側に２重化され、かつ、正側と副側が４Ｋ（Ｋ＝１０２４）を単位にインタリーブされて割り当てられている例である。すなわち、０Ｋ番地から４Ｋ番地までは記憶領域の正側は記憶装置Ｓ(０)１側に割り当てられ、副側は記憶装置Ｓ(１)２側に割り当てられているが、４Ｋ番地から８Ｋ番地までは記憶領域の正側は記憶装置Ｓ(１)２側に割り当てられ、副側は記憶装置Ｓ(０)１側に割り当てられている。以下、同様にして、正側と副側が４Ｋを単位に、それぞれ記憶装置Ｓ(０)１，Ｓ(１)２側に交互に割り当てられている。正側領域には読み出しリクエスト（ＦＴ）と書き込みリクエスト（ＳＴ）の両方が発行され、副側領域には書き込みリクエストのみが発行される。正側と副側とがインタリーブされているため、読み出しリクエストは記憶装置Ｓ(０)１とＳ(１)２の両方に均等に発行されることが期待できる。なお、負荷の均等を問題にしない場合には、正側と副側をインタリーブ構成としなくてもよい。
【００１７】
図３は実施例１の動作例１のタイムチャートを示す。ここでは、あるプロセッサが発行する読み出しリクエストと書き込みリクエストについて、記憶装置１，２のどちらが正側であっても動作可能なことを示す。その例として、図３では、プロセッサＰ(０)３が、（１）アドレスａに対する書き込みリクエスト（Ｐ０ＳＴａ），（２）アドレスｂに対する書き込みリクエスト（Ｐ０ＳＴｂ），（３）アドレスｃに対する読み出しリクエスト（Ｐ０ＦＴｃ），（４）アドレスｄに対する読み出しリクエスト（Ｐ０ＦＴｄ）、を順に発行した場合の動作を示す。
【００１８】
説明を容易にするため、各リクエストには次のような識別記号をつけた。最初の数字０はプロセッサ番号を示す。次の大文字のアルファベットＦ，Ｓは読み出し（ＦＴ）と書き込み（ＳＴ）を区別する。次の小文字のアルファベットａ，ｂ，ｃ，ｄはそれぞれ図２内に示すアドレスに対応する。書き込みリクエストは２つの記憶装置１，２に発行されるので、副側に発行されるリクエストには「’」をつけて区別する。
【００１９】
まず、最初の書き込みリクエスト（Ｐ０ＳＴａ）の処理について説明する。時間１では書き込みリクエスト（Ｐ０ＳＴａ）がプロセッサＰ(０)３のＲＳＣ(０)３４から記憶装置Ｓ(０)１とＳ(１)２の両方に発行される。すなわち、図２より、アドレスａは正側が記憶ユニット０、副側が記憶ユニット１であることから、ＲＳＣ(０)３４は、リクエスト信号線３１，３２を通して、記憶装置Ｓ(０)１に対して正側領域に対する書き込みリクエスト（０Ｓａ）を、また、記憶装置Ｓ(１)２に対して副側領域に対する書き込みリクエスト（０Ｓa'）を発行する。時間２では、記憶装置Ｓ(０)１において、リクエスト切り出しユニット１７で正側の書き込みリクエスト（０Ｓａ）が切り出され、時間３で、記憶ユニットＳＵ(０)１６で書き込み処理が行われる。また、時間２では、切り出しユニット１７は、正側の書き込みリクエスト（０Ｓａ）が切り出されたことを切り出し信号線１２を用いて、記憶装置Ｓ(１)２の切出しユニット２７に伝達する。正側の書き込みリクエストが切り出された後でないと、副側の書き込みリクエストは切り出せない。記憶装置Ｓ(１)２においては、切り出し信号線１２を通して、時間２で記憶装置Ｓ(０)１内で正側リクエスト(０Ｓａ）が切り出された連絡を受けて、時間３で、リクエスト制御ユニットＲＣ(１)２５のリクエスト切り出しユニット２７にて副側リクエスト（０Ｓa'）が切り出され、時間４で記憶ユニットＳＵ(１)２６で書き込み処理が行われる。
【００２０】
次に書き込みリクエスト（Ｐ０ＳＴｂ）の処理について説明する。図２より、アドレスｂは正側が記憶ユニット１、副側が記憶ユニット０なので、プロセッサＰ(０)３のＲＳＣ(０)３４は、リクエスト信号線３１，３２を通して、時間２において、記憶装置Ｓ(１)２に対して正側の書き込みリクエスト（０Ｓｂ）を、記憶装置Ｓ(０)１に対して副側の書き込みリクエスト（０Ｓb'）を発行する。記憶装置Ｓ(１)２では、時間３において、先行する副側書き込みリクエスト（０Ｓa'）の切り出しが行われるため、書き込みリクエスト（０Ｓｂ）はリクエストキューＱ１(０)２８３内で待たされ、時間４で、リクエスト切り出しユニット２７で切り出され、時間５で、記憶ユニットＳＵ(１)２６で正側の書き込み処理が行われる。また、時間４では、リクエスト切り出しユニット２７から切り出し信号線２２を通し、記憶装置Ｓ(０)１のリクエスト切り出しユニット１７に対して、正側の書き込みリクエスト（０Ｓｂ）が切り出されたことを伝達される。これを受けて、記憶装置Ｓ(０)１においては、時間５で、リクエスト切り出しユニット１７にて副側の書き込みリクエスト（ＯＳb'）の切り出し処理が行われ、時間６で、記憶ユニットＳＵ(０)１６で副側の書き込み処理が行われる。
【００２１】
なお、時間３では、記憶装置Ｓ(０)１が、書き込みリクエスト（Ｐ０ＳＴａ）の発行プロセッサＰ(０)３以外のプロセッサ（ここではプロセッサＰ(１)４）に当該書き込みリクエスト情報（０Ｓa）を応答信号線１４を通して送り、時間５では、記憶装置Ｓ(１）２が、書き込みリクエスト情報（０Ｓｂ）を同様にプロセッサＰ(１)４に送っている。これは、プロセッサ内にキャッシュメモリがある場合に必要なもので、その詳細については後の実施例３で説明する。したがって、図４以降のタイムチャートでも、記憶装置からリクエスト発行元以外のプロセッサに対して、同様に書き込みリクエスト情報を送ることが示されているが、説明は省略する。
【００２２】
次に、読み出しリクエスト（Ｐ０ＦＴｃ），（Ｐ０ＦＴｂ）について説明する。図２より、読み出しリクエスト（０Ｆｃ）は、アドレスｃの正側の記憶領域を保持する記憶装置Ｓ(０)１に対して時間３で発行される。この読み出しリクエスト（０Ｆｃ）は、時間４，５で記憶装置Ｓ(０)１のリクエストキュー１８３内で待たされ、時間６でリクエスト切り出しユニット１７により切り出され、時間７で記憶ユニットＳＵ(０)１６からの読み出し処理と、応答信号線１３を通してのプロセッサＰ(０)３への読み出しデータ転送処理が起動される。一方、読み出しリクエスト（０Ｆｄ）は、アドレスｄの正側の記憶領域を保持する記憶装置Ｓ(１)２側に対して時間４で発行される。記憶装置Ｓ(１)２では、先行リクエスト（０Ｓｂ）の切り出し処理が時間４で完了するため、読み出しリクエスト（０Ｆｄ）は、時間５でリクエスト切り出しユニット２７により切り出され、時間６で、記憶ユニットＳＵ(１)２６からの読み出し処理と、応答信号線２３を通してのプロセッサＰ(０)３への読み出しデータ転送処理が起動される。
【００２３】
図４は実施例１の動作例２のタイムチャートを示す。ここでは、複数のプロセッサが同じアドレスに対して書き込み処理を行った場合の動作について説明する。その例として、図４では、（１）プロセッサＰ(０)３がアドレスａに対して値「０」を書き込むリクエスト（Ｐ０ＳＴａ０）を時間１で発行し、（２）プロセッサＰ(１)４がアドレスａに対して値「１」を書き込むリクエスト（Ｐ１ＳＴａ１）を時間１で発行し、（３）プロセッサＰ(２)がアドレスｃに対して値「２」を書き込むリクエスト（Ｐ２ＳＴｃ２）を時間３で発行した場合の動作を示す。リクエストの最後の数字は書き込み時の書き込みデータを示す。
【００２４】
時間１において、プロセッサＰ(０)３のＲＳＣ(０)３４は、記憶装置Ｓ(０)１に対して正側の書き込みリクエスト（０Ｓａ０）を、記憶装置Ｓ(１)２に対して副側の書き込みリクエスト（０Ｓa'０）を発行する。この時間１において、プロセッサＰ(１)４のＲＳＣ(１)４４は、同じく、記憶装置Ｓ(０)１に対して正側の書き込みリクエスト（１Ｓａ１）を、記憶装置Ｓ(１)２に対して副側の書き込みリクエスト（１Ｓa'１）を発行する。時間２で、記憶装置Ｓ(０)１のリクエスト切り出しユニット１７においてリクエスト（０Ｓａ０）とリクエスト（１Ｓａ１）の切り出しが競合する。実施例では、リクエストが競合した場合、選択の優先順位はプロセッサ番号の若い順とする。リクエストが競合した場合の選択方法にはいろいろあるが、ここでは説明を省略する。
【００２５】
記憶装置Ｓ(０)１では、番号の若いプロセッサＰ(０)３が発行した正側のリクエスト（０Ｓａ０）が、時間２でリクエストキュー１８３からリクエスト切り出しユニット１７により切り出され、時間３で記憶ユニットＳＵ(０)１６での書き込み処理が行われる。また、時間２では、リクエスト切り出しユニット１７から相手のリクエスト切り出しユニット２７に対して、正側書き込みリクエスト（０Ｓａ０）の切り出されたことが伝達される。これを受けて、記憶装置Ｓ(１)２では、リクエスト（０Ｓa'０）が、時間３でリクエストキュー２８３からリクエスト切り出しユニット２７により切り出され、時間４で記憶ユニットＳＵ(１)２６での書き込み処理が行われる。
【００２６】
一方、時間２において競合に負けたプロセッサＰ(１)４の正側のリクエスト（１Ｓａ１）は、時間３で記憶装置Ｓ(０)１のリクエストキュー１８４からリクエスト切り出しユニット１７により切り出され、時間４で記憶ユニットＳＵ(０)１６での書き込み処理が行われる。また、時間３では、リクエスト切り出しユニット１７から相手のリクエスト切り出しユニット２７に対して、正側の書き込みリクエスト（１Ｓａ１）の切出されたことが伝達され、これを受けて、記憶装置Ｓ(１)２では、副側の書き込みリクエスト（１Ｓa'１）が、時間４でリクエストキュー２８４からリクエスト切り出しユニット２７により切り出され、時間５で記憶ユニットＳＵ(１)２６での書き込み処理が行われる。
【００２７】
時間３でプロセッサＰ(２)から発行された正副リクエスト（２Ｓｃ２，２Ｓc'２）は、何ら待ち要因がないので、記憶装置Ｓ(０)１，Ｓ(１)２において、プロセッサＰ(０)３が発行したリクエストと同様の時間関係で処理される。
【００２８】
以上、実施例１では、副側の記憶装置に対する書き込みリクエストは、正側の記憶装置で処理された順番に従って、リクエスト切り出しユニットから切り出される。これは各記憶装置のリクエスト切り出しユニットとそれらを相互に接続する切り出し信号線で実現される。このようにして、同じアドレスに対する書き込み処理順序が正側の記憶装置と副側の記憶装置とで同じになるため、正側と副側に２重化された記憶装置間のデータは同じになることが保証される。
【００２９】
図５は、図１を発展させて、記憶装置が４台あった場合の全体構成を示す。一般に、記憶装置が３台以上であっても二重化構成が可能であり、また、インタリーブの単位には制限がない。プロセッサＰ(０)３，Ｐ(１)４…が記憶装置上のデータを読み書きする場合、読み出しリクエストもしくは書き込みリクエストを記憶装置Ｓ(０)１，Ｓ(１)２，Ｓ(２)１０，Ｓ(３)２０に送る。具体的には、読み出しリクエストは正側のみに送り、書き込リクエストは正側と副側の両方に送る。記憶装置Ｓ(０)１，Ｓ(１)２，Ｓ(２)１０，Ｓ(３)２０では、プロセッサＰ(０)３，Ｐ(１)４…からのリクエストをキューイングし、一つずつ切り出し、書き込みリクエストの場合はデータを書き込んで処理を終了し、読み出しリクエストの場合はデータを読み出し、送り元のプロセッサに転送する。また、記憶装置Ｓ(０)１，Ｓ(１)２，Ｓ(２)３，Ｓ(３)４では、正側の書き込みリクエストが切り出された場合、それを他の記憶装置に伝達し、副側の書き込みリクエストを保持する記憶装置は、この正側の書き込みリクエストの切り出しの通知を受けて、当該副側の書き込みリクエストの切り出しを開始する。また、後述のプロセッサ内にキャッシュメモリがある場合、記憶装置Ｓ(０)１，Ｓ(１)２，Ｓ(２)３，Ｓ(３)４では、正側の書き込みリクエストの処理の際、データが書き換えられたことを、要求元以外のプロセッサに通知する。
【００３０】
図６は、図５の記憶装置が４台（Ｓ(０)〜Ｓ(３)）あった場合のメモリマップの構成例を示す。図６では、あるアドレスに対して正側の記憶装置と副側の記憶装置がそれぞれ割り当てられ、どちらにも属さない記憶装置は未使用と記した。この例では、正側の記憶装置が４Ｍ（Ｍ＝１０４８５７６）単位でインタリーブされている。また、副側の記憶装置は、Ｓ(０)が正側の場合はＳ(１)を、Ｓ(１)が正側の場合はＳ(０)を、Ｓ(２)が正側の場合はＳ(３)を、Ｓ(３)が正側の場合はＳ(２)を、という具合に一意に定まるように定義している。
【００３１】
このように、記憶装置が３台以上であっても、プロセッサのリクエスト送出制御ユニット（ＲＳＣ）内に、図６のような情報を保持することによりリクエストの送り先を決定できる。また、記憶装置が３台以上あっても、各リクエスト切り出しユニットの間を切り出し信号線で相互に接続することにより、副側のリクエストの切り出し制御も同様に実現できる。
【００３２】
図６において、各記憶装置Ｓ(０)〜Ｓ(３)の記憶ユニット（物理メモリ）では、未使用領域をつめることにより、メモリを有効に利用することが可能である。図７は、記憶装置Ｓ(０)について、絶対アドレス領域と物理アドレス領域の対応を示した図である。他の記憶装置Ｓ(１)，Ｓ(２)，Ｓ(３)についても同様である。この場合、各プロセッサのリクエスト送出制御ユニット（ＲＳＣ）では、読み出しもしくは書き込みリクエスト内の絶対アドレスを物理アドレスに変換した後、記憶装置Ｓ(０)〜Ｓ(３)側へ送出することになるが、これについては後述する。なお、先の図２のメモリマップでは、絶対アドレス＝物理アドレスである。
【００３３】
図８は実施例２の全体構成を示す。ここでは、記憶装置１，２の内部に主記憶より小容量高速のキャッシュメモリとしてワーク記憶（ＷＳ）を設けた場合の構成に関して、図１の実施例１との相違点を中心に説明する。記憶装置Ｓ(０)１，Ｓ(１)２の各記憶ユニットＳＵ(０)１６，ＳＵ(１)２６は、内部にワーク記憶ＷＳ(０)１６１，ＷＳ(１)２６１を持ち、そこには主記憶ＭＳ(０)１６２，ＭＳ(１)２６２のデータの写しを保持する。なお、ＳＵ(０)１６，ＳＵ(１)２６は、正確には図１のＳＵ(０)１６，ＳＵ(１)２６とはＷＳ１６１，ＷＳ２６１を含んでいる意味で異っているが、大きくは同じ機能をはたすので、理解の容易のために同じ番号１６，２６を付した。記憶ユニットＳＵ(０)１６，ＳＵ(１)２６では、読み出しリクエストや書き込みリクエストに対し、ＷＳ(０)１６１，ＷＳ(１)２６１に参照データがあれば（ＩnＷＳ;Ｉn Ｗork Ｓtorage）、直接該ＷＳに対して読み書き処理を行うが、ＷＳに参照データがなかった場合（ＮＩＷＳ;Ｎot Ｉn Ｗork Ｓtorage）は、ＭＳ(０)１６２，ＭＳ(１)２６２からデータを読み出してＷＳに転送し、あらためてＷＳに対して読み書き処理を行う。このＷＳに参照データがなかった場合にＭＳからデータを読み出してＷＳに転送する処理を、ＮＩＷＳ処理と呼ぶ。ＮＩＷＳ処理でＭＳのデータを読み出している間、その領域を参照不可能とするため、リクエスト制御ユニットＲＣ(０)１５，ＲＣ(１)２５内に、各プロセッサ対応のアドレス比較・制御回路１９３，１９４，…，２９３，２９４，…，を設け、参照領域が同じ場合はリクエストキューからのリクエスト切り出しを抑止する。アドレス比較・制御回路は、通常はリクエストキューのリクエストをそのまま通すが、ＮＩＷＳ処理が開始すると、ＭＳ参照中のリクエストと同じアドレスを持つリクエスト及びＭＳ参照中のリクエストと同じプロセッサのリクエストを通さないようにし、ＭＳ参照終了時、ＭＳからのＮＩＷＳ処理対象となったリクエストを通す機能を有している。
【００３４】
以下では、参照データがＷＳにあった場合の記憶ユニット処理時間を１（サイクル）、参照データがＭＳにあった場合のＭＳ参照処理時間を３（サイクル）と仮定して、実施例２の動作を説明する。
【００３５】
図９は、実施例２の動作例１を示す。ここでは、図４の例と同じタイミングでリクエストが発行されたが、リクエスト（０Ｓａ０）が正側の記憶装置Ｓ(０)１でＮＩＷＳ処理を起動した場合の動作を説明する。
【００３６】
プロセッサＰ(０)３の発行した正側の書き込みリクエスト（０Ｓａ０）は、記憶装置Ｓ(０)１において、時間２で切り出されるが、ＷＳ(０)１６１に参照データがないため、時間３でＭＳ(０)１６２に対してＮＩＷＳ処理を起動する。この時、該リクエスト（０Ｓａ０）はＭＳ参照中（Ｍｉｓｓ）としてＭＳ(０)１６２からアドレス比較・制御回路１９３へ戻され、処理が保留されるとともに、これと同じアドレスを持つ他のリクエスト、同じプロセッサＰ(０)のリクエストも抑止される。時間６でＮＩＷＳ処理が完了するため、アドレス比較・制御回路１９３が改めて該リクエスト（０Ｓａ０）を通し、リクエスト切り出しユニット１７で切り出され、時間７でＷＳ(０)１６１に対して書き込み処理を行って正側の処理が完了する。一方、副側記憶装置Ｓ(１)２では、時間３で副側の書き込みリクエスト（０Ｓa'０）が切り出され、時間４でＷＳ(１)２６１への書き込み処理が完了する。ＮＩＷＳ処理は一度起動をかけてしまえば、後は所定の時間待ってＷＳを参照すればよい。この例では時間６において、リクエスト切り出しユニット１７からＮＩＷＳ処理を起動した正側のリクエスト（０Ｓａ０）を最優先で切り出す。これにより、正側記憶装置でリクエスト（０Ｓａ０）のＮＩＷＳ処理が起動できた時点で、副側記憶装置でのリクエスト（０Ｓa'０）の切り出し処理を起動できる。
【００３７】
プロセッサＰ(１)４の発行した正側のリクエスト（１Ｓａ１）は、記憶装置Ｓ(０)１にて、時間２ではリクエスト（０Ｓａ０）との競合に負けたため待たされ、時間３，４，５では、該リクエスト（０Ｓａ０）のＮＩＷＳ処理中のアドレスと同一であるために、アドレス比較・制御回路１９４で待たされ、時間６ではリクエスト（０Ｓａ０）を最優先で切り出すために待たされ、結局、時間７で切り出され、時間８でＷＳ(０)１６１への書き込み処理が完了する。副側のリクエスト（１Ｓa'１）は、正側記憶装置Ｓ(０)１での切り出しが遅れた影響を受けて、時間８で記憶装置Ｓ(１)２にて切り出され、時間９でＷＳ(１)２６１への書き込み処理が完了する。
【００３８】
なお、時間３でプロセッサ２から発行されたリクエスト（２Ｓｃ２，２Ｓc'２）は他のリクエスト（０Ｓａ０，０Ｓa'０．１Ｓａ１，１Ｓa'１）とは参照アドレスが異なるため、アドレス比較・制御回路により、それらを追い越して選択される。このため、リクエスト（２Ｓｃ２，２Ｓc'２）の動作タイミングは、図４の例と同じになる。
【００３９】
図１０は実施例２の動作例２を示す。ここでは、図４の例と同じタイミングでリクエストが発行されたが、図９の例とは反対に、副側のリクエスト（０Ｓa'０）が副側記憶装置Ｓ(１)２でＮＩＷＳ処理を起動した場合の動作を説明する。
【００４０】
プロセッサＰ(０)３の発行した正側の書き込みリクエスト（０Ｓａ０）の正側記憶装置Ｓ(０)１の動作は、書き込みがＷＳ(０)１６１に対して行われることを除き、図４と同じになる。副側記憶装置Ｓ(１)２内では、時間３で副側のリクエスト（０Ｓa'０）が切り出されるが、ＷＳ(１)２６１に参照データがないため、ＮＩＷＳ処理を起動して、時間４，５，６でＭＳ(１)２６２を参照し、時間７で、再切り出しされ、時間８でＷＳ(１)２６１に対する書き込み処理が完了する。この間、後続リクエスト（１Ｓa'１）は、時間４，５，６では，ＮＩＷＳ処理中のリクエスト（０Ｓa'０）のアドレスと同一であるために、アドレス比較制御回路２９４で待たされ、時間７では、リクエスト（０Ｓa'０）を最優先で切り出すために、リクエスト切り出しユニット２７で待たされ、結局、時間８で切り出され、時間９でＷＳ(１)２６１への書き込み処理が完了する。
【００４１】
なお、プロセッサ２のリクエスト（２Ｓｃ２，２Ｓc'２）は、他のリクエスト（０Ｓａ０，０Ｓa'０，１Ｓａ１，１Ｓa'１）とは参照アドレスが異なるため、それらを追い越すことができる。結局、リクエスト（２Ｓｃ２，２Ｓc'２）の動作タイミングは図４、図９の例と同じになる。
【００４２】
図１１は、実施例２の動作例３を示す。ここでは、図４の例と同じタイミングでリクエストが発行されたが、正側および副側のリクエスト（０Ｓａ０，０Ｓa'０）がそれぞれ正側記憶装置Ｓ(０)１と副側記憶装置Ｓ(１)２でＮＩＷＳ処理を起動した場合の動作を説明する。
【００４３】
プロセッサＰ(０)３の発行した正側の書き込みリクエスト（０Ｓａ０）は、正側記憶装置Ｓ(０)１にて、時間２で切り出され、時間３でＭＳ(０)１６２に対してＮＩＷＳ処理が起動される。副側の書き込みリクエスト（０Ｓa'０）は、副側記憶装置Ｓ(１)２にて、時間３で切り出され、時間４でＭＳ(１)２６２に対してＮＩＷＳ処理が起動される。このため、正側のリクエスト（０Ｓａ０）の動作は図９と同様になり、副側のリクエスト（０Ｓa'０）の動作は図１０と同様になる。また、時間２でリクエスト（０Ｓａ０）との競合に負けたプロセッサＰ(１)４の正側リクエスト（１Ｓａ１）の動作は図９と同様になる。副側リクエスト（１Ｓa'１）の動作も、先行リクエスト（０Ｓa'０）の処理が終わると同時に切り出し可能になるので、結局、図９と同様になる。さらに、プロセッサＰ(２)のリクエスト（２Ｓｃ２，２Ｓc'２）は他のリクエスト（０Ｓａ０，０Ｓa'０，１Ｓａ１，１Ｓa'１）とは参照アドレスが異なるため、それらを追い越すことができる。結局、リクエスト（２Ｓｃ２，２Ｓc'２）の動作タイミングは図４、図９、図１０の例と同じになる。
【００４４】
図１２は、実施例２の動作例４を示す。ここでは、プロセッサＰ(２)が発行した書き込みリクエストの書き込み先が、先行するプロセッサＰ(０)，Ｐ(１)のリクエストと同じであり、かつ、プロセッサＰ(０)の副側リクエスト（０Ｓa'０）に対して副側記憶装置Ｓ(１)２でＮＩＷＳ処理を起動した場合の動作を説明する。
【００４５】
プロセッサＰ(０)３、Ｐ(１)４の先行の書き込みリクエスト（０Ｓａ０，０Ｓa'０，１Ｓａ１，１Ｓa'１）の動作は図１０と同じである。プロセッサＰ(２)が発行した正側の書き込みリクエスト（２Ｓａ２）は、結局、記憶装置内Ｓ(０)１においてリクエスト（１Ｓａ１）と同じ時間関係で処理される。記憶装置Ｓ(１)２内においては、時間８ではプロセッサＰ(１)の副側リクエスト（１Ｓa'１）とプロセッサＰ(２)のリクエスト（２Ｓa'２）はともに切り出し可能な状態であるが、正側リクエスト（１Ｓａ１），（２Ｓａ２）に対して記憶装置Ｓ(０)１で切り出された順番に従って、副側記憶装置Ｓ(１)２でもリクエストが切り出されるため、結局、リクエスト（２Ｓa'２）も、記憶装置Ｓ(１)２内でリクエスト（１Ｓa'１）と同じ時間関係で処理される。
【００４６】
以上実施例２では、記憶装置内にキャッシュメモリを設けても動作可能であることを示した。特に、切り出し信号の送受により、正側記憶装置でＭＳに対するＮＩＷＳ処理を起動した時点で副側記憶装置で切り出し処理を始めることにより、リクエストのＮＩＷＳ処理待ち時間は、正側記憶装置と副側記憶装置の両方でＮＩＷＳ処理を起動した場合でも、どちらか一方でＮＩＷＳ処理を起動した場合と変わらないことを示した。さらに、記憶装置内にアドレス比較・制御回路を設けて、アドレスが異なる場合に追い越しを可能とすることにより、ＮＩＷＳ処理などの待ち要因があっても、リクエストの処理スループットを向上できることを示した。当然のことながらアドレスが同じ場合は追い越しは不可能であり、正側記憶装置の処理順序と副側記憶装置の処理順序は同じになる。
【００４７】
図１３は実施例３の全体構成を示す。ここでは、キャッシュメモリとして、記憶装置の内部にワーク記憶（ＷＳ）を設け、さらにプロセッサの内部にバッファ記憶（ＢＳ）を設けた場合の構成に関して、図８の実施例２との相違点を中心に説明する。
【００４８】
プロセッサＰ(０)３の処理装置３３は、内部にバッファ記憶ＢＳ(０)３５と演算ユニットＥＵ(０)３６を持つ。プロセッサＰ(１)４の処理装置４３についても同様である。バッファ記憶ＢＳ(０)３５，ＢＳ(１)４５は、それぞれ記憶装置１，２内のワーク記憶ＷＳ(０)１６１，ＷＳ(１)２６１のデータの写しを保持する。すなわち、本実施例３はＢＳ，ＷＳ，ＭＳで３階層記憶を構成している。各プロセッサ内のバッファ記憶のデータ一致性を保証するために、記憶装置１，２内のデータがあるプロセッサによって書き換えられた場合は、他のプロセッサのバッファ記憶内の該当データを無効化する必要がある。このため、記憶装置１，２では、書き込みリクエスト情報の無効化要求リクエストを応答信号線１３，１４、あるいは２３，２４を通して各プロセッサ３，４に転送する。プロセッサ３，４では、転送された無効化要求リクエストのアドレスにより、自バッファ記憶内に同一アドレスのデータが存在するか検索し、存在すれば該当データを無効化する。ＷＳとＢＳ間のブロック転送は周知であるので、説明は省略する。
【００４９】
図１４は、実施例３の動作例１を示す。ここでは、（１）プロセッサＰ(０)３がアドレスａに対して値「０」を書き込むリクエスト（Ｐ０ＳＴａ０）を時間１で発行し、（２）プロセッサＰ(１)４が同じアドレスａに対して値「１」を書き込むリクエスト（Ｐ１ＳＴａ１）を同じく時間１で発行し、（３）プロセッサＰ(２)がアドレスａからデータを読み出すリクエスト（Ｐ２ＦＴａ）を時間４で発行した場合の動作を示す。なお、図１４の一番上にはプロセッサＰ(２)内のＢＳ(２)内のａ番地の内容を示している。
【００５０】
時間１ではアドレスａの値は「−１」であるが、時間２で切り出されたプロセッサＰ(０)３の正側の書き込みリクエスト（０Ｓａ０）、時間３で切り出されたプロセッサＰ(１)４の正側の書き込みリクエスト（１Ｓａ１）により、正側記憶装置Ｓ(０)１内のアドレスａのデータが、時間３、時間４で順次更新される。記憶装置Ｓ(１)２内では、時間３でプロセッサＰ(０)３の副側の書き込みリクエスト（０Ｓa'０）が切り出され、時間４でプロセッサＰ(１)４の副側の書き込みリクエスト（１Ｓa'１）が切り出され、アドレスａのデータが、時間４、時間５で順次更新される。このように、リクエスト（０Ｓａ０，０Ｓa'０，１Ｓａ１，１Ｓa'１）の処理タイミングは、参照データが各々ＷＳ１６１，２６１に存在するため、図４と同じである。
【００５１】
時間３において、無効化要求リクエスト（０Ｓａ０）が、正側記憶装置Ｓ(０)１からプロセッサＰ(２)に対して送られ、時間４で、プロセッサＰ(２)内部のバッファ記憶ＢＳ(２)は無効化される。このため、時間４では、プロセッサＰ(２)の読み出しリクエスト（２Ｆａ）は記憶装置Ｓ(０)１に対して発行される。リクエスト（２Ｆａ）は、時間５で切り出され、時間６でワーク記憶ＷＳ(０)１６１から読み出されたデータがプロセッサＰ(２)に対して送られる。時間４でも、無効化要求リクエスト（１Ｓａ１）が、正側記憶装置Ｓ(０)１からプロセッサＰ(２)に対して送られるが、ＢＳ(２)内のアドレスａのデータは無効化済みなので無視される。また、時間３では、無効化要求リクエスト（０Ｓａ０）がプロセッサＰ(１)に対しても送られるが、プロセッサＰ(１)では、時間１での書き込みリクエスト（１Ｓａ１）の発行によりＢＳ無効化済みなので無視される。同様に、時間４では、無効化要求リクエスト（１Ｓａ１）がプロセッサＰ(０)に対しても送られるが、プロセッサＰ(０)では、時間１での書き込みリクエスト（０Ｓａ０）の発行によりＢＳ無効化済みなので無視される。
【００５２】
なお、仮に、リクエスト（２Ｆａ）が時間３で発行された場合は、リクエスト（０Ｓａ０）の書き込み処理が完了していないので、更新前のデータ「−１」がバッファ記憶ＢＳ(２)から読み出される。実施例３では、更新前と後の区別は正側の記憶装置から送られる無効化要求の発行タイミングにより決定される。このため、副側記憶装置で処理された書き込みリクエストは、プロセッサに対して無効化要求リクエストを送ることはしない。
【００５３】
図１５は、実施例３の動作例２を示す。ここでは、アドレスａのデータが副側記憶装置Ｓ(１)２内のＷＳ(１)２６１に存在しなかった場合の動作タイミングを示す。この例では、リクエスト（０Ｓa'０）が副側記憶装置Ｓ(１)２でＮＩＷＳ処理を起動するため、副側記憶装置Ｓ(１)２の動作タイミングは図１０と同様なタイミングに変わるが、正側記憶装置Ｓ(０)１の動作は図１４と同じになる。したがって、プロセッサＰ(２)でのＢＳ無効化処理も図１４と同じである。
【００５４】
図１６は、実施例３の動作例３を示す。ここでは、アドレスａのデータが正側記憶装置Ｓ(０)１内のＷＳ(０)１６１に存在しなかった場合の動作タイミングを示す。この例では、リクエスト（０Ｓａ０）が正側記憶装置Ｓ(０)１内でＮＩＷＳ処理を起動するため、リクエスト（０Ｓａ０，０Ｓa'０，１Ｓａ１，１Ｓa'１）の処理タイミングは図９と同様になる。ただし、時間３のＮＩＷＳ処理を起動した時点で、無効化要求リクエスト（０Ｓａ０）が正側記憶装置Ｓ(０)１からプロセッサＰ(２)に対して送られるため、時間４で発行されたリクエスト（２Ｆａ）は記憶装置Ｓ(０)１に対して発行される。記憶装置Ｓ(０)１では、時間７で先行リクエスト（１Ｓａ１）が切り出された後、時間８でリクエスト（２Ｆａ）が切り出されるが、時間８でリクエスト（１Ｓａ１）のＷＳ書き込み処理が終わっているので、リクエスト（２Ｆａ）に対して、時間９で記憶装置Ｓ(０)１がプロセッサＰ(２)に返すデータは「１」になる。また、時間８ではプロセッサＰ(２)に対して、無効化要求リクエスト（１Ｓａ１）が送られるが、無効化済みであるため無視され、時間１０において、プロセッサＰ(２)のＢＳ(２)はアドレスａのデータとして「１」を保持することになる。また、時間３では、無効化要求リクエスト（０Ｓａ０）はプロセッサＰ(１)にも発行され、時間８では、無効化要求リクエスト（１Ｓａ１）はプロセッサＰ(０)にも発行されるが、プロセッサＰ(０)，Ｐ(１)では、時間１での書き込みリクエスト発行にともない、ＢＳ(０)，ＢＳ(１)が無効化済みなので、無効化要求リクエストは無視される。
【００５５】
以上実施例３では、プロセッサ内にキャッシュメモリを設けても動作可能であることを示した。正側記憶装置と副側記憶装置の両方でＮＩＷＳ処理を起動した場合を特に説明していないが、正側記憶装置の動作タイミングは図１６と同様になり、副側記憶装置の動作タイミングは図１５と同様になることは容易に類推できると考えるので、説明は省略する。また無効化要求リクエストは、一方の記憶装置、すなわち正側の記憶装置から発行されるため、プロセッサ内のキャッシュメモリは記憶装置の２重化とは無関係に構成可能である。さらに正側の記憶装置はアドレスによってインタリーブされていることから、各記憶装置が発行する無効化要求リクエストは均等になることが期待できる。
【００５６】
次に、リクエストの具体的な形式、プロセッサ内のリクエスト送出制御ユニット（ＲＳＣ）、記憶装置内のリクエスト切り出しユニットの具体的な構成について説明する。
【００５７】
図１７は、リクエストの具体的形式例を示す。図１７の（１）は発行元の処理装置（ＰＵ）がリクエスト送出制御ユニット（ＲＳＣ）に送るリクエストの形式例であり、ここでは、「Ｖ ＦＴ／ＳＴ ＡbsＡdr ＳＴ−Ｄata」から構成されている。Ｖはリクエストが有効であることを示すビット（有効：１，無効：０）、ＦＴ／ＳＴはリクエストの種類（ＦＴ：読み出し，ＳＴ：書き込み）、ＡbsＡdrは絶対アドレス、ＳＴ−Ｄataはストアデータである。なお、ストアデータはＦＴリクエストでは不要である。
【００５８】
図１７の（２）はリクエスト送出制御ユニット（ＲＳＣ）通過後のリクエストの形式例であり、ここでは「Ｖ ＦＴ／ＳＴ ＡbsＡdr ＳＴ−Ｄata Ｐ＃ 正／副Ｓ＃ ＰhyＡdr Ｓub−Ｓ＃ Ｈit／Ｍiss」から構成されている。すなわち、ＲＳＣ通過後のリクエストは、(１）のリクエストの後に「Ｐ＃ 〜 Ｈit／Ｍiss」を追加した構成をとる。Ｐ＃はリクエスト送出元プロセッサ番号、正／副は正側リクエストか副側リクエストかの識別番号、Ｓ＃はリクエスト送り先記憶装置番号、ＰhyＡdrは記憶装置内物理アドレス、Ｓub−Ｓ＃は副側リクエストが送付された記憶番号、Ｈit／Ｍissはワーク記憶（ＷＳ）のヒット／ミス情報である。Ｐ＃は記憶装置が応答信号や無効化要求リクエストをプロセッサ側に返すときや、後述の図１７の（３）の切り出し信号に利用される。Ｓub−Ｓ＃は、正側記憶装置が副側記憶装置にリクエスト切り出し信号を送出するときに利用されるもので、正側ＳＴリクエストのみに付加される。Ｈit／Ｍissは、ＲＳＣ通過のリクエストには初期値としてＨitを設定し、記憶装置がＮＩＷＳでＭissに置き換えるものである。アドレス比較・制御回路は、Ｈit／Ｍissにより、プロセッサからのリクエストかＭＳ参照中のリクエストかを判断する。当然のことながら、記憶装置にＷＳが存在しない場合は、Ｈit／Ｍissフィールドは不要である。
【００５９】
図１７の（３）は、記憶装置内のリクエスト切り出しユニットが、正側ＳＴリクエストを切り出した時に、副側記憶装置のリクエスト切り出しユニットに送出するリクエスト切り出し信号の形式例である。ここでは、リクエスト切り出し信号は、Ｖビットと、副側リクエストを切り出し可能になったプロセッサの番号Ｐ＃で代用する。なお、プロセッサが１台の場合には、例えば、ＳＴリクエスト自体を切り出し信号にすればよい。さらにまた１台の場合には、各リクエストキュー１８３および２８３からキュー順に取り出せば、書き込み順は正側、副側は同じ順になるので、正側が必ずしも先に処理を行わなくても良い場合は、この切り出し信号を省略して送らなくても良い。よってこの場合は、リクエストキューが、正側と副側で同じアドレスに対する書き込みリクエストの処理順序を同じにするための手段になる。図１７の（４）は、記憶装置がリクエスト送出元プロセッサに返す応答信号の形式例であり、ここでは、「Ｖ ＦＴ／ＳＴ ＡbsＡdr ＦＴ−Ｄata」から構成されている。ＦＴ−Ｄataは読み出しデータであり、ＦＴリクエストのみ有効である。
【００６０】
図１７の（５）は、プロセッサがキャッシュメモリとしてバッファ記憶（ＢＳ）を内蔵するシステム構成の場合に、記憶装置がＳＴリクエスト送出元プロセッサ以外のプロセッサに対して送出する無効化要求リクエストの形式例である。無効化要求リクエストはＳＴリクエスト情報「Ｖ ＳＴ ＡbsＡdr」で構成される。ここで、Ｖビットは、この無効化要求リクエストがプロセッサに送出される時、有効（Ｖ＝１）を表わす。ＡbsＡdrは無効化すべきＢＳ内アドレスである。該無効化要求リクエストを受け取ったプロセッサは、ＡbsＡdrをもとに、ＢＳを検索し、該当アドレスにデータが存在すればそれを無効化する。
【００６１】
図１８はリクエスト送出制御ユニット（ＲＳＣ）の構成例を示す。ここでは、プロセッサＰ(０)３内のＲＳＣ(０)３４を例に説明する。
リクエスト送出制御ユニットＲＳＣ(０)３４は、変換テーブル３４１、プロセッサ番号レジスタ３４２、正側リクエスト生成部３４３、副側リクエスト生成部３４４及びリクエストスイッチ部３４５で構成される。変換テーブル３４１は、複数のエントリからなり、各エントリは図２や図６に示したようなメモリマップの記憶領域単位に対応し、それぞれ正側記憶装置番号Ｓ＃、正側ＰhyＡdr、副側記憶装置番号Ｓ＃、副側ＰhyＡdrを格納している。図１９（１）（２）に、それぞれ図２および図６のメモリマップの場合の変換テーブル３４１のデータ例を示す。プロセッサ番号レジスタ３４２は、当該プロセッサの番号Ｐ＃を保持し、ＲＳＵ(０)３４ではＰ(０)を保持する。図１９の（１）で、正側ＰhyＡdr、副側ＰhyＡdr共に、例えばＡbsＡdrが０Ｋから４Ｋ−１に対応するエントリには「０Ｋ〜４Ｋ−１」と記載があるが、これは理解を容易にするために表記したもので、実際には、アドレスが４Ｋ以上を表すアドレスの上位ビットを保持しており、２進で「０…０００」を、他のエントリの「４Ｋ〜８Ｋ−１」は「０…００１」を、「８Ｋ〜１２Ｋ−１」は「０…０１０」を、「１２Ｋ〜１６Ｋ−１」は「０…０１１」を保持している。他も同様である。図１９の（２）では、４Ｍ単位であり、記載は図１９の（１）と同様、正側ＰhyＡdr、副側ＰhyＡdr共に、例えばＡbsＡdrが０Ｍから４Ｍ−１に対応するエントリには「０Ｍ〜４Ｍ−１」と記載があるが、実際には、アドレスが４Ｍ以上を表すアドレスの上位ビットを保持しており、２進で「０…０００」を、他のエントリの「４Ｍ〜８Ｍ−１」は「０…００１」を保持している。そして、図６、図７から未使用の領域をつめているので、例えば、絶対アドレスＡbrＡdrが１６Ｍ〜２０Ｍ−１のエントリは、正側Ｓ＃はＳ０で、その物理アドレスＰhyＡdrは８Ｍ〜１２Ｍ−１とあるように、アドレスが４Ｍ以上を表すアドレスの上位ビット「０…０１０」を保持し、絶対アドレスＡbsＡdrが１６Ｍ〜２０Ｍ−１の場合には、物理アドレスＰhyＡdrはそのエントリ内の８Ｍ〜１２Ｍ−１に置き換えられる、即ち変換されることを示す。
【００６２】
処理装置ＰＵ(０)３３は、リクエスト送出制御ユニットＲＳＣ(０)３４に対して、リクエスト信号線３０を通し、図１７（１）に示したリクエストを送ってくる。ＲＳＣ(０)３４では、該リクエスト中のＡbsＡdrに対応した変換テーブル３４１のエントリを参照し、該当エントリ内に格納されている正側Ｓ＃、正側ＰhyＡdr、副側Ｓ＃、副側ＰhyＡdrを読み出す。正側リクエスト生成部３４３は、ＰＵ(０)３３からのリクエスト、変換テーブル３４１からの正側Ｓ＃、正側ＡbsＡdr、副側Ｓ＃、及びプロセッサ番号レジスタ３４２のＰ＃を入力して、正側のリクエストを生成する。副側リクエスト生成部３４４は、ＰＵ(０)３３からのリクエスト、変換テーブル３４１からの副側Ｓ＃、副側ＡbsＡdr、及びプロセッサ番号レジスタ３４２のＰ＃を入力して、副側のリクエストを生成する。ただし、副側リクエスト生成部３４４では、入力されるリクエストの種類（ＦＴ／ＳＴ）がＦＴの場合、リクエストの生成を抑止するようにする。
【００６３】
正側リクエスト生成部３４３、副側リクエスト生成部３４４で生成されるリクエストの形式は、図１７の（２）に示した通りである。ただし、ＦＴリクエスト、副側のＳＴリクエストでは、Ｓub−Ｓ＃（副側リクエストが送られた記憶装置番号）のフィールドは不要である。また、正側／副側の記憶領域の対応関係が規則的であるため、記憶装置側で、正側Ｓ＃から副側Ｓ＃を求める論理を作れば、正側リクエスト中のＳub−Ｓ＃を省略することができる。Ｈit／Ｍissフィールドには「Ｈit」が初期設定されるが、記憶装置側にワーク記憶（ＷＳ）が存在しないシステムでは、Ｈit／Ｍissフィールドは不要である。
【００６４】
リクエストスイッチ部３４５では、ＳＴリクエストの場合、正側リクエスト生成部３４３の正側リクエスト、副側リクエスト生成部３４４の副側リクエストの両方を入力して、当該リクエスト内の発行先記憶装置番号Ｓ＃を元に、リクエスト送り先記憶装置を決定し、それぞれリクエスト信号線３１、３２へ送出する。また、ＦＴリクエストの場合には、正側リクエスト生成部３４３の正側リクエストのみを入力し、そのＳ＃を元に、リクエスト信号線３１又は３２へ送出する。
【００６５】
なお、図１９において、図２に示すメモリマップに対応する（１）の変換テーブルデータでは、ＡbsＡdr＝ＰhyＡdrであるため、ＰhyＡdr部を省略することができ、リクエストのＰhyＡdrフィールドは不要である。一方、図６に示すメモリマップに対応する（２）の変換テーブルデータでは、ＡbsＡdrからＰhyＡdrに変換することで、記憶装置の物理メモリを有効に利用できる（図７参照）。
【００６６】
図２０はリクエスト切り出しユニットの構成例を示す。ここでは、図８の実施例２における記憶装置Ｓ(０)１内のリクエスト切り出しユニット１７を例に説明する。
【００６７】
リクエスト切り出しユニット１７は、切り出し信号キュー１７１、優先順位決定部１７２、リクエスト選択回路１７３、切り出し信号送出部１７４から構成される。切り出し信号キュー１７１は、正側ＳＴリクエストの切り出し順に従い副側ＳＴリクエストを切り出すために用いられるＦＩＦ０バッファであり、記憶装置Ｓ(１)２のリクエスト切り出しユニット２７から切り出し信号線２２を通して伝達される正側ＳＴリクエストの切り出し信号を保持する。切り出し信号は、ここでは、図１７の（３）に示したように、副側ＳＴリクエストを切り出し可能になったプロセッサの番号Ｐ＃である。
【００６８】
アドレス比較・制御回路１９３，１９４，…には、リクエストキューＱ０(０)１８３，Ｑ０(１)１８４，…のプロセッサ側から発行されるリクエスト（Ｈit／ＭissフィールドがＨit）と、ＮＩＷＳ処理が起動されて主記憶ＭＳ(０）１６２から戻されるＭＳ参照中のリクエスト（Ｈit／ＭissフィールドがＭiss）が入力される。アドレス比較・制御回路１９３，１９４，…は、リクエストＱ０(０)１８３，Ｑ０(１)１８４，…からのリクエストについて、ＭＳ参照中のリクエストと同じアドレスをもつリクエスト及びＭＳ参照中のリクエストと同じプロセッサ番号のリクエストを抑止し、それ以外のリクエストを出力する。また、主記憶ＭＳ(０)１６２から戻されるＭＳ参照中のリクエストについては、ＭＳ参照終了時に出力する。なお、図１の実施例１では、該アドレス比較・制御回路１９３，１９４，…は不要であり、リクエストキューＱ０(０)１８３，Ｑ０(１)１８４，…のリクエストが、そのキューイング順にリクエスト切り出しユニット１７に与えられる。
【００６９】
リクエスト切り出しユニット１７では、アドレス比較・制御回路１９３，１９４，…から出力されるリクエストをリクエスト選択回路１７３に入力するとともに、該リクエスト中の「Ｖ，ＦＴ／ＳＴ，正／副」の情報は優先順位決定部１７２にも送る。優先順位決定部１７２には、切り出し信号キュー１７１からの切り出し信号（副側リクエストを切りり出し可能になったプロセッサの番号Ｐ＃）もキューイング順に送られる。優先順位決定部１７２では、リクエスト中の「Ｖ，ＦＴ／ＳＴ，Ｐ＃，正／副」の情報、及び、切り出し信号を元に、リクエストを切り出す優先順位を決定して、リクエスト選択回路１７３にリクエストの切り出しを指示する。ここでは、以下の優先順位とする。
（１）ＦＴリクエストでプロセッサ番号Ｐ＃の若番順
（２）切り出し信号で指定されるプロセッサ番号の副側ＳＴリクエスト
（３）正側ＳＴリクエストでプロセッサＰ＃の若番順
この結果、リクエストキューＱ０(０)〜Ｑ０(ｎ)の先頭がＦＴリクエストの場合、切り出し信号キュー１７１からの切り出し信号とは無関係に切り出すことができる。また、副側ＳＴリクエストは、相手リクエスト切り出しユニットから切り出し信号を受け取らないと切り出せない。
【００７０】
リクエスト選択回路１７３は、優先順位決定部１７２からの指示にしたがってリクエスト選択し、記憶ユニットＳＵ(０)１６に転送する。切り出し信号送出部１７４は、リクエスト選択回路１７３から出力されるリクエストを監視し、Ｈit状態の正側ＳＴリクエストが出力された場合（切り出された場合）に、該リクエスト中のＳub−Ｓ＃で指定される記憶装置に切り出し信号（図１７の（３））を送出する。
【００７１】
以上、本発明の実施例を説明したが、本発明の情報処理装置は、図１、図５、図８、図１３などの構成に限られるものではない。例えば、キャッシュメモリはプロセッサ内のバッファ記憶だけでもよい（ＢＳ−ＭＳの二階層構成）。また、リクエスト送出制御ユニット（ＲＳＣ）は記憶装置側に設け、記憶装置間で正側／副側のリクエストを相互に伝達しあってもよい。チップ化は、プロセッサと記憶装置全体で１チップ化、プロセッサと記憶装置で個別にチップ化等、チップ化の単位は任意である。
【００７２】
図２１はプロセッサ３Ａと、記憶制御装置１Ａと、記憶ユニット１６１１，１６２１に装置構成が分割されている例を示す。参照数字にＡ（例えばプロセッサの３Ａ）を付したのは、図１３のＡを付さない参照数字の装置（例えばプロセッサの３）に対応し、同等ないしは類似している装置であることを示す。さらに図２１では、図１３と同様にプロセッサ、記憶制御装置、記憶ユニットが複数設けられるが、省略している。
【００７３】
図２１において、プロセッサ３Ａは処理装置３３とインターフェース変換ユニット（ＩＦＴ）１０００を含み、リクエスト送出制御ユニット（ＲＳＣ）３４Ａは記憶制御装置１Ａに含まれる。処理装置３３は２重化と無関係に記憶装置に対する読み出し、書き込みリクエストの送出と、ＢＳ内アドレスヘの無効化要求を受け付ける。ＩＦＴ１０００をプロセッサ毎に合わせて設計することにより、プロセッサとしては、２重化の構成をとらないシステムにも共通に組み込むことができる。
【００７４】
図１３に示した主記憶（ＭＳ）を構成している制御部と記憶部（ランダムアクセスメモリ）は、主記憶制御ユニット（ＭＳＣ）１６２０と記憶ユニット（ＲＡＭ）１６２１に分割され、また、ワーク記憶（ＷＳ）を構成している制御部と記憶部は、ワーク記憶制御ユニット（ＷＳＣ）１６１０と記憶ユニット（ＲＡＭ）１６１１に分割され、ＷＳＣ１６１０とＭＳＣ１６２０は記憶制御装置１Ａ内に配置され、ＲＡＭ１６１１，１６２１は記憶制御装置１Ａに接続する構成をとっている。このような構成を取ることにより、ＭＳＣ１６２０，ＷＳＣ１６１０で２重化と、接続するＲＡＭインターフェースに合わせて設計することにより、ＲＡＭはあるアドレスに対する読み出し／書き込の機能のみを備える２重化と無関係な通常のＲＡＭを準備すればよい。記憶制御ユニット１Ａの残りの構成は、図１３に示した記憶装置１内の対応するユニットと同じ構成、機能である。勿論、ＲＡＭ１６１１および１６２１を装置１Ａに内蔵する構成をとることもできる。
【００７５】
この様な構成を取ることにより、主として記憶制御装置１Ａを２重化を考慮した構成をとり、プロセッサおよびＲＡＭは２重化と無関係に通常のプロセッサおよびＲＡＭを使うことができる。また、これらの単位で１チップ化をすることが容易となる。
【００７６】
また、リクエストキュー１８３，１８４を１つのキューとして構成することもできる。この場合、リクエスト切り出しユニット１７はキューの各エントリに保持されるリクエストのプロセッサ番号Ｐ＃を見て、各Ｐ＃毎に独立したキューのごとく各Ｐ＃の先頭のリクエストの切り出しを行えばよい。
【００７７】
さらに、図２１の構成では、記憶制御ユニット１Ａと図示しない隣接の記憶制御装置１Ｂは独立の装置としているが、一体となった１つの記憶制御ユニットとして構成しても良い。
【００７８】
【発明の効果】
以上説明したように、本発明によれば、以下の効果が得られる。（１）２重化された記憶装置の処理量を均等化できる。（２）２重化された記憶装置の動作タイミングが異なっても２重化動作を矛盾無く継続できる。（３）キャッシュミスが発生しても、キャッシュミスによる処理時間増加を非２重化時と同等にできる。（４）キャッシュメモリを内部に持つプロセッサに対する無効化処理を非２重化時と同等にできる。
【図面の簡単な説明】
【図１】本発明の実施例１の全体構成図である。
【図２】本発明によるメモリマップの構成例である。
【図３】実施例１の動作例１を示すタイムチャートである。
【図４】実施例１の動作例２を示すタイムチャートである。
【図５】実施例１の他の全体構成図である。
【図６】本発明によるメモリマップの他の構成例である。
【図７】図６のメモリマップの絶対アドレスと物理アドレスの対応を示す図である。
【図８】本発明の実施例２の全体構成図である。
【図９】実施例２の動作例１を示すタイムチャートである。
【図１０】実施例２の動作例２を示すタイムチャートである。
【図１１】実施例２の動作例３を示すタイムチャートである。
【図１２】実施例２の動作例４を示すタイムチャートである。
【図１３】本発明の実施例３の全体構成図である。
【図１４】実施例３の動作例１を示すタイムチャートである。
【図１５】実施例３の動作例２を示すタイムチャートである。
【図１６】実施例３の動作例３を示すタイムチャートである。
【図１７】リクエストの形式例を示す図である。
【図１８】プロセッサ側のリクエスト送出制御ユニットの構成例を示す図である。
【図１９】リクエスト送出制御ユニット内の変換テーブルのデータ例を示す図である。
【図２０】記憶装置側のリクエスト切り出しユニットの構成例を示す図である。
【図２１】本発明の実施例の全体構成図である。
【符号の説明】
１，２      記憶装置、
３，４      プロセッサ、
１２，２２    切り出し信号線
３１，３２，４１，４２  リクエスト信号線
１３，１４，２３，２４  応答信号線
１５，２５    リクエスト制御ユニット
１６，２６    記憶ユニット
１６１，２６１  ワーク記憶
１６２，２６２  主記憶
１７，２７    リクエスト切り出しユニット
１８３，１８４，２８３，２８４  リクエストキュー
１９３，１９４，２９３，２９４  アドレス比較器
３３，４３    処理装置
３４，４４    リクエスト送出制御ユニット
３５，４５    バッファ記憶
３６，４６    演算ユニット
１０００      インターフェース変換ユニット
１６１０      ワーク記憶制御ユニット
１６１１，１６２１  記憶ユニット
１６２０      主記憶制御ユニット
【図１】
0003809930.tif 000002
【図２】
0003809930.tif 000003
【図３】
0003809930.tif 000004
【図４】
0003809930.tif 000005
【図５】
0003809930.tif 000006
【図６】
0003809930.tif 000007
【図７】
0003809930.tif 000008
【図８】
0003809930.tif 000009
【図９】
0003809930.tif 000010
【図１０】
0003809930.tif 000011
【図１１】
0003809930.tif 000012
【図１２】
0003809930.tif 000013
【図１３】
0003809930.tif 000014
【図１４】
0003809930.tif 000015
【図１５】
0003809930.tif 000016
【図１６】
0003809930.tif 000017
【図１７】
0003809930.tif 000018
【図１８】
0003809930.tif 000019
【図１９】
0003809930.tif 000020
【図２０】
0003809930.tif 000021
【図２１】
0003809930.tif 000022