Multithreading 为什么内核线程在进程上下文中运行?

Multithreading 为什么内核线程在进程上下文中运行?,multithreading,process,linux-kernel,Multithreading,Process,Linux Kernel,我最近了解到Linux内核线程 为什么它们在流程上下文中运行 为什么它们不只是在传统的“线程”中运行?(如果问起来有意义的话)不,问起来没有意义:)(见) 进程上下文仅仅意味着线程是一个普通线程,比如进程中的线程。 中断上下文只是指线程是由中断启动的 警告:以下内容高度简化且不完全准确: 中断是一种低级事件,它会导致CPU停止正在执行的操作,并执行称为中断处理程序的特殊代码(对中断处理程序进行上下文更改)。中断是由硬件引起的,如网卡发出数据包已到达并需要读取的信号,或由软件事件引起的,如虚拟内存

我最近了解到Linux内核线程

为什么它们在流程上下文中运行


为什么它们不只是在传统的“线程”中运行?(如果问起来有意义的话)

不,问起来没有意义:)(见)

进程上下文仅仅意味着线程是一个普通线程,比如进程中的线程。 中断上下文只是指线程是由中断启动的

警告:以下内容高度简化且不完全准确:

中断是一种低级事件,它会导致CPU停止正在执行的操作,并执行称为中断处理程序的特殊代码(对中断处理程序进行上下文更改)。中断是由硬件引起的,如网卡发出数据包已到达并需要读取的信号,或由软件事件引起的,如虚拟内存使用中断请求内核从磁盘物理内存加载页面等

在现代CPU中,中断和线程相当复杂,它们具有优先级、特权级别,可以单独屏蔽,等等

为什么它被称为进程上下文而不是线程上下文?我想这是出于历史原因

传统上,Unix和Linux都不支持仅线程的进程


CPU并不真正了解进程和线程,从CPU的角度来看,它们都是执行上下文,线程和进程之间的区别在于操作系统如何安排虚拟内存和其他与操作系统相关的属性(用户上下文、权限等)不同的执行上下文。

内核线程可以被称为执行中不具有用户空间对应项的上下文(与Linux中用户空间进程映射到内核空间进程的其他线程/进程不同)。它们通常用作守护进程,例如kswapd—用于逐出虚拟内存页的交换进程。此进程不存在用户空间

其次,由于这些线程有一个与自身相关的可切换上下文(比如保存在自己堆栈上的寄存器状态),因此内核线程是可调度的。而且,任何可调度的内容都可以被视为“流程上下文”

另一方面,中断是不可调度的。它们发生并执行生成其自身上下文的中断处理程序