【问题标题】:How does an instruction know if it's running in privilleged or user mode?指令如何知道它是在特权模式还是用户模式下运行?
【发布时间】:2013-10-24 03:33:25
【问题描述】:

教授在课堂上说“[汇编]指令知道它是在特权模式还是用户模式下运行,因为如果产生了陷阱,那么它就是用户模式”。

首先我假设它不能是任何陷阱,而是一个特定的陷阱,表示该命令不能在用户模式下运行。

其次,这似乎非常低效:运行整个命令并检查是否存在陷阱。为什么没有设置标志或其他东西?这不是说如果它不起作用,那么我们就知道有问题吗?所以真的没有办法检查吗?

【问题讨论】:

    标签: operating-system kernel-mode usermode assembly-trap


    【解决方案1】:

    这取决于您的平台(即 ARM、x86 等...)。我主要使用 ARM,所以我的回答可能是针对 ARM 的,但我尽量保持通用性。

    通常,CPU 会跟踪它所处的处理器模式,并在执行每条指令时对其进行检查。这是在硬件中而不是在软件中完成的,因此您不必担心它是否有效(留给硬件开发人员)。

    如果指令因为没有足够的权限而被硬件困住,CPU 通常会在特权模式下的设定位置开始执行。这个设置的位置是一个陷阱处理程序,通常在内核中。然后,陷阱处理程序会收集有关导致陷阱的原因的一些信息并进行适当的处​​理。

    【讨论】:

    • 你是什么意思它是在硬件中完成的,所以效率并不重要?陷阱是软件的东西,不是吗?即使不是我也看不出你的理由“别担心”
    • 陷阱处理程序在软件中实现,但底层机制仍然在硬件中。我说你不用担心它是如何在硬件中实现的,因为它通常不受软件开发人员的控制
    猜你喜欢
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    相关资源
    最近更新 更多