软件定时器回调上下文

Context of software timer callback

考虑到 OS,通常定时器是在内核启动之前创建的。定时器启动是在内核启动后在某个线程中完成的。那么定时器回调是在哪个线程的上下文中执行的呢? (它是在线程启动的上下文中还是在内核的上下文中?

我不理解,也不一定同意前两句话。计时器回调的上下文通常不是请求回调的线程的上下文。它可能在维护定时器树或队列 objects/structs 的专用定时器线程的上下文中,或者在某个线程池线程的上下文中,无论哪种方式,从用户 space 请求的回调将发生在用户 space.

由于线程设计的限制(例如,必须以快速方式为输入队列提供服务的设计),可以安排可以在请求它们的线程上调用 timner 回调。

一般来说,定时器最终都是由硬件中断触发的。硬件中断通常 运行 主要发生在它发生中断的任何上下文中,通常只是将 CPU 切换到内核模式并切换到内核堆栈。如果我们谈论的是在某些特定上下文中必须 运行 的更高级别的计时器,则中断处理程序将直接或间接地安排处理程序在正确的上下文中 运行。例如,它可能会将线程的状态更改为就绪 运行 并调用调度程序。