I-6-10. プロセス間通信

プロセスの間でデータやメッセージを通信するための手段として提供されている共有メモリ、セマフォ、メッセージなどを紹介する。

【学習の要点】

* 実行中のプロセスは、専用のアドレス空間が割り当てられるため、他のプロセスのメモリ空間にはアクセスを行うことができない。

* 複数のプロセスの中で、情報の共有などの機能を提供するための仕組みが、プロセス間通信であり、共有メモリや同期、メッセージなどの実装方法がある。

図I-6-10. プロセス間でのメモリ共有

【解説】

1) プロセス間での通信

プロセス間通信とは、複数のプロセスの間で情報の共有やメッセージの交換などを行なう機能を提供するための仕組みである。基本的に、実行中のプロセスはプロセスごとに専用のメモリ空間(仮想アドレス空間)が、カーネルにより割り当てられる。これにより、他のプリセスのメモリ空間にはアクセスすることが出来ないため、情報の共有は不可能となる。複数のプロセスで情報の共有を実現させた場合には、プロセス間通信を実装しなければならない。プロセス間通信を実現するためには以下の方法が用いられる。

* 共有メモリ

* 同期

* プロセス間のメッセージ通信、ソケット通信

2) 共有メモリとは

メモリ空間上に共有する領域を確保する方法である。保護機能などは持たないので、動作そのものは高速である。当然、この領域は複数のプロセスからアクセスされるため、整合性を保つためにも何らかの手段を講じなければならない。

3) 同期とは

情報を、どんな場合であっても常に同一の状態と同一の内容に保つことが同期である。これには、情報が保存・格納されている場所などに左右されることはない。同期サービスを有効とするためには、たとえマルチタスクが実装されている状態であっても、リクエストが発生した順番通りに処理を実施しなければならない。同期を実装する手段として、以下がある。

* セマフォ

セマフォ変数を複数のプロセスで共有することにより資源の利用が可能かどうかを定める。セマフォ変数は、処理されていないイベント数を表すものである。プロセスは、この変数の示す値が正の整数値であれば1減算して資源を使用し、終了したら1を加算する。ただし、0の場合は正の整数値になるまで待機する。

* ミューテックス(ロック)

ミューテックスオブジェクトを作成しておき、プロセスが資源を使用したい場合にこれを所有する。もしもミューテックスオブジェクトの状態が、誰かに所有されている状態であれば、非所有状態となるまで待つ。資源の使用が終わったなら、ミューテックスオブジェクトの開放(=非所有状態)を行う。

4) メッセージ

オブジェクト指向プログラミングにおいて、メッセージ機能によりオブジェクト間での通信が可能となる。これを流用して、情報の共有を実現する。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。