説明

データ処理装置およびデータ処理プログラム

【課題】 データ処理装置において、ストレージへのデータバッファリングに起因する後段処理の遅延を低減する。
【解決手段】 メインコントローラー2は、書込側スレッド31aから読出側スレッド32aへ、HDD4におけるファイルの識別子を通知した後に、書込側スレッド31aで一連の複数のバンドデータのそれぞれについてのデータ書込要求を順番にキューイングし、ファイル書込スレッド31bを用いて、キューイングされたデータ書込要求の順番で、HDDコントローラー14に一連の複数のバンドデータを書き込ませ、読出側スレッド32aで、ファイルのファイル識別子を受領すると、一連の複数のバンドデータのそれぞれについてのデータ読出要求を順番にキューイングし、ファイル読出スレッド32bを用いて、キューイングされたデータ読出要求の順番で、HDDコントローラー14に一連の複数のバンドデータを読み出させる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ処理装置およびデータ処理プログラムに関するものである。
【背景技術】
【0002】
一般的に、コピー機、複合機などの画像形成装置は、各種画像処理を行うデータ処理装置を内蔵している。そのようなデータ処理装置は、画像データをバッファリングする際に、書込側プログラム(例えばある画像処理プログラム)により、1ページ分の画像データを、ハードディスクドライブ(HDD)などのストレージ内のファイルに記憶した後、そのファイルのファイル識別子を読出側プログラム(例えば後段の画像処理プログラム)へ通知する。その読出側プログラムが、ストレージのそのファイルからその画像データを読み出す。
【0003】
その他、HDDにデータを書き込む際に、バッファーとしてFIFO(First-In First-Out)を設け、1つのスレッドで、そのFIFOにデータを書き込み、別のスレッドで、そのFIFOからHDDへデータを書き込む技術がある(例えば特許文献1参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2007−179496号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
上述のように、通常、所定単位(上述の場合、ページ)のデータがストレージへ記憶された後に、そのデータを読み出すため、データ書込とデータ読出が逐次的に行われることになる。このため、所定単位のデータのデータ書込が完了する前は、そのデータを読み出すことができず、バッファリング後の処理に遅延が生じてしまう。
【0006】
本発明は、上記の問題に鑑みてなされたものであり、ストレージへのデータバッファリングに起因する処理の遅延を低減することができるデータ処理装置およびデータ処理プログラムを得ることを目的とする。
【課題を解決するための手段】
【0007】
上記の課題を解決するために、本発明では以下のようにした。
【0008】
本発明に係るデータ処理装置は、所定単位のデータを構成する一連の複数のデータブロックをストレージに書き込み、ストレージからその一連の複数のデータブロックを読み出すストレージコントローラーと、ストレージコントローラーを制御するプロセッサーを備える。そして、プロセッサーは、(i)書込側プロセスおよび読出側プロセスを生成し、(ii)書込側プロセスで第1スレッドおよび第3スレッドを生成し、(iii)読出側プロセスで第2スレッドおよび第4スレッドを生成し、(iv)ストレージにおける記憶領域の識別子を第1スレッドから第2スレッドへ通知した後、第1スレッドで、一連の複数のデータブロックのそれぞれについてのデータ書込要求を順番にキューイングし、(v)第3スレッドを用いて、キューイングされたデータ書込要求の順番で、ストレージコントローラーに一連の複数のデータブロックを書き込ませ、(vi)第2スレッドで、識別子を受領すると、一連の複数のデータブロックのそれぞれについてのデータ読出要求を順番にキューイングし、(vii)第4スレッドを用いて、キューイングされたデータ読出要求の順番で、ストレージコントローラーに一連の複数のデータブロックを読み出させる。
【0009】
これにより、ストレージへのデータ書込前に、バッファー用の記憶領域の識別子が読出側プロセスへ渡され、書込側プロセスとは独立して読出側プロセスでデータ読出を開始できるため、データ書込途中でもデータ読出を行うことができる。したがって、ストレージへのデータバッファリング後の処理の遅延を低減することができる。さらに、ストレージへの書込を行うプログラムが別のスレッドで動作するため、非同期でのデータ書込となり、書込側プログラムがデータ書込の完了を待たずに別の処理を実行することができる。また、ストレージからの読出を行うプログラムが別のスレッドで動作するため、非同期でのデータ読出となり、読出側プログラムがデータ読出の完了を待たずに別の処理を実行することができる。
【0010】
また、本発明に係るデータ処理装置は、上記のデータ処理装置に加え、次のようにしてもよい。この場合、データ処理装置は、一連の複数のデータブロックを記憶するメモリーを備える。また、上述の一連の複数のデータブロックは、1つのドキュメント内のいずれかの1ページの画像データを構成する複数のバンドデータである。そして、メモリーは、ドキュメント内の各ページを示すページノードデータを記憶する。さらに、複数のバンドデータは、ドキュメント内の各ページに対して設けられたリンクリストであり、あるページのページノードデータは、そのページについての複数のバンドデータの先頭へのリンクを有する。
【0011】
これにより、複数ページのバンドデータが、ページごとに、別々のリンクリストとされるため、複数ページのバンドデータから、処理対象のバンドデータを短時間で見つけ出すことができる。
【0012】
また、本発明に係るデータ処理装置は、上記のデータ処理装置のいずれかに加え、次のようにしてもよい。この場合、プロセッサーは、第3スレッドを用いて、ページノードデータで、複数のバンドデータの先頭位置を特定し、リンクリストを辿って、複数のバンドデータをストレージコントローラーに書き込ませる。
【0013】
これにより、複数ページのバンドデータから、書き込み対象のバンドデータを短時間で見つけ出すことができる。
【0014】
また、本発明に係るデータ処理装置は、上記のデータ処理装置のいずれかに加え、次のようにしてもよい。この場合、プロセッサーは、メモリーに1ページ分の複数のバンドデータを記憶するときに複数のバンドデータの記憶領域を確保し、そのページの書き込みが完了すると記憶領域を解放し、メモリーの残量が不足している場合、他のページについての複数のバンドデータの記憶領域を解放したときに、複数のバンドデータの記憶領域を確保する。
【0015】
これにより、処理が完了したページのバンドデータの記憶領域がただちに解放され、後続のページのバンドデータの記憶領域として利用可能となる。
【0016】
また、本発明に係るデータ処理装置は、上記のデータ処理装置のいずれかに加え、次のようにしてもよい。この場合、プロセッサーは、(viii)第3スレッドでデータブロックをメモリーに記憶し、(ix)第1スレッドでデータブロックのデータ書込要求をキューイングするたびにイベントを発行し、(x)ストレージへのデータブロックの書込が完了したときに、第3スレッドでデータブロックをメモリーから消去し、(xi)キューイングされたデータ読出要求を順番に実行するとき、メモリーにデータブロックがあれば、第4スレッドでメモリーからそのデータブロックを読み出し、メモリーにデータブロックがなければ、第4スレッドを用いて、ストレージコントローラーにストレージからデータブロックを読み出させ、(xii)所定のタイミングで、メモリーから読み出されたデータブロックについてのデータ書込要求をキューから削除する。
【0017】
これにより、メモリーからデータブロックが読み出されているのにも拘わらずキューに残存しているデータ書込要求に起因する処理遅延を回避することができる。
【0018】
また、本発明に係るデータ処理装置は、上記のデータ処理装置のいずれかに加え、次のようにしてもよい。この場合、プロセッサーは、ジョブ完了時に、メモリーから読み出されたデータブロックについてのデータ書込要求をキューから削除する。
【0019】
また、本発明に係るデータ処理装置は、上記のデータ処理装置のいずれかに加え、次のようにしてもよい。この場合、上述の一連の複数のデータブロックは、ストレージにおけるファイルに書き込まれ、記憶領域の識別子は、ファイルの識別子である。
【0020】
これにより、バッファー用の記憶領域をファイルシステムで管理することができ、各プロセスからのストレージ内のデータへのアクセスを簡単に行うことができる。
【発明の効果】
【0021】
本発明によれば、データ処理装置において、ストレージへのデータバッファリングに起因する後段処理の遅延を低減することができる。
【図面の簡単な説明】
【0022】
【図1】図1は、本発明の実施の形態に係るデータ処理装置の構成を示すブロック図である。
【図2】図2は、図1におけるデータ処理回路で取り扱うデータの構成を示す図である。
【図3】図3は、図1におけるデータ処理回路で取り扱うデータの例を示す図である。
【図4】図4は、実施の形態1におけるメインコントローラーを説明するブロック図である。
【図5】図5は、実施の形態1におけるメインコントローラーの書込側プロセスの動作を説明するフローチャートである。
【図6】図6は、実施の形態1におけるメインコントローラーの読出側プロセスの動作を説明するフローチャートである。
【図7】図7は、図4におけるキューシステム内の共有メモリー領域を示す図である。
【図8】図8は、実施の形態2におけるメインコントローラーの書込側プロセスの動作を説明するフローチャートである。
【図9】図9は、実施の形態2におけるメインコントローラーの読出側プロセスの動作を説明するフローチャートである。
【図10】図10は、実施の形態2におけるRAMからのバンドデータの読出について説明する図である。
【発明を実施するための形態】
【0023】
以下、図に基づいて本発明の実施の形態を説明する。
【0024】
実施の形態1.
【0025】
図1は、本発明の実施の形態に係るデータ処理装置の構成を示すブロック図である。図1に示すデータ処理装置は、データ処理回路1、メインコントローラー2、RAM(Random Access Memory)3、ハードディスクドライブ(HDD)4、スキャナー5、印刷エンジン制御回路6、記憶装置7、用紙に印刷を行う印刷エンジン(図示せず)などを有する。
【0026】
データ処理回路1は、スキャナー5などから画像データを、バンド単位またはページ単位で処理し、HDD4または印刷エンジン制御回路6へ出力する装置である。
【0027】
メインコントローラー2は、データ処理回路1内の各部へ指令を供給する装置である。メインコントローラー2は、バスインタフェース回路11およびバス12を介してデータ処理回路1内の各部へ指令を供給する。メインコントローラー2は、CPU(Central Processing Unit)などのプロセッサーであり、記憶装置7に記憶されているデータ処理プログラム8に従って指令を出力する。
【0028】
RAM3は、データ処理回路1による処理においてバンドデータなどを一時的に記憶するためのメモリーである。RAM3としては、例えば、1または複数のDRAM(Dynamic RAM)が使用される。
【0029】
HDD4は、1ページの画像データを構成する一連の複数のバンドデータを一時的に記憶するためのストレージデバイスである。
【0030】
スキャナー5は、原稿の画像を光学的に読み取り、その画像読み取りにより得られる画像データを出力する装置である。
【0031】
印刷エンジン制御回路6は、印刷エンジンへ印刷画像データを供給するとともに、印刷エンジンを制御して印刷を実行させる回路である。
【0032】
記憶装置7は、フラッシュメモリーなどの不揮発性の記憶装置であり、メインコントローラー2の使用する各種プログラムやデータを記憶する。ここでは、データ処理プログラム8が記憶装置7に記憶されている。
【0033】
ここで、データ処理回路1の構成について説明する。
【0034】
データ処理回路1は、バスインタフェース回路11、バス12、メモリーインタフェース13、HDDコントローラー14、データ取得回路15、画像処理回路16、ラスタ処理回路17、ハーフトーン処理回路18、およびデータ出力回路19を有する。なお、データ処理回路1は、ASIC(Application Specific Integrated Circuit)として実現される。
【0035】
バスインタフェース回路11は、メインコントローラー2をバス12に接続する回路である。
【0036】
メモリーインタフェース13は、RAM3とバス12との間のデータおよび指令の送受を行う回路である。
【0037】
HDDコントローラー14は、メインコントローラー2からの指令に応じて、HDD4に対してデータの読み書きを行う回路である。
【0038】
データ取得回路15は、メインコントローラー2からの指令に応じて、スキャナー5から画像データをバンドデータとして順番に取得し、RAM3またはHDD4に記憶する回路である。データ取得回路15は、DMA(Direct Memory Access)コントローラーを有する。例えば、バンドデータは、128ライン分のデータであって、1ページにつき58バンド分のバンドデータがある。
【0039】
図2は、このデータ処理回路1で取り扱うデータの構成を示す図である。1つのドキュメントは、1または複数のページで構成される。ページは、所定数のバンドで構成される。1つのジョブにより1つのドキュメントについてのデータがメインコントローラー2に供給される。
【0040】
ドキュメントの構造は、ノードのリンクリストで表現される。1または複数のドキュメントが、ドキュメントノードデータのリンクリストで表現される。あるドキュメントのドキュメントノードデータに、そのドキュメントを構成する1または複数のページについてのページノードデータのリンクリストがブランチとして接続されている。さらに、あるページのページノードデータに、そのページを構成する複数のバンドについてのバンドデータのリンクリストがブランチとして接続されている。したがって、データ構造は、ドキュメントノードデータ、ページノードデータおよバンドデータによる3層構造となっている。
【0041】
図3は、データ処理回路1で取り扱うデータの例を示す図である。図3に示すように、このデータ構造は、ドキュメントリンクリスト、ページリンクリスト、およびバンドリンクリストの3層構造となっている。この例では、ドキュメントリンクリストには、3つのドキュメントノードデータが含まれている。ドキュメント#1のドキュメントノードデータには、ページリンクリストへのリンク情報が含まれており、そのページリンクリストには、2ページのページノードデータが含まれている。ドキュメント#2のドキュメントノードデータには、ページリンクリストへのリンク情報が含まれており、そのページリンクリストには、1ページのページノードデータが含まれている。ドキュメント#3のドキュメントノードデータには、ページリンクリストへのリンク情報が含まれており、そのページリンクリストには、3ページのページノードデータが含まれている。各ページノードデータには、バンドリンクリストへのリンク情報が含まれている。1ページ内のバンド数が一定であるため、バンドリンクリストのサイズは一定である。なお、ドキュメントノードデータは、ドキュメントの識別情報(識別番号など)と、後続のドキュメントノードデータとの連結のためのリンク情報と、ページリンクリストのリンク情報とを有する。ページノードデータは、ページの識別情報(識別番号など)と、後続のページノードデータとの連結のためのリンク情報と、バンドリンクリストのリンク情報とを有する。バンドリンクリストは、所定の数のバンドデータを有する。バンドデータは、1バンド分の画像データと、後続のバンドデータのリンク情報とを有する。
【0042】
したがって、ドキュメント、ページおよびバンドの番号から、上述のリンクを辿っていくことで、ドキュメント内のあるページのあるバンドのデータを特定し、読み出すことができる。
【0043】
画像処理回路16は、メインコントローラー2からの指令に応じて、画像データのバンドデータをRAM3またはHDD4から読み出し、それらのバンドデータに対して所定の画像処理(画像拡大、画像縮小、色変換など)を実行し、処理後のバンドデータをRAM3またはHDD4に記憶する回路である。画像処理回路16は、DMAコントローラーを有する。
【0044】
ラスタ処理回路17は、画像データのバンドデータをRAM3またはHDD4から読み出し、それらのバンドデータに対してラスタライズを実行し、ラスタデータを生成する回路である。ラスタデータは、バンドごとに、HDD4に記憶され、ハーフトーン処理実行時にRAM3に読み出される。
【0045】
ハーフトーン処理回路18は、バンドごとにラスタデータをRAM3から読み出し、ハーフトーン処理を実行し、ハーフトーン処理後のデータをRAM3に記憶する回路である。
【0046】
データ出力回路19は、ハーフトーン処理後のデータをRAM3から読み出し印刷エンジン制御回路6へ供給する回路である。
【0047】
データ処理回路1では、スキャナー5から取得された画像データに対して、回転、拡大/縮小などの画像処理が必要に応じて施される。その後、ハーフトーニングで印刷画像データが生成され、印刷エンジン制御回路6へ出力される。これらのデータ処理の途中で、バンド単位でのデータバッファリングにはRAM3が使用され、ページ単位でのデータバッファリングにはHDD4が使用される。
【0048】
次に、上記データ処理装置による、HDD4へのデータ書込およびデータ読出の動作について説明する。
【0049】
メインコントローラー2は、アプリケーション23の動作する書込側スレッドおよび読出側スレッドとは別に、ファイルへバンドデータをデータ書き込む共有ライブラリーのプログラが動作するスレッド、およびファイルからバンドデータを読み出す共有ライブラリーのプログラムが動作するスレッドを生成する。これにより、データ処理装置は、アプリケーション23の処理とは非同期にバンドデータの書込および読出処理を実行する。
【0050】
図4は、実施の形態1におけるメインコントローラー2の動作を説明するブロック図である。図5は、実施の形態1におけるメインコントローラー2の書込側プロセス21の動作を説明するフローチャートである。図6は、実施の形態1におけるメインコントローラー2の読出側プロセス22の動作を説明するフローチャートである。
【0051】
メインコントローラー2では、マルチプロセスおよびマルチスレッド対応のオペレーティングシステムが稼働している。メインコントローラー2は、データ処理プログラム8を実行し、まず、書込側プロセス21および読出側プロセス22を生成する。メインコントローラー2は、書込側プロセス21および読出側プロセス22を使用して、HDD4にデータをバッファリングするアプリケーション23を実行する。アプリケーション23のうち、書込側プログラム41は、書込側プロセス21内の書込側スレッド31aで実行される。メインコントローラー2は、書込側プログラム41を実行することにより、HDDコントローラー14にHDD4へバンドデータを書き込ませることが可能になる。一方、アプリケーション23のうち、読出側プログラム51は、プロセス22内の読出側スレッド32bで実行される。メインコントローラー2は、読出側プログラム51の実行により、HDDコントローラー14にHDD4からバンドデータを読み出させることが可能になる。
【0052】
そして、メインコントローラー2は、書込側プロセス21内でファイル書込スレッド31bを生成して、そのファイル書込スレッド31bで、ファイルへのデータ書込を行う共有ライブラリーのプログラム71を実行する。メインコントローラー2は、読出プロセス22内でファイル読出スレッド32bを生成して、そのファイル読出スレッド32bで、ファイルからのバンドデータの読出を行う共有ライブラリーのプログラム81を実行する。さらに、メインコントローラー2は、アプリケーション23で発生するデータ書込要求およびデータ読出要求をアクセス要求としてキューシステム91にキューイングし、ファイル書込プログラム71およびファイル読出プログラム81を実行し、キューシステム91にキューイングされているアクセス要求に基づいて、バンドデータの書込および読出を実行していく。これにより、データ処理装置は、アプリケーション23の処理とは非同期にバンドデータの書込および読出を実行する。
【0053】
メインコントローラー2は、ドキュメントのデータを受け付けると、書込側スレッド31aによって、図3に示すような3層構造で、データをRAM3に記憶する。このとき、1つのドキュメントにつき、1つのドキュメントノードデータが、ドキュメントリンクリストに追加され、そのドキュメントに含まれるページの数と同数のページノードデータがページリンクリストに追加される。さらに、各ページについて、バンドリンクリストの記憶領域が新たに確保され、その記憶領域にバンドリンクリストが記憶される。メインコントローラー2は、RAM3に1ページ分の複数のバンドデータを記憶するときにそのページのページノードデータをページリンクリストに追加するとともに複数のバンドデータの記憶領域を確保し、そのページの書き込みが完了するとその記憶領域を解放し、そのページノードデータをページリンクリストから削除する。バンドデータの記憶領域を確保するときにRAM3の残量が不足している場合、メインコントローラー2は、他のページについてのバンドデータの記憶領域を解放するまで待ち、解放したときに、新たなページのバンドデータの記憶領域を確保する。
【0054】
メインコントローラー2は、書込側スレッド31aで書込側プログラム41を実行することにより、バンドデータの書込先となるファイルのファイル識別子を、読出側プロセス22の読出側プログラム51に通知する(ステップS21)。ファイル識別子は、例えばファイル名とされる。メインコントローラー2は、書込側プログラム41に従い、API42でファイルシステム61の共有ライブラリーを呼び出し、そのファイル識別子のファイルをオープンし、ファイルハンドルを生成する(ステップS22)。
【0055】
メインコントローラー2は、ファイルオープン後、書込側スレッド31aで書込側プログラム41に従い、ファイルシステム61のAPI42を呼び出し、ファイル識別子に対応するファイルへのバンドデータのデータ書込要求を順に、キューシステム91にキューイングする。メインコントローラー2は、データ書込要求に応じて、書込側プログラム41に従い、ファイル書込スレッド31bに対して各バンドデータの書込指令を供給する(ステップS23)。書込指令では、書込の対象となるバンドデータの識別情報(つまり、そのバンドデータを含むドキュメントの識別情報、そのバンドデータを含むページの識別情報、およびそのページ内でのバンドデータの識別情報)が指定される。メインコントローラー2は、全てのバンドデータのデータ書込要求をキューイングするまで、ステップS23の処理を繰り返す(ステップS24)。
【0056】
図7は、図4におけるキューシステム91内の共有メモリー領域を示す図である。この共有メモリー領域は、RAM3上に割り当てられ、その物理アドレスが、書込側プロセス21および読出側プロセス22の論理アドレスにマッピングされ、各プロセスから共有メモリー領域へのアクセスが可能となる。キューシステム91において、この共有メモリー領域は、ドキュメントリスト領域、ページリスト領域、FDリスト領域、およびキュー領域を有する。
【0057】
ドキュメントリスト領域には、API42またはAPI52により、書込対象または読出対象のバンドデータを含むドキュメントのノードデータが記憶される。ドキュメントのノードデータは、このドキュメントを構成するページのノードデータへのリンク情報を有する。
【0058】
ページリスト領域には、API42またはAPI52により、書込対象または読出対象のバンドデータを含むページのノードデータが記憶される。ページのノードデータは、このページを構成するバンドのノードデータへのリンク情報、およびファイルディスクリプターへのリンク情報を有する。
【0059】
バンドリスト領域には、API42またはAPI52により、書込対象または読出対象のバンドのノードデータが記憶される。バンドのノードデータは、このバンドの属するドキュメントおよびページのIDやシリアル番号を有し、さらに、ファイル内でのバンドデータの識別情報(シリアル番号など)を有する。
【0060】
FDリスト領域には、API42またはAPI52により、ページごとに、そのページに対応するファイルのファイルディスクリプターが書き込まれる。
【0061】
キュー領域には、API42またはAPI52により、バンドデータごとにアクセス要求が書き込まれる。アクセス要求は、アクセス種別(書き込みまたは読み出し)、および対象のバンドデータの識別情報を含む。したがって、1つのキューに、データ書込要求とデータ読出要求が混在する。
【0062】
このキューシステム91へのアクセスは、セマフォにより排他制御され、書込側スレッド31a,ファイル書込スレッド31b,読出側スレッド32a,ファイル読出スレッド32bのうちの2つ以上から同時にアクセスできないようになっている。
【0063】
一方、メインコントローラー2は、ファイル書込スレッド31bで、ファイル書込プログラム71に従い、キュー内のアクセス要求を検索する(ステップS31)。メインコントローラー2は、キュー内に、書込指令のあったバンドデータのデータ書込要求を発見すると(ステップS32)、そのデータ書込要求により指定されたバンドデータおよび書込先を、キューシステム91に書き込まれている構造データおよびファイルディスクリプターから特定する。メインコントローラー2は、ファイル書込スレッド31bでRAM3からDMA転送でそのバンドデータをHDDコントローラー14へ読み出す。
【0064】
このとき、書き込み対象のバンドデータの属するドキュメントおよびページが、データ書込要求から特定され、まず、書き込み対象のバンドデータの属するドキュメントのドキュメントノードデータが特定され、そのドキュメントノードデータに接続しているページリンクリストにおいて、書き込み対象のバンドデータの属するページのページノードデータが特定される。そして、そのページノードデータに接続されているバンドリンクリストにおいて、書き込み対象のバンドデータが特定される。
【0065】
そして、HDDコントローラー14は、読み出されたバンドデータを特定された書込先に書き込む(ステップS33)。
【0066】
1つのバンドデータのデータ書込が完了すると、メインコントローラー2は、ファイル書込スレッド31bで、ファイル書込プログラム71に従い、そのバンドデータのデータ書込要求をキューから削除し(ステップS34)、API42へバンドデータのデータ書込完了通知を供給する(ステップS35)。
【0067】
このように、キューイングされているデータ書込のアクセス要求は、アプリケーション23とは別のファイル書込スレッド31bのファイル書込プログラム71を実行することにより、非同期で処理されていく。
【0068】
そして、API42へデータ書込完了通知が供給されると、メインコントローラー2はAPI42により、イベントを発行する(ステップS26)。メインコントローラー2は、書込側スレッド31aで書込側プログラム41に従い、そのデータ書込が完了したバンドデータをRAM3から消去する(ステップS27)。
【0069】
そして、1ページ分のすべてのバンドデータの書込が完了すると(ステップS28)、メインコントローラー2は、書込側プログラム41に従い、API42を用いてファイルシステム61の共有ライブラリーを呼び出し、ファイル識別子に対応するファイルをクローズする(ステップS29)。
【0070】
一方、メインコントローラー2は、読出側スレッド32aで読出側プログラム51を実行する。ここで、読出側プログラム51は、書込側とは非同期で動作している。メインコントローラー2は、読出側スレッド32aで読出側プログラム51に従い、書込側スレッド31aからファイル識別子を受領すると(ステップS41)、そのファイル識別子に対応するファイルをオープンし、ファイルハンドルを生成する(ステップS42)。
【0071】
そして、メインコントローラー2は、ファイルオープン後、読出側スレッド32aで読出側プログラム51に従い、ファイルシステム61のAPI52を呼び出し、ファイル識別子に対応するファイルからの各バンドデータのデータ読出要求を順に、キューシステム91にキューイングする。メインコントローラー2は、データ読出要求に応じて、読出側プログラム51に従い、ファイル読出スレッド32bに対して各バンドデータの読出指令を供給する(ステップS43)。読出指令では、読出の対象となるバンドデータの識別情報(つまり、そのバンドデータを含むドキュメントの識別情報、そのバンドデータを含むページの識別情報、およびそのページ内でのバンドデータの識別情報)が指定される。メインコントローラー2は、全てのバンドデータのデータ読出要求をキューイングするまで、ステップS43の処理を繰り返す(ステップS44)。
【0072】
一方、メインコントローラー2は、ファイル読出スレッド32bで、そのバンドデータの書込完了時のイベントを受領すると(ステップS51)、ファイル読出プログラム81に従い、キュー内のデータ読出要求を検索する(ステップS52)。メインコントローラー2は、キュー内に、読出指令のあったバンドデータのアクセス要求を発見すると(ステップS53)、ファイルシステム61のAPI52を呼び出して、バンドデータをHDD4内のファイルから読み出すようHDDコントローラー14を制御する(ステップS54)。このとき、そのデータ読出要求により指定されたバンドデータおよび読出元が、キューシステム91に書き込まれている構造データおよびファイルディスクリプターから特定される。HDDコントローラー14は、特定された読出元からそのバンドデータを読み出す。メインコントローラー2は、ファイル読出プログラムコード81に従い、読み出されたバンドデータをDMA転送でRAM3に書き込まれる。
【0073】
1つのバンドデータのデータ読出が完了すると、メインコントローラー2は、ファイル読出スレッド32bで、ファイル読出プログラム81に従い、そのバンドデータのデータ読出要求をキューから削除し(ステップS55)、API52へバンドデータのデータ読出完了通知を供給する(ステップS56)。
【0074】
このようにして、書込側からのイベントにつき1つずつ、バンドデータが順番に読み出される。そして、メインコントローラー2は、読出側スレッド32aで読出側プログラム51に従い、データ読出完了通知のたびに、1ページ分のすべてのバンドデータの読出が完了したか否かを判定する(ステップS46)。1ページ分のすべてのバンドデータの読出が完了すると、メインコントローラー2は、API52を用いてファイルシステム61の共有ライブラリーを呼び出し、ファイル識別子に対応するファイルをクローズする。(ステップS47)ここで、HDDコントローラー14は、クローズされたファイルをHDD4から消去する。
【0075】
以上のように、上記実施の形態1によれば、メインコントローラー2は、(i)書込側プロセス21で書込側スレッド31aおよびファイル書込スレッド31bを生成し、(ii) 読出側プロセス22で読出側スレッド32aおよびファイル読出スレッド32bを生成し、(iii) 書込側スレッド31aから読出側スレッド32aへ、HDD4におけるファイルの識別子を通知した後に、書込側スレッド31aで一連の複数のバンドデータのそれぞれについてのデータ書込要求を順番にキューイングし、(iv) ファイル書込スレッド31bを用いて、キューイングされたデータ書込要求の順番で、HDDコントローラー14に一連の複数のバンドデータを書き込ませ、(v) 読出側スレッド32aで、ファイルのファイル識別子を受領すると、一連の複数のバンドデータのそれぞれについてのデータ読出要求を順番にキューイングし、(vi) ファイル読出スレッド32bを用いて、キューイングされたデータ読出要求の順番で、HDDコントローラー14に一連の複数のバンドデータを読み出させる。
【0076】
これにより、HDD4への書込を行うプログラム71が別のスレッド31bで動作するため、非同期でのデータ書込となり、書込側プログラム41がデータ書込の完了を待たずに別の処理を実行することができる。また、HDD4からの読出を行うプログラム81が別のスレッド32bで動作するため、非同期でのデータ読出となり、読出側プログラム51がデータ読出の完了を待たずに別の処理を実行することができる。
【0077】
また、上記実施の形態1によれば、1ページ分のバンドデータは、ドキュメント内の各ページに対して設けられたリンクリストとされ、RAM3に記憶され、さらに、RAM3には、ドキュメント内の各ページを示すページノードデータが記憶される。あるページのページノードデータは、そのページについての複数のバンドデータの先頭へのリンクを有する。
【0078】
これにより、複数ページのバンドデータが、ページごとに、別々のリンクリストとされるため、複数ページのバンドデータから、処理対象のバンドデータを短時間で見つけ出すことができる。
【0079】
実施の形態2.
【0080】
本発明の実施の形態2では、書込側スレッド31aにおいて、バンドデータのデータ書込のキューイングが完了した時点でイベントを発行する。ファイル読出スレッド32bにおいて、RAM3上にバンドデータがあればRAM3からそのバンドデータを読み出し、RAM3上にバンドデータがなければHDD4のファイルからそのバンドデータを読み出す。
【0081】
なお、実施の形態2に係るデータ処理装置の基本的な構成は、実施の形態1(図1)と同様であるので、その説明を省略する。実施の形態2におけるメインコントローラー2の動作は、実施の形態1のものと異なるので、その点について以下に説明する。実施の形態2における基本的なプログラム構成は、実施の形態1のもの(図4)と同様であるが、書込側スレッド31aとファイル読出スレッド32bによる動作が実施の形態1のもの(図4)とは異なる。
【0082】
図8は、実施の形態2におけるメインコントローラー2の書込側プロセス21の動作を説明するフローチャートである。図9は、実施の形態2におけるメインコントローラー2の読出側プロセス22の動作を説明するフローチャートである。
【0083】
図8に示すように実施の形態2では、メインコントローラー2は、書込側スレッド31aで、バンドデータの書込完了時ではなく、バンドデータのキューイング(ステップS23)が終了するたびに、イベントを発行する(ステップS61)。
【0084】
そして、図9に示すように、メインコントローラー2は、ファイル読出スレッド32bで、キューにおいてアクセス要求を発見したときに、読出対象のバンドデータがRAM3上に残っているか否かを調べる(ステップS71)。その結果、読出対象のバンドデータがRAM3上に残っていれば、メインコントローラー2は、ファイル読出しスレッド32でファイル読出しプログラムに従い、バンドデータをRAM3から読み出す(ステップS72)。読出対象のバンドデータがRAM3上に残っていなければ、メインコントローラー2は、ファイル読出しスレッドでファイル読出しプログラムに従い、バンドデータをHDD4のファイルから読み出すようHDDコントローラーを制御する。このとき、HDDコントローラー14は、バンドデータをHDD4から読み出す(ステップS54)。
【0085】
このように、読出対象のバンドデータがRAM3上に残っている場合、バンドデータがHDD4からではなくRAM3から読み出される。このため、そのバンドデータについてのデータ書込要求によるHDD4へのバンドデータの書き込みは不要である。しかし、そのデータ書込要求はキューシステム91に残ったままとなっている。このような不要なデータ書込要求があるジョブ(ドキュメント)について残っていると、読出側でそのジョブが完了しても(つまり、そのドキュメントの読み出しが完了しても)、そのデータ書込要求が処理されるまで、書き込み側ではそのジョブが完了しないため、後続の処理が遅延してしまう。このため、メインコントローラー2は、読出側スレッド31によって、所定のタイミングで、RAM3から既に読み出されたバンドデータについてのデータ書込要求をキューから削除する。この実施の形態では、データ書込要求の削除のタイミングは、読出側でのジョブ完了時とされる。
【0086】
図10は、実施の形態2におけるRAM3からのバンドデータの読出について説明する図である。図10に示すように、バンドデータは、RAM3内の所定の共有メモリー領域に記憶され、この共有メモリー領域の物理アドレスは、各プロセス21,22の論理アドレスにマッピングされ、各プロセス21,22の各スレッド31a,31b,32a,32bから共有メモリー領域へのアクセスが可能となっている。
【0087】
以上のように、上記実施の形態2によれば、メインコントローラー2は、(i) 書込側プロセス21で、1つのバンドデータをRAM3に記憶し、(ii) 書込側スレッド31aで1つのバンドデータのデータ書込み要求をキューイングするたびにイベントを発行し、(iv)HDD4へのバンドデータのデータ書込が完了したときに、読出側スレッド32aでそのバンドデータをRAM3から消去し、(v)キューイングされたデータ読出要求を順番に実行するとき、読出対象のバンドデータがRAM3にあれば、ファイル読出スレッド32bで、HDD4からバンドデータを読み出さずにRAM3からそのバンドデータを読み出し、(vi) RAM3にそのバンドデータがなければ、HDDコントローラー14にHDD4からそのバンドデータを読み出させる。
【0088】
これにより、RAM3にバンドデータが残っていれば、ただちにRAM3上のバンドデータを使用できる。このため、HDD4からの読み出しより短時間でデータを読み出すことができ、データ読出時の遅延を低減することができる。
【0089】
また、上記実施の形態2によれば、メインコントローラー2は、所定のタイミングで、RAM3から読み出されたバンドデータについてのデータ書込要求をキューから削除する。
【0090】
これにより、HDD4を介さずにRAM3からバンドデータが読み出されているのにも拘わらずキューに残存しているデータ書込要求に起因する処理遅延を回避することができる。
【0091】
なお、上述の各実施の形態は、本発明の好適な例であるが、本発明は、これらに限定されるものではなく、本発明の要旨を逸脱しない範囲において、種々の変形、変更が可能である。
【0092】
例えば、上記実施の形態2において、読出側スレッド32aでRAM3からバンドデータを読み出している最中に、書込側においてそのバンドデータの、HDD4への書込が完了した場合、メインコントローラー2は、書込側スレッド31aで、読出側スレッド32aでのバンドデータの読出が完了した後に、そのバンドデータをRAM3から削除してもよい。例えば、バンドデータの記憶領域へのアクセスを排他制御すれば、このような処理が実現可能である。
【0093】
また、上記各実施の形態において、HDD4へデータを書き込み前に、データを圧縮し、HDD4からデータを読み出した後に、データを伸張するようにしてもよい。圧縮・伸張の方式としては、JPEG(Joint Photographic Experts Group)方式、RLE(Run Length Encoding)方式などが使用可能である。
【0094】
また、上記各実施の形態において、書込側から読出側へ通知するファイル識別子には、ファイルハンドルを使用してもよい。
【0095】
また、上記各実施の形態においては、ファイルシステム61を使用してHDD4に対するデータの読み書きを行っているが、ファイルシステム61はなくてもよい。その場合には、ファイル識別子の代わりに、1ページ分のバンドデータを記憶するHDD4上の記憶領域の識別情報(例えばアドレスとサイズなど)が使用される。
【0096】
また、上記各実施の形態において、書込側プロセス21のアプリケーションと読出側プロセス22のアプリケーションとは、別々の独立したプログラムとしてもよい。
【0097】
また、上記各実施の形態においては、ストレージとしてHDD4が使用されているが、SSD(Solid State Drive)などの半導体メモリーを使用した記憶装置を使用してもよい。
【0098】
また、上記各実施の形態においては、書込側および読出側のプロセスは、それぞれ1つであるが、書込側および読出側のいずれも複数の同様のプロセスが生成されてもよい。その場合でも、実施の形態1,2におけるキューシステム91は1つで足りる。
【0099】
また、上記各実施の形態においては、単一のメモリーコントローラー2で書込側および読出側の両方のプロセスを処理しているが、複数のプロセシングエレメントを有するプロセッサーで、書込側および読出側のプロセスを別々に処理するようにしてもよい。
【0100】
また、上記各実施の形態においては、バンドデータに分割された画像データを処理しているが、本発明は、他の種別のデータを所定のサイズのブロックへ分割し、そのブロックごとに処理をする装置にも適用可能である。
【産業上の利用可能性】
【0101】
本発明は、例えば、コピー機、複合機などの画像形成装置内の画像処理装置に適用可能である。
【符号の説明】
【0102】
2 メインコントローラー(プロセッサーの一例)
3 RAM(メモリーの一例)
4 HDD(ストレージの一例)
8 データ処理プログラム
21 書込側プロセス
22 読出側プロセス
31a 書込側スレッド(第1スレッドの一例)
31b ファイル書込スレッド(第3スレッドの一例)
32a 読出側スレッド(第2スレッドの一例)
32b ファイル読出スレッド(第4スレッドの一例)
41 書込側プログラム
51 読出側プログラム

【特許請求の範囲】
【請求項1】
所定単位のデータを構成する一連の複数のデータブロックをストレージに書き込み、前記ストレージからその一連の複数のデータブロックを読み出すストレージコントローラーと、
前記ストレージコントローラーを制御するプロセッサーを備え、
前記プロセッサーは、
書込側プロセスおよび読出側プロセスを生成し、
前記書込側プロセスで第1スレッドおよび第3スレッドを生成し、
前記読出側プロセスで第2スレッドおよび第4スレッドを生成し、
前記ストレージにおける記憶領域の識別子を前記第1スレッドから前記第2スレッドへ通知した後、前記第1スレッドで、前記一連の複数のデータブロックのそれぞれについてのデータ書込要求を順番にキューイングし、
前記第3スレッドを用いて、キューイングされた前記データ書込要求の順番で、前記ストレージコントローラーに前記一連の複数のデータブロックを書き込ませ、
前記第2スレッドで、前記識別子を受領すると、前記一連の複数のデータブロックのそれぞれについてのデータ読出要求を順番にキューイングし、
前記第4スレッドを用いて、キューイングされた前記データ読出要求の順番で、前記ストレージコントローラーに前記一連の複数のデータブロックを読み出させること、
を特徴とするデータ処理装置。
【請求項2】
前記一連の複数のデータブロックを記憶するメモリーを備え、
前記一連の複数のデータブロックは、1つのドキュメント内のいずれかの1ページの画像データを構成する複数のバンドデータであり、
前記メモリーは、前記ドキュメント内の各ページを示すページノードデータを記憶し、
前記複数のバンドデータは、前記ドキュメント内の各ページに対して設けられたリンクリストであり、
あるページの前記ページノードデータは、そのページについての前記複数のバンドデータの先頭へのリンクを有すること、
を特徴とする請求項1記載のデータ処理装置。
【請求項3】
前記プロセッサーは、前記第3スレッドを用いて、前記ページノードデータで、前記複数のバンドデータの先頭位置を特定し、前記リンクリストを辿って、前記複数のバンドデータを前記ストレージコントローラーに書き込ませることを特徴とする請求項2記載のデータ処理装置。
【請求項4】
前記プロセッサーは、前記メモリーに1ページ分の前記複数のバンドデータを記憶するときに前記複数のバンドデータの記憶領域を確保し、そのページの書き込みが完了すると前記記憶領域を解放し、前記メモリーの残量が不足している場合、他のページについての前記複数のバンドデータの記憶領域を解放したときに、前記複数のバンドデータの記憶領域を確保することを特徴とする請求項2記載のデータ処理装置。
【請求項5】
前記プロセッサーは、
前記第3スレッドで前記データブロックをメモリーに記憶し、
前記第1スレッドで前記データブロックのデータ書込要求をキューイングするたびにイベントを発行し、
前記ストレージへの前記データブロックの書込が完了したときに、前記第3スレッドで前記データブロックをメモリーから消去し、
前記キューイングされた前記データ読出要求を順番に実行するとき、前記メモリーに前記データブロックがあれば、前記第4スレッドで前記メモリーからそのデータブロックを読み出し、前記メモリーに前記データブロックがなければ、前記第4スレッドを用いて、前記ストレージコントローラーに前記ストレージから前記データブロックを読み出させ、
所定のタイミングで、前記メモリーから読み出されたデータブロックについての前記データ書込要求をキューから削除すること、
を特徴とする請求項1記載のデータ処理装置。
【請求項6】
前記プロセッサーは、ジョブ完了時に、前記メモリーから読み出されたデータブロックについての前記データ書込要求をキューから削除することを特徴とする請求項5記載のデータ処理装置。
【請求項7】
前記一連の複数のデータブロックは、前記ストレージにおけるファイルに書き込まれ、
前記記憶領域の識別子は、前記ファイルの識別子であること、
を特徴とする請求項1から請求項6のうちのいずれか1項記載のデータ処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate