2013-10-24 23 views
-1

在一个类中,prof称“一个[汇编]指令知道它是以特权模式还是用户模式运行,因为如果产生了陷阱,那么它就是用户模式”。指令如何知道它是以特权模式还是用户模式运行?

首先,我假设它不能是任何陷阱,而是一个特定的陷阱,说该命令不能在用户模式下运行。其次,这似乎非常低效:运行整个命令并检查是否有陷阱。为什么没有设置标志或什么?这难道不是说如果它不起作用,那么我们知道有问题吗?所以真的没有办法检查?

回答

0

这取决于您的平台(即ARM,x86等)。我主要使用ARM工作,所以我的答案可能是ARM特定的,但我已尽可能通用。

通常,CPU会跟踪它所处理的处理器模式,并检查每条指令在执行时的状态。这是用硬件完成的,而不是用软件完成的,所以你不用担心它是否有效(把它留给硬件开发者)。

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

+0

你是什么意思,它在硬件上完成,所以效率并不重要?陷阱是软件,不是吗?即使没有,我也没有看到你的理由“不要担心” – Celeritas

+0

陷阱处理程序是用软件实现的,但其底层机制仍然是硬件。我说你不必担心它是如何在硬件中实现的,因为它通常不受软件开发人员的控制 – tangrs

相关问题