c - 用户模式和内核模式下的线程

标签 c multithreading operating-system

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

最佳答案

what do we mean by thread running in User mode and running in kernel mode?



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

Is this related to thread execution instruction from User mode and thread executing instruction from Kernel mode? Kindly elaborate.



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

Also, is it possible that if a thread is executing in user mode is put to suspended state, then it may start executing in kernel mode? if yes, how is it possible?



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

Until now I am only aware that a thread if suspended will be SUSPENDED completely, i.e. the context switch will take place by CPU to schedule another thread.



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

关于c - 用户模式和内核模式下的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17515676/

相关文章:

c - Delphi 是否有任何等效于 C 的 volatile 变量?

C++ - 32 位保护模式

c - C 中的二维数组内存映射

C 64 位指针对齐

c - 将语句字母切换为整数

c - OpenCL 内核无法编译

multithreading - 产生线程并获得 future 结果的最佳方法是什么?

c - 如何在程序中将缓冲区字符串更改为大写?

c - 在 Linux 中使用写入系统调用写入数据时出现问题

一个进程可以有多个标准输出和标准输入吗?