(57)【特許請求の範囲】
【請求項１】
ＤＭＡ転送を行うＤＭＡ装置であって、
ディスクリプタに対応するデータを転送するデータ転送手段と、
前記データ転送手段によるデータ転送処理を制御する制御手段と、
少なくともディスクリプタを蓄積するバッファと、
ディスクリプタに関するミスアライン計算を行うミスアライン計算手段と
を有し、
前記制御手段は、あるディスクリプタに対応するＤＭＡ転送処理が完了する前に、このディスクリプタの後続のディスクリプタを外部から読み出し、読み出されたディスクリプタを前記バッファに蓄積し、
前記バッファは、前記ミスアライン計算手段に接続された読出し側バッファと、前記ミスアライン計算手段に接続された書込み側バッファとを含み、
前記読出し側バッファは、少なくとも、転送元アドレス及び転送長、及び、前記ミスアライン計算手段から出力された計算結果を蓄積し、
前記書込み側バッファは、少なくとも、転送先アドレス及び転送長、及び、前記ミスアライン計算手段から出力された計算結果を蓄積する
ＤＭＡ装置。
【請求項２】
ＤＭＡ転送を行うＤＭＡ装置であって、
ディスクリプタに対応するデータを転送するデータ転送手段と、
前記データ転送手段によるデータ転送処理を制御する制御手段と、
少なくともディスクリプタを蓄積するバッファと、
前記バッファに蓄積されたディスクリプタに基づいて、あるディスクリプタに対応するＤＭＡ転送処理が完了する前に、このディスクリプタの後続のディスクリプタに関するミスアライン計算を行うミスアライン計算手段と
を有するＤＭＡ装置。
【請求項３】
中央演算装置と、
主記憶装置と、
ＤＭＡ装置と
を備え、
前記ＤＭＡ装置は、
前記主記憶装置から読み出されたディスクリプタに対応するデータを転送するデータ転送手段と、
前記データ転送手段によるデータ転送処理を制御する制御手段と、
少なくともディスクリプタを蓄積するバッファと
ディスクリプタに関するミスアライン計算を行うミスアライン計算手段と
を有し、
前記制御手段は、あるディスクリプタに対応するＤＭＡ転送処理が完了する前に、このディスクリプタの後続のディスクリプタを外部から読み出し、読み出されたディスクリプタを前記バッファに蓄積し、
前記バッファは、前記ミスアライン計算手段に接続された読出し側バッファと、前記ミスアライン計算手段に接続された書込み側バッファとを含み、
前記読出し側バッファは、少なくとも、転送元アドレス及び転送長、及び、前記ミスアライン計算手段から出力された計算結果を蓄積し、
前記書込み側バッファは、少なくとも、転送先アドレス及び転送長、及び、前記ミスアライン計算手段から出力された計算結果を蓄積する
情報処理装置。
【請求項４】
中央演算装置と、
主記憶装置と、
ＤＭＡ装置と
を備え、
前記ＤＭＡ装置は、
前記主記憶装置から読み出されたディスクリプタに対応するデータを転送するデータ転送手段と、
前記データ転送手段によるデータ転送処理を制御する制御手段と、
少なくともディスクリプタを蓄積するバッファと、
前記バッファに蓄積されたディスクリプタに基づいて、あるディスクリプタに対応するＤＭＡ転送処理が完了する前に、このディスクリプタの後続のディスクリプタに関するミスアライン計算を行うミスアライン計算手段と
を有する
情報処理装置。
【請求項５】
ＤＭＡ転送を行うデータ転送方法であって、
ディスクリプタに対応するデータを転送するステップと、
ディスクリプタに関するミスアライン計算を行うステップと
前記ディスクリプタに対応するＤＭＡ転送処理が完了する前に、このディスクリプタの後続のディスクリプタを読み出すステップと、
読み出されたディスクリプタのうち、少なくとも、転送元アドレス及び転送長、及び、前記ミスアライン計算ステップから出力された計算結果を読出し側バッファに蓄積するステップと、
読み出されたディスクリプタのうち、少なくとも、転送先アドレス及び転送長、及び、前記ミスアライン計算ステップから出力された計算結果を書込み側バッファに蓄積するステップと
を有するデータ転送方法。
【請求項６】
ＤＭＡ転送を行うデータ転送方法であって、
ディスクリプタに対応するデータを転送するステップと、
前記ディスクリプタに対応するＤＭＡ転送処理が完了する前に、このディスクリプタの後続のディスクリプタを読み出すステップと、
読み出されたディスクリプタをバッファに蓄積するステップと、
前記バッファに蓄積されたディスクリプタに基づいて、あるディスクリプタに対応するＤＭＡ転送処理が完了する前に、このディスクリプタの後続のディスクリプタに関するミスアライン計算を行うステップと
を有するデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＤＭＡ転送に関するものである。
【背景技術】
【０００２】
例えば、特許文献１には、１つのディスクリプタを複数のサブディスクリプタに分割する分割手段と、複数のサブディスクリプタに対応するデータをメモリから読み出すための複数の読み出し要求を生成する複数のＤＭＡコントローラとを備えたＤＭＡ装置が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−１９５８２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は、比較的簡易な構成で、ＤＭＡ転送の高速化を実現するＤＭＡ装置を提供する。
【課題を解決するための手段】
【０００５】
本発明にかかるＤＭＡ装置は、ＤＭＡ転送を行うＤＭＡ装置であって、ディスクリプタに対応するデータを転送するデータ転送手段と、前記データ転送手段によるデータ転送処理を制御する制御手段とを有し、前記制御手段は、あるディスクリプタに対応するＤＭＡ転送処理が完了する前に、このディスクリプタの後続のディスクリプタに関する一部の処理を開始させる。
【０００６】
好適には、少なくともディスクリプタを蓄積するバッファをさらに有し、前記制御手段は、あるディスクリプタに対応するＤＭＡ転送処理が完了する前に、このディスクリプタの後続のディスクリプタを外部から読み出し、読み出されたディスクリプタを前記バッファに蓄積する。
【０００７】
好適には、前記バッファに蓄積されたディスクリプタに基づいて、あるディスクリプタに対応するＤＭＡ転送処理が完了する前に、このディスクリプタの後続のディスクリプタに関するミスアライン計算を行うミスアライン計算手段をさらに有する。
【０００８】
好適には、前記バッファは、読出し側バッファと、書込み側バッファとを含み、前記読出し側バッファは、少なくとも、転送元アドレス及び転送長を蓄積し、前記書込み側バッファは、少なくとも、転送先アドレス及び転送長を蓄積する。
【０００９】
また、本発明にかかる情報処理装置は、中央演算装置と、主記憶装置と、ＤＭＡ装置とを備え、前記ＤＭＡ装置は、前記主記憶装置から読み出されたディスクリプタに対応するデータを転送するデータ転送手段と、前記データ転送手段によるデータ転送処理を制御する制御手段とを有し、前記制御手段は、あるディスクリプタに対応するＤＭＡ転送処理が完了する前に、このディスクリプタの後続のディスクリプタに関する一部の処理を開始させる。
【００１０】
また、本発明にかかるデータ転送方法は、ＤＭＡ転送を行うデータ転送方法であって、ディスクリプタに対応するデータを転送するステップと、前記ディスクリプタに対応するＤＭＡ転送処理が完了する前に、このディスクリプタの後続のディスクリプタを読み出すステップと、読み出されたディスクリプタをバッファに蓄積するステップとを有する。
【発明の効果】
【００１１】
本発明によれば、比較的簡易な構成で、ＤＭＡ転送の高速化を実現できる。
【図面の簡単な説明】
【００１２】
【図１】情報処理装置１の全体構成を例示する図である。
【図２】Ｒｅａｄディスクリプタバッファ１４０及びミスアライン計算部１４２をより詳細に説明する図である。
【図３】主記憶装置２０２に格納されているディスクリプタ及びＤＭＡ転送データ領域を模式的に説明する図である。
【図４】（Ａ）は、比較例におけるＤＭＡ転送処理のタイムチャートであり、（Ｂ）は、実施例１におけるＤＭＡ転送処理のタイムチャートである。
【図５】（Ａ）は、（MAX_SIZE）の単位で区切られた領域の中における転送元データ領域の先頭アドレスの位置(以降、（ADDRESS_IN_MAX_SIZE）と表記)の算出例を示し、（Ｂ）は、（REMAIN_IN_MAX_SIZE）の算出例を示す図である。
【図６】（Ａ）は、２番目以降のアクセスが存在する場合のバースト長の算出例を示し、（Ｂ）は、２番目以降のアクセスが存在しない場合のバースト長の算出例を示す図である。
【図７】最後のアクセスのバースト長の算出例を示す図である。
【発明を実施するための形態】
【実施例１】
【００１３】
図１は、情報処理装置１の全体構成を例示する図である。
図１に例示するように、情報処理装置１は、ＤＭＡ装置１０、ホストコンピュータ２０、記憶装置３０、Ｉ／Ｏ装置４０、及びペリフェラルバス５０を有する。
ＤＭＡ装置１０は、ホストコンピュータ２０と、記憶装置３０又はＩ／Ｏ装置４０との間のＤＭＡ（Direct Memory Access）転送処理を行う。Ｉ／Ｏ装置４０には、ネットワークを介してデータを送受信する通信装置が含まれる。
【００１４】
ＤＭＡ装置１０は、ディスクリプタ制御部１２、ディスクリプタバッファ部１４、及びＤＭＡコントローラ１６を有する。
ディスクリプタ制御部１２は、本発明にかかる制御手段の一例であり、ディスクリプタの読出しを制御する。ディスクリプタとは、転送対象となるデータを示す情報であり、例えば、転送元又は転送先の先頭アドレス（メモリ上のアドレス）と、転送データ領域の長さとが含まれている。
ディスクリプタバッファ部１４は、ディスクリプタ制御部１２により読み出されたディスクリプタを蓄積する。
ＤＭＡコントローラ１６は、ディスクリプタ制御部１２により読み出されたディスクリプタに基づいて、ディスクリプタに対応するデータを転送する。
【００１５】
より詳細には、図１に例示するように、ディスクリプタ制御部１２は、ディスクリプタアドレスレジスタ１２０を含む。ディスクリプタ制御部１２は、ディスクリプタアドレスレジスタ１２０に保持されているアドレスから、ディスクリプタを読み出し、読み出されたディスクリプタに含まれるディスクリプタアドレスで、ディスクリプタアドレスレジスタ１２０を更新する。すなわち、ディスクリプタ制御部１２は、ディスクリプタに含まれるディスクリプタアドレスに基づいて、後続のディスクリプタの先頭アドレスを特定する。
本例のディスクリプタ制御部１２は、上記構成によって、あるディスクリプタに対応するＤＭＡ転送処理の完了前に、このディスクリプタに続く後続のディスクリプタを読み出し、読み出されたディスクリプタをディスクリプタバッファ部１４に送る。
【００１６】
ディスクリプタバッファ部１４は、Ｒｅａｄディスクリプタバッファ１４０と、ミスアライン計算部１４２と、Ｗｒｉｔｅディスクリプタバッファ１４４とを含む。Ｒｅａｄディスクリプタバッファ１４０は、本発明にかかる読出し側バッファの一例であり、転送元アドレス及び転送長を蓄積する。Ｗｒｉｔｅディスクリプタバッファ１４４は、本発明にかかる書込み側バッファの一例であり、転送先アドレス及び転送長を蓄積する。
ミスアライン計算部１４２は、Ｒｅａｄディスクリプタバッファ１４０又はＷｒｉｔｅディスクリプタバッファ１４４に蓄積されているディスクリプタの少なくとも一部に基づいて、ミスアライン計算を行う。すなわち、ミスアライン計算部１４２は、あるディスクリプタに対応するＤＭＡ転送処理の完了前に、このディスクリプタに続く後続のディスクリプタに関するミスアライン計算を行う。
【００１７】
ＤＭＡコントローラ１６は、Ｒｅａｄ制御部１６０と、Ｗｒｉｔｅ制御部１６２と、データＦＩＦＯ１６４とを含む。Ｒｅａｄ制御部１６０は、Ｒｅａｄディスクリプタバッファ１４０に蓄積された転送元アドレス及び転送長に基づいて、転送対象となるデータを主記憶装置２０２から読み出し、読み出されたデータをデータＦＩＦＯ１６４に送る。Ｗｒｉｔｅ制御部１６２は、Ｗｒｉｔｅディスクリプタバッファ１４４に蓄積されている転送先アドレス及び転送長に基づいて、データＦＩＦＯ１６４に蓄積されているデータを順に転送先に送る。データＦＩＦＯ１６４は、転送データ用のバッファである。
【００１８】
ホストコンピュータ２０は、ＣＰＵ２００、主記憶装置２０２、及びＣＰＵバス２０４を有する。ＣＰＵ２００は、中央演算装置である。主記憶装置２０２は、転送元又は転送先となるメモリである。ＣＰＵバス２０４は、ＣＰＵ２００及び主記憶装置２０２が接続された伝送路である。
【００１９】
図２は、Ｒｅａｄディスクリプタバッファ１４０及びミスアライン計算部１４２をより詳細に説明する図である。なお、本図では、Ｒｅａｄディスクリプタバッファ１４０の構成を例示しているが、Ｗｒｉｔｅディスクリプタバッファ１４４も同様の構成である。
図２に例示するように、Ｒｅａｄディスクリプタバッファ１４０は、転送元データ領域の先頭アドレスと、転送データ領域の転送長とをバッファリングすると共に、ミスアライン計算部１４２から出力された計算結果をバッファリングする。ミスアライン計算部１４２は、Ｒｅａｄディスクリプタバッファ１４０にバッファリングされている先頭アドレス及び転送長を参照して、ミスアライン計算を行う。ミスアライン計算では、最初のアクセスのバースト長、２番目以降のアクセスの有無、最後のアクセスのバースト長、及び、転送データのバイト位置を整列するアライナの制御情報が計算される。
同様に、Ｗｒｉｔｅディスクリプタバッファ１４４も、転送先データ領域の先頭アドレスと、転送データ領域の転送長と、ミスアライン計算部１４２から出力された計算結果とをバッファリングする。
【００２０】
図３は、主記憶装置２０２に格納されているディスクリプタ及びＤＭＡ転送データ領域を模式的に説明する図である。
図３に例示するように、主記憶装置２０２には、複数の転送データ領域（転送元データ領域及び転送先データ領域）と、それぞれの転送データ領域に対応するディスクリプタとが格納されている。本例では、「ディスクリプタ１」が「転送元データ領域１」及び「転送先データ領域１」に対応し、「ディスクリプタ２」が「転送元データ領域２」及び「転送先データ領域２」に対応する。ディスクリプタには、転送元データ領域の先頭アドレス、転送先データ領域の先頭アドレス、転送データ領域の長さ（すなわち、転送長）、及び、次のディスクリプタアドレスが含まれている。
【００２１】
図４（Ａ）は、比較例におけるＤＭＡ転送処理のタイムチャートであり、図４（Ｂ）は、実施例１におけるＤＭＡ転送処理のタイムチャートである。なお、本比較例は、特許文献１に開示された方法である。
図４（Ａ）に示すように、比較例では、１つのディスクリプタに対応するＤＭＡ転送を複数に分割し、複数のＤＭＡコントローラで転送する。これにより、主記憶装置の応答時間が長くても、時間あたりの情報転送量を増大化させる。しかしながら、１つのディスクリプタに対応する転送データ領域が小さく、転送時間が短い場合には、性能の改善が少ない。また、ＤＭＡコントローラが複数必要であるため、回路規模が増大する。また、複数のＤＭＡコントローラが並行して転送処理を行うため、データの順序を保証できない可能性がある。
【００２２】
一方、本実施例１によれば、図４（Ｂ）に例示するように、あるディスクリプタに対応するＤＭＡ転送処理が完了する前に、後続のディスクリプタに関する処理（具体的には、ディスクリプタの読出し、ミスアライン計算など）を開始するため、ＤＭＡ転送全体の処理時間が短縮される。特に、ディスクリプタに対応する転送データ領域が小さい場合に、比較例と比べて実施例１は有利である。
【００２３】
最後に、ミスアライン計算部１４２によるミスアライン計算を説明する。
「転送元データ領域の先頭アドレス」を（SRC_TOP_ADDRESS）と表記し、「転送先データ領域の先頭アドレス」を（DESTINATION_TOP_ADDRESS）と表記し、「転送データ領域の長さ」を（TRANSFER_LENGTH）と表記し、「ホストコンピュータによって決められる最大の転送サイズ」を（MAX_SIZE）と表記する。なお、（MAX_SIZE）は、計算を容易にするため、２のn乗（ｎは整数）バイトとする。
【００２４】
まず、転送元データ領域について、（MAX_SIZE）の単位で区切られた領域の中における転送元データ領域の先頭アドレスの位置を算出する。
図５（Ａ）は、（MAX_SIZE）の単位で区切られた領域の中における転送元データ領域の先頭アドレスの位置(以降、（ADDRESS_IN_MAX_SIZE）と表記)の算出方法を例示する。なお、図中の「0x」は１６進数であることを表している。
（ADDRESS_IN_MAX_SIZE）は、（SRC_TOP_ADDRESS）と、（MAX_SIZE）により得られるマスク値（以降、（MAX_SIZE_MASK）と表記）との、ビット単位の「AND」を計算することで得られる。
（MAX_SIZE_MASK）は、以下の式により得られる。なお、以降、全ての値は２の補数で表記されており、加算（＋）、減算（−）は２の補数を演算する演算子である。
（MAX_SIZE_MASK）＝（MAX_SIZE）−１
（ADDRESS_IN_MAX_SIZE）＝（SRC_TOP_ADDRESS） AND （MAX_SIZE_MASK）
【００２５】
次に、２番目以降のアクセスの有無を求める。
まず、（MAX_SIZE）の単位で区切られた領域の中の残りの転送サイズ(以降、（REMAIN_IN_MAX_SIZE）)を算出する。図５（Ｂ）に、（REMAIN_IN_MAX_SIZE）の領域を例示する。
（REMAIN_IN_MAX_SIZE）は、以下の式で求められる。
（REMAIN_IN_MAX_SIZE）＝（MAX_SIZE）−（ADDRESS_IN_MAX_SIZE）
２番目以降のアクセスは、（MAX_SIZE）の単位で区切られた領域を超えて転送が継続される場合に存在する。よって、以下の式が真（true）のときに存在する。
（REMAIN_IN_MAX_SIZE）＜（TRANSFER_LENGTH）
【００２６】
次に、最初のアクセスのバースト長の計算について説明する。
最初のアクセスのバースト長を算出するため、まず、（BUS_SIZE）と（BUS_SIZE_MASK）について定義する。
（BUS_SIZE）はバス幅（ここでは８バイトのため８）のことであり、２のｎ乗（nは整数）のバイト数で表現できる値とする。（BUS_SIZE_MASK）は、バスのバイト位置を区別するためのアドレスを取り出すためのマスク値で、以下のように計算できる。
（BUS_SIZE_MASK）＝（BUS_SIZE）−１
この値を用い、かつ、２番目以降のアクセスが存在する場合と存在しない場合とに分け、最初のアクセスのバースト長を求める。
２番目以降のアクセスが存在する場合は、
（転送元データ領域の最初のアクセスのバースト長）＝（（（REMAIN_IN_MAX_SIZE）−１)／（BUS_SIZE））＋１
となる。除算は（BUS_SIZE）が２のn乗（nは整数）のため、論理右シフト演算により、ハードウェアに実装する場合、非常に容易に得ることができる。この具体例を図６（Ａ）に示す。
【００２７】
次に、２番目以降のアクセスが存在しない場合のバースト長を算出する。算出の具体例を図６（Ｂ）に示す。
まず、２番目以降のアクセスが存在する場合と同様に、図６（Ａ）における（REMAIN_IN_MAX_SIZE）だけアクセスした場合のバースト長を計算する。
（REMAIN_IN_MAX_SIZEのアクセスのバースト長）＝（（（REMAIN_IN_MAX_SIZE）−１）／（BUS_SIZE））＋１
この値から、最後の転送データ以降の部分を差し引く。差し引き分は、以下のように計算される。
（最後の転送データ以降のデータの差し引き分）＝（MAX_SIZE）−（（（SRC_TOP_ADDRESS）＋（TRANSFER_LENGTH）） AND （MAX_SIZE_MASK）））／（BUS_SIZE）
これらを用いて、バースト長は以下のように計算できる。
（転送元データ領域の最初のアクセスのバースト長）＝（REMAIN_IN_MAX_SIZEのアクセスのバースト長）−（最後の転送データ以降のデータの差し引き分）
【００２８】
次に、最後のアクセスのバースト長について計算する。最後のアクセスのバースト長の具体的な計算例を図７に示す。最後のアクセスのバースト長については以下の式により算出することができる。
（転送元データ領域の最後のアクセスのバースト長）＝（（（SRC_TOP_ADDRESS）＋（TRANSFER_LENGTH）−１） AND （MAX_SIZE_MASK））／（BUS_SIZE）
【００２９】
以上で転送元データ領域に対するミスアラインの計算について説明した。
転送先データ領域については、以上の過程について、（SRC_TOP_ADDRESS）を（DESTINATION_TOP_ADDRESS）に置き換えて計算することで同様に算出することができる。
次に、転送データのバイト位置を整列するアライナの制御情報であるが、これは、以下の式により得られる。
（アライナの制御情報）＝（DESTINATION_TOP_ADDRESS） AND （BUS_SIZE_MASK）−（SRC_TOP_ADDRESS） AND （BUS_SIZE_MASK）
この制御情報を用いて、転送先のアドレスに応じて転送先のデータバスの適切な位置にデータを配置して転送を行うよう制御される。
【符号の説明】
【００３０】
１      情報処理装置
１０    ＤＭＡ装置
１２    ディスクリプタ制御部
１４    ディスクリプタバッファ部
１４２  ミスアライン計算部
１６    ＤＭＡコントローラ
２０    ホストコンピュータ
３０    記憶装置
４０    Ｉ／Ｏ装置
【図１】
0005803000.tif 000002
【図２】
0005803000.tif 000003
【図３】
0005803000.tif 000004
【図４】
0005803000.tif 000005
【図５】
0005803000.tif 000006
【図６】
0005803000.tif 000007
【図７】
0005803000.tif 000008