publish: K05 heap-models v00.01
This commit is contained in:
@@ -0,0 +1,187 @@
|
||||
{
|
||||
"$schema": "../../../tools/card-layouts/schemas/card-source.schema.json",
|
||||
"schema": "esc-card-source.v1",
|
||||
"card": {
|
||||
"id": "mpabi-freertos-cpp-05-heap-models",
|
||||
"series": "freertos-cpp",
|
||||
"series_title": "FreeRTOS C++",
|
||||
"number": "05",
|
||||
"count": "16",
|
||||
"slug": "heap-models",
|
||||
"title": "Most C++ do heapu, modele i HeapStats",
|
||||
"topic": "heap_1--heap_5, komplet new/delete, fragmentacja, koalescencja i watermark",
|
||||
"project": "Freestanding C++ nad FreeRTOS",
|
||||
"subject": "Informatyka",
|
||||
"level": "Rok 2 · L04 · RV32I/Hazard3",
|
||||
"revision_date": "2026-07-19T00:00:00+02:00",
|
||||
"status": "Gotowa",
|
||||
"version": "v00.01",
|
||||
"uuid": "c456b505-dc5c-4894-b832-bb4c5afd0feb",
|
||||
"author": "M. Pabiszczak",
|
||||
"year": "2026"
|
||||
},
|
||||
"generated": {
|
||||
"tex": "doc/generated/main.tex",
|
||||
"html": "web/index.html",
|
||||
"html_css": "web/style.css",
|
||||
"html_tree_inspector": false,
|
||||
"react_app": true
|
||||
},
|
||||
"template": "templates/karta-klasyczna.json",
|
||||
"title_block": {
|
||||
"category": "KARTA PRACY · INFORMATYKA",
|
||||
"prepared_by": "M. Pabiszczak",
|
||||
"prepared_on": "2026-07-19T00:00:00+02:00",
|
||||
"title": "Most C++ do heapu, modele i HeapStats",
|
||||
"repository_url": "https://zsl-gitea.mpabi.pl/edu-freertos-cpp/lab-rv32i-freertos-heap-models",
|
||||
"revision": "v00.01",
|
||||
"issued_on": "2026-07-19T00:00:00+02:00",
|
||||
"series": "FREERTOS-CPP-05",
|
||||
"document_type": "karta pracy",
|
||||
"tool": "card-layouts",
|
||||
"show_qr": false,
|
||||
"show_repository_qr": false,
|
||||
"height_cm": 2.6,
|
||||
"repeat_on_every_page": true,
|
||||
"replace_front_matter": true
|
||||
},
|
||||
"front_page_scope": {
|
||||
"title": "Cel karty",
|
||||
"content_tex": "Uczeń wybiera model heapu, śledzi kompletny most C++ i dowodzi na Hazard3, że suma wolnych bajtów nie gwarantuje jednego wystarczająco dużego bloku.",
|
||||
"scope_title": "Zakres karty",
|
||||
"scope_content_tex": "Eksperyment linkuje wyłącznie prawdziwy \\texttt{heap\\_4.c}. \\texttt{HeapStats} i \\texttt{HeapWatermark} są tylko-odczytowymi wartościami; runtime-selected resource oraz typed allocator należą do K06."
|
||||
},
|
||||
"side_margin_tree_layout": {
|
||||
"columns": [
|
||||
{"id": "zawodowe", "label": "TECH", "side": "left", "tree": "WE -> EK -> KW", "description": "Dowód z heap_4, ELF i Hazard3."},
|
||||
{"id": "ogolne", "label": "OG", "side": "right", "tree": "WE -> EN -> KW", "description": "Dobór polityki i interpretacja metryk."}
|
||||
]
|
||||
},
|
||||
"learning_effects": {
|
||||
"K05.EN01": {
|
||||
"bloom_level": "Analiza",
|
||||
"label": "Polityka i metryki",
|
||||
"text": "Uczeń dobiera heap_1--heap_5 oraz odróżnia current free, largest free block i minimum-ever.",
|
||||
"assessment_criteria": ["K05.KW01"]
|
||||
},
|
||||
"K05.EK01": {
|
||||
"bloom_level": "Zastosowanie",
|
||||
"label": "Fragmentacja i most ABI",
|
||||
"text": "Uczeń wykazuje komplet new/delete i odtwarza failure, koalescencję, retry oraz historyczny watermark.",
|
||||
"assessment_criteria": ["K05.KW01"]
|
||||
}
|
||||
},
|
||||
"assessment_criteria": {
|
||||
"K05.KW01": {
|
||||
"text": "Program kończy się PASS; largest < request < total; pierwsza próba zawodzi bez zwiększenia success count; po koalescencji identyczna próba działa; current wraca do baseline, a minimum-ever zachowuje historię.",
|
||||
"learning_effects": ["K05.EN01", "K05.EK01"]
|
||||
}
|
||||
},
|
||||
"educational_requirements": {
|
||||
"K05.WE01": {
|
||||
"text": "Dobranie i zbadanie polityki dynamicznej pamięci FreeRTOS dla C++.",
|
||||
"label": "Modele heapu i dowód fragmentacji",
|
||||
"learning_effects": ["K05.EN01", "K05.EK01"],
|
||||
"learning_tree": {
|
||||
"schema": "we-learning-tree.v1",
|
||||
"policy": "Każdy wniosek o pojemności wskazuje total, largest i stan bloków; każdy operator ma symbol ABI.",
|
||||
"ogolne": [
|
||||
{
|
||||
"effect_ref": "K05.EN01",
|
||||
"display": "EN LOCAL MEM.POLICY.01",
|
||||
"source": "LOCAL",
|
||||
"official": "MEM.POLICY",
|
||||
"local": "01",
|
||||
"kind": "EN",
|
||||
"tree_id": "K05.WE01.OG.LOCAL.MEM.POLICY.01",
|
||||
"text": "Dobiera model i interpretuje current, largest oraz minimum-ever.",
|
||||
"kw": [
|
||||
{"criterion_ref": "K05.KW01", "display": "KW LOCAL MEM.POLICY.01", "source": "LOCAL", "kind": "KW", "official": "MEM.POLICY", "local": "01", "text": "Uzasadnia heap_1, heap_4 i heap_5 dla trzech scenariuszy oraz nie myli total z largest."}
|
||||
]
|
||||
}
|
||||
],
|
||||
"zawodowe": [
|
||||
{
|
||||
"effect_ref": "K05.EK01",
|
||||
"display": "EK LOCAL DBG.HEAP.01",
|
||||
"source": "LOCAL",
|
||||
"official": "DBG.HEAP",
|
||||
"local": "01",
|
||||
"kind": "EK",
|
||||
"tree_id": "K05.WE01.TECH.LOCAL.DBG.HEAP.01",
|
||||
"text": "Koreluje adresy, statystyki, nagłówki bloków i symbole new/delete.",
|
||||
"kw": [
|
||||
{"criterion_ref": "K05.KW01", "display": "KW LOCAL DBG.HEAP.01", "source": "LOCAL", "kind": "KW", "official": "DBG.HEAP", "local": "01", "text": "Pokazuje failure, koalescencję, retry, 3/3/0 i historyczne minimum-ever."}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"sections": [
|
||||
{
|
||||
"title": "Wybór heap_1--heap_5",
|
||||
"content_kind": "prose",
|
||||
"content_tex": "Porównaj możliwość free, koalescencję oraz źródło/regiony pamięci. Wybierz heap dla startup-only, jednej areny z delete i dwóch rozłącznych banków RAM.",
|
||||
"educational_requirement_refs": ["K05.WE01"],
|
||||
"learning_effect_refs": ["K05.EN01"],
|
||||
"assessment_criterion_refs": ["K05.KW01"],
|
||||
"area_tree_refs": ["K05.WE01.OG.LOCAL.MEM.POLICY.01"],
|
||||
"steps": [
|
||||
{"id": "S01", "title": "Uzasadnij heap_1, heap_4 i heap_5 dla trzech wdrożeń.", "tree_refs": ["K05.WE01.OG.LOCAL.MEM.POLICY.01"]},
|
||||
{"id": "S02", "title": "Wyjaśnij zależność heap_3 od libc i linkera.", "tree_refs": ["K05.WE01.OG.LOCAL.MEM.POLICY.01"]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Kompletny most C++",
|
||||
"content_kind": "prose",
|
||||
"content_tex": "Odszukaj scalar/array new oraz sized/unsized scalar/array delete. Zwykłe new jest fail-fast; raw pvPortMalloc pozostaje fallible.",
|
||||
"educational_requirement_refs": ["K05.WE01"],
|
||||
"learning_effect_refs": ["K05.EK01"],
|
||||
"assessment_criterion_refs": ["K05.KW01"],
|
||||
"area_tree_refs": ["K05.WE01.TECH.LOCAL.DBG.HEAP.01"],
|
||||
"steps": [
|
||||
{"id": "S03", "title": "Potwierdź sześć symboli alokacji/dealokacji w ELF.", "tree_refs": ["K05.WE01.TECH.LOCAL.DBG.HEAP.01"]},
|
||||
{"id": "S04", "title": "Rozdziel fail-fast new od kontrolowanego raw probe.", "tree_refs": ["K05.WE01.TECH.LOCAL.DBG.HEAP.01"]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Fragmentacja, koalescencja i retry",
|
||||
"content_kind": "prose",
|
||||
"content_tex": "Zwolnij A i C wokół żywego B. Udowodnij largest < request < total oraz failure. Zwolnij B i ponów identyczne żądanie po koalescencji.",
|
||||
"educational_requirement_refs": ["K05.WE01"],
|
||||
"learning_effect_refs": ["K05.EK01"],
|
||||
"assessment_criterion_refs": ["K05.KW01"],
|
||||
"area_tree_refs": ["K05.WE01.TECH.LOCAL.DBG.HEAP.01"],
|
||||
"steps": [
|
||||
{"id": "S05", "title": "Zapisz dwa free blocks oraz relację request między largest i total.", "tree_refs": ["K05.WE01.TECH.LOCAL.DBG.HEAP.01"]},
|
||||
{"id": "S06", "title": "Pokaż jeden blok po free B i udany retry.", "tree_refs": ["K05.WE01.TECH.LOCAL.DBG.HEAP.01"]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Watermark zachowuje historię",
|
||||
"content_kind": "prose",
|
||||
"content_tex": "Po finalnym free current wraca do baseline, ale minimum-ever pozostaje historycznym minimum. Wylicz peak = baseline - minimum-ever.",
|
||||
"educational_requirement_refs": ["K05.WE01"],
|
||||
"learning_effect_refs": ["K05.EN01"],
|
||||
"assessment_criterion_refs": ["K05.KW01"],
|
||||
"area_tree_refs": ["K05.WE01.OG.LOCAL.MEM.POLICY.01"],
|
||||
"steps": [
|
||||
{"id": "S07", "title": "Porównaj final current z minimum-ever i wylicz peak.", "tree_refs": ["K05.WE01.OG.LOCAL.MEM.POLICY.01"]}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tasks": {
|
||||
"task01": {
|
||||
"title": "Fragmentacja, koalescencja i historyczny watermark",
|
||||
"uuid": "c456b505-dc5c-4894-b832-bb4c5afd0feb",
|
||||
"prompt_tex": "Wybierz model heapu, sprawdź most ABI, a następnie odtwórz siedem checkpointów i udowodnij failure mimo wystarczającej sumy free, udany retry po koalescencji oraz zachowanie minimum-ever.",
|
||||
"criterion": "Sześć symboli; largest < request < total; failure bez success increment; jeden blok po free B; retry działa; 3/3/0; current=baseline; minimum-ever<current; pass=1.",
|
||||
"educational_requirement_refs": ["K05.WE01"],
|
||||
"learning_effect_refs": ["K05.EN01", "K05.EK01"],
|
||||
"assessment_criterion_ref": "K05.KW01",
|
||||
"links": {"equations": [], "figures": []}
|
||||
}
|
||||
},
|
||||
"tasks_order": ["task01"]
|
||||
}
|
||||
BIN
Binary file not shown.
Reference in New Issue
Block a user