为什么文件系统的读-修改-写周期单位为页大小?
为什么文件系统的读-修改-写操作以内存页为单位
你提到的现象是完全正确的,哪怕只修改文件中的1个字节,操作系统也会按页大小读取整块内容,修改后再整页写回,核心原因可以归纳为三类:
- 操作系统IO路径的统一设计
文件内容默认都会先加载到内存的**页缓存(Page Cache)**中再供进程读写,而内存本身就是按页为单位管理的,文件内容和内存页是一一映射的关系。你修改单个字节本质修改的是内存中对应页的副本,后续刷回磁盘时自然会以页为单位写入,不需要额外做拆分,大幅简化了文件系统和内存管理模块的设计复杂度。 - 底层存储的物理限制
磁盘、SSD等块设备本身就不支持按字节寻址,最小读写单位通常是512B/4KB的扇区,高端SSD的物理页甚至能达到16KB/32KB,本身就要求读写必须覆盖整个最小单元。操作系统的默认页大小(通常为4KB)刚好和绝大多数块设备的最小读写单位对齐,直接用页做操作单位可以避免读写不对齐带来的额外性能损耗。 - 元数据开销的权衡
如果真的支持按字节为单位做读-修改-写,操作系统需要维护粒度极细的修改记录、块分配等元数据,元数据本身的存储和计算开销会远大于修改少量字节带来的收益。按页统一管理时,脏页标记、空间分配等逻辑都非常简单,整体 overhead 极低。
内容的提问来源于stack exchange,提问作者williammli
相关产品推荐
相关产品推荐

