@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/ada-tasking-camera-frame-acquisition/#article>
    schema:about <https://comcomponent.com/knowledge/ada-task/>, <https://comcomponent.com/knowledge/protected-object/>, <https://comcomponent.com/knowledge/frame-drop/> ;
    schema:mentions <https://comcomponent.com/knowledge/bounded-buffer/>, <https://comcomponent.com/knowledge/barrier/>, <https://comcomponent.com/knowledge/ada-delay-until/>, <https://comcomponent.com/knowledge/task-priority/>, <https://comcomponent.com/knowledge/ceiling-locking/>, <https://comcomponent.com/knowledge/fifo-within-priorities/>, <https://comcomponent.com/knowledge/jorvik-profile/>, <https://comcomponent.com/knowledge/ravenscar-profile/>, <https://comcomponent.com/knowledge/spark/>, <https://comcomponent.com/knowledge/gnatprove/>, <https://comcomponent.com/knowledge/data-race/>, <https://comcomponent.com/knowledge/sched-fifo/>, <https://comcomponent.com/knowledge/gnat/> .

<https://comcomponent.com/knowledge/ada-task/> a skos:Concept ;
    skos:prefLabel "Adaのタスク(並行処理)"@ja ;
    skos:definition "スレッドをOSのAPIやライブラリに頼らず、言語仕様に組み込む形で提供するAdaの並行実行単位。"@ja ;
    skos:altLabel "task" ;
    skos:altLabel "rendezvous" ;
    ks:uses <https://comcomponent.com/knowledge/ada-delay-until/> .

<https://comcomponent.com/knowledge/protected-object/> a skos:Concept ;
    skos:prefLabel "保護オブジェクト(protected object)"@ja ;
    skos:definition "procedure・function・entryの3種の操作を通じてのみ内部データへアクセスさせ、排他制御を言語が保証するAda 95で導入された機構。"@ja ;
    skos:altLabel "protected type" ;
    skos:altLabel "Protected Object" ;
    ks:configuredBy <https://comcomponent.com/knowledge/task-priority/> .

<https://comcomponent.com/knowledge/frame-drop/> a skos:Concept ;
    skos:prefLabel "フレームドロップ"@ja ;
    skos:definition "カメラが撮影・送信した画像(フレーム)の一部またはすべてが、受信側のアプリに正しく届かないこと。"@ja ;
    skos:altLabel "Dropped frames" ;
    skos:altLabel "フレーム落ち"@ja ;
    skos:altLabel "画像の取りこぼし"@ja .

<https://comcomponent.com/knowledge/bounded-buffer/> a skos:Concept ;
    skos:prefLabel "有限バッファー"@ja ;
    skos:definition "容量に上限を設けたキュー・循環バッファー。満杯になったら生産側を待たせることが自然な背圧になる。"@ja .

<https://comcomponent.com/knowledge/barrier/> a skos:Concept ;
    skos:prefLabel "バリア(保護エントリのwhen条件)"@ja ;
    skos:definition "保護オブジェクトのエントリ呼び出しのたびに評価され、真になるまで呼び出し側をキューで待たせる条件式である。"@ja ;
    skos:altLabel "Barrier" ;
    skos:altLabel "entry ... when" ;
    skos:broader <https://comcomponent.com/knowledge/protected-object/> .

<https://comcomponent.com/knowledge/ada-delay-until/> a skos:Concept ;
    skos:prefLabel "delay until(絶対時刻の遅延)"@ja ;
    skos:definition "絶対時刻を基準に次の起動時刻を指定するAdaの遅延文。1回の処理が遅れても次回以降の起動時刻を正しく保ち、累積ドリフトを防ぐ。"@ja ;
    skos:altLabel "delay until" .

<https://comcomponent.com/knowledge/task-priority/> a skos:Concept ;
    skos:prefLabel "タスク優先度(pragma Priority)"@ja ;
    skos:definition "pragma PriorityまたはPriority aspectでタスクや保護オブジェクトに設定する、Annex Dのリアルタイムスケジューリングに使う優先度である。"@ja ;
    skos:altLabel "pragma Priority" ;
    skos:altLabel "Priority aspect" .

