vt-d

New Note 53


dma工作原理
dma的驱动向内核申请传输空间,然后将空间的地址和长度交给设备,设备就向这个地址空间直接传输数据


dma设备向空间传输数据的时候地址有限制,
1.地址空间的限制,比如设备只有32位地址总线,则他最大只支持4G以内的地址的传输。
2.安全性限制,如果驱动不小心给设备指定了一个错误传输地址,那么设备将可能会覆盖掉重要数据,造成系统的严重问题。

iommu应运而生,io memory manage unit
iommu在初始化的时候会扫描出一张dma映射表,为所有有dma功能的设备分配它将对应的地址,这样就可以跨过4G的空间限制,另外有了iommu设备的机器,设备在发出dma请求的时候,iommu会检查它的dma地址是否符合dma映射表中该设备的地址范围,从而避免了访问地址的出错,提高安全性。同时,每个dma设备在dma映射表中对应的地址范围是可以设定的,因此可以通过设定guest地址来支持虚拟化的guest直接访问设备

An OS may manage I/O by creating multiple domains and assigning one or more I/O devices to each domain. Each device-driver explicitly registers its I/O buffers with the OS, and the OS assigns these I/O buffers to specific domains, using hardware to enforce DMA domain protection.
例:
domain 1中的driver A申请一块buffer,将buffer地址写在dma映射表中设备A对应的映射地址上,于是domain中的驱动同设备关联起来了。

支持虚拟化技术的硬件平台主要做两件事,一个是DMA Remapping,将DMA请求中的Guest的物理地址映射到Host的物理地址,另一个是中断Remapping,将能remappable的中断请求根据由VMM设置,位于内存的IRT(Interrupt Remapping Table)发送到指定的vcpu上。

实质就是在dma设备和memory之间加了一层,用于remapping和检查。

通过dma remmapping,iommu可以支持将设备直接赋给guest,将dma表内设备对应的地址写成guest对应的地址即可
iommu还支持interupt的remapping,从而可以将interrupt映射到特定的vm,支持vm对设备的直接操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值