ove*_*nge 5 c multithreading kernel linux-kernel
以下是我遇到的三种线程模型。基于以下 3 种架构,我对新的理解是,除了作为 POSIX.1C 的一部分引入的用户线程之外,还存在称为内核线程的东西
这是1-1模型

这是N-1模型。

这是混合模型。

我已经解决了许多关于内核线程的问题。这看起来是更相关的链接以供澄清。
在进程级别,对于Linux加载器加载的每个用户进程(例如),内核不会分配相应的内核进程来执行用户进程提出的机器指令。用户进程仅在需要内核模块的功能时才请求内核模式执行[如 malloc()/fork()]。用户进程的调度由操作系统调度程序完成并分配CPU核心。
例如,用户进程不需要内核执行模式来执行指令
a=a+2;//a is my local variable in a user level C function
我的问题:
1)那么,内核级线程的目的是什么?为什么操作系统需要为用户级进程的相应用户线程(另外)维护一个内核线程?用户模式程序员是否可以通过编程控制为给定用户进程选择上述三种线程模型中的任何一种?
在我理解第一个问题的答案后,一个相关的补充是,
2)内核线程实际上是由操作系统调度程序而不是用户线程调度的吗?
我认为在这些图中使用“内核线程”这个词有点误导。我从一本关于操作系统(设计)的书中知道了这些数字,如果我没记错的话,它们指的是操作系统如何安排工作的方式。在图中,每个进程至少分配有一个由内核调度的内核线程。
N -1 模型显示了多个用户态线程,这些线程根本不为内核所知,因为后者仅调度进程(或图中的调用方式,单个内核线程)。所以对于内核来说,每个进程就是一个内核线程。当进程被分配一段处理器时间时,它本身会通过自行调度来运行多个线程。
在1-1 模型中,内核知道用户态线程,并且调度程序会考虑每个线程进行处理器时间分配。因此,内核不是调度整个进程,而是在进程内的线程之间切换。
混合模型结合了这两种原则,其中轻量级进程实际上是内核已知的线程,并且由内核调度执行。此外,它们还实现内核不知道的线程,并在用户态分配处理器时间。
现在完全困惑了,Linux 中实际上有一个真正的内核线程。但据我了解这个概念,这些线程仅用于内核空间操作,例如当内核模块需要并行执行操作时。
| 归档时间: |
|
| 查看次数: |
1994 次 |
| 最近记录: |