由于它与操作系统的进程调度有关:我理解调度程序需要一个"时钟";类似的设备,称为间隔计时器,用于跟踪每个进程所用的时间量以及何时切换到就绪进程。
我的问题是,间隔计时器在哪里运行?它似乎需要不断地运行,与任何进程并行,这样它才能始终跟踪时间,包括运行进程使用的时间量。但众所周知,在任何时候,CPU上只能运行一件事,如果进程正在运行,则意味着间隔计时器无法运行。因此,间隔计时器是用硬件而不是软件实现的吗?如果是这样的话,如果我正在构建一个自定义操作系统和调度程序,我将如何在自定义调度程序代码中访问它并与之通信?
;间隔定时器";正如您所说,它是一个硬件计时器。它在一个固定的周期内产生一个中断。当";RTOS勾号";发生中断时,tick处理程序(通常(:
- 递增刻度计数器
- 更新任何正在运行的软件定时器
- 如果任务延迟或软件计时器到期,则上被阻止的任何任务都将就绪
- 调度程序运行,最高优先级的就绪任务运行
请注意,这不是调度程序唯一一次运行。例如,每当任务在延迟、计时器、信号量、互斥、事件标志或邮箱上显式挂起时,就会发生调度。任何导致正在运行的任务阻塞/wait的RTOS调用都会导致调度程序运行。
如果是这样,如果我正在构建一个自定义操作系统和调度程序,我将如何在自定义调度程序代码中访问它并与它通信?
您只需配置硬件计时器以生成tick中断,然后如上所述进行。你可以看看现有的开源RTOS,看看它是如何做到的。尽管您标记的FreeRTOS并不完全是传统的。uC/OS-II可能是一个更好的起点——它非常简单,最初是为了教授RTOS的设计和实现而实现的。描述内核的相关书籍以PDF格式免费提供,网址为https://weston-embedded.com/micrium-books.