以下、各図面に示される同一または同等の構成要素、部材、処理には、同一の符号を付するものとし、適宜重複した説明は省略する。また、各図面において説明上重要ではない部材の一部は省略して表示する。
実施の形態は、フォーマットが定められたコマンドによって処理パラメータ設定や処理制御を行うデータ処理装置に関する。実施の形態では、複数のタスクによって共用されるハードウエアリソースにおいて、タスクに係る一連のデータ処理を実行するためのコマンドリストとは別にパラメータの退避/復帰用のベースコマンドリストを用意する。ハードウエアリソースにおけるタスクの競合によりタスクの切り替えが発生する場合、切り替えの前にベースコマンドリストが実行されることで切り替え前のタスクのパラメータが退避される。切り替え後のタスクの処理が完了すると、再度ベースコマンドリストが実行されることにより、退避されていたパラメータが復帰し、切り替え前のタスクが再開される。これにより、ファームウエアによる制御を必要とせず、かつ、パラメータの退避/復帰が可能なタスクの切り替え制御が実現される。
(第1の実施の形態)
図1は、第1の実施の形態に係る複合機100の構成を示すブロック図である。複合機100は、制御部110と、スキャナ120と、プリンタ130と、を備える。スキャナ120は原稿121を読み取り、画像データに変換する光学装置である。具体的には、スキャナ120は原稿121に光を照射し、撮像素子によってその反射光を受光してアナログデータを生成し、A/D変換することで画像データを得る。プリンタ130はプリント(印刷)画像データに従い、用紙131に対してインクを吐出することで、用紙131上に画像を形成するプリント装置である。なお、プリンタ130はこのようなインクジェット方式のプリント装置に限られず、電子写真方式やその他のプリント方式を用いたプリント装置であってもよい。
制御部110はスキャナ120やプリンタ130に対する動作の指示や、画像の転送、画像処理を行う制御装置である。制御部110は、CPU111と、ROM112と、DRAM113と、外部I/F118と、画像処理部116と、を含む。これらの構成要素はそれぞれバス117と接続され、バス117を介してデータのやりとりを行う。
外部I/F118は制御部110の外部とのインタフェースとして機能する。外部I/F118は、スキャナI/F114と、プリンタI/F115と、を含む。スキャナI/F114はスキャナ120とバス117との間に設けられ、それらの間のインタフェースとして機能する。プリンタI/F115はプリンタ130とバス117との間に設けられ、それらの間のインタフェースとして機能する。
CPU111は複合機100を制御するプロセッサである。
ROM112はCPU111によって実行されるプログラムを保持する。
バス117は制御部110の構成要素間でデータを転送する際に用いられる信号伝送路である。
DRAM113は複合機100のメインメモリである。DRAM113は、外部I/F118を介して取得されたスキャンやプリントに用いる画像データや、画像処理のタスクに係る一連の画像処理を実行するためのコマンド群(本明細書では「コマンドリスト」と称す)を保持する。
画像処理部116は画像データを処理するデータ処理装置であり、コマンドリストによって制御され、スキャン画像やプリント画像に対して画像処理を行う。画像処理はスキャン画像処理とプリント画像処理とを含む。スキャン画像処理では、スキャナ120によって読み取った画像データに対して、光学素子の特性によってずれてしまった色調を自然な色に修正するガンマ(γ)補正や、文字の輪郭をはっきりさせるためのエッジ強調等が行われる。プリント画像処理では、プリント対象の画像データに対して、プリント可能なCMYK色空間に変換する色空間変換や、インクで表現するのに適切な階調へと変換するガンマ(γ)変換等が行われる。
図2は、図1のDRAM113の領域の構成を示す模式図である。DRAM113は、コマンドリスト領域202と、画像データ領域204と、退避領域206と、を有する。コマンドリスト領域202には、画像処理のタスクに対応するコマンドリストである通常コマンドリストやベースコマンドリスト(後述)などのコマンドリストが保持される。画像データ領域204には画像データが保持される。退避領域206には、後述のタスク切り替えシーケンスによって退避されるパラメータがタスクごとに保持される。なお、予めタスクごとに退避領域206内の所定の領域を割り当ててもよいし、タスクに対して退避領域206内の領域を動的に割り当ててもよい。図2では、例として、タスクの切り替えが生じたときの切り替え前のタスク(実行中のタスクであり、以下、「旧タスク」と称する)に割り当てられた領域208と、切り替え後のタスク(割り込みタスクであり、以下、「新タスク」と称する)に割り当てられた領域210と、が示されている。
図3(a)~(c)は、コマンドリストの例を示す模式図である。本実施の形態におけるコマンドリストは、画像処理のタスクに係る一連の画像処理を実行するための通常コマンドリストと、タスク切り替え時のパラメータ退避/復帰用のベースコマンドリストと、タスクごとのパラメータ退避/復帰処理を規定する個別コマンドリストと、を含む。これらのコマンドリストはコマンドの集合体である点で共通する。これらのコマンドリストは、メインメモリであるDRAM113に格納されている。以下に示す各コマンドは各コマンドリストに共通である。
図3(a)は通常コマンドリスト601の一例を示す。通常コマンドリスト601は、複数のコマンドにより構成されたタスクの基本動作プログラムであり、基本動作を行うために実行される。通常コマンドリスト601に含まれるコマンドには、パラメータ設定コマンド610と、DRAMアクセスコマンド620と、パラメータ読み出しコマンド630と、同期コマンド640と、分岐コマンド650と、終了コマンド660と、の少なくとも6種類がある。以下に各コマンドを説明する。
パラメータ設定コマンド610は、画像処理部116にパラメータを設定するためのコマンドである。図4は、パラメータ設定コマンド610のフォーマットの一例を示す模式図である。パラメータ設定コマンド610は、ヘッダ部611と、データ部612と、を有する。ヘッダ部611は、パラメータ設定コマンド610を特定する識別子と、画像処理部116のモジュールを特定するIDと、パラメータ設定コマンド610のタイプを示すタイプ情報613と、IDに対応するアドレスと、を有する。タイプ情報613で示されるタイプには、後述する実行部330の指定されたアドレスにパラメータを設定する(または書き込む)ライトタイプと、実行部330の指定されたアドレスからパラメータを読み出すリードタイプと、その両方を1度に行うライト・リードタイプと、がある。例えば、タイプ情報613が「00」であればライトタイプを、「01」であればリードタイプを、「11」であればライト・リードタイプを、それぞれ示してもよい。パラメータ設定コマンド610はパラメータを設定するためのコマンドであるから、そのタイプ情報613はライトタイプとなる。パラメータ設定コマンド610を、そのまま後述する入出力部320および実行部330に送ることで、パラメータが自動で設定される。
図3(a)に戻り、DRAMアクセスコマンド620は、予めパラメータ設定コマンド610等で設定されたパラメータを基に、DRAM113に保存されているデータを画像処理部116に転送するためのコマンドである。DRAMアクセスコマンド620は主に画像処理を実行するために使用される。DRAMアクセスコマンド620について、パラメータで設定されるデータ数の転送が終わるまで、次のコマンドに移行しない。
パラメータ読み出しコマンド630は、画像処理部116に設定されているパラメータを読み出すためのコマンドである。パラメータ読み出しコマンド630のフォーマットは図4に示されるパラメータ設定コマンド610のフォーマットに準じる。パラメータ読み出しコマンド630はパラメータを読み出すためのコマンドであるから、そのタイプ情報613はリードタイプとなる。パラメータ読み出しコマンド630を用いることで、パラメータを読み出すことができるので、パラメータの退避や分析、デバッグに活用可能である。
同期コマンド640は、コマンドをDRAM113等から読み出して画像処理部116へ送信することを一時停止するためのコマンドである。同期コマンド640が実行されると、既に実行部330に送信されたコマンドがすべて処理されるまで新たなコマンドの送信が一時停止されるため、画像処理のパイプラインを初期化することができる。これにより、例えば一連の画像処理が完了した状態を作り出すことができる。
分岐コマンド650は、コマンドリストのアドレスの再設定を行うためのコマンドである。図3(a)に示すように通常「処理方向」にそってコマンドが処理されるが、分岐コマンド650が実行されると矢印のように分岐コマンド650で指定したポインタまで戻ることができる。分岐コマンド650には繰り返し数が設定されており、その繰り返し数に到達したら、アドレスの再設定は行わず、次のコマンドに移行する。
終了コマンド660は、すべてのデータ処理を終えたときに、CPU111や外部I/F118にタスク完了の通知を行うためのコマンドである。
図3(b)は、ベースコマンドリスト602の一例を示す。ベースコマンドリスト602は、タスクの切り替え前に実行される動作プログラムである。ベースコマンドリスト602は、パラメータ設定コマンド680、681、682と、DRAMアクセスコマンド685、683、684と、を含む。各コマンドの詳細は上述の通常コマンドリスト601の説明で説明したため省略する。
パラメータ設定コマンド680は、通常コマンドリスト601の位置(ポインタ)を保持する。パラメータ設定コマンド680は、後述するタスク切り替えシーケンス(復帰)に使用される。
パラメータ設定コマンド681は、DRAM113の退避領域206内のベースアドレスおよびコマンド数を保持する。パラメータ設定コマンド681は、後述するタスク切り替えシーケンス(復帰または退避)に使用される。
パラメータ設定コマンド682は、DRAM113の画像データ領域204内のベースアドレスおよび画像データのデータ数が格納される。パラメータ設定コマンド682は、後述するタスク切り替えシーケンス(復帰)に使用される。
パラメータ設定コマンド680の位置とパラメータ設定コマンド681の位置とは入れ替えてもよい。
DRAMアクセスコマンド683、684、685は、上述したDRAMアクセスコマンド620と同様のコマンドで、パラメータ設定コマンド680、681、682で設定された情報を基にDRAM113からデータをリードしまたはDRAM113へとデータをライトする。
図3(c)は、個別コマンドリスト603の一例を示す。個別コマンドリスト603は、タスク切り替えシーケンス(復帰または退避)で、パラメータの設定や退避を行うためのパラメータ設定コマンドの集合であり、DRAM113に保持されている。例えば、図2に示す退避領域206に、タスクごとに個別コマンドリスト603が保持されている。個別コマンドリスト603は、ベースコマンドリスト602の実行時にリードまたはライトされる。例えば、図3(b)に示すDRAMアクセスコマンド683が実行されると、画像処理部116は、パラメータ設定コマンド681で設定されたDRAM113のベースアドレスにアクセスする。そして、そのアドレスから個別コマンドリスト603のパラメータ設定コマンドをリードまたはライトする。そうすることで、タスクのパラメータ復帰および退避が可能となる。詳細は、後述するタスク切り替えシーケンス(復帰及び退避)で説明する。
図5は、図1の画像処理部116およびそれに接続された部材の機能および構成を示すブロック図である。ここに示す各ブロックは、ハードウエア的には、コンピュータのCPUをはじめとする素子や機械装置で実現でき、ソフトウエア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウエア、ソフトウエアの組合せによっていろいろなかたちで実現できることは、本明細書に触れた当業者には理解されるところである。
画像処理部116は、処理制御部310と、入出力部320と、実行部330と、コマンドリスト格納部340と、を備える。処理制御部310は、タスク情報保持部312を含む。入出力部320は、コマンドリスト取得部321と、コマンド入力部322と、画像データ取得部323と、コマンド生成部324と、コマンド出力部325と、画像データ生成部326と、画像データ出力部327と、を含む。実行部330は、インターコネクト331と、複数の画像処理回路332、333、334と、を含む。コマンドリスト格納部340は、第1格納部341と、第2格納部342と、を含む。
以下では、画像処理部116における基本動作について説明する。
まず、処理制御部310は、CPU111から、最初に実行するタスクの情報(タスク情報)を受信し、タスク情報保持部312に格納する。図6は、図5のタスク情報保持部312の一例を示すデータ構造図である。タスク情報保持部312に保持されるタスク情報はタスクごとに、該タスクを特定するタスクIDと、該タスクの優先度と、コマンドリストポインタと、ベースアドレスと、パラメータ退避コマンド数と、画像データアドレスと、画像データ数と、を含む。
タスク情報は、CPU111や外部I/F118からタスクが発生するごとに増加する。例えば、図6に示すようにタスクID「11」の旧タスクを実行している間にタスクID「22」の新タスクの割り込みが発生した場合、新タスクのタスク情報(のエントリ)がタスク情報保持部312に追加される。タスクが終了することにより不要となったタスク情報は削除される。
次に、タスク情報の各項目について説明する。優先度は、タスクの優先度を表しており、タスクが競合した際に優先するタスクを決定するために使用される。退避領域ベースアドレスは、タスクに関連するパラメータを退避する先のDRAM113の領域の先頭アドレスである。この領域は、例えば、退避領域206においてタスクに割り当てられた領域である。退避したパラメータは、この退避領域ベースアドレスから順に格納される。パラメータ退避コマンド数は、退避領域ベースアドレスと相関があり、DRAM113にコマンドの形で退避されたパラメータの数(コマンド数)を示す。パラメータ退避コマンド数は、タスクを復帰する際、コマンドの読み出し数を決定するために使用される。画像データアドレスは、画像処理を中断したときの画像データの位置(ポインタ)である。画像データアドレスは、タスクを復帰する際、画像データの読み出し位置を決めるために使用される。画像データ数は、画像データアドレスと相関があり、画像処理を中断したときの残りの画像データ数を表す。画像データ数は、タスクを復帰する際、画像データの読み出し数を決めるために使用される。コマンドリストポインタは、画像処理の進捗に関する情報であり、例えば画像処理を中断したときの通常コマンドリストの位置(ポインタ)である。コマンドリストポインタは、タスクを復帰する際、通常コマンドリストの読み出し位置を決めるために使用される。コマンドリストポインタの初期値は、通常コマンドリストの先頭アドレスであってもよい。
図5に戻り、次に、CPU111は、画像処理部116に対し、最初に実行するタスクのパラメータ設定を行う。CPU111は、少なくとも、DRAM113に格納されているコマンドリストのDRAMアドレスを設定する。この時、コマンドリストのDRAMアドレスは、タスク情報保持部312に保持されているコマンドリストポインタと同じ値になる。最初に実行するタスクに対応するコマンドリストは通常コマンドリストとベースコマンドリストとを含む。
次に、CPU111から画像処理部116を起動する。起動後、コマンドリスト取得部321は、上記で設定されたパラメータ(DRAMアドレス)に従って、DRAM113に格納されているベースコマンドリストを読み出し、第1格納部341に格納する。コマンドリスト取得部321は、上記で設定されたパラメータ(DRAMアドレス)に従って、DRAM113に格納されている通常コマンドリストを読み出し、第2格納部342に一時的に格納する。そして、処理制御部310は、第2格納部342に保持されている通常コマンドリストのコマンドを順番に実行する。第2格納部342の容量は任意である。通常コマンドリストを一定量おきに格納していくことで、容量を少なくしてもよいし、すべての通常コマンドリストを格納できる容量にしてもよい。
通常コマンドリストのコマンドとして図3(a)のパラメータ設定コマンド610が実行される場合、画像処理部116のパラメータ設定が行われる。パラメータ設定コマンド610は、コマンドであり、コマンド入力部322に送られる。コマンド入力部322は、受けたコマンドをそのまま実行部330に送信する。実行部330では、インターコネクト331を経由して、インターコネクト331および複数の画像処理回路332、333、334のパラメータ設定が行われる。
通常コマンドリストのコマンドとして図3(a)のDRAMアクセスコマンド620が実行される場合、上記で設定されたパラメータに従って、DRAM113からデータを読み出す。通常、DRAM113に保持される画像データを読み出し、読み出された画像データに対して画像処理が行われる。まず、画像データ取得部323は、設定済のパラメータ(例えば、画像データアドレス、画像データ数)に基づいて、DRAM113の画像データ領域204から画像データを取得する。コマンド生成部324は、取得された画像データを画像コマンドに変換する。
図7は、画像コマンド700のフォーマットの一例を示す模式図である。画像コマンド700は、ヘッダ部702と、データ部704と、を含む。データ部704には画像データが格納されている。例えば、データ部704には、RGBの値が決められたフォーマットで格納されている。ヘッダ部702には、画像データ以外に必要な副次的な情報が任意で格納されている。例えば、ヘッダ部702には、画像コマンド700を特定する識別子や画像の位置を示す位置情報が格納されている。
図5に戻り、このようにコマンド生成部324で生成された画像コマンドは、コマンド入力部322に送られ、さらに実行部330に送られてそこで画像処理される。実行部330で画像処理された画像コマンドは、コマンド出力部325によって受信され、画像データ生成部326に送られる。画像データ生成部326は、画像処理後の画像コマンドを、DRAM113への格納に適したフォーマットの画像データに変換し、画像データ出力部327に渡す。画像データ出力部327は、受けた画像データをDRAM113の画像データ領域204に送信することでDRAM113の画像データ領域204に格納させる。すべての画像処理が終了すると、処理制御部310は、DRAMアクセスコマンド620の次のコマンドに移行する。
通常コマンドリストのコマンドとして図3(a)のパラメータ読み出しコマンド630が実行される場合、上述したパラメータ設定コマンド610と同様の動作が行われる。ただし、インターコネクト331および複数の画像処理回路332、333、334のパラメータ設定を行うのではなく、実行部330に設定されているパラメータを読み出し、コマンド出力部325を介してDRAM113に退避するか、図示しないレジスタに格納する。読み出されたデータは、内部データのデバッグや解析に使用される。
通常コマンドリストのコマンドとして図3(a)の同期コマンド640が実行される場合、通常コマンドリストの読み出しと送信が一時停止される。実行部330に送信されたコマンドがすべて処理されるまで一時停止状態が継続されるため、画像処理のパイプラインを初期化することができる。これにより、例えば一連の画像処理が完了した状態を作り出すことができる。
通常コマンドリストのコマンドとして図3(a)の分岐コマンド650が実行される場合、指定されたポインタの位置まで通常コマンドリストの処理が戻される。繰り返し数はパラメータで設定されており、分岐コマンド650の実行が繰り返し数に達した場合、処理制御部310は指定されたポインタまで戻ることなく、次のコマンドに移行する。
通常コマンドリストのコマンドとして図3(a)の終了コマンド660が実行される場合、すべてのデータ処理を終え、CPU111や外部I/F118にタスク完了通知が行われる。
以上が基本的な画像処理部116の動作である。ただし、例えば、旧タスク実行時に、優先度の高い新タスクの割り込みが発生した際のシーケンス(タスク切り替えシーケンス)については、後述する。
以上の構成による複合機100の動作を説明する。
CPU111は、外部(例えば、外部I/F118)から画像処理の要求を受信すると、該画像処理のタスクに対応する通常コマンドリストおよび個別コマンドリストを生成し、DRAM113に格納する。CPU111は、最初に開始するタスクに対応する初期パラメータを画像処理部116に設定する。CPU111は、DRAM113に矩形単位の画像(矩形画像)が格納されていることを確認した後、画像処理部116に画像処理の実行開始を通知する。もし、上記の画像処理中に、外部から別の画像処理の要求があった際には、CPU111は、該別の画像処理のタスクに応じた通常コマンドリストおよび個別コマンドリストを生成し、DRAM113に格納する。そして、CPU111は、画像処理部116に対してタスク割り込み指示を行う。画像処理部116は、CPU111からのタスク割り込み指示を受けると、以下に説明されるタスク切り替えシーケンスを実施する。
旧タスク実行時に、新タスクの割り込みが発生した際のタスク切り替えシーケンスについて説明する。なお、理解しやすいように、新タスクが発生したときに旧タスクが実行中であるものとする。即ち、新タスクが発生したとき、既に旧タスクのタスク情報はタスク情報保持部312に格納されている。また、ベースコマンドリストは、既に第1格納部341に格納されているものとする。また、既に旧タスクにおける実行部330のパラメータ設定が完了しており、画像処理が実行中の状態であるものとする。
図8は、旧タスク実行時に、優先度の高い新タスクの割り込みが発生した際の全体的な処理の流れを示すフローチャートである。新タスクの割り込みが発生する際、CPU111によって、新タスクのタスク情報は、タスク情報保持部312に格納される(S301)。ステップS301で設定されるタスク情報の項目は、図6に示される優先度と、退避領域ベースアドレスと、パラメータ退避コマンド数と、を含む。
次に処理制御部310は、新タスクの優先度と旧タスクの優先度とを比較する(S302)。その結果、旧タスクの優先度よりも新タスクの優先度のほうが低い場合(S302のN)、処理制御部310は、すぐにタスク切り替えを実施することはなく、旧タスクの終了を待ってから、新タスクに切り替える(S303)。処理制御部310は、旧タスクが終了してから通常コマンドリストの切り替え指示を行い、新タスクに係る動作を開始する。この場合、旧タスクに係る実行部330のパラメータを退避する必要はないため、ベースコマンドリストの実行は発生しない。
旧タスクの優先度よりも新タスクの優先度のほうが高い場合(S302のY)、処理制御部310は、まず、旧タスクのパラメータの退避および新タスクへの切り替えのための、「タスク切り替えシーケンス(退避)」を実行する(S304)。S304において、新タスクへの切り替えが完了すると、処理制御部310は、新タスクを実行する(S306)。なお、この時点で画像処理部116は既に起動されているため、CPU111が通常コマンドリストを取得するのではなく、処理制御部310が、コマンドリスト取得部321に新タスクの通常コマンドリストの取得を指示する。コマンドリスト取得部321は、タスク情報保持部312を参照し、新タスクについて設定されたパラメータ(DRAMアドレス)に従って、DRAM113に保持されている新タスクの通常コマンドリストを読み出し、第2格納部342に一時的に格納する。以後は図5に関連して説明したシーケンスと同様であるため説明を省略する。
新タスクの画像処理が終了した後、処理制御部310は、旧タスクのパラメータの復帰および旧タスクの再開のための「タスク切り替えシーケンス(復帰)」を実行する(S305)。S305が終了した後、処理制御部310は中断していた旧タスクの実行を開始する(S307)。S307における処理は、S306に関して説明した処理と同様であるから説明を省略する。
S304の「タスク切り替えシーケンス(退避)」およびS305の「タスク切り替えシーケンス(復帰)」について説明する。
図9は、タスク切り替えシーケンス(退避)における一連の処理の流れを示すフローチャートである。タスク切り替えシーケンス(退避)は、S402~S403を含む旧タスクのタスク情報退避フェーズと、S404~S405を含むパラメータ退避用コマンドの設定・実行フェーズと、S406~S409を含む旧タスクのパラメータ退避フェーズと、を有する。
まず、S401~S403にて、旧タスクのタスク情報を更新する。処理制御部310は、旧タスクの通常コマンドリストの実行を中断する(S401)。処理制御部310は、通常コマンドリストの実行の中断に際し最後に実行したコマンドまたは次に実行されるはずであったコマンドのアドレスに基づき、アドレス情報(コマンドリストポインタ)を取得する。処理制御部310は、取得したアドレス情報を、タスク情報のコマンドリストポインタとしてタスク情報保持部312に格納する(S402)。処理制御部310は、通常コマンドリストの実行の中断に際し最後に処理した画像データまたは次に処理されるはずであった画像データのアドレスに基づき、画像データアドレスおよび残りの画像データ数を取得する。処理制御部310は、取得した画像データアドレスおよび残りの画像データ数を、それぞれタスク情報の画像データアドレスおよび画像データ数としてタスク情報保持部312に格納する(S403)。このように格納したタスク情報は旧タスクの復帰時に必要となる情報である。
次に、処理制御部310は、第1格納部341に保持されているベースコマンドリストを設定または更新する(S404)。例えば、処理制御部310は、タスク情報保持部312に保持されている旧タスクのタスク情報を基に、図3(b)に示されるようなベースコマンドリスト602を設定する。例えば、処理制御部310は、タスク情報保持部312に保持されている旧タスクのタスク情報を基に、少なくとも図3(b)に示すパラメータ設定コマンド681を設定する。パラメータ設定コマンド681は、旧タスクの中断時の退避領域ベースアドレスとパラメータ退避コマンド数とを設定するためのものである。
S404におけるベースコマンドリストの設定が完了すると、処理制御部310はベースコマンドリストを実行する(S405)。実行する順番は、図3(b)に示される「処理方向」の順番である。なお、実行されるコマンドは、パラメータ設定コマンド681およびDRAMアクセスコマンド683のみであってもよい。これにより、DRAM113の指定アドレスから個別コマンドリストが読み出され、第2格納部342に一時的に格納される(S406)。このとき、格納される個別コマンドリストに含まれるコマンドのタイプ(例えば、図4のタイプ613)はリードタイプに変更される。これは、画像処理部116のパラメータをリードしてDRAM113に退避するためである。処理制御部310は、第2格納部342に一時的に保持されている個別コマンドリストのコマンドを順番に実行することで、画像処理部116のパラメータをリードする(S407)。リードされた画像処理部116のパラメータは、DRAM113の退避領域206のうち旧タスクに割り当てられた領域に格納される(S408)。個別コマンドリストのパラメータ設定コマンドの全ての実行が終わるまで、S407およびS408が繰り返される(S409)。個別コマンドリストのパラメータ設定コマンドの全ての実行が終わると、旧タスクのパラメータの退避が完了する。
次にS410にて新タスクの初期設定を実施する。旧タスクの通常コマンドリストから新タスクの通常コマンドリストに切り替えるために、処理制御部310は、タスク情報保持部312に保持されている新タスクのタスク情報(コマンドリストポインタ)を基にパラメータ設定を行う。即ち、DRAM113に格納されている新タスクのコマンドリストのDRAMアドレスが設定される。これにより、図8に示されるS306における新タスクの実行が可能となる。
以上、説明したように図9に示すS401~S410を実行することで、旧タスクの中断時のパラメータや画像データアドレスや画像データ数を保持することができる。
図10は、タスク切り替えシーケンス(復帰)における一連の処理の流れを示すフローチャートである。タスク切り替えシーケンス(復帰)は、S502~S503を含むパラメータ復帰用コマンドの設定・実行フェーズと、S504を含む旧タスクのコマンドリスト復帰フェーズと、S505~S507を含む旧タスクのパラメータ復帰フェーズと、S508を含む旧タスクの画像データアドレス復帰フェーズと、を有する。
優先度の高い新タスクの実行が完了すると、処理制御部310は、タスク情報保持部312に保持してある新タスクのタスク情報を削除する(S501)。処理制御部310は、第1格納部341に保持されているベースコマンドリストを設定または更新する(S502)。例えば、処理制御部310は、タスク情報保持部312に保持されている旧タスクのタスク情報を基に、少なくとも図3(b)に示されるパラメータ設定コマンド680、681、682を設定する。パラメータ設定コマンド680は、旧タスクを中断したときの旧タスクのコマンドリストポインタを設定するよう更新される。パラメータ設定コマンド681は、旧タスクを中断したときの退避領域ベースアドレスとパラメータ退避コマンド数とを設定するよう更新される。パラメータ設定コマンド682は、旧タスクを中断したときの画像データアドレスと画像データ数とを設定するよう更新される。
S502におけるベースコマンドリストの設定が完了すると、処理制御部310はベースコマンドリストを実行する(S503)。実行する順番は、図3(b)に示す「処理方向」の順番である。これにより、S504~S507が順番に実施される。まず、S503でパラメータ設定コマンド680およびDRAMアクセスコマンド685が実行される。これにより、コマンドリストポインタが処理制御部310に自動設定される(S504)。次に、S503でパラメータ設定コマンド681およびDRAMアクセスコマンド683が実行される。これにより、DRAM113の指定アドレスから個別コマンドリストが読み出され、第2格納部342に一時的に格納される(S505)。このとき、格納される個別コマンドリストに含まれるコマンドのタイプ(例えば、図4のタイプ613)はライトタイプに変更される。これは、画像処理部116にパラメータを設定するためである。処理制御部310は、第2格納部342に保持されている個別コマンドリストを順番に実行することで、画像処理部116のパラメータを設定する(S506)。これにより、旧タスクを中断したときのパラメータを再度設定することができる。そして、個別コマンドリストの全てのパラメータ設定コマンドの実行が完了するまで、S506が繰り返される(S507)。
個別コマンドリストの全てのパラメータ設定コマンドの実行が完了した後、S503で処理制御部310はパラメータ設定コマンド682およびDRAMアクセスコマンド684を実行する。これにより、旧タスクを中断したときに次に処理されるべきであった画像データが読み出され、旧タスクの画像処理が再開される(S508)。
上述したように、S501~S508を実施することによって、旧タスクの中断時から画像処理を再開することができる。
本実施の形態に係る複合機100によると、共有されるハードウエアリソースに対する複数の処理要求が同時に発生する状況において、パラメータ復帰退避用のベースコマンドリストを予め用意し、タスク処理が変わる前にそれを実行する。これにより、ファームウエアによる制御を必要とすることなく、タスクの中断時のパラメータの退避または復帰が可能となるため、処理性能が改善する。
(変形例)
本実施の形態の変形例として複数タスクの切り替えシーケンスを説明する。本実施の形態では、旧タスクおよび新タスクの2つのタスクについて、ベースコマンドリストを共通に使用できることを説明した。本変形例では、3つ以上のタスクの処理要求が発生したとしても、ベースコマンドリストを共通に使用できることを説明する。説明を簡略化するため、旧タスクの実行中に新タスクの割り込みが発生し、新タスクへの切り替えが生じて新タスクが実行されている間にさらに優先度の高い特別タスクの割り込みが発生した例を用いて説明する。この例におけるタスクの優先度は、旧タスク<新タスク<特別タスクである。
図8に示されるフローチャートおよび図9に示されるタスク切り替えシーケンス(退避)を用いて、本変形例における旧タスクと新タスクと特別タスクとの間でのタスクの切り替えおよびそれに伴う退避処理を説明する。
S301で、CPU111は、特別タスクのタスク情報をタスク情報保持部312に登録する。図6の例では、タスクID「11」のタスクが旧タスク、タスクID「22」のタスクが新タスク、タスクID「33」のタスクが特別タスクである。図2の例では、DRAM113の退避領域206において、特別タスクに領域212が割り当てられている。特別タスクに割り当てられた領域212には、特別タスクに対応した個別コマンドリストが格納されている。なお、特別タスクのタスク情報に含まれるパラメータ退避コマンド数は、特別タスクの個別コマンドリストのコマンド数に対応している。特別タスクのタスク情報に含まれる退避領域ベースアドレスは、図2に示される特別タスクに割り当てられた領域212のベースアドレス214に対応している。
S302で、タスクの優先度が比較される。本変形例では、実行中の新タスクの優先度と、特別タスクの優先度と、が比較される。新タスクの優先度よりも特別タスクの優先度のほうが高いため、処理はS304に移る。S304で、タスク切り替えシーケンス(退避)が実行される。ここからは、図9に示されるタスク切り替えシーケンス(退避)を参照して、新タスクから特別タスクに切り替える動作を説明する。重複する説明は適宜省略する。
まず、図9に示されるS401~S403で、新タスクのタスク情報が更新される。ここで更新されるタスク情報は、図6に示されるタスクID「22」の新タスクのコマンドリストポインタと画像データアドレスと画像データ数とを含む。S404で、ベースコマンドリストが設定される。具体的には、図3(b)に示されるパラメータ設定コマンド681に、図6に示される新タスクの退避領域ベースアドレスと、パラメータ退避コマンド数と、が設定される。なお、ここで設定される退避領域ベースアドレスは、例えば図2に示される退避領域206内の新タスクに割り当てられた領域210のベースアドレス216である。パラメータ退避コマンド数は、図2に示される新タスクの領域210に格納されている個別コマンドリストのコマンド数である。S405で、ベースコマンドリストが実行され、退避領域206内の新タスクに割り当てられた領域210に格納されている個別コマンドリストのコマンドが読み出される。そして、S406~S410で、新タスクに対応する画像処理部116のパラメータがDRAM113に退避される。
ここからは、図10に示されるタスク切り替えシーケンス(復帰)を参照して、特別タスクの処理が終了した後、新タスクの処理を復帰するための動作を説明する。重複する説明は適宜省略する。
まず、S501で、処理制御部310は終了した特別タスクのタスク情報をタスク情報保持部312から削除する。S502で、処理制御部310はベースコマンドリストを設定するか更新する。具体的には、処理制御部310は、図3(b)に示されるパラメータ設定コマンド680に、図6に示される新タスクのコマンドリストポインタを設定する。また、図3(b)に示されるパラメータ設定コマンド681に、図6に示される新タスクの退避領域ベースアドレスと、パラメータ退避コマンド数と、を設定する。また、図3(b)に示されるパラメータ設定コマンド682に、図6に示される新タスクの画像データアドレスと、画像データ数と、を設定する。S503でベースコマンドリストが実行され、S504で新タスクの通常コマンドリストの復帰がなされ、S505~S507で新タスクのパラメータの復帰がなされ、S508で新タスクの画像データアドレスの復帰がなされる。そして、新タスクの処理が実行される。
このように、3つ以上のタスクの処理要求が発生したとしても、ベースコマンドリストを共通に使用することができる。受け入れ可能なタスクの数はタスク情報保持部312の容量に依存してもよい。
(第2の実施の形態)
第1の実施の形態では、ベースコマンドリストをタスク切り替え前に実行することで旧タスクのパラメータの退避および復帰を可能とし、それによって時間を短縮できることを説明した。第2の実施の形態では、特許文献1に代表される方法を組み入れることで、さらに時間を短縮できる例を説明する。
本実施の形態の基本的なタスク切り替えシーケンスの全体フローは図8に示される全体フローと同様である。ただし、本実施の形態では、S301で、パラメータの送信領域ベースアドレスを追加でタスク情報保持部350に格納する。図11は、第2の実施の形態に係るタスク情報保持部350の一例を示すデータ構造図である。送信領域ベースアドレスは、例えば、DRAM113において、新タスクのパラメータを設定するためのパラメータ設定コマンドが格納されている領域の先頭アドレスである。なお、理解しやすいように、送信領域ベースアドレスと退避領域ベースアドレスとは別のアドレスであることを前提に説明するが、同じであっても構わない。その場合、どちらか一方は不要であることは言うまでもない。
図12は、第2の実施の形態に係るタスク切り替えシーケンス(退避)における一連の処理の流れを示すフローチャートである。処理制御部310は、第1格納部341に保持されているベースコマンドリストを設定または更新する(S450)。図13は、第2の実施の形態に係るベースコマンドリスト604の一例を示す模式図である。ベースコマンドリスト604は、タスク切り替えシーケンス(退避)に必要なコマンドリストであり、図3(b)を参照して説明したパラメータ設定コマンド681およびDRAMアクセスコマンド683に加えて、更なるパラメータ設定コマンド686を有する。第1の実施の形態と同様、パラメータ設定コマンド681には、旧タスクのタスク情報を基に旧タスクが中断されたときの退避領域ベースアドレスとパラメータ退避コマンド数とが設定される。更なるパラメータ設定コマンド686には、新タスクのパラメータの送信領域ベースアドレスが設定される。
図12に戻り、S450でのベースコマンドリストの設定が完了すると、処理制御部310はベースコマンドリストを実行する(S451)。実行される順番は、図13に示される「処理方向」の順番である。すなわち、処理制御部310は、パラメータ設定コマンド686、パラメータ設定コマンド681、DRAMアクセスコマンド683、をこの順序で実行する。これにより、パラメータ設定コマンド686を介してDRAM113の送信領域から、新タスクのパラメータを設定するためのパラメータ設定コマンドが読み出され、第2格納部342に一時的に格納される(S452)。パラメータ設定コマンド681を介してDRAM113の指定アドレスから個別コマンドリストが読み出され、第2格納部342に一時的に格納される(S452)。処理制御部310は、送信領域からのパラメータ設定コマンドおよび個別コマンドリストに含まれるコマンドから、新タスクで設定すべきパラメータと旧タスクで退避すべきパラメータとが同じとなる組を抽出して合成する。処理制御部310は、合成の結果得られるパラメータ設定コマンドのタイプ(例えば、図4のタイプ613)をライト・リードタイプに設定する。これは、画像処理部116における旧タスクのパラメータをリードし、且つ新タスクのパラメータをライト(設定)するためである。処理制御部310は、このように合成されたパラメータ設定コマンドを順番に実行することで、画像処理部116における旧タスクのパラメータをリードし、かつ新タスクのパラメータをライト(設定)する(S453)。
本実施の形態に係る複合機によれば、パラメータ設定コマンドのタイプをライト・リードタイプに設定することで、ひとつのコマンドでパラメータの設定と退避とが可能になる。これにより、新タスクと旧タスクとで設定すべきパラメータと退避すべきパラメータとが同じである必要はあるが、タスク切り替え時のパラメータの設定と退避に係る時間を短縮できるので、処理性能が改善する。
(第3の実施の形態)
第1の実施の形態の図8に示されるタスク切り替えシーケンス(全体)では、新タスクの割り込みが発生すると、処理制御部310が新タスクの優先度と旧タスクの優先度とを比較し、即座に旧タスクを退避させるタスク切り替えシーケンス(退避)を実行する。つまり、図3(a)に示される通常コマンドリスト601と、図3(b)に示されるベースコマンドリスト602と、には相関がない。第3の実施の形態では、デバッグの容易化やシステムの高速化を実現するため、通常コマンドリストとベースコマンドリストとに相関を持たせて、タスク切り替えを実行する。例えば、画像を分割して処理する場合(以下、分割の結果得られる画像をバンド画像と称す)、図3(a)に示されるパラメータ設定コマンド610から分岐コマンド650までが、バンド画像を処理するためのシーケンスの1単位となる。この場合、バンド画像に係る1単位の画像処理が終わるタイミング(分岐コマンド650)でタスク切り替えを実施したほうが、システム全体として高速化できる。なぜならば、画像処理されたバンド画像を別の処理に使用できるからである。
図14は、第3の実施の形態に係るタスク切り替えシーケンス(全体)における一連の処理の流れを示すフローチャートである。新タスクの割り込みが発生した場合、新タスクの優先度と旧タスクの優先度とを比較し、新タスクの優先度のほうが高い場合、処理制御部310は実行中の通常コマンドリストのポインタを参照する。処理制御部310は、参照されたポインタが示すコマンドが分岐コマンド650であるか否かを判定する(S310)。ポインタが示すコマンドが分岐コマンド650でない場合、まだバンド画像の処理が終了していないと判断されるため、処理制御部310はそのポインタが示すコマンドを実行する(S311)。処理制御部310は、ポインタを次のコマンドを指すように更新し(S312)、処理をS310に戻す。処理制御部310はポインタが示すコマンドが分岐コマンド650になるまでS310~S312を繰り返す。S310で、ポインタが示すコマンドが分岐コマンド650となった場合、バンド画像の処理が終了したと判断される。そのため、処理はS304に進み、以降は第1の実施の形態で説明したS304~S307が実行される。この時、処理制御部310は、実行するコマンドを指すポインタを、通常コマンドリストの分岐コマンド650から、図3(b)に示されるベースコマンドリスト602の先頭のコマンドに移動させ、実行を開始する。
本実施の形態では、図14に示されるS302の後にS310を行っているが、処理の順序を逆にしてもよい。即ち、バンド画像の処理が終了した段階で、新タスクの優先度と旧タスクの優先度とを比較し、新タスクの優先度が高い場合は、S304~S307を実行してもよい。また、本実施の形態では、タスク切り替えタイミングが分岐コマンド650である場合を説明したが、これに限られない。
本実施の形態に係る複合機によれば、通常コマンドリストとベースコマンドリストとに相関を持たせてタスク切り替えを実施することで、システム全体の高速化を達成できる。
以上、実施の形態に係る複合機の構成と動作について説明した。これらの実施の形態は例示であり、その各構成要素や各処理の組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
第1から第3の実施の形態では、DRAM113をコマンドリスト領域202と画像データ領域204と退避領域206とに分ける場合について説明したが、これに限られず、データの欠落がない限り領域を分けなくてもよい。
第1から第3の実施の形態では、ベースコマンドリストを実行することによってDRAM113から個別コマンドリストを読み出す場合を説明したが、これに限られない。例えば、全てのタスクに亘って個別コマンドリストが同じ内容であれば、ベースコマンドリストに直接、同じ内容の個別コマンドリストを記載してもよい。例えば、図3(b)に示されるパラメータ設定コマンド681およびDRAMアクセスコマンド683を、図3(c)に示されるパラメータ設定コマンド670で置き換えてもよい。この場合、DRAMアクセスの時間を短縮することができる。
第1から第3の実施の形態では、旧タスクの画像処理が実行されているときに新タスクが発生する場合について説明したが、これに限られず、画像処理の実行中以外で新タスクが発生する場合にも、実施の形態の技術的思想を適用することができる。例えば、画像処理の開始前であれば、タスク情報保持部312に保持されるタスク情報の画像データアドレスは、画像の先頭アドレスであり、画像の先頭から転送が始まる。一方、画像処理の終了後であれば、画像データ数が0になるため、画像転送は行われない。
第1から第3の実施の形態では、ベースコマンドリストは第1格納部341に保持される場合を説明したが、これに限られず、例えばDRAM113に保持しておき、処理制御部310がそれを直接読み出してもよい。
第1から第3の実施の形態では、個別コマンドリストが予めコマンド化された状態でDRAM113に格納されている場合を説明したが、これに限られず、例えば、コマンドに係るデータのみがDRAM113に格納されていてもよい。この場合、個別コマンドリスト(データのみ)を読み出した後、読み出されたデータはコマンド生成部324にてコマンド化される。コマンド化の結果得られるコマンドは、リードタイプまたはライト・リードタイプであることを示すヘッダを含む。
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。