我已经读过linux内核是多线程的,并且每个内核可以同时运行多个线程。在SMP(对称多处理)环境中,单个OS管理所有处理器/核心,如何实现多线程?
是否产生了内核线程,每个线程专用于管理核心。如果是这样,这些内核线程何时创建?它是在引导完成之后在kern_init()启动期间以及在引导处理器启用应用程序处理器之后立即执行的。
每个核心都有自己的调度程序(由核心内核线程实现),它管理来自所有内核线程共享的公共池的任务吗?
如果需要关注另一个内核线程可能感兴趣的某些事件,那么驻留在不同内核上的内核线程之间的(直接)消息传递是如何发生的?
我还想过,如果一个具有一个内核调度程序的特定选定内核在每个系统定时器中断上获得大内核锁定并决定/安排在每个内核上运行什么?
所以我很欣赏实施细节中的任何清晰度。在此先感谢您的帮助。
答案 0 :(得分:1)
在内核启动早期,为每个核心启动一个线程。它被设置为可能的最低优先级,通常只会降低CPU功率并等待中断。当实际工作需要完成时,它要么由这些线程以外的线程完成,要么由中断此线程或其他线程的硬件中断完成。
调度程序通常由定时器中断或线程从运行转换到不再准备运行的状态调用。将线程转换为不再准备运行的状态的内核调用通常会调用调度程序让内核执行其他任务。