<https://comcomponent.com/knowledge/jorvik-profile/> a skos:Concept ;
    skos:prefLabel "Jorvikプロファイル"@ja ;
    skos:definition "Ravenscarプロファイルから6つの制限を外し、Simple_BarriersをPure_Barriersに置き換えた、Ada 2022で標準に加わったタスク機能のプロファイル。"@ja ;
    skos:altLabel "Jorvik" ;
    skos:altLabel "pragma Profile (Jorvik)" ;
    ks:requires <https://comcomponent.com/knowledge/fifo-within-priorities/> ;
    ks:requires <https://comcomponent.com/knowledge/ceiling-locking/> .

<https://comcomponent.com/knowledge/fifo-within-priorities/> a skos:Concept ;
    skos:prefLabel "FIFO_Within_Priorities"@ja ;
    skos:definition "同一優先度内はFIFOで実行し、より高い優先度のタスクが低い優先度のタスクをプリエンプトする、Annex Dが定める標準的なタスクディスパッチポリシー。"@ja ;
    skos:altLabel "優先度ベースディスパッチ"@ja .

<https://comcomponent.com/knowledge/ceiling-locking/> a skos:Concept ;
    skos:prefLabel "Ceiling_Lockingプロトコル"@ja ;
    skos:definition "保護オブジェクトにシーリング優先度を設定し、進入したタスクを自動的にその優先度へ昇格させることで優先度逆転を防ぐ、Annex Dが定めるロッキング方針。"@ja ;
    skos:altLabel "Ceiling Locking" ;
    skos:altLabel "天井優先度プロトコル"@ja .

<https://comcomponent.com/knowledge/spark/> a skos:Concept ;
    skos:prefLabel "SPARK"@ja ;
    skos:definition "プログラムの性質を数学的に証明できるように設計された、Adaのサブセット(部分言語)とそのツール群。"@ja ;
    skos:altLabel "SPARK Ada" ;
    skos:altLabel "GNATprove" .

<https://comcomponent.com/knowledge/data-race/> a skos:Concept ;
    skos:prefLabel "データ競合(data race)"@ja ;
    skos:definition "複数のタスクが同じメモリ位置に同時アクセスし、少なくとも一方が書き込みであるために結果が未定義になる状態である。"@ja ;
    skos:altLabel "Data Race" .

<https://comcomponent.com/knowledge/gnatprove/> a skos:Concept ;
    skos:prefLabel "GNATprove"@ja ;
    skos:definition "AdaCoreが提供する、SPARKコードの契約や表明を自動証明器で検証するコマンドラインツールである。"@ja ;
    skos:altLabel "gnatprove コマンド"@ja ;
    skos:broader <https://comcomponent.com/knowledge/spark/> .

<https://comcomponent.com/knowledge/sched-fifo/> a skos:Concept ;
    skos:prefLabel "SCHED_FIFO"@ja ;
    skos:definition "Linuxの実時間のスケジューリング方針の一つ。静的な優先度が高いスレッドから先に動き、同じ優先度では先に実行可能になったスレッドが、ブロックするか譲るか、より高い優先度のスレッドに奪われるまで動き続ける。一般のスレッドが使うにはCAP_SYS_NICEか、0より大きいRLIMIT_RTPRIOが要る。"@ja ;
    skos:altLabel "FIFOスケジューリング方針"@ja .

