feat: publish FreeRTOS C FC08 card

This commit is contained in:
2026-07-19 16:36:03 +02:00
commit 2e82515c3b
199 changed files with 59703 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

+21
View File
@@ -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
+44
View File
@@ -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-&gt;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-&gt;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-&gt;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-&gt;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-&gt;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-&gt;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

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

+20
View File
@@ -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
+43
View File
@@ -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-&gt;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-&gt;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-&gt;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-&gt;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-&gt;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

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

+36
View File
@@ -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
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

+20
View File
@@ -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
+39
View File
@@ -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-&gt;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-&gt;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-&gt;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-&gt;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-&gt;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-&gt;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-&gt;*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

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

+22
View File
@@ -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
+47
View File
@@ -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-&gt;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-&gt;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-&gt;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-&gt;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-&gt;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-&gt;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-&gt;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

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+20
View File
@@ -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
+39
View File
@@ -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

+38
View File
@@ -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.
+327
View File
@@ -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 E01E10 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 E01E10 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ź E03E08.}
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 E02E05.}
Porównaj holder, priority, eReady i started.
\end{ESCStepFrame}
\begin{ESCStepFrame}{handoff · Zbadaj E06E09.}
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}
+12
View File
@@ -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.