看操作系统虚拟化原理总结篇——软件虚拟化中的IO虚拟化

1,首先明确,如果以纯软件的方式去模拟IO,那简直是作死。因为大部分都是用模拟的方式,这样效率不会太高。


在模拟的时候,只需要正确模拟出目标设备的软件接口就可以保证客户机操作系统观察到的虚拟设备和目标设备一致,而不需要考虑真实的硬件构造,另外也不需要了解运行的客户机操作系统的技术细节。

这里只模拟了目标设备软件接口,那么也要实现目标设备的功能,而这个也是通过软件实现的,所以没有要求和具体的硬件设备相关。这里设备模型就是个中间层,一边连着虚拟机设备驱动模块,一边连着物理机设备驱动,那么如何捕获IO操作呢?

由设备驱动调用发出的IO请求先通过设备模型转化成物理IO设备的请求,再通过调用物理设备驱动完成相关的IO操作,反过来,设备驱动将IO操作结果通过设备模型驱动,返回给客户机的虚拟设备驱动程序。


那我们先说设备模型的软件接口,这个是给客户机操作系统用的:

大致有很多种接口模型,但是我们用到的也只有几种。

1,PCI 配置空间,一般是通过寄存器映射来完成的。

2,端口IO,操作系统通过特殊的指令去访问这些IO,因为是独立址,所以不能像访问内存那样去访问IO。

3,MMIO,这个是大块,现在的IO设备几乎都是以这种方式去,现在的操作系统几乎都是通过类似访问内存的方式去访问设备寄存器。


下面我们谈下如何陷入:

IO操作还好,因为in,out,ins,outs这四条指令都是敏感指令,可以通过修补,动态翻译或者直接陷入的方式去拦截并执行端口IO的处理函数。

那么MMIO呢,网络设备,显卡等都是这个方式。因为这里操作MM并不是敏感指令,VMM可不一定会陷入,这样就显得有点麻烦。

为了使MMIO能陷入,在初始化时VMM不会为客户机映射的MMIO所属的物理地址范围建立影子页表,即运行时,客户机的MMIO访问都会造成缺页异常,VMM会对此进行拦截。所以说,MMIO映射的方式,本质上还是内存虚拟化中影子页表的方式。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值