(57)【要約】【課題】１個の発信元コアから２個以上の宛先コアにメッセージを送って効率的に応答する方法を提供する。【解決手段】データ処理装置は少なくとも１個の発信元プロセッサ・コア１１０と、少なくとも２個の宛先プロセッサ・コア１２０と、メッセージ・ハンドラ１３０と、発信元コアと宛先コアとメッセージ・ハンドラとの間のデータ伝達路を与えるバス構成１５０とを備える。メッセージ・ハンドラ１３０は複数のメッセージ処理モジュール１３２を有する。少なくとも１個のメッセージ処理モジュールは、各宛先プロセッサ・コアにより変更可能な、その宛先がメッセージを受信したことを示すメッセージ受信表示器を有する。メッセージ処理モジュールは、前記宛先プロセッサ・コアの全てが前記メッセージを受信したことを前記表示器値に従って検出して、前記発信元プロセッサ・コアへの応答信号の送信を開始する送信完了検出器も有する。【選択図】図９
2005182754.tif 000002
【特許請求の範囲】
【請求項１】
データ処理装置であって、
少なくとも１個の宛先プロセッサ・コアと、
少なくとも２個の指定された宛先コアへのメッセージを生成する少なくとも１個の発信元プロセッサ・コアと、
複数のメッセージ処理モジュールを有するメッセージ・ハンドラと、
前記発信元プロセッサ・コアと前記宛先プロセッサ・コアと前記メッセージ・ハンドラとの間のデータ伝達路を与えるバス構成と、
を備え、
各指定された発信元プロセッサ・コアに関連する少なくとも１個のメッセージ処理モジュールは、
前記少なくとも２個の指定された宛先プロセッサ・コアによりそれぞれ変更可能な、対応する指定された宛先プロセッサ・コアが前記メッセージを受信したことを表示器値により示すメッセージ受信表示器と、
前記少なくとも２個の指定された宛先プロセッサ・コアの全てが前記メッセージを受信したことを前記表示器値に従って検出する送信完了検出器と、
前記少なくとも２個の指定された宛先プロセッサ・コアの全てが前記メッセージを受信したことを前記送信完了検出器が検出すると、これに応じて前記発信元プロセッサ・コアへの応答信号の送信を開始するメッセージ応答生成論理と、
を有する、
データ処理装置。
【請求項２】
前記少なくとも１個のメッセージ処理モジュールは前記指定された発信元プロセッサ・コアが生成したメッセージを記憶するために割り当てられたメモリを有し、前記メッセージは１個以上の宛先プロセッサ・コアが前記バス構成を通して読み取ることができる、請求項１記載のデータ処理装置。
【請求項３】
前記少なくとも１個のメッセージ処理モジュールは前記指定された発信元プロセッサ・コアが生成したメッセージを記憶するための関連するメモリ領域を有し、前記関連するメモリ領域は前記少なくとも１個の発信元プロセッサ・コアと前記少なくとも１個の宛先プロセッサ・コアとの間で共用されるメモリ内の領域である、請求項１記載のデータ処理装置。
【請求項４】
前記少なくとも２個の指定された宛先コアの１個は前記発信元プロセッサ・コアである、請求項１記載のデータ処理装置。
【請求項５】
前記メッセージ・ハンドラは、前記宛先プロセッサ・コアに割込みを送って前記メッセージが存在することを前記宛先プロセッサ・コアに通知する割込み生成回路を備える、請求項１記載のデータ処理装置。
【請求項６】
前記少なくとも２個の指定された宛先プロセッサ・コアの少なくとも１個は前記メッセージ・ハンドラによって前記宛先プロセッサ・コアに送られた割込みを処理する割込みコントローラを備える、請求項５記載のデータ処理装置。
【請求項７】
前記少なくとも１個のメッセージ処理モジュールは、前記宛先プロセッサ・コアへの割込みの送信を可能にしまたは無効にするための、プログラム可能な値を有するマスク状態レジスタを有する、請求項５記載のデータ処理装置。
【請求項８】
前記マスク状態レジスタは、前記マスク状態レジスタ内のビットをセットするのに用いられる関連するマスク・セット・レジスタと、前記マスク状態レジスタ内のビットをクリアするのに用いられる関連するマスク・クリア・レジスタとを有する、請求項７記載のデータ処理装置。
【請求項９】
前記マスク状態レジスタは、現在表明されている割込みをどのメッセージ処理モジュールがトリガしたかを示す値を記憶する関連するマスクされた割込み状態レジスタを有する、請求項７記載のデータ処理装置。
【請求項１０】
前記少なくとも１個のプログラム可能なメッセージ処理モジュールは、前記指定された発信元プロセッサ・コアに対応するプログラム可能な値を記憶する発信元レジスタを有する、請求項１記載のデータ処理装置。
【請求項１１】
前記発信元レジスタは、前記指定された発信元プロセッサ・コアに応答割込みの送信を表明する割込み線を定義する、請求項１０記載のデータ処理装置。
【請求項１２】
前記発信元レジスタは、発信元プロセッサ・コアが前記発信元レジスタへの書込みアクセスを有する、クリア値により指定されるクリア・モードと、前記発信元レジスタは発信元プロセッサ・コアに対応する値を記憶しまた前記発信元レジスタをリセットして前記クリア・モードにするかまたは書込み無効にするプログラム・モードとを有する、請求項１０記載のデータ処理装置。
【請求項１３】
前記少なくとも１個のプログラム可能なメッセージ処理モジュールは前記少なくとも２個の指定された宛先プロセッサ・コアを示すプログラム可能な値を記憶する宛先レジスタを有する、請求項１記載のデータ処理装置。
【請求項１４】
前記宛先レジスタは、前記宛先レジスタ内のビットをセットするのに用いられる宛先セット・レジスタと、前記宛先レジスタ内のビットをクリアするのに用いられる宛先クリア・レジスタとを有する、請求項１３記載のデータ処理装置。
【請求項１５】
前記メッセージ受信表示器は前記メッセージ宛先レジスタである、請求項１３記載のデータ処理装置。
【請求項１６】
前記少なくとも１個の発信元プロセッサ・コアの１個はメッセージのシーケンスを前記複数のメッセージ処理モジュールのリンクされた部分集合に送り、各メッセージはそれぞれの指定された宛先プロセッサ・コアを有し、またメッセージ処理モジュールの前記リンクされた部分集合内の各メッセージ処理モジュールはメッセージ受信表示器と、送信完了検出器と、メッセージ応答生成論理とを有し、また各指定された宛先コアが前記先行メッセージを受信したことを前記メッセージ・シーケンス内の先行メッセージに対応するメッセージ処理モジュールの前記メッセージ受信表示器が示すと、メッセージ処理モジュールの前記リンクされた部分集合の前記メッセージ・シーケンス内の２番目以降のメッセージの送信が開始される、請求項１記載のデータ処理装置。
【請求項１７】
前記少なくとも１個のメッセージ処理モジュールは、前記少なくとも２個の指定された宛先プロセッサ・コアの１個への割込みまたは前記指定された発信元プロセッサ・コアへの割込みが現在トリガされているかどうか判定する少なくとも１個の割込み状態ビットを記憶する送信レジスタを有する、請求項１記載のデータ処理装置。
【請求項１８】
前記少なくとも２個の前記指定された宛先プロセッサ・コアの少なくとも１個は、前記送信レジスタ値を変更して前記宛先プロセッサ・コアへの前記割込みをクリアすることにより前記メッセージを受けたことを示す、請求項１７記載のデータ処理装置。
【請求項１９】
前記送信レジスタ値の前記変更により前記発信元プロセッサ・コアへの応答割込みの送信を開始する、請求項１８記載のデータ処理装置。
【請求項２０】
前記メッセージ受信表示器は前記送信レジスタである、請求項１６記載のデータ処理装置。
【請求項２１】
前記少なくとも１個のメッセージ処理モジュールは、前記関連するメッセージ処理モジュールがメッセージ処理モジュールの前記リンクされた部分集合内の連続するメッセージ処理モジュールにリンクされているかどうかを示す値を記憶するモード・レジスタを有する、請求項１６記載のデータ処理装置。
【請求項２２】
前記送信完了検出器は前記モード・レジスタ値を用いて前記リンクされた部分集合内の最後のメッセージ処理モジュールを検出し、前記最後のメッセージ処理モジュール内のメッセージの宛先コアが前記メッセージを受信したことを示すと前記発信元コアへの応答割込みの生成を開始する、請求項２１記載のデータ処理装置。
【請求項２３】
前記最後のメッセージ処理モジュールを除く前記リンクされた部分集合内の全てのメッセージ処理モジュールは前記発信元プロセッサ・コアへの応答割込みの生成を無効にするように構成変更可能である、請求項２２記載のデータ処理装置。
【請求項２４】
前記発信元プロセッサ・コアに割込みを送るべきことを前記最後のメッセージ処理モジュールの送信レジスタが示すと、前記最後のプロセッサ・コアに関連する前記メッセージ処理モジュールは前記送信レジスタを自動的にセットして前記発信元プロセッサ・コアへの応答割込みの送信を開始する、請求項２３記載のデータ処理装置。
【請求項２５】
前記メッセージ・ハンドラは、
メッセージ処理モジュールの数と、
各メッセージ処理モジュール内に前記メッセージを記憶するためのメモリ容量と、
前記メッセージ・ハンドラが利用可能な割込み信号路の数、
の少なくとも１つを備える構成パラメータを指定することによって構成変更可能である、請求項１記載のデータ処理装置。
【請求項２６】
前記メッセージ・ハンドラは前記構成パラメータを記憶する構成レジスタを備える、請求項２３記載のデータ処理装置。
【請求項２７】
少なくとも１個の発信元プロセッサ・コアと少なくとも１個の宛先プロセッサ・コアとの間で、複数のメッセージ処理モジュールを有するメッセージ・ハンドラと、前記発信元プロセッサ・コアと前記少なくとも１個の宛先プロセッサ・コアと前記メッセージ・ハンドラとの間のデータ伝達路を与えるバス構成とを用いてデータを伝達するための方法であって、
指定された発信元プロセッサ・コアから、少なくとも２個の指定された宛先プロセッサ・コアのそれぞれに関連するメッセージ処理モジュールにメッセージを送信し、
前記発信元プロセッサ・コアかまたは前記指定された宛先プロセッサ・コアの１個に関連するメッセージ処理モジュールに属するメッセージ受信表示器の表示値を変更して対応する指定された宛先プロセッサ・コアが前記メッセージを受信したことを示し、
送信完了検出器を用いまた前記表示器値に従って、前記少なくとも２個の指定された宛先コアの全てが前記メッセージを受信したことを検出し、
前記少なくとも２個の指定された宛先コアの全てが前記メッセージを受信したことを前記送信完了検出器が検出すると、これに応じて前記発信元プロセッサ・コアへの応答信号の送信を開始する、
ステップを含むデータ伝達方法。
【請求項２８】
前記メッセージを前記少なくとも１個のメッセージ処理モジュール内にあるメモリ内に記憶して、前記メッセージは１個以上の宛先プロセッサ・コアが前記バス構成を通して読み取ることができるようにするステップを含む、請求項２７記載のデータ伝達方法。
【請求項２９】
前記メッセージを前記少なくとも１個のメッセージ処理モジュールに関連するメモリ内に記憶するステップを含み、前記関連するメモリは前記少なくとも１個の発信元プロセッサ・コアと前記少なくとも１個の宛先プロセッサ・コアとの間で共用される、請求項２７記載のデータ伝達方法。
【請求項３０】
前記少なくとも２個の指定された前記宛先プロセッサ・コアの１個は前記発信元プロセッサ・コアである、請求項２７記載のデータ伝達方法。
【請求項３１】
前記メッセージ・ハンドラは、前記宛先プロセッサ・コアに割込みを送って前記メッセージが存在することを前記宛先プロセッサ・コアに通知する割込み生成回路を備える、請求項２７記載のデータ伝達方法。
【請求項３２】
前記少なくとも２個の指定された宛先プロセッサ・コアの少なくとも１個は前記メッセージ・ハンドラから前記宛先プロセッサ・コアに送られた割込みを処理する割込みコントローラを備える、請求項３１記載のデータ伝達方法。
【請求項３３】
前記少なくとも１個のメッセージ処理モジュールは、前記宛先プロセッサ・コアへの割込みの送信を可能にしまたは無効にするための、プログラム可能な値を有するマスク状態レジスタを有する、請求項２７記載のデータ伝達方法。
【請求項３４】
前記マスク状態レジスタは、前記マスク状態レジスタ内のビットをセットするのに用いられる関連するマスク・セット・レジスタと、前記マスク状態レジスタ内のビットをクリアするのに用いられる関連するマスク・クリア・レジスタとを有する、請求項３３記載のデータ伝達方法。
【請求項３５】
前記マスク状態レジスタは、現在表明されている割込みをどのメッセージ処理モジュールがトリガしたかを示す値を記憶する関連するマスクされた割込み状態レジスタを有する、請求項３３記載のデータ処理方法。
【請求項３６】
前記少なくとも１個のプログラム可能なメッセージ処理モジュールは、前記指定された発信元プロセッサ・コアに対応するプログラム可能な値を記憶する発信元レジスタを有する、請求項２７記載のデータ伝達方法。
【請求項３７】
前記発信元レジスタは、前記指定された発信元プロセッサ・コアに応答割込みの送信を表明する割込み線を定義する、請求項３６記載のデータ伝達方法。
【請求項３８】
前記発信元レジスタは、発信元プロセッサ・コアが前記発信元レジスタへの書込みアクセスを有する、クリア値により指定されるクリア・モードと、前記発信元レジスタは発信元プロセッサ・コアに対応する値を記憶しまた前記発信元レジスタをリセットして前記クリア・モードにするかまたは書込み無効にするプログラム・モードとを有する、請求項３６記載のデータ伝達方法。
【請求項３９】
前記少なくとも１個のプログラム可能なメッセージ処理モジュールは前記少なくとも２個の指定された宛先プロセッサ・コアを示すプログラム可能な値を記憶する宛先レジスタを有する、請求項２７記載のデータ伝達方法。
【請求項４０】
前記宛先レジスタは、前記宛先レジスタ内のビットをセットするのに用いられる宛先セット・レジスタと、前記宛先レジスタ内のビットをクリアするのに用いられる宛先クリア・レジスタとを有する、請求項３９記載のデータ伝達方法。
【請求項４１】
前記メッセージ受信表示器は前記メッセージ宛先レジスタである、請求項３９記載のデータ伝達方法。
【請求項４２】
前記少なくとも１個の発信元プロセッサ・コアの１個はメッセージのシーケンスを前記複数のメッセージ処理モジュールのリンクされた部分集合に送り、各メッセージはそれぞれの指定された宛先プロセッサ・コアを有し、またメッセージ処理モジュールの前記リンクされた部分集合内の各メッセージ処理モジュールはメッセージ受信表示器と、送信完了検出器と、メッセージ応答生成論理とを有し、また各指定された宛先コアが前記先行メッセージを受信したことを前記メッセージ・シーケンス内の先行メッセージに対応するメッセージ処理モジュールの前記メッセージ受信表示器が示すと、メッセージ処理モジュールの前記リンクされた部分集合の前記メッセージ・シーケンス内の２番目以降のメッセージの送信が開始される、請求項２７記載のデータ伝達方法。
【請求項４３】
前記少なくとも１個のメッセージ処理モジュールは、前記少なくとも２個の指定された宛先プロセッサ・コアの１個への割込みまたは前記指定された発信元プロセッサ・コアへの割込みが現在トリガされているかどうか判定する少なくとも１個の割込み状態ビットを記憶する送信レジスタを有する、請求項２７記載のデータ伝達方法。
【請求項４４】
前記少なくとも２個の前記指定された宛先プロセッサ・コアの少なくとも１個は、前記送信レジスタ値を変更して前記宛先プロセッサ・コアへの前記割込みをクリアすることにより前記メッセージを受けたことを示す、請求項４３記載のデータ伝達方法。
【請求項４５】
前記送信レジスタ値の前記変更により前記発信元プロセッサ・コアへの応答割込みの送信を開始する、請求項４４記載のデータ伝達方法。
【請求項４６】
前記メッセージ受信表示器は前記送信レジスタである、請求項４３記載のデータ伝達方法。
【請求項４７】
前記少なくとも１個のメッセージ処理モジュールは、前記関連するメッセージ処理モジュールがメッセージ処理モジュールの前記リンクされた部分集合内の連続するメッセージ処理モジュールにリンクされているかどうかを示す値を記憶するモード・レジスタを有する、請求項４２記載のデータ伝達方法。
【請求項４８】
前記送信完了検出器は前記モード・レジスタ値を用いて前記リンクされた部分集合内の最後のメッセージ処理モジュールを検出し、前記最後のメッセージ処理モジュール内のメッセージの宛先コアが前記メッセージを受信したことを示すと前記発信元コアへの応答割込みの生成を開始する、請求項４７記載のデータ伝達方法。
【請求項４９】
前記最後のメッセージ処理モジュールを除く前記リンクされた部分集合内の全てのメッセージ処理モジュールは前記発信元プロセッサ・コアへの応答割込みの生成を無効にするように構成変更可能である、請求項４８記載のデータ伝達方法。
【請求項５０】
前記発信元プロセッサ・コアに割込みを送るべきことを前記最後のメッセージ処理モジュールの送信レジスタが示すと、前記最後のプロセッサ・コアに関連する前記メッセージ処理モジュールは前記送信レジスタを自動的にセットして前記発信元プロセッサ・コアへの応答割込みの生成を開始する、請求項４９記載のデータ伝達方法。
【請求項５１】
前記メッセージ・ハンドラは、
メッセージ処理モジュールの数と、
各メッセージ処理モジュール内に前記メッセージを記憶するためのメモリ容量と、
前記メッセージ・ハンドラが利用可能な割込み信号路の数、
の少なくとも１つを備える構成パラメータを指定することにより構成変更可能である、請求項２７記載のデータ処理方法。
【請求項５２】
前記メッセージ・ハンドラは前記構成パラメータを記憶する構成レジスタを備える、請求項５１記載のデータ伝達方法。
【請求項５３】
データ処理装置内の発信元プロセッサ・コアを制御して、少なくとも１個の発信元プロセッサ・コアと少なくとも１個の宛先プロセッサ・コアとの間でメッセージ・ハンドラを用いてデータを伝達するためのコンピュータ・プログラムを含むコンピュータ・プログラム製品であって、前記複数のメッセージ処理モジュールはそれぞれ発信元プロセッサ・コアが生成したメッセージを記憶するために割り当てられたメモリを有し、また前記発信元プロセッサ・コアと前記少なくとも１個の宛先プロセッサ・コアと前記メッセージ・ハンドラとの間のデータ伝達路を与えるバス構成を有し、前記発信元プロセッサ・コアを制御するコンピュータ・プログラム製品は、
少なくとも２つのメッセージをそれぞれ記憶するために少なくとも２個の前記メッセージ処理モジュールの前記発信元プロセッサ・コアが排他的制御を有することを表明する構成コードと、
前記少なくとも２個の各メッセージ処理モジュール内で関連するメッセージのそれぞれの宛先コアを指定する宛先コア指定コードと、
前記少なくとも２個のメッセージ処理モジュールの少なくとも１個内で自動応答モードを設定して、そのそれぞれの宛先が前記少なくとも２つのメッセージの全てを受信するまで前記発信元プログラム・コアへのメッセージ応答信号を押さえるようにするモード設定コードと、
を含むコンピュータ・プログラム製品。
【請求項５４】
データ処理装置内の発信元プロセッサ・コアを制御して、少なくとも１個の発信元プロセッサ・コアと少なくとも１個の宛先プロセッサ・コアとの間でメッセージ・ハンドラを用いてデータを伝達するためのコンピュータ・プログラムを含むコンピュータ・プログラム製品であって、前記複数のメッセージ処理モジュールはそれぞれ発信元プロセッサ・コアが生成したメッセージを記憶するために割り当てられたメモリを有し、また前記発信元プロセッサ・コアと前記少なくとも１個の宛先プロセッサ・コアと前記メッセージ・ハンドラとの間のデータ伝達路を与えるバス構成を有し、前記発信元プロセッサ・コアを制御するコンピュータ・プログラム製品は、
前記メッセージ・ハンドラにアクセスして、前記メッセージ処理モジュールのどれがメッセージ通知信号を生成したかを識別するメッセージ発信元識別コードと、
前記識別されたメッセージ処理モジュール内の記憶されたメッセージ受信表示器値を変更して前記メッセージ通知信号をクリアするメッセージ通知信号クリア・コードと、
を含み、
前記メッセージ通知信号クリア・コードによりメッセージ処理モジュールは送信完了検出器を用いて、前記少なくとも２個の宛先プロセッサ・コアの全てが前記メッセージを受信したことを前記表示器値に従って検出して、前記発信元プロセッサ・コアへの応答信号の送信を開始する、
コンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理システムに関するものである。特に、本発明はデータ処理システム内のメッセージ・データの伝達に関するものである。
多くの最近のデータ処理システムはプログラム・アプリケーションを走らせるために１個以上のプロセッサ・コアを用いている。かかる多コア・システムは、プロセッサ・コアがデータを相互に伝達するための、また１個の発信元コアから１個以上の宛先プロセッサ・コアに送られたデータが正しい宛先に受信されたかどうか判定するための機構を必要とする。
【背景技術】
【０００２】
発信元プロセッサ・コアからのメッセージ・データを受けると宛先プロセッサ・コアが応答信号を送信し、この応答信号は通信バスにより宛先コアから発信元コアに直接送信される二重コア・データ処理システムは公知である。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしこのメッセージ応答機構は、メッセージが１個の発信元コアから２個以上の宛先コアに送られる（すなわち、マルチキャスト・メッセージの）場合は問題がある。マルチキャスト・メッセージでは、送信中のメッセージ伝達が完了したと発信元プロセッサ・コアが判定する前に、２個以上の宛先コアはそれぞれメッセージをすでに受信済みのはずである。かかるシステムでは、或る宛先コアは自分が最後のコアであって、メッセージ通知信号をクリアして、応答信号を発信元プロセッサ・コアにロックされた転送に頼ることなく送り返してよいことを保証することができない、という問題がある。
【課題を解決するための手段】
【０００４】
本発明の第１の形態が提供するデータ処理装置は、
少なくとも１個の発信元プロセッサ・コアと少なくとも１個の宛先プロセッサ・コアと、
複数のメッセージ処理モジュールを有するメッセージ・ハンドラであって、前記複数のメッセージ処理モジュールはそれぞれ少なくとも２個の指定された宛先コアに送信するために発信元プロセッサ・コアが生成したメッセージを記憶するよう割り当てられたメモリを有するメッセージ・ハンドラと、
前記発信元コアと前記宛先コアと前記メッセージ・ハンドラとの間のデータ伝達路を提供するバス機構と、
を備え、
各指定された発信元プロセッサ・コアに関連する少なくとも１個のメッセージ記憶モジュールは、
前記少なくとも２個の指定された宛先プロセッサ・コアによりそれぞれ変更可能な、対応する指定された宛先プロセッサ・コアが前記メッセージを受信したことを表示器値により示すメッセージ受信表示器と、
前記少なくとも２個の指定された宛先コアの全てが前記メッセージを受信したことを前記表示器値に従って検出する送信完了検出器と、
前記少なくとも２個の指定された宛先コアの全てが前記メッセージを受信したことを前記送信完了検出器が検出すると、これに応じて前記発信元プロセッサ・コアへの応答信号の送信を開始するメッセージ応答生成論理と、
を有する。
【０００５】
本発明の認識では、メッセージ受信表示器とトランザクション完了検出器とをメッセージ・ハンドラのメッセージ記憶モジュール内に設けることにより、少なくとも２個の宛先コアがそれぞれマルチキャスト・メッセージを受信したことの追跡が容易になり、全ての宛先コアがメッセージを受信したとメッセージ・ハンドラが判定してから１つの応答を発信元プロセッサ・コアに送ることができる。これにより、宛先コア内に実現すべき制御機構が簡単になる。なぜなら所定の宛先コアは、自分がメッセージを受信した最後の宛先コアかどうか、そうであれば応答割込みを発信元コアに送り返すかどうかをチェックする機能を有する必要がないからである。また、送信完了検出器を個々の宛先プロセッサ・コアではなくメッセージ・ハンドラ内に設けることにより、規模の変更が容易なシステムが得られる。なぜなら、メッセージ受信情報の照合をメッセージ・ハンドラ内で集中的に行うことが可能になるからである。
【０００６】
認識されるように、発信元プロセッサ・コアが少なくとも２個の指定された宛先プロセッサ・コアに送るメッセージは関連するデータ・ペイロードを有しない割込み信号でよい。しかし或る好ましい実施の形態では、少なくとも１個のメッセージ処理モジュールは指定された発信元プロセッサ・コアが生成したメッセージを記憶するために割り当てられたメモリを有し、このメッセージは１個以上の宛先プロセッサ・コアがバス機構を通して読み取ることができる。メッセージにデータ・ペイロード容量を規定することにより発信元コアと宛先コアとの間の一層高度の伝達が可能になる。メッセージのためのメモリはメッセージ処理モジュール自体の中にあるので、記憶されたメッセージとそのメッセージ処理モジュールとの間に明確なマッピングが存在する。
【０００７】
別の異なる好ましい実施の形態では、前記少なくとも１個のメッセージ処理モジュールは、前記指定された発信元プロセッサ・コアが生成したメッセージを記憶するための関連するメモリ領域を有する。この関連するメモリ領域は、前記少なくとも１個の発信元プロセッサ・コアと前記少なくとも１個の宛先プロセッサ・コアとの間で共用されるメモリ内の領域である。これにより、メッセージ・ハンドラ自体の中にデータ・レジスタを設ける必要なしにメッセージ・ハンドラはデータ・ペイロードを有するメッセージを伝達することができる。
【０００８】
認識されるように、発信元コアは少なくとも２個の指定された宛先コアのどれとも異なってよい。しかし好ましい実施の形態では、少なくとも２個の指定された宛先コアの１個は発信元プロセッサ・コアでもある。この形態により、同じプロセッサ・コア上で同時に走る２つの異なるプロセス間でも、別の異なるプロセッサ・コアへでも、メッセージ・データの伝達が可能になる。
【０００９】
メッセージ・ハンドラ内にメッセージが存在することを宛先プロセッサ・コアに通知するのに多くの種々の方法を用いることができる。例えば、メッセージ・ハンドラにポーリング要求を定期的に送り、メッセージが最近書き込まれたかどうか判定する。しかしメッセージ・ハンドラは割込み発生回路を備え、宛先プロセッサ・コアに割込みを送ることによりリポジトリ内にメッセージが存在することを宛先プロセッサ・コアに通知するのがよい。割込みを発生してこの通知を行うことにより、宛先コアは関係するメッセージが存在するという通知を迅速に受けて、そのメッセージを適切に検索して処理することができる。また、これにより各プロセッサ・コアは頻繁にポーリングする必要がなくなるので、バスの伝達帯域幅を節約することができる。
【００１０】
かかる形態では、宛先プロセッサ・コアはメッセージ・ハンドラから宛先コアに送られる割込みを処理する割込みコントローラを備えるのもよい。これにより、宛先プロセッサ・コアは受けた割込み信号を効率的に扱って処理することができる。
【００１１】
理解されるように、メッセージ・ハンドラが割込みを生成することにより、少なくとも１個の宛先プロセッサ・コアはそれぞれメッセージ・ハンドラ内にメッセージが存在するという通知を受けることができる。しかし好ましい実施の形態では、各メッセージ処理モジュールは宛先プロセッサ・コアへの割込みの送信を可能にしまたは無効にするための、プログラム可能な値を有するマスク状態レジスタを有する。これにより、メッセージ・リポジトリの少なくとも１つの部分集合は種々のメッセージ通知システム（ポーリング機構など）を用いることができる。このように、或るプロセッサ・コアはプログラム・アプリケーションの実行中に随時に割込みを受けるのではなく、処理動作の適当な段階でメッセージが存在することを、ポーリング機構を用いてポーリングすることができる。
【００１２】
好ましくは、マスク状態レジスタはマスク・レジスタ内のビットをセットするのに用いられる関連するマスク・セット・レジスタと、マスク・レジスタ内のビットをクリアするのに用いられるマスク・クリア・レジスタとを有する。これにより、読取り・変更・書込み(read-modify-write)転送を用いずにマスク状態レジスタ内の個々のビットをセットすることができる。
【００１３】
各宛先プロセッサ・コアは、関係するメッセージがどのメッセージ処理モジュールに記憶されるかに関する情報と、メッセージが存在することを宛先コアに通知する割込み信号とを受けてよいが、マスク状態レジスタは現在表明されている割込みをどのメッセージ記憶モジュールがトリガしたかを示す値を記憶する関連するマスクされた割込み状態レジスタを有するのが好ましい。これによりメッセージ通知割込みの生成が容易になり、しかも関係するメッセージが存在するという通知を受けると、宛先コアはマスクされた割込み状態レジスタ内の情報にすぐアクセスして、どのメッセージ処理モジュールを読み取ってメッセージを取得すべきか判定することができる。
【００１４】
理解されるように、少なくとも１個のプログラム可能なメッセージ処理モジュールの所有権は多数の異なる方法で調整してよいが、メッセージ処理モジュールは前記指定された発信元プロセッサ・コアに対応するプログラム可能な値を記憶する発信元レジスタを備えることが望ましい。発信元レジスタは他のプロセッサ・コアが容易に読み取ることができるし、また再プログラムするのが簡単である。またコアがメッセージ・ハンドラの所有権を要求するためには、１つのプロセッサ・サイクルで発信元レジスタに書き込んで所有権を得て、次のプロセッサ・サイクルで発信元レジスタを再び読み取って所有権の取得に成功したかどうか判定する。したがって、発信元コアの読取り・書込み動作をいっしょにロック(lock)する必要はない。
【００１５】
全ての宛先プログラム・コアがメッセージを受けたことを発信元コアに通知するのに用いられる割込み線は動的に選択してよいが、発信元レジスタは指定されたプロセッサ・コアに応答割込みを表明する割込み線を定義するのが好ましい。したがって、最後の宛先コアがメッセージを受けたとメッセージ・ハンドラが判定すると、発信元レジスタを読み取ってどの割込み線で応答を送るべきかを決める。
【００１６】
好ましい実施の形態では、プログラム可能なメッセージ処理モジュールの発信元レジスタはクリア・モードとプログラム・モードとを有する。クリア・モードでは、レジスタ内に保持されているプログラム値はクリア値であって発信元レジスタは書込み可能である。しかしプログラム・モードでは、クリア値の場合を除いて全ての値において宛先レジスタは書込み無効である。これにより、任意の時点でメッセージ処理モードの制御を有するのは１個のコアだけであることを保証することができる。
【００１７】
理解されるように、メッセージの宛先である宛先プロセッサ・コアは多くの異なる方法で指定することができるが、少なくとも１個のプログラム可能なメッセージ処理モジュールは少なくとも１個の宛先プロセッサ・コアを表すプログラム可能な値を記憶する宛先レジスタを持つのが望ましい。
【００１８】
好ましくは、宛先レジスタは、宛先レジスタ内のビットをセットするのに用いられる関連する宛先セット・レジスタと、宛先レジスタ内のビットをクリアするのに用いられる宛先クリア・レジスタとを有する。これにより、宛先レジスタ内の個々のビットは読取り・変更・書込みの転送を用いることなくセットすることができる。
【００１９】
或る好ましい実施の形態では、メッセージ処理モジュールのメッセージ受信表示器は宛先レジスタである。宛先レジスタは各メッセージ宛先を記憶するので、宛先コアがその宛先コアへの割込みをクリアすると、その宛先レジスタ内の対応するエントリをすぐクリアして、メッセージを受信したことを示すことができる。このように、宛先レジスタ内の全てのビットがクリアされると、発信元レジスタはマルチキャスト・メッセージ伝達が完了したことを知ることができる。このように、宛先レジスタはどのメッセージを受信したかを追跡する便利な方法を提供する。
【００２０】
認識されるように、多数の異なるメッセージを異なる時刻に各宛先コアに送ることができるし、各メッセージに対して独立に応答することができる。しかし特に好ましい実施の形態では、少なくとも１個の発信元プロセッサ・コアの１個はメッセージのシーケンスを前記複数のメッセージ処理モジュールのリンクされた部分集合に送る。このシーケンスの各メッセージはそれぞれ指定された宛先プロセッサ・コアを有し、メッセージ処理モジュールの前記リンクされた部分集合内の各メッセージ処理モジュールは、メッセージ受信表示器と、送信完了検出器と、メッセージ応答生成論理とを有する。各指定された宛先コアが前記先行メッセージを受信したことを前記メッセージ・シーケンス内の先行メッセージに対応するメッセージ処理モジュールのメッセージ受信表示器が示すと、メッセージ処理モジュールの前記リンクされた部分集合の前記メッセージ・シーケンス内の２番目以降のメッセージの送信が開始される。
【００２１】
メッセージ処理モジュールをこのようにリンクすることにより、発信元コアはメッセージ・ハンドラ内の異なるメッセージ処理モジュール内に複数のメッセージを積み重ねることができる。かかるメッセージは先行メッセージに応答した後にはじめて送ることができる。かかるメッセージは任意の選択された宛先プロセッサ・コアに送ることができる。先行メッセージを処理し終わるまではコアは次のメッセージの処理を開始することができない場合（例えば、各メッセージの内容が処理シーケンスに特に関係する場合）は、これは特に有用である。
【００２２】
宛先プロセッサ・コアへのメッセージ通知割込みとメッセージ・ハンドラへのメッセージ応答割込みとは割込みの現在の状態を追跡せずに送ってよいが、少なくとも１個のプログラム可能なメッセージ処理モジュールは、前記少なくとも１個の宛先プロセッサ・コアへの割込みまたは前記発信元プロセッサ・コアへの割込みが現在トリガされているかどうか判定する少なくとも１個の割込み状態ビットを記憶する送信レジスタを有することが好ましい。これによりシステムはどのメッセージ伝達が進行中かを追跡し、またデータの損失なしにメッセージ処理モジュールの所有権を安全に転送することができる適当な時点を決定することができる。
【００２３】
理解されるように、宛先プロセッサ・コアは戻りメッセージを発信元プロセッサ・コアに直接送ることにより、または戻りメッセージをメッセージ・ハンドラを介して送ることにより、メッセージを受けたことを応答することができるが、宛先プロセッサ・コアは送信レジスタ値を変更して宛先コアへの割込みをクリアすることによりメッセージを受けたことを示すのが好ましい。これにより、宛先プロセッサ・コアが１個以上あるとき、メッセージ記憶モジュールは受けた応答を全て効率的に照合して、メッセージ伝達を全てのプロセッサ・コアが受けたかどうか判定することができる。
【００２４】
宛先コアによる送信レジスタの変更を発信元プロセッサ・コアがポーリングにより監視して宛先コアがメッセージを受けたかどうか判定することができるが、送信レジスタの変更が発信元プロセッサ・コアへの応答割込みの送信を開始させるのが好ましい。
【００２５】
別の好ましい実施の形態では、少なくとも１個のメッセージ処理モジュールのメッセージ受信表示器は送信レジスタである。宛先プロセッサ・コアは該当するメッセージ処理モジュールの送信レジスタ値を変更して、メッセージ・ハンドラ内に関係するメッセージが存在することを示す割込みをクリアするので、送信レジスタ値を変更することは、対応する宛先コアにメッセージを受信したときを直接示す。リンクされたメッセージ処理モジュールの場合は、１個のモジュールの送信レジスタからの情報を用いて、リンクされた部分集合内の次のメッセージ処理モジュール内でのメッセージ生成をトリガすることができる。
【００２６】
認識されるように、メッセージ処理モジュールの部分集合をリンクするには多くの異なる方法を用いることができる。しかし好ましくは、少なくとも１個のメッセージ処理モジュールは、関連するメッセージ処理モジュールがメッセージ処理モジュールのリンクされた部分集合内の連続するメッセージ処理モジュールにリンクされているかどうかを示す値を記憶するモード・レジスタを有する。これは、モード・レジスタ内の値を変えることによりメッセージ処理モジュールのリンクを容易に再定義できることを意味する。
【００２７】
優れている点は、送信完了検出器はモード・レジスタ値を用いて或るメッセージ処理モジュールがリンクされた部分集合内の最後のメッセージ処理モジュールであることを検出したとき、前記最後のメッセージ処理モジュール内のメッセージの宛先コアが前記メッセージを受信したことを示すと前記発信元コアへの応答割込みの生成を開始してよいことである。最後のメッセージ処理モジュールのモード・レジスタ値をセットすると、シーケンス内には他のモジュールが存在せず、したがって関連する宛先コアが最後のメッセージ受信コアであることを示す。したがって、応答を発信元プロセッサ・コアに送り返すべき時点を容易に決定することができる。
【００２８】
認識されるように、応答信号はメッセージ処理モジュールのリンクされた部分集合に関連する各宛先プロセッサ・コアから発信元プロセッサ・コアに送ることができる。しかし好ましくは、最後のメッセージ処理モジュールを除く前記リンクされた部分集合内の全てのメッセージ処理モジュールは前記発信元プロセッサ・コアへの応答割込みの生成を無効にするように構成変更可能である。したがって、メッセージの全てのシーケンスを各宛先コアが受信して、受信した応答の数を発信元コアが追跡する必要がなくなってはじめて発信元プロセッサ・コアに割込みをかける。
【００２９】
発信元プロセッサ・コアに割込みを送るべきことを前記最後のメッセージ処理モジュールの送信レジスタが示すと、前記最後のプロセッサ・コアに関連するメッセージ処理モジュールは送信レジスタを自動的にセットして前記発信元プロセッサ・コアへの応答割込みの生成を開始することが好ましい。これは、応答割込みを行うにはプロセッサ・コアが更に介入する必要がないことを意味する。
【００３０】
理解されるように、メッセージ・ハンドラは種々のデータ処理システムに適応して用いることができるように多くの異なる構成パラメータを有してよい。しかし提供するメッセージ・ハンドラは、メッセージ記憶モジュールの構成変更可能な数と、メッセージを記憶するための構成変更可能なメモリ容量と、メッセージ・ハンドラが利用可能な割込み信号路の構成変更可能な数とを有するのが望ましい。メッセージ記憶モジュールの数が変更可能であることは、メッセージ・ハンドラが異なる数のコアを有するデータ処理システムに合わせて規模を変更することが可能なことと、同じハードウエア上で走る異なるプログラム・アプリケーションの異なるメッセージ通過要求に適応できることを意味する。メッセージ記憶容量が変更可能なので、種々の最大サイズのメッセージをプロセッサ間で伝達することができる。割込み信号の数が変更可能なので、所定の発信元プロセッサ・コアは指定された数の宛先プロセッサ・コアに所定のメッセージを実質的に同時に伝達することができる。
【００３１】
優れている点は、構成パラメータの現在の値がメッセージ・ハンドラ内の構成レジスタ内に記憶されるので、メッセージ・ハンドラ・ドライバ・ソフトウエアは現在のメッセージ・ハンドラ構成を判定できることである。所定のデータ処理システム内にメッセージ・リポジトリの複数の実現値(instance)がある場合は、各実現値の構成レジスタを読み取って、特定の実現値を用いる方法を決定する。
【００３２】
第２の形態では、本発明は少なくとも１個の発信元プロセッサ・コアと少なくとも１個の宛先プロセッサ・コアとの間で、複数のメッセージ処理モジュールを有するメッセージ・ハンドラと、前記発信元コアと前記少なくとも１個の宛先プロセッサ・コアと前記メッセージ・ハンドラとの間のデータ伝達路を与えるバス構成とを用いて、データを伝達するための方法を提供する。前記方法は、
指定された発信元プロセッサ・コアから、少なくとも２個の指定された宛先プロセッサ・コアのそれぞれに関連するメッセージ処理モジュールにメッセージを送信し、
前記発信元プロセッサ・コアかまたは前記指定された宛先プロセッサ・コアの１個に関連するメッセージ処理モジュールに属するメッセージ受信表示器の表示器値を変更して、対応する指定された宛先プロセッサ・コアが前記メッセージを受信したことを示し、
送信完了検出器を用いまた前記表示器値に従って、前記少なくとも２個の指定された宛先コアの全てが前記メッセージを受信したことを検出し、
前記少なくとも２個の指定された宛先コアの全てが前記メッセージを受信したことを前記送信完了検出器が検出すると、これに応じて前記発信元プロセッサ・コアへの応答信号の送信を開始する、
ステップを含む。
特許請求の範囲に定義されている本発明の補足的形態は、データ処理システム内の発信元コアを制御するコンピュータ・プログラムと、データ処理システム内の宛先コアを制御するコンピュータ・プログラムとを含む。
【００３３】
本発明の前記およびその他の目的と特徴と利点は、添付の図面を参照して例示の実施の形態の以下の詳細な説明を読めば明らかである。
【実施例】
【００３４】
図１は、２個のプロセッサ・コアと１個のメッセージ・ハンドラ１３０とを備えるデータ処理装置の略図を示す。この装置は、第１のプロセッサ・コア１１０および関連する割込みコントローラ１１２と、第２のプロセッサ・コア１２０および関連する割込みコントローラ１２２と、３個のメッセージ処理モジュール１３２，１３４，１３６を有するメッセージ・ハンドラと、プロセッサ・コア１１０，１２０とメッセージ・ハンドラ１３０の間のデータ伝達路を与える共通バス１５０とを備える。メッセージ・ハンドラ１３０は第１の割込みコントローラ１１２と第２の割込みコントローラ１２２とに信号線１６２および１６４により割込みをそれぞれ出力する。このバス構成では共通バス１５０を用いているが、別のバス構成では別個のバスを設けて各プロセッサとメッセージ・ハンドラ１３０とを接続してよい。
【００３５】
各メッセージ処理モジュールは所定量のデータを記憶することができる。メッセージ・データは一般に発信元プロセッサ・コアによってメッセージ処理モジュールに書き込まれ、少なくとも１個の宛先プロセッサ・コアによって読み取られる。発信元コアは一般に宛先コアとは異なる。しかし同じプロセッサ・コア上の異なるプロセッサからのメッセージもメッセージ・ハンドラを介して伝達することができる。３個のメッセージ処理モジュール１３２，１３４，１３６はそれぞれ、現在メッセージ伝達中かどうかに関わらず指定されたプロセッサ・コアへのメッセージを専用に記憶する固定モードか、またはメッセージ伝達中でないときはプロセッサ・コア１１０，１２０のどちらかがメッセージ処理モジュールへの書込みアクセスを主張することができる浮動モードになるように、メッセージ・ハンドラ１３０をプログラムして構成することができる。２個のプロセッサ・コア１１０，１２０のマスタ・オペレーティング・システムはどのメッセージ処理モジュールが浮動モードでどれが固定モードかを指定する情報で形成される。
【００３６】
メッセージ・ハンドラ１３０はソフトウエア制御の下に割込みを生成する。かかる割込みは一般に関連するデータを有し、複数の異なる割込み出力に向けることができる。各割込み出力は各メッセージ処理モジュール内の発信元レジスタと宛先レジスタとマスク・レジスタ内の１ビットに直接対応し（図３参照）、これらのレジスタは、どの割込み線を表明する（assert）か、またメッセージをいつ送りまた応答するかを制御する。１つ以上の割込み出力１６２，１６４が各割込みコントローラ１１２，１２２に接続してよい。図１Ａの実施の形態のように、一般にメッセージ・ハンドラ１３０からの割込み出力はプロセッサ・コアに関連する各割込みコントローラ１１２，１２２に接続するので、任意のコアはデータ処理システム内の任意の他のコアにメッセージを送ることができる。しかし別の実施の形態では、１つ以上の割込みを１個のプロセッサ・コアの割込みコントローラに与えてよい。これにより、所定のプロセッサ・コアに与えられる異なる割込み線上に異なる種類のメッセージを示すことができる。
【００３７】
メッセージ・ハンドラ１３０からの各割込み出力は関連するチャンネルＩＤを有する。チャンネルＩＤは１ホット符号化(one-hot encoded)（すなわち、１ビットだけが１で他の全てのビットは０）１６進数であって、発信元レジスタと宛先レジスタとマスク・レジスタとをプログラムするのに用いられる。宛先コアが割込みコントローラ１１２，１２２を介してメッセージ・ハンドラ割込みを受けると、宛先コアはその割込み線に関係するマスクされた割込み状態レジスタを読み取って、どのメッセージ処理モジュールが割込みをトリガしたか判定する。例えば、コア０がチャンネルＩＤ１にマップされる場合は、宛先コアはマスクされた割込み状態レジスタＩＰＣＭＭＩＳ０を読み取って、どのメッセージ処理モジュールを読み取ってメッセージを検索すべきか判定する。このマスクされた割込み状態レジスタは、１ビットが各メッセージ処理モジュールにマップされる３２ビットの読取り専用レジスタである。
【００３８】
図１Ｂは、マスクされた割込み情報レジスタと生の（すなわち、マスクされない）割込み状態レジスタとにそれぞれ対応するＩＰＣＭＭＩＳ０とＩＰＣＭＲＩＳ０で示す２個の状態レジスタを用いてメッセージ処理モジュール０の状態をコア０に与える方法を示す。マスク・レジスタの機能については図３を参照して後で詳細に説明する。図１Ｂで、マスクされた割込み状態レジスタはどのメールボックスが割込みをトリガしたか識別する。この値は、生割込み状態とマスク状態レジスタとの論理積１８２である。全てのマスクされた割込み状態レジスタ出力の論理和をとり、図３に示すＩＰＣＭＩＮＴ［３１：０］割込み出力バスを形成する。
【００３９】
図１Ａの実施の形態において、第１のプロセッサ・コア１１０からメッセージ・ハンドラ１３０を介して第２のプロセッサ・コア１２０にメッセージを伝達する場合を考える。この例では、第１のプロセッサ・コアが第１のメッセージ処理モジュール１３２の排他的所有権を有するようメッセージ・ハンドラは形成されている。したがって、第１のプロセッサ・コア１１０だけがモジュール１３２への書込みアクセスを有する。第１のプロセッサ・コア１１０はメッセージを生成し、このメッセージをメッセージ処理モジュール１３２に書き込んで、メッセージの宛先が第２のプロセッサ・コア１２０であると指定する。メッセージ記憶リポジトリは信号線１６４に割込みを生成し、割込みコントローラ１２２はこれを受けて、第２のプロセッサ・コア１２０にそのコア宛てのメッセージがメッセージ・ハンドラ１３０内に記憶されていることを通知する。第２のプロセッサ・コア１２０はマスクされた割込み状態レジスタ入力から、関係するメッセージを第１のメッセージ処理モジュール１３２が含むと判定して、メッセージ・ハンドラ１３０内のこの位置からメッセージを読み取る。次に第２のプロセッサ・コア１２０はメッセージを受けたという応答をメッセージ・ハンドラ１３０に送り返す（応答を第１のプロセッサ・コア１１０に直接送らない）。第１のプロセッサ・コア１１０は第１のメッセージ処理モジュール１３２内のレジスタを読み取って、応答を受けたかどうか判定する。前のメッセージを受けたという応答があってはじめて、第１のプロセッサ・コア１１０は新しいメッセージを第１のメッセージ処理モジュール１３２に書き込むことができる。
【００４０】
メッセージ・ハンドラ１３０は、データ処理装置上で走る異なるプロセッサ・アプリケーションについて３個のメッセージ処理モジュール１３２，１３４，１３６の所有権モードが異なるように形成することができる。例えば、プログラム・アプリケーションＡが走っているとき、第１および第２のメッセージ処理モジュール１３２，１３４は共に固定モードであって第１のプロセッサ・コア１１０専用であり、第３のメッセージ処理モジュールは第２のプロセッサ・コアが排他的に所有してよい。しかしプログラム・アプリケーションＢが走っているときは、第１のメッセージ処理モジュール１３２は第１のプロセッサ・コアが排他的に所有し、第２のメッセージ処理モジュール１３４は第２のプロセッサ・コアが排他的に所有し、第３のメッセージ処理モジュール１３６は浮動モジュールであってその所有権はメッセージ伝達中でないとき第１のプロセッサ・コア１１０または第２のプロセッサ・コア１２０が得てよいようにメッセージ・ハンドラ１３０を形成してよい。このようにプロセッサ・コアとメッセージ記憶との間のマッピングを調整することが可能なので、データ処理システムは異なるアプリケーションの異なるメッセージ通過要求に効率的に適応することができる。
【００４１】
２つ以上のアプリケーション・プログラムが同じデータ処理システム上で同時に走っている場合は、アプリケーション間で文脈の切替えが起こるとマスタ・オペレーティング・システムはメッセージ・ハンドラの構成の変更を開始する。文脈の切替えが発生すると、全てのレジスタの内容をメモリに記憶する。本発明では、文脈が切り替わると、メッセージ記憶リポジトリの内容はメモリにコピーされ、メッセージ通過機構に関連する全ての割込みはクリアされる。
【００４２】
図２は図１Ａのメッセージ・ハンドラ１３０の機能的構成要素の略図を示す。メッセージ・ハンドラ１３０は、バス・インターフェース・モジュール２１０と、複数のメッセージ処理モジュールおよび関連する制御論理１３２と、割込み発生論理２２０とを備える。
【００４３】
この例示の実施の形態では３２個のメッセージ処理モジュールがある。これらの３２個のモジュールはそれぞれ、制御情報を記憶するための制御レジスタと、メッセージを記憶するためのデータ・レジスタとを有する。メッセージが１つのメッセージ処理モジュールのデータ・レジスタに書き込まれると、割込み発生論理２２０はトリガされて指定された各宛先コアに割込みを送る。バス・インターフェース・モジュール２１０は、英国キャンブリッジのＡＲＭ社が開発した高度マイクロプロセッサ・バス構造(Advanced Microprocessor Bus Architecture)（ＡＭＢＡ（登録商標））プロトコルを用いて共通バス１５０によるデータの伝達を可能にする。発信元プロセッサ・コアからの書込み要求と宛先プロセッサ・コアからの読取り要求はこのバス・プロトコルを用いて処理される。
【００４４】
図２はバス・インターフェース・モジュール２１０に出入りする一連のバス信号入力と出力とを示す。下の表１はバス・インターフェース・モジュール２１０が用いるＡＭＢＡ高度高性能バス(Advanced High-Performance Bus)（ＡＨＢ）スレーブ信号のリストである。表１は信号の種類毎に入力信号か出力信号か指定し、対応する信号により伝達される情報の説明を与える。Ｈを前置した全ての信号はＡＨＢ信号を示すことに注意していただきたい。表１では、メッセージ・ハンドラ１３０をＩＰＣＭ（プロセッサ間伝達モジュール inter-processor communicaiton module）で示す。
【００４５】
入力信号ＨＣＬＫとＨＲＥＳＥＴｎとはＡＭＢＡ  ＡＨＢの共通信号である。信号ＨＣＬＫはメッセージ・ハンドラ１３０内のクロック・コントローラに与えられるクロック入力信号であり、信号ＨＲＥＳＥＴｎはローのときが活動状態であるバス・リセット信号である。信号ＩＰＣＭＩＮＴ［３１：０］は、メッセージ・ハンドラ１３０の割込み生成論理２２０が出力する３２ビットの信号（ハイのときが活動状態）である。これは所定のメッセージにおける指定された宛先プロセッサ・コアの割込みコントローラ向けの割込み信号である。これらの割込み信号は、関係するメッセージがメッセージ・リポジトリ内に存在することを宛先プロセッサ・コアに通知するのに用いられる。
【００４６】
入力信号ＭＢＯＸＮＵＭ［５：０］と、ＩＮＴＮＵＭ［５：０］と、ＤＡＴＡＮＵＭ［２：０］とは、メッセージ処理モジュールとその関連する制御論理とを含むユニット１３２に与えられる。これらの３入力はそれぞれタイオフ(tie-off)専用信号である。ＭＢＯＸＮＵＭ［５：０］は活動状態のメールボックスの数を定義する入力構成ピンである。ＩＮＴＮＵＭ［５：０］は活動状態の割込みの数を定義する入力構成ピンである。ＤＡＴＡＮＵＭ［２：０］は各メールボックス内の活動状態のデータ・レジスタの数を定義する入力構成ピンである。
【表１】
2005182754.tif 000003
【００４７】
図２の割込み発生論理２２０は最大３２の割込み信号ＩＰＣＭＩＮＴ［０：３１］を出力する。３２のチャンネルＩＤはそれぞれ割込み信号にマップする。
図３は、メッセージ処理モジュール割込み信号をメッセージ・ハンドラ割込み出力にマップする方法の概要を示す。図３に示すように、各メッセージ処理モジュールは、発信元レジスタ３１０と、宛先レジスタ３２０と、マスク・レジスタ３３０と、送信レジスタ３４０と、メッセージ・データを記憶する複数のデータ・レジスタ３５０と、モード・レジスタ３６０とを備える。
【００４８】
この実施の形態では、メッセージ・ハンドラは、１から３２の間のプログラム可能なメッセージ記憶リポジトリと、各メッセージを記憶するための最大７個の３２ビットのデータ・レジスタとを備える。またこの形態は１から３２の間の読取り専用割込み状態レジスタを備え、コア毎に１個の割込み状態レジスタがある。或る割込みはマスク・レジスタ３３０を介して禁止になる。
【００４９】
メッセージハンドラ１３０は３つの変更可能なパラメータを有する。
（１）  割込みの数（１から３２）
（２）  メッセージ処理モジュールの数（１から３２）
（３）  データ・レジスタの数（０から７）
上の３つのパラメータを適当に設定することにより、メッセージ・ハンドラはデータ処理システムの要求に合うように特定して形成することができるので、関係するシステムの回路のゲート数をできるだけ減らして性能と効率を高めることができる。上の３つの変更可能なパラメータ毎に選択される値はメッセージ・ハンドラ内の読取り専用構成状態レジスタ内で指定される。メッセージ・ハンドラ・ソフトウエア・ドライバは読取り専用構成状態レジスタを用いて、所定のシステムでメッセージ・ハンドラを用いる方法を決定する。
【００５０】
発信元レジスタ３１０は３２ビットの読取り／書込みレジスタで、メッセージを生成した発信元プロセッサ・コアを識別するのに用いられる。発信元レジスタ３１０をチャンネルＩＤ値でプログラムして、応答割込み信号を乗せて送るべき割込み線を識別する。チャンネルＩＤは、現在のレジスタ値が０ｘ００００００００（クリア・モードであることを示し、頭の０ｘは１６進数を示す）の場合だけこのレジスタ内にプログラムすることができる。クリア値以外の値でレジスタがプログラムされているときは、プログラムを変更する前にまずクリアして０ｘ００００００００にしなければならない。この機構は、任意の時点でメッセージ記憶リポジトリの制御を有するのは１個のコアだけであることを保証する。
【００５１】
メッセージを送るには、発信元プロセッサ・コアはメッセージ記憶リポジトリの所有権（すなわち、書込みアクセス）を得なければならない。これを行うには、発信元コアはそのチャンネルＩＤの１つを発信元レジスタ３１０に書き込み、次に発信元レジスタを再び読み取って、書込みが成功したか、また所有権を確保したか判定する。発信元レジスタ３１０は１つのプログラム値（すなわち１つのチャンネルＩＤ）だけしか含んではならない。メッセージ記憶リポジトリ・ソフトウエアは１つの符号化された数だけを確実に発信元レジスタ３１０に書き込むので、関連するメッセージ処理モジュールには１つの発信元プロセッサ・コアだけが書込みアクセスを有する。発信元レジスタ３１０がプログラムされた状態にあって或るチャンネルＩＤを含む場合は、クリアすることはできるが異なるチャンネルＩＤを上書きすることはできない。浮動モードにあるメッセージ処理モジュールがその後必要がなくなった場合は、コアは発信元レジスタ３１０をクリアすることにより放棄する。発信元レジスタ３１０をクリアするとメッセージ記憶リポジトリ内の他の全てのレジスタ３２０，３３０，３４０，３５０もクリアする。これにより、新しく割り当てられるときメッセージ記憶リポジトリは必ずクリアされている。
【００５２】
宛先レジスタ３２０は３２ビットのレジスタで、データ処理装置内の１個以上のメッセージ宛先コアを指定するのに用いられる。宛先レジスタ３２０は別々の書込みセット位置とクリア位置とを有し、読取り・変更・書込み転送を用いずに宛先レジスタ内の個々のビットをセットすることができる。宛先レジスタ内の１ビットは、そのビットを宛先セット・レジスタに書き込むことによりセットすることができる。宛先セット・レジスタは３２ビットの書込み専用レジスタで、その機能はメッセージ処理モジュールの宛先レジスタ内のビットをセットすることである。宛先セット・レジスタ内のビットをセットすると、ハードウエアはそのビットと宛先レジスタ３２０内の現在の値との論理和をとる。同様に、宛先レジスタ３２０内の１ビットは、そのビットを３２ビットの書込み専用の宛先クリア・レジスタに書き込むことによりクリアすることができる。発信元コアは、全てのチャンネルＩＤの論理和を宛先レジスタ内にプログラムすることによりどのコアを宛先コアにするかを定義する。或るコアが１個以上のチャンネルＩＤを有する場合は、メッセージ当たり１個だけ用いる。宛先レジスタ３２０は、発信元レジスタを定義した（その中にチャンネルＩＤを書き込んだ）後にはじめて書き込むことができる。
【００５３】
マスク・レジスタ３３０は割込み出力当たり１ビットを有する３２ビットのレジスタである。所定のプロセッサについてのビットをゼロにセットするとそのプロセッサ・コアの割込みは禁止になるが、そのビットを１にセットするとそのコアの割込みは可能になる。このように割込みが禁止になると、コアはメッセージ・ハンドラ１３０を頻繁にポーリングして、関係するメッセージがそこに入ったかどうか判定する。発信元レジスタ３１０がクリアされるとマスク・レジスタはクリアされる。宛先レジスタ３２０と同様に、マスク・レジスタ３３０は変更するのに別々の３２ビットの書込み専用のセット・レジスタとクリア・レジスタとを用いる。マスク・レジスタ３３０は割込み出力を可能にする。或るメッセージ記憶リポジトリの割込みを可能にするには、コアは宛先コアのチャンネルＩＤをマスク・セット・レジスタに書き込む。そのメッセージ記憶リポジトリの割込みは、マスク・クリア・レジスタに同じチャンネルＩＤを書き込むことによりマスクすることができる。マスク・レジスタ３３０の位置には、発信元レジスタ３１０を定義した後ではじめて書き込むことができる。
【００５４】
送信レジスタ３４０は発信元コアまたは宛先コアにメッセージを送るのに用いられる２ビットの読取り／書込みレジスタである。送信ビットは、発信元レジスタを定義した後ではじめて書き込むことができる。送信レジスタの第０ビットをセットすると宛先コアへの割込みを生成し、第１ビットをセットすると発信元コアへの割込みを生成する。メッセージは、送信レジスタ３４０のビット０をセットすることにより送られる。これは宛先コアへの割込みをトリガする。このビットをクリアすると宛先コアへの割込みをクリアする。応答割込みは送信レジスタ３４０のビット１をセットすることにより送られる。このビットをクリアすると発信元コアへの割込みをクリアする。送信レジスタ３４０内のビット０をクリアしビット１をセットするのは１つの書込みで行うことができる。ただし、これは必須ではない。送信レジスタ３４０は発信元レジスタ３１０を定義した後ではじめて書き込むことができる。送信レジスタのビット割当ての詳細を下の表２に示す。
【表２】
2005182754.tif 000004
【００５５】
データ・レジスタ３５０は一連の７個の３２ビットの読取り／書込みレジスタで、メッセージ・データを記憶するのに用いられる。データ・レジスタは発信元レジスタを定義した後ではじめて書き込むことができるし、また発信元レジスタがクリアされるとクリアされる。データ・レジスタ３５０は一般にメッセージを送る前に書き込まれる。メッセージ処理モジュール当たりのデータ・レジスタの数は０から７の間である。メッセージ処理モジュール内にデータ・レジスタがない実施の形態では、メッセージは共用メモリの所定の領域内に記憶される。共用メモリはデータ処理システムの発信元コアと宛先コアとの間で共用される。
【００５６】
モード・レジスタ３６０は２ビットの読取り／書込みレジスタである。ビット０をセットすると対応するメッセージ処理モジュール内の自動応答モードが可能になり、ビット１をセットすると自動リンク・モードが可能になる。発信元レジスタ内の或るビットをセットして対応するメッセージ処理モジュールの所有権が表明されてはじめてモード・レジスタに書き込むことができる。発信元レジスタがクリアされるとモード・レジスタはクリアされる。
【００５７】
自動応答モードが可能のときは、各宛先プロセッサ・コア毎に１ビットがセットされている宛先レジスタが完全にクリアされると、応答割込みが発信元プロセッサ・コアに自動的に送り返される。対応するメッセージを受けると、各宛先コアは宛先レジスタの該当するビットをクリアしてメッセージ通知割込みをクリアする。宛先コアがこれを行うには、そのチャンネルＩＤ値を宛先クリア・レジスタ内の該当するビットに書き込む。このように、自動応答割込みは、全ての宛先コアがいつメッセージを受けてその割込みをクリアしたかを示す。宛先コアが２個以上ある場合は、必ず自動応答モードをセットしなければならない。自動応答に関連するデータは元のメッセージのデータと同じである。自動応答モードは、３２個のコアを備えるデータ処理システム内の１から３２個の間の受信コアについて用いることができる。モジュール０のモード・レジスタ内の自動リンク・ビットをセットすると、メッセージ処理モジュール０はメッセージ処理モジュール１とリンクされる。自動応答モードでは宛先レジスタはメッセージ受信表示器として働き、各宛先プロセッサ・コアはこれを変更してメッセージ通知割込みをクリアする。メッセージ処理モジュール内の送信完了検出器は宛先レジスタのビット設定を監視して、全てのメッセージをその宛先にいつ受けたか判定し、また発信元プロセッサ・コアへの応答割込みの送信をいつ開始すべきか決定する。
【００５８】
宛先コアが１個の場合は応答割込みは手動でよい。すなわち、自動応答モードは無効である。この場合、応答のメッセージを更新する可能性がある。手動割込みでは、宛先コアが送信レジスタのビット０をクリアしてメッセージ通知割込みをクリアしまた送信レジスタのビット１をセットして応答割込みを（手動で）開始すると、応答割込みが生成される。
【００５９】
自動リンク・モードが可能になると、メッセージ処理モジュールのリンクされた部分集合はこれらのメッセージ処理モジュール内に記憶されているメッセージをその宛先に順次送るように定義される。シーケンス内の次のメッセージは前のメッセージをその宛先コアが受けてはじめて送られる。シーケンス内の最後のメッセージをその宛先が受けてはじめて発信元プロセッサ・コアに応答が送られる。モード・レジスタ内のビット１をセットして自動リンク・モードが可能になった場合は、対応するメッセージ処理モジュール内に記憶されているメッセージに関する宛先コアがそのメッセージ通知割込みをクリアすると発信元コアへの応答割込みは抑制され、代わりに、この割込みのクリアにより次のメッセージ処理モジュールからのシーケンス内の次のメッセージの送信を開始する。自動リンクが可能になり且つ自動応答が無効になると（後で説明するように）、宛先コアは通常のように送信レジスタのビット０をクリアしビット１をセットするが、発信元コアへの応答割込みはマスクされて次のメッセージ処理モジュール内の送信ビット０がセットされることに注意していただきたい。したがって、リンクされた部分集合内の最後のメッセージ処理モジュールの自動リンク・モードは可能にならないので、最後のメッセージをその宛先が受けたときは応答割込みは抑制されない。システムの実現と試験とを容易にするために、メッセージ処理モジュールをリンクする順序を固定すると便利である。好ましい実施の形態では、モジュール０はモジュール１にリンクし、モジュール１はモジュール２にリンクするというようにして、メッセージ処理モジュール３１までリンクする。メッセージは該当するモジュール内にプログラムされるので、望ましいシーケンスが得られる。
【００６０】
自動リンク・モードでは、送信するコアは多数のメッセージ処理モジュールを自分自身に割り当て、リンクされた部分集合内の最後を除く全てのモジュールの自動リンク・ビットをセットして各モジュールを全てリンクし、その部分集合の全てのモジュール内にメッセージをプレロードしてよい。第１のメッセージが送られても、全てのメッセージが送られるまでは応答は出されない。これらのメッセージの宛先に制約はない。１つのメッセージ送信シーケンスでは、自動リンク・モードと自動応答モードとを共に可能にすることができる。
自動リンク・モードが無効のときに応答割込みが送られると発信元コアに割込みがかかるが、これは任意の他のメッセージ処理モジュールに影響を与えない。
【００６１】
自動リンク・モードでは、メッセージ記憶モジュールの送信レジスタはメッセージ受信表示器として働く。なぜなら、メッセージ通知割込みをクリアすることにより、送信レジスタは宛先プロセッサ・コアにより変更されてメッセージを受けたことを示すからである。メッセージ処理モジュールがリンクされた場合は、メッセージ記憶モジュールのモード・レジスタの自動リンク・モード・ビットは送信レジスタと共にトランザクション完了検出器として働く。リンクされた部分集合内の最後メッセージ処理モジュールは自動リンク・モードにセットされないので、シーケンスの最後のメッセージを受けると、発信元プロセッサ・コアへの応答割込みの送信が開始される。
【００６２】
図３の３２個のメッセージ記憶リポジトリは、それぞれ最大３２の割込み（各チャンネルＩＤ毎に１つ）を生成することができる。割込みの数は、発信元レジスタと宛先レジスタとマスク・レジスタ内のビット数を定義する。例えば、図３のメッセージ処理モジュールを構成要素とするメッセージ・ハンドラは３２個の割込み出力を有する。メッセージ記憶リポジトリ０はＩＰＣＭＭＩＳ０-３１バスのビット０を生成し、メッセージ記憶リポジトリ３１はＩＰＣＭＭＩＳ０-３１バスのビット３１を生成する。多重メッセージ記憶リポジトリを図３に示すＯＲ論理ゲート３６２，３６４を介してグループ化して、３２ビットのメッセージ・ハンドラ割込みバスＩＰＣＭＩＮＴ［３１：０］を形成する。１個のチャンネルＩＤに関係する各メッセージ記憶リポジトリからの全ての割込みビットをグループ化して、マスクされた割込み状態バス（ＩＰＣＭＭＩＳ０［３１：０］からＩＰＣＭＭＩＳ３１［３１：０］）を形成する。次にＯＲ論理ゲート３６２，３６４を介してこれらのバス内のビットの論理和をとり、メッセージ処理割込みバスを形成する。
【００６３】
図４は、メッセージ・ハンドラ１３０と、メッセージ処理モジュール１３２-１から１３２−ｎの制御レジスタとの基本的動作の概要を示す流れ図である。ステージ４１０で、発信元コア（コア０）は発信元レジスタ３１０内の第０ビットをセットすることによりメッセージを生成して浮動メッセージ記憶リポジトリの所有権を主張する。ステージ４２０で、発信元コアは宛先レジスタ内の第１ビットをセットしてコア１を宛先ビットと定義し、また割込みを可能にする。ステージ４３０で、発信元コアはメッセージをデータ・レジスタ３５０内にプログラムする。発信元コアは送信レジスタ３４０に０１と書き込むことにより、メッセージを宛先コアに送る。これはコア１への割込みを表明して、関係するメッセージがリポジトリ内に書き込まれていることを宛先コアに通知する。
【００６４】
次にステージ４４０で、宛先コア１は割込みを受け、マスクされた割込み状態レジスタを読み取って、どのメッセージ処理モジュールがメッセージを含むか判定する。ステージ４５０で、宛先コアは識別されたメッセージ処理モジュールからメッセージを読み取り、割込みをクリアし、送信レジスタに１０と書き込んで応答割込みを表明し、発信元コアへのメッセージの送信をトリガする。最後にステージ４６０で、発信元コアは応答メッセージの割込みを受けて、メッセージ通過動作を完了する。最終ステージ４６０でメッセージの交換が完了した後、発信元コアはメッセージ記憶の所有権（すなわち、書込み制御）を保持して他のメッセージの送信を可能にしてもよいし、またはメッセージ記憶リポジトリを解放してシステム内の他のコアに使わせてもよい。
【００６５】
図５は、２個のプロセッサ・コア０（発信元コア）とコア１（宛先コア）との間のメッセージ送信シーケンスの略図である。このメッセージ送信シーケンスが関係するデータ処理装置内には４個のメッセージ処理モジュールがある。発信元コア０はチャンネルＩＤ１を用い、宛先コア１はチャンネルＩＤ２を用いる。次の事象のシーケンスが発生する。
【００６６】
図５のメッセージ送信シーケンスでは、次の事象の時間シーケンスが発生する。
ステージ１で、コア０は「発信元０」レジスタ内のビット０をセットすることによりメッセージ処理モジュール０の制御を取得し、自分自身を発信元コアと識別する。ステージ２で、コア０はマスク・レジスタ３３０内のビット０と１とをセットすることによりコア０とコア１への割込みを可能にする。ステージ３で、コア０は宛先レジスタ３２０内のビット１をセットすることにより宛先コアを定義する。ステージ４で、コア０はデータ・ペイロードＤＡ７Ａ００００をプログラムする。ステージ５で、コア０は「送信０」ビット０をセットしてコア１へのメッセージ処理モジュール０の割込みをトリガする。ステージ６で、コア１は「状態１」の位置を読み取り、どのメッセージ処理モジュールが割込みを発生させたか判定する。この場合、メッセージ処理モジュール０だけが示される。ステージ７で、コア１はデータ・ペイロードを読み取る。ステージ８で、オプションであるがコア１はデータ・ペイロードを応答データＤＡ７Ａ１１１１で更新する。ステージ９で、コア１は送信レジスタ３４０内のビット０をクリアしビット１をセットしてその割込みをクリアし、コア０に手動の応答割込みを返す。ステージ１０で、コア０は「状態０」を読み取り、どのメッセージ処理モジュールが割込みを発生させたか判定する。この場合も、メッセージ処理モジュール０だけが示される。ステージ１１で、コア０は応答ペイロード・データを読み取る。ステージ１２で、コア０は送信レジスタ内のビット１をクリアしてその割込みをクリアする。ステージ１３で、コア０は「発信元０」をクリアすることによりメッセージ処理モジュールの所有権を解放し、更にレジスタ位置「宛先０」、「マスク０」、「データ０」をクリアする。ステージ１３で「発信元０」レジスタをクリアせず、コア０はメッセージ処理モジュールを保持して別のデータ・メッセージを送ってよいことに注意していただきたい。
【００６７】
図６は、２つの連続するメッセージをコア０からコア１に送るメッセージ送信タイミング・シーケンスの略図である。図３のメッセージ・シーケンスと同様に、２個のコアと４個のメッセージ処理モジュールがある。コア０は発信元コアであり、コア１は宛先コアである。コア０はチャンネルＩＤ１を用い、コア１はチャンネルＩＤ２を用いる。コア０は或るメッセージをコア１に送って応答を得、また別のメッセージをコア１に送ってこれも応答を得る。
【００６８】
図６のメッセージ送信タイミング・シーケンスでは、次の事象のシーケンスが発生する。
ステージ０で、コア０は「発信元０」レジスタ内のビット０をセットすることによりメッセージ処理モジュール０の制御を取得し、自分自身を発信元コアと識別する。ステージ２で、コア０はマスク・レジスタ３３０内のビット０と１とをセットすることによりコア０とコア１への割込みを可能にする。ステージ３で、コア０は宛先レジスタ３２０内のビット１をセットすることにより宛先コアを定義する。ステージ４で、コア０はデータ・ペイロードＤＡ７Ａ００００をプログラムする。ステージ５で、コア０は送信レジスタ３４０のビット０をセットして割込みを宛先コアに送る。ステージ６で、コア１は「状態１」を読み取りまたデータ・ペイロードを読み取る。ステージ７で、オプションであるがコア１はデータ・ペイロードを応答ＤＡ７Ａ１１１１で更新する。ステージ８で、コア１は送信レジスタ３４０内のビット０をクリアしビット１をセットしてコア０に手動応答を与える。ステージ９で、コア０は「状態０」を読み取りまたデータ・ペイロードを読み取る。ステージ１０で、コア０はデータ・ペイロードを次のメッセージＤＡ７Ａ２２２２でプログラムする。ステージ１１で、コア０は送信レジスタのビット１をクリアしビット０をセットして割込みを宛先コアに送る。ステージ１２で、コア１は「状態１」を読み取りまたデータ・ペイロードを読み取る。ステージ１３で、オプションであるがコア１はデータ・ペイロードを応答ＤＡ７Ａ３３３３で更新する。ステージ１４で、コア１は送信レジスタ３４０内のビット０をクリアしビット１をセットしてコア０に手動応答を返す。ステージ１５で、コア０は「状態０」を読み取りまたデータ・ペイロードを読み取る。最後にステージ１６で、コア０は「発信元０」をクリアすることにより割込みをクリアしまたメッセージ処理モジュールの所有権を解放し、更にレジスタ「宛先０」、「マスク０」、「送信０」、「データ０」をクリアする。
【００６９】
図７は、１個の発信元コアから３個の宛先コアにメッセージを伝達するメッセージ送信タイミング・シーケンスの略図である。この場合、全ての宛先コアがメッセージを受けると自動応答が生成される。
【００７０】
この例示のシステムでは、コア０は発信元プロセッサ・コアであり、コア１，２，３は宛先プロセッサ・コアである。４個のコアは関連するメッセージ処理モジュールをそれぞれ有する。
・  コア０はチャンネルＩＤ１を用いる。
・  コア１はチャンネルＩＤ２を用いる。
・  コア２はチャンネルＩＤ４を用いる。
・  コア３はチャンネルＩＤ８を用いる。
このメッセージ伝達では自動リンク・モードは無効である。
【００７１】
以下の伝達のタイミング・シーケンスが発生する。
ステージ１で、コア０は「発信元０」レジスタ内のビット０をセットすることによりメッセージ処理モジュール０の制御を取得し、自分自身を発信元プロセッサ・コアと識別する。ステージ２で、コア０は「モード」ビット０をセットしてメッセージ処理モジュールを自動応答モードにする。ステージ３で、コア０はマスク・レジスタ内のビット０，１，２，３をセットすることによりコア０,コア１,コア２,コア３への割込みを可能にする。ステージ４で、コア０は宛先レジスタ内のビット１，２，３をセットすることにより宛先コアを定義する。ステージ５で、コア０はデータ・ペイロードＤＡ７Ａ００００をプログラムする。
【００７２】
次にステージ６で、コア０はその送信レジスタのビット０をセットして宛先コアに割込みを送る。ステージ７で、コア１は「状態１」を読み取りまたデータ・ペイロードを読み取る。ステージ８で、コア１は宛先レジスタ内のビット１をクリアする。ステージ９で、コア３は「状態３」を読み取りまたデータ・ペイロードを読み取る。ステージ１０で、コア３は宛先レジスタ内のビット３をクリアする。ステージ１１で、コア２は「状態２」を読み取りまたデータ・ペイロードを読み取る。ステージ１２で、３個のコアの中で最後にメッセージを受けるコア２は宛先レジスタ内のビット２をクリアする。このようにコア２が最終の宛先ビットをクリアすると、コア０に関連するメッセージ処理モジュールは自動的にこれを検出し、送信ビット０をクリアし送信ビット１をセットして、自動応答を発信元プロセッサ・コア（コア０）に送り返す。自動応答モードではデータ・レジスタは更新されないことに注意すべきである。
【００７３】
ステージ１３で、発信元プロセッサ・コア（コア０）は「状態０」を読み取りまたデータ・ペイロードを読み取る。この例のシーケンスの最終ステージであるステージ１４で、「発信元０」レジスタをクリアすることによりコア０は割込みをクリアしまたメッセージ処理モジュールの所有権を解放し、更にレジスタ「送信０」と「データ０」とをクリアする。しかし別のメッセージ送信シーケンスで、ステップ１４でコア０が送るべき別のメッセージを有する場合は、発信元レジスタをセットしたままにしてメッセージ処理モジュールの所有権を保持し、宛先レジスタ、モード・レジスタ、「マスク０」レジスタを更新し、データ・レジスタに新しいメッセージをロードしてよい。
【００７４】
図８は、発信元コアから１個の宛先コアに、リンクされたメッセージのシーケンスを送るメッセージ送信タイミング・シーケンスの略図である。この例示のシステムでは４個のメッセージ処理モジュールがあるが、モジュール０と１だけが活動状態であり、メッセージ処理モジュール３と４は非活動状態である。自動リンクの機能を明確に説明するために、この例では自動リンク・メッセージ送信モードは可能であるが自動応答モードは無効である。したがって、オプションであるがシーケンス内の最後のメッセージを受ける宛先コアは応答割込みを発信元プロセッサ・コアに送ってよい。応答は手動である。その意味は、宛先コアは発信元コアに関連するメッセージ処理モジュールの送信レジスタの割込みをクリア（送信レジスタのビット０をクリア）した後でそのビット１を活動状態にセットして、その関連するメッセージ処理モジュールから発信元コアへの割込みの返送を開始するということである。対照的に自動応答モードが可能のときは、最終宛先ビットがクリアされたことを宛先レジスタを介して検出すると、メッセージ・ハンドラ（宛先コアではない）は送信レジスタのビット１を自動的にセットする。
【００７５】
この例示のシステムでは、コア０は発信元プロセッサ・コアでありコア１は宛先プロセッサ・コアである。コア０はチャンネルＩＤ１を用いコア１はチャンネルＩＤ２を用いる。コア０はまず自動リンク・モードのメールボックス０と１とを設定する。これは２個のメッセージ処理モジュールのそれぞれにメッセージを記憶することを含む。次にコア０は第１のメッセージを、続いて第２のメッセージをコア１に送る。コア１は各メッセージ通知割込みに別々に応じて、両方に応答する。コア０は、コア１が最終メッセージを終了したときにはじめて応答割込みを得る。
【００７６】
図８のタイミング・シーケンスを参照すると次のシーケンスが発生する。ステージ１で、コア０はメッセージ処理モジュール０の制御を取得して「発信元０」［０］をセットする。ステージ２で、コア０はメッセージ処理モジュール１の制御を取得して「発信元１」［０］をセットする。ステージ３で、コア０は「モード０」［１］をセットしてメッセージ処理モジュール０をメッセージ処理モジュール１にリンクする。メッセージ処理モジュールのモード・レジスタは自動リンク・モードにセットされない。なぜなら、これはリンクされた部分集合の最後のメッセージ処理モジュールなので、この最後のメッセージ処理モジュールがメッセージを受けると応答割込みを生成しなければならないからである。ステージ４で、コア０は「マスク０」レジスタ内のビット０と１とをセットすることによりコア０とコア１への割込みを可能にする。
【００７７】
ステージ５で、コア０は「宛先０」［１］をセットしてメッセージ処理モジュール０の宛先コアを定義する。ステージ６で、コア０は「データ０」をＤＡ７Ａ００００にセットしてメッセージ処理モジュール０のデータ・ペイロードをプログラムする。ステージ７で、コア０は「マスク１」レジスタ内のビット０と１とをセットしてコア０とコア１への割込みを可能にする。ステージ８で、コア０は「宛先１」［１］をセットしてメッセージ処理モジュール０の宛先コアを定義する。ステージ９で、コア０は「データ１」をＤＡ７Ａ１１１１にセットしてメッセージ処理モジュール１のデータ・ペイロードをプログラムする。
【００７８】
ステージ１０で、コア０は「送信０」［０］をセットして、メッセージ処理モジュール０内のメッセージの宛先コア（コア１）への送信を開始する。ステージ１１で、コア１はメッセージ通知割込みに応じて「状態１」を読み取り、またメッセージ処理モジュール０内のデータ・ペイロードを読み取る。ステージ１２で、コア１は「送信０」レジスタ内のビット０をクリアしビット１をセットして、手動応答をコア０に送り返す。シーケンス内のこの第１のメッセージの手動応答の影響はメッセージ処理モジュール１内のメッセージの送信を開始することである。このステージでコア０に送られる応答割込みはないことに注意すべきである。
【００７９】
次にステージ１３で、送信レジスタ内のビット０をクリアしビット１をセットしたことに応じて、コア１は「状態１」を読み取り、またメッセージ処理モジュール１内のデータ・ペイロードを読み取る。ステージ１４で、コア１は「送信１」レジスタ内のビット０をクリアしビット１をセットして、手動応答をコア０に送り返す。これはシーケンス内の２つのメッセージの最後のものなので、送信レジスタ内のビット０をクリアしビット１をセットすると、発信元プロセッサ・コア（コア０）への応答割込みの送信をトリガする。ステージ１５で、コア０は「状態０」を読み取る。ステージ１６で、コア０は「送信０」レジスタのビット１をクリアして、メッセージ処理モジュール０からの割込みをクリアする。ステージ１７で、コア０は「状態１」を読み取る。最後にステージ１８で、コア０は「送信１」レジスタのビット１をクリアして、メッセージ処理モジュール１からの応答割込みをクリアする。
【００８０】
図９は、メッセージ処理モジュールの部分集合の自動リンクの概要を示す流れ図である。この流れ図に関係する例示のデータ処理システムは、発信元プロセッサ・コア（コア０）と２個の宛先プロセッサ・コア（コア１およびコア２）とを有する。コア０は、送るべき２つの異なるメッセージ（コア１宛てのメッセージ１とコア２宛てのメッセージ２）を有する。このシステムでは、コア１がメッセージ１を処理し終わるまでは、コア２はメッセージ２の処理を開始することができないという制約がある。この制約は共に発信元プロセッサ・コアに関連する２個のメッセージ処理モジュールを備える部分集合を自動リンクすることにより実現される。
【００８１】
ステージ９１０で、コア０はメッセージ処理モジュール０とメッセージ処理モジュール１のそれぞれの発信元レジスタ内のビット０をセットすることにより、この２個のモジュールの所有権を得る。ステージ９２０で、コア０はモジュール０に第１のメッセージをプレロードし、モジュール１に第２のメッセージをプレロードする。次にステージ９３０で、コア０はモジュール０とモジュール１の宛先レジスタを適当にセットして、コア１とコア２をそれぞれ指定する。ステージ９４０で、コア０はメッセージ処理モジュール０の送信レジスタのビット０をセットして第１のメッセージのコア１への送信を開始する。ステージ９５０で、コア１はメッセージ通知割込みを受け、その割込み線に関係するマスクされた割込み状態レジスタを読み取り、割込みをトリガしたモジュールはモジュール０であると識別し、次にモジュール０の送信レジスタのビット０をクリアして割込みをクリアする。次にステージ９６０で、メッセージ処理モジュール０はモジュール１をトリガして、コア２へのメッセージ２の送信を開始する。次のメッセージのトリガは、モジュール０の送信レジスタ内のビット０をクリアしビット１をセットすることにより行う。したがって、送信レジスタのビット１をセットするとリンクされた部分集合内の次のモジュール（モジュール１）内の送信ビット０がセットされるので、発信元コアには応答割込みが送り返されるのではなく、シーケンス内の次のメッセージが送られる。ステージ９７０で、コア２はメッセージ通知割込みを受け、その割込み線に関係するマスクされた割込み状態レジスタを読み取り、割込みをトリガしたモジュールはモジュール１であると識別し、次にモジュール１の送信レジスタのビット０をクリアして割込みをクリアする。モジュール１はメッセージ処理モジュールのリンクされた部分集合内の最後のモジュールなので、モード・レジスタのビット１はセットされず、したがってこのモジュールの自動リンクは可能でない。したがって、コア２がメッセージ処理モジュール１のビット０をクリアしビット１をセットすると、応答割込みが発信元コア（コア０）に送り返されて、メッセージ・シーケンスの伝達は完了する。
【００８２】
本発明の例示の実施の形態について添付の図面を参照して詳細に説明したが、理解されるように、本発明はかかる実施の形態そのものに限定されるものではなく、クレームにより定義された本発明の範囲と精神から逸れることなく当業者は種々の変更や修正を加えることができるものである。
【図面の簡単な説明】
【００８３】
【図１】Ａは２個のプロセッサ・コアと１個のメッセージ・ハンドラとを備えるデータ処理装置を示す略図である。Ｂは２個の状態レジスタを用いてメッセージ処理モジュール状態をコアに与える方法を示す。
【図２】図１Ａのメッセージ・ハンドラ内に含まれる機能的構成要素を示す略図である。
【図３】メッセージ処理モジュール割込み信号をメッセージ・ハンドラ割込み出力にマップする方法を示す略図である。
【図４】メッセージ・ハンドラとメッセージ処理モジュールの制御レジスタの基本的動作の概要を示す流れ図である。
【図５】発信元コアと宛先コアとの間のメッセージ送信シーケンスを示す略図である。
【図６】２つの連続的なメッセージを発信元コアから宛先コアに送るメッセージ送信タイミング・シーケンスを示す略図である。
【図７】発信元コアから３個の宛先コアにメッセージが伝達され、全ての宛先コアがメッセージを受けたときに自動応答が生成されるメッセージ送信タイミング・シーケンスを示す略図である。
【図８】リンクされたメッセージのシーケンスを発信元コアから１個の宛先コアに送るためのメッセージ送信タイミング・シーケンスを示す略図である。
【図９】メッセージ記憶モジュールの部分集合の自動リンクの概要を示す流れ図である。
【符号の説明】
【００８４】
１１０  発信元プロセッサ・コア
１２０  宛先プロセッサ・コア
１３０  メッセージ・ハンドラ
１３２  メッセージ処理モジュール
１５０  バス構成
【図１】
2005182754.tif 000005
【図２】
2005182754.tif 000006
【図３】
2005182754.tif 000007
【図４】
2005182754.tif 000008
【図５】
2005182754.tif 000009
【図６】
2005182754.tif 000010
【図７】
2005182754.tif 000011
【図８】
2005182754.tif 000012
【図９】
2005182754.tif 000013