Linux文件I/O与缓冲机制详解
1. VFS对系统程序员的重要性
对于系统程序员而言,虚拟文件系统(VFS)的影响十分重要。程序员无需担忧文件所在的文件系统类型或存储介质。像 read() 、 write() 这类通用系统调用,能够对任何受支持的文件系统和存储介质上的文件进行操作。
2. 页面缓存(Page Cache)
页面缓存是内存中用于存储最近从磁盘文件系统访问的数据的区域。磁盘访问速度极慢,尤其是与如今的处理器速度相比。将请求的数据存储在内存中,内核就能从内存中满足后续对相同数据的请求,避免了重复的磁盘访问。
页面缓存利用了时间局部性的概念,即某一时刻访问的资源在不久的将来很可能会再次被访问。因此,首次访问数据时消耗内存进行缓存是值得的,因为它避免了未来昂贵的磁盘访问。
内核首先会在页面缓存中查找文件系统数据。只有当缓存中未找到数据时,内核才会调用内存子系统从磁盘读取数据。所以,首次读取任何数据项时,数据会从磁盘传输到页面缓存,然后从缓存返回给应用程序。如果再次读取该数据,直接从缓存返回即可。所有操作都通过页面缓存透明执行,确保缓存中的数据相关且始终有效。
Linux的页面缓存大小是动态的。随着I/O操作将越来越多的数据带入内存,页面缓存会不断增大,占用所有可用内存。如果页面缓存最终耗尽了所有可用内存,并且有新的内存分配请求,页面缓存会进行修剪,释放最少使用的页面,为“实际”的内存使用腾出空间。这种修剪过程无缝且自动进行。动态大小的缓存使Linux能够利用系统中的所有内存,并尽可能多地缓存数据。
然而,通常将很少使用的数据块交
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