<https://comcomponent.com/knowledge/gnat/> a skos:Concept ;
    skos:prefLabel "GNAT"@ja ;
    skos:definition "GCCに含まれる無償のAdaコンパイラで、Adaの代表的な処理系。"@ja ;
    skos:altLabel "GNATコンパイラ"@ja .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/protected-object/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/bounded-buffer/> ;
    schema:description "記事の Slot_Queue は容量8の保護型で、スロットの番号をモジュラー型の添字で循環させて入れる。カメラのタスクは満杯でも待たない手続きだけを呼び、処理タスクはエントリで待つ。"@ja ;
    ks:evidence <https://www.adaic.org/resources/add_content/standards/22rm/html/RM-9-4.html>, <https://www.adaic.org/resources/add_content/standards/22rm/html/RM-9-5-2.html>, <https://docs.adacore.com/spark2014-docs/html/ug/en/source/concurrency.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/protected-object/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/barrier/> ;
    schema:description "Slot_Queue のエントリ Take は、バリア when Count > 0 が真になるまで呼び出し側を待たせる。Ravenscar ではバリアが静的な式か保護オブジェクトの成分を指す名前1つに限られ、Jorvik は保護オブジェクトの成分と静的な式を比較演算や論理演算で組み合わせた式を許す。"@ja ;
    ks:evidence <https://www.adaic.org/resources/add_content/standards/22rm/html/RM-D-13.html>, <https://docs.adacore.com/spark2014-docs/html/ug/en/source/concurrency.html>, <https://www.adaic.org/resources/add_content/standards/22rm/html/RM-D-7.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ada-task/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/ada-delay-until/> ;
    schema:description "カメラを模したタスクは、前回の予定時刻に周期を足した絶対時刻まで delay until で待ち、10ミリ秒ごとの到着を模す。"@ja ;
    ks:evidence <https://www.adaic.org/resources/add_content/standards/22rm/html/RM-9-6.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/protected-object/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/task-priority/> ;
    schema:description "保護オブジェクトの優先度は Priority アスペクトで設定し、Ceiling_Locking では優先度上限になる。保護された操作を呼ぶタスクの優先度が上限より高いと Program_Error になる。"@ja ;
    ks:evidence <https://www.adaic.org/resources/add_content/standards/22rm/html/RM-D-3.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/jorvik-profile/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/fifo-within-priorities/> ;
    schema:description "Jorvik プロファイルは、Task_Dispatching_Policy (FIFO_Within_Priorities) を含むプラグマの組と同じである。"@ja ;
    ks:evidence <https://www.adaic.org/resources/add_content/standards/22rm/html/RM-D-13.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/jorvik-profile/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/ceiling-locking/> ;
    schema:description "Jorvik プロファイルは、Locking_Policy (Ceiling_Locking) を含むプラグマの組と同じである。"@ja ;
    ks:evidence <https://www.adaic.org/resources/add_content/standards/22rm/html/RM-D-13.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/spark/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/jorvik-profile/> ;
    schema:description "SPARK でタスクと保護オブジェクトを扱うには、Ravenscar か Jorvik のプロファイルと Partition_Elaboration_Policy (Sequential) が要る。記事では Jorvik を使った。"@ja ;
    ks:evidence <https://docs.adacore.com/spark2014-docs/html/ug/en/source/concurrency.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/data-race/> ;
    rdf:predicate ks:verifiedBy ;
    rdf:object <https://comcomponent.com/knowledge/gnatprove/> ;
    schema:description "GNATprove は、タスクが保護オブジェクトやアトミックな変数のような同期されたもの以外を共有するとデータ競合の可能性として報告する。本体を SPARK の外に置いた状態に Synchronous を付けると、それは確かめられない前提になる。"@ja ;
    ks:evidence <https://docs.adacore.com/spark2014-docs/html/ug/en/source/concurrency.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/fifo-within-priorities/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/sched-fifo/> ;
    schema:description "GNAT の Linux 版は、FIFO_Within_Priorities のタスクのスレッドに pthread_setschedparam で SCHED_FIFO を設定し、権限がなくて失敗しても続ける。記事の環境（RLIMIT_RTPRIO は0）では root で動かすと SCHED_FIFO になり、一般のユーザーでは SCHED_OTHER のままで優先度は効かなかった。"@ja ;
    ks:evidence <https://github.com/gcc-mirror/gcc/blob/releases/gcc-13/gcc/ada/libgnarl/s-taprop__linux.adb>, <https://man7.org/linux/man-pages/man7/sched.7.html> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/gnat/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/ceiling-locking/> ;
    schema:description "GNAT の Linux 版は、優先度上限つきのミューテックスで Ceiling_Locking を実装し、ロックが EINVAL を返すと上限の違反とする。root でなく、libcap で CAP_SYS_NICE を判定できなければ Ceiling_Locking の指定を無視する。記事の環境では、CAP_SYS_NICE を持たない root で正しいプログラムが上限の違反で止まった。"@ja ;
    ks:evidence <https://github.com/gcc-mirror/gcc/blob/releases/gcc-13/gcc/ada/libgnarl/s-taprop__linux.adb> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/bounded-buffer/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/frame-drop/> ;
    schema:description "バッファーが満杯になるとフレームは捨てられる。バッファーを増やすと一時的な遅れには耐えられるが、処理が平均して到着より遅いと増やしても捨てる割合は変わらない。"@ja ;
    ks:evidence <https://docs.baslerweb.com/pypylon-performance-optimization> ;
    ks:verifiedAt "2026-11-10" ;
    ks:certainty "context-dependent" .
