gpt4 book ai didi

c - 为什么操作系统需要/维护内核线程?

转载 作者:太空狗 更新时间:2023-10-29 16:12:12 25 4
gpt4 key购买 nike

以下是我遇到的三种线程模型。基于以下 3 种体系结构,我很新地了解到,除了作为 POSIX.1C 的一部分引入的用户线程之外,还存在称为内核线程的东西

这是 1-1 模型

enter image description here

这是 N-1 模型。

enter image description here

这是混合模型。

enter image description here

我已经为内核线程解决了很多关于 SO 的问题。这看起来更相关link澄清。

在进程级别,对于每个由 Linux 加载程序加载的用户进程(比如),内核不会分配相应的内核进程来执行用户进程提出的机器指令。当用户进程需要来自内核模块的设施[如 malloc()/fork()] 时,它只请求内核模式执行。用户进程的调度由操作系统调度器完成,并分配一个CPU核心。

例如,用户进程不需要内核执行模式来执行一条指令

a=a+2;//a是我在用户级C函数中的局部变量

我的问题:

1)那么,内核级线程的目的是什么?为什么操作系统需要为用户级进程的相应用户线程维护一个内核线程(另外)?用户模式程序员是否可以通过编程控制为给定用户进程选择上述三种线程模型中的任何一种?

在我理解第一个问题的答案后,一个相关的补充是,

2) 内核线程实际上是由操作系统调度程序而非用户线程调度的吗?

最佳答案

我认为在这些数字中使用内核线程 这个词有点误导。我从一本关于操作系统(设计)的书中知道这些数字,如果我没记错的话,它们指的是操作系统如何安排工作的方式。在图中,每个进程至少分配了一个由内核调度的内核线程

N-1 模型 显示了内核根本不知道的多个用户态线程,因为后者调度进程(或者图中的调用方式,单个 仅内核线程)。所以对于内核来说,每个进程都是一个内核线程。当进程被分配处理器时间片时,它会自行决定运行多个线程。

1-1 模型 中,内核了解用户态线程,并且每个线程都被调度程序视为处理器时间分配。因此,内核不会调度整个进程,而是在进程内部的线程之间切换。

混合模型结合了这两个原则,其中轻量级进程实际上是内核已知的线程,并由内核安排执行。此外,它们实现内核不知道的线程,并在用户空间分配处理器时间。

现在完全混淆了,实际上有一个真正的kernel thread在 Linux 中。但据我了解这个概念,这些线程仅用于内核空间操作,例如当内核模块需要并行执行任务时。

关于c - 为什么操作系统需要/维护内核线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26324668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com