无论是物理上(硬件、环)还是逻辑上(软件),什么是用户空间到内核空间的转换?反之亦然。
或者更一般地说,当发生“空间”(或环)转变时会发生什么?是什么让它成本高昂(Minix 的主要问题之一)?
这个问题如下以供评论这回答。
答案1
从操作系统的角度来看,用户空间是进程代码的执行,而内核空间是内核代码的执行。从用户空间到内核空间的转换是进入系统调用,从内核空间到用户空间的转换是系统调用的返回。
从处理器的角度来看,用户空间和内核空间是特权级别。 “Ring 3”和“ring 0”是Intel x86处理器上使用的名称(有ring 1和ring 2,但大多数unice不使用它们,因为它们没有太多用途)。其他 CPU 类型使用不同的名称,例如 ARM 上的用户模式和特权(或系统)模式。
模式之间的转换是通过改变处理器模式并跳转到不同地址的指令来完成的;这些指令的细节很大程度上取决于 CPU 类型。除了切换处理器模式和跳转到不同的地址之外,模式转换指令通常还执行一些其他任务,例如交换一些寄存器的值(同样,这非常依赖于 CPU)。
从用户模式到内核模式的转换必须跳转到由内核设置的固定地址。为了维护系统的安全,用户模式下的代码不允许将处理器切换到内核模式,除非调用一段经过专门设计的代码(系统调用入口点),该代码无论在什么情况下都可以安全地工作。用户态代码一直在做。系统调用入口点首先将寄存器值保存到指定的内存区域,并执行任何其他必要的簿记,然后读取系统调用参数并将系统调用分派到适当的函数。根据处理器类型,簿记可能涉及设置内存管理单元适当地表。内核可以在任何时候决定暂停调用进程并调度另一个进程。
从内核模式到用户模式的转换可以发生在内核认为合适的任何地方。内核恢复保存的寄存器、MMU配置和其他任何必要的东西,并写入系统调用的返回值,最后跳回系统调用后进程中的指令。