2011-12-05 37 views
0

我想了解块设备写入是如何工作的。我的理解是所有的写作都需要与部门保持一致。所以如果扇区大小为512字节,那么所有写入的大小为512字节。现在让我们说我创建一个文件并开始顺序写入它(在应用程序端没有缓冲)。现在假设我通过在文件的零偏移处写入16个字节开始。这是如何转化为块级写入的?它是否被缓冲,直到我写入了“扇区大小”的数据量,然后推送到磁盘?如果fsync被调用,剩余的字节被填充然后写出来?理解是正确的还是我的方式?块设备写入

后续问题如下。如果我有一个文件大小为64K。假设我在偏移量64处执行16字节的随机写入。然后读取512字节的适当扇区,将16字节写入缓冲区中的偏移量64,然后将512字节写入磁盘。理解是否正确?

回答

0

它被称为Read-Modify-Write:您必须先读取扇区,更改请求的字节并将其写回。
只有在全扇区写入的情况下,您才能忽略此步骤。

我不了解Linux,但在Windows的情况下,正如你所提到的那样,它通常会执行缓冲,直到缓冲区已满(缓冲区可能是扇区大小的倍数),或者它完全避免缓冲如果写入未对齐或不是完整扇区,则取决于您是否要求缓冲。