unix CPU如何区分内核代码和用户空间代码?

b1uwtaje  于 7个月前  发布在  Unix
关注(0)|答案(1)|浏览(84)

我曾经遇到过内核空间和用户空间的概念。内核代码中的数据和函数不能从用户空间访问。CPU如何准确地区分它运行的代码是否是内核?我知道CPU为内核代码执行设置了一些内核模式位,但代码中到底是什么促使它设置内核模式位。

ntjbwcob

ntjbwcob1#

这个问题的确切答案取决于CPU架构,但一般来说是这样的:
在以下情况下,CPU将进入内核模式:

  • 上电或复位时,CPU跳转到一个特殊的复位地址。
  • 在硬件中断时,CPU保存当前指令的地址、当前状态和模式,并跳转到预定义的处理程序地址。
  • 在异常情况下(页面错误,未知指令等)。CPU保存当前状态并跳转到预定义的地址。
  • 在一个特殊的指令:“TRAP”或“SYSCALL”或类似的。同样,CPU保存状态并跳转到一个预定义的地址。

你可能会注意到,当CPU进入内核模式时-它总是跳转到一些预定义的地址。此外,这些地址只能在内核模式下更改-用户程序永远不允许决定目的地。内核完全控制进入内核模式的所有入口点。
用户模式可以通过一个特殊的指令进入。通常,这个指令也会跳转,但这次它允许选择目的地。

相关问题