(57)【要約】【課題】メッセージを用いてタスク間通信を行うマルチタスクシステムにおいて、タスク間デッドロックを防止する。【解決手段】各タスク１０は、受信したメッセージの種類毎に、メッセージのデータ本体を記憶するための記憶領域を有するメッセージデータ記憶部１１と、受信するメッセージの種類の数だけの段数を有するメッセージキュー１２とを備え、メッセージを受信した場合、当該メッセージのデータ本体を、前記メッセージデータ記憶部１１の当該メッセージの種類に対応した記憶領域に上書きし、且つ、当該受信したメッセージの種類が前記メッセージキュー１２に未だキューイングされていない場合には、当該種類のメッセージを受信したことを示す情報を前記メッセージキュー１２に先入れ先出し形式でキューイングするが、当該受信したメッセージの種類が前記メッセージキュー１２に既にキューイングされている場合には、前記メッセージキュー１２には何の変更も加えない動作を行う。【選択図】図３
2007122556.tif 000002
【特許請求の範囲】
【請求項１】
メッセージを利用してタスク間通信を行うマルチタスクシステムにおいて、
各タスクは、
受信したメッセージの種類毎に、メッセージのデータ本体を記憶するための記憶領域を有するメッセージデータ記憶部と、
受信するメッセージの種類の数だけの段数を有するメッセージキューと
を備えることを特徴とするマルチタスクシステム。
【請求項２】
各タスクは、
メッセージを受信した場合、当該メッセージのデータ本体を、前記メッセージデータ記憶部の当該メッセージの種類に対応した記憶領域に上書きし、
且つ、
当該受信したメッセージの種類が前記メッセージキューに未だキューイングされていない場合には、当該種類のメッセージを受信したことを示す情報を前記メッセージキューに先入れ先出し形式でキューイングするが、当該受信したメッセージの種類が前記メッセージキューに既にキューイングされている場合には、前記メッセージキューには何の変更も加えない動作を行う
ことを特徴とする請求項１記載のマルチタスクシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチタスクシステムに関し、特に、メッセージを利用してタスク間通信を行うマルチタスクシステムに関する。
【背景技術】
【０００２】
マルチタスクシステムは、画像形成装置、情報処理装置等のコンピュータを用いた各種システムにおいて広く採用されている。そして、マルチタスクシステムにおいては、要求された処理を実行するために、タスク間で互いに連携して一連の動作行うことになり、そのためにタスク間で通信を行う必要があるが、そのタスク間通信の手法の一つとして、メッセージを利用した通信が知られている。本明細書でいう「マルチタスクシステム」は、このように、メッセージを利用してタスク間通信を行うマルチタスクシステムをいう。なお、マルチタスクシステムは、マルチプロセスシステムとも称されているものである。
【０００３】
このようなマルチタスクシステムでは、メッセージは、タスク間通信に用いられるだけでなく、割り込みハンドラとタスクとの通信にも用いられている。なお、周知のように、割り込みハンドラとは、ＣＰＵ内外で発生する各種イベントによって起動されるプログラム単位である。
【０００４】
さて、マルチタスクシステムにおいては、それぞれのタスクは、他のタスクあるいは割り込みハンドラから送信されたメッセージを受信すると、当該メッセージで定められた処理を実行することになるが、メッセージを受信したときに当該メッセージで定められた処理を常に即座に実行できるとは限らないので、処理が実行できる状態になるまで受信したメッセージデータを一時的に記憶しておく必要があり、そのためにメッセージキューを備えているのが通常である。
【０００５】
そして周知のように、タスクは、受信したメッセージデータを先入れ先出し形式でメッセージキューに記憶し、また、先入れ先出し形式でメッセージキューから一つずつメッセージデータを読み出し、当該メッセージデータで定められた処理を実行する。
【０００６】
ここで、メッセージキューの容量をどれだけにするか、即ち、メッセージキューに幾つのメッセージデータを記憶できるようにするか、換言すればメッセージキューの段数をどうするかは重要である。例えば、コストの観点からはメッセージキューの段数は少ない程有利であるが、その一方、段数を少なくすると、いわゆるタスク間デッドロックが発生する可能性が高くなることが知られている。
【特許文献１】特開平８−２０２５６６号公報
【特許文献２】特開平６−１１０８３２号公報
【特許文献３】特開２００５−４３５６号公報
【特許文献４】特開２００１−２５６１８５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
タスク間デッドロックの発生を防止するための一番簡単な方法は、メッセージキューの容量を大きくすること、即ち、メッセージキューの段数を多くとることである。しかし、この方法は、コストが高くなるばかりでなく、それでもタスク間デッドロックが発生する可能性があるという問題がある。即ち、近年ではＣＰＵの動作速度が高速になっており、従ってタスクの処理速度も速く、それに応じてタスクが送信するメッセージの量も多くなるので、メッセージを受信する側においてメッセージキューの段数をどれだけにしたら完全に全てのメッセージデータが記憶できるか、タスク間デッドロックを防止できるのかを正しく判定することは非常に難しいのである。
【０００８】
また、タスク間デッドロックの発生を防止する方法として、メッセージキューが満杯になったら、他のタスクや割り込みハンドラに対してメッセージの送信を行わないように要求するという方法や、メッセージの送信元のタスクや割り込みハンドラ毎に個別にメッセージキューを設けるという方法が考えられるが、いずれにしてもメッセージに関する制御が複雑且つ面倒になるという問題がある。
【０００９】
そこで本発明は、各タスクにおけるメッセージの受信から、受信したメッセージで定められた処理を実行するまでの動作を改良することによりタスク間デッドロックを防止することができ、しかもそのために要するメモリ容量の増加を最小限に止めることができるマルチタスクシステムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記の目的を達成するために本発明に係るマルチタスクシステムは、メッセージを利用してタスク間通信を行うマルチタスクシステムにおいて、各タスクは、受信したメッセージの種類毎に、メッセージのデータ本体を記憶するための記憶領域を有するメッセージデータ記憶部と、受信するメッセージの種類の数だけの段数を有するメッセージキューとを備えることを特徴とする。
【００１１】
また、本発明に係るマルチタスクシステムは、各タスクは、メッセージを受信した場合、当該メッセージのデータ本体を、前記メッセージデータ記憶部の当該メッセージの種類に対応した記憶領域に上書きし、且つ、当該受信したメッセージの種類が前記メッセージキューに未だキューイングされていない場合には、当該種類のメッセージを受信したことを示す情報を前記メッセージキューに先入れ先出し形式でキューイングするが、当該受信したメッセージの種類が前記メッセージキューに既にキューイングされている場合には、前記メッセージキューには何の変更も加えない動作を行うことを特徴とする。
【発明の効果】
【００１２】
本発明によれば、各タスクには、受信したメッセージのデータ本体を記憶するためにメッセージデータ記憶部を設け、また、受信した順番を示すためにはメッセージキューを設けるというように、メッセージのデータ本体と受信順番を別個に管理することとしたので、これらのメッセージデータ記憶部と、メッセージキューに必要な記憶領域の段数は何れもメッセージの種類の数だけとなり、これらのメッセージデータ記憶部と、メッセージキューのメモリ容量の設計は容易となり、これらの必要となるメモリ容量は従来よりは増加する可能性はあるが、その増加量は最小限で済ませることができる。
【００１３】
また、本発明によれば、各タスクは、メッセージを受信した場合には必ずメッセージデータ記憶部の対応する記憶領域にデータ本体を上書きするので、メッセージを受信した時に待ち状態になることはなく、しかも制御は容易であり、他方、メッセージの送信側もメッセージの送信に関しては待ち状態になることはないので、メッセージの発生量がいくら膨大となってもメッセージの送受信に係るタスク間デッドロックは生じないものである。
【発明を実施するための最良の形態】
【００１４】
以下、図面を参照しつつ発明の実施の形態について説明する。先ず、図１を参照して、本発明に係るマルチタスクシステムに用いられるタスクの構成及び動作の概略を説明する。図１において、１０はタスクであり、マルチタスクシステムに備えられる複数のタスクのうちの一つのタスクを示している。ここでは、複数のタスクのうちの一つのタスク１０の構成、動作について説明するが、図１には図示しないその他のタスクも同様の構成を有し、同様の動作を行うものである。
【００１５】
なお、タスク１０及びその他のタスクは同一のＣＰＵに搭載されていてもよく、別個のＣＰＵに搭載されていてもよいが、同じオペレーティングシステム（ＯＳ）上で動作するものとする。
【００１６】
さて、タスク１０は、他のタスクあるいは割り込みハンドラ（何れも図１には図示せず）からメッセージを受けるが、ここではそれらのメッセージは図１に示すように全部でＭ１，Ｍ２，Ｍ３（ｎ），Ｍ４の４種類であるとする。これらのメッセージＭ１〜Ｍ４は、それぞれ、タスク１０に対して具体的な処理を指示するものであるが、本発明の実施の形態を説明する上ではそれらの具体的な処理内容は全く関係ないので、単に記号で表すことにする。
【００１７】
また、メッセージＭ３（ｎ）の「ｎ」は、Ｍ３というメッセージに付加される付加情報であり、従ってタスク１０は、Ｍ３（ｎ）というメッセージで定められた処理を実行するに際しては、ｎという付加情報を用いて行うことになる。図１ではメッセージＭ３のみが付加情報を備えるものとしているが、その他のメッセージも付加情報を備えていてもよいことは当然である。
【００１８】
なお、本発明では、受信するメッセージがどのタスクあるいは割り込みハンドラから送信されたものかは問題としない。即ち、図１において、４種類のメッセージＭ１，Ｍ２，Ｍ３（ｎ），Ｍ４のどれがどのタスク、あるいは割り込みハンドラから送信されたものか、その送信元は問わないものである。また、本発明では、他のタスクへのメッセージの送信については関係ないので、図１ではタスク１０からのメッセージの送信については図示を省略している。
【００１９】
図１において、タスク１０は、メッセージデータ記憶部１１と、メッセージキュー１２とを備えている。これらのメッセージデータ記憶部１１とメッセージキュー１２は、タスク１０が管理している適宜なメモリ上に設けられる。そして、メッセージデータ記憶部１１が設けられるメモリと、メッセージキュー１２が設けられるメモリとは同じメモリであってもよく、異なるメモリであってもよい。
【００２０】
メッセージデータ記憶部１１は、受信したメッセージのデータの本体を記憶するためのものであり、このタスク１０が受信するメッセージの種類に対応した記憶領域を備え、更にそれらの各記憶領域に対してフラグが付されている。即ち、メッセージデータ記憶部１１には、このタスク１０が受信するメッセージの種類毎に、データ本体の記憶領域とフラグが設けられているのである。
【００２１】
そのメッセージデータ記憶部１１の例を図２（ａ）に示す。ここではタスク１０が受信するメッセージはＭ１〜Ｍ４の４種類だけであるので、メッセージデータ記憶部１１には、メッセージＭ１を受信したとき、そのメッセージＭ１のデータ本体を記憶するための記憶領域２１、メッセージＭ２を受信したとき、そのメッセージＭ２のデータ本体を記憶するための記憶領域２２、メッセージＭ３（ｎ）を受信したとき、そのメッセージＭ３（ｎ）のデータ本体を記憶するための記憶領域２３、及び、メッセージＭ４を受信したとき、そのメッセージＭ４のデータ本体を記憶するための記憶領域２４が設けられており、更に、これらの記憶領域２１〜２４のそれぞれに対してフラグ２５〜２８が付されている。
【００２２】
そして、これらの記憶領域２１〜２４の領域は固定的に割り当てられている。即ち、記憶領域２１は、どのメモリの、どのアドレスの範囲に設けられるかは固定されており、このことはタスク１０に予め登録されている。このことは他の記憶領域２２〜２４についても同じである。
【００２３】
なお、フラグ２５〜２８については後述するが、これらは、対応するメッセージがメッセージキュー１２にキューイングされているか否かを示すものであり、ここでは「キューイング中フラグ」と称することにする。そして、ここでは、キューイング中フラグが「１（オン）」の時には、対応するメッセージはメッセージキュー１２にキューイングされており、キューイング中フラグが「０（オフ）」の時には、対応するメッセージはメッセージキュー１２にキューイングされていないものとする。
【００２４】
次に、メッセージキュー１２についてであるが、このメッセージキュー１２には、このタスク１０が受信するメッセージの種類の数と同じ数の記憶領域が設けられている。従って、図１の場合には、図２（ｂ）に示すように、メッセージキュー１２には４つの記憶領域３１〜３４が設けられる。そして、これらの記憶領域３１〜３４は先入れ先出し形式で用いられる。ここでは、記憶領域３１が先頭の記憶領域であり、記憶領域３４が末尾の記憶領域であるとする。
【００２５】
次に、タスク１０のメッセージに関する動作について説明する。先ず、メッセージを受けた場合の動作について、図３（ａ）のフローチャートを参照して説明する。いま、或るメッセージを受けた（ステップＳ１）とすると、タスク１０は、当該メッセージに付されているメッセージＩＤによって当該メッセージの種類を識別する（ステップＳ２）。なお、メッセージには、そのメッセージがどのようなものであるかを示すＩＤが付されているのは周知である。
【００２６】
このようにして当該メッセージの種類を識別すると、タスク１０は、当該メッセージのデータ本体を、メッセージデータ記憶部１１の中の対応する記憶領域、即ち、当該メッセージのデータ本体を記憶するための領域として設定されている記憶領域に上書きする（ステップＳ３）。そして、タスク１０は次に、当該記憶領域に対応するキューイング中フラグの値が「１」か「０」かを判断する（ステップＳ４）。そして、当該キューイング中フラグの値が「０」である場合（ステップＳ４の判断がｙｅｓの場合）には、当該メッセージを受信したことは未だメッセージキュー１２にキューイングされていないので、当該キューイング中フラグの値を「１」に変更（ステップＳ５）し、メッセージキュー１２に先入れ先出し形成で記憶する（ステップＳ６）。
【００２７】
しかし、ステップＳ４の判断で、当該キューイング中フラグの値が「１」である場合（ステップＳ４の判断がｎｏの場合）には、当該メッセージを受信したことは既にメッセージキュー１２に先入れ先出し形式でキューイングされているので、この処理はこのまま終了する。従って、この場合にはメッセージキュー１２には何の変更もない。
【００２８】
なお、図３（ａ）のステップＳ３においてメッセージキュー１２に先入れ先出し形式でキューイングするのは、この時受信したメッセージのデータ本体ではなく、あくまでも当該種類のメッセージを受信したことを示す情報である。この情報としては、実際には、メッセージデータ記憶部１１の当該種類のメッセージの記憶領域の先頭アドレスへのポインタを記憶するようにすればよく、ここでもそのようにするものとする。上述した通り、メッセージデータ記憶部１１の各データ本体の記憶領域２１〜２４のアドレス範囲は固定されているので、このことが可能である。
【００２９】
次に、受信したメッセージで定められた処理を行う場合の動作について、図３（ｂ）のフローチャートを参照して説明する。メッセージキュー１２に情報がキューイングされている場合（ステップＳ１１の判断がｙｅｓの場合）、タスク１０はメッセージキュー１２から先入れ先出し形式で一つの情報を抜き取る（ステップＳ１２）。従って、ここではメッセージキュー１２の先頭の記憶領域に書き込まれている情報を抜き取ることになる。
【００３０】
なお、図３（ｂ）のフローチャートには示していないが、メッセージキュー１２の先頭の記憶領域から情報が抜き取られた場合には、メッセージキュー１２のそれ以下の記憶領域の情報の抜き取りの順番を順次繰り上げる必要が生じるが、これは、実際には、メッセージキュー１２としてリングカウンタを用い、先頭の記憶領域の位置（アドレス）を順次変更することによって、容易に行うことができる。
【００３１】
さて、上述した通り、ステップＳ１２でメッセージキュー１２から抜き取った情報は、メッセージデータ記憶部１１の中の或るメッセージのデータ本体の記憶領域の先頭アドレスへのポインタであるから、タスク１０は、当該ポインタで示されるメッセージデータ記憶部１１の或る記憶領域にアクセスする。そして、タスク１０は、当該記憶領域に対して付されているキューイング中フラグの値を「１」から「０」に変更（ステップＳ１３）し、更に、当該記憶領域から当該メッセージのデータ本体を読み出して、当該メッセージで定められた処理を実行する（ステップＳ１４）。このとき、当該メッセージが付加情報を伴うものである場合には、その付加情報を用いた処理を実行することは上述した通りである。
【００３２】
なお、ステップＳ１４で実行されるメッセージで定められた処理には種々のものがあるが、ここでは処理はどのようなものであってもよく、その具体的な内容は問題としない。
【００３３】
ステップＳ１３において、キューイング中フラグの値を「０」とするのは、当該メッセージの情報がメッセージキュー１２から抜き取られることによって、当該メッセージの情報が再びメッセージキュー１２にキューイングされるようにするためである。
【００３４】
次に、上述した動作の例を示す。いま、メッセージキュー１２にはどのメッセージの情報も記憶されていないとする。この時にはメッセージデータ記憶部１１のキューイング中フラグ２５〜２８の値は全て「０」である。そしてこの時メッセージＭ１を受けたとすると、タスク１０は、このメッセージＭ１のデータ本体を、メッセージデータ記憶部１１の記憶領域２１に上書きすると共に、それに対応するキューイング中フラグ２５の値を「１」とし、更に、メッセージキュー１２の先頭の記憶領域に、メッセージデータ記憶部１１の記憶領域２１の先頭アドレスへのポインタを書き込む。このときのメッセージデータ記憶部１１とメッセージキュー１２の状態はそれぞれ図４（ａ）、（ｂ）に示すようである。なお、図中「（空）」とあるのは何のデータも書き込まれていないことを示している。この点については以下同じである。
【００３５】
メッセージキュー１２が図４（ｂ）示すようであるとき、タスク１０が受信したメッセージで定められた処理を行える状態になったとすると、タスク１０は、メッセージキュー１２の先頭の記憶領域に書き込まれている情報、この場合にはメッセージデータ記憶部１１の記憶領域２１の先頭アドレスへのポインタを抜き取り、これによってメッセージデータ記憶部１１の記憶領域２１の先頭アドレスにアクセスし、この記憶領域２１に付されているキューイング中フラグの値を「０」に変更し、更に、当該記憶領域２１からメッセージＭ１のデータ本体を読み出して、当該メッセージＭ１で定められた処理を実行する。この結果、メッセージデータ記憶部１１及びメッセージキュー１２は最初の状態に戻ることになる。
【００３６】
次に、メッセージデータ記憶部１１、メッセージキュー１２がそれぞれ図４（ａ）、（ｂ）の状態にあるとき、続けて、付加情報の値がｍのメッセージＭ３（ｍ）と、メッセージＭ４をこの順に受信したとすると、この時点ではメッセージデータ記憶部１１、メッセージキュー１２の状態はそれぞれ図４（ｃ）、（ｄ）のようになる。
【００３７】
そして更に、メッセージデータ記憶部１１、メッセージキュー１２がそれぞれ図４（ｃ）、（ｄ）の状態にあるときに、続けて、付加情報が（ｍ＋１）となされたメッセージＭ３（ｍ＋１）を受信したとすると、図３（ａ）に示す動作によって、メッセージデータ記憶部１１、メッセージキュー１２の状態はそれぞれ図４（ｅ）、（ｆ）に示すようになるが、図４（ｆ）は図４（ｄ）と同じであることは明らかである。
【００３８】
従って、メッセージデータ記憶部１１、メッセージキュー１２の状態がそれぞれ図４（ｅ）、（ｆ）であるときに、その後は何等のメッセージをも受信せず、タスク１０がメッセージで定められた処理を実行する際には、先ず、メッセージＭ１で定められた処理が実行され、次に、メッセージＭ３で定められた処理が付加情報（ｍ＋１）を用いて実行され、最後にメッセージＭ４で定められた処理が実行されることになる。
【００３９】
ここで従来と異なるのは、上記の動作によれば、メッセージＭ３で定められた処理については、付加情報がｍである場合のＭ３（ｍ）というメッセージについては処理は行われず、最新に受信した、付加情報が（ｍ＋１）であるＭ３（ｍ＋１）というメッセージについての処理が行われることである。
【００４０】
このように、このタスク１０は、あるメッセージを受信した時、このメッセージと同じ種類のメッセージが既にメッセージキュー１２のどこかにキューイングされている場合には、付加情報、即ちその内容が異なっていてもメッセージキューには改めてキューイングせず、先にキューイングされた順序で、今回受信した最新の内容で処理を実行するのである。
【００４１】
即ち、以上の動作によれば、場合によっては処理が行われないメッセージや、処理の順序が入れ替わるメッセージが生じることになるが、このような動作を行っても何等不都合がないようにメッセージの種類を定義することが可能であることは本発明者によって確認されており、また、何等かの不都合が生じる場合には種類が異なるメッセージとして定義すればよいことも本発明者によって確認されている。
【００４２】
以上、本発明に係るマルチタスクシステムにおけるタスクの構成、動作について説明したが、以上の構成、動作によれば、タスク１０は、メッセージを受信した場合には必ずメッセージデータ記憶部１１の対応する記憶領域にデータ本体を上書きするので、メッセージを受信した時に待ち状態になることはなく、しかも制御は容易であり、他方、メッセージの送信側もメッセージの送信に関しては待ち状態になることはないので、メッセージの発生量がいくら膨大となってもメッセージの送受信に係るタスク間デッドロックは生じないものである。
【００４３】
また、タスクが、受信したメッセージで定められた処理を実行する場合、メッセージの種類と、処理の順番が重要となる。メッセージで定められた処理は、受信した順番に行う必要があるからである。
【００４４】
そこで、このマルチタスクシステムでは、上述したように、各タスクには、受信したメッセージのデータ本体を記憶するためにメッセージデータ記憶部１１を設け、受信した順番を示すためにはメッセージキュー１２を設けるというように、メッセージのデータ本体と受信順番を別個に管理することとしたので、これらのメッセージデータ記憶部１１と、メッセージキュー１２に必要な記憶領域の段数は何れもメッセージの種類の数だけとなり、これらのメッセージデータ記憶部１１と、メッセージキュー１２のメモリ容量の設計は容易である。また、必要となるメモリ容量は従来よりは増加する可能性はあるが、その増加量は最小限で済ませることができる。
【００４５】
なお、メッセージキュー１２に記憶するのは、メッセージのデータ本体ではなく、当該メッセージを受信したことを示す情報であるとしたが、このようにすることの理由について付言しておく。
【００４６】
勿論、メッセージキュー１２の各記憶領域に、受信した順番に、受信したメッセージのデータ本体を書き込むようにすることは可能である。そして、その場合にはメッセージデータ記憶部１１は不要となる。受信したメッセージのデータ本体を２箇所に記憶する必要はないからである。
【００４７】
そうすると、タスク１０に設けられるのは、メッセージキュー１２だけとなり、その段数は、メッセージの種類の数だけとなる。このようであるとき、新たに何らかのメッセージを受信した場合には、その都度、同じ種類のメッセージが既にメッセージキュー１２に記憶されているか否かを検索する必要が生じる。既にメッセージキュー１２に記憶されていれば上書きし、未だ記憶されていなければメッセージキュー１２に先入れ先出し形式で記憶する必要があるからである。
【００４８】
メッセージの種類の数が少ない場合には、このような検索、そして上書きや、先入れ先出し形式での記憶といった処理は比較的容易であるが、システムによっては一つのタスクが受信するメッセージの種類の数は数百から千を超える場合もあり得るものであり、検索等の処理は非常に面倒で、時間がかかることになる。
【００４９】
それに対して、これまで説明してきた本発明に係るタスクの構成、動作によれば、何等かのメッセージを受信した場合には、メッセージデータ記憶部１１の中の当該メッセージに対応する記憶領域にデータ本体を上書きするだけでよく、上記のような検索という処理は全く必要はない。従って、その分メッセージの受信時の処理は簡単で、短時間で行うことができるのである。
【００５０】
以上、本発明に係るマルチタスクシステムに備えられるタスクの構成及び動作の概略について説明した。そして、本発明に係るマルチタスクシステムは種々の装置、システムに適用可能であることは勿論である。そこで、以下、本発明に係るマルチタスクシステムを適用した画像形成装置について図５を参照して簡単に説明する。
【００５１】
図５において、画像形成装置は、制御部１、操作パネル３，エンジン４を備えている。操作パネル３は入力手段と表示手段とを備えているものとし、エンジン４は、便宜的に、原稿読み取りを行うスキャナと、画像形成を行う手段を含んでいるものとする。
【００５２】
制御部１は、操作パネル３におけるボタン操作に伴う割り込みを検知する割り込みハンドラであるＨＰ５、エンジン４からの信号に伴う割り込みを検知する割り込みハンドラであるＨＥ６、及びマルチタスクシステム１００を備えている。
【００５３】
ここで、マルチタスクシステム１００は、本発明に係るマルチタスクシステムであり、図５では２つのタスク１０Ａ、１０Ｂを有するものとしている。これら２つのタスク１０Ａ、１０Ｂは、何れも、これまで説明してきた構成を備え、動作を行うものである。従って、タスク１０Ａはメッセージデータ記憶部１１Ａと、メッセージキュー１２Ａを備えており、タスク１０Ｂはメッセージデータ記憶部１１Ｂと、メッセージキュー１２Ｂを備えている。そして、ここでは、タスク１０Ａは操作パネル３に関する制御を行い、タスク１０Ｂはエンジン４の制御を行うものとする。
【００５４】
このような画像形成装置では、タスク間で送受信されるメッセージ、及び割り込みハンドラからタスクへ送信されるメッセージの種類は膨大な数に上るが、ここではごく僅かのメッセージについて説明するに止めることにする。
【００５５】
まず、メッセージの種類と、その流れを概略説明する。ＨＰ５は、操作パネル３においてプリント枚数が設定されてスタートボタンが押されたことを検知すると、プリント開始を示すメッセージＭａ１（ｍ）をタスク１０Ａに送信する。ｍはプリント設定枚数を示す付加情報であり、以下同じである。タスク１０Ａはこれを受けると、プリント開始を示すメッセージＭＢ１（ｍ）をタスク１０Ｂに送信する。これが受信したメッセージＭａ１（ｍ）で定められた処理である。そして、タスク１０Ｂはこのメッセージを受けるとエンジン４を制御して、ｍ枚のプリントを実行させる。これが受信したメッセージＭＢ１（ｍ）で定められた処理である。
【００５６】
プリントを開始すると、エンジン４はプリント枚数をカウントしており、何枚のプリントを終了したかをＨＥ６に通知するが、これによりＨＥ６は、プリント終了枚数を示すメッセージＭｂ３（ｎ）をタスク１０Ｂに送信する。ｎはプリント終了枚数を示す付加情報であり、以下同じである。タスク１０Ｂはこれを受けると、プリント終了枚数を示すメッセージＭＡ３（ｎ）をタスク１０Ａに送信する処理を実行する。これが受信したメッセージＭｂ３（ｎ）で定められた処理である。そして、タスク１０Ａはこのメッセージを受けると、操作パネル３の表示制御を行い、表示手段にｎ枚のプリントが終了したことを表示する。これが、受信したメッセージＭＡ３（ｎ）で定められた処理である。
【００５７】
その後、エンジン４はｍ枚のプリントが終了すると、プリント終了の信号をＨＥ６に送るが、これによりＨＥ６は、プリント終了を示すメッセージＭｂ４をタスク１０Ｂに送信する。タスク１０Ｂはこのメッセージを受信すると、プリント終了を示すメッセージＭＡ４をタスク１０Ａに送信する。これが受信したメッセージＭｂ４で定められた処理である。そして、タスク１０Ａはこのメッセージを受信すると、操作パネル３の表示制御により、プリントが終了したことを表示する。これが受信したメッセージＭＡ４で定められた処理である。
【００５８】
ユーザは、プリントの開始後、設定枚数のプリントが終了する前にプリントを止めたくなることがある。その時には操作パネル３でストップボタンを操作することになるが、ＨＰ５は、操作パネル３においてストップボタンが押されたことを検知すると、プリント停止を示すメッセージＭａ２をタスク１０Ａに送信する。タスク１０Ａはこれを受けると、プリント停止を示すメッセージＭＢ２をタスク１０Ｂに送信する。これが受信したメッセージＭａ２で定められた処理である。そして、タスク１０ＢはこのメッセージＭＢ２を受けるとエンジン４を制御してプリントを停止させる。これが受信したメッセージＭＢ２で定められた処理である。
【００５９】
以上、メッセージと、その流れ、及び受信したメッセージで定められた処理について簡単に説明したが、以上のメッセージの流れ、及びメッセージで定められた処理が、各タスク１０Ａ、１０Ｂにおいて上述した動作が行われることによって、タスク間デッドロックを生じることなく行われることは明らかであろう。
【００６０】
また、マルチタスクシステム１００における各タスク１０Ａ、１０Ｂの動作によれば、プリントが行われている間に操作パネル３に表示されるプリント終了枚数は、常に、１，２，…と１から順番に表示されるとは限らず、場合によっては、３枚終了の次に６枚終了というように、表示される終了枚数に飛びが生じることもあり得るが、例えそのような事態が発生したとしても何の不都合も生じないことは明らかであろう。
【図面の簡単な説明】
【００６１】
【図１】本発明に係るマルチタスクシステムに備えられる複数のタスクのうちの一つのタスクを示す図である。
【図２】図１中のメッセージデータ記憶部１１と、メッセージキュー１２の構成例を示す図である。
【図３】図１のタスク１０のメッセージに関する動作を説明する図であり、図３（ａ）はメッセージを受信した場合の動作を説明するためのフローチャートであり、図３（ｂ）は受信したメッセージで定められた処理を行う場合の動作を説明するためのフローチャートである。
【図４】タスク１０の動作を説明するための図である。
【図５】本発明に係るマルチタスクシステムを適用した画像形成装置の構成例を示す図である。
【符号の説明】
【００６２】
１…制御部
３…操作パネル
４…エンジン
５…割り込みハンドラ（ＨＰ）
６…割り込みハンドラ（ＨＥ）
１０、１０Ａ、１０Ｂ…タスク
１１、１１Ａ、１１Ｂ…メッセージデータ記憶部
１２、１２Ａ、１２Ｂ…メッセージキュー
１００…マルチタスクシステム
【図１】
2007122556.tif 000003
【図２】
2007122556.tif 000004
【図３】
2007122556.tif 000005
【図４】
2007122556.tif 000006
【図５】
2007122556.tif 000007