徒手hypervisor(一)

最简单的hypervisor

ARM v6引入了security extension,把硬件资源划分成了两个部分secure world和normal world。当CPU运行在secure world的时候,它可以访问所以的硬件资源,但当CPU运行在normal world的时候,它只能访问normal world的资源。ARM v7引入了virtualization extension,在normal world里面加入了一个新的CPUmode:HYP mode。这样CPU 在normal world运行的时候就有三种模式:USR mode, SVC mode和HYP mode,分别对应PL0, PL1, PL2(PL:privilege level),number越大,权限越高。我对这里所说的权限的理解是:寄存器的访问和指令的执行。比如说一些特殊的寄存器(HVBAR)只能再HYP mode里面才能访问,一些特殊的指令(HVC)只能再SVC 或者 HYP mode执行。而CPU处于哪个模式是由CPSR这个寄存器决定的。这里主要探讨的是虚拟化技术,更多的是介绍HYP mode这个新的CPU模式,secure world只会偶尔提到一下。

我不知道,大家对kernel的理解是什么?个人的理解kernel就是exception vector(异常向量表)和相应的handler。Vector的格式和在内存的位置可以说是由硬件确定的,而vector的每一项handler是kernel programmer编写的。系统刚启动的时候,是先初始化的kernel,这里可能有很多朋友有疑问User Space是怎么来的呢?其实答案很简单,就是kernel初始化完了,User Space code需要运行的时候,kernel 把CPSR的CPU mode一改,然后把PC指向User Space的code,自此以后整个系统就开始有PL0和PL1,PL0进PL1通过SWI指令(system call),PL1回PL0通过复原CPSR。

类似的,hypervisor也是由HYP exception vector和handler。一个最简单的hypervisor就是HVBAR寄存器定义vector的位置,在offset 0x14的地方放一个eret指令。这样的hypervisor可以处理kernel发起的HVC call。后续的博客会让这个最简单的hypervisor一点点长大。。。
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值