(57)【要約】  【課題】  共有メモリを介したタスク間通信において、タスク間通信を行うためのＣＰＵロックや割込み禁止などによる共有メモリの排他制御によって発生する送受信タスクの待ちをなくす。  【解決手段】  複数のタスクからアクセス可能な共有メモリ１１０上の、状態保持領域（ＳＴＡＴＥ）１２０をもつ複数のメモリブロック１３０と、データ送信手段１４０と、データ受信手段１５０を備える。データ送信手段は、共有メモリをロックし、ＳＴＡＴＥ“送信可”のメモリブロックを検索して、ＳＴＡＴＥ“送信中”とし、共有メモリをアンロックし、データ送信終了時にＳＴＡＴＥ“受信可”とする。データ受信手段は、共有メモリをロックし、ＳＴＡＴＥ“受信可”のメモリブロックを検索して、ＳＴＡＴＥ“受信中”とし、共有メモリをアンロックし、データ受信終了時にＳＴＡＴＥ“送信可”とする。【選択図】  図１
2005316659.tif 000002
【特許請求の範囲】
【請求項１】
複数のタスクからアクセス可能な共有メモリを有するタスク間通信装置において、
前記共有メモリ上に設けられた状態保持領域をもつ複数のメモリブロックと、
前記タスクのデータ送信処理開始に当たり、前記共有メモリをロックし、前記共有メモリにおいて前記状態保持領域に“送信可”を保持した前記メモリブロックを検索し、当該メモリブロックの前記状態保持領域に“送信中”を保持させ、前記共有メモリをアンロックすると共に、データ送信処理終了時に当該メモリブロックの前記状態保持領域に“受信可”を保持させるデータ送信手段と、
前記タスクのデータ受信処理開始に当たり、前記共有メモリをロックし、前記共有メモリにおいて前記状態保持領域に“受信可”を保持した前記メモリブロックを検索し、当該メモリブロックの前記状態保持領域に“受信中”を保持させ、前記共有メモリをアンロックすると共に、データ受信処理終了時に当該メモリブロックの前記状態保持領域に“送信可”を保持させるデータ受信手段と、
を有することを特徴とするタスク間通信装置。
【請求項２】
複数のタスクからアクセス可能な共有メモリを有するタスク間通信装置において、
前記共有メモリ上に設けられた状態保持領域をもつ複数のメモリブロックをリング状に連結して構成されるリングバッファと、
前記リングバッファに付加されて次の送信メモリブロックを指示するための書込みポインタと、
前記リングバッファに付加されて次の受信メモリブロックを指示するための読出しポインタと、
前記タスクのデータ送信処理開始に当たり、前記共有メモリをロックし、前記書込みポインタが前記読出しポインタの１つ手前の前記メモリブロックを指示しているかを判断し、１つ手前でなければ当該メモリブロックの前記状態保持領域に“送信中”を保持させ、前記書込みポインタを次の前記メモリブロックの指示に更新し、前記共有メモリをアンロックすると共に、データ送信処理終了時に当該メモリブロックの前記状態保持領域に“受信可”を保持させるデータ送信手段と、
前記タスクのデータ受信処理開始に当たり、前記共有メモリをロックし、前記読出しポインタと前記書込みポインタが同じ前記メモリブロックを指示しているか判断し、同じでなくかつ当該メモリブロックの前記状態保持領域に“受信可”が保持されている場合に当該メモリブロックの前記状態保持領域に“受信中”を保持させ、前記共有メモリをアンロックすると共に、データ受信処理終了時に当該メモリブロックの前記状態保持領域に“送信可”を保持させ、前記読出しポインタを次の前記メモリブロックの指示に更新するデータ受信手段と、
を有することを特徴とするタスク間通信装置。
【請求項３】
前記データ受信手段は、前記読出しポインタと前記書込みポインタが同じ前記メモリブロックを指示しておらず、かつ当該読出しポインタが指示する前記メモリブロックの前記状態保持領域に“受信可”が保持されていなければ、前記読出しポインタから前記書込みポインタまでにある前記メモリブロックから前記状態保持領域に“受信可”を保持した前記メモリブロックを検索し、当該メモリブロックの前記状態保持領域に“受信中”を保持させ、前記共有メモリをアンロックすると共に、データ受信処理終了時に当該メモリブロックに“送信可”を保持させることを特徴とする請求項２に記載のタスク間通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のタスクを並行に処理する情報処理システムにおけるタスク間通信装置に関するものである。
【背景技術】
【０００２】
複数のタスクを並行に処理する情報処理システムでは、複数のタスクが並行してアクセスするための共有メモリを有し、この共有メモリを介してデータの送受信を行うことによりタスク間通信を実現する。
【０００３】
図１０は従来のタスク間通信装置の構成を示すブロック図である。このタスク間通信装置では、共有メモリ１１１０に、データの書込みおよび読出しが行われる複数のデータブロック１１３０と、データブロック毎に未処理または処理済を示す処理フラグ１１２０を有する。送信側タスクは、処理フラグを参照して処理済のデータブロックを選択し、選択したデータブロックにデータの書込みを行う。これと並行して、受信側タスクは、処理フラグを参照して未処理のデータブロックを選択し、選択したデータブロックからデータの読出しを行う。このようにすることにより、送信側タスクと受信側タスクが並行に通信を行える。
【０００４】
しかし、これは送信側タスクも受信側タスクも１つのみの場合に限られる。
【０００５】
複数のタスクを並行に処理する情報処理システムにおいて、上記のタスク間通信装置を使用する場合には、複数の送信側タスクおよび受信側タスクが並行に通信を行うことに起因して、データブロックからの誤データ読出しや、データブロックへのデータの上書きなどの不都合が生じるおそれがある。そこで、このような不都合を防止するための競合管理が必要となる。この競合管理について従来は、送信側タスクおよび受信側タスクがＣＰＵロックや割込み禁止などの手段により共有メモリをロックするようにしていた。
【特許文献１】特開平８−１６５３８号公報（第４−６頁、第２−４図）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
複数のタスクを並行に処理する情報処理システムにおいて、上記のタスク間通信装置を使用する場合は、タスク間通信装置において並行に通信を行うタスクは送信側タスクと受信側タスクの２つに制限される。これは結果として、情報処理システム上に存在する他のタスクに通信待ちを行わせることとなり、送受信タスクの処理効率が悪く、リアルタイム性の保証が困難になる。
【０００７】
また、通信を行うタスクのいずれかが割込みタスクであった場合には、共有メモリ１１１０のロックをＣＰＵロックや割込み禁止により行う必要がある。つまり、図１１、図１２に示すように、データ送受信の前に共有メモリ１１１０のロックを行い、データブロック１１３０へのデータ書込み後もしくはデータブロック１１３０からのデータ読出し後に共有メモリ１１１０のアンロックを行う必要がある。その結果、共有メモリ１１１０へのデータ書込みおよびデータ読出しの間は、いかなる割込みにも応答できないという問題があった。
【０００８】
本発明の目的は、複数のタスクを並行に処理する情報処理システムにおいて、通信時における不要な待ち時間をなくすことにより、送受信タスクの処理効率が高く、応答のリアルタイム性を保証できるタスク間通信装置を提供することにある。
【０００９】
本発明の更なる目的は、割込みタスクも含めたタスク間の通信において、ＣＰＵロックや割込み禁止などによる共有メモリのロック区間を短縮することにより、割込み応答性能の高いタスク間通信装置を提供することにある。
【課題を解決するための手段】
【００１０】
本発明は、上記の課題を解決するために次のような手段を講じる。
【００１１】
本発明による第１のタスク間通信装置は、複数のタスクからアクセス可能な共有メモリを有し、前記共有メモリ上に設けられた状態保持領域をもつ複数のメモリブロックと、次のような機能を有するデータ送信手段およびデータ受信手段を有している。
【００１２】
前記のデータ送信手段は、前記タスクのデータ送信処理開始に当たり、前記共有メモリをロックし、前記共有メモリにおいて前記状態保持領域に“送信可”を保持した前記メモリブロックを検索し、当該メモリブロックの前記状態保持領域に“送信中”を保持させ、前記共有メモリをアンロックすると共に、データ送信処理終了時に当該メモリブロックの前記状態保持領域に“受信可”を保持させるものとして構成されている。
【００１３】
また、前記のデータ受信手段は、前記タスクのデータ受信処理開始に当たり、前記共有メモリをロックし、前記共有メモリにおいて前記状態保持領域に“受信可”を保持した前記メモリブロックを検索し、当該メモリブロックの前記状態保持領域に“受信中”を保持させ、前記共有メモリをアンロックすると共に、データ送信処理終了時に当該メモリブロックの前記状態保持領域に“送信可”を保持させるものとして構成されている。
【００１４】
上記の構成によれば、データ送信処理において、共有メモリをロックして他タスクからのアクセスを禁止した上で“送信可”のメモリブロックを検索し、取得したメモリブロックの状態保持領域（ＳＴＡＴＥ）に“送信中”を保持させ、その後は共有メモリをアンロックして他タスクからのアクセスを許容する状態に戻し、その状態で前記取得したメモリブロックにデータ書込みを行い、終了すれば“受信可”を保持させる。この場合、取得したメモリブロックへのデータ書込み中において共有メモリをアンロックしても、他タスクからの共有メモリへのアクセスにおいては、現在のデータ書込み対象のメモリブロックに“送信中”の標識があるので、競合を避けながら複数タスクのデータ送信の並行処理が可能となっている。
【００１５】
また、データ受信処理において、共有メモリをロックして他タスクからのアクセスを禁止した上で“受信可”のメモリブロックを検索し、取得したメモリブロックの状態保持領域（ＳＴＡＴＥ）に“受信中”を保持させ、その後は共有メモリをアンロックして他タスクからのアクセスを許容する状態に戻し、その状態で前記取得したメモリブロックからデータ読出しを行い、終了すれば“送信可”を保持させる。この場合、取得したメモリブロックからのデータ読出し中において共有メモリをアンロックしても、他タスクからの共有メモリへのアクセスにおいては、現在のデータ読出し対象のメモリブロックに“受信中”の標識があるので、競合を避けながら複数タスクのデータ受信の並行処理が可能となっている。
【００１６】
以上の相乗により、複数のタスクを並行に処理する情報処理システムにおいて、通信時における不要な待ち時間がなく、送受信タスクの処理効率が高く、リアルタイム性を保証できる。
【００１７】
また、本発明による第２のタスク間通信装置は、複数のタスクからアクセス可能な共有メモリを有し、前記共有メモリ上に設けられた状態保持領域をもつ複数のメモリブロックをリング状に連結して構成されるリングバッファと、前記リングバッファに付加されて次の送信メモリブロックを指示するための書込みポインタと、前記リングバッファに付加されて次の受信メモリブロックを指示するための読出しポインタと、次のような機能を有するデータ送信手段およびデータ受信手段を有している。
【００１８】
前記のデータ送信手段は、前記タスクのデータ送信処理開始に当たり、前記共有メモリをロックし、前記書込みポインタが前記読出しポインタの１つ手前の前記メモリブロックを指示しているかを判断し、１つ手前でなければ当該メモリブロックの前記状態保持領域に“送信中”を保持させ、当該書込みポインタを次の前記メモリブロックの指示に更新し、前記共有メモリをアンロックすると共に、データ送信処理終了時に当該メモリブロックの前記状態保持領域に“受信可”を保持させるものとして構成されている。
【００１９】
また、前記のデータ受信手段は、前記タスクのデータ受信処理開始に当たり、前記共有メモリをロックし、前記読出しポインタと前記書込みポインタが同じ前記メモリブロックを指示しているか判断し、同じでなくかつ当該メモリブロックの前記状態保持領域に“受信可”が保持されている場合に当該メモリブロックの前記状態保持領域に“受信中”を保持させ、前記共有メモリをアンロックすると共に、データ受信処理終了時に当該メモリブロックの前記状態保持領域に“送信可”を保持させ、前記読出しポインタを次の前記メモリブロックの指示に更新するものとして構成されている。
【００２０】
上記の構成によれば、データ送信処理において、共有メモリをロックして他タスクからのアクセスを禁止した上で、書込みポインタによるメモリブロックの指示が読出しポインタの１つ手前のメモリブロックでないことを確認の上、書込みポインタが指示するメモリブロックの状態保持領域（ＳＴＡＴＥ）に“送信中”を保持させると共に、リングバッファの機能上、書込みポインタを次のメモリブロック指示に更新し、その後は共有メモリをアンロックして他タスクからのアクセスを許容する状態に戻し、その状態で前記書込みポインタが指示するメモリブロックにデータ書込みを行い、終了すれば“受信可”を保持させる。この場合、書込みポインタが指示するメモリブロックへのデータ書込み中において共有メモリをアンロックしても、他タスクからの共有メモリへのアクセスにおいては、書込みポインタの更新によって次のデータ書込みメモリブロックの指示が行われているので、リングバッファは支障なく機能する。
【００２１】
また、データ受信処理において、共有メモリをロックして他タスクからのアクセスを禁止した上で、読出しポインタが書込みポインタとは異なること、および、読出しポインタが指示するメモリブロックが“受信可”であることを確認の上、読出しポインタが指示するメモリブロックの状態保持領域（ＳＴＡＴＥ）に“受信中”を保持させ、その後は共有メモリをアンロックして他タスクからのアクセスを許容する状態に戻し、その状態で前記取得したメモリブロックからデータ読出しを行い、終了すれば“送信可”を保持させ、読出しポインタを次のメモリブロック指示に更新する。この場合、読出しポインタ５６０が指示するメモリブロックにおいて、データ送信処理がデータ書込み中であっても、データ受信処理においては、データ読出し対象のメモリブロックに“送信中”の標識があるので、データ送信処理が書込み中の不完全なデータの読出しを避けられる。
【００２２】
以上の相乗により、リングバッファを有するタスク間通信装置において、従来のリングバッファでは不可能であったデータ送信の並行処理を行うことができ、送信タスクの処理効率を高いものにできる。
【００２３】
本発明による第３のタスク間通信装置は、上記第２のタスク間通信装置において、前記データ受信手段は、前記読出しポインタと前記書込みポインタが同じ前記メモリブロックを指示しておらず、かつ当該読出しポインタが指示する前記メモリブロックの前記状態保持領域に“受信可”が保持されていなければ、前記読出しポインタから前記書込みポインタまでにある前記メモリブロックから前記状態保持領域に“受信可”を保持した前記メモリブロックを検索し、当該メモリブロックの前記状態保持領域に“受信中”を保持させ、前記共有メモリをアンロックすると共に、データ受信処理終了時に当該メモリブロックに“送信可”を保持させるように構成したものである。
【００２４】
この構成によれば、リングバッファを有するタスク間通信装置において、読出しポインタが書込みポインタとは異なっているが、読出しポインタが指示するメモリブロックが“受信可”となっていない場合でも、受信可能データの先読みのために、読出しポインタから書込みポインタまでに“受信可”のメモリブロックを検索し、取得したメモリブロックからデータを読出す。すなわち、従来のリングバッファでは不可能であったデータ送信の並行処理だけでなく、受信可能データの先読みをも行うことができ、送受信タスクの処理効率の高いタスク間通信装置を提供できる。
【発明の効果】
【００２５】
本発明によれば、複数のタスクを並行に処理する情報処理システムにおいて、通信時における不要な待ち時間がなく、送受信タスクの処理効率が高く、リアルタイム性を保証可能なタスク間通信装置を提供できる。
【００２６】
また、リングバッファを有するタスク間通信装置においては、従来のリングバッファでは不可能であったデータ送信の並行処理、さらには、受信可能データの先読みを行うことができ、送受信タスクの処理効率の高いタスク間通信装置を提供できる。
【００２７】
さらに、本発明によれば、ＣＰＵロックや割込み禁止などによる共有メモリのロック区間を短縮することにより、割込み応答性能の高いタスク間通信装置を提供できる。
【発明を実施するための最良の形態】
【００２８】
以下、本発明にかかわるタスク間通信装置の実施の形態を図面に基づいて詳細に説明する。
【００２９】
（実施の形態１）
図１は、本発明の実施の形態１におけるタスク間通信装置の構成を示すブロック図である。タスク間通信装置は、複数のタスク１００〜１０２からアクセス可能な共有メモリ１１０と、メモリブロック１３０と、データ送信手段１４０と、データ受信手段１５０とを有する。メモリブロック１３０には、少なくとも“送信可”、“受信可”、“送信中”、“受信中”の状態があり、それらの状態はメモリブロック１３０に対応する状態保持領域のＳＴＡＴＥ１２０に保持される。
【００３０】
図２は、図１におけるデータ送信手段１４０の動作を示すフローチャートである。図２において矢印は動作の流れを示す。
【００３１】
データ送信手段１４０は、データ送信が開始されると、ステップＳ２０１では共有メモリ１１０をロックし、他タスクから共有メモリ１１０にアクセスを行えないようにする。ステップＳ２０２では、メモリブロック１３０から送信可能なメモリブロックを検索する。
【００３２】
具体的には、ＳＴＡＴＥ１２０に“送信可”を保持しているメモリブロック１３０を検索する。ＳＴＡＴＥ１２０に“送信可”を保持しているメモリブロック１３０が存在しない場合には、共有メモリ１１０をアンロックし、当該データ送信処理を終了してもよい。
【００３３】
ステップＳ２０３では、ステップＳ２０２の検索で取得したメモリブロック１３０のＳＴＡＴＥ１２０に“送信中”を保持させる。ステップＳ２０４では、共有メモリ１１０をアンロックし、他タスクから共有メモリ１１０にアクセスを行えるようにする。しかるのち、ステップＳ２０５では当該メモリブロック１３０に送信データを書込む。当該メモリブロックへのデータ書込みが終了すると、ステップＳ２０６において当該メモリブロックのＳＴＡＴＥ１２０に“受信可”を保持させる。
【００３４】
このように、共有メモリ１１０をロックして他タスクからのアクセスを禁止した上で“送信可”のメモリブロックを検索し、取得したメモリブロックの状態保持領域（ＳＴＡＴＥ）に“送信中”を保持させ、その後は共有メモリ１１０をアンロックして他タスクからのアクセスを許容する状態に戻し、その状態で前記取得したメモリブロックにデータ書込みを行い、終了すれば“受信可”を保持させる。この場合、取得したメモリブロックへのデータ書込み中において共有メモリ１１０をアンロックしても、他タスクからの共有メモリ１１０へのアクセスにおいては、現在のデータ書込み対象のメモリブロックに“送信中”の標識があるので、競合を避けながら複数タスクのデータ送信の並行処理が可能となっている。
【００３５】
図３は、図１におけるデータ受信手段１５０の動作を示すフローチャートである。
【００３６】
データ受信手段１５０は、データ受信が開始されると、ステップＳ３０１では、共有メモリ１１０をロックし、他タスクから共有メモリ１１０にアクセスを行えないようにする。ステップＳ３０２では、メモリブロック１３０から受信可能なメモリブロックを検索する。
【００３７】
具体的には、ＳＴＡＴＥ１２０に“受信可”を保持したメモリブロック１３０を検索する。ＳＴＡＴＥ１２０に“受信可”を保持したメモリブロック１３０が存在しない場合には、共有メモリ１１０をアンロックし、当該データ受信処理を終了してもよい。
【００３８】
ステップＳ３０３では、ステップＳ３０２の検索で取得したメモリブロック１３０のＳＴＡＴＥ１２０に“受信中”を保持させる。ステップＳ３０４では、共有メモリ１１０をアンロックし、他タスクから共有メモリ１１０にアクセスを行えるようにする。しかるのち、ステップＳ３０５では当該メモリブロック１３０から受信データを読出す。当該メモリブロック１３０からのデータ読出しが終了すると、ステップＳ３０６において当該メモリブロック１３０のＳＴＡＴＥ１２０に“送信可”を保持させる。
【００３９】
このように、共有メモリ１１０をロックして他タスクからのアクセスを禁止した上で“受信可”のメモリブロックを検索し、取得したメモリブロックの状態保持領域（ＳＴＡＴＥ）に“受信中”を保持させ、その後は共有メモリ１１０をアンロックして他タスクからのアクセスを許容する状態に戻し、その状態で前記取得したメモリブロックからデータ読出しを行い、終了すれば“送信可”を保持させる。この場合、取得したメモリブロックからのデータ読出し中において共有メモリ１１０をアンロックしても、他タスクからの共有メモリへのアクセスにおいては、現在のデータ読出し対象のメモリブロックに“受信中”の標識があるので、競合を避けながら複数タスクのデータ受信の並行処理が可能となっている。
【００４０】
以上のように、本実施の形態によれば、例えば送信タスク１００がメモリブロック１３０ａにデータ書込みを行っている途中に、別の送信タスク１０１が別の送信可能なメモリブロック１３０ｂを認識して書込みを行うことができる。すなわち、送信タスク１０１は送信タスク１００のデータ書込みの終了を待つ必要がないため、処理効率が高く、リアルタイム応答性が保証される。これは、送信タスクと受信タスク間および受信タスクと受信タスク間においても同様である。
【００４１】
（実施の形態２）
図４は、本発明の実施の形態２におけるタスク間通信装置の構成を示すブロック図である。タスク間通信装置は、複数のタスク５００〜５０２からアクセス可能な共有メモリ５１０と、メモリブロック５３０と、メモリブロック５３０をリング状に連結して構成されるリングバッファ５４０と、データ送信手段５７０及びデータ受信手段５８０とを有する。
【００４２】
メモリブロック５３０は、少なくとも“送信可”、“受信可”、“送信中”、“受信中”の状態があり、それらの状態はメモリブロック１３０に対応する状態保持領域のＳＴＡＴＥ５２０に保持される。
【００４３】
リングバッファ５４０は、次の送信メモリブロック５３０を指示するための書込みポインタ５５０と、次の受信メモリブロックを指示するための読出しポインタ５６０をもつ。
【００４４】
図５は、図４におけるデータ送信手段５７０の動作を示すフローチャートである。
【００４５】
データ送信手段５７０は、データ送信が開始されると、ステップＳ６０１にて共有メモリ５１０をロックし、他タスクから共有メモリ５１０にアクセスを行えないようにする。ステップＳ６０２では、書込みポインタ５５０が読出しポインタ５６０の１つ手前のメモリブロック５３０を指示しているかを判断する。１つ手前でなければ、ステップＳ６０３に進む。ステップＳ６０３では、書込みポインタ５５０が指示するメモリブロック５３０のＳＴＡＴＥ５２０に“送信中”を保持させる。書込みポインタ５５０が読出しポインタ５６０の１つ手前であれば、共有メモリ５１０をアンロックし、当該データ送信処理を終了してもよい。ステップＳ６０４では、書込みポインタ５５０を次のメモリブロック５３０を指示するように更新する。
【００４６】
具体的には、図４に示すリングバッファ５４０において書込みポインタ５５０がメモリブロック５３０ａを指示しているときは、リングバッファの進行方向下流側である一つ右のメモリブロック５３０ｂを指示するように更新する。
【００４７】
ステップＳ６０５では共有メモリ５１０をアンロックし、他タスクから共有メモリ５１０にアクセスを行えるようにする。しかるのち、ステップＳ６０６では、ステップＳ６０３で書込みポインタ５５０が指示していたメモリブロック５３０に送信データを書込む。当該メモリブロック５３０へのデータ書込みが終了すると、ステップＳ６０７において当該メモリブロック５３０のＳＴＡＴＥ５２０に“受信可”を保持させる。
【００４８】
このように、共有メモリ５１０をロックして他タスクからのアクセスを禁止した上で、書込みポインタ５５０によるメモリブロックの指示が読出しポインタ５６０の１つ手前のメモリブロックでないことを確認の上、書込みポインタ５５０が指示するメモリブロックの状態保持領域（ＳＴＡＴＥ）に“送信中”を保持させると共に、書込みポインタ５５０を次のメモリブロック指示に更新し、その後は共有メモリ５１０をアンロックして他タスクからのアクセスを許容する状態に戻し、その状態で前記書込みポインタ５５０が指示するメモリブロックにデータ書込みを行い、終了すれば“受信可”を保持させる。この場合、書込みポインタ５５０が指示するメモリブロックへのデータ書込み中において共有メモリ５１０をアンロックしても、他タスクからの共有メモリ５１０へのアクセスにおいては、書込みポインタ５５０の更新によって次のデータ書込みメモリブロックの指示が行われているので、リングバッファ５４０は支障なく機能する。
【００４９】
図６は、図４におけるデータ受信手段５８０の動作を示すフローチャートである。
【００５０】
データ受信手段５８０は、データ受信が開始されると、ステップＳ７０１にて共有メモリ５１０をロックし、他タスクから共有メモリ５１０にアクセスを行えないようにする。ステップＳ７０２では、読出しポインタ５６０が書込みポインタ５５０と同じメモリブロック５３０を指示しているかを判断する。読出しポインタ５６０と書込みポインタ５５０が同じメモリブロック５３０を指示していなければ、ステップＳ７０３へ進む。読出しポインタ５６０と書込みポインタ５５０が同じメモリブロック５３０を指示していれば、共有メモリ５１０をアンロックし、当該データ受信処理を終了してもよい。ステップＳ７０３では、読出しポインタ５６０が指示するメモリブロック５３０のＳＴＡＴＥ５２０が“受信可”を保持しているかを判断する。当該メモリブロック５３０のＳＴＡＴＥ５２０が“受信可”を保持していれば、ステップＳ７０４へ進む。当該メモリブロック５３０のＳＴＡＴＥ５２０が“受信可”を保持していなければ、共有メモリ５１０をアンロックし、当該データ受信処理を終了してもよい。ステップＳ７０４では、読出しポインタ５６０が指示するメモリブロック５３０のＳＴＡＴＥ５２０に“受信中”を保持させる。ステップＳ７０５では、共有メモリ５１０をアンロックし、他タスクから共有メモリ５１０にアクセスを行えるようにする。しかるのち、ステップＳ７０６では、当該メモリブロック５３０から受信データを読出す。当該メモリブロック５３０からのデータ読出しが終了すると、ステップＳ７０７において、当該メモリブロック５３０のＳＴＡＴＥ５２０に“送信可”を保持させる。ステップＳ７０８では、読出しポインタ５６０を次のメモリブロック５３０を指示するように更新する。
【００５１】
具体的には、図４に示すリングバッファ５４０においてＳＴＡＴＥ５２０ａ〜５２０ｂが“送信中”を保持し、ＳＴＡＴＥ５２０ｃが“受信中”を保持し、読出しポインタ５６０がメモリブロック５３０ａを指示するときは、メモリブロック５３０ａからリングバッファの進行方向下流側である右側にあって、ＳＴＡＴＥ５２０が“送信可”を保持していない最初のメモリブロック５３０ｃを指示するように読出しポインタ５６０を更新する。
【００５２】
このように、共有メモリ５１０をロックして他タスクからのアクセスを禁止した上で、読出しポインタ５６０が書込みポインタ５５０とは異なること、および、読出しポインタ５６０が指示するメモリブロックが“受信可”であることを確認の上、読出しポインタ５６０が指示するメモリブロックの状態保持領域（ＳＴＡＴＥ）に“受信中”を保持させ、その後は共有メモリ５１０をアンロックして他タスクからのアクセスを許容する状態に戻し、その状態で前記取得したメモリブロックからデータ読出しを行い、終了すれば“送信可”を保持させ、読出しポインタ５６０を次のメモリブロック指示に更新する。
【００５３】
この場合、読出しポインタ５６０が指示するメモリブロックにおいて、データ送信処理がデータ書込み中であっても、データ受信処理においては、データ読出し対象のメモリブロックに“送信中”の標識があるので、データ送信処理が書込み中の不完全なデータの読出しを避けながら、複数タスクのデータ送信の並行処理が可能となっている。
【００５４】
図７は、図４におけるタスク間通信装置において、タスク５００が時刻ｔ＝１、タスク５０１が時刻ｔ＝２で、図５のフローチャートで示す動作を持つデータ送信手段５７０によるデータ送信を開始し、タスク５０２が時刻ｔ＝０より、図６のフローチャートで示す動作をもつデータ受信手段５８０によりデータ受信動作を連続して行う場合のタイムチャートである。ただし、タスク５００は４単位時間、タスク５０１は１単位時間をデータ送信処理に必要とし、タスク５０２は２単位時間をデータ受信処理に必要とする（２回連続のため、４単位時間となっている）。また、時刻ｔ＝０においてリングバッファ５４０は空であるとする。
【００５５】
時刻ｔ＝０において、タスク５０２がデータ受信手段５８０によりデータ受信を開始するが、読出しポインタ５６０と書込みポインタ５５０が同じメモリブロック５３０を指示するため、図６のステップＳ７０２で終了処理となり、ステップＳ７０６において、メモリブロック５３０からデータを読出すことはなく、ステップＳ７０８の読出しポインタ５６０の更新もない。
【００５６】
時刻ｔ＝１において、タスク５００はデータ送信手段５７０によるメモリブロック５３０ａへのデータ送信を開始する。このとき、データ送信手段５７０は図５のステップＳ６０３においてＳＴＡＴＥ５２０ａに“送信中”を保持させる。したがって、タスク５０２におけるデータ受信手段５８０によるデータ受信では、図６のステップＳ７０３で終了処理となり、ステップＳ７０６において、メモリブロック５３０ａからデータを読出すことはなく、ステップＳ７０８の読出しポインタ５６０の更新もない。
【００５７】
時刻ｔ＝２において、タスク５０１はデータ送信手段５７０によるメモリブロック５３０ｂへのデータ送信を開始する。このとき、データ送信手段５７０は図５のステップＳ６０３においてＳＴＡＴＥ５２０ｂに“送信中”を保持させる。したがって、タスク５０２におけるデータ受信手段５８０によるデータ受信では、図６のステップＳ７０３で終了処理となり、ステップＳ７０６において、メモリブロック５３０ｂからデータを読出すことはなく、ステップＳ７０８の読出しポインタ５６０の更新もない。
【００５８】
時刻ｔ＝３において、タスク５０１はデータ送信手段５７０によるメモリブロック５３０ｂへのデータ送信を終了する。このとき、データ送信手段５７０は図５のステップＳ６０７においてＳＴＡＴＥ５２０ｂに“受信可”を保持させる。しかし、同時刻において、読出しポインタ５６０は、ＳＴＡＴＥ５２０ａに“送信中”を保持するメモリブロック５３０ａを指示するため、タスク５０２におけるデータ受信手段５８０は、図６のステップＳ７０６においてメモリブロック５３０ｂからデータを読出すことはない。
【００５９】
時刻ｔ＝５において、タスク５００はデータ送信手段５７０によるメモリブロック５３０ａへのデータ送信を終了する。このとき、データ送信手段５７０は図５のステップＳ６０７においてＳＴＡＴＥ５２０ａに“受信可”を保持させる。同時刻において、タスク５０２におけるデータ受信手段５８０は、図６のステップＳ７０２からステップＳ７０３，Ｓ７０４，Ｓ７０５と進み、ステップＳ７０６において、読出しポインタ５６０の指示するメモリブロック５３０ａからのデータ読出しを開始する。この場合、ステップＳ７０８で読出しポインタ５６０の更新が行われる。
【００６０】
時刻ｔ＝７において、タスク５０２はデータ受信手段５８０によるメモリブロック５３０ａからのデータ受信を終了する。このとき、データ受信手段５８０は図６のステップＳ７０７においてＳＴＡＴＥ５２０ａに“送信可”を保持させ、ステップＳ７０８において読出しポインタ５６０を更新する。さらに、同時刻において、更新された読出しポインタ５６０は、ＳＴＡＴＥ５２０ｂに“受信可”を保持するメモリブロック５３０ｂを指示するため、タスク５０２におけるデータ受信手段５８０は、図６のステップＳ７０２からステップＳ７０３，Ｓ７０４，Ｓ７０５と進み、ステップＳ７０６において、読出しポインタ５６０の指示するメモリブロック５３０ｂからのデータ読出しを開始する。この場合、ステップＳ７０８で読出しポインタ５６０の更新が行われる。
【００６１】
時刻ｔ＝９において、タスク５０２はデータ受信手段５８０によるメモリブロック５３０ｂからのデータ受信を終了する。
【００６２】
以上のように、本実施の形態によれば、従来のリングバッファでは不可能であった、複数のタスクによりデータ送信処理を並行に行うことが可能なため、送信タスクの処理効率が高い。たとえば、送信タスク５００がメモリブロック５３０ａにデータ書込みを行っている途中に、別の送信タスク５０１が書込みポインタ５５０の指示するメモリブロック５３０ｂにデータ書込みを行うことができる。このときタスク５０１はタスク５００のデータ書込みの終了を待つ必要がないため、処理効率が高く、リアルタイム応答性が保証される。
【００６３】
（実施の形態３）
図８は、図６のステップＳ７０３で読出しポインタ５６０が指示するメモリブロック５３０の状態保持領域のＳＴＡＴＥ５２０に“受信可”が保持されていなかった場合の、図４におけるデータ受信手段５８０の動作を示すフローチャートである。
【００６４】
データ受信手段５８０は、データ受信が開始されると、ステップＳ９０１では、共有メモリ５１０をロックし、他タスクから共有メモリ５１０にアクセスを行えないようにする。ステップＳ９０２では、読出しポインタ５６０が書込みポインタ５５０と同じメモリブロック５３０を指示しているかを判断する。読出しポインタ５６０が書込みポインタ５５０と同じメモリブロック５３０を指示していなければ、ステップＳ９０３へ進む。ステップＳ９０３では、読出しポインタ５６０が指示するメモリブロック５３０のＳＴＡＴＥ５２０が“受信可”を保持しているかを判断する。読出しポインタ５６０が指示するメモリブロック５３０のＳＴＡＴＥ５２０が“受信可”を保持していなければステップＳ９０４へ進む。
【００６５】
ステップＳ９０４では、受信可能データの先読みのために、読出しポインタ５６０からリングバッファの進行方向である右回りに書込みポインタ５５０までにあるメモリブロック５３０からＳＴＡＴＥ５２０に“受信可”を保持したメモリブロック５３０を検索する。当該メモリブロック５０３が検索されない場合には、共有メモリ５１０をアンロックし、当該データ受信処理を終了してもよい。ステップＳ９０５では、ステップＳ９０４の検索で取得したメモリブロック５０３のＳＴＡＴＥ５０２に“受信中”を保持させる。ステップＳ９０６では、共有メモリ５１０をアンロックし、他タスクから共有メモリ５１０にアクセスを行えるようにする。しかるのち、ステップＳ９０７では、当該メモリブロック５３０から受信データを読出す。当該メモリブロック５３０からのデータ読出しが終了すると、ステップＳ９０８において、当該メモリブロック５３０のＳＴＡＴＥ５２０に“送信可”を保持させる。
【００６６】
図９は、図４におけるタスク間通信装置において、タスク５００が時刻ｔ＝１、タスク５０１が時刻ｔ＝２で、図５のフローチャートで示す動作を持つデータ送信手段５７０によるデータ送信を開始し、タスク５０２が時刻ｔ＝０より、図８のフローチャートで示す動作をもつデータ受信手段５８０によりデータ受信動作を連続して行う場合のタイムチャートである。ただし、タスク５００は４単位時間、タスク５０１は１単位時間をデータ送信処理に必要とし、タスク５０２は２単位時間をデータ受信処理に必要とする。また、時刻ｔ＝０においてリングバッファ５４０は空であるとする。
【００６７】
時刻ｔ＝０において、タスク５０２がデータ受信手段５８０によりデータ受信を開始するが、読出しポインタ５６０と書込みポインタ５５０が同じメモリブロック５３０を指示するため、図８のステップＳ９０２で終了処理となり、ステップＳ９０７において、メモリブロック５３０からデータを読出すことはなく、ステップＳ７０８の読出しポインタ５６０の更新もない。
【００６８】
時刻ｔ＝１において、タスク５００はデータ送信手段５７０によるメモリブロック５３０ａへのデータ送信を開始する。このとき、データ送信手段５７０は図５のステップＳ６０３においてＳＴＡＴＥ５２０ａに“送信中”を保持させる。同時刻において、タスク５０２におけるデータ受信手段５８０によるデータ受信では、図８のステップＳ９０２で終了処理となり、ステップＳ９０４において、受信可能データの先読みのために、受信可能なメモリブロック５３０を検索するが、書込みポインタ５５０までに受信可能なメモリブロック５３０は存在しないため、受信処理を終了し、ステップＳ９０７においてデータを読出すことはない。読出しポインタ５６０の更新もない。
【００６９】
時刻ｔ＝２において、タスク５０１はデータ送信手段５７０によるメモリブロック５３０ｂへのデータ送信を開始する。このとき、データ送信手段５７０は図５のステップＳ６０３においてＳＴＡＴＥ５２０ｂに“送信中”を保持させる。同時刻において、タスク５０２におけるデータ受信手段５８０によるデータ受信では、図８のステップＳ９０４において、受信可能データの先読みのために、受信可能なメモリブロック５３０を検索するが、書込みポインタ５５０までに受信可能なメモリブロック５３０は存在しないため、受信処理を終了し、ステップＳ９０７においてデータを読出すことはない。読出しポインタ５６０の更新もない。
【００７０】
時刻ｔ＝３において、タスク５０１はデータ送信手段５７０によるメモリブロック５３０ｂへのデータ送信を終了する。このとき、データ送信手段５７０は図５のステップＳ６０７においてＳＴＡＴＥ５２０ｂに“受信可”を保持させる。同時刻において、タスク５０２におけるデータ受信手段５８０によるデータ受信では、図８のステップＳ９０４において、受信可能データの先読みのために、受信可能なメモリブロック５３０ｂを検索し、ステップＳ９０７においてメモリブロック５３０ｂからのデータ受信を開始する。
【００７１】
時刻ｔ＝５において、タスク５００はデータ送信手段５７０によるメモリブロック５３０ａへのデータ送信を終了する。このとき、データ送信手段５７０は図５のステップＳ６０７においてＳＴＡＴＥ５２０ａに“受信可”を保持させる。同時刻において、タスク５０２におけるデータ受信手段５８０は、メモリブロック５３０ｂからのデータ受信を終了する。このとき、読出しポインタ５６０はＳＴＡＴＥ５２０ａに“受信可”を保持するメモリブロック５３０ａを指示するため、タスク５０２におけるデータ受信手段５８０は、図８のステップＳ９０３からステップＳ７０４，Ｓ７０５，Ｓ７０６と進み、ただちにデータ受信手段５８０によるメモリブロック５３０ａのデータ読出しを開始する。この場合、ステップＳ７０８で読出しポインタ５６０の更新が行われる。
【００７２】
時刻ｔ＝７においてタスク５０２はデータ受信手段５８０によるメモリブロック５３０ａからのデータ受信を終了する。
【００７３】
以上のように、本実施の形態によれば、従来のリングバッファでは不可能であった受信可能データの先読みが可能なため、受信タスクの処理効率が高い。たとえば、送信タスク５００がメモリブロック５３０ａにデータ書込みを行っている途中に、別の送信タスク５０１がメモリブロック５３０ｂへのデータ書込みを終了すると、受信タスク５０２は読出しポインタ５６０が指示するメモリブロック５３０ａに対する送信タスク５００のデータ書込みの終了を待つことなく、即座にメモリブロック５３０ｂからデータ読出しを行うため、処理効率が高く、リアルタイム応答性が保証される。
【産業上の利用可能性】
【００７４】
本発明のタスク間通信装置は、複数のタスクを並列に処理する情報処理システムにおいて、割込み応答性能の高いタスク間通信が可能なため、応答のリアルタイム性が強く求められる携帯電話、ＡＶ機器等において有用である。
【図面の簡単な説明】
【００７５】
【図１】本発明の実施の形態１のタスク間通信装置の構成を示すブロック図
【図２】本発明の実施の形態１のタスク間通信装置のデータ送信手段の動作を示すフローチャート
【図３】本発明の実施の形態１のタスク間通信装置のデータ受信手段の動作を示すフローチャート
【図４】本発明の実施の形態２のタスク間通信装置の構成を示すブロック図
【図５】本発明の実施の形態２のタスク間通信装置のデータ送信手段の動作を示すフローチャート
【図６】本発明の実施の形態２のタスク間通信装置のデータ受信手段の動作を示すフローチャート
【図７】本発明の実施の形態２におけるタスク間通信装置の動作を説明するタイムチャート
【図８】本発明の実施の形態３のタスク間通信装置のデータ受信手段の動作を示すフローチャート
【図９】本発明の実施の形態３におけるタスク間通信装置の動作を説明するタイムチャート
【図１０】従来のタスク間通信装置の構成を示すブロック図
【図１１】従来のタスク間通信装置のデータ受信の動作を示すフローチャート
【図１２】従来のタスク間通信装置のデータ送信の動作を示すフローチャート
【符号の説明】
【００７６】
１００，１０１，１０２  タスク
１１０  共有メモリ
１２０，１２０ａ，１２０ｂ  状態保持領域（ＳＴＡＴＥ）
１３０，１３０ａ，１３０ｂ  メモリブロック
１４０  データ送信手段
１５０  データ受信手段
５００，５０１，５０２  タスク
５１０  共有メモリ
５２０，５２０ａ，５２０ｂ，５２０ｃ  状態保持領域（ＳＴＡＴＥ）
５３０，５３０ａ，５３０ｂ，５３０ｃ  メモリブロック
５４０  リングバッファ
５５０  書込みポインタ
５６０  読出しポインタ
５７０  データ送信手段
５８０  データ受信手段
１１０１，１１０２  タスク
１１１０  共有メモリ
１１２０  処理フラグ
１１３０  データブロック
１１４０  データ送信手段
１１５０  データ受信手段
【図１】
2005316659.tif 000003
【図２】
2005316659.tif 000004
【図３】
2005316659.tif 000005
【図４】
2005316659.tif 000006
【図５】
2005316659.tif 000007
【図６】
2005316659.tif 000008
【図７】
2005316659.tif 000009
【図８】
2005316659.tif 000010
【図９】
2005316659.tif 000011
【図１０】
2005316659.tif 000012
【図１１】
2005316659.tif 000013
【図１２】
2005316659.tif 000014