【发布时间】:2017-08-26 14:08:14
【问题描述】:
我目前正在学习操作系统,我对Implementing Multi-Threaded Processes的某些部分理解有困难。
具体来说,教科书解释说,我们可以通过Per-Processor Kernel Threads的系统来实现用户级线程。该系统的详细说明如下:
当应用程序启动时,用户级线程库为主机上的每个处理器创建一个内核线程。只要系统上没有其他活动,内核就会为这些线程中的每一个分配一个处理器。每个内核线程并行执行用户级调度程序:将下一个线程从用户级就绪列表中拉出,并运行它。由于线程调度决策发生在用户级别,因此它们可以灵活且特定于应用程序。
但是,接下来,它也提到了这个系统有一些缺点,类似于绿色线程。下面提到了一些缺点
任何时候用户级线程调用内核,它的宿主内核线程都会阻塞。这可以防止线程库同时在该处理器上运行不同的用户级线程。
每当内核对内核线程进行时间切片时,它正在运行的用户级线程也会暂停。在内核线程恢复之前,该库无法恢复该线程。
我不能完全理解他们两个。 这是我的问题。
- 如果用户级线程调用内核,为什么宿主内核线程会阻塞在这个系统中?
-
kernel time-slices a kernel thread是什么意思? - 如果内核对内核线程进行时间切片,为什么用户级线程运行被挂起?
谢谢。
【问题讨论】:
标签: linux-kernel operating-system kernel green-threads