(57)【要約】【課題】データ処理装置において、ストレージへのデータバッファリングに起因する後段処理の遅延を低減する。【解決手段】  メインコントローラー２は、書込側プロセス２１で実行される書込側プログラム４１から、読出側プロセス２２で実行される読出側プログラム５１へ、ＨＤＤ４におけるファイルの識別子を通知した後に、書込側プロセス２１でＨＤＤ４に一連の複数のバンドデータを順番に書き込み、読出側プロセス２２で実行される読出側プログラム５１でその識別子を受領すると、その識別子に対応するファイルから一連の複数のバンドデータを読み出す。【選択図】  図３
2011193297.tif 000002
【特許請求の範囲】
【請求項１】
所定単位のデータを構成する一連の複数のデータブロックをストレージに書き込み、前記ストレージからその一連の複数のデータブロックを読み出すストレージコントローラーと、
前記ストレージコントローラーを制御するプロセッサーを備え、
前記プロセッサーは、
書込側プロセスおよび読出側プロセスを生成し、
前記書込側プロセスから前記読出側プロセスへ、前記ストレージにおける記憶領域の識別子を通知した後、前記書込側プロセスを用いて、前記ストレージコントローラーに前記一連の複数のデータブロックを順番に書き込ませ、
前記読出側プロセスで前記識別子を受領すると、前記読出側プロセスを用いて前記ストレージコントローラーに、その識別子に対応する前記記憶領域から前記一連の複数のデータブロックを読み出させること、
を特徴とするデータ処理装置。
【請求項２】
前記プロセッサーは、
１つのデータブロックが書き込まれるたびに、前記書込側プロセスでイベントを発行し、
前記読出側プロセスで前記識別子を受領すると、前記読出側プロセスを用いて、前記ストレージコントローラーにその識別子に対応する前記記憶領域からの前記一連の複数のデータブロックの読み出しを待機させ、
前記読出側プロセスで、前記待機状態で前記イベントを受領すると、前記読出側プロセスを用いて、前記ストレージコントローラーに前記記憶領域から１つのデータブロックを読み出させること、
を特徴とする請求項１記載のデータ処理装置。
【請求項３】
前記プロセッサーは、
前記書込側プロセスで第１スレッドおよび第３スレッドを生成し、
前記読出側プロセスで第２スレッドおよび第４スレッドを生成し、
前記ストレージにおける記憶領域の識別子を前記第１スレッドから前記第２スレッドへ通知した後、前記第１スレッドで、前記一連の複数のデータブロックのそれぞれについてのデータ書込要求を順番にキューイングし、
前記第３スレッドを用いて、キューイングされた前記データ書込要求の順番で、前記ストレージコントローラーに前記一連の複数のデータブロックを書き込ませ、
前記第２スレッドで、前記識別子を受領すると、前記一連の複数のデータブロックのそれぞれについてのデータ読出要求を順番にキューイングし、
前記第４スレッドを用いて、キューイングされた前記データ読出要求の順番で、前記ストレージコントローラーに前記一連の複数のデータブロックを読み出させること、
を特徴とする請求項１記載のデータ処理装置。
【請求項４】
前記プロセッサーは、
１つのデータブロックが書き込まれるたびに、前記第１スレッドでイベントを発行し、
前記第２スレッドで前記イベントを受領すると、前記第４スレッドを用いて、前記ストレージコントローラーに前記記憶領域から１つのデータブロックを読み出させること、
を特徴とする請求項３記載のデータ処理装置。
【請求項５】
前記プロセッサーは、
前記第３スレッドで前記データブロックをメモリーに記憶し、
前記第１スレッドで前記データブロックのデータ書込要求をキューイングするたびにイベントを発行し、
前記ストレージへの前記データブロックの書込が完了したときに、前記第３スレッドで前記データブロックをメモリーから消去し、
前記キューイングされた前記データ読出要求を順番に実行するとき、前記メモリーに前記データブロックがあれば、前記第４スレッドで前記メモリーからそのデータブロックを読み出し、前記メモリーに前記データブロックがなければ、前記第４スレッドを用いて、前記ストレージコントローラーに前記ストレージから前記データブロックを読み出させること、
を特徴とする請求項３記載のデータ処理装置。
【請求項６】
前記メモリーは、前記書込側プロセスおよび前記読出側プロセスの共有メモリーであり、
前記書込側プロセスで生成される前記データ書込要求と、前記読出側プロセスで生成される前記データ読出要求とは、データ読出かデータ書込かを識別可能な状態で同一のキューに登録され、
前記キューは、同時に１つのプロセスからしかアクセスできないように排他制御されていること、
を特徴とする請求項３記載のデータ処理装置。
【請求項７】
前記一連の複数のデータブロックは、前記ストレージにおけるファイルに書き込まれ、
前記記憶領域の識別子は、前記ファイルの識別子であること、
を特徴とする請求項１から請求項６のうちのいずれか１項記載のデータ処理装置。
【請求項８】
前記一連の複数のデータブロックは、１ページの画像データを構成する複数のバンドデータであり、
前記ストレージは、前記画像データに対する画像処理の前または後に前記画像データを一時的に記憶するバッファーであること、
を特徴とする請求項１から請求項７のうちのいずれか１項記載のデータ処理装置。
【請求項９】
所定単位のデータを構成する一連の複数のデータブロックをストレージに書き込み、前記ストレージからその一連の複数のデータブロックを読み出すためのデータ処理プログラムであって、
データ処理装置のプロセッサーに
書込側プロセスおよび読出側プロセスを生成するステップと、
前記ストレージにおける記憶領域の識別子を前記書込側プロセスから前記読出側プロセスへ通知するステップと、
前記通知ステップの後、前記書込側プロセスを用いて、前記ストレージコントローラーに前記一連の複数のデータブロックを順番に書き込ませるステップと、
前記読出側プロセスで前記識別子を受領すると、前記読出側プロセスを用いて、前記ストレージコントローラーにその識別子に対応する前記記憶領域から前記一連の複数のデータブロックを読み出させるステップと、
を実行させることを特徴とするデータ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置およびデータ処理プログラムに関するものである。
【背景技術】
【０００２】
一般的に、コピー機、複合機などの画像形成装置は、各種画像処理を行うデータ処理装置を内蔵している。そのようなデータ処理装置は、画像データをバッファリングする際に、書込側プログラム（例えばある画像処理プログラム）により、１ページ分の画像データを、ハードディスクドライブ（ＨＤＤ）などのストレージ内のファイルに記憶した後、そのファイルのファイル識別子を読出側プログラム（例えば後段の画像処理プログラム）へ通知する。その読出側プログラムが、ストレージのそのファイルからその画像データを読み出す。
【０００３】
その他、ＨＤＤにデータを書き込む際に、バッファーとしてＦＩＦＯ（First-In First-Out）を設け、１つのスレッドで、そのＦＩＦＯにデータを書き込み、別のスレッドで、そのＦＩＦＯからＨＤＤへデータを書き込む技術がある（例えば特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−１７９４９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述のように、通常、所定単位（上述の場合、ページ）のデータがストレージへ記憶された後に、そのデータを読み出すため、データ書込とデータ読出が逐次的に行われることになる。このため、所定単位のデータのデータ書込が完了する前は、そのデータを読み出すことができず、バッファリング後の処理に遅延が生じてしまう。
【０００６】
本発明は、上記の問題に鑑みてなされたものであり、ストレージへのデータバッファリングに起因する処理の遅延を低減することができるデータ処理装置およびデータ処理プログラムを得ることを目的とする。
【課題を解決するための手段】
【０００７】
上記の課題を解決するために、本発明では以下のようにした。
【０００８】
本発明に係るデータ処理装置は、ストレージコントローラーと、前記ストレージコントローラーを制御するプロセッサーを含む。ストレージコントローラーは、所定単位のデータを構成する一連の複数のデータブロックをストレージに書き込み、ストレージからその一連の複数のデータブロックを読み出す。プロセッサーは、(i) 書込側プロセスおよび読出側プロセスを生成し、(ii) 書込側プロセスから読出側プロセスへ、ストレージにおける記憶領域の識別子を通知した後、(iii) 書込側プロセスを用いて、ストレージコントローラーに一連の複数のデータブロックを順番に書き込ませ、(iv) 読出側プロセスで識別子を受領すると、その識別子に対応する記憶領域から一連の複数のデータブロックを読み出させる。
【０００９】
これにより、ストレージへのデータ書込前に、バッファー用の記憶領域の識別子が読出側プロセスへ渡され、書込側プロセスとは独立して読出側プロセスでデータ読出を開始できるため、データ書込途中でもデータ読出を行うことができる。したがって、ストレージへのデータバッファリング後の処理の遅延を低減することができる。
【００１０】
また、本発明に係るデータ処理装置は、上記のデータ処理装置に加え、次のようにしてもよい。この場合、プロセッサーは、書込側プロセスで１つのデータブロックを書き込むたびにイベントを発行し、読出側プログラムで、識別子を受領すると、その識別子に対応する記憶領域からの一連の複数のデータブロックの読み出しを待機状態で開始し、待機状態でイベントを受領すると、記憶領域から１つのデータブロックを読み出す。
【００１１】
これにより、所定単位のデータを分割した複数のデータブロックの１つ１つが、書込完了後ただちに読み出し可能となる。このため、ストレージへのデータバッファリングに起因する後段処理の遅延を低減することができる。
【００１２】
また、本発明に係るデータ処理装置は、上記のデータ処理装置のいずれかに加え、次のようにしてもよい。この場合、プロセッサーは、書込側プロセスの第１スレッドで実行される書込側プログラムから、読出側プロセスの第２スレッドで実行される読出側プログラムへ、ストレージにおける記憶領域の識別子を通知した後に、書込側プロセスで一連の複数のデータブロックのそれぞれについてのデータ書込を順番にキューイングし、書込側プロセスの第３スレッドで実行されるストレージ書込プログラムで、キューイングされているデータ書込を実行し、読出側プログラムで識別子を受領すると、読出側プロセスで一連の複数のデータブロックのそれぞれについてのデータ読出を順番にキューイングし、読出側プロセスの第４スレッドで実行されるストレージ読出プログラムで、キューイングされているデータ読出を実行する。
【００１３】
これにより、ストレージへの書込を行うプログラムが別のスレッドで動作するため、非同期でのデータ書込となり、書込側プログラムがデータ書込の完了を待たずに別の処理を実行することができる。また、ストレージからの読出を行うプログラムが別のスレッドで動作するため、非同期でのデータ読出となり、読出側プログラムがデータ読出の完了を待たずに別の処理を実行することができる。
【００１４】
また、本発明に係るデータ処理装置は、上記のデータ処理装置のいずれかに加え、次のようにしてもよい。この場合、プロセッサーは、書込側プロセスで１つのデータブロックを書き込むたびにイベントを発行し、読出側プロセスでイベントを受領すると、ストレージ読出プログラムで、記憶領域からの１つのデータブロックを読み出す。
【００１５】
また、本発明に係るデータ処理装置は、上記のデータ処理装置のいずれかに加え、次のようにしてもよい。この場合、プロセッサーは、書込側プロセスで、データブロックをメモリーに記憶し、データブロックについてのデータ書込をキューイングするたびにイベントを発行し、データ書込が完了したときにデータブロックをメモリーから消去し、読出側プロセスで、イベントを受領すると、ストレージ読出プログラムで、キューイングされているデータ読出の実行するときに、メモリーにデータブロックがあれば、ストレージからそのブロックデータを読み出さずにメモリーからそのデータブロックを読み出し、メモリーにそのデータブロックがなければ、ストレージからそのデータブロックを読み出す。
【００１６】
これにより、データがまだ削除されずにメモリーに残っていれば、ただちにメモリー上のデータブロックを使用できるため、ストレージからの読み出しより短時間でデータを読み出すことができ、データ読出時の遅延を低減することができる。
【００１７】
また、本発明に係るデータ処理装置は、上記のデータ処理装置のいずれかに加え、次のようにしてもよい。この場合、上述のメモリーは、書込側プロセスおよび読出側プロセスの共有メモリーであり、書込側プロセスで生成されるデータ書込と、読出側プロセスで生成されるデータ読出とは、データ読出かデータ書込かを識別可能な状態で同一のキューに登録され、キューは、同時に１つのプロセスからしかアクセスできないように排他制御されている。
【００１８】
これにより、１つのキューを排他制御すればよく、キューイングのためのリソース（セマフォなど）が少なくても済む。
【００１９】
また、本発明に係るデータ処理装置は、上記のデータ処理装置のいずれかに加え、次のようにしてもよい。この場合、上述の一連の複数のデータブロックは、ストレージにおけるファイルに書き込まれ、記憶領域の識別子は、ファイルの識別子である。
【００２０】
これにより、バッファー用の記憶領域をファイルシステムで管理することができ、各プロセスからのストレージ内のデータへのアクセスを簡単に行うことができる。
【００２１】
また、本発明に係るデータ処理装置は、上記のデータ処理装置のいずれかに加え、次のようにしてもよい。この場合、一連の複数のデータブロックは、１ページの画像データを構成する複数のバンドデータである。ストレージは、画像データに対する画像処理の前または後に画像データを一時的に記憶するバッファーである。
【００２２】
本発明に係るデータ処理プログラムは、プロセッサーに、書込側プロセスで、所定単位のデータを構成する一連の複数のデータブロックをストレージに書き込む処理、および読出側プロセスでストレージからその一連の複数のデータブロックを読み出す処理を実行させるためのデータ処理プログラムである。そして、このデータ処理プログラムは、プロセッサーに、（ａ）書込側プロセスで実行される書込側プログラムから、読出側プロセスで実行される読出側プログラムへ、ストレージにおける記憶領域の識別子を通知するステップと、（ｂ）書込側プロセスで実行される書込側プログラムから、読出側プロセスで実行される読出側プログラムへ、ストレージにおける記憶領域の識別子を通知した後に、書込側プロセスでストレージに一連の複数のデータブロックを順番に書き込むステップと、（ｃ）読出側プロセスで実行される読出側プログラムで識別子を受領すると、その識別子に対応する記憶領域から一連の複数のデータブロックを読み出すステップとを実行させる。
【００２３】
これにより、ストレージへのデータ書込前に、バッファー用の記憶領域の識別子が読出側プロセスへ渡され、書込側プロセスとは独立して読出側プロセスでデータ読出を開始できるため、データ書込途中でもデータ読出を行うことができる。したがって、ストレージへのデータバッファリングに起因する後段処理の遅延を低減することができる。
【発明の効果】
【００２４】
本発明によれば、データ処理装置において、ストレージへのデータバッファリングに起因する後段処理の遅延を低減することができる。
【図面の簡単な説明】
【００２５】
【図１】図１は、本発明の実施の形態に係るデータ処理装置の構成を示すブロック図である。
【図２】図２は、図１におけるデータ処理回路で取り扱うデータの構造を示す図である。
【図３】図３は、実施の形態１におけるメインコントローラーを説明するブロック図である。
【図４】図４は、実施の形態１におけるメインコントローラーの動作を説明するフローチャートである。
【図５】図５は、実施の形態２におけるメインコントローラーを説明するブロック図である。
【図６】図６は、実施の形態２におけるメインコントローラーの書込側プロセスの動作を説明するフローチャートである。
【図７】図７は、実施の形態２におけるメインコントローラーの読出側プロセスの動作を説明するフローチャートである。
【図８】図８は、図５におけるキューシステム内の共有メモリー領域を示す図である。
【図９】図９は、実施の形態３におけるメインコントローラーの書込側プロセスの動作を説明するフローチャートである。
【図１０】図１０は、実施の形態３におけるメインコントローラーの読出側プロセスの動作を説明するフローチャートである。
【図１１】図１１は、実施の形態３におけるＲＡＭからのバンドデータの読出について説明する図である。
【発明を実施するための形態】
【００２６】
以下、図に基づいて本発明の実施の形態を説明する。
【００２７】
実施の形態１．
【００２８】
図１は、本発明の実施の形態に係るデータ処理装置の構成を示すブロック図である。図１に示すデータ処理装置は、データ処理回路１、メインコントローラー２、ＲＡＭ（Random Access Memory）３、ハードディスクドライブ（ＨＤＤ）４、スキャナー５、印刷エンジン制御回路６、記憶装置７、用紙に印刷を行う印刷エンジン（図示せず）などを有する。
【００２９】
データ処理回路１は、スキャナー５などから画像データを、バンド単位またはページ単位で処理し、ＨＤＤ４または印刷エンジン制御回路６へ出力する装置である。
【００３０】
メインコントローラー２は、データ処理回路１内の各部へ指令を供給する装置である。メインコントローラー２は、バスインタフェース回路１１およびバス１２を介してデータ処理回路１内の各部へ指令を供給する。メインコントローラー２は、ＣＰＵ（Central Processing Unit）などのプロセッサーであり、記憶装置７に記憶されているデータ処理プログラム８に従って指令を出力する。
【００３１】
ＲＡＭ３は、データ処理回路１による処理においてバンドデータなどを一時的に記憶するためのメモリーである。ＲＡＭ３としては、例えば、１または複数のＤＲＡＭ（Dynamic RAM）が使用される。
【００３２】
ＨＤＤ４は、１ページの画像データを構成する一連の複数のバンドデータを一時的に記憶するためのストレージデバイスである。
【００３３】
スキャナー５は、原稿の画像を光学的に読み取り、その画像読み取りにより得られる画像データを出力する装置である。
【００３４】
印刷エンジン制御回路６は、印刷エンジンへ印刷画像データを供給するとともに、印刷エンジンを制御して印刷を実行させる回路である。
【００３５】
記憶装置７は、フラッシュメモリーなどの不揮発性の記憶装置であり、メインコントローラー２の使用する各種プログラムやデータを記憶する。ここでは、データ処理プログラム８が記憶装置７に記憶されている。
【００３６】
ここで、データ処理回路１の構成について説明する。
【００３７】
データ処理回路１は、バスインタフェース回路１１、バス１２、メモリーインタフェース１３、ＨＤＤコントローラー１４、データ取得回路１５、画像処理回路１６、ラスタ処理回路１７、ハーフトーン処理回路１８、およびデータ出力回路１９を有する。なお、データ処理回路１は、ＡＳＩＣ（Application Specific Integrated Circuit）として実現される。
【００３８】
バスインタフェース回路１１は、メインコントローラー２をバス１２に接続する回路である。
【００３９】
メモリーインタフェース１３は、ＲＡＭ３とバス１２との間のデータおよび指令の送受を行う回路である。
【００４０】
ＨＤＤコントローラー１４は、メインコントローラー２からの指令に応じて、ＨＤＤ４に対してデータの読み書きを行う回路である。
【００４１】
データ取得回路１５は、メインコントローラー２からの指令に応じて、スキャナー５から画像データをバンドデータとして順番に取得し、ＲＡＭ３またはＨＤＤ４に記憶する回路である。データ取得回路１５は、ＤＭＡ（Direct Memory Access）コントローラーを有する。例えば、バンドデータは、１２８ライン分のデータであって、１ページにつき５８バンド分のバンドデータがある。
【００４２】
図２は、このデータ処理回路１で取り扱うデータの構造を示す図である。１つのドキュメントデータが、１または複数のページデータで構成される。ページデータは、所定数のバンドデータで構成される。ドキュメントの構造は、ノードのリストで表現され、ドキュメントのノードデータは、ページのノードデータへのリンクを含み、ページのノードデータは、バンドのノードデータへのリンクを含む。バンドのノードデータは、ページ内でのバンドの識別情報、バンドデータの状態などを含む。したがって、これらのリンクにより、ドキュメント内のあるページのあるバンドのデータを特定可能である。
【００４３】
画像処理回路１６は、メインコントローラー２からの指令に応じて、画像データのバンドデータをＲＡＭ３またはＨＤＤ４から読み出し、それらのバンドデータに対して所定の画像処理（画像拡大、画像縮小、色変換など）を実行し、処理後のバンドデータをＲＡＭ３またはＨＤＤ４に記憶する回路である。画像処理回路１６は、ＤＭＡコントローラーを有する。
【００４４】
ラスタ処理回路１７は、画像データのバンドデータをＲＡＭ３またはＨＤＤ４から読み出し、それらのバンドデータに対してラスタライズを実行し、ラスタデータを生成する回路である。ラスタデータは、バンドごとに、ＨＤＤ４に記憶され、ハーフトーン処理実行時にＲＡＭ３に読み出される。
【００４５】
ハーフトーン処理回路１８は、バンドごとにラスタデータをＲＡＭ３から読み出し、ハーフトーン処理を実行し、ハーフトーン処理後のデータをＲＡＭ３に記憶する回路である。
【００４６】
データ出力回路１９は、ハーフトーン処理後のデータをＲＡＭ３から読み出し印刷エンジン制御回路６へ供給する回路である。
【００４７】
データ処理回路１では、スキャナー５から取得された画像データに対して、回転、拡大／縮小などの画像処理が必要に応じて施される。その後、ハーフトーニングで印刷画像データが生成され、印刷エンジン制御回路６へ出力される。これらのデータ処理の途中で、バンド単位でのデータバッファリングにはＲＡＭ３が使用され、ページ単位でのデータバッファリングにはＨＤＤ４が使用される。
【００４８】
次に、上記データ処理装置による、ＨＤＤ４へのデータ書込およびデータ読出の動作について説明する。
【００４９】
図３は、実施の形態１におけるメインコントローラー２の動作を説明するブロック図である。図４は、実施の形態１におけるメインコントローラー２の動作を説明するフローチャートである。
【００５０】
メインコントローラー２では、マルチプロセスおよびマルチスレッド対応のオペレーティングシステムが稼働している。メインコントローラー２は、データ処理プログラム８を実行し、まず、書込側プロセス２１および読出側プロセス２２を生成する。メインコントローラー２は、書込側プロセス２１および読出側プロセス２２を使用して、ＨＤＤ４にデータをバッファリングするアプリケーション２３を実行する。アプリケーション２３のうち、書込側プログラム４１は、書込側プロセス２１内の書込側スレッド３１で実行される。メインコントローラー２は、書込側プログラム４１を実行することにより、ＨＤＤコントローラー１４にＨＤＤ４へバンドデータを書き込ませることが可能になる。一方、アプリケーション２３のうち、読出側プログラム５１は、プロセス２２内の読出側スレッド３２で実行される。メインコントローラー２は、読出側プログラム５１の実行により、ＨＤＤコントローラーにＨＤＤ４からバンドデータを読み出させることが可能になる。
【００５１】
メインコントローラー２は、書込側スレッド３１で書込側プログラム４１を実行することにより、バンドデータの書込先となるファイルのファイル識別子を、読出側プロセス２２の読出側プログラム５１に通知する（ステップＳ１）。ファイル識別子は、例えばファイル名とされる。メインコントローラー２は、書込側プログラム４１に従い、ＡＰＩ４２でファイルシステム６１の共有ライブラリーを呼び出し、そのファイル識別子のファイルをオープンし、ファイルハンドルを生成する（ステップＳ２）。
【００５２】
メインコントローラー２は、ファイルオープン後、書込側スレッド３１で書込側プログラム４１により、ファイルシステム６１のＡＰＩ４２を呼び出し、バンドデータをＨＤＤ４内のファイルに書き込むようＨＤＤコントローラー１４を制御する（ステップＳ３）。ここで、メインコントローラー２は、バンドデータを、ＤＭＡ転送でＲＡＭ３から読み出す。ＨＤＤコントローラー１４は、ＲＡＭ３から読み出されたバンドデータをＨＤＤ４へ書き込む。１つのバンドデータのデータ書込が完了すると、メインコントローラー２は、ＡＰＩ４２により、イベントを発行する（ステップＳ４）。メインコントローラー２は、書込側スレッド３１で書込側プログラム４１に従い、書き込みが完了したバンドデータをＲＡＭ３から消去する（ステップＳ５）。
【００５３】
このようにして、１ページ分の複数のバンドデータが順番に書き込まれる。そして、１ページ分のすべてのバンドデータの書込が完了すると（ステップＳ６）、メインコントローラー２は、書込側プログラム４１に従い、ＡＰＩ４２を用いて、ファイルシステム６１の共有ライブラリーを呼び出し、ファイル識別子に対応するファイルをクローズする（ステップＳ７）。
【００５４】
一方、メインコントローラー２は、読出側スレッド３２で読出側プログラム５１を実行する。ここで、読出側プログラム５１は、書込側とは非同期で動作している。メインコントローラー２は、読出側スレッド３２で読出側プログラム５１に従い、書込側スレッド３１からファイル識別子を受領すると（ステップＳ１１）、ファイル識別子に対応するファイルをオープンし、ファイルハンドルを生成する（ステップＳ１２）。
【００５５】
メインコントローラー２は、ファイルオープン後、読出側スレッド３２で読出側プログラム５１に従い、イベントを受領するまで待機する（ステップＳ１３）。メインコントローラー２は、書込側からのイベントを受領すると、読出側スレッド３２で読出側プログラムコード５１に従い、ファイルシステム６１のＡＰＩ５２を呼び出し、１つのバンドデータをＨＤＤ４内のファイルから読み出すようＨＤＤコントローラー１４を制御する（ステップＳ１４）。ここで、ＨＤＤコントローラー１４は、バンドデータを、ＨＤＤ４から読み出す。メインコントローラー２は、ＨＤＤ４から読み出されたバンドデータを、ＤＭＡ転送でＲＡＭ３へ書き込む。
【００５６】
このようにして、書込側からのイベントにつき１つずつ、バンドデータが順番に読み出される。そして、１ページ分のすべてのバンドデータの読出が完了すると（ステップＳ１５）、メインコントローラ２は、読出側スレッド３２で読出側プログラム５１に従い、フＡＰＩ５２を用いてファイルシステム６１の共有ライブラリーを呼び出し、ファイル識別子に対応するファイルをクローズする（ステップＳ１６）。ここで、ＨＤＤコントローラー１４は、クローズされたファイルをＨＤＤ４から消去する。
【００５７】
以上のように、上記実施の形態１によれば、メインコントローラー２は、(i) 書込側プロセスおよび読出側プロセスを生成し、(ii)書込側プロセス２１から読出側プロセス２２へ、ＨＤＤ４におけるファイルのファイル識別子を通知した後に、(iii) 書込側プロセス２１を用いて、ＨＤＤコントローラー１４に一連の複数のバンドデータを順番にＨＤＤ４へ書き込ませ、(iv) 読出側プロセス２２でファイル識別子を受領すると、読出側プロセス２２を用いて、ＨＤＤコントローラー１４に、そのファイル識別子に対応するファイルから一連の複数のバンドデータを読み出させる。
【００５８】
これにより、ＨＤＤ４へのデータ書込前に、バッファー用の記憶領域（つまり、ファイル）の識別子（つまりファイル識別子）が読出側プロセス２２へ渡され、書込側プロセス２１とは独立して読出側プロセス２２でデータ読み出しを開始できるため、データ書込途中でもデータ読出を行うことができる。したがって、ストレージ（ＨＤＤ４）へのデータバッファリングに起因する後段処理の遅延を低減することができる。
【００５９】
実施の形態２．
【００６０】
本発明の実施の形態２では、メインコントローラー２は、アプリケーション２３の動作する書込側スレッドおよび読出側スレッドとは別に、ファイルへバンドデータをデータ書き込む共有ライブラリーのプログラが動作するスレッド、およびファイルからバンドデータを読み出す共有ライブラリーのプログラムが動作するスレッドを生成する。これにより、データ処理装置は、アプリケーション２３の処理とは非同期にバンドデータの書込および読出処理を実行する。
【００６１】
なお、実施の形態２に係るデータ処理装置の基本的な構成は、実施の形態１（図１）と同様であるので、その説明を省略する。実施の形態２におけるメインコントローラー２の動作について以下に説明する。
【００６２】
図５は、実施の形態２におけるメインコントローラー２の動作を説明するブロック図である。図６は、実施の形態２におけるメインコントローラー２の書込側プロセス２１の動作を説明するフローチャートである。図７は、実施の形態２におけるメインコントローラー２の読出側プロセス２２の動作を説明するフローチャートである。
【００６３】
メインコントローラー２では、マルチプロセスおよびマルチスレッド対応のオペレーティングシステムが稼働している。メインコントローラー２は、データ処理プログラム８を実行し、まず、書込側プロセス２１および読出側プロセス２２を生成する。メインコントローラー２は、書込側プロセス２１および読出側プロセス２２を使用して、ＨＤＤ４にデータをバッファリングするアプリケーション２３を実行する。アプリケーション２３のうち、書込側プログラム４１は、書込側プロセス２１内の書込側スレッド３１ａで実行される。メインコントローラー２は、書込側プログラム４１を実行することにより、ＨＤＤコントローラー１４にＨＤＤ４へバンドデータを書き込ませることが可能になる。一方、アプリケーション２３のうち、読出側プログラム５１は、プロセス２２内の読出側スレッド３２ｂで実行される。メインコントローラー２は、読出側プログラム５１の実行により、ＨＤＤコントローラーにＨＤＤ４からバンドデータを読み出させることが可能になる。
【００６４】
そして、実施の形態２では、メインコントローラー２は、書込側プロセス２１内でファイル書込スレッド３１ｂを生成して、そのファイル書込スレッド３１ｂで、ファイルへのデータ書込を行う共有ライブラリーのプログラム７１を実行する。メインコントローラー２は、読出プロセス２２内でファイル読出スレッド３２ｂを生成して、そのファイル読出スレッド３２ｂで、ファイルからのバンドデータの読出を行う共有ライブラリーのプログラム８１を実行する。さらに、メインコントローラー２は、アプリケーション２３で発生するデータ書込要求およびデータ読出要求をアクセス要求としてキューシステム９１にキューイングし、ファイル書込プログラム７１およびファイル読出プログラム８１を実行し、キューシステム９１にキューイングされているアクセス要求に基づいて、バンドデータの書込および読出を実行していく。これにより、データ処理装置は、アプリケーション２３の処理とは非同期にバンドデータの書込および読出を実行する。
【００６５】
メインコントローラー２は、書込側スレッド３１ａで書込側プログラム４１を実行することにより、バンドデータの書込先となるファイルのファイル識別子を、読出側プロセス２２の読出側プログラム５１に通知する（ステップＳ２１）。ファイル識別子は、例えばファイル名とされる。メインコントローラー２は、書込側プログラム４１に従い、ＡＰＩ４２でファイルシステム６１の共有ライブラリーを呼び出し、そのファイル識別子のファイルをオープンし、ファイルハンドルを生成する（ステップＳ２２）。
【００６６】
メインコントローラー２は、ファイルオープン後、書込側スレッド３１ａで書込側プログラム４１に従い、ファイルシステム６１のＡＰＩ４２を呼び出し、ファイル識別子に対応するファイルへのバンドデータのデータ書込要求を順に、キューシステム９１にキューイングする。メインコントローラー２は、データ書込要求に応じて、書込側プログラム４１に従い、ファイル書込スレッド３１ｂに対して各バンドデータの書込指令を供給する（ステップＳ２３）。書込指令では、書込の対象となるバンドデータの識別情報（つまり、そのバンドデータを含むドキュメントの識別情報、そのバンドデータを含むページの識別情報、およびそのページ内でのバンドデータの識別情報）が指定される。メインコントローラー２は、全てのバンドデータのデータ書込要求をキューイングするまで、ステップＳ２３の処理を繰り返す（ステップＳ２４）。
【００６７】
図８は、図５におけるキューシステム９１内の共有メモリー領域を示す図である。この共有メモリー領域は、ＲＡＭ３上に割り当てられ、その物理アドレスが、書込側プロセス２１および読出側プロセス２２の論理アドレスにマッピングされ、各プロセスから共有メモリー領域へのアクセスが可能となる。キューシステム９１において、この共有メモリー領域は、ドキュメントリスト領域、ページリスト領域、ＦＤリスト領域、およびキュー領域を有する。
【００６８】
ドキュメントリスト領域には、ＡＰＩ４２またはＡＰＩ５２により、書込対象または読出対象のバンドデータを含むドキュメントのノードデータが記憶される。ドキュメントのノードデータは、このドキュメントを構成するページのノードデータへのリンク情報を有する。
【００６９】
ページリスト領域には、ＡＰＩ４２またはＡＰＩ５２により、書込対象または読出対象のバンドデータを含むページのノードデータが記憶される。ページのノードデータは、このページを構成するバンドのノードデータへのリンク情報、およびファイルディスクリプターへのリンク情報を有する。
【００７０】
バンドリスト領域には、ＡＰＩ４２またはＡＰＩ５２により、書込対象または読出対象のバンドのノードデータが記憶される。バンドのノードデータは、このバンドの属するドキュメントおよびページのＩＤやシリアル番号を有し、さらに、ファイル内でのバンドデータの識別情報（シリアル番号など）を有する。
【００７１】
ＦＤリスト領域には、ＡＰＩ４２またはＡＰＩ５２により、ページごとに、そのページに対応するファイルのファイルディスクリプターが書き込まれる。
【００７２】
キュー領域には、ＡＰＩ４２またはＡＰＩ５２により、バンドデータごとにアクセス要求が書き込まれる。アクセス要求は、アクセス種別（書き込みまたは読み出し）、および対象のバンドデータの識別情報を含む。したがって、１つのキューに、データ書込要求とデータ読出要求が混在する。
【００７３】
このキューシステム９１へのアクセスは、セマフォにより排他制御され、書込側スレッド３１ａ，ファイル書込スレッド３１ｂ，読出側スレッド３２ａ，ファイル読出スレッド３２ｂのうちの２つ以上から同時にアクセスできないようになっている。
【００７４】
一方、メインコントローラー２は、ファイル書込スレッド３１ｂで、ファイル書込プログラム７１に従い、キュー内のアクセス要求を検索する（ステップＳ３１）。メインコントローラー２は、キュー内に、書込指令のあったバンドデータのデータ書込要求を発見すると（ステップＳ３２）、そのデータ書込要求により指定されたバンドデータおよび書込先が、キューシステム９１に書き込まれている構造データおよびファイルディスクリプターから特定する。メインコントローラー２は、ファイル書込スレッド３１ｂでＲＡＭ３からＤＭＡ転送でそのバンドデータを読み出す。ＨＤＤコントローラー１４は、読み出されたバンドデータを特定された書込先に書き込む（ステップＳ３３）。
【００７５】
１つのバンドデータのデータ書込が完了すると、メインコントローラー２は、ファイル書込スレッド３１ｂで、ファイル書込プログラム７１に従い、そのバンドデータのデータ書込要求をキューから削除し（ステップＳ３４）、ＡＰＩ４２へバンドデータのデータ書込完了通知を供給する（ステップＳ３５）。
【００７６】
このように、キューイングされているデータ書込のアクセス要求は、アプリケーション２３とは別のファイル書込スレッド３１ｂのファイル書込プログラム７１を実行することにより、非同期で処理されていく。
【００７７】
そして、ＡＰＩ４２へデータ書込完了通知が供給されると、メインコントローラー２はＡＰＩ４２により、イベントを発行する（ステップＳ２６）。メインコントローラー２は、書込側スレッド３１ａで書込側プログラム４１に従い、そのデータ書込が完了したバンドデータをＲＡＭ３から消去する（ステップＳ２７）。
【００７８】
そして、１ページ分のすべてのバンドデータの書込が完了すると（ステップＳ２８）、メインコントローラー２は、書込側プログラム４１に従い、ＡＰＩ４２を用いてファイルシステム６１の共有ライブラリーを呼び出し、ファイル識別子に対応するファイルをクローズする（ステップＳ２９）。
【００７９】
一方、メインコントローラー２は、読出側スレッド３２ａで読出側プログラム５１を実行する。ここで、読出側プログラム５１は、書込側とは非同期で動作している。メインコントローラー２は、読出側スレッド３２ａで読出側プログラム５１に従い、書込側スレッド３１ａからファイル識別子を受領すると（ステップＳ４１）、そのファイル識別子に対応するファイルをオープンし、ファイルハンドルを生成する（ステップＳ４２）。
【００８０】
そして、メインコントローラー２は、、ファイルオープン後、読出側スレッド３２ａで読出側プログラム５１に従い、ファイルシステム６１のＡＰＩ５２を呼び出し、ファイル識別子に対応するファイルからの各バンドデータのデータ読出要求を順に、キューシステム９１にキューイングする。メインコントローラー２は、データ読出要求に応じて、読出側プログラム５１に従い、、ファイル読出スレッド３２ｂに対して各バンドデータの読出指令を供給する（ステップＳ４３）。読出指令では、読出の対象となるバンドデータの識別情報（つまり、そのバンドデータを含むドキュメントの識別情報、そのバンドデータを含むページの識別情報、およびそのページ内でのバンドデータの識別情報）が指定される。メインコントローラー２は、全てのバンドデータのデータ読出要求をキューイングするまで、ステップＳ４３の処理を繰り返す（ステップＳ４４）。
【００８１】
一方、メインコントローラー２は、ファイル読出スレッド３２ｂで、そのバンドデータの書込完了時のイベントを受領すると（ステップＳ５１）、ファイル読出プログラム８１に従い、キュー内のデータ読出要求を検索する（ステップＳ５２）。メインコントローラー２は、キュー内に、読出指令のあったバンドデータのアクセス要求を発見すると（ステップＳ５３）、ファイルシステム６１のＡＰＩ５２を呼び出して、バンドデータをＨＤＤ４内のファイルから読み出すようＨＤＤコントローラー１４を制御する（ステップＳ５４）。このとき、そのデータ読出要求により指定されたバンドデータおよび読出元が、キューシステム９１に書き込まれている構造データおよびファイルディスクリプターから特定される。ＨＤＤコントローラー１４は、特定された読出元からそのバンドデータを読み出す。メインコントローラー２は、ファイル読出プログラムコード８１に従い、読み出されたバンドデータをＤＭＡ転送でＲＡＭ３に書き込まれる。
【００８２】
１つのバンドデータのデータ読出が完了すると、メインコントローラー２は、ファイル読出スレッド３２ｂで、ファイル読出プログラム８１に従い、そのバンドデータのデータ読出要求をキューから削除し（ステップＳ５５）、ＡＰＩ５２へバンドデータのデータ読出完了通知を供給する（ステップＳ５６）。
【００８３】
このようにして、書込側からのイベントにつき１つずつ、バンドデータが順番に読み出される。そして、メインコントローラー２は、読出側スレッド３２ａで読出側プログラム５１に従い、データ読出完了通知のたびに、１ページ分のすべてのバンドデータの読出が完了したか否かを判定する（ステップＳ４６）。１ページ分のすべてのバンドデータの読出が完了すると、メインコントローラー２は、ＡＰＩ５２を用いてファイルシステム６１の共有ライブラリーを呼び出し、ファイル識別子に対応するファイルをクローズする。（ステップＳ４７）ここで、ＨＤＤコントローラー１４は、クローズされたファイルをＨＤＤ４から消去する。
【００８４】
以上のように、上記実施の形態２によれば、メインコントローラー２は、(i)書込側プロセス２１で書込側スレッド３１ａおよびファイル書込スレッド３１ｂを生成し、(ii) 読出側プロセス２２で読出側スレッド３２ａおよびファイル読出スレッド３２ｂを生成し、(iii) 書込側スレッド３１ａから読出側スレッド３２ａへ、ＨＤＤ４におけるファイルの識別子を通知した後に、書込側スレッド３１ａで一連の複数のバンドデータのそれぞれについてのデータ書込要求を順番にキューイングし、(iv) ファイル書込スレッド３１ｂを用いて、キューイングされたデータ書込要求の順番で、HDDコントローラー１４に一連の複数のバンドデータを書き込ませ、(v) 読出側スレッド３２ａで、ファイルのファイル識別子を受領すると、一連の複数のバンドデータのそれぞれについてのデータ読出要求を順番にキューイングし、(vi) ファイル読出スレッド３２ｂを用いて、キューイングされたデータ読出要求の順番で、HDDコントローラー１４に一連の複数のバンドデータを読み出させる。
【００８５】
これにより、ＨＤＤ４への書込を行うプログラム７１が別のスレッド３１ｂで動作するため、非同期でのデータ書込となり、書込側プログラム４１がデータ書込の完了を待たずに別の処理を実行することができる。また、ＨＤＤ４からの読出を行うプログラム８１が別のスレッド３２ｂで動作するため、非同期でのデータ読出となり、読出側プログラム５１がデータ読出の完了を待たずに別の処理を実行することができる。
【００８６】
実施の形態３．
【００８７】
本発明の実施の形態３では、書込側スレッド３１ａにおいて、バンドデータのデータ書込のキューイングが完了した時点でイベントを発行する。ファイル読出スレッド３２ｂにおいて、ＲＡＭ３上にバンドデータがあればＲＡＭ３からそのバンドデータを読み出し、ＲＡＭ３上にバンドデータがなければＨＤＤ４のファイルからそのバンドデータを読み出す。
【００８８】
なお、実施の形態３に係るデータ処理装置の基本的な構成は、実施の形態１，２（図１）と同様であるので、その説明を省略する。実施の形態３におけるメインコントローラー２の動作は、実施の形態１，２のものと異なるので、その点について以下に説明する。実施の形態３における基本的なプログラム構成は、実施の形態２のもの（図５）と同様であるが、書込側スレッド３１ａとファイル読出スレッド３２ｂによる動作が実施の形態２のもの（図５）とは異なる。
【００８９】
図９は、実施の形態３におけるメインコントローラー２の書込側プロセス２１の動作を説明するフローチャートである。図１０は、実施の形態３におけるメインコントローラー２の読出側プロセス２２の動作を説明するフローチャートである。
【００９０】
図９に示すように実施の形態３では、メインコントローラー２は、書込側スレッド３１ａで、バンドデータの書込完了時ではなく、バンドデータのキューイング（ステップＳ２３）が終了するたびに、イベントを発行する（ステップＳ６１）。
【００９１】
そして、図１０に示すように、メインコントローラー２は、ファイル読出スレッド３２ｂで、キューにおいてアクセス要求を発見したときに、読出対象のバンドデータがＲＡＭ３上に残っているか否かを調べる（ステップＳ７１）。その結果、読出対象のバンドデータがＲＡＭ３上に残っていれば、メインコントローラー２は、ファイル読出しスレッド３２でファイル読出しプログラムに従い、バンドデータをＲＡＭ３から読み出す（ステップＳ７２）。読出対象のバンドデータがＲＡＭ３上に残っていなければ、メインコントローラー２は、ファイル読出しスレッドでファイル読出しプログラムに従い、バンドデータをＨＤＤ４のファイルから読み出すようHDDコントローラーを制御する。このとき、HDDコントローラー１４は、バンドデータをHDD４から読み出す（ステップＳ５４）。
【００９２】
図１１は、実施の形態３におけるＲＡＭ３からのバンドデータの読出について説明する図である。図１１に示すように、バンドデータは、ＲＡＭ３内の所定の共有メモリー領域に記憶され、この共有メモリー領域の物理アドレスは、各プロセス２１，２２の論理アドレスにマッピングされ、各プロセス２１，２２の各スレッド３１ａ，３１ｂ，３２ａ，３２ｂから共有メモリー領域へのアクセスが可能となっている。
【００９３】
以上のように、上記実施の形態３によれば、メインコントローラー２は、(i) 書込側プロセス２１で、１つのバンドデータをＲＡＭ３に記憶し、(ii) 書込側スレッド３１ａで１つのバンドデータのデータ書込み要求をキューイングするたびにイベントを発行し、(iv) HDD４へのバンドデータのデータ書込が完了したときに、読出側スレッド３２ａでそのバンドデータをＲＡＭ３から消去し、(v)キューイングされたデータ読出要求を順番に実行するとき、読出対象のバンドデータがＲＡＭ３にあれば、ファイル読出スレッド３２ｂで、ＨＤＤ４からバンドデータを読み出さずにＲＡＭ３からそのバンドデータを読み出し、(vi) ＲＡＭ３にそのバンドデータがなければ、HDDコントローラー１４にＨＤＤ４からそのバンドデータを読み出させる。
【００９４】
これにより、ＲＡＭ３にバンドデータが残っていれば、ただちにＲＡＭ３上のバンドデータを使用できる。このため、ＨＤＤ４からの読み出しより短時間でデータを読み出すことができ、データ読出時の遅延を低減することができる。
【００９５】
なお、上述の各実施の形態は、本発明の好適な例であるが、本発明は、これらに限定されるものではなく、本発明の要旨を逸脱しない範囲において、種々の変形、変更が可能である。
【００９６】
例えば、上記実施の形態３において、読出側スレッド３２ａでＲＡＭ３からバンドデータを読み出している最中に、書込側においてそのバンドデータの、ＨＤＤ４への書込が完了した場合、メインコントローラー２は、書込側スレッド３１ａで、読出側スレッド３２ａでのバンドデータの読出が完了した後に、そのバンドデータをＲＡＭ３から削除してもよい。例えば、バンドデータの記憶領域へのアクセスを排他制御すれば、このような処理が実現可能である。
【００９７】
また、上記各実施の形態において、ＨＤＤ４へデータを書き込み前に、データを圧縮し、ＨＤＤ４からデータを読み出した後に、データを伸張するようにしてもよい。圧縮・伸張の方式としては、ＪＰＥＧ（Joint Photographic Experts Group）方式、ＲＬＥ（Run Length Encoding）方式などが使用可能である。
【００９８】
また、上記各実施の形態において、書込側から読出側へ通知するファイル識別子には、ファイルハンドルを使用してもよい。
【００９９】
また、上記各実施の形態においては、ファイルシステム６１を使用してＨＤＤ４に対するデータの読み書きを行っているが、ファイルシステム６１はなくてもよい。その場合には、ファイル識別子の代わりに、１ページ分のバンドデータを記憶するＨＤＤ４上の記憶領域の識別情報（例えばアドレスとサイズなど）が使用される。
【０１００】
また、上記各実施の形態において、書込側プロセス２１のアプリケーションと読出側プロセス２２のアプリケーションとは、別々の独立したプログラムとしてもよい。
【０１０１】
また、上記各実施の形態においては、ストレージとしてＨＤＤ４が使用されているが、ＳＳＤ（Solid State Drive）などの半導体メモリーを使用した記憶装置を使用してもよい。
【０１０２】
また、上記各実施の形態においては、書込側および読出側のプロセスは、それぞれ１つであるが、書込側および読出側のいずれも複数の同様のプロセスが生成されてもよい。その場合でも、実施の形態２，３におけるキューシステム９１は１つで足りる。
【０１０３】
また、上記各実施の形態においては、単一のメモリーコントローラー２で書込側および読出側の両方のプロセスを処理しているが、複数のプロセシングエレメントを有するプロセッサーで、書込側および読出側のプロセスを別々に処理するようにしてもよい。
【０１０４】
また、上記各実施の形態においては、バンドデータに分割された画像データを処理しているが、本発明は、他の種別のデータを所定のサイズのブロックへ分割し、そのブロックごとに処理をする装置にも適用可能である。
【産業上の利用可能性】
【０１０５】
本発明は、例えば、コピー機、複合機などの画像形成装置内の画像処理装置に適用可能である。
【符号の説明】
【０１０６】
２  メインコントローラー（プロセッサーの一例）
３  ＲＡＭ（メモリーの一例）
４  ＨＤＤ（ストレージの一例）
８  データ処理プログラム
２１  書込側プロセス
２２  読出側プロセス
３１ａ  書込側スレッド（第１スレッドの一例）
３１ｂ  ファイル書込スレッド（第３スレッドの一例）
３２ａ  読出側スレッド（第２スレッドの一例）
３２ｂ  ファイル読出スレッド（第４スレッドの一例）
４１  書込側プログラム
５１  読出側プログラム
７１  ファイル書込プログラム（ストレージ書込プログラムの一例）
８１  ファイル読出プログラム（ストレージ読出プログラムの一例）
【図１】
2011193297.tif 000003
【図２】
2011193297.tif 000004
【図３】
2011193297.tif 000005
【図４】
2011193297.tif 000006
【図５】
2011193297.tif 000007
【図６】
2011193297.tif 000008
【図７】
2011193297.tif 000009
【図８】
2011193297.tif 000010
【図９】
2011193297.tif 000011
【図１０】
2011193297.tif 000012
【図１１】
2011193297.tif 000013