加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

一个基于优先级协作式调度的嵌入式操作系统

12/02 15:29
552
阅读需 6 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

一、QuarkTS简介

github链接:https://github.com/kmilo17pet/QuarkTS

开源协议:MIT license

QuarkTS是一款开源的嵌入式操作系统,旨在为小型嵌入式应用程序提供现代化的开发环境,帮助开发者构建稳定、可预测的事件驱动型多任务软件。其特点包括:

• 优先级协作式调度:任务自行管理生命周期,避免了抢占带来的复杂性,减少了重入问题。

• 时间控制:提供定时任务和软件定时器,方便实现时间相关的操作。

• 任务间通信机制:提供队列、通知、事件标志等机制,实现不同任务之间的有效通信。

• 状态机支持:提供分层状态机支持,简化复杂逻辑的实现。

• 协程:支持协程,提升代码效率,简化并发编程。

• AT命令行接口:提供简洁的命令行接口,方便调试和交互。

• 安全可靠:遵循MISRA C 2012和CERT编码标准,并进行多项静态分析检查,确保代码安全可靠。

二、优先级协作式调度

优先级协作式调度是一种任务调度策略,其中任务自行管理其生命周期,并在程序员指定的点进行任务切换。这种调度方式避免了抢占式调度中常见的复杂性,如资源竞争、死锁和优先级反转等问题。

在优先级协作式调度中,每个任务都有一个优先级,但任务不会因外部事件或时间片到期而被强制中断。

相反,任务会在完成其当前操作或到达程序员指定的切换点时主动放弃CPU,并将控制权交给其他任务。这种方式使得任务间的切换更加可控和可预测。

特点

• 减少重入问题:由于任务不会被其他任务随意中断,只在程序员允许的位置进行切换,因此降低了并发编程中常见的重入问题。

• 简化资源共享:任务间的资源竞争问题更容易管理,因为任务切换是可控的。

• 避免死锁:协作式调度避免了抢占式调度中常见的死锁问题,因为任务间的切换是确定的。

其它常见任务调度策略还有:

抢占式调度

抢占式调度是一种任务调度策略,其中任务可以因外部事件(如中断)或时间片到期而被强制中断,并由更高优先级的任务接管CPU。

特点

• 响应速度快:高优先级任务可以立即抢占CPU,从而确保系统对紧急事件的快速响应。

• 资源竞争:由于任务可以被抢占,因此需要额外的同步机制来管理资源竞争。

• 复杂性高:抢占式调度增加了系统的复杂性,因为需要考虑任务切换的上下文保存和恢复、优先级反转等问题。

时间片调度

时间片调度是一种特殊的抢占式调度策略,其中每个任务被分配一个固定长度的时间片。当任务运行完其时间片后,无论其是否完成,都会被强制中断,并将控制权交给下一个就绪的任务。

特点

• 公平性:通过为每个任务分配时间片,可以确保所有任务都有机会获得CPU资源。

• 上下文切换开销:由于任务频繁切换,因此需要额外的上下文保存和恢复开销。

• 适合多任务环境:时间片调度特别适用于需要同时处理多个任务的多用户系统。

对比

优先级协作式调度 抢占式调度 时间片调度
任务切换 程序员控制 外部事件或时间片到期 时间片到期
重入问题 减少 增加 增加
资源共享 简化 复杂 复杂
死锁 避免 可能发生 可能发生
响应速度 中等(取决于程序员的设计) 快(但受限于时间片长度)
系统复杂性 中等(需要管理时间片和上下文切换)
公平性 不确定(取决于程序员的设计) 不确定(取决于优先级分配)

优先级协作式调度、抢占式调度和时间片调度各有优缺点。

优先级协作式调度适用于需要简化资源共享和避免死锁的系统,但响应速度可能不如抢占式调度快。

抢占式调度适用于需要快速响应紧急事件的系统,但增加了系统的复杂性和资源竞争问题。

时间片调度则提供了一种公平的CPU资源分配方式,适用于多任务环境,但会引入额外的上下文切换开销。

三、QuarkTS应用场景

QuarkTS 的设计目标在于利用小巧、简单而又最重要的稳健实现实现其声明功能,使其适合资源受限的微控制器,在此全抢先实时操作系统显得过度,且加入它们会为固件开发添加不必要的复杂度。

此外,借助状态机支持、协程、时间控制以及进程间通信原语,QuarkTS 提供了现代化环境,用于构建稳定、可预测的事件驱动型多任务嵌入式软件

它们的模块化和可靠性使这款操作系统成为低功耗设备上一系列应用高效开发的理想选择,包括汽车控制系统、监控及物联网领域。

相关推荐

电子产业图谱

本公众号专注于嵌入式技术,包括但不限于C/C++、嵌入式、物联网、Linux等编程学习笔记,同时,公众号内包含大量的学习资源。欢迎关注,一同交流学习,共同进步!