【发布时间】: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