Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Deadline Monotonic Scheduling

ASecurity

Use when you must decide the fixed-priority schedulability of an avionics flight software task set whose per-task relative deadlines are not the implicit period: order the tasks by deadline-monotonic priority assignment so the shorter deadline ranks higher, run the exact jitter-aware fixed-point response-time iteration against each task's own deadline, and cover constrained deadlines (D no greater than T) and arbitrary deadlines (D beyond T) with the busy-period job scan when a queued job can...

2 stars
0 votes
0 copies
0 views
Added 9/27/2026
ai-agentspythongoperformance

Works with

claude codecli

Security Analysis

A100/100

Scanned 9/27/2026

Install to Claude Code

$npx -y skills add ashfordeOU/aero-agent-skills --skill deadline-monotonic-scheduling --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Deadline Monotonic Scheduling?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Deadline Monotonic Scheduling
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ashfordeou-deadline-monotonic-scheduling/badge)](https://www.skillsdirectory.com/skills/ashfordeou-deadline-monotonic-scheduling)

More formats (shields.io, HTML) on the badges page.

Download with Pro
Files
SKILL.md
---
name: deadline-monotonic-scheduling
description: "Use when you must decide the fixed-priority schedulability of an avionics flight software task set whose per-task relative deadlines are not the implicit period: order the tasks by deadline-monotonic priority assignment so the shorter deadline ranks higher, run the exact jitter-aware fixed-point response-time iteration against each task's own deadline, and cover constrained deadlines (D no greater than T) and arbitrary deadlines (D beyond T) with the busy-period job scan when a queued job can be the worst. Produces the deadline-monotonic priority order, the per-task worst-case response times against the per-task deadlines, the release-jitter recomputation when a higher-priority task carries release jitter, the feasible verdict for the whole set, and the divergence verdict when an iterate or a queued job's response crosses its deadline. Trigger: deadline monotonic scheduling, constrained deadline, arbitrary deadline, release jitter, relative deadline, shorter deadline priority."
license: Apache-2.0
compliance: STANDARDS-REF
standards:
  - id: do-178c
    reference-only: true
gated: false
domain: avionics
pack: fsw
compatibility: "agentskills.io SKILL.md; any SKILL.md host (Claude Code, Hermes, OpenClaw)"
metadata:
  domain: avionics
  subdomain: fsw
  tags: [deadline-monotonic-scheduling, constrained-deadline-rta, arbitrary-deadline-rta, release-jitter-rta, dm-priority-assignment, shorter-deadline-order]
  version: 0.1.0
  author: AeroSkills
---

# Deadline-Monotonic Scheduling (avionics/fsw/deadline-monotonic-scheduling)

Use when an avionics flight software task set has per-task relative
deadlines D_i that are not the implicit D_i = T_i of the pack sibling,
so the periodic-only model cannot admit the set at all: a 40 ms-period
navigation task that must finish within 25 ms, or a 30 ms-period
recording task that tolerates a 60 ms relative deadline. This leaf
assigns priorities by deadline-monotonic order (shorter deadline,
higher priority; the fixed-priority assignment Leung and Whitehead
(1982) proved optimal for constrained deadlines), then runs the exact
jitter-aware fixed-point response-time iteration task by task against
each task's own deadline. Constrained deadlines (D <= T) need only the
converged first-job completion; arbitrary deadlines (D > T) whose
first-job completion exceeds the period additionally run the
busy-period job scan and take the worst job response as the exact
response time. Pure Python stdlib, closed form (math.ceil only),
deterministic. Pairs with avionics/fsw/real-time-scheduling for the
implicit-deadline feasibility verdicts of a set where every D = T and
with avionics/fsw/shared-resource-access-control when a shared-resource
blocking term must be added to the fixed point.

## Domain quick reference

- Task shape: each task is a dict {name, C, T, D, J} in one time unit,
  worst-case execution C, period T, relative deadline D, optional
  release jitter J (default 0.0); name is optional. Every function
  rejects, with ValueError, an empty task list, a malformed entry, a
  missing C/T/D key, a boolean or non-positive C, T or D, a boolean or
  negative J, and a non-numeric value.
- Deadline-monotonic order: tasks sorted by D ascending, stably, so the
  shorter deadline ranks higher (index 0) and equal deadlines keep
  their input order. For constrained deadlines this assignment is
  optimal among fixed priorities (Leung and Whitehead, "On the
  Complexity of Fixed-Priority Scheduling of Periodic Real-Time
  Tasks", Performance Evaluation 2(4), 1982). The analysis functions
  require the list to already be in this order and raise ValueError
  otherwise; dm_priority_order produces it.
- Busy-window completion of job q of task i (Audsley, Burns,
  Richardson and Wellings, "Applying New Scheduling Theory to Static
  Priority Pre-emptive Scheduling", Software Engineering Journal,
  1993): w_i(q) = (q + 1) * C_i + sum over higher-priority j of
  ceil((w_i(q) + J_j) / T_j) * C_j, iterated from w = (q + 1) * C_i
  until an iterate repeats within CONVERGENCE_TOL (1e-12). For q = 0
  this is the classic fixed point R_i = C_i + sum of
  ceil((R_i + J_j) / T_j) * C_j, with the Tindell and Clark (1994)
  release-jitter term in the interference count. The map is monotone
  non-decreasing.
- Convergence rule: job q of task i releases at q * T_i and completes
  at w_i(q), so its response is w_i(q) - q * T_i and it must satisfy
  w_i(q) <= q * T_i + D_i. An iterate past that per-job bound can
  never converge under the deadline, so the solve reports None; a
  solve that still moves after MAX_RTA_ITERATIONS (100) passes also
  reports None.
- Constrained deadlines (D <= T): the converged first-job completion
  w_i(0) is the exact worst-case response time, feasible iff
  w_i(0) <= D_i; successive jobs never overlap, so no job scan runs.
- Arbitrary deadlines (D > T): when w_i(0) <= T_i the first-job
  completion is again the exact response. When w_i(0) > T_i, jobs
  queue and the exact response is the maximum of w_i(q) - q * T_i over
  the busy period, scanned while w_i(q) > (q + 1) * T_i and stopped at
  the first q with w_i(q) <= (q + 1) * T_i. A job response past D_i,
  or a scan past MAX_BUSY_PERIOD_JOBS (1000), reports None.
- Release jitter: J_j of a higher-priority task delays its releases by
  up to J_j and enters only the interference counts of lower-priority
  tasks through ceil((w + J_j) / T_j); a task's own J never enters its
  own equation. Jitter can inflate lower responses by whole
  preemptions and can push a first-job completion past T_i, opening
  the queueing regime.
- Utilization: U = sum of C_i / T_i, reported for context only; it is
  not a verdict when deadlines differ from periods, but U > 1 always
  ends in None through the never-ending busy period.
- Module constants: MAX_RTA_ITERATIONS = 100, MAX_BUSY_PERIOD_JOBS =
  1000, CONVERGENCE_TOL = 1e-12. Imports math only.

## Workflow

1. Assemble the task set as {name, C, T, D, J} dicts in one time unit,
   with J and name optional; every function validates the shape and
   raises ValueError on an empty list, malformed entry, missing key,
   boolean or non-positive C/T/D, or boolean or negative J.
2. Order the priorities: dm_priority_order over the task list returns
   the deadline-monotonic priority order, shorter deadline higher
   priority with stable ties (the shorter-deadline-order assignment).
3. Compute the context utilization: utilization over the set gives
   U = sum of C/T, reported but never a verdict (deadlines differ).
4. Run the jitter-aware fixed-point response-time iteration against
   each per-task deadline: response_time on each index of the
   deadline-monotonic-ordered list converges w_i(0) against D_i; a
   constrained-deadline task needs only this first-job completion.
5. Run the arbitrary-deadline busy-period job scan: response_time on a
   task with D > T whose first-job completion exceeds T_i scans the
   queued jobs and returns the worst job response, or None on
   divergence (an iterate or a queued job's response past D_i).
6. Recompute with the release jitter zeroed: response_time on the
   jitter-free copy of the set isolates what the higher-priority
   task's release jitter costs each lower task.
7. Take the feasible verdict: dm_response_times (or feasible) over the
   ordered list reports names, per-task response times, the feasible
   verdict (every response at most its own deadline) and U.
8. Confirm with the deterministic contract test run under both
   interpreters (see Behavior contract).

## Worked example

Task set A, four avionics fsw processes in ms, already in
deadline-monotonic order (deadlines 10, 20, 25, 60 ms ascending):
flight-control (C 2.0, T 10.0, D 10.0, J 4.0), guidance (C 1.0,
T 20.0, D 20.0), navigation (C 4.0, T 40.0, D 25.0, a constrained
deadline shorter than its period) and mission-recording (C 18.0,
T 30.0, D 60.0, an arbitrary deadline beyond its period). Real module
outputs:

- dm_priority_order(A) keeps the list as given: the 25 ms-deadline
  navigation task outranks the 60 ms-deadline mission-recording task
  even though its 40 ms period is longer, the opposite of a
  period-ordered assignment.
- Full analysis: dm_response_times(A) gives responses [2.0, 3.0, 9.0,
  32.0] ms against deadlines [10, 20, 25, 60] ms, utilization 0.95,
  feasible True: every task closes inside its own deadline.
- Constrained deadline and the jitter cost: response_time(A, 2) =
  9.0 ms against D 25 ms for navigation; with J_0 = 0 the same task
  closes at 7.0 ms, so the 4 ms release jitter on flight-control costs
  navigation exactly 2.0 ms = C_0, one extra flight-control preemption
  counted by ceil((R + 4) / 10) at the converged R = 9.
- Arbitrary deadline, jittered: response_time(A, 3) = 32.0 ms against
  D 60 ms for mission-recording. Its first-job completion w(0) =
  32.0 ms exceeds T = 30 ms, so jobs queue and the busy-period scan
  runs: completions w(0..3) = 32.0, 62.0, 91.0, 114.0 ms with job
  responses 32.0, 32.0, 31.0, 24.0 ms, stopping at job 3 because
  w(3) = 114.0 <= 4 * T = 120.0 ends the busy period; the exact worst
  case is the max, 32.0 ms. Without the jitter the first-job
  completion is exactly 30.0 ms = T, so no job ever queues and the
  response is 30.0 ms: the jitter is what opens the queueing regime.
- Queued job strictly the worst (navigation C = 5 variant, still
  D 25 <= T 40): response_time(variant, 2) = 10.0 ms; the
  mission-recording completions become 33.0, 64.0, 94.0, 119.0 ms with
  responses 33.0, 34.0, 34.0, 29.0 ms, so the exact worst-case
  response is 34.0 ms, held by the queued first and second jobs,
  strictly above the first-job completion 33.0 ms: the job scan, not
  the first-job fixed point alone, gives the arbitrary-deadline
  answer.
- Ordering is the analysis: the same four tasks under period-order
  priorities (10, 20, 30, 40) close at 2.0, 3.0 and 26.0 ms for
  flight-control, guidance and mission-recording, but navigation now
  sits below mission-recording and its iterates run 25.0 then 30.0,
  crossing D 25 ms on the second pass, so navigation reports None and
  the period-ordered set is infeasible; the deadline-monotonic order
  is the difference between a feasible and an infeasible set.
- Implicit-deadline identity (D = T, J = 0): the pack sibling's sets
  reproduce exactly, [1.0, 2.0, 6.0] on [(1, 3), (1, 4), (2, 8)] and
  [1.0, 2.0, 4.0] on [(1, 5), (1, 6), (2, 10)], both feasible True,
  and [2.0, None, None] on the over-subscribed [(2, 3), (2, 5),
  (2, 7)], feasible False.
- Over-subscribed arbitrary-deadline variant (mission-recording
  C = 22.0): utilization 1.083333 > 1, and dm_response_times reports
  [2.0, 3.0, 9.0, None], feasible False: the busy period of the
  arbitrary-deadline task never ends and a queued job's response
  crosses D 60 ms, the divergence verdict.
- Single-task closed form: response_time of {(C 3, T 10, D 7)} is
  3.0 = C, feasible; {(C 3, T 10, D 2)} (C > D) reports None.
- Real ValueError messages: an empty list raises "task list must be a
  non-empty list"; a non-deadline-monotonic list raises "tasks must be
  in deadline-monotonic priority order (non-decreasing D); sort with
  dm_priority_order first"; C = 0 raises "C must be a positive number,
  got 0.0"; J = -1 raises "J must be a non-negative number, got
  -1.0"; a missing D raises "task missing key(s) D"; index 4 on the
  four-task list raises "index out of range".

## Verification

- dm_response_times(A) returns [2.0, 3.0, 9.0, 32.0], feasible True,
  utilization 0.95; each response sits at most its own deadline.
- response_time(A, 2) = 9.0 with J_0 = 4 and 7.0 with J_0 = 0, the
  2.0 ms difference equal to C_0 (release-jitter recomputation).
- The busy-period completions of mission-recording, w(0..3) = 32.0,
  62.0, 91.0, 114.0 ms, terminate with 114.0 <= 120.0; the C = 5
  variant completes at 33.0, 64.0, 94.0, 119.0 ms with worst 34.0 ms.
- dm_priority_order is stable (equal deadlines keep input order),
  returns non-decreasing D, and never mutates its input.
- ValueErrors across the module: empty list, missing key, boolean or
  non-positive C/T/D, boolean or negative J, non-numeric value,
  non-deadline-monotonic order (from response_time, dm_response_times
  and feasible), and index outside [0, len(tasks)) (from
  response_time).
- The module is deterministic (identical outputs run to run), imports
  nothing beyond math, and MAX_RTA_ITERATIONS = 100 with
  MAX_BUSY_PERIOD_JOBS = 1000.
- Run the contract test offline: python3
  scripts/test_deadline_monotonic_scheduling.py (42 tests, exits 0;
  also green under ~/.pyenv/versions/3.13.12/bin/python3).

## Related leaves

- avionics/fsw/real-time-scheduling: the implicit-deadline (D = T)
  utilization, bound and response-time feasibility verdicts; a set
  with any per-task deadline D != T routes here, because that leaf's
  model has no deadline slot and no deadline-ordered priority.
- avionics/fsw/shared-resource-access-control: the priority-ceiling
  blocking term B_i that a shared-resource task set adds to the same
  fixed point under implicit deadlines.
- avionics/fsw/aperiodic-server-scheduling: polling, deferrable and
  sporadic server budgets for aperiodic jobs beside an
  implicit-deadline periodic set.
- avionics/ima/ima-partitioning: partition window schedules and
  sampling or queuing port latencies one level above process
  deadlines.
- avionics/fsw/cfs-architecture and avionics/fsw/fprime-component:
  software bus routing and cyclic rate-group dispatch layout.
- avionics/data-bus/mil-std-1553: bus command/response windows, a bus
  term rather than a task response.

## Pitfalls

- Routing a per-task-deadline set to the implicit-deadline sibling:
  real-time-scheduling has no D != T slot, so a 40 ms-period task with
  a 25 ms deadline cannot even be represented there; the
  deadline-monotonic order and the per-task-deadline convergence are
  this leaf's job.
- Assuming period order equals deadline order: the worked set is
  feasible under deadline-monotonic priorities and infeasible under
  rate-monotonic-style period priorities (navigation's second iterate
  30.0 crosses D 25.0); order the priorities by the shorter deadline
  before running any analysis.
- Quoting the first-job completion as the arbitrary-deadline answer:
  when w(0) > T_i a queued job can be strictly the worst (34.0 ms from
  a queued job against a 33.0 ms first-job completion); only the
  busy-period job scan finds the exact worst case.
- Forgetting the release-jitter term: J_j of a higher-priority task
  inflates every lower task's interference count through
  ceil((w + J_j) / T_j), can cost whole preemptions (2.0 ms = C_0 on
  navigation) and can push a first-job completion past T_i into the
  queueing regime; but a task's own jitter never changes its own
  response.
- Reading U as the verdict: with per-task deadlines, U <= 1 is not a
  feasibility test and U > 1 is not the only infeasibility; the
  per-task convergence against each D_i decides.
- Treating a diverged task as a large response: response_time returns
  None when an iterate crosses q * T_i + D_i (it can never converge
  under the deadline) or when the scan exceeds the caps; None is the
  divergence verdict, not a number to compare against D_i.

## Behavior contract (gate 3)

Run the deterministic contract test (stdlib unittest, offline):

    python3 scripts/test_deadline_monotonic_scheduling.py

The test covers the task-shape ValueErrors, the deadline-monotonic
priority assignment with stable ties, the context utilization, the
jitter-aware fixed-point iteration against each per-task deadline
including the constrained-deadline first-job completions and the
implicit-deadline equivalence with the pack sibling's classic results,
the arbitrary-deadline busy-period job scan with the exact busy-period
completions and the queued-job-worst identity, the release-jitter
recomputation (2.0 ms cost, queueing-regime opening), the feasible
verdict of the whole set, the ordering-is-the-analysis contrast, the
real ValueError messages, and module discipline (determinism,
math-only imports, MAX_RTA_ITERATIONS 100 and MAX_BUSY_PERIOD_JOBS
1000). 42 tests, offline and deterministic, exits 0 under both
/usr/bin/python3 (3.9.6) and ~/.pyenv/versions/3.13.12/bin/python3.

## Compliance

- Standards referenced, not reproduced: RTCA DO-178C (Software
  Considerations in Airborne Systems and Equipment Certification)
  frames the avionics software lifecycle context in which the
  scheduling analysis artifact is recorded; the mathematics above is
  public science (Leung and Whitehead 1982; Audsley, Burns,
  Richardson and Wellings 1993; Tindell and Clark 1994), summary-only
  per standards-map.yaml. No standard text is reproduced verbatim.
- compliance: STANDARDS-REF, gated: false.

Attribution

ashfordeOUashfordeOU
View sourceMore from ashfordeOU →
SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

Related Skills

Caveman

Ultra-compressed communication mode that cuts output tokens while keeping technical accuracy. Levels: lite, full, ultra and the wenyan variants. Use for /caveman, "caveman mode", "talk like caveman", "be brief" or "less tokens".

1074701 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

694821 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3351 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

691 votes

math-skill

A comprehensive mathematical reasoning skill for AI assistants — handles arithmetic to research-level problems with rigorous step-by-step reasoning, systematic verification, and transparent uncertainty handling

381 votes
View all in ai-agents →