Operating system 内核/用户模式之间的更改是由硬件还是软件完成的?

Operating system 内核/用户模式之间的更改是由硬件还是软件完成的?,operating-system,paging,kernel,Operating System,Paging,Kernel,我只是想知道操作系统中内核模式和用户模式之间的切换是由硬件还是操作系统本身完成的。 我知道当用户进程想要进入内核模式时,它可以进行系统调用并执行一些内核代码。当进行系统调用时,进程进入内核模式,现在所有内存都可以访问,等等。为了实现这一点,我假设中断处理程序需要切换或更改页表。这是真的吗?如果不是,CPU如何知道它在内核模式下运行,并且在访问受限(用户进程无法访问)内存时不需要分页错误 谢谢 这是一个广泛的问题-每个硬件平台的工作方式都会略有不同,但我认为基本答案是,它是通过利用硬件设施进行内存

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


谢谢

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

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

这需要CPU支持。CPU跟踪它所处的模式、页表所在的位置、跳转指令指针等。它由执行系统调用的用户软件触发,并依赖于内核为它尝试执行的任何操作提供支持。就像所有的计算一样,它总是既有硬件又有软件。但是,我不能只使用软件,因为这样就无法防止进行系统调用的进程滥用它获得的特权,例如,它可以开始读取/etc/shadow


现代x86计算机有一种专门用于执行系统调用的指令。早期的x86处理器和一些当前的RISC处理器都有一条指令来触发中断。较老的建筑有其他切换控制的方式。

最后一个答案实际上是不正确的。。。。 更改为内核模式不会经过“真实模式”。实际上,在完成引导过程后,计算机再也不会回到真实模式

在正常的x86系统中,更改为内核模式需要调用“syscenter”(在某些寄存器中设置参数后),这会导致跳转计算机启动时设置的预定义地址(保存在CPU的MISR寄存器中),因为只能从内核模式执行(这是一个“特权”命令)


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

谢谢!我还发现了这个网站,我认为它解释得很好:似乎CPU根据存储在CS寄存器中的值(这可能是x86特定的)知道是否分页错误。