Linux内核源码分析--文件系统(二、高速缓存区)

        高速缓冲区其实就是一段内存地址,这段内存地址是访问块设备上数据的一个桥梁。当然如果没有这个高速缓冲区也是可以的,每次要访问块设备上数据时就直接调用函数去读取块设备就可以。


高速缓存区简介:

        其实这个就好比如,一个很远的地方放着一排的东西(假设有:木匠工具1,木匠工具2,木匠工具3    还有水泥匠工具1,水泥匠工具2,水泥匠工具3。。。等等分类排着)。如果你需要木匠工具1,那么你需要跑很远的地方拿到木匠工具1;当你需要木匠工具2时,你又要跑很远的地方去拿;而这个时候你是没办法工作的,因为你手上没有工作需要的工具,所以你得浪费时间来等待工具被送来。如果工作8小时,其中有4个多小时在等工具送来,那么效率是多低下啊;所以聪明的人类就想了个办法,当你需要木匠工具1时,跑很远的地方去拿,但这次不仅仅是拿木匠工具1了,因为你能想到用木匠工具1,说明很可能你是在做木匠的工作,那其他有关木匠的工具等下也很可能会用到。所以干脆把有关木匠的工具全部都拿来,省的等下跑来跑去。如果需要木匠工具2了,就可以直接从身边拿来用就可以了。这样效率一下子就提高很多了。

        上面的假设有个小问题,如果你把所有的木匠工具拿来时,干完需要木匠工具1的工作后;你突然发现接下来要做水泥匠工作,需要水泥匠工具1;那么你又得屁颠屁颠的去很远的地方拿所有有关水泥匠的工具,然后放到工作的地方,再选择水泥匠工具1拿来工作;当干完需要水泥匠工具1的工作后,发现接下来又要干需要木匠工具2的工作;那你又得去很远的地方拿所有有关木匠工具(假设工作地方很小,只能放一类工具)。。。如此循环,发现效率还更低下(因为从很远的地方拿来很多工具,放在工作地方,然后选择需要的工作再拿来工作;而不是从很远的地方拿来工作;所以这样会比开始更浪费时间),但放心出现这样的概率是非常小的;

        上面的比喻(算比喻吗?假设算吧)其实就是高速缓存区的存在原因;块设备数据就好比那很远的一排工具,高速缓存区就好比身边工作的地方,工作当然就是CPU的运行了;从块设备中读取数据是很慢的(I/O操作相对于内存操作来说是比较慢的),所以为了不让CPU浪费宝贵的时间来等待读取块设备上的数据,就在内存中开辟了一段内存地址用来预获取最近使用过的多块设备块上的数据。当CPU需要访问块设备上的数据时,首先会在缓冲区中查找,如果有幸能找到,那么就直接拿过来使用;如果找不到就没办法,需要从块设备上把查找的数据块读取到高速缓存中(一般会多读取几个存放起来),然后CPU再从高速缓存区中读取需要的数据块;所以总结来说CPU只读内存上的数据,如果要读块设备上的数据,必须先放到高速缓存中,然后CPU才会读;


高速缓存区地址位置:

        高速缓冲区在内存的范围,结束地址在main.c函数中有提到,如果内存大于12MB,高速缓存区末尾地址为4MB(这里选的是16MB的,所以高速缓存区结束地址为4MB)ÿ

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值