2015-11-04 89 views
0

我已阅读,Linux内核是多线程的,并且可以存在于每个内核同时运行多个线程。在单个OS管理所有处理器/内核的SMP(对称多处理)环境中,多线程如何实现?多线程内核如何工作?

内核线程是否会产生,每个线程都专门用于管理内核。如果是的话,这些内核线程何时创建?引导程序完成后,在引导程序处理器启用应用程序处理器后立即在kern_init()中引导。

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

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

我还想过,如果一个特定的核心与一个内核调度程序,在每个系统计时器中断获取一个大内核锁定并决定/安排在每个核心上运行什么?

所以我希望在实施细节的任何清晰度。在此先感谢您的帮助。

+1

据我可以告诉有什么特别的内核线程除了使用提升的权限运行。他们使用与所有其他线程相同的调度程序和内核,并且适用于锁定和消息传递的相同规则。 – nwp

+1

你的问题似乎是基于对线程和内核之间关系的误解。线程可以从核心移动到核心。 –

+0

@DavidSchwartz:你说的内核是不同的可用的执行单元(核)(期间每一个系统定时器中断),有一个调度调度线程一个进程? – Shyam

回答

1

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

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