知識マップ: Adaによるリアルタイムシステムプログラミング ── 優先度・周期・実行時間制御の実践
記事「Adaによるリアルタイムシステムプログラミング ── 優先度・周期・実行時間制御の実践」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Adaの言語仕様Annex Dは、タスク優先度に基づくFIFO_Within_Priorities、保護オブジェクトへ自動的にシーリング優先度を割り当てるCeiling_Lockingプロトコル、累積ドリフトを防ぐdelay untilによる周期実行、静的解析を行いやすいRavenscarプロファイル、ポーリング不要のタイミングイベント、タスク単位の実行時間計測までを言語ランタイムそのものに組み込んでいる。Ceiling_Lockingは、1997年のMars Pathfinderで実際に発生し探査機のリセットを繰り返させた優先度逆転を、保護オブジェクトに入ったタスクをシーリング優先度へ自動昇格させることで防ぐ。Ravenscarプロファイルは相対delayやselect文などを禁止してAdaのタスクを静的タイミング解析しやすいサブセットに制限し、GNATではgnat.adcファイルへのプラグマ記述で有効化する。ただし優先度の実際のマッピングはOSとGNATランタイムに依存する。
flowchart LR
accTitle: Adaのリアルタイムシステムプログラミングの知識マップ
accDescr: Ada Annex Dが優先度ベースディスパッチ・Ceiling_Locking・delay until・Ravenscarプロファイル・タイミングイベント・実行時間計測をタスクと保護オブジェクトの上にどう組み込み、Ceiling_LockingがMars Pathfinderで起きたような優先度逆転をどう防ぐかを示す図。
ada_annex_d["Annex D(Adaのリアルタイムシステム標準)"]
ceiling_locking["Ceiling_Lockingプロトコル"]
fifo_within_priorities["FIFO_Within_Priorities"]
ada_delay_until["delay until(絶対時刻の遅延)"]
ravenscar_profile["Ravenscarプロファイル"]
ada_timing_events["タイミングイベント(Ada.Real_Time.Timing_Events)"]
ada_execution_time["Ada.Execution_Time(実行時間計測)"]
ada_task["Adaのタスク(並行処理)"]
protected_object["保護オブジェクト(protected object)"]
gnat["GNAT"]
priority_inversion["優先度逆転(priority inversion)"]
mars_pathfinder_priority_inversion["Mars Pathfinderの優先度逆転事故"]
ada_relative_delay["相対delay(delay文)"]
cumulative_drift["周期実行の累積ドリフト"]
ada_annex_d -->|"利用する"| fifo_within_priorities
ada_annex_d -->|"利用する"| ceiling_locking
ada_annex_d -->|"利用する"| ada_delay_until
ada_annex_d -->|"利用する"| ravenscar_profile
ada_annex_d -->|"利用する"| ada_timing_events
ada_annex_d -->|"利用する"| ada_execution_time
ada_annex_d -->|"前提とする"| ada_task
ada_annex_d -.->|"前提とする"| protected_object
ada_annex_d -.->|"前提とする"| gnat
ceiling_locking -->|"防止する"| priority_inversion
priority_inversion -->|"原因になり得る"| mars_pathfinder_priority_inversion
ravenscar_profile -->|"前提とする"| ada_task
ravenscar_profile -->|"前提とする"| fifo_within_priorities
ravenscar_profile -->|"前提とする"| ceiling_locking
ravenscar_profile -.->|"で構成できる"| gnat
ada_relative_delay -->|"原因になり得る"| cumulative_drift
ada_delay_until -->|"防止する"| cumulative_drift
ada_relative_delay -->|"用いるのは非推奨"| ravenscar_profile
ada_timing_events -->|"利用する"| ceiling_locking
ada_timing_events -->|"利用する"| protected_object
ada_execution_time -->|"前提とする"| ada_task
概念間の関係(全21件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Annex D(Adaのリアルタイムシステム標準)はFIFO_Within_Prioritiesを利用します。
- Annex D(Adaのリアルタイムシステム標準)はCeiling_Lockingプロトコルを利用します。
- Annex D(Adaのリアルタイムシステム標準)はdelay until(絶対時刻の遅延)を利用します。
- Annex D(Adaのリアルタイムシステム標準)はRavenscarプロファイルを利用します。
- Annex D(Adaのリアルタイムシステム標準)はタイミングイベント(Ada.Real_Time.Timing_Events)を利用します。
- Annex D(Adaのリアルタイムシステム標準)はAda.Execution_Time(実行時間計測)を利用します。
- Annex D(Adaのリアルタイムシステム標準)はAdaのタスク(並行処理)を前提とします。
- Annex D(Adaのリアルタイムシステム標準)は保護オブジェクト(protected object)を前提とします。
- Annex D(Adaのリアルタイムシステム標準)はGNATを前提とします。
- Ceiling_Lockingプロトコルは優先度逆転(priority inversion)を防ぎます。
- 優先度逆転(priority inversion)はMars Pathfinderの優先度逆転事故の原因になることがあります。
- RavenscarプロファイルはAdaのタスク(並行処理)を前提とします。
- RavenscarプロファイルはFIFO_Within_Prioritiesを前提とします。
- RavenscarプロファイルはCeiling_Lockingプロトコルを前提とします。
- RavenscarプロファイルはGNATで構成できます。
- 相対delay(delay文)は周期実行の累積ドリフトの原因になることがあります。
- delay until(絶対時刻の遅延)は周期実行の累積ドリフトを防ぎます。
- 相対delay(delay文)をRavenscarプロファイルに用いることは推奨されません。
- タイミングイベント(Ada.Real_Time.Timing_Events)はCeiling_Lockingプロトコルを利用します。
- タイミングイベント(Ada.Real_Time.Timing_Events)は保護オブジェクト(protected object)を利用します。
- Ada.Execution_Time(実行時間計測)はAdaのタスク(並行処理)を前提とします。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。