Linux kernel 内核/用户模式下的CPU

Linux kernel 内核/用户模式下的CPU,linux-kernel,cpu,Linux Kernel,Cpu,CPU可以处于内核模式(完全特权)或用户模式。内核需要内核模式,而应用程序需要在用户模式下运行。但是CPU怎么能同时处于两种模式呢?处理器通常包括一个模式标志,指示处理器在给定时间处于哪种模式;这面旗帜不一定能起到很大的作用。在一个简单的实现中,该标志可能仅控制是否允许处理器更改内存映射;处理器将包括一条简单地切换到用户模式的指令,以及一条同时切换到内核模式并跳转到特定地址的指令 如果内核将自己的代码存储在前面提到的地址,然后切换内存映射以使所讨论的地址具有写保护,那么用户代码将能够通过将其请求

CPU可以处于内核模式(完全特权)或用户模式。内核需要内核模式,而应用程序需要在用户模式下运行。但是CPU怎么能同时处于两种模式呢?

处理器通常包括一个模式标志,指示处理器在给定时间处于哪种模式;这面旗帜不一定能起到很大的作用。在一个简单的实现中,该标志可能仅控制是否允许处理器更改内存映射;处理器将包括一条简单地切换到用户模式的指令,以及一条同时切换到内核模式并跳转到特定地址的指令


如果内核将自己的代码存储在前面提到的地址,然后切换内存映射以使所讨论的地址具有写保护,那么用户代码将能够通过将其请求存储在某个位置并调用“切换到内核模式并跳转”指令来要求内核执行某些操作。然后,内核代码可以启用其私有内存区域,检查由用户模式代码存储的请求,根据请求采取行动,禁用其私有内存区域,切换回用户模式,然后返回到执行用户模式代码。

除了supercat的答案外,CPU不会同时处于两种模式。要么运行用户模式代码,要么运行内核模式代码(在同一逻辑内核上)。@tangrs:任何给定的执行上下文将仅处于一种模式。如果一个CPU可以同时处理执行上下文(例如,使用多个内核,或在单个内核上使用超线程),那么逻辑上分离的CPU部分可能处于一种模式,而部分处于另一种模式。supercat&tangrs,感谢您为我澄清这个主题。