知識マップ: Adaにおける安全な並行処理 ── タスクと保護オブジェクトの実践ガイド

記事「Adaにおける安全な並行処理 ── タスクと保護オブジェクトの実践ガイド」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

Adaのタスクはentryとacceptによるランデブーで外部と同期通信し、選択的アクセプト(select文)は複数のエントリをガード条件付きで待ち受けつつor terminateでデッドロックの原因になる待ち続けるサーバータスクを避けられる。保護オブジェクトは言語管理の排他制御で、エントリのバリア条件が真になるまで呼び出し側を待たせて共有データへの排他アクセスを保証しデータ競合を防ぐ一方、保護操作内でdelayなど禁止された処理を行うと限定エラーに該当し、処理系によってはデッドロックにつながる。優先度上限プロトコルは保護オブジェクトにシーリング優先度を設定して優先度逆転を防ぎ、Rate Monotonic Schedulingの理論的背景のもとでリアルタイム性が支えられる。Ravenscarプロファイルはタスクモデルを制限して静的なデッドロック解析を可能にする。

Adaのタスクと保護オブジェクトの知識マップAdaのタスクがランデブーで同期通信し選択的アクセプトがデッドロックを避けつつ複数エントリを待ち受けること、保護オブジェクトがバリアで排他制御しデータ競合を防ぐこと、優先度上限プロトコルとRavenscarプロファイルがリアルタイム性を支えることを示す図。前提とする前提とする利用する利用する防止する利用する防止する原因になり得る原因になり得る原因になり得る防止する前提とする利用する利用する推奨される対応軽減する前提とする原因になり得るで構成できる軽減するAdaのタスク(並行処理)保護オブジェクト(protected object)Ada(プログラミング言語)ランデブー(rendezvous)選択的アクセプト(select文)デッドロック(deadlock)バリア(保護エントリのwhen条件)データ競合(data race)誤った実行(erroneous execution)限定エラー(bounded error)優先度上限プロトコル(Priority Ceiling Protocol)優先度逆転(priority inversion)タスク優先度(pragma Priority)Rate Monotonic Scheduling(RMS)Ravenscarプロファイル

概念間の関係(全20件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

Adaのタスク(並行処理)
スレッドをOSのAPIやライブラリに頼らず、言語仕様に組み込む形で提供するAdaの並行実行単位。
保護オブジェクト(protected object)
procedure・function・entryの3種の操作を通じてのみ内部データへアクセスさせ、排他制御を言語が保証するAda 95で導入された機構。
選択的アクセプト(select文)
複数のエントリへの呼び出しをselect文の複数のor分岐で待ち受け、ガード条件やterminateも組み合わせられるAdaの構文である。
データ競合(data race)
複数のタスクが同じメモリ位置に同時アクセスし、少なくとも一方が書き込みであるために結果が未定義になる状態である。
限定エラー(bounded error)
起こりうる結果の範囲は規格が定めるが、そのどれになるかは規格が保証しない種類のAdaのエラーで、誤った実行より制限された概念である。
優先度上限プロトコル(Priority Ceiling Protocol)
各保護オブジェクトにシーリング優先度を設定し、オブジェクトのロック中はその優先度で実行させることで優先度逆転を防ぐプロトコルである。
Rate Monotonic Scheduling(RMS)
周期の短いタスクほど高い優先度を割り当てる固定優先度スケジューリング方式で、周期タスクの集合が締切を守れるかを実行前に解析できる。
Ravenscarプロファイル
動的タスク生成やselect文などを禁止し、Adaのタスク機能を静的解析可能で決定論的なサブセットに制限するプロファイル。
ランデブー(rendezvous)
呼び出し側のエントリ呼び出しとタスク側のaccept文が同時にランデブーポイントに達するまで互いに待ち合わせる、Adaのタスク間同期通信の仕組みである。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。