块设备实现 BlockImplQuery 和 BlockImplQueue。它支持读取、写入和刷新操作。如果在写入操作和刷新操作之间断电,写入 USB 大容量存储设备的更改可能不会保留到设备中。驱动程序没有机制来告知堆栈中更上层的驱动程序写入何时实际写入到物理介质。对于 USB 大容量存储设备,当设备确认写入时,系统会认为写入已完成。
核心设备
核心设备充当块设备与 USB 堆栈之间的接口。核心接受来自块设备的请求,并将其转换为 USB 请求,最终通过 USB 堆栈发送到硬件。对于每个请求,系统都会执行以下步骤:
请求已添加到队列中。
请求被工作线程拾取。
存储在请求中的 SCSI 命令已发送到设备。
从设备读取回请求状态。
调用完成回调,通知块设备层请求已完成。
某些 USB 大容量存储设备可能具有多个块设备,例如磁盘阵列。在这种情况下,核心驱动程序会为每个磁盘创建一个块设备。