2012-02-28 60 views
1

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

谢谢!

回答

2

这是一种广泛的问题 - 每个硬件平台将要做的事情略有不同,但我认为基本的答案是,它的工作瓦特/它利用硬件设施,为内存保护软件等

+0

谢谢!我也发现这个网站,我认为它解释得很好:http://www.codinghorror.com/blog/2008/01/understanding-user-and-kernel-mode.html 似乎CPU知道是否页错或者不基于存储在CS寄存器中的值(这可能与x86相关)。 – user1096294 2012-02-28 21:50:49

2

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

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

现代x86计算机有一个特殊的指令只是为了进行系统调用。早期的x86处理器和一些当前的RISC处理器都有一条触发中断的指令。较老的建筑有其他切换控制的方式。

3

最后一个答案其实不是真的...... 更改为内核模式不会通过“实模式”。事实上,在完成引导过程之后,电脑永远不会回到真实模式。

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

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

相关问题