(57)【特許請求の範囲】
【請求項１】
デュアルポート型メモリを共有する複数のプロセスが前記メモリを用いながら協同して処理を行う環境において、各プロセスが、自プロセスの前記メモリへのアクセスを管理するために備える共有メモリアクセス管理装置であって、
前記メモリには、複数ビットから成って、前記複数のプロセスが協同して行う処理の進行に従って値が更新される制御情報が含まれており、
前記共有メモリアクセス管理装置は、
前記制御情報の値を検出する検出手段と、
前記制御情報の値を更新する更新手段と、
前記検出手段が検出する制御情報の値が他プロセスによって更新されて所定の値に変化するまで前記検出手段に前記制御情報の値を検出する動作を繰り返させ、前記検出手段が検出した値が前記所定の値に変化すると、自プロセスに指示して前記処理に関わる動作を行わせ、前記自プロセスによる動作が完了した後に前記制御情報の複数ビットを反転させる場合、前記複数のビットの各々について、順次前記更新手段に指示して反転させて前記他プロセスに前記処理の進行を伝達する指示手段、
とから成ることを特徴とする共有メモリアクセス管理装置。
【請求項２】
前記共有メモリは、前記複数のプロセスが前記制御情報以外のデータを受け渡しするために用いるデータ部を含み、
前記制御情報は、前記データ部に対する排他制御のための排他制御用フラグを１以上含み、
前記複数のプロセスが協同して行う処理は、前記データ部を介して行われるデータの受け渡しであり、
前記指示手段は、前記検知手段が検知した前記排他制御用フラグの値に基づいて、前記データの受け渡しに関する動作を前記自プロセスに行わせ、前記動作が完了した後に、前記排他制御用フラグの複数ビットを反転させる場合、前記複数のビットの各々について、順次前記更新手段に指示して反転させること
を特徴とする請求項１に記載の共有メモリアクセス管理装置。
【請求項３】
デュアルポート型メモリを共有する複数のプロセスが前記メモリを用いてデータ通信を行うデータ通信方法であって、
前記メモリには、データ通信の進行に従って前記複数のプロセスによって値が更新される複数ビットから成るフラグが含まれ、前記データ通信方法は、
一のプロセスが前記メモリにデータを書き込む書き込みステップと、
前記書き込みステップを終えた前記一のプロセスが、前記フラグに含まれる一のビットを反転させる第１の反転ステップと、
前記第１の反転ステップを終えた前記一のプロセスが、前記フラグに含まれる他の一のビットを反転させる第２の反転ステップと、
他の一のプロセスが、前記一のビットおよび前記他の一のビットの反転を検知する検知ステップと、
前記検知ステップを終えた前記他の一のプロセスが、前記メモリに書き込まれたデータを読み出す読み出しステップと
を含むことを特徴とするデータ通信方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数のプロセスで共有される共有メモリに対するアクセスを制御する共有メモリアクセス管理装置に関する。
【０００２】
【従来の技術】
従来、コンピュータで並行して実行中の複数のプロセスが協同して何らかの処理を行う場合、この処理実行に必要な情報を、共有メモリを介してやりとりする。
例えば、プロセスＡがプロセスＢにデータを渡す場合であれば、プロセスＡが共有メモリにデータを書き込み、その後、プロセスＢがこのデータを読み出す、という手順となる。ただし、この手順を正しく進行させるには、互いのプロセスが自身の処理の進行状況を応じて相手側の動作を制御する必要がある。プロセスＡはデータ書き込みの完了をプロセスＢに通知することが必要であるし、プロセスＢの側も、データの読み出し完了をプロセスＡに通知しないと、その後のプロセスＡによる共有メモリへの新たなデータ書き込みができない。
【０００３】
そして、こうした制御を行うためにはフラグが用いられる。上記の例では、フラグがＯＦＦの状態からプロセスＡがデータの書き込みを開始し、書き込みを完了した段階でフラグをＯＮに設定する。プロセスＢはフラグがＯＦＦの間は共有メモリにはアクセスせず、フラグがＯＮになると共有メモリからのデータ読み出しを開始し、読み出しを完了するとフラグをＯＦＦに設定する。すると、プロセスＡは、次のデータ書き込みが可能になったことを認識できる。
【０００４】
こうしたフラグは上の例の通り複数プロセスによって設定／参照されるので、やはり共有メモリの中に設けられることになる。つまり、複数プロセスが共有メモリを用いてデータのやり取りをしながら処理を行う場合、共有メモリには、データの書き込み／読み出しのためのエリア（以下「データエリア」）と、処理の進行を制御するためのフラグが設けられたエリア（以下「制御用フラグエリア」）とが混在する。
【０００５】
プロセスＡ、Ｂは定期的に制御フラグエリアを参照（以下「ポーリング」という）しながら、その値に従って動作する。
ただし、共有メモリが、プロセスからのアクセスを受け付けるポートを複数有するデュアルポート型のものである場合、共有メモリを用いた処理についてプロセスの正しい動作を保証するためには、複数プロセスからのアクセス（write：データの書き込み、および制御フラグの更新、read：データの読み出し、および制御フラグの参照）が衝突するのを防止しなければならない。衝突とは、メモリ内の同じアドレスのエリアに複数のプロセスが同時にアクセスすることであり、デュアルポート型のメモリでなければ発生しない。
【０００６】
共有メモリへのプロセスのアクセスが競合した場合に発生するのは以下のパターンである。
・パターン１：writeとwriteと（データ書き込み同士、又はフラグ更新同士）が衝突する。複数のプロセスがメモリの同一箇所に同時に書き込み又は更新を行おうとする状態。メモリセルが破壊されるおそれがある。
・パターン２：writeとread（データの書き込みと読み出し、又はフラグの更新と参照）とが衝突する。Read側のプロセスが読み出した内容が不定となってしまい、読み出した内容をもとに行われる動作の結果が不正となるおそれがある。
【０００７】
上記の例の場合、プロセスＡ、Ｂの動作手順の内容から、データエリアについても制御フラグエリアについてもパターン１は発生しない。パターン２についても、データエリアに関して言えば、制御フラグの読み出し結果に間違いがない限り発生しない。しかし、制御フラグエリアに関しては、パターン２の発生を防止できない。フラグの更新と参照とが衝突してフラグの内容が不定となると、読み出されたフラグは「０」、「１」のいずれにも認識されうる。
【０００８】
そして、パターン２発生の結果、読み出された制御フラグの値が不定となった場合、プロセスが誤動作するおそれがある。以下に誤動作の一例を挙げる。
プロセスＡがプロセスＢに対して、データエリアを介してデータを渡した上でデータの加工を行わせる。加工のパターンは２通りあって、プロセスＡはそのいずれかをフラグによって指示する、という処理を考えてみる。制御フラグエリアには、上述のデータ書き込み完了を示すフラグに加えて、加工パターンを示すフラグが設けられる。
【０００９】
制御フラグエリアの値と、それに応じた両プロセスの動作とを以下に示す。上位１ビットは加工パターン（０：第１の加工パターン、１：第２の加工パターン）を、下位１ビットはデータ書き込み完了を、それぞれ示すフラグである。
（１）００：プロセスＡがデータエリアにデータ書き込み中。
（２）０１：プロセスＡがデータ書き込みを完了。プロセスＢはデータを読み出し、第１の加工パターンで加工する。
（３）１１：プロセスＡがデータ書き込みを完了。プロセスＢはデータを読み出し、第２の加工パターンで加工する。
【００１０】
ここで、プロセスＡは、データエリアへのデータ書き込みを完了した時点で、プロセスＢに対し第２加工パターンでのデータ加工を指示するために、制御用ビットエリアの値を２ビットとも書きかえて「００」から「１１」に変更する。その変更の瞬間にプロセスＢによる制御用ビットエリアの参照が行われると、更新されていた２ビットのフラグは両方とも不定となってしまう。そのため、プロセスＢはビット列の値を、「００」、「０１」、「１０」、「１１」のいずれにも認識しうる。
【００１１】
正しく「１１」と読み取った場合はもちろん問題なく、「００」と読み取った場合もプロセスＢはポーリングを繰り返し、次回の参照の際は値を正しく「１１」と認識するので、やはり問題ない。しかし、「０１」と判断した場合、プロセスＢは、第１加工プロセスでデータ加工するという誤動作を行うことになる。更に、「１０」というありえないパターンとして認識すると、最悪の場合、異常事態の発生と判断して処理を停止してしまうおそれもある。
【００１２】
また、上記の例には該当しないが、制御用フラグの値が読み違えられることでデータエリアへの書き込みアクセスが衝突する事態が発生すると、データエリア内のデータの破壊などの深刻な結果につながることも考えられる。
こうした誤動作を確実に防止するには、誤動作の原因となりうるアクセスの衝突を防止すればよく、そのための手段が共有メモリに対する排他制御である。
【００１３】
排他制御の手法として代表的なものが、信号を用いて一つのプロセスにだけアクセスを許すセマフォ管理方法である。その具体的な方法としては、ハードウェアによるものがあり、ハードウェアによる排他制御の一般的な例として、共有メモリのハードウェアとしての実体であるメモリデバイスが排他制御用信号を発生させるものがある。メモリデバイスは、あるプロセスがメモリにアクセスしている間、ビジー信号を発生させ、他のプロセスによるメモリへのアクセスを制限する。ビジー信号は、プロセス実行の主体であるデバイス（ＣＰＵなど）のWAIT信号線を介してプロセスに伝えられ、プロセスはWAIT信号線からビジー信号が入力される間は共有メモリへのアクセスを行わない。よって誤動作の原因となるアクセスの衝突は発生しない。
【００１４】
なお、共有メモリの排他制御に制御用フラグを用いる手法もあるが、制御用フラグ自体が共有メモリに設けられるもので、フラグについてはアクセスの衝突を確実には排除できない。確実な排他制御の手段としてはハードウェアを用いざるを得ない。
【００１５】
【発明が解決しようとする課題】
しかしながら、ハードウェアによる排他制御については、専用のハードウェアとしてビジー信号を発生させるメモリデバイスが必要となり、また、プロセスの実行主体であるデバイスがこのようなビジー信号による排他制御に対応する機能を備えていない場合、当該デバイス外部に排他制御用の回路を別途設けないと排他制御が実現できないなど、コストの上昇を招く傾向がある。また、組み合わされるデバイスの排他制御に関する仕様によっては、異常事態も発生しうる。例えば、プロセスの実行デバイスが、アクセス実行中のプロセスを停止させる場合、メモリに排他制御の解除（ビジー信号の停止）を指示しないで停止してしまう仕様となっており、メモリデバイスの側もこうした状況に対応する機能を備えていない場合、ビジー信号によって待機させられている他のプロセスは、待機を続けた末にタイムアウトで停止してしまう。
【００１６】
本発明は上記課題に鑑み、制御用フラグが設けられる共有メモリに対してハードウェアによる排他制御を行わず、その結果プロセスが読み出した制御用フラグの値が不定となっても、プロセスを正しく動作させることのできる共有メモリアクセス管理装置を提供することを目的とする。
【００１７】
【課題を解決するための手段】
本発明の共有メモリアクセス管理装置は、上記の目的を達成するために、デュアルポート型メモリを共有する複数のプロセスが前記メモリを用いながら協同して処理を行う環境において、各プロセスが、自プロセスの前記メモリへのアクセスを管理するために備える共有メモリアクセス管理装置であって、前記メモリには、複数ビットから成って、前記複数のプロセスが協同して行う処理の進行に従って値が更新される制御情報が含まれており、共有メモリアクセス管理装置は、前記制御情報の値を検出する検出手段と、前記制御情報の値を更新する更新手段と、前記検出手段が検出する制御情報の値が他プロセスによって更新されて所定の値に変化するまで前記検出手段に前記制御情報の値を検出する動作を繰り返させ、前記検出手段が検出した値が前記所定の値に変化すると、自プロセスに指示して前記処理に関わる動作を行わせ、前記自プロセスによる動作が完了すると前記更新手段に指示して前記制御情報のうち前記動作に関わる１のビットを更新させる指示手段、とから成ることを特徴とする。
【００１８】
これにより、制御用情報を更新する際には一度に１ビットしか更新せず、制御情報の読み出しを行う際には、制御用情報の値が所定値になる（更新される）までは制御用情報の読み出しだけを行うので、アクセスの衝突によって読み出された制御用情報の値が不定となる場合でも、制御用情報の値は、正しい更新後の値または更新前の値のいずれかに認識される。正しく更新後の値として検出した場合はもちろん問題はなく、更新前の値として検出した場合でも、制御情報の参照をもう一度実行し、この参照では正しく更新後の値として認識するので、やはり問題は発生しない。よって、共有メモリの制御用情報に対してはハードウェアによる排他制御を行わなくとも、アクセスの衝突が原因でプロセスが誤動作することを防止できる。
【００１９】
【発明の実施の形態】
次に、本発明の共有メモリアクセス管理装置に関する実施の形態について図面を参照しながら説明する。本実施の形態における共有メモリは、データエリアと制御用フラグエリアとに分かれ、２つのプロセスの間のデータ受け渡しおよび制御情報の設定／参照のために用いられる。
【００２０】
図１は、本実施の形態において、２つのプロセスが共有メモリを用いて行う処理の内容を示す模式図である。プロセスＡは、転送対象のデータを生成してプロセスＢに渡し、プロセスＢはこのデータを加工した上でデータ転送先に出力するというデータ転送処理である。ただし、プロセスＢがデータを転送先に出力するタイミングは、プロセスＡが、上位プロセス（図外）の指示を受けて決定し、プロセスＢに指示する。
【００２１】
そして、転送データおよび出力タイミング指示は、両プロセス間で共有メモリ１０を介してやりとりされる。転送データは共有メモリ内のデータエリア１２に、出力タイミング指示は制御用フラグエリア１２に、それぞれ書き込まれる。制御用フラグエリア１１には、両プロセスがそれぞれの処理の進行状況を相手側に伝えるためのフラグが設けられており、前記出力タイミングもこうしたフラグで指示される。
【００２２】
プロセスＡ、Ｂとも、その動作の内容から管理部とデータ処理部とに分けられる。
プロセスＡ側のデータ処理部Ａ１は、転送すべきデータの生成・書き込み、出力タイミング決定、そして、転送終了後の共有メモリ１２の初期化を行う。
プロセスＢ側のデータ処理部Ｂ１は、転送データの読み出し、データの加工、データの転送を行う。
【００２３】
プロセスＡ側の管理部Ａ２およびプロセスＢ側の管理部Ｂ２は、それぞれが処理の進行に応じて制御用フラグエリア１１内のフラグの更新／参照を行う。
このデータ転送処理は、以下の４段階に分けることができる。
・第１段階：プロセスＡによる共有メモリ１２へのデータ書き込みが終るまで。
・第２段階：プロセスＡによるデータ書き込みが終ってからプロセスＡがデータ転送開始をプロセスＢに指示するまで。
・第３段階：プロセスＢがデータ転送を終えるまで。
・第４段階：プロセスＡが後処理を終える（共有メモリ１２を初期状態に戻す）まで。
【００２４】
図２は、共有メモリ１０の構成を示す模式図である。
共有メモリ１０は、制御用フラグエリア１１とデータエリア１２とから成り、そのハードウェアとしての実体は、デュアルポート型のメモリデバイスである。
データエリア１２には、転送対象データが書き込まれる。書き込みを行うのは書き込み側プロセスＡであり、読み出し側プロセスＢが読み出す。
【００２５】
制御用フラグエリア１１は、各プロセスの動作の内容やタイミングを制御するためのフラグが設けられるエリアであり、ここでは２種類のフラグから成る。
これら２種類のフラグは、１つが「有効フラグ１１１」であり、もう１つが「変化フラグ１１２」である。
有効フラグ１１１は、プロセスＡがプロセスＢに対して、データエリア１２内のデータの読み出しおよび転送先への転送のタイミングを指示するためのものである。設定はＯＮ設定、ＯＦＦ設定ともプロセスＡが行う。プロセスＡは、上位プロセスからの指示をもとにプロセスＢにデータ転送を開始させるタイミングを決め、有効フラグ１１１をＯＮに設定する。そして、書き込んだ転送データについてプロセスＢが読み出し・転送が完了したのを検知すると、有効フラグ１１１をＯＦＦに設定する。（読み出し完了の検知は変化フラグ１１２による。変化フラグ１１２の詳細は以下に述べる。）
変化フラグ１１２は、データエリア１２における転送対象データの有無を示す。データ書き込み側のプロセスＡが情報部へのデータ書き込みを完了した時点でプロセスＡによってＯＮに設定され、プロセスＢが書き込まれた転送データを転送完了した時点で、プロセスＢによってＯＦＦに設定される。つまり、変化フラグ１１２は、データエリア１２についてプロセスＡによるデータ書き込みとプロセスＢによるデータ読み出しとが衝突しないようにするための、データエリア１２用の「排他制御」フラグである。
【００２６】
プロセスＡとプロセスＢとは、いずれも、定期的に制御用フラグエリア１１にアクセスして値を参照（ポーリング）する。そして、制御用フラグエリア１１の値に応じて動作する。
上記２種類のフラグの組合わせによって、制御用フラグエリア１１の値は以下の４パターンとなる。これらパターンは、上述した転送処理の４つの段階に対応して以下のように遷移する。
【００２７】
００→ ０１→ １１→ １０→ ００
遷移のいずれの段階においても、制御用フラグエリア１１にある２ビットのフラグのうち、値が変わるのは1つのフラグのみである（一度に２つのフラグ両方の値が変わることがない）。こうした遷移の形を、「符号間距離が１」で遷移すると言う。これは、フラグの更新と参照とが衝突して制御用フラグエリア１１の値が不定となる場合でも、不定となるのは１つのフラグ（ビット）のみであることを示す。
（転送処理シーケンス）
以下、データ転送処理の進行および処理の進行に応じてプロセスＡとプロセスＢが行う動作、そして処理の進行にともなう制御用フラグエリア１１の状態遷移を、シーケンス図を参照しながら説明する。
【００２８】
図３は、本実施の形態におけるデータ転送処理の進行と、それにともなう共有メモリ１０の内容の変化とを示すシーケンス図である。
プロセスＡとプロセスＢとは、いずれも、定期的に共有メモリ１０の制御用フラグエリア１１をポーリングして制御用フラグエリア１１の値を読み出し、読み出したフラグの値に応じて動作する。
【００２９】
先ず、制御用フラグエリア１１の値が「００」の状態であるが、これはプロセスＡによるデータエリア１２への転送データの書き込みが完了していない状態（書き込み開始前あるいは書き込み途中の状態）である。この状態においては、プロセスＡは転送データのデータエリア１２への書き込みを行い、プロセスＢは制御用フラグエリア１１へのポーリングのみ行っている。
【００３０】
この状態で、プロセスＡの側に転送データが発生する。すると、プロセスＡは、ポーリングの結果、制御用フラグエリア１１の値を「００」と検出したタイミング（図中▲１▼）で、データエリア１２にアクセスして転送データ１２０の書き込みを開始する（図中▲２▼）。なお、制御用フラグエリア１１の値が「００」以外の場合、プロセスＡはデータエリア１２へのアクセスは行わず、制御用フラグエリア１１の値を「００」と検出するまでポーリングを繰り返す。
【００３１】
そして、プロセスＡは、データエリア１２への転送データ１２０の書き込みを続け、書き込みが終了すると、変化フラグ１１２をＯＮ設定する（制御用フラグエリア１１の値を「０１」に変える（図中▲３▼））。
次いで、制御用フラグエリア１１の値が「０１」の状態であるが、これは、プロセスＡによるデータエリア１２への転送データの書き込みが完了しているが、プロセスＢによる転送データの読み出し・転送開始のタイミングに達していない状態である。この状態においては、プロセスＡはプロセスＢによる転送データの読み出し・転送を認めるタイミングを測っており、プロセスＢは制御用フラグエリア１１へのポーリングのみ行っている。
【００３２】
その後、プロセスＡは、上位プロセスからの指示によってデータ転送開始のタイミングを測り、転送開始のタイミングに達したと判断すると、プロセスＢに転送データ読み出し・転送を指示するために有効フラグ１１１をＯＮ設定する（制御用フラグエリア１１の値を「１１」に変える。図中▲４▼）。
そして、制御用フラグエリア１１の値は「１１」となるが、これは、プロセスＢによる転送データの読み出し・転送が認められた状態である。この状態になるまで（上記の▲１▼〜▲４▼の間）、プロセスＢは制御用フラグエリア１１へのポーリングのみ行っているが、ポーリングの結果、制御用フラグエリア１１の値が「１１」になっているのを検出すると（図中▲５▼）、プロセスＢはデータエリア１２にアクセスして転送データ１２０を読み出し、加工した上で転送先プロセス（図１参照）に転送する（図中▲６▼）。一方、プロセスＡは、制御用フラグエリア１１へのポーリングのみ行っている。
【００３３】
プロセスＢは、転送データ１２０の読み出し・転送を完了すると、変化フラグ１１２をＯＦＦ設定する（制御用フラグエリア１１の値を「１０」に変える。図中▲７▼）。
そして、制御用フラグエリア１１の値は「１０」となるが、これは、プロセスＢによるデータエリア１２からの転送データの読み出し・転送が終了した状態である。
【００３４】
これに対し、プロセスＡは、ポーリングで制御用フラグエリア１１の値を「１０」と検出すると（図中▲８▼）、プロセスＢによるデータ転送が完了したことを認識して、データエリア１２を初期化したうえで、制御用フラグエリア１１の値を初期値である「００」に戻す（有効フラグ１１１をＯＦＦ設定する（図中▲９▼））。これによって、一連のデータ転送処理は完了する。なお、この状態においては、プロセスＢは制御用フラグエリア１１へのポーリングのみ行っている。
【００３５】
このように、制御用フラグエリア１１の状態に応じて上記の順序で両プロセスが動作し、データ転送処理が行われる。
（プロセスの動作）
次に、本実施の形態のデータ転送処理におけるプロセスＡ、Ｂ各々の動作について、管理部Ａ２、Ｂ２を中心に図面を参照しながら説明する。
【００３６】
図４は、プロセスＡの動作を示すフローチャートである。
先ず、プロセスＡの起動に合わせて、管理部Ａ２は制御用フラグエリア１１へのポーリングを開始し、制御用フラグエリア１１の値を「００」と検出するまでポーリングを繰り返す（Ｓ４０１：Yes）。そして、データ処理部Ａ１に指示して転送用データの生成とデータエリア１２への書き込みを行わせ（Ｓ４０２）、データ処理部Ａ１からの書き込み完了の通知を待って（Ｓ４０３：Yes）、変化フラグ１１２をＯＮ設定（「００」→「０１」）する（Ｓ４０４）。
【００３７】
次いで、管理部Ａ２は、データ処理部Ａ１からの出力タイミング決定の通知を待って（Ｓ４０５：Yes）、有効フラグ１１１をＯＮ設定（「０１」→「１１」）する（Ｓ４０６）。
その後、管理部Ａ２は制御用フラグエリア１１のポーリングを再開し、その値を「１０」と検出すまで繰り返す（Ｓ４０７）。そして。「１０」と検出すると、データ処理部Ａ１に指示してデータエリア１２の初期化を行わせ（Ｓ４０８）、データ処理部Ａ１からの初期化完了の通知を待って（Ｓ４０９：Yes）、有効フラグ１１１をＯＦＦ設定（「１０」→「００」）する（Ｓ４１０）。
【００３８】
図５は、プロセスＢの動作を示すフローチャートである。
先ず、プロセスＢの起動に合わせて、管理部Ｂ２は制御用フラグエリア１１へのポーリングを開始し、制御用フラグエリア１１の値を「１１」と検出するまでポーリングを繰り返す（Ｓ５０１：Yes）。そして、データ処理部Ｂ１に指示して、転送用データのデータエリア１２からの読み出し、加工、転送先への転送という一連の処理を行わせ（Ｓ５０２）、データ処理部Ｂ１から転送まで完了の通知を待って（Ｓ５０３：Yes）、変化フラグ１１２をＯＦＦ設定（「１１」→「１０」）する（Ｓ５０４）。
【００３９】
プロセスＡ、Ｂは上記の動作を行うことでデータ転送処理を実現するが、ここでは、両プロセスの共有メモリ１０へのアクセスについて、ハードウェアのビジー信号などによる排他制御は行っていない。そのため、制御用フラグエリア１１の更新と参照（ポーリング）とが衝突して、参照された値が不定となる事態が生じる。上記データ転送処理が正しく行われるには、制御用ビット部１２の更新と参照とが衝突して参照された制御用ビットの値が不定となっても、それが原因でデータ転送処理の手順が狂ってしまう（例えば、プロセスＡによるデータの書き込みが終っていない時点でプロセスＢによるデータ読み出しが始まってしまう）などの誤動作が発生しないことが前提条件となる。
（動作の検証）
本実施例においては、処理の進行状況に沿って制御用フラグエリア１１の値が「符号間距離＝１」で遷移するように、処理の進行状況と制御用フラグエリア１１の値とを対応づけることで、参照された制御用ビットの値が不定となっても誤動作が発生しないようにしている。
【００４０】
以下、制御用フラグエリア１１の値が更新されるタイミングごとに、フラグ更新とフラグ参照とが衝突した場合の両プロセスの動作を検証し、参照された制御用フラグエリア１１の値が不定となっても誤動作が発生しないことを確認する。制御用フラグエリア１１の値の更新は４ヵ所で行われるので、順次検証していく。
（１）「００」→「０１」のタイミング
図６は、プロセスＡが、データエリア１２への転送データ書き込み開始時点で変化フラグ１１２をＯＮ設定する際に（図３の▲２▼）、プロセスＢのポーリングによる制御用フラグエリア１１の参照が衝突した場合を示す。
【００４１】
この場合、制御用フラグエリア１１のうち更新対象の変化フラグ１１２の値のみが不定になるので、プロセスＢは、制御用フラグエリア１１の値を「００」または「０１」と認識する。
プロセスＢは、有効フラグ１１１がＯＮとなっている場合に限ってデータエリア１２へのアクセスが可能なので、上記いずれのパターンに読み取っても、プロセスＢは制御用フラグエリア１１へのポーリングを繰り返すのみである。よって、誤動作は発生しない。
【００４２】
（２）「０１」→「１１」のタイミング
図７は、プロセスＡが、データエリア１２への転送データ書き込みを完了した時点で有効フラグ１１１をＯＮ設定する際に、プロセスＢによる制御用フラグエリア１１の参照が衝突した場合を示す。
【００４３】
この場合、制御用フラグエリア１１のうち更新対象の有効フラグ１１１の値のみが不定になるので、プロセスＢは、制御用フラグエリア１１の値を「０１」または「１１」と認識する。
「１１」と認識した場合、有効フラグ１１１がＯＮなので、プロセスＢは手順通りにデータエリア１２にアクセスしてデータの読み出し・転送を開始する。この時点では、実際に転送データのデータエリア１２への書き込みは完了しているので、転送データを正しく読み出すことができ、誤動作は発生しない。
【００４４】
逆に「０１」と認識した場合、プロセスＢはアクセス衝突の前の状態に戻るが、有効フラグ１１１がＯＦＦなので、その後も一定の時間間隔で制御用フラグエリア１１の参照を繰り返す。次回のポーリングでは、制御用フラグエリア１１の値はもはや不定ではなく、プロセスＢは、制御用フラグエリア１１の値を正しく「１１」と読み出して、手順通りに転送データの読み出し・転送を開始することになり、誤動作は発生しない。
【００４５】
（３）「１１」→「１０」のタイミング
図８は、プロセスＢが、データエリア１２からの転送データ読み出しを完了した時点で変化フラグ１１２をＯＦＦ設定する際に、プロセスＡのポーリングによる制御用フラグエリア１１の参照処理が衝突した場合を示す。
【００４６】
この場合、制御用フラグエリア１１のうち更新対象の変化フラグ１１２の値のみが不定になるので、プロセスＡは、制御用フラグエリア１１の値を「１１」または「１０」と認識する。
「１０」と認識した場合、変化フラグ１１２がＯＦＦなので、プロセスＡは、プロセスＢによる転送データ読み出し・転送が完了したと判断して、共有メモリ１０を初期化（データエリア１１のクリアおよび有効フラグ１１１のＯＦＦ設定）を行い、データ転送処理を終了させる。この時点では、転送データの読み出し・転送は実際に完了しているので、共有メモリ１０を初期化して処理を終了させても問題は発生しない。
【００４７】
逆に「１１」と認識した場合、プロセスＡは、アクセス衝突の前の状態に戻り、プロセスＢによる転送データ読み出し・転送が未だに完了していないものと判断して、その後もポーリングによる制御用フラグエリア１１の参照を繰り返し、制御用フラグエリア１１の値が「１０」となるのを待ち続ける。次回のポーリングでは、制御用フラグエリア１１の値はもはや不定ではなく、プロセスＡは、制御用フラグエリア１１の値を正しく「１０」と認識して、手順通りに共有メモリ１０の初期化を行うことになるので、誤動作は発生しない。
【００４８】
（４）「１０」→「００」のタイミング
図９は、プロセスＢによるデータ読み出し・転送が終了したと判定したプロセスＡが、有効フラグ１１１をＯＦＦ設定する際に、プロセスＢによる制御用フラグエリア１１の参照が衝突した場合を示す。
【００４９】
この場合は、制御用フラグエリア１１のうち更新対象の有効フラグ１１１の値のみが不定になり、プロセスＢは、制御用フラグエリア１１の値を「１０」または「００」と認識する。
いずれの場合においても、プロセスＢは、図３を参照しながらすでに説明した通り、制御用フラグエリア１１へのポーリングのみ行うので、誤動作が発生することはない。
（まとめ）
このように、本実施の形態においては、アクセスの衝突によって参照された制御用フラグエリア１１の値が不定となっても、それが誤動作につながることがないよう、両プロセス、特にその中の管理部Ａ２、Ｂ２の動作が規定されているので、ハードウェアによる排他制御がなくてもデータ転送処理は正しく行われる。その規定の内容とその意味とについて、以下、図面を参照しながら説明する。
【００５０】
図１０は、本実施の形態における両プロセスの共有メモリ１０へのアクセスの内容を、制御用フラグエリア１１の遷移にそって表形式で示した図である。
図１１は、本変形例における制御用フラグエリア１１の状態遷移を示す図である。
これまでの説明と図１０、１１から分かるように、本実施の形態では、２つのプロセスが、共同してデータ転送処理を行う。両プロセスは、転送処理の４段階の進行状況に沿って制御用フラグエリア１１の値も「符号間距離＝１」で遷移させている。そのために、転送処理の進行から考えると必ずしも設ける必要のない「０１」（データ書き込みのみ完了、読み出し・加工は許可せず）という状態を設けている。これによって、制御用フラグエリア１１の値が「００」→「１１」と更新されて２ビットの値が不定となることを防止しているのである。
【００５１】
「符号間距離＝１」で制御用フラグエリア１１の値を遷移させる、という規則を設定したことで、一方のプロセスによる制御用フラグエリア１１更新動作にもう一方のプロセスによる制御用フラグエリア１１の参照が衝突した場合、１ビットの値しか不定にならない。そのため、参照側プロセスは制御用フラグエリア１１の値を必ず２つのパターンのいずれかに認識することになる。１つは正しい値（フラグ更新側のプロセスが意図した通りの更新後の値）であり、もう１つはフラグ更新側のプロセスが更新を行う前の値である。
【００５２】
しかるに、図１０に示すように、各段階において制御用フラグエリア１１の参照を行う側のプロセスは、制御用フラグエリア１１の値を所定の値と検出するまで制御用フラグエリア１１の参照（ポーリング）のみを行って、転送処理の進行に関わる動作は行わず、一方、制御用フラグエリア１１の更新を行う側のプロセスは、転送処理の進行に関わる動作を完了した上で、制御用フラグエリア１１の値を１ビットだけ更新するようになっている。
【００５３】
その結果、正しい値に認識した場合は当然、参照側プロセスは手順通りにその後の動作を行う。一方、更新前の値に認識した場合、読み出し側プロセスは衝突が発生したフラグ参照動作を行う前の状態に戻ることになり、制御用フラグエリア１１の参照を再び行う。そして次回の参照では、制御用フラグエリア１１の値を正しく更新後の値に認識して手順通りに次の動作を行うことになる。
【００５４】
誤動作とは、参照側のプロセスが制御用フラグの値を誤って認識した結果、フラグを更新した側のプロセスの意図と異なる動作を行ったり、手順と異なる動作を行ったりすることである。しかし、本実施の形態の場合、上記の通り、参照側プロセスがフラグを誤って更新前の値に認識しても、フラグ参照動作（ポーリング）を１回多く行うだけで、最終的にはフラグ更新側プロセスの意図を正しく認識して手順通りの動作を行うので、誤動作は発生しないのである。
【００５５】
なお、本実施の形態においては、更に、共有メモリ１０の中には、制御情報以外の情報を設定するためのエリア（データエリア１２）も存在するが、このエリアについては一部の制御用フラグ（変化フラグ１１２）によって誤動作の原因となるアクセスの衝突を防止している。つまり、共有メモリ１０のうちデータエリア１２については制御用フラグエリア１１に設定した情報でアクセスの衝突を防止し、制御用フラグエリア１１の値については、上記の通り、アクセスが衝突して読み出した値が不定となっても誤動作が発生しないようにしてある。
【００５６】
これは、本実施の形態によれば、共有メモリ内に制御用フラグエリアしか存在しない場合はもちろん、制御用フラグ以外の情報が設定されるエリアと混在する場合にも、共有メモリへのハードウェアによる排他制御なしで、誤動作なく処理を実行することができる、ということを示している。
また、本実施の形態では、制御情報に含まれる個々のビットをフラグとして使用することとなっているが、制御情報をフラグの集まりとしてでなく、複数ビットのビットパターンとして参照する場合でも、処理の進行に伴うビットパターンの遷移が、「符号間距離＝１」という規則に従ってさえいれば、本実施の形態と同様の効果を得ることが可能である。
【００５７】
また、上記実施の形態における制御用フラグエリアは２ビットであったが、本発明は３ビット以上の制御用フラグエリアを用いる場合にも適用できる。例えば、上記実施の形態において「データ転送」実施タイミングの指示である有効フラグ１１１を、「加工パターンＡまたは加工パターンＢで加工の上転送させる」指示である転送指示ビット列（２ビット、０１：パターンＡで加工・転送、１０：パターンＢで加工・転送）に置き換えた場合を考えてみる。
【００５８】
本変形例におけるデータ転送処理の流れを制御用フラグエリアの値の変化とともに説明する。実施の形態と同じ部分については説明を省略する。
▲１▼ ０００： プロセスＡによるデータエリア１２への転送データの書き込みが完了していない状態であることを示す。実施の形態における「００」（図３参照）と同じ。
▲２▼ ００１： プロセスＡによるデータエリア１２への転送データの書き込みが完了しているが、プロセスＢによる転送データの読み出し・転送は認められない状態であることを示す。実施の形態における「０１」（図３参照）と同じ。
▲３▼ ０１１または１０１： プロセスＢによる転送データの読み出し・転送が認められた状態。実施の形態における「１１」（図３参照）に対応する。プロセスＢは、転送データを読み出して、「０１１」の場合はパターンＡで、「１０１」の場合はパターンＢで加工して転送先へ転送する。
▲４▼ ０１０または１００： プロセスＢによるデータエリア１２からの転送データの読み出し・転送が終了した状態。実施の形態における「１０」（図３参照）に対応する。ここからプロセスＡが共有メモリを初期化して、▲１▼に戻る。
【００５９】
図１２は、本変形例における制御用フラグエリアの状態遷移を示す図である。
同図に示すように、本変形例においても制御用フラグエリアの値は、▲１▼「０００」→▲２▼「００１」→▲３▼「１０１」→▲４▼「１００」→▲１▼「０００」または、▲１▼「０００」→▲２▼「００１」→▲３▼「０１１」→▲４▼「０１０」→▲１▼「０００」と、符号間距離「１」で遷移する。また、制御用フラグエリア１１の参照を行う側のプロセスは、制御用フラグエリアの値を所定の値と検出するまで制御用フラグエリアの参照のみを行って、作業の進行に関わる動作は行わない点は上記実施の形態と同じである。よって、実施の形態で述べた通り、共有メモリへの排他制御を行わなくとも誤動作は発生しない。
【００６０】
なお、上記の実施の形態および変形例においては、複数プロセスが行う処理としてデータ転送処理を取り上げて説明したが、これは一例として挙げたもので、本発明の範囲をデータ転送処理に限定するものではない。例えば、あるプロセスが他のプロセスに対してデータを渡し、そのデータに何らかの加工をさせた上で返させる、といった処理も考えられる。この場合、制御用情報は加工前後のデータ受け渡しのタイミングや、加工の種類などを指示するのに使われる。しかし、処理内容がどのようなものであっても、その進行を「符号間距離＝１」で遷移する制御用情報と対応づけて管理することのできる内容であれば適用可能である。
【００６１】
【発明の効果】
以上説明したように、本発明の共有メモリアクセス管理装置は、デュアルポート型メモリを共有する複数のプロセスが前記メモリを用いながら協同して処理を行う環境において、各プロセスが、自プロセスの前記メモリへのアクセスを管理するために備える共有メモリアクセス管理装置であって、前記メモリには、複数ビットから成って、前記複数のプロセスが協同して行う処理の進行に従って値が更新される制御情報が含まれており、共有メモリアクセス管理装置は、前記制御情報の値を検出する検出手段と、前記制御情報の値を更新する更新手段と、前記検出手段が検出する制御情報の値が他プロセスによって更新されて所定の値に変化するまで前記検出手段に前記制御情報の値を検出する動作を繰り返させ、前記検出手段が検出した値が前記所定の値に変化すると、自プロセスに指示して前記処理に関わる動作を行わせ、前記自プロセスによる動作が完了すると前記更新手段に指示して前記制御情報のうち前記動作に関わる１のビットを更新させる指示手段とから成る、という特徴を有するので、共有メモリ内の複数ビットから成る制御用情報については、ハードウェアによる排他制御を行わなくとも、制御用情報を用いて前記複数のプロセスが実行する処理に誤動作が発生することはない。
【００６２】
さらに、前記共有メモリは、前記複数のプロセスが前記制御情報以外のデータを受け渡しするために用いるデータ部を含み、前記制御情報は、前記データ部に対する排他制御のための排他制御用フラグを１以上含み、前記複数のプロセスが協同して行う処理は、前記データ部を介して行われるデータの受け渡しであり、前記指示手段は、前記検知手段が検知した前記排他制御用フラグの値に基づいて、前記データの受け渡しに関する動作を前記プロセスに行わせ、前記動作が完了すると、前記更新手段に指示して前記排他制御用フラグ１ビットを更新させる、とすることもできる。これにより、共有メモリに制御用情報とそれ以外のデータを格納するエリアとが混在する場合は、制御用情報以外のデータを格納するエリアについては制御用情報の一部として設定される排他制御用情報によって排他制御を実現し、制御用情報を設定するエリアについては、排他制御なしでも誤動作が発生することはないので、共有メモリ全体についてもハードウェアによる排他制御を行う必要はなく、それによって前記複数のプロセスが実行する処理に誤動作が発生することもない。
【００６３】
なお、上記の効果を確実に得るために、前記指示手段が前記自プロセスに行わせた動作が完了した後に前記制御情報の複数ビットを反転させる場合、前記複数のビットの各々について、順次前記更新手段に指示して反転させること、としてもよい。
そして、デュアルポート型メモリを共有する複数のプロセスが前記メモリを用いてデータ通信を行うデータ通信方法であって、前記メモリには、データ通信の進行に従って前記複数のプロセスによって値が更新される複数ビットから成るフラグが含まれ、前記データ通信方法は、一のプロセスが前記メモリにデータを書き込む書き込みステップと、前記書き込みステップを終えた前記一のプロセスが、前記フラグに含まれる一のビットを反転させる第１の反転ステップと、前記第１の反転ステップを終えた前記一のプロセスが、前記フラグに含まれる他の一のビットを反転させる第２の反転ステップと、他の一のプロセスが、前記一のビットおよび前記他の一のビットの反転を検知する検知ステップと、前記検知ステップを終えた前記他の一のプロセスが、前記メモリに書き込まれたデータを読み出す読み出しステップとを含むことを特徴とするデータ通信方法とすれば、ハードウェアによる共有メモリへの排他制御を行わなくとも、誤動作なくデータ通信を実行できる
【図面の簡単な説明】
【図１】本発明に関わる共有メモリアクセス管理装置の実施の形態において、複数プロセスが共有メモリを用いて行う転送処理の概要を示す模式図である。
【図２】同実施の形態における共有メモリの構成を示す図である。
【図３】同実施の形態における転送処理の進行とそれに伴なう共有メモリの内容の遷移とを示す模式図である。
【図４】同実施の形態におけるプロセスＡの動作を示すフローチャートである。
【図５】同実施の形態におけるプロセスＢの動作を示すフローチャートである。
【図６】同実施の形態における制御用フラグエリアへのアクセスの衝突の結果を示す模式図である。
【図７】同実施の形態における制御用フラグエリアへのアクセスの衝突の結果を示す模式図である。
【図８】同実施の形態における制御用フラグエリアへのアクセスの衝突の結果を示す模式図である。
【図９】同実施の形態における制御用フラグエリアへのアクセスの衝突の結果を示す模式図である。
【図１０】同実施の形態における制御用フラグエリアの値と複数プロセスによる共有メモリアクセスの内容との関係を表形式で示す図である。
【図１１】同実施の形態における制御用フラグエリアの値の遷移を示す状態遷移図である。
【図１２】同実施の形態の変形例における制御用フラグエリアの値の遷移を示す状態遷移図である。
【符号の説明】
１  共有メモリ
１１  制御用フラグエリア
１１１  有効フラグ
１１２  変化フラグ
１２  データエリア
１２０  データ
Ａ、Ｂ  プロセス
Ａ１、Ｂ１  データ処理部
Ａ２、Ｂ２  管理部
【図１】
0003790653.tif 000002
【図２】
0003790653.tif 000003
【図３】
0003790653.tif 000004
【図４】
0003790653.tif 000005
【図５】
0003790653.tif 000006
【図６】
0003790653.tif 000007
【図７】
0003790653.tif 000008
【図８】
0003790653.tif 000009
【図９】
0003790653.tif 000010
【図１０】
0003790653.tif 000011
【図１１】
0003790653.tif 000012
【図１２】
0003790653.tif 000013