feat: publish FreeRTOS C FC08 card
|
After Width: | Height: | Size: 28 KiB |
@@ -0,0 +1,21 @@
|
||||
@startuml
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 12
|
||||
skinparam ArrowColor #8095a1
|
||||
skinparam rectangleBorderColor #2c7794
|
||||
skinparam rectangleBackgroundColor #edf6fa
|
||||
title A2 STRUCTURE — mutex, owner, wait list and resource
|
||||
rectangle "01 Mutex\nQueueDefinition\nuxQueueType = mutex" as mutex
|
||||
rectangle "02 LowTask\nbase priority 1\neffective priority 1 → 3" as low
|
||||
rectangle "03 HighTask\npriority 3\nblocked on mutex" as high
|
||||
rectangle "04 MediumTask\npriority 2\nReady, not executed" as medium
|
||||
rectangle "05 protected value\n1 → 2" as resource
|
||||
low --> mutex : owns
|
||||
high ..> mutex : waits forever
|
||||
mutex --> low : inherits 3
|
||||
medium ..> low : cannot preempt 3
|
||||
low --> resource : guarded write 1
|
||||
high --> resource : guarded write 2
|
||||
@enduml
|
||||
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="529px" preserveAspectRatio="none" style="width:475px;height:529px;" version="1.1" viewBox="0 0 475 529" width="475px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="305" x="89" y="12.8281">A2 STRUCTURE — mutex, owner, wait list and resource</text><!--MD5=[a15aec3e997c0b90fdfa616e6e255e24]
|
||||
entity mutex--><rect fill="#EDF6FA" height="69.0323" style="stroke: #2C7794; stroke-width: 1.5;" width="145" x="6" y="171.5941"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="52" x="16" y="194.4222">01 Mutex</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="91" x="16" y="210.7663">QueueDefinition</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="125" x="16" y="227.1104">uxQueueType = mutex</text><!--MD5=[cce3472c5646352849134f9dadeb1b6a]
|
||||
entity low--><rect fill="#EDF6FA" height="69.0323" style="stroke: #2C7794; stroke-width: 1.5;" width="144" x="124.5" y="318.6241"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="65" x="134.5" y="341.4522">02 LowTask</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="80" x="134.5" y="357.7963">base priority 1</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="124" x="134.5" y="374.1404">effective priority 1 → 3</text><!--MD5=[14d0722cf5b909ee93912fd030bf9990]
|
||||
entity high--><rect fill="#EDF6FA" height="69.0323" style="stroke: #2C7794; stroke-width: 1.5;" width="118" x="172.5" y="24.5541"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="182.5" y="47.3822">03 HighTask</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="50" x="182.5" y="63.7263">priority 3</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="98" x="182.5" y="80.0704">blocked on mutex</text><!--MD5=[67463a8a93d235c1b9ef492366a72a88]
|
||||
entity medium--><rect fill="#EDF6FA" height="69.0323" style="stroke: #2C7794; stroke-width: 1.5;" width="132" x="185.5" y="171.5941"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="89" x="195.5" y="194.4222">04 MediumTask</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="50" x="195.5" y="210.7663">priority 2</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="112" x="195.5" y="227.1104">Ready, not executed</text><!--MD5=[9c9f7c63b55d39a846ab63348ec12139]
|
||||
entity resource--><rect fill="#EDF6FA" height="52.6882" style="stroke: #2C7794; stroke-width: 1.5;" width="124" x="228.5" y="465.6541"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="104" x="238.5" y="488.4822">05 protected value</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="30" x="238.5" y="504.8263">1 → 2</text><!--MD5=[158e2903b1020e11f99bcb9ea11d8868]
|
||||
link low to mutex--><path d="M124.1,329.8641 C104.98,320.3241 86.61,306.9941 75.5,288.6241 C68.13,276.4341 67.02,261.2341 68.38,247.2741 " fill="none" id="low->mutex" style="stroke: #8095A1; stroke-width: 1.0;"/><polygon fill="#8095A1" points="68.98,242.4641,63.9065,250.9057,68.3668,247.4264,71.8461,251.8867,68.98,242.4641" style="stroke: #8095A1; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="29" x="76.5" y="284.4522">owns</text><!--MD5=[8d649ca47fa06143feec8f30a0ad6d1f]
|
||||
link mutex to low--><path d="M106.17,241.1141 C123.77,262.7541 146.62,290.8341 164.93,313.3441 " fill="none" id="mutex->low" style="stroke: #8095A1; stroke-width: 1.0;"/><polygon fill="#8095A1" points="168.05,317.1741,165.462,307.6714,164.89,313.2992,159.2622,312.7273,168.05,317.1741" style="stroke: #8095A1; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="52" x="145.56" y="284.4522">inherits 3</text><!--MD5=[0cda02ad73f7217ff83b08c55d25c68b]
|
||||
link high to mutex--><path d="M195.63,94.0741 C172.61,115.9041 142.67,144.2741 118.83,166.8741 " fill="none" id="high->mutex" style="stroke: #8095A1; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#8095A1" points="115.25,170.2741,124.532,166.9811,118.8771,166.8326,119.0256,161.1777,115.25,170.2741" style="stroke: #8095A1; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="73" x="165.16" y="137.4222">waits forever</text><!--MD5=[dcb993e83586dad779f044de8c3c68b5]
|
||||
link medium to low--><path d="M238.6,241.1141 C230.5,262.4741 220.02,290.1241 211.54,312.4941 " fill="none" id="medium->low" style="stroke: #8095A1; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#8095A1" points="209.85,316.9341,216.7999,309.9557,211.6353,312.2637,209.3273,307.0991,209.85,316.9341" style="stroke: #8095A1; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="99" x="228.29" y="284.4522">cannot preempt 3</text><!--MD5=[3a9e305dea604aa08f760e06e749e231]
|
||||
link low to resource--><path d="M219.74,387.9741 C234.87,410.0041 254.47,438.5441 269.2,459.9941 " fill="none" id="low->resource" style="stroke: #8095A1; stroke-width: 1.0;"/><polygon fill="#8095A1" points="271.98,464.0341,270.1774,454.3516,269.1474,459.9139,263.5851,458.8839,271.98,464.0341" style="stroke: #8095A1; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="88" x="252.92" y="431.4822">guarded write 1</text><!--MD5=[1010f4c599cbe540e9eb0f4a1139d543]
|
||||
link high to resource--><path d="M274.65,93.9941 C296.71,113.9941 321.57,141.2941 334.5,171.5941 C380.63,279.7141 396.21,327.7841 349.5,435.6541 C345.43,445.0441 338.9,453.5741 331.64,460.9741 " fill="none" id="high->resource" style="stroke: #8095A1; stroke-width: 1.0;"/><polygon fill="#8095A1" points="328.12,464.3741,337.3615,460.9689,331.7052,460.8889,331.7852,455.2326,328.12,464.3741" style="stroke: #8095A1; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="88" x="375.57" y="284.4522">guarded write 2</text><!--MD5=[f0e877ce0d9c10f109572c3cca054c6b]
|
||||
@startuml
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 12
|
||||
skinparam ArrowColor #8095a1
|
||||
skinparam rectangleBorderColor #2c7794
|
||||
skinparam rectangleBackgroundColor #edf6fa
|
||||
title A2 STRUCTURE — mutex, owner, wait list and resource
|
||||
rectangle "01 Mutex\nQueueDefinition\nuxQueueType = mutex" as mutex
|
||||
rectangle "02 LowTask\nbase priority 1\neffective priority 1 → 3" as low
|
||||
rectangle "03 HighTask\npriority 3\nblocked on mutex" as high
|
||||
rectangle "04 MediumTask\npriority 2\nReady, not executed" as medium
|
||||
rectangle "05 protected value\n1 → 2" as resource
|
||||
low - -> mutex : owns
|
||||
high ..> mutex : waits forever
|
||||
mutex - -> low : inherits 3
|
||||
medium ..> low : cannot preempt 3
|
||||
low - -> resource : guarded write 1
|
||||
high - -> resource : guarded write 2
|
||||
@enduml
|
||||
|
||||
PlantUML version 1.2020.02(Sun Mar 01 11:22:07 CET 2020)
|
||||
(GPL source distribution)
|
||||
Java Runtime: OpenJDK Runtime Environment
|
||||
JVM: OpenJDK 64-Bit Server VM
|
||||
Java Version: 25.0.4-ea+4-1-Debian
|
||||
Operating System: Linux
|
||||
Default Encoding: UTF-8
|
||||
Language: en
|
||||
Country: null
|
||||
--></g></svg>
|
||||
|
After Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 21 KiB |
@@ -0,0 +1,20 @@
|
||||
@startuml
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 12
|
||||
skinparam rectangleBorderColor #2c7794
|
||||
skinparam rectangleBackgroundColor #edf6fa
|
||||
title A4 APPLICATION — deterministic three-task topology
|
||||
rectangle "01 main\ncreates mutex, verifier, Low" as main
|
||||
rectangle "02 Low p1\ntakes mutex\ncreates High" as low
|
||||
rectangle "03 High p3\nblocks on mutex" as high
|
||||
rectangle "04 Low effective p3\ncreates Medium" as inherited
|
||||
rectangle "05 Medium p2\nReady, still not run" as medium
|
||||
rectangle "06 verifier p0\nchecks relational invariants" as verifier
|
||||
main --> low
|
||||
low --> high
|
||||
high --> inherited : block transfers priority
|
||||
inherited --> medium
|
||||
medium --> verifier : after release and completion
|
||||
@enduml
|
||||
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="706px" preserveAspectRatio="none" style="width:311px;height:706px;" version="1.1" viewBox="0 0 311 706" width="311px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="297" x="2" y="12.8281">A4 APPLICATION — deterministic three-task topology</text><!--MD5=[53ccf4b3ee6cf4337a0ab93ac09644f3]
|
||||
entity main--><rect fill="#EDF6FA" height="52.6882" style="stroke: #2C7794; stroke-width: 1.5;" width="174" x="19.5" y="23.8741"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="45" x="29.5" y="46.7022">01 main</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="154" x="29.5" y="63.0463">creates mutex, verifier, Low</text><!--MD5=[cce3472c5646352849134f9dadeb1b6a]
|
||||
entity low--><rect fill="#EDF6FA" height="69.0323" style="stroke: #2C7794; stroke-width: 1.5;" width="91" x="61" y="137.5541"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="56" x="71" y="160.3822">02 Low p1</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="68" x="71" y="176.7263">takes mutex</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="71" x="71" y="193.0704">creates High</text><!--MD5=[14d0722cf5b909ee93912fd030bf9990]
|
||||
entity high--><rect fill="#EDF6FA" height="52.6882" style="stroke: #2C7794; stroke-width: 1.5;" width="110" x="51.5" y="267.5941"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="60" x="61.5" y="290.4222">03 High p3</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="61.5" y="306.7663">blocks on mutex</text><!--MD5=[a72fd6fd2c7445310e521336cd23ff95]
|
||||
entity inherited--><rect fill="#EDF6FA" height="52.6882" style="stroke: #2C7794; stroke-width: 1.5;" width="127" x="43" y="398.2841"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="107" x="53" y="421.1122">04 Low effective p3</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="91" x="53" y="437.4563">creates Medium</text><!--MD5=[67463a8a93d235c1b9ef492366a72a88]
|
||||
entity medium--><rect fill="#EDF6FA" height="52.6882" style="stroke: #2C7794; stroke-width: 1.5;" width="122" x="45.5" y="511.9641"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="80" x="55.5" y="534.7922">05 Medium p2</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="55.5" y="551.1363">Ready, still not run</text><!--MD5=[58638f16dd491473315bd2a16a4aea64]
|
||||
entity verifier--><rect fill="#EDF6FA" height="52.6882" style="stroke: #2C7794; stroke-width: 1.5;" width="172" x="20.5" y="642.6541"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="74" x="30.5" y="665.4822">06 verifier p0</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="152" x="30.5" y="681.8263">checks relational invariants</text><!--MD5=[12334806b334ec52b39196ebc84ccb0c]
|
||||
link main to low--><path d="M106.5,76.9241 C106.5,92.6141 106.5,112.9941 106.5,130.7841 " fill="none" id="main->low" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="106.5,135.6941,110.5,126.6941,106.5,130.6941,102.5,126.6941,106.5,135.6941" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[703d9bc15c2727fc6f79bca221395ebb]
|
||||
link low to high--><path d="M106.5,206.7841 C106.5,223.7741 106.5,244.2741 106.5,261.0141 " fill="none" id="low->high" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="106.5,265.9441,110.5,256.9441,106.5,260.9441,102.5,256.9441,106.5,265.9441" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[3397666f604e9ab039a17ff3600e78ab]
|
||||
link high to inherited--><path d="M106.5,320.6641 C106.5,341.0941 106.5,369.7641 106.5,391.6641 " fill="none" id="high->inherited" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="106.5,396.4241,110.5,387.4241,106.5,391.4241,102.5,387.4241,106.5,396.4241" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="126" x="107.5" y="364.1122">block transfers priority</text><!--MD5=[639fa6b22c49e64175e5f52319ab2e1f]
|
||||
link inherited to medium--><path d="M106.5,451.2441 C106.5,467.4241 106.5,488.4341 106.5,505.6541 " fill="none" id="inherited->medium" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="106.5,510.2941,110.5,501.2941,106.5,505.2941,102.5,501.2941,106.5,510.2941" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[04d1b0886790690bf8262ad86ae766f5]
|
||||
link medium to verifier--><path d="M106.5,565.0441 C106.5,585.4741 106.5,614.1441 106.5,636.0441 " fill="none" id="medium->verifier" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="106.5,640.7941,110.5,631.7941,106.5,635.7941,102.5,631.7941,106.5,640.7941" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="161" x="107.5" y="608.4822">after release and completion</text><!--MD5=[c9d1b2d0cd83cfe035dba781dc2b891b]
|
||||
@startuml
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 12
|
||||
skinparam rectangleBorderColor #2c7794
|
||||
skinparam rectangleBackgroundColor #edf6fa
|
||||
title A4 APPLICATION — deterministic three-task topology
|
||||
rectangle "01 main\ncreates mutex, verifier, Low" as main
|
||||
rectangle "02 Low p1\ntakes mutex\ncreates High" as low
|
||||
rectangle "03 High p3\nblocks on mutex" as high
|
||||
rectangle "04 Low effective p3\ncreates Medium" as inherited
|
||||
rectangle "05 Medium p2\nReady, still not run" as medium
|
||||
rectangle "06 verifier p0\nchecks relational invariants" as verifier
|
||||
main - -> low
|
||||
low - -> high
|
||||
high - -> inherited : block transfers priority
|
||||
inherited - -> medium
|
||||
medium - -> verifier : after release and completion
|
||||
@enduml
|
||||
|
||||
PlantUML version 1.2020.02(Sun Mar 01 11:22:07 CET 2020)
|
||||
(GPL source distribution)
|
||||
Java Runtime: OpenJDK Runtime Environment
|
||||
JVM: OpenJDK 64-Bit Server VM
|
||||
Java Version: 25.0.4-ea+4-1-Debian
|
||||
Operating System: Linux
|
||||
Default Encoding: UTF-8
|
||||
Language: en
|
||||
Country: null
|
||||
--></g></svg>
|
||||
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 33 KiB |
@@ -0,0 +1,36 @@
|
||||
@startuml
|
||||
scale 600 width
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 11
|
||||
skinparam sequenceArrowColor #8095a1
|
||||
skinparam sequenceLifeLineBorderColor #8095a1
|
||||
title A5 FLOW — priority inheritance and bounded inversion
|
||||
participant "Low p1" as L
|
||||
participant Mutex as M
|
||||
participant "High p3" as H
|
||||
participant "Medium p2" as D
|
||||
participant "Verifier p0" as V
|
||||
L -> M : 02 take; protected=1
|
||||
L -> H : create
|
||||
activate H
|
||||
H -> M : 03 take(portMAX_DELAY)
|
||||
H --> L : Blocked; owner inherits p3
|
||||
deactivate H
|
||||
L -> L : 04 effective=3; holder=Low
|
||||
L -> D : create
|
||||
L -> L : 05 Medium Ready, started=0
|
||||
L -> M : 06 give
|
||||
activate H
|
||||
M --> H : 07 acquire before give returns
|
||||
H -> M : protected=2; give; delete
|
||||
deactivate H
|
||||
activate D
|
||||
D -> D : 08 run after High
|
||||
D -> D : delete
|
||||
deactivate D
|
||||
L -> L : 09 effective restored to p1
|
||||
L -> V : completed
|
||||
V -> V : 10 PASS + stable digest
|
||||
@enduml
|
||||
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 30 KiB |
@@ -0,0 +1,20 @@
|
||||
@startuml
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 12
|
||||
skinparam stateBorderColor #2c7794
|
||||
skinparam stateBackgroundColor #edf6fa
|
||||
title A6 STATE — owner, waiter and effective priority
|
||||
[*] --> Free : 01 mutex created
|
||||
Free --> OwnedP1 : 02 Low takes
|
||||
OwnedP1 --> ContendedP3 : 03 High blocks
|
||||
ContendedP3 : owner Low
|
||||
ContendedP3 : base 1 / effective 3
|
||||
ContendedP3 : Medium Ready / not run
|
||||
ContendedP3 --> Transferred : 06 Low gives
|
||||
Transferred : 07 High owns
|
||||
Transferred --> Free : High gives
|
||||
Free --> Verified : 09 Low restored to 1
|
||||
Verified --> [*] : 10 PASS
|
||||
@enduml
|
||||
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="605px" preserveAspectRatio="none" style="width:403px;height:605px;" version="1.1" viewBox="0 0 403 605" width="403px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="266" x="72" y="12.8281">A6 STATE — owner, waiter and effective priority</text><ellipse cx="195.5" cy="34.2841" fill="#000000" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><rect fill="#EDF6FA" height="50" rx="12.5" ry="12.5" style="stroke: #2C7794; stroke-width: 1.5;" width="50" x="170.5" y="122.2841"/><line style="stroke: #2C7794; stroke-width: 1.5;" x1="170.5" x2="220.5" y1="148.6282" y2="148.6282"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="25" x="183" y="140.1122">Free</text><rect fill="#EDF6FA" height="50" rx="12.5" ry="12.5" style="stroke: #2C7794; stroke-width: 1.5;" width="73" x="45" y="250.2841"/><line style="stroke: #2C7794; stroke-width: 1.5;" x1="45" x2="118" y1="276.6282" y2="276.6282"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="53" x="55" y="268.1122">OwnedP1</text><rect fill="#EDF6FA" height="85.3765" rx="12.5" ry="12.5" style="stroke: #2C7794; stroke-width: 1.5;" width="153" x="6" y="378.2841"/><line style="stroke: #2C7794; stroke-width: 1.5;" x1="6" x2="159" y1="404.6282" y2="404.6282"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="75" x="45" y="396.1122">ContendedP3</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="60" x="11" y="422.4563">owner Low</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="105" x="11" y="438.8004">base 1 / effective 3</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="133" x="11" y="455.1445">Medium Ready / not run</text><rect fill="#EDF6FA" height="52.6882" rx="12.5" ry="12.5" style="stroke: #2C7794; stroke-width: 1.5;" width="95" x="161" y="541.6541"/><line style="stroke: #2C7794; stroke-width: 1.5;" x1="161" x2="256" y1="567.9982" y2="567.9982"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="67" x="175" y="559.4822">Transferred</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="75" x="166" y="585.8263">07 High owns</text><rect fill="#EDF6FA" height="50" rx="12.5" ry="12.5" style="stroke: #2C7794; stroke-width: 1.5;" width="63" x="168" y="250.2841"/><line style="stroke: #2C7794; stroke-width: 1.5;" x1="168" x2="231" y1="276.6282" y2="276.6282"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="43" x="178" y="268.1122">Verified</text><ellipse cx="204.5" cy="420.9641" fill="none" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="205" cy="421.4641" fill="#000000" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><!--MD5=[f16808fa220dde377303612249059854]
|
||||
link *start to Free--><path d="M195.5,44.7441 C195.5,60.2741 195.5,91.8041 195.5,115.6341 " fill="none" id="*start->Free" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="195.5,120.6241,199.5,111.6241,195.5,115.6241,191.5,111.6241,195.5,120.6241" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="98" x="196.5" y="88.1122">01 mutex created</text><!--MD5=[501b358165cde79f7c2d9368da34d356]
|
||||
link Free to OwnedP1--><path d="M170.17,159.1341 C151.48,168.2541 126.6,182.9241 110.5,202.2841 C100.56,214.2241 93.69,230.0241 89.14,243.7741 " fill="none" id="Free->OwnedP1" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="87.67,248.4841,94.1648,241.0802,89.1565,243.7102,86.5265,238.7019,87.67,248.4841" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="72" x="111.5" y="216.1122">02 Low takes</text><!--MD5=[47f755e6136f275da9d5c2abb6ef1f4e]
|
||||
link OwnedP1 to ContendedP3--><path d="M79.85,300.7341 C79.31,309.9841 78.77,320.6141 78.5,330.2841 C78.13,343.6641 78.46,358.1741 79.06,371.5441 " fill="none" id="OwnedP1->ContendedP3" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="79.3,376.4841,82.8574,367.3002,79.0567,371.49,74.8669,367.6894,79.3,376.4841" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="81" x="79.5" y="344.1122">03 High blocks</text><!--MD5=[d551b0a612c4cc3e8fc91ace74e2f28d]
|
||||
link ContendedP3 to Transferred--><path d="M118.94,463.9141 C139.22,487.2541 163.98,515.7541 182.32,536.8641 " fill="none" id="ContendedP3->Transferred" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="185.38,540.3841,182.5219,530.9591,182.1108,536.601,176.4689,536.1898,185.38,540.3841" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="71" x="157.79" y="507.4822">06 Low gives</text><!--MD5=[a84124c6e555879d9924e48ec8779708]
|
||||
link Transferred to Free--><path d="M228.94,541.5141 C276.4,479.0441 384.72,315.1441 312.5,202.2841 C293.78,173.0241 254.73,159.3941 226.9,153.1941 " fill="none" id="Transferred->Free" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="222.27,152.2241,230.2724,157.9654,227.1662,153.2376,231.894,150.1315,222.27,152.2241" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="58" x="333.45" y="344.1122">High gives</text><!--MD5=[ef5db961bf1e2ec60cc0efc50706216c]
|
||||
link Free to Verified--><path d="M193.2,172.6241 C192.21,186.5841 191.48,204.4241 192.5,220.2841 C192.99,227.8741 193.86,236.0241 194.83,243.6341 " fill="none" id="Free->Verified" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="195.46,248.3841,198.2426,238.9365,194.8029,243.4275,190.312,239.9878,195.46,248.3841" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="114" x="193.5" y="216.1122">09 Low restored to 1</text><!--MD5=[3391b27f901edca95c58505de7f5bba8]
|
||||
link Verified to *end--><path d="M200.35,300.6541 C201.38,330.2241 203.08,379.2041 203.95,404.2141 " fill="none" id="Verified->*end" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="204.12,409.0841,207.7832,399.9418,203.9344,404.0876,199.7887,400.2388,204.12,409.0841" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="46" x="203" y="344.1122">10 PASS</text><!--MD5=[c9a37395c6029eb0a0ab9bdfe4607e46]
|
||||
@startuml
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 12
|
||||
skinparam stateBorderColor #2c7794
|
||||
skinparam stateBackgroundColor #edf6fa
|
||||
title A6 STATE — owner, waiter and effective priority
|
||||
[*] - -> Free : 01 mutex created
|
||||
Free - -> OwnedP1 : 02 Low takes
|
||||
OwnedP1 - -> ContendedP3 : 03 High blocks
|
||||
ContendedP3 : owner Low
|
||||
ContendedP3 : base 1 / effective 3
|
||||
ContendedP3 : Medium Ready / not run
|
||||
ContendedP3 - -> Transferred : 06 Low gives
|
||||
Transferred : 07 High owns
|
||||
Transferred - -> Free : High gives
|
||||
Free - -> Verified : 09 Low restored to 1
|
||||
Verified - -> [*] : 10 PASS
|
||||
@enduml
|
||||
|
||||
PlantUML version 1.2020.02(Sun Mar 01 11:22:07 CET 2020)
|
||||
(GPL source distribution)
|
||||
Java Runtime: OpenJDK Runtime Environment
|
||||
JVM: OpenJDK 64-Bit Server VM
|
||||
Java Version: 25.0.4-ea+4-1-Debian
|
||||
Operating System: Linux
|
||||
Default Encoding: UTF-8
|
||||
Language: en
|
||||
Country: null
|
||||
--></g></svg>
|
||||
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,22 @@
|
||||
@startuml
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 12
|
||||
skinparam rectangleBorderColor #2c7794
|
||||
skinparam rectangleBackgroundColor #edf6fa
|
||||
title A7 RUNTIME — public evidence and debugger-only TCB detail
|
||||
rectangle "01 g_fc08\nmutex handle\nprotected_value" as experiment
|
||||
rectangle "02 Low handle / stack\nuxTaskPriorityGet = 3\nmutex holder = Low" as low
|
||||
rectangle "03 High handle / stack\neTaskState = Blocked" as high
|
||||
rectangle "04 Medium handle / stack\neTaskState = Ready\nstarted = 0" as medium
|
||||
rectangle "05 kernel TCB evidence\nuxBasePriority = 1\nuxPriority = 3\n(debugger only)" as tcb
|
||||
rectangle "06 g_fc08_events[10]\ncommit marker last\ndigest 5433b784" as log
|
||||
experiment --> low
|
||||
experiment --> high
|
||||
experiment --> medium
|
||||
low ..> tcb
|
||||
low --> log
|
||||
high --> log
|
||||
medium --> log
|
||||
@enduml
|
||||
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="378px" preserveAspectRatio="none" style="width:539px;height:378px;" version="1.1" viewBox="0 0 539 378" width="539px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="344" x="101" y="12.8281">A7 RUNTIME — public evidence and debugger-only TCB detail</text><!--MD5=[b15dda4ed305ababd0a15fef38b4eb6d]
|
||||
entity experiment--><rect fill="#EDF6FA" height="69.0323" style="stroke: #2C7794; stroke-width: 1.5;" width="109" x="204" y="23.9041"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="53" x="214" y="46.7322">01 g_fc08</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="76" x="214" y="63.0763">mutex handle</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="89" x="214" y="79.4204">protected_value</text><!--MD5=[cce3472c5646352849134f9dadeb1b6a]
|
||||
entity low--><rect fill="#EDF6FA" height="69.0323" style="stroke: #2C7794; stroke-width: 1.5;" width="139" x="13" y="152.9341"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="119" x="23" y="175.7622">02 Low handle / stack</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="119" x="23" y="192.1063">uxTaskPriorityGet = 3</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="109" x="23" y="208.4504">mutex holder = Low</text><!--MD5=[14d0722cf5b909ee93912fd030bf9990]
|
||||
entity high--><rect fill="#EDF6FA" height="52.6882" style="stroke: #2C7794; stroke-width: 1.5;" width="143" x="187" y="161.1041"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="123" x="197" y="183.9322">03 High handle / stack</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="119" x="197" y="200.2763">eTaskState = Blocked</text><!--MD5=[67463a8a93d235c1b9ef492366a72a88]
|
||||
entity medium--><rect fill="#EDF6FA" height="69.0323" style="stroke: #2C7794; stroke-width: 1.5;" width="163" x="365" y="152.9341"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="143" x="375" y="175.7622">04 Medium handle / stack</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="109" x="375" y="192.1063">eTaskState = Ready</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="60" x="375" y="208.4504">started = 0</text><!--MD5=[0bb6f33dfd49e802fce6b5273bbb9861]
|
||||
entity tcb--><rect fill="#EDF6FA" height="85.3765" style="stroke: #2C7794; stroke-width: 1.5;" width="151" x="6" y="281.9641"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="131" x="16" y="304.7922">05 kernel TCB evidence</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="101" x="16" y="321.1363">uxBasePriority = 1</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="73" x="16" y="337.4804">uxPriority = 3</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="88" x="16" y="353.8245">(debugger only)</text><!--MD5=[30ba7fb1050e29c0f3290b9e87c281e8]
|
||||
entity log--><rect fill="#EDF6FA" height="69.0323" style="stroke: #2C7794; stroke-width: 1.5;" width="137" x="192" y="290.1441"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="202" y="312.9722">06 g_fc08_events[10]</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="109" x="202" y="329.3163">commit marker last</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="93" x="202" y="345.6604">digest 5433b784</text><!--MD5=[a07dc87dcfb0b2eb65d67fc065adae59]
|
||||
link experiment to low--><path d="M211.8,93.1241 C188.03,110.2841 159.06,131.1941 134.57,148.8641 " fill="none" id="experiment->low" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="130.65,151.7041,140.2886,149.6799,134.7041,148.7777,135.6063,143.1933,130.65,151.7041" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[b9522d85cf839a8565f9ff7433ad213c]
|
||||
link experiment to high--><path d="M258.5,93.1241 C258.5,112.1441 258.5,135.7741 258.5,154.5041 " fill="none" id="experiment->high" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="258.5,159.1341,262.5,150.1341,258.5,154.1341,254.5,150.1341,258.5,159.1341" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[bdfc17e4d28f793dfed890547445afdf]
|
||||
link experiment to medium--><path d="M308.39,93.1241 C333.88,110.3541 364.98,131.3641 391.2,149.0841 " fill="none" id="experiment->medium" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="395.13,151.7341,389.9132,143.3804,390.9874,148.9343,385.4335,150.0085,395.13,151.7341" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[d1d32904c2db3aa5fd00d4abf93eace5]
|
||||
link low to tcb--><path d="M82.25,222.2241 C82.13,238.2441 81.99,257.6841 81.86,275.2341 " fill="none" id="low->tcb" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="81.82,280.0941,85.897,271.1287,81.8629,275.0943,77.8973,271.0602,81.82,280.0941" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[f75079b6a5a27a1736afb6bbdc48a346]
|
||||
link low to log--><path d="M126.96,222.2241 C152.44,241.5741 184.5,265.9241 210.81,285.9141 " fill="none" id="low->log" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="214.79,288.9341,210.0245,280.315,210.802,285.9181,205.1989,286.6957,214.79,288.9341" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[68c15f91978f47105a96b7f20109a11a]
|
||||
link high to log--><path d="M258.88,214.2041 C259.17,233.7241 259.57,260.9341 259.9,283.3341 " fill="none" id="high->log" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="259.98,288.3041,263.8251,279.2369,259.8943,283.3048,255.8263,279.374,259.98,288.3041" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[77629c9d82df5c801e52420ef1e6f761]
|
||||
link medium to log--><path d="M400.04,222.2241 C373.3,241.6641 339.64,266.1241 312.08,286.1641 " fill="none" id="medium->log" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="308.23,288.9541,317.8604,286.8915,312.2724,286.0116,313.1524,280.4236,308.23,288.9541" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[2abf51212c5b55463d94c6e77e5944b9]
|
||||
@startuml
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 12
|
||||
skinparam rectangleBorderColor #2c7794
|
||||
skinparam rectangleBackgroundColor #edf6fa
|
||||
title A7 RUNTIME — public evidence and debugger-only TCB detail
|
||||
rectangle "01 g_fc08\nmutex handle\nprotected_value" as experiment
|
||||
rectangle "02 Low handle / stack\nuxTaskPriorityGet = 3\nmutex holder = Low" as low
|
||||
rectangle "03 High handle / stack\neTaskState = Blocked" as high
|
||||
rectangle "04 Medium handle / stack\neTaskState = Ready\nstarted = 0" as medium
|
||||
rectangle "05 kernel TCB evidence\nuxBasePriority = 1\nuxPriority = 3\n(debugger only)" as tcb
|
||||
rectangle "06 g_fc08_events[10]\ncommit marker last\ndigest 5433b784" as log
|
||||
experiment - -> low
|
||||
experiment - -> high
|
||||
experiment - -> medium
|
||||
low ..> tcb
|
||||
low - -> log
|
||||
high - -> log
|
||||
medium - -> log
|
||||
@enduml
|
||||
|
||||
PlantUML version 1.2020.02(Sun Mar 01 11:22:07 CET 2020)
|
||||
(GPL source distribution)
|
||||
Java Runtime: OpenJDK Runtime Environment
|
||||
JVM: OpenJDK 64-Bit Server VM
|
||||
Java Version: 25.0.4-ea+4-1-Debian
|
||||
Operating System: Linux
|
||||
Default Encoding: UTF-8
|
||||
Language: en
|
||||
Country: null
|
||||
--></g></svg>
|
||||
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,20 @@
|
||||
@startuml
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 12
|
||||
skinparam rectangleBorderColor #2c7794
|
||||
skinparam rectangleBackgroundColor #edf6fa
|
||||
title A8 PATTERNS — choose the synchronization contract
|
||||
rectangle "01 Critical section\nvery short CPU-local invariant\nnever block" as critical
|
||||
rectangle "02 Scheduler suspension\ndefer scheduling\ninterrupts still run" as suspend
|
||||
rectangle "03 Mutex\nownership + priority inheritance\ntask context only" as mutex
|
||||
rectangle "04 Gatekeeper task\nsingle resource owner\nmessage-based access" as gatekeeper
|
||||
critical -[hidden]right- suspend
|
||||
suspend -[hidden]right- mutex
|
||||
mutex -[hidden]right- gatekeeper
|
||||
note bottom of mutex
|
||||
FC08 selects this contract.
|
||||
A binary semaphore would not prove PIP.
|
||||
end note
|
||||
@enduml
|
||||
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="208px" preserveAspectRatio="none" style="width:812px;height:208px;" version="1.1" viewBox="0 0 812 208" width="812px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="296" x="261.5" y="12.8281">A8 PATTERNS — choose the synchronization contract</text><!--MD5=[0c94bbd458004588e03de05ccccd09d9]
|
||||
entity critical--><rect fill="#EDF6FA" height="69.0323" style="stroke: #2C7794; stroke-width: 1.5;" width="185" x="6" y="24.6241"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="99" x="16" y="47.4522">01 Critical section</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="165" x="16" y="63.7963">very short CPU-local invariant</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="64" x="16" y="80.1404">never block</text><!--MD5=[e9b87bd7eea3cd1afcf2413a9fa81c40]
|
||||
entity suspend--><rect fill="#EDF6FA" height="69.0323" style="stroke: #2C7794; stroke-width: 1.5;" width="159" x="226" y="24.6241"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="139" x="236" y="47.4522">02 Scheduler suspension</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="93" x="236" y="63.7963">defer scheduling</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="99" x="236" y="80.1404">interrupts still run</text><!--MD5=[a15aec3e997c0b90fdfa616e6e255e24]
|
||||
entity mutex--><rect fill="#EDF6FA" height="69.0323" style="stroke: #2C7794; stroke-width: 1.5;" width="197" x="420" y="24.6241"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="52" x="430" y="47.4522">03 Mutex</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="177" x="430" y="63.7963">ownership + priority inheritance</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="93" x="430" y="80.1404">task context only</text><!--MD5=[c47f0c0e15548abdaedf4a672b82b47b]
|
||||
entity gatekeeper--><rect fill="#EDF6FA" height="69.0323" style="stroke: #2C7794; stroke-width: 1.5;" width="150" x="651.5" y="24.6241"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="109" x="661.5" y="47.4522">04 Gatekeeper task</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="124" x="661.5" y="63.7963">single resource owner</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="130" x="661.5" y="80.1404">message-based access</text><path d="M393.5,153.6541 L393.5,196.3423 A0,0 0 0 0 393.5,196.3423 L643.5,196.3423 A0,0 0 0 0 643.5,196.3423 L643.5,163.6541 L633.5,153.6541 L522.5,153.6541 L518.5,93.9941 L514.5,153.6541 L393.5,153.6541 A0,0 0 0 0 393.5,153.6541 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M633.5,153.6541 L633.5,163.6541 L643.5,163.6541 L633.5,153.6541 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="145" x="399.5" y="171.4822">FC08 selects this contract.</text><text fill="#000000" font-family="Monospace" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="229" x="399.5" y="187.8263">A binary semaphore would not prove PIP.</text><!--MD5=[43f9e7dad0b185143c57098fbc752e3b]
|
||||
link critical to suspend--><!--MD5=[8c3c9b66a323ecbbfdeb4278884cf545]
|
||||
link suspend to mutex--><!--MD5=[23c46de2c675a24a276d91376df1cd89]
|
||||
link mutex to gatekeeper--><!--MD5=[30f74b2029b88fbb954d44fee45dd65e]
|
||||
@startuml
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 12
|
||||
skinparam rectangleBorderColor #2c7794
|
||||
skinparam rectangleBackgroundColor #edf6fa
|
||||
title A8 PATTERNS — choose the synchronization contract
|
||||
rectangle "01 Critical section\nvery short CPU-local invariant\nnever block" as critical
|
||||
rectangle "02 Scheduler suspension\ndefer scheduling\ninterrupts still run" as suspend
|
||||
rectangle "03 Mutex\nownership + priority inheritance\ntask context only" as mutex
|
||||
rectangle "04 Gatekeeper task\nsingle resource owner\nmessage-based access" as gatekeeper
|
||||
critical -[hidden]right- suspend
|
||||
suspend -[hidden]right- mutex
|
||||
mutex -[hidden]right- gatekeeper
|
||||
note bottom of mutex
|
||||
FC08 selects this contract.
|
||||
A binary semaphore would not prove PIP.
|
||||
end note
|
||||
@enduml
|
||||
|
||||
PlantUML version 1.2020.02(Sun Mar 01 11:22:07 CET 2020)
|
||||
(GPL source distribution)
|
||||
Java Runtime: OpenJDK Runtime Environment
|
||||
JVM: OpenJDK 64-Bit Server VM
|
||||
Java Version: 25.0.4-ea+4-1-Debian
|
||||
Operating System: Linux
|
||||
Default Encoding: UTF-8
|
||||
Language: en
|
||||
Country: null
|
||||
--></g></svg>
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
@@ -0,0 +1,38 @@
|
||||
# FC08 card plan — resource management
|
||||
|
||||
## Thesis
|
||||
|
||||
A FreeRTOS mutex combines ownership with priority inheritance. A binary
|
||||
semaphore does not provide the same scheduling contract.
|
||||
|
||||
## Task tree
|
||||
|
||||
```text
|
||||
FC08 · Mutexes and priority inheritance
|
||||
└── Task01 · bounded priority inversion
|
||||
├── Block · A2/A4 static contract
|
||||
│ └── Phase · STRUCTURE
|
||||
│ ├── Step 01 · genuine mutex object
|
||||
│ ├── Step 02 · Low owns the resource
|
||||
│ ├── Step 03 · High waits forever
|
||||
│ └── Step 04 · Medium is Ready
|
||||
├── Block · A5/A6 execution
|
||||
│ └── Phase · INHERIT / HANDOFF
|
||||
│ ├── Step 05 · Low inherits priority 3
|
||||
│ ├── Step 06 · Medium has not run
|
||||
│ ├── Step 07 · Low gives
|
||||
│ ├── Step 08 · High acquires first
|
||||
│ └── Step 09 · Low returns to priority 1
|
||||
├── Block · A7 runtime proof
|
||||
│ └── Step 10 · PASS and stable digest
|
||||
└── Exercise · lock-order table for two mutexes
|
||||
```
|
||||
|
||||
## Acceptance gates
|
||||
|
||||
- `configUSE_MUTEXES=1`; one genuine mutex; no manual priority changes.
|
||||
- High uses a non-zero wait and blocks while Low owns the mutex.
|
||||
- `uxTaskPriorityGet(Low)` changes 1 → 3 → 1.
|
||||
- Medium is `eReady` and `medium_started==0` while Low is inherited p3.
|
||||
- High acquires before Medium runs; protected value changes under ownership.
|
||||
- Event records are committed last and three clean simulations agree.
|
||||
@@ -0,0 +1,327 @@
|
||||
% Generated from json/card_source.json by tools/render_card.py.
|
||||
% Do not edit manually; update the JSON and regenerate.
|
||||
|
||||
\documentclass[12pt,a4paper]{article}
|
||||
|
||||
\usepackage[T1]{fontenc}
|
||||
\usepackage{lmodern}
|
||||
\usepackage[utf8]{inputenc}
|
||||
\usepackage[polish]{babel}
|
||||
\usepackage{csquotes}
|
||||
\usepackage{amsmath}
|
||||
\usepackage{amssymb}
|
||||
\usepackage{xcolor}
|
||||
\usepackage[a4paper,left=2.15cm,right=2.15cm,top=0.5cm,bottom=0.5cm,headheight=24mm,headsep=3mm,includehead]{geometry}
|
||||
\usepackage{eso-pic}
|
||||
\usepackage{marginnote}
|
||||
\usepackage{array}
|
||||
\usepackage{tabularx}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{pdflscape}
|
||||
\usepackage{float}
|
||||
\usepackage{silence}
|
||||
\WarningFilter{soulutf8}{This package is obsolete}
|
||||
\usepackage{pdfcomment}
|
||||
\usepackage{enumitem}
|
||||
\usepackage{needspace}
|
||||
\usepackage{fancyhdr}
|
||||
\usepackage{lastpage}
|
||||
\usepackage{microtype}
|
||||
\usepackage[most]{tcolorbox}
|
||||
\usepackage{qrcode}
|
||||
\IfFileExists{references.bib}{%
|
||||
\usepackage[backend=biber,style=numeric,sorting=none]{biblatex}%
|
||||
\addbibresource{references.bib}%
|
||||
}{}
|
||||
|
||||
\hypersetup{hidelinks}
|
||||
|
||||
\IfFileExists{build-meta.tex}{%
|
||||
\input{build-meta.tex}%
|
||||
}{%
|
||||
\newcommand{\BuildCommit}{lokalna}%
|
||||
}
|
||||
|
||||
\newcommand{\DocumentAuthor}{M. Pabiszczak}
|
||||
\newcommand{\DocumentYear}{2026}
|
||||
\newcommand{\CardSeries}{freertos-c}
|
||||
\newcommand{\CardNumber}{08}
|
||||
\newcommand{\CardCount}{15}
|
||||
\newcommand{\CardSlug}{mutex-priority-inheritance}
|
||||
\newcommand{\CardVersion}{v00.01}
|
||||
\newcommand{\DocumentUUID}{b408a0e1-ca9f-52b8-9075-ff324bfce778}
|
||||
|
||||
\newcommand{\EmptyCheck}{\(\square\)}
|
||||
\newcommand{\EscAnswerLines}[1][3]{\par\noindent\dotfill\par\noindent\dotfill\par\noindent\dotfill}
|
||||
\newcommand{\EscWriteRow}[1][2.8em]{\rule{0pt}{#1}}
|
||||
\setlength{\parindent}{0pt}
|
||||
\setlength{\parskip}{0.45em}
|
||||
\setlength{\headheight}{24mm}
|
||||
\setlength{\headsep}{3mm}
|
||||
\setlength{\footskip}{8mm}
|
||||
\setlength{\marginparwidth}{1.5cm}
|
||||
\setlength{\marginparsep}{0.25cm}
|
||||
\renewcommand{\arraystretch}{1.22}
|
||||
% Margin separator lines disabled for layout trial.
|
||||
|
||||
\newcommand{\ESCPageResourceHeader}{%
|
||||
\begingroup%
|
||||
\setlength{\parskip}{0pt}%
|
||||
\setlength{\fboxsep}{0pt}%
|
||||
\setlength{\fboxrule}{0.35pt}%
|
||||
\setlength{\arrayrulewidth}{0.35pt}%
|
||||
\noindent\fbox{%
|
||||
\begin{minipage}[c][23.5mm][c]{\dimexpr\textwidth-2\fboxrule\relax}%
|
||||
\begin{minipage}[c][23mm][c]{24mm}\centering%
|
||||
\qrcode[level=L,height=22mm]{https://zsl-gitea.mpabi.pl/edu-freertos-c/lab-rv32i-freertos-c-resource-management}%
|
||||
\end{minipage}%
|
||||
\vrule width0.35pt%
|
||||
\begin{minipage}[c][23mm][c]{\dimexpr\linewidth-48mm-0.7pt\relax}%
|
||||
\setlength{\tabcolsep}{0pt}%
|
||||
\renewcommand{\arraystretch}{0}%
|
||||
\begin{tabularx}{\linewidth}{@{}p{\dimexpr0.50000000\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.15126050\linewidth-\arrayrulewidth\relax}|X@{}}%
|
||||
\parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries TITLE}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{7.7}{7.9}\selectfont\ttfamily\bfseries Mutex i dziedziczenie priorytetu}\hspace{0.45mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries VER.}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{6.6}{6.8}\selectfont\ttfamily\bfseries v00.01}\hspace{0.45mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries DATETIME}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{6.4}{6.6}\selectfont\ttfamily\bfseries 2026-07-19T00:00:00+02:00}\hspace{0.45mm}}\par} \\%
|
||||
\end{tabularx}%
|
||||
\par\nointerlineskip%
|
||||
\hrule height0.35pt%
|
||||
\nointerlineskip%
|
||||
\begin{tabularx}{\linewidth}{@{}p{\dimexpr0.50000000\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.25210084\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.14285714\linewidth-\arrayrulewidth\relax}|X@{}}%
|
||||
\parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries PROJECT}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{7.7}{7.9}\selectfont\ttfamily\bfseries Freestanding C nad FreeRTOS}\hspace{0.45mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries SERIES}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{6.4}{6.6}\selectfont\ttfamily\bfseries FreeRTOS C}\hspace{0.45mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries CARD}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{6.4}{6.6}\selectfont\ttfamily\bfseries 08/15}\hspace{0.45mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries SHEET}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{6.4}{6.6}\selectfont\ttfamily\bfseries \thepage/\pageref{LastPage}}\hspace{0.45mm}}\par} \\%
|
||||
\end{tabularx}%
|
||||
\par\nointerlineskip%
|
||||
\hrule height0.35pt%
|
||||
\nointerlineskip%
|
||||
\begin{tabularx}{\linewidth}{@{}p{\dimexpr0.05882353\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.05042017\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.14705882\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.09243697\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.07563025\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.07563025\linewidth-\arrayrulewidth\relax}|X@{}}%
|
||||
\parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries SUBJ.}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries Inf.}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries PROG.}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries —}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries CORE}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries —}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries SCOPE}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries —}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries LEVEL}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries —}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries POS.}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries —}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hbox to\linewidth{\hspace{0.35mm}{\fontsize{3.4}{3.75}\selectfont\ttfamily\bfseries GITEA UUID}\hfill{\fontsize{3.4}{3.75}\selectfont\ttfamily b408a0e1-ca9f-52b8-9075-ff324bfce778}\hspace{0.35mm}}\par\nointerlineskip\hbox to\linewidth{\hspace{0.35mm}{\fontsize{3.4}{3.75}\selectfont\ttfamily\bfseries CARD UUID} {\fontsize{3.4}{3.75}\selectfont\ttfamily 2392f81a-ed6c-510b-86b5-06c5e2f1c6aa}\hfill{\fontsize{3.4}{3.75}\selectfont\ttfamily\bfseries AUTHOR M. Pabiszczak}\hspace{0.35mm}}} \\%
|
||||
\end{tabularx}%
|
||||
\par\nointerlineskip%
|
||||
\hrule height0.35pt%
|
||||
\nointerlineskip%
|
||||
\begin{tabularx}{\linewidth}{@{}X@{}}%
|
||||
\parbox[c][3.46276mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{4.5}{4.85}\selectfont\ttfamily\bfseries GITEA} {\fontsize{4.5}{4.85}\selectfont\ttfamily\href{https://zsl-gitea.mpabi.pl/edu-freertos-c/lab-rv32i-freertos-c-resource-management}{\nolinkurl{https://zsl-gitea.mpabi.pl/edu-freertos-c/lab-rv32i-freertos-c-resource-management}}}} \\%
|
||||
\end{tabularx}%
|
||||
\par\nointerlineskip%
|
||||
\hrule height0.35pt%
|
||||
\nointerlineskip%
|
||||
\begin{tabularx}{\linewidth}{@{}X@{}}%
|
||||
\parbox[c][3.46276mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{4.5}{4.85}\selectfont\ttfamily\bfseries HTML} {\fontsize{4.5}{4.85}\selectfont\ttfamily\href{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/2392f81a-ed6c-510b-86b5-06c5e2f1c6aa}{\nolinkurl{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/2392f81a-ed6c-510b-86b5-06c5e2f1c6aa}}}} \\%
|
||||
\end{tabularx}%
|
||||
\end{minipage}%
|
||||
\vrule width0.35pt%
|
||||
\begin{minipage}[c][23mm][c]{24mm}\centering%
|
||||
\qrcode[level=L,height=22mm]{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/2392f81a-ed6c-510b-86b5-06c5e2f1c6aa}%
|
||||
\end{minipage}%
|
||||
\end{minipage}%
|
||||
}%
|
||||
\endgroup%
|
||||
}
|
||||
|
||||
\pagestyle{fancy}
|
||||
\fancyhf{}
|
||||
\fancyhead[C]{\ESCPageResourceHeader}
|
||||
\renewcommand{\headrulewidth}{0pt}
|
||||
\renewcommand{\footrulewidth}{0pt}
|
||||
|
||||
\newcommand{\ESCMarginTag}[4]{%
|
||||
\hspace*{#1}\textcolor{#2}{#3~#4}%
|
||||
}
|
||||
\newcommand{\ESCSectionBlockStart}{%
|
||||
\Needspace{8\baselineskip}%
|
||||
\par\vspace{0.35em}%
|
||||
\noindent\textcolor{black!28}{\rule{\textwidth}{0.35pt}}%
|
||||
\par\vspace{0.15em}%
|
||||
}
|
||||
\newcommand{\ESCSectionBlockEnd}{%
|
||||
\par\vspace{0.25em}%
|
||||
\noindent\textcolor{black!18}{\rule{\textwidth}{0.25pt}}%
|
||||
\par\vspace{0.45em}%
|
||||
}
|
||||
\newcommand{\ESCTinyStepSeparator}{%
|
||||
\par\vspace{0.10em}%
|
||||
\noindent{\color{black!18}\leaders\hbox{\rule{0.60em}{0.22pt}\hspace{0.38em}}\hfill\kern0pt}%
|
||||
\par\vspace{0.10em}%
|
||||
}
|
||||
\newtcolorbox{ESCTaskFrame}[1]{enhanced,breakable,arc=0pt,boxrule=0.35pt,colback=white,colframe=black,boxsep=0pt,left=1.4mm,right=1.4mm,top=0.8mm,bottom=0.8mm,colbacktitle=black!7,coltitle=black,title={\ttfamily\bfseries TASK\quad #1}}
|
||||
\newtcolorbox{ESCBlockFrame}[1]{enhanced,breakable,arc=0pt,boxrule=0.35pt,colback=white,colframe=black!55,boxsep=0pt,left=1.0mm,right=1.0mm,top=0.6mm,bottom=0.6mm,colbacktitle=black!4,coltitle=black,title={\ttfamily\bfseries BLOCK\quad #1}}
|
||||
\newtcolorbox{ESCStepFrame}[1]{enhanced,breakable,arc=0pt,boxrule=0.35pt,colback=white,colframe=black!28,boxsep=0pt,left=0.8mm,right=0.8mm,top=0.45mm,bottom=0.45mm,colbacktitle=black!2,coltitle=black,title={\ttfamily STEP\quad #1}}
|
||||
\newtcolorbox{ESCConclusionFrame}{enhanced,breakable,arc=0pt,boxrule=0.45pt,colback=blue!2,colframe=blue!45!black,boxsep=0pt,left=1.2mm,right=1.2mm,top=0.7mm,bottom=0.7mm,colbacktitle=blue!7,coltitle=black,title={\ttfamily\bfseries WNIOSEK}}
|
||||
|
||||
\newcommand{\ESCLearningTreeWidget}{%
|
||||
\reversemarginpar
|
||||
\marginnote[%
|
||||
\begin{minipage}{\marginparwidth}%
|
||||
\raggedright
|
||||
{\fontsize{3.55}{3.95}\selectfont\ttfamily
|
||||
\begin{minipage}[t]{\marginparwidth}%
|
||||
\raggedright
|
||||
{\bfseries\textcolor{black!65}{TECH}\par}%
|
||||
\vspace{0.08em}%
|
||||
\hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par%
|
||||
\hspace*{0.28em}\textcolor{orange!85!black}{EK~LOCAL~RTOS}\textcolor{black!48}{\pdftooltip[width=\textwidth]{.08}{Uczeń odtwarza E01–E10 i pokazuje holder, publiczne priority/state, trzy stosy, protected\textCR value i digest.}}\par%
|
||||
\hspace*{0.54em}\textcolor{blue!70!black}{KW~LOCAL~RTOS}\textcolor{black!48}{\pdftooltip[width=\textwidth]{.08}{Łączy kod, diagram i zweryfikowany dowód.}}\par%
|
||||
\end{minipage}%
|
||||
}%
|
||||
\end{minipage}%
|
||||
]{}
|
||||
\normalmarginpar
|
||||
|
||||
\marginnote{%
|
||||
\begin{minipage}{\marginparwidth}%
|
||||
\raggedright
|
||||
{\fontsize{3.55}{3.95}\selectfont\ttfamily
|
||||
\hspace*{0.06cm}%
|
||||
\begin{minipage}[t]{\dimexpr\marginparwidth-0.06cm\relax}%
|
||||
\raggedright
|
||||
{\bfseries\textcolor{black!65}{OG}\par}%
|
||||
\vspace{0.08em}%
|
||||
\hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par%
|
||||
\hspace*{0.28em}\textcolor{green!50!black}{EN~LOCAL~EN~RTOS}\textcolor{black!48}{\pdftooltip[width=\textwidth]{.08}{Uczeń wiąże ownership, wait list i effective priority bez ręcznej zmiany priorytetu.}}\par%
|
||||
\hspace*{0.54em}\textcolor{blue!70!black}{KW~LOCAL~KW~RTOS}\textcolor{black!48}{\pdftooltip[width=\textwidth]{.08}{Łączy kod, diagram i zweryfikowany dowód.}}\par%
|
||||
\end{minipage}%
|
||||
}%
|
||||
\end{minipage}%
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
\begin{document}
|
||||
\sloppy
|
||||
|
||||
\vspace{1.0em}
|
||||
\noindent{\Large\bfseries Cel karty}\par
|
||||
\vspace{0.35em}
|
||||
Uczeń odróżnia mutex od semafora binarnego i dowodzi, że FreeRTOS tymczasowo podnosi efektywny priorytet właściciela blokującego task o wyższym priorytecie.
|
||||
|
||||
\vspace{0.8em}
|
||||
\noindent\textcolor{black!25}{\rule{\textwidth}{0.35pt}}
|
||||
\vspace{0.7em}
|
||||
\noindent{\Large\bfseries Zakres karty}\par
|
||||
\vspace{0.35em}
|
||||
Low p1 przejmuje mutex i tworzy High p3. High blokuje się bez timeoutu, Low dziedziczy p3, a nowy Medium p2 pozostaje Ready bez wykonania. Po give High przejmuje zasób przed Medium, a Low wraca do p1. Verifier sprawdza publiczne API, własność, trzy stosy, porządek E01–E10 i stabilny digest.
|
||||
\vspace{0.55em}
|
||||
\small\begin{tabularx}{\textwidth}{@{}>{\ttfamily\raggedright\arraybackslash}p{0.85cm}>{\ttfamily\raggedright\arraybackslash}p{1.45cm}X>{\raggedright\arraybackslash}p{2.45cm}>{\raggedright\arraybackslash}p{1.75cm}>{\ttfamily\raggedright\arraybackslash}p{1.50cm}@{}}
|
||||
\textbf{Lekcja} & \textbf{Task} & \textbf{Najważniejsza idea} & \textbf{Priorytet} & \textbf{Status} & \textbf{Version} \\ \hline
|
||||
\hline
|
||||
\multicolumn{1}{|l|}{\textbf{\texttt{FC08}}} & \multicolumn{1}{l|}{\textbf{\texttt{Task01}}} & \multicolumn{1}{l|}{\textbf{ownership, bounded inversion i priority inheritance}} & \multicolumn{1}{l|}{\textbf{główny}} & \multicolumn{1}{l|}{\textbf{opracowane}} & \multicolumn{1}{l|}{\textbf{\texttt{v00.01}}} \\ \hline
|
||||
\end{tabularx}
|
||||
\normalsize
|
||||
|
||||
|
||||
\vspace{0.8em}
|
||||
\noindent\textcolor{black!25}{\rule{\textwidth}{0.35pt}}
|
||||
|
||||
\clearpage
|
||||
|
||||
\ESCSectionBlockStart
|
||||
\noindent{\small\bfseries A2 — Structure \hfill część 1/1 \textperiodcentered\ r1 c1}\par
|
||||
\vspace{0.35em}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.7197\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a2-structure.png}}
|
||||
\caption{A2 STRUCTURE — ownership i wait list. — część 1/1 (r1 c1).}
|
||||
\label{fig:a2-structure}
|
||||
\end{figure}
|
||||
\ESCSectionBlockEnd
|
||||
|
||||
\clearpage
|
||||
\ESCSectionBlockStart
|
||||
\noindent{\small\bfseries A4 — Application \hfill część 1/1 \textperiodcentered\ r1 c1}\par
|
||||
\vspace{0.35em}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.47121\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a4-application.png}}
|
||||
\caption{A4 APPLICATION — deterministic creation topology. — część 1/1 (r1 c1).}
|
||||
\label{fig:a4-application}
|
||||
\end{figure}
|
||||
\ESCSectionBlockEnd
|
||||
|
||||
\clearpage
|
||||
\ESCSectionBlockStart
|
||||
\noindent{\small\bfseries A5 — Flow \hfill część 1/1 \textperiodcentered\ r1 c1}\par
|
||||
\vspace{0.35em}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.91818\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a5-flow.png}}
|
||||
\caption{A5 FLOW — bounded priority inversion. — część 1/1 (r1 c1).}
|
||||
\label{fig:a5-flow}
|
||||
\end{figure}
|
||||
\ESCSectionBlockEnd
|
||||
|
||||
\clearpage
|
||||
\ESCSectionBlockStart
|
||||
\noindent{\small\bfseries A6 — State \hfill część 1/1 \textperiodcentered\ r1 c1}\par
|
||||
\vspace{0.35em}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.61061\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a6-state.png}}
|
||||
\caption{A6 STATE — free, owned, contended, transferred. — część 1/1 (r1 c1).}
|
||||
\label{fig:a6-state}
|
||||
\end{figure}
|
||||
\ESCSectionBlockEnd
|
||||
|
||||
\clearpage
|
||||
\ESCSectionBlockStart
|
||||
\noindent{\small\bfseries A7 — Runtime \hfill część 1/1 \textperiodcentered\ r1 c1}\par
|
||||
\vspace{0.35em}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.81667\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a7-runtime.png}}
|
||||
\caption{A7 RUNTIME — handles, stacks, public states and TCB detail. — część 1/1 (r1 c1).}
|
||||
\label{fig:a7-runtime}
|
||||
\end{figure}
|
||||
\ESCSectionBlockEnd
|
||||
|
||||
\clearpage
|
||||
\begin{landscape}
|
||||
\ESCSectionBlockStart
|
||||
\noindent{\small\bfseries A8 — Patterns \hfill część 1/1 \textperiodcentered\ r1 c1}\par
|
||||
\vspace{0.35em}
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.86383\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a8-patterns.png}}
|
||||
\caption{A8 PATTERNS — four distinct synchronization contracts. — część 1/1 (r1 c1).}
|
||||
\label{fig:a8-patterns}
|
||||
\end{figure}
|
||||
\ESCSectionBlockEnd
|
||||
\end{landscape}
|
||||
|
||||
\clearpage
|
||||
\ESCSectionBlockStart
|
||||
\section{Task01 — mutex i PIP}
|
||||
|
||||
\begin{ESCTaskFrame}{TASK01 · Low/Medium/High: ownership i dziedziczenie priorytetu}
|
||||
{\scriptsize\ttfamily 2392f81a-ed6c-510b-86b5-06c5e2f1c6aa}\par
|
||||
\begin{ESCBlockFrame}{A — kontrakt i przewidywanie}
|
||||
Rozpisz owner, wait list i priorytety p1/p2/p3.
|
||||
\begin{ESCStepFrame}{order · Przewidź E03–E08.}
|
||||
Wskaż, kiedy Medium może wykonać pierwszą instrukcję.
|
||||
\end{ESCStepFrame}
|
||||
\begin{ESCStepFrame}{api · Odrzuć fałszywe zamienniki.}
|
||||
Wyjaśnij, dlaczego semafor binarny i vTaskPrioritySet nie dowodzą PIP.
|
||||
\end{ESCStepFrame}
|
||||
\end{ESCBlockFrame}
|
||||
\begin{ESCBlockFrame}{B — replay Hazard3}
|
||||
Każdy RUN zaczyna się od czystej RAM.
|
||||
\begin{ESCStepFrame}{inherit · Zbadaj E02–E05.}
|
||||
Porównaj holder, priority, eReady i started.
|
||||
\end{ESCStepFrame}
|
||||
\begin{ESCStepFrame}{handoff · Zbadaj E06–E09.}
|
||||
Sprawdź High-before-Medium i przywrócenie p1.
|
||||
\end{ESCStepFrame}
|
||||
\begin{ESCStepFrame}{pass · Zbadaj E10.}
|
||||
Zapisz PASS, trzy SP i digest.
|
||||
\end{ESCStepFrame}
|
||||
\end{ESCBlockFrame}
|
||||
\begin{ESCBlockFrame}{Ćwiczenie · Ćwiczenie — dwie blokady}
|
||||
Dodaj drugi zasób wyłącznie do modelu projektowego. Utwórz tabelę globalnego lock order, która usuwa cykl oczekiwania, i wskaż maksymalny czas trzymania obu mutexów.
|
||||
\par\textbf{Evidence:} Diagram A8, tabela lock order i kontrprzykład z cyklem.
|
||||
\par\textbf{Acceptance:} Porządek jest globalny, acykliczny i nie obejmuje nieograniczonej operacji.
|
||||
\end{ESCBlockFrame}
|
||||
\tcblower\textbf{Task acceptance:} PASS; Low 1→3→1; Medium eReady i started=0 podczas dziedziczenia; High E07 przed Medium E08; digest jest deterministyczny.
|
||||
\end{ESCTaskFrame}
|
||||
\begin{ESCConclusionFrame}
|
||||
Mutex rozwiązuje bounded priority inversion przez tymczasowe podniesienie efektywnego priorytetu właściciela. Give może uruchomić High wewnątrz API, zanim kod Low wykona następną instrukcję.
|
||||
\end{ESCConclusionFrame}
|
||||
\ESCSectionBlockEnd
|
||||
|
||||
\end{document}
|
||||
@@ -0,0 +1,12 @@
|
||||
# FC08 page layout
|
||||
|
||||
1. Goal, scope, prediction and acceptance criterion.
|
||||
2. A2 STRUCTURE — portrait.
|
||||
3. A4 APPLICATION — portrait.
|
||||
4. A5 FLOW — portrait (the sequence is taller than it is wide).
|
||||
5. A6 STATE — portrait.
|
||||
6. A7 RUNTIME — portrait.
|
||||
7. A8 PATTERNS and student exercise — landscape.
|
||||
|
||||
Each diagram starts on a new physical page. CODE steps only select source;
|
||||
RUN steps replay from clean RAM to a committed checkpoint.
|
||||