文件系统块大小的意义是什么?如果我的文件系统块大小设置为 8K,这是否意味着所有读/写 I/O 都将以 8K 大小发生?因此,如果我的应用程序想要读取偏移 4097 处的 16 个字节,那么将读取从偏移 4096 开始的 4K 块?
在这种情况下,写入如何工作?假设我想写 64 个字节。
文件系统块大小的意义是什么?如果我的文件系统块大小设置为 8K,这是否意味着所有读/写 I/O 都将以 8K 大小发生?因此,如果我的应用程序想要读取偏移 4097 处的 16 个字节,那么将读取从偏移 4096 开始的 4K 块?
在这种情况下,写入如何工作?假设我想写 64 个字节。
你说的对。块大小是文件系统的工作单位。每次读取和写入都以块大小的整数倍完成。
块大小也是文件在磁盘上可以拥有的最小大小。如果你有一个 16 字节的块大小,那么一个 16 字节大小的文件会占据磁盘上的一个完整块。
《实用文件系统设计》一书指出:
块:磁盘或文件系统可写的最小单位。文件系统所做的一切都是由对块进行的操作组成的。文件系统块的大小始终与磁盘块大小相同或更大(整数倍)。
通常,当您必须在编程中处理文件时,您应该使用 Stream 抽象。通过代码进行的 I/O 操作通常是对流的读取和写入;从流中读取和写入流,可以缓冲,以便可以读取或写入文件块。
fs 上的块大小是指映射磁盘表面;次要单个块的大小主要块的数量(以及表中保存文件分配信息的元素)。
因此,操作系统可以根据块大小离散地将文件映射到磁盘上,并具有较小的“文件映射”。据我所知,这不会影响编程语言 API 中的流抽象。