用户和内核线程

时间:2011-12-01 07:02:07

标签: multithreading

我一直在努力更好地理解用户级别和内核级别线程,但我觉得我完全迷失了。我提出几个问题来澄清我的怀疑。

我在某处读到了可以通过以下方式支持线程。

  1. 在用户级完全管理。内核不知道它。当一个线程被阻塞时,即使有可运行的线程,它们也没有机会运行

  2. 内核线程:由内核调度;在内核的视图中,它只是一个过程,而是一个轻量级的过程。每个这样的线程都是可调度的实体。在这种情况下,用户级库是否需要任何支持?用户空间是否有任何调度?任何系统都使用这种线程模型吗?

  3. 内核线程之上的用户线程:这里内核知道用户空间中运行的线程。因此,用户级线程可以进行阻塞调用,而内核可以运行来自同一进程的其他线程。那么在这种情况下,我们有两个不同的调度程序 - 一个在内核级别,一个在用户级别?如果是这样,用户级调度程序的目的是什么?另外,我读到,如果一个用户级线程阻塞,那么运行用户线程的内核线程也会被阻塞;如果该内核线程是处理器上运行的唯一线程,那么处理器就变得无法使用。如果用户级线程被阻止,为什么内核不能选择另一个用户级线程并使用相同的内核线程运行它?他们说解决方案是,在它们之间有多个内核线程和上下文切换。在这种情况下,如果所有内核线程都被阻塞(因为相应的用户级线程阻塞),那么系统中将不会运行任何内核线程。而不是这样,为什么我们不能改变关联,即改变在给定内核线程上运行的用户级线程?在这种情况下,我们可以避免创建多个内核线程吗?


  4. 我知道其中一些问题可能没有意义。但是我读了很多材料并且很困惑。请澄清。如果您能够推荐任何有关用户/内核线程基础知识和不同调度策略的优秀在线资料/研究论文/教科书,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

2.不,如果线程由内核管理,它们由内核管理,而不是任何用户级代码。 Windows就是这种操作系统的一个例子 3.您不必拥有2个不同的调度程序来安排内核和用户线程。你可以,但没有必要。如果内核或用户线程阻塞,则CPU不一定变得不可用。如果还有其他线程要运行,CPU可以选择它们。当然,除非是多处理器系统,否则其他线程与其他CPU绑定/关联。将用户线程与不同的内核线程相关联通常很复杂。通常,内核线程之上的内核和用户线程之间的区别很小。在内核看来,它们大多是同一类东西。

我不知道你在哪里读过这些,那是什么操作系统,但这种设计对我来说似乎是非常严格和低效的。