提问人:Marco 提问时间:9/15/2023 最后编辑:Marco BonelliMarco 更新时间:9/15/2023 访问量:55
操作系统如何处理不是块设备扇区大小倍数的 I/O 写入?
How does the operating system handle I/O writes, that are not a multiple of the block device's sector-size?
问:
我试图理解一个数据块,它不是驱动器默认扇区大小的倍数,是如何被写下来的。 在我的理解中,操作系统只能执行多扇区大小的块设备操作,但它以某种方式设法写下更小的字节块。
假设,我想将 300Bytes 写入块设备上的 file(禁用缓冲)中,该文件的扇区大小为 512 字节。在这种情况下,从理论上讲,操作系统必须添加一些填充,以便以物理方式写入数据。我假设,这个填充将由0x00组成。
与我的假设相反,这 300 字节已经完美地写下来,没有任何明显的填充。在字节 301 处,位于先前写入的字节。这似乎是操作系统首先将块读入内存,替换受影响的字节并将新的 512bytes 块写入驱动器的特定扇区。这也意味着,不是 512 的倍数的写入需要更长的时间,并且需要在 RAM 中增加一个缓冲区...... 如果这是正确的,操作系统的哪个部分负责考虑这一点?如果我能得到一个例子(例如来自 Linux 内核)来了解发生了什么,我会很高兴。
答: 暂无答案
评论