JP3790653B2 - 共有メモリアクセス管理装置 - Google Patents
共有メモリアクセス管理装置 Download PDFInfo
- Publication number
- JP3790653B2 JP3790653B2 JP2000003464A JP2000003464A JP3790653B2 JP 3790653 B2 JP3790653 B2 JP 3790653B2 JP 2000003464 A JP2000003464 A JP 2000003464A JP 2000003464 A JP2000003464 A JP 2000003464A JP 3790653 B2 JP3790653 B2 JP 3790653B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- value
- shared memory
- control
- flag
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Multi Processors (AREA)
- Memory System (AREA)
Description
【発明の属する技術分野】
本発明は、複数のプロセスで共有される共有メモリに対するアクセスを制御する共有メモリアクセス管理装置に関する。
【0002】
【従来の技術】
従来、コンピュータで並行して実行中の複数のプロセスが協同して何らかの処理を行う場合、この処理実行に必要な情報を、共有メモリを介してやりとりする。
例えば、プロセスAがプロセスBにデータを渡す場合であれば、プロセスAが共有メモリにデータを書き込み、その後、プロセスBがこのデータを読み出す、という手順となる。ただし、この手順を正しく進行させるには、互いのプロセスが自身の処理の進行状況を応じて相手側の動作を制御する必要がある。プロセスAはデータ書き込みの完了をプロセスBに通知することが必要であるし、プロセスBの側も、データの読み出し完了をプロセスAに通知しないと、その後のプロセスAによる共有メモリへの新たなデータ書き込みができない。
【0003】
そして、こうした制御を行うためにはフラグが用いられる。上記の例では、フラグがOFFの状態からプロセスAがデータの書き込みを開始し、書き込みを完了した段階でフラグをONに設定する。プロセスBはフラグがOFFの間は共有メモリにはアクセスせず、フラグがONになると共有メモリからのデータ読み出しを開始し、読み出しを完了するとフラグをOFFに設定する。すると、プロセスAは、次のデータ書き込みが可能になったことを認識できる。
【0004】
こうしたフラグは上の例の通り複数プロセスによって設定/参照されるので、やはり共有メモリの中に設けられることになる。つまり、複数プロセスが共有メモリを用いてデータのやり取りをしながら処理を行う場合、共有メモリには、データの書き込み/読み出しのためのエリア(以下「データエリア」)と、処理の進行を制御するためのフラグが設けられたエリア(以下「制御用フラグエリア」)とが混在する。
【0005】
プロセスA、Bは定期的に制御フラグエリアを参照(以下「ポーリング」という)しながら、その値に従って動作する。
ただし、共有メモリが、プロセスからのアクセスを受け付けるポートを複数有するデュアルポート型のものである場合、共有メモリを用いた処理についてプロセスの正しい動作を保証するためには、複数プロセスからのアクセス(write:データの書き込み、および制御フラグの更新、read:データの読み出し、および制御フラグの参照)が衝突するのを防止しなければならない。衝突とは、メモリ内の同じアドレスのエリアに複数のプロセスが同時にアクセスすることであり、デュアルポート型のメモリでなければ発生しない。
【0006】
共有メモリへのプロセスのアクセスが競合した場合に発生するのは以下のパターンである。
・パターン1:writeとwriteと(データ書き込み同士、又はフラグ更新同士)が衝突する。複数のプロセスがメモリの同一箇所に同時に書き込み又は更新を行おうとする状態。メモリセルが破壊されるおそれがある。
・パターン2:writeとread(データの書き込みと読み出し、又はフラグの更新と参照)とが衝突する。Read側のプロセスが読み出した内容が不定となってしまい、読み出した内容をもとに行われる動作の結果が不正となるおそれがある。
【0007】
上記の例の場合、プロセスA、Bの動作手順の内容から、データエリアについても制御フラグエリアについてもパターン1は発生しない。パターン2についても、データエリアに関して言えば、制御フラグの読み出し結果に間違いがない限り発生しない。しかし、制御フラグエリアに関しては、パターン2の発生を防止できない。フラグの更新と参照とが衝突してフラグの内容が不定となると、読み出されたフラグは「0」、「1」のいずれにも認識されうる。
【0008】
そして、パターン2発生の結果、読み出された制御フラグの値が不定となった場合、プロセスが誤動作するおそれがある。以下に誤動作の一例を挙げる。
プロセスAがプロセスBに対して、データエリアを介してデータを渡した上でデータの加工を行わせる。加工のパターンは2通りあって、プロセスAはそのいずれかをフラグによって指示する、という処理を考えてみる。制御フラグエリアには、上述のデータ書き込み完了を示すフラグに加えて、加工パターンを示すフラグが設けられる。
【0009】
制御フラグエリアの値と、それに応じた両プロセスの動作とを以下に示す。上位1ビットは加工パターン(0:第1の加工パターン、1:第2の加工パターン)を、下位1ビットはデータ書き込み完了を、それぞれ示すフラグである。
(1)00:プロセスAがデータエリアにデータ書き込み中。
(2)01:プロセスAがデータ書き込みを完了。プロセスBはデータを読み出し、第1の加工パターンで加工する。
(3)11:プロセスAがデータ書き込みを完了。プロセスBはデータを読み出し、第2の加工パターンで加工する。
【0010】
ここで、プロセスAは、データエリアへのデータ書き込みを完了した時点で、プロセスBに対し第2加工パターンでのデータ加工を指示するために、制御用ビットエリアの値を2ビットとも書きかえて「00」から「11」に変更する。その変更の瞬間にプロセスBによる制御用ビットエリアの参照が行われると、更新されていた2ビットのフラグは両方とも不定となってしまう。そのため、プロセスBはビット列の値を、「00」、「01」、「10」、「11」のいずれにも認識しうる。
【0011】
正しく「11」と読み取った場合はもちろん問題なく、「00」と読み取った場合もプロセスBはポーリングを繰り返し、次回の参照の際は値を正しく「11」と認識するので、やはり問題ない。しかし、「01」と判断した場合、プロセスBは、第1加工プロセスでデータ加工するという誤動作を行うことになる。更に、「10」というありえないパターンとして認識すると、最悪の場合、異常事態の発生と判断して処理を停止してしまうおそれもある。
【0012】
また、上記の例には該当しないが、制御用フラグの値が読み違えられることでデータエリアへの書き込みアクセスが衝突する事態が発生すると、データエリア内のデータの破壊などの深刻な結果につながることも考えられる。
こうした誤動作を確実に防止するには、誤動作の原因となりうるアクセスの衝突を防止すればよく、そのための手段が共有メモリに対する排他制御である。
【0013】
排他制御の手法として代表的なものが、信号を用いて一つのプロセスにだけアクセスを許すセマフォ管理方法である。その具体的な方法としては、ハードウェアによるものがあり、ハードウェアによる排他制御の一般的な例として、共有メモリのハードウェアとしての実体であるメモリデバイスが排他制御用信号を発生させるものがある。メモリデバイスは、あるプロセスがメモリにアクセスしている間、ビジー信号を発生させ、他のプロセスによるメモリへのアクセスを制限する。ビジー信号は、プロセス実行の主体であるデバイス(CPUなど)のWAIT信号線を介してプロセスに伝えられ、プロセスはWAIT信号線からビジー信号が入力される間は共有メモリへのアクセスを行わない。よって誤動作の原因となるアクセスの衝突は発生しない。
【0014】
なお、共有メモリの排他制御に制御用フラグを用いる手法もあるが、制御用フラグ自体が共有メモリに設けられるもので、フラグについてはアクセスの衝突を確実には排除できない。確実な排他制御の手段としてはハードウェアを用いざるを得ない。
【0015】
【発明が解決しようとする課題】
しかしながら、ハードウェアによる排他制御については、専用のハードウェアとしてビジー信号を発生させるメモリデバイスが必要となり、また、プロセスの実行主体であるデバイスがこのようなビジー信号による排他制御に対応する機能を備えていない場合、当該デバイス外部に排他制御用の回路を別途設けないと排他制御が実現できないなど、コストの上昇を招く傾向がある。また、組み合わされるデバイスの排他制御に関する仕様によっては、異常事態も発生しうる。例えば、プロセスの実行デバイスが、アクセス実行中のプロセスを停止させる場合、メモリに排他制御の解除(ビジー信号の停止)を指示しないで停止してしまう仕様となっており、メモリデバイスの側もこうした状況に対応する機能を備えていない場合、ビジー信号によって待機させられている他のプロセスは、待機を続けた末にタイムアウトで停止してしまう。
【0016】
本発明は上記課題に鑑み、制御用フラグが設けられる共有メモリに対してハードウェアによる排他制御を行わず、その結果プロセスが読み出した制御用フラグの値が不定となっても、プロセスを正しく動作させることのできる共有メモリアクセス管理装置を提供することを目的とする。
【0017】
【課題を解決するための手段】
本発明の共有メモリアクセス管理装置は、上記の目的を達成するために、デュアルポート型メモリを共有する複数のプロセスが前記メモリを用いながら協同して処理を行う環境において、各プロセスが、自プロセスの前記メモリへのアクセスを管理するために備える共有メモリアクセス管理装置であって、前記メモリには、複数ビットから成って、前記複数のプロセスが協同して行う処理の進行に従って値が更新される制御情報が含まれており、共有メモリアクセス管理装置は、前記制御情報の値を検出する検出手段と、前記制御情報の値を更新する更新手段と、前記検出手段が検出する制御情報の値が他プロセスによって更新されて所定の値に変化するまで前記検出手段に前記制御情報の値を検出する動作を繰り返させ、前記検出手段が検出した値が前記所定の値に変化すると、自プロセスに指示して前記処理に関わる動作を行わせ、前記自プロセスによる動作が完了すると前記更新手段に指示して前記制御情報のうち前記動作に関わる1のビットを更新させる指示手段、とから成ることを特徴とする。
【0018】
これにより、制御用情報を更新する際には一度に1ビットしか更新せず、制御情報の読み出しを行う際には、制御用情報の値が所定値になる(更新される)までは制御用情報の読み出しだけを行うので、アクセスの衝突によって読み出された制御用情報の値が不定となる場合でも、制御用情報の値は、正しい更新後の値または更新前の値のいずれかに認識される。正しく更新後の値として検出した場合はもちろん問題はなく、更新前の値として検出した場合でも、制御情報の参照をもう一度実行し、この参照では正しく更新後の値として認識するので、やはり問題は発生しない。よって、共有メモリの制御用情報に対してはハードウェアによる排他制御を行わなくとも、アクセスの衝突が原因でプロセスが誤動作することを防止できる。
【0019】
【発明の実施の形態】
次に、本発明の共有メモリアクセス管理装置に関する実施の形態について図面を参照しながら説明する。本実施の形態における共有メモリは、データエリアと制御用フラグエリアとに分かれ、2つのプロセスの間のデータ受け渡しおよび制御情報の設定/参照のために用いられる。
【0020】
図1は、本実施の形態において、2つのプロセスが共有メモリを用いて行う処理の内容を示す模式図である。プロセスAは、転送対象のデータを生成してプロセスBに渡し、プロセスBはこのデータを加工した上でデータ転送先に出力するというデータ転送処理である。ただし、プロセスBがデータを転送先に出力するタイミングは、プロセスAが、上位プロセス(図外)の指示を受けて決定し、プロセスBに指示する。
【0021】
そして、転送データおよび出力タイミング指示は、両プロセス間で共有メモリ10を介してやりとりされる。転送データは共有メモリ内のデータエリア12に、出力タイミング指示は制御用フラグエリア12に、それぞれ書き込まれる。制御用フラグエリア11には、両プロセスがそれぞれの処理の進行状況を相手側に伝えるためのフラグが設けられており、前記出力タイミングもこうしたフラグで指示される。
【0022】
プロセスA、Bとも、その動作の内容から管理部とデータ処理部とに分けられる。
プロセスA側のデータ処理部A1は、転送すべきデータの生成・書き込み、出力タイミング決定、そして、転送終了後の共有メモリ12の初期化を行う。
プロセスB側のデータ処理部B1は、転送データの読み出し、データの加工、データの転送を行う。
【0023】
プロセスA側の管理部A2およびプロセスB側の管理部B2は、それぞれが処理の進行に応じて制御用フラグエリア11内のフラグの更新/参照を行う。
このデータ転送処理は、以下の4段階に分けることができる。
・第1段階:プロセスAによる共有メモリ12へのデータ書き込みが終るまで。
・第2段階:プロセスAによるデータ書き込みが終ってからプロセスAがデータ転送開始をプロセスBに指示するまで。
・第3段階:プロセスBがデータ転送を終えるまで。
・第4段階:プロセスAが後処理を終える(共有メモリ12を初期状態に戻す)まで。
【0024】
図2は、共有メモリ10の構成を示す模式図である。
共有メモリ10は、制御用フラグエリア11とデータエリア12とから成り、そのハードウェアとしての実体は、デュアルポート型のメモリデバイスである。
データエリア12には、転送対象データが書き込まれる。書き込みを行うのは書き込み側プロセスAであり、読み出し側プロセスBが読み出す。
【0025】
制御用フラグエリア11は、各プロセスの動作の内容やタイミングを制御するためのフラグが設けられるエリアであり、ここでは2種類のフラグから成る。
これら2種類のフラグは、1つが「有効フラグ111」であり、もう1つが「変化フラグ112」である。
有効フラグ111は、プロセスAがプロセスBに対して、データエリア12内のデータの読み出しおよび転送先への転送のタイミングを指示するためのものである。設定はON設定、OFF設定ともプロセスAが行う。プロセスAは、上位プロセスからの指示をもとにプロセスBにデータ転送を開始させるタイミングを決め、有効フラグ111をONに設定する。そして、書き込んだ転送データについてプロセスBが読み出し・転送が完了したのを検知すると、有効フラグ111をOFFに設定する。(読み出し完了の検知は変化フラグ112による。変化フラグ112の詳細は以下に述べる。)
変化フラグ112は、データエリア12における転送対象データの有無を示す。データ書き込み側のプロセスAが情報部へのデータ書き込みを完了した時点でプロセスAによってONに設定され、プロセスBが書き込まれた転送データを転送完了した時点で、プロセスBによってOFFに設定される。つまり、変化フラグ112は、データエリア12についてプロセスAによるデータ書き込みとプロセスBによるデータ読み出しとが衝突しないようにするための、データエリア12用の「排他制御」フラグである。
【0026】
プロセスAとプロセスBとは、いずれも、定期的に制御用フラグエリア11にアクセスして値を参照(ポーリング)する。そして、制御用フラグエリア11の値に応じて動作する。
上記2種類のフラグの組合わせによって、制御用フラグエリア11の値は以下の4パターンとなる。これらパターンは、上述した転送処理の4つの段階に対応して以下のように遷移する。
【0027】
00→ 01→ 11→ 10→ 00
遷移のいずれの段階においても、制御用フラグエリア11にある2ビットのフラグのうち、値が変わるのは1つのフラグのみである(一度に2つのフラグ両方の値が変わることがない)。こうした遷移の形を、「符号間距離が1」で遷移すると言う。これは、フラグの更新と参照とが衝突して制御用フラグエリア11の値が不定となる場合でも、不定となるのは1つのフラグ(ビット)のみであることを示す。
(転送処理シーケンス)
以下、データ転送処理の進行および処理の進行に応じてプロセスAとプロセスBが行う動作、そして処理の進行にともなう制御用フラグエリア11の状態遷移を、シーケンス図を参照しながら説明する。
【0028】
図3は、本実施の形態におけるデータ転送処理の進行と、それにともなう共有メモリ10の内容の変化とを示すシーケンス図である。
プロセスAとプロセスBとは、いずれも、定期的に共有メモリ10の制御用フラグエリア11をポーリングして制御用フラグエリア11の値を読み出し、読み出したフラグの値に応じて動作する。
【0029】
先ず、制御用フラグエリア11の値が「00」の状態であるが、これはプロセスAによるデータエリア12への転送データの書き込みが完了していない状態(書き込み開始前あるいは書き込み途中の状態)である。この状態においては、プロセスAは転送データのデータエリア12への書き込みを行い、プロセスBは制御用フラグエリア11へのポーリングのみ行っている。
【0030】
この状態で、プロセスAの側に転送データが発生する。すると、プロセスAは、ポーリングの結果、制御用フラグエリア11の値を「00」と検出したタイミング(図中▲1▼)で、データエリア12にアクセスして転送データ120の書き込みを開始する(図中▲2▼)。なお、制御用フラグエリア11の値が「00」以外の場合、プロセスAはデータエリア12へのアクセスは行わず、制御用フラグエリア11の値を「00」と検出するまでポーリングを繰り返す。
【0031】
そして、プロセスAは、データエリア12への転送データ120の書き込みを続け、書き込みが終了すると、変化フラグ112をON設定する(制御用フラグエリア11の値を「01」に変える(図中▲3▼))。
次いで、制御用フラグエリア11の値が「01」の状態であるが、これは、プロセスAによるデータエリア12への転送データの書き込みが完了しているが、プロセスBによる転送データの読み出し・転送開始のタイミングに達していない状態である。この状態においては、プロセスAはプロセスBによる転送データの読み出し・転送を認めるタイミングを測っており、プロセスBは制御用フラグエリア11へのポーリングのみ行っている。
【0032】
その後、プロセスAは、上位プロセスからの指示によってデータ転送開始のタイミングを測り、転送開始のタイミングに達したと判断すると、プロセスBに転送データ読み出し・転送を指示するために有効フラグ111をON設定する(制御用フラグエリア11の値を「11」に変える。図中▲4▼)。
そして、制御用フラグエリア11の値は「11」となるが、これは、プロセスBによる転送データの読み出し・転送が認められた状態である。この状態になるまで(上記の▲1▼〜▲4▼の間)、プロセスBは制御用フラグエリア11へのポーリングのみ行っているが、ポーリングの結果、制御用フラグエリア11の値が「11」になっているのを検出すると(図中▲5▼)、プロセスBはデータエリア12にアクセスして転送データ120を読み出し、加工した上で転送先プロセス(図1参照)に転送する(図中▲6▼)。一方、プロセスAは、制御用フラグエリア11へのポーリングのみ行っている。
【0033】
プロセスBは、転送データ120の読み出し・転送を完了すると、変化フラグ112をOFF設定する(制御用フラグエリア11の値を「10」に変える。図中▲7▼)。
そして、制御用フラグエリア11の値は「10」となるが、これは、プロセスBによるデータエリア12からの転送データの読み出し・転送が終了した状態である。
【0034】
これに対し、プロセスAは、ポーリングで制御用フラグエリア11の値を「10」と検出すると(図中▲8▼)、プロセスBによるデータ転送が完了したことを認識して、データエリア12を初期化したうえで、制御用フラグエリア11の値を初期値である「00」に戻す(有効フラグ111をOFF設定する(図中▲9▼))。これによって、一連のデータ転送処理は完了する。なお、この状態においては、プロセスBは制御用フラグエリア11へのポーリングのみ行っている。
【0035】
このように、制御用フラグエリア11の状態に応じて上記の順序で両プロセスが動作し、データ転送処理が行われる。
(プロセスの動作)
次に、本実施の形態のデータ転送処理におけるプロセスA、B各々の動作について、管理部A2、B2を中心に図面を参照しながら説明する。
【0036】
図4は、プロセスAの動作を示すフローチャートである。
先ず、プロセスAの起動に合わせて、管理部A2は制御用フラグエリア11へのポーリングを開始し、制御用フラグエリア11の値を「00」と検出するまでポーリングを繰り返す(S401:Yes)。そして、データ処理部A1に指示して転送用データの生成とデータエリア12への書き込みを行わせ(S402)、データ処理部A1からの書き込み完了の通知を待って(S403:Yes)、変化フラグ112をON設定(「00」→「01」)する(S404)。
【0037】
次いで、管理部A2は、データ処理部A1からの出力タイミング決定の通知を待って(S405:Yes)、有効フラグ111をON設定(「01」→「11」)する(S406)。
その後、管理部A2は制御用フラグエリア11のポーリングを再開し、その値を「10」と検出すまで繰り返す(S407)。そして。「10」と検出すると、データ処理部A1に指示してデータエリア12の初期化を行わせ(S408)、データ処理部A1からの初期化完了の通知を待って(S409:Yes)、有効フラグ111をOFF設定(「10」→「00」)する(S410)。
【0038】
図5は、プロセスBの動作を示すフローチャートである。
先ず、プロセスBの起動に合わせて、管理部B2は制御用フラグエリア11へのポーリングを開始し、制御用フラグエリア11の値を「11」と検出するまでポーリングを繰り返す(S501:Yes)。そして、データ処理部B1に指示して、転送用データのデータエリア12からの読み出し、加工、転送先への転送という一連の処理を行わせ(S502)、データ処理部B1から転送まで完了の通知を待って(S503:Yes)、変化フラグ112をOFF設定(「11」→「10」)する(S504)。
【0039】
プロセスA、Bは上記の動作を行うことでデータ転送処理を実現するが、ここでは、両プロセスの共有メモリ10へのアクセスについて、ハードウェアのビジー信号などによる排他制御は行っていない。そのため、制御用フラグエリア11の更新と参照(ポーリング)とが衝突して、参照された値が不定となる事態が生じる。上記データ転送処理が正しく行われるには、制御用ビット部12の更新と参照とが衝突して参照された制御用ビットの値が不定となっても、それが原因でデータ転送処理の手順が狂ってしまう(例えば、プロセスAによるデータの書き込みが終っていない時点でプロセスBによるデータ読み出しが始まってしまう)などの誤動作が発生しないことが前提条件となる。
(動作の検証)
本実施例においては、処理の進行状況に沿って制御用フラグエリア11の値が「符号間距離=1」で遷移するように、処理の進行状況と制御用フラグエリア11の値とを対応づけることで、参照された制御用ビットの値が不定となっても誤動作が発生しないようにしている。
【0040】
以下、制御用フラグエリア11の値が更新されるタイミングごとに、フラグ更新とフラグ参照とが衝突した場合の両プロセスの動作を検証し、参照された制御用フラグエリア11の値が不定となっても誤動作が発生しないことを確認する。制御用フラグエリア11の値の更新は4ヵ所で行われるので、順次検証していく。
(1)「00」→「01」のタイミング
図6は、プロセスAが、データエリア12への転送データ書き込み開始時点で変化フラグ112をON設定する際に(図3の▲2▼)、プロセスBのポーリングによる制御用フラグエリア11の参照が衝突した場合を示す。
【0041】
この場合、制御用フラグエリア11のうち更新対象の変化フラグ112の値のみが不定になるので、プロセスBは、制御用フラグエリア11の値を「00」または「01」と認識する。
プロセスBは、有効フラグ111がONとなっている場合に限ってデータエリア12へのアクセスが可能なので、上記いずれのパターンに読み取っても、プロセスBは制御用フラグエリア11へのポーリングを繰り返すのみである。よって、誤動作は発生しない。
【0042】
(2)「01」→「11」のタイミング
図7は、プロセスAが、データエリア12への転送データ書き込みを完了した時点で有効フラグ111をON設定する際に、プロセスBによる制御用フラグエリア11の参照が衝突した場合を示す。
【0043】
この場合、制御用フラグエリア11のうち更新対象の有効フラグ111の値のみが不定になるので、プロセスBは、制御用フラグエリア11の値を「01」または「11」と認識する。
「11」と認識した場合、有効フラグ111がONなので、プロセスBは手順通りにデータエリア12にアクセスしてデータの読み出し・転送を開始する。この時点では、実際に転送データのデータエリア12への書き込みは完了しているので、転送データを正しく読み出すことができ、誤動作は発生しない。
【0044】
逆に「01」と認識した場合、プロセスBはアクセス衝突の前の状態に戻るが、有効フラグ111がOFFなので、その後も一定の時間間隔で制御用フラグエリア11の参照を繰り返す。次回のポーリングでは、制御用フラグエリア11の値はもはや不定ではなく、プロセスBは、制御用フラグエリア11の値を正しく「11」と読み出して、手順通りに転送データの読み出し・転送を開始することになり、誤動作は発生しない。
【0045】
(3)「11」→「10」のタイミング
図8は、プロセスBが、データエリア12からの転送データ読み出しを完了した時点で変化フラグ112をOFF設定する際に、プロセスAのポーリングによる制御用フラグエリア11の参照処理が衝突した場合を示す。
【0046】
この場合、制御用フラグエリア11のうち更新対象の変化フラグ112の値のみが不定になるので、プロセスAは、制御用フラグエリア11の値を「11」または「10」と認識する。
「10」と認識した場合、変化フラグ112がOFFなので、プロセスAは、プロセスBによる転送データ読み出し・転送が完了したと判断して、共有メモリ10を初期化(データエリア11のクリアおよび有効フラグ111のOFF設定)を行い、データ転送処理を終了させる。この時点では、転送データの読み出し・転送は実際に完了しているので、共有メモリ10を初期化して処理を終了させても問題は発生しない。
【0047】
逆に「11」と認識した場合、プロセスAは、アクセス衝突の前の状態に戻り、プロセスBによる転送データ読み出し・転送が未だに完了していないものと判断して、その後もポーリングによる制御用フラグエリア11の参照を繰り返し、制御用フラグエリア11の値が「10」となるのを待ち続ける。次回のポーリングでは、制御用フラグエリア11の値はもはや不定ではなく、プロセスAは、制御用フラグエリア11の値を正しく「10」と認識して、手順通りに共有メモリ10の初期化を行うことになるので、誤動作は発生しない。
【0048】
(4)「10」→「00」のタイミング
図9は、プロセスBによるデータ読み出し・転送が終了したと判定したプロセスAが、有効フラグ111をOFF設定する際に、プロセスBによる制御用フラグエリア11の参照が衝突した場合を示す。
【0049】
この場合は、制御用フラグエリア11のうち更新対象の有効フラグ111の値のみが不定になり、プロセスBは、制御用フラグエリア11の値を「10」または「00」と認識する。
いずれの場合においても、プロセスBは、図3を参照しながらすでに説明した通り、制御用フラグエリア11へのポーリングのみ行うので、誤動作が発生することはない。
(まとめ)
このように、本実施の形態においては、アクセスの衝突によって参照された制御用フラグエリア11の値が不定となっても、それが誤動作につながることがないよう、両プロセス、特にその中の管理部A2、B2の動作が規定されているので、ハードウェアによる排他制御がなくてもデータ転送処理は正しく行われる。その規定の内容とその意味とについて、以下、図面を参照しながら説明する。
【0050】
図10は、本実施の形態における両プロセスの共有メモリ10へのアクセスの内容を、制御用フラグエリア11の遷移にそって表形式で示した図である。
図11は、本変形例における制御用フラグエリア11の状態遷移を示す図である。
これまでの説明と図10、11から分かるように、本実施の形態では、2つのプロセスが、共同してデータ転送処理を行う。両プロセスは、転送処理の4段階の進行状況に沿って制御用フラグエリア11の値も「符号間距離=1」で遷移させている。そのために、転送処理の進行から考えると必ずしも設ける必要のない「01」(データ書き込みのみ完了、読み出し・加工は許可せず)という状態を設けている。これによって、制御用フラグエリア11の値が「00」→「11」と更新されて2ビットの値が不定となることを防止しているのである。
【0051】
「符号間距離=1」で制御用フラグエリア11の値を遷移させる、という規則を設定したことで、一方のプロセスによる制御用フラグエリア11更新動作にもう一方のプロセスによる制御用フラグエリア11の参照が衝突した場合、1ビットの値しか不定にならない。そのため、参照側プロセスは制御用フラグエリア11の値を必ず2つのパターンのいずれかに認識することになる。1つは正しい値(フラグ更新側のプロセスが意図した通りの更新後の値)であり、もう1つはフラグ更新側のプロセスが更新を行う前の値である。
【0052】
しかるに、図10に示すように、各段階において制御用フラグエリア11の参照を行う側のプロセスは、制御用フラグエリア11の値を所定の値と検出するまで制御用フラグエリア11の参照(ポーリング)のみを行って、転送処理の進行に関わる動作は行わず、一方、制御用フラグエリア11の更新を行う側のプロセスは、転送処理の進行に関わる動作を完了した上で、制御用フラグエリア11の値を1ビットだけ更新するようになっている。
【0053】
その結果、正しい値に認識した場合は当然、参照側プロセスは手順通りにその後の動作を行う。一方、更新前の値に認識した場合、読み出し側プロセスは衝突が発生したフラグ参照動作を行う前の状態に戻ることになり、制御用フラグエリア11の参照を再び行う。そして次回の参照では、制御用フラグエリア11の値を正しく更新後の値に認識して手順通りに次の動作を行うことになる。
【0054】
誤動作とは、参照側のプロセスが制御用フラグの値を誤って認識した結果、フラグを更新した側のプロセスの意図と異なる動作を行ったり、手順と異なる動作を行ったりすることである。しかし、本実施の形態の場合、上記の通り、参照側プロセスがフラグを誤って更新前の値に認識しても、フラグ参照動作(ポーリング)を1回多く行うだけで、最終的にはフラグ更新側プロセスの意図を正しく認識して手順通りの動作を行うので、誤動作は発生しないのである。
【0055】
なお、本実施の形態においては、更に、共有メモリ10の中には、制御情報以外の情報を設定するためのエリア(データエリア12)も存在するが、このエリアについては一部の制御用フラグ(変化フラグ112)によって誤動作の原因となるアクセスの衝突を防止している。つまり、共有メモリ10のうちデータエリア12については制御用フラグエリア11に設定した情報でアクセスの衝突を防止し、制御用フラグエリア11の値については、上記の通り、アクセスが衝突して読み出した値が不定となっても誤動作が発生しないようにしてある。
【0056】
これは、本実施の形態によれば、共有メモリ内に制御用フラグエリアしか存在しない場合はもちろん、制御用フラグ以外の情報が設定されるエリアと混在する場合にも、共有メモリへのハードウェアによる排他制御なしで、誤動作なく処理を実行することができる、ということを示している。
また、本実施の形態では、制御情報に含まれる個々のビットをフラグとして使用することとなっているが、制御情報をフラグの集まりとしてでなく、複数ビットのビットパターンとして参照する場合でも、処理の進行に伴うビットパターンの遷移が、「符号間距離=1」という規則に従ってさえいれば、本実施の形態と同様の効果を得ることが可能である。
【0057】
また、上記実施の形態における制御用フラグエリアは2ビットであったが、本発明は3ビット以上の制御用フラグエリアを用いる場合にも適用できる。例えば、上記実施の形態において「データ転送」実施タイミングの指示である有効フラグ111を、「加工パターンAまたは加工パターンBで加工の上転送させる」指示である転送指示ビット列(2ビット、01:パターンAで加工・転送、10:パターンBで加工・転送)に置き換えた場合を考えてみる。
【0058】
本変形例におけるデータ転送処理の流れを制御用フラグエリアの値の変化とともに説明する。実施の形態と同じ部分については説明を省略する。
▲1▼ 000: プロセスAによるデータエリア12への転送データの書き込みが完了していない状態であることを示す。実施の形態における「00」(図3参照)と同じ。
▲2▼ 001: プロセスAによるデータエリア12への転送データの書き込みが完了しているが、プロセスBによる転送データの読み出し・転送は認められない状態であることを示す。実施の形態における「01」(図3参照)と同じ。
▲3▼ 011または101: プロセスBによる転送データの読み出し・転送が認められた状態。実施の形態における「11」(図3参照)に対応する。プロセスBは、転送データを読み出して、「011」の場合はパターンAで、「101」の場合はパターンBで加工して転送先へ転送する。
▲4▼ 010または100: プロセスBによるデータエリア12からの転送データの読み出し・転送が終了した状態。実施の形態における「10」(図3参照)に対応する。ここからプロセスAが共有メモリを初期化して、▲1▼に戻る。
【0059】
図12は、本変形例における制御用フラグエリアの状態遷移を示す図である。
同図に示すように、本変形例においても制御用フラグエリアの値は、▲1▼「000」→▲2▼「001」→▲3▼「101」→▲4▼「100」→▲1▼「000」または、▲1▼「000」→▲2▼「001」→▲3▼「011」→▲4▼「010」→▲1▼「000」と、符号間距離「1」で遷移する。また、制御用フラグエリア11の参照を行う側のプロセスは、制御用フラグエリアの値を所定の値と検出するまで制御用フラグエリアの参照のみを行って、作業の進行に関わる動作は行わない点は上記実施の形態と同じである。よって、実施の形態で述べた通り、共有メモリへの排他制御を行わなくとも誤動作は発生しない。
【0060】
なお、上記の実施の形態および変形例においては、複数プロセスが行う処理としてデータ転送処理を取り上げて説明したが、これは一例として挙げたもので、本発明の範囲をデータ転送処理に限定するものではない。例えば、あるプロセスが他のプロセスに対してデータを渡し、そのデータに何らかの加工をさせた上で返させる、といった処理も考えられる。この場合、制御用情報は加工前後のデータ受け渡しのタイミングや、加工の種類などを指示するのに使われる。しかし、処理内容がどのようなものであっても、その進行を「符号間距離=1」で遷移する制御用情報と対応づけて管理することのできる内容であれば適用可能である。
【0061】
【発明の効果】
以上説明したように、本発明の共有メモリアクセス管理装置は、デュアルポート型メモリを共有する複数のプロセスが前記メモリを用いながら協同して処理を行う環境において、各プロセスが、自プロセスの前記メモリへのアクセスを管理するために備える共有メモリアクセス管理装置であって、前記メモリには、複数ビットから成って、前記複数のプロセスが協同して行う処理の進行に従って値が更新される制御情報が含まれており、共有メモリアクセス管理装置は、前記制御情報の値を検出する検出手段と、前記制御情報の値を更新する更新手段と、前記検出手段が検出する制御情報の値が他プロセスによって更新されて所定の値に変化するまで前記検出手段に前記制御情報の値を検出する動作を繰り返させ、前記検出手段が検出した値が前記所定の値に変化すると、自プロセスに指示して前記処理に関わる動作を行わせ、前記自プロセスによる動作が完了すると前記更新手段に指示して前記制御情報のうち前記動作に関わる1のビットを更新させる指示手段とから成る、という特徴を有するので、共有メモリ内の複数ビットから成る制御用情報については、ハードウェアによる排他制御を行わなくとも、制御用情報を用いて前記複数のプロセスが実行する処理に誤動作が発生することはない。
【0062】
さらに、前記共有メモリは、前記複数のプロセスが前記制御情報以外のデータを受け渡しするために用いるデータ部を含み、前記制御情報は、前記データ部に対する排他制御のための排他制御用フラグを1以上含み、前記複数のプロセスが協同して行う処理は、前記データ部を介して行われるデータの受け渡しであり、前記指示手段は、前記検知手段が検知した前記排他制御用フラグの値に基づいて、前記データの受け渡しに関する動作を前記プロセスに行わせ、前記動作が完了すると、前記更新手段に指示して前記排他制御用フラグ1ビットを更新させる、とすることもできる。これにより、共有メモリに制御用情報とそれ以外のデータを格納するエリアとが混在する場合は、制御用情報以外のデータを格納するエリアについては制御用情報の一部として設定される排他制御用情報によって排他制御を実現し、制御用情報を設定するエリアについては、排他制御なしでも誤動作が発生することはないので、共有メモリ全体についてもハードウェアによる排他制御を行う必要はなく、それによって前記複数のプロセスが実行する処理に誤動作が発生することもない。
【0063】
なお、上記の効果を確実に得るために、前記指示手段が前記自プロセスに行わせた動作が完了した後に前記制御情報の複数ビットを反転させる場合、前記複数のビットの各々について、順次前記更新手段に指示して反転させること、としてもよい。
そして、デュアルポート型メモリを共有する複数のプロセスが前記メモリを用いてデータ通信を行うデータ通信方法であって、前記メモリには、データ通信の進行に従って前記複数のプロセスによって値が更新される複数ビットから成るフラグが含まれ、前記データ通信方法は、一のプロセスが前記メモリにデータを書き込む書き込みステップと、前記書き込みステップを終えた前記一のプロセスが、前記フラグに含まれる一のビットを反転させる第1の反転ステップと、前記第1の反転ステップを終えた前記一のプロセスが、前記フラグに含まれる他の一のビットを反転させる第2の反転ステップと、他の一のプロセスが、前記一のビットおよび前記他の一のビットの反転を検知する検知ステップと、前記検知ステップを終えた前記他の一のプロセスが、前記メモリに書き込まれたデータを読み出す読み出しステップとを含むことを特徴とするデータ通信方法とすれば、ハードウェアによる共有メモリへの排他制御を行わなくとも、誤動作なくデータ通信を実行できる
【図面の簡単な説明】
【図1】本発明に関わる共有メモリアクセス管理装置の実施の形態において、複数プロセスが共有メモリを用いて行う転送処理の概要を示す模式図である。
【図2】同実施の形態における共有メモリの構成を示す図である。
【図3】同実施の形態における転送処理の進行とそれに伴なう共有メモリの内容の遷移とを示す模式図である。
【図4】同実施の形態におけるプロセスAの動作を示すフローチャートである。
【図5】同実施の形態におけるプロセスBの動作を示すフローチャートである。
【図6】同実施の形態における制御用フラグエリアへのアクセスの衝突の結果を示す模式図である。
【図7】同実施の形態における制御用フラグエリアへのアクセスの衝突の結果を示す模式図である。
【図8】同実施の形態における制御用フラグエリアへのアクセスの衝突の結果を示す模式図である。
【図9】同実施の形態における制御用フラグエリアへのアクセスの衝突の結果を示す模式図である。
【図10】同実施の形態における制御用フラグエリアの値と複数プロセスによる共有メモリアクセスの内容との関係を表形式で示す図である。
【図11】同実施の形態における制御用フラグエリアの値の遷移を示す状態遷移図である。
【図12】同実施の形態の変形例における制御用フラグエリアの値の遷移を示す状態遷移図である。
【符号の説明】
1 共有メモリ
11 制御用フラグエリア
111 有効フラグ
112 変化フラグ
12 データエリア
120 データ
A、B プロセス
A1、B1 データ処理部
A2、B2 管理部
Claims (3)
- デュアルポート型メモリを共有する複数のプロセスが前記メモリを用いながら協同して処理を行う環境において、各プロセスが、自プロセスの前記メモリへのアクセスを管理するために備える共有メモリアクセス管理装置であって、
前記メモリには、複数ビットから成って、前記複数のプロセスが協同して行う処理の進行に従って値が更新される制御情報が含まれており、
前記共有メモリアクセス管理装置は、
前記制御情報の値を検出する検出手段と、
前記制御情報の値を更新する更新手段と、
前記検出手段が検出する制御情報の値が他プロセスによって更新されて所定の値に変化するまで前記検出手段に前記制御情報の値を検出する動作を繰り返させ、前記検出手段が検出した値が前記所定の値に変化すると、自プロセスに指示して前記処理に関わる動作を行わせ、前記自プロセスによる動作が完了した後に前記制御情報の複数ビットを反転させる場合、前記複数のビットの各々について、順次前記更新手段に指示して反転させて前記他プロセスに前記処理の進行を伝達する指示手段、
とから成ることを特徴とする共有メモリアクセス管理装置。 - 前記共有メモリは、前記複数のプロセスが前記制御情報以外のデータを受け渡しするために用いるデータ部を含み、
前記制御情報は、前記データ部に対する排他制御のための排他制御用フラグを1以上含み、
前記複数のプロセスが協同して行う処理は、前記データ部を介して行われるデータの受け渡しであり、
前記指示手段は、前記検知手段が検知した前記排他制御用フラグの値に基づいて、前記データの受け渡しに関する動作を前記自プロセスに行わせ、前記動作が完了した後に、前記排他制御用フラグの複数ビットを反転させる場合、前記複数のビットの各々について、順次前記更新手段に指示して反転させること
を特徴とする請求項1に記載の共有メモリアクセス管理装置。 - デュアルポート型メモリを共有する複数のプロセスが前記メモリを用いてデータ通信を行うデータ通信方法であって、
前記メモリには、データ通信の進行に従って前記複数のプロセスによって値が更新される複数ビットから成るフラグが含まれ、前記データ通信方法は、
一のプロセスが前記メモリにデータを書き込む書き込みステップと、
前記書き込みステップを終えた前記一のプロセスが、前記フラグに含まれる一のビットを反転させる第1の反転ステップと、
前記第1の反転ステップを終えた前記一のプロセスが、前記フラグに含まれる他の一のビットを反転させる第2の反転ステップと、
他の一のプロセスが、前記一のビットおよび前記他の一のビットの反転を検知する検知ステップと、
前記検知ステップを終えた前記他の一のプロセスが、前記メモリに書き込まれたデータを読み出す読み出しステップと
を含むことを特徴とするデータ通信方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2000003464A JP3790653B2 (ja) | 1999-04-19 | 2000-01-12 | 共有メモリアクセス管理装置 |
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP11072399 | 1999-04-19 | ||
| JP11-110723 | 1999-04-19 | ||
| JP2000003464A JP3790653B2 (ja) | 1999-04-19 | 2000-01-12 | 共有メモリアクセス管理装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2001005720A JP2001005720A (ja) | 2001-01-12 |
| JP3790653B2 true JP3790653B2 (ja) | 2006-06-28 |
Family
ID=26450279
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2000003464A Expired - Fee Related JP3790653B2 (ja) | 1999-04-19 | 2000-01-12 | 共有メモリアクセス管理装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP3790653B2 (ja) |
Families Citing this family (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2003140972A (ja) | 2001-11-08 | 2003-05-16 | Nec Corp | プログラム実行装置及びプログラム実行方法並びにそれを用いた携帯端末及び情報提供システム |
| US9189230B2 (en) | 2004-03-31 | 2015-11-17 | Intel Corporation | Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution |
| US8447933B2 (en) | 2007-03-06 | 2013-05-21 | Nec Corporation | Memory access control system, memory access control method, and program thereof |
| JP4833911B2 (ja) * | 2007-04-25 | 2011-12-07 | 株式会社ソニー・コンピュータエンタテインメント | プロセッサユニットおよび情報処理方法 |
| WO2009040932A1 (ja) * | 2007-09-28 | 2009-04-02 | Fujitsu Limited | 制御装置,制御方法,電子機器および伝送装置 |
| DE102017200669A1 (de) | 2017-01-17 | 2018-07-19 | Robert Bosch Gmbh | Verfahren und Vorrichtung zum Betreiben eines Steuergeräts, Computerprogramm und Verfahren zum Generieren des Computerprogramms |
| US11392427B2 (en) * | 2020-01-06 | 2022-07-19 | Microsoft Technology Licensing, Llc | Lock-free reading of unitary value sets |
| JP7639567B2 (ja) * | 2021-06-16 | 2025-03-05 | 株式会社明電舎 | 共有メモリを用いた処理システム、共有メモリを用いた処理方法 |
-
2000
- 2000-01-12 JP JP2000003464A patent/JP3790653B2/ja not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| JP2001005720A (ja) | 2001-01-12 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| FI92262B (fi) | Joustava väyläjärjestelmä | |
| USRE44270E1 (en) | System for providing access of multiple data buffers to a data retaining and processing device | |
| US11614986B2 (en) | Non-volatile memory switch with host isolation | |
| JP4410190B2 (ja) | PCI−Express通信システム | |
| EP0534662A2 (en) | Bus-to-bus interface for preventing data incoherence in a multiple processor computer system | |
| CN110580235B (zh) | 一种sas扩展器通信方法及装置 | |
| US11847079B2 (en) | Dynamic addressing system and method in a digital communication interface | |
| JP3790653B2 (ja) | 共有メモリアクセス管理装置 | |
| CN101669098A (zh) | 始发设备通知方法和设备 | |
| JP4640126B2 (ja) | サイドバンド・バス設定回路 | |
| JPS62206658A (ja) | 記憶管理装置 | |
| CN107301138A (zh) | 一种串行总线桥接方法及串行总线系统 | |
| WO2012046634A1 (ja) | 電子装置およびシリアルデータ通信方法 | |
| JP4451837B2 (ja) | データ転送装置およびデータ転送方法 | |
| KR100815004B1 (ko) | 제어 방법 및 전자 장치 | |
| JP2002215557A (ja) | Pciバスの障害解析容易化方式 | |
| US6907503B2 (en) | Dual port RAM communication protocol | |
| JP4918284B2 (ja) | PCI−Express通信システム | |
| JPH0238969B2 (ja) | ||
| CN114691386B (zh) | 事件触发主控端、控制芯片及控制方法 | |
| JP7476733B2 (ja) | 通信制御機器および通信制御機器の制御方法 | |
| JP3695334B2 (ja) | 通信端末の内部通信方法 | |
| US20040148418A1 (en) | Industrial or domestic local network | |
| JPS63228856A (ja) | 通信制御装置 | |
| JP6885801B2 (ja) | バンク方式のデュアルポートメモリ |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20051213 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060124 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060307 |
|
| TRDD | Decision of grant or rejection written | ||
| A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060322 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060403 |
|
| R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 3790653 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100407 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110407 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120407 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130407 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130407 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140407 Year of fee payment: 8 |
|
| LAPS | Cancellation because of no payment of annual fees |