在__scheduler()函数中浏览linux内核代码时,我看到了hrtick_clear(rq)。 任何人都可以解释这是什么以及为什么使用它? 它似乎与计时器有关,但无法继续进行。
答案 0 :(得分:4)
经典OS设计涉及系统计时器 - 以固定间隔打勾的实体。在每个tick期间,调用调度程序并且应该切换进程/线程。但系统定时器频率相当低(即1000 HZ,这意味着在1 ms内一次),如果进程只剩下其时间片的100us,则会获得额外的时间(在某些情况下),而其他进程则处于饥饿状态。
但是,现代CPU在英特尔上提供了更精确的硬件计时器,如HPET,由hrtimers子系统提供。可以通过CONFIG_SCHED_HRTICK
选项启用它们以在调度程序中使用。
但是如果你已经调用__schedule()
(即在系统调用的路径上),你不需要从 hrtimer 第二次调用它,因为你已经安排了,所以在这之前,hrtick_clear
禁用 hrtimer 。