(57)【要約】【課題】複数プロセッサのブート時におけるブートメモリへのアクセス回数を低減させ、全てのプロセッサがブートするまでの時間を短縮する。【解決手段】複数のプロセッサ１０１，１０２，１０３は、ブートメモリ４０１に格納された同一のブートコード４１１をフェッチすることで独立にブートする。これにより、複数プロセッサのブート時におけるブートメモリへのアクセス回数を低減させ、全てのプロセッサがブートするまでの時間を短縮できる。【選択図】図１
2010128577.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサと、
前記プロセッサのブートコードが格納されたブートメモリと、
前記ブートメモリへのアクセスを制御するメモリアクセス制御回路と、
前記プロセッサが前記ブートメモリへアクセスするためのシステムバスとを有し、
前記プロセッサは、前記ブートメモリに格納された同一のブートコードをフェッチすることで独立にブートすることを特徴とするメモリシステム。
【請求項２】
前記システムバスは、スプリット転送が可能なバスであり、
前記メモリアクセス制御回路は、前記システムバスからのアクセスを複数保持するアクセス保持手段を有しており、
前記アクセス保持手段は、同一アドレスに対する全ての前記プロセッサからのアクセスが終了していない場合、前記システムバスからの該当アドレス以外のアクセスを保持し、同一アドレスに対する全ての前記プロセッサからのアクセスが終了した場合、保持しているアクセスをフェッチ制御手段へ発行することを特徴とする請求項１に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサが搭載されたシステムにおけるブート時のメモリアクセス制御手法に関する。
【背景技術】
【０００２】
従来、複数プロセッサが同一のブートコードをフェッチすることで独立にブートする場合、それぞれのプロセッサがシステム起動時にブートメモリからブートコードをフェッチしてブートする。
【０００３】
複数プロセッサが独立にブートする方法として、複数プロセッサに優先度を割り当てる方法がある。以下、複数プロセッサが優先度順に起動する例を示す。
【０００４】
先ず、複数のプロセッサが搭載されたシステムにおいて、予め各プロセッサに優先度を割り当てておく。システム起動時に、各プロセッサが共にシステムバスに対してブートメモリからブートコードをフェッチするためのアクセスを行う。
【０００５】
システムバスは先ず最高優先度のプロセッサにバス権を与える。前記プロセッサはブートを完了するまで、ブートメモリに対して複数回のアクセスを行い、システムバスは前記プロセッサがブートを完了するまで、その他のプロセッサにはバス権を与えない。
【０００６】
最高優先度のプロセッサがブートを完了すると、システムバスは次に優先度の高いプロセッサにバス権を与える。前記プロセッサはブートを完了するまで、ブートメモリに対して複数回のアクセスを行い、システムバスは前記プロセッサがブートを完了するまでその他のプロセッサにはバス権を与えない。
【０００７】
このように優先度の高いプロセッサから順にバス権を与え、複数のプロセッサを優先度順にブートする。
【０００８】
【特許文献１】特開平０８−２７２７５６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、複数プロセッサが優先度順に起動する方法では、プロセッサの数だけブートメモリの同一アドレスへのリードアクセスが発生する。
【００１０】
一般的に、ブートメモリとしてフラッシュＲＯＭのような不揮発メモリデバイスが使用される。不揮発メモリの場合、メモリアクセスレイテンシが大きく、スピードの遅いメモリデバイスへのアクセス回数がプロセッサの個数に比例して増えるため、すべてのプロセッサがブートするまでに要する時間が長くなってしまうといった問題がある。
【００１１】
ブートメモリの同一アドレスへのアクセス回数を低減させる方法として、複数プロセッサで共有可能なキャッシュメモリを使用することが考えられる。あるプロセッサがブートメモリからフェッチしたデータを共有キャッシュメモリに保持することで、その他のプロセッサは同一アドレスへのアクセスを行う際、共有キャッシュメモリからフェッチすることが可能となる。
【００１２】
しかし、複数プロセッサのブート速度が異なる条件下でブートメモリの同一アドレスへのアクセス回数を低減させるためには、一定以上のサイズの共有キャッシュメモリを搭載することが必要になってしまうといった問題がある。
【００１３】
本発明は係る実情に鑑みて、複数プロセッサのブート時におけるブートメモリへのアクセス回数を低減させ、全てのプロセッサがブートするまでの時間を短縮することを目的とする。
【課題を解決するための手段】
【００１４】
本発明のメモリシステムは、複数のプロセッサと、前記プロセッサのブートコードが格納されたブートメモリと、前記ブートメモリへのアクセスを制御するメモリアクセス制御回路と、前記プロセッサが前記ブートメモリへアクセスするためのシステムバスとを有し、前記プロセッサは、前記ブートメモリに格納された同一のブートコードをフェッチすることで独立にブートすることを特徴とする。
【発明の効果】
【００１５】
本発明によれば、複数プロセッサのブート時におけるブートメモリへのアクセス回数を低減させ、全てのプロセッサがブートするまでの時間を短縮することができる。
【発明を実施するための最良の形態】
【００１６】
（第１の実施の形態）
図１は、本発明のメモリシステムの第１の実施の形態を表した構成図である。本実施の形態に係るメモリシステムは複数のプロセッサを有する。図１において、１０１〜１０３はプロセッサである。プロセッサ１０１〜１０３は、システム起動時にブートメモリ４０１に格納されたブートコード４１１をフェッチすることでブートする。
【００１７】
２０１はシステムバスである。システムバス２０１は、プロセッサ１０１〜１０３がブートメモリ４０１へアクセスする際に使用されるバスであり、メモリアクセス制御回路３０１からの再送要求を受け付け、プロセッサ１０１〜１０３へ再送要求を発行することが可能である。
【００１８】
３０１はメモリアクセス制御回路である。メモリアクセス制御回路３０１はシステムバス２０１を介してプロセッサ１０１〜１０３のアクセスを受信し、そのアクセスに応じてブートメモリ４０１へのアクセスを制御する。
【００１９】
３１１はブートアドレス保持バッファである。ブートアドレス保持バッファ３１１は、プロセッサ１０１〜１０３のブートアドレスを保持する。
【００２０】
本実施の形態では、メモリアクセス制御回路３０１の設計時にバッファに固定値(初期値)として設定しておくものとするが、外部のピンからの設定やマスターＣＰＵによるプログラミングレジスタの設定であっても構わない。
【００２１】
３１２は終了アドレス保持バッファである。終了アドレス保持バッファ３１２は、プロセッサ１０１〜１０３がブートを終了するアドレスを保持する。
【００２２】
本実施の形態では、メモリアクセス制御回路３０１の設計時にバッファに固定値(初期値)として設定しておくものとするが、外部のピンからの設定やマスターＣＰＵによるプログラミングレジスタの設定であっても構わない。
【００２３】
３１３はフェッチアドレス格納バッファである。フェッチアドレス格納バッファ３１３は、フェッチ制御回路３１６がブートメモリ４０１から最後にリードしたアドレスを保持するバッファである。
【００２４】
３１４はフェッチデータ格納バッファである。フェッチデータ格納バッファ３１４は、フェッチ制御回路３１６がブートメモリ４０１から最後にリードしたデータを保持するバッファである。
【００２５】
３１５はフェッチ状況判定回路である。フェッチ状況判定回路３１５は、内部にカウンタを持ち、フェッチアドレス格納バッファ３１３に格納されているアドレスに全てのプロセッサ１０１〜１０３がアクセスしたか否かを判定する。内部カウンタはフェッチアドレス格納バッファ３１３に格納されたアドレスに対するフェッチ回数をカウントする。カウント値に示されたフェッチ回数とプロセッサ個数保持バッファ３１７に保持されたプロセッサの個数情報を比較し、その結果が一致した場合、全てのプロセッサ１０１〜１０３がアクセスしたと判定する。
【００２６】
３１６はフェッチ制御回路である。フェッチ制御回路３１６は、ブートアドレス保持バッファ３１１、終了アドレス保持バッファ３１２、フェッチアドレス格納バッファ３１３、フェッチ状況判定回路３１５の状態によってフェッチデータ送信を制御する。
【００２７】
３１７はプロセッサ個数保持バッファである。プロセッサ個数保持バッファ３１７は、プロセッサの個数情報を保持する。
【００２８】
本実施の形態では、メモリアクセス制御回路３０１の設計時にバッファに固定値(初期値)として設定しておくものとするが、外部のピンからの設定やマスターＣＰＵによるプログラミングレジスタの設定であっても構わない。
【００２９】
４０１はブートメモリである。ブートメモリ４０１は、プロセッサ１０１〜１０３のブートコード４１１を格納する。４１１はブートコードである。ブートコード４１１は、プロセッサ１０１〜１０３がブートするために必要なプログラムである。
【００３０】
次に、本発明の第１の実施の形態におけるメモリシステムの動作を図１、図２を用いて説明する。ここでは説明を簡単にするために、各プロセッサはアドレス０ｘ０から０ｘ１０００までのブートコードを４バイト単位でシーケンシャルにフェッチするものとする。ブートアドレスは、０ｘ０であり、０ｘ０から順に０ｘ４，０ｘ８，０ｘＣ、０ｘ１０，…，０ｘ１０００というアクセスをする。
【００３１】
システムを起動すると、メモリアクセス制御回路３０１はプロセッサ１０１〜１０３からのフェッチ要求待ちとなる（ステップＳ７０１）。
【００３２】
プロセッサ１０１〜１０３いずれかからフェッチ要求を受信すると、フェッチ制御回路３１６は、ブートアドレス保持バッファ３１１の保持するブートアドレスと一致するか否かを判断する（ステップＳ７０２）。ここでは、プロセッサ１０１のフェッチ要求を受信したものとする。また、システム起動時なので、そのフェッチ要求はブートアドレス（０ｘ０）に対するものである。
【００３３】
ブートアドレスが一致したら、フェッチ制御回路３１６はブートメモリ４０１の該当アドレスからデータを読み出す（ステップＳ７０３）。フェッチ制御回路３１６は読み出したデータをフェッチデータ格納バッファ３１４に格納する。また、アドレス０ｘ０をフェッチアドレス格納バッファ３１３に格納する（ステップＳ７０４）。
【００３４】
フェッチ状況判定回路３１５は、フェッチアドレス格納バッファ３１３にアドレスが格納されたことを検知し、内部のカウンタを１に設定する（Ｃｏｕｎｔ＝１）。また、プロセッサ個数保持バッファ３１７に保持されたプロセッサの個数情報と比較し、その結果が一致しないので、フェッチ制御回路３１６に対して全てのプロセッサがアクセスしていないことを示すフラグ（信号）を設定する。
【００３５】
これと同時に、フェッチ制御回路３１６は、読み出したデータをシステムバス２０１を介してプロセッサ１０１に送信する（ステップＳ７０５）。
【００３６】
次に、メモリアクセス制御回路３０１は、プロセッサ１０１〜１０３からのフェッチ要求待ち状態となる（ステップＳ７０６）。
【００３７】
次に、プロセッサ１０２またはプロセッサ１０３からアドレス０ｘ０へのフェッチ要求を受信すると、フェッチ制御回路３１６は、フェッチ要求のアドレスがフェッチアドレス格納バッファ３１３と一致するか否かを判定する（ステップＳ７０７）。ここでは、プロセッサ１０２からのフェッチ要求を受信したとする。
【００３８】
フェッチ制御回路３１６は、フェッチ要求のアドレスとフェッチアドレス格納バッファ３１３に格納されたアドレスが一致するものと判断し、フェッチデータ格納バッファ３１４に格納されたデータをプロセッサ１０２へ送信する（ステップＳ７０８）。
【００３９】
フェッチ状況判定回路３１５は２つ目のプロセッサからフェッチアドレス格納バッファ３１３に格納されたアドレスへアクセスされたことを検知し、内部のカウンタをインクリメントする（Ｃｏｕｎｔ＝２）。
【００４０】
また、プロセッサ個数保持バッファ３１７に保持されたプロセッサの個数情報と比較し、その結果が一致しないので、フェッチ制御回路３１６に対して全てのプロセッサがアクセスしていないことを示すフラグ（信号）を設定する。
【００４１】
フェッチ制御回路３１６は、前記フェッチ要求のアドレスが終了アドレス保持バッファ３１２に保持されているアドレスか否かを判定する（ステップＳ７０９）。ここでは終了アドレス０ｘ１０００ではないので、再度プロセッサ１０１〜１０３からのフェッチ要求待ち状態となる（ステップＳ７０６）。
【００４２】
ここで、プロセッサ１０１からのフェッチ要求だったとすると、前記フェッチ要求のアドレスは０ｘ４であり、フェッチアドレス格納バッファ３１３に格納されたアドレス０ｘ０とは一致しない（ステップＳ７０７）。
【００４３】
フェッチ制御回路３１６は、フェッチ状況判定回路３１５からのフラグ（信号）から全てのプロセッサがフェッチアドレス格納バッファ３１３に格納されたアドレス０ｘ０へアクセスしていないかどうか確認する。アクセスしていないことを検知したら、プロセッサ１０１へ再送要求を送信する（ステップＳ７１２，Ｓ７１３）。
【００４４】
次に、プロセッサ１０３からのアドレス０ｘ０へのフェッチ要求を受信すると、フェッチ制御回路３１６は、フェッチ要求のアドレスがフェッチアドレス格納バッファ３１３と一致するか否かを判定する（ステップＳ７０７）。
【００４５】
フェッチ制御回路３１６は、フェッチ要求のアドレスとフェッチアドレス格納バッファ３１３に格納されたアドレスが一致するものと判断し、フェッチデータ格納バッファ３１４に格納されたデータをプロセッサ１０３へ送信する（ステップＳ７０８）。
【００４６】
フェッチ状況判定回路３１５は３つ目のプロセッサからフェッチアドレス格納バッファ３１３に格納されたアドレスへアクセスされたことを検知し、内部のカウンタをインクリメントする（Ｃｏｕｎｔ＝３）。
【００４７】
また、プロセッサ個数保持バッファ３１７に保持されたプロセッサの個数情報と比較し、その結果が一致するので、フェッチ制御回路３１６に対して全てのプロセッサがアクセスしたことを示すフラグ（信号）を設定する。
【００４８】
ここで、プロセッサ１０３ではなく、プロセッサ１０１またはプロセッサ１０２からのフェッチ要求だったとすると、前記フェッチ要求のアドレスは０ｘ４である。そのため、フェッチアドレス格納バッファ３１３に格納されたアドレス０ｘ０とは一致しない（ステップＳ７０７）。
【００４９】
フェッチ制御回路３１６はフェッチ状況判定回路３１５からのフラグ（信号）から全てのプロセッサがフェッチアドレス格納バッファ３１３に格納されたアドレス０ｘ０へアクセスしていないことを検知する。
【００５０】
そして、プロセッサ１０１またはプロセッサ１０２へ再送要求を送信する（ステップＳ７１２，Ｓ７１３）。
【００５１】
次にプロセッサ１０１〜１０３いずれかからフェッチ要求を受信する。フェッチ制御回路３１６は、フェッチ要求のアドレスがフェッチアドレス格納バッファ３１３と一致するか否かを判断する（ステップＳ７０７）。
【００５２】
ここでプロセッサ１０１〜１０３からのフェッチ要求アドレスは０ｘ４である。フェッチ制御回路３１６は、フェッチ要求のアドレスとフェッチアドレス格納バッファ３１３に格納されたアドレスが一致しないものと判断する。
【００５３】
フェッチ制御回路３１６はフェッチ状況判定回路３１５からのフラグからすべてのプロセッサがフェッチアドレス格納バッファ３１３に格納されたアドレス０ｘ０へアクセスしたことを検知している。そのため、ブートメモリ４０１の該当アドレスからデータを読み出す（ステップＳ７０３）。
【００５４】
フェッチ制御回路３１６は読み出したデータをフェッチデータ格納バッファ３１４に格納する。また、アドレス０ｘ４をフェッチアドレス格納バッファ３１３に格納する（ステップＳ７０４）。
【００５５】
フェッチ状況判定回路３１５はフェッチアドレス格納バッファ３１３にアドレスが格納されたことを検知し、１つのプロセッサがフェッチアドレス格納バッファ３１３に格納されたアドレスにアクセスしたと判断する。それと同時に、フェッチ制御回路３１６は読み出したデータをシステムバス２０１を介してプロセッサ１０１に送信する（ステップＳ７０５）。
【００５６】
メモリアクセス制御回路３０１はプロセッサ１０１〜１０３からのフェッチ要求待ち状態となる（ステップＳ７０６）。
【００５７】
このように、メモリアクセス制御回路３０１は、全てのプロセッサ１０１〜１０３が同一アドレスからのフェッチを完了するまで、次のアドレスへのフェッチを受け付けない。よって、ブート時にメモリアクセス制御回路３０１がブートメモリの同一アドレスへのアクセス回数が１回だけになる。すなわち、各プロセッサは、ブートメモリに格納された同一のブートコードをフェッチすることで独立にブートすることになる。
【００５８】
全てのプロセッサ１０１〜１０３が終了アドレス保持バッファ３１２に保持されたアドレス０ｘ１０００からのフェッチを終了すると、フェッチ制御回路３１６は、フェッチ状況判定回路３１５の機能を停止する。その後のプロセッサからのフェッチに対しては、ブートメモリの該当アドレスからデータを読み出して返すように動作する。このとき、１つ以上のプロセッサがアドレス０ｘ１０００からのフェッチを行う。
【００５９】
全てのプロセッサがアドレス０ｘ１０００からのフェッチを行っていない状態での０ｘ１０００以外のアドレスへのアクセスに対してはアクセス元のプロセッサに再送要求を送信する。
【００６０】
（第２の実施の形態）
図３は、本発明のメモリシステムにおける第２の実施の形態を表した構成図である。図３において、１０１〜１０３はプロセッサである。プロセッサ１０１〜１０３は、システム起動時にブートメモリ４０１に格納されたブートコード４１１をフェッチすることでブートする。なお、第１の実施の形態と機能が同じものは、同一符号を付す。
【００６１】
２０１はシステムバスである。システムバス２０１は、プロセッサ１０１〜１０３がブートメモリ４０１へアクセスする際に使用されるバスであり、スプリット転送が可能である。
【００６２】
３０１はメモリアクセス制御回路である。メモリアクセス制御回路３０１はシステムバス２０１を介してプロセッサ１０１〜１０３のアクセスを受信し、そのアクセスに応じてブートメモリ４０１へのアクセスを制御する。
【００６３】
３１１はブートアドレス保持バッファである。ブートアドレス保持バッファ３１１は、プロセッサ１０１〜１０３のブートアドレスを保持する。
【００６４】
本実施の形態では、メモリアクセス制御回路３０１の設計時にバッファに固定値(初期値)として設定しておくものとするが、外部のピンからの設定やマスターＣＰＵによるプログラミングレジスタの設定であっても構わない。
【００６５】
３１２は終了アドレス保持バッファである。終了アドレス保持バッファ３１２は、プロセッサ１０１〜１０３がブートを終了するアドレスを保持する。
【００６６】
本実施の形態では、メモリアクセス制御回路３０１の設計時にバッファに固定値(初期値)として設定しておくものとするが、外部のピンからの設定やマスターＣＰＵによるプログラミングレジスタの設定であっても構わない。
【００６７】
３１３はフェッチアドレス格納バッファである。フェッチアドレス格納バッファ３１３は、フェッチ制御回路３１６がブートメモリ４０１から最後にリードしたアドレスを保持するバッファである。
【００６８】
３１４はフェッチデータ格納バッファである。フェッチデータ格納バッファ３１４は、フェッチ制御回路３１６がブートメモリ４０１から最後にリードしたデータを保持するバッファである。
【００６９】
３１５はフェッチ状況判定回路である。フェッチ状況判定回路３１５は、内部にカウンタを持ち、フェッチアドレス格納バッファ３１３に格納されているアドレスに全てのプロセッサ１０１〜１０３がアクセスしたか否かを判定する。内部カウンタはフェッチアドレス格納バッファ３１３に格納されたアドレスに対するフェッチ回数をカウントする。
【００７０】
カウント値に示されたフェッチ回数とプロセッサ個数保持バッファ３１７に保持されたプロセッサの個数情報を比較し、その結果が一致した場合、全てのプロセッサ１０１〜１０３がアクセスしたと判定する。
【００７１】
３１６はフェッチ制御回路である。フェッチ制御回路３１６は、ブートアドレス保持バッファ３１１、終了アドレス保持バッファ３１２、フェッチアドレス格納バッファ３１３、フェッチ状況判定回路３１５の状態によって、フェッチデータ送信を制御する。
【００７２】
３１７はプロセッサ個数保持バッファである。プロセッサ個数保持バッファ３１７は、プロセッサの個数情報を保持する。
【００７３】
本実施の形態では、メモリアクセス制御回路３０１の設計時にバッファに固定値(初期値)として設定しておくものとするが、外部のピンからの設定やマスターＣＰＵによるプログラミングレジスタの設定であっても構わない。
【００７４】
３１８はアクセス保持回路である。アクセス保持回路３１８は、アクセスのアドレスに応じて、アクセスを複数保持し、保持したアクセスの順序を変更しフェッチ制御回路３１６へ発行する。詳しくは、アクセス保持回路３１８は、同一アドレスに対する全てのプロセッサからのアクセスが終了していない場合、システムバス２０１からの該当アドレス以外のアクセスを保持する。そして、同一アドレスに対する全てのプロセッサからのアクセスが終了した場合、保持しているアクセスをフェッチ制御回路３１６へ発行する。
【００７５】
システム起動時はアクセスのアドレスがブートアドレスであるか否かを判定し、ブートアドレスであれば前記アクセスをフェッチ制御回路３１６へ発行し、ブートアドレスでない場合は前記アクセスを保持する。
【００７６】
その後は、フェッチ状況判定回路３１５が出力する全てのプロセッサがフェッチアドレス格納バッファ３１３に格納されたアドレスへのアクセスを行ったか否かを示すフラグを参照する。これにより、アクセスを保持するかフェッチ制御回路３１６へ発行するかを判定する。
【００７７】
フラグ（信号）が全てのプロセッサがアクセスを行ったことを示している場合、フェッチ要求アドレスがフェッチアドレス格納バッファ３１３に格納されたアドレスでなくてもフェッチ制御回路３１６へ発行する。
【００７８】
フラグ（信号）が全てのプロセッサがアクセスを行っていないことを示している場合、フェッチ要求アドレスがフェッチアドレス格納バッファ３１３に格納されたアドレスはフェッチ制御回路３１６へ発行し、それ以外のアクセスは保持する。
【００７９】
保持したアクセスは、フェッチ状況判定回路３１５が出力する全てのプロセッサがフェッチアドレス格納バッファ３１３に格納されたアドレスへのアクセスを行ったか否かを示すフラグが全てのプロセッサがアクセスを行ったことを示したか否かを判定する。
【００８０】
そして、判定した際にフェッチ制御回路３１６へ発行される。全てのプロセッサのブート終了後はアドレスを保持せずにそのままフェッチ制御回路３１６へ発行する。４０１はブートメモリである。ブートメモリ４０１は、プロセッサ１０１〜１０３のブートコード４１１を格納する。
【００８１】
４１１はブートコードである。ブートコード４１１は、プロセッサ１０１〜１０３がブートするために必要なプログラムである。
【００８２】
本発明の第２の実施の形態におけるメモリシステムの動作を図３、図４を用いて説明する。ここでは説明を簡単にするために、各プロセッサはアドレス０ｘ０から０ｘ１０００までのブートコードを４バイト単位でシーケンシャルにフェッチするものとする。ブートアドレスは０ｘ０であり、０ｘ０から順に０ｘ４，０ｘ８，０ｘＣ，０ｘ１０，…，０ｘ１０００というアクセスをするものとする。
【００８３】
システムを起動すると、メモリアクセス制御回路３０１はプロセッサ１０１〜１０３からのフェッチ要求待ちとなる（ステップＳ８０１）。
【００８４】
プロセッサ１０１〜１０３いずれかからフェッチ要求を受信すると、アクセス保持回路３１８は、ブートアドレス保持バッファ３１１の保持するブートアドレスと一致するか否かを判断する（ステップＳ８０２）。ここでは、プロセッサ１０１のフェッチ要求を受信したものとする。また、システム起動時なので、そのフェッチ要求はブートアドレス(０ｘ０)に対するものである。フェッチ要求のアドレスがブートアドレスであるので、アクセス保持回路３１８は前記フェッチ要求をフェッチ制御回路３１６へ発行する。
【００８５】
フェッチ要求を受信すると、フェッチ制御回路３１６は、ブートアドレス保持バッファ３１１の保持するブートアドレスと一致するか否かを判断する（ステップＳ８０２）。ここでは、プロセッサ１０１のフェッチ要求を受信したものとする。また、システム起動時なので、そのフェッチ要求はブートアドレス０ｘ０に対するものである。
【００８６】
フェッチ制御回路３１６はブートメモリ４０１の該当アドレスからデータを読み出す（ステップＳ８０３）。
【００８７】
フェッチ制御回路３１６は読み出したデータをフェッチデータ格納バッファ３１４に格納する。また、アドレス０ｘ０をフェッチアドレス格納バッファ３１３に格納する（ステップＳ８０４）。
【００８８】
フェッチ状況判定回路３１５はフェッチアドレス格納バッファ３１３にアドレスが格納されたことを検知し、内部のカウンタを１に設定する（Ｃｏｕｎｔ＝１）。また、プロセッサ個数保持バッファ３１７に保持されたプロセッサの個数情報と比較し、その結果が一致しないので、フェッチ制御回路３１６に対して全てのプロセッサがアクセスしていないことを示すフラグ（信号）を設定する。
【００８９】
それと同時に、フェッチ制御回路３１６は読み出したデータをシステムバス２０１を介してプロセッサ１０１に送信する（ステップＳ８０５）。
【００９０】
メモリアクセス制御回路３０１はプロセッサ１０１〜１０３からのフェッチ要求待ち状態となる（ステップＳ８０６）。
【００９１】
次に、プロセッサ１０２またはプロセッサ１０３からアドレス０ｘ０へのフェッチ要求を受信すると、アクセス保持回路３１８は、前記フェッチ要求をフェッチ制御回路３１６に発行する。
【００９２】
フェッチ制御回路３１６は、フェッチ要求のアドレスがフェッチアドレス格納バッファ３１３と一致するか否かを判定する（ステップＳ８０７）。ここでは、プロセッサ１０２からのフェッチ要求を受信したとする。
【００９３】
フェッチ制御回路３１６は、フェッチ要求のアドレスとフェッチアドレス格納バッファ３１３に格納されたアドレスが一致するものと判断し、フェッチデータ格納バッファ３１４に格納されたデータをプロセッサ１０２へ送信する（ステップＳ８０８）。
【００９４】
フェッチ状況判定回路３１５は２つ目のプロセッサからフェッチアドレス格納バッファ３１３に格納されたアドレスへアクセスされたことを検知し、内部のカウンタをインクリメントする（Ｃｏｕｎｔ＝２）。
【００９５】
また、プロセッサ個数保持バッファ３１７に保持されたプロセッサの個数情報と比較し、その結果が一致しないので、フェッチ制御回路３１６とアクセス保持回路３１８に対して全てのプロセッサがアクセスしていないことを示すフラグ（信号）を設定する。
【００９６】
フェッチ制御回路３１６は、前記フェッチ要求のアドレスが終了アドレス保持バッファ３１２に保持されているアドレスか否かを判定する（ステップＳ８０９）。ここでは終了アドレス０ｘ１０００ではないので、再度プロセッサ１０１〜１０３からのフェッチ要求待ち状態となる（ステップＳ８０６）。
【００９７】
ここで、プロセッサ１０１からのフェッチ要求だったとすると、前記フェッチ要求のアドレスは０ｘ４であり、フェッチアドレス格納バッファ３１３に格納されたアドレス０ｘ０とは一致しない（ステップＳ８０７）。
【００９８】
アクセス保持回路３１８はフェッチ状況判定回路３１５からのフラグから全てのプロセッサがフェッチアドレス格納バッファ３１３に格納されたアドレス０ｘ０へアクセスしていないことを検知する。
【００９９】
そして、前記アクセスをフェッチ制御回路３１６へ発行せずに保持する（ステップＳ８１３）。保持したアクセスは、フェッチ状況判定回路３１５からのフラグ（信号）から全てのプロセッサがフェッチアドレス格納バッファ３１３に格納されたアドレス０ｘ０へアクセスしたことを検知した際にフェッチ制御回路３１６へ発行される。
【０１００】
次に、プロセッサ１０３からのアドレス０ｘ０へのフェッチ要求を受信すると、アクセス保持回路３１８は、前記フェッチ要求をフェッチ制御回路３１６に発行する。フェッチ制御回路３１６は、フェッチ要求のアドレスがフェッチアドレス格納バッファ３１３と一致するか否かを判定する（ステップＳ８０７）。
【０１０１】
フェッチ制御回路３１６は、フェッチ要求のアドレスとフェッチアドレス格納バッファ３１３に格納されたアドレスが一致するものと判断し、フェッチデータ格納バッファ３１４に格納されたデータをプロセッサ１０３へ送信する（ステップＳ８０８）。
【０１０２】
フェッチ状況判定回路３１５は３つ目のプロセッサからフェッチアドレス格納バッファ３１３に格納されたアドレスへアクセスされたことを検知し、内部のカウンタをインクリメントする（Ｃｏｕｎｔ＝３）。
【０１０３】
また、プロセッサ個数保持バッファ３１７に保持されたプロセッサの個数情報と比較し、その結果が一致するので、フェッチ制御回路３１６とアクセス保持回路３１８に対して全てのプロセッサがアクセスしたことを示すフラグ（信号）を設定する。
【０１０４】
ここで、プロセッサ１０３ではなく、プロセッサ１０１又はプロセッサ１０２からのフェッチ要求だったとすると、前記フェッチ要求のアドレスは０ｘ４である。そのため、フェッチアドレス格納バッファ３１３に格納されたアドレス０ｘ０とは一致しない（ステップＳ８０７）。
【０１０５】
アクセス保持回路３１８はフェッチ状況判定回路３１５からのフラグ（信号）から全てのプロセッサがフェッチアドレス格納バッファ３１３に格納されたアドレス０ｘ０へアクセスしていないことを検知する。
【０１０６】
そして、前記アクセスをフェッチ制御回路３１６へ発行せずに保持する（ステップＳ８１３）。
【０１０７】
保持したアクセスは、フェッチ状況判定回路３１５からのフラグ（信号）から全てのプロセッサがフェッチアドレス格納バッファ３１３に格納されたアドレス０ｘ０へアクセスしたことを検知した際にフェッチ制御回路３１６へ発行する。
【０１０８】
次にプロセッサ１０１〜１０３のいずれかからフェッチ要求を受信すると、アクセス保持回路３１８は、前記フェッチ要求をフェッチ制御回路３１６に発行する。フェッチ制御回路３１６は、フェッチ要求のアドレスがフェッチアドレス格納バッファ３１３と一致するか否かを判断する（ステップＳ８０７）。
【０１０９】
ここでプロセッサ１０１〜１０３からのフェッチ要求アドレスは０ｘ４であり、フェッチアドレス格納バッファ３１３に格納されたアドレス０ｘ０とは一致しない。フェッチ制御回路３１６は、フェッチ要求のアドレスとフェッチアドレス格納バッファ３１３に格納されたアドレスが一致しないものと判断する。
【０１１０】
フェッチ制御回路３１６は、フェッチ状況判定回路３１５からのフラグ（信号）から全てのプロセッサがフェッチアドレス格納バッファ３１３に格納されたアドレス０ｘ０へアクセスしたことを検知する。そして、ブートメモリ４０１の該当アドレスからデータを読み出す（ステップＳ８０３）。
【０１１１】
フェッチ制御回路３１６は読み出したデータをフェッチデータ格納バッファ３１４に格納する。また、アドレス０ｘ４をフェッチアドレス格納バッファ３１３に格納する（ステップＳ８０４）。
【０１１２】
フェッチ状況判定回路３１５はフェッチアドレス格納バッファ３１３にアドレスが格納されたことを検知し、１つのプロセッサがフェッチアドレス格納バッファ３１３に格納されたアドレスにアクセスしたと判断する。それと同時に、フェッチ制御回路３１６は読み出したデータをシステムバス２０１を介してプロセッサ１０１に送信する（ステップＳ８０５）。
【０１１３】
メモリアクセス制御回路３０１はプロセッサ１０１〜１０３からのフェッチ要求待ち状態となる（ステップＳ８０６）。このように、メモリアクセス制御回路３０１は、全てのプロセッサ１０１〜１０３が同一アドレスからのフェッチを完了するまで、次のアドレスへのフェッチ要求をフェッチ制御回路３１６へ発行せずに保持する。
【０１１４】
全てのプロセッサ１０１〜１０３が同一アドレスからのフェッチを完了すると、保持したフェッチ要求をフェッチ制御回路３１６へ発行する。よって、メモリアクセス制御回路３０１がブートメモリの同一アドレスへのアクセス回数が１回だけになる。
【０１１５】
全てのプロセッサ１０１〜１０３が終了アドレス保持バッファ３１２に保持されたアドレス０ｘ１０００からのフェッチを終了すると、フェッチ制御回路３１６は、フェッチ状況判定回路３１５の機能を停止する。その後のプロセッサからのフェッチに対しては、ブートメモリの該当アドレスからデータを読み出して返すように動作する。
【０１１６】
このとき、１つ以上のプロセッサがアドレス０ｘ１０００からのフェッチを行い、かつ全てのプロセッサがアドレス０ｘ１０００からのフェッチを行っていない状態での０ｘ１０００以外のアドレスへのアクセスはフェッチ制御回路３１６へ発行せずに保持する。保持したアクセスは、フェッチ状況判定回路３１５からのフラグ（信号）から全てのプロセッサがフェッチアドレス格納バッファ３１３に格納されたアドレス０ｘ０へアクセスしたことを検知した際にフェッチ制御回路３１６へ発行される。
【０１１７】
なお、第１の実施の形態、第２の実施の形態では説明を簡単にするために、プロセッサのフェッチアドレスはシーケンシャルに変化するものとしたが、そのアドレスはシーケンシャルでなくても構わない。
【０１１８】
また、本発明におけるメモリアクセス制御回路は１つのアドレスに対するアクセスがプロセッサの個数回発生しない限り、次のアドレスへのアクセスを受け付けない。よって、ジャンプ命令等により次のフェッチアドレスが前のフェッチアドレスとは連続しない場合であってもその効果は変わらない。
【図面の簡単な説明】
【０１１９】
【図１】本発明のメモリシステムの第１の実施形態を表した構成図である。
【図２】本発明のメモリシステムの第１の実施形態におけるフローチャートである。
【図３】本発明のメモリシステムの第２の実施形態を表した構成図である。
【図４】本発明のメモリシステムの第２の実施形態におけるフローチャートである。
【符号の説明】
【０１２０】
１０１，１０２，１０３  プロセッサ
２０１  システムバス
３０１  メモリアクセス制御回路
３１１  ブートアドレス保持バッファ
３１２  終了アドレス保持バッファ
３１３  フェッチアドレス格納バッファ
３１４  フェッチデータ格納バッファ
３１５  フェッチ状況判定回路
３１６  フェッチ制御回路
３１７  プロセッサ個数保持バッファ
３１８  アクセス保持回路
４０１  ブートメモリ
４０２  ブートコード
【図１】
2010128577.tif 000003
【図２】
2010128577.tif 000004
【図３】
2010128577.tif 000005
【図４】
2010128577.tif 000006