Skip to content

Commit df9dee9

Browse files
committed
feat(scheduler): constrained-deadline EDF via processor-demand criterion (v0.3.0)
Implements the first roadmap item of axonos-scheduler: constrained-deadline task systems (D_i <= T_i), previously implicit-deadline only. - Task::periodic_with_deadline: explicit relative deadline (D_i <= T_i) - demand_bound: the demand-bound function dbf(t) - processor_demand_feasible -> Feasibility {Feasible|Infeasible{at,demand}|Uncertain}: exact feasibility by the processor-demand criterion (Baruah/Rosier/Howell 1990), integer-only, bounded, conservative (never reports Feasible unless every relevant deadline point was checked). Catches constrained-infeasible sets the utilisation bound admits. - Kani harnesses S6 (dbf monotone) and S7 (dbf zero below first deadline) - Workspace lockstep version bump to 0.3.0; KERNEL_ABI_VERSION unchanged (1) - Additive only; implicit-deadline API unchanged; no unsafe introduced
1 parent 457c813 commit df9dee9

15 files changed

Lines changed: 629 additions & 40 deletions

File tree

CHANGELOG.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,56 @@ The workspace versions all 8 crates lock-step (`axonos-capability`,
1010

1111
---
1212

13+
## [v0.3.0] — 2026-05-29
14+
15+
### Added — constrained-deadline scheduling (`axonos-scheduler`)
16+
17+
The headline of this release: the scheduler now supports **constrained-deadline**
18+
task systems (`D_i <= T_i`), the first item on its roadmap. Previously only
19+
implicit-deadline systems (`D_i = T_i`) were supported.
20+
21+
- **`Task::periodic_with_deadline(id, wcet, period, deadline)`** constructs a
22+
task whose relative deadline is shorter than its period. The existing
23+
`Task::periodic` (implicit deadline) is unchanged.
24+
- **`demand_bound(set, t)`** computes the demand-bound function `dbf(t)` — the
25+
maximum cumulative execution demand of jobs whose release and deadline both
26+
fall within an interval of length `t`.
27+
- **`processor_demand_feasible(set) -> Feasibility`** decides EDF feasibility
28+
by the **processor-demand criterion** (Baruah, Rosier, and Howell, 1990).
29+
Under constrained deadlines the Liu–Layland utilisation bound is necessary
30+
but not sufficient; this test evaluates `dbf(t) <= t` at every deadline in
31+
the La–Sha feasibility interval. It is **integer-only** (no floating point on
32+
the analysis path) and **bounded**: it returns `Feasibility::Uncertain`
33+
rather than risk an unsound pass, and never returns `Feasible` unless every
34+
relevant deadline point was checked. The verdict is `Feasible`,
35+
`Infeasible { at, demand }` (a definite counterexample), or `Uncertain`.
36+
- This catches a class of error the utilisation test cannot: a task set well
37+
under `U = 1` can still miss a constrained deadline, and
38+
`processor_demand_feasible` reports it as `Infeasible` with the violating
39+
deadline and demand.
40+
- Two new Kani harnesses in `axonos-scheduler/kani-proofs`: `sched_dbf_monotone`
41+
(dbf is monotone non-decreasing in `t`) and `sched_dbf_zero_below_first_deadline`
42+
(dbf is zero below the first deadline).
43+
44+
### Changed
45+
46+
- All workspace crates and the workspace package version move to **0.3.0** in
47+
lockstep; inter-crate path-dependency requirements updated accordingly. Only
48+
`axonos-scheduler` carries functional changes in this release; the other
49+
crates are versioned together as a coherent kernel release.
50+
- `axonos-scheduler` is the only crate with API changes, all **additive**: the
51+
implicit-deadline API (`Task::periodic`, `TaskSet::admit`, `select_next`,
52+
`response_time_bound`) is unchanged and backward-compatible.
53+
54+
### Notes
55+
56+
- `KERNEL_ABI_VERSION` remains **1**: the kernel ABI surface is unchanged. The
57+
`Task` struct is unchanged (its `deadline` field already existed), so the
58+
addition is source- and ABI-compatible.
59+
- No `unsafe` introduced; `axonos-scheduler` remains `#![forbid(unsafe_code)]`.
60+
61+
---
62+
1363
## [v0.2.3] — 2026-05-27
1464

1565
AxonOS-style refresh. No source-code or API changes — the v0.2.1

CITATION.cff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@ keywords:
2020
- neurotechnology
2121
- rust
2222
license: [Apache-2.0, MIT]
23-
version: "0.2.3"
24-
date-released: "2026-05-27"
23+
version: "0.3.0"
24+
date-released: "2026-05-29"

Cargo.lock

Lines changed: 129 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ exclude = [
1818
]
1919

2020
[workspace.package]
21-
version = "0.2.3"
21+
version = "0.3.0"
2222
edition = "2021"
2323
rust-version = "1.75"
2424
license = "Apache-2.0 OR MIT"

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
### The verifiable substrate underneath a brain–computer interface.
66

7-
<sub>seven crates · 3 603 lines · 28 formal proofs · 66 tests · zero unsafe outside two operations</sub>
7+
<sub>seven crates · 30 formal proofs · 72 tests · zero unsafe outside two operations</sub>
88

99
<br/>
1010

@@ -130,7 +130,7 @@ and its specific dependencies.
130130
git clone https://github.com/AxonOS-org/axonos-kernel
131131
cd axonos-kernel
132132
cargo test --workspace
133-
#66 tests passed.
133+
#72 tests passed.
134134
```
135135

136136
### One-minute integration
@@ -229,7 +229,7 @@ cd axonos-intent/kani-proofs && cargo kani
229229
| T1–T6 | `axonos-time` | Monotonic arithmetic; saturation; clock observability |
230230
| I1–I5 | `axonos-intent` | Round-trip identity; strict decoder rejection of malformed input |
231231

232-
**Total: 28 BMC harnesses.** Runnable against the published source.
232+
**Total: 30 BMC harnesses.** Runnable against the published source.
233233

234234
---
235235

@@ -313,7 +313,7 @@ repository.
313313

314314
| Phase | Window | Deliverable |
315315
|:---|:---|:---|
316-
| **Now** | May 2026 | Seven crates published. 66 tests, 28 Kani harnesses, CI green. |
316+
| **Now** | May 2026 | Seven crates published. Constrained-deadline scheduling (processor-demand criterion). 72 tests, 30 Kani harnesses, CI green. |
317317
| **Phase 1** | Q2 2026 | GPIO-instrumented WCRT measurement on STM32H573 reference fixture. Falsification protocol P1–P5 executed and published regardless of outcome. |
318318
| **Phase 2** | Q3–Q4 2026 | First 8-channel clinical kit deployment with the partner ALS rehabilitation centre. |
319319
| **Phase 3** | 2027 | FDA Pre-Submission. Ferrocene-qualified toolchain integration. ISO 14971 risk management file. |

axonos-capability/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "axonos-capability"
3-
version = "0.2.1"
3+
version = "0.3.0"
44
edition = "2021"
55
rust-version = "1.75"
66
license = "Apache-2.0 OR MIT"

axonos-firmware-stm32f407/Cargo.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "axonos-firmware-stm32f407"
3-
version = "0.2.1"
3+
version = "0.3.0"
44
edition = "2021"
55
rust-version = "1.75"
66
license = "Apache-2.0 OR MIT"
@@ -23,12 +23,12 @@ cortex-m-rt = "0.7"
2323
panic-halt = "0.2"
2424

2525
# AxonOS workspace dependencies
26-
axonos-kernel-core = { version = "0.2.0", path = "../axonos-kernel-core" }
27-
axonos-time = { version = "0.2.0", path = "../axonos-time" }
28-
axonos-scheduler = { version = "0.2.0", path = "../axonos-scheduler" }
29-
axonos-capability = { version = "0.2.0", path = "../axonos-capability" }
30-
axonos-intent = { version = "0.2.0", path = "../axonos-intent" }
31-
axonos-spsc = { version = "0.2.0", path = "../axonos-spsc" }
26+
axonos-kernel-core = { version = "0.3.0", path = "../axonos-kernel-core" }
27+
axonos-time = { version = "0.3.0", path = "../axonos-time" }
28+
axonos-scheduler = { version = "0.3.0", path = "../axonos-scheduler" }
29+
axonos-capability = { version = "0.3.0", path = "../axonos-capability" }
30+
axonos-intent = { version = "0.3.0", path = "../axonos-intent" }
31+
axonos-spsc = { version = "0.3.0", path = "../axonos-spsc" }
3232

3333
[[bin]]
3434
name = "axonos-firmware-stm32f407"

axonos-intent/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "axonos-intent"
3-
version = "0.2.1"
3+
version = "0.3.0"
44
edition = "2021"
55
rust-version = "1.75"
66
license = "Apache-2.0 OR MIT"
@@ -15,8 +15,8 @@ default = []
1515
std = ["axonos-time/std"]
1616

1717
[dependencies]
18-
axonos-time = { version = "0.2.0", path = "../axonos-time" }
19-
axonos-capability = { version = "0.2.0", path = "../axonos-capability" }
18+
axonos-time = { version = "0.3.0", path = "../axonos-time" }
19+
axonos-capability = { version = "0.3.0", path = "../axonos-capability" }
2020

2121
[lib]
2222
name = "axonos_intent"

axonos-kernel-core/Cargo.toml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "axonos-kernel-core"
3-
version = "0.2.1"
3+
version = "0.3.0"
44
edition = "2021"
55
rust-version = "1.75"
66
license = "Apache-2.0 OR MIT"
@@ -15,11 +15,11 @@ default = []
1515
std = ["axonos-time/std", "axonos-intent/std"]
1616

1717
[dependencies]
18-
axonos-spsc = { version = "0.2.0", path = "../axonos-spsc" }
19-
axonos-scheduler = { version = "0.2.0", path = "../axonos-scheduler" }
20-
axonos-capability = { version = "0.2.0", path = "../axonos-capability" }
21-
axonos-time = { version = "0.2.0", path = "../axonos-time" }
22-
axonos-intent = { version = "0.2.0", path = "../axonos-intent" }
18+
axonos-spsc = { version = "0.3.0", path = "../axonos-spsc" }
19+
axonos-scheduler = { version = "0.3.0", path = "../axonos-scheduler" }
20+
axonos-capability = { version = "0.3.0", path = "../axonos-capability" }
21+
axonos-time = { version = "0.3.0", path = "../axonos-time" }
22+
axonos-intent = { version = "0.3.0", path = "../axonos-intent" }
2323

2424
[lib]
2525
name = "axonos_kernel_core"

axonos-scheduler/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "axonos-scheduler"
3-
version = "0.2.1"
3+
version = "0.3.0"
44
edition = "2021"
55
rust-version = "1.75"
66
license = "Apache-2.0 OR MIT"

0 commit comments

Comments
 (0)