绿色线程的缺点:主机内核线程块

时间:2017-04-01 09:51:58

标签: linux-kernel operating-system kernel green-threads

我目前正在学习操作系统,我很难理解有关Implementing Multi-Threaded Processes的一些部分。

具体而言,教科书解释说我们可以通过名为Per-Processor Kernel Threads的系统实现用户级线程。有关该系统的详细说明如下:

  

当应用程序启动时,用户级线程库为主机上的每个处理器创建一个内核线程。只要系统上没有其他活动,内核就会为每个线程分配一个处理器。每个内核线程并行执行用户级调度程序:从用户级就绪列表中拉出下一个线程,然后运行它。由于线程调度决策发生在用户级别,因此它们可以灵活且特定于应用程序。

然而,接下来,它还提到这个系统有一些缺点,类似于绿色线程。提到的一些缺点是

  
      
  • 每当用户级线程调用内核时,其主机内核线程就会阻塞。这可以防止线程库在此期间在该处理器上运行不同的用户级线程。

  •   
  • 每当内核对内核线程进行时间分片时,它所运行的用户级线程也会被挂起。在内核线程恢复之前,Thi库无法恢复该线程。

  •   

我无法完全理解他们两个。 这是我的问题。

  1. 如果用户级线程调用内核,为什么要在此系统中托管内核线程块?
  2. kernel time-slices a kernel thread是什么意思?
  3. 如果内核时间片内核线程,为什么用户级线程运行被挂起?
  4. 感谢。

1 个答案:

答案 0 :(得分:-1)

您所描述的内容有时被称为教科书中的多对多模型,其中包含内核线程数量限制为处理器数量的附加约束。

我不知道任何以这种方式实现线程的操作系统。 (如果有人知道某些非学术性的操作系统会以这种方式进行线程化,请赐教。)这样的系统实现起来会有些荒谬。

用户线程没有任何真正的优势。可悲的是,大多数操作系统教科书最好使用猫箱衬里。许多人坚持描述在现实世界中根本不存在的用户线程的理论(但不切实际)的优点。所描述的是在内核线程之上运行用户线程。

这句话很可笑:

  

由于线程调度决策是在用户级别进行的,因此它们可以灵活且特定于应用程序。

a)你仍然会在下面拥有[隐含]不灵活的内核线程。

b)如果以这种方式通过用户线程获得更好的性能,操作系统的内核线程实现必须完全无效。

这是总BS:

  

每当用户级线程调用内核时,其主机内核线程就会阻塞。这可以防止线程库在此期间在该处理器上运行不同的用户级线程。

a)存在非阻塞内核调用。

b)在一些逆行操作系统中调用I / O系统服务会阻塞用户线程。在所有操作系统中都不是这样。

针对您的具体问题:

  

如果用户级线程调用内核,为什么要在此系统中托管内核线程块?

见上文。它只发生在一些设计不良的操作系统中的某些系统调用中。

  

内核时间片内核线程是什么意思?

是的,那英语很差。在线程调度中,可以给定一个过程固定的时间量("时间片"或者#34;量子"),它可以在调度程序启动之前执行,以查看是否应该有另一个线程轮流执行。如果你有一个没有进行I / O的长计算的线程,这个时间限制可以防止该线程占用系统。

为什么这个线程模型的特定缺点超出了我的范围。纯内核线程中也会发生同样的事情。或纯粹的用户线程。

可悲的是,你在这里有一本书,它采用简单的概念并使它们变得过于复杂。你有我的同情心。