用户空间到内核空间的过渡

Ble*_*ers 5 kernel

物理上(硬件、环)和逻辑上(软件),用户空间到内核空间的转换是什么?反之亦然。

或者更一般地说,当发生“空间”(或环)过渡时会发生什么?是什么让它变得昂贵(Minix 的主要问题之一)?

此问题用于在答案下发表评论。

Gil*_*il' 9

从操作系统的角度来看,用户空间是从进程执行代码,内核空间是从内核执行代码。从用户空间到内核空间的转换是进入系统调用,从内核空间到用户空间的转换是系统调用的返回。

从处理器的角度来看,用户空间和内核空间是特权级别。“Ring 3”和“ring 0”是 Intel x86 处理器上使用的名称(有 ring 1 和 2,但大多数 unices 不使用它们,因为它们没有太多用处)。其他 CPU 类型使用不同的名称,例如 ARM 上的用户模式和特权(或系统)模式。

模式之间的转换是通过改变处理器模式和跳转到不同地址的指令完成的;这些指令的细节在很大程度上取决于 CPU 类型。除了切换处理器模式和跳转到不同的地址外,模式转换指令通常会执行一些其他任务,例如交换几个寄存器的值(同样,这非常依赖于 CPU)。

从用户模式到内核模式的转换必须跳转到一个由内核设置的固定地址。为了维护系统的安全性,用户态的代码不允许将处理器切换到内核态,除非调用一段经过特制的代码(系统调用入口点),无论在什么情况下都可以安全地工作。用户模式代码一直在做。系统调用入口点首先将寄存器值保存到指定的内存区域,并执行任何其他必要的簿记,然后读取系统调用参数并将系统调用分派到适当的函数。根据处理器类型,簿记可能涉及设置MMU表适当。内核可以随时决定暂停调用进程并调度另一个进程。

从内核模式到用户模式的转换可以发生在内核认为合适的任何地方。内核恢复保存的寄存器、MMU 配置和其他任何需要的东西,并写入系统调用的返回值,最后在系统调用之后跳转回进程中的指令。