gpt4 book ai didi

linux - 内核在内核空间中时所处的上下文

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:07 25 4
gpt4 key购买 nike

以下摘录自 Robert Love 的 Linux 内核开发 (LKD)。

These contexts represent the breadth of the kernel’s activities. In fact, in Linux, we can generalize that each processor is doing exactly one of three things at any given moment:

  1. In user-space, executing user code in a process
  2. In kernel-space, in process context, executing on behalf of a specific process
  3. In kernel-space, in interrupt context, not associated with a process, handling an interrupt

This list is inclusive. Even corner cases fit into one of these three activities: For exam- ple, when idle, it turns out that the kernel is executing an idle process in process context in the kernel.

我从上面了解到的是,在内核空间中,只有两个上下文(根据 Love 的说法,它是包容性的),即进程上下文和中断上下文。据我了解,内核在进程调用系统调用(例如,read()、write() 等)时进入进程上下文,而中断上下文在内核处理中断时发生。

但是内核中还有更多其他功能,例如,有内核线程被调度来执行常规工作(例如,回收内存),甚至调度程序本身既不被系统调用也不被中断调用。

所以我想知道为什么文本中说内核中只有两个上下文......?

最佳答案

上下文中最重要的部分是地址空间(或虚拟内存)和 cpu 状态(如寄存器值、程序计数器等)。从这个角度来看,应该还有另外两种上下文:内核上下文和内核线程上下文。

内核本身运行在内核空间,不依赖于任务(包括普通进程和内核线程)。它的上下文称为空闲上下文或交换器上下文。

内核线程也不依赖于任何正常的进程上下文。它们像普通任务一样被调度,具有不同的 cpu 状态,但共享相同的地址空间。实际上,所有任务共享相同的内核空间部分,与空闲上下文的内核部分相同。这就是为什么在将正常进程切换到内核线程或内核线程之间时无需更改地址空间(或 mm)的原因。

事实上,中断上下文与内核上下文和内核线程上下文是完全相同的类型:它们不依赖于任何正常的进程上下文。中断是完全异步的,因此在它的上下文中没有中断任务上下文的假设。我认为这就是为什么 Robert Love 说只有两种上下文:流程上下文和其他。

关于linux - 内核在内核空间中时所处的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54274264/

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