ARMv7的敏感指令分析

ARMv7的敏感指令分析

VM不能运行在特权模式下,不能直接控制CPU硬件;客户操作系统只能运行在非特权模式或用户模式下。
敏感指令的定义是,运行效果与CPU模式或物理地址有关的指令。有些敏感指令是特权指令,即在用户模式下会自陷。如果所有敏感指令都是特权指令,VMM不需要采用动态翻译,也可以确保客户操作系统的正确运行。换句话说,CPU体系结构具备虚拟化能力,当且仅当敏感指令集合是特权指令集合的子集。在这种情况下,VMM就可以采用经典的自陷-模拟机制。不幸的是,ARMv8之前的CPU既有特权敏感指令,也有非特权敏感指令,因此不具备虚拟化能力。

1. 特权敏感指令

在ARM体系结构上,特权敏感指令是协处理器接口访问指令。ARM体系结构定了16个协处理器,协处理器并不是真正物理部件单元,而是特定功能的指令集扩展。15号协处理器为系统控制协处理器,用于控制虚拟内存子系统。14号协处理器为浮点协处理器,相关指令有CDP、LDC、MCR、MCRR、MRC、MRRC和STC。特权敏感指令在用户模式下会自陷,KVM/ARM通过捕获自陷,并用软件来模拟敏感特权指令;但针对浮点协处理器相关的指令不需要做特殊处理。

2. 非特权敏感指令

在ARM体系结构上,非特权敏感指令在用户模式下不会自陷,就不能用自陷-模拟的方法来处理。这些指令主要包括处理器模式、状态寄存器、以及与CPU模式有关的内存访问指令。

2.1 处理器模式指令

处理器模式指令。ARMv7处理器有用户模式和6个特权模式,每个模式都有一些堆积寄存器(例如,寄存器13在特权模式对应的物理寄存器和用户模式不同)。无论CPU是否处于特权模式,LDM(2)和STM(2)这样的多数据访存指令,使用用户模式寄存器;它们属于非特权敏感指令,在用户模式下不会自陷。

2.2 状态寄存器指令

状态寄存器指令。ARM处理器定义了当前程序状态寄存器CPSR,描述了当前CPU模式及其状态信息。寄存器CPSR中的某些位只能在特权模式下访问,例如模式位;也有一些位可以在用户模式下访问。当CPU从用户模式切换进入某个特权模式时,该特权模式就有一个堆积寄存器,即保存程序状态寄存器SPSR,用于保存用户模式寄存器CPSR的副本;5种特权模式都有各自专用寄存器SPSR。访问寄存器CPSR和SPSR的指令有CPS,MRS,MSR,RFE和SRS。在用户模式下,修改CPSR的特权位会被处理器忽略,访问SPSR后果未知。在特权模式下,ADCS,ADDS,ANDS,BICS,EORS,MOVS,MVNS,ORRS,RSBS,RSCS,SBCS和SUBS这些数据处理指令以及LDM(3)访问指令都可以实现将寄存器SPSR内容复制给CPSR。这些指令都是非特权敏感指令;在用户模式下,这些指令运行结果都是不可预测的。

2.2 CPU模式相关的访存指令

与CPU模式有关的内存访问指令,与访问保护相关。ARM体系结构虚拟内存系统采用访问保护位,定义了每种特权模式对应的访问权限。低特权模式下,内存访问权限比较低,访存指令会触发异常,因此常规内存访问不属于敏感指令。无论CPU是否处于特权模式,LDRBT,LDRT,STRBT和STRT翻译访存指令都使用用户权限来访存;在用户模式下,这些指令类似常规内存访问指令。这些指令不会因为内存访问权限违例而自陷,因此它们是非特权敏感指令。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值