(57)【特許請求の範囲】
【請求項１】
所定処理の実行を要求する割込要求を格納領域に格納し、格納した前記割込要求を順次出力するＦＩＦＯ構造の割込キューと、
前記割込要求を格納する、前記割込キューより格納領域の大きいレジスタセットと、
前記割込要求を受信し、前記格納領域が前記割込キューに残っている場合、受信した前記割込要求を前記割込キューに格納し、前記格納領域が前記割込キューに残っていない場合、受信した前記割込要求を前記レジスタセットに格納する要求管理部と、
前記割込キューに前記割込要求が存在する場合、前記割込キューから順次出力される前割込要求を順次取得し、前記割込キューに前記割込要求がなくなった場合、前記レジスタセットを検索して前記割込要求を検出し取得する要求取得部と、
前記要求取得部により取得された前記割込要求にしたがって前記所定処理を実行する処理実行部と
を備えたことを特徴とする情報処理装置。
【請求項２】
前記割込キューは、格納の時期が古い順から前記割込要求を順次出力することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記要求管理部は、前記割込キューに前記格納領域が残っていない場合、前記割込キューの満杯情報を前記要求取得部に通知し、
前記要求取得部は、前記割込キューに格納された前記割込要求を全て取得したときに、前記満杯情報の通知を受信している場合、前記レジスタセットを検索して前記割込要求を検出し取得し、前記満杯情報の通知を受信していない場合、前記割込要求の取得を終了することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記要求管理部は、前記レジスタセットに前記割込要求を書き込む際に、前記割込要求の未取得を示す待機情報を付加し、
前記要求取得部は、前記レジスタセットを検索する場合、前記待機情報が付加されているか否かを判定して、格納された前記割込要求を検出する
ことを特徴とする請求項１〜３のいずれか一つに記載の情報処理装置。
【請求項５】
前記要求管理部は、前記割込キュー及び前記レジスタセットに対して前記割込要求を格納した場合、前記要求取得部に対して、格納した前記割込要求が示す所定処理の実行要求を通知し、
前記要求取得部は、前記実行要求の通知を受信して、前記割込キュー及び前記レジスタセットからの前記割込要求の取得を開始し、前記割込キュー及び前記レジスタセットからの前記割込要求の取得をする間、前記要求管理部による前記実行要求の通知の発行を停止させる
ことを特徴とする請求項１〜４のいずれか一つに記載の情報処理装置。
【請求項６】
前記割込キュー又は前記レジスタセットのいずれかにデータが格納されていない前記格納領域が存在することを通知する通知処理を生成する通知処理生成部をさらに備え、
前記割込キューは、前記割込要求及び前記通知処理の実行要求を格納し、格納した前記割込要求及び前記通知処理の実行要求を順次出力し、
前記レジスタセットは、前記割込要求及び前記通知処理の実行要求を格納し、
前記通知処理生成部は、前記格納領域が前記割込キューに残っている場合、前記通知処理の実行要求を前記割込キューに格納し、前記格納領域が前記割込キューに残っていない場合、前記通知処理の実行要求を前記レジスタセットに格納し、
前記要求取得部は、前記割込要求又は前記通知処理の実行要求のいずれか一方もしくは双方が前記割込キューに存在する場合、前記割込キューが出力する前記割込要求又は前記通知処理の実行要求を順次取得し、未取得の前記割込要求又は前記通知処理の実行要求が前記割込キューになくなった場合、前記レジスタセットを検索して前記割込要求又は前記通知処理の実行要求を検出し取得する
ことを特徴とする請求項１〜５のいずれか一つに記載の情報処理装置。
【請求項７】
第１情報装置及び第２情報装置を有する情報処理システムであって、
前記第１情報装置は、所定処理の実行命令を送信する送信部を備え、
前記第２情報装置は、
前記所定処理の実行を要求する割込要求を格納領域に格納し、格納した前記割込要求を順次出力するＦＩＦＯ構造の割込キューと、
前記割込要求を格納する、前記割込キューより格納領域の大きいレジスタセットと、
前記送信部から送信された前記実行命令を受信し、前記格納領域が前記割込キューに残っている場合、前記実行命令で指定された前記所定処理の実行を要求する前記割込要求を前記割込キューに格納し、前記格納領域が前記割込キューに残っていない場合、前記実行命令で指定された前記所定処理の実行を要求する前記割込要求を前記レジスタセットに格納する要求管理部と、
前記割込キューに前記割込要求が存在する場合、前記割込キューから順次出力される前記割込要求を順次取得し、前記割込キューに前記割込要求がなくなった場合、前記レジスタセットを検索して前記割込要求を検出し取得する要求取得部と、
前記要求取得部により取得された前記割込要求にしたがって前記所定処理を実行する処理実行部とを備えた
ことを特徴とする情報処理システム。
【請求項８】
所定処理の実行を要求する割込要求を受信し、
前記割込要求を格納領域に格納して格納した前記割込要求を順次出力するＦＩＦＯ構造の割込キューに前記格納領域が残っている場合、前記割込キューに受信した前記割込要求を格納し、
前記格納領域が前記割込キューに残っていない場合、前記割込キューより格納領域の大きいレジスタセットに受信した前記割込要求を格納し、
前記割込キューに前記割込要求が存在する場合、前記割込キューが出力する前記割込要求を順次取得し、
前記割込キューに前記割込要求がなくなった場合、前記レジスタセットを検索して前記割込要求を検出し取得する
ことを特徴とする割込装置制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム及び割込装置制御方法に関する。
【背景技術】
【０００２】
従来、複数のソフトウェアが連係して処理を実行する際に、各ソフトウェアが用いるデータを送受信するプロセス間通信（ＩＰＣ:Inter  Process  Communication）の技術が知られている。このようなプロセス間通信を行う技術の一例として、キューを用いてプロセス間通信を行う技術が知られている。
【０００３】
また、情報処理システムは、それぞれ個別のＣＰＵを有する複数のノードを有する。そして、複数のＣＰＵ（Central  Processing  Unit）がそれぞれ異なるプロセスを実行するマルチノードシステムの技術が知られている。このようなマルチノードシステムの技術の一例として、データをキャッシュする機能を有するＣＰＵを複数有し、各ＣＰＵがそれぞれ異なるプロセスを同時に実行する情報処理システムが知られている。さらには、各ＣＰＵがそれぞれ独立したＯＳ（Operating System）を実行し、このＣＰＵ間で一部のメモリ領域を共有する、共有メモリシステムの技術が知られている。この様な構成とする事で、処理能力をより向上させる事が出来、さらに各ノードでＯＳが個別に動作する事で、エラーの波及を防止する事が出来るのでシステムの可用性を向上させる事ができる。
【０００４】
各ノードは、ローカルメモリ、ＨＰＶ（Hypervisor）ソフト、ＯＳ、デバイスドライバを有し、それぞれ異なるユーザプロセスを同時に実行する。なお、ＨＰＶソフトとは、各ノードが稼働させる仮想マシンの管理を行うソフトウェアである。このような情報処理システムでは、各ノードが共有する共有メモリにライトポインタとリードポインタとを格納することでキューを実現し、各ノードの間でユーザプロセス間のプロセス間通信を行う。
【０００５】
プロセス間通信における送信側ノードには、コア又はスレッド毎に専用の送信メッセージレジスタが設けられている。送信側ノードのＣＰＵが動作させるアプリケーションソフトウェアにより送信メッセージレジスタにメッセージを書き込まれ、書き込まれたメッセージが受信側ノードへ送信される。送信されるメッセージは、宛先のＣＰＵのＩＤ（Identifier）及びレジスタセット識別ＩＤを含む。
【０００６】
受信側ノードは、アドレスレジスタ、リードポインタ、ライトポインタなどを有するレジスタセットを複数セット備える。そして、受信側ノードは、送信側ノードから指定されたレジスタセット識別ＩＤによって選択されたレジスタセットによって示される記憶領域にメッセージを書き込む。
【０００７】
ここで、受信側ノードのユーザプロセスがメッセージ受信を検知する方法として、ポーリング監視及びメッセージ受信割り込みの２つの方法がある。
【０００８】
ポーリング監視を行う場合、ユーザプロセスは、メッセージの受信の有無に関係なく一定周期でメッセージ受信確認を行う。そして、ユーザプロセスは、メッセ―受信確認においてメッセージを検知した場合、メッセージ読み出し処理を行う。
【０００９】
また、メッセージ受信割り込みを行う場合、受信側のユーザプロセスはスリープ状態にある。そして、ユーザプロセスは、ＣＰＵからの割込要求を受けることで、コンテキストスイッチを行い、メッセージ読み出し処理を行う。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０１３−２１４１６８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
しかしながら、メッセージ受信割り込みでは、ＣＰＵは、メッセージを受信するたびに割込要求を発行する。具体的には、受信側ノードのＣＰＵは、メッセージを受信するとレジスタセットに割込要因をセットし、割込要求をユーザプロセスに対して発行する。
【００１２】
ここで、メッセージ受信回路のレジスタセットのエントリ数が多い、すなわち受信可能なメッセージ数が多い場合、割込要求の発行数が増加する。レジスタセットの情報はＲＡＭ（Random  Access  Memory）などの高容量の媒体に記録されており、レジスタセットに格納された割込要因の検索などに時間がかかり、割込要因を収集する割込刈取処理に多くの時間がかかってしまう。
【００１３】
開示の技術は、上記に鑑みてなされたものであって、割込刈取処理を高速に行う情報処理装置、情報処理システム及び割込装置制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
本願の開示する情報処理装置、情報処理システム及び割込装置制御方法は、一つの態様において、ＦＩＦＯ構造の割込キューは、所定処理の実行を要求する割込要求を格納領域に格納し、格納した前記割込要求を順次出力する。レジスタセットは、前記割込キューより格納領域が大きく且つ前記割込要求を格納する。要求管理部は、前記割込要求を受信し、前記格納領域が前記割込キューに残っている場合、受信した前記割込要求を前記割込キューに格納し、前記格納領域が前記割込キューに残っていない場合、受信した前記割込要求を前記レジスタセットに格納する。要求取得部は、前記割込キューに前記割込要求が存在する場合、前記割込キューから順次出力される前割込要求を順次取得し、前記割込キューに前記割込要求がなくなった場合、前記レジスタセットを検索して前記割込要求を検出し取得する。処理実行部は、前記要求取得部により取得された前記割込要求にしたがって前記所定処理を実行する。
【発明の効果】
【００１５】
本願の開示する情報処理装置、情報処理システム及び割込装置制御方法の一つの態様によれば、割込刈取処理を高速に行うことができるという効果を奏する。
【図面の簡単な説明】
【００１６】
【図１】図１は、ノード間メッセージ通信を行う情報処理システムのシステム構成図である。
【図２】図２は、メッセージ送信回路の詳細を表すブロック図である。
【図３】図３は、メッセージ受信回路の詳細を表すブロック図である。
【図４】図４は、レジスタセットのエントリ情報の一例を表す図である。
【図５】図５は、割込レジスタのエントリ情報の一例を表す図である。
【図６】図６は、割込キューのエントリ情報の一例を表す図である。
【図７】図７は、実施例に係る情報処理システムによるメッセージ受信割込を用いたメッセージ受信の通知の処理の全体的な流れのフローチャートである。
【図８】図８は、実施例に係る情報処理装置による割込要因の格納処理のフローチャートである。
【図９】図９は、実施例に係る情報処理装置による割込要因の刈り取り処理のフローチャートである。
【発明を実施するための形態】
【００１７】
以下に、本願の開示する情報処理装置、情報処理システム及び割込装置制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、情報処理システム及び割込装置制御方法が限定されるものではない。
【実施例】
【００１８】
図１は、ノード間メッセージ通信を行う情報処理システムのシステム構成図である。ここでは、ノード１Ａ及び１Ｂという２つのノード間の通信について説明する。ノード１Ａとノード１Ｂとは同じ機能を有している。本実施例に係る情報処理システムは、ノード１Ａ及び１Ｂのそれぞれに対応して、メモリ２Ａ及びメモリ２Ｂを有している。ただし、メモリ２Ａ及びメモリ２Ｂは、ノード１Ａ及び１Ｂのいずれも使用する１つの共有メモリにしてもよい。ここでは、ノード１Ａを例に説明するが、ノード１Ｂの各部も同様の機能を有する。
【００１９】
ノード１Ａは、コア１１Ａ、メッセージ送信回路１２Ａ及びメッセージ受信回路１３Ａを有している。また、ノード１Ｂは、コア１１Ｂ、メッセージ送信回路１２Ｂ及びメッセージ受信回路１３Ｂを有している。ここで、図１では、ノード１Ａ及び１Ｂに１つのコアが有る場合で説明しているが、コアは１つ以上あってもよい。
【００２０】
コア１１Ａは、メッセージ送信回路１２Ａにメッセージの送信のための命令として、レジスタ読出要求をメッセージ送信回路１２Ａへ出力する。そして、コア１１Ａは、レジスタ読出要求の応答をメッセージ送信回路１２Ａから受信する。
【００２１】
また、コア１１Ａは、レジスタ読出要求又は書込要求をメッセージ受信回路１３Ａへ出力する。そして、コア１１Ａは、レジスタ読出要求又は書込要求に対する応答をメッセージ受信回路１３Ａから受信する。
【００２２】
また、コア１１Ａは、割込要求をメッセージ受信回路１３Ａから取得する。コア１１Ａは、割込要求をメッセージ受信回路１３Ａから取得すると、割込要求にしたがって処理を行う。割込要求で指示される処理には、特に制限はなく、例えば、演算処理やデータの書き込みや読み込みの処理などがある。
【００２３】
メッセージ送信回路１２Ａは、レジスタ読出要求をコア１１Ａから受信する。そして、メッセージ送信回路１２Ａは、レジスタ読出要求で指定されたメッセージを指定された他のノード、ここではノード１Ｂのメッセージ受信回路１３Ｂへ送信する。また、メッセージ送信回路１２Ａは、メッセージ送信の結果を応答としてコア１１Ａに送信する。
【００２４】
また、メッセージ送信回路１２Ａは、ノード１Ｂからメッセージ送信に対する応答を受信する。そして、メッセージ送信回路１２Ａは、応答で示されるメッセージの送信結果を基にレジスタ読出要求又は書込要求に対する応答を生成し、コア１１Ａへ出力する。
【００２５】
メッセージ受信回路１３Ａは、レジスタ読出要求又は書込要求をコア１１Ａから受信する。そして、メッセージ受信回路１３Ａは、受信した要求にしたがってレジスタに対する処理を実行する。例えば、メッセージ受信回路１３Ａは、コア１１Ａからレジスタ読出要求を受けた場合、レジスタからデータを読み出し、コア１１Ａへ読み出したデータを送信する。
【００２６】
次に、メッセージ送信回路１２Ａ及び１２Ｂ、並びに、メッセージ受信回路１３Ａ及び１３Ｂの詳細について説明する。以下では、ノード１Ａを送信側ノード、ノード１Ｂを受信側ノードとして、ノード１Ａからノード１Ｂへメッセージが送信される場合で説明する。
【００２７】
図２は、メッセージ送信回路の詳細を表すブロック図である。図２に示すように、メッセージ送信回路１２Ａは、送信レジスタ１２１、メッセージ生成部１２２、メッセージ応答受信部１２３及び応答生成部１２４を有している。
【００２８】
送信レジスタ１２１は、コア１１Ａからレジスタ読出要求を受信する。そして、送信レジスタ１２１は、受信したレジスタ読出要求を格納する。さらに、送信レジスタ１２１は、レジスタ読出要求の格納処理の結果を応答生成部１２４へ出力する。
【００２９】
メッセージ生成部１２２は、レジスタ読出要求が送信レジスタ１２１に格納されたことを確認する。そして、メッセージ生成部１２２は、格納されたレジスタ読出要求にしたがいメッセージを生成する。そして、メッセージ生成部１２２は、生成したメッセージをノード１Ｂへ送信する。
【００３０】
メッセージ応答受信部１２３は、メッセージ生成部１２２が出力したメッセージの受信結果を示す応答をノード１Ｂから受信する。そして、メッセージ応答受信部１２３は、受信した応答を応答生成部１２４へ出力する。
【００３１】
応答生成部１２４は、レジスタ読出要求の格納処理の結果の入力を送信レジスタ１２１から受ける。そして、応答生成部１２４は、レジスタ読出要求の格納処理の結果を表す応答を生成する。その後、応答生成部１２４は、生成したレジスタ読出要求の格納処理の結果を表す応答をコア１１Ａへ出力する。
【００３２】
また、応答生成部１２４は、ノード１Ｂからのメッセージの受信結果を示す応答の入力をメッセージ応答受信部１２３から受ける。そして、応答生成部１２４は、ノード１Ｂのメッセージの受信結果を示す応答を生成する。その後、応答生成部１２４は、生成したノード１Ｂのメッセージの受信結果を示す応答をコア１１Ａへ出力する。
【００３３】
図３は、メッセージ受信回路の詳細を表すブロック図である。図３に示すように、メッセージ受信回路１３Ｂは、受信レジスタ１３１、メッセージ受信部１３２、メッセージ応答生成部１３３、割込要求生成部１３４及び応答生成部１３５を有している。
【００３４】
受信レジスタ１３１は、レジスタセット３１１、割込レジスタ３１２及び割込キュー３１３を有している。
【００３５】
レジスタセット３１１は、アドレスレジスタ、リードポインタ及びライトポインタを有する。レジスタセット３１１は、送信側ノードのコアの数及びコアが並列処理できる処理数にしたがって用いる数が決定される。ＣＰＵ１０Ｂに搭載されているレジスタセット３１１の内の所定数を使用するとして、使用するレジスタセット３１１の数が決定される場合もある。
【００３６】
レジスタセット３１１は、図４に示す項目のエントリを格納する。図４は、レジスタセットのエントリ情報の一例を表す図である。図４では、レジスタセット３１１に格納される各エントリの情報及びそのエントリに用いるビット数を表している。このレジスタセット３１１が、「第２記憶部」の一例にあたる。
【００３７】
受信側空き通知割込フラグは、受信側ノード（ここでは、ノード１Ｂである。）において空き通知割込を使用するか否かを示すフラグである。空き通知割込とは、受信側ノードにメッセージを受信可能なレジスタセット３１１が確保できた場合に、メッセージが受信可能になったことをコア１１Ａに知らせる割り込みである。例えば、空き通知割込は、予め決められた数以上のレジスタセット３１１がメッセージを格納できる状態になった場合に発行される。受信側空き通知割込フラグは、予め操作者からの指示を受けて設定される。本実施例では、受信側空き通知割込フラグがイネーブルに設定されている場合で説明する。
【００３８】
受信メッセージ数は、ノード１Ｂが受信しているメッセージの数を表す。受信メッセージ数は、図４に示す４ｂｉｔの情報で受信しているメッセージの数を表す。
【００３９】
割込発行条件メッセージ空き数は、空き通知割込を発行する条件となるメッセージの数を表している。
【００４０】
メッセージ受信割込フラグは、メッセージ受信割込を使用するか否かを表すフラグである。メッセージ受信割込フラグがディセーブルの場合、ノード１Ｂは、ポーリング監視によりメッセージ受信の検知を行う。また、メッセージ割込フラグがイネーブルであれば、ノード１Ｂは、メッセージ受信によりメッセージ受信の検知を行う。メッセージ受信割込フラグは、予め操作者からの指示を受けて設定される。本実施例では、メッセージ受信割込フラグがイネーブルに設定されている場合で説明する。
【００４１】
空き通知割込ペンディングフラグは、レジスタセット３１１が空き通知割込の情報を格納しているか否かを表すフラグである。
【００４２】
メッセージ受信割込ペンディングフラグは、レジスタセット３１１が受信側メッセージ受信割込の情報を格納しているか否かを表すフラグである。この空き通知割込ペンディングフラグ及びメッセージ受信割込ペンディングフラグが、「待機情報」の一例にあたる。
【００４３】
受信データ記録場所情報は、受信したメッセージに含まれるデータを格納したメモリのアドレスの情報である。
【００４４】
割込レジスタ３１２は、図５に示す項目のエントリを格納する。図５は、割込レジスタのエントリ情報の一例を表す図である。図５では、割込レジスタ３１２に格納される各エントリの情報及びそのエントリに用いるビット数を表している。
【００４５】
割込レジスタライトフラグは、割込要求の発行を許可するか否かを表すフラグである。このフラグがディセーブルの場合、受信ノードにおける割込要求の発行が禁止される。逆にこのフラグがイネーブルであれば、受信ノードにおける割込要求の発行が許可される。本実施例では、割込レジスタライトフラグの値が、「０」であればディセーブルを表し、「１」であればイネーブルを表す。
【００４６】
割込キューＦＵＬＬフラグは、割込キュー３１３におけるエントリが満杯であることを示す。本実施例では、割込キューＦＵＬＬフラグが「０」の場合、割込キュー３１３は、満杯でなく、エントリを格納できる領域が余っていることを表す。また、割込キューＦＵＬＬフラグが「１」の場合、割込キュー３１３は、満杯であり、エントリを格納できる領域が余っていないことを表す。この割込キューＦＵＬＬフラグが、「満杯情報」の一例にあたる。
【００４７】
割込キュー３１３は、例えばＦＩＦＯ（First  In  First  Out）構造を有している。割込キュー３１３が格納できるエントリ数は、割込要求の発生頻度や設置スペースなどのノード１Ｂの運用状態から決定されることが好ましい。例えば、割込キュー３１３は、６４エントリまで格納可能と決定してもよい。
【００４８】
割込キュー３１３は、図６に示す項目のエントリを格納する。図６は、割込キューのエントリ情報の一例を表す図である。図６では、割込キュー３１３に格納される各エントリの情報及びそのエントリに用いるビット数を表している。この割込キュー３１３が、「第１記憶部」の一例にあたる。
【００４９】
レジスタセット識別ＩＤは、ノード１Ａにより送信されたメッセージに格納されていたレジスタセット識別ＩＤである。割込キュー３１３には、後述するように受信したメッセージを示す情報が格納されるが、このレジスタセット識別ＩＤは、そのメッセージに含まれていたレジスタセット識別ＩＤである。
【００５０】
メッセージ受信フラグは、メッセージを受信したことを示すフラグである。メッセージ受信フラグが「１」であれば、ノード１Ａがメッセージを受信しており、割込キュー３１３がメッセージ受信割込の情報を格納していることを表す。また、メッセージ受信フラグが「０」であれば、ノード１Ａがメッセージを受信していないことを表しており、割込キュー３１３がメッセージ受信割込の情報を格納していないことを表す。
【００５１】
また、空き通知割込フラグは、空き通知の情報を格納していることを示すフラグである。空き通知割込フラグが「１」であれば、割込キュー３１３が空き通知割込の情報を格納していることを表す。また、空き通知割込フラグが「０」であれば、割込キュー３１３が空き通知割込の情報を格納していないことを表す。
【００５２】
以下では、メッセージ受信割込及び空き通知割込をまとめて、「割込要因」という。さらに、割込キュー３１３における、メッセージ受信フラグ及び空き通知割込フラグをまとめて表す場合、「割込要因情報」という。
【００５３】
受信レジスタ１３１は、レジスタセット３１１、割込レジスタ３１２又は割込キュー３１３に対して、割込要因の情報の書き込み又は読み出しが行われた場合、行われた書き込み又は読み出しの結果を応答生成部１３５へ出力する。
【００５４】
図３に戻って説明を続ける。メッセージ受信部１３２は、ノード１Ａからメッセージを受信する。この受信したメッセージで示される処理が、「所定処理」の一例にあたる。
【００５５】
メッセージ受信部１３２は、受信したメッセージからレジスタセット識別ＩＤを取得する。その後、メッセージ受信部１３２は、受信したメッセージをメモリ２Ｂに格納する。次に、メッセージ受信部１３２は、レジスタセット３１１のメッセージ受信割込フラグを確認する。
【００５６】
メッセージ受信割込フラグがディセーブルであれば、メッセージ受信部１３２は、メッセージから取得したレジスタセット識別ＩＤを有するレジスタセット３１１に受信割込の情報を格納する。また、メッセージ受信部１３２は、メッセージを格納したメモリ２Ｂのアドレスをレジスタセット３１１の受信データ記録場所情報に格納する。さらに、メッセージ受信部１３２は、レジスタセット３１１における各エントリの登録を行う。
【００５７】
メッセージ受信割込フラグがイネーブルであれば、メッセージ受信部１３２は、受信したメッセージから取得したレジスタセット識別ＩＤを割込キュー３１３に登録する。次に、メッセージ受信部１３２は、割込キュー３１３のメッセージ受信フラグをオンにする。さらに、メッセージ受信部１３２は、受信したメッセージから取得したレジスタセット識別ＩＤを有するレジスタセット３１１の受信データ記録場所情報にメッセージを格納したメモリ２Ｂのアドレスを登録する。また、メッセージ受信部１３２は、レジスタセット３１１における各エントリの登録を行う。この場合、メッセージ受信部１３２は、レジスタセット３１１の空き通知割込ペンディングフラグ及びメッセージ受信割込ペンディングフラグをオフにする。
【００５８】
その後、メッセージ受信部１３２は、割込キュー３１３の割込キューＦＵＬＬフラグを確認する。割込キューＦＵＬＬフラグが「０」であれば、メッセージ受信部１３２は、割込キュー３１３に格納されている割込キューの数を取得する。割込キュー３１３に格納されている割込キューの数が上限値から１を減算した数（以下では、「ＦＵＬＬ−１」という。）であれば、メッセージ受信部１３２は、割込レジスタ３１２の割込キューＦＵＬＬフラグを「１」に設定する。これに対して、割込キュー３１３に格納されている割込キューの数が「ＦＵＬＬ−１」以下であれば、メッセージ受信部１３２は、割込キューＦＵＬＬフラグを「０」のまま維持する。
【００５９】
その後、メッセージ受信部１３２は、割込レジスタ３１２の割込レジスタライトフラグを確認する。割込レジスタライトフラグがイネーブルであれば、メッセージ受信部１３２は、割込要求生成部１３４に割込要求の生成を指示する。これに対して、割込レジスタライトフラグがディセーブルであれば、メッセージ受信部１３２は、割込要求生成部１３４に対する割込要求の生成の指示を行わずに割込要因の格納処理を終了する。
【００６０】
一方、割込キューＦＵＬＬフラグが「１」であれば、メッセージ受信部１３２は、メッセージに格納さているレジスタセット識別ＩＤを取得し、メッセージ受信割込の情報を格納したレジスタセット３１１を特定する。
【００６１】
そして、メッセージ受信部１３２は、特定したレジスタセット３１１のメッセージ受信割込ペンディングフラグをオンにする。また、メッセージ受信部１３２は、受信したメッセージから取得したレジスタセット識別ＩＤを有するレジスタセット３１１の受信データ記録場所情報にメッセージを格納したメモリ２Ｂのアドレスを登録する。さらに、メッセージ受信部１３２は、レジスタセット３１１における各エントリの登録を行う。
【００６２】
その後、メッセージ受信部１３２は、割込レジスタ３１２の割込レジスタライトフラグを確認する。割込レジスタライトフラグがイネーブルであれば、メッセージ受信部１３２は、割込要求生成部１３４に割込要求の生成を指示する。これに対して、割込レジスタライトフラグがディセーブルであれば、メッセージ受信部１３２は、割込要求生成部１３４に対する割込要求の生成の指示を行わずに割込要因の格納処理を終了する。
【００６３】
その後、メッセージ受信部１３２は、メッセージ受信完了をメッセージ応答生成部１３３に通知する。
【００６４】
また、メッセージ受信部１３２は、メッセージを格納するレジスタセット３１１の数を監視する。そして、メッセージを格納するレジスタセット３１１の数が、割込発行条件で決められた数以上の所定閾値を超えた場合、メッセージ受信部１３２は、メッセージ受信停止をメッセージ応答生成部１３３に通知する。このメッセージ受信部１３２が、「要求管理部」の一例にあたる。
【００６５】
メッセージ応答生成部１３３は、メッセージ受信停止又はメッセージ受信完了の通知をメッセージ受信部１３２から受ける。そして、メッセージ応答生成部１３３は、受信した通知にしたがって、ノード１Ａのメッセージの送信に対する応答を生成する。その後、メッセージ応答生成部１３３は、生成した応答をノード１Ａへ送信する。
【００６６】
割込要求生成部１３４は、レジスタセット３１１の使用状況を監視し、メッセージが格納されていないレジスタセット３１１の数を取得する。ここで、割込要求生成部１３４は、メッセージの格納に用いるレジスタセット３１１の総数を記憶していてもよい。そして、割込要求生成部１３４は、レジスタセット３１１に登録されている割込発行条件メッセージ空き数と取得したメッセージが格納されていないレジスタセット３１１の数とを比較して、空き通知割込の発行条件を満たしたか否かを判定する。
【００６７】
空き通知割込の発行条件を満たしている場合、割込要求生成部１３４は、レジスタセット３１１の受信側空き通知割込フラグを確認する。
【００６８】
受信側空き通知割込フラグがディセーブルであれば、割込要求生成部１３４は、空き通知割込要求の格納処理を終了する。
【００６９】
一方、受信側空き通知割込フラグがイネーブルであれば、割込要求生成部１３４は、割込キューＦＵＬＬフラグが「１」であるか否かを判定する。
【００７０】
割込キューＦＵＬＬフラグが「１」でない場合、割込キュー３１３の空き通知割込フラグをオンにする。この空き通知割込みで示される空き通知の処理が、「通知処理」の一例にあたる。
【００７１】
その後、割込要求生成部１３４は、割込キュー３１３に格納されているキューの数を取得する。割込キュー３１３に格納されているキューの数が「ＦＵＬＬ−１」であれば、割込要求生成部１３４は、割込レジスタ３１２の割込キューＦＵＬＬフラグを「１」に設定する。これに対して、割込キュー３１３に格納されているキューの数が「ＦＵＬＬ−１」以下であれば、割込要求生成部１３４は、割込キューＦＵＬＬフラグを「０」のまま維持する。
【００７２】
その後、割込要求生成部１３４は、割込レジスタ３１２の割込レジスタライトフラグを確認する。割込レジスタライトフラグがイネーブルであれば、割込要求生成部１３４は、空き通知割込要求を生成する。そして、割込要求生成部１３４は、生成した空き通知割込要求をコア１１Ａに送信する。これに対して、割込レジスタライトフラグがディセーブルであれば、割込要求生成部１３４は、空き通知割込要求の生成を行わずに割込要因の格納処理を終了する。
【００７３】
一方、割込キューＦＵＬＬフラグが「１」であれば、割込要求生成部１３４は、空き通知割込要求を格納するレジスタセット３１１を特定する。
【００７４】
そして、割込要求生成部１３４は、特定したレジスタセット３１１の空き通知割込ペンディングフラグをオンにする。さらに、割込要求生成部１３４は、レジスタセット３１１における各エントリの登録を行う。
【００７５】
その後、割込要求生成部１３４は、割込レジスタ３１２の割込レジスタライトフラグを確認する。割込レジスタライトフラグがイネーブルであれば、割込要求生成部１３４は、空き通知割込要求を生成する。そして、割込要求生成部１３４は、生成した空き通知割込要求をコア１１Ａに送信する。これに対して、割込レジスタライトフラグがディセーブルであれば、割込要求生成部１３４は、空き通知割込要求の生成を行わずに割込要因の格納処理を終了する。
【００７６】
また、割込要求生成部１３４は、メッセージ受信割込要求の生成の指示をメッセージ受信部１３２から受ける。そして、割込要求生成部１３４は、メッセージ受信割込要求を生成する。その後、割込要求生成部１３４は、生成したメッセージ受信割込要求をコア１１Ａに送信する。この割込要求生成部１３４が、「通知処理生成部」の一例にあたる。また、メッセージ受信割込要求及び空き通知割込要求が、「実行要求」の一例にあたる。
【００７７】
このように、メッセージ受信部１３２及び割込要求生成部１３４は、割込レジスタライトフラグがイネーブルであれば、割込要求を発行するが、ディセーブルの場合、割込要求を発行しない。ただし、割込レジスタライトフラグにかかわらず、メッセージ受信部１３２及び割込要求生成部１３４は、割込要因の格納は行っていく。すなわち、例え割込要求の発行が行われなくても、メッセージの受信が停止されていなければ、割込キュー３１３又はレジスタセット３１１には、割込要因が格納されていく。特に、割込キューＦＵＬＬフラグが「１」でなれければ、割込キュー３１３に割込み要因が格納されていく。
【００７８】
応答生成部１３５は、レジスタセット３１１、割込レジスタ３１２又は割込キュー３１３に対する書き込み又は読み出しの結果を受信レジスタ１３１から取得する。そして、応答生成部１３５は、取得したレジスタセット３１１、割込レジスタ３１２又は割込キュー３１３に対する書き込み又は読み出しの結果に応じて応答を生成する。その後、応答生成部１３５は、生成した応答をコア１１Ｂへ送信する。
【００７９】
コア１１Ｂは、ＯＳを動作させる。また、コア１１Ｂは、ＯＳ上でアプリケーションなどを実行しユーザプロセスを動作させる。コア１１Ｂは、要求取得部１１１及び処理実行部１１２を有している。要求取得部１１１及び処理実行部１１２は、ＯＳ又はユーザプロセスのいずれかもしくは双方が動作主体になることがある。
【００８０】
要求取得部１１１は、各割込要因に基づく割込要求を割込要求生成部１３４から受信する。そして、要求取得部１１１は、割り込みの刈り取り処理を開始する。例えば、コア１１Ｂが各割込要因に基づく割込要求を受けると、ＯＳは、コンテキストスイッチを実行しプロセスを切り替え、ユーザプロセスに割込要求の処理を指示する。ＯＳによるコンテキストスイッチが行われると、ユーザプロセスは、割り込みの刈り取り処理を開始する。このようにして、要求取得部１１１による以下に説明する割り込みの刈り取り処理が開始される。
【００８１】
要求取得部１１１は、割込レジスタ３１２の割込レジスタライトフラグを「０」、すなわちディセーブルに設定する。これにより、要求取得部１１１は、刈り取り処理の間の新たな割り込みの発行を抑制する。
【００８２】
次に、要求取得部１１１は、割込要因の情報が割込キュー３１３に格納されているか否かを判定する。割込要因の情報が割込キュー３１３にある場合、要求取得部１１１は、割込キュー３１３の先頭の割込要因を読み出し、割込キュー３１３から削除する。
【００８３】
そして、要求取得部１１１は、割込キュー３１３の全エントリを読み出し終えたかを判定する。読み出していないエントリが割込キュー３１３に残っている場合、要求取得部１１１は、割込キュー３１３からのエントリの読み出し及び削除を、エントリがなくなるまで繰り返す。
【００８４】
割込キュー３１３に読み出すエントリがなくなった場合、要求取得部１１１は、割込レジスタ３１２の割込キューＦＵＬＬフラグが「１」か否かを判定する。割込キューＦＵＬＬフラグが「０」であれば、割込キュー３１３にエントリを格納する余裕があるので、レジスタセット３１１にはエントリが格納されていないといえる。そのため、割込キューＦＵＬＬフラグが「０」の場合、要求取得部１１１は、レジスタセット３１１からの割込要因の刈込は行わなくてよい。そこで、要求取得部１１１は、割込レジスタ３１２の割込レジスタライトフラグを「１」、すなわちイネーブルに設定する。これにより、割込要因のレジスタセット３１１及び割込キュー３１３への割込要因の情報の書込みの禁止が解除され、ノード１Ａからのメッセージの受信や空き通知割込の発行などが再開される。そして、要求取得部１１１は、割込要因の刈り取り処理を終了する。
【００８５】
これに対して、割込キューＦＵＬＬフラグが「１」であれば、割込キュー３１３にエントリ格納の余裕が無いので、レジスタセット３１１にはエントリが格納されていることが考えられる。そこで、要求取得部１１１は、レジスタセット３１１からの割込要因の刈り取り処理を実行する。
【００８６】
具体的には、要求取得部１１１は、割込キューＦＵＬＬフラグを「０」にする。次に、要求取得部１１１は、レジスタセット３１１を１つ選択する。具体的には、要求取得部１１１は、レジスタセット３１１のリードポインタが示すレジスタセット３１１を選択する。
【００８７】
そして、要求取得部１１１は、選択したレジスタセット３１１のメッセージ受信割込フラグ又は空き通知割込ペンディングフラグのいずれかがオンであるかを確認する。以下では、メッセージ受信割込フラグ及び空き通知割込ペンディングフラグを表すビットをまとめて「ペンディングビット」という場合がある。
【００８８】
ここでは、要求取得部１１１は、メッセージ受信割込フラグが「１」である場合、メッセージ受信割込フラグがオンであると判定する。空き通知割込ペンディングフラグが「１」である場合、要求取得部１１１は、空き通知割込ペンディングフラグがオンであると判定する。また、ペンディングビットの双方が「０」である場合、要求取得部１１１は、いずれもオフであると判定する。
【００８９】
ペンディングビットのいずれかが「１」である場合、要求取得部１１１は、選択したレジスタセット３１１に格納されている割込要因の情報を読み出す。そして、要求取得部１１１は、選択したレジスタセット３１１のペンディングビットの双方を「０」にし、さらに、選択したレジスタセット３１１に格納されたエントリを削除し、レジスタセット３１１をクリアする。
【００９０】
要求取得部１１１は、レジスタセット３１１から全てのエントリを読み出すまで、レジスタセット３１１からのエントリの読み出しを繰り返す。具体的には、要求取得部１１１は、レジスタセット３１１のリードポインタを更新していき、全てのレジスタセット３１１を選択し終えるまで、エントリの読み出しを繰り返す。
【００９１】
レジスタセット３１１から全てのエントリを読み出した場合、要求取得部１１１は、割込レジスタ３１２の割込レジスタライトフラグを「１」、すなわちイネーブルに設定する。そして、要求取得部１１１は、割込要因の刈り取り処理を終了する。
【００９２】
処理実行部１１２は、要求取得部１１１が取得した割込要求を取得する。そして、処理実行部１１２は、取得した割込要求を順次処理していく。
【００９３】
次に、図７を参照して、本実施例に係る情報処理システムによるメッセージ受信割込を用いたメッセージ受信の通知の処理の流れの概要を説明する。図７は、実施例に係る情報処理システムによるメッセージ受信割込を用いたメッセージ受信の通知の処理の全体的な流れのフローチャートである。ここでは、説明の都合上、コア１１Ａが動作させるＯＳ１１３Ａ及びユーザプロセス１１４Ａ、並びに、コア１１Ｂが動作させるＯＳ１１３Ｂ及びユーザプロセス１１４Ｂを動作主体として説明する。ただし、ＯＳ１１３Ｂ及びユーザプロセス１１４Ｂは、要求取得部１１１にあたる。図７の縦軸は、上部に記載した各機能が実行する処理を表している。また、図７の縦軸は下に向かうにしたがって時間が経過することを表している。ここでも、ノード１Ａを送信側ノード、ノード１Ｂを受信側ノードとして説明する。
【００９４】
ユーザプロセス１１４Ｂは、操作者からの指示をうけて、レジスタセット３１１及び割込レジスタ３１２の設定を行う（ステップＳ１）。具体的には、ユーザプロセス１１４Ｂは、操作者からの指示にしたがい受信側空き通知割込フラグ、割込発行条件メッセージ空き数及びメッセージ受信割込フラグを設定する。ここでは、ユーザプロセス１１４Ｂは、受信側空き通知割込フラグ及びメッセージ受信割込フラグをいずれもイネーブルにする。また、ユーザプロセス１１４Ｂは、全てのレジスタセット３１１の空き通知ペンディングフラグ及びメッセージ受信割込ペンディングフラグをオフ、すなわちペンディングビットを「０」に設定する。さらに、ユーザプロセス１１４Ｂは、割込レジスタ３１２の割込レジスタライトフラグを「１」、すなわちイネーブルに設定し、割込キューＦＵＬＬフラグを「０」に設定する。メッセージ受信回路１３Ｂは、ユーザプロセス１１４Ｂからの指示を受けて、レジスタセット３１１、割込レジスタ３１２及び割込キュー３１３の設定を行う。
【００９５】
そして、ユーザプロセス１１４Ｂは、メッセージがノード１Ａから送られてくるまでメッセージの受信処理を待機する（ステップＳ２）。ただし、この間、ユーザプロセス１１４は、他の処理は実行してもよい。
【００９６】
メッセージの送信処理を行う場合、ノード１Ａのユーザプロセス１１４Ａは、メッセージ送信依頼をＯＳ１１３Ａに要求する（ステップＳ３）。
【００９７】
ＯＳ１１３Ａは、メッセージ送信依頼をユーザプロセス１１４Ａから受ける。そして、ＯＳ１１３Ａは、メッセージの送信をメッセージ送信回路１２Ａに指示する（ステップＳ４）。
【００９８】
メッセージ送信回路１２Ａは、メッセージの送信の指示をＯＳ１１３Ａから受ける。そして、メッセージ送信回路１２Ａは、メッセージを含むパケットを生成する。その後、メッセージ送信回路１２Ａは、生成したパケットをノード１Ｂのメッセージ受信回路１３Ｂへ送信する（ステップＳ５）。
【００９９】
メッセージ受信回路１３Ｂは、メッセージを含むパケットをノード１Ａのメッセージ送信回路１２Ａから取得する。そして、メッセージ受信回路１３Ｂのメッセージ受信部１３２は、受信したパケットに含まれるメッセージを受信する（ステップＳ６）。
【０１００】
そして、メッセージ受信回路１３Ｂのメッセージ受信部１３２は、受信したメッセージをメモリ２Ｂに格納する（ステップＳ７）。また、メッセージ受信回路１３Ｂのメッセージ受信部１３２は、割込キュー３１３に空きが有れば、割込キュー３１３にメッセージ受信割込の情報を割込キュー３１３に格納し、空きが無ければ、メッセージ受信割込の情報をレジスタセット３１１に格納する。その後、メッセージ受信回路１３Ｂのメッセージ受信部１３２は、メッセージ受信の完了応答をノード１Ａのメッセージ送信回路１２Ａへ送信する（ステップＳ８）。
【０１０１】
ノード１Ａのメッセージ送信回路１２Ａの応答生成部１２４は、ユーザプロセス１１４Ａに完了応答を送信する。ユーザプロセス１１４Ａは、受信した完了応答からメッセージ送信のステータスを読み出す（ステップＳ９）。
【０１０２】
一方、メッセージ受信回路１３Ｂのメッセージ受信部１３２は、メッセージ受信割込要求の生成を割込要求生成部１３４に指示する。そして、メッセージ受信回路１３Ｂの割込要求生成部１３４は、メッセージ受信割込要求を生成し、ＯＳ１１３Ｂに送信する（ステップＳ１０）。
【０１０３】
ＯＳ１１３Ｂは、メッセージ受信割込要求をメッセージ受信回路１３Ｂの割込要求生成部１３４から受信すると、コンテキストを実行する（ステップＳ１１）。
【０１０４】
ユーザプロセス１１４Ｂは、コンテキストの実行を受けて、割り込み処理を開始する（ステップＳ１２）。
【０１０５】
メッセージ受信回路１３Ｂは、ユーザプロセス１１４Ｂから読み出しの指示を受けて、指定された割込要因をユーザプロセス１１４Ｂに送信する（ステップＳ１３）。この時、メッセージ受信回路１３Ｂは、読み出した割込要因を格納していた割込キュー３１３又はレジスタセット３１１から割込要因のエントリを削除しクリアする。
【０１０６】
ユーザプロセス１１４Ｂは、取得した割込要因が指定するアドレスからのメッセージの読み出しをメモリ２Ｂに要求する（ステップＳ１４）。
【０１０７】
メモリ２Ｂは、指定されたアドレスに格納されているメッセージをユーザプロセス１１４Ｂへ出力する（ステップＳ１５）。
【０１０８】
次に、図８を参照して、本実施例に係る情報処理装置による割込要因の格納処理について説明する。図８は、実施例に係る情報処理装置による割込要因の格納処理のフローチャートである。
【０１０９】
受信レジスタ１３１は、操作者からの指示を受けて、メッセージ受信割込の設定を行う（ステップＳ１０１）。ここでは、受信レジスタ１３１は、レジスタセット３１１のメッセージ受信割込フラグをイネーブルにする。
【０１１０】
メッセージ受信部１３２は、メッセージを受信したか否かを判定する（ステップＳ１０２）。メッセージを受信した場合（ステップＳ１０２：肯定）、メッセージ受信部１３２は、ステップＳ１０４へ進む。
【０１１１】
これに対して、メッセージを受信していない場合（ステップＳ１０２：否定）、割込要求生成部１３４は、メッセージを格納していないレジスタセット３１１の数を取得する。そして、割込要求生成部１３４は、取得したメッセージを格納していないレジスタセット３１１の数が、割込発行条件メッセージ空き数を満たしているか、すなわち割込発行条件を充足するか否かを判定する（ステップＳ１０３）。
【０１１２】
割込発行条件を満たしていない場合（ステップＳ１０３：否定）、メッセージ受信部１３２及び割込要求生成部１３４は、ステップＳ１０２へ戻る。これに対して、割込発行条件を満たしている場合（ステップＳ１０３：肯定）、メッセージ受信部１３２及び割込要求生成部１３４は、ステップＳ１０４へ進む。以下の処理は、メッセージを受信した場合には、メッセージ受信部１３２が実行し、割込発行条件が充足された場合には、割込要求生成部１３４が実行する。
【０１１３】
メッセージ受信部１３２又は割込要求生成部１３４は、割込レジスタ３１２の割込キューＦＵＬＬフラグ＝１か否かを判定する（ステップＳ１０４）。
【０１１４】
割込キューＦＵＬＬフラグ＝１の場合（ステップＳ１０４：肯定）、メッセージ受信部１３２又は割込要求生成部１３４は、レジスタセット３１１の割込要因に応じたペンディングフラグを「１」に設定する（ステップＳ１０５）。
【０１１５】
これに対して、割込キューＦＵＬＬフラグ≠１の場合（ステップＳ１０４：否定）、メッセージ受信部１３２又は割込要求生成部１３４は、レジスタセット識別ＩＤ及び割込要因の情報を割込キュー３１３に格納する（ステップＳ１０６）。
【０１１６】
次に、メッセージ受信部１３２又は割込要求生成部１３４は、割込キュー３１３のエントリ数が「ＦＵＬＬ−１」か否かを判定する（ステップＳ１０７）。図では、割込キュー３１３のエントリ数を省略して、単に割込キューと記載している。
【０１１７】
割込キュー３１３のエントリ数が「ＦＵＬＬ−１」の場合（ステップＳ１０７：肯定）、メッセージ受信部１３２又は割込要求生成部１３４は、割込レジスタ３１２の割込キューＦＵＬＬフラグを「１」に設定する（ステップＳ１０８）。これに対して、割込キュー３１３のエントリ数が「ＦＵＬＬ−１」でない場合（ステップＳ１０７：否定）、メッセージ受信部１３２又は割込要求生成部１３４は、ステップＳ１０９へ進む。
【０１１８】
メッセージ受信部１３２又は割込要求生成部１３４は、割込レジスタ３１２の割込レジスタライトフラグが「１」、すなわちイネーブルか否かを判定する（ステップＳ１０９）。割込レジスタライトフラグが「１」でない場合（ステップＳ１０９：否定）、メッセージ受信部１３２又は割込要求生成部１３４は、ステップＳ１０２へ戻る。
【０１１９】
これに対して、割込レジスタライトフラグが「１」でない場合（ステップＳ１０９：肯定）、割込要求生成部１３４は、割込要求を生成し要求取得部１１１へ送信する（ステップＳ１１０）。ただし、メッセージを受信した場合であれば、割込要求生成部１３４は、メッセージ受信部１３２からの指示を受けて、その指示にしたがい割込要求の送信を実行する。
【０１２０】
メッセージ受信部１３２及び割込要求生成部１３４は、割込要因取得を停止するか否かを判定する（ステップＳ１１１）。例えば、操作者からの割込実行の停止の指示を受けた場合や情報処理装置の動作が停止した場合に、メッセージ受信部１３２及び割込要求生成部１３４は、割込要因取得を停止すると判定する。
【０１２１】
割込要因取得を停止しない場合（ステップＳ１１１：否定）、メッセージ受信部１３２及び割込要求生成部１３４は、ステップＳ１０２へ戻る。これに対して、割込要因取得を停止する場合（ステップＳ１１１：肯定）、メッセージ受信部１３２及び割込要求生成部１３４は、割込要因の格納処理を終了する。
【０１２２】
次に、図９を参照して、本実施例に係る情報処理装置による割込要因の刈り取り処理について説明する。図９は、実施例に係る情報処理装置による割込要因の刈り取り処理のフローチャートである。
【０１２３】
要求取得部１１１は、割込要求を割込要求生成部１３４から取得する（ステップＳ２０１）。
【０１２４】
要求取得部１１１は、割込レジスタ３１２の割込レジスタライトフラグを「０」、すなわちディセーブルにする（ステップＳ２０２）。
【０１２５】
要求取得部１１１は、割込キュー３１３からエントリを読み出す（ステップＳ２０３）。
【０１２６】
要求取得部１１１は、割込キュー３１３に割込要因があるか否かを判定する（ステップＳ２０４）。
【０１２７】
割込要因がある場合（ステップＳ２０４：肯定）、要求取得部１１１は、割込要因を読み出し、読み出した割込要因を削除しエントリをクリアする（ステップＳ２０５）。
【０１２８】
次に、要求取得部１１１は、割込キュー３１３に格納された全てのエントリの読み出しが完了したか否かを判定する（ステップＳ２０６）。読み出していないエントリが残っている場合（ステップＳ２０６：否定）、要求取得部１１１は、ステップＳ２０３へ戻る。
【０１２９】
これに対して、全てのエントリの読み出しが完了した場合（ステップＳ２０６：肯定）、要求取得部１１１は、割込レジスタ３１２の割込キューＦＵＬＬフラグが「１」か否かを判定する（ステップＳ２０７）。割込キューＦＵＬＬフラグ≠１の場合（ステップＳ２０７：否定）、要求取得部１１１は、ステップＳ２０３へ戻る。
【０１３０】
これに対して、割込キューＦＵＬＬフラグ＝１の場合（ステップＳ２０７：肯定）、要求取得部１１１は、割込キューＦＵＬＬフラグを「０」に設定する（ステップＳ２０８）。
【０１３１】
そして、要求取得部１１１は、リードポインタが示すレジスタセット３１１からエントリを読み出す（ステップＳ２０９）。
【０１３２】
次に、要求取得部１１１は、読み出したエントリのペンディングビットが「１」であるか否かを判定する（ステップＳ２１０）。ペンディングビット≠１の場合（ステップＳ２１０：否定）、要求取得部１１１は、ステップＳ２１２へ進む。
【０１３３】
これに対して、ペンディングビット＝１の場合（ステップＳ２１０：肯定）、要求取得部１１１は、割込要因の情報を読み込み、読み込んだエントリを削除する（ステップＳ２１１）。
【０１３４】
その後、要求取得部１１１は、レジスタセット３１１の全てのエントリの読み出しが完了したか否かを判定する（ステップＳ２１２）。読み出していないエントリが残っている場合（ステップＳ２１２：否定）、要求取得部１１１は、レジスタセット３１１のリードポインタを更新し（ステップＳ２１３）、ステップＳ２０９へ戻る。
【０１３５】
これに対して、全てのエントリの読み出しが完了した場合（ステップＳ２１２：肯定）、要求取得部１１１は、ステップＳ２０３へ戻る。
【０１３６】
一方、割込キュー３１３に割込要因が無い場合（ステップＳ２０４：否定）、要求取得部１１１は、割込レジスタ３１２の割込レジスタライトフラグを「１」、すなわちイネーブルに設定する（ステップＳ２１４）。
【０１３７】
そして、要求取得部１１１は、割込要因の読み出しを完了する（ステップＳ２１５）。これにより、割込要因の刈り取り処理が終了する。
【０１３８】
ここで、図８で示す割込要因の格納処理と、図９で示す割込要因の刈り取り処理とは独立して動作する。そのため、刈り取り処理を行っている間、割込要求の発行は行われなくなるが、割込要因は格納されていく。そのため、刈り取り処理を開始した場合、割込要因が格納され続ける限り、割込要求の発行を待たずに割込キュー３１３及びレジスタセット３１１に格納された割込要因はすべて刈り取られることになる。特に、割込キューＦＵＬＬフラグが「１」でなれければ、割込キュー３１３に割込要因が格納されていくため、要求取得部１１１は、割込みキュー３１３から高速に割込要因を刈り取ることができる。
【０１３９】
また、以上では、ノード１Ａを送信側ノードとし、ノード１Ｂを受信側ノードとして説明したが、ノード１Ａ及び１Ｂは同様の機能を有しており、送信側及び受信側を逆にしても動作可能である。
【０１４０】
以上に説明したように、本実施例に係る情報処理装置は、ＦＩＦＯの割込キューを設け、割込キューに空きが有る場合、割込キューに割込要因を格納し、割込キューに空きが無ければ、レジスタセットに割込要因を格納する。そして、本実施例に係る情報処理装置は、割込キューから先に割込要因の刈り取りを行い、その後、レジスタセットに割込要因が有ればそれらの刈り取りを行う。このように、割込キューに収まる数以内の割り込み数であれば、レジスタセットを読み込まずに刈り取りを行うことができ、割込刈取処理の時間を短縮して割込刈取処理を高速に行うことができる。また、割込キューに格納しきれない割込要因については、レジスタセットに格納しておき、割込キューからの割込要因の読み出し後に読み出しを行うことで、割込要因の刈り取り漏れを抑制できる。さらに、刈り取り処理の実行中は割り込みの発行を禁止することで、割込要因を漏れなく刈り取ることができる。
【符号の説明】
【０１４１】
１Ａ，１Ｂ  ノード
２Ａ，２Ｂ  メモリ
１１Ａ，１１Ｂ  コア
１２Ａ，１２Ｂ  メッセージ送信回路
１３Ａ，１３Ｂ  メッセージ受信回路
１１１  要求取得部
１１２  処理実行部
１２１  送信レジスタ
１２２  メッセージ生成部
１２３  メッセージ応答受信部
１２４  応答生成部
１３１  受信レジスタ
１３２  メッセージ受信部
１３３  メッセージ応答生成部
１３４  割込要求生成部
１３５  応答生成部
３１１  レジスタセット
３１２  割込レジスタ
３１３  割込キュー
【図１】
0006354387.tif 000002
【図２】
0006354387.tif 000003
【図３】
0006354387.tif 000004
【図４】
0006354387.tif 000005
【図５】
0006354387.tif 000006
【図６】
0006354387.tif 000007
【図７】
0006354387.tif 000008
【図８】
0006354387.tif 000009
【図９】
0006354387.tif 000010