(57)【要約】【課題】  本発明は、画像データ入出力の際に、システムに応じた分割サイズで常に処理を行うことにより、生産性の向上、小メモリによるコストダウン、リソースの有効利用ができる画像形成装置を提供することを目的とする。【解決手段】  ある処理単位時間ＰｒｏｃＴを基準にして、画像の入力中にいくつ割り込めるかの算出を行う。画像の入出力リングバッファ時間を処理単位時間ＰｒｏｃＴで割ることで、画像の入力中にいくつ処理が割り込めるかが算出される。また、それぞれの処理に応じて、必要な二次アクセス単位時間も割り出しておき、上記一次データ中の割り込み数内に収まる処理内であればその実行を許可する。【選択図】  図１５
2006128939.tif 000002
【特許請求の範囲】
【請求項１】
入力画像に対しバッファとしての機能を持つ一次記憶手段と、
前記入力画像を前記一次記憶手段を介して保存する二次記憶手段と、
前記入力画像の画像データの圧縮伸長を行う編集手段と、
前記一次記憶手段および前記二次記憶手段に対するアクセス制御を行い、前記一次記憶手段に設けた前記バッファ領域と前記二次記憶手段相互の前記画像データの転送を制御する転送制御手段とを有する画像形成装置であって、
前記転送制御手段により前記画像データの分割処理を行い、
前記分割処理中に、前記分割処理に用いられるリソースを解放し、多重的に処理を実行することを特徴とする画像形成装置。
【請求項２】
前記転送制御手段は、入力される前記画像データ量が確定しているか否かに関わらず実行することを特徴とする請求項１記載の画像形成装置。
【請求項３】
前記転送制御手段は、前記画像データの出力を、前記分割処理を用いて実行することを特徴とする請求項１または２記載の画像形成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像の分割処理を行うと共に画像の形成処理を行う画像形成装置に関する。
【背景技術】
【０００２】
画像形成装置において画像の印刷を行う際には、画像の入出力を行いつつ、画像の圧縮（伸長）、編集処理、二次記憶領域への蓄積を行っていた。この場合に、通常の画像データ量よりも画像データ量が多いと、通常の印刷よりも処理に時間がかかっていた。
【０００３】
そこで従来、画像データに対して、画像形成装置の制御によって、画像の分割を行いながら、画像形成を行うことで画像形成処理に遅れの出ないような技術が提案されている。
【０００４】
また、特許文献１では、印刷制御プログラムによって画像データのラスタ処理、各色プレーンの分割数の初期化を行い、展開されたイメージ画像データを圧縮した際のサイズを各プレーンに対してそれぞれ求め、サイズの転送スピード等から画像転送が間に合うかどうかの判断をし、間に合うと判断された場合には、画像データを実際に圧縮し、その後、プレーンの分割数をプリンタ本体の制御ユニットに通知するコマンドを発行し、実際にデータの転送処理を行う技術が提案されている。
【特許文献１】特開２００３−２２８２２１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、上記の技術では、画像データ量が大きい場合に、その処理に時間がかかる。そのため、画像の処理が終了するまで、使用するリソースが占有されたままの状態であり、他の動作の生産性に大きく影響を及ぼす。
【０００６】
また、一般的に画像の入出力より、画像の圧縮伸長、編集処理の方が時間的に早くできるため、画像入力待ち時間に他の処理を行うことができればパフォーマンス性の向上に資することになる。
【０００７】
本発明は、画像データ入出力の際に、システムに応じた分割サイズで常に処理を行うことにより、生産性の向上、小メモリによるコストダウン、リソースの有効利用ができる画像形成装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
請求項１記載の発明は、入力画像に対しバッファとしての機能を持つ一次記憶手段と、前記入力画像を前記一次記憶手段を介して保存する二次記憶手段と、前記入力画像の画像データの圧縮伸長を行う編集手段と、前記一次記憶手段および前記二次記憶手段に対するアクセス制御を行い、前記一次記憶手段に設けた前記バッファ領域と前記二次記憶手段相互の前記画像データの転送を制御する転送制御手段とを有する画像形成装置であって、前記転送制御手段により前記画像データの分割処理を行い、前記分割処理中に、前記分割処理に用いられるリソースを解放し、多重的に処理を実行することを特徴とする画像形成装置である。
【０００９】
請求項２記載の発明は、請求項１記載の発明において、前記転送制御手段は、入力される前記画像データ量が確定しているか否かに関わらず実行することを特徴とする。
【００１０】
請求項３記載の発明は、請求項１または２記載の発明において、前記転送制御手段は、前記画像データの出力を、前記分割処理を用いて実行することを特徴とする。
【発明の効果】
【００１１】
本発明により、画像データ入出力の際に、システムに応じた分割サイズで常に処理を行うことが可能となり、生産性の向上や小メモリによるコストダウンが実現できる。また、画像入力待ち時間に他の処理を行うことが可能となり、リソースの有効利用が実現できる。
【発明を実施するための最良の形態】
【００１２】
図１は、本実施形態における画像形成装置のソフトウェア構成を示すブロック図である。画像形成装置１は、ソフトウェア群２と、画像形成装置起動部３と、ハードウェア資源４とを備える。
【００１３】
画像形成装置起動部３は、画像形成装置１の電源ＯＮ時に最初に実行され、ソフトウェア群２内のアプリケーション層５およびプラットフォーム６の起動を行う。例えば、画像形成装置起動部３は、アプリケーション層５およびプラットフォーム６のプログラムを、外部記憶手段であるハードディスク装置（ＨＤＤ）等から読み出し、読み出した各プログラムをメモリ領域に転送して起動させる。
【００１４】
ハードウェア資源４は、白黒レーザプリンタ（Ｂ＆Ｗ ＬＰ）１１と、カラーレーザプリンタ（Ｃｏｌｏｒ ＬＰ）１２と、画像データの変換処理を行うＭＬＣ（Media Link Controller）４３と、スキャナやファクシミリ等のその他のハードウェアリソース１３とを有する。
【００１５】
ソフトウェア群２は、ＵＮＩＸ（登録商標）等のオペレーティングシステム（ＯＳ）上に起動されるアプリケーション層５とプラットフォーム６とを有する。アプリケーション層５は、プリンタ、コピー、ファックスおよびスキャナ等の画像形成にかかるユーザサービスにそれぞれ固有の処理を行うプログラムを備える。また、プラットフォーム６は、アプリケーション層５からの処理要求を解釈してハードウェア資源４の獲得要求を発生するコントロールサービス層９と、１つ以上のハードウェア資源４の管理を行ってコントロールサービス層９からの獲得要求を調停するシステムリソースマネージャ（ＳＲＭ）３９と、ＳＲＭ３９からの獲得要求に応じてハードウェア資源４の管理を行うハンドラ層１０とを有する。
【００１６】
アプリケーション層５は、プリンタ用のアプリケーションであるプリンタアプリ２１と、コピー用アプリケーションであるコピーアプリ２２と、ファックス用アプリケーションであるファックスアプリ２３と、スキャナ用アプリケーションであるスキャナアプリ２４とを有する。
【００１７】
コントロールサービス層９は、ネットワークコントロールサービス（ＮＣＳ）３１と、デリバリーコントロールサービス（ＤＣＳ）３２と、オペレーションパネルコントロールサービス（ＯＣＳ）３３と、ファックスコントロールサービス（ＦＣＳ）３４と、エンジンコントロールサービス（ＥＣＳ）３５と、メモリコントロールサービス（ＭＣＳ）３６と、ユーザインフォメーションコントロールサービス（ＵＣＳ）３７と、システムコントロールサービス（ＳＣＳ）３８とを有する。
【００１８】
また、プラットフォーム６は、予め定義されている関数によりアプリケーション層５からの処理要求を受信可能とするＡＰＩ（Application Program Interface）５３を有するように構成される。ＯＳは、アプリケーション層５およびプラットフォーム６の各ソフトウェアをプロセスとして並列実行する。
【００１９】
ＮＣＳ３１のプロセスは、ネットワークＩ／Ｏを必要とするアプリケーションに対して共通に利用できるサービスを提供するものであり、ネットワーク側から各プロトコルによって受信したデータを各アプリケーションの振り分けや、各アプリケーションからのデータをネットワーク側に送信する際の仲介を行う。例えばＮＣＳ３１は、ネットワークを介して接続される機器とのデータ通信を、ｈｔｔｐｄ（HyperText Transfer Protocol Daemon）により、ＨＴＴＰ（HyperText Transfer Protocol）により制御する。
【００２０】
ＤＣＳ３２のプロセスは、蓄積文書の配信等の制御を行う。ＯＣＳ３３のプロセスは、ユーザと画像形成装置１本体との間の情報伝達手段であるオペレーションパネルの制御を行う。ＦＣＳ３４のプロセスは、アプリケーション層５からＰＳＴＮやＩＳＤＮ網を利用したファックス送受信、バックアップ用のメモリで管理される各種ファックスデータの登録や引用、ファックス読み取り、ファックス受信印刷等を行うためのＡＰＩを提供する。
【００２１】
ＥＣＳ３５のプロセスは、白黒レーザプリンタ１１、カラーレーザプリンタ１２、その他のハードウェアリソース１３等のエンジン制御を行う。ＭＣＳ３６のプロセスは、メモリの取得や開放、ＨＤＤの利用等のメモリ制御を行う。ＵＣＳ３７は、ユーザ情報の管理を行う。ＳＣＳ３８のプロセスは、アプリケーション管理、操作部制御、システム画面表示、ＬＥＤ表示、ハードウェア資源管理、割り込みアプリケーション制御等の処理を行う。
【００２２】
ＳＲＭ３９のプロセスは、ＳＣＳ３８と共にシステムの制御およびハードウェア資源４の管理を行う。例えばＳＲＭ３９のプロセスは、白黒レーザプリンタ１１やカラーレーザプリンタ１２などのハードウェア資源４を利用する上位層からの獲得要求に従って調停を行い、実行制御する。具体的には、ＳＲＭ３９のプロセスは、獲得要求されたハードウェア資源４が利用可能であるか、言い換えれば他の獲得要求により利用されていないかどうかの判定を行う。利用可能であれば獲得要求されたハードウェア資源４が利用可能である旨の通知を上位層に行う。また、ＳＲＭ３９のプロセスは、上位層からの獲得要求に対してハードウェア資源４を利用するためのスケジューリングを行い、プリンタエンジンによる紙搬送や作像動作、メモリ確保、ファイル生成等の要求内容の直接実施を行う。
【００２３】
ハンドラ層１０は、ファックスコントロールユニット（ＦＣＵ）７１の管理を行うファックスコントロールユニットハンドラ（ＦＣＵＨ）４０と、プロセスに対するメモリの割り振り及びプロセスに割り振られたメモリの管理を行うイメージメモリハンドラ（ＩＭＨ）４１とを有する。ＳＲＭ３９およびＦＣＵＨ４０は、予め定義されている関数によりハードウェア資源４に対する処理要求を送信可能とするエンジンＩ／Ｆ５４を利用して、ハードウェア資源４に対する処理要求を行う。
【００２４】
このように画像形成装置１は、各アプリケーションで共通的に必要な処理をプラットフォーム６で一元的に処理することができる。
【００２５】
次に、画像形成装置１のハードウェア構成について説明する。図２は、本実施形態における画像形成装置１のハードウェア構成を示す。画像形成装置１は、コントローラ６０と、オペレーションパネル７０と、ＦＣＵ７１と、ＵＳＢデバイス７２と、ＩＥＥＥ１３９４デバイス７３と、エンジン部７４とを含む。
【００２６】
コントローラ６０は、ＣＰＵ６１と、システムメモリ６２と、ノースブリッジ（ＮＢ）６３と、サウスブリッジ（ＳＢ）６４と、ＡＳＩＣ６６と、ローカルメモリ６７と、ＨＤＤ６８とを有する。
【００２７】
オペレーションパネル７０は、コントローラ６０のＡＳＩＣ６６に接続される。また、ＭＬＣ４３、ＦＣＵ８０、ＵＳＢデバイス９０、ＩＥＥＥ１３９４デバイス１００およびエンジン部１２０は、コントローラ６０のＡＳＩＣ６６にＰＣＩバスにより接続される。
【００２８】
コントローラ６０では、ＡＳＩＣ６６に、ローカルメモリ６７、ＨＤＤ６８等が接続されると共に、ＣＰＵ６１とＡＳＩＣ６６とがＣＰＵチップセットのＮＢ６３を介して接続される。このように、ＮＢ６３を介してＣＰＵ６１とＡＳＩＣ６６とを接続すれば、ＣＰＵ６１のインタフェースが公開されていない場合に対応できる。
【００２９】
なお、ＡＳＩＣ６６とＮＢ６３とはＰＣＩバスを介して接続されているのでなく、ＡＧＰ（Accelerated Graphics Port）６５を介して接続される。このように、アプリケーション層５やプラットフォーム６を形成する一つ以上のプロセスを実行制御するため、ＡＳＩＣ６６とＮＢ６３とを低速のＰＣＩバスでなくＡＧＰ６５を介して接続し、パフォーマンスの低下を防いでいる。
【００３０】
ＣＰＵ６１は、画像形成装置１の全体制御を行う。ＣＰＵ６１は、ＮＣＳ３１と、ＤＣＳ３２と、ＯＣＳ３３と、ＦＣＳ３４と、ＥＣＳ３５と、ＭＣＳ３６と、ＵＣＳ３７と、ＳＣＳ３８と、ＳＲＭ３９と、ＦＣＵＨ４０と、ＩＭＨ４１とをＯＳ上にそれぞれプロセスとして起動して実行させると共に、アプリケーション層５を形成するプリンタアプリ２１と、コピーアプリ２２と、ファックスアプリ２３と、スキャナアプリ２４とを起動して実行させる。
【００３１】
ＮＢ６３は、ＣＰＵ６１と、システムメモリ６２と、ＳＢ６４と、ＡＳＩＣ６６とを接続させるためのブリッジである。システムメモリ６２は、画像形成装置１の描画用メモリ等として用いるメモリである。ＳＢ６４は、ＮＢ６３とＲＯＭ、ＰＣＩバス、周辺デバイスとを接続するためのブリッジである。また、ローカルメモリ６７はコピー用画像バッファ、符号バッファとして用いるメモリである。
【００３２】
ＡＳＩＣ６６は、圧縮伸張器や編集器等の画像処理用のハードウェア要素を有する画像処理用途向けのＩＣである。ＨＤＤ６８は、画像データの蓄積、文書データの蓄積、プログラムの蓄積、フォントデータの蓄積、フォームの蓄積等を行うためのストレージである。また、オペレーションパネル７０は、ユーザからの入力操作を受け付けると共に、ユーザに向けた表示を行う操作部である。
【００３３】
次に、本実施形態において画像データが入力された際の、画像データの入力処理の制御を説明する。スキャナによる画像読み込み等により画像データが入力されると、圧縮伸長器に送り込まれ圧縮伸長処理がなされる。入力され圧縮伸長された画像データは、一旦一次記憶部である画像メモリに格納される。そして、格納された画像データは、二次記憶装置（二次記憶部）の記憶領域に転送され、蓄積される。二次記憶装置は、本実施形態においてはＨＤＤ６８が該当する。
【００３４】
一次記憶部の記憶領域の取得および開放の管理を行うために、画像ＩＤテーブル、ディスクリプタテーブル、ブロックテーブルの３つの管理テーブルが用いられる。
【００３５】
まず、画像ＩＤテーブルについて説明する。図３は、画像ＩＤテーブルの構成を示すブロック図である。画像ＩＤテーブルは、０〜ｎからなるテーブルＩＤの下で、1テーブルが画像ＩＤと、開始ディスクリプタテーブルＩＤから構成される。画像ＩＤは、一次記憶部、二次記憶装置で特有なＩＤ（識別情報）である。開始ディスクリプタテーブルＩＤは、最初に取得したディスクリプタテーブルのＩＤを示す。画像ＩＤテーブルの初期状態（未使用状態）においては、画像ＩＤにはＮＵＬＬ、開始ディスクリプタテーブルＩＤにはＥＯＤ（End Of Discriptor）が設定される。
【００３６】
次に、ディスクリプタテーブルについて説明する。図４は、ディスクリプタテーブルの構成を示すブロック図である。ディスクリプタテーブルは、０〜ｎからなるテーブルＩＤの下で、1テーブルが、開始ブロックＩＤと、使用ブロック数と、次ディスクリプタテーブルＩＤから構成される。開始ブロックＩＤは、最初に取得したブロックのＩＤを示す。使用ブロック数は、開始ブロックから連続的に取得しているブロック数を示す。次ディスクリプタテーブルＩＤは、次のディスクリプタテーブルのＩＤを示す。これにより、二次記憶装置であるＨＤＤ６８の記憶領域を連続的に取得できない場合に、チェーン構造として、記憶領域を不連続的に取得して管理することが可能となる。
【００３７】
開始ブロックＩＤとして、ＥＯＢ（End Of Block）コードが挿入されていると、未使用ディスクリプタと判定できる。また、次ディスクリプタテーブルＩＤに、ＥＯＴ（End Of Table）コードが挿入されていると、チェーン構造の最後にあたるテーブルと判定できる。ディスクリプタテーブルの初期状態（未使用状態）においては、開始ブロックにはＥＯＢ、使用ブロック数には０、次ディスクリプタテーブルＩＤにはＥＯＴが設定される。
【００３８】
次に、ブロックテーブルについて説明する。図５は、ブロックテーブルの構成を示すブロック図である。ブロックテーブルは、二次記憶装置であるＨＤＤ６８の記憶領域を固定長サイズ（ブロック）に細分化し、1ブロックの使用状態を1ビットで表すことでＨＤＤ６８の記憶領域の使用状態を示すテーブル表である。"０"は未使用ブロック、"１"は使用ブロックを表し、これにより記憶領域の使用状態を管理する。ブロックテーブルの初期状態（未使用状態）は"０"である。
【００３９】
次に、画像ＩＤテーブル、ディスクリプタテーブル、ブロックテーブルにより管理された一次記憶部である画像メモリの記憶領域において、連続した領域、分断された領域を確保し、入力画像データ（圧縮後の変換データを含む）を格納するための記憶領域を取得する処理についての制御フローを説明する。図６、図７、図８は、記憶領域の取得処理に係わる制御フローを示す図である。
【００４０】
記憶領域の取得要求が発生すると、まず、入力値のパラメータチェックが行われる（Ｓ１０１）。記憶領域の取得の際には、画像ＩＤと、取得するブロックの連続性を指示する連続ブロック数と、該連続ブロック数を複数取得指示可能にするディスクリプタテーブル個数とが入力値として必要であるため、これらのパラメータに異常がないかチェックがなされる。入力値を示すパラメータに異常があれば（Ｓ１０１／Ｎｏ）、「入力パラメータ異常」を返し、取得処理を抜ける（Ｓ１０８）。
【００４１】
次に、画像ＩＤテーブル取得処理時に用いられるテーブルＩＤカウンタ（画像ＩＤテーブルを指示するカウンタ）および取得済ブロックテーブルカウンタの変数の初期化を行う（Ｓ１０２）。ここで、初期化とは変数を０にすることである。
【００４２】
次に、画像ＩＤテーブルの取得が行われる。画像ＩＤテーブルの取得は、未使用テーブル、すなわち画像ＩＤがＮＵＬＬ値になっているテーブルを画像ＩＤテーブルの先頭からループ検索することで行われる。ループ検索を実行し、テーブルＩＤカウンタが最終テーブルＩＤ値になった場合には、テーブルが全て使用されているため、テーブルＩＤカウントがＦＵＬＬであるか否かのチェックを行う（Ｓ１０４）。ＦＵＬＬである場合（Ｓ１０４／Ｙｅｓ）、画像ＩＤテーブル取得不能と判定し、「画像ＩＤテーブルＦＵＬＬ」であることを返し、処理を抜ける（Ｓ１０９）。テーブルＩＤカウントがＦＵＬＬではない場合（Ｓ１０４／Ｎｏ）、テーブルＩＤカウントがＮＵＬＬ値になるまで、つまり空き画像ＩＤテーブルが存在するまで、テーブルＩＤカウンタを加算し、画像ＩＤテーブルをループ検索する（Ｓ１０６／Ｎｏ、Ｓ１０５）。空き画像ＩＤテーブを検索した場合は（Ｓ１０６／Ｙｅｓ）、対象画像ＩＤテーブルの画像ＩＤに要求画像ＩＤを設定する（Ｓ１０７）。
【００４３】
次に、ディスクリプタテーブルの取得が行われる。まず、ディスクリプタ取得処理に必要なテーブルＩＤカウンタ（ディスクリプタテーブルを指示するカウンタ）と前ディスクリプタテーブルＩＤの初期化を行う（Ｓ１０１）。ここで、初期化とは、変数を０にし、前ディスクリプタテーブルＩＤ（変数）をＥＯＤにすることである。
【００４４】
ディスクリプタテーブルの取得は、開始ブロックがＥＯＢになっているテーブルをディスクリプタテーブルの先頭からループ検索することで行われる。ループ検索を実行し、テーブルＩＤカウンタが最終テーブルＩＤ値になった場合には、テーブルが全て使用されているため、テーブルＩＤカウントがＦＵＬＬであるか否かのチェックを行う（Ｓ１１２）。テーブルＩＤカウントがＦＵＬＬである場合（Ｓ１１２／Ｙｅｓ）、ディスクリプタテーブル取得不能と判定し、「ディスクリプタテーブルＦＵＬＬ」であることを返し、処理を抜ける（Ｓ１１９）。テーブルＩＤカウントがＦＵＬＬではない場合（Ｓ１１２／Ｎｏ）、開始ブロックがＥＯＢになるまで、つまり空きディスクリプタテーブルが存在するまで、テーブルＩＤカウンタを加算し、ディスクリプタテーブルをループ検索する（Ｓ１１４／Ｎｏ、Ｓ１１３）。
【００４５】
上記のループ検索の結果、空きディスクリプタテーブルが存在した場合は（Ｓ１１４／Ｙｅｓ）、前ディスクリプタテーブルＩＤがＥＯＴであるか否かにより以後の処理が分けられる。前ディスクリプタテーブルＩＤがＥＯＴである場合は（Ｓ１１５／Ｙｅｓ）、最初のディスクリプタテーブルと判定し、上記ステップで取得済の画像ＩＤテーブルの開始ディスクリプタテーブルＩＤに、テーブルＩＤカウンタ値で表される検索したディスクリプタテーブルＩＤを設定する（Ｓ１１７）。他方、前ディスクリプタテーブルＩＤにＥＯＴ以外の値が代入されている場合は（Ｓ１１５／Ｎｏ）、前ディスクリプタテーブルＩＤに設定されているディスクリプタテーブルの次ディスクリプタテーブルＩＤに、テーブルＩＤカウンタ値で表される検索したディスクリプタテーブルＩＤを設定する（Ｓ１１６）。上記処理後、前ディスクリプタテーブルＩＤに前ステップで取得したディスクリプタテーブルＩＤを設定し、取得済ディスクリプタテーブルカウンタのカウントアップを行う（Ｓ１１８）。
【００４６】
最後に、ブロックテーブル取得を行う。まず、ブロック取得処理に必要なブロックＩＤカウンタと、開始ブロックＩＤと、未使用ブロックカウンタの変数の初期化を行う（Ｓ１２１）。ここで初期化とは、変数を０にすることである。
【００４７】
ブロックテーブルの取得は、０（未使用）になっているビットをブロックテーブルの先頭からループ検索することで行われる。ループ検索でブロックＩＤカウンタが最終ブロックＩＤ値になった場合、全て使用されているため、テーブルＩＤカウントがＦＵＬＬであるか否かのチェックを行う（Ｓ１２２）。テーブルＩＤカウントがＦＵＬＬである場合（Ｓ１２２／Ｙｅｓ）、ブロック取得不能と判定し、「ブロックテーブルＦＵＬＬ」を返し、処理を抜ける（Ｓ１３３）。対象ブロックが存在し、ブロックテーブルを検索した結果、その対象ブロックのビットが１（使用）の場合は（Ｓ１２５／Ｙｅｓ）、連続ブロック数が途切れるので、未使用ブロックカウンタをリセットし（Ｓ１２４）、ブロックＩＤカウンタを加算し（Ｓ１２３）、ループ検索を続ける。
【００４８】
検索の結果、空きブロックが存在した場合は（Ｓ１２５／Ｎｏ）、未使用ブロックカウンタがリセットされているか、即ち０であるか判定がなされる（Ｓ１２６）。０である場合には、連続ブロックの最初であるから、連続取得の開始ブロックと判断し、画像ＩＤテーブルの開始ブロックＩＤにブロックＩＤカウンタ値（現対象ブロックを示す）を保存し（Ｓ１２７）、未使用ブロックカウンタの1加算（カウントアップ）を行う（Ｓ１２８）。なお、未使用ブロックカウンタが０でない場合（Ｓ１２６）、すなわち対象ブロックが連続取得の開始ブロックではない場合は、未使用ブロックカウンタの１加算（カウントアップ）を行う（Ｓ１２８）。
【００４９】
最後に、未使用ブロックカウンタ値が連続ブロック数として設定される値に達したか、即ち要求されたブロック数分取得できたかの判定がなされる（Ｓ１２９）。取得できていない場合は（Ｓ１２９／Ｎｏ）、ブロックＩＤカウンタを加算させ（Ｓ１２３）、次ブロックの検索を続ける。要求されたブロック数分取得できた場合は（Ｓ１２９／Ｙｅｓ）、現在取得中のディスクリプタテーブルの開始ブロックに開始ブロックＩＤを、使用ブロック数には未使用ブロックカウンタのカウント値を設定する。また、ブロックテーブルの今回取得分のブロックに対し、使用を意味する"１"を設定する（Ｓ１３０）。
【００５０】
最後に、入力パラメータ中に設定されている要求ディスクリプタテーブル個数と、取得済ディスクリプタテーブルカウンタのカウント値との比較を行う（Ｓ１３１）。要求ディスクリプタテーブル個数と取得数が一致した場合は（Ｓ１３１／Ｙｅｓ）、取得完了と判断して、「取得完了」を返し、処理を抜ける（Ｓ１３２）。他方、要求ディスクリプタテーブル個数と取得数が一致しない場合は（Ｓ１３１／Ｎｏ）、次ディスクリプタテーブルを取得するため、Ｓ１１１に戻り、ディスクリプタテーブルの取得シーケンスを行う。
【００５１】
次に、一次記憶部の解放処理について説明する。一次記憶部に確保された領域はバッファとして機能するものであり、次の転送先である二次記憶装置への転送が終わると、取得していた記憶領域は解放され、次データのためのバッファ領域として使用される。この解放処理の制御フローを図９、図１０を参照して説明する。
【００５２】
記憶領域の解放要求が発生すると、まず、入力値のパラメータチェックが行われる（Ｓ２０１）。記憶領域の解放の際には、対象画像の画像ＩＤが入力値として必要であるため、このパラメータに異常がないかチェックがなされる。入力値を示すパラメータに異常があれば（Ｓ２０１／Ｎｏ）、「入力パラメータ異常」を返し、解放処理を抜ける（Ｓ２０８）。
【００５３】
対象画像の解放処理の始めに、画像ＩＤテーブル検索処理時に必要なテーブルＩＤカウンタ（画像ＩＤテーブルを指示するカウンタ）の初期化を行う（Ｓ２０２）。ここで初期化とは、変数を０にすることである。
【００５４】
まず、画像ＩＤテーブルの検索が行われる（Ｓ２０３）。画像ＩＤテーブルの検索は、画像ＩＤテーブルの画像ＩＤが対象画像の画像ＩＤと一致するまで画像ＩＤテーブルの先頭からループ検索することでなされる。ループ検索を行い、テーブルＩＤカウンタが最終テーブルＩＤ値になった場合は、テーブルＩＤカウントがＦＵＬＬであるか否かのチェックがなされる（Ｓ２０４）。テーブルＩＤカウントがＦＵＬＬである場合は（Ｓ２０４／Ｙｅｓ）、対象画像の画像ＩＤテーブルの取得不能と判定し、「該当画像ＩＤテーブルなし」を返し、処理を抜ける（Ｓ２０７）。他方、テーブルＩＤカウントがＦＵＬＬではない場合は（Ｓ２０４／Ｎｏ）、テーブルＩＤカウントが対象画像ＩＤと一致する値になるまで、テーブルＩＤカウンタを加算し、画像テーブルをループ検索する（Ｓ２０６／Ｎｏ、Ｓ２０５）。ループ検索の結果、対象画像の画像ＩＤと一致する画像ＩＤテーブルが存在した場合は（Ｓ２０６／Ｙｅｓ）、ディスクリプタテーブルの解放、ブロックテーブルの解放を実行するために、次工程に移行する。
【００５５】
次の工程では、検索した画像ＩＤテーブルの開始ディスクリプタテーブルＩＤをもとに、対象画像の画像ＩＤが使用している最終ディスクリプタテーブルを検索していく。最終ディスクリプタテーブルかどうかの判定は、そのディスクリプタテーブルの次ディスクリプタテーブルＩＤがＥＯＴになっているか否かでなされる。
【００５６】
ディスクリプタテーブルの解放順は、そのチェーン構造上、最後のテーブルから解放しなければならない。そこで、まず、画像ＩＤテーブルに入力されている開始ディスクリプタテーブルＩＤをディスクリプタテーブルＩＤカウンタに、前ディスクリプタテーブルＩＤをＥＯＴに設定する（Ｓ２１１）。そして、ディスクリプタテーブルＩＤカウンタからディスクリプタテーブルのループ検索を行う。ディスクリプタテーブルＩＤカウンタが最終テーブルＩＤ値（ＦＵＬＬ）になっても、目的のテーブルが検索できない場合は（Ｓ２１２／Ｙｅｓ）、ディスクリプタテーブルに何らかの異常が生じていると判定し、「ディスクリプタテーブル異常」を返し、処理を抜ける（Ｓ２１８）。
【００５７】
ディスクリプタテーブルを検索した結果、テーブルＩＤカウンタ値のＩＤを持つディスクリプタテーブルに記載した次ディスクリプタテーブルＩＤがＥＯＴ以外の場合（Ｓ２１４／Ｎｏ）、前ディスクリプタテーブルＩＤとして現テーブルＩＤカウンタが示す値を設定してから、テーブルＩＤカウンタに次ディスクリプタテーブルＩＤを再設定し（Ｓ２１３）、Ｓ２１２に戻る。
【００５８】
他方、ディスクリプタテーブルを検索した結果、テーブルＩＤカウンタ値のＩＤを持つディスクリプタテーブルに記載した次ディスクリプタテーブルＩＤがＥＯＴの場合は（２１４／Ｙｅｓ）、前ディスクリプタテーブルＩＤのディスクリプタテーブルに記載した次ディスクリプタテーブルＩＤをＥＯＴに設定する（Ｓ２１５）。
【００５９】
上記の制御フローで解放対象ディスクリプタテーブルＩＤが決定されると、その決定されたディスクリプタテーブルＩＤのブロックテーブルの解放が実行される。ブロックの解放は、開放対象のディスクリプタテーブル中に示される開始ブロックＩＤおよび使用ブロック数に基づいて、開始ブロックと使用ブロック数分のブロックビットをリセットする、すなわち未使用を示す０に設定することにより実行される（Ｓ２１６）。これで、対象ディスクリプタテーブルの解放処理が完了する。
【００６０】
なお、解放処理は1テーブルずつ実行されるので、複数テーブルがチェーン構造でつながっている場合には、次のテーブルの開放処理を行う必要がある。そのため、前ディスクリプタテーブルＩＤを参照し、ＥＯＴが設定されているかのチェックを行う（Ｓ２１７）。チェックの結果、ＥＯＴが設定されている場合は（Ｓ２１７／Ｙｅｓ）、対象画像の全てのディスクリプタテーブルとブロックテーブルの解放が完了したと判定し、処理を抜ける。他方、ＥＯＴが設定されていない場合は（Ｓ２１７／Ｎｏ）、次のテーブルの開放を行うために、テーブルＩＤカウンタに前ディスクリプタテーブルＩＤを設定して（Ｓ２１９）、Ｓ２１２に戻り、再び解放処理を行い、ＥＯＴが設定されているテーブルに至るまで最後のテーブルから順に解放処理を継続する。
【００６１】
次に、二次記憶装置における記憶領域の取得、解放について説明する。本実施形態では、二次記憶装置にはＨＤＤ６８が該当する。一次記憶部である画像メモリに確保されたバッファ領域に送られた圧縮データは、二次記憶装置であるＨＤＤ６８に転送され、データとして蓄積される。
【００６２】
二次記憶装置の記憶領域の取得、解放処理は、一次記憶部の取得、解放処理と共通の構造に従い実施される。図３〜５で示したものと同様のテーブルによるデータ構造を用いる。従って、ここではその説明を省略する。なお、ブロックテーブルについては、一次記憶部に比べ記憶領域の容量が大きいため固定長サイズにブロック化する際の単位を、論理アドレス上連続する複数のセクタの固まりで管理する。また、二次記憶装置にはアクセス不可能な領域保存するためにアクセス禁止セクタテーブルが設けてられている。
【００６３】
一般に、ＨＤＤへのアクセスは、物理アドレス方式ではなく論理アドレス方式で行われる。論理アドレスで指定したセクタが不良セクタである場合、ＨＤＤはセクタを自動的に代替セクタ領域に割り当て直し、論理アドレス上は連続して使用可能なように制御する。しかし、物理アドレス上では、不良セクタを代替セクタに割り当ててしまった結果として、不良セクタアドレス前後はアドレスが不連続となる。このため、データのやりとりに際してヘッドシークが発生してしまい、データ転送時間に影響が生じてしまう。アクセス禁止セクタテーブルは、記憶領域の取得の際にアクセスの対象とならないように、または、ＨＤＤ６８の代替セクタ処理により隠蔽される不良セクタの存在を論理アドレスとの関係で知ることができるようにするための管理テーブルであり、これによりヘッドシークの発生を抑制することが可能となる。
【００６４】
図１１は、二次記憶装置アクセス禁止セクタテーブルの構成を示すブロック図である。アクセス禁止セクタテーブルは、不良セクタのみをテーブルに登録する。登録は、テーブル０〜ｎに不良セクタＩＤ（セクタアドレス）を記録する形でなされる。テーブル０〜ｎの初期状態は“０”とされるが、これだとセクタ０がアクセス禁止セクタと誤検出してしまうことが起こり得る。これを回避するために、アクセス禁止セクタテーブルは、アクセス禁止セクタとして登録されたセクタの計数（カウント）を行うための登録セクタカウンタ９０を備えている。これにより、登録セクタカウンタ９０が"０"を示す場合はアクセス禁止セクタが登録されていないことを表す。
【００６５】
アクセス禁止セクタテーブルと登録セクタカウンタ９０は、二次記憶装置に保存され、電源投入時に二次記憶装置から一次記憶部へ転送されることで、参照可能となる。なお、アクセス禁止単位をブロック化単位でなく、セクタ単位で管理している理由は、ブロック化する際のセクタ数が変更になった場合や、二次記憶装置のパーティション変更等で使用可能な先頭セクタアドレスが変更になり、その結果先頭ブロックの開始セクタずれが生じ、登録しておいた不良セクタとブロックとの整合性がとれなくなってしまった場合に対応できるように考慮した結果である。
【００６６】
図を参照して、アクセス禁止セクタテーブルへの登録動作を説明する。図１２は、不良セクタをアクセス禁止セクタとして登録する場合の動作フローを示す。
【００６７】
不良セクタは通常、ＨＤＤ６８読み出し時にＨＤＤ６８が装備した検出手段により検出される。そこで、読み出し動作の実行をトリガとして、アクセス禁止セクタ登録動作を開始する。まず、ＨＤＤ６８の読み出しを行い、その際に読み出しセクタが不良セクタであるか否かのチェックがなされる（Ｓ３０１）。ここで、不良セクタと評価されなければ（Ｓ３０１／Ｎｏ）、そのまま処理を抜ける。他方、不良セクタと評価される場合は（Ｓ３０１／Ｙｅｓ）、アクセス禁止セクタテーブルを管理するための登録セクタカウンタ９０を1加算し、アクセス禁止セクタテーブルのテーブル中の「登録カウンタ値−1」のテーブルに不良セクタアドレス（物理アドレス）を登録し、処理を抜ける（Ｓ３０２）。これによりアクセス禁止セクタの登録がなされる。
【００６８】
なお、登録セクタカウンタ９０に限界値を設定し、登録カウンタ数が限界値を超えてしまった場合は、不良セクタ等でアクセス禁止セクタが多発しているためＨＤＤ６８の信頼性が低下していることを理由に交換指示を促す等の動作を行うようにしてもよい。
【００６９】
次に、図１３を参照して、アクセス禁止セクタテーブルに登録したアクセス禁止セクタを二次記憶装置のブロックテーブルに反映させるための制御を説明する。まず、内部ループ処理用のカウンタであるループカウンタのリセット、初期化を行う（Ｓ３１１）。そして、初期化したループカウンタ値と登録セクタカウンタ値（登録済みアクセス禁止セクタ数）の比較を行い、カウンタ値が等しければ（Ｓ３１２／Ｙｅｓ）、未処理のアクセス禁止セクタは存在しないとしてループ処理を抜ける。他方、カウンタ値が一致しない場合には（Ｓ３１２／Ｎｏ）、未処理のアクセス禁止セクタが存在するので、アクセス禁止セクタテーブルから「ループカウンタ番目」のテーブルのセクタＩＤを取得し、そのセクタのブロック変換を行う（Ｓ３１３）。このブロックＩＤにより指示されるブロックテーブル中の対象ブロックを予め使用ブロック状態、即ち"１"（使用状態）に設定し、ループカウンタを1加算し（Ｓ３１４）、Ｓ３１２に戻る。このように制御することで、未登録アクセス禁止セクタは形式的に使用状態扱いとなり、アクセスされなくなる。
【００７０】
次に、入力画像に対してデータ圧縮（データ変換）を施した後、圧縮処理後の画像データを一次記憶部のバッファ領域を経由して二次記憶装置に保存する際の制御について説明する。この処理において、画像転送の際に行われる各記憶手段における記憶領域の取得及び開放処理は、上記した取得／開放処理手段を用いる。上記した取得／開放処理手段を用いることにより、転送先の記憶領域を任意の容量で取得可能となるので、データ転送を1回の転送操作で行うことや、分割転送で行うことが可能になる。
【００７１】
図１４は、１回の転送操作で一次記憶領域のデータ転送を行う場合の制御フローを示す。まず、圧縮等のデータ変換後の１画像分のデータ量が全て保持可能な容量を持つバッファ領域を一次記憶領域に確保する（Ｓ４０１）。この際、圧縮伸長器の特性によりデータ圧縮前の容量を越えてしまう可能性がある場合は、その分も考慮して領域を確保する。次に、圧縮伸長器を用いデータの編集／圧縮を行い（Ｓ４０２）、圧縮した画像データを確保したバッファ領域に格納する（Ｓ４０３）。格納完了後、二次記憶装置の記憶領域にデータ圧縮後の容量を確保する（Ｓ４０４）。この場合、バッファ領域に保持された１画像分の変換データ量は圧縮処理時にカウントされ既知であるので、この量を１回の転送操作により転送先であるＨＤＤに確保すべき容量として設定することにより、記憶領域を過不足無く確保することができる。ＨＤＤ６８への転送も１回の操作よって転送を完了させるので、ＨＤＤ６８に取得する記憶領域は連続領域で確保することになる。連続領域の確保を行うときに、不良セクタが登録されたアクセス禁止セクタテーブルのデータを反映させたブロックテーブルを使用することにより、不良セクタの使用を回避して領域の確保が行われる。ＨＤＤ６８に連続領域を確保した後、画像メモリのバッファ領域のデータをＨＤＤ６８の確保した記憶領域に転送する（Ｓ４０５）。転送終了後、画像メモリに確保したバッファ領域を解放し（Ｓ４０６）、フローを終了させる。
【００７２】
図１５は、データ保存を複数の分割転送により行う場合の制御フローを示す。まず、圧縮等のデータ変換後のデータを分割格納するバッファ領域として固定容量を画像メモリに確保する（Ｓ４１１）。なお、確保する領域は固定容量であるため圧縮変換後のデータサイズと関係無く決められる。この後、圧縮伸長器を用いてデータ編集／圧縮を行い（Ｓ４１２）、圧縮した画像データを確保した固定容量のバッファ領域に格納する（Ｓ４１３）。このとき、確保した固定容量のバッファ領域ではデータ圧縮が完了しない場合があるので、圧縮伸長器の終了応答により処理を変える必要がある。そのため確保した固定容量の領域中、使用した容量分をＨＤＤ６８に領域確保し（Ｓ４１４）、この確保した領域にバッファ領域で一時格納した変換データを転送する（Ｓ４１５）。
【００７３】
転送完了後、データ圧縮の完了／未完了を判断するために、圧縮伸長器の終了応答の有無確認を行う（Ｓ４１６）。終了応答のない場合、つまり圧縮未完了の場合は（Ｓ４１６／Ｎｏ）、データ圧縮を完了させるまで、圧縮処理からのループ処理を繰り返す。ここで、未完了の圧縮処理を継続する場合、データ圧縮した次のデータは、前に使用したものと同じ固定容量のバッファ領域に上書きされる。終了応答があった場合、つまり転送終了の場合は（Ｓ４１６／Ｙｅｓ）、画像メモリに確保したバッファ領域を解放し（Ｓ４１７）、処理動作を完了する。
【００７４】
画像形成の際に分割処理を行う場合では、所定の単位長さ、あるいは所定サイズの画像の入力をトリガとして二次記憶領域への画像の蓄積が開始される。一般に画像データの入力（一次データ）速度より、編集圧縮、二次記憶領域への画像の蓄積（二次アクセス）速度の方が速いので、後者を行う際にはリソースに時間的余裕が存在する。
【００７５】
そこで、本実施形態においては、データ転送を分割処理で行う際に、画像の入力をリングバッファ的に扱い、一次記憶領域の画像データが上書きされ、編集圧縮、二次記憶領域への画像の蓄積が行われるまで、そのリソースを開放しておくことにより、他の処理で必要とされていた場合リソースを明け渡すことが可能となる。
【００７６】
この際に、他の処理が割り込める数や時間等は、システムの性能に依存するので一概に基準を設けることは難しい。また、処理の内容によっては、他の処理が規定時間内に終わるかどうかが明確になっている必要があるので、割り込み可能な処理の数・時間は算出される必要がある。
【００７７】
そこで、ある処理単位時間ＰｒｏｃＴを基準にして、画像の入力中にいくつ割り込めるかの算出を行う。画像の入出力リングバッファ時間を処理単位時間ＰｒｏｃＴで割ることで、画像の入力中にいくつ処理が割り込めるかが算出される。また、それぞれの処理に応じて、必要な二次アクセス単位時間も割り出しておき、上記一次データ中の割り込み数内に収まる処理内であればその実行を許可する。
【００７８】
このように処理することにより、少量の一次記憶領域と二次記憶領域で、画像データサイズの大きい画像に関しても画像を形成することが可能となる。また、画像形成の際に、他の各処理の処理時間や優先度に応じた割り込み処理を入れることが可能となる。これにより、パフォーマンス性の向上が実現可能となる。
【００７９】
第二の実施形態について説明する。本実施形態において、画像形成装置は、入力される画像データ量が未確定の場合、一次データのリングバッファ展開中に一次データ終了通知を受けることにより、画像入力の終了の検知を行う。また、二次アクセスが前のリングバッファを処理中だった場合は、次回の二次アクセス量を実データ量にし、二次アクセスと一次データの展開リングバッファが同じ場合は、リングバッファのサイズが終わるまで行い、後にサイズ調整を行う。これにより、画像データの保障を行うことが可能となり、ライン数が確定しない長尺等の画像データサイズの大きい画像に対して、読み込んだ画像のサイズに合わせることが可能となる。
【００８０】
第三の実施形態について説明する。本実施形態において、画像形成装置は、出力する際に必要とされる画像領域が二次記憶領域のどのあたりにあるかを、画像ＩＤ、テーブルＩＤ、ディスクリプタ等の情報を元に特定を行う。これにより、出力画像対象部分を判断し、余計な部分を二次記憶領域から読み出さない処理を行うので、大量画像データに対しても、任意の部分のみを読み出し、高速に画像を出力展開することが可能となる。
【図面の簡単な説明】
【００８１】
【図１】本実施形態に係る画像形成装置のソフトウェア構造を示すブロック図である。
【図２】本実施形態に係る画像形成装置のハードウェア構成を示すブロック図である。
【図３】画像ＩＤテーブルの構成を示すブロック図である。
【図４】ディスクリプタテーブルの構成を示すブロック図である。
【図５】ブロックテーブルの構成を示すブロック図である。
【図６】一次記憶部の取得処理における制御フロー図である。
【図７】一次記憶部の取得処理における制御フロー図である。
【図８】一次記憶部の取得処理における制御フロー図である。
【図９】一次記憶部の解放処理における制御フロー図である。
【図１０】一次記憶部の解放処理における制御フロー図である。
【図１１】アクセス禁止セクタテーブルの構成を示すブロック図である。
【図１２】不良セクタをアクセス禁止セクタテーブルに登録する制御フロー図である。
【図１３】アクセス禁止セクタを二次記憶装置のブロックテーブルに反映させるための制御フロー図である。
【図１４】データの一括転送を行う際の制御フロー図である。
【図１５】データの分割転送を行う際の制御フロー図である。
【符号の説明】
【００８２】
１    画像形成装置
６１    ＣＰＵ
６８    ＨＤＤ
９０    登録セクタカウンタ
【図１】
2006128939.tif 000003
【図２】
2006128939.tif 000004
【図３】
2006128939.tif 000005
【図４】
2006128939.tif 000006
【図５】
2006128939.tif 000007
【図６】
2006128939.tif 000008
【図７】
2006128939.tif 000009
【図８】
2006128939.tif 000010
【図９】
2006128939.tif 000011
【図１０】
2006128939.tif 000012
【図１１】
2006128939.tif 000013
【図１２】
2006128939.tif 000014
【図１３】
2006128939.tif 000015
【図１４】
2006128939.tif 000016
【図１５】
2006128939.tif 000017