一、QuarkTS简介
github链接:https://github.com/kmilo17pet/QuarkTS
开源协议:MIT license
QuarkTS是一款开源的嵌入式操作系统,旨在为小型嵌入式应用程序提供现代化的开发环境,帮助开发者构建稳定、可预测的事件驱动型多任务软件。其特点包括:
• 优先级协作式调度:任务自行管理生命周期,避免了抢占带来的复杂性,减少了重入问题。
• 时间控制:提供定时任务和软件定时器,方便实现时间相关的操作。
• 任务间通信机制:提供队列、通知、事件标志等机制,实现不同任务之间的有效通信。
• 状态机支持:提供分层状态机支持,简化复杂逻辑的实现。
• 协程:支持协程,提升代码效率,简化并发编程。
• AT命令行接口:提供简洁的命令行接口,方便调试和交互。
• 安全可靠:遵循MISRA C 2012和CERT编码标准,并进行多项静态分析检查,确保代码安全可靠。
二、优先级协作式调度
优先级协作式调度是一种任务调度策略,其中任务自行管理其生命周期,并在程序员指定的点进行任务切换。这种调度方式避免了抢占式调度中常见的复杂性,如资源竞争、死锁和优先级反转等问题。
在优先级协作式调度中,每个任务都有一个优先级,但任务不会因外部事件或时间片到期而被强制中断。
相反,任务会在完成其当前操作或到达程序员指定的切换点时主动放弃CPU,并将控制权交给其他任务。这种方式使得任务间的切换更加可控和可预测。
特点:
• 减少重入问题:由于任务不会被其他任务随意中断,只在程序员允许的位置进行切换,因此降低了并发编程中常见的重入问题。
• 简化资源共享:任务间的资源竞争问题更容易管理,因为任务切换是可控的。
• 避免死锁:协作式调度避免了抢占式调度中常见的死锁问题,因为任务间的切换是确定的。
其它常见任务调度策略还有:
抢占式调度
抢占式调度是一种任务调度策略,其中任务可以因外部事件(如中断)或时间片到期而被强制中断,并由更高优先级的任务接管CPU。
特点:
• 响应速度快:高优先级任务可以立即抢占CPU,从而确保系统对紧急事件的快速响应。
• 资源竞争:由于任务可以被抢占,因此需要额外的同步机制来管理资源竞争。
• 复杂性高:抢占式调度增加了系统的复杂性,因为需要考虑任务切换的上下文保存和恢复、优先级反转等问题。
时间片调度
时间片调度是一种特殊的抢占式调度策略,其中每个任务被分配一个固定长度的时间片。当任务运行完其时间片后,无论其是否完成,都会被强制中断,并将控制权交给下一个就绪的任务。
特点:
• 公平性:通过为每个任务分配时间片,可以确保所有任务都有机会获得CPU资源。
• 上下文切换开销:由于任务频繁切换,因此需要额外的上下文保存和恢复开销。
• 适合多任务环境:时间片调度特别适用于需要同时处理多个任务的多用户系统。
对比
优先级协作式调度 | 抢占式调度 | 时间片调度 | |
任务切换 | 程序员控制 | 外部事件或时间片到期 | 时间片到期 |
重入问题 | 减少 | 增加 | 增加 |
资源共享 | 简化 | 复杂 | 复杂 |
死锁 | 避免 | 可能发生 | 可能发生 |
响应速度 | 中等(取决于程序员的设计) | 快 | 快(但受限于时间片长度) |
系统复杂性 | 低 | 高 | 中等(需要管理时间片和上下文切换) |
公平性 | 不确定(取决于程序员的设计) | 不确定(取决于优先级分配) | 高 |
优先级协作式调度、抢占式调度和时间片调度各有优缺点。
优先级协作式调度适用于需要简化资源共享和避免死锁的系统,但响应速度可能不如抢占式调度快。
抢占式调度适用于需要快速响应紧急事件的系统,但增加了系统的复杂性和资源竞争问题。
时间片调度则提供了一种公平的CPU资源分配方式,适用于多任务环境,但会引入额外的上下文切换开销。
三、QuarkTS应用场景
QuarkTS 的设计目标在于利用小巧、简单而又最重要的稳健实现实现其声明功能,使其适合资源受限的微控制器,在此全抢先实时操作系统显得过度,且加入它们会为固件开发添加不必要的复杂度。
此外,借助状态机支持、协程、时间控制以及进程间通信原语,QuarkTS 提供了现代化环境,用于构建稳定、可预测的事件驱动型多任务嵌入式软件。