moon_deadline

    Constrained-deadline uniprocessor response-time analysis and schedule witnesses.

    Download zip
    Author
    Version
    0.3.0
    License
    Apache-2.0
    Last updated
    5 days ago
    Downloads
    12

    No dependencies

    #MoonDeadline

    实时任务配置回归、响应时间与预算分析,主要业务机制由MoonBit实现,Apache-2.0。

    修改周期任务预算或优先级后,检查哪个任务变成超时、可用余量如何变化,以及是否存在可行优先级顺序。

    #可运行任务

    moon run cmd/main --target js -- examples/config-regression.json moon run cmd/main --target js -- examples/priority-plan.json

    slow优先于urgent时urgent超时;改为urgent、slow后响应分别为1、3。配置比较把失败结果保留为空上界,urgent新余量为1。

    examples/config-regression.json中的before表示旧配置、tasks表示新配置。optimize=true可同时运行优先级分配和预算搜索。

    CLI读取JSON文件,ok表示计算执行成功;领域可行性、超时或削波需读取各自字段。Node只读写文件、设置退出码和封装PCM;核心算法不转发给Python/C或外部服务。

    #可复用接口与安装

    moon add btlqql/moon_deadline@0.3.0

    在moon.pkg导入"btlqql/moon_deadline" @core;完整签名见pkg.generated.mbti。

    固定优先级RTA、带条件的抖动/阻塞界、EDF窗口需求、同步周期轨迹、Audsley分配、最大整数cost搜索、按任务名对齐的配置变更与已证明余量。

    #验证

    moon check --target all --deny-warn moon test --target js --deny-warn moon test --target wasm --deny-warn moon test --target wasm-gc --deny-warn python scripts/verify.py

    当前8项MoonBit测试。独立开发对照:48组随机模型:独立逐tick调度、全部优先级排列、全部候选整数cost和按名变更对齐。

    脚本只需要Python标准库、Node与MoonBit;可用MOON_BIN指定moon路径。产物保存在本仓库_build/oracle,脚本不下载外部库,不访问相邻工作区。CI覆盖JS/Wasm/Wasm-GC/native,实际运行状态见Actions。本地验证和公共CI结论分别记录,不用静态检查冒称native运行。

    #实现边界与来源

    单处理器、可抢占、deadline<=period。输入WCET和阻塞上界须由调用者建立依据;窗口无反例不等于全时域可行。优先级分配只接受J=B=0、最多16项任务。没有多核、真实RTOS日志导入或WCET测量。

    对照详见ECOSYSTEM,归属见THIRD_PARTY。实例是软件模型或合成输入,不是生产部署证明。

    #申报与开发记录

    版本0.3.0。GitHub提交保留真实时间与每次文件变化;不以数量替代独立价值和实际质量。十一月规则尚未从公开页面完整确认,开源发布不等于比赛报名或验收通过。

    ModelError

    pub(all) suberror ModelError {
    InvalidModel
    ResourceLimit
    }

    Assignment

    pub(all) struct Assignment {
    order : Array[Int]
    tasks : Array[Task]
    }

    DemandWitness

    pub(all) struct DemandWitness {
    interval : Int
    demand : Int64
    }

    Response

    pub(all) struct Response {
    name : String
    bound : Int64
    meets_deadline : Bool
    iterations : Array[Int64]
    }

    Simulation

    pub(all) struct Simulation {
    ticks : Array[Tick]
    missed_tasks : Array[Int]
    }

    Task

    pub(all) struct Task {
    name : String
    cost : Int
    period : Int
    deadline : Int
    jitter : Int
    blocking : Int
    }

    TaskChange

    pub(all) struct TaskChange {
    name : String
    before_feasible : Bool
    after_feasible : Bool
    before_upper : Int64?
    after_upper : Int64?
    slack_before : Int64?
    slack_after : Int64?
    }

    Tick

    pub(all) struct Tick {
    time : Int
    task : Int
    }

    assign_priorities

    fn assign_priorities(tasks : Array[Task]) -> Assignment? raise ModelError

    compare

    fn compare(before : Array[Task], after : Array[Task]) -> Array[TaskChange] raise ModelError

    edf_window

    fn edf_window(tasks : Array[Task], horizon : Int) -> DemandWitness? raise ModelError

    fixed_priority

    fn fixed_priority(tasks : Array[Task]) -> Array[Response] raise ModelError

    maximum_cost

    fn maximum_cost(tasks : Array[Task], index : Int) -> Int? raise ModelError

    simulate

    fn simulate(tasks : Array[Task], horizon : Int) -> Simulation raise ModelError