模块函数执行中的上下文切换
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 系统调用在此类文件系统上打开文件,代码将打开 -> 一些查找 -> 模块中的代码 。所有这一切都发生在 同一个线程 的上下文中。没有模块上下文的概念。可能是模块中的代码自己创建了一些内核线程,但这与它是一个模块的关系为零。
进程可以 运行 在任何给定时间点的这些上下文之一中:
- 用户模式
- 内核模式
- 中断模式
上下文切换在所有情况下都会发生。在中断模式下,程序员有责任在执行中断的上半部分时禁用 CPU 上的上下文切换。我不知道你在哪里读到上下文切换不会在内核模式下发生。
我读到,当您 运行 模块时,代码成为内核的一部分。但我认为当模块的功能仍在执行时,进程之间可以进行上下文切换。怎么会这样?我读到在内核中没有上下文切换。
当然 Linux 内核中有上下文切换。是 called kernel pre-emption。我不确定您在哪里读到内核中没有上下文切换,或者您为什么认为这是不可能的。
内核线程(大概是您的模块代码将在其上执行的位置)的调度方式与任何其他用户线程一样。
不过问题好像不对
But I figured that there can be context switch between processes while module's function is still executing.
什么?
假设我们有一个实现文件系统的模块。如果您通过 open 系统调用在此类文件系统上打开文件,代码将打开 -> 一些查找 -> 模块中的代码 。所有这一切都发生在 同一个线程 的上下文中。没有模块上下文的概念。可能是模块中的代码自己创建了一些内核线程,但这与它是一个模块的关系为零。
进程可以 运行 在任何给定时间点的这些上下文之一中:
- 用户模式
- 内核模式
- 中断模式
上下文切换在所有情况下都会发生。在中断模式下,程序员有责任在执行中断的上半部分时禁用 CPU 上的上下文切换。我不知道你在哪里读到上下文切换不会在内核模式下发生。