【问题标题】:OS Scheduler Interval Timer - Where does it run? How to interact with it?OS Scheduler Interval Timer - 它在哪里运行?如何与之互动?
【发布时间】:2021-12-24 02:35:35
【问题描述】:

由于它与操作系统的进程调度有关:我了解调度程序需要一个类似“时钟”的设备,称为间隔计时器,以跟踪每个进程使用的时间量以及何时切换到准备过程。

我的问题是 - 间隔计时器在哪里运行?它似乎需要不断地运行,与任何进程并行,以便它可以始终跟踪时间,包括正在运行的进程使用的时间量。但是众所周知,任何时候在 CPU 上只能运行一件事,如果进程正在运行,则意味着间隔计时器无法运行。那么,间隔定时器是用硬件实现的,而不是软件实现的吗?如果是这样,如果我正在构建自定义操作系统和调度程序,我将如何在自定义调度程序代码中访问它并与之通信?

【问题讨论】:

  • 它是一个产生中断的硬件定时器,就像所有其他可以产生中断并导致重新调度的外围设备一样,例如磁盘、kb、鼠标、网络硬件。谷歌“中断”。
  • '我知道调度程序需要一个类似“时钟”的设备,称为间隔计时器',不是绝对的。很可能实现一个仅在 I/O 完成中断上运行的系统。计时器对于超时系统调用、睡眠间隔等非常有用,因此它已被普遍实现。当就绪线程多于内核时,它还具有共享 CPU 资源的副作用。
  • @MartinJames 这个硬件定时器是主板上与 CPU 分开的芯片吗,比如 Intel 8253/8254?还是现在它是在 CPU 内部实现的?
  • @doofus 目前在 CPU 内部。
  • 大多数 MCU 都有多个片上定时器。 ARM Cortex-M 设备有一个 SYSTICK 定时器,专门用于内核中的 RTOS 调度,而不是作为外设 - 使 MCU 定时器可用于其他目的,例如 PWM 生成、事件定时/计数或以比 RTOS 时钟更高的分辨率进行定时可能支持或需要。

标签: process operating-system scheduler freertos rtos


【解决方案1】:

您所说的“间隔计时器”是一个硬件计时器。它以固定的周期产生一个中断。当“RTOS 滴答”中断发生时,滴答处理程序(通常):

  • 增加滴答计数器,
  • 更新所有正在运行的软件计时器
  • 如果任务延迟或软件计时器到期,任何被阻止的任务都将变为就绪
  • 调度程序运行,最高优先级的就绪任务运行。

请注意,这不是调度程序运行的唯一时间。例如,只要任务在延迟、计时器、信号量、互斥锁、事件标志或邮箱等上显式挂起,就会发生调度。任何导致正在运行的任务阻塞/wait 的 RTOS 调用都会导致调度程序运行。

如果是这样,如果我正在构建自定义操作系统和调度程序,我将如何在自定义调度程序代码中访问它并与之通信?

您只需配置硬件计时器以生成滴答中断并按照上述方式进行操作。您可以查看现有的开源 RTOS 以了解它是如何完成的。尽管您标记的 FreeRTOS 并不完全是传统的,但 uC/OS-II 可能是一个更好的起点 - 它故意简单,最初是为了教授 RTOS 设计和实现而实施的。描述内核的相关书籍以 PDF 格式免费提供,地址为https://weston-embedded.com/micrium-books

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-21
    • 2011-02-16
    • 1970-01-01
    • 2017-03-04
    • 2011-04-06
    • 2011-07-17
    • 2014-03-23
    • 2016-04-10
    相关资源
    最近更新 更多