知識マップ: Adaにおける安全な並行処理 ── タスクと保護オブジェクトの実践ガイド
記事「Adaにおける安全な並行処理 ── タスクと保護オブジェクトの実践ガイド」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Adaのタスクはentryとacceptによるランデブーで外部と同期通信し、選択的アクセプト(select文)は複数のエントリをガード条件付きで待ち受けつつor terminateでデッドロックの原因になる待ち続けるサーバータスクを避けられる。保護オブジェクトは言語管理の排他制御で、エントリのバリア条件が真になるまで呼び出し側を待たせて共有データへの排他アクセスを保証しデータ競合を防ぐ一方、保護操作内でdelayなど禁止された処理を行うと限定エラーに該当し、処理系によってはデッドロックにつながる。優先度上限プロトコルは保護オブジェクトにシーリング優先度を設定して優先度逆転を防ぎ、Rate Monotonic Schedulingの理論的背景のもとでリアルタイム性が支えられる。Ravenscarプロファイルはタスクモデルを制限して静的なデッドロック解析を可能にする。
flowchart LR
accTitle: Adaのタスクと保護オブジェクトの知識マップ
accDescr: Adaのタスクがランデブーで同期通信し選択的アクセプトがデッドロックを避けつつ複数エントリを待ち受けること、保護オブジェクトがバリアで排他制御しデータ競合を防ぐこと、優先度上限プロトコルとRavenscarプロファイルがリアルタイム性を支えることを示す図。
ada_task["Adaのタスク(並行処理)"]
protected_object["保護オブジェクト(protected object)"]
ada["Ada(プログラミング言語)"]
rendezvous["ランデブー(rendezvous)"]
selective_accept["選択的アクセプト(select文)"]
deadlock["デッドロック(deadlock)"]
barrier["バリア(保護エントリのwhen条件)"]
data_race["データ競合(data race)"]
erroneous_execution["誤った実行(erroneous execution)"]
bounded_error["限定エラー(bounded error)"]
priority_ceiling_protocol["優先度上限プロトコル(Priority Ceiling Protocol)"]
priority_inversion["優先度逆転(priority inversion)"]
task_priority["タスク優先度(pragma Priority)"]
rate_monotonic_scheduling["Rate Monotonic Scheduling(RMS)"]
ravenscar_profile["Ravenscarプロファイル"]
ada_task -->|"前提とする"| ada
protected_object -->|"前提とする"| ada
ada_task -->|"利用する"| rendezvous
selective_accept -->|"利用する"| rendezvous
selective_accept -.->|"防止する"| deadlock
protected_object -.->|"利用する"| barrier
protected_object -->|"防止する"| data_race
data_race -->|"原因になり得る"| erroneous_execution
bounded_error -.->|"原因になり得る"| deadlock
protected_object -.->|"原因になり得る"| bounded_error
priority_ceiling_protocol -->|"防止する"| priority_inversion
priority_ceiling_protocol -->|"前提とする"| protected_object
priority_ceiling_protocol -->|"利用する"| task_priority
rate_monotonic_scheduling -->|"利用する"| task_priority
rate_monotonic_scheduling -.->|"推奨される対応"| ada_task
ravenscar_profile -.->|"軽減する"| deadlock
ravenscar_profile -->|"前提とする"| ada_task
ada_task -.->|"原因になり得る"| priority_inversion
ada_task -.->|"で構成できる"| task_priority
rendezvous -.->|"軽減する"| deadlock
概念間の関係(全20件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Adaのタスク(並行処理)はAda(プログラミング言語)を前提とします。
- 保護オブジェクト(protected object)はAda(プログラミング言語)を前提とします。
- Adaのタスク(並行処理)はランデブー(rendezvous)を利用します。
- 選択的アクセプト(select文)はランデブー(rendezvous)を利用します。
- 選択的アクセプト(select文)はデッドロック(deadlock)を防ぎます。
- 保護オブジェクト(protected object)はバリア(保護エントリのwhen条件)を利用します。
- 保護オブジェクト(protected object)はデータ競合(data race)を防ぎます。
- データ競合(data race)は誤った実行(erroneous execution)の原因になることがあります。
- 限定エラー(bounded error)はデッドロック(deadlock)の原因になることがあります。
- 保護オブジェクト(protected object)は限定エラー(bounded error)の原因になることがあります。
- 優先度上限プロトコル(Priority Ceiling Protocol)は優先度逆転(priority inversion)を防ぎます。
- 優先度上限プロトコル(Priority Ceiling Protocol)は保護オブジェクト(protected object)を前提とします。
- 優先度上限プロトコル(Priority Ceiling Protocol)はタスク優先度(pragma Priority)を利用します。
- Rate Monotonic Scheduling(RMS)はタスク優先度(pragma Priority)を利用します。
- Rate Monotonic Scheduling(RMS)はAdaのタスク(並行処理)に対する本記事の推奨です。
- Ravenscarプロファイルはデッドロック(deadlock)を軽減します。
- RavenscarプロファイルはAdaのタスク(並行処理)を前提とします。
- Adaのタスク(並行処理)は優先度逆転(priority inversion)の原因になることがあります。
- Adaのタスク(並行処理)はタスク優先度(pragma Priority)で構成できます。
- ランデブー(rendezvous)はデッドロック(deadlock)を軽減します。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。