知識マップ: 取りこぼさない取り込み処理をAdaのタスクで作る ── 保護オブジェクトのリングバッファと優先度
記事「取りこぼさない取り込み処理をAdaのタスクで作る ── 保護オブジェクトのリングバッファと優先度」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
カメラの取り込みを、周期タスクと処理タスクと、スロットの番号を入れる保護オブジェクトの有限バッファーで組み立てる。保護オブジェクトのエントリはバリアで呼び出し側を待たせ、周期タスクはdelay untilで予定時刻を保つ。保護オブジェクトの優先度上限はPriorityアスペクトで設定し、呼ぶタスクの優先度が上限より高いとProgram_Errorになる。JorvikプロファイルはFIFO_Within_PrioritiesとCeiling_Lockingを含み、SPARKで並行処理を扱うにはRavenscarかJorvikが要る。GNATproveはタスクが同期されていないものを共有するとデータ競合として報告する。GNATのLinux版はFIFO_Within_PrioritiesのタスクをSCHED_FIFOのスレッドで動かすが、その権限がなければ優先度は効かない。バッファーがあふれるとフレームは捨てられる。
flowchart LR
accTitle: Adaのタスクで作るカメラの取り込み処理の知識マップ
accDescr: 保護オブジェクトが有限バッファーを実装してバリアを使い、Adaのタスクがdelay untilで周期を保ち、保護オブジェクトの優先度上限をPriorityで設定すること、JorvikプロファイルがFIFO_Within_PrioritiesとCeiling_Lockingを前提とすること、SPARKが並行処理にJorvikプロファイルを前提とし、GNATproveでデータ競合を確かめること、GNATのLinux版がFIFO_Within_PrioritiesにSCHED_FIFOを使うこと、満杯の有限バッファーがフレームドロップの原因になり得ることを示す図。
ada_task["Adaのタスク(並行処理)"]
protected_object["保護オブジェクト(protected object)"]
frame_drop["フレームドロップ"]
bounded_buffer["有限バッファー"]
barrier["バリア(保護エントリのwhen条件)"]
ada_delay_until["delay until(絶対時刻の遅延)"]
task_priority["タスク優先度(pragma Priority)"]
jorvik_profile["Jorvikプロファイル"]
fifo_within_priorities["FIFO_Within_Priorities"]
ceiling_locking["Ceiling_Lockingプロトコル"]
spark["SPARK"]
data_race["データ競合(data race)"]
gnatprove["GNATprove"]
sched_fifo["SCHED_FIFO"]
gnat["GNAT"]
protected_object -.->|"実装を担う"| bounded_buffer
protected_object -.->|"利用する"| barrier
ada_task -->|"利用する"| ada_delay_until
protected_object -->|"で構成できる"| task_priority
jorvik_profile -->|"前提とする"| fifo_within_priorities
jorvik_profile -->|"前提とする"| ceiling_locking
spark -.->|"前提とする"| jorvik_profile
data_race -.->|"で確認できる"| gnatprove
fifo_within_priorities -.->|"利用する"| sched_fifo
gnat -.->|"実装を担う"| ceiling_locking
bounded_buffer -.->|"原因になり得る"| frame_drop
概念間の関係(全11件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- 保護オブジェクト(protected object)は有限バッファーの実装を担います。
- 保護オブジェクト(protected object)はバリア(保護エントリのwhen条件)を利用します。
- Adaのタスク(並行処理)はdelay until(絶対時刻の遅延)を利用します。
- 保護オブジェクト(protected object)はタスク優先度(pragma Priority)で構成できます。
- JorvikプロファイルはFIFO_Within_Prioritiesを前提とします。
- JorvikプロファイルはCeiling_Lockingプロトコルを前提とします。
- SPARKはJorvikプロファイルを前提とします。
- データ競合(data race)はGNATproveで確認できます。
- FIFO_Within_PrioritiesはSCHED_FIFOを利用します。
- GNATはCeiling_Lockingプロトコルの実装を担います。
- 有限バッファーはフレームドロップの原因になることがあります。
主要概念の定義
機械可読データ
このデータセットについて
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。