feat: add interactive FC01 heap4 card
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
@startuml
|
||||
scale 600 height
|
||||
top to bottom direction
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 10
|
||||
skinparam rectangleBorderColor #2c7794
|
||||
skinparam rectangleBackgroundColor #edf6fa
|
||||
skinparam ArrowColor #8095a1
|
||||
title A1 CONTEXT — from linear cursor to reusable heap
|
||||
|
||||
rectangle "<<application>>\n01 A / B / C experiment\nrequests payload bytes" as APP
|
||||
rectangle "<<public API>>\n02 pvPortMalloc / vPortFree\nheap statistics" as API
|
||||
rectangle "<<allocator>>\n03 heap_4\nfirst-fit · split · coalesce" as H4
|
||||
rectangle "<<arena>>\n04 ucHeap[4096]\nheaders + payload" as ARENA
|
||||
rectangle "<<target>>\n05 Hazard3 / RV32I\nGDB · registers · memory" as TARGET
|
||||
|
||||
APP -down-> API : request / release
|
||||
API -down-> H4 : direct C call
|
||||
H4 -down-> ARENA : manages
|
||||
ARENA -down-> TARGET : stored in RAM
|
||||
|
||||
note right of H4
|
||||
heap_1: allocate only
|
||||
heap_2: free, no coalesce
|
||||
heap_3: libc wrapper
|
||||
heap_4: free + coalesce
|
||||
heap_5: multiple regions
|
||||
end note
|
||||
@enduml
|
||||
@@ -0,0 +1,52 @@
|
||||
<?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="600.3488px" preserveAspectRatio="none" style="width:311px;height:600px;" version="1.1" viewBox="0 0 311 600" width="311.19px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="227.6552" x="44.9803" y="9.813">A1 CONTEXT — from linear cursor to reusable heap</text><!--MD5=[cd187d11655e4367e900de538d2f1d0c]
|
||||
entity APP--><rect fill="#EDF6FA" height="55.8673" style="stroke: #2C7794; stroke-width: 1.3769468762104042;" width="121.1713" x="15.6054" y="20.2686"/><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="58.7497" x="24.785" y="39.2613">«application»</text><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="102.812" x="24.785" y="51.764">01 A / B / C experiment</text><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="102.812" x="24.785" y="64.2667">requests payload bytes</text><!--MD5=[645d8587175d8f7ad110cd370775931d]
|
||||
entity API--><rect fill="#EDF6FA" height="55.8673" style="stroke: #2C7794; stroke-width: 1.3769468762104042;" width="141.3665" x="5.5078" y="144.9833"/><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="52.324" x="14.6874" y="163.976">«public API»</text><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="123.0073" x="14.6874" y="176.4787">02 pvPortMalloc / vPortFree</text><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="65.1755" x="14.6874" y="188.9813">heap statistics</text><!--MD5=[46e692d45a0b60d87b097c4043ce42a2]
|
||||
entity H4--><rect fill="#EDF6FA" height="55.8673" style="stroke: #2C7794; stroke-width: 1.3769468762104042;" width="122.0893" x="15.1464" y="277.6108"/><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="48.6521" x="24.3261" y="296.6035">«allocator»</text><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="44.9803" x="24.3261" y="309.1062">03 heap_4</text><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="103.73" x="24.3261" y="321.6088">first-fit · split · coalesce</text><!--MD5=[a55d5013c595d66e4d3c908e0eed28a7]
|
||||
entity ARENA--><rect fill="#EDF6FA" height="55.8673" style="stroke: #2C7794; stroke-width: 1.3769468762104042;" width="100.0581" x="26.162" y="410.2384"/><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="34.8827" x="35.3416" y="429.231">«arena»</text><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="74.3551" x="35.3416" y="441.7337">04 ucHeap[4096]</text><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="81.6988" x="35.3416" y="454.2364">headers + payload</text><!--MD5=[aba7613092619c8a5fef3de1c87efe89]
|
||||
entity TARGET--><rect fill="#EDF6FA" height="55.8673" style="stroke: #2C7794; stroke-width: 1.3769468762104042;" width="129.433" x="11.4746" y="534.953"/><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="36.7186" x="20.6542" y="553.9457">«target»</text><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="84.4527" x="20.6542" y="566.4484">05 Hazard3 / RV32I</text><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="111.0737" x="20.6542" y="578.951">GDB · registers · memory</text><path d="M169.3645,269.698 L169.3645,301.8726 L137.6029,305.5445 L169.3645,309.2164 L169.3645,341.391 A0,0 0 0 0 169.3645,341.391 L300.6334,341.391 A0,0 0 0 0 300.6334,341.391 L300.6334,278.8776 L291.4538,269.698 L169.3645,269.698 A0,0 0 0 0 169.3645,269.698 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 0.9179645841402695;"/><path d="M291.4538,269.698 L291.4538,278.8776 L300.6334,278.8776 L291.4538,269.698 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 0.9179645841402695;"/><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="93.6324" x="174.8723" y="284.1008">heap_1: allocate only</text><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="111.9917" x="174.8723" y="296.6035">heap_2: free, no coalesce</text><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="91.7965" x="174.8723" y="309.1062">heap_3: libc wrapper</text><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="103.73" x="174.8723" y="321.6088">heap_4: free + coalesce</text><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="109.2378" x="174.8723" y="334.1115">heap_5: multiple regions</text><!--MD5=[ec942d3abfeef98a0155e2f031d4c131]
|
||||
link APP to API--><path d="M76.1911,76.393 C76.1911,94.8441 76.1911,119.3262 76.1911,138.8972 " fill="none" id="APP->API" style="stroke: #8095A1; stroke-width: 0.9179645841402695;"/><polygon fill="#8095A1" points="76.1911,143.4136,79.8629,135.1519,76.1911,138.8238,72.5192,135.1519,76.1911,143.4136" style="stroke: #8095A1; stroke-width: 0.9179645841402695;"/><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="76.1911" x="77.109" y="114.4059">request / release</text><!--MD5=[798ded9ffd9ac635cdedeacba358c97c]
|
||||
link API to H4--><path d="M76.1911,201.2545 C76.1911,221.6609 76.1911,249.6129 76.1911,271.3044 " fill="none" id="API->H4" style="stroke: #8095A1; stroke-width: 0.9179645841402695;"/><polygon fill="#8095A1" points="76.1911,275.8575,79.8629,267.5958,76.1911,271.2677,72.5192,267.5958,76.1911,275.8575" style="stroke: #8095A1; stroke-width: 0.9179645841402695;"/><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="52.324" x="77.109" y="239.1206">direct C call</text><!--MD5=[26d2234bc3ca60bb174d49bba6317b2c]
|
||||
link H4 to ARENA--><path d="M76.1911,333.8821 C76.1911,354.2884 76.1911,382.2404 76.1911,403.9319 " fill="none" id="H4->ARENA" style="stroke: #8095A1; stroke-width: 0.9179645841402695;"/><polygon fill="#8095A1" points="76.1911,408.485,79.8629,400.2234,76.1911,403.8952,72.5192,400.2234,76.1911,408.485" style="stroke: #8095A1; stroke-width: 0.9179645841402695;"/><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="40.3904" x="77.109" y="379.661">manages</text><!--MD5=[057090cc36f41caea0c560281f72f0d5]
|
||||
link ARENA to TARGET--><path d="M76.1911,466.3627 C76.1911,484.8138 76.1911,509.2959 76.1911,528.8669 " fill="none" id="ARENA->TARGET" style="stroke: #8095A1; stroke-width: 0.9179645841402695;"/><polygon fill="#8095A1" points="76.1911,533.3833,79.8629,525.1216,76.1911,528.7935,72.5192,525.1216,76.1911,533.3833" style="stroke: #8095A1; stroke-width: 0.9179645841402695;"/><text fill="#000000" font-family="Monospace" font-size="9.1796" lengthAdjust="spacingAndGlyphs" textLength="61.5036" x="77.109" y="504.3756">stored in RAM</text><!--MD5=[5f927a6771e8d55dac04e3c75dd184e1]
|
||||
@startuml
|
||||
scale 600 height
|
||||
top to bottom direction
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 10
|
||||
skinparam rectangleBorderColor #2c7794
|
||||
skinparam rectangleBackgroundColor #edf6fa
|
||||
skinparam ArrowColor #8095a1
|
||||
title A1 CONTEXT — from linear cursor to reusable heap
|
||||
|
||||
rectangle "<<application>>\n01 A / B / C experiment\nrequests payload bytes" as APP
|
||||
rectangle "<<public API>>\n02 pvPortMalloc / vPortFree\nheap statistics" as API
|
||||
rectangle "<<allocator>>\n03 heap_4\nfirst-fit · split · coalesce" as H4
|
||||
rectangle "<<arena>>\n04 ucHeap[4096]\nheaders + payload" as ARENA
|
||||
rectangle "<<target>>\n05 Hazard3 / RV32I\nGDB · registers · memory" as TARGET
|
||||
|
||||
APP -down-> API : request / release
|
||||
API -down-> H4 : direct C call
|
||||
H4 -down-> ARENA : manages
|
||||
ARENA -down-> TARGET : stored in RAM
|
||||
|
||||
note right of H4
|
||||
heap_1: allocate only
|
||||
heap_2: free, no coalesce
|
||||
heap_3: libc wrapper
|
||||
heap_4: free + coalesce
|
||||
heap_5: multiple regions
|
||||
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.9 KiB |
@@ -0,0 +1,48 @@
|
||||
@startuml
|
||||
scale 620 height
|
||||
top to bottom direction
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 10
|
||||
skinparam classBorderColor #2c7794
|
||||
skinparam classBackgroundColor #edf6fa
|
||||
skinparam ArrowColor #8095a1
|
||||
title A2 STRUCTURE — in-band metadata and address order
|
||||
|
||||
class "01 Block header" as HEADER {
|
||||
next : BlockLink_t*
|
||||
size : size_t
|
||||
}
|
||||
class "Allocated block" as ALLOC {
|
||||
02 header + 13 byte request
|
||||
aligned total = 32 bytes
|
||||
payload begins after header
|
||||
}
|
||||
class "03 Free remainder" as REM {
|
||||
own header
|
||||
size = 224 bytes
|
||||
}
|
||||
|
||||
HEADER *-- ALLOC : precedes payload
|
||||
ALLOC -down-> REM : split preserves 256
|
||||
|
||||
class "04 Address-ordered free list" as LIST {
|
||||
previous < inserted < current
|
||||
}
|
||||
class "05 Right neighbour" as RIGHT {
|
||||
block + block.size == current
|
||||
}
|
||||
class "06 Left neighbour" as LEFT {
|
||||
previous + previous.size == block
|
||||
}
|
||||
|
||||
REM -down-> LIST : insert by address
|
||||
LIST -down-> RIGHT : join first
|
||||
RIGHT -down-> LEFT : then join left
|
||||
|
||||
note right of LIST
|
||||
Ordering makes both physical
|
||||
neighbours locally visible.
|
||||
end note
|
||||
@enduml
|
||||
@@ -0,0 +1,71 @@
|
||||
<?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="620.2921px" preserveAspectRatio="none" style="width:295px;height:620px;" version="1.1" viewBox="0 0 295 620" width="295.9262px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="202.1522" x="49.1929" y="8.2167">A2 STRUCTURE — in-band metadata and address order</text><!--MD5=[9827fb78ff6e3f59cfadf959dc26af7c]
|
||||
class HEADER--><rect fill="#EDF6FA" height="54.7579" id="HEADER" style="stroke: #2C7794; stroke-width: 1.1529592799906587;" width="81.4758" x="29.5926" y="16.4642"/><ellipse cx="39.5849" cy="27.2252" fill="#ADD1B2" rx="6.9178" ry="6.9178" style="stroke: #2C7794; stroke-width: 0.7686395199937726;"/><path d="M40.5698,29.7593 Q40.3055,29.8914 40.0173,29.9515 Q39.7291,30.0235 39.4048,30.0235 Q38.2758,30.0235 37.6753,29.2789 Q37.0869,28.5343 37.0869,27.1171 Q37.0869,25.6999 37.6753,24.9553 Q38.2758,24.2107 39.4048,24.2107 Q39.7291,24.2107 40.0173,24.2828 Q40.3175,24.3428 40.5698,24.4749 L40.5698,25.7119 Q40.2815,25.4477 40.0053,25.3276 Q39.7411,25.2075 39.4648,25.2075 Q38.8523,25.2075 38.5401,25.6879 Q38.2278,26.1683 38.2278,27.1171 Q38.2278,28.0659 38.5401,28.5463 Q38.8523,29.0267 39.4648,29.0267 Q39.7411,29.0267 40.0053,28.9066 Q40.2815,28.7865 40.5698,28.5223 L40.5698,29.7593 Z "/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="59.9539" x="48.8086" y="30.2075">01 Block header</text><line style="stroke: #2C7794; stroke-width: 1.1529592799906587;" x1="30.3613" x2="110.2998" y1="37.9862" y2="37.9862"/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="68.4089" x="34.2045" y="49.2775">next : BlockLink_t*</text><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="42.2752" x="34.2045" y="59.7463">size : size_t</text><line style="stroke: #2C7794; stroke-width: 1.1529592799906587;" x1="30.3613" x2="110.2998" y1="65.073" y2="65.073"/><!--MD5=[40d637119be40bcfdc4ce848efbdda9e]
|
||||
class ALLOC--><rect fill="#EDF6FA" height="65.2267" id="ALLOC" style="stroke: #2C7794; stroke-width: 1.1529592799906587;" width="114.5273" x="13.0669" y="128.8701"/><ellipse cx="39.6618" cy="139.631" fill="#ADD1B2" rx="6.9178" ry="6.9178" style="stroke: #2C7794; stroke-width: 0.7686395199937726;"/><path d="M40.6466,142.1652 Q40.3824,142.2973 40.0942,142.3573 Q39.8059,142.4294 39.4816,142.4294 Q38.3527,142.4294 37.7522,141.6848 Q37.1637,140.9401 37.1637,139.523 Q37.1637,138.1058 37.7522,137.3612 Q38.3527,136.6165 39.4816,136.6165 Q39.8059,136.6165 40.0942,136.6886 Q40.3944,136.7486 40.6466,136.8808 L40.6466,138.1178 Q40.3584,137.8536 40.0821,137.7335 Q39.8179,137.6134 39.5417,137.6134 Q38.9292,137.6134 38.6169,138.0938 Q38.3047,138.5742 38.3047,139.523 Q38.3047,140.4717 38.6169,140.9521 Q38.9292,141.4325 39.5417,141.4325 Q39.8179,141.4325 40.0821,141.3124 Q40.3584,141.1923 40.6466,140.9281 L40.6466,142.1652 Z "/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="56.1107" x="52.5749" y="142.6134">Allocated block</text><line style="stroke: #2C7794; stroke-width: 1.1529592799906587;" x1="13.8355" x2="126.8255" y1="150.392" y2="150.392"/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="105.3036" x="17.6787" y="161.6833">02 header + 13 byte request</text><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="88.3935" x="17.6787" y="172.1522">aligned total = 32 bytes</text><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="104.535" x="17.6787" y="182.621">payload begins after header</text><line style="stroke: #2C7794; stroke-width: 1.1529592799906587;" x1="13.8355" x2="126.8255" y1="187.9477" y2="187.9477"/><!--MD5=[71c2adef9be32489055f250a531e7c6f]
|
||||
class REM--><rect fill="#EDF6FA" height="54.7579" id="REM" style="stroke: #2C7794; stroke-width: 1.1529592799906587;" width="89.9308" x="25.3651" y="251.7448"/><ellipse cx="35.3574" cy="262.5058" fill="#ADD1B2" rx="6.9178" ry="6.9178" style="stroke: #2C7794; stroke-width: 0.7686395199937726;"/><path d="M36.3422,265.0399 Q36.078,265.172 35.7898,265.232 Q35.5015,265.3041 35.1773,265.3041 Q34.0483,265.3041 33.4478,264.5595 Q32.8593,263.8148 32.8593,262.3977 Q32.8593,260.9805 33.4478,260.2359 Q34.0483,259.4913 35.1773,259.4913 Q35.5015,259.4913 35.7898,259.5633 Q36.09,259.6234 36.3422,259.7555 L36.3422,260.9925 Q36.054,260.7283 35.7778,260.6082 Q35.5135,260.4881 35.2373,260.4881 Q34.6248,260.4881 34.3125,260.9685 Q34.0003,261.4489 34.0003,262.3977 Q34.0003,263.3465 34.3125,263.8269 Q34.6248,264.3073 35.2373,264.3073 Q35.5135,264.3073 35.7778,264.1872 Q36.054,264.0671 36.3422,263.8028 L36.3422,265.0399 Z "/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="68.4089" x="44.5811" y="265.4881">03 Free remainder</text><line style="stroke: #2C7794; stroke-width: 1.1529592799906587;" x1="26.1337" x2="114.5273" y1="273.2667" y2="273.2667"/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="43.8125" x="29.9769" y="284.558">own header</text><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="59.9539" x="29.9769" y="295.0269">size = 224 bytes</text><line style="stroke: #2C7794; stroke-width: 1.1529592799906587;" x1="26.1337" x2="114.5273" y1="300.3535" y2="300.3535"/><!--MD5=[b0a0edd67d9eafaaa5639bbe6382adce]
|
||||
class LIST--><rect fill="#EDF6FA" height="44.289" id="LIST" style="stroke: #2C7794; stroke-width: 1.1529592799906587;" width="124.5196" x="8.0707" y="364.1506"/><ellipse cx="18.063" cy="374.9116" fill="#ADD1B2" rx="6.9178" ry="6.9178" style="stroke: #2C7794; stroke-width: 0.7686395199937726;"/><path d="M19.0478,377.4457 Q18.7836,377.5778 18.4954,377.6379 Q18.2071,377.7099 17.8829,377.7099 Q16.7539,377.7099 16.1534,376.9653 Q15.565,376.2207 15.565,374.8035 Q15.565,373.3863 16.1534,372.6417 Q16.7539,371.8971 17.8829,371.8971 Q18.2071,371.8971 18.4954,371.9692 Q18.7956,372.0292 19.0478,372.1613 L19.0478,373.3983 Q18.7596,373.1341 18.4834,373.014 Q18.2192,372.8939 17.9429,372.8939 Q17.3304,372.8939 17.0182,373.3743 Q16.7059,373.8547 16.7059,374.8035 Q16.7059,375.7523 17.0182,376.2327 Q17.3304,376.7131 17.9429,376.7131 Q18.2192,376.7131 18.4834,376.593 Q18.7596,376.4729 19.0478,376.2087 L19.0478,377.4457 Z "/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="102.9977" x="27.2867" y="377.8939">04 Address-ordered free list</text><line style="stroke: #2C7794; stroke-width: 1.1529592799906587;" x1="8.8394" x2="131.8217" y1="385.6726" y2="385.6726"/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="107.6095" x="12.6826" y="396.9639">previous < inserted < current</text><line style="stroke: #2C7794; stroke-width: 1.1529592799906587;" x1="8.8394" x2="131.8217" y1="402.2905" y2="402.2905"/><!--MD5=[490fcd32b6546c9bc615869efabd094a]
|
||||
class RIGHT--><rect fill="#EDF6FA" height="44.289" id="RIGHT" style="stroke: #2C7794; stroke-width: 1.1529592799906587;" width="114.5273" x="13.0669" y="466.0876"/><ellipse cx="33.0899" cy="476.8486" fill="#ADD1B2" rx="6.9178" ry="6.9178" style="stroke: #2C7794; stroke-width: 0.7686395199937726;"/><path d="M34.0748,479.3827 Q33.8105,479.5148 33.5223,479.5748 Q33.2341,479.6469 32.9098,479.6469 Q31.7808,479.6469 31.1803,478.9023 Q30.5919,478.1577 30.5919,476.7405 Q30.5919,475.3233 31.1803,474.5787 Q31.7808,473.8341 32.9098,473.8341 Q33.2341,473.8341 33.5223,473.9061 Q33.8225,473.9662 34.0748,474.0983 L34.0748,475.3353 Q33.7865,475.0711 33.5103,474.951 Q33.2461,474.8309 32.9698,474.8309 Q32.3573,474.8309 32.0451,475.3113 Q31.7328,475.7917 31.7328,476.7405 Q31.7328,477.6893 32.0451,478.1697 Q32.3573,478.6501 32.9698,478.6501 Q33.2461,478.6501 33.5103,478.53 Q33.7865,478.4099 34.0748,478.1457 L34.0748,479.3827 Z "/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="70.7148" x="44.5427" y="479.8309">05 Right neighbour</text><line style="stroke: #2C7794; stroke-width: 1.1529592799906587;" x1="13.8355" x2="126.8255" y1="487.6095" y2="487.6095"/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="105.3036" x="17.6787" y="498.9008">block + block.size == current</text><line style="stroke: #2C7794; stroke-width: 1.1529592799906587;" x1="13.8355" x2="126.8255" y1="504.2275" y2="504.2275"/><!--MD5=[007d3a1820cefd008c8dbdad7e6fdec6]
|
||||
class LEFT--><rect fill="#EDF6FA" height="44.289" id="LEFT" style="stroke: #2C7794; stroke-width: 1.1529592799906587;" width="131.4374" x="4.6118" y="568.0246"/><ellipse cx="34.7809" cy="578.7855" fill="#ADD1B2" rx="6.9178" ry="6.9178" style="stroke: #2C7794; stroke-width: 0.7686395199937726;"/><path d="M35.7658,581.3197 Q35.5015,581.4518 35.2133,581.5118 Q34.9251,581.5839 34.6008,581.5839 Q33.4718,581.5839 32.8713,580.8393 Q32.2829,580.0946 32.2829,578.6775 Q32.2829,577.2603 32.8713,576.5157 Q33.4718,575.771 34.6008,575.771 Q34.9251,575.771 35.2133,575.8431 Q35.5135,575.9032 35.7658,576.0353 L35.7658,577.2723 Q35.4775,577.0081 35.2013,576.888 Q34.9371,576.7679 34.6608,576.7679 Q34.0483,576.7679 33.7361,577.2483 Q33.4238,577.7287 33.4238,578.6775 Q33.4238,579.6262 33.7361,580.1066 Q34.0483,580.587 34.6608,580.587 Q34.9371,580.587 35.2013,580.4669 Q35.4775,580.3468 35.7658,580.0826 L35.7658,581.3197 Z "/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="65.3344" x="48.2321" y="581.7679">06 Left neighbour</text><line style="stroke: #2C7794; stroke-width: 1.1529592799906587;" x1="5.3805" x2="135.2806" y1="589.5465" y2="589.5465"/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="122.2137" x="9.2237" y="600.8378">previous + previous.size == block</text><line style="stroke: #2C7794; stroke-width: 1.1529592799906587;" x1="5.3805" x2="135.2806" y1="606.1645" y2="606.1645"/><path d="M159.877,371.9831 L159.877,383.2206 L132.7671,386.2952 L159.877,389.3697 L159.877,400.6072 A0,0 0 0 0 159.877,400.6072 L286.7025,400.6072 A0,0 0 0 0 286.7025,400.6072 L286.7025,379.6695 L279.0161,371.9831 L159.877,371.9831 A0,0 0 0 0 159.877,371.9831 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 0.7686395199937726;"/><path d="M279.0161,371.9831 L279.0161,379.6695 L286.7025,379.6695 L279.0161,371.9831 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 0.7686395199937726;"/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="110.6841" x="164.4889" y="384.043">Ordering makes both physical</text><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="96.0799" x="164.4889" y="394.5119">neighbours locally visible.</text><!--MD5=[fc2657b7de304bb41a5d36ac60748945]
|
||||
reverse link HEADER to ALLOC--><path d="M70.3305,82.6749 C70.3305,97.5173 70.3305,114.3505 70.3305,128.5626 " fill="none" id="HEADER<-ALLOC" style="stroke: #8095A1; stroke-width: 0.7686395199937726;"/><polygon fill="#8095A1" points="70.3305,72.7056,67.256,77.3174,70.3305,81.9293,73.4051,77.3174,70.3305,72.7056" style="stroke: #8095A1; stroke-width: 0.7686395199937726;"/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="65.3344" x="71.0992" y="103.2667">precedes payload</text><!--MD5=[bb73b5a7e21afff1a1d0c43dcbd5d11a]
|
||||
link ALLOC to REM--><path d="M70.3305,194.2813 C70.3305,210.5842 70.3305,230.3382 70.3305,246.6026 " fill="none" id="ALLOC->REM" style="stroke: #8095A1; stroke-width: 0.7686395199937726;"/><polygon fill="#8095A1" points="70.3305,250.3689,73.4051,243.4512,70.3305,246.5257,67.256,243.4512,70.3305,250.3689" style="stroke: #8095A1; stroke-width: 0.7686395199937726;"/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="70.7148" x="71.0992" y="226.1414">split preserves 256</text><!--MD5=[32aec76f28e14f88b0d74d9f592c80fb]
|
||||
link REM to LIST--><path d="M70.3305,306.8178 C70.3305,322.8901 70.3305,343.1975 70.3305,359.1622 " fill="none" id="REM->LIST" style="stroke: #8095A1; stroke-width: 0.7686395199937726;"/><polygon fill="#8095A1" points="70.3305,362.8055,73.4051,355.8878,70.3305,358.9623,67.256,355.8878,70.3305,362.8055" style="stroke: #8095A1; stroke-width: 0.7686395199937726;"/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="63.7971" x="71.0992" y="338.5473">insert by address</text><!--MD5=[6bd3103bbaa36e7d502940b82c286473]
|
||||
link LIST to RIGHT--><path d="M70.3305,408.6011 C70.3305,423.9508 70.3305,444.681 70.3305,461.0377 " fill="none" id="LIST->RIGHT" style="stroke: #8095A1; stroke-width: 0.7686395199937726;"/><polygon fill="#8095A1" points="70.3305,464.7963,73.4051,457.8786,70.3305,460.9531,67.256,457.8786,70.3305,464.7963" style="stroke: #8095A1; stroke-width: 0.7686395199937726;"/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="30.7456" x="71.0992" y="440.4842">join first</text><!--MD5=[f41c07ebada6943a8deaf240fd528885]
|
||||
link RIGHT to LEFT--><path d="M70.3305,510.538 C70.3305,525.8878 70.3305,546.618 70.3305,562.9746 " fill="none" id="RIGHT->LEFT" style="stroke: #8095A1; stroke-width: 0.7686395199937726;"/><polygon fill="#8095A1" points="70.3305,566.7333,73.4051,559.8155,70.3305,562.8901,67.256,559.8155,70.3305,566.7333" style="stroke: #8095A1; stroke-width: 0.7686395199937726;"/><text fill="#000000" font-family="Monospace" font-size="7.6864" lengthAdjust="spacingAndGlyphs" textLength="47.6557" x="71.0992" y="542.4212">then join left</text><!--MD5=[83344144544ae5f259c61315a4ceaf0d]
|
||||
@startuml
|
||||
scale 620 height
|
||||
top to bottom direction
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 10
|
||||
skinparam classBorderColor #2c7794
|
||||
skinparam classBackgroundColor #edf6fa
|
||||
skinparam ArrowColor #8095a1
|
||||
title A2 STRUCTURE — in-band metadata and address order
|
||||
|
||||
class "01 Block header" as HEADER {
|
||||
next : BlockLink_t*
|
||||
size : size_t
|
||||
}
|
||||
class "Allocated block" as ALLOC {
|
||||
02 header + 13 byte request
|
||||
aligned total = 32 bytes
|
||||
payload begins after header
|
||||
}
|
||||
class "03 Free remainder" as REM {
|
||||
own header
|
||||
size = 224 bytes
|
||||
}
|
||||
|
||||
HEADER *- - ALLOC : precedes payload
|
||||
ALLOC -down-> REM : split preserves 256
|
||||
|
||||
class "04 Address-ordered free list" as LIST {
|
||||
previous < inserted < current
|
||||
}
|
||||
class "05 Right neighbour" as RIGHT {
|
||||
block + block.size == current
|
||||
}
|
||||
class "06 Left neighbour" as LEFT {
|
||||
previous + previous.size == block
|
||||
}
|
||||
|
||||
REM -down-> LIST : insert by address
|
||||
LIST -down-> RIGHT : join first
|
||||
RIGHT -down-> LEFT : then join left
|
||||
|
||||
note right of LIST
|
||||
Ordering makes both physical
|
||||
neighbours locally visible.
|
||||
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,29 @@
|
||||
@startuml
|
||||
scale 820 width
|
||||
top to bottom direction
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 9
|
||||
skinparam rectangleBorderColor #2c7794
|
||||
skinparam rectangleBackgroundColor #edf6fa
|
||||
skinparam ArrowColor #8095a1
|
||||
title A5 FLOW — allocate, fragment, coalesce, verify
|
||||
|
||||
rectangle "01 RESET\ninitial free = 4080" as S1
|
||||
rectangle "02 ALLOC A\n24 byte payload\nfirst-fit + split" as S2
|
||||
rectangle "03 ALLOC B / C\n40 + 16 byte payload\nafter = 3952" as S3
|
||||
rectangle "04 FREE A / C\nB remains allocated" as S4
|
||||
rectangle "05 E01 FRAGMENTED\n2 free blocks\ncurrent > largest" as S5
|
||||
rectangle "06 FREE B\ninsert by address\njoin right + left" as S6
|
||||
rectangle "07 E02 COALESCED\n1 free block\nfinal = initial" as S7
|
||||
rectangle "08 OOM CHECK\nNULL · hook=1\nasserts=0 · PASS=1" as S8
|
||||
|
||||
S1 -right-> S2 : pvPortMalloc
|
||||
S2 -right-> S3 : split remainder
|
||||
S3 -right-> S4 : vPortFree
|
||||
S4 -down-> S5 : heap stats
|
||||
S5 -left-> S6 : continue
|
||||
S6 -left-> S7 : coalesce
|
||||
S7 -left-> S8 : oversized request
|
||||
@enduml
|
||||
@@ -0,0 +1,56 @@
|
||||
<?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="263.7004px" preserveAspectRatio="none" style="width:811px;height:263px;" version="1.1" viewBox="0 0 811 263" width="811.5712px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="231.1894" x="294.4053" y="11.5848">A5 FLOW — allocate, fragment, coalesce, verify</text><!--MD5=[d0cae5ff9305becd6f502d4fe4f41481]
|
||||
entity S1--><rect fill="#EDF6FA" height="53.6024" style="stroke: #2C7794; stroke-width: 1.8061674008810573;" width="108.37" x="7.2247" y="32.316"/><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="45.7562" x="19.2658" y="55.942">01 RESET</text><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="84.2878" x="19.2658" y="70.7021">initial free = 4080</text><!--MD5=[d3395af3100fe8cebf35265100c4415f]
|
||||
entity S2--><rect fill="#EDF6FA" height="68.3625" style="stroke: #2C7794; stroke-width: 1.8061674008810573;" width="104.7577" x="224.5668" y="24.9348"/><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="59.0015" x="236.6079" y="48.5608">02 ALLOC A</text><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="80.6755" x="236.6079" y="63.3209">24 byte payload</text><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="63.8179" x="236.6079" y="78.081">first-fit + split</text><!--MD5=[6c7192638421eaf134d201765ac5db29]
|
||||
entity S3--><rect fill="#EDF6FA" height="68.3625" style="stroke: #2C7794; stroke-width: 1.8061674008810573;" width="127.6358" x="450.3377" y="24.9348"/><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="74.6549" x="462.3789" y="48.5608">03 ALLOC B / C</text><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="103.5536" x="462.3789" y="63.3209">40 + 16 byte payload</text><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="59.0015" x="462.3789" y="78.081">after = 3952</text><!--MD5=[01b905ebe31ca24275b86a9951c478d0]
|
||||
entity S4--><rect fill="#EDF6FA" height="53.6024" style="stroke: #2C7794; stroke-width: 1.8061674008810573;" width="121.6153" x="671.2922" y="32.316"/><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="65.022" x="683.3333" y="55.942">04 FREE A / C</text><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="97.533" x="683.3333" y="70.7021">B remains allocated</text><!--MD5=[099bd2cf1f4f3a6dbf2f1fde6174f38e]
|
||||
entity S5--><rect fill="#EDF6FA" height="68.3625" style="stroke: #2C7794; stroke-width: 1.8061674008810573;" width="132.4523" x="665.8737" y="182.4086"/><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="108.37" x="677.9148" y="206.0345">05 E01 FRAGMENTED</text><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="62.6138" x="677.9148" y="220.7946">2 free blocks</text><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="84.2878" x="677.9148" y="235.5547">current > largest</text><!--MD5=[0656c7721b015b9ca8cf2e2c2e8f5aee]
|
||||
entity S6--><rect fill="#EDF6FA" height="68.3625" style="stroke: #2C7794; stroke-width: 1.8061674008810573;" width="111.9824" x="465.3891" y="182.4086"/><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="49.3686" x="477.4302" y="206.0345">06 FREE B</text><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="87.9001" x="477.4302" y="220.7946">insert by address</text><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="72.2467" x="477.4302" y="235.5547">join right + left</text><!--MD5=[6ba532df225878998c5769132c3837e2]
|
||||
entity S7--><rect fill="#EDF6FA" height="68.3625" style="stroke: #2C7794; stroke-width: 1.8061674008810573;" width="121.6153" x="258.2819" y="182.4086"/><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="97.533" x="270.3231" y="206.0345">07 E02 COALESCED</text><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="57.7974" x="270.3231" y="220.7946">1 free block</text><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="59.0015" x="270.3231" y="235.5547">final = initial</text><!--MD5=[ce611cd767df6ac8a45071985dabb378]
|
||||
entity S8--><rect fill="#EDF6FA" height="68.3625" style="stroke: #2C7794; stroke-width: 1.8061674008810573;" width="115.5947" x="8.4288" y="182.4086"/><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="79.4714" x="20.4699" y="206.0345">08 OOM CHECK</text><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="73.4508" x="20.4699" y="220.7946">NULL · hook=1</text><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="91.5125" x="20.4699" y="235.5547">asserts=0 · PASS=1</text><!--MD5=[15cb110786dd224ca6a510a3d2a24e20]
|
||||
link S1 to S2--><path d="M115.7994,59.1196 C146.5043,59.1196 184.9515,59.1196 216.5956,59.1196 " fill="none" id="S1->S2" style="stroke: #8095A1; stroke-width: 1.2041116005873715;"/><polygon fill="#8095A1" points="222.2429,59.1196,211.4059,54.3031,216.2223,59.1196,211.4059,63.936,222.2429,59.1196" style="stroke: #8095A1; stroke-width: 1.2041116005873715;"/><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="65.022" x="137.5698" y="51.4386">pvPortMalloc</text><!--MD5=[8eac89d31ced3c9003fbd6a8a005c745]
|
||||
link S2 to S3--><path d="M329.5894,59.1196 C362.7266,59.1196 405.9181,59.1196 442.1979,59.1196 " fill="none" id="S2->S3" style="stroke: #8095A1; stroke-width: 1.2041116005873715;"/><polygon fill="#8095A1" points="448.0018,59.1196,437.1648,54.3031,441.9812,59.1196,437.1648,63.936,448.0018,59.1196" style="stroke: #8095A1; stroke-width: 1.2041116005873715;"/><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="77.0631" x="351.2996" y="51.4386">split remainder</text><!--MD5=[82e284a09e4ebade00512bdc77bff32c]
|
||||
link S3 to S4--><path d="M578.3709,59.1196 C605.1142,59.1196 636.2044,59.1196 663.4053,59.1196 " fill="none" id="S3->S4" style="stroke: #8095A1; stroke-width: 1.2041116005873715;"/><polygon fill="#8095A1" points="669.1369,59.1196,658.2999,54.3031,663.1163,59.1196,658.2999,63.936,669.1369,59.1196" style="stroke: #8095A1; stroke-width: 1.2041116005873715;"/><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="49.3686" x="599.9486" y="51.4386">vPortFree</text><!--MD5=[0e6b031b378ab8978eaa734a548bdfb6]
|
||||
link S4 to S5--><path d="M732.0999,86.2723 C732.0999,110.3906 732.0999,146.6826 732.0999,174.6541 " fill="none" id="S4->S5" style="stroke: #8095A1; stroke-width: 1.2041116005873715;"/><polygon fill="#8095A1" points="732.0999,180.494,736.9163,169.657,732.0999,174.4735,727.2834,169.657,732.0999,180.494" style="stroke: #8095A1; stroke-width: 1.2041116005873715;"/><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="51.7768" x="733.304" y="142.2166">heap stats</text><!--MD5=[3c9aaad44b43c509ca535c241fdd0151]
|
||||
reverse link S6 to S5--><path d="M585.5595,216.5812 C610.8338,216.5812 639.8529,216.5812 665.368,216.5812 " fill="none" id="S6<-S5" style="stroke: #8095A1; stroke-width: 1.2041116005873715;"/><polygon fill="#8095A1" points="579.6714,216.5812,590.5084,221.3977,585.6919,216.5812,590.5084,211.7648,579.6714,216.5812" style="stroke: #8095A1; stroke-width: 1.2041116005873715;"/><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="44.5521" x="599.3465" y="208.9003">continue</text><!--MD5=[5f6ea4567bb0950bff1d27387d49b4c2]
|
||||
reverse link S7 to S6--><path d="M388.0009,216.5812 C413.0223,216.5812 440.9938,216.5812 464.8352,216.5812 " fill="none" id="S7<-S6" style="stroke: #8095A1; stroke-width: 1.2041116005873715;"/><polygon fill="#8095A1" points="382.1489,216.5812,392.9996,221.3667,388.1694,216.564,392.9721,211.7339,382.1489,216.5812" style="stroke: #8095A1; stroke-width: 1.2041116005873715;"/><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="40.9398" x="402.1733" y="208.9003">coalesce</text><!--MD5=[630b9631f886cf9c8b0d992525b86cf3]
|
||||
reverse link S8 to S7--><path d="M132.1994,216.5812 C171.0802,216.5812 219.9551,216.5812 257.9689,216.5812 " fill="none" id="S8<-S7" style="stroke: #8095A1; stroke-width: 1.2041116005873715;"/><polygon fill="#8095A1" points="126.3836,216.5812,137.2206,221.3977,132.4041,216.5812,137.2206,211.7648,126.3836,216.5812" style="stroke: #8095A1; stroke-width: 1.2041116005873715;"/><text fill="#000000" font-family="Monospace" font-size="10.837" lengthAdjust="spacingAndGlyphs" textLength="90.3084" x="145.9985" y="208.9003">oversized request</text><!--MD5=[2e2dc33d46c2ffc454d35cea5ea70934]
|
||||
@startuml
|
||||
scale 820 width
|
||||
top to bottom direction
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 9
|
||||
skinparam rectangleBorderColor #2c7794
|
||||
skinparam rectangleBackgroundColor #edf6fa
|
||||
skinparam ArrowColor #8095a1
|
||||
title A5 FLOW — allocate, fragment, coalesce, verify
|
||||
|
||||
rectangle "01 RESET\ninitial free = 4080" as S1
|
||||
rectangle "02 ALLOC A\n24 byte payload\nfirst-fit + split" as S2
|
||||
rectangle "03 ALLOC B / C\n40 + 16 byte payload\nafter = 3952" as S3
|
||||
rectangle "04 FREE A / C\nB remains allocated" as S4
|
||||
rectangle "05 E01 FRAGMENTED\n2 free blocks\ncurrent > largest" as S5
|
||||
rectangle "06 FREE B\ninsert by address\njoin right + left" as S6
|
||||
rectangle "07 E02 COALESCED\n1 free block\nfinal = initial" as S7
|
||||
rectangle "08 OOM CHECK\nNULL · hook=1\nasserts=0 · PASS=1" as S8
|
||||
|
||||
S1 -right-> S2 : pvPortMalloc
|
||||
S2 -right-> S3 : split remainder
|
||||
S3 -right-> S4 : vPortFree
|
||||
S4 -down-> S5 : heap stats
|
||||
S5 -left-> S6 : continue
|
||||
S6 -left-> S7 : coalesce
|
||||
S7 -left-> S8 : oversized request
|
||||
@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: 11 KiB |
@@ -0,0 +1,29 @@
|
||||
@startuml
|
||||
scale 600 height
|
||||
top to bottom direction
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 10
|
||||
skinparam stateBorderColor #2c7794
|
||||
skinparam stateBackgroundColor #edf6fa
|
||||
skinparam ArrowColor #8095a1
|
||||
title A6 STATE — block state and heap statistics
|
||||
|
||||
[*] --> Free : 01 one list node
|
||||
Free --> Allocated : 02 first-fit + split\ncurrent free decreases
|
||||
Allocated --> Fragmented : free A and C
|
||||
Fragmented : 03 two free blocks
|
||||
Fragmented : sum free > largest block
|
||||
Fragmented --> Coalesced : free B\naddress-order joins neighbours
|
||||
Coalesced : 04 one free block
|
||||
Coalesced : current free = initial free
|
||||
Coalesced --> OOMChecked : request > arena
|
||||
OOMChecked : NULL + hook once
|
||||
OOMChecked --> [*]
|
||||
|
||||
state "05 minimum-ever" as MIN
|
||||
Allocated -right-> MIN : records low watermark
|
||||
Fragmented -right-> MIN : does not rise
|
||||
Coalesced -right-> MIN : history remains
|
||||
@enduml
|
||||
@@ -0,0 +1,50 @@
|
||||
<?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="600.2823px" preserveAspectRatio="none" style="width:346px;height:600px;" version="1.1" viewBox="0 0 346 600" width="346.9454px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="154.5281" x="99.1803" y="7.9418">A6 STATE — block state and heap statistics</text><ellipse cx="212.8476" cy="23.6993" fill="#000000" rx="7.4292" ry="7.4292" style="stroke: none; stroke-width: 0.742923663722561;"/><rect fill="#EDF6FA" height="37.1462" rx="9.2865" ry="9.2865" style="stroke: #2C7794; stroke-width: 1.1143854955838415;" width="37.1462" x="194.2745" y="86.8478"/><line style="stroke: #2C7794; stroke-width: 1.1143854955838415;" x1="194.2745" x2="231.4207" y1="104.3956" y2="104.3956"/><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="15.6014" x="205.0469" y="98.5042">Free</text><rect fill="#EDF6FA" height="37.1462" rx="9.2865" ry="9.2865" style="stroke: #2C7794; stroke-width: 1.1143854955838415;" width="48.29" x="188.7026" y="190.1142"/><line style="stroke: #2C7794; stroke-width: 1.1143854955838415;" x1="188.7026" x2="236.9926" y1="207.662" y2="207.662"/><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="33.4316" x="196.1318" y="201.7706">Allocated</text><rect fill="#EDF6FA" height="45.2143" rx="9.2865" ry="9.2865" style="stroke: #2C7794; stroke-width: 1.1143854955838415;" width="101.0376" x="111.0671" y="282.9796"/><line style="stroke: #2C7794; stroke-width: 1.1143854955838415;" x1="111.0671" x2="212.1047" y1="300.5275" y2="300.5275"/><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="43.0896" x="140.0411" y="294.6361">Fragmented</text><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="65.3773" x="114.7817" y="312.1839">03 two free blocks</text><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="86.1791" x="114.7817" y="322.3025">sum free > largest block</text><rect fill="#EDF6FA" height="45.2143" rx="9.2865" ry="9.2865" style="stroke: #2C7794; stroke-width: 1.1143854955838415;" width="103.2664" x="4.4575" y="394.3142"/><line style="stroke: #2C7794; stroke-width: 1.1143854955838415;" x1="4.4575" x2="107.7239" y1="411.862" y2="411.862"/><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="36.4033" x="37.8891" y="405.9706">Coalesced</text><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="61.6627" x="8.1722" y="423.5185">04 one free block</text><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="88.4079" x="8.1722" y="433.6371">current free = initial free</text><rect fill="#EDF6FA" height="37.1462" rx="9.2865" ry="9.2865" style="stroke: #2C7794; stroke-width: 1.1143854955838415;" width="78.7499" x="16.7158" y="495.2478"/><line style="stroke: #2C7794; stroke-width: 1.1143854955838415;" x1="16.7158" x2="95.4657" y1="512.7956" y2="512.7956"/><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="48.29" x="31.9457" y="506.9042">OOMChecked</text><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="63.8914" x="20.4304" y="524.4521">NULL + hook once</text><ellipse cx="56.0907" cy="585.1415" fill="none" rx="7.4292" ry="7.4292" style="stroke: #000000; stroke-width: 0.742923663722561;"/><ellipse cx="56.4622" cy="585.513" fill="#000000" rx="4.4575" ry="4.4575" style="stroke: none; stroke-width: 0.742923663722561;"/><rect fill="#EDF6FA" height="37.1462" rx="9.2865" ry="9.2865" style="stroke: #2C7794; stroke-width: 1.1143854955838415;" width="77.2641" x="190.5599" y="398.3482"/><line style="stroke: #2C7794; stroke-width: 1.1143854955838415;" x1="190.5599" x2="267.824" y1="415.8961" y2="415.8961"/><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="62.4056" x="197.9892" y="410.0047">05 minimum-ever</text><!--MD5=[f16808fa220dde377303612249059854]
|
||||
link *start to Free--><path d="M212.8476,31.2845 C212.8476,42.3689 212.8476,64.7384 212.8476,81.885 " fill="none" id="*start->Free" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><polygon fill="#8095A1" points="212.8476,85.4436,215.8193,78.7573,212.8476,81.729,209.8759,78.7573,212.8476,85.4436" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="57.948" x="213.5906" y="62.101">01 one list node</text><!--MD5=[19abaf48dc778410378e95e0d1bca006]
|
||||
link Free to Allocated--><path d="M212.8476,124.358 C212.8476,141.3635 212.8476,166.8235 212.8476,185.1663 " fill="none" id="Free->Allocated" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><polygon fill="#8095A1" points="212.8476,188.7843,215.8193,182.098,212.8476,185.0697,209.8759,182.098,212.8476,188.7843" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="59.4339" x="224.3629" y="154.9664">02 first-fit + split</text><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="80.9787" x="213.5906" y="165.085">current free decreases</text><!--MD5=[f6fa3e1917b73de38ea03346a6903b17]
|
||||
link Allocated to Fragmented--><path d="M203.0856,227.6021 C195.3518,241.9925 184.4382,262.304 175.746,278.4849 " fill="none" id="Allocated->Fragmented" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><polygon fill="#8095A1" points="174.0076,281.7241,179.7784,277.2257,175.7573,278.4473,174.5357,274.4262,174.0076,281.7241" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="43.0896" x="191.028" y="258.2328">free A and C</text><!--MD5=[c73bca393b062d6a86dff80fa900c78c]
|
||||
link Fragmented to Coalesced--><path d="M110.7031,318.744 C93.6455,325.4006 76.1571,335.4523 65.0058,350.4817 C56.8188,361.5141 54.33,376.536 54.0031,389.4331 " fill="none" id="Fragmented->Coalesced" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><polygon fill="#8095A1" points="53.9808,392.9546,56.9907,386.2854,54.0021,389.24,51.0474,386.2514,53.9808,392.9546" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="21.5448" x="110.6956" y="359.1664">free B</text><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="111.4385" x="65.7487" y="369.285">address-order joins neighbours</text><!--MD5=[2b306524d92469efb3bb270d490680cf]
|
||||
link Coalesced to OOMChecked--><path d="M56.0907,439.7959 C56.0907,454.8922 56.0907,474.8471 56.0907,490.1216 " fill="none" id="Coalesced->OOMChecked" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><polygon fill="#8095A1" points="56.0907,493.7842,59.0624,487.0979,56.0907,490.0696,53.119,487.0979,56.0907,493.7842" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="57.2051" x="56.8337" y="470.501">request > arena</text><!--MD5=[6b8be85e17f6174335a5329fe1414850]
|
||||
link OOMChecked to *end--><path d="M56.0907,532.55 C56.0907,545.306 56.0907,562.0366 56.0907,573.0022 " fill="none" id="OOMChecked->*end" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><polygon fill="#8095A1" points="56.0907,576.4716,59.0624,569.7853,56.0907,572.757,53.119,569.7853,56.0907,576.4716" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><!--MD5=[b09143a670c8c67aa163b99fca5c6b6b]
|
||||
link Allocated to MIN--><path d="M228.8056,227.6169 C233.6049,234.1101 238.3299,241.7622 241.0787,249.548 C259.2432,300.9509 258.5449,318.5879 247.765,372.0264 C246.2941,379.3145 243.5824,386.8998 240.685,393.6827 " fill="none" id="Allocated->MIN" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><polygon fill="#8095A1" points="239.214,396.9813,244.6551,392.0892,240.7295,393.5899,239.2288,389.6643,239.214,396.9813" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="82.4645" x="256.1378" y="308.6996">records low watermark</text><!--MD5=[1fa23b8554d20d5dd3f2f8930c0e2df3]
|
||||
link Fragmented to MIN--><path d="M172.2766,328.3871 C178.8143,341.366 187.6105,357.9332 196.5033,372.0264 C201.2283,379.5151 206.8225,387.3752 212.0378,394.3513 " fill="none" id="Fragmented->MIN" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><polygon fill="#8095A1" points="214.2072,397.2338,212.5727,390.1018,211.9784,394.2621,207.818,393.6678,214.2072,397.2338" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="46.8042" x="197.2462" y="364.3669">does not rise</text><!--MD5=[87522a40b34d64237ec6603d41372cd8]
|
||||
link Coalesced to MIN--><path d="M108.0285,416.9213 C132.7679,416.9213 162.0242,416.9213 185.5972,416.9213 " fill="none" id="Coalesced->MIN" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><polygon fill="#8095A1" points="189.1038,416.9213,182.4175,413.9496,185.3892,416.9213,182.4175,419.893,189.1038,416.9213" style="stroke: #8095A1; stroke-width: 0.742923663722561;"/><text fill="#000000" font-family="Monospace" font-size="7.4292" lengthAdjust="spacingAndGlyphs" textLength="55.7193" x="121.2823" y="412.2335">history remains</text><!--MD5=[994b73c618d067de5faae1a7c19b4f86]
|
||||
@startuml
|
||||
scale 600 height
|
||||
top to bottom direction
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 10
|
||||
skinparam stateBorderColor #2c7794
|
||||
skinparam stateBackgroundColor #edf6fa
|
||||
skinparam ArrowColor #8095a1
|
||||
title A6 STATE — block state and heap statistics
|
||||
|
||||
[*] - -> Free : 01 one list node
|
||||
Free - -> Allocated : 02 first-fit + split\ncurrent free decreases
|
||||
Allocated - -> Fragmented : free A and C
|
||||
Fragmented : 03 two free blocks
|
||||
Fragmented : sum free > largest block
|
||||
Fragmented - -> Coalesced : free B\naddress-order joins neighbours
|
||||
Coalesced : 04 one free block
|
||||
Coalesced : current free = initial free
|
||||
Coalesced - -> OOMChecked : request > arena
|
||||
OOMChecked : NULL + hook once
|
||||
OOMChecked - -> [*]
|
||||
|
||||
state "05 minimum-ever" as MIN
|
||||
Allocated -right-> MIN : records low watermark
|
||||
Fragmented -right-> MIN : does not rise
|
||||
Coalesced -right-> MIN : history remains
|
||||
@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: 11 KiB |
@@ -0,0 +1,23 @@
|
||||
@startuml
|
||||
scale 820 width
|
||||
left to right direction
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 9
|
||||
skinparam rectangleBorderColor #2c7794
|
||||
skinparam rectangleBackgroundColor #edf6fa
|
||||
skinparam ArrowColor #8095a1
|
||||
title A7 RUNTIME — one artifact, two checkpoints, one proof
|
||||
|
||||
rectangle "<<source>>\n01 task03 C\nA/B/C experiment" as SRC
|
||||
rectangle "<<artifact>>\n02 ELF + image\nheap_4 symbols" as ELF
|
||||
rectangle "<<checkpoint E01>>\n03 fragmented\nblocks=2 · aligned=1" as E1
|
||||
rectangle "<<memory>>\n04 ucHeap[4096]\nheaders + payload" as MEM
|
||||
rectangle "<<checkpoint E02>>\n05 coalesced\nfinal=initial · blocks=1\nOOM=1 · PASS=1" as E2
|
||||
|
||||
SRC --> ELF : compile + link
|
||||
ELF --> E1 : reset / load / replay
|
||||
E1 --> MEM : inspect bytes
|
||||
MEM --> E2 : continue
|
||||
@enduml
|
||||
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="82.7447px" preserveAspectRatio="none" style="width:814px;height:82px;" version="1.1" viewBox="0 0 814 82" width="814.2079px" zoomAndPan="magnify"><defs/><g><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="190.3128" x="314.8436" y="7.9609">A7 RUNTIME — one artifact, two checkpoints, one proof</text><!--MD5=[183d75e42a7a852d02a7f9ce2cc3343f]
|
||||
entity SRC--><rect fill="#EDF6FA" height="46.9777" style="stroke: #2C7794; stroke-width: 1.24117053481332;" width="78.6075" x="4.9647" y="21.8099"/><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="31.443" x="13.2392" y="38.0453">«source»</text><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="38.89" x="13.2392" y="48.1882">01 task03 C</text><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="62.0585" x="13.2392" y="58.3311">A/B/C experiment</text><!--MD5=[4a7b087cd571ae358eb895b9dc7ce0ed]
|
||||
entity ELF--><rect fill="#EDF6FA" height="46.9777" style="stroke: #2C7794; stroke-width: 1.24117053481332;" width="71.9879" x="181.2109" y="21.8099"/><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="32.2704" x="189.4854" y="38.0453">«artifact»</text><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="51.3017" x="189.4854" y="48.1882">02 ELF + image</text><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="55.439" x="189.4854" y="58.3311">heap_4 symbols</text><!--MD5=[45565a74ca8123df0b8413ce5340d40a]
|
||||
entity E1--><rect fill="#EDF6FA" height="46.9777" style="stroke: #2C7794; stroke-width: 1.24117053481332;" width="86.0545" x="370.6963" y="21.8099"/><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="60.4036" x="378.9707" y="38.0453">«checkpoint E01»</text><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="52.1292" x="378.9707" y="48.1882">03 fragmented</text><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="69.5055" x="378.9707" y="58.3311">blocks=2 · aligned=1</text><!--MD5=[5ceda9279414f57783e95166b8d927b7]
|
||||
entity MEM--><rect fill="#EDF6FA" height="46.9777" style="stroke: #2C7794; stroke-width: 1.24117053481332;" width="81.0898" x="553.5621" y="21.8099"/><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="37.2351" x="561.8365" y="38.0453">«memory»</text><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="58.7487" x="561.8365" y="48.1882">04 ucHeap[4096]</text><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="64.5409" x="561.8365" y="58.3311">headers + payload</text><!--MD5=[a3c437a7ee715155cf6a0fec80d7cbaf]
|
||||
entity E2--><rect fill="#EDF6FA" height="57.1206" style="stroke: #2C7794; stroke-width: 1.24117053481332;" width="88.5368" x="716.5691" y="16.7377"/><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="60.4036" x="724.8436" y="32.9731">«checkpoint E02»</text><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="43.0272" x="724.8436" y="43.116">05 coalesced</text><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="71.9879" x="724.8436" y="53.2589">final=initial · blocks=1</text><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="57.0938" x="724.8436" y="63.4018">OOM=1 · PASS=1</text><!--MD5=[2e73c4d4efa4a7715d66b06010e70f85]
|
||||
link SRC to ELF--><path d="M83.961,45.2929 C111.3744,45.2929 148.0054,45.2929 175.7911,45.2929 " fill="none" id="SRC->ELF" style="stroke: #8095A1; stroke-width: 0.82744702320888;"/><polygon fill="#8095A1" points="179.6222,45.2929,172.1752,41.9831,175.485,45.2929,172.1752,48.6027,179.6222,45.2929" style="stroke: #8095A1; stroke-width: 0.82744702320888;"/><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="46.337" x="109.223" y="42.497">compile + link</text><!--MD5=[98439561a91d683361f6e8599ebb304f]
|
||||
link ELF to E1--><path d="M253.5463,45.2929 C284.8735,45.2929 330.7719,45.2929 365.2765,45.2929 " fill="none" id="ELF->E1" style="stroke: #8095A1; stroke-width: 0.82744702320888;"/><polygon fill="#8095A1" points="369.2482,45.2929,361.8012,41.9831,365.111,45.2929,361.8012,48.6027,369.2482,45.2929" style="stroke: #8095A1; stroke-width: 0.82744702320888;"/><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="66.1958" x="278.8496" y="42.497">reset / load / replay</text><!--MD5=[14b84038a04448f34eb55bd119f2d935]
|
||||
link E1 to MEM--><path d="M457.1314,45.2929 C484.5447,45.2929 520.1332,45.2929 548.0513,45.2929 " fill="none" id="E1->MEM" style="stroke: #8095A1; stroke-width: 0.82744702320888;"/><polygon fill="#8095A1" points="551.9154,45.2929,544.4684,41.9831,547.7782,45.2929,544.4684,48.6027,551.9154,45.2929" style="stroke: #8095A1; stroke-width: 0.82744702320888;"/><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="45.5096" x="482.4016" y="42.497">inspect bytes</text><!--MD5=[28f0a5a321106494a7afb95cbc1e35b0]
|
||||
link MEM to E2--><path d="M634.8918,45.2929 C657.8783,45.2929 686.93,45.2929 711.2486,45.2929 " fill="none" id="MEM->E2" style="stroke: #8095A1; stroke-width: 0.82744702320888;"/><polygon fill="#8095A1" points="715.1128,45.2929,707.6658,41.9831,710.9756,45.2929,707.6658,48.6027,715.1128,45.2929" style="stroke: #8095A1; stroke-width: 0.82744702320888;"/><text fill="#000000" font-family="Monospace" font-size="7.447" lengthAdjust="spacingAndGlyphs" textLength="30.6155" x="660.3027" y="42.497">continue</text><!--MD5=[bc1681809f0cb7bb82cdf81f0385b8f2]
|
||||
@startuml
|
||||
scale 820 width
|
||||
left to right direction
|
||||
skinparam backgroundColor transparent
|
||||
skinparam shadowing false
|
||||
skinparam defaultFontName Monospace
|
||||
skinparam defaultFontSize 9
|
||||
skinparam rectangleBorderColor #2c7794
|
||||
skinparam rectangleBackgroundColor #edf6fa
|
||||
skinparam ArrowColor #8095a1
|
||||
title A7 RUNTIME — one artifact, two checkpoints, one proof
|
||||
|
||||
rectangle "<<source>>\n01 task03 C\nA/B/C experiment" as SRC
|
||||
rectangle "<<artifact>>\n02 ELF + image\nheap_4 symbols" as ELF
|
||||
rectangle "<<checkpoint E01>>\n03 fragmented\nblocks=2 · aligned=1" as E1
|
||||
rectangle "<<memory>>\n04 ucHeap[4096]\nheaders + payload" as MEM
|
||||
rectangle "<<checkpoint E02>>\n05 coalesced\nfinal=initial · blocks=1\nOOM=1 · PASS=1" as E2
|
||||
|
||||
SRC - -> ELF : compile + link
|
||||
ELF - -> E1 : reset / load / replay
|
||||
E1 - -> MEM : inspect bytes
|
||||
MEM - -> E2 : continue
|
||||
@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: 7.4 KiB |
Reference in New Issue
Block a user