1

我读过linux内核是多线程的,每个内核中可以有多个线程同时运行。在单个操作系统管理所有处理器/内核的 SMP(对称多处理)环境中,多线程是如何实现的?

是产生了内核线程,并且每个线程都专用于管理一个内核。如果是这样,这些内核线程是什么时候创建的?是在引导完成之后以及在引导处理器启用应用程序处理器之后立即在 kern_init() 引导期间。

那么每个内核是否都有自己的调度程序(由内核的内核线程实现)来管理所有内核线程共享的公共池中的任务?

当驻留在不同内核上的内核线程需要提示另一个内核线程可能感兴趣的某些事件时,它们之间的(直接)消息传递是如何发生的?

我还认为,如果一个特定的内核调度程序具有一个内核调度程序,在每个系统定时器中断上获取一个大内核锁并决定/调度在每个内核上运行什么?

因此,我将不胜感激实现细节的任何清晰度。在此先感谢您的帮助。

4

1 回答 1

2

在内核启动的早期,每个内核都会启动一个线程。它被设置为可能的最低优先级,通常只会降低 CPU 功率并等待中断。当实际工作需要完成时,它要么由这些线程以外的线程完成,要么由中断该线程或其他线程的硬件中断完成。

调度程序通常由定时器中断或线程从运行转换到不再准备运行的状态调用。将线程转换为不再准备好运行的状态的内核调用通常会调用调度程序以让内核执行一些其他任务。

于 2015-11-04T11:23:00.960 回答