用户空间中的确切编程指令是什么?

Chi*_*sad 0 c operating-system kernel linux-kernel

我知道一个进程在用户态和内核态之间切换运行。我很困惑,对于每一行代码,我们都可能需要内核。下面是示例,我能否得到内核在执行以下代码行中的作用的解释。以下是否确实需要内核模式。

如果(a<0)a++

Bre*_*dan 6

我很困惑,对于每一行代码,我们都可能需要内核。

用户空间中的大多数代码都是在不涉及内核的情况下执行的。当出现以下情况时,内核就会参与进来(CPU 从用户空间切换到内核):

a) 用户空间代码明确要求内核执行某些操作(调用系统调用)。

b) 有一个 IRQ(来自设备)会中断用户空间代码。

c) 内核提供了一些用户空间代码不知道的功能。最常见的原因是虚拟内存管理;但调试和分析是其他原因。

d) 异步通知(例如导致切换到内核以便内核可以将程序重定向到合适的信号处理程序)。

e) 用户空间代码做了一些非法的事情(崩溃)。

以下是否确实需要内核模式。

该代码 ( if(a < 0) a++;) 可能不需要内核的帮助;但有可能。例如,如果变量a位于先前发送到交换空间的内存中,则任何访问尝试a都是内核从交换空间获取该数据的请求。以类似的方式,如果可执行文件已内存映射但尚未加载(这是提高程序启动时间的常见优化),则尝试执行任何指令(无论指令是什么)都可能要求内核从磁盘上的可执行文件。