[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fqBgGsG5t3vFcdnJnObGfn8DxtpKSZ19rnw71hv_ifp0":3},{"item":4,"related":44},{"id":5,"type":6,"title":7,"slug":8,"summary":9,"body":10,"coverUrl":11,"productScreenshots":12,"productLinks":13,"authorName":14,"authorUrl":15,"authorSubject":16,"category":17,"tags":22,"sourceLabel":35,"sourceName":36,"sourceUrl":37,"status":38,"seoTitle":7,"seoDescription":9,"canonicalUrl":35,"isFeatured":39,"sno":40,"sortOrder":41,"publishedAt":42,"updatedAt":43,"createdAt":43},"3f168250-e566-4f42-94c3-770a94401e6f","article","IOMMU：外设为什么不能随便读写整台机器的内存？","iommu-device-dma-memory-isolation","IOMMU 为设备 DMA 提供地址转换与访问隔离，是虚拟机设备直通和受控用户态驱动的重要基础。本文说明它保护什么、不能保证什么。","网卡、显卡、存储控制器不只接收命令，也会通过 DMA（直接内存访问）读写主机内存。若设备可以随意指定物理地址，一个有故障或不可信的设备就可能触碰不属于它的数据。IOMMU（输入输出内存管理单元）可以理解为设备 DMA 的地址转换与隔离层：设备发出的地址先经过检查和映射，再决定它实际能访问哪些内存。\n\n类比一下，普通 CPU 进程访问内存时会受到页表约束；IOMMU 则在“设备侧”提供相近的保护边界。操作系统可以为某个设备建立映射，让它只看到分配给它的缓冲区，而不必让设备直接掌握整台机器的物理内存。虚拟化场景中，这对于把设备安全地交给虚拟机或用户态驱动使用尤其重要。\n\nLinux 的 VFIO 框架就利用 IOMMU 等机制支持受控的用户态设备访问。它让特定设备可以由用户空间程序直接管理，同时保留内存访问隔离。对于高性能设备，少一次内核数据通路可能有帮助；但用户态驱动仍要正确处理设备寄存器、队列、DMA 缓冲区和中断等复杂细节。IOMMU 解决的是 DMA 地址映射与隔离问题，不会自动修复驱动逻辑错误，也不保证设备本身没有漏洞。\n\n隔离能力还取决于硬件拓扑。某些设备共享总线或 IOMMU group，不能被完全独立地划分；固件设置、平台能力和驱动支持也会影响可用性。开启 IOMMU 可能有额外的映射管理成本，具体影响依平台与工作负载而变。虚拟机直通并非只要“打开一个开关”就能安全完成，必须理解设备与隔离组的边界。\n\n普通电脑用户通常不用手动管理 IOMMU，但它支持了云平台的设备虚拟化、PCIe 设备直通，以及更安全的高性能 I\u002FO。若你在配置虚拟机直通或排查设备访问限制，IOMMU group、DMA 映射和 VFIO 是需要一起理解的概念。判断方案时，关注“设备究竟能访问哪段内存”比只看直通后速度更重要。\n\n它把一个容易忽略的安全问题摆到台面上：外设也是会读写内存的参与者，硬件层的访问控制不能只围绕 CPU 设计。\n\n来源：[Linux 内核文档：VFIO - Virtual Function I\u002FO](https:\u002F\u002Fdocs.kernel.org\u002Fdriver-api\u002Fvfio.html)","\u002Fuploads\u002F2026-10-06\u002Ff86f288a-2fdf-4980-a4be-078d8416273d.jpg",[],[],"Foundit","https:\u002F\u002Ffoundit.cn","foundit-ai-editorial",{"id":18,"name":19,"slug":20,"description":21},"6179d3b6-dc34-4483-9ded-3cd9f1b37a47","科普","abbreviation","介绍各领域新兴概念",[23,27,31],{"id":24,"name":25,"slug":26},"8d35e42e-9f5b-4dd9-b30f-dc2c53d06096","硬件","hardware",{"id":28,"name":29,"slug":30},"7c76bfc2-f80f-4ee0-a95d-27bd8708b434","技术","slug",{"id":32,"name":33,"slug":34},"88d2bc27-0e0f-468a-b907-2991cb97b87b","人工智能","ai",null,"Linux Kernel Documentation：VFIO - Virtual Function I\u002FO","https:\u002F\u002Fdocs.kernel.org\u002Fdriver-api\u002Fvfio.html","published",false,52,0,"2026-10-06T00:00:00.000Z","2026-10-06T07:51:20.460Z",[45,53,62],{"id":46,"type":6,"title":47,"slug":48,"summary":49,"coverUrl":50,"authorName":14,"sno":51,"publishedAt":42,"createdAt":52},"339d9bc6-ccd6-4414-96fc-73d0797114b5","CHERI Capability：如果指针自带访问范围和权限，会怎样？","cheri-capability-hardware-memory-safety","CHERI capability 为指针加入受保护的边界和权限，使硬件能够限制内存访问。本文讲解它能缓解的漏洞类型，以及时间安全与生态迁移限制。","\u002Fuploads\u002F2026-10-06\u002F774d772b-3783-4f37-856d-9294de6cde68.jpg",60,"2026-10-06T07:51:41.031Z",{"id":54,"type":6,"title":55,"slug":56,"summary":57,"coverUrl":58,"authorName":14,"sno":59,"publishedAt":60,"createdAt":61},"560f8daa-d53e-49f9-b4cc-54d5f39aea71","1.58 比特大模型：参数只有 −1、0、1，为什么还能推理？","one-bit-llm-bitnet-explained","BitNet b1.58 让模型从训练阶段就使用 −1、0、1 三值权重，探索更低的内存、延迟和能耗。本文解释 1.58 bit 的由来、原生低比特与 INT4 量化的区别、零值的作用，以及为什么收益依赖硬件和运行时。","\u002Fuploads\u002F2026-09-08\u002Fab641d19-d38a-4d44-b40f-649aa1c3191a.jpg",49,"2026-09-08T00:00:00.000Z","2026-09-08T03:19:29.625Z",{"id":63,"type":6,"title":64,"slug":65,"summary":66,"coverUrl":67,"authorName":14,"sno":68,"publishedAt":69,"createdAt":70},"d4a1ef13-fa42-41f3-a9d2-635f47d801d0","RISC-V PMP：处理器怎样给不同特权级划出内存禁区？","riscv-pmp-physical-memory-protection","RISC-V PMP 由高特权级软件配置物理内存区域访问规则，并由处理器在较低权限代码访问时执行检查。本文区分 PMP 与虚拟内存，介绍它在固件和嵌入式安全中的作用及实现边界。","\u002Fuploads\u002F2026-10-13\u002Fecfdd306-c8d2-4bfa-984e-7f579fd86f61.jpg",41,"2026-10-13T00:00:00.000Z","2026-10-13T02:13:39.212Z"]