0

我目前正在学习操作系统,我很难理解有关Implementing Multi-Threaded Processes.

具体来说,教科书解释说,我们可以通过名为Per-Processor Kernel Threads. 该系统的详细说明如下:

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

但是,接下来也提到了这个系统有一些缺点,类似于绿线。下面提到的一些缺点

  • 任何时候用户级线程调用内核,它的宿主内核线程都会阻塞。这可以防止线程库同时在该处理器上运行不同的用户级线程。

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

我不能完全理解他们两个。这是我的问题。

  1. 如果一个用户级线程调用内核,为什么宿主内核线程会阻塞在这个系统中?
  2. 是什么kernel time-slices a kernel thread意思?
  3. 如果内核对内核线程进行时间切片,为什么用户级线程运行被挂起?

谢谢。

4

1 回答 1

-1

您所描述的有时在教科书中被称为多对多模型,并增加了内核线程数量受限于处理器数量的限制。

我不知道任何以这种方式实现线程的操作系统。(如果有人知道一些以这种方式进行线程处理的非学术操作系统,请赐教。)这样的系统实施起来会非常复杂。

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

这句话简直是可笑:

因为线程调度决策发生在用户级别,它们可以是灵活的和特定于应用程序的。

a)您仍然将在下面拥有[隐式]不灵活的内核线程。

b) 如果可以通过这种方式获得更好的用户线程性能,那么操作系统对内核线程的实现将是完全无能为力的。

这是总的BS:

任何时候用户级线程调用内核,它的宿主内核线程都会阻塞。这可以防止线程库同时在该处理器上运行不同的用户级线程。

a) 有非阻塞内核调用。

b) 在某些逆行操作系统中调用 I/O 系统服务会阻塞用户线程。这并非在所有操作系统中都是正确的。

对于您的具体问题:

如果一个用户级线程调用内核,为什么宿主内核线程会阻塞在这个系统中?

看上面。它只发生在一些设计不佳的操作系统中的一些系统调用上。

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

是的,英语很差。在线程调度中,可以给进程一个固定的时间量(“时间片”或“量子”),它可以在调度程序启动之前执行,以查看是否应该轮到另一个线程执行。如果您有一个线程在不进行 I/O 的情况下进行长时间计算,则此时间限制可防止该线程占用系统。

为什么这是这个线程模型的一个特定缺点,我无法理解。同样的事情发生在纯内核线程中。或纯用户线程。

可悲的是,你在这里看到的是一本书,它采用了简单的概念,却把它们变得过于复杂。你有我的同情。

于 2017-04-02T04:01:45.960 回答