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

时间:2013-09-03 22:43:56

标签: multithreading process linux-kernel

我最近了解到Linux内核线程run in process context

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

为什么他们不是简单地在传统的“线程”中运行? (如果这甚至有意义的话)

2 个答案:

答案 0 :(得分:9)

不问问:)(见here

进程上下文仅表示线程是普通线程,例如您在进程中获得的线程。 中断上下文仅表示线程是由中断启动的。

警告:以下内容非常简化,并不完全准确:

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

在现代CPU中,中断和线程非常复杂,它们具有优先级,权限级别,可以单独屏蔽等等。

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

传统上,Unix和扩展Linux不支持仅线程进程。

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

答案 1 :(得分:2)

内核线程可以被称为执行中的上下文,它不具有用户空间对应物(与Linux中用户空间进程映射到内核空间进程的其他线程/进程不同)。这些通常用作守护进程,例如。 kswapd - 用于驱逐虚拟内存页面的交换程序进程。这个过程没有用户空间。

其次,因为它们具有可以切换的与其自身相关联的明确上下文(比如寄存器的状态保存在其自己的堆栈上),所以内核线程是可调度的。而且,任何可调度的东西都可以被视为“过程上下文”。

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