4

线程在用户模式下运行并在内核模式下运行是什么意思?这与用户模式的线程执行指令和内核模式的线程执行指令有关吗?请详细说明。另外,如果在用户模式下执行的线程被置于挂起状态,那么它是否可能开始在内核模式下执行?如果是,怎么可能?到目前为止,我只知道一个线程如果挂起将被完全挂起,即上下文切换将由 CPU 进行以调度另一个线程。

4

2 回答 2

2

线程在用户模式下运行并在内核模式下运行是什么意思?

没有上下文就无法知道一个人所说的短语是什么意思。如果我不得不猜测,我会说他们正在谈论线程是由用户空间调度程序还是内核调度程序调度的。但也有可能他们实际上是在询问线程是在运行用户代码还是内核代码。

这与用户模式的线程执行指令和内核模式的线程执行指令有关吗?请详细说明。

它可能是。也可能不是。没有上下文就无法知道一个人所说的短语是什么意思。

另外,如果在用户模式下执行的线程被置于挂起状态,那么它是否可能开始在内核模式下执行?如果是,怎么可能?

对于内核调度线程的实现,调度程序在内核空间中运行。实际挂起线程的代码通常也在内核空间中运行,因为它必须将线程添加到各种内核调度程序数据结构中。所以恢复线程的线程也将在内核空间中运行。在更高级别的视图中,同一个执行线程可以“成为”内核调度程序,选择一个用户空间线程来执行,然后“成为”那个线程。

到目前为止,我只知道一个线程如果挂起将被完全挂起,即上下文切换将由 CPU 进行以调度另一个线程。

对,这就是内核代码。所以同一个内核运行用户空间代码,然后它运行内核代码,然后它运行另一个线程的用户空间代码。

于 2013-07-07T20:57:56.920 回答
0

现代操作系统具有将用户代码与内核代码分离的硬件支持。在 x86 架构上,您可以设置普通用户代码无法访问的内存页面,并将触发页面错误,以便操作系统可以在错误程序中幸存下来。

在内核模式下运行的代码具有更高的权限,但也有更多的责任,因为并非所有内容都像从用户空间一样容易访问。如果用户代码卡住了,那么操作系统可以清理它。如果内核模式代码挂起,它可能不会那么容易,这取决于特权级别有多高。

于 2013-07-07T19:53:36.220 回答