模块函数执行中的上下文切换

Context switch in module's function execute

我读到,当您 运行 模块时,代码成为内核的一部分。但我认为当模块的功能仍在执行时,进程之间可以进行上下文切换。怎么会这样?我读到在内核中没有上下文切换。

当然 Linux 内核中有上下文切换。是 called kernel pre-emption。我不确定您在哪里读到内核中没有上下文切换,或者您为什么认为这是不可能的。

内核线程(大概是您的模块代码将在其上执行的位置)的调度方式与任何其他用户线程一样。

不过问题好像不对

But I figured that there can be context switch between processes while module's function is still executing.

什么?

假设我们有一个实现文件系统的模块。如果您通过 open 系统调用在此类文件系统上打开文件,代码将打开 -> 一些查找 -> 模块中的代码 。所有这一切都发生在 同一个线程 的上下文中。没有模块上下文的概念。可能是模块中的代码自己创建了一些内核线程,但这与它是一个模块的关系为零。

进程可以 运行 在任何给定时间点的这些上下文之一中:

  1. 用户模式
  2. 内核模式
  3. 中断模式

上下文切换在所有情况下都会发生。在中断模式下,程序员有责任在执行中断的上半部分时禁用 CPU 上的上下文切换。我不知道你在哪里读到上下文切换不会在内核模式下发生。