(57)【要約】【課題】リアルタイムＯＳのバッファにおいて定まった最長割り込み禁止時間を保証する。【解決手段】バッファ制御方法は、バッファに対して通常の読み込み又は書き込みを行う通常ステップと、通常ステップの途中で緊急の読み込み又は書き込みが要求されたとき、緊急の読み込み又は書き込みを優先して実行する緊急ステップとを備える。緊急ステップにおいて、通常の読み込み又は書き込みが行われるメモリ領域に対するアクセスが禁止される。【選択図】図３Ｅ
2007334542.tif 000002
【特許請求の範囲】
【請求項１】
バッファに対して通常の読み込み又は書き込みを行う通常ステップと、
前記通常ステップの途中で緊急の読み込み又は書き込みが要求されたとき、前記緊急の読み込み又は書き込みを優先して実行する緊急ステップ
とを具備する
バッファ制御方法。
【請求項２】
請求項１に記載されたバッファ制御方法であって、
前記緊急ステップにおいて、前記通常の読み込み又は書き込みが行われるメモリ領域に対するアクセスが禁止される
バッファ制御方法。
【請求項３】
請求項１乃至２に記載されたバッファ制御方法であって、
前記通常ステップは、
バッファに対して第１書込データの書き込みが要求されたとき、前記バッファの第１書込予約アドレスを設定し、前記第１書込データは前記バッファの有効データ領域の第１端から前記第１書込予約アドレスまでの領域である第１書込領域に書き込まれるステップを備え、
前記緊急ステップは、
前記第１書込データの書き込み中に前記バッファに対して第２書込データの書き込みが要求されたとき、前記バッファの第２書込予約アドレスを設定するステップと、前記第２書込データは前記第１書込予約アドレスから前記第２書込予約アドレスまでの領域に書き込まれ、
前記第２書込予約アドレスが設定されたとき、前記第１書込データの書き込みを停止して第２書込データの書き込みを開始する緊急書込ステップと、
前記第２書込データの書き込みが完了したとき、前記第１書込データの書き込みを再開するステップ
とを備える
バッファ制御方法。
【請求項４】
請求項３に記載されたバッファ制御方法であって、
前記緊急ステップは更に、
前記第２書込データの書き込みが行われているとき、前記第１書込領域に対する読み込みを禁止するステップ
を備える
バッファ制御方法。
【請求項５】
請求項１乃至４に記載されたバッファ制御方法であって、
前記通常ステップは、
バッファに対して第１読込データの読み込みが要求されたとき、前記バッファの第１読込予約アドレスを設定し、前記第１読込データは前記バッファの有効データ領域の第２端から前記読込予約アドレスまでの領域である第１読込領域から読み込まれるステップを備え、
前記緊急ステップは、
前記第１読込データの読み込み中に前記バッファに対して第２読込データの読み込みが要求されたとき、前記バッファの第２読込予約アドレスを設定するステップと、前記第２読込データは前記第１読込予約アドレスから前記第２読込予約アドレスまでの領域から読み込まれ、
前記第２読込予約アドレスが設定されたとき、前記第１読込データの読み込みを停止して第２読込データの読み込みを開始する緊急読込ステップと、
前記第２読込データの読み込みが完了したとき、前記第１読込データの読み込みを再開するステップ
とを備える
バッファ制御方法。
【請求項６】
請求項５に記載されたバッファ制御方法であって、
前記緊急ステップは更に、前記第２読込データの読み込みが行われているとき、前記第１読込領域に対する書き込みを禁止するステップ
を具備する
バッファ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア間通信に基づく通信用バッファ操作に関し、バッファ操作中の多重操作に関する。
【背景技術】
【０００２】
リアルタイムＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）の作成において目標性能とされる指標の一つに、ＯＳ処理中に割り込み処理の要求が発生した場合、その割り込み処理が実行されるまでの受付時間の最も長い場合の時間を示す「最長割り込み禁止時間」がある。
【０００３】
リアルタイムＯＳの機能としてＯＳが用意したバッファに対してデータの書き込み又は読み込みを行う場合、処理中に多重処理が発生しないように割り込みが禁止されるのが一般的である。単純に書き込みや読み込みが行われる間割り込みが禁止される処理を採用すると、「最長割り込み禁止時間」が不定となる。リアルタイムＯＳの製品として「最長割り込み時間」が決まった値になるよう保証できることが望まれる。
【０００４】
特許文献１には、（１）受信データが順次書き込まれまた順次読み込まれる受信バッファにおいて、前記書き込まれた受信データのうち前記読込を行っても良い部分とそうでない部分との境界位置を示す手段を設けたことを特徴とする受信バッファ管理方式が記載されている。
【０００５】
この文献においては、バッファに書き込みが行われた受信データのうち読み込みを行っても良い部分とそうでない部分を設定することによって多重処理の発生が防止される。具体的には、受信バッファを管理するために、受信バッファ中でエラーの検出等により取り消される可能性のある部分とそのような可能性のない部分との境界を指示するように制御されるポインタ「ＲＦ」を設ける。受信バッファからの読み込みは、このポインタ「ＲＦ」を越えて進まないように制御される。
【特許文献１】特開平３‐２９５０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
図１Ａ〜Ｆを参照して、バッファに対する多重読み込み／書き込み処理を禁止するための処理動作の一例について説明する。図中の「ＲＰ」はリードポインタで読み込み中データ位置を指す。「ＷＰ」はライトポインタで書き込み中データ位置を指す。
【０００７】
書き込み動作を順に説明していくと、図中右側ＷＰに着眼した場合バッファにデータがある状態（図１Ａ）で書き込みを行う場合、ＷＰを移動させながらデータをバッファに書き込んでいく（図１Ｂ）。
【０００８】
上記書き込み動作は割り込み禁止状態にて行われるので、割り込みは書き込み終了まで行われない。その為、書き込み作業中（図１Ｃ）に割り込み要求があった場合、その要求はバッファ書き込み完了（図１Ｄ）まで保留される。
【０００９】
初期のバッファへの書き込み完了後、割り込みを受け付けて割り込みからバッファへの書き込みがある場合はその処理を行う（図１Ｅ、Ｆ）。
【００１０】
読み込み動作を順に説明していくと、図中右側ＲＰに着眼した場合バッファにデータがある状態（図１Ａ）で読み込みを行う場合、ＲＰを移動させながらバッファ上のデータを読み込んでいく（図１Ｂ）。
【００１１】
上記読み込み動作は割り込み禁止状態にて行われるので、割り込みは読み込み終了まで行われない。その為、読み込み作業中（図１Ｃ）に割り込み要求があった場合その要求はバッファ読み込み完了（図１Ｄ）まで保留される
【００１２】
初期のバッファへの読み込み完了後、割り込みを受け付けて割り込みからバッファからの読み込みがある場合はその処理を行う（図１Ｅ、Ｆ）。
【００１３】
このような読み込み書き込み処理においては、割り込み禁止時間が操作するバッファに依存するため、「最長割り込み禁止時間」を定まった値に保証することができない。
【課題を解決するための手段】
【００１４】
以下に、［発明を実施するための最良の形態］で使用される番号を括弧付きで用いて、課題を解決するための手段を説明する。これらの番号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために付加されたものである。ただし、それらの番号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１５】
以上の課題を解決するため、ＯＳ処理内でのバッファ操作をリエントラントな操作とすることで、「最長割り込み禁止時間」性能を保証する。
【００１６】
本発明に係るバッファ制御方法は、バッファに対して通常の読み込み又は書き込みを行う通常ステップ（図３Ａ、Ｂ）と、通常ステップの途中で緊急の読み込み又は書き込みが要求されたとき、緊急の読み込み又は書き込みを優先して実行する緊急ステップ（図３Ｄ、Ｅ）とを備える。
【００１７】
本発明に係るバッファ制御方法において、緊急ステップにおいて、通常の読み込み又は書き込みが行われるメモリ領域に対するアクセスが禁止される。
【００１８】
本発明に係るバッファ制御方法において、通常ステップは、バッファに対して第１書込データの書き込みが要求されたとき、バッファの第１書込予約アドレス（図３Ｂ、ＣのＡＷＰ）を設定し、第１書込データはバッファの有効データ領域（６）の第１端（ＰＷＰ）から第１書込予約アドレス（ＡＷＰ）までの領域である第１書込領域に書き込まれるステップを備える。緊急ステップは、第１書込データの書き込み中にバッファに対して第２書込データの書き込みが要求されたとき、バッファの第２書込予約アドレス（図３Ｄ、ＥのＡＷＰ）を設定するステップ（図３Ｄ）を備える。第２書込データは第１書込予約アドレスから第２書込予約アドレスまでの領域に書き込まれる。緊急ステップは更に、第２書込予約アドレスが設定されたとき、第１書込データの書き込みを停止して第２書込データの書き込みを開始する緊急書込ステップ（図３Ｅ）と、第２書込データの書き込みが完了したとき、第１書込データの書き込みを再開するステップ（図３Ｊ）とを備える。
【発明の効果】
【００１９】
本発明によれば、バッファへのデータ書き込み中に緊急の処理（割り込み等の通常処理より優先度の高い処理）が発生した場合、バッファへの通常の書き込み処理が原因で緊急の処理が待ちに入ることが防がれ、処理の応答性が向上する。
【発明を実施するための最良の形態】
【００２０】
以下、図面を参照しながら本発明を実施するための最良の形態について説明する。本発明は、コンピュータの記憶装置に記憶領域として設定されシーケンシャルにアクセスされるバッファの読み込み又は書き込みに好適に適用される。本発明は特に、リアルタイムＯＳが提供するバッファの読み込み又は書き込みに好適に適用される。
【００２１】
図２は、バッファのメモリ領域を一次元的に示した図である。以下の説明において、アドレスは左側から右側に向かって順に付番され、読み込み及び書き込みは図面の左側から右側に向かって実行されるものとする。図面において左側は「前方」、右側は「後方」と呼ばれる。
【００２２】
バッファには、バッファのメモリ領域内のアドレスを指定する情報を保持するためのポインタが設定される。読み込み予約領域前方ポインタＰＲＰが設定される。ＰＲＰの前方は、利用されるデータが存在しない空領域２である。ＰＲＰの後方に読み込み予約領域後方ポインタＡＲＰが設定される。ＰＲＰからＡＲＰまでの間の領域は、データの読み込みが行われるために予約された読込予約領域４である。読込予約領域４の内部に、現在の読み込み位置、すなわち次に読み込みが行われるアドレスを指定する読み込みポインタＲＰが設定される。
【００２３】
読み込み予約領域後方ポインタＡＲＰの後方に、書き込み予約領域前方ポインタＰＷＰが設定される。ＡＲＰとＰＷＰとの間の領域は有効データ６であり、通常のバッファされたデータとしてアクセスされ読み込まれる領域である。有効データ以外のデータに対しては、通常のバッファに対するアクセス動作は禁止される。ＰＷＰの後方に書き込み予約領域後方ポインタＡＷＰが設定される。ＰＲＰからＡＲＰまでの間の領域は、データの書き込みが行われるために予約された書込予約領域８である。書込予約領域８の内部に、現在の書き込み位置、すなわち次に書き込みが行われるアドレスを指定する書き込みポインタＷＰが設定される。書込予約領域８の後方は、利用されるデータが存在しない空領域１０である。
【００２４】
［書き込み動作］
図３Ａ〜Ｋは、バッファに対するアクセス動作が時系列的に描かれている。図３Ａ〜Ｋには、読み込み動作と書き込み動作とが含まれている。バッファに対する読み込み動作は有効データ６の左側において行われ、書き込み動作は有効データ６の右側にデータを追加することによって行われる。まず、図３Ａ〜Ｋの有効データ６の右側に注目して、書き込み動作について説明する。
【００２５】
図３Ａ：バッファに有効データが存在する状態を考える。書き込み予約領域前方ポインタＰＷＰ、書き込み予約領域後方ポインタＡＷＰ及び第１書き込みポインタＷＰ１が、有効データ６が記録されたメモリ領域の後方の端部に設定される。
【００２６】
図３Ｂ：第１データの書き込み要求が発生すると、ＰＷＰは動かされず、ＡＷＰがＰＷＰより後方の書き込み完了位置に設定され、ＰＷＰとＡＷＰの間の領域が書込予約領域８として確保される。ＡＷＰを後方に移動させる間は、多重で書き込み処理が入らないように他からのバッファ操作が禁止される。
【００２７】
図３Ｃ：書込予約領域８に第１データの書き込みが行われる。書き込みが行われる位置は、書き込みポインタＷＰ１で指定される。書き込みポインタＷＰ１は、書込予約領域８の左から右へシーケンシャルに移動する。
【００２８】
図３Ｄ：書き込み動作中に多重処理としてバッファへの新規書き込みが発生した場合、第１データと新規に書き込まれる第２データの属性に応じて、次の場合分け処理が行われる：
（１）第１データが通常データかつ第２データが通常データ；
（２）第１データが通常データかつ第２データが緊急データ；
（３）第１データが緊急データかつ第２データが通常データ；
（４）第１データが緊急データかつ第２データが緊急データ。
このうち（１）、（３）及び（４）の場合は、第１データの書き込みが完了してから第２データの書き込みが行われる。（２）の場合、即ち新規書き込み要求の方が優先度が上位である場合について、以下に詳しく説明がなされる。
【００２９】
上記（２）の場合、すなわち通常データの書き込み中に緊急データの書き込みが要求されたとき、第１データの書き込みが停止される。この際、書き込みポインタＷＰ１の位置は固定され保持される。そして第１データの書き込み完了位置を示すように設定された書き込み予約領域後方ポインタＡＷＰの位置（第２データ書き込み開始位置）に第２書き込みポインタＷＰ２が設定される。その後、ＡＷＰは新規書き込みサイズ分後方に移動され、第２データの書込予約領域が確保される。ＡＷＰの移動は、他からのバッファ操作が禁止された状態で行われる。この際、バッファ書き込み処理がネストしたと判断され、ＰＷＰの更新は行われない。ＰＷＰの後方は有効データではなく、読み込みが禁止される。これにより、書き込み中の領域が有効データとなることが防止される。
【００３０】
図３Ｅ：その後、多重処理によって指示された書き込みが優先して行われる。書き込みが行われる位置は、第２書き込みポインタＷＰ２で指定される。第２書き込みポインタＷＰ２は、第２データ書き込み開始位置から書込予約領域８の後方端まで、左から右へシーケンシャルに移動する。第２データ書き込み開始位置から第２書き込みポインタＷＰ２までのメモリ領域は、書き込み動作が完了しておりデータが確定しているため、有効データとして設定されてもよい。第２データの書き込みが終了すると、第１データの書き込みが書き込みポインタＷＰ１の位置から再開される。
【００３１】
図３Ｆ：第２データの書き込み中に更に第２データよりも優先度の高い第３データを多重書き込みする要求が発生した場合、その要求サイズ分、ＡＷＰを後方に移動させることで、更なる書き込み領域が確保される。ＡＷＰの移動は、他からのバッファ操作が禁止された状態で行われる。この場合も、書き込み処理がネストすることになるのでＰＷＰの更新は行われない。
【００３２】
図３Ｇ：第３データの書き込みが優先して行われる。
図３Ｈ：第３データの書き込みが完了した後、第２データの書き込みが再開される。この時書き込みが行われた領域は前書き込み処理が完了するまで有効データには含まれない。
図３Ｉ：その後新しい書き込みから順に完了される。
【００３３】
図３Ｊ：多重書き込み処理完了後、書き込み中だったバッファへの書き込みを再開する。
図３Ｋ：第１データの書き込みが完了した時点で、ＰＷＰをＡＷＰの位置に合わせる。ＰＷＰの移動は他からのバッファ操作が禁止された状態で行われる。
【００３４】
［読み込み動作］
次に、バッファに対する読み込み動作について、再び図３Ａ〜Ｋを参照して説明する。図３Ａ〜Ｋの有効データ６の左側に注目すると、バッファに対する読み込み動作が時系列的に描かれている。
【００３５】
図３Ａ：読み込み予約領域前方ポインタＰＲＰ、読み込み予約領域後方ポインタＡＲＰ及び第１読み込みポインタＲＰ１が、有効データ６が記録されたメモリ領域の前方の端部に設定される。
【００３６】
図３Ｂ：第１データの読み込み要求が発生すると、ＰＲＰは動かされず、ＡＲＰがＰＲＰより後方の読み込み完了位置に設定され、ＰＲＰとＡＲＰの間の領域が読込予約領域４として確保される。ＡＲＰを後方に移動させる間は、多重で読み込み処理が入らないように他からのバッファ操作が禁止される。
【００３７】
図３Ｃ：読込予約領域４から第１データの読み込みが行われる。読み込みが行われる位置は、読み込みポインタＲＰ１で指定される。読み込みポインタＲＰ１は、読込予約領域４の左から右へシーケンシャルに移動する。
【００３８】
図３Ｄ：読み込み動作中に多重処理としてバッファへの新規読み込みが発生した場合、第１データと新規に読み込まれる第２データの属性に応じて、次の場合分け処理が行われる：
（１）第１データが通常データかつ第２データが通常データ；
（２）第１データが通常データかつ第２データが緊急データ；
（３）第１データが緊急データかつ第２データが通常データ；
（４）第１データが緊急データかつ第２データが緊急データ。
このうち（１）、（３）及び（４）の場合は、第１データの読み込みが完了してから第２データの読み込みが行われる。（２）の場合、即ち新規読み込み要求の方が優先度が上位である場合について、以下に詳しく説明がなされる。
【００３９】
上記（２）の場合、すなわち通常データの読み込み中に緊急データの読み込みが要求されたとき、第１データの読み込みが停止される。この際、読み込みポインタＲＰ１の位置は固定され保持される。そして第１データの読み込み完了位置を示すように設定された読み込み予約領域後方ポインタＡＲＰの位置（第２データ読み込み開始位置）に第２読み込みポインタＲＰ２が設定される。その後、ＡＲＰは新規読み込みサイズ分後方に移動され、第２データの読込予約領域が確保される。ＡＲＰの移動は、他からのバッファ操作が禁止された状態で行われる。この際、バッファ読み込み処理がネストしたと判断され、ＰＲＰの更新は行われない。これにより、読み込み中の領域が空領域となることが防止される。空領域とならないため、読み込み中の領域にはデータが書き込まれない。
【００４０】
図３Ｅ：その後、多重処理によって指示された読み込みが優先して行われる。読み込みが行われる位置は、第２読み込みポインタＲＰ２で指定される。第２読み込みポインタＲＰ２は、第２データ読み込み開始位置から読込予約領域４の後方端まで、左から右へシーケンシャルに移動する。第２データの読み込みが終了すると、第１データの読み込みが読み込みポインタＲＰ１の位置から再開される。
【００４１】
図３Ｆ：第２データの読み込み中に更に第２データよりも優先度の高い第３データを多重読み込みする要求が発生した場合、その要求サイズ分、ＡＲＰを後方に移動させることで、更なる読み込み領域が確保される。ＡＲＰの移動は、他からのバッファ操作が禁止された状態で行われる。この場合も、読み込み処理がネストすることになるのでＰＲＰの更新は行われない。
【００４２】
図３Ｇ：第３データの読み込みが優先して行われる。
図３Ｈ：第３データの読み込みが完了した後、第２データの読み込みが再開される。この時読み込みが行われた領域は前読み込み処理が完了するまで有効データには含まれない。
図３Ｉ：その後新しい読み込みから順に完了される。
【００４３】
図３Ｊ：多重読み込み処理完了後、読み込み中だったバッファへの読み込みを再開する。
図３Ｋ：第１データの読み込みが完了した時点で、ＰＲＰをＡＲＰの位置に合わせる。ＰＲＰの移動は他からのバッファ操作が禁止された状態で行われる。
【図面の簡単な説明】
【００４４】
【図１Ａ】図１Ａは、背景技術におけるバッファの動作を示す。
【図１Ｂ】図１Ｂは、背景技術におけるバッファの動作を示す。
【図１Ｃ】図１Ｃは、背景技術におけるバッファの動作を示す。
【図１Ｄ】図１Ｄは、背景技術におけるバッファの動作を示す。
【図１Ｅ】図１Ｅは、背景技術におけるバッファの動作を示す。
【図１Ｆ】図１Ｆは、背景技術におけるバッファの動作を示す。
【図２】図２は、バッファに設定される各種ポインタを示す。
【図３Ａ】図３Ａは、読み込み書き込み動作が行われるバッファを示す。
【図３Ｂ】図３Ｂは、バッファに対する通常の読み込み書き込み動作を示す。
【図３Ｃ】図３Ｃは、バッファに対する通常の読み込み書き込み動作を示す。
【図３Ｄ】図３Ｄは、優先度の高い読み込み書き込み要求があったときの割り込み動作を示す。
【図３Ｅ】図３Ｅは、優先度の高い読み込み書き込み要求があったときの割り込み動作を示す。
【図３Ｆ】図３Ｆは、更に優先度の高い読み込み書き込み要求があったときの割り込み動作を示す。
【図３Ｇ】図３Ｇは、更に優先度の高い読み込み書き込み要求があったときの割り込み動作を示す。
【図３Ｈ】図３Ｈは、更に優先度の高い読み込み書き込みが完了した状態を示す。
【図３Ｉ】図３Ｉは、優先度の高い読み込み書き込みが完了した状態を示す。
【図３Ｊ】図３Ｊは、通常の読み込み書き込みが再開された状態を示す。
【図３Ｋ】図３Ｋは、読み込み書き込みが完了した状態を示す。
【符号の説明】
【００４５】
２…空領域
４…読込予約領域
６…有効データ
８…書込予約領域
１０…空領域
【図１Ａ】
2007334542.tif 000003
【図１Ｂ】
2007334542.tif 000004
【図１Ｃ】
2007334542.tif 000005
【図１Ｄ】
2007334542.tif 000006
【図１Ｅ】
2007334542.tif 000007
【図１Ｆ】
2007334542.tif 000008
【図２】
2007334542.tif 000009
【図３Ａ】
2007334542.tif 000010
【図３Ｂ】
2007334542.tif 000011
【図３Ｃ】
2007334542.tif 000012
【図３Ｄ】
2007334542.tif 000013
【図３Ｅ】
2007334542.tif 000014
【図３Ｆ】
2007334542.tif 000015
【図３Ｇ】
2007334542.tif 000016
【図３Ｈ】
2007334542.tif 000017
【図３Ｉ】
2007334542.tif 000018
【図３Ｊ】
2007334542.tif 000019
【図３Ｋ】
2007334542.tif 000020