【问题标题】:How to implement a scheduler in a tiny RTOS which is capable of interrupting tasks when they go out of time如何在微型 RTOS 中实现调度程序,该调度程序能够在任务超时时中断任务
【发布时间】:2018-11-08 13:07:54
【问题描述】:

我正在阅读有关 RTOS 的内容,但有一个关于调度程序实现的概念,我不明白。

设计实时软件任务的一种方法是将执行划分为时隙。这意味着,如果一个任务T 开始执行但它不能在定义的时间段内完成它的工作,RTOS 必须保存T 的状态,中断它并重新排队以供以后执行。

假设任务的实现仅仅是 RTOS 调用的过程。我的问题是:

如何实现中断机制? 我的意思是,如果 RTOS 开始执行用户程序,它就无法检查任务是否超时,直到程序返回,必要时也不能中断,对吧?

据我了解,必须有一种机制,RTOS 可以通过该机制在每个用户任务指令的执行之间执行操作。我猜这是通过tick中断实现的,这是否意味着RTOS必须在tick中执行这种操作(重新调度、中断任务、保存它们的状态等)中断处理程序?

【问题讨论】:

  • 检查抢占式与协作式多任务处理。 (您最后一个问题的简短回答是“是”。)
  • 要了解 RTOS 概念,如上下文切换、分时、调度、高效阻塞、基于优先级的调度等,您可能想在 YouTube 上观看 RTOS 视频课程:youtube.com/…

标签: operating-system scheduled-tasks scheduler taskscheduler rtos


【解决方案1】:

任何抢占式调度程序,不仅仅是所谓的 RTOS,都有能力停止用户态代码的“正常”执行流。中断源不一定是“滴答”计时器,也可以是系统设计和配置为接受的任何其他外部源。从这个意义上说,外部意味着在 CPU 指令执行之外,无论您希望看到这种区别多么细粒度。在某些(大多数)现代操作系统中,甚至缓存/内存子系统也在“外部”,以便在页面丢失后从磁盘加载,例如

恕我直言,这个问题太宽泛了,应该移到更合适的 stackexchange 网站。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多