feat: publish FreeRTOS C FC03 card
@@ -0,0 +1,19 @@
|
||||
@startuml
|
||||
!include card-uml-style.iuml
|
||||
scale 620 width
|
||||
top to bottom direction
|
||||
|
||||
class "01 Hazard3 timer\nmtime · mtimecmp" as Timer <<hardware>>
|
||||
class "02 RV32I FreeRTOS port\nmachine-timer trap · tick hook" as Port <<boundary>>
|
||||
class "03 FreeRTOS scheduler\nReady lists · priorities · time slice" as Scheduler <<kernel>>
|
||||
class "04 C application tasks\npeerA · peerB · high probe · verifier" as Application <<application>>
|
||||
|
||||
Timer --> Port : interrupt when mtime >= mtimecmp
|
||||
Port --> Scheduler : xTaskIncrementTick()
|
||||
Scheduler --> Application : select highest-priority Ready task
|
||||
|
||||
note right of Port
|
||||
Tick hook records bounded evidence only.
|
||||
Application uses public task APIs.
|
||||
end note
|
||||
@enduml
|
||||
@@ -0,0 +1,96 @@
|
||||
<?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="502.6301px" preserveAspectRatio="none" style="width:614px;height:502px;" version="1.1" viewBox="0 0 614 502" width="614.6243px" zoomAndPan="magnify"><defs/><g><!--MD5=[1b844c90688aafb95cd8c95626c3b83a]
|
||||
class Timer--><rect fill="#F5F8FA" height="73.2232" id="Timer" style="stroke: #607985; stroke-width: 1.3439306358381504;" width="170.2312" x="77.5" y="7.2483"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="9.8555" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="62.7168" x="131.2572" y="26.2518">«hardware»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="137.0809" x="94.0751" y="51.8023">01 Hazard3 timer</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="129.0173" x="98.1069" y="67.4465">mtime · mtimecmp</text><!--MD5=[a0bfe97ac0a38e6e74cc1c7c7b744b71]
|
||||
class Port--><rect fill="#F5F8FA" height="73.2232" id="Port" style="stroke: #607985; stroke-width: 1.3439306358381504;" width="258.0347" x="33.5983" y="144.9832"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="9.8555" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="62.7168" x="131.2572" y="163.9868">«boundary»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="185.4624" x="69.8844" y="189.5372">02 RV32I FreeRTOS port</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="241.9075" x="41.6618" y="205.1814">machine-timer trap · tick hook</text><!--MD5=[8523c9eb2e1b5151dfc9c2a797373c5f]
|
||||
class Scheduler--><rect fill="#F5F8FA" height="73.2232" id="Scheduler" style="stroke: #607985; stroke-width: 1.3439306358381504;" width="314.4798" x="5.3757" y="282.7182"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="9.8555" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="50.1734" x="137.5289" y="301.7218">«kernel»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="177.3988" x="73.9162" y="327.2722">03 FreeRTOS scheduler</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="298.3526" x="13.4393" y="342.9164">Ready lists · priorities · time slice</text><!--MD5=[0b4e4b4980470ea387cc45de9bd14b5b]
|
||||
class Application--><rect fill="#F5F8FA" height="73.2232" id="Application" style="stroke: #607985; stroke-width: 1.3439306358381504;" width="314.4798" x="5.3757" y="420.4442"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="9.8555" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="81.5318" x="121.8497" y="439.4478">«application»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="185.4624" x="69.8844" y="464.9982">04 C application tasks</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="298.3526" x="13.4393" y="480.6424">peerA · peerB · high probe · verifier</text><path d="M323.4393,159.2199 L323.4393,178.0081 L291.9734,181.5919 L323.4393,185.1757 L323.4393,203.9616 A0,0 0 0 0 323.4393,203.9616 L603.8728,203.9616 A0,0 0 0 0 603.8728,203.9616 L603.8728,168.1795 L594.9133,159.2199 L323.4393,159.2199 A0,0 0 0 0 323.4393,159.2199 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.8959537572254336;"/><path d="M594.9133,159.2199 L594.9133,168.1795 L603.8728,168.1795 L594.9133,159.2199 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.8959537572254336;"/><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="10.7514" lengthAdjust="spacingAndGlyphs" textLength="250.8671" x="334.1908" y="179.0552">Tick hook records bounded evidence only.</text><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="10.7514" lengthAdjust="spacingAndGlyphs" textLength="213.237" x="334.1908" y="191.5705">Application uses public task APIs.</text><!--MD5=[03ba2351f170e1f43ca8cdfe4a465b34]
|
||||
link Timer to Port--><path d="M162.6156,80.8329 C162.6156,98.7251 162.6156,120.4341 162.6156,139.0251 " fill="none" id="Timer->Port" style="stroke: #607985; stroke-width: 1.1647398843930636;"/><polygon fill="#607985" points="162.6156,143.3347,166.1994,135.2711,162.6156,138.8549,159.0318,135.2711,162.6156,143.3347" style="stroke: #607985; stroke-width: 1.1647398843930636;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="12.5434" lengthAdjust="spacingAndGlyphs" textLength="229.3642" x="168.8873" y="117.2043">interrupt when mtime >= mtimecmp</text><!--MD5=[2547f420d094b531404e4e613dbd9530]
|
||||
link Port to Scheduler--><path d="M162.6156,218.5679 C162.6156,236.4601 162.6156,258.1601 162.6156,276.7601 " fill="none" id="Port->Scheduler" style="stroke: #607985; stroke-width: 1.1647398843930636;"/><polygon fill="#607985" points="162.6156,281.0697,166.1994,273.0061,162.6156,276.5899,159.0318,273.0061,162.6156,281.0697" style="stroke: #607985; stroke-width: 1.1647398843930636;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="12.5434" lengthAdjust="spacingAndGlyphs" textLength="143.3526" x="168.8873" y="254.9393">xTaskIncrementTick()</text><!--MD5=[f41f4fa5c5c04a19c1d6c66df1ba7f13]
|
||||
link Scheduler to Application--><path d="M162.6156,356.2939 C162.6156,374.1861 162.6156,395.8951 162.6156,414.4951 " fill="none" id="Scheduler->Application" style="stroke: #607985; stroke-width: 1.1647398843930636;"/><polygon fill="#607985" points="162.6156,418.8046,166.1994,410.741,162.6156,414.3249,159.0318,410.741,162.6156,418.8046" style="stroke: #607985; stroke-width: 1.1647398843930636;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="12.5434" lengthAdjust="spacingAndGlyphs" textLength="243.6994" x="168.8873" y="392.6653">select highest-priority Ready task</text><!--MD5=[dcf19c44d9290853f91ec953b4b334e5]
|
||||
@startuml
|
||||
skinparam backgroundColor white
|
||||
skinparam shadowing false
|
||||
skinparam monochrome false
|
||||
skinparam defaultFontName "DejaVu Sans Mono"
|
||||
skinparam defaultFontSize 14
|
||||
skinparam defaultFontColor #24343D
|
||||
skinparam titleFontName "DejaVu Sans Mono"
|
||||
skinparam titleFontSize 13
|
||||
skinparam titleFontColor #536B78
|
||||
skinparam titleFontStyle plain
|
||||
|
||||
skinparam ArrowColor #607985
|
||||
skinparam ArrowFontColor #425B67
|
||||
skinparam ArrowThickness 1.3
|
||||
skinparam LineThickness 1.3
|
||||
skinparam nodesep 36
|
||||
skinparam ranksep 42
|
||||
skinparam Padding 6
|
||||
|
||||
skinparam classBackgroundColor #F5F8FA
|
||||
skinparam classBorderColor #607985
|
||||
skinparam classBorderThickness 1.5
|
||||
skinparam classFontColor #1F3039
|
||||
skinparam classFontSize 15
|
||||
skinparam classAttributeFontColor #2E424D
|
||||
skinparam classAttributeFontSize 13
|
||||
skinparam classStereotypeFontColor #526B77
|
||||
skinparam classStereotypeFontSize 11
|
||||
skinparam minClassWidth 190
|
||||
skinparam ClassAttributeIconSize 0
|
||||
|
||||
skinparam stateBackgroundColor #F5F8FA
|
||||
skinparam stateBorderColor #607985
|
||||
skinparam stateBorderThickness 1.5
|
||||
skinparam stateFontColor #1F3039
|
||||
skinparam stateFontSize 14
|
||||
skinparam stateAttributeFontSize 13
|
||||
|
||||
skinparam noteBackgroundColor #F7F5ED
|
||||
skinparam noteBorderColor #8A887C
|
||||
skinparam noteFontColor #3E4B50
|
||||
skinparam noteFontSize 12
|
||||
|
||||
skinparam ParticipantBackgroundColor #F5F8FA
|
||||
skinparam ParticipantBorderColor #607985
|
||||
skinparam ParticipantBorderThickness 1.5
|
||||
skinparam ParticipantFontColor #1F3039
|
||||
skinparam ParticipantFontSize 13
|
||||
skinparam ActorBorderColor #607985
|
||||
skinparam ActorFontColor #1F3039
|
||||
skinparam LifeLineBorderColor #8297A1
|
||||
skinparam LifeLineBackgroundColor #F9FBFC
|
||||
skinparam SequenceArrowColor #607985
|
||||
skinparam SequenceMessageAlign center
|
||||
skinparam ParticipantPadding 18
|
||||
skinparam BoxPadding 8
|
||||
|
||||
hide circle
|
||||
hide empty members
|
||||
scale 620 width
|
||||
top to bottom direction
|
||||
|
||||
class "01 Hazard3 timer\nmtime · mtimecmp" as Timer <<hardware>>
|
||||
class "02 RV32I FreeRTOS port\nmachine-timer trap · tick hook" as Port <<boundary>>
|
||||
class "03 FreeRTOS scheduler\nReady lists · priorities · time slice" as Scheduler <<kernel>>
|
||||
class "04 C application tasks\npeerA · peerB · high probe · verifier" as Application <<application>>
|
||||
|
||||
Timer - -> Port : interrupt when mtime >= mtimecmp
|
||||
Port - -> Scheduler : xTaskIncrementTick()
|
||||
Scheduler - -> Application : select highest-priority Ready task
|
||||
|
||||
note right of Port
|
||||
Tick hook records bounded evidence only.
|
||||
Application uses public task APIs.
|
||||
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: 8.8 KiB |
@@ -0,0 +1,53 @@
|
||||
@startuml
|
||||
!include card-uml-style.iuml
|
||||
scale 900 width
|
||||
left to right direction
|
||||
|
||||
class "01 PeerContext [2]" as Peers <<C struct>> {
|
||||
id : uint32_t
|
||||
configured_priority : UBaseType_t = 2
|
||||
handle : TaskHandle_t
|
||||
iterations · checksum
|
||||
first_tick · last_tick
|
||||
entry_sp · stack range
|
||||
}
|
||||
|
||||
class "02 HighProbeContext" as Probe <<C struct>> {
|
||||
initial_priority = 0
|
||||
target_priority = 3
|
||||
handle : TaskHandle_t
|
||||
run_tick
|
||||
ran_before_caller_returned
|
||||
}
|
||||
|
||||
class "03 VerifierContext" as Verify <<C struct>> {
|
||||
configured_priority = 1
|
||||
handle : TaskHandle_t
|
||||
pass
|
||||
}
|
||||
|
||||
class "04 switch trace" as SwitchTrace <<bounded record>> {
|
||||
task[16]
|
||||
tick[16]
|
||||
count · changes
|
||||
captured A · B · A
|
||||
}
|
||||
|
||||
class "05 preemption markers" as OrderTrace <<bounded record>> {
|
||||
1 = before_raise
|
||||
2 = high_probe
|
||||
3 = after_raise
|
||||
}
|
||||
|
||||
Peers --> SwitchTrace : one entry per observed task change
|
||||
Peers --> Probe : vTaskPrioritySet(handle, 3)
|
||||
Probe --> OrderTrace : marker 2
|
||||
Peers --> OrderTrace : markers 1 and 3
|
||||
Verify --> Peers : checks both
|
||||
Verify --> Probe : checks preemption proof
|
||||
|
||||
note bottom of SwitchTrace
|
||||
A→B→A is a committed subsequence.
|
||||
Repeated loop iterations are not logged.
|
||||
end note
|
||||
@enduml
|
||||
@@ -0,0 +1,134 @@
|
||||
<?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="324.9253px" preserveAspectRatio="none" style="width:896px;height:324px;" version="1.1" viewBox="0 0 896 324" width="896.2343px" zoomAndPan="magnify"><defs/><g><!--MD5=[24a425f7d3746dcb4595e0db6477f052]
|
||||
class Peers--><rect fill="#F5F8FA" height="126.4532" id="Peers" style="stroke: #607985; stroke-width: 0.8069336521219366;" width="172.1458" x="192.5882" y="74.5069"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="5.9175" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="37.6569" x="259.8326" y="85.9172">«C struct»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="8.0693" lengthAdjust="spacingAndGlyphs" textLength="91.9904" x="232.6659" y="101.2584">01 PeerContext [2]</text><line style="stroke: #607985; stroke-width: 0.8069336521219366;" x1="193.1261" x2="364.1961" y1="109.0789" y2="109.0789"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="55.9474" x="199.0436" y="120.95">id : uint32_t</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="159.2349" x="199.0436" y="135.5462">configured_priority : UBaseType_t = 2</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="90.3766" x="199.0436" y="150.1425">handle : TaskHandle_t</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="90.3766" x="199.0436" y="164.7387">iterations · checksum</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="94.6802" x="199.0436" y="179.335">first_tick · last_tick</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="94.6802" x="199.0436" y="193.9312">entry_sp · stack range</text><!--MD5=[07843a28108f8f9fb73050ea95a4c52b]
|
||||
class Probe--><rect fill="#F5F8FA" height="111.857" id="Probe" style="stroke: #607985; stroke-width: 0.8069336521219366;" width="124.8057" x="562.9707" y="207.6886"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="5.9175" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="37.6569" x="606.5451" y="219.0989">«C struct»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="8.0693" lengthAdjust="spacingAndGlyphs" textLength="96.832" x="576.9576" y="234.4401">02 HighProbeContext</text><line style="stroke: #607985; stroke-width: 0.8069336521219366;" x1="563.5087" x2="687.2385" y1="242.2606" y2="242.2606"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="86.0729" x="569.4262" y="254.1317">initial_priority = 0</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="81.7693" x="569.4262" y="268.7279">target_priority = 3</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="90.3766" x="569.4262" y="283.3242">handle : TaskHandle_t</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="34.4292" x="569.4262" y="297.9204">run_tick</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="111.8948" x="569.4262" y="312.5167">ran_before_caller_returned</text><!--MD5=[ec6b96eb83f6cad8feb931a71676c16d]
|
||||
class Verify--><rect fill="#F5F8FA" height="82.6645" id="Verify" style="stroke: #607985; stroke-width: 0.8069336521219366;" width="111.8948" x="3.2277" y="196.9994"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="5.9175" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="37.6569" x="40.3467" y="208.4097">«C struct»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="8.0693" lengthAdjust="spacingAndGlyphs" textLength="91.9904" x="13.1799" y="223.7509">03 VerifierContext</text><line style="stroke: #607985; stroke-width: 0.8069336521219366;" x1="3.7657" x2="114.5846" y1="231.5715" y2="231.5715"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="98.9839" x="9.6832" y="243.4425">configured_priority = 1</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="90.3766" x="9.6832" y="258.0387">handle : TaskHandle_t</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="17.2146" x="9.6832" y="272.635">pass</text><!--MD5=[052633df24897554133d204f5acba5bb]
|
||||
class SwitchTrace--><rect fill="#F5F8FA" height="97.2607" id="SwitchTrace" style="stroke: #607985; stroke-width: 0.8069336521219366;" width="102.2116" x="574.2678" y="44.9946"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="5.9175" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="60.251" x="595.2481" y="56.4049">«bounded record»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="8.0693" lengthAdjust="spacingAndGlyphs" textLength="77.4656" x="586.6408" y="71.7461">04 switch trace</text><line style="stroke: #607985; stroke-width: 0.8069336521219366;" x1="574.8057" x2="675.9414" y1="79.5667" y2="79.5667"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="34.4292" x="580.7233" y="91.4377">task[16]</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="34.4292" x="580.7233" y="106.034">tick[16]</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="64.5547" x="580.7233" y="120.6302">count · changes</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="77.4656" x="580.7233" y="135.2265">captured A · B · A</text><!--MD5=[903c07076df7fb06c97b1a15577bcab5]
|
||||
class OrderTrace--><rect fill="#F5F8FA" height="82.6645" id="OrderTrace" style="stroke: #607985; stroke-width: 0.8069336521219366;" width="116.1984" x="774.1184" y="93.7119"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="5.9175" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="60.251" x="802.0921" y="105.1222">«bounded record»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="8.0693" lengthAdjust="spacingAndGlyphs" textLength="106.5152" x="778.96" y="120.4634">05 preemption markers</text><line style="stroke: #607985; stroke-width: 0.8069336521219366;" x1="774.6563" x2="889.7788" y1="128.284" y2="128.284"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="68.8583" x="780.5738" y="140.155">1 = before_raise</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="60.251" x="780.5738" y="154.7512">2 = high_probe</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="64.5547" x="780.5738" y="169.3475">3 = after_raise</text><path d="M541.1835,161.4244 L541.1835,188.2886 A0,0 0 0 0 541.1835,188.2886 L709.5637,188.2886 A0,0 0 0 0 709.5637,188.2886 L709.5637,166.8039 L704.1841,161.4244 L627.5254,161.4244 L625.3736,142.4668 L623.2218,161.4244 L541.1835,161.4244 A0,0 0 0 0 541.1835,161.4244 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.5379557680812911;"/><path d="M704.1841,161.4244 L704.1841,166.8039 L709.5637,166.8039 L704.1841,161.4244 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.5379557680812911;"/><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="6.4555" lengthAdjust="spacingAndGlyphs" textLength="124.2678" x="547.639" y="173.334">A→B→A is a committed subsequence.</text><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="6.4555" lengthAdjust="spacingAndGlyphs" textLength="150.6276" x="547.639" y="180.8486">Repeated loop iterations are not logged.</text><!--MD5=[96579476f064ff1ffa3f552d3ff15ad8]
|
||||
link Peers to SwitchTrace--><path d="M364.8577,126.8016 C429.2833,118.5816 515.5983,107.5643 570.728,100.5278 " fill="none" id="Peers->SwitchTrace" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><polygon fill="#607985" points="573.3425,100.1943,568.2687,98.6686,570.6741,100.5326,568.81,102.938,573.3425,100.1943" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="7.5314" lengthAdjust="spacingAndGlyphs" textLength="146.324" x="379.7968" y="101.2783">one entry per observed task change</text><!--MD5=[e0cf694b28b62e4fb8bc23e78e5c0c4e]
|
||||
link Peers to Probe--><path d="M364.8577,168.9342 C425.0873,190.8667 504.4411,219.7711 559.5655,239.8476 " fill="none" id="Peers->Probe" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><polygon fill="#607985" points="562.0669,240.7567,558.2558,237.0762,559.54,239.835,556.7811,241.1193,562.0669,240.7567" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="7.5314" lengthAdjust="spacingAndGlyphs" textLength="116.1984" x="394.8595" y="169.5503">vTaskPrioritySet(handle, 3)</text><!--MD5=[5dc87c6eff7493b6adeed17dd71f1a79]
|
||||
link Probe to OrderTrace--><path d="M687.9271,224.8655 C714.303,208.3879 744.9558,189.2367 771.165,172.8613 " fill="none" id="Probe->OrderTrace" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><polygon fill="#607985" points="773.3168,171.5111,768.0707,172.2524,771.0359,172.9366,770.3516,175.9018,773.3168,171.5111" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="7.5314" lengthAdjust="spacingAndGlyphs" textLength="34.4292" x="724.6264" y="174.9191">marker 2</text><!--MD5=[16ba7551656b4926f6566f6281eca0fa]
|
||||
link Peers to OrderTrace--><path d="M364.89,88.8273 C452.8942,45.1829 593.0801,-5.9283 709.5637,35.5266 C741.1363,46.7591 770.4603,70.0418 792.4573,91.2642 " fill="none" id="Peers->OrderTrace" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><polygon fill="#607985" points="794.2487,93.0072,792.2868,88.0855,792.3237,91.1285,789.2808,91.1654,794.2487,93.0072" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="7.5314" lengthAdjust="spacingAndGlyphs" textLength="64.5547" x="593.0962" y="14.8288">markers 1 and 3</text><!--MD5=[5305fbff9ac0c80de73336ac373d19f8]
|
||||
link Verify to Peers--><path d="M115.2516,212.7507 C137.7812,202.379 164.3616,190.1351 189.4465,178.5798 " fill="none" id="Verify->Peers" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><polygon fill="#607985" points="191.7597,177.5146,186.462,177.593,189.3182,178.6433,188.2679,181.4994,191.7597,177.5146" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="7.5314" lengthAdjust="spacingAndGlyphs" textLength="47.3401" x="130.1853" y="179.6369">checks both</text><!--MD5=[58befbd82e70776cbcefaf9d91600c8d]
|
||||
link Verify to Probe--><path d="M115.1871,240.8159 C220.1261,245.5123 447.208,255.6689 559.3933,260.688 " fill="none" id="Verify->Probe" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><polygon fill="#607985" points="562.0293,260.8063,557.291,258.4357,559.3423,260.6835,557.0945,262.7348,562.0293,260.8063" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="7.5314" lengthAdjust="spacingAndGlyphs" textLength="98.9839" x="229.1692" y="239.1349">checks preemption proof</text><!--MD5=[544ef8bcaf0d67d3a948fb6a2c2ba12b]
|
||||
@startuml
|
||||
skinparam backgroundColor white
|
||||
skinparam shadowing false
|
||||
skinparam monochrome false
|
||||
skinparam defaultFontName "DejaVu Sans Mono"
|
||||
skinparam defaultFontSize 14
|
||||
skinparam defaultFontColor #24343D
|
||||
skinparam titleFontName "DejaVu Sans Mono"
|
||||
skinparam titleFontSize 13
|
||||
skinparam titleFontColor #536B78
|
||||
skinparam titleFontStyle plain
|
||||
|
||||
skinparam ArrowColor #607985
|
||||
skinparam ArrowFontColor #425B67
|
||||
skinparam ArrowThickness 1.3
|
||||
skinparam LineThickness 1.3
|
||||
skinparam nodesep 36
|
||||
skinparam ranksep 42
|
||||
skinparam Padding 6
|
||||
|
||||
skinparam classBackgroundColor #F5F8FA
|
||||
skinparam classBorderColor #607985
|
||||
skinparam classBorderThickness 1.5
|
||||
skinparam classFontColor #1F3039
|
||||
skinparam classFontSize 15
|
||||
skinparam classAttributeFontColor #2E424D
|
||||
skinparam classAttributeFontSize 13
|
||||
skinparam classStereotypeFontColor #526B77
|
||||
skinparam classStereotypeFontSize 11
|
||||
skinparam minClassWidth 190
|
||||
skinparam ClassAttributeIconSize 0
|
||||
|
||||
skinparam stateBackgroundColor #F5F8FA
|
||||
skinparam stateBorderColor #607985
|
||||
skinparam stateBorderThickness 1.5
|
||||
skinparam stateFontColor #1F3039
|
||||
skinparam stateFontSize 14
|
||||
skinparam stateAttributeFontSize 13
|
||||
|
||||
skinparam noteBackgroundColor #F7F5ED
|
||||
skinparam noteBorderColor #8A887C
|
||||
skinparam noteFontColor #3E4B50
|
||||
skinparam noteFontSize 12
|
||||
|
||||
skinparam ParticipantBackgroundColor #F5F8FA
|
||||
skinparam ParticipantBorderColor #607985
|
||||
skinparam ParticipantBorderThickness 1.5
|
||||
skinparam ParticipantFontColor #1F3039
|
||||
skinparam ParticipantFontSize 13
|
||||
skinparam ActorBorderColor #607985
|
||||
skinparam ActorFontColor #1F3039
|
||||
skinparam LifeLineBorderColor #8297A1
|
||||
skinparam LifeLineBackgroundColor #F9FBFC
|
||||
skinparam SequenceArrowColor #607985
|
||||
skinparam SequenceMessageAlign center
|
||||
skinparam ParticipantPadding 18
|
||||
skinparam BoxPadding 8
|
||||
|
||||
hide circle
|
||||
hide empty members
|
||||
scale 900 width
|
||||
left to right direction
|
||||
|
||||
class "01 PeerContext [2]" as Peers <<C struct>> {
|
||||
id : uint32_t
|
||||
configured_priority : UBaseType_t = 2
|
||||
handle : TaskHandle_t
|
||||
iterations · checksum
|
||||
first_tick · last_tick
|
||||
entry_sp · stack range
|
||||
}
|
||||
|
||||
class "02 HighProbeContext" as Probe <<C struct>> {
|
||||
initial_priority = 0
|
||||
target_priority = 3
|
||||
handle : TaskHandle_t
|
||||
run_tick
|
||||
ran_before_caller_returned
|
||||
}
|
||||
|
||||
class "03 VerifierContext" as Verify <<C struct>> {
|
||||
configured_priority = 1
|
||||
handle : TaskHandle_t
|
||||
pass
|
||||
}
|
||||
|
||||
class "04 switch trace" as SwitchTrace <<bounded record>> {
|
||||
task[16]
|
||||
tick[16]
|
||||
count · changes
|
||||
captured A · B · A
|
||||
}
|
||||
|
||||
class "05 preemption markers" as OrderTrace <<bounded record>> {
|
||||
1 = before_raise
|
||||
2 = high_probe
|
||||
3 = after_raise
|
||||
}
|
||||
|
||||
Peers - -> SwitchTrace : one entry per observed task change
|
||||
Peers - -> Probe : vTaskPrioritySet(handle, 3)
|
||||
Probe - -> OrderTrace : marker 2
|
||||
Peers - -> OrderTrace : markers 1 and 3
|
||||
Verify - -> Peers : checks both
|
||||
Verify - -> Probe : checks preemption proof
|
||||
|
||||
note bottom of SwitchTrace
|
||||
A→B→A is a committed subsequence.
|
||||
Repeated loop iterations are not logged.
|
||||
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: 15 KiB |
@@ -0,0 +1,21 @@
|
||||
@startuml
|
||||
!include card-uml-style.iuml
|
||||
scale 900 width
|
||||
left to right direction
|
||||
|
||||
class "01 peerA\npriority 2 · CPU-bound" as PeerA <<task>>
|
||||
class "02 peerB\npriority 2 · CPU-bound" as PeerB <<task>>
|
||||
class "03 high_probe\npriority 0 → 3" as High <<task>>
|
||||
class "04 verifier\npriority 1 · runs last" as Verifier <<task>>
|
||||
|
||||
PeerA <--> PeerB : tick time slicing\nA → B → A
|
||||
PeerA --> High : raise to priority 3
|
||||
High --> PeerA : preempts before call returns
|
||||
PeerA --> Verifier : stop requested after return
|
||||
PeerB --> Verifier : both peers self-delete
|
||||
|
||||
note right of High
|
||||
HIGH writes marker 2 and self-deletes.
|
||||
peerA then writes marker 3.
|
||||
end note
|
||||
@enduml
|
||||
@@ -0,0 +1,100 @@
|
||||
<?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="233.2553px" preserveAspectRatio="none" style="width:895px;height:233px;" version="1.1" viewBox="0 0 895 233" width="895.7845px" zoomAndPan="magnify"><defs/><g><!--MD5=[d4f5dc331a1814e15a9185448555d0ce]
|
||||
class PeerA--><rect fill="#F5F8FA" height="57.4191" id="PeerA" style="stroke: #607985; stroke-width: 1.053864168618267;" width="151.7564" x="4.2155" y="96.4426"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="7.7283" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="29.5082" x="65.3396" y="111.3446">«task»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="56.9087" x="51.6393" y="131.3803">01 peerA</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="139.1101" x="10.5386" y="143.648">priority 2 · CPU-bound</text><!--MD5=[627f71e47f335e85ff7a0fe7aa09dc61]
|
||||
class PeerB--><rect fill="#F5F8FA" height="57.4191" id="PeerB" style="stroke: #607985; stroke-width: 1.053864168618267;" width="151.7564" x="357.6112" y="75.3653"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="7.7283" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="29.5082" x="418.7354" y="90.2673">«task»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="56.9087" x="405.0351" y="110.3031">02 peerB</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="139.1101" x="363.9344" y="122.5707">priority 2 · CPU-bound</text><!--MD5=[87dec8bc37044ee287e36547435f1f2f]
|
||||
class High--><rect fill="#F5F8FA" height="57.4191" id="High" style="stroke: #607985; stroke-width: 1.053864168618267;" width="133.4895" x="366.7447" y="162.4848"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="7.7283" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="29.5082" x="418.7354" y="177.3867">«task»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="88.5246" x="389.2272" y="197.4225">03 high_probe</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="88.5246" x="389.2272" y="209.6901">priority 0 → 3</text><!--MD5=[b38b728b548c0e3506dacd7eefeceafe]
|
||||
class Verifier--><rect fill="#F5F8FA" height="57.4191" id="Verifier" style="stroke: #607985; stroke-width: 1.053864168618267;" width="151.7564" x="706.4403" y="16.3489"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="7.7283" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="29.5082" x="767.5644" y="31.2509">«task»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="75.8782" x="744.3794" y="51.2867">04 verifier</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="139.1101" x="712.7635" y="63.5543">priority 1 · runs last</text><path d="M677.2834,173.6557 L677.2834,188.3888 L500.5644,191.1991 L677.2834,194.0094 L677.2834,208.7406 A0,0 0 0 0 677.2834,208.7406 L887.3536,208.7406 A0,0 0 0 0 887.3536,208.7406 L887.3536,180.6815 L880.3279,173.6557 L677.2834,173.6557 A0,0 0 0 0 677.2834,173.6557 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.702576112412178;"/><path d="M880.3279,173.6557 L880.3279,180.6815 L887.3536,180.6815 L880.3279,173.6557 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.702576112412178;"/><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="8.4309" lengthAdjust="spacingAndGlyphs" textLength="186.8852" x="685.7143" y="189.2098">HIGH writes marker 2 and self-deletes.</text><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="8.4309" lengthAdjust="spacingAndGlyphs" textLength="132.7869" x="685.7143" y="199.0239">peerA then writes marker 3.</text><!--MD5=[e17ca89136f6e96c8edfc2efe34a138f]
|
||||
link PeerA to PeerB--><path d="M160.8759,120.3583 C218.3677,116.9157 295.5176,112.2998 352.9532,108.8571 " fill="none" id="PeerA-PeerB" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><polygon fill="#607985" points="356.3396,108.6534,349.8594,106.2268,352.833,108.8638,350.1961,111.8374,356.3396,108.6534" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><polygon fill="#607985" points="157.37,120.5691,163.8502,122.9956,160.8766,120.3587,163.5135,117.3851,157.37,120.5691" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="9.8361" lengthAdjust="spacingAndGlyphs" textLength="95.5504" x="206.5574" y="92.034">tick time slicing</text><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="9.8361" lengthAdjust="spacingAndGlyphs" textLength="50.5855" x="229.0398" y="103.4838">A → B → A</text><!--MD5=[7fd7a179d117b50a2a0b920d41dd806d]
|
||||
link PeerA to High--><path d="M104.6136,154.1593 C121.082,171.815 144.6674,192.7799 170.726,202.4403 C232.5246,225.3443 308.2061,218.7541 362.3255,208.7073 " fill="none" id="PeerA->High" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><polygon fill="#607985" points="365.466,208.1101,358.731,206.5226,362.0142,208.7623,359.7746,212.0455,365.466,208.1101" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="9.8361" lengthAdjust="spacingAndGlyphs" textLength="106.7916" x="200.9368" y="195.4111">raise to priority 3</text><!--MD5=[d62c0dcf4c85e672724ed87df3e66a79]
|
||||
link High to PeerA--><path d="M366.5831,181.3349 C313.4543,173.1007 237.0562,160.5527 170.726,146.9368 C167.4098,146.2553 164.0234,145.5386 160.6089,144.7939 " fill="none" id="High->PeerA" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><polygon fill="#607985" points="157.3138,144.0703,162.8768,148.1853,160.743,144.8323,164.0961,142.6986,157.3138,144.0703" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="9.8361" lengthAdjust="spacingAndGlyphs" textLength="157.377" x="175.644" y="139.9076">preempts before call returns</text><!--MD5=[da61d059c86f4bb0c5cb4c08f1d74312]
|
||||
link PeerA to Verifier--><path d="M120.8009,96.1616 C135.7588,86.7681 153.3513,77.3396 170.726,71.7611 C353.459,13.0398 582.7869,23.9438 701.7471,35.4169 " fill="none" id="PeerA->Verifier" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><polygon fill="#607985" points="705.2248,35.7541,699.2049,32.3423,701.7286,35.4125,698.6583,37.9362,705.2248,35.7541" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="9.8361" lengthAdjust="spacingAndGlyphs" textLength="151.7564" x="357.6112" y="19.3385">stop requested after return</text><!--MD5=[4142c62ab8c50b841a4bc588d0039040]
|
||||
link PeerB to Verifier--><path d="M509.5293,91.363 C554.0445,83.8454 611.5012,74.1218 662.5293,65.4379 C675.2529,63.267 688.7424,60.9696 701.8946,58.7213 " fill="none" id="PeerB->Verifier" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><polygon fill="#607985" points="705.2951,58.1382,698.5887,56.434,701.8325,58.7303,699.5361,61.9741,705.2951,58.1382" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="9.8361" lengthAdjust="spacingAndGlyphs" textLength="123.6534" x="533.9578" y="58.4087">both peers self-delete</text><!--MD5=[137f40278e8a32983395a4c1fad58d90]
|
||||
@startuml
|
||||
skinparam backgroundColor white
|
||||
skinparam shadowing false
|
||||
skinparam monochrome false
|
||||
skinparam defaultFontName "DejaVu Sans Mono"
|
||||
skinparam defaultFontSize 14
|
||||
skinparam defaultFontColor #24343D
|
||||
skinparam titleFontName "DejaVu Sans Mono"
|
||||
skinparam titleFontSize 13
|
||||
skinparam titleFontColor #536B78
|
||||
skinparam titleFontStyle plain
|
||||
|
||||
skinparam ArrowColor #607985
|
||||
skinparam ArrowFontColor #425B67
|
||||
skinparam ArrowThickness 1.3
|
||||
skinparam LineThickness 1.3
|
||||
skinparam nodesep 36
|
||||
skinparam ranksep 42
|
||||
skinparam Padding 6
|
||||
|
||||
skinparam classBackgroundColor #F5F8FA
|
||||
skinparam classBorderColor #607985
|
||||
skinparam classBorderThickness 1.5
|
||||
skinparam classFontColor #1F3039
|
||||
skinparam classFontSize 15
|
||||
skinparam classAttributeFontColor #2E424D
|
||||
skinparam classAttributeFontSize 13
|
||||
skinparam classStereotypeFontColor #526B77
|
||||
skinparam classStereotypeFontSize 11
|
||||
skinparam minClassWidth 190
|
||||
skinparam ClassAttributeIconSize 0
|
||||
|
||||
skinparam stateBackgroundColor #F5F8FA
|
||||
skinparam stateBorderColor #607985
|
||||
skinparam stateBorderThickness 1.5
|
||||
skinparam stateFontColor #1F3039
|
||||
skinparam stateFontSize 14
|
||||
skinparam stateAttributeFontSize 13
|
||||
|
||||
skinparam noteBackgroundColor #F7F5ED
|
||||
skinparam noteBorderColor #8A887C
|
||||
skinparam noteFontColor #3E4B50
|
||||
skinparam noteFontSize 12
|
||||
|
||||
skinparam ParticipantBackgroundColor #F5F8FA
|
||||
skinparam ParticipantBorderColor #607985
|
||||
skinparam ParticipantBorderThickness 1.5
|
||||
skinparam ParticipantFontColor #1F3039
|
||||
skinparam ParticipantFontSize 13
|
||||
skinparam ActorBorderColor #607985
|
||||
skinparam ActorFontColor #1F3039
|
||||
skinparam LifeLineBorderColor #8297A1
|
||||
skinparam LifeLineBackgroundColor #F9FBFC
|
||||
skinparam SequenceArrowColor #607985
|
||||
skinparam SequenceMessageAlign center
|
||||
skinparam ParticipantPadding 18
|
||||
skinparam BoxPadding 8
|
||||
|
||||
hide circle
|
||||
hide empty members
|
||||
scale 900 width
|
||||
left to right direction
|
||||
|
||||
class "01 peerA\npriority 2 · CPU-bound" as PeerA <<task>>
|
||||
class "02 peerB\npriority 2 · CPU-bound" as PeerB <<task>>
|
||||
class "03 high_probe\npriority 0 → 3" as High <<task>>
|
||||
class "04 verifier\npriority 1 · runs last" as Verifier <<task>>
|
||||
|
||||
PeerA <- -> PeerB : tick time slicing\nA → B → A
|
||||
PeerA - -> High : raise to priority 3
|
||||
High - -> PeerA : preempts before call returns
|
||||
PeerA - -> Verifier : stop requested after return
|
||||
PeerB - -> Verifier : both peers self-delete
|
||||
|
||||
note right of High
|
||||
HIGH writes marker 2 and self-deletes.
|
||||
peerA then writes marker 3.
|
||||
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: 10 KiB |
@@ -0,0 +1,36 @@
|
||||
@startuml
|
||||
!include card-uml-style.iuml
|
||||
scale 900 width
|
||||
hide footbox
|
||||
skinparam ParticipantPadding 16
|
||||
|
||||
participant "main" as Main
|
||||
participant "Scheduler" as Scheduler
|
||||
participant "tick hook" as Tick
|
||||
participant "high probe" as High
|
||||
participant "peerA" as A
|
||||
participant "peerB" as B
|
||||
participant "verifier" as Verify
|
||||
|
||||
Main -> Main : <b>01</b> config + contexts committed
|
||||
||26||
|
||||
Main -> High : <b>02</b> create Ready at priority 0
|
||||
||26||
|
||||
Main -> A : <b>03</b> priorities high=0, peers=2/2, verifier=1
|
||||
Main -> B
|
||||
Main -> Verify
|
||||
||26||
|
||||
Main -> Scheduler : <b>04</b> vTaskStartScheduler()
|
||||
activate Scheduler
|
||||
Scheduler -> A : <b>05</b> first peer runs
|
||||
deactivate Scheduler
|
||||
||26||
|
||||
Tick -> Tick : <b>06</b> first machine-timer tick recorded
|
||||
||26||
|
||||
A -> B : time slice
|
||||
B -> A : <b>07</b> committed subsequence A → B → A
|
||||
|
||||
note over Main,Verify
|
||||
Continue on part 2/2 with identical participant order.
|
||||
end note
|
||||
@enduml
|
||||
|
After Width: | Height: | Size: 13 KiB |
@@ -0,0 +1,36 @@
|
||||
@startuml
|
||||
!include card-uml-style.iuml
|
||||
scale 900 width
|
||||
hide footbox
|
||||
skinparam ParticipantPadding 16
|
||||
|
||||
participant "main" as Main
|
||||
participant "Scheduler" as Scheduler
|
||||
participant "tick hook" as Tick
|
||||
participant "high probe" as High
|
||||
participant "peerA" as A
|
||||
participant "peerB" as B
|
||||
participant "verifier" as Verify
|
||||
|
||||
A -> A : <b>08</b> marker before_raise
|
||||
A -> Scheduler : vTaskPrioritySet(high, 3)
|
||||
activate Scheduler
|
||||
Scheduler -> High : <b>09</b> immediate higher-priority selection
|
||||
activate High
|
||||
High -> High : marker HIGH
|
||||
High -> Scheduler : vTaskDelete(NULL)
|
||||
deactivate High
|
||||
Scheduler -> A : return to caller
|
||||
deactivate Scheduler
|
||||
||26||
|
||||
A -> A : <b>10</b> marker after_raise; request stop
|
||||
A -> Scheduler : self-delete after bounded cleanup
|
||||
B -> Scheduler : <b>11</b> second peer finishes and self-deletes
|
||||
||26||
|
||||
Scheduler -> Verify : <b>12</b> lowest-priority verifier publishes PASS
|
||||
|
||||
note over Scheduler,Verify
|
||||
Exact claim: marker projection before → HIGH → after.
|
||||
Another Ready task may legally run before peerA is selected again.
|
||||
end note
|
||||
@enduml
|
||||
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,28 @@
|
||||
@startuml
|
||||
!include card-uml-style.iuml
|
||||
scale 900 width
|
||||
left to right direction
|
||||
|
||||
state "01 high Ready\npriority 0" as HighLow
|
||||
state "02 high Ready\npriority 3" as HighReady
|
||||
state "03 high Running" as HighRun
|
||||
state "04 high Deleted" as HighDeleted
|
||||
|
||||
state "05 peers Ready / Running\npriority 2 · time sliced" as Peers
|
||||
state "06 peers Completed / Deleted" as PeersDone
|
||||
|
||||
state "07 verifier Ready\npriority 1" as VerifyReady
|
||||
state "08 verifier Running\nPASS" as VerifyRun
|
||||
|
||||
HighLow --> HighReady : peerA vTaskPrioritySet
|
||||
HighReady --> HighRun : preempts priority 2
|
||||
HighRun --> HighDeleted : self-delete
|
||||
Peers --> Peers : tick rotates equal priority
|
||||
Peers --> PeersDone : stop after peerA returns
|
||||
VerifyReady --> VerifyRun : priorities 2/3 no longer Ready
|
||||
|
||||
note bottom of Peers
|
||||
Ready does not mean Running.
|
||||
Priority selects first; time slicing acts only among equals.
|
||||
end note
|
||||
@enduml
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,56 @@
|
||||
@startuml
|
||||
!include card-uml-style.iuml
|
||||
scale 900 width
|
||||
left to right direction
|
||||
|
||||
class "01 timer CSRs" as Timer <<runtime>> {
|
||||
mtime
|
||||
mtimecmp
|
||||
mcause = 0x80000007
|
||||
mepc = interrupted task PC
|
||||
}
|
||||
|
||||
class "02 ISR evidence" as ISR <<runtime>> {
|
||||
first_tick_count
|
||||
ISR sp
|
||||
one-shot tick checkpoint
|
||||
}
|
||||
|
||||
class "03 scheduler evidence" as Kernel <<debugger only>> {
|
||||
Ready lists by priority
|
||||
selected TCB
|
||||
tick count
|
||||
}
|
||||
|
||||
class "04 peer runtime" as Peer <<runtime>> {
|
||||
context address
|
||||
handle / TCB
|
||||
task stack range
|
||||
PC · SP · priority 2
|
||||
}
|
||||
|
||||
class "05 high runtime" as High <<runtime>> {
|
||||
handle / TCB
|
||||
priority 0 → 3
|
||||
PC · SP · run_tick
|
||||
}
|
||||
|
||||
class "06 committed evidence" as Evidence <<application>> {
|
||||
switch trace A · B · A
|
||||
markers before · HIGH · after
|
||||
source blob · ELF hash
|
||||
PASS
|
||||
}
|
||||
|
||||
Timer --> ISR : machine-timer trap
|
||||
ISR --> Kernel : scheduling opportunity
|
||||
Kernel --> Peer : equal-priority rotation
|
||||
Kernel --> High : select after priority raise
|
||||
Peer --> Evidence
|
||||
High --> Evidence
|
||||
|
||||
note bottom of Kernel
|
||||
Kernel internals are debugger observations only.
|
||||
Program assertions use public API and application records.
|
||||
end note
|
||||
@enduml
|
||||
@@ -0,0 +1,138 @@
|
||||
<?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="166.3973px" preserveAspectRatio="none" style="width:897px;height:166px;" version="1.1" viewBox="0 0 897 166" width="897.0057px" zoomAndPan="magnify"><defs/><g><!--MD5=[1b844c90688aafb95cd8c95626c3b83a]
|
||||
class Timer--><rect fill="#F5F8FA" height="77.3371" id="Timer" style="stroke: #607985; stroke-width: 0.6416349809885932;" width="99.2395" x="2.5665" y="39.683"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="4.7053" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="26.9487" x="38.712" y="48.7559">«runtime»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="6.4163" lengthAdjust="spacingAndGlyphs" textLength="53.8973" x="25.2376" y="60.9545">01 timer CSRs</text><line style="stroke: #607985; stroke-width: 0.6416349809885932;" x1="2.9943" x2="101.3783" y1="67.173" y2="67.173"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="17.1103" x="7.6996" y="76.6123">mtime</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="27.3764" x="7.6996" y="88.2185">mtimecmp</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="65.019" x="7.6996" y="99.8248">mcause = 0x80000007</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="88.9734" x="7.6996" y="111.431">mepc = interrupted task PC</text><!--MD5=[4fa375cf5dd147cdc7dc8493ef379d20]
|
||||
class ISR--><rect fill="#F5F8FA" height="65.7308" id="ISR" style="stroke: #607985; stroke-width: 0.6416349809885932;" width="92.3954" x="187.3574" y="45.4876"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="4.7053" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="26.9487" x="220.0808" y="54.5606">«runtime»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="6.4163" lengthAdjust="spacingAndGlyphs" textLength="61.597" x="202.7567" y="66.7591">02 ISR evidence</text><line style="stroke: #607985; stroke-width: 0.6416349809885932;" x1="187.7852" x2="279.3251" y1="72.9777" y2="72.9777"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="54.7529" x="192.4905" y="82.417">first_tick_count</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="20.5323" x="192.4905" y="94.0232">ISR sp</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="82.1293" x="192.4905" y="105.6294">one-shot tick checkpoint</text><!--MD5=[daeea0df713f5a1e6085e9f07acfb9b8]
|
||||
class Kernel--><rect fill="#F5F8FA" height="65.7308" id="Kernel" style="stroke: #607985; stroke-width: 0.6416349809885932;" width="92.3954" x="426.6873" y="45.4876"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="4.7053" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="44.9144" x="450.4278" y="54.5606">«debugger only»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="6.4163" lengthAdjust="spacingAndGlyphs" textLength="84.6958" x="430.5371" y="66.7591">03 scheduler evidence</text><line style="stroke: #607985; stroke-width: 0.6416349809885932;" x1="427.115" x2="518.6549" y1="72.9777" y2="72.9777"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="78.7072" x="431.8203" y="82.417">Ready lists by priority</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="41.0646" x="431.8203" y="94.0232">selected TCB</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="34.2205" x="431.8203" y="105.6294">tick count</text><!--MD5=[5502d0b26b9225c8066cf2f4a2442e7f]
|
||||
class Peer--><rect fill="#F5F8FA" height="77.3371" id="Peer" style="stroke: #607985; stroke-width: 0.6416349809885932;" width="81.2738" x="683.1274" y="3.3237"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="4.7053" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="26.9487" x="710.2899" y="12.3966">«runtime»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="6.4163" lengthAdjust="spacingAndGlyphs" textLength="61.597" x="692.9658" y="24.5952">04 peer runtime</text><line style="stroke: #607985; stroke-width: 0.6416349809885932;" x1="683.5551" x2="763.9734" y1="30.8137" y2="30.8137"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="51.3308" x="688.2605" y="40.253">context address</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="41.0646" x="688.2605" y="51.8592">handle / TCB</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="54.7529" x="688.2605" y="63.4655">task stack range</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="68.4411" x="688.2605" y="75.0717">PC · SP · priority 2</text><!--MD5=[87dec8bc37044ee287e36547435f1f2f]
|
||||
class High--><rect fill="#F5F8FA" height="65.7308" id="High" style="stroke: #607985; stroke-width: 0.6416349809885932;" width="81.2738" x="683.1274" y="95.9629"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="4.7053" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="26.9487" x="710.2899" y="105.0358">«runtime»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="6.4163" lengthAdjust="spacingAndGlyphs" textLength="61.597" x="692.9658" y="117.2344">05 high runtime</text><line style="stroke: #607985; stroke-width: 0.6416349809885932;" x1="683.5551" x2="763.9734" y1="123.453" y2="123.453"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="41.0646" x="688.2605" y="132.8922">handle / TCB</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="47.9087" x="688.2605" y="144.4985">priority 0 → 3</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="61.597" x="688.2605" y="156.1047">PC · SP · run_tick</text><!--MD5=[13f56afd7aace6dccdfaaac41cf97a6a]
|
||||
class Evidence--><rect fill="#F5F8FA" height="77.3371" id="Evidence" style="stroke: #607985; stroke-width: 0.6416349809885932;" width="109.5057" x="782.7947" y="46.9548"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="4.7053" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="38.9259" x="818.0846" y="56.0278">«application»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="6.4163" lengthAdjust="spacingAndGlyphs" textLength="84.6958" x="795.1996" y="68.2263">06 committed evidence</text><line style="stroke: #607985; stroke-width: 0.6416349809885932;" x1="783.2224" x2="891.8726" y1="74.4449" y2="74.4449"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="75.2852" x="787.9278" y="83.8842">switch trace A · B · A</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="99.2395" x="787.9278" y="95.4904">markers before · HIGH · after</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="75.2852" x="787.9278" y="107.0966">source blob · ELF hash</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="13.6882" x="787.9278" y="118.7029">PASS</text><path d="M378.9924,126.7015 L378.9924,148.0626 A0,0 0 0 0 378.9924,148.0626 L566.7776,148.0626 A0,0 0 0 0 566.7776,148.0626 L566.7776,130.9791 L562.5,126.7015 L474.596,126.7015 L472.885,111.2937 L471.174,126.7015 L378.9924,126.7015 A0,0 0 0 0 378.9924,126.7015 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.42775665399239543;"/><path d="M562.5,126.7015 L562.5,130.9791 L566.7776,130.9791 L562.5,126.7015 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.42775665399239543;"/><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="5.1331" lengthAdjust="spacingAndGlyphs" textLength="143.7262" x="384.1255" y="136.1715">Kernel internals are debugger observations only.</text><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="5.1331" lengthAdjust="spacingAndGlyphs" textLength="173.6692" x="384.1255" y="142.1467">Program assertions use public API and application records.</text><!--MD5=[251ca16ac899d6bfafc4fee663c65b4c]
|
||||
link Timer to ISR--><path d="M101.9387,78.3522 C127.6212,78.3522 158.9159,78.3522 184.4957,78.3522 " fill="none" id="Timer->ISR" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><polygon fill="#607985" points="186.6217,78.3522,182.7719,76.6412,184.4829,78.3522,182.7719,80.0632,186.6217,78.3522" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="5.9886" lengthAdjust="spacingAndGlyphs" textLength="61.597" x="113.7833" y="74.0725">machine-timer trap</text><!--MD5=[d88c108211e48cabe7c391ba8266ba05]
|
||||
link ISR to Kernel--><path d="M279.9625,78.3522 C321.2837,78.3522 381.7685,78.3522 423.8726,78.3522 " fill="none" id="ISR->Kernel" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><polygon fill="#607985" points="425.9686,78.3522,422.1188,76.6412,423.8298,78.3522,422.1188,80.0632,425.9686,78.3522" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="5.9886" lengthAdjust="spacingAndGlyphs" textLength="75.2852" x="291.73" y="74.0725">scheduling opportunity</text><!--MD5=[451546734f5ef62236a1fbbfa501c405]
|
||||
link Kernel to Peer--><path d="M519.1725,71.6835 C565.1307,64.9976 635.3341,54.7913 680.2785,48.2552 " fill="none" id="Kernel->Peer" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><polygon fill="#607985" points="682.2933,47.9601,678.2383,46.8173,680.1765,48.266,678.7277,50.2041,682.2933,47.9601" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="5.9886" lengthAdjust="spacingAndGlyphs" textLength="78.7072" x="585.5989" y="45.5668">equal-priority rotation</text><!--MD5=[d35ae36b39c9f0c2492e9b2be2215125]
|
||||
link Kernel to High--><path d="M519.1725,87.6088 C565.1307,96.8869 635.3341,111.0627 680.2785,120.1355 " fill="none" id="Kernel->High" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><polygon fill="#607985" points="682.2975,120.5418,678.8608,118.1052,680.2008,120.12,678.1859,121.46,682.2975,120.5418" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="5.9886" lengthAdjust="spacingAndGlyphs" textLength="92.3954" x="578.7548" y="94.7888">select after priority raise</text><!--MD5=[533f32753ee57a27250c7f5700b6fd04]
|
||||
link Peer to Evidence--><path d="M764.4824,57.5589 C769.5471,59.5138 774.7956,61.5456 780.057,63.5775 " fill="none" id="Peer->Evidence" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><polygon fill="#607985" points="782.0333,64.3389,779.0592,61.355,780.0383,63.5678,777.8255,64.5469,782.0333,64.3389" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><!--MD5=[e08fc291d1c1b0105a0d24240eaba8e1]
|
||||
link High to Evidence--><path d="M764.4824,113.4111 C769.5471,111.4734 774.7956,109.4672 780.057,107.4525 " fill="none" id="High->Evidence" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><polygon fill="#607985" points="782.0333,106.6996,777.8263,106.476,780.0355,107.4633,779.0482,109.6725,782.0333,106.6996" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><!--MD5=[b5b70233b96aab6bafbd562394375464]
|
||||
@startuml
|
||||
skinparam backgroundColor white
|
||||
skinparam shadowing false
|
||||
skinparam monochrome false
|
||||
skinparam defaultFontName "DejaVu Sans Mono"
|
||||
skinparam defaultFontSize 14
|
||||
skinparam defaultFontColor #24343D
|
||||
skinparam titleFontName "DejaVu Sans Mono"
|
||||
skinparam titleFontSize 13
|
||||
skinparam titleFontColor #536B78
|
||||
skinparam titleFontStyle plain
|
||||
|
||||
skinparam ArrowColor #607985
|
||||
skinparam ArrowFontColor #425B67
|
||||
skinparam ArrowThickness 1.3
|
||||
skinparam LineThickness 1.3
|
||||
skinparam nodesep 36
|
||||
skinparam ranksep 42
|
||||
skinparam Padding 6
|
||||
|
||||
skinparam classBackgroundColor #F5F8FA
|
||||
skinparam classBorderColor #607985
|
||||
skinparam classBorderThickness 1.5
|
||||
skinparam classFontColor #1F3039
|
||||
skinparam classFontSize 15
|
||||
skinparam classAttributeFontColor #2E424D
|
||||
skinparam classAttributeFontSize 13
|
||||
skinparam classStereotypeFontColor #526B77
|
||||
skinparam classStereotypeFontSize 11
|
||||
skinparam minClassWidth 190
|
||||
skinparam ClassAttributeIconSize 0
|
||||
|
||||
skinparam stateBackgroundColor #F5F8FA
|
||||
skinparam stateBorderColor #607985
|
||||
skinparam stateBorderThickness 1.5
|
||||
skinparam stateFontColor #1F3039
|
||||
skinparam stateFontSize 14
|
||||
skinparam stateAttributeFontSize 13
|
||||
|
||||
skinparam noteBackgroundColor #F7F5ED
|
||||
skinparam noteBorderColor #8A887C
|
||||
skinparam noteFontColor #3E4B50
|
||||
skinparam noteFontSize 12
|
||||
|
||||
skinparam ParticipantBackgroundColor #F5F8FA
|
||||
skinparam ParticipantBorderColor #607985
|
||||
skinparam ParticipantBorderThickness 1.5
|
||||
skinparam ParticipantFontColor #1F3039
|
||||
skinparam ParticipantFontSize 13
|
||||
skinparam ActorBorderColor #607985
|
||||
skinparam ActorFontColor #1F3039
|
||||
skinparam LifeLineBorderColor #8297A1
|
||||
skinparam LifeLineBackgroundColor #F9FBFC
|
||||
skinparam SequenceArrowColor #607985
|
||||
skinparam SequenceMessageAlign center
|
||||
skinparam ParticipantPadding 18
|
||||
skinparam BoxPadding 8
|
||||
|
||||
hide circle
|
||||
hide empty members
|
||||
scale 900 width
|
||||
left to right direction
|
||||
|
||||
class "01 timer CSRs" as Timer <<runtime>> {
|
||||
mtime
|
||||
mtimecmp
|
||||
mcause = 0x80000007
|
||||
mepc = interrupted task PC
|
||||
}
|
||||
|
||||
class "02 ISR evidence" as ISR <<runtime>> {
|
||||
first_tick_count
|
||||
ISR sp
|
||||
one-shot tick checkpoint
|
||||
}
|
||||
|
||||
class "03 scheduler evidence" as Kernel <<debugger only>> {
|
||||
Ready lists by priority
|
||||
selected TCB
|
||||
tick count
|
||||
}
|
||||
|
||||
class "04 peer runtime" as Peer <<runtime>> {
|
||||
context address
|
||||
handle / TCB
|
||||
task stack range
|
||||
PC · SP · priority 2
|
||||
}
|
||||
|
||||
class "05 high runtime" as High <<runtime>> {
|
||||
handle / TCB
|
||||
priority 0 → 3
|
||||
PC · SP · run_tick
|
||||
}
|
||||
|
||||
class "06 committed evidence" as Evidence <<application>> {
|
||||
switch trace A · B · A
|
||||
markers before · HIGH · after
|
||||
source blob · ELF hash
|
||||
PASS
|
||||
}
|
||||
|
||||
Timer - -> ISR : machine-timer trap
|
||||
ISR - -> Kernel : scheduling opportunity
|
||||
Kernel - -> Peer : equal-priority rotation
|
||||
Kernel - -> High : select after priority raise
|
||||
Peer - -> Evidence
|
||||
High - -> Evidence
|
||||
|
||||
note bottom of Kernel
|
||||
Kernel internals are debugger observations only.
|
||||
Program assertions use public API and application records.
|
||||
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: 15 KiB |
@@ -0,0 +1,15 @@
|
||||
<!doctype html>
|
||||
<html lang="pl">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="card-renderer" content="react">
|
||||
<title>Karta pracy</title>
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<link rel="stylesheet" href="app.css">
|
||||
</head>
|
||||
<body class="resource-header-enabled">
|
||||
<div id="root"></div>
|
||||
<script type="module" src="app.js"></script>
|
||||
</body>
|
||||
</html>
|
||||