在之前博文 Linux 内核学习笔记:初始化程序(第 4 部分)我们介绍了缓冲区,主要涉及缓冲区管理和初始化。在本文,我们将更深入理解缓冲区。
按照《Linux 内核设计的艺术》的说法,设计缓冲区能给操作系统的运行带来如下两个好处:
- 形成所有块设备数据的统一集散地,对这些数据的管理更方便、灵活。
- 对块设备的数据操作效率更高。原因在于缓冲区中的缓冲块是可以被不同进程共享的。
缓冲区总体结构
缓冲区总体结构如下图所示:
图片来源:《Linux 内核设计的艺术》
其中,buffer_head 和 request 是缓冲区管理非常重要的两个数据结构:
- 缓冲区管理结构(buffer_head)主要负责
进程与缓冲区
中缓冲块的数据交互,在确保数据交互正确的前提下,让数据在缓冲区中停留的时间尽可能长 - 块设备请求项(request)主要负责
块设备与缓冲区
之间的数据交互,在确保数据交互正确的前提下,尽可能地及时将进程修改过的缓冲块中的数据同步到块设备中