内核模式到用户模式中断禁用

内核模式到用户模式中断禁用

我读到 RFE(异常返回)是一条特权指令,有助于从内核模式转换到用户模式。

由于它是一条特权指令,因此在执行过程中会产生软件中断(陷阱)。

我想知道在执行期间是否禁用所有其他中断或中断启用标志,以便内核不会在执行期间被中断。软件中断期间是否禁用中断?

答案1

免责声明:我只处理过摩托罗拉 68000 上的操作系统级代码。这个答案是从类似的双环式系统的角度编写的,但这些概念应该可以很好地转化为现代多环系统。


在具有两个权限级别的系统上,称为用户模式和系统模式,应用程序将运行在用户模式下,而内核运行在系统模式下。如果用户模式应用程序尝试运行特权指令,就会出现陷阱,以便内核可以决定如何处理这种情况。

另一方面,内核已经拥有执行它想要执行的任何指令的权限,因此不会执行任何陷阱。

特别是在 MC680x0 上,默认情况下任何陷阱处理程序都在特权模式下运行。因此,任何陷阱处理程序都可以使用“从异常返回”,而不会产生任何影响,并且无需担心生成另一个陷阱。用户模式下的代码不应该使用这样的指令,因为没有异常可以返回。

简而言之,这个问题源于一个错误的前提;使用“异常返回”切换到用户态时不会产生陷阱。

答案2

处理器模式之间的转换如何工作取决于处理器架构。然而,你确实可以期待有一条从内核模式切换到用户模式的指令;如果您愿意,可以将其称为 RFE,但其本质更多的是跳跃和更改模式,而不是返回和更改模式。将其视为“软件中断”也是一种误导,因为它不会执行中断句柄。

询问是否禁用中断实际上没有意义,因为这是一条指令。此时的中断不会导致内核“被中断”,因为内核已经决定停止运行。内核在跳回用户模式之前总是会启用中断,因为用户模式永远不应该在禁用中断的情况下运行——这将是拒绝服务。如果处理器需要花费多个周期来执行 RFE 指令,则处理器可能不会在其中一些周期内检查中断,但这是软件无法观察到的处理器架构的细节(除了通过精细的计时测量)。

相关内容