I-6-8. 同期と排他制御

プロセスの同期や排他が必要になる状況(デッドロック等)やカーネルによる管理について述べ、排他制御を実現するための実装技術やその背景となる基礎論理について触れる。またカーネルの内部で排他制御が実装されている具体的な例を示して説明する。

【学習の要点】

* マルチタスクは、排他制御機能を利用して資源の保護を行っているが、排他制御には欠陥があり、デッドロックなどが発生してしまう可能性がある。

* システム構築の際には、オブジェクト指向プログラミングなどを利用して、デッドロックが発生しないように注意すべきである。

* 排他制御を実現するための実装技術には、様々なものがある。また、カーネル内部でも排他制御は様々な箇所で使用されている。

図I-6-8. 排他制御

【解説】

1) デッドロックとは

デッドロックとは、2つ以上のプロセスが実行されている状態において、お互いに相手の処理が終了することを待つという状態となってしまい、外部から見るとプロセスが停止しているように見えることをいう。

* デッドロックは、排他制御の欠陥である。

マルチタスク機能においては、コンピュータ上の一つの資源に対して、同時に複数の要求が発行された場合に、全てのプロセスに対して排他制御を要求する。その結果としてデッドロックが発生してしまう。

* プロセス間の同期。

マルチタスク機能は、特定のプロセスが何らかのイベントを起こすまで、その他のプロセスに処理の続行を待たせることで、プロセス間の同期をとる場合がある。

* 排他制御とは。

複数のプロセスからの同時アクセスにおいて、データの整合性を保つために、1つのプロセスにのみ独占的に資源を利用をさせ、他のプロセスが利用できないようにすることを排他制御と呼ぶ。

* デッドロックを回避するため方法として以下のようなものがある。

- オブジェクト指向プログラミングを用いてシステムを構築する。

- Lock-freeとWait-freeアルゴリズムを用いる。

2) 排他制御を実現するための実装技術

排他制御を実現する場合には、以下に示す処理を実施する必要がある。ただし、この操作の途中で他に制御が渡ってしまうと排他制御は実現できない。

* 資源が他のプロセスによって占有されていないことを確認する。

* 資源を占有する。

排他制御を実現する方法としては以下のものがある。

* ミューテックス

* セマフォ

* 同期

* ロック

* スピンロック

* タスク切り替え禁止

* 割り込み禁止

3) カーネル内部での排他制御カーネル内部でも排他制御は様々な箇所で使用されている。メモリ管理、デバイス管理、およびマルチプロセッサ管理などである。

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