实时操作系统 如何确定自己在deadline内完成任务?

淹死的大白鲨 2019-10-05 02:22:04

众所周知,RTOS与其他OS的区别在于:
任务的(最迟)完成时间(Deadline)是可确定预知的。


但是一直不清楚这个机制是怎么实现的。
希望拥有大神解答一下。
...全文
163 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
u012441962 2019-11-15
  • 打赏
  • 举报
回复
我阅读过rtthread的源码,rt的话每个线程会记录一个tick这个tick的单位是 1个系统的心跳,一般这个心跳就是一个硬件定时器中断(一般设置为10ms),每次触发中断会+1并启动调度器。调度器会判断线程是否到达了你设置的最大时间,如果到达了超时时间,调度器会寻找优先级较高且已经是准备态的线程,并运行它。
wfy1008 2019-10-07
  • 打赏
  • 举报
回复
我觉得你说的不准确,不能说任务的完成时间,只能说任务的切换时间是可确定的。在多任务环境下,任务启动后,一般是只有阻塞和运行的区分,完成了岂不是任务退出了。多任务环境下,硬实时操作系统可以确保最高优先级的任务在预期时间内得到CPU控制权,但如果软件本身设计不合理,那么是不可能正常执行的。 举个例子: 时间片为10ms,只用了2个优先级,高、低优先级各有5个任务,高优先级可以抢占低优先级,同等优先级之间轮转。如果每个高优先级任务没有交出CPU的时间(比如调用个sleep或阻塞等待信号量之类的函数),那么这5个高优先级将会每个使用10ms轮流运行一次,然后再运行第二次,……,低优先级永远得不到机会运行。在这个例子里没有完成的概念,只有切换时机是确定的。 一般要的可确定是指,比如硬件中断发生时,从任何一个任务或低优先级中断切到高优先级中断的时间是可确定的,这样就能保证实时响应,所以系统设计是关键!
淹死的大白鲨 2019-10-07
  • 打赏
  • 举报
回复
引用 1 楼 wfy1008 的回复:
我觉得你说的不准确,不能说任务的完成时间,只能说任务的切换时间是可确定的。在多任务环境下,任务启动后,一般是只有阻塞和运行的区分,完成了岂不是任务退出了。多任务环境下,硬实时操作系统可以确保最高优先级的任务在预期时间内得到CPU控制权,但如果软件本身设计不合理,那么是不可能正常执行的。 举个例子: 时间片为10ms,只用了2个优先级,高、低优先级各有5个任务,高优先级可以抢占低优先级,同等优先级之间轮转。如果每个高优先级任务没有交出CPU的时间(比如调用个sleep或阻塞等待信号量之类的函数),那么这5个高优先级将会每个使用10ms轮流运行一次,然后再运行第二次,……,低优先级永远得不到机会运行。在这个例子里没有完成的概念,只有切换时机是确定的。 一般要的可确定是指,比如硬件中断发生时,从任何一个任务或低优先级中断切到高优先级中断的时间是可确定的,这样就能保证实时响应,所以系统设计是关键!
哇,谢谢,有了一些理解了😀😀😀

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