I-26-4. システムリソースの配分の仕組み(セマフォ、キュー、等)

組み込みシステムにおいては、システムリソースが限定されているため様々な工夫が必要になる。各アプリケーションが限られたシステム資源を効率的に共有する方法について、セマフォ、キュー、といった具体的な実装方法を踏まえて、その内容と特徴を説明する。

【学習の要点】

* 組み込みシステムにおいては、CPUリソース、メモリリソース、ネットワークリソース、制御時間といったリソースの配分が重要である。

* 複数のタスクが共有資源にアクセスしようとした際に、整合性を保つために同時アクセスを禁止することを排他制御と呼ぶ。排他制御にはロックやデッカーのアルゴリズム、セマフォなどの方式が使われる。

* カーネルによって制御されているタスク間の排他制御手段としてセマフォがある。セマフォはタスクが共有資源にアクセスするために必要な鍵の役割を果たす。タスクは、セマフォを取得することで共有資源にアクセス可能になる。

* タスク間通信にキューを用いてメッセージを交換することで、同期をする方式もある。

図I-26-4. アクティビティ同期の例(バリア同期)

【解説】

1) 資源配分技術

* 配分すべき資源には、CPU リソース、メモリリソース、ネットワークリソース、制御時間がある。

* クリティカルセクション

- 共有リソースにアクセスするコードの区間であり、プリエンプションが発生することによってデータの整合性などに問題が生じる可能性のある部分を指す。

* 同期制御と排他制御

- リソース同期

共有リソースの整合性を保つために複数タスク間での同期をすること。

- アクティビティ同期

タスクがアクティビティを他のタスクと同期すること。バリア同期がその例として挙げられる。バリア同期では、複数のタスクがある時間をバリアとして「待ち合わせ」をする。

- スピンロックによる排他制御

あるタスクがクリティカルセクションに入る直前にフラグをチェックすることで、他のタスクがクリティカルセクションに入っていないことを確認してからクリティカルセクションに入る。他のタスクがクリティカルセクションに入っている場合は、フラグをチェックし続ける。

* ハードウェアによる方法

- Test and Set命令は、スピンロックにおけるフラグのチェックをアトミックに実現する機械語命令である。

* ソフトウェアによる方法

- デッカーのアルゴリズム(I-24-9参照)、ランポートのパン屋のアルゴリズムといった相互排除のアルゴリズムが考案されている。

2) カーネルの提供する手段を使う方法

* セマフォ

セマフォはタスクが共有資源にアクセスするために必要な鍵の役割を果たす。セマフォを取得することで共有資源にアクセス可能になる。

- バイナリセマフォ

セマフォは0か1の値を持つ。0ならば共有資源は利用不可、1ならば利用可能である。

- ジェネラルセマフォ(カウンティングセマフォ)カウンタにより、共有資源へのアクセス権の複数回の取得や解放を管理できる。

* キューイング

- タスク間通信にキューを用いてメッセージを交換することで、同期をする方式もある。

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