内核/用户模式之间的变化是由硬件还是软件完成的?

时间:2012-02-28 21:34:04

标签: operating-system paging kernel

我只是想知道操作系统中内核模式和用户模式之间的切换是由硬件还是操作系统本身完成的。 我知道当用户进程想要进入内核模式时,它可以进行系统调用并执行一些内核代码。当进行系统调用时,进程进入内核模式,现在所有内存都可以访问,等等。为了实现这一点,我假设中断处理程序需要切换或改变页表。这是真的?如果没有,CPU如何知道它在内核模式下运行并且在访问受限制的(用户进程无法访问)内存时不需要页面错误?

谢谢!

3 个答案:

答案 0 :(得分:3)

最后的答案实际上并非如此...... 更改为内核模式不会通过“实模式”。实际上,在完成启动过程后,计算机永远不会回到实模式。

在正常的x86系统中,更改为内核模式涉及调用'sysenter'(在某些寄存器中设置参数之后),这会导致跳过计算机启动时设置的预定义地址(保存在CPU的MISR寄存器中) ,因为它只能从内核模式完成(它是'特权'命令)。

所以它基本上涉及执行一个软件命令,硬件按照设置的方式响应,当它处于内核模式时

答案 1 :(得分:2)

这是一个广泛的问题 - 每个硬件平台的工作方式都略有不同,但我认为基本的答案是它完成了软件利用硬件设备进行内存保护等。

答案 2 :(得分:2)

当用户进程想要进行系统调用时,它会执行一条特殊的CPU指令,并且CPU从虚拟模式(对于用户进程,具有特定于进程的页表)切换到实模式(对于内核)并跳转到OS系统调用处理程序。然后内核可以做它喜欢的事情。

需要CPU支持。 CPU会跟踪它所处的模式,页表所在的位置,跳转指令指针等。它由执行系统调用的用户软件触发,并依赖于内核为其尝试的任何内容提供支持。做。与所有计算一样,它始终是硬件和软件。然而,我无法单独使用软件,因为那样就没有办法阻止一个进程使系统调用滥用它所获得的privelages,例如它可以开始阅读/ etc / shadow。

现代x86计算机只有执行系统调用的特殊指令。早期的x86处理器和一些当前的RISC处理器都有触发中断的指令。较旧的架构有其他转换控制的方式。