(57)【特許請求の範囲】
【請求項１】
所定処理を示す所定処理情報を含む処理情報を格納する領域であって、前記所定処理情報が格納されたか否かを示す特定情報を有する領域を複数有する記憶部と、
前記処理情報を受信し、複数の前記領域の中の受信した前記処理情報を格納する領域における前記特定情報を前記所定処理が有ることを示すように変更するとともに、受信した前記処理情報を前記領域に格納する要求管理部と、
前記所定処理の実行要求を受けて、前記特定情報を予め決められた処理単位分前記記憶部から取得する取得部と、
前記取得部により取得された前記特定情報を基に、前記記憶部から前記所定処理情報を取得し、取得した前記所定処理情報にしたがって前記所定処理を実行する処理実行部と
を備えたことを特徴とする情報処理装置。
【請求項２】
前記特定情報は、前記記憶部における各格納領域の予め決められた位置に付加され、
前記取得部は、前記記憶部における各前記格納領域の前記予め決められた位置から前記特定情報を取得する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記所定処理情報を格納する優先記憶部を有し、
前記要求管理部は、受信した前記処理情報が前記所定処理情報の場合、前記優先記憶部に空きが有れば前記優先記憶部に受信した前記処理情報を格納し、前記優先記憶部に空きが無ければ前記記憶部に受信した前記処理情報を格納し、
前記取得部は、前記優先記憶部に前記所定処理情報が格納された場合、前記優先記憶部から前記所定処理情報を取得し、前記優先記憶部に格納された前記所定処理情報を全て取得した後に、前記記憶部からの取得を行い、
前記処理実行部は、前記取得部が前記優先記憶部から前記所定処理情報を取得した場合、前記取得部により取得された前記所定処理情報にしたがって前記所定処理を実行する
ことを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
第１情報処理装置及び第２情報処理装置を有する情報処理システムであって、
前記第１情報処理装置は、
前記第２情報処理装置に所定処理を示す所定処理情報を含む処理情報を送信する送信部を備え、
前記第１情報処理装置は、
前記処理情報を格納する領域であって、前記所定処理情報が格納されたか否かを示す特定情報を有する領域を複数有する記憶部と、
前記処理情報を前記第２情報処理装置から受信し、複数の前記領域の中の受信した前記処理情報を格納する領域における前記特定情報を前記所定処理が有ることを示すように変更するとともに、受信した前記処理情報を前記領域に格納する要求管理部と、
前記第２情報処理装置から前記所定処理の実行要求を受けて、前記特定情報を予め決められた処理単位分前記記憶部から取得する取得部と、
前記取得部により取得された特定情報を基に、前記記憶部から前記所定処理情報を取得し、取得した前記処理情報にしたがって前記所定処理を実行する処理実行部とを備えた
ことを特徴とする情報処理システム。
【請求項５】
所定処理を示す所定処理情報を受信し、
前記所定処理情報を含む処理情報を格納する領域であって、前記所定処理情報が格納されたか否かを示す特定情報を有する複数の領域を有する記憶部の中から、前記受信した前記特定情報を格納する領域を選択し、
前記選択した領域における前記特定情報を前記所定処理が有ることを示すように変更し、
受信した前記処理情報を選択した前記領域に格納し、
前記所定処理の実行要求を受信し、
前記特定情報を予め決められた処理単位分前記記憶部から取得し、
取得した前記特定情報を基に、前記記憶部から前記所定処理情報を取得し、
取得した前記所定処理情報にしたがって前記所定処理を実行する
ことを特徴とする割込装置制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム及び割込装置制御方法に関する。
【背景技術】
【０００２】
従来、複数のソフトウェアが連係して処理を実行する際に、各ソフトウェアが用いるデータを送受信するプロセス間通信（ＩＰＣ：Inter  Process  Communication）の技術が知られている。このようなプロセス間通信を行う技術の一例として、キューを用いてプロセス間通信を行う技術がある。
【０００３】
また、情報処理システムは、それぞれ個別のＣＰＵ（Central  Processing  Unit）を備えた複数のノードを有するものが多い。そして、そのような情報処理システムは、複数のＣＰＵがそれぞれ異なるプロセスを実行するマルチノードシステムの技術が用いられることが一般的である。このようなマルチノードシステムの技術の一例として、データをキャッシュする機能を有するＣＰＵを複数有し、各ＣＰＵがそれぞれ異なるプロセスを同時に実行する技術が知られている。さらには、各ＣＰＵがそれぞれ独立したＯＳ（Operating  System）を実行し、ＣＰＵ間で一部のメモリ領域を共有する、共有メモリシステムの技術が知られている。この様な構成とする事で、情報処理システム全体の処理能力をより向上させる事ができ、さらに各ノードでＯＳが個別に動作する事で、エラーの波及を防止でき、システムの信頼性及び可用性を向上させたＨＡ（High  Availability）システムを構築する事ができる。
【０００４】
マルチノードシステムにおいて、例えば、各ノードは、ローカルメモリ、ＨＰＶ（Hypervisor）ソフト、ＯＳ、デバイスドライバを有し、それぞれ異なるユーザプロセスを同時に実行する。なお、ＨＰＶソフトとは、各ノードが稼働させる仮想マシンの管理を行う管理ソフトウェアである。このような情報処理システムでは、各ノードが共有する共有メモリにライトポインタとリードポインタとを格納することでキューを実現し、各ノードの間でユーザプロセス間のプロセス間通信を行う。
【０００５】
ここで、プロセス間通信における送信側ノード及び受信側ノードの動作について、具体的に説明する。送信側ノードには、コア又はスレッド毎に専用の送信メッセージレジスタが用意される。そして、送信側ノードのＣＰＵにより実行されるアプリケーションソフトウェアがこのレジスタを直接操作することで、メッセージが送信される。送信側ノードから送信されるメッセージは、例えば、宛先ＣＰＵＩＤ（Identifier）及びレジスタセット識別ＩＤを含む。
【０００６】
受信側ノードは、アドレスレジスタ、リードポインタ、ライトポインタなどを有するレジスタセットを複数有する。そして、受信側ノードは、送信側ノードにより指定されたレジスタセット識別ＩＤによってレジスタを選択する。そして、受信側ノードは、選択したレジスタの記憶領域にメッセージを書きこむ。
【０００７】
次に、受信側ノードのユーザプロセスがメッセージの受信を検知する。ここで、受信側ノードのユーザプロセスがメッセージの受信を検知する方法に、メッセージ受信割込がある。メッセージ受信割込時は、受信側のユーザプロセスはスリープしており、ＣＰＵからの割り込みリクエストを受けることで、受信側のユーザプロセスは起動して、コンテキストスイッチを行い、レジスタからのメッセージ読み出しを開始する。メッセージ受信割込では、ＣＰＵは、メッセージを受信するたびに、レジスタセットに割込要因をセットして割込リクエストを発行する。受信側ノードのユーザプロセスは、割り込みを受信すると、レジスタセットをリードした後、割込要因をクリアする。これを「割込刈取」という。割込要因がメッセージ受信割り込みの場合、受信側ノードのユーザプロセスは、割込刈取処理後にメッセージの読み出しを行う。
【０００８】
このような割込処理に対する技術として、割り込みキュー制御ブロックと、割込要因保留レジスタとをサブクラス毎に複数面設ける従来技術がある。また、同種イベントのカウント数を基にイベント発生回数を求め、メモリサーチを行う場合に求めたイベント発生回数の受信制御情報を検出した時点でメモリサーチを終了する従来技術がある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０００−３２２２７１号公報
【特許文献２】特開平１０−３３４０５３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、レジスタセットのリード命令数はレジスタセットに格納できるメッセージのエントリ数が上限であり、メッセージ送信要件やレジスタセットの高容量化に伴い、レジスタセットのリード命令数も増加する。そして、リード命令数が増加した場合、割込要因の刈取処理を契機として各エントリ単位でレジスタセットに対してアクセスを行うことは、レジスタへのアクセス時間の長大化につながり、情報処理システムの性能が低下するおそれがある。
【００１１】
また、割り込みキュー制御ブロックと、割込要因保留レジスタとをサブクラス毎に複数面設けても、エントリ単位でのレジスタセットへの最大アクセス数は変わらない。また、イベント発生回数の受信制御情報を検出した時点でメモリサーチを終了する従来技術を用いても、エントリ単位でのレジスタセットへの最大アクセス数は変わらない。そのため、これらの従来技術を用いても割込刈取のためのレジスタセットへのアクセス時間短縮による情報処理システムの性能向上は困難である。
【００１２】
開示の技術は、上記に鑑みてなされたものであって、割込刈取による性能低下を軽減する情報処理装置、情報処理システム及び割込装置制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本願の開示する情報処理装置、情報処理システム及び割込装置制御方法は、一つの態様において、以下の各部を備える。記憶部は、所定処理を示す所定処理情報を含む処理情報を格納する領域であって、前記所定処理情報が格納されたか否かを示す特定情報を有する領域を複数有する。要求管理部は、前記処理情報を受信し、複数の前記領域の中の受信した前記処理情報を格納する領域における前記特定情報を前記所定処理が有ることを示すように変更するとともに、受信した前記処理情報を前記領域に格納する。取得部は、前記所定処理の実行要求を受けて、前記特定情報を予め決められた処理単位分前記記憶部から取得する。処理実行部は、前記取得部により取得された前記特定情報を基に、前記記憶部から前記所定処理情報を取得し、取得した前記所定処理情報にしたがって前記所定処理を実行する。
【発明の効果】
【００１４】
本願の開示する情報処理装置、情報処理システム及び割込装置制御方法の一つの態様によれば、割込刈取による性能低下を軽減することができるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、ノード間メッセージ通信を行う情報処理システムのシステム構成図である。
【図２】図２は、ＣＰＵの概略を表す構成図である。
【図３】図３は、メッセージ送信回路の詳細を表すブロック図である。
【図４】図４は、実施例１に係るメッセージ受信回路の詳細を表すブロック図である。
【図５】図５は、レジスタセットのエントリ情報の一例を表す図である。
【図６】図６は、ペンディングレジスタを説明するための図である。
【図７】図７は、ペンディングレジスタを表す図である。
【図８】図８は、リクエスト調停部の一例の回路図である。
【図９】図９は、ＲＡＭアクセス制御部の一例の回路図である。
【図１０】図１０は、データ整形部の一例の回路図である。
【図１１】図１１は、実施例１に係る情報処理システムによるメッセージの送受信のフローチャートである。
【図１２】図１２は、情報処理システムによるメッセージ受信割込を用いたメッセージ受信の通知の処理のシーケンス図である。
【図１３】図１３は、実施例１に係る情報処理装置による割込要因の刈取処理のフローチャートである。
【図１４】図１４は、メッセージ受信回路による、レジスタセットからのペンディングビットの取得処理のフローチャートである。
【図１５】図１５は、情報処理システムによる割込要因の刈取処理の効果を説明するための図である。
【図１６】図１６は、実施例２に係るメッセージ受信回路のブロック図である。
【図１７】図１７は、実施例２に係る情報処理装置による割込要因の刈取処理のフローチャートである。
【発明を実施するための形態】
【００１６】
以下に、本願の開示する情報処理装置、情報処理システム及び割込装置制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、情報処理システム及び割込装置制御方法が限定されるものではない。
【実施例１】
【００１７】
図１を参照して、情報処理システムの一例を説明する。図１は、ノード間メッセージ通信を行う情報処理システムのシステム構成図である。図１に示す例では、情報処理システムは、複数のノード１及びグローバルＸＢ（crossbar）２を有する。
【００１８】
ノード１は、１つの独立したＯＳが走行する単位であり、ＯＳが走行するための最低限の装置を含む。各ノード１は、グローバルＸＢ２と接続され、インターコネクトを介して相互に接続される。
【００１９】
ノード１は、ＣＰＵ１１、メモリ１２及びローカルＸＢ１３を有する。また、ノード１は、それぞれ独立してＯＳを実行する。
【００２０】
ＣＰＵ１１は、メモリ１２及びローカルＸＢ１３とバスで接続される。ＣＰＵ１１は、ローカルＸＢ１３を介してグローバルＸＢ２に接続する。ＣＰＵ１１は、メモリアクセスのリクエストであるメモリアクセス要求をローカルＸＢ１３に出力することで、他のノード１にメモリアクセス要求を転送する。
【００２１】
図２は、ＣＰＵの概略を表す構成図である。ＣＰＵ１１は、コア２１、キャッシュ２２、メッセージ送信回路２３及びメッセージ受信回路２４を有する。ここで、図２では、ＣＰＵ１１が、１つのコアを有する場合で説明したが、コアは２つ以上あってもよい。
【００２２】
コア２１は、メッセージ送信回路２３にメッセージの送信のための命令として、レジスタ読出要求をメッセージ送信回路２３へ出力する。そして、コア２１は、レジスタ読出要求の応答をメッセージ送信回路２３から受信する。コア２１は、メッセージの送受信において、キャッシュ２２に一時的に格納する場合がある。
【００２３】
また、コア２１は、レジスタ読出要求又は書込要求をメッセージ受信回路２４へ出力する。そして、コア２１は、レジスタ読出要求又は書込要求に対する応答をメッセージ受信回路２４から受信する。
【００２４】
また、コア２１は、割込要求をメッセージ受信回路２４から取得する。コア２１は、割込要求をメッセージ受信回路２４から取得すると、割込要求にしたがって処理を行う。割込要求で指示される処理には、特に制限はなく、例えば、演算処理やデータの書き込みや読み込みの処理などがある。特に、割込要求が、割込要因の刈取の割込み要求の場合、コア２１は、割込要因の刈取処理を行う。
【００２５】
メッセージ送信回路２３は、レジスタ読出要求をコア２１から受信する。そして、メッセージ送信回路２３は、レジスタ読出要求で指定されたメッセージを指定された他のノード１のメッセージ受信回路２４へ送信する。また、メッセージ送信回路２３は、メッセージ送信の結果を応答としてコア２１へ送信する。
【００２６】
また、メッセージ送信回路２３は、他のノード１からメッセージ送信に対する応答を受信する。そして、メッセージ送信回路２３は、応答で示されるメッセージの送信結果を基にレジスタ読出要求又は書込要求に対する応答を生成しコア２１へ出力する。
【００２７】
メッセージ受信回路２４は、レジスタ読出要求又は書込要求をコア２１から受信する。そして、メッセージ受信回路２４は、受信した要求にしたがって自己が有する受信レジスタに対する処理を実行する。例えば、メッセージ受信回路２４は、コア２１から受信レジスタ読出要求を受けた場合、レジスタからデータを読み出し、コア２１へ読み出したデータを送信する。
【００２８】
また、メッセージ受信回路２４は、コア２１が割込要因の刈取処理を実行する場合に、割込要因の刈取処理のためのレジスタリード命令をコア２１から受信する。以下では、割込要因の刈取処理のためのレジスタリード命令を単に「刈取レジスタリード命令」という。刈取レジスタリード命令を受けると、メッセージ受信回路２４は、順レジスタのレジスタセットから割込要因の有無を示すペンディングビットの値を所定数連続して読み出し、コア２１へ応答する。その後、メッセージ受信回路２４は、受信レジスタから割込要因を読み出しクリアする。
【００２９】
次に、メッセージ送信回路２３及びメッセージ受信回路２４の詳細について説明する。図３は、メッセージ送信回路の詳細を表すブロック図である。図３に示すように、メッセージ送信回路２３は、送信レジスタ３１、メッセージ生成部３２、メッセージ応答受信部３３及び応答生成部３４を有する。
【００３０】
送信レジスタ３１は、レジスタバス２５を介してコア２１から出力されたレジスタ読出要求を受信する。そして、送信レジスタ３１は、受信したレジスタ読出要求を格納する。さらに、送信レジスタ３１は、レジスタ読出要求の格納処理の結果を応答生成部３４へ出力する。
【００３１】
メッセージ生成部３２は、レジスタ読出要求が送信レジスタ３１に格納されたことを確認する。そして、メッセージ生成部３２は、格納されたレジスタ読出要求にしたがいメッセージを生成する。そして、メッセージ生成部３２は、生成したメッセージをローカルＸＢ１３へ出力し、メッセージの送信先のノード１へ向けて送信する。以下では、メッセージの送信先のノード１を「受信側ノード」といい、メッセージの送信元のノード１を「送信側ノード」という場合がある。この送信側ノードが、「第１情報処理装置」の一例にあたり、受信側ノードが、「第２情報処理装置」の一例にあたる。
【００３２】
メッセージ応答受信部３３は、メッセージ生成部３２が出力したメッセージの受信結果を示す受信側ノードからの応答を、ローカルＸＢ１３を介して受信する。そして、メッセージ応答受信部３３は、受信した応答を応答生成部３４へ出力する。
【００３３】
応答生成部３４は、レジスタ読出要求の格納処理の結果の入力を送信レジスタ３１から受ける。そして、応答生成部３４は、レジスタ読出要求の格納処理の結果を表す応答を生成する。その後、応答生成部３４は、生成したレジスタ読出要求の格納処理の結果を表す応答をレジスタバス２５へ出力し、コア２１へ向けて送信する。
【００３４】
また、応答生成部３４は、受信側ノードからのメッセージの受信結果を示す応答の入力をメッセージ応答受信部３３から受ける。そして、応答生成部３４は、受信側ノードのメッセージの受信結果を示す応答を生成する。その後、応答生成部３４は、生成した受信側ノードのメッセージの受信結果を示す応答をレジスタバス２５へ出力し、コア２１へ向けて送信する。
【００３５】
図４は、実施例１に係るメッセージ受信回路の詳細を表すブロック図である。図４に示すように、メッセージ受信回路２４は、リクエスト調停部１０１、ＲＡＭ（Random  Access  Memory）アクセス制御部１０２、受信レジスタ１０３、データ整形部１０４を有する。さらに、メッセージ受信回路２４は、メッセージ受信部１０５、メッセージ応答生成部１０６及び割込要求生成部１０７を有する。
【００３６】
受信レジスタ１０３は、レジスタセット３００を有する。レジスタセット３００は、アドレスレジスタ、リードポインタ及びライトポインタを有する。レジスタセット３００は、送信側ノードのコアの数及びコアが並列処理できる処理数にしたがって、用いる数が決定される。また、ＣＰＵ１１に搭載されたレジスタセット３００の内の所定数を使用するとして、使用するレジスタセット３００の数が決定される場合もある。
【００３７】
レジスタセット３００は、図５に示す項目のエントリを格納する。図５は、レジスタセットのエントリ情報の一例を表す図である。図５に示すように、エントリの項目は、例えば、レジスタセット３００に格納される各エントリの情報及びそのエントリに用いるビット数である。このレジスタセット３００が、「記憶部」の一例にあたる。
【００３８】
受信側空き通知割込フラグは、ノード１において空き通知割込を使用するか否かを示すフラグである。空き通知割込とは、ノード１にメッセージを受信可能なレジスタセット３００が確保できた場合に、メッセージが受信可能になったことをコア２１に知らせる割り込みである。例えば、空き通知割込は、予め決められた数以上のレジスタセット３００がメッセージを格納できる状態になった場合に発行される。受信側空き通知割込フラグは、予め操作者からの指示を受けて設定される。本実施例では、受信側空き通知割込フラグがイネーブルに設定された場合で説明する。
【００３９】
受信メッセージ数は、ノード１が受信したメッセージの数を表す。受信メッセージ数は、図５に示す４ｂｉｔの情報で受信したメッセージの数を表す。
【００４０】
割込発行条件メッセージ空き数は、空き通知割込を発行する条件となるメッセージの数を表す。
【００４１】
メッセージ受信割込フラグは、メッセージ受信割込を使用するか否かを表すフラグである。メッセージ受信割込フラグがディセーブルの場合、ノード１は、ポーリング監視によりメッセージ受信の検知を行う。また、メッセージ割込フラグがイネーブルであれば、ノード１は、メッセージ受信によりメッセージ受信の検知を行う。メッセージ受信割込フラグは、予め操作者からの指示を受けて設定される。本実施例では、メッセージ受信割込フラグがイネーブルに設定された場合で説明する。
【００４２】
空き通知割込ペンディングフラグは、レジスタセット３００に空き通知割込の情報が格納されたか否かを表すフラグである。
【００４３】
メッセージ受信割込ペンディングフラグは、レジスタセット３００にメッセージ受信割込の情報が格納されたか否かを表すフラグである。このメッセージ受信割込ペンディングフラグが「特定情報」の一例にあたる。以下では、このメッセージ受信割込ペンディングフラグを、単に「ペンディングフラグ」といい、ペンディングフラグを格納するビットを、「ペンディングビット」という。ペンディングフラグは「１」であれば、オンであり、「０」であればオフである。
【００４４】
受信データ記録場所情報は、受信したメッセージに含まれるデータを格納したメモリのアドレスの情報である。
【００４５】
さらに、本実施例に係るレジスタセット３００では、図６に示すように、ペンディングビットをまとめて、ペンディングレジスタが生成される。図６は、ペンディングレジスタを説明するための図である。
【００４６】
レジスタセット３００は、各エントリに１ビットのペンディングビット３０１を有する。そして、ペンディングビット３０１を全エントリに亘って抽出すると、ペンディングビット３０１の集合であるペンディングビット群３０２が取得される。そして、このペンディングビット群から番号の若いレジスタに含まれるペンディングビット３０１の順に予め決められた数を抽出してまとめることで、ペンディングレジスタ３０３が生成される。
【００４７】
例えば、図６では、全エントリ数が１６３８４個として、レジスタセット３００に含まれる各エントリをレジスタ＃０〜＃１６３８３として表す。
【００４８】
ここで、本実施例では、ペンディングレジスタ３０３のサイズを、リードデータのバス幅と一致させた。例えば、８ｂｙｔｅのリードデータのバス幅を持つシステムであれば、ペンディングレジスタ３０３は６４ビットとなる。そして、ペンディングレジスタ３０３が６４ビットの場合、ペンディングレジスタ３０３は、図６に示すようにペンディングレジスタ＃０〜＃２５５の２５６個生成される。ここで、各ペンディングレジスタ３０３の上に＃に数字を付加した情報は、ペンディングビット群３０２の先頭からの位置を表す。
【００４９】
図７は、ペンディングレジスタを表す図である。ここでは、１つのペンディングレジスタ３０３のビット数がｎの場合で説明する。Ｎは、０から全エントリ数をｎで除算した値から１を引いた数までの整数である。また、レジスタセット３００に含まれる各レジスタを＃の後ろに番号を付して表す。この場合、ペンディングレジスタ３０３の最初の値は、レジスタ＃（（ｎ×Ｎ）＋０）のペンディングビットの値となる。さらに、ペンディングレジスタ３０３の２番目の値は、レジスタ＃（（ｎ×Ｎ）＋１）のペンディングビットの値となる。このように、ペンディングレジスタ３０３の次の値は、１つ前の値を有するレジスタの次のレジスタのペンディングビットの値となる。そして、ペンディングレジスタ３０３の最後の値は、レジスタ＃（（ｎ×Ｎ）＋ｎ−１）のペンディングビットの値となる。
【００５０】
図４に戻って説明を続ける。メッセージ受信部１０５は、送信側ノードからメッセージを受信する。そして、メッセージ受信部１０５は、受信したメッセージに含まれる受信データを取得してメモリ１２に格納する。その後、メッセージ受信部１０５は、受信データのメモリ１２における格納場所の情報とともにメッセージをリクエスト調停部１０１へ出力する。その後、メッセージ受信部１０５は、メッセージ受信完了をメッセージ応答生成部１０４に通知する。
【００５１】
リクエスト調停部１０１は、受信データの格納場所の情報とともにメッセージの入力をメッセージ受信部１０５から受ける。また、リクエスト調停部１０１は、コア２１から出力されたメッセージ受信割込及び空き通知割込のリクエストを含むメッセージ受信回路２４内で発生したリクエストの入力を受ける。また、リクエスト調停部１０１は、刈取レジスタリード命令であるリクエストの入力も受ける。そして、リクエスト調停部１０１は、受信したリクエストを自己が有するキューに格納する。次に、リクエスト調停部１０１は、入力されたリクエストに対して、ＬＲＵ（Least  Recently  Used）又はラウンドロビンなどを用いた調停を行う。そして、リクエスト調停部１０１は、調停で選択したリクエストをＲＡＭアクセス制御部１０２へ出力する。
【００５２】
また、一般にレジスタアクセスのリクエストにはレジスタアドレスが含まれる。一旦レジスタアクセスが開始されると、移行のレジスタセット３００へのアクセスはしばらく中断される可能性がある。例えば、ＲＡＭのリードモディファイライトなどがその例である。そのような調停参加抑止型条件の下では、リクエスト調停部１０１は、調停を行わずキューから外へリクエストを発行しない。
【００５３】
ここで、リクエスト調停部１０１は、調停により刈取レジスタリード命令を選択した場合、他のリクエストの調停参加を抑止する。そして、リクエスト調停部１０１は、レジスタセット３００に含まれる各レジスタのペンディングビットの読出リクエストをＲＡＭアクセス制御部１０２へ出力する。そして、リクエスト調停部１０１は、ＲＡＭアクセス制御部１０２がペンディングレジスタのビット数分の読み出しを行った後に、調停を再開する。
【００５４】
ここで、図８を参照して、リクエスト調停部１０１を実現する回路の一例について説明する。図８は、リクエスト調停部の一例の回路図である。リクエスト調停部１０１は、図８に示すように、リクエストキュー１１１、リクエスト出力回路１１２、調停回路１１３、連続リード入力ライン１１４、参加抑止信号入力ライン１１５及び参加抑止信号出力回路１１６を有する。
【００５５】
リクエストキュー１１１は、複数存在する。そして、リクエストキュー１１１は例えばＬＲＵなどを用いて蓄積されたリクエストの中から１つリクエストを選択し、リクエスト出力回路１１２へ出力する。
【００５６】
連続リード入力ライン１１４は、後述するペンディングビットの値の連続読み出しを行う場合、ＲＡＭアクセス制御部１０２から出力指示信号が入力され、それ以外の場合、出力停止信号が入力される。参加抑止信号入力ライン１１５には、参加抑止信号が入力される。
【００５７】
参加抑止信号出力回路１１６は、連続リード入力ライン１１４からの入力信号及び参加抑止信号入力ライン１１５からの入力信号の入力を受ける。連続リード入力ライン１１４から出力指示信号が入力された場合、参加抑止信号出力回路１１６は、参加抑止信号をリクエスト出力回路１１２へ出力する。また、連続リード入力ライン１１４から出力指示信号の入力が無い場合、参加抑止信号出力回路１１６は、参加抑止信号のリクエスト出力回路１１２へ出力を停止する。すなわち、ＲＡＭアクセス制御部１０２がペンディングビットの値の連続読み出しを行う場合、参加抑止信号出力回路１１６は、参加抑止信号を出力する。
【００５８】
リクエスト出力回路１１２は、リクエストキュー１１１に１対１で対応するように配置される。リクエスト出力回路１１２は、リクエストキュー１１１からの入力信号と参加抑止信号出力回路１１６からの入力信号との入力を受ける。そして、リクエスト出力回路１１２は、参加抑止信号出力回路１１６から参加抑止信号の入力が無い場合、調停回路１１３へリクエストキュー１１１から入力されたリクエストを出力する。これに対して、参加抑止信号出力回路１１６から参加抑止信号が入力された場合、リクエスト出力回路１１２は、リクエストの出力を停止する。
【００５９】
調停部１１３は、リクエストの入力を各リクエスト出力回路１１２から受ける。そして、調停部１１３は、入力されたリクエストに対して調停を行い１つのリクエストを選択し、選択したリクエストを出力する。
【００６０】
図４に戻って説明を続ける。ＲＡＭアクセス制御部１０２は、調停により選択されたリクエストの入力をリクエスト調停部１０１から受ける。ＲＡＭアクセス制御部１０２は、取得したリクエストを基にＲＡＭで構成されたレジスタセット３００へのアクセス信号を生成する。ＲＡＭアクセス制御部１０２は、取得したリクエストからレジスタセット識別ＩＤを取得する。
【００６１】
ＲＡＭアクセス制御部１０２は、リクエストに応じた読み出し又は書き込み制御信号を生成し、受信レジスタ１０３へ出力することで、レジスタセット３００からのデータの読み出し又はレジスタセット３００への情報の格納を行う。ここで、書込リクエストの場合、ＲＡＭアクセス制御部１０２は、一度レジスタセット３００の内容を読み出してからデータを編集し、レジスタセット３００に再度書き戻すリードモディファイライトの制御を行う。
【００６２】
また、例えば、メッセージ受信割込のリクエストを受けた場合、ＲＡＭアクセス制御部１０２は、レジスタセット３００のメッセージ受信割込フラグを確認する。次に、ＲＡＭアクセス制御部１０２は、レジスタセット識別ＩＤを有するレジスタセット３００に受信割込の情報を格納する。また、ＲＡＭアクセス制御部１０２は、レジスタセット３００における各エントリの登録を行う。さらに、メッセージ受信割込フラグがイネーブルであれば、ＲＡＭアクセス制御部１０２は、レジスタセット３００の空き通知割込ペンディングフラグ及びメッセージ受信割込ペンディングフラグをオフにする。このメッセージ受信割込のリクエストが、「所定処理情報」の一例にあたる。そして、メッセージ受信割込で示されるメッセージの読み出し処理が、「所定処理」の一例にあたる。さらに、メッセージ受信割込リクエストを含む、コア２１から出力される各種リクエストが、「処理情報」の一例にあたる。
【００６３】
そして、ＲＡＭアクセス制御部１０２は、レジスタセット３００に格納されたエントリの数が所定数を超えるなどの予め決められた割込要求発行条件を満たしたか否かを判定する。割込要求発行条件が満たされた場合、ＲＡＭアクセス制御部１０２は、割込要求生成部１０７にメッセージ受信割込要求の生成を指示する。これに対して、割込要求発行条件が満たされていない場合、メッセージ受信部１０５は、割込要求生成部１０７に対する割込要求の生成の指示を行わずに割込要因の格納処理を終了する。
【００６４】
また、刈取レジスタリード命令の入力を受けた場合、ＲＡＭアクセス制御部１０２は、刈取レジスタリード命令に含まれるペンディングレジスタのアドレスを取得する。次に、ＲＡＭアクセス制御部１０２は、取得したペンディングレジスタのアドレスに対応する初期値をセットする。そして、ＲＡＭアクセス制御部１０２は、アドレスを初期値から１つずつインクリメントしながらｎ回連続で、ペンディングレジスタにおける各ペンディングビットの値をデータ整形部１０４へ出力するように受信レジスタ１０３を制御することを繰り返す。
【００６５】
ここで、ｎは、１つのペンディングレジスタのビット数である。さらに、ＲＡＭアクセス制御部１０２は、次に刈取レジスタリード命令の入力をリクエスト調停部から受けた場合、初期値を変更して上述したｎ回連続でのペンディングビットの値の出力を受信レジスタ１０３に繰り返し行わせる。ＲＡＭアクセス制御部１０２は、レジスタセット３００の全てのエントリからペンディングビットの読み出しが行われるように、順次初期値を変更する。
【００６６】
ここで、レジスタセット３００の全エントリ数をｍとした場合、ＲＡＭアクセス制御部１０２は、ｎ回連続でのペンディングビットの値の出力をｍ／ｎ回受信レジスタ１０３に行わせる。一般に、ｎの数は、リードデータのバス幅と一致する。例えば、８ｂｙｔｅのリードデータのバス幅を持つシステムであれば、ｎ＝６４となる。すなわち、各エントリを１回ずつ割込要求により読み出す場合に比べて、刈取レジスタリード命令をトリガとするレジスタの読み出しの回数を１／６４に減らすことができる。
【００６７】
ここで、図９を参照して、ＲＡＭアクセス制御部１０２を実現する回路の一例について説明する。図９は、ＲＡＭアクセス制御部の一例の回路図である。ＲＡＭアクセス制御部１０２は、デコーダ１２１、選択回路１２２、加算回路１２３、同期信号入力ライン１２４、インクリメント条件出力回路１２５、カウンタ１２６、判定回路１２７、クリア条件出力回路１２８及び選択回路１２９を有する。
【００６８】
デコーダ１２１は、刈取レジスタリード命令の場合、リクエスト調停部１０１から入力された刈取レジスタリード命令からペンディングビットのアドレスを取得する。そして、デコーダ１２１は、取得したアドレスをデコードして選択回路１２２へ出力する。また、デコーダ１２１は、刈取レジスタリード命令を選択回路１２９へ出力する。
【００６９】
選択回路１２２は、レジスタセット３００の全エントリ数を連続読み出しの回数で除算した数の初期値２２０を有する。例えば、レジスタセットの全エントリ数がｍであり、連続読出しの回数がｎの場合、選択回路１２２は、ｍ／ｎ個の初期値２２０を有する。各初期値２２０は、各ペンディングレジスタの先頭のアドレスを表す。
【００７０】
選択回路１２２は、デコードされたペンディングビットのアドレスをデコーダ１２１から取得する。次に、選択回路１２２は、デコーダ１２１から取得したペンディングビットのアドレスに対応する初期値２２０を選択する。そして、選択回路１２２は、選択した初期値２２０を加算回路１２３へ出力する。
【００７１】
加算回路１２３は、初期値２２０の入力を選択回路１２２から受ける。また、加算回路１２３は、カウンタ値の入力をカウンタ１２６から受ける。そして、加算回路１２３は、初期値２２０にカウンタ値を加算する。その後、加算回路１２３は、加算結果を選択回路１２９へ出力する。
【００７２】
インクリメント条件出力回路１２５は、連続読み出しの期間中にリクエスト調停部１０１から有効信号の入力を受ける。さらに、インクリメント条件出力回路１２５は、同期信号の入力を同期信号入力ライン１２４から受ける。ここで、同期信号は、レジスタセット３００のデータを読み出すタイミングを示す信号であり、レジスタセット３００を構成するＲＡＭの特性に応じて生成される。インクリメント条件出力回路１２５は、有効信号の入力期間、すなわち、連続読み出しの期間中に、同期信号に同期させてインクリメント信号を出力する。
【００７３】
判定回路１２７は、カウンタ１２６から出力されたカウント値の入力を受ける。そして、判定回路１２７は、カウント値が連続読み出しの回数が上限に達したか否かを判定する。カウント値が連続読み出しの回数が上限に達した場合、判定回路１２７は、クリア条件出力回路１２８へ信号を出力する。
【００７４】
クリア条件出力回路１２８は、同期信号の入力を同期信号入力ライン１２４から受ける。さらに、クリア条件出力回路１２８は、連続読み出しの回数が上限に達した場合、判定回路１２７から信号の入力を受ける。そして、クリア条件出力回路１２８は、判定回路１２７から信号の入力を受けた場合、同期信号に同期させてクリア信号をカウンタ１２６へ出力する。
【００７５】
カウンタ１２６は、連続読み出しの期間中、インクリメント条件出力回路１２５からインクリメント信号の入力を受ける。そして、カウンタ１２６は、前回のカウント値に１を加えてカウントアップする。そして、カウンタ１２６は、カウント値を加算回路１２３、判定回路１２７、リクエスト調停部１０１及びデータ整形部１０４へ出力する。そして、連続読み出しの回数の上限までのカウントアップを行った後に、カウンタ１２６は、クリア条件出力回路１２８からクリア信号の入力を受ける。クリア信号の入力を受けて、カウンタ１２６は、カウント値を０にリセットする。
【００７６】
加算回路１２３は、刈取レジスタリード命令に対応する初期値２２０の入力を選択回路１２２から受ける。さらに、加算回路１２３は、カウンタ値の入力をカウンタ１２６から受ける。加算回路１２３は、連続読み出しの期間中、１つずつインクリメントされたカウント値の入力をカウンタ１２６から受ける。すなわち、加算回路１２３は、初期値２２０から連続読み出しの回数の上限まで連続したアドレスの入力を順次受ける。
【００７７】
そして、加算回路１２３は、初期値２２０にカウンタ値を加算する。その後、加算回路１２３は、加算結果を選択回路１２９へ出力する。
【００７８】
選択回路１２９は、刈取レジスタリード命令の入力をデコーダ１２１から受ける。刈取レジスタリード命令の入力を受けた場合、選択回路１２９は、加算回路１２３から取得したアドレスからペンディングビットを読み出しを受信レジスタ１０３に行わせる。この場合、選択回路１２９は、連続読み出しの回数の上限まで、アドレスをインクリメントしながら、ペンディングビットを読み出しを受信レジスタ１０３に繰り返させる。
【００７９】
また、選択回路１２９は、刈取レジスタリード命令以外のリクエストの入力をリクエスト調停部１０１から受ける。その場合、選択回路１２９は、受信したリクエストにしたがい、受信レジスタ１０３に処理を行わせる。
【００８０】
図４に戻って説明を続ける。刈取レジスタリード命令の入力があった場合、ＲＡＭアクセス制御部１０２は、後述するデータ整形部１０４に読み出されたペンディングビットを有するエントリをレジスタセット３００から読み出す。
【００８１】
データ整形部１０４は、受信レジスタ１０３から出力されるＲＡＭ出力データを出力データバスフォーマットに成形する回路である。データ整形部１０４は、中間バッファ１４０を有する。データ整形部１０４は、中間バッファ１４０に格納するために、ＲＡＭ出力データの内の所定の情報に対して第１データ整形を行う。そして、データ整形部１０４は、第１データ整形を施したＲＡＭ出力データを中間バッファ１４０に格納する。
【００８２】
次に、データ整形部１０４は、中間バッファ１４０に格納されたデータに対して第２データ整形を施し、出力データバスフォーマットに変換する。また、データ整形部１０４は、出力データバスフォーマットにしたがったヘッダ生成を行う。そして、データ整形部１０４は、出力データバスフォーマットにしたがったデータ出力タイミングの制御を行い、レジスタバス２５へＲＡＭ出力データを出力し、コア２１へ向けて送信する。
【００８３】
ここで、割込要求の場合、データ整形部１０４は、ＲＡＭ出力データとしてｎ個のエントリのペンディングビットの値の入力を連続で受ける。具体的には、データ整形部１０４は、自己が有するカウンタでカウントを行い、カウンタの値がｎとなるまでペンディングビットの値の入力を受ける。言い換えれば、データ整形部１０４は、１つのペンディングレジスタが有する値の入力を受ける。
【００８４】
ここで、ペンディングビットの値が１ｂｉｔで有る場合で説明する。データ整形部１０４は、１〜ｎ回目のどのリードかを認識し、中間バッファ１４０に読出しの順番に格納する。例えば、データ整形部１０４は、１回目の読み出しの値は中間バッファ１４０のビット０、２回目の読み出しの値は中間バッファのビット１、３回目の読み出しの値は中間バッファ１４０のビット３というように、中間バッファ１４０へ格納する。すなわち、データ整形部１０４は、レジスタセット３００のアドレスで定義されたペンディングビットをビットスライスして横に格納する処理を行う。
【００８５】
その後、データ整形部１０４は、カウンタがｎに達すると、ヘッダ、データの順に出力バスフォーマットにしたがったパケットを出力する。ここで、連続読み出しの回数であるｎが、「所定単位」の一例にあたる。
【００８６】
ここで、図１０を参照して、データ整形部１０４を実現する回路の一例について説明する。図１０は、データ整形部の一例の回路図である。データ整形部１０４は、中間バッファ１４０、デコーダ１４１、カウント値出力回路１４２、判定部１４３、読出制御部１４４及び選択部１４５を有する。また、データ整形部１０４は、ペンディングビット取出部１４６、選択回路１４７、ヘッダ生成部１４８及び選択回路１４９を有する。また、データ整形部１０４は、ペンディングビット取出部１４６の他に、他のレジスタビットを取り出すｘｘレジスタビット取出部及びｙｙレジスタビット取出部などを有する。
【００８７】
デコーダ１４１は、カウンタ値の入力をＲＡＭアクセス制御部１０２から受ける。そして、デコーダ１４１は、カウンタ値をデコードしてカウント値出力回路１４２へ出力する。
【００８８】
カウント値出力回路１４２は、ＲＡＭ読出タイミングの入力をリクエスト調停部１０１から受ける。さらに、カウント値出力回路１４２は、デコードされたカウント値の入力をデコーダ１４１から受ける。そして、カウント値出力回路１４２は、ＲＡＭ読出タイミングに合わせて、カウント値を判定部１４３へ出力する。
【００８９】
判定部１４３は、カウント値が連続読出し回数の上限に達したか否かを判定する。上限に達した場合、判定部１４３は、読出開始命令を読出制御部１４４へ出力する。
【００９０】
読出制御部１４４は、読出開始命令の入力を判定部１４３から受ける。そして、読出制御部１４４は、読出開始を選択回路１５０へ指示する。また、読出制御部１４４は、他のレジスタのデータの出力条件の入力をＲＡＭアクセス制御部１０２から受ける。そして、読出制御部１４４は、受信したデータの出力条件にしたがって、読出開始を選択回路１５０へ指示する。
【００９１】
選択部１４５は、レジスタ種情報の入力をリクエスト調停部１０１から受ける。そして、選択部１４５は、レジスタ種情報にしたがって、選択するレジスタビットを選択回路１４７に指示する。ここで、割込要求の場合、選択部１４５は、レジスタ種情報としてペンディングレジスタの情報を取得し、選択回路１４７に対してペンディングビットの選択を選択回路１４７へ指示する。
【００９２】
ペンディングビット取出部１４６は、ペンディングビットの値を受信レジスタ１０３から取得する。さらに、ペンディングビット取出部１４６は、ＲＡＭアクセス制御部１０２からカウンタ値の入力を受ける。ペンディングビット取出部１４６は、カウンタ値とともにレジスタ値を選択回路１４７へ出力する。
【００９３】
選択回路１４７は、選択部１４５からペンディングビットの選択の指示を受けると、ペンディングビット取出部１４６からの出力を中間バッファ１４０へ出力する。
【００９４】
中間バッファ１４０は、読出タイミングの入力をＲＡＭアクセス制御部１０２から受ける。そして、中間バッファ１４０は、読出タイミングで選択回路１４７からの出力を取得し蓄積する。ここで、刈取レジスタリード命令の場合、中間バッファ１４０は、カウンタ値に応じて順番にペンディングビットの値を蓄積する。そして、中間バッファ１４０は、例えば、上位ビットと下位ビットに分けて、蓄積したデータを選択回路１４９へ出力する。
【００９５】
ヘッダ生成部１４８は、出力するデータに応じてヘッダを生成する。そして、ヘッダ生成部１４８は、生成したヘッダを選択回路１４９へ出力する。
【００９６】
選択回路１４９は、ヘッダ生成部１４８から入力されたヘッダとともに、中間バッファ１４０から出力されたデータをメッセージ応答生成部１０６へ出力し、コア２１へ送信する。
【００９７】
図４に戻って説明を続ける。メッセージ応答生成部１０６は、メッセージ受信完了の通知をメッセージ受信部１０５から受ける。そして、メッセージ応答生成部１０６は、受信した通知にしたがって、送信側のノード１のメッセージの送信に対する応答を生成する。その後、メッセージ応答生成部１０６は、生成した応答をローカルＸＢ１３へ出力し、送信側のノード１に向けて送信する。
【００９８】
割込要求生成部１０７は、レジスタセット３００の使用状況を監視し、メッセージが格納されていないレジスタセット３００の数を取得する。ここで、割込要求生成部１０７は、メッセージの格納に用いるレジスタセット３００の総数を記憶していてもよい。そして、割込要求生成部１０７は、レジスタセット３００に登録された割込発行条件メッセージ空き数と取得したメッセージが格納されていないレジスタセット３００の数とを比較して、空き通知割込の発行条件を満たしたか否かを判定する。
【００９９】
空き通知割込の発行条件を満たす場合、割込要求生成部１０７は、レジスタセット３００の受信側空き通知割込フラグを確認する。
【０１００】
受信側空き通知割込フラグがディセーブルであれば、割込要求生成部１０７は、空き通知割込要求の格納処理を終了する。受信側空き通知割込フラグがイネーブルであれば、割込要求生成部１０７は、空き通知割込を格納するレジスタセット３００を特定する。
【０１０１】
そして、割込要求生成部１０７は、特定したレジスタセット３００の空き通知割込ペンディングフラグをオンにする。さらに、割込要求生成部１０７は、レジスタセット３００における各エントリの登録を行う。
【０１０２】
その後、割込要求生成部１０７は、空き通知割込要求を生成する。そして、割込要求生成部１０７は、生成した空き通知割込要求をコア２１へ送信する。
【０１０３】
また、割込要求生成部１０７は、メッセージ受信割込要求の生成の指示をＲＡＭアクセス制御部１０２から受ける。そして、割込要求生成部１０７は、メッセージ受信割込要求を生成する。その後、割込要求生成部１０７は、生成したメッセージ受信割込要求をレジスタバス２５へ出力し、コア２１へ送信する。このメッセ時受信割込要求及び空き通知割込み要求が、割込リクエストとなる。この割込リクエストが発行されることで、割込要因の刈取処理が行われる。
【０１０４】
このように、ＲＡＭアクセス制御部１０２及び割込要求生成部１０７は、割込要求発行条件が満たされていれば、メッセージ受信割込要求を発行するが、満たされていない場合、メッセージ受信割込要求を発行しない。ただし、割込要求発行条件の充足又は非充足にかかわらず、メッセージ受信部１０５及び割込要求生成部１０７は、割込要因の格納は行っていく。すなわち、例えメッセージ受信割込要求の発行が行われなくても、レジスタセット３００には割込要因が格納されていく。
【０１０５】
コア２１は、ＯＳを動作させる。また、コア２１は、ＯＳ上でアプリケーションなどを実行しユーザプロセスを動作させる。コア２１は、ＯＳ又はユーザプロセスのいずれかもしくは双方が動作主体になることがある。
【０１０６】
コア２１は、空き通知割込やメッセージ受信割込などの割込要因をレジスタバス２５を介してメッセージ受信回路２４へ送信する。また、コア２１は、割込要求生成部１０７から空き通知割込要求を受信すると、空き通知割込みのレジスタリード命令をメッセージ受信回路２４へ発行する。
【０１０７】
また、コア２１は、メッセージ受信割込要求を割込要求生成部１０７から受信する。そして、コア２１は、割込要因の刈取処理を開始する。例えば、コア２１がメッセージ受信割込要求を受けると、ＯＳは、コンテキストスイッチを実行しプロセスを切り替え、ユーザプロセスに割込要因の刈取処理を指示する。ＯＳによるコンテキストスイッチが行われると、ユーザプロセスは、割込要因の刈取処理を開始する。そして、ユーザプロセスは、刈取レジスタリード命令をメッセージ受信回路に送信する。このようにして、割込み刈取処理が開始される。
【０１０８】
次に、図１１を参照して、プロセス間通信によるメッセージの送受信の流れについて説明する。図１１は、情報処理システムによるメッセージの送受信のフローチャートである。
【０１０９】
送信側ノードのコア２１が、送信レジスタ３１にメッセージを書き込む(ステップＳ１)。次に、コア２１がメッセージ送信回路２３へメッセージ送信リクエストを出力する（ステップＳ２）。
【０１１０】
送信側ノードのメッセージ送信回路２３が、メッセージチェック後、受信側ノードへメッセージを発行する（ステップＳ３）。
【０１１１】
受信側ノードのメッセージ受信回路２４は、メッセージを受信する。そして、メッセージ受信回路２４は、メッセージチェック後、メモリ１２へメッセージを書き込む(ステップＳ４)。ただし、このフローでは１つのメッセージの送受信のように記載したが、実際には、後述するステップＳ５に移行する前に複数のメッセージに対してステップＳ１〜４が行われる場合もある。
【０１１２】
メッセージ受信回路２４は、メモリ１２からの応答を受け取る。そして、メッセージ受信回路２４は、メッセージ受信のステータスを送信側ノードのメッセージ送信回路２３へ送信する（ステップＳ５）。
【０１１３】
送信側ノードのメッセージ送信回路２３は、メッセージ受信のステータスを受信側ノードのメッセージ受信回路２４から受信する。そして、メッセージ送信回路２３は、受信したステータスを保持する。その後、送信側ノードのコア２１からの要求に応じて、メッセージ送信回路２３は、ステータスをコア２１へ返す（ステップＳ６）。
【０１１４】
受信側ノードのメッセージ受信回路２４は、割込要求発行条件を充足したか否かを判定する（ステップＳ７）。割込要求発行条件を充足していない場合（ステップＳ７：否定）、処理はステップＳ１に戻り、割込発行要求条件を充足するまで、送信側ノード及び受信側ノードはステップＳ１〜Ｓ６を繰り返す。
【０１１５】
これに対して、割込要求発行条件を充足された場合（ステップＳ７：肯定）、受信側ノードのメッセージ受信回路２４は、受信側ノードのコア２１により動作するＯＳのインタラプトハンドラへメッセージ受信割込による割り込みを上げる（ステップＳ８）。すなわち、メッセージ受信回路２４は、メッセージ受信割込要求をインタラプトハンドラへ送信する。
【０１１６】
インタラプトハンドラからの指示を受けて、すなわち、インタラプトハンドラから刈取レジスタリード命令の入力を受けて、メッセージ時受信回路２４は、レジスタをリードし、リード結果をインタラプトハンドラへ出力する。インタラプトハンドラは、リード結果の入力を受けて、レジスタセット３００内の割込要因を確認する（ステップＳ９）。
【０１１７】
インタラプトハンドラは、受信側ノードのコア２１により動作する受信側のユーザプロセスに対して、割込要因を含むメッセージＩＤを通知する（ステップＳ１０）。
【０１１８】
受信側のユーザプロセスは、割込要因を含むメッセージＩＤをインタラプトハンドラから取得する。そして、受信側のユーザプロセスは、メッセージ受信回路２４にメッセージＩＤに対応するレジスタセット３００に格納されたエントリの読み出しを指示する。メッセージ受信回路２４は、メッセージＩＤに対応するレジスタセット３００内のエントリから情報を読み出し、受信側のユーザプロセスへ出力する。そして、受信側のユーザプロセスは、メッセージ受信回路２４から情報を受信して、メッセージステータス、ベースアドレス及びポインタなどを確認する（ステップＳ１１）。
【０１１９】
次に、受信側のプロセスは、確認した情報を基に、メモリ１２上のメッセージを読み込む（ステップＳ１２）。
【０１２０】
その後、受信側のユーザプロセスは、メッセージ受信回路２４にレジスタセット３００のステータスの更新を指示する。メッセージ受信回路２４は、受信側のユーザプロセスからの指示を受けて、レジスタセット３００に新たに情報を書き込みステータスを更新する（ステップＳ１３）。この時、例えば、メッセージ受信回路２４は、リードモディファイライトを行って、ペンディングフラグを「０」にする。
【０１２１】
さらに、図１２を参照して、本実施例に係る情報処理システムによるメッセージ受信割込を用いたメッセージ受信の通知の処理の全体的な流れを説明する。図１２は、情報処理システムによるメッセージ受信割込を用いたメッセージ受信の通知の処理のシーケンス図である。ここでは、送信側ノードでは、コア２１によりユーザプロセス２１１及びＯＳ２１２が実行されており、受信側ノードでは、コア２１により、ユーザプロセス２２１及びＯＳ２２２が実行される場合で説明する。
【０１２２】
ユーザプロセス２２１は、操作者からの指示を受けて、レジスタセット３００の設定を行う（ステップＳ２１）。具体的には、ユーザプロセス２２１は、操作者からの指示にしたがい受信側空き通知割込フラグ、割込発行条件メッセージ空き数及びメッセージ受信割込フラグを設定する。ここでは、ユーザプロセス２２１は、受信側空き通知割込フラグ及びメッセージ受信割込フラグをいずれもイネーブルにする。また、ユーザプロセス２２１は、全てのレジスタセット３００の空き通知ペンディングフラグ及びメッセージ受信割込ペンディングフラグをオフ、すなわちペンディングビットを「０」に設定する。メッセージ受信回路２４は、ユーザプロセス２２１からの指示を受けて、レジスタセット３００の設定を行う。
【０１２３】
そして、ユーザプロセス２２１は、メッセージが送信側ノードから送られてくるまでメッセージの受信処理を待機する（ステップＳ２２）。ただし、この間、ユーザプロセス２２１は、他の処理を実行してもよい。
【０１２４】
メッセージの送信処理を行う場合、送信側ノードのユーザプロセス２１１は、メッセージ送信依頼をＯＳ２１２に要求する（ステップＳ２３）。
【０１２５】
ＯＳ２１２は、メッセージ送信依頼をユーザプロセス２１１から受ける。そして、ＯＳ２１２は、メッセージの送信をメッセージ送信回路２３に指示する（ステップＳ２４）。
【０１２６】
メッセージ送信回路２３は、メッセージの送信の指示をＯＳ２１２から受ける。そして、メッセージ送信回路２３は、メッセージを含むパケットを生成する。その後、メッセージ送信回路２３は、生成したパケットを受信側ノードのメッセージ受信回路２４へ送信する（ステップＳ２５）。
【０１２７】
メッセージ受信回路２４は、メッセージを含むパケットを送信側ノードのメッセージ送信回路２３から取得する。そして、メッセージ受信回路２４のメッセージ受信部１０５は、受信したパケットに含まれるメッセージを受信する（ステップＳ２６）。
【０１２８】
そして、メッセージ受信回路２４のメッセージ受信部１０５は、受信したメッセージをメモリ１２に格納する（ステップＳ２７）。また、メッセージ受信回路２４のＲＡＭアクセス制御部１０２は、メッセージ受信割込の情報をレジスタセット３００に格納する。その後、メッセージ受信回路２４のメッセージ応答生成部１０６は、メッセージ受信の完了応答を送信側ノードのメッセージ送信回路２３へ送信する（ステップＳ２８）。
【０１２９】
送信側ノードのメッセージ送信回路２３は、完了応答を受信側ノードのメッセージ受信回路２４から受信する。そして、メッセージ送信回路２３は、ユーザプロセス２１１に完了応答を送信する。ユーザプロセス２１１は、受信した完了応答からメッセージ送信のステータスを読み出す（ステップＳ２９）。
【０１３０】
その後、受信側ノードのメッセージ受信回路２４のＲＡＭアクセス制御部１０２は、割込要求発行条件が充足されると、メッセージ受信割込要求の生成を割込要求生成部１０７に指示する。そして、メッセージ受信回路２４の割込要求生成部１０７は、メッセージ受信割込要求を生成し、ＯＳ２２２に送信する（ステップＳ３０）。
【０１３１】
ＯＳ２２２は、メッセージ受信割込要求をメッセージ受信回路２４の割込要求生成部１０７から受信すると、コンテキストスイッチを実行する（ステップＳ３１）。
【０１３２】
ユーザプロセス２２１は、コンテキストスイッチの実行を受けて、割り込み処理を開始し、刈取レジスタリード命令をメッセージ受信回路２４へ送信する（ステップＳ３２）。
【０１３３】
メッセージ受信回路２４のＲＡＭアクセス制御部１０２は、刈取レジスタリード命令をユーザプロセス２２１から受けて、ペンディングビットの連続読み出しを実行する。そして、ＲＡＭアクセス制御部１０２は、読み出したペンディングビット群をユーザプロセス２２１へ送信する。その後、ＲＡＭアクセス制御部１０２は、読み出したペンディングビットを基に指定された割込要因をユーザプロセス２２１へ送信する（ステップＳ３３）。この時、ＲＡＭアクセス制御部１０２は、読み出した割込要因を格納していたレジスタセット３００から割込要因のエントリを削除しクリアし、ペンディングビットをオフにする。
【０１３４】
ユーザプロセス２２１は、取得した割込要因が指定するアドレスからのメッセージの読み出しをメモリ１２に要求する（ステップＳ３４）。
【０１３５】
メモリ１２は、指定されたアドレスに格納されたメッセージをユーザプロセス２２１へ出力する（ステップＳ３５）。
【０１３６】
次に、図１３を参照して、本実施例に係るメッセージ受信回路２４による割込要因の刈取処理の流れについて説明する。図１３は、実施例１に係るメッセージ受信回路による割込要因の刈取処理のフローチャートである。
【０１３７】
ＲＡＭアクセス制御部１０２、コア２１から送信された割込要求をレジスタバス２５及びリクエスト調停部１０１を介して受信する（ステップＳ１０１）。
【０１３８】
ＲＡＭアクセス制御部１０２は、リードポインタが示すレジスタセット３００のエントリからペンディングビットを読み出す（ステップＳ１０２）。
【０１３９】
次に、ＲＡＭアクセス制御部１０２は、読出し回数が連続読出し回数の上限に達したか否かを判定する（ステップＳ１０３）。連続読み出し回数の上限に達していない場合（ステップＳ１０３：否定）、ＲＡＭアクセス制御部１０２は、ステップＳ１０２へ戻る。
【０１４０】
これに対して、連続読み出し回数の上限に達した場合（ステップＳ１０３：肯定）、ＲＡＭアクセス制御部１０２は、読み出したペンディングビットの情報を用いて、割込要因の情報を読み込み、読み込んだエントリを削除する（ステップＳ１０４）。この場合、ＲＡＭアクセス制御部１０２は、ペンディングビットの値をオンにする。
【０１４１】
その後、ＲＡＭアクセス制御部１０２は、レジスタセット３００の全てのエントリの読み出しが完了したか否かを判定する（ステップＳ１０５）。読み出していないエントリが存在する場合（ステップＳ１０５：否定）、ＲＡＭアクセス制御部１０２は、ステップＳ１０２へ戻り連続読み出しを繰り返す。
【０１４２】
これに対して、全てのエントリの読み出しが完了した場合（ステップＳ１０５：肯定）、ＲＡＭアクセス制御部１０２は、割込要因の読み出しを完了する（ステップＳ１０６）。これにより、割込要因の刈取処理が終了する。
【０１４３】
次に、図１４を参照して、本実施例に係るメッセージ受信回路２４によるレジスタセット３００からのペンディングビットの取得の詳細を、ハードウェアの観点から説明する。図１４は、メッセージ受信回路によるレジスタセットからのペンディングビットの取得処理のフローチャートである。図１４は、図１３におけるレジスタセット３００からペンディングビットを取得する処理をハードウェアの観点から詳細に表したフローチャートである。
【０１４４】
リクエスト調停部１０１は、リクエストをコア２１から受信する。そして、リクエスト調停部１０１は、リクエストを調停してＲＡＭアクセス制御部１０２へリクエストを出力する（ステップＳ１１１）。
【０１４５】
ＲＡＭアクセス制御部１０２は、リクエストの入力をリクエスト調停部１０１から受ける。そして、ＲＡＭアクセス制御部１０２は、受信したリクエストが指定するレジスタ種がペンディングレジスタか否か、すなわち刈取レジスタリード命令か否かを判定する（ステップＳ１１２）。
【０１４６】
レジスタ種がペンディングレジスタの場合（ステップＳ１１２：肯定）、ＲＡＭアクセス制御部１０２は、カウンタ１２６を起動する（ステップＳ１１３）。
【０１４７】
ＲＡＭアクセス制御部１０２は、リクエストで指定されたアドレスから初期値２２０を取得する。そして、ＲＡＭアクセス制御部１０２は、初期値２２０及びカウンタ値により指定されたアドレスの読出信号を受信レジスタ１０３へ発行する（ステップＳ１１４）。
【０１４８】
受信レジスタ１０３は、アドレスの読出信号をＲＡＭアクセス制御部１０２から受ける。そして、受信レジスタ１０３は、読出信号で指定されたアドレスのデータをデータ整形部１０４へ出力する（ステップＳ１１５）。
【０１４９】
ＲＡＭアクセス制御部１０２は、読み出しを連続読出し回数の上限まで実行したか否かを判定する（ステップＳ１１６）。読み出しを連続読出し回数の上限まで実行していない場合（ステップＳ１１６：否定）、ＲＡＭアクセス制御部１０２は、カウント値を１つインクリメントする（ステップＳ１１７）。そして、ＲＡＭアクセス制御部１０２は、ステップＳ１１４へ戻る。
【０１５０】
読み出しを連続読出し回数の上限まで実行した場合（ステップＳ１１６：肯定）、ＲＡＭアクセス制御部１０２は、カウンタを停止する（ステップＳ１１８）。
【０１５１】
これに対して、レジスタ種がペンディングレジスタでない場合（ステップＳ１１２：否定）、ＲＡＭアドレス制御部１０２は、アドレスの読出信号を受信レジスタ１０３へ発行する（ステップＳ１１９）。
【０１５２】
次に、受信レジスタ１０３は、アドレスの読出信号をＲＡＭアクセス制御部１０２から受ける。そして、受信レジスタ１０３は、読出信号で指定されたアドレスのデータをデータ整形部１０４へ出力する（ステップＳ１２０）。
【０１５３】
データ整形部１０４は、データをレジスタセット３００から取得する。そして、データ整形部１０４は、レジスタ種に応じてデータを整形する（ステップＳ１２１）。
【０１５４】
その後、データ整形部１０４は、整形したデータをレジスタバス２５へ出力し、コア２１へ向けて送信する（ステップＳ１２２）。
【０１５５】
さらに、図１５を参照して本実施例に係る情報処理システムによる割込要因の読み出しの効果について説明する。図１５は、情報処理システムによる割込要因の刈取処理の効果を説明するための図である。
【０１５６】
読出状態４０１は、従来の割込要因の読み出し方式を表す。また読出状態４０２は、本実施例に係る情報処理システムによる割込要因の読み出し方式を表す。
【０１５７】
従来の割込要因の読み出し方式では、読出状態４０１に示すように、コア２１が刈取レジスタリード命令をメッセージ受信回路２４に送信する。そして、メッセージ受信回路２４は、１回の刈取レジスタリード命令に応じて、１つのエントリをレジスタセット３００から読み出し、中間バッファ１４０へ格納する。そして、メッセージ受信回路２４は、中間バッファ１４０に格納したエントリから１ビットのペンディングビットの値を取得しコア２１へ送信する。レジスタセット３００が有する全てのエントリのペンディングビットの値をコア２１へ送信するには、全エントリ数をｍとすると、メッセージ受信回路２４は、上述の処理をｍ回繰り返す。
【０１５８】
これに対して、本実施例に係る割込要因の読み出し方式では、読出状態４０２に示すように、コア２１は、刈取レジスタリード命令をメッセージ受信回路２４へ送信する。メッセージ受信回路２４は、１回の刈取レジスタリード命令に応じて、カウンタ１２６を用いて、ｎ回連続して各エントリのペンディングビットの値だけをレジスタセット３００から取得し、中間バッファ１４０へ格納する。そして、メッセージ受信回路２４は、中間バッファ１４０に格納された値をコア２１へ送信することで、ｎ個のエントリ分のペンディングビットの値をコア２１へ送信する。すなわち、レジスタセット３００が有する全てのエントリのペンディングビットの値をコア２１へ送信するには、全エントリ数をｍとすると、メッセージ受信回路２４は、上述の処理をｍ／ｎ回繰り返す。したがって、従来の割込要因の読み出し方式に比べて、本実施例に係る割込要因の読み出し方式は、処理回数がｎ分の１となる。連続読み出しの回数ｎをデータバス幅に合わせた場合、６４ｂｉｔバスを有する情報処理システムであれば、ｎ＝６４となり、従来の割込要因の読み出し方式に比べて、本実施例に係る割込要因の読み出し方式は、１／６４にアクセス時間を短縮できる。
【０１５９】
以上に説明したように、本実施例に係る情報処理システムは、１回の割込要求に対して所定数のペンディングビットをコアに通知する。これにより、割込要因の刈取処理におけるレジスタセットアクセス数を低減でき、割込要因を保持するレジスタセットのエントリ数が大量である場合でも、割込要因の刈取処理を高速に短時間で行うことができる。したがって、メッセージ通信を高速化することが可能となる。また、他のトランザクション、例えばキャッシャブルなトランザクションを阻害する要因を減らすことができ、情報処理システム全体の性能を向上させることができる。
【０１６０】
ここで、本実施例では、１ビットであるメッセージ受信割込ペンディングビットを用いて、連続読み出しによる割込要因の刈取処理を行ったが、ペンディングビットはこれに限らない。例えば、ペンディングビットが複数ビット存在してもよい。また、複数のビットの論理和を求めて１ビットにしてペンディングビットとして用いてもよい。具体的には、空き通知割込みペンディングビットとメッセージ受信割込ペンディングビットを用いて、連続読み出しによる割込要因の刈取処理を行ってもよい。
【実施例２】
【０１６１】
図１６は、実施例２に係るメッセージ受信回路のブロック図である。
【０１６２】
割込レジスタ３１１は、割込レジスタライトフラグ及び割り込みキューＦＵＬＬフラグを有する。
【０１６３】
割込レジスタライトフラグは、割込要求の発行を許可するか否かを表すフラグである。このフラグがディセーブルの場合、受信側ノードにおける割込要求の発行が禁止される。逆にこのフラグがイネーブルであれば、受信側ノードにおける割込要求の発行が許可される。本実施例では、割込レジスタライトフラグの値が、「０」であればディセーブルを表し、「１」であればイネーブルを表す。
【０１６４】
割込キューＦＵＬＬフラグは、割込キュー３１２におけるエントリが満杯であることを示す。本実施例では、割込キューＦＵＬＬフラグが「０」の場合、割込キュー３１２は、満杯でなく、エントリを格納できる領域を有することを表す。また、割込キューＦＵＬＬフラグが「１」の場合、割込キュー３１２は、満杯であり、エントリを格納できる領域が余っていないことを表す。
【０１６５】
割込キュー３１２は、例えばＦＩＦＯ（First  In  First  Out）構造を有する。割込キュー３１２が格納できるエントリ数は、割込要求の発生頻度や設置スペースなどのノードの運用状態から決定されることが好ましい。割込キュー３１２の各エントリには、レジスタセット識別ＩＤ及びメッセージ受信フラグが格納される。この割込キュー３１２が、「優先記憶部」の一例にあたる。
【０１６６】
レジスタセット識別ＩＤは、割込キュー３１２に格納されたメッセージ受信割込みの情報に対応するメッセージを示すレジスタセット識別ＩＤである。
【０１６７】
メッセージ受信フラグは、メッセージを受信したことを示すフラグである。メッセージ受信フラグが「１」であれば、割込キュー３１２がメッセージ受信割込の情報を格納したことを表す。また、メッセージ受信フラグが「０」であれば、割込キュー３１２がメッセージ受信割込の情報を格納していないことを表す。
【０１６８】
ＲＡＭアクセス制御部１０２は、メッセージ受信部１０５がメッセージを受信すると、メッセージ受信部１０５から受信したメッセージから取得したレジスタセット識別ＩＤを取得する。そして、ＲＡＭアクセス制御部１０２は、取得したレジスタセットＩＤを割込キュー３１２に登録する。次に、ＲＡＭアクセス制御部１０２は、割込キュー３１２のメッセージ受信フラグをオンにする。さらに、ＲＡＭアクセス制御部１０２は、受信したメッセージから取得したレジスタセット識別ＩＤを有するレジスタセット３００の受信データ記録場所情報にメッセージを格納したメモリ１２のアドレスを登録する。また、ＲＡＭアクセス制御部１０２は、レジスタセット３００における各エントリの登録を行う。この場合、ＲＡＭアクセス制御部１０２は、レジスタセット３００のメッセージ受信割込ペンディングフラグをオフにする。
【０１６９】
その後、ＲＡＭアクセス制御部１０２は、割込キュー３１２の割込キューＦＵＬＬフラグを確認する。割込キューＦＵＬＬフラグが「０」であれば、ＲＡＭアクセス制御部１０２は、割込キュー３１２に格納された割込キューの数を取得する。割込キュー３１２に格納された割込キューの数が上限値から１を減算した数（以下では、「ＦＵＬＬ−１」という。）であれば、ＲＡＭアクセス制御部１０２は、割込レジスタ３１１の割込キューＦＵＬＬフラグを「１」に設定する。これに対して、割込キュー３１２に格納された割込キューの数が「ＦＵＬＬ−１」以下であれば、ＲＡＭアクセス制御部１０２は、割込キューＦＵＬＬフラグを「０」のまま維持する。
【０１７０】
その後、ＲＡＭアクセス制御部１０２は、割込レジスタ３１１の割込レジスタライトフラグを確認する。割込レジスタライトフラグがイネーブルであれば、ＲＡＭアクセス制御部１０２は、割込要求生成部１０７に割込要求の生成を指示する。これに対して、割込レジスタライトフラグがディセーブルであれば、ＲＡＭアクセス制御部１０２は、割込要求生成部１０７に対する割込要求の生成の指示を行わずに割込要因の格納処理を終了する。
【０１７１】
一方、割込キューＦＵＬＬフラグが「１」であれば、ＲＡＭアクセス制御部１０２は、メッセージに格納されたレジスタセット識別ＩＤを取得し、メッセージ受信割込の情報を格納したレジスタセット３００を特定する。そして、ＲＡＭアクセス制御部１０２は、特定したレジスタセット３００のメッセージ受信割込ペンディングフラグをオンにする。また、ＲＡＭアクセス制御部１０２は、受信したメッセージから取得したレジスタセット識別ＩＤを有するレジスタセット３００の受信データ記録場所情報にメッセージを格納したメモリ１２のアドレスを登録する。さらに、ＲＡＭアクセス制御部１０２は、レジスタセット３００における各エントリの登録を行う。
【０１７２】
その後、ＲＡＭアクセス制御部１０２は、割込レジスタ３１１の割込レジスタライトフラグを確認する。割込レジスタライトフラグがイネーブルであれば、ＲＡＭアクセス制御部１０２は、割込要求生成部１０７に割込要求の生成を指示する。これに対して、割込レジスタライトフラグがディセーブルであれば、ＲＡＭアクセス制御部１０２は、割込要求生成部１０７に対する割込要求の生成の指示を行わずに割込要因の格納処理を終了する。
【０１７３】
さらに、割込み刈取処理について説明する。ＲＡＭアクセス制御部１０２は、割込要求を受信すると、割込レジスタ３１１の割込レジスタライトフラグを「０」、すなわちディセーブルに設定する。これにより、ＲＡＭアクセス制御部１０２は、刈取処理の間の新たな割込要求の発行を抑制する。
【０１７４】
次に、ＲＡＭアクセス制御部１０２は、割込要因の情報が割込キュー３１２に格納されたか否かを判定する。割込要因の情報が割込キュー３１２にある場合、ＲＡＭアクセス制御部１０２は、割込キュー３１２の先頭の割込要因を読み出し、割込キュー３１２から削除する。
【０１７５】
そして、ＲＡＭアクセス制御部１０２は、割込キュー３１２の全エントリを読み出し終えたかを判定する。読み出していないエントリが割込キュー３１２に存在する場合、ＲＡＭアクセス制御部１０２は、割込キュー３１２からのエントリの読み出し及び削除を、エントリがなくなるまで繰り返す。
【０１７６】
割込キュー３１２に読み出すエントリがなくなった場合、ＲＡＭアクセス制御部１０２は、割込レジスタ３１１の割込キューＦＵＬＬフラグが「１」か否かを判定する。割込キューＦＵＬＬフラグが「０」であれば、割込キュー３１２にエントリを格納する余裕があるので、レジスタセット３００にはエントリが格納されていないといえる。そのため、割込キューＦＵＬＬフラグが「０」の場合、ＲＡＭアクセス制御部１０２は、レジスタセット３００からの割込要因の刈込は行わなくてよい。そこで、ＲＡＭアクセス制御部１０２は、割込レジスタ３１１の割込レジスタライトフラグを「１」、すなわちイネーブルに設定する。これにより、割込要因のレジスタセット３００及び割込キュー３１２への割込要因の情報の書込みの禁止が解除され、メッセージの受信や空き通知割込の発行などが再開される。そして、ＲＡＭアクセス制御部１０２は、割込要因の刈取処理を終了する。
【０１７７】
これに対して、割込キューＦＵＬＬフラグが「１」であれば、割込キュー３１２にエントリ格納の余裕が無いので、レジスタセット３００にはエントリが格納されたことが考えられる。そこで、ＲＡＭアクセス制御部１０２は、レジスタセット３００からの割込要因の刈取処理を実行する。
【０１７８】
この場合、ＲＡＭアクセス制御部１０２は、割込キューＦＵＬＬフラグを「０」にする。次に、ＲＡＭアクセス制御部１０２は、レジスタセット３００からのペンディングビットの連続読み出しを開始する。そして、ＲＡＭアクセス制御部１０２は、レジスタセット３００から全てのエントリのペンディングビットを読み出すまで、連続読み出しを繰り返す。
【０１７９】
レジスタセット３００から全てのエントリを読み出した場合、ＲＡＭアクセス制御部１０２は、割込レジスタ３１１の割込レジスタライトフラグを「１」、すなわちイネーブルに設定する。そして、ＲＡＭアクセス制御部１０２は、割込要因の刈取処理を終了する。
【０１８０】
割込要求生成部１０７は、空き通知割込の発行条件を満たしたか否かを判定する。そして、空き通知割込の発行条件を満たした場合、割込要求生成部１０７は、レジスタセット３００の受信側空き通知割込フラグを確認する。受信側空き通知割込フラグがディセーブルであれば、割込要求生成部１０７は、空き通知割込要求の格納処理を終了する。
【０１８１】
一方、受信側空き通知割込フラグがイネーブルであれば、割込要求生成部１０７は、割込キューＦＵＬＬフラグが「１」であるか否かを判定する。割込キューＦＵＬＬフラグが「１」でない場合、割込キュー３１２の空き通知割込フラグをオンにする。
【０１８２】
その後、割込要求生成部１０７は、割込キュー３１２に格納されたキューの数を取得する。割込キュー３１２に格納されたキューの数が「ＦＵＬＬ−１」であれば、割込要求生成部１０７は、割込レジスタ３１１の割込キューＦＵＬＬフラグを「１」に設定する。これに対して、割込キュー３１２に格納されたキューの数が「ＦＵＬＬ−１」以下であれば、割込要求生成部１０７は、割込キューＦＵＬＬフラグを「０」のまま維持する。
【０１８３】
その後、割込要求生成部１０７は、割込レジスタ３１１の割込レジスタライトフラグを確認する。割込レジスタライトフラグがイネーブルであれば、割込要求生成部１０７は、空き通知割込要求を生成する。そして、割込要求生成部１０７は、生成した空き通知割込要求をコア２１に送信する。これに対して、割込レジスタライトフラグがディセーブルであれば、割込要求生成部１０７は、空き通知割込要求の生成を行わずに割込要因の格納処理を終了する。
【０１８４】
一方、割込キューＦＵＬＬフラグが「１」であれば、割込要求生成部１０７は、空き通知割込要求を格納するレジスタセット３００を特定する。そして、割込要求生成部１０７は、特定したレジスタセット３００の空き通知割込ペンディングフラグをオンにする。さらに、割込要求生成部１０７は、レジスタセット３００における各エントリの登録を行う。
【０１８５】
その後、割込要求生成部１０７は、割込レジスタ３１１の割込レジスタライトフラグを確認する。割込レジスタライトフラグがイネーブルであれば、割込要求生成部１０７は、空き通知割込要求を生成する。そして、割込要求生成部１０７は、生成した空き通知割込要求をコア２１に送信する。これに対して、割込レジスタライトフラグがディセーブルであれば、割込要求生成部１０７は、空き通知割込要求の生成を行わずに割込要因の格納処理を終了する。
【０１８６】
次に、図１７を参照して、本実施例に係る情報処理装置による割込要因の刈取処理について説明する。図１７は、実施例２に係る情報処理装置による割込要因の刈取処理のフローチャートである。
【０１８７】
ＲＡＭアクセス制御部１０２、コア２１から送信された割込要求をレジスタバス２５及びリクエスト調停部１０１を介して受信する（ステップＳ２０１）。
【０１８８】
ＲＡＭアクセス制御部１０２は、割込レジスタ３１１の割込レジスタライトフラグを「０」、すなわちディセーブルにする（ステップＳ２０２）。
【０１８９】
ＲＡＭアクセス制御部１０２は、割込キュー３１２からエントリを読み出す（ステップＳ２０３）。
【０１９０】
ＲＡＭアクセス制御部１０２は、割込キュー３１２に割込要因があるか否かを判定する（ステップＳ２０４）。
【０１９１】
割込要因がある場合（ステップＳ２０４：肯定）、ＲＡＭアクセス制御部１０２は、割込要因を読み出し、読み出した割込要因を削除しペンディングビットをオンにしてエントリをクリアする（ステップＳ２０５）。
【０１９２】
次に、ＲＡＭアクセス制御部１０２は、割込キュー３１２に格納された全てのエントリの読み出しが完了したか否かを判定する（ステップＳ２０６）。読み出していないエントリが存在する場合（ステップＳ２０６：否定）、ＲＡＭアクセス制御部１０２は、ステップＳ２０３へ戻る。
【０１９３】
これに対して、全てのエントリの読み出しが完了した場合（ステップＳ２０６：肯定）、ＲＡＭアクセス制御部１０２は、割込レジスタ３１１の割込キューＦＵＬＬフラグが「１」か否かを判定する（ステップＳ２０７）。割込キューＦＵＬＬフラグ≠１の場合（ステップＳ２０７：否定）、ＲＡＭアクセス制御部１０２は、ステップＳ２０３へ戻る。
【０１９４】
これに対して、割込キューＦＵＬＬフラグ＝１の場合（ステップＳ２０７：肯定）、ＲＡＭアクセス制御部１０２は、割込キューＦＵＬＬフラグを「０」に設定する（ステップＳ２０８）。
【０１９５】
そして、ＲＡＭアクセス制御部１０２は、リードポインタが示すレジスタセット３００のエントリからペンディングビットを読み出す（ステップＳ２０９）。
【０１９６】
次に、ＲＡＭアクセス制御部１０２は、読出し回数が連続読出し回数の上限に達したか否かを判定する（ステップＳ２１０）。連続読み出し回数の上限に達していない場合（ステップＳ２１０：否定）、ＲＡＭアクセス制御部１０２は、ステップＳ２０９へ戻る。
【０１９７】
これに対して、連続読み出し回数の上限に達した場合（ステップＳ２１０：肯定）、ＲＡＭアクセス制御部１０２は、読み出したペンディングビットの情報を用いて、割込要因の情報を読み込み、読み込んだエントリを削除する（ステップＳ２１１）。この場合、ＲＡＭアクセス制御部１０２は、ペンディングビットの値をオンにする。
【０１９８】
その後、ＲＡＭアクセス制御部１０２は、レジスタセット３００の全てのエントリの読み出しが完了したか否かを判定する（ステップＳ２１２）。読み出していないエントリが存在する場合（ステップＳ２１２：否定）、ＲＡＭアクセス制御部１０２は、ステップＳ２０９へ戻り連続読み出しを繰り返す。
【０１９９】
これに対して、全てのエントリの読み出しが完了した場合（ステップＳ２１２：肯定）、ＲＡＭアクセス制御部１０２は、ステップ２０３へ戻る。
【０２００】
一方、割込キュー３１２に割込要因が無い場合（ステップＳ２０４：否定）、ＲＡＭアクセス制御部１０２は、割込レジスタ３０２の割込レジスタライトフラグを「１」、すなわちイネーブルに設定する（ステップＳ２１４）。
【０２０１】
そして、ＲＡＭアクセス制御部１０２は、割込要因の読み出しを完了する（ステップＳ２１５）。これにより、割込要因の刈取処理が終了する。
【０２０２】
以上に説明したように、本実施例に係る情報処理装置は、ＦＩＦＯの割込キューを設け、割込キューに空きが有る場合、割込キューに割込要因を格納し、割込キューに空きが無ければ、レジスタセットに割込要因を格納する。そして、本実施例に係る情報処理装置は、割込キューから先に割込要因の刈取処理を行い、その後、レジスタセットに割込要因が有れば所定数連続でペンディングビットを読み込み、読み込んだペンディングビットの値を基に割込み要因の刈取処理を行う。このように、割込キューに収まる数以内の割り込み数であれば、レジスタセットを読み込まずに割込要因の刈取処理を行うことができ、割込刈取処理の時間を短縮して割込刈取処理を高速に行うことができる。また、割込キューに格納しきれない割込要因については、レジスタセットに格納しておき、割込キューからの割込要因の読み出し後に連続読み出しを行うことで、高速で割込要因の刈取処理を行うことができる。
【符号の説明】
【０２０３】
１  ノード
２  グローバルＸＢ
１１  ＣＰＵ
１２  メモリ
１３  ローカルＸＢ
２１  コア
２２  キャッシュ
２３  メッセージ送信回路
２４  メッセージ受信回路
２５  レジスタバス
３１  送信レジスタ
３２  メッセージ生成部
３３  メッセージ応答受信部
３４  応答生成部
１０１  リクエスト調停部
１０２  ＲＡＭアクセス制御部
１０３  受信レジスタ
１０４  データ整形部
１０５  メッセージ受信部
１０６  メッセージ応答生成部
１０７  割込要求生成部
１４０  中間バッファ
３００  レジスタセット
３１１  割込レジスタ
３１２  割込キュー
【図１】
0006597260.tif 000002
【図２】
0006597260.tif 000003
【図３】
0006597260.tif 000004
【図４】
0006597260.tif 000005
【図５】
0006597260.tif 000006
【図６】
0006597260.tif 000007
【図７】
0006597260.tif 000008
【図８】
0006597260.tif 000009
【図９】
0006597260.tif 000010
【図１０】
0006597260.tif 000011
【図１１】
0006597260.tif 000012
【図１２】
0006597260.tif 000013
【図１３】
0006597260.tif 000014
【図１４】
0006597260.tif 000015
【図１５】
0006597260.tif 000016
【図１６】
0006597260.tif 000017
【図１７】
0006597260.tif 000018