(57)【要約】【課題】メインメモリとは別に設けられた、高速でアクセス可能なディスクリプタ記憶用の記憶部の容量を上げることなくディスクリプタ転送にかかるレイテンシを下げることを可能とする。【解決手段】プロセッサ２が、メインメモリ５又はメインメモリ５とは別に設けられたディスクリプタ記憶用の記憶部であるディスクリプタ格納部１２にディスクリプタを記憶するとともに、ディスクリプタ転送装置１に対して、ディスクリプタの読み出し元を指示する。そして、ディスクリプタ転送装置１が、プロセッサ２からの上記指示に従って、メインメモリ５又はディスクリプタ格納部１２からディスクリプタを読み出し、読み出されたディスクリプタをＩ／Ｏコントローラ３に対して転送する。【選択図】図１
2010176442.tif 000002
【特許請求の範囲】
【請求項１】
Ｉ／Ｏデバイスに処理の実行を指示するＩ／Ｏコントローラに対して、前記実行すべき処理に関する情報を示すディスクリプタを転送するディスクリプタ転送装置であって、
前記ディスクリプタ転送装置が、
ディスクリプタを記憶する記憶手段と、
プロセッサからのディスクリプタ読み出し元に関する指示に従って、ディスクリプタを記憶するメインメモリ又は前記記憶手段から指示されたディスクリプタを読み出すディスクリプタ読み出し手段と、
前記読み出されたディスクリプタを前記Ｉ／Ｏコントローラに対して転送するディスクリプタ転送手段とを備える
ことを特徴とするディスクリプタ転送装置。
【請求項２】
前記メインメモリに記憶される前記ディスクリプタが、ディスクリプタの読み出し元を示す読み出し元情報を有し、
前記ディスクリプタ転送装置が備えるディスクリプタ読み出し手段が、前記メインメモリから読み出したディスクリプタが有する読み出し元情報に基づいて、該ディスクリプタを前記Ｉ／Ｏコントローラに対して転送するか、又は、前記記憶手段へのディスクリプタの書き込みを待ち合わせた上で該記憶手段へ書き込まれたディスクリプタを前記Ｉ／Ｏコントローラに対して転送するかを判断する
ことを特徴とする請求項１記載のディスクリプタ転送装置。
【請求項３】
前記メインメモリ又は前記記憶部に記憶される前記ディスクリプタが、自ディスクリプタの次に読み出し対象となるディスクリプタへのポインタを有し、
前記ディスクリプタ転送装置が備えるディスクリプタ読み出し手段が、前記ディスクリプタが有するポインタに基づいて、ディスクリプタの読み出し元を判断する
ことを特徴とする請求項１記載のディスクリプタ転送装置。
【請求項４】
Ｉ／Ｏデバイスに処理の実行を指示するＩ／Ｏコントローラであって、
実行すべき処理の内容を示すディスクリプタをＩ／Ｏコントローラに転送するディスクリプタ転送装置と、
前記ディスクリプタ転送装置から転送されたディスクリプタに基づいて、前記Ｉ／Ｏデバイスに処理の実行を指示する実行指示手段とを備え、
前記ディスクリプタ転送装置が、
ディスクリプタを記憶する記憶手段と、
プロセッサからのディスクリプタ読み出し元に関する指示に従って、ディスクリプタを記憶するメインメモリ又は前記記憶手段から指示されたディスクリプタを読み出すディスクリプタ読み出し手段と、
前記読み出されたディスクリプタを前記Ｉ／Ｏコントローラに対して転送するディスクリプタ転送手段とを備える
ことを特徴とするＩ／Ｏコントローラ。
【請求項５】
前記メインメモリに記憶される前記ディスクリプタが、ディスクリプタの読み出し元を示す読み出し元情報を有し、
前記ディスクリプタ転送装置が備えるディスクリプタ読み出し手段が、前記メインメモリから読み出したディスクリプタが有する読み出し元情報に基づいて、該ディスクリプタを前記Ｉ／Ｏコントローラに対して転送するか、又は、前記記憶手段へのディスクリプタの書き込みを待ち合わせた上で該記憶手段へ書き込まれたディスクリプタを前記Ｉ／Ｏコントローラに対して転送するかを判断する
ことを特徴とする請求項４記載のＩ／Ｏコントローラ。
【請求項６】
前記Ｉ／Ｏデバイスによる前記ディスクリプタが示す処理の実行が完了したことを示す情報を前記メインメモリに設定する手段を備える
ことを特徴とする請求項５記載のＩ／Ｏコントローラ。
【請求項７】
Ｉ／Ｏデバイスに処理の実行を指示するＩ／Ｏコントローラに対して、前記実行すべき処理の内容を示すディスクリプタを転送するディスクリプタ転送装置におけるディスクリプタ転送方法であって、
プロセッサが、メインメモリ又は所定の記憶部に前記ディスクリプタを記憶するとともに、前記ディスクリプタ転送装置に対して、前記ディスクリプタ読み出し元を指示し、
前記ディスクリプタ転送装置が、前記プロセッサからの前記指示に従って、前記メインメモリ又は前記記憶部から前記ディスクリプタを読み出し、前記読み出されたディスクリプタを前記Ｉ／Ｏコントローラに対して転送する
ことを特徴とするディスクリプタ転送方法。
【請求項８】
前記メインメモリに記憶される前記ディスクリプタが、ディスクリプタの読み出し元を示す読み出し元情報を有し、
前記ディスクリプタ転送装置が、前記メインメモリから読み出したディスクリプタが有する読み出し元情報に基づいて、該ディスクリプタを前記Ｉ／Ｏコントローラに対して転送するか、又は、前記記憶手段へのディスクリプタの書き込みを待ち合わせた上で該記憶手段へ書き込まれたディスクリプタを前記Ｉ／Ｏコントローラに対して転送するかを判断する
ことを特徴とする請求項７記載のディスクリプタ転送方法。
【請求項９】
前記Ｉ／Ｏコントローラが、前記Ｉ／Ｏデバイスによる前記ディスクリプタが示す処理の実行が完了したことを示す情報を前記メインメモリに設定する
ことを特徴とする請求項８記載のディスクリプタ転送方法。
【請求項１０】
前記メインメモリ又は前記記憶部に記憶される前記ディスクリプタが、自ディスクリプタの次に読み出し対象となるディスクリプタへのポインタを有し、
前記ディスクリプタ転送装置が、前記ディスクリプタが有するポインタに基づいて、ディスクリプタの読み出し元を判断する
ことを特徴とする請求項７記載のディスクリプタ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディスクリプタ転送装置、Ｉ／Ｏコントローラ、及びディスクリプタ転送方法に関する。
【背景技術】
【０００２】
ディスクやネットワークインタフェースなどのＩ／Ｏデバイス（Input Output device ：入出力装置）にデータ転送、パケット送信を行なわせる際、プロセッサは、ディスクリプタをＩ／Ｏデバイスのコントローラ（以下、Ｉ／Ｏコントローラ）に渡す。ディスクリプタは、Ｉ／Ｏデバイスに行なわせる処理の種類や、データ転送の対象となるメインメモリのアドレスなどを持つ。Ｉ／Ｏコントローラは、このディスクリプタの情報を元にＩ／Ｏデバイスに対し指示された処理を行わせる。
【０００３】
Ｉ／Ｏコントローラへディスクリプタを渡す、言い換えると転送する技術として、例えば、プロセッサが、Ｉ／Ｏコントローラが備えるディスクリプタ格納部にディスクリプタを書き込み、このディスクリプタ格納部に書き込まれたディスクリプタをＩ／Ｏコントローラに転送する方法がある。ディスクリプタ格納部は、メインメモリとは別に設けられた、メモリアクセスよりも高速でアクセス可能な記憶部である。また、例えば、Ｉ／Ｏコントローラがプロセッサからの要求を受け、メインメモリに格納されたディスクリプタを読み出す方法がある。
【０００４】
なお、ＤＭＡコントローラが、ＣＰＵによってＴＤチェーン格納部に書き込まれたＴＤチェーンに含まれる複数の転送ディスクリプタを順次処理して、メインメモリとＩ／Ｏデバイスとの間の一連のデータ転送を直接メモリアクセスによって実現するデータ転送方法が提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−２５９８９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
前述したような、プロセッサが、ディスクリプタをＩ／Ｏコントローラが備えるディスクリプタ格納部に書き込んだ上で、このディスクリプタをＩ／Ｏコントローラに転送する方法によれば、ディスクリプタ転送にかかるレイテンシを下げることができる。しかし、この方法を実現するためには、Ｉ／Ｏコントローラが、比較的大きな容量を持つディスクリプタ格納部を備える必要がある。また、Ｉ／Ｏコントローラがプロセッサからの要求を受け、メインメモリに格納されたディスクリプタを読み出す方法では、メインメモリからのディスクリプタの読み出しに時間がかかるため、ディスクリプタ転送にかかるレイテンシが高くなってしまう。
【０００７】
本発明は、メインメモリとは別に設けられた、高速でアクセス可能なディスクリプタ記憶用の記憶部の容量を上げることなくディスクリプタ転送にかかるレイテンシを下げることを可能とするディスクリプタ転送装置の提供を目的とする。
【０００８】
また、本発明は、メインメモリとは別に設けられた、高速でアクセス可能なディスクリプタ記憶用の記憶部の容量を上げることなくディスクリプタ転送にかかるレイテンシを下げることを可能とするＩ／Ｏコントローラの提供を目的とする。
【０００９】
また、本発明は、メインメモリとは別に設けられた、高速でアクセス可能なディスクリプタ記憶用の記憶部の容量を上げることなくディスクリプタ転送にかかるレイテンシを下げることを可能とするディスクリプタ転送方法の提供を目的とする。
【課題を解決するための手段】
【００１０】
本ディスクリプタ転送装置は、Ｉ／Ｏデバイスに処理の実行を指示するＩ／Ｏコントローラに対して、前記実行すべき処理に関する情報を示すディスクリプタを転送するディスクリプタ転送装置であって、前記ディスクリプタ転送装置が、ディスクリプタを記憶する記憶手段と、プロセッサからのディスクリプタ読み出し元に関する指示に従って、ディスクリプタを記憶するメインメモリ又は前記記憶手段から指示されたディスクリプタを読み出すディスクリプタ読み出し手段と、前記読み出されたディスクリプタを前記Ｉ／Ｏコントローラに対して転送するディスクリプタ転送手段とを備える。
【００１１】
また、本Ｉ／Ｏコントローラは、Ｉ／Ｏデバイスに処理の実行を指示するＩ／Ｏコントローラであって、実行すべき処理の内容を示すディスクリプタをＩ／Ｏコントローラに転送するディスクリプタ転送装置と、前記ディスクリプタ転送装置から転送されたディスクリプタに基づいて、前記Ｉ／Ｏデバイスに処理の実行を指示する実行指示手段とを備え、
前記ディスクリプタ転送装置が、ディスクリプタを記憶する記憶手段と、プロセッサからのディスクリプタ読み出し元に関する指示に従って、ディスクリプタを記憶するメインメモリ又は前記記憶手段から指示されたディスクリプタを読み出すディスクリプタ読み出し手段と、前記読み出されたディスクリプタを前記Ｉ／Ｏコントローラに対して転送するディスクリプタ転送手段とを備える。
【００１２】
また、本ディスクリプタ転送方法は、Ｉ／Ｏデバイスに処理の実行を指示するＩ／Ｏコントローラに対して、前記実行すべき処理の内容を示すディスクリプタを転送するディスクリプタ転送装置におけるディスクリプタ転送方法であって、プロセッサが、メインメモリ又は所定の記憶部に前記ディスクリプタを記憶するとともに、前記ディスクリプタ転送装置に対して、前記ディスクリプタ読み出し元を指示し、前記ディスクリプタ転送装置が、前記プロセッサからの前記指示に従って、前記メインメモリ又は前記記憶部から前記ディスクリプタを読み出し、前記読み出されたディスクリプタを前記Ｉ／Ｏコントローラに対して転送する。
【発明の効果】
【００１３】
本ディスクリプタ転送装置及び本ディスクリプタ転送方法においては、プロセッサが、メインメモリ又は所定の記憶部にディスクリプタを記憶するとともに、ディスクリプタ転送装置に対して、ディスクリプタの読み出し元を指示し、ディスクリプタ転送装置が、プロセッサからの上記指示に従って、メインメモリ又は上記記憶部からディスクリプタを読み出し、読み出されたディスクリプタをＩ／Ｏコントローラに対して転送する。また、本Ｉ／Ｏコントローラは、プロセッサからのディスクリプタの読み出し元に関する指示に従って、メインメモリ又は所定の記憶手段からディスクリプタを読み出してＩ／Ｏコントローラに転送するディスクリプタ転送装置と、転送されたディスクリプタに基づいて、Ｉ／Ｏデバイスに処理の実行を指示する実行指示手段とを備える。
【００１４】
本ディスクリプタ転送装置、本Ｉ／Ｏコントローラ、及び本ディスクリプタ転送方法によれば、プロセッサからのディスクリプタの読み出し元に関する指示が上記メインメモリとは別に設けられた、高速でアクセス可能な所定の記憶部からディスクリプタを読み出すことを示す場合には、ディスクリプタ転送装置がこの記憶部からディスクリプタを読み出してＩ／Ｏコントローラに転送するので、この記憶部の容量を上げることなくディスクリプタ転送にかかるレイテンシを下げることを可能となる。
【図面の簡単な説明】
【００１５】
【図１】本実施形態の装置構成例を示す図である。
【図２】本実施形態のディスクリプタ転送装置によるディスクリプタ転送方法と、本実施形態によらないディスクリプタ転送方法との比較を説明する図である。
【図３】本発明の実施例１を説明する図である。
【図４】本発明の実施例１におけるディスクリプタ転送装置の動作処理フローの例を示す図である。
【図５】本発明の実施例１のディスクリプタ転送処理シーケンス例を説明する図である。
【図６】本発明の実施例２を説明する図である。
【図７】本発明の実施例３を説明する図である。
【図８】本発明の実施例３における、ディスクリプタ読み出し部の動作処理フローの例を示す図である。
【発明を実施するための形態】
【００１６】
図１は、本実施形態の装置構成例を示す図である。ディスクリプタ転送装置１は、プロセッサ２の指示に従って、メインメモリ５又はディスクリプタ格納部１２からディスクリプタを読み出し、読み出されたディスクリプタをＩ／Ｏコントローラ３に対して転送する処理装置である。ディスクリプタは、Ｉ／Ｏデバイス４が実行すべき処理に関する情報であり、例えば、Ｉ／Ｏデバイス４に実行させる処理の種類や、データ転送の対象となるメインメモリのアドレスを含む。図１には、Ｉ／Ｏコントローラ３がディスクリプタ転送装置１を備える構成を示すが、ディスクリプタ転送装置１がＩ／Ｏコントローラ３とは別個独立の装置として設けられていてもよい。プロセッサ２は、パス６を通じて、メインメモリ５のディスクリプタ格納領域５１又はディスクリプタ転送装置１が備えるディスクリプタ格納部１２にディスクリプタを記憶するとともに、ディスクリプタ転送装置１に対して、ディスクリプタの読み出し元を指示する。
【００１７】
Ｉ／Ｏコントローラ３は、ディスクリプタ転送装置１から転送されたディスクリプタが示す、実行すべき処理の実行を、パス６を通じてＩ／Ｏデバイス４に指示する。具体的には、Ｉ／Ｏコントローラ３が備える実行指示部３１が、ディスクリプタ転送装置１が備えるディスクリプタ読み出し部１１から転送されたディスクリプタを受信し、Ｉ／Ｏデバイス４に対して転送されたディスクリプタに対応する処理の実行を指示する。Ｉ／Ｏデバイス４は、Ｉ／Ｏコントローラ３から指示された処理を実行する。
【００１８】
ディスクリプタ転送装置１は、ディスクリプタ読み出し部１１とディスクリプタ格納部１２とを備える。ディスクリプタ読み出し部１１は、プロセッサ２からのディスクリプタの読み出し元に関する指示に従って、ディスクリプタが記憶されるメインメモリ５又はディスクリプタ格納部１２から指示に対応するディスクリプタを読み出すディスクリプタ読み出し手段としての機能を有する。また、ディスクリプタ読み出し部１１は、読み出されたディスクリプタをＩ／Ｏコントローラ３が備える実行指示部３１に対して転送するディスクリプタ転送手段としての機能を有する。Ｉ／Ｏコントローラ３がＩ／Ｏデバイス４に対してディスクリプタが示す処理の実行を指示している間に、後続のディスクリプタを読み出し元から読み出す機能、言い換えるとプリフェッチ機能をディスクリプタ読み出し部１１に備えるようにしてもよい。ディスクリプタ格納部１２は、メインメモリ５とは別に設けられた、メモリアクセスよりも高速でアクセス可能な記憶部であり、プロセッサ２によって書き込まれるディスクリプタを記憶する。
【００１９】
図２は、本実施形態のディスクリプタ転送装置によるディスクリプタ転送方法と、本実施形態によらないディスクリプタ転送方法との比較を説明する図である。図２（Ａ）は、本実施形態によらないディスクリプタ転送方法を示し、図２（Ｂ）は、本実施形態のディスクリプタ転送装置１によるディスクリプタ転送方法を示す。なお、図２（Ａ）および図２（Ｂ）では、先頭のディスクリプタであるＤ１、後続のディスクリプタであるＤ２、Ｄ３という３つのディスクリプタをＩ／Ｏコントローラ３に転送する場合を例にとって説明する。また、本実施形態において、プロセッサ２（図１を参照）は、ディスクリプタ転送装置１に対して、ディスクリプタＤ１をディスクリプタ格納部１２から読み出すように指示し、ディスクリプタＤ２とＤ３をメインメモリ５から読み出すように指示するものとする。
【００２０】
図２（Ａ）に示す例では、プロセッサが時刻ｔ0 〜ｔ3 の間にメインメモリにディスクリプタＤ１乃至Ｄ３を順次書き込み、時刻ｔ3 〜ｔ4 の間にディスクリプタ転送装置に対してディスクリプタの読み出しを指示する。ディスクリプタ転送装置は時刻ｔ4 〜ｔ6 の間にディスクリプタＤ１をメインメモリから読み出し、読みだしたディスクリプタＤ１を時刻ｔ6 〜ｔ7 の間にＩ／Ｏコントローラに転送する。そして、Ｉ／Ｏコントローラが、時刻ｔ7 〜時刻ｔ9 の間にディスクリプタＤ１に基づく処理の実行を指示する実行指示データをＩ／Ｏデバイスに送信する。ディスクリプタ転送装置は、時刻ｔ7 〜ｔ8 の間にディスクリプタＤ２をメインメモリから読み出し、読み出したディスクリプタＤ２を時刻ｔ9 〜ｔ10の間にＩ／Ｏコントローラに転送する。そして、Ｉ／Ｏコントローラが、時刻ｔ10〜ｔ12の間に、ディスクリプタＤ２に基づく実行指示データをＩ／Ｏデバイスに送信する。また、ディスクリプタ転送装置は、時刻ｔ10〜時刻ｔ11の間にディスクリプタＤ３をメインメモリから読み出し、読みだしたディスクリプタＤ３を時刻ｔ12〜ｔ13の間にＩ／Ｏコントローラに転送し、その後、Ｉ／ＯコントローラがディスクリプタＤ３に基づく実行指示データをＩ／Ｏデバイスに送信する。
【００２１】
一方、図２（Ｂ）に示すように、本実施形態では、例えば図１に示すプロセッサ２が、時刻ｔ0 〜ｔ1 の間にディスクリプタ格納部１２にディスクリプタＤ１を書き込み、時刻ｔ1 〜ｔ3 の間にメインメモリ５にディスクリプタＤ２とＤ３を書き込む。そして、プロセッサ２が、時刻ｔ3 〜ｔ4 の間にディスクリプタ転送装置１に対してディスクリプタの読み出しを指示する。具体的には、プロセッサ２は、ディスクリプタ転送装置１に対して、ディスクリプタＤ１をディスクリプタ格納部１２から読み出すように指示し、ディスクリプタＤ２とＤ３をメインメモリ５から読み出すように指示する。
【００２２】
次に、ディスクリプタ転送装置１は、時刻ｔ4 〜ｔ4Aの間にディスクリプタＤ１をディスクリプタ格納部１２から読み出し、読み出したディスクリプタＤ１を時刻ｔ4A〜ｔ5 の間にＩ／Ｏコントローラ３に転送する。そして、Ｉ／Ｏコントローラ３が、時刻ｔ5 〜時刻ｔ8Aの間にディスクリプタＤ１に基づく処理の実行を指示する実行指示データをＩ／Ｏデバイス４に送信する。
【００２３】
また、ディスクリプタ転送装置１が、時刻ｔ5 〜ｔ7Aの間にディスクリプタＤ２をメインメモリから読み出し、読み出したディスクリプタＤ２を時刻ｔ8A〜ｔ8Bの間にＩ／Ｏコントローラ３に転送する。そして、Ｉ／Ｏコントローラ３が、時刻ｔ8B〜ｔ11A の間に、ディスクリプタＤ２に基づく実行指示データをＩ／Ｏデバイス４に送信する。また、ディスクリプタ転送装置１が、時刻ｔ8B〜ｔ10A の間にディスクリプタＤ３をメインメモリから読み出し、読み出したディスクリプタＤ３を時刻ｔ11A 〜ｔ11B の間にＩ／Ｏコントローラ３に転送し、その後、Ｉ／Ｏコントローラ３がディスクリプタＤ３に基づく実行指示データをＩ／Ｏデバイス４に送信する。
【００２４】
本実施形態によれば、プロセッサ２がディスクリプタＤ１の読み出しを指示してからＩ／Ｏコントローラ３が実行指示データの送信を開始するまでの時間が、図２（Ａ）に示す例に比べてｔ7 −ｔ5 の時間分短縮される。すなわち、本実施形態では、プロセッサ２がディスクリプタ転送装置１に対して、先頭のディスクリプタＤ１をディスクリプタ格納部１２から読み出すように指示するため、ディスクリプタＤ１をメインメモリから読み出す図２（Ａ）の例と比べて、ディスクリプタ転送にかかるレイテンシを下げることができる。また、本実施形態では、ディスクリプタ転送装置１が、後続のディスクリプタＤ２を、Ｉ／Ｏコントローラ３が先頭のディスクリプタＤ１に基づく実行指示データを送信している間にメインメモリ５から読み出すので、メモリリードにかかるレイテンシを隠蔽することができる。その結果、ディスクリプタ転送にかかるレイテンシを更に下げることができる。また、本実施形態では、プロセッサ２が後続のディスクリプタＤ２、Ｄ３をメインメモリ５に書き込むので、ディスクリプタ格納部１２の容量が小さくて済み、プロセッサ２がディスクリプタ格納部１２の空き領域が確保されるまでディスクリプタの書き込みを待ち合わせることもない。
【００２５】
図３は、本発明の実施例１を説明する図である。実施例１では、プロセッサ２が、ディスクリプタを、該ディスクリプタに対応するＳｏｕｒｃｅ  Ｔｙｐｅ（例えば、図３中に示すＳｏｕｒｃｅ  Ｔｙｐｅ＝１）とともにメインメモリ５のディスクリプタ格納領域５１に書き込み、ディスクリプタ転送装置１Ａに対して、メインメモリ５からのディスクリプタの読み出しを指示する。「Ｓｏｕｒｃｅ  Ｔｙｐｅ＝１」は、Ｓｏｕｒｃｅ  Ｔｙｐｅの値が１であることを示す。ディスクリプタ転送装置１Ａのディスクリプタ読み出し部１１Ａが、メインメモリ５からディスクリプタを読み出して、読み出したディスクリプタのＳｏｕｒｃｅ  Ｔｙｐｅを取得し、取得されたＳｏｕｒｃｅ  Ｔｙｐｅの値に基づいて、読み出したディスクリプタをＩ／Ｏコントローラ３Ａに対して転送するか、又は、ディスクリプタ格納部１２へのディスクリプタの書き込みを待ち合わせた上でディスクリプタ格納部１２へ書き込まれたディスクリプタをＩ／Ｏコントローラ３Ａに対して転送するかを判断する。Ｓｏｕｒｃｅ  Ｔｙｐｅは、ディスクリプタの読み出し元を示すフラグであり、Ｓｏｕｒｃｅ  Ｔｙｐｅ格納用の所定のフィールドに格納される。なお、図３中に示すディスクリプタ格納部１２に書き込まれているディスクリプタＥ１は、Ｉ／Ｏコントローラ３Ａへの転送対象となる先頭のディスクリプタ、Ｅ２、Ｅ３は後続のディスクリプタである。実施例１においては、Ｅ１、Ｅ２、Ｅ３の各々に対応するＳｏｕｒｃｅ  Ｔｙｐｅの値は０であるものとする。
【００２６】
図４は、実施例１におけるディスクリプタ転送装置の動作処理フローの例を示す図である。実施例１においては、ディスクリプタ転送装置１Ａは、プロセッサ２からディスクリプタの読み出し指示を受けると、メインメモリ５からディスクリプタを読み出し、読み出されたディスクリプタのＳｏｕｒｃｅ  Ｔｙｐｅに基づいて、読み出したディスクリプタをＩ／Ｏコントローラ３Ａに転送するか、読み出したディスクリプタをＩ／Ｏコントローラ３Ａに転送せずに、プロセッサ２によるディスクリプタ格納部１２へのディスクリプタの書き込みを待ち合わせるかを判断する。具体的には、後述するように、ディスクリプタ転送装置１Ａが、メインメモリ５から読み出したディスクリプタのＳｏｕｒｃｅ  Ｔｙｐｅが０でないと判断した場合に、転送対象のディスクリプタの読み出し元がディスクリプタ格納部１２であると判断して、プロセッサ２によるディスクリプタ格納部１２へのディスクリプタの書き込みを待ち合わせる。そして、ディスクリプタ転送装置１Ａは、ディスクリプタがディスクリプタ格納部１２へ書き込まれたことを契機として、書き込まれたディスクリプタをディスクリプタ格納部１２から読み出す。一方、ディスクリプタ転送装置１Ａが、メインメモリ５から読み出したディスクリプタのＳｏｕｒｃｅ  Ｔｙｐｅが０であると判断した場合に、転送対象のディスクリプタがメインメモリ５から読み出されたディスクリプタであると判断、すなわち、ディスクリプタの読み出し元がメインメモリ５であると判断して、読み出されたディスクリプタをＩ／Ｏコントローラ３Ａに転送する。
【００２７】
まず、ディスクリプタ読み出し部１１Ａが、プロセッサ２からディスクリプタの読み出し指示を受け、例えば、自身が持つディスクリプタの格納位置を示すポインタに基づいて、メインメモリ５のディスクリプタ格納領域５１に格納されているディスクリプタを読み出す（ステップＳ１）。次に、ディスクリプタ読み出し部１１Ａが、読み出されたディスクリプタが有効なディスクリプタであるかを判断する（ステップＳ２）。ディスクリプタ読み出し部１１Ａは、ステップＳ１においてディスクリプタが読み出された領域がプロセッサ２がディスクリプタを書き込んだ領域であるかを判断し、判断結果に基づいて、読み出されたディスクリプタが有効なディスクリプタであるかを判断する。ディスクリプタ読み出し部１１Ａが、ステップＳ１においてプロセッサ２が書き込んでいない領域を読み出したと判断した場合、読み出されたディスクリプタが有効なディスクリプタでないと判断して、ステップＳ８に進む。ディスクリプタ読み出し部１１Ａが、ステップＳ１においてプロセッサ２が書き込んだ領域を読み出したと判断した場合、読み出されたディスクリプタが有効なディスクリプタであると判断して、ステップＳ３に進む。
【００２８】
次に、ディスクリプタ読み出し部１１Ａが、ステップＳ１において読み出されたディスクリプタのＳｏｕｒｃｅ  Ｔｙｐｅが０であるかを判断する（ステップＳ３）。ディスクリプタ読み出し部１１Ａが、ディスクリプタのＳｏｕｒｃｅ  Ｔｙｐｅが０であると判断した場合、ディスクリプタ読み出し部１１Ａは、転送対象のディスクリプタの読み出し元がメインメモリ５であると判断する。そして、ディスクリプタ読み出し部１１Ａが、Ｉ／Ｏコントローラ３Ａがディスクリプタ処理中、つまりディスクリプタに基づく実行指示データの送信処理中でないことを確認した上で、ステップＳ１において読み出されたディスクリプタをＩ／Ｏコントローラ３Ａに転送する（ステップＳ４）。なお、ディスクリプタ読み出し部１１Ａが、Ｉ／Ｏコントローラ３Ａがディスクリプタ処理中であることを確認した場合、ディスクリプタ読み出し部１１Ａは、Ｉ／Ｏコントローラ３Ａがディスクリプタ処理を終了するまでディスクリプタを保持しておく。
【００２９】
次に、ディスクリプタ読み出し部１１Ａが、ディスクリプタの格納位置を示すポインタを更新し、メインメモリのディスクリプタ格納領域５１に書き込まれている後続のディスクリプタを読み出し（ステップＳ５）、ステップＳ２に戻る。
【００３０】
ステップＳ３において、ディスクリプタ読み出し部１１Ａが、ディスクリプタのＳｏｕｒｃｅ  Ｔｙｐｅが０でないと判断した場合、ディスクリプタ読み出し部１１Ａは、転送対象のディスクリプタの読み出し元がディスクリプタ格納部１２であると判断する。すなわち、ディスクリプタ読み出し部１１Ａは、ステップＳ１において読み出されたディスクリプタをＩ／Ｏコントローラへ転送せず、プロセッサ２からディスクリプタ格納部１２へのディスクリプタの書き込みを待ち合わせる（ステップＳ６）。ディスクリプタ読み出し部１１Ａは、ディスクリプタがディスクリプタ格納部１２に書き込まれたことを契機として、ディスクリプタ格納部１２からディスクリプタを読み出し、Ｉ／Ｏコントローラ３Ａへ転送する（ステップＳ７）。そして、ディスクリプタ読み出し部１１Ａが、プロセッサ２からのディスクリプタ読み出し指示を待ち合わせる（ステップＳ８）。
【００３１】
図５は、実施例１のディスクリプタ転送処理シーケンス例を説明する図である。まず、図３に示すプロセッサ２が、時刻ｔ0 〜ｔ1 の間にメインメモリ５にＳｏｕｒｃｅ  Ｔｙｐｅが１であるディスクリプタを書き込み、時刻ｔ1 〜ｔ2 の間にディスクリプタ転送装置１Ａに対してディスクリプタの読み出しを指示する。読み出し指示を受けたディスクリプタ転送装置１Ａのディスクリプタ読み出し部１１Ａが、時刻ｔ2 〜ｔ3 の間にメインメモリ５からディスクリプタを読み出す。ディスクリプタ読み出し部１１Ａは、読み出されたディスクリプタのＳｏｕｒｃｅ  Ｔｙｐｅが１である、すなわち、Ｓｏｕｒｃｅ  Ｔｙｐｅが０でないと判断し、図４のステップＳ６を参照して前述したように、プロセッサ２からディスクリプタ格納部１２へのディスクリプタの書き込みを待ち合わせる。
【００３２】
次に、プロセッサ２が、時刻ｔ4 〜ｔ5 に先頭のディスクリプタＥ１をディスクリプタ格納部１２に書き込むと、ディスクリプタＥ１の書き込みが終了した時刻である時刻ｔ5 に、ディスクリプタ読み出し部１１Ａがディスクリプタ格納部１２からのディスクリプタＥ１の読み出しを開始する。そして、ディスクリプタ読み出し部１１Ａは、時刻ｔ6 〜ｔ7 の間にディスクリプタＥ１をＩ／Ｏコントローラ３Ａに転送する。そして、Ｉ／Ｏコントローラ３Ａが、時刻ｔ7 〜時刻11の間にディスクリプタＥ１に基づく処理の実行を指示するデータ、つまり実行指示データをＩ／Ｏデバイス４に送信する。
【００３３】
後続のディスクリプタであるＥ２とＥ３については、ディスクリプタ転送装置１Ａが、時刻ｔ5 〜ｔ8 の間に、ディスクリプタＥ２とＥ３とをメインメモリ５に書き込み、時刻ｔ8 〜ｔ9 の間にディスクリプタ転送装置１Ａに対してディスクリプタの読み出しを指示する。読み出し指示を受けたディスクリプタ転送装置１Ａのディスクリプタ読み出し部１１Ａが、時刻ｔ9 〜ｔ10の間にメインメモリ５からディスクリプタＥ２を読み出す。ディスクリプタ読み出し部１１Ａは、読み出したディスクリプタＥ２のＳｏｕｒｃｅ  Ｔｙｐｅが０であると判断し、時刻ｔ11〜ｔ12の間にディスクリプタＥ２をＩ／Ｏコントローラ３Ａに転送する。Ｉ／Ｏコントローラ３Ａが、ディスクリプタＥ２に基づく実行指示データを時刻ｔ12〜ｔ14の間にＩ／Ｏデバイス４へ送信する。また、ディスクリプタ読み出し部１１Ａが、時刻ｔ12〜ｔ13の間にメインメモリ５からディスクリプタＥ３を読み出す。ディスクリプタ読み出し部１１Ａは、読み出したディスクリプタＥ３のＳｏｕｒｃｅ  Ｔｙｐｅが０であると判断し、時刻ｔ14〜ｔ15の間にディスクリプタＥ３をＩ／Ｏコントローラ３Ａへ転送する。そして、Ｉ／Ｏコントローラ３Ａが時刻ｔ15にディスクリプタＥ３に基づく実行指示データのＩ／Ｏデバイス４への送信を開始する。
【００３４】
一方、図５中に示すように、プロセッサ２は、時刻ｔ9 〜ｔ10の間に、メインメモリ５にＳｏｕｒｃｅ  Ｔｙｐｅが１であるディスクリプタを書き込み、時刻ｔ10〜ｔ11の間にディスクリプタ転送装置１Ａに対してディスクリプタの読み出しを指示する。読み出し指示を受けたディスクリプタ転送装置１Ａのディスクリプタ読み出し部１１Ａが、時刻ｔ15〜ｔ16の間にメインメモリ５からディスクリプタを読み出し、読み出したディスクリプタのＳｏｕｒｃｅ  Ｔｙｐｅが０でないと判断して、ディスクリプタ格納部１２へのディスクリプタの書き込みを待ち合わせる。
【００３５】
図３乃至５を参照して前述した実施例１においては、プロセッサ２がメインメモリ５にＳｏｕｒｃｅ  Ｔｙｐｅ付きのディスクリプタを書き込んだ上で、ディスクリプタ転送装置１Ａに対してメインメモリ５からのディスクリプタの読み出しを指示する。そして、ディスクリプタ転送装置１Ａが、メインメモリ５から読み出したディスクリプタのＳｏｕｒｃｅ  Ｔｙｐｅが０でないと判断した場合に、プロセッサ２によるディスクリプタ格納部１２へのディスクリプタの書き込みを待ち合わせ、ディスクリプタがディスクリプタ格納部１２へ書き込まれたことを契機として、書き込まれたディスクリプタをディスクリプタ格納部１２から読み出す。従って、例えばプロセッサ２がメインメモリ５にＳｏｕｒｃｅ  Ｔｙｐｅの値が１のディスクリプタを書き込むことを通じて、ディスクリプタ転送装置１Ａを上記待ち合わせ状態とした上で、先頭のディスクリプタをディスクリプタ格納部１２に書き込むことにより、先頭のディスクリプタを常にディスクリプタ格納部１２から読み出すことが可能となる。すなわち、実施例１によれば、ディスクリプタ転送装置１Ａが所望のディスクリプタをディスクリプタ格納部１２から読み出すように設定することができる。
【００３６】
なお、ディスクリプタに対応するＳｏｕｒｃｅ  Ｔｙｐｅの値は０又は１に限られるものでなく、Ｓｏｕｒｃｅ  Ｔｙｐｅの種類が任意の数であってもよい。また、予めＳｏｕｒｃｅ  Ｔｙｐｅの値に応じてディスクリプタ格納部１２のどのアドレスからディスクリプタを読み出させるかを決めておいてもよい。そして、例えば、プロセッサ２がＳｏｕｒｃｅ  Ｔｙｐｅが２、３、４の各々であるディスクリプタをメインメモリ５に書き込んだ上でディスクリプタ転送装置１Ａにディスクリプタの読み出しを指示し、ディスクリプタ転送装置１Ａが、メインメモリ５から読み出したディスクリプタのＳｏｕｒｃｅ  Ｔｙｐｅの値に応じたディスクリプタ格納部１２のアドレスからディスクリプタを読み出すようにしてもよい。
【００３７】
図６は、本発明の実施例２を説明する図である。図６に示す処理部のうち、図３に示す処理部と同一の符号が付けられたものは、図３に示す処理部と同様の処理部である。実施例２においても、実施例１と同様のディスクリプタ転送方法に従って、ディスクリプタ転送装置１Ａが、メインメモリ５又はディスクリプタ格納部１２から読み出したディスクリプタをＩ／Ｏコントローラに転送する。具体的には、プロセッサ２がメインメモリ５Ａのディスクリプタ領域５１にＳｏｕｒｃｅ  Ｔｙｐｅ付きのディスクリプタを書き込んだ上で、ディスクリプタ転送装置１Ａに対してメインメモリ５Ａからのディスクリプタの読み出しを指示する。例えば、ディスクリプタ読み出し部１１Ａにディスクリプタ格納部１２からディスクリプタを読み出させるように設定する場合には、プロセッサ２はメインメモリ５Ａ上のディスクリプタ格納領域５１にＳｏｕｒｃｅ  Ｔｙｐｅが０でない（例えば、１である）ディスクリプタを書き込む。ディスクリプタ転送装置１Ａのディスクリプタ読み出し部１１Ａが、例えば、メインメモリ５から読み出したディスクリプタのＳｏｕｒｃｅ  Ｔｙｐｅが０でないと判断した場合に、プロセッサ２によるディスクリプタ格納部１２へのディスクリプタの書き込みを待ち合わせる。そして、ディスクリプタ読み出し部１１Ａが、ディスクリプタがディスクリプタ格納部１２へ書き込まれたことを契機として、書き込まれたディスクリプタをディスクリプタ格納部１２から読み出して、Ｉ／Ｏコントローラ３Ｂに転送する。ディスクリプタ読み出し部１１Ａが、メインメモリ５Ａから読み出したディスクリプタのＳｏｕｒｃｅ  Ｔｙｐｅが０であると判断した場合、ディスクリプタ読み出し部１１Ａが、読み出したディスクリプタをＩ／Ｏコントローラ３Ｂに転送する。Ｉ／Ｏコントローラ３Ｂが、転送されたディスクリプタに基づく実行指示データをＩ／Ｏデバイス４に送信する。
【００３８】
実施例２に特有の構成として、メインメモリ５Ａ上に完了ディスクリプタ格納領域５２が設けられている。Ｉ／Ｏデバイス４が、実行指示部３１から送信された実行指示データが指示する処理の実行を完了すると、処理の完了を完了ディスクリプタ処理部３２に通知する。Ｉ／Ｏコントローラ３Ｂが備える完了ディスクリプタ処理部３２が、Ｉ／Ｏデバイス４による処理が完了したことを示す情報を完了ディスクリプタ情報としてメインメモリ５Ａ上の完了ディスクリプタ格納領域５２に書き込む。完了ディスクリプタ情報は、ディスクリプタが示す処理、すなわち、実行指示部３１がＩ／Ｏデバイス４に対して送信する実行指示データが示す処理の実行が完了したことを示す情報である。例えば、図６中に示すように、メインメモリ５Ａ上のディスクリプタ格納領域５１に書き込まれたディスクリプタＥ１が示す処理の実行が完了すると、完了ディスクリプタ処理部３２が、完了ディスクリプタ格納領域５２に書き込まれたディスクリプタＥ１が示す処理の実行が完了したことを示す情報である完了ディスクリプタ１を書き込む。ディスクリプタ読み出し部１１Ａが図６に示すメインメモリ５Ａ内のＳｏｕｒｃｅ  Ｔｙｐｅが０であるディスクリプタをメインメモリ５Ａから読み出した場合には、ディスクリプタ読み出し部１１が、例えばディスクリプタ格納部１２へのディスクリプタｘの書き込みを待ち合わせた上で、このディスクリプタｘを読み出してＩ／Ｏコントローラ３Ｂに転送する。Ｉ／Ｏデバイス４が転送されたディスクリプタｘが示す処理の実行を完了すると、Ｉ／Ｏコントローラ３Ｂの完了ディスクリプタ処理部３２が、図６に示すように、メインメモリ５Ａ上の完了ディスクリプタ格納領域５２に、ディスクリプタｘが示す処理の実行が完了したことを示す情報である完了ディスクリプタｘを書き込む。本実施例においては、ディスクリプタが示す処理が完了する度に、完了ディスクリプタ情報がメインメモリ５Ａ上の完了ディスクリプタ格納領域に書き込まれる。従って、本実施例によれば、処理を指示するディスクリプタと処理の実行が完了したかを示す情報とが対応付けられる。その結果、どのディスクリプタが示す処理が完了しているかを容易に知ることが可能となる。
【００３９】
図７は、本発明の実施例３を説明する図である。なお、図７に示す処理部のうち、図３に示す処理部と同一の符号が付けられたものは、図３に示す処理部と同様の処理部である。実施例３においては、メインメモリ５又はディスクリプタ格納部１２に書き込まれるディスクリプタが、自ディスクリプタの次に読み出し対象となるディスクリプタへのポインタを有する。そして、ディスクリプタ読み出し部１１Ｂが、ディスクリプタが有するポインタに基づいて、次に読み出し対象となるディスクリプタの読み出し元を判断し、判断結果に基づいて、図７中の二点鎖線の矢印に示すように、次に読み出し対象となるディスクリプタを読み出し元から順次読み出す。
【００４０】
具体的には、プロセッサ２が、メインメモリ５又はディスクリプタ格納部１２にディスクリプタを書き込む際に、各々のディスクリプタが有する、例えばｎｅｘｔ＿ｐｔｒフィールドに、次に読み出し対象となるディスクリプタへのポインタを格納する。このポインタは、次に読み出し対象となるディスクリプタがディスクリプタ格納部１２又はメインメモリ５のどの領域に書き込まれているかを示す。そして、ディスクリプタ転送装置１Ｂが備えるディスクリプタ読み出し部１１Ｂが、メインメモリ５又はディスクリプタ格納部１２から読み出されたディスクリプタのｎｅｘｔ＿ｐｔｒフィールドに格納されたポインタに基づいて、次のディスクリプタがディスクリプタ格納部１２又はメインメモリ５のいずれに書き込まれているかを判断し、該判断結果に基づいて、ディスクリプタ格納部１２又はメインメモリ５から次のディスクリプタを読み出す。
【００４１】
図８は、本発明の実施例３における、ディスクリプタ読み出し部の動作処理フローの例を示す図である。まず、ディスクリプタ読み出し部１１Ｂが、プロセッサ２からディスクリプタ読み出し指示を受け、自身が保持しているポインタが示す読み出し元（メインメモリ５又はディスクリプタ格納部１２）からディスクリプタを読み出す（ステップＳ１１）。なお、プロセッサ２が、このポインタの初期値を予め設定する。
【００４２】
次に、ディスクリプタ読み出し部１１Ｂが、読み出したディスクリプタが有効であるかを判断する（ステップＳ１２）。ディスクリプタ読み出し部１１Ｂは、ステップＳ１１においてディスクリプタが読み出された領域がプロセッサ２が書き込んだ領域であるかを判断し、該判断結果に基づいて、読み出されたディスクリプタが有効なディスクリプタであるかを判断する。
【００４３】
ディスクリプタ読み出し部１１Ｂが、Ｉ／Ｏコントローラ３Ｃがディスクリプタ処理中、つまりディスクリプタに基づく実行指示データの送信処理中でないことを確認した上で、ディスクリプタをＩ／Ｏコントローラ３Ｃに転送する（ステップＳ１３）。なお、ディスクリプタ読み出し部１１Ｂが、Ｉ／Ｏコントローラ３Ｃがディスクリプタ処理中であることを確認した場合、ディスクリプタ読み出し部１１Ｂは、Ｉ／Ｏコントローラ３Ｃがディスクリプタ処理を終了するまでディスクリプタを所定の記憶部に保持しておく。ディスクリプタ読み出し部１１Ｂが、ステップＳ１１において読み出されたディスクリプタのｎｅｘｔ＿ｐｔｒフィールドに格納されているポインタが示す読み出し元からディスクリプタを読み出し（ステップＳ１４）、ステップＳ１２に戻る。
【００４４】
ステップＳ１２において、ディスクリプタ読み出し部１１Ｂが、読み出したディスクリプタが有効でないディスクリプタであると判断した場合、ディスクリプタ読み出し部１１Ｂが、有効ではないと判断されたディスクリプタのｎｅｘｔ＿ｐｔｒフィールドに格納されたポインタを保持しておき、プロセッサ２からのディスクリプタの読み出し指示を待ち合わせる（ステップＳ１５）。そして、ディスクリプタ読み出し部１１Ｂが、プロセッサ２から次のディスクリプタの読み出し指示を受けると、保持しているポインタが示す読み出し元からディスクリプタを読み出す。
【００４５】
本実施例においては、ディスクリプタが次のディスクリプタへのポインタを有するので、ディスクリプタを、ディスクリプタ格納部１２又はメインメモリ５の連続した記憶領域に書き込む必要はない。また、ポインタでメインメモリ５か又はディスクリプタ格納部１２のいずれからディスクリプタを読み出すかを指定することにより、ディスクリプタの読出し元を切り替える事ができる。例えば、ディスクリプタ読出し部１１Ｂが保持するポインタの初期値をディスクリプタ格納部１２を示すように設定しておくことによって、ディスクリプタ読み出し部１１Ｂが、メインメモリ５へアクセスすることなく、ディスクリプタ格納部１２のディスクリプタを読み出すことができる。
【符号の説明】
【００４６】
１  ディスクリプタ転送装置
２  プロセッサ
３  Ｉ／Ｏコントローラ
４  Ｉ／Ｏデバイス
５  メインメモリ
１１  ディスクリプタ読み出し部
１２  ディスクリプタ格納部
３１  実行指示部
５１  ディスクリプタ格納領域
【図１】
2010176442.tif 000003
【図２】
2010176442.tif 000004
【図３】
2010176442.tif 000005
【図４】
2010176442.tif 000006
【図５】
2010176442.tif 000007
【図６】
2010176442.tif 000008
【図７】
2010176442.tif 000009
【図８】
2010176442.tif 000010