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