“文件系统日志把一次关联的块与分配元数据更新放进恢复域。本文构造OS 16的单事务重做日志:事务修改至多4个不同home块,记录每块完整after image及目标块号;一次只有一个事务,日志…”
形式陈述
设备驱动把内核请求转换成设备理解的命令。OS-16设备提供命令队列、完成队列和门铃寄存器;驱动先填写(requestID, operation, block, buffer, length)描述符并发布,再写门铃通知设备。设备读取描述符,搬运数据,最后发布完成记录。轮询与中断是发现完成的两种方式,不改变命令本身的意义。
DMA允许设备直接读写指定内存缓冲,而非CPU逐字节搬运。本文要求驱动使用已登记DMA地址,并在设备持有期间保持物理页pin与所有权理路物理页分配与安全回收Physical page allocator · Page frame free list把页框所有权、空闲链、发布前清零和最后使用者释放串成分配协议,解释它与用户堆对象分配的不同粒度。。真实系统DMA地址可以经IOMMU或桥接映射,不能把普通用户虚指针直接当成设备地址。
OS-16明确区分四个事件:
- 提交:设备可以看到完整描述符
- 搬运完成:设备已完成对主存缓冲的读或写
- 命令完成:完成队列报告该命令的结果
- 持久化完成:需要保留的数据已到掉电保留区
对普通块写,OS-16命令完成只要求设备已把数据接收到自己的易失缓存。后续flush成功才要求该队列此前写入全部稳定。主存缓存一致性、DMA可见性和断电持久性是三种不同合同。
直觉
中断相当于设备发来通知,DMA是搬运方式,flush是保存承诺。一次操作可以用DMA搬运、用中断报告完成,同时仍没有把数据放到掉电保留区。把三个名字混成“硬盘完成”会漏掉实际故障窗口。
描述符本身也是数据。若CPU先敲门铃、后补长度,设备可能看见旧长度;若缓冲提交后马上给别的请求复用,设备可能搬到后写入的内容。设备是否与CPU缓存一致,都不免除发布顺序与所有权约束。
例子与边界
完成中断之后仍可丢失
稳定块30初值为OLD。内核缓冲B含NEW,长度256B,其页被pin。驱动准备写请求R7、完成发布屏障、敲门铃。设备DMA读取B到易失缓存,放入成功完成记录并发中断。驱动匹配R7、确认没有后续DMA使用,解除pin;此时稳定块30仍可为OLD。
若立刻掉电,易失缓存丢失,重启读OLD。这条执行没有违反OS-16普通写完成语义。驱动若继续提交flush,并等其成功,稳定块30才必须为NEW;这时掉电仍恢复NEW。失败或超时的flush不能当作成功,结果可能未知。
读DMA方向相反
设备读请求R8把块40写到主存缓冲C。驱动不能在DMA尚未完成时让CPU消费C;非一致DMA系统还要按平台接口把设备写入转为CPU可见。完成后CPU才读取有效字节。写方向是设备读主存,读方向是设备写主存,名称以文件/设备操作方向命名,易造成反向理解。
若读DMA仍在途时解除pin并把C的页分给另一进程,设备稍后落下的数据将覆盖该进程内存。TLB和用户页权限无法拦住未受约束的设备访问;IOMMU权限与DMA映射生命周期需要单独管理。
推论与应用
请求ID避免将迟到或乱序完成归给新请求。环形队列复用槽位时还需要代际或所有权位;仅比较槽号可能把上一次绕环的完成误认成本次完成。OS-16在每个请求完成且无人持有描述符后才复用其ID和槽。
安全不变量是:设备只能访问已发布且由它持有的缓冲;CPU不在不允许的阶段改变其内容;每个完成只交还对应请求的所有权。提交有序、pin持续和完成匹配三者分别保护描述符、物理内存和生命周期。保持这些不变量不保证设备永不故障,还需把错误传播到上层。
CPU节约的是逐字节复制工作,不是所有I/O成本。描述符设置、地址映射、同步、设备总线搬运和中断处理仍需计费。小请求可能被固定成本主导,批量队列可摊薄该成本;DMA存在本身不证明吞吐一定更好。
把本页设备所有权交给可提前返回的执行器时,继续读异步取消与安全退休理路异步请求取消与安全退休Async request cancellation and retirement · Cancellation completion race · 异步缓冲生命周期分别记录逻辑结果、目标终结、取消完成与缓冲借用,证明超时返回之后的所有权守恒、唯一释放和代际安全。:deadline只结束逻辑等待,目标终结、取消回执和最后借用各自记账;缓冲归池与请求身份退休也可发生在不同时间。本页的DMA发布、pin与flush边界不因此改变。
参考资料
- Remzi与Andrea Arpaci-Dusseau,OSTEP: I/O Devices,第36章,轮询、中断与DMA。
- Linux Kernel Documentation,Dynamic DMA mapping Guide,2026-10-08核查,CPU虚/物理/DMA地址、所有权和一致映射仍需内存屏障的边界。本文设备写完成与flush契约为OS-16明示模型。