I-26-5. システムリソースの共有の仕組み(共有ファイル、デッドロック回避、等)

複数の組み込みアプリケーション同士でシステムリソースを共有する方法を、共有エリア・共有ファイル、カーネルによる各種のサービス、デッドロックの回避、割り込みディスパッチなどの具体的な実装を挙げて説明する。

【学習の要点】

* アプリケーションプロセス間で共有するデータの参照方式にはシンボル参照、ファイル参照などがある。

* デッドロックを処理する戦略として、デッドロック検出と復旧、デッドロック回避、デッドロック予防がある。

図I-26-5. デッドロックを起こす状況の例

【解説】

1) 共有データの参照

組み込みソフトウェアは、モジュール化が進んでいるため、タスク間でデータやライブラリを共有することが多い。

* シンボル参照

- プロセス空間内の同一領域に、共有データ領域を予約しておく方式。

* ファイル参照

- メモリ上に擬似的にファイルを構成することで、共有ファイルとしてデータの読み書きを行う方式。

2) カーネルによるサービス

* メッセージキュー

- 2つのタスク間のデータ通信などに利用されるカーネルオブジェクト。

* パイプ

- タスク間のデータ交換機構。データは片方のディスクリプタに書き込まれ、もう片方のディスクリプタから読み取られる。Linuxなどのシェルにおいてパイプは”|”記号で表現され、頻繁に利用される。

3) デッドロック

* デッドロックとは、複数のタスクがリソース要件を満たせずに処理が全く進まなくなってしまう状態である。

* デッドロックを処理する戦略として、デッドロック検出と復旧、デッドロック回避、デッドロック予防がある。これらはリアルタイムOSの機能として提供される。

4) 割り込みスケジューリング(ディスパッチング)

* ディスパッチャはスケジューラの一部であり、実際のコンテキストスイッチ処理を行う。

* システムコールを行う主体がタスクか割り込みサービスルーチン(Interrupt service routines: ISR)かによって処理が異なり、ISRが優先される。

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