第 1 部分针对 Oracle Solaris 平台设计设备驱动程序
9. 直接内存访问 (Direct Memory Access, DMA)
14. 分层驱动程序接口 (Layered Driver Interface, LDI)
全存储排序 (Total Store Ordering, TSO)
部分存储排序 (Partial Store Ordering, PSO)
为提高性能,CPU 会使用内部存储缓冲区临时存储数据。使用内部缓冲区可能会对设备 I/O 操作的同步造成影响。因此,驱动程序需要执行明确的步骤来确保在适当的时间完成对寄存器的写入。
例如,假设通过锁来同步对设备空间(如寄存器或帧缓存器)的访问。驱动程序需要检查在释放锁之前是否实际完成了向设备空间中的数据存储。释放锁时并不一定会刷新 I/O 缓冲区。
另一个示例是,确认中断时,驱动程序通常会在设备控制寄存器中设置或清除一位。驱动程序必须确保在中断程序返回之前,已开始在设备上对控制寄存器进行写入。同样,在向控制寄存器写入了某一命令之后,设备可能要求延迟,即驱动程序繁忙,需要等待。在这种情况下,驱动程序必须确保在设备延迟之前已开始在该设备上进行写入。
当读取设备寄存器不会产生不良负面影响时,只需在写入之后立即读取就可以对写入进行验证了。如果无法在不产生不良负面影响的情况下读取该特定寄存器,则可以使用同一寄存器集中的其他设备寄存器。