Files
lab-rv32i-freertos-schedule…/json/card_source.json
T

249 lines
9.3 KiB
JSON

{
"$schema": "../../../tools/card-layouts/schemas/card-source.schema.json",
"schema": "esc-card-source.v1",
"card": {
"id": "mpabi-freertos-cpp-04-scheduler-states",
"series": "freertos-cpp",
"series_title": "FreeRTOS C++",
"number": "04",
"count": "16",
"slug": "scheduler-states",
"title": "Scheduler: stany, priorytety i typowane ticki",
"topic": "READY/RUNNING/BLOCKED, time slicing, priority preemption i czas tickowy",
"project": "Freestanding C++ nad FreeRTOS",
"subject": "Informatyka",
"level": "Rok 2 · L03 · RV32I/Hazard3",
"revision_date": "2026-07-19T00:00:00+02:00",
"status": "Gotowa",
"version": "v00.01",
"uuid": "853a7dd7-b00b-4f4a-96e8-c160fc5bb04a",
"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": "Scheduler: stany, priorytety i typowane ticki",
"repository_url": "https://zsl-gitea.mpabi.pl/edu-freertos-cpp/lab-rv32i-freertos-scheduler-states",
"revision": "v00.01",
"issued_on": "2026-07-19T00:00:00+02:00",
"series": "FREERTOS-CPP-04",
"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ń przewiduje i odtwarza stany dwóch tasków, mierzy blokadę w tickach i dowodzi natychmiastowego wywłaszczenia porządkiem BEFORE--HIGH--AFTER.",
"scope_title": "Zakres karty",
"scope_content_tex": "Jedno zadanie uruchamia prawdziwy scheduler FreeRTOS na Hazard3. Warstwa C++ dodaje tylko typy \\texttt{Ticks}, \\texttt{TickPoint} oraz nieposiadający \\texttt{TaskRef}; pełna fasada schedulera i własność taska są poza zakresem."
},
"side_margin_tree_layout": {
"columns": [
{
"id": "zawodowe",
"label": "TECH",
"side": "left",
"tree": "WE -> EK -> KW",
"description": "Dowód ze śladu FreeRTOS i Hazard3."
},
{
"id": "ogolne",
"label": "OG",
"side": "right",
"tree": "WE -> EN -> KW",
"description": "Rozumowanie o czasie i kwalifikacji do CPU."
}
]
},
"learning_effects": {
"K04.EN01": {
"bloom_level": "Analiza",
"label": "Model schedulera",
"text": "Uczeń wyjaśnia związek stanu, priorytetu i gotowości oraz odróżnia czas trwania od punktu tickowego.",
"assessment_criteria": ["K04.KW01"]
},
"K04.EK01": {
"bloom_level": "Zastosowanie",
"label": "Ślad przełączeń",
"text": "Uczeń odtwarza osiem snapshotów, alternację równych priorytetów, blokadę na trzy ticki i natychmiastowe wywłaszczenie.",
"assessment_criteria": ["K04.KW01"]
}
},
"assessment_criteria": {
"K04.KW01": {
"text": "Program kończy się PASS; ślad ma relację X,Y,X; A jest obserwowane jako BLOCKED; elapsed=3; B działa z p3 między znacznikami BEFORE i AFTER; osiem snapshotów jest spójnych.",
"learning_effects": ["K04.EN01", "K04.EK01"]
}
},
"educational_requirements": {
"K04.WE01": {
"text": "Przewidzenie i udowodnienie decyzji schedulera FreeRTOS.",
"label": "Stany, priorytety i ticki",
"learning_effects": ["K04.EN01", "K04.EK01"],
"learning_tree": {
"schema": "we-learning-tree.v1",
"policy": "Każde twierdzenie o schedulerze ma odpowiadający snapshot, tick albo znacznik kolejności.",
"ogolne": [
{
"effect_ref": "K04.EN01",
"display": "EN LOCAL RTOS.MODEL.01",
"source": "LOCAL",
"official": "RTOS.MODEL",
"local": "01",
"kind": "EN",
"tree_id": "K04.WE01.OG.LOCAL.RTOS.MODEL.01",
"text": "Analizuje gotowość, stan, priorytet i jednostkę czasu.",
"kw": [
{
"criterion_ref": "K04.KW01",
"display": "KW LOCAL RTOS.MODEL.01",
"source": "LOCAL",
"kind": "KW",
"official": "RTOS.MODEL",
"local": "01",
"text": "Wyjaśnia BLOCKED mimo wysokiego priorytetu oraz relative delay kontra periodic reference."
}
]
}
],
"zawodowe": [
{
"effect_ref": "K04.EK01",
"display": "EK LOCAL DBG.SCHED.01",
"source": "LOCAL",
"official": "DBG.SCHED",
"local": "01",
"kind": "EK",
"tree_id": "K04.WE01.TECH.LOCAL.DBG.SCHED.01",
"text": "Koreluje snapshoty, ticki i kolejność wykonania z decyzjami kernela.",
"kw": [
{
"criterion_ref": "K04.KW01",
"display": "KW LOCAL DBG.SCHED.01",
"source": "LOCAL",
"kind": "KW",
"official": "DBG.SCHED",
"local": "01",
"text": "Pokazuje X,Y,X; elapsed=3; A BLOCKED; B/p3 oraz porządek 1,2,3."
}
]
}
]
}
}
},
"sections": [
{
"title": "Stan i gotowość do wykonania",
"content_kind": "prose",
"content_tex": "Zadanie o najwyższym priorytecie wygrywa tylko wtedy, gdy jest gotowe. Przewidź READY, RUNNING, BLOCKED i DELETED w ośmiu punktach.",
"educational_requirement_refs": ["K04.WE01"],
"learning_effect_refs": ["K04.EN01"],
"assessment_criterion_refs": ["K04.KW01"],
"area_tree_refs": ["K04.WE01.OG.LOCAL.RTOS.MODEL.01"],
"steps": [
{
"id": "S01",
"title": "Wypełnij tabelę stanów przed uruchomieniem kodu.",
"tree_refs": ["K04.WE01.OG.LOCAL.RTOS.MODEL.01"]
},
{
"id": "S02",
"title": "Wyjaśnij, dlaczego BLOCKED/p4 przegrywa z READY/p2.",
"tree_refs": ["K04.WE01.OG.LOCAL.RTOS.MODEL.01"]
}
]
},
{
"title": "Time slicing i blokada na trzy ticki",
"content_kind": "prose",
"content_tex": "Dopuść A--B--A albo B--A--B, a następnie pokaż A jako BLOCKED i różnicę end-start równą 3 ticki.",
"educational_requirement_refs": ["K04.WE01"],
"learning_effect_refs": ["K04.EK01"],
"assessment_criterion_refs": ["K04.KW01"],
"area_tree_refs": ["K04.WE01.TECH.LOCAL.DBG.SCHED.01"],
"steps": [
{
"id": "S03",
"title": "Sprawdź relację first==third i first!=second.",
"tree_refs": ["K04.WE01.TECH.LOCAL.DBG.SCHED.01"]
},
{
"id": "S04",
"title": "Zapisz snapshot BLOCKED/RUNNING oraz trzy ticki elapsed.",
"tree_refs": ["K04.WE01.TECH.LOCAL.DBG.SCHED.01"]
}
]
},
{
"title": "Natychmiastowe wywłaszczenie po zmianie priorytetu",
"content_kind": "prose",
"content_tex": "A zapisuje BEFORE=1, podnosi B do p3 i dopiero po wznowieniu zapisuje AFTER=3. B musi zapisać HIGH=2 pomiędzy nimi.",
"educational_requirement_refs": ["K04.WE01"],
"learning_effect_refs": ["K04.EK01"],
"assessment_criterion_refs": ["K04.KW01"],
"area_tree_refs": ["K04.WE01.TECH.LOCAL.DBG.SCHED.01"],
"steps": [
{
"id": "S05",
"title": "Pokaż B jako RUNNING/p3, gdy A jest READY/p2.",
"tree_refs": ["K04.WE01.TECH.LOCAL.DBG.SCHED.01"]
},
{
"id": "S06",
"title": "Udowodnij porządek markerów 1,2,3.",
"tree_refs": ["K04.WE01.TECH.LOCAL.DBG.SCHED.01"]
}
]
},
{
"title": "Typy i granica nieposiadającej referencji",
"content_kind": "prose",
"content_tex": "Ticks opisuje czas trwania, TickPoint punkt licznika, a TaskRef tylko widok uchwytu. Po usunięciu taska widok może wisieć.",
"educational_requirement_refs": ["K04.WE01"],
"learning_effect_refs": ["K04.EN01"],
"assessment_criterion_refs": ["K04.KW01"],
"area_tree_refs": ["K04.WE01.OG.LOCAL.RTOS.MODEL.01"],
"steps": [
{
"id": "S07",
"title": "Porównaj vTaskDelay z xTaskDelayUntil.",
"tree_refs": ["K04.WE01.OG.LOCAL.RTOS.MODEL.01"]
},
{
"id": "S08",
"title": "Uzasadnij brak odczytu przez TaskRef po delete.",
"tree_refs": ["K04.WE01.OG.LOCAL.RTOS.MODEL.01"]
}
]
}
],
"tasks": {
"task01": {
"title": "Osiem snapshotów decyzji schedulera",
"uuid": "853a7dd7-b00b-4f4a-96e8-c160fc5bb04a",
"prompt_tex": "Przewidź tabelę stanów, uruchom Hazard3 i udowodnij time slicing, blokadę na trzy ticki oraz wywłaszczenie kolejnością BEFORE--HIGH--AFTER.",
"criterion": "Ślad X,Y,X; A=BLOCKED/B=RUNNING; elapsed=3; B/p3 między znacznikami 1 i 3; osiem snapshotów; pass=1.",
"educational_requirement_refs": ["K04.WE01"],
"learning_effect_refs": ["K04.EN01", "K04.EK01"],
"assessment_criterion_ref": "K04.KW01",
"links": {"equations": [], "figures": []}
}
},
"tasks_order": ["task01"]
}