[数据缓冲区高速缓存]
内核通过保存一个称为数据缓冲区高速缓存的内部数据缓冲区池来试图减小对磁盘的存取频率。高速缓冲含有最近被使用过的磁盘块的数据
在Linux内核0.11中,它默认最多支持16M的物理内存。对系统内存的分配情况如下:Linux内核占用物理内存最前段的一部分。随后是高速缓冲区,它的最高内存地址为4MB。高速缓冲区被显示内存和ROM BIOS分成两段。剩余的内存部分称为主内存区,当然若系统中还存在RAM虚拟盘,则主内存区前段还要扣除虚拟盘所占的内存空间。示意图如下。
![](https://img-my.csdn.net/uploads/201212/16/1355636758_9401.jpg)
[高速缓冲区的工作原理为]
当内核从磁盘中读取数据时,内核试图先从高速缓冲中读。如果数据已经在该高速缓冲中,则内核可以不必从磁盘上读。如果数据不在该高速缓冲中,则内核从磁盘上读数据,并将其缓冲起来。
写操作与之类似,要往磁盘上写的数据也被暂存于高速缓冲中,以便如果内核随后又试图读它时,它能在高速缓冲中。内核也通过判定是否数据必须真的需要存储到磁盘上,或数据是否是将要很快被重写的暂时性数据,来减少磁盘写操作的频率。
[高速缓存的数据结构]
整个高速缓存由很多缓存块组成,在Linux 0.11版本中,整个高速缓存由307块高速缓存块组成。每个缓存块主要由两部分组成:1、被缓存的数据部分;2、标识该缓存块信息的部分。将标识该缓存块信息的部分称为缓存头,buffer_head。在buffer_head中由指针指向被缓存的数据buffer_data。每个高速缓存块的组成示意图如下
![](https://img-my.csdn.net/uploads/201212/16/1355636789_9080.jpg)
buffer_data指向的缓存数据大小是与文件系统上一个逻辑块的大小相对应的。也就是说,在对数据进行缓存的时候,是以逻辑块为单位的。Linux 0.11中高速缓存相关的数据结构如下所示(代码来自于fs.h)
struct
buffer_head {