(57)【要約】【課題】メモリを効率的に使用することができるデータ処理装置を提供することを課題とする。【解決手段】データ処理装置は、第１の子ディスクリプタアドレスを含む第１の親ディスクリプタ（１５１）と、第１のソースアドレス、第１のソースアドレスデータサイズ、第１のディスティネーションアドレス及び第１のディスティネーションアドレスバッファサイズを含む第１の子ディスクリプタ（１５２）と、第１の親ディスクリプタを読み出し、第１の親ディスクリプタ内の第１の子ディスクリプタアドレスから第１の子ディスクリプタを読み出し、第１の子ディスクリプタ内の第１のソースアドレスに記憶されているデータを第１のソースアドレスデータサイズ分読み出し、読み出したデータをデータ処理部に出力し、処理されたデータを第１の子ディスクリプタ内の第１のディスティネーションアドレスに書き込むダイレクトメモリアクセス回路（１０４）を有する。【選択図】図１
2015215850.tif 000002
【特許請求の範囲】
【請求項１】
メモリに記憶され、第１の子ディスクリプタアドレスを含む第１の親ディスクリプタと、
前記第１の親ディスクリプタ内の第１の子ディスクリプタアドレスに記憶され、第１のソースアドレス、第１のソースアドレスデータサイズ、第１のディスティネーションアドレス及び第１のディスティネーションアドレスバッファサイズを含む第１の子ディスクリプタと、
データを処理するデータ処理部と、
前記第１の親ディスクリプタを読み出し、前記第１の親ディスクリプタ内の第１の子ディスクリプタアドレスから前記第１の子ディスクリプタを読み出し、前記第１の子ディスクリプタ内の第１のソースアドレスに記憶されているデータを前記第１のソースアドレスデータサイズ分読み出し、前記読み出したデータを前記データ処理部に出力し、前記データ処理部により処理されたデータを入力し、前記処理されたデータを前記第１の子ディスクリプタ内の第１のディスティネーションアドレスに書き込むダイレクトメモリアクセス回路と、
前記第１の親ディスクリプタ及び前記第１の子ディスクリプタを前記メモリに書き込み、前記ダイレクトメモリアクセス回路を制御する中央処理ユニットとを有し、
前記ダイレクトメモリアクセス回路は、前記第１のディスティネーションアドレスバッファサイズが前記データ処理部により処理されたデータのサイズ未満である場合には、子ディスクリプタの追加要求を前記中央処理ユニットに出力し、
前記中央処理ユニットは、前記子ディスクリプタの追加要求を入力すると、第２のディスティネーションアドレス及び第２のディスティネーションアドレスバッファサイズを含む第２の子ディスクリプタを前記メモリに書き込み、前記第２のディスティネーションアドレスに前記第２のディスティネーションアドレスバッファサイズの領域を確保し、前記ダイレクトメモリアクセス回路の再開要求を出力し、
前記ダイレクトメモリアクセス回路は、前記再開要求を入力すると、前記第２の子ディスクリプタを読み出し、前記データ処理部により処理されたデータを前記第２の子ディスクリプタ内の第２のディスティネーションアドレスに書き込むことを特徴とするデータ処理装置。
【請求項２】
前記中央処理ユニットは、前記第１の子ディスクリプタの後に前記第２の子ディスクリプタを書き込むことを特徴とする請求項１記載のデータ処理装置。
【請求項３】
前記メモリは、親ディスクリプタ領域及び第１の子ディスクリプタ領域を有し、
前記第１の親ディスクリプタは、前記親ディスクリプタ領域に書き込まれ、
前記第１の子ディスクリプタ及び前記第２の子ディスクリプタは、前記第１の子ディスクリプタ領域に書き込まれることを特徴とする請求項１又は２記載のデータ処理装置。
【請求項４】
前記中央処理ユニットは、第１のアプリケーションの処理に従って、前記第１の親ディスクリプタ及び前記第１の子ディスクリプタを前記メモリに書き込み、第２のアプリケーションの処理に従って、第２の親ディスクリプタ及び第３の子ディスクリプタを前記メモリに書き込み、
前記第２の親ディスクリプタは、第３の子ディスクリプタアドレスを含み、
前記第３の子ディスクリプタは、前記第２の親ディスクリプタ内の第３の子ディスクリプタアドレスに記憶され、第３のソースアドレス、第３のソースアドレスデータサイズ、第３のディスティネーションアドレス及び第３のディスティネーションアドレスバッファサイズを含み、
前記ダイレクトメモリアクセス回路は、前記中央処理ユニットの第２のアプリケーションの処理に従い、前記第２の親ディスクリプタを読み出し、前記第２の親ディスクリプタ内の第３の子ディスクリプタアドレスから前記第３の子ディスクリプタを読み出し、前記第３の子ディスクリプタ内の第３のソースアドレスに記憶されているデータを前記第３のソースアドレスデータサイズ分読み出し、前記読み出したデータを前記データ処理部に出力し、前記データ処理部により処理されたデータを入力し、前記処理されたデータを前記第３の子ディスクリプタ内の第３のディスティネーションアドレスに書き込むことを特徴とする請求項１〜３のいずれか１項に記載のデータ処理装置。
【請求項５】
前記中央処理ユニットは、前記第１の親ディスクリプタの後に前記第２の親ディスクリプタを書き込むことを特徴とする請求項４記載のデータ処理装置。
【請求項６】
前記メモリは、親ディスクリプタ領域、第１の子ディスクリプタ領域及び第２の子ディスクリプタ領域を有し、
前記第１の親ディスクリプタ及び前記第２の親ディスクリプタは、前記親ディスクリプタ領域に書き込まれ、
前記第１の子ディスクリプタ及び前記第２の子ディスクリプタは、前記第１の子ディスクリプタ領域に書き込まれ、
前記第３の子ディスクリプタは、前記第２の子ディスクリプタ領域に書き込まれることを特徴とする請求項４又は５記載のデータ処理装置。
【請求項７】
前記データ処理部の出力データのサイズは、前記データ処理部の入力データのサイズに依存しない可変長であることを特徴とする請求項１〜６のいずれか１項に記載のデータ処理装置。
【請求項８】
前記データ処理部は、ハードウェアであることを特徴とする請求項１〜７のいずれか１項に記載のデータ処理装置。
【請求項９】
メモリに記憶され、第１の子ディスクリプタアドレスを含む第１の親ディスクリプタと、
前記第１の親ディスクリプタ内の第１の子ディスクリプタアドレスに記憶され、第１のソースアドレス、第１のソースアドレスデータサイズ、第１のディスティネーションアドレス及び第１のディスティネーションアドレスバッファサイズを含む第１の子ディスクリプタと、
データを処理するデータ処理部と、
前記第１の親ディスクリプタを読み出し、前記第１の親ディスクリプタ内の第１の子ディスクリプタアドレスから前記第１の子ディスクリプタを読み出し、前記第１の子ディスクリプタ内の第１のソースアドレスに記憶されているデータを前記第１のソースアドレスデータサイズ分読み出し、前記読み出したデータを前記データ処理部に出力し、前記データ処理部により処理されたデータを入力し、前記処理されたデータを前記第１の子ディスクリプタ内の第１のディスティネーションアドレスに書き込むダイレクトメモリアクセス回路と、
前記第１の親ディスクリプタ及び前記第１の子ディスクリプタを前記メモリに書き込み、前記ダイレクトメモリアクセス回路を制御する中央処理ユニットとを有するデータ処理装置の制御方法であって、
前記ダイレクトメモリアクセス回路により、前記第１のディスティネーションアドレスバッファサイズが前記データ処理部により処理されたデータのサイズ未満である場合には、子ディスクリプタの追加要求を前記中央処理ユニットに出力し、
前記中央処理ユニットにより、前記子ディスクリプタの追加要求を入力すると、第２のディスティネーションアドレス及び第２のディスティネーションアドレスバッファサイズを含む第２の子ディスクリプタを前記メモリに書き込み、前記第２のディスティネーションアドレスに前記第２のディスティネーションアドレスバッファサイズの領域を確保し、前記ダイレクトメモリアクセス回路の再開要求を出力し、
前記ダイレクトメモリアクセス回路により、前記再開要求を入力すると、前記第２の子ディスクリプタを読み出し、前記データ処理部により処理されたデータを前記第２の子ディスクリプタ内の第２のディスティネーションアドレスに書き込むことを特徴とするデータ処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置及びデータ処理装置の制御方法に関する。
【背景技術】
【０００２】
ダイレクトメモリアクセス転送を行う情報処理装置が知られている（例えば、特許文献１参照）。転送手段は、中央演算処理装置（ＣＰＵ）を介在させないダイレクトメモリアクセス（ＤＭＡ）転送に必要な情報を含む単位転送量毎の転送情報を複数連ねて構成した転送情報群に基づいて転送対象のデータを単位転送量毎にＤＭＡ転送する。決定手段は、データ量が予め定められた基準データを転送情報群を構成する転送情報の個数を変化させながら転送手段によってＤＭＡ転送したときの転送速度に基づいて転送情報群を構成する転送情報の数を決定する。作成手段は、転送対象のデータをＤＭＡ転送するときに、決定手段で決定された数の転送情報を連ねて構成した転送情報群を作成する。
【０００３】
また、ダイレクトメモリアクセス回路を有するメモリシステムが知られている（例えば、特許文献２参照）。ホストコントローラは、デバイスに対しコマンド発行を制御するレジスタセットと、システムメモリをアクセスするダイレクトメモリアクセス（ＤＭＡ）回路を有し、システムメモリ、及びメモリデバイス間の転送を制御する。第１ディスクリプタは、システムメモリ上に記憶され、複数の第２ディスクリプタを示す複数のポインタの集まりで構成される。第３ディスクリプタは、複数の第２ディスクリプタのそれぞれを構成し、ホストコントローラのレジスタセットを介してメモリデバイスのコマンド発行に必要な情報としてコマンド番号、コマンド動作モード、引数と、データ転送に必要な情報としてブロック長、ブロック数の情報を含む。第４ディスクリプタは、複数の第２ディスクリプタのそれぞれを構成し、システムメモリ上に配置された複数のデータのアドレスと大きさの情報を含む。ＤＭＡ回路は、第１ディスクリプタの先頭を起点として第２ディスクリプタを構成する第３ディスクリプタの内容をレジスタセットに設定し、第４ディスクリプタの内容に従ってシステムメモリとホストコントローラ間のデータを転送する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−５９２７６号公報
【特許文献２】特開２０１２−８９１０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
圧縮データの伸長を行う場合、伸長後のデータ量は可変であり、予測困難である。ダイレクトメモリアクセス回路が伸長後のデータをメモリのデータ格納領域に書き込む場合、伸長後のデータ量が予測困難であるため、大容量のデータ格納領域を予め確保することにより、データ格納領域の容量不足を回避する。しかし、この場合、必要最低限なデータ格納領域に比べ、非常に大きなデータ格納領域が必要となる。そのため、無駄に大きなデータ格納領域を確保することになり、メモリの使用方法が非効率的になってしまい、システムのメモリリソース不足を誘発する課題がある。
【０００６】
本発明の目的は、メモリを効率的に使用することができるデータ処理装置及びデータ処理装置の制御方法を提供することである。
【課題を解決するための手段】
【０００７】
データ処理装置は、メモリに記憶され、第１の子ディスクリプタアドレスを含む第１の親ディスクリプタと、前記第１の親ディスクリプタ内の第１の子ディスクリプタアドレスに記憶され、第１のソースアドレス、第１のソースアドレスデータサイズ、第１のディスティネーションアドレス及び第１のディスティネーションアドレスバッファサイズを含む第１の子ディスクリプタと、データを処理するデータ処理部と、前記第１の親ディスクリプタを読み出し、前記第１の親ディスクリプタ内の第１の子ディスクリプタアドレスから前記第１の子ディスクリプタを読み出し、前記第１の子ディスクリプタ内の第１のソースアドレスに記憶されているデータを前記第１のソースアドレスデータサイズ分読み出し、前記読み出したデータを前記データ処理部に出力し、前記データ処理部により処理されたデータを入力し、前記処理されたデータを前記第１の子ディスクリプタ内の第１のディスティネーションアドレスに書き込むダイレクトメモリアクセス回路と、前記第１の親ディスクリプタ及び前記第１の子ディスクリプタを前記メモリに書き込み、前記ダイレクトメモリアクセス回路を制御する中央処理ユニットとを有し、前記ダイレクトメモリアクセス回路は、前記第１のディスティネーションアドレスバッファサイズが前記データ処理部により処理されたデータのサイズ未満である場合には、子ディスクリプタの追加要求を前記中央処理ユニットに出力し、前記中央処理ユニットは、前記子ディスクリプタの追加要求を入力すると、第２のディスティネーションアドレス及び第２のディスティネーションアドレスバッファサイズを含む第２の子ディスクリプタを前記メモリに書き込み、前記第２のディスティネーションアドレスに前記第２のディスティネーションアドレスバッファサイズの領域を確保し、前記ダイレクトメモリアクセス回路の再開要求を出力し、前記ダイレクトメモリアクセス回路は、前記再開要求を入力すると、前記第２の子ディスクリプタを読み出し、前記データ処理部により処理されたデータを前記第２の子ディスクリプタ内の第２のディスティネーションアドレスに書き込む。
【発明の効果】
【０００８】
適正量のバッファサイズの領域を確保することができるので、メモリを効率的に使用することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施形態によるデータ処理装置の構成例を示す図である。
【図２】図２は、本実施形態によるデータ処理装置の動作例を説明するための図である。
【図３】図３は、本実施形態によるデータ処理装置の制御方法を示すフローチャートである。
【図４】図４は、本実施形態によるデータ処理装置の制御方法を示すシーケンス図である。
【図５】図５は、階層型でないディスクリプタを用いるデータ処理装置の動作例を説明するための図である。
【図６】図６は、階層型でないディスクリプタを用いるデータ処理装置の動作例を説明するための図である。
【図７】図７は、階層型でないディスクリプタを用いるデータ処理装置の動作例を説明するための図である。
【図８】図８は、図５のデータ処理装置の制御方法を示すフローチャートである。
【図９】図９は、図５のデータ処理装置の制御方法を示すシーケンス図である。
【図１０】図１０は、図６のデータ処理装置の制御方法を示すシーケンス図である。
【図１１】図１１は、図７のデータ処理装置の制御方法を示すシーケンス図である。
【発明を実施するための形態】
【００１０】
図１は、本実施形態によるデータ処理装置の構成例を示す図である。データ処理装置は、バス１０１、メモリ１０２、中央処理ユニット（ＣＰＵ）１０３、ダイレクトメモリアクセス（ＤＭＡ）回路１０４、及びデータ処理部１０５を有する。バス１０１には、メモリ１０２、ＣＰＵ１０３、及びＤＭＡ回路１０４が接続されている。データ処理部１０５は、ＤＭＡ回路１０４に接続されている。メモリ１０２は、親ディスクリプタ領域１１１、第１の子ディスクリプタ領域１１２、入力データ領域１１３、第２の子ディスクリプタ領域１１４、及び出力データ領域１１５を有する。メモリ１０２は、例えば、ランダムアクセスメモリ（ＲＡＭ）である。ＣＰＵ１０３は、ＤＭＡ回路１０４を制御する。
【００１１】
データ処理部１０５は、ハードウェアである。なお、データ処理部１０５は、ソフトウェアでもよい。ただし、データ処理部１０５をソフトウェアで実現すると、ＣＰＵ１０３の処理負荷が重くなり、処理速度が低下してしまう。そこで、データ処理部１０５が重負荷の処理（データの圧縮及び伸長など）を行う場合には、データ処理部１０５をハードウェアで構成することにより、処理速度を向上させることができる。ディスクリプタ形式のＤＭＡ回路１０４を用いることにより、データ処理部１０５に対して、データ転送や処理動作指示を行うことができる。
【００１２】
ＣＰＵ１０３は、メモリ１０２に記憶されている第１のアプリケーション（プログラム）を実行することにより、ダイレクトメモリアクセスのため、第１の親ディスクリプタ１５１を親ディスクリプタ領域１１１に書き込み、第１の子ディスクリプタ１５２を第１の子ディスクリプタ領域１１２に書き込む。
【００１３】
また、ＣＰＵ１０３は、メモリ１０２に記憶されている第２のアプリケーション（プログラム）を実行することにより、ダイレクトメモリアクセスのため、第２の親ディスクリプタ１５８を親ディスクリプタ領域１１１に書き込み、第２の子ディスクリプタ１５５を第２の子ディスクリプタ領域１１４に書き込む。
【００１４】
親ディスクリプタ領域１１１には、複数の親ディスクリプタ１５１及び１５８が格納される。複数の親ディスクリプタ１５１及び１５８は、それぞれ、子ディスクリプタアドレス１２１及び制御情報１２２を有する。第１の親ディスクリプタ１５１は、第１のアプリケーションの親ディスクリプタである。第１の親ディスクリプタ１５１内の子ディスクリプタアドレス１２１は、第１の子ディスクリプタ１５２のアドレスを示す。第２の親ディスクリプタ１５８は、第２のアプリケーションの親ディスクリプタである。第２の親ディスクリプタ１５８内の子ディスクリプタアドレス１２１は、第２の子ディスクリプタ１５５のアドレスを示す。
【００１５】
第１の子ディスクリプタ領域１１２には、第１の子ディスクリプタ１５２が格納される。第１の子ディスクリプタ１５２は、第１のアプリケーションの子ディスクリプタであり、第１のソースアドレス１３１、第１のソースアドレスデータサイズ１３２、第１のディスティネーションアドレス１３３、第１のディスティネーションアドレスバッファサイズ１３４、及び制御情報１３５を有する。例えば、第１のソースアドレス１３１は、入力データ領域１１３内の第１の入力データ１５３のアドレスＡＳ１を示す。第１のソースアドレスデータサイズ１３２は、第１の入力データ１５３のサイズを示す。第１のディスティネーションアドレス１３３は、出力データ領域１１５内の第１の出力データ格納領域１５６のアドレスＡＤ１を示す。第１のディスティネーションアドレスバッファサイズ１３４は、第１の出力データ格納領域１５６のサイズを示す。
【００１６】
第２の子ディスクリプタ領域１１４には、第２の子ディスクリプタ１５５が格納される。第２の子ディスクリプタ１５５は、第２のアプリケーションの子ディスクリプタであり、第２のソースアドレス１４１、第２のソースアドレスデータサイズ１４２、第２のディスティネーションアドレス１４３、第２のディスティネーションアドレスバッファサイズ１４４、及び制御情報１４５を有する。例えば、第２のソースアドレス１４１は、入力データ領域１１３内の第２の入力データ１５４のアドレスＡＳ２を示す。第２のソースアドレスデータサイズ１４２は、第２の入力データ１５４のサイズを示す。第２のディスティネーションアドレス１４３は、出力データ領域１１５内の第２の出力データ格納領域１５７のアドレスＡＤ２を示す。第２のディスティネーションアドレスバッファサイズ１４４は、第２の出力データ格納領域１５７のサイズを示す。
【００１７】
まず、ＣＰＵ１０３は、第１のアプリケーションを実行することにより、バス１０１を介して、ＤＭＡ回路１０４に処理データ転送要求を出力する。すると、ＤＭＡ回路１０４は、第１の親ディスクリプタ１５１をメモリ１０２から読み出す。次に、ＤＭＡ回路１０４は、第１の親ディスクリプタ１５１内の子ディスクリプタアドレス１２１を基に、第１の子ディスクリプタ１５２をメモリ１０２から読み出す。次に、ＤＭＡ回路１０４は、第１の子ディスクリプタ１５２内の第１のソースアドレス１３１及び第１のソースアドレスデータサイズ１３２を基に、メモリ１０２のアドレスＡＳ１から入力データ１５３を読み出し、入力データ１５３をデータ処理部１０５に出力する。すると、データ処理部１０５は、入力データ１５３を処理し、処理後のデータをＤＭＡ回路１０４に出力する。例えば、データ処理部１０５は、入力データ（圧縮データ）１５３を伸長し、伸長後のデータをＤＭＡ回路１０４に出力する。伸長後のデータ量は可変であり、予測困難である。次に、ＤＭＡ回路１０４は、第１の子ディスクリプタ１５２内の第１のディスティネーションアドレス１３３を基に、メモリ１０２のアドレスＡＤ１の出力データ格納領域１５６に、データ処理部１０５から入力したデータを書き込む。
【００１８】
また、ＣＰＵ１０３は、第２のアプリケーションを実行することにより、バス１０１を介して、ＤＭＡ回路１０４に処理データ転送要求を出力する。すると、ＤＭＡ回路１０４は、第２の親ディスクリプタ１５８をメモリ１０２から読み出す。次に、ＤＭＡ回路１０４は、第２の親ディスクリプタ１５８内の子ディスクリプタアドレス１２１を基に、第２の子ディスクリプタ１５５をメモリ１０２から読み出す。次に、ＤＭＡ回路１０４は、第２の子ディスクリプタ１５５内の第２のソースアドレス１４１及び第２のソースアドレスデータサイズ１４２を基に、メモリ１０２のアドレスＡＳ２から入力データ１５４を読み出し、入力データ１５４をデータ処理部１０５に出力する。すると、データ処理部１０５は、入力データ１５４を処理し、処理後のデータをＤＭＡ回路１０４に出力する。例えば、データ処理部１０５は、入力データ（圧縮データ）１５４を伸長し、伸長後のデータをＤＭＡ回路１０４に出力する。次に、ＤＭＡ回路１０４は、第２の子ディスクリプタ１５５内の第２のディスティネーションアドレス１４３を基に、メモリ１０２のアドレスＡＤ２の出力データ格納領域１５７に、データ処理部１０５から入力したデータを書き込む。
【００１９】
データ処理部１０５の出力データのサイズは、データ処理部１０５の入力データのサイズに依存しない可変長である。データ処理部１０５の伸長後のデータ量は予測不能であるため、伸長後のデータ量が出力データ格納領域１５６のサイズより大きくなると、伸長後のデータ量を正常に書き込めなくなる。次に、伸長後のデータ量が出力データ格納領域１５６のサイズより大きくなった場合の動作を、図２を参照しながら説明する。
【００２０】
図２は本実施形態によるデータ処理装置の動作例を説明するための図であり、図３は本実施形態によるデータ処理装置の制御方法を示すフローチャートであり、図４は本実施形態によるデータ処理装置の制御方法を示すシーケンス図である。
【００２１】
まず、ステップＳ３０１では、ＣＰＵ１０３は、処理要求があるか否かをチェックし、処理要求がある場合には、ステップＳ３０２に進む。ステップＳ３０２では、ＣＰＵ１０３は、第１のアプリケーション４０１の処理により、処理及び処理済みデータ格納領域確保要求を入力する。すると、ステップＳ３０３では、ＣＰＵ１０３は、入力データ１５３の領域及びデータ格納領域１５６を確保し、処理及び処理済みデータ格納領域確保完了を第１のアプリケーション４０１に通知する。次に、ステップＳ３０４では、ＣＰＵ１０３は、第１のアプリケーション４０１の処理により、処理依頼予定データを入力データ１５３としてメモリ１０２に格納する。次に、ステップＳ３０５では、ＣＰＵ１０３は、第１のアプリケーション４０１の処理により、データ処理要求を入力する。
【００２２】
次に、ステップＳ３０６では、ＣＰＵ１０３は、第１のアプリケーション４０１のデータ処理要求に基づき、第１の親ディスクリプタ１５１及び第１の子ディスクリプタ１５２をメモリ１０２に書き込む。次に、ステップＳ３０７では、ＣＰＵ１０３は、バス１０１を介して、ＤＭＡ回路１０４に処理データ転送要求を出力する。次に、ステップＳ３０８では、ＤＭＡ回路１０４は、第１の親ディスクリプタ１５１をメモリ１０２から読み出す。次に、ステップＳ３０９では、ＤＭＡ回路１０４は、第１の親ディスクリプタ１５１内の子ディスクリプタアドレス１２１を基に、第１の子ディスクリプタ１５２をメモリ１０２から読み出す。次に、ステップＳ３１０では、ＤＭＡ回路１０４は、第１の子ディスクリプタ１５２内の第１のソースアドレス１３１及び第１のソースアドレスデータサイズ１３２を基に、メモリ１０２のアドレスＡＳ１から入力データ（処理データ）１５３を読み出す。次に、ステップＳ３１１では、ＤＭＡ回路１０４は、入力データ１５３をデータ処理部１０５に転送する。次に、ステップＳ３１２では、ＤＭＡ回路１０４は、データ処理開始要求をデータ処理部１０５に出力する。
【００２３】
次に、ステップＳ３１３では、データ処理部１０５は、入力データ（処理依頼データ）１５３を処理する。例えば、データ処理部１０５は、入力データ（圧縮データ）１５３を伸長する。次に、ステップＳ３１４では、データ処理部１０５は、データ処理完了後、処理済みデータの転送要求をＤＭＡ回路１０４に出力する。次に、ステップＳ３１５では、ＤＭＡ回路１０４は、第１の子ディスクリプタ１５２内の第１のディスティネーションアドレス１３３を基に、メモリ１０２のアドレスＡＤ１のデータ格納領域１５６に、データ処理部１０５から入力した処理済みデータを書き込む。
【００２４】
次に、ステップＳ３１６では、ＤＭＡ回路１０４は、データ格納領域１５６のサイズが処理済みデータのサイズ以上であるか否かをチェックする。データ格納領域１５６のサイズが処理済みデータのサイズ以上である場合には、ステップＳ３２１に進み、データ格納領域１５６のサイズが処理済みデータのサイズ未満である場合には、ステップＳ３１７に進む。
【００２５】
ステップＳ３１７では、ＤＭＡ回路１０４は、追加の子ディスクリプタ（格納領域）要求を、バス１０１を介してＣＰＵ１０３に出力する。次に、ステップＳ３１８では、ＣＰＵ１０３は、メモリ１０２の第１の子ディスクリプタ領域１１２に、追加の子ディスクリプタ２０１を書き込む。追加の子ディスクリプタ２０１は、第１のアプリケーションの子ディスクリプタであり、第１の子ディスクリプタ１５２と同様に、ソースアドレス、ソースアドレスデータサイズ、第１のディスティネーションアドレス、第１のディスティネーションアドレスバッファサイズ、及び制御情報を有する。追加の子ディスクリプタ２０１の制御情報は、追加の子ディスクリプタである旨の情報を含む。追加の子ディスクリプタ２０１のソースアドレス及びソースアドレスデータサイズは、無効であり、使用しない。追加の子ディスクリプタ２０１のディスティネーションアドレスは、出力データ領域１１５内の出力データ格納領域２０２のアドレスを示す。追加の子ディスクリプタ２０１のディスティネーションアドレスバッファサイズは、力データ格納領域２０２のサイズを示す。また、ＣＰＵ１０３は、追加の子ディスクリプタ２０１に対応し、メモリ１０２の出力データ領域１１５に追加のデータ格納領域２０２を確保する。次に、ステップＳ３１９では、ＣＰＵ１０３は、処理済みデータ転送再開要求を、バス１０１を介してＤＭＡ回路１０４に出力する。次に、ステップＳ３２０では、ＤＭＡ回路１０４は、追加の子ディスクリプタ２０１をメモリ１０２から読み出す。その後、ステップＳ３１５に戻り、ＤＭＡ回路１０４は、追加の子ディスクリプタ２０１内のディスティネーションアドレスを基に、メモリ１０２のデータ格納領域２０２に、データ処理部１０５から入力した処理済みデータの書き込みを再開する。その後、ステップＳ３１６に進み、上記の処理を繰り返す。
【００２６】
ステップＳ３２１では、ＤＭＡ回路１０４は、処理済みデータ転送完了通知を、バス１０１を介してＣＰＵ１０３に出力する。次に、ＣＰＵ１０３は、データ処理完了通知を第１のアプリケーションに出力する。次に、第１のアプリケーション４０１の処理は、処理及び処理済みデータ格納領域解放要求をＣＰＵ１０３に出力する。次に、ＣＰＵ１０３は、入力データ１５３の領域及びデータ格納領域１５６，２０２を解放する。
【００２７】
なお、図４において、ステップＳ３０７の後、第２のアプリケーション４０２が、処理及び処理済みデータ格納領域確保要求をＣＰＵ１０３に出力する場合を説明する。すると、ＣＰＵ１０３は、入力データ１５４の領域及びデータ格納領域１５７を確保し、処理及び処理済みデータ格納領域確保完了を第２のアプリケーション４０２に通知する。次に、ＣＰＵ１０３は、第２のアプリケーション４０２の処理により、処理依頼予定データを入力データ１５４としてメモリ１０２に格納する。次に、ＣＰＵ１０３は、第２のアプリケーション４０２の処理により、データ処理要求を入力する。次に、ＣＰＵ１０３は、第２のアプリケーション４０２のデータ処理要求に基づき、第２の親ディスクリプタ１５８及び第２の子ディスクリプタ１５５をメモリ１０２に書き込む。次に、ＣＰＵ１０３は、バス１０１を介して、ＤＭＡ回路１０４に処理データ転送要求を出力する。すると、ＤＭＡ回路１０４が第１のアプリケーション４０１のための処理中であるので、第２のアプリケーション４０２の処理データ転送要求は待機状態となる。ＤＭＡ回路１０４は、第１のアプリケーション４０１のための処理を終了した後に、第２のアプリケーション４０２の処理データ転送要求に基づく処理を開始する。
【００２８】
本実施形態では、親ディスクリプタ及び子ディスクリプを含む階層型ディスクリプタを用いる。次に、図５を参照しながら、階層型でないディスクリプタを用いるデータ処理装置を説明する。
【００２９】
図５は階層型でないディスクリプタを用いるデータ処理装置の動作例を説明するための図であり、図８は図５のデータ処理装置の制御方法を示すフローチャートであり、図９は図５のデータ処理装置の制御方法を示すシーケンス図である。以下、図５、図８及び図９が、図１〜図４と異なる点を説明する。
【００３０】
メモリ１０２は、ディスクリプタ領域５０１、入力データ領域１１３及び出力データ領域１１５を有する。ディスクリプタ領域５０１は、第１のアプリケーション４０１のための第１のディスクリプタ５１１及び第２のアプリケーション４０２のための第２のディスクリプタ５１２を格納する。第１のディスクリプタ５１１は、図１の第１の子ディスクリプタ１５２と同様に、第１のソースアドレス１３１、第１のソースアドレスデータサイズ１３２、第１のディスティネーションアドレス１３３、第１のディスティネーションアドレスバッファサイズ１３４、及び制御情報１３５を有する。第２のディスクリプタ５１２は、図１の第２の子ディスクリプタ１５５と同様に、第２のソースアドレス１４１、第２のソースアドレスデータサイズ１４２、第２のディスティネーションアドレス１４３、第２のディスティネーションアドレスバッファサイズ１４４、及び制御情報１４５を有する。
【００３１】
図８において、ステップＳ３０１〜Ｓ３０５の処理が行われる。ステップＳ３０１〜Ｓ３０５は、図３のステップＳ３０１〜Ｓ３０５の処理と同じである。次に、ステップＳ８０６では、ＣＰＵ１０３は、第１のアプリケーション４０１のデータ処理要求に基づき、第１のディスクリプタ５１１をメモリ１０２に書き込む。次に、ＣＰＵ１０３は、図１と同じステップＳ３０７の処理を行う。次に、ステップＳ８０８では、ＤＭＡ回路１０４は、第１のディスクリプタ５１１をメモリ１０２から読み出す。次に、ステップＳ８０９では、ＤＭＡ回路１０４は、第１のディスクリプタ５１１内の第１のソースアドレス１３１及び第１のソースアドレスデータサイズ１３２を基に、メモリ１０２のアドレスＡＳ１から入力データ（処理データ）１５３を読み出す。次に、図１と同じステップＳ３１１〜Ｓ３１５の処理が行われる。次に、図１と同じステップＳ３２１の処理が行われる。
【００３２】
データ処理部１０５が圧縮データの伸長を行う場合、伸長後のデータ量は可変であり、予測困難である。ＤＭＡ回路１０４が伸長後のデータをメモリ１０２のデータ格納領域１５６に書き込む場合、伸長後のデータ量が予測困難であるため、大容量のデータ格納領域１５６を予め確保することにより、データ格納領域１５６の容量不足を回避する。しかし、この場合、必要最低限なデータ格納領域に比べ、非常に大きなデータ格納領域１５６が必要となる。図６に示すように、ＤＭＡ回路１０４は、データ格納領域１５６の一部の領域１５６ａに伸長後のデータを書き込むと、データが書き込まれない無駄な領域１５６ｂが生じ、メモリ１０２の使用方法が非効率的になってしまい、データ処理装置のメモリ１０２の容量不足を誘発する課題が発生する。
【００３３】
その場合、図１０に示すように、ステップＳ３０７の後、第２のアプリケーション４０２が、処理及び処理済みデータ格納領域確保要求をＣＰＵ１０３に出力すると、メモリ１０２の容量不足のため、ＣＰＵ１０３は、第２のアプリケーション４０２のためのデータ格納領域を確保することができない。そのため、ＣＰＵ１０３は、第１のアプリケーション４０１のためのデータ格納領域の解放が行われた後、入力データ１５４の領域及びデータ格納領域１５７を確保し、処理及び処理済みデータ格納領域確保完了を第２のアプリケーション４０２に通知する。その後、ＣＰＵ１０３は、第２のアプリケーション４０２の処理により、処理依頼予定データを入力データ１５４としてメモリ１０２に格納する。次に、ＣＰＵ１０３は、第２のアプリケーション４０２の処理により、データ処理要求を入力する。その後、第１のアプリケーション４０１のための上記の処理と同様に、第２のアプリケーション４０２のための処理を行う。
【００３４】
本実施形態（図１〜図４）によれば、適正容量のデータ格納領域１５６を確保し、データ格納領域１５６の容量が伸長後のデータのサイズ未満である場合には、追加のデータ格納領域２０２を確保する。したがって、本実施形態では、大きすぎるデータ格納領域１５６の確保を防止し、適正容量のデータ格納領域１５６及び２０２を確保することができるので、メモリ１０２の使用方法が効率的になり、データ処理装置のメモリ１０２の容量不足を防止することができる。
【００３５】
次に、図７及び図１１を参照しながら、図５のデータ処理装置がディスクリプタを追加することが困難な理由を説明する。図７は図５のデータ処理装置の動作例を説明するための図であり、図１１は図７のデータ処理装置の制御方法を示すシーケンス図である。以下、図７及び図１１が、図６及び図１０と異なる点を説明する。
【００３６】
図１１において、ステップＳ３１２の後、ＣＰＵ１０３は、第２のアプリケーション４０２の処理により、処理及び処理済みデータ格納領域確保要求を入力する。すると、ＣＰＵ１０３は、入力データ１５４の領域及びデータ格納領域１５７を確保し、処理及び処理済みデータ格納領域確保完了を第２のアプリケーション４０２に通知する。次に、ＣＰＵ１０３は、第２のアプリケーション４０２の処理により、処理依頼予定データを入力データ１５４としてメモリ１０２に格納する。次に、ＣＰＵ１０３は、第２のアプリケーション４０２の処理により、データ処理要求を入力する。次に、ＣＰＵ１０３は、第２のアプリケーション４０２のデータ処理要求に基づき、第２のディスクリプタ５１２をメモリ１０２に書き込む。
【００３７】
ここで、ＤＭＡ回路１０４は、ステップＳ３１５の後、第１のアプリケーション４０１のためのデータ格納領域１５６のサイズが処理済みのデータのサイズ未満であると判定する。そして、ステップＳ７１１では、ＤＭＡ回路１０４は、ディスクリプタ追加要求を、バス１０１を介してＣＰＵ１０３に出力する。しかし、メモリ１０２には、処理中の第１のディスクリプタ５１１の後に、第２のアプリケーション４０２のための第２のディスクリプタ５１２が書き込まれているため、ＣＰＵ１０３は、第１のアプリケーション４０１のためのディスクリプタ追加要求によるディスクリプタ７０１を追加することができない。第２のディスクリプタ５１２が既に書き込まれているため、ステップＳ７１２では、ＤＭＡ回路１０４は、第１のアプリケーション４０１の処理を再開するため、第２のディスクリプタ５１２をメモリ１０２から読み出す。次に、ＣＰＵ１０３は、バス１０１を介して、ＤＭＡ回路１０４に処理データ転送要求（再開要求）を出力する。次に、ステップＳ７１３では、ＤＭＡ回路１０４は、第２のディスクリプタ５１２内の第２のディスティネーションアドレス１４３を基に、メモリ１０２のアドレスＡＤ２のデータ格納領域１５７に、データ処理部１０５から入力した第１のアプリケーション４０１のための処理済みデータ７０２を誤って書き込んでしまう。
【００３８】
以上のように、第１のアプリケーション４０１のための第１のディスクリプタ５１１の後に、第２のアプリケーション４０２のための第２のディスクリプタ５１２がメモリ１０２に既に書き込まれていると、第１のアプリケーション４０１のための追加のディスクリプタ７０１をメモリ１０２に書き込むことができない。また、ＤＭＡ回路１０４は、ディスクリプタがどのアプリケーションによって設定されたかは判別できないため、第２のアプリケーション４０２が設定した第２のディスクリプタ５１２を第１のアプリケーション４０１が追加設定したディスクリプタと誤認識し（ステップＳ７１２）、第２のアプリケーション４０２が確保したデータ格納領域１５７に第１のアプリケーション４０１のためのデータ７０２を書き込んでしまう（ステップＳ７１３）。これでは、正常な書き込みが行われない。
【００３９】
本実施形態（図１〜図４）によれば、第２のアプリケーション４０２のための親ディスクリプタ１５８及び子ディスクリプタ１５５がメモリ１０２に書き込まれた後であっても、第１の子ディスクリプタ領域１１２が確保されているので、第１の子ディスクリプタ１５２の後に、追加の子ディスクリプタ２０１を書き込むことができる。これにより、追加の子ディスクリプタ２０１に対応するデータ格納領域２０２を新たに確保し、データ格納領域１５６及び２０２に、第１のアプリケーション４０１のためのデータを正常に書き込むことができる。
【００４０】
以上のように、本実施形態によれば、ディスリプタを階層構造化することにより、メモリ１０２の使用効率を上げ、必要なメモリ１０２の容量を最小限にとどめることができる。具体的には、データ格納領域１５６の不足時に新たなディスクリプタ２０１を容易に追加することが可能となる。また、ディスクリプタ２０１の追加が容易になることで、無駄に大きなデータ格納領域１５６の確保が不要となり、結果としてメモリ１０２の使用効率が向上し、必要なデータ格納領域を適正化することができる。メモリ１０２の使用効率の向上は、メモリ１０２の容量不足によるパフォーマンスの低下を防ぎ、さらにはデータ処理装置の全体的な性能向上につながる。
【００４１】
ＣＰＵ１０３は、第１のアプリケーション４０１の処理に従って、第１の親ディスクリプタ１５１及び第１の子ディスクリプタ１５２をメモリ１０２に書き込み、第２のアプリケーション４０２の処理に従って、第２の親ディスクリプタ１５８及び第３の子ディスクリプタ１５５をメモリ１０２に書き込む。
【００４２】
第１の親ディスクリプタ１５１は、第１の子ディスクリプタアドレス１２１を含む。第１の子ディスクリプタ１５２は、第１の親ディスクリプタ１５１内の第１の子ディスクリプタアドレス１２１に記憶され、第１のソースアドレス１３１、第１のソースアドレスデータサイズ１３２、第１のディスティネーションアドレス１３３及び第１のディスティネーションアドレスバッファサイズ１３４を含む。
【００４３】
第２の親ディスクリプタ１５８は、第３の子ディスクリプタアドレス１２１を含む。第３の子ディスクリプタ１５５は、第２の親ディスクリプタ１５８内の第３の子ディスクリプタアドレス１２１に記憶され、第３のソースアドレス１４１、第３のソースアドレスデータサイズ１４２、第３のディスティネーションアドレス１４３及び第３のディスティネーションアドレスバッファサイズ１４４を含む。
【００４４】
ＤＭＡ回路１０４は、ＣＰＵ１０３の第１のアプリケーション４０１の処理に従い、第１の親ディスクリプタ１５１を読み出し、第１の親ディスクリプタ１５１内の第１の子ディスクリプタアドレス１２１から第１の子ディスクリプタ１５２を読み出し、第１の子ディスクリプタ１５２内の第１のソースアドレス１３１に記憶されているデータ１５３を第１のソースアドレスデータサイズ１３２分読み出し、読み出したデータ１５３をデータ処理部１０５に出力し、データ処理部１０５により処理されたデータを入力し、処理されたデータを第１の子ディスクリプタ１５２内の第１のディスティネーションアドレス１３３に書き込む。
【００４５】
図３において、ＤＭＡ回路１０４は、ステップＳ３１６で、第１のディスティネーションアドレスバッファサイズ１３４がデータ処理部１０５により処理されたデータのサイズ未満である場合には、ステップＳ３１７で、子ディスクリプタの追加要求をＣＰＵ１０３に出力する。ＣＰＵ１０３は、ステップＳ３１８で、子ディスクリプタの追加要求を入力すると、第２の子ディスクリプタ２０１をメモリ１０２に書き込む。第２の子ディスクリプタ２０１は、第１の子ディスクリプタ１５２と同様に、第２のソースアドレス、第２のソースアドレスデータサイズ、第２のディスティネーションアドレス及び第２のディスティネーションアドレスバッファサイズを含む。ＣＰＵ１０３は、第２のディスティネーションアドレスに第２のディスティネーションアドレスバッファサイズの領域を確保する。ステップＳ３１９では、ＣＰＵ１０３は、ＤＭＡ回路１０４の再開要求を出力する。ＤＭＡ回路１０４は、再開要求を入力すると、ステップＳ３２０で、第２の子ディスクリプタ２０１を読み出し、ステップＳ３１５で、データ処理部１０５により処理されたデータを第２の子ディスクリプタ２０１内の第２のディスティネーションアドレスに書き込む。
【００４６】
また、ＤＭＡ回路１０４は、ＣＰＵ１０３の第２のアプリケーション４０２の処理に従い、第２の親ディスクリプタ１５８を読み出し、第２の親ディスクリプタ１５８内の第３の子ディスクリプタアドレス１２１から第３の子ディスクリプタ１５５を読み出し、第３の子ディスクリプタ１５５内の第３のソースアドレス１４１に記憶されているデータ１５４を第３のソースアドレスデータサイズ１４２分読み出し、読み出したデータ１５４をデータ処理部１０５に出力し、データ処理部１０５により処理されたデータを入力し、処理されたデータを第３の子ディスクリプタ１５５内の第３のディスティネーションアドレス１４３に書き込む。
【００４７】
第１の親ディスクリプタ１５１及び第２の親ディスクリプタ１５８は、親ディスクリプタ領域１１１に書き込まれる。第１の子ディスクリプタ１５２及び第２の子ディスクリプタ２０１は、第１の子ディスクリプタ領域１１２に書き込まれる。第３の子ディスクリプタ１５５は、第２の子ディスクリプタ領域１１４に書き込まれる。
【００４８】
ＣＰＵ１０３は、親ディスクリプタ領域１１１において、第１の親ディスクリプタ１５１の後に第２の親ディスクリプタ１５８を書き込む。また、ＣＰＵ１０３は、第１の子ディスクリプタ領域１１２において、第１の子ディスクリプタ１５２の後に第２の子ディスクリプタ２０１を書き込む。
【００４９】
本実施形態によれば、適正量のバッファサイズの領域１５６及び２０２を確保することができるので、メモリ１０２を効率的に使用することができる。
【００５０】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００５１】
１０１  バス
１０２  メモリ
１０３  ＣＰＵ
１０４  ＤＭＡ回路
１０５  データ処理部
１１１  親ディスクリプタ領域
１１２  第１の子ディスクリプタ領域
１１３  入力データ領域
１１４  第２の子ディスクリプタ領域
１１５  出力データ領域
【図１】
2015215850.tif 000003
【図２】
2015215850.tif 000004
【図３】
2015215850.tif 000005
【図４】
2015215850.tif 000006
【図５】
2015215850.tif 000007
【図６】
2015215850.tif 000008
【図７】
2015215850.tif 000009
【図８】
2015215850.tif 000010
【図９】
2015215850.tif 000011
【図１０】
2015215850.tif 000012
【図１１】
2015215850.tif 000013