(57)【特許請求の範囲】
【請求項１】
メモリに格納された情報に対する処理の要求を、処理の対象となるデータをキャッシュメモリに保持する単位となるアドレス範囲ごとに記憶可能な複数の記憶部と、
第一の装置から受信した要求を解析し、要求された処理の対象となるデータが格納されたメモリアドレスを内包する前記アドレス範囲を特定する特定部と、
前記受信した要求を前記特定部によって特定されたアドレス範囲に対応する記憶部に格納する格納部と、
前記格納部によって記憶部に格納された要求が第二の装置によって実行されているか否かを記憶部ごとに判別する判別部と、
前記判別部によって要求が実行されていないと判別された記憶部に格納されている要求を前記第二の装置へ送信する送信部と、
を有することを特徴とする転送装置。 
【請求項２】
メモリに格納された情報に対する処理の要求のうち、実行順序を守る必要のある要求を記憶する順序制御記憶部と、
前記要求のうち、実行順序を守る必要のない要求を、処理を実行する単位となる所定の大きさで区切られたアドレス範囲ごとに記憶する複数の非順序制御記憶部と、
第一の装置から受信した要求を解析し、当該要求の実行順制御が必要な要求か否かを判別する順序制御判定部と、
前記要求を第一の装置から受信した場合には、当該要求を解析し、当該要求された処理の対象となるデータが格納されたメモリアドレスを内包する前記アドレス範囲を特定する特定部と、
前記順序制御判定部によって前記実行順制御が必要な要求であると判別された場合には、当該要求を前記順序制御記憶部に格納し、前記順序制御判定部によって前記実行順制御が不要な要求であると判別された場合には、前記特定部によって特定されたアドレス範囲ごとに異なる前記非順序制御記憶部に当該要求を格納する格納部と、
前記格納部によって格納された要求が該要求を実行する第二の装置によって実行されているか否かを非順序制御記憶部ごとに判別する判別部と、
前記判別部によって前記要求が実行されていないと判別された非順序制御記憶部に格納された要求を前記第二の装置へ送信する送信部と、
を有することを特徴とする転送装置。 
【請求項３】
前記判別部は、さらに、前記順序制御記憶部に格納された要求のうち最も先に格納された要求について、当該要求によって処理の対象となるデータが格納されたメモリアドレスを内包する前記アドレス範囲を特定し、当該特定したアドレス範囲に含まれたメモリアドレスに格納されたデータを処理の対象とする他の要求が前記第二の装置によって実行されているか否かを判別し、
前記送信部は、さらに、前記判別部によって、前記特定したアドレス範囲に含まれたメモリアドレスに格納されたデータを処理の対象とする他の要求が前記第二の装置によって実行されていないと判別された場合には、前記順序制御記憶部に格納された要求のうち最も先に格納された要求を前記第二の装置へ送信することを特徴とする請求項２に記載の転送装置。 
【請求項４】
前記転送装置は、
前記順序制御記憶部に格納された要求を受信した順番と各非順序制御記憶部に格納された要求を受信した順番との関係、及び、前記順序制御記憶部に格納された要求によって処理の対象となるデータが格納されたメモリアドレスを内包した前記アドレス範囲と各非順序制御記憶部に格納された要求によって処理の対象となるデータが格納されたメモリアドレスを内包したアドレス範囲との関係を示すスコアボード情報を作成する作成部をさらに有し、
前記判別部は、前記作成部によって作成されたスコアボード情報に基づいて、前記順序制御記憶部に格納された要求のうち最も先に格納された要求について、当該要求と同一のアドレス範囲に内包されたメモリアドレスを処理の対象とし、かつ、当該要求よりも先に受信された要求がいずれかの非順序制御記憶部に格納されているか否かを判別し、当該要件を満たす非順序制御記憶部があると判別した場合には、該非順序制御記憶部に格納された要求が前記第二の装置によって実行されているか否かを判別することを特徴とする請求項３に記載の転送装置。 
【請求項５】
前記転送装置は、
前記第二の装置へ送信した要求に対する応答を前記第二の装置から受信する応答受信部をさらに有し、
前記送信部は、前記応答受信部によって応答が受信された場合には、新たな要求を前記第二の装置へ送信することを特徴とする請求項２〜４のいずれか一つに記載の転送装置。
【請求項６】
前記複数の非順序制御記憶部は、前記要求のうち、実行順序を守る必要のない要求を、処理の対象となるデータをキャッシュメモリに保持する単位となるアドレス範囲ごとに記憶することを特徴とする請求項２〜５のいずれか１つに記載の転送装置。
【請求項７】
メモリに格納された情報に対する処理の要求のうち、実行順序が保持される要求を記憶する順序制御記憶装置と、前記要求のうち、実行順制御が不要な要求を記憶する複数の非順序制御記憶装置とを有する転送装置によって実行される転送方法であって、
第一の装置から受信した要求を解析し、当該要求の実行順制御が必要な要求か否かを判別する順序制御判定ステップと、
前記第一の装置から受信した要求を解析し、処理を実行する単位となる所定の大きさで区切られたアドレス範囲であって、当該要求された処理の対象となるデータが格納されたメモリアドレスを内包するアドレス範囲を特定する特定ステップと、
前記順序制御判定ステップによって前記実行順制御が必要な要求であると判別された場合には、当該要求を前記順序制御記憶装置に格納し、前記順序制御判定ステップによって前記実行順制御が不要な要求であると判別された場合には、前記特定ステップによって特定されたアドレス範囲ごとに異なる前記非順序制御記憶装置に当該要求を格納する格納ステップと、
前記格納ステップによって格納された要求が該要求を実行する第二の装置によって実行されているか否かを非順序制御記憶装置ごとに判別する判別ステップと、
前記判別ステップによって前記要求が実行されていないと判別された非順序制御記憶装置に格納された要求を前記第二の装置へ送信する送信ステップと、
を含むことを特徴とする転送方法。 
【請求項８】
メモリに格納された情報に対する処理の要求のうち、実行順序が保持される要求を記憶する順序制御記憶装置と、前記要求のうち、実行順制御が不要な要求を記憶する複数の非順序制御記憶装置とを有する転送装置によって実行される転送プログラムであって、
第一の装置から受信した要求を解析し、当該要求の実行順制御が必要な要求か否かを判別する順序制御判定手順と、
前記第一の装置から受信した要求を解析し、処理を実行する単位となる所定の大きさで区切られたアドレス範囲であって、当該要求された処理の対象となるデータが格納されたメモリアドレスを内包するアドレス範囲を特定する特定手順と、
前記順序制御判定手順によって前記実行順制御が必要な要求であると判別された場合には、当該要求を前記順序制御記憶装置に格納し、前記順序制御判定手順によって前記実行順制御が不要な要求であると判別された場合には、前記特定手順によって特定されたアドレス範囲ごとに異なる前記非順序制御記憶装置に当該要求を格納する格納手順と、
前記格納手順によって格納された要求が該要求を実行する第二の装置によって実行されているか否かを非順序制御記憶装置ごとに判別する判別手順と、
前記判別手順によって前記要求が実行されていないと判別された非順序制御記憶装置に格納された要求を前記第二の装置へ送信する送信手順と、
を実行させることを特徴とする転送プログラム。 
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、転送装置、転送方法および転送プログラムに関する。
【背景技術】
【０００２】
従来、メモリに記憶された情報に対する処理の要求を転送する順序を制御することで、処理を実行する順序を制御する技術が知られている。このような転送装置の一例として、Ｉ／Ｏ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ）装置から受信した処理の要求を一時的に記憶し、処理を実行するシステムコントローラに対して、記憶した要求を送信するブリッジ装置が知られている。
【０００３】
図２１は、従来のブリッジ装置を説明するための図である。図２１に示す例では、ブリッジ装置は、処理の対象となるメモリのアドレスと情報に対する処理の内容とを示す要求をＩ／Ｏ装置から受信する。そして、ブリッジ装置は、複数の要求を並列処理するシステムコントローラに対して、Ｉ／Ｏ装置から受信した要求を送信する。
【０００４】
ここで、システムコントローラは、処理を効率的に実行するため、メモリに格納された情報の一部を、所定のキャッシュライン単位で自装置にキャッシュする。また、システムコントローラは、自装置にキャッシュされた情報がメモリに格納された情報のうち、どのアドレスに格納された情報であるかを示すＴＡＧメモリを有する。
【０００５】
そして、システムコントローラは、要求を受信した場合には、受信した要求が示すメモリのアドレスを用いて、ＴＡＧメモリを検索するスヌープを実行する。その後、システムコントローラは、スヌープの実行結果に応じて、要求が示す処理の内容を実行するとともに、実行した処理に合わせて、自装置のキャッシュとＴＡＧメモリの内容とを更新する。
【０００６】
一方、Ｉ／Ｏ装置は、発行順序通りに実行される要求（ＮＩＲ：Ｎｏｎ−Ｉｎｔｅｒｌｅａｖｅｄ−Ｒｅｑｕｅｓｔ）と、発行順序とは無関係に実行される要求（ＩＲ：Ｉｎｔｅｒｌｅａｖｅｄ−Ｒｅｑｕｅｓｔ）とを発行する。このため、ブリッジ装置は、自装置に記憶された要求にＮＩＲが含まれる場合には、ＮＩＲの順序関係を保持しつつ要求を送信する。
【０００７】
図２２は、従来のブリッジ装置が有する記憶領域を説明するための図である。例えば、ブリッジ装置は、図２２に示す例では、個々の要求を格納する複数の記憶領域であるＱ＃０〜＃（Ｎ−１）を有する。また、各記憶領域Ｑ＃０〜＃（Ｎ−１）は、ブリッジ装置が要求を受信した順序を示すエントリー間関係情報と、格納された要求がＮＩＲであるか否かを示すエントリー状態フラグとを有する。
【０００８】
このようなブリッジ装置は、Ｉ／Ｏ装置から要求を受信した場合には、受信した要求を解析し、受信した要求がＮＩＲであるか否かを判別する。そして、ブリッジ装置は、受信した要求がＮＩＲであると判別した場合には、受信した要求をいずれかの記憶領域に格納し、格納した要求がＮＩＲであることを示すエントリー状態フラグを設定する。また、ブリッジ装置は、要求を格納した記憶領域に、要求を受信した順序をエントリー間関係情報として記憶する。
【０００９】
その後、ブリッジ装置は、各記憶領域のエントリー状態フラグとエントリー間関係情報とに基づいて、一番初めに受信したＮＩＲをシステムコントローラへ送信する。また、ブリッジ装置は、送信したＮＩＲの実行結果を応答としてシステムコントローラから受信した場合には、送信したＮＩＲの次に受信したＮＩＲをシステムコントローラへ送信する。また、ブリッジ装置は、ＩＲをＩ／Ｏから受信した場合には、システムコントローラからの応答を待たずに、ＩＲをシステムコントローラへ送信する。
【００１０】
図２３は、ブリッジ装置が実行する処理の流れを説明するための図である。図２３に示す例では、ブリッジ装置は、Ｉ／Ｏ装置からＮＩＲ＃ａ−０とＩＲ＃ｂ−０とを受信する（図２３中（１）、（２））。このような場合には、ブリッジ装置は、ＮＩＲ＃ａ−０をシステムコントローラへ送信するとともに、ＮＩＲ＃ａ−０の応答を待たずにＩＲ＃ｂ−０をシステムコントローラへ送信する（図２３中（３）〜（６））。
【００１１】
このような場合には、システムコントローラは、受信したＮＩＲ＃ａ−０とＩＲ＃ｂ−０とを並列に実行する（図２３中（７）、（８））。その後、システムコントローラは、ＮＩＲ＃ａ−０とＩＲ＃ｂ−０との実行結果を応答としてブリッジ装置へ送信する（図２３中（９）、（１０））。
【００１２】
つまり、ブリッジ装置は、図２４に示すように、ＮＩＲ＃ａ−０に対する応答を受信せずとも、ＩＲ＃ｂ−０の要求をシステムコントローラへ送信する。なお、図２４は、ブリッジ装置が実行する処理の流れを説明するためのタイムチャートであり、左から右の方向へ時間が経過するものとする。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】国際公開第２００７／０９７０１７号
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかしながら、上述したＮＩＲに対する応答を待たずにＩＲを送信する技術では、各要求が示すメモリのアドレスとは無関係に要求を送信するので、メモリに格納された情報に対する処理を効率的に実行させることができないという問題があった。以下、図２５〜図２７を用いて説明する。
【００１５】
図２５は、システムコントローラの処理性能の低下を説明するための図（１）である。図２５に示す例では、システムコントローラは、ブリッジ装置から要求＃１〜＃４を受信する。しかし、システムコントローラは、要求＃１〜＃４が示すアドレスが同一のキャッシュラインアドレスに含まれる場合には、キャッシュの整合性を保持するため、要求＃１〜＃４のスヌープを同時に行わず、要求＃１のスヌープのみを実行する。
【００１６】
そして、システムコントローラは、要求＃１が示す処理の内容を実行し、実行した処理に合わせてキャッシュとＴＡＧメモリとの更新が終了するまでは、要求＃２〜＃４のスヌープを拒否する。つまり、システムコントローラは、同一のキャッシュラインアドレスに含まれるアドレスを示す要求を複数受信した場合には、キャッシュの整合性を保持するため、後続の要求を滞留させる結果、効率的な処理を実行することができない。
【００１７】
図２６は、システムコントローラの処理性能の低下を説明するための図（２）である。図２６に示す例では、ブリッジ装置は、同一のキャッシュラインアドレスに含まれるアドレスを示すＩＲ＃ａ−０、ＩＲ＃ａ−１を受信する（図２６中（１）、（２））。このような場合には、ブリッジ装置は、ＩＲ＃ａ−０とＩＲ＃ａ−１とをシステムコントローラへ送信する（図２６中（３）〜（５））。
【００１８】
しかし、システムコントローラは、ＩＲ＃ａ−０の処理が完了し、キャッシュとＴＡＧメモリとの更新が終了するまでは、ＩＲ＃ａ−１のスヌープを実行することができず、ＩＲ＃ａ−１を滞留させてしまう（図２６中（６）〜（９））。
【００１９】
このため、図２７のタイムチャートに示すように、ブリッジ装置は、ＩＲ＃ａ−０とＩＲ＃ａ−１とを同時にシステムコントローラへ送信した場合には、ＩＲ＃ａ−１の実行を滞留させ、システムコントローラの処理性能を低下させてしまう。
【００２０】
開示の技術は、一側面では、メモリに格納された情報に対する処理を効率的に実行させる。
【課題を解決するための手段】
【００２１】
開示の技術は、一側面では、メモリに格納された情報に対する処理の要求を、処理の対象となるデータをキャッシュメモリに保持する単位となるアドレス範囲ごとに記憶可能な複数の記憶部を有する転送装置である。また、転送装置は、第一の装置から受信した要求を解析し、要求された処理の対象となるデータが格納されたメモリアドレスを内包するアドレス範囲を特定する特定する。そして、転送装置は、受信した要求を特定したアドレス範囲に対応する記憶部に格納する。その後、転送装置は、各記憶部に格納した要求が第二の装置によって実行されているか否かを記憶部ごとに判別する。そして、転送装置は、要求が実行されていないと判別された記憶部に格納されている要求を第二の装置へ送信する。
【発明の効果】
【００２２】
一側面では、メモリに格納された情報に対する処理を効率的に実行させる。
【図面の簡単な説明】
【００２３】
【図１】図１は、実施例１に係る転送装置を説明するための図である。
【図２】図２は、実施例２に係るＩ／Ｏコントローラを説明するための図である。
【図３】図３は、実施例２に係るＲＯＵを説明するための図である。
【図４】図４は、ＩＲＱを説明するための図である。
【図５】図５は、キャッシュラインを説明するための図である。
【図６】図６は、ＮＩＲＱを説明するための図である。
【図７】図７は、要求の振分けを説明するための図である。
【図８】図８は、ｅｎｑｕｅｕｅ処理と送信処理との流れを説明するための図である。
【図９】図９は、実施例２に係るＩ／Ｏコントローラが要求のアドレス範囲に応じて要求を送信する処理を説明するための図である。
【図１０】図１０は、実施例２に係るＩ／Ｏコントローラの処理の流れを説明するためのタイムチャートである。
【図１１】図１１は、ｑｕｅｕｅを説明するための図である。
【図１２】図１２は、ｅｎｑｕｅｕｅ処理を説明するための図である。
【図１３】図１３は、要求の発行処理を説明するための図である。
【図１４】図１４は、ｄｅｑｕｅｕｅ処理を説明するための図である。
【図１５】図１５は、実施例２に係るＲＯＵの処理の流れを説明するためのフローチャートである。
【図１６】図１６は、フィラーが実行する処理の流れを説明するためのフローチャートである。
【図１７】図１７は、アービターが実行する処理の流れを説明するためのフローチャートである。
【図１８】図１８は、トランスミッタが実行する処理の流れを説明するためのフローチャートである。
【図１９】図１９は、レシーバが実行する処理の流れを説明するためのフローチャートである。
【図２０】図２０は、転送プログラムを実行するコンピュータの一例を説明するための図である。
【図２１】図２１は、従来のブリッジ装置を説明するための図である。
【図２２】図２２は、従来のブリッジ装置が有する記憶領域を説明するための図である。
【図２３】図２３は、ブリッジ装置が実行する処理の流れを説明するための図である。
【図２４】図２４は、ブリッジ装置が実行する処理の流れを説明するためのタイムチャートである。
【図２５】図２５は、システムコントローラの処理性能の低下を説明するための図（１）である。
【図２６】図２６は、システムコントローラの処理性能の低下を説明するための図（２）である。
【図２７】図２７は、従来のブリッジ装置の処理の流れを説明するためのタイムチャートである。
【発明を実施するための形態】
【００２４】
以下に添付図面を参照して本願に係る転送装置、転送方法および転送プログラムについて説明する。
【実施例１】
【００２５】
以下の実施例１では、図１を用いて、転送装置の一例を説明する。なお図１は、実施例１に係る転送装置を説明するための図である。
【００２６】
図１に示すように、転送装置１は、記憶部２、記憶部３、記憶部４を有する。なお、転送装置１は、図示した記憶部以外にも、記憶部を有するものとする。また、転送装置１は、特定部５、格納部６、判別部７、送信部８を有する。転送装置１は、第１の情報処理装置から受信した要求を、キャッシュメモリを有する第２の情報処理装置へ発行する。記憶部２〜４は、メモリに格納された情報に対する処理の要求を、処理を実行する単位となる所定の大きさで区切られたキャッシュラインアドレスごとに記憶する。特定部５は、要求を第一の情報処理装置から受信した場合には、受信した要求を解析し、第２の情報処理装置が有するキャッシュのうち、要求された処理の対象となるデータを格納するメモリアドレスを内包するキャッシュラインアドレスを特定する。
【００２７】
格納部６は、受信した要求を特定部５によって特定されたキャッシュラインアドレスごとに異なる記憶部２〜４に格納する。判別部７は、格納部６によって各記憶部２〜４に格納された要求が第二の情報処理装置によって実行されているか否かを判別する。送信部８は、判別部７によって記憶部に格納されたいずれの要求も第二の情報処理装置によって実行されていないと判別された記憶部（例えば、記憶部２）に格納された要求を第二の情報処理装置へ送信する。
【００２８】
このように、転送装置１は、メモリに格納された情報に対する処理の要求を受信した場合には、要求された処理の対象となるデータを格納するメモリアドレスを含んだキャッシュラインアドレスを特定する。そして、転送装置１は、特定したキャッシュラインアドレスごとに異なる記憶部へ要求を格納する。その後、転送装置１は、各記憶部２〜４に格納された要求が第二の情報処理装置によって実行されているか否かを判別する。そして、転送装置１は、第二の情報処理装置によって実行されていないと判別された要求のみが格納されている記憶部（例えば、記憶部２）に記憶されている要求を第二の情報処理装置へ送信する。一方、転送装置１は、格納された要求が第二の情報処理装置によって実行されていると判別された記憶部（例えば、記憶部３）からは、新たな要求を第二の情報処理装置へ送信しない。
【００２９】
つまり、転送装置１は、第二の情報処理装置に対して、互いに異なるキャッシュラインアドレスに含まれるアドレスを処理の対象とする要求のみを送信する。このため、転送装置は、第二の情報処理装置に効率的な処理を実行させることができる。
【００３０】
例えば、第二の情報処理装置は、同一のキャッシュラインアドレスに含まれるアドレスを処理の対象とする複数の要求を受信した場合には、キャッシュの整合性を保持するため、いずれか一つの要求を実行している間、後続の要求を滞留させてしまう。しかし、転送装置１は、処理対象を含むキャッシュラインアドレスごとに異なる記憶部へ要求を格納し、各記憶部に格納された要求が第二の情報処理装置によって実行されているか否かを判別する。
【００３１】
そして、転送装置１は、第二の情報処理装置によって実行されていないと判別された要求のみが格納されている記憶部に記憶されている要求を第二の情報処理装置へ送信する。つまり、転送装置１は、第二の情報処理装置が実行している要求とは異なるキャッシュラインアドレスを処理対象とする要求のみを送信する。このため、転送装置１は、第二の情報処理装置による要求の滞留を解消し、効率的な処理を第二の情報処理装置に実行させることができる。
【実施例２】
【００３２】
以下の実施例２では、転送装置の一例として、Ｉ／Ｏ（Input  Output）コントローラを説明する。
【００３３】
まず、図２を用いて、実施例２に係るＩ／Ｏコントローラを説明する。図２に示すように、Ｉ／Ｏコントローラ１０は、ＦＩＦＯ（First  In  First  Out）２０、ＲＯＵ（Request-Ordering-Unit）３０を有する。また、Ｉ／Ｏコントローラ１０は、メモリに格納された情報に対する処理の要求を発行するＩ／Ｏ装置４０と、要求が示す処理を実行するシステムコントローラ４１と接続される。また、システムコントローラ４１は、メモリ４２と接続される。
【００３４】
ここで、Ｉ／Ｏ装置４０とＩ／Ｏコントローラ１０とは、ＰＣＩ（Peripheral  Component  Interconnect）−Ｅｘｐｒｅｓｓのｂｕｓで接続されているものとする。また、Ｉ／Ｏ装置４０は、Ｉ／Ｏ装置４０に接続されるＨＤＤ（Hard  Disk  Drive）等の記憶装置から送信された要求をＩ／Ｏコントローラ１０へ送信するものとする。
【００３５】
また、システムコントローラ４１はキャッシュメモリを有し、メモリ４２に格納された情報を２５６ｂｉｔ単位でキャッシュするものとする。つまり、システムコントローラ４１が有するキャッシュメモリのキャッシュラインのサイズは２５６ｂｉｔであるものとする。また、Ｉ／Ｏコントローラ１０は、６４ｂｉｔの要求を送受信するものとする。
【００３６】
また、Ｉ／Ｏコントローラ１０は、「ＤＭＡ（Direct  Memory  Access）ｒｅａｄ」又は「ＤＭＡ  ｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」又は「ＤＭＡ  ｓｔｒｏｎｇｌｙ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」を要求として受信するものとする。ここで、「ＤＭＡ  ｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」と「ＤＭＡ  ｒｅａｄ」は、実行順制御が不要な要求であるＩＲ（Interleaved-Request）である。また「ＤＭＡ  ｓｔｒｏｎｇｌｙ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」とは、実行順制御が必要な要求であるＮＩＲ（Non‐Interleaved‐Request）である。
【００３７】
このようなＩ／Ｏコントローラ１０は、Ｉ／Ｏ装置４０から要求を受信した場合には、受信した要求をＦＩＦＯ２０に蓄積し、ＲＯＵ３０を用いて、ＦＩＦＯ２０に蓄積した要求をシステムコントローラ４１へ送信する。
【００３８】
次に、図３を用いて、実施例２に係るＲＯＵ３０が有する各部について説明する。図３は、実施例２に係るＲＯＵを説明するための図である。図３に示すように、ＲＯＵ３０は、フィラー３１、ＩＲＱ（Interleaved-Request-Queue）＃０〜ＩＲＱ＃７、ＮＩＲＱ（Non‐Interleaved‐Request-Queue）３２を有する。また、ＲＯＵ３０は、アービター３３、トランスミッタ３４、レシーバ３５を有する。
【００３９】
各ＩＲＱ＃０〜＃７は、メモリ４２に格納された情報に対する処理の要求のうち、実行順制御が不要な要求であるＩＲを記憶する記憶部である。以下、図４を用いて、各ＩＲＱ＃０〜＃７について具体的に説明する。
【００４０】
図４に示す例では、ＩＲＱは、コマンド情報とアドレス情報とを有する。ここで、各ＩＲＱ＃０〜＃７には、同一のコマンド種別であって、同一のキャッシュラインアドレスに含まれるアドレスを処理の対象とするＩＲが格納される。ここで、コマンド情報は、格納された要求のコマンド種別を示す。例えば、コマンド情報には「ＤＭＡ  ｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」又は「ＤＭＡ  ｒｅａｄ」を示す情報が格納される。
【００４１】
また、アドレス情報は、格納された各要求が処理対象とするアドレスを含んだキャッシュラインアドレスを示すアドレス情報を示す。つまり、一つのＩＲＱには、同一のコマンド種別であって、同一のキャッシュラインアドレスに含まれるアドレスを処理対象とする複数の要求が格納される。例えば、アドレス情報には、格納された各要求による処理の対象となるデータが格納されたメモリアドレスの上位ビットを示す情報が格納される。
【００４２】
つまり、アドレス情報には、格納された各要求による処理の対象となるデータが格納されたメモリアドレスを内包するキャッシュラインアドレスを示す情報が格納される。このため、一つのＩＲＱには、同じ処理内容の要求であって、処理の対象であるデータが格納されたメモリアドレスの上位ビットが同一である要求が格納される。
【００４３】
例えば、実施例２に関わるシステムコントローラ４１は、メモリ４２に格納された情報を「２５６」ｂｉｔ単位で自装置内のキャッシュメモリにキャッシュする。このため、システムコントローラ４１は、キャッシュラインサイズを「２５６」ｂｉｔとして、メモリ４２に記憶された情報をキャッシュする。
【００４４】
図５は、キャッシュラインを説明するための図である。図５に示すように、アドレス「０ｘ００００１０８８」、「０ｘ００００１１５２」、「０ｘ００００１２１６」は、アドレス「０ｘ００００１０２４」と同一のキャッシュラインアドレスに含まれるアドレスとなる。また、アドレス「０ｘ００００１２８０」、「０ｘ００００１３４４」、「０ｘ００００１４０８」、「０ｘ００００１４７２」は、アドレス「０ｘ００００１０２４」とは異なるキャッシュラインアドレスに含まれるアドレスとなる。
【００４５】
ここで、図５中のブロックとは、ＣＰＵがメモリのディレクトリ情報を管理する単位を言う。例えば、ＣＰＵは、ブロックのサイズが「６４」ｂｉｔである場合には、メモリに記憶された情報を、「６４」ｂｉｔごとに管理する。このような場合には、図５に示す例では、アドレス「０ｘ００００１０８８」、「０ｘ００００１１５２」、「０ｘ００００１２１６」、「０ｘ００００１２８０」、「０ｘ００００１３４４」、「０ｘ００００１４０８」、「０ｘ００００１４７２」は、アドレス「０ｘ００００１０２４」と異なるブロックに含まれるデータが格納されたアドレスとなる。
【００４６】
なお、以下の説明では、同一のキャッシュラインアドレスに内包されるアドレスを「同一のアドレス範囲に含まれるアドレス」として説明する。このため、図５に示す例では、アドレス「０ｘ００００１０２４」に対する要求は、アドレス「０ｘ００００１０２４」と同一アドレス範囲内の同じアドレスに対する要求である。また、アドレス「０ｘ００００１０８８」、「０ｘ００００１１５２」、「０ｘ００００１２１６」に対する要求は、アドレス「０ｘ００００１０２４」に対する要求と同一アドレス範囲内の異なるアドレスに対する要求となる。また、アドレス「０ｘ００００１２８０」、「０ｘ００００１３４４」、「０ｘ００００１４０８」、「０ｘ００００１４７２」に対する要求は、アドレス「０ｘ００００１０２４」に対する要求と同一アドレス範囲外の要求となる。
【００４７】
図４に戻って、ＩＲＱは、複数の記憶領域であるエントリー＃０〜＃３を有する。各エントリー＃０〜＃３は、それぞれ一つずつ要求を格納することができる記憶領域である。また、各エントリー＃０〜＃３は、格納された要求を一意に識別するためのタグ情報＃０〜＃３を有する。
【００４８】
また、各エントリー＃０〜＃３は、各エントリーに格納された要求の発行処理を制御するための情報であるｓｔａｔｅ  ｍａｃｈｉｎｅ＃０〜＃３を有する。ｓｔａｔｅ  ｍａｃｈｉｎｅ＃０〜＃３は、「無効」、「発行可能」、「応答待ち」を示す状態のいずれかに遷移することによって、各エントリー＃０〜＃３に要求を格納する処理と、各エントリー＃０〜＃３に格納されたＩＲの発行処理とを制御する。
【００４９】
新たな要求は、ステートマシンが無効のエントリーに格納される。例えば、後述するフィラー３１は、ｓｔａｔｅ  ｍａｃｈｉｎｅ＃０が「無効」を示すエントリー＃０に新たな要求を格納する。また、後述するトランスミッタ３４は、ｓｔａｔｅ  ｍａｃｈｉｎｅ＃０が「発行可能」を示す状態である場合には、エントリー＃０に格納されている要求をシステムコントローラ４１へ送信する。また、後述するトランスミッタ３４は、「応答待ち」状態のｓｔａｔｅ  ｍａｃｈｉｎｅを有するＩＲＱからは、要求をシステムコントローラ４１へ送信せず、他のＩＲＱに格納された要求を送信する。
【００５０】
図３に戻って、ＮＩＲＱ３２は、メモリ４２に格納された情報に対する処理の要求のうち、実行順序が保持される要求であるＮＩＲを記憶する記憶部である。図６は、ＮＩＲＱを説明するための図である。具体的には、ＮＩＲＱ３２は、図６に示すように、複数の記憶領域としてエントリー＃０〜＃７を有し、各エントリー＃０〜＃７に一つずつＮＩＲを格納する。
【００５１】
また、各エントリー＃０〜＃７は、それぞれ独立したコマンド情報とアドレス情報とタグ情報とを記録する領域を有する。ここで、各エントリー＃０〜＃７のコマンド情報とは、各エントリー＃０〜＃７に格納されたＮＩＲのコマンド種別を示す情報である。
【００５２】
また、各エントリー＃０〜＃７のアドレス情報とは、各エントリー＃０〜＃７に格納されたＮＩＲによる処理の対象となるデータが格納されたメモリアドレスを含むアドレス範囲を示す情報である。具体的には、アドレス情報には、ＮＩＲによる処理の対象となるデータが格納されたメモリアドレスの上位ビットが格納される。
【００５３】
また、タグ情報とは、各エントリー＃０〜＃７に格納されたＮＩＲを一意に示す情報である。また、各エントリー＃０〜＃７は、各エントリー＃０〜＃７に格納されたＮＩＲが有効か否かを示すバリッドを記録する領域を有する。
【００５４】
また、各エントリー＃０〜＃７は、ＮＩＲＱ３２に格納された要求を受信した順序と、各ＩＲＱ＃０〜＃７に格納された要求を受信した順序との関係を示す順序制御フラグが格納されたスコアボードをそれぞれ有する。加えて、スコアボードに記憶される順序制御フラグは、各エントリー＃０〜＃７に格納された要求が処理の対象とするアドレス範囲と、各ＩＲＱ＃０〜＃７に格納された各要求が処理の対象とするアドレス範囲との関係も示す。
【００５５】
つまり、各エントリー＃０〜＃７が有するスコアボードには、各エントリーに格納された要求による処理の対象となるデータが格納されたメモリアドレスを含むアドレス範囲と、各ＩＲＱ＃０〜＃７に格納された要求による処理の対象となるデータが格納されたメモリアドレスを含むアドレス範囲との関係と、各エントリーに格納された要求を受信した順序と各ＩＲＱ＃０〜＃７に格納された各要求を受信した順序との関係とを示す順序制御フラグが格納される。
【００５６】
このため、後述するアービター３３は、スコアボードに格納された順序制御フラグを用いて、ＮＩＲＱ３２の各エントリー＃０〜＃７に格納されたＮＩＲよりも先にＩ／Ｏコントローラ１０が受信したＩＲであって、同じアドレス範囲に含まれるアドレスに格納された情報を処理の対象とするＩＲが格納されたＩＲＱを容易に検出することができる。
【００５７】
以下、スコアボードについて具体的に説明する。各エントリー＃０〜＃７は、それぞれ８個の格納領域を有するスコアボードを有する。また、各スコアボードの各格納領域は、各ＩＲＱ＃０〜＃７のいずれかと対応付けられる。また、スコアボードの各格納領域には、「１」又は「０」の値が格納される。後述するように、フィラー３１は、ＮＩＲＱ３２の各エントリー＃０〜＃７に格納された要求と同一のアドレス範囲に含まれるアドレスを処理対象とする要求が格納されたＩＲＱを検索する。そして、フィラー３１は、検索されたＩＲＱと対応付けられたスコアボードの格納領域に「１」を格納する。
【００５８】
つまり、スコアボードは、ＮＩＲＱ３２の各エントリー＃０〜＃７ごとに、ＩＲＱ＃０〜＃７に格納された要求のうち同一アドレス範囲に含まれるアドレスを処理対象とする要求であって、ＮＩＲＱ３２の各エントリー＃０〜＃７に格納された要求よりもＩ／Ｏコントローラ１０によって先に受信された要求が格納されたＩＲＱと対応付けられた格納領域に「１」が格納される。
【００５９】
このため、例えば、スコアボードは、ＩＲＱ＃１と対応付けられた記憶領域に「１」が格納されていた場合には、ＮＩＲＱ３２のエントリー＃０に格納された要求と同一のアドレス範囲に含まれるアドレスを処理対象とする要求であって、ＮＩＲＱ３２のエントリー＃０に格納された要求よりも先に受信した要求がＩＲＱ＃１に格納されていることを示すことができる。
【００６０】
このように、スコアボードは、ＮＩＲＱ３２に格納された要求と各ＩＲＱ＃０〜＃７に格納された要求とをＩ／Ｏコントローラ１０が受信した順序を示すフラグが格納される。このようなスコアボードの一例として、エントリー＃０のスコアボードが有する格納領域のうち、ＩＲＱ＃０と対応付けられた格納領域に「１」が格納されている例について説明する。このようなスコアボードは、ＮＩＲＱ３２のエントリー＃０に格納された要求と同一のアドレス範囲を処理対象とし、かつ、ＮＩＲＱ３２のエントリー＃０に格納された要求よりも先にＩ／Ｏコントローラ１０によって受信された要求がＩＲＱ＃０に格納されていることを示す。
【００６１】
また、ＮＩＲＱ３２は、要求の発行処理を制御するための情報であるｓｔａｔｅ  ｍａｃｈｉｎｅ  ｈｅａｄを有する。ｓｔａｔｅ  ｍａｃｈｉｎｅ  ｈｅａｄは、「発行可能」を示す状態と「応答待ち」を示す状態とのいずれかに遷移することによって、各エントリー＃０〜＃７に格納された要求の発行処理を制御する。
【００６２】
次に、ｓｔａｔｅ  ｍａｃｈｉｎｅ  ｈｅａｄの状態と実行される処理の一例について説明する。例えば、後述するトランスミッタ３４は、ｓｔａｔｅ  ｍａｃｈｉｎｅ  ｈｅａｄが「発行可能」を示す場合には、ＮＩＲＱ３２の各エントリー＃０〜＃７に格納された要求をシステムコントローラ４１へ送信する。また、後述するトランスミッタ３４は、ｓｔａｔｅ  ｍａｃｈｉｎｅ  ｈｅａｄが「応答待ち」である場合には、ＮＩＲＱ３２の各エントリー＃０〜＃７に格納された要求をシステムコントローラ４１へ送信しない。
【００６３】
図３に戻って、フィラー３１は、要求をＩ／Ｏ装置４０から受信した場合には、受信した要求を解析し、要求がＮＩＲであるか否かを判別する。また、フィラー３１は、受信した要求を解析し、要求された処理の対象となるデータが格納されたメモリアドレスを内包するアドレス範囲を特定する。そして、フィラー３１は、要求がＮＩＲであると判別した場合には、要求をＮＩＲＱ３２に格納する。また、フィラー３１は、要求がＮＩＲではないと判別した場合には、特定したアドレス範囲ごとに異なるＩＲＱ＃０〜＃７に要求を格納する。
【００６４】
具体的には、フィラー３１は、ＦＩＦＯ２０に格納された要求を取得する。そして、フィラー３１は、取得した要求を解析し、要求された処理の対象となるデータが格納されたメモリアドレスを内包するアドレス範囲と、要求された処理の内容を特定する。その後、フィラー３１は、特定した処理の内容が「ＤＭＡ  ｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」（ＩＲ）又は「ＤＭＡ  ｒｅａｄ」（ＩＲ）である場合には、図７中の点線で示すように、特定したアドレスに応じたＩＲＱに取得した要求を格納する。
【００６５】
また、フィラー３１は、特定した処理の要求が「ＤＭＡ  ｗｒｉｔｅ  ｓｔｒｏｎｇｌｙ  ｏｒｄｅｒｅｄ」（ＮＩＲ）である場合には、図７中の実線で示すように、ＮＩＲＱ３２に取得した要求を格納する。なお、図７は、要求の振分けを説明するための図である。
【００６６】
以下、フィラー３１が取得した要求をＩＲＱ＃０〜＃７、又は、ＮＩＲＱ３２に格納する処理について詳しく説明する。以下の説明では、フィラー３１が取得した処理の内容が「ＤＭＡ  ｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」（ＩＲ）である場合、「ＤＭＡ  ｗｒｉｔｅ  ｓｔｒｏｎｇｌｙ  ｏｒｄｅｒｅｄ」（ＮＩＲ）である場合、「ＤＭＡ  ｒｅａｄ」（ＩＲ）である場合を説明する。
【００６７】
まず、フィラー３１が取得した処理の内容が「ＤＭＡ  ｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」（ＩＲ）である場合について説明する。フィラー３１は、取得した要求がＩＲであると判別した場合には、特定したアドレス範囲と同一のアドレス情報が格納され、かつ、特定した処理の内容と同一のコマンド情報が格納されたＩＲＱをＩＲＱ＃０〜＃７から検索する。
【００６８】
フィラー３１は、検索の結果、特定したアドレス範囲と同一のアドレス情報が格納され、かつ、特定した処理の内容と同一のコマンド情報が格納されたＩＲＱを検出した場合には、検出したＩＲＱに空のエントリーがあるか否かを判別する。なお、空のエントリーとは、要求が格納されていないエントリーである。
【００６９】
そして、フィラー３１は、検出したＩＲＱに空のエントリーがあると判別した場合には、検出したＩＲＱが有する空のエントリーに取得した要求を格納するｅｎｑｕｅｕｅ処理を実行する。また、フィラー３１は、ｅｎｑｕｅｕｅ処理を実行した場合には、要求を格納したエントリーが有するｓｔａｔｅ  ｍａｃｈｉｎｅの状態を発行可能に遷移させる。
【００７０】
フィラー３１は、検出したＩＲＱに空のエントリーが無いと判別した場合には、コマンド情報とアドレス情報とが格納されていないＩＲＱをＩＲＱ＃０〜＃７から検索する。つまり、フィラー３１は、要求が格納されていない空きＩＲＱを検索する。そして、フィラー３１は、検索の結果、空きＩＲＱを検出した場合には、検出した空きＩＲＱに取得した要求を格納するｅｎｑｕｅｕｅ処理を実行する。また、フィラー３１は、ｅｎｑｕｅｕｅ処理を実行した場合には、要求を格納したエントリーが有するｓｔａｔｅ  ｍａｃｈｉｎｅの状態を発行可能に遷移させる。
【００７１】
また、フィラー３１は、空きＩＲＱに要求を格納した場合には、要求を格納したＩＲＱに、特定したアドレス範囲をアドレス情報として格納するとともに、要求を格納したＩＲＱに、特定した処理の内容をコマンド情報として格納する。また、フィラー３１は、空きＩＲＱが検出されなかった場合には、空きＩＲＱができるまで処理をストールする。
【００７２】
フィラー３１は、特定したアドレス範囲と同一のアドレス情報が格納され、かつ、特定した処理の内容と同一のコマンド情報が格納されたＩＲＱが検出されなかった場合には、空きＩＲＱを検索する。そして、フィラー３１は、検索の結果、空きＩＲＱを検出した場合には、検出した空きＩＲＱに取得した要求を格納するｅｎｑｕｅｕｅ処理を実行するとともに、要求を格納したＩＲＱにアドレス情報とコマンド情報とを格納する。また、フィラー３１は、空きＩＲＱが検出されなかった場合には、空きＩＲＱができるまで処理をストールする。
【００７３】
次に、フィラー３１が取得した処理の内容が「ＤＭＡ  ｗｒｉｔｅ  ｓｔｒｏｎｇｌｙ  ｏｒｄｅｒｅｄ」（ＮＩＲ）である場合について説明する。フィラー３１は、取得した要求がＮＩＲであると判別した場合には、ＮＩＲＱ３２に空きエントリーがあるか否かを判別する。
【００７４】
そして、フィラー３１は、ＮＩＲＱ３２に空きエントリーがあると判別した場合には、ＮＩＲＱ３２の空きエントリーに取得した要求を格納するｅｎｑｕｅｕｅ処理を実行する。また、フィラー３１は、ＮＩＲＱ３２が有する各エントリー＃０〜＃７のバリッドが全て「０」である際にｅｎｑｕｅｕｅ処理を実行した場合には、ｓｔａｔｅ  ｍａｃｈｉｎｅ  ｈｅａｄの状態を発行可能状態に遷移させる。
【００７５】
また、フィラー３１は、ＮＩＲＱ３２が有する各エントリー＃０〜＃７のバリッドのいずれかが「１」であった場合には、ＮＩＲＱ３２が有する各エントリー＃０〜＃７のうち、バリッドに「１」が格納され、かつ、最も最後に受信された要求が格納されたエントリーの次のエントリーに要求を格納する。
【００７６】
また、フィラー３１は、特定したアドレス範囲をアドレス情報として、要求を格納したエントリーに格納するとともに、特定した処理の内容をコマンド情報として、要求を格納したエントリーに格納する。また、フィラー３１は、要求を格納したエントリーのバリッドに「１」を格納する。
【００７７】
また、フィラー３１は、特定したアドレス範囲と同一のアドレス情報を有するＩＲＱをＩＲＱ＃０〜＃７から検索する。そして、フィラー３１は、検索の結果、特定したアドレス範囲と同一のアドレス情報を有するＩＲＱを検出した場合には、検出したＩＲＱが有するコマンド情報に「ＤＭＡ  ｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」が格納されているか否かを判別する。
【００７８】
そして、フィラー３１は、検出したＩＲＱのコマンド情報に「ＤＭＡ  ｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」が格納されていると判別した場合には、要求を格納したＮＩＲＱのエントリーが有するスコアボードの格納領域のうち、検出したＩＲＱと対応付けられた格納領域に「１」を格納する。また、フィラー３１は、検出したＩＲＱのコマンド情報に「ＤＭＡ  ｒｅａｄ」が格納されていると判別した場合には、要求を格納したＮＩＲＱのエントリーが有するスコアボードの格納領域のうち、検出したＩＲＱと対応付けられた格納領域に「０」を格納する。
【００７９】
つまり、フィラー３１は、ＮＩＲＱ３２に格納された要求を受信した順序及び各要求のアドレス範囲と、各ＩＲＱ＃０〜＃７に格納された要求を受信した順序及び各要求のアドレス範囲との関係を示すスコアボードを、ＮＩＲを格納したＮＩＲＱのエントリに作成する。また、フィラー３１は、ＮＩＲＱ３２に空きエントリーがないと判別した場合には、ＮＩＲＱ３２に空きエントリーができるまで処理をストールする。
【００８０】
次に、フィラー３１が取得した処理の内容が「ＤＭＡ  ｒｅａｄ」（ＩＲ）である場合について説明する。フィラー３１は、処理の内容が「ＤＭＡ  ｒｅａｄ」であると判別した場合には、特定されたアドレス範囲と同一のアドレス情報が格納されたＩＲＱをＩＲＱ＃０〜＃７から検索する。また、フィラー３１は、検索の結果、特定されたアドレス範囲と同一のアドレス情報が格納されたＩＲＱを検出した場合には、検出したＩＲＱに格納されているコマンド情報が「ＤＭＡ  ｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」であるか否かを判別する。
【００８１】
そして、フィラー３１は、検出したＩＲＱに格納されているコマンド情報が「ＤＭＡ  ｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」であると判別した場合には、検出されたＩＲＱに格納されている要求がすべて発行されるまで処理をストールする。つまり、フィラー３１は、「ＤＭＡ  ｒｅａｄ」の要求が「ＤＭＡ  ｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」よりも先に実行されないように、「ＤＭＡ  ｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」が送信されるまで、処理をストールする。
【００８２】
また、フィラー３１は、検索の結果、特定されたアドレス範囲と同一のアドレス情報が格納されているＩＲＱが検出されなかった場合には、特定されたアドレス範囲と同一のアドレス情報が格納されているエントリーをＮＩＲＱ３２から検索する。そして、フィラー３１は、特定されたアドレス範囲と同一のアドレス情報が格納されているエントリーをＮＩＲＱ３２から検出した場合には、後述するトランスミッタ３４によって検出されたエントリーに格納されているＮＩＲが送信されるまで、処理をストールする。
【００８３】
つまり、フィラー３１は、「ＤＭＡ  ｒｅａｄ」の要求が「ＤＭＡ  ｗｒｉｔｅ  ｓｔｒｏｎｇｌｙ  ｏｒｄｅｒｅｄ」よりも先に実行されないように、「ＤＭＡ  ｗｒｉｔｅ  ｓｔｒｏｎｇｌｙ  ｏｒｄｅｒｅｄ」が送信されるまで、処理をストールする。
【００８４】
また、フィラー３１は、特定されたアドレス範囲と同一のアドレス情報が格納されているエントリーをＮＩＲＱ３２から検出しなかった場合には、取得した要求と同一の要求が格納されているＩＲＱをＩＲＱ＃０〜＃７から検索する。つまり、フィラー３１は、特定したアドレス範囲と同一のアドレス情報が格納され、かつ、特定した処理の内容と同一のコマンド情報が格納されているＩＲＱをＩＲＱ＃０〜＃７から検索する。
【００８５】
フィラー３１は、検索した結果、取得した要求と同一の要求が格納されているＩＲＱを検出した場合には、検出したＩＲＱに空きエントリーがあるか否かを判別する。そして、フィラー３１は、空きエントリーがあると判別した場合には、検出したＩＲＱに取得した要求を格納するｅｎｑｕｅｕｅ処理を実行するとともに、エントリーのｓｔａｔｅ  ｍａｃｈｉｎｅを発行可能状態に遷移させる。
【００８６】
また、フィラー３１は、検出したＩＲＱに空きエントリーがないと判別した場合には、空きＩＲＱを検索し、空きＩＲＱが検出された場合には、検出された空きＩＲＱに要求を格納するｅｎｑｕｅｕｅ処理を実行する。また、フィラー３１は、要求を格納したエントリーのｓｔａｔｅ  ｍａｃｈｉｎｅの状態を発行可能状態に遷移させる。また、フィラー３１は、空きＩＲＱを検索した結果、空きＩＲＱが検出されなかった場合には、空きＩＲＱができるまで処理をストールする。
【００８７】
図３に戻って、アービター３３は、フィラー３１によって各ＩＲＱ＃０〜＃７に格納されている要求がシステムコントローラ４１によって実行されているか否かを、ＩＲＱ＃０〜＃７ごとに判別する。また、アービター３３は、ＮＩＲＱ３２に格納されている要求のうち、最も先にＮＩＲＱ３２に格納された要求によって処理の対象となるデータが格納されたメモリアドレスを内包するアドレス範囲と同一のアドレス範囲に内包されたメモリアドレスに格納された情報を処理の対象とする要求がシステムコントローラ４１によって実行されているか否かを判別する。
【００８８】
具体的には、アービター３３は、ＮＩＲＱ３２が有するｓｔａｔｅ  ｍａｃｈｉｎｅ  ｈｅａｄの状態が発行可能状態であるか否かを判別する。そして、アービター３３は、ｓｔａｔｅ  ｍａｃｈｉｎｅ  ｈｅａｄの状態が発行可能状態であると判別した場合には、バリッドに「１」が格納されており、かつ、最も先に受信されたＮＩＲが格納されたエントリーをＮＩＲＱ３２のエントリー＃０〜＃７から検索する。
【００８９】
そして、アービター３３は、検索の結果、バリッドに「１」が格納されており、かつ、最も先にＮＩＲが格納されたエントリーを検出した場合には、検出したエントリーが有するスコアボードに「１」が格納されているか否かを判別する。そして、アービター３３は、スコアボードに「１」が格納されていないと判別した場合には、検出されたエントリーをトランスミッタ３４へ通知する。
【００９０】
また、アービター３３は、スコアボードに「１」が格納されていると判別した場合には、「１」が格納されている格納領域と対応付けられたＩＲＱを特定する。そして、アービター３３は、特定したＩＲＱのうち、ｓｔａｔｅ  ｍａｃｈｉｎｅが発行可能状態であるエントリーを有し、かつ、ｓｔａｔｅ  ｍａｃｈｉｎｅが応答待ち状態であるエントリーを有しないＩＲＱを検索する。
【００９１】
また、アービター３３は、検索の結果、要件に合致するＩＲＱを検出した場合には、例えばラウンドロビンアービトレーション方式を用いて、ｒｅａｄの要求を通知するかｗｒｉｔｅの要求をシステムコントローラに通知するかを決定する。そして、アービター３３は、ｒｅａｄの要求をシステムコントローラに通知すると決定した場合には、検出したＩＲＱのうち、格納された要求の量が最も少ないＩＲＱをトランスミッタ３４へ通知する。また、アービター３３は、ｗｒｉｔｅの要求をシステムコントローラに通知すると決定した場合には、検出したＩＲＱのうち、格納された要求の量が最も多いＩＲＱをトランスミッタ３４へ通知する。
【００９２】
また、アービター３３は、ＮＩＲＱのｓｔａｔｅ  ｍａｃｈｉｎｅ  ｈｅａｄの状態が発行可能状態ではないと判別した場合には、各ＩＲＱ＃０〜＃７から、ｓｔａｔｅ  ｍａｃｈｉｎｅが発行可能状態となっているエントリーを有するＩＲＱを検索する。そして、アービター３３は、検索の結果、ｓｔａｔｅ  ｍａｃｈｉｎｅが発行可能状態となっているエントリーを有するＩＲＱを検出した場合には、検出したＩＲＱのうち、応答待ち状態のｓｔａｔｅ  ｍａｃｈｉｎｅを有していないＩＲＱを検索する。
【００９３】
その後、アービター３３は、検索の結果、応答待ち状態のｓｔａｔｅ  ｍａｃｈｉｎｅを有していないＩＲＱを検出した場合には、ラウンドロビンアービトレーション方式を用いて、ｒｅａｄの要求を通知するかｗｒｉｔｅの要求を通知するかを決定する。そして、アービター３３は、ｒｅａｄの要求をシステムコントローラに通知すると決定した場合には、スコアボードを検索し、検出されたＩＲＱと対応付けられた格納領域に「１」が格納されているか否かを判別する。
【００９４】
その後、アービター３３は、検出されたＩＲＱと対応付けられたスコアボードの格納領域に「１」が格納されていると判別した場合には、対応付けられた格納領域に「１」が格納されているＩＲＱのうち、格納されている要求の数が最も少ないＩＲＱをトランスミッタ３４へ通知する。また、アービター３３は、検出されたＩＲＱと対応付けられたスコアボードの格納領域に「１」が格納されていないと判別した場合には、検出されたＩＲＱのうち、格納された要求の数が最も少ないＩＲＱをトランスミッタ３４へ通知する。
【００９５】
また、アービター３３は、ｗｒｉｔｅの要求をシステムコントローラに通知すると決定した場合には、スコアボードを検索し、検出されたＩＲＱと対応付けられた格納領域に「１」が格納されているか否かを判別する。その後、アービター３３は、検出されたＩＲＱと対応付けられたスコアボードの格納領域に「１」が格納されていると判別した場合には、対応付けられた格納領域に「１」が格納されているＩＲＱのうち、格納された要求の数が最も多いＩＲＱをトランスミッタ３４へ通知する。
【００９６】
また、アービター３３は、検出されたＩＲＱと対応付けられた格納領域に「１」が格納されていないと判別した場合には、検出されたＩＲＱのうち、格納された要求の数が最も多いＩＲＱをトランスミッタ３４へ通知する。
【００９７】
一方、アービター３３は、特定したＩＲＱのうち、ｓｔａｔｅ  ｍａｃｈｉｎｅが発行可能状態であるエントリーを有し、かつ、ｓｔａｔｅ  ｍａｃｈｉｎｅが応答待ち状態であるエントリーを有しないＩＲＱが検出されなかった場合には、処理をアイドル状態にする。その後、アービター３３は、再度ＮＩＲＱ３２が有するｓｔａｔｅ  ｍａｃｈｉｎｅ  ｈｅａｄの状態が発行可能状態であるか否かを判別する。
【００９８】
このように、アービター３３は、各ＩＲＱ＃０〜＃７が有するｓｔａｔｅ  ｍａｃｈｉｎｅの状態に基づいて、各ＩＲＱ＃０〜＃７に格納された要求がシステムコントローラ４１によって実行中であるか否かを判別する。つまり、アービター３３は、各ＩＲＱ＃０〜＃７に格納された要求のアドレス範囲と同一のアドレス範囲に含まれるアドレスを処理対象とする要求がシステムコントローラ４１によって実行中であるか否かを判別する。
【００９９】
そして、アービター３３は、システムコントローラ４１によって実行されている要求のアドレス範囲とは異なるアドレス範囲に含まれるアドレスを処理対象とする要求が格納されているＩＲＱをトランスミッタ３４に通知する。このため、Ｉ／Ｏコントローラ１０は、システムコントローラ４１に対して、同一のアドレス範囲に含まれるアドレスを処理対象とする複数の要求を送信することなく、Ｉ／Ｏ装置４０から受信した要求を送信することができる。このため、Ｉ／Ｏコントローラ１０は、システムコントローラ４１に要求を滞留させることなく、効率的な処理を実行させることができる。
【０１００】
また、アービター３３は、スコアボードを用いて、ＮＩＲＱ３２に格納された要求と同一のアドレス範囲を処理対象とし、かつ、ＮＩＲＱ３２に格納された要求よりも先に受信された「ＤＭＡｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」(ＩＲ)がいずれかのＩＲＱに記憶されているか否かを判別する。そして、アービター３３は、ＮＩＲＱ３２に格納された要求と同一のアドレス範囲を処理対象とし、かつ、ＮＩＲＱ３２に格納された要求よりも先に受信された「ＤＭＡｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」(ＩＲ)がいずれかのＩＲＱに記憶されている場合には、先に受信された「ＤＭＡｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」(ＩＲ)をシステムコントローラへ送信する。
【０１０１】
つまり、アービター３３は、ＮＩＲＱ３２が有する各エントリー＃０〜＃７のスコアボードに基づいて、ＮＩＲＱ３２に格納された要求のうち最も先に格納した要求について、同一のアドレス範囲に内包されたメモリアドレスに格納された情報を処理の対象とするＩＲがシステムコントローラ４１によって実行されているか否かを判別する。このため、アービター３３は、ＮＩＲＱ３２に格納された要求の実行順序を保持するとともに、同一のアドレス範囲を処理対象とするＮＩＲとＩＲをシステムコントローラ４１へ送信しない。結果として、Ｉ／Ｏコントローラ１０は、システムコントローラ４１に効率的な処理を実行させることができる。
【０１０２】
トランスミッタ３４は、アービター３３によって要求が実行されていないと判別された、ＩＲＱ又はＮＩＲＱ３２に格納されている要求をシステムコントローラ４１へ送信する。具体的には、トランスミッタ３４は、ＮＩＲＱ３２が有するエントリー、又は、要求が格納されたＩＲＱの通知を受信する。このような場合には、トランスミッタ３４は、システムコントローラ４１が実行中である要求の数を示すＯｕｔｓｔａｎｄｉｎｇ数が所定の値よりも大きいか否かを判別する。
【０１０３】
そして、トランスミッタ３４は、Ｏｕｔｓｔａｎｄｉｎｇ数が所定の数よりも小さいと判別した場合には、アービター３３から通知された要求をシステムコントローラ４１へ送信する。つまり、トランスミッタ３４は、アービター３３から通知されたエントリーに格納されたＮＩＲ、または、アービター３３から通知されたＩＲＱに格納された要求のうち、最も先に格納された要求をシステムコントローラ４１へ送信する。
【０１０４】
また、トランスミッタ３４は、Ｏｕｔｓｔａｎｄｉｎｇ数が所定の値と等しいか所定の値より大きいと判別した場合には、システムコントローラ４１に対して送信した要求に対する応答を後述するレシーバ３５が受信するまで待機する。そして、トランスミッタ３４は、応答を受信した旨を示す信号をレシーバ３５から受信した場合には、アービター３３から通知された要求をシステムコントローラ４１へ送信する。つまり、トランスミッタ３４は、アービター３３から通知されたエントリーに格納された要求、または、アービター３３から通知されたＩＲＱに格納された要求のうち、最も先に格納された要求をシステムコントローラ４１へ送信する。
【０１０５】
また、トランスミッタ３４は、ＩＲＱに格納された要求をシステムコントローラ４１へ送信した場合には、送信した要求が格納されたエントリーのｓｔａｔｅ  ｍａｃｈｉｎｅを応答待ち状態に遷移させる。また、トランスミッタ３４は、一つのＩＲＱに格納された全ての要求を発行した場合には、全ての要求が発行されたＩＲＱと対応付けられたスコアボードの全ての格納領域に「０」を格納する。また、トランスミッタ３４は、ＮＩＲＱ３２に格納された要求をシステムコントローラ４１へ送信した場合には、ＮＩＲＱ３２が有するｓｔａｔｅ  ｍａｃｈｉｎｅ  ｈｅａｄの状態を応答待ち状態に遷移させる。
【０１０６】
レシーバ３５は、システムコントローラ４１へ送信した要求に対する応答を受信する。具体的には、レシーバ３５は、システムコントローラ４１から応答を受信した場合には、トランスミッタ３４に対して、応答を受信した旨を示す信号を送信する。また、レシーバ３５は、受信した応答を解析し、応答がＮＩＲに対する応答であるか否かを判別する。
【０１０７】
そして、レシーバ３５は、受信した応答がＮＩＲに対する応答であると判別した場合には、ＮＩＲＱ３２が有するエントリー＃０〜＃７のうち、最も先に要求が格納されたエントリーのバリッドに「０」を格納するｄｅｑｕｅｕｅ処理を実行する。また、レシーバ３５は、受信した応答がＮＩＲに対する応答ではないと判別した場合には、受信した応答に対応する要求を特定する。そして、レシーバ３５は、特定した要求が格納されたＩＲＱとエントリーとを判別し、判別されたＩＲＱが有するエントリーのｓｔａｔｅ  ｍａｃｈｉｎｅの状態を無効状態に遷移させる。
【０１０８】
例えば、フィラー３１、アービター３３、トランスミッタ３４、レシーバ３５とは、電子回路である。ここで、電子回路の例として、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路、またはＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などを適用する。
【０１０９】
また、ＦＩＦＯ２０、各ＩＲＱ＃０〜＃７、ＮＩＲＱ３２は、複数のフリップフロップ（ＦＦ）やラッチにより構成されるレジスタファイル、ＲＡＭ（Random  Access  Memory）などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置を用いて構成可能である。
【０１１０】
次に、図８を用いて、スコアボードを用いたｅｎｑｕｅｕｅ処理と送信処理の流れを説明する。図８は、ｅｎｑｕｅｕｅ処理と送信処理との流れを説明するための図である。図８に示す例では、フィラー３１によってＮＩＲが新たにＮＩＲＱに格納されるものとする。また、新たに格納されるＮＩＲによる処理の対象となるデータが格納されたメモリアドレスを内包するアドレス範囲に含まれるメモリアドレスを処理の対象とする一つの要求がＩＲＱ＃２に格納されているものとする。
【０１１１】
図８の（１）に示すように、フィラー３１は、ＮＩＲＱ３２のエントリー＃１に要求を格納した場合には、エントリー＃１が有するバリッドに「１」を格納する。また、フィラー３１は、エントリー＃１に格納した要求のアドレス範囲と同一のアドレス情報を有するＩＲＱ＃２を特定する。そして、フィラー３１は、図８中（２）に示すように、エントリー＃１が有するスコアボードのうち、ＩＲＱ＃２と対応付けられた格納領域に「１」を格納する。
【０１１２】
また、図８中（３）に示すように、アービター３３は、エントリー＃１のバリッドに「１」が格納されていることを検出する。このため、図８中（４）に示すように、アービター３３は、エントリー＃１が有するスコアボードを確認し、ＩＲＱ＃２と対応付けられた格納領域に「１」が格納されていることを検出する。つまり、アービター３３は、ＮＩＲＱ３２のエントリー＃１に格納された要求と同じアドレス範囲を処理対象とし、かつ、ＮＩＲＱ３２のエントリー＃１に格納された要求よりも先に受信された要求がＩＲＱ＃２に格納されていると判別する。
【０１１３】
このため、図８中（５）に示すように、アービター３３は、ＩＲＱ＃２に格納された要求をトランスミッタ３４に通知する。このため、図８中（６）に示すように、トランスミッタ３４は、ＩＲＱ＃２に格納された要求をシステムコントローラに送信するとともに、ＮＩＲＱ３２の各エントリー＃０〜＃７が有するスコアボードのうち、ＩＲＱ＃２と対応付けられた全ての格納領域に「０」を格納する。その後、図８中（７）、（８）に示すように、トランスミッタ３４は、ＮＩＲＱ３２のエントリー＃１に格納された要求をシステムコントローラ４１へ送信する。
【０１１４】
次に、図９を用いて、Ｉ／Ｏコントローラが要求を送信する処理の流れについて説明する。図９は、実施例２に関わるＩ／Ｏコントローラが要求のアドレス範囲に応じて、要求を送信する処理を説明するための図である。
【０１１５】
例えば、図９中（１）、（２）に示すように、Ｉ／Ｏコントローラ１０は、アドレス範囲「ａ」に含まれるアドレスを処理対象とする要求としてＩＲ＃ａ−０、ＩＲ＃ａ−１・・・を受信する。また、図９中（３）、（４）に示すように、Ｉ／Ｏコントローラ１０は、アドレス範囲「ｂ」に含まれるアドレスを処理対象とする要求としてＩＲ＃ｂ−０、ＩＲ＃ｂ−１・・・を受信する。また、図９中（５）、（６）に示すように、Ｉ／Ｏコントローラ１０は、アドレス範囲「ｃ」に含まれるアドレスを処理対象とする要求としてＩＲ＃ｃ−０、ＩＲ＃ｃ−１・・・を受信する。
【０１１６】
このような場合には、Ｉ／Ｏコントローラ１０は、処理対象とする情報が格納されたメモリアドレスが同一のアドレス範囲に含まれない複数の要求をシステムコントローラ４１へ送信する。つまり、図９中（７）〜（１０）に示すように、Ｉ／Ｏコントローラ１０は、ＩＲ＃ａ−０、ＩＲ＃ｂ−０、ＩＲ＃ｃ−０をシステムコントローラ４１へ送信する。このため、図９中（１１）〜（１４）に示すように、システムコントローラ４１は、後続の要求を滞留させることなく、受信した要求ＩＲ＃ａ−０、ＩＲ＃ｂ−０、ＩＲ＃ｃ−０を並列に実行し、応答をＩ／Ｏコントローラ１０へ送信することができる。
【０１１７】
図１０は、実施例２に係るＩ／Ｏコントローラの処理の流れを説明するためのタイムチャートである。図１０に示す例では、Ｉ／Ｏコントローラ１０は、それぞれ異なるアドレス範囲を処理対象とする要求であるＩＲ＃ａ−０、ＩＲ＃ｂ−０、ＩＲ＃ｃ−０、ＩＲ＃ｄ−０をシステムコントローラ４１へ送信する。
【０１１８】
このため、システムコントローラ４１は、各要求ＩＲ＃ａ−０、ＩＲ＃ｂ−０、ＩＲ＃ｃ−０、ＩＲ＃ｄ−０を滞留させることなく並列に実行し、応答をＩ／Ｏコントローラ１０へ送信する。また、Ｉ／Ｏコントローラは、各要求の応答を受信した場合には、それぞれ異なるアドレス範囲を処理対象とする要求であるＩＲ＃ａ−１、ＩＲ＃ｂ−１、ＩＲ＃ｃ−１、ＩＲ＃ｄ−１をシステムコントローラ４１へ送信する。
【０１１９】
つまり、Ｉ／Ｏコントローラ１０は、それぞれ異なるアドレス範囲を処理対象とする要求をシステムコントローラ４１へ送信する。このため、Ｉ／Ｏコントローラ１０は、要求の滞留を発生させることなく、システムコントローラ４１に効率的な処理を実行させることができる。
【０１２０】
次に、図１１を用いて、実施形態によるＩ／Ｏコントローラ１０と従来のブリッジ装置が有するｑｕｅｕｅについて説明する。図１１は、ｑｕｅｕｅを説明するための図である。図１１に示す例では、従来のブリッジ装置は、単に、ＩＲとＮＩＲとを区別無く格納する複数の記憶領域であるＱ＃０〜Ｑ＃７を有していた。このため、従来のブリッジ装置は、各Ｑ＃０〜＃７に格納された要求がＩＲであるかＮＩＲであるかを判別する処理を行う。
【０１２１】
一方、図１１に示すように、実施形態によるＩ／Ｏコントローラ１０は、ＩＲを格納するＩＲＱ＃０〜＃７とＮＩＲを格納するＮＩＲＱ３２とを個別に有する。このため、Ｉ／Ｏコントローラ１０は、各ＩＲＱ＃０〜＃７とＮＩＲＱ３２に格納された要求がＩＲであるかＮＩＲであるかを判別せずとも、適切な処理を行うことができる。結果として、Ｉ／Ｏコントローラ１０は、より効率的な処理を行うことができる。
【０１２２】
次に、図１２を用いて、実施形態によるＩ／Ｏコントローラ１０と従来のブリッジ装置とによるｅｎｑｕｅｕｅ処理を説明する。なお、図１２は、ｅｎｑｕｅｕｅ処理を説明するための図である。図１２に示す例では、従来のブリッジ装置は、実行順制御を行う要求であるＮＩＲと実行順制御を行わない要求であるＩＲとを区別せずに、いずれかの記憶領域Ｑ＃ｎに要求を格納していた。また、従来のブリッジ装置は、各要求による処理の対象となるデータが格納されたメモリアドレスを考慮していなかった。
【０１２３】
一方、図１２に示すように、実施形態のＩ／Ｏコントローラ１０は、実行順制御を行う要求であるＮＩＲをＮＩＲＱ３２に格納し、実行順制御を行わない要求であるＩＲをアドレス範囲に応じたＩＲＱ＃ｎに格納する。また、Ｉ／Ｏコントローラ１０は、一つのＩＲＱには、同一アドレス範囲内を処理対象とする要求のみを格納する。このため、Ｉ／Ｏコントローラ１０は、効率的に、異なるアドレス範囲を処理対象とする要求をシステムコントローラ４１へ送信することができる。
【０１２４】
次に、図１３を用いて、実施形態によるＩ／Ｏコントローラ１０と従来のブリッジ装置とによる要求の発行処理について説明する。図１３に示す例では、従来のブリッジ装置は、順序制御の要否を示すフラグと要求を各Ｑの間の到着順を示すフラグとに応じた順序で、実行順制御を行う要求（ＮＩＲ）を送信していた。また、従来のブリッジ装置は、実行順制御が不要な要求（ＩＲ）については、単に、各Ｑから要求を一つづつ発行していた。
【０１２５】
一方、実施形態によるＩ／Ｏコントローラ１０は、ＮＩＲＱ３２に記憶された要求、つまり実行順制御を行う要求（ＮＩＲ）をＮＩＲＱから一つずつ送信する。このため、Ｉ／Ｏコントローラ１０は、システムコントローラ４１からＮＩＲに対する応答を受信した場合には、次に送信すべきＮＩＲを即時に判別し、判別したＮＩＲをシステムコントローラ４１に対して送信することができる。また、Ｉ／Ｏコントローラ１０は、一つのＩＲＱから一つのＩＲをシステムコントローラ４１へ送信するので、次に送信すべきＩＲを即時に判断することができる。
【０１２６】
また、Ｉ／Ｏコントローラ１０は、ＮＩＲＱ３２の各エントリー＃０〜＃７が有するスコアボードの順序制御フラグに応じた順にＮＩＲとＩＲとを送信するので、同一のアドレス範囲に含まれるアドレスを処理対象とするＮＩＲとＩＲとを同時にシステムコントローラ４１へ送信することを防ぐ。結果として、Ｉ／Ｏコントローラ１０は、システムコントローラ４１が処理を行なわない時間を削減し、より効率的な処理を実行させることができる。
【０１２７】
次に、図１４を用いて、実施形態によるＩ／Ｏコントローラ１０と従来のブリッジ装置とによるｄｅｑｕｅｕｅ処理を説明する。なお、図１４は、ｄｅｑｕｅｕｅ処理を説明するための図である。図１４に示す例では、従来のブリッジ装置は、実行順制御を行う要求（ＮＩＲ）又は実行順制御が不要な要求（ＩＲ）に対する応答を受信した場合には、受信した応答に対応する要求が格納されていたＱ＃ｎから要求をｄｅｑｕｅｕｅしていた。
【０１２８】
一方、Ｉ／Ｏコントローラ１０は、実行順制御が不要な要求（ＩＲ）に対する応答を受信した場合には、受信した応答に対する要求が格納されていたＩＲＱから要求をｄｅｑｕｅｕｅする。またＩ／Ｏコントローラ１０は、実行順制御を行う要求（ＮＩＲ）に対する応答を受信した場合には、受信した応答に対する要求が格納されていた記憶領域を検索せずとも、対応する要求が格納されていたエントリーのバリッドに「０」を格納するだけでよい。つまり、Ｉ／Ｏコントローラ１０は、システムコントローラに送信したＮＩＲに対する応答を受信した場合には、ＮＩＲＱ３２が有するエントリーのうち、受信した応答に対応する要求が格納されていたエントリーのバリッドに「０」を格納するだけでｄｅｑｕｅｕｅ処理を終了させることができる。この結果、Ｉ／Ｏコントローラ１０は、少ない処理量でｄｅｑｕｅｕｅ処理を実行することができる。
【０１２９】
[補完装置の処理]
次に、図１５を用いて、ＲＯＵ３０の処理の流れを説明する。図１５は、実施例２に係るＲＯＵの処理の流れを説明するためのフローチャートである。図１５に示す例では、ＲＯＵは、ＦＩＦＯ２０から要求を取得する（ステップＳ１０１）。
【０１３０】
次に、ＲＯＵ３０は、フィラー３１を用いて、取得した要求をＩＲＱ＃０〜＃７のいずれか又はＮＩＲＱ３２に格納するｅｎｑｕｅｕｅ処理を行う（ステップＳ１０２）。次に、ＲＯＵ３０は、アービター３３を用いて、ＩＲＱ＃０〜＃７又はＮＩＲＱ３２に格納された要求の中から送信する要求を決定する調停処理を行う（ステップＳ１０３）。次に、ＲＯＵ３０は、トランスミッタ３４を用いて、ステップＳ１０３において決定した要求をシステムコントローラ４１へ送信する（ステップＳ１０４）。
【０１３１】
ここで、ＲＯＵ３０は、ＲＯＵから受信した要求に対する応答をシステムコントローラ４１が送信した場合には（ステップＳ１０５、Ｓ１０６）、レシーバ３５を用いて、システムコントローラ４１が送信した応答を受信する（ステップＳ１０７）。次に、ＲＯＵ３０は、受信した応答がＮＩＲに対する応答であるか否かを判別する（ステップＳ１０８）。
【０１３２】
そして、ＲＯＵ３０は、受信した応答がＮＩＲに対する応答であると判別した場合には（ステップＳ１０８肯定）、ＮＩＲＱ３２に対するｄｅｑｕｅｕｅ処理を実行する（ステップＳ１０９）。一方、ＲＯＵ３０は、受信した応答がＮＩＲに対する応答ではないと判別した場合には（ステップＳ１０８否定）、ＩＲＱに対するｄｅｑｕｅｕｅ処理を実行する（ステップＳ１１０）。その後、ＲＯＵ３０は、処理を終了する。
【０１３３】
次に、図１６を用いて、フィラー３１が実行する処理の流れを説明する。なお、図１６は、フィラー３１が実行する処理の流れを説明するためのフローチャートである。図１６に示す例では、フィラー３１は、ＦＩＦＯ２０から要求を取得した場合には、取得した要求が「ＤＭＡ  ｒｅａｄ」であるか否かを判別する（ステップＳ２０１）。そして、フィラー３１は、取得した要求が「ＤＭＡ  ｒｅａｄ」であると判別した場合には（ステップＳ２０１肯定）、取得した要求による処理の対象であるデータが格納されたメモリアドレスを内包するアドレス範囲と、「ＤＭＡ  ｗｒｉｔｅ  ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ」が格納されたＩＲＱのアドレス情報が一致するか否かを判別する（ステップＳ２０２）。
【０１３４】
次に、フィラー３１は、アドレス情報が一致しないと判別した場合には（ステップＳ２０２否定）、取得した要求のアドレス範囲とＮＩＲＱ３２に格納された各要求のアドレス範囲とが一致するか否かを判別する（ステップＳ２０３）。そして、フィラー３１は、アドレス範囲が一致しないと判別した場合には（ステップＳ２０３否定）、取得した要求と同じコマンド情報とアドレス情報とを有するＩＲＱがあるか否かを判別する（ステップＳ２０４）。
【０１３５】
フィラー３１は、取得した要求と同じコマンド情報とアドレス情報とを有するＩＲＱがあると判別した場合には、（ステップＳ２０４肯定）、取得した要求と同じコマンド情報とアドレス情報とを有するＩＲＱに空きエントリーがあるか否かを判別する（ステップＳ２０５）。そして、フィラー３１は、取得した要求と同じコマンド情報とアドレス情報とを有するＩＲＱに空きエントリーがあると判別した場合には（ステップＳ２０５肯定）、空きエントリーに取得した要求を格納するｅｎｑｕｅｕｅ処理を実行する（ステップＳ２０６）。その後、フィラー３１は、処理を終了する。
【０１３６】
一方、フィラー３１は、取得した要求と同じコマンド情報とアドレス情報とを有するＩＲＱに空きエントリーがないと判別した場合には（ステップＳ２０５否定）、空のＩＲＱがあるか否かを判別する（ステップＳ２０７）。そして、フィラー３１は、空のＩＲＱがあると判別した場合には（ステップＳ２０７肯定）、空のＩＲＱに取得した要求を格納するｅｎｑｕｅｕｅ処理を実行する（ステップＳ２０８）。その後、フィラー３１は、処理を終了する。
【０１３７】
一方、フィラー３１は、空のＩＲＱがないと判別した場合には（ステップＳ２０７否定）、空のＩＲＱができるまで処理をストールする（ステップＳ２０９）。また、フィラー３１は、取得した要求のアドレス範囲と各ＩＲＱ＃０〜＃７のいずれかのアドレス情報とが一致すると判別した場合には（ステップＳ２０２肯定）、アドレス情報が一致するＩＲＱの全ての要求が出力されるまで処理をストールする（ステップＳ２１０）。
【０１３８】
また、フィラー３１は、取得した要求のアドレス範囲とＮＩＲＱ３２に格納された要求のアドレス範囲とが一致すると判別した場合には（ステップＳ２０３肯定）、ＮＩＲＱ３２に格納された要求のうち、アドレス範囲が一致する全ての要求が出力されるまで処理をストールする（ステップＳ２１０）。
【０１３９】
また、フィラー３１は、取得した要求が「ＤＭＡ  ｒｅａｄ」であると判別した場合には（ステップＳ２０１否定）、取得した要求が「ＤＭＡ  ｗｒｉｔｅ  ｓｔｒｏｎｇｌｙ  ｏｒｄｅｒｅｄ」であるか否かを判別する（ステップＳ２１１）。そして、フィラー３１は、取得した要求が「ＤＭＡ  ｗｒｉｔｅ  ｓｔｒｏｎｇｌｙ  ｏｒｄｅｒｅｄ」であると判別した場合には（ステップＳ２１１肯定）、ＮＩＲＱ３２に空きエントリーがあるか否かを判別する（ステップＳ２１２）。
【０１４０】
その後、フィラー３１は、ＮＩＲＱ３２に空きエントリーがあると判別した場合には（ステップＳ２１２肯定）、取得した要求をＮＩＲＱ３２に格納するｅｎｑｕｅｕｅ処理を実行する（ステップＳ２１３）。また、フィラー３１は、スコアボードを更新し（ステップＳ２１４）、その後処理を終了する。
【０１４１】
また、フィラー３１は、ＮＩＲＱ３２に空きエントリーがないと判別した場合には（ステップＳ２１２否定）、ＮＩＲＱ３２に空きエントリーができるまで処理をストールする（ステップＳ２１５）。また、フィラー３１は、取得した要求が「ＤＭＡ  ｗｒｉｔｅ  ｓｔｒｏｎｇｌｙ  ｏｒｄｅｒｅｄ」ではないと判別した場合には（ステップＳ２１１否定）、上述したステップＳ２０４〜Ｓ２０９の処理を実行し、要求をＩＲＱにｅｎｑｕｅｕｅする。また、フィラー３１は、同じコマンド情報とアドレス情報とを有するＩＲＱがないと判別した場合には（ステップＳ２０４否定）、空のＩＲＱがあるか否かを判別する（ステップＳ２０７）。
【０１４２】
次に、図１７を用いて、アービター３３が実行する処理の流れについて説明する。なお、図１７は、アービターが実行する処理の流れを説明するためのフローチャートである。図１７に示す例では、まず、アービター３３は、ＮＩＲＱ３２のｓｔａｔｅ  ｍａｃｈｉｎｅ  ｈｅａｄを確認し、ＮＩＲＱ３２の先頭要求が発行可能状態であるか否かを判別する（ステップＳ３０１）。
【０１４３】
次に、アービター３３は、ＮＩＲＱ３２の先頭要求が発行可能状態であると判別した場合には（ステップＳ３０１肯定）、先頭要求が格納されたエントリーのスコアボードに順序制御フラグ「１」が立っているか否かを判別する（ステップＳ３０２）。そして、アービター３３は、先頭要求が格納されたエントリーのスコアボードに順序制御フラグ「１」が立っていないと判別した場合には（ステップＳ３０２否定）、ＮＩＲＱ３２の先頭要求が格納されたエントリーをトランスミッタ３４に通知する（ステップＳ３０３）。その後、アービター３３は、処理を終了する。
【０１４４】
また、アービター３３は、ＮＩＲＱ３２の先頭要求が発行可能状態ではないと判別した場合には（ステップＳ３０１否定）、応答待ちの要求が無く、かつ、発行可能状態の要求があるＩＲＱがあるか否かを判別する（ステップＳ３０４）。そして、アービター３３は、応答待ちの要求が無く、かつ、発行可能状態の要求があるＩＲＱがあると判別した場合には（ステップＳ３０４肯定）、ラウンドロビンアービトレーション方式を用いて、ｒｅａｄ要求をシステムコントローラに送信するか否かを判別する（ステップＳ３０５）。
【０１４５】
また、アービター３３は、ｒｅａｄ要求を送信すると判別した場合には（ステップＳ３０５肯定）、スコアボードを確認し、順序制御フラグが立っているＩＲＱがあるか否かを判別する（ステップＳ３０６）。そして、アービター３３は、順序制御フラグが立っているＩＲＱがあると判別した場合には（ステップＳ３０６肯定）、順序制御フラグが立っているＩＲＱのうち、格納されている要求の数が最も少ないＩＲＱをトランスミッタ３４に通知する（ステップＳ３０７）。その後、アービター３３は、処理を終了する。
【０１４６】
また、アービター３３は、スコアボードに順序制御フラグが立っているＩＲＱが無いと判別した場合には（ステップＳ３０６否定）、順序制御フラグが立っていないＩＲＱのうち、格納されている要求の数が最も少ないＩＲＱをトランスミッタ３４に通知する（ステップＳ３０８）。その後、アービター３３は、処理を終了する。
【０１４７】
また、アービター３３は、ｒｅａｄ要求を送信しないと判別した場合、つまり、ｗｒｉｔｅ要求を送信すると判別した場合には（ステップＳ３０５否定）、スコアボードを確認し、順序制御フラグが立っているＩＲＱがあるか否かを判別する（ステップＳ３０９）。そして、アービター３３は、順序制御フラグが立っているＩＲＱがあると判別した場合には（ステップＳ３０９肯定）、順序制御フラグが立っているＩＲＱのうち、格納された要求の数が最も多いＩＲＱをトランスミッタ３４に通知する（ステップＳ３１０）。その後、アービター３３は、処理を終了する。
【０１４８】
また、アービター３３は、順序制御フラグが立っているＩＲＱが無いと判別した場合には（ステップＳ３０９否定）、順序制御フラグが立っていないＩＲＱのうち、格納された要求の数が最も多いＩＲＱをトランスミッタ３４に通知する（ステップＳ３１１）。その後、アービター３３は、処理を終了する。
【０１４９】
また、アービター３３は、応答待ちの要求が無く、かつ、発行可能状態の要求があるＩＲＱがないと判別した場合には（ステップＳ３０４否定）、処理をストールする（ステップＳ３１２）。また、アービター３３は、先頭要求が格納されたエントリーのスコアボードに順序制御フラグ「１」が立っていると判別した場合には（ステップＳ３０２肯定）、応答待ちの要求が無く、かつ、発行可能状態の要求があるＩＲＱがあるか否かを判別する（ステップＳ３０４）。この後、上記と同様にＳ３０４以降の処理を実行する。
【０１５０】
次に、図１８を用いて、トランスミッタ３４が実行する処理の流れを説明する。図１８は、トランスミッタが実行する処理の流れを説明するための図である。図１８に示す例では、トランスミッタ３４は、アービター３３から送信対象となる要求が通知されたか否かを判別する（ステップＳ４０１）。
【０１５１】
そして、トランスミッタ３４は、アービターから要求を受信した場合には（ステップＳ４０１肯定）、システムコントローラ４１にトランスミッタが送信し、かつ、システムコントローラ４１からの応答が取得されていない要求の数がＯｕｔｓｔａｎｄｉｎｇ数未満か否かを判別する（ステップＳ４０２）。その後、トランスミッタ３４は、システムコントローラ４１にシステムコントローラ４１にトランスミッタが送信し、かつ、システムコントローラ４１からの応答が取得されていない要求の数がＯｕｔｓｔａｎｄｉｎｇ数未満であると判別した場合には（ステップＳ４０２肯定）、アービター３３から通知された要求をシステムコントローラに送信する（ステップＳ４０５）。その後、トランスミッタ３４は、処理を終了する。
【０１５２】
一方、トランスミッタ３４は、システムコントローラ４１にトランスミッタが送信し、かつ、システムコントローラ４１からの応答が取得されていない要求の数がＯｕｔｓｔａｎｄｉｎｇ数と同数であると判別した場合には（ステップＳ４０２否定）、システムコントローラ４１に送信した要求に対する応答を待つ（ステップＳ４０３）。そして、トランスミッタ３４は、システムコントローラ４１からの応答を受信した場合には（ステップＳ４０４）、アービター３３から通知された要求を送信する（ステップＳ４０５）。その後、トランスミッタ３４は、処理を終了する。また、トランスミッタ３４は、アービターから要求を受信しなかった場合には（ステップＳ４０１否定）、アービターからの要求を待機（アイドル）する（ステップＳ４０６）。
【０１５３】
次に、図１９を用いて、レシーバ３５が実行する処理の流れについて説明する。図１９は、レシーバが実行する処理の流れを説明するためのフローチャートである。図１９に示す例では、レシーバ３５は、システムコントローラ４１からの応答の受信処理を行い、応答が返されたか否かを判別する（ステップＳ５０１）。
【０１５４】
そして、レシーバ３５は、システムコントローラ４１から応答が返された場合には（ステップＳ５０１肯定）、応答がＮＩＲに対する応答であるか否かを判別する（ステップＳ５０２）。その後、レシーバ３５は、応答がＮＩＲに対する応答であると判別した場合には（ステップＳ５０２肯定）、ＮＩＲＱ３２に格納された先頭要求をｄｅｑｕｅｕｅする（ステップＳ５０３）。また、レシーバ３５は、応答がＮＩＲに対する応答ではないと判別した場合には（ステップＳ５０２否定）、対応するＩＲＱの先頭要求をｄｅｑｕｅｕｅする（ステップＳ５０４）。
【０１５５】
また、レシーバ３５は、システムコントローラ４１からの応答が返されていないと判別した場合には（ステップＳ５０１否定）、応答の受信まで待機（アイドル）する（ステップＳ５０５）。
【０１５６】
[実施例２の効果]
上述したように、Ｉ／Ｏコントローラ１０は、複数のＩＲＱ＃０〜＃７を有する。そして、Ｉ／Ｏコントローラ１０は、受信した要求による処理の対象となるデータが格納されたメモリアドレスを含むアドレス範囲を特定し、特定したアドレス範囲ごとに異なるＩＲＱへ要求を格納する。また、Ｉ／Ｏコントローラ１０は、ＩＲＱ＃０〜＃７に格納された要求がシステムコントローラ４１によって実行されているか否かを判別する。そして、Ｉ／Ｏシステムコントローラ４１は、格納された要求がシステムコントローラ４１によって実行されていないと判別されたＩＲＱに格納されている要求をシステムコントローラ４１へ送信する。つまり、Ｉ／Ｏシステムコントローラ４１は、それぞれ異なるアドレス範囲を処理対象とする複数の要求をシステムコントローラ４１に送信する。
【０１５７】
このため、Ｉ／Ｏコントローラ１０は、システムコントローラ４１に効率的な処理を実行させることができる。つまり、システムコントローラ４１は、それぞれ異なるアドレス範囲を処理対象とする複数の要求を並列に実行するので、後続の要求に係るスヌープを拒否せずに処理を実行することができる。この結果、システムコントローラ４１は、後続の要求を滞留させず、効率的に処理を実行することができる。
【０１５８】
また、Ｉ／Ｏコントローラ１０は、ＮＩＲＱ３２を有し、受信した要求が実行順制御を行う要求（ＮＩＲ）である場合には、受信した要求をＮＩＲＱ３２に格納する。そして、Ｉ／Ｏコントローラ１０は、ＮＩＲＱ３２に格納された先頭要求をシステムコントローラ４１へ出力する場合には、ＮＩＲＱ３２の先頭要求と同じアドレス範囲を処理の対象とする要求が実行されているか否かを判別する。その後、Ｉ／Ｏコントローラ１０は、ＮＩＲＱ３２の先頭要求と同じアドレス範囲を処理の対象とする要求がシステムコントローラによって実行されていないと判別した場合には、ＮＩＲＱ３２の先頭要求をシステムコントローラ４１へ送信する。
【０１５９】
このため、Ｉ／Ｏコントローラ１０は、ＮＩＲとＩＲとを中継する場合にも、それぞれ異なるアドレス範囲を処理対象とする複数の要求をシステムコントローラ４１に送信することができる。結果として、Ｉ／Ｏコントローラ１０は、システムコントローラ４１に効率的な処理を実行させることができる。
【０１６０】
また、Ｉ／Ｏコントローラ１０は、ＮＩＲを格納するＮＩＲＱ３２とＩＲを格納するＩＲＱ＃０〜＃７とを個別に有する。このため、Ｉ／Ｏコントローラ１０は、要求を送信する際にＮＩＲＱ３２やＩＲＱ＃０〜＃７に格納された要求がＮＩＲであるかＩＲであるかを判別せずとも、適切な種別の要求を送信することができる。つまり、Ｉ／Ｏコントローラ１０は、より効率的に送信処理を実行することができる。
【０１６１】
また、Ｉ／Ｏコントローラ１０は、ＮＩＲＱ３２に格納された要求のアドレス範囲及び要求を受信した順序と、各ＩＲＱ＃０〜＃７に格納された要求のアドレス範囲及び要求を受信した順序との関係を示すスコアボードを作成する。そして、Ｉ／Ｏコントローラ１０は、ＮＩＲＱ３２の先頭要求を送信する場合には、スコアボードを用いて、同一のアドレス範囲を処理対象とし、かつ、先頭要求よりも先に受信されたＩＲの有無を判別する。このため、Ｉ／Ｏコントローラ１０は、ＮＩＲＱ３２の先頭要求を送信する際に、先頭要求の実行順序を保持するとともに、各ＩＲＱ＃０〜＃７に格納されたアドレス情報を確認する処理を容易にし、効率的に送信処理を実行することができる。
【０１６２】
また、Ｉ／Ｏコントローラ１０は、システムコントローラ４１から要求を受信するレシーバ３５を有し、レシーバ３５が応答を受信した場合には、新たな要求をシステムコントローラ４１へ送信する。このため、Ｉ／Ｏコントローラ１０は、システムコントローラ４１に対して、常に所定の数（Ｏｕｔｓｔａｎｄｉｎｇ数）の要求を実行させることができる。
【実施例３】
【０１６３】
これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例３として本発明に含まれる他の実施例を説明する。
【０１６４】
（１）ＩＲＱの数について
上述したＩ／Ｏコントローラ１０は、８つのＩＲＱ＃０〜＃７を有していた。しかし、ＩＲＱの数はこれに限定されるものではなく、任意の数のＩＲＱを設置してよい。また、各ＩＲＱ＃０〜＃７は、４つのエントリーを有していた。しかし、エントリの数はこれに限定されるものではなく、任意の数のエントリーを設置してよい。また、ＮＩＲＱ３２は、８つのエントリー＃０〜＃７を有していた。しかし、ＮＩＲＱのエントリの数はこれに限定されるものではなく、任意の数のエントリーを設置してよい。
【０１６５】
（２）要求について
上述したＩ／Ｏコントローラ１０は、ＤＭＡ（Direct  Memory  Access）の要求を受信し、受信した要求をシステムコントローラ４１へ送信していた。しかし、要求の種類はこれに限定されるものではなく、ＤＭＡ以外にも、任意の形式の要求を処理することとしてよい。また、上述したＩ／Ｏ装置４０は、ＨＤＤ（Hard  Disk  Drive）から受信したＤＭＡの要求をＩ／Ｏコントローラへ送信していた。しかし、要求の発行元はこれに限定されるものではなく、Ｉ／Ｏ装置４０は、ＨＤＤ以外にも、任意の装置が発行したメモリに対する処理の要求をＩ／Ｏコントローラ１０へ送信することとしてもよい。
【０１６６】
（３）アドレス範囲の大きさについて
上述したシステムコントローラ４１は、メモリ４２に記憶された情報を２５６ｂｉｔでキャッシュしていた。このため、Ｉ／Ｏコントローラ１０は、一つのアドレス範囲を２５６ｂｉｔとした。しかし、アドレス範囲はこれに限定されるものではない。例えば、Ｉ／Ｏコントローラ１０は、システムコントローラ４１がメモリ４２に記憶された情報を５１２ｂｉｔ単位でキャッシュする場合には、一つのアドレス範囲を５１２ｂｉｔとすればよい。
【０１６７】
（４）プログラム
ところで、実施例１に係る転送装置１、および実施例２に係るＩ／Ｏコントローラ１０は、ハードウェアを利用して各種の処理を実現する場合を説明した。しかし、転送装置あるいはＩ／Ｏコントローラの実現の仕方はこれに限定されるものではなく、あらかじめ用意されたプログラムを転送装置が有するコンピュータで実行することによって実現するようにしてもよい。そこで、以下では、図２０を用いて、実施例１に示した転送装置と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図２０は、転送プログラムを実行するコンピュータの一例を説明するための図である。
【０１６８】
図２０に例示されたコンピュータ１００は、ＲＡＭ（Random  Access  Memory）１２０、ＲＯＭ（Read  Only  Memory）１３０、ＨＤＤ（Hard  Disk  Drive）１５０がバス１７０で接続される。また、図２０に例示されたコンピュータ１００は、ＣＰＵ（Central  Processing  Unit）１４０がバス１７０で接続される。さらにバス１７０には、要求を送受信するためのＩ／Ｏ（Input  Output）１６０が接続される。
【０１６９】
ＨＤＤ１５０には、要求記憶領域１５１があらかじめ設定される。ここで、要求記憶領域１５１は、独立した複数の記憶領域を有し、図１に示す記憶部Ａ２〜Ｃ４と同様の機能を有する。ＲＯＭ１３０には、特定プログラム１３１、格納プログラム１３２、判別プログラム１３３、送信プログラム１３４があらかじめ保持される。ＣＰＵ１４０が各プログラム１３１〜１３４をＲＯＭ１３０から読み出して実行することにより、図２０に示す例では、各プログラム１３１〜１３４は、特定プロセス１４１、格納プロセス１４２、判別プロセス１４３、送信プロセス１４４として機能する。なお、各プロセス１４１〜１４４は、図１に示した各部５〜８と同様の機能を発揮する。また、各プロセス１４１〜１４４は、実施例２または実施例３に係る各部と同等の機能を発揮するようにすることも可能である。
【０１７０】
なお、本実施例で説明した補完プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ＨＤ、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）、ＭＯ（Magneto  Optical  Disk）、ＤＶＤ（Digital  Versatile  Disk）などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【０１７１】
１  転送装置
２  記憶部Ａ
３  記憶部Ｂ
４  記憶部Ｃ
５  特定部
６  格納部
７  判別部
８  送信部
１０  Ｉ／Ｏコントローラ
２０  ＦＩＦＯ
３０  ＲＯＵ
３１  フィラー
３２  ＮＩＲＱ
３３  アービター
３４  トランスミッタ
３５  レシーバ
【図１】
0005625737.tif 000002
【図２】
0005625737.tif 000003
【図３】
0005625737.tif 000004
【図４】
0005625737.tif 000005
【図５】
0005625737.tif 000006
【図６】
0005625737.tif 000007
【図７】
0005625737.tif 000008
【図８】
0005625737.tif 000009
【図９】
0005625737.tif 000010
【図１０】
0005625737.tif 000011
【図１１】
0005625737.tif 000012
【図１２】
0005625737.tif 000013
【図１３】
0005625737.tif 000014
【図１４】
0005625737.tif 000015
【図１５】
0005625737.tif 000016
【図１６】
0005625737.tif 000017
【図１７】
0005625737.tif 000018
【図１８】
0005625737.tif 000019
【図１９】
0005625737.tif 000020
【図２０】
0005625737.tif 000021
【図２１】
0005625737.tif 000022
【図２２】
0005625737.tif 000023
【図２３】
0005625737.tif 000024
【図２４】
0005625737.tif 000025
【図２５】
0005625737.tif 000026
【図２６】
0005625737.tif 000027
【図２７】
0005625737.tif 000028