linux buff/cache

 我来答
机器1718
2022-06-23 · TA获得超过6805个赞
知道小有建树答主
回答量:2805
采纳率:99%
帮助的人:158万
展开全部

要理解下面内容,最好对操作系统存储有一定的了解,包括缺页中断等对于物理内存的使用方式和cpu操作硬盘的大概过程等。

linux存在系统buff/cache和CPU cache不同的缓存机制,系统的buff/cache是用于提高硬件IO的操作效率,cpu cache的左右是提高cpu操作内存的效率,这摘抄部分关于系统cache的内容,关于cpu内容的后续会补上。

我们在用户层面上对磁盘文件的各种访问,体现在内核里,则最终转化为针对磁盘(块设备)的一系列I/O操作。

扇区是块设备的基本单元,也是最小的寻址单元,但是内核却并不是按照扇区来执行磁盘操作,而是于扇区之上又抽象出了一个“块”的概念。内核执行的所有磁盘操作都是按照块来进行的,每个块的大小必须数倍于扇区,而且不能超过一个页面的长度,所以块通常的大小是512Byte、1KB或者4KB。

内核只能基于块来访问物理文件系统,所以与扇区是块设备的最小寻址单元相对应,块也被称为是文件系统的最小寻址单元。一个磁盘块被调入内存时,它需要存储在一个缓冲区中,这个缓冲区就是块在内存中的表示,它在内核中使用structbuffer_head来描述。每个块在内存中都与一个缓冲区相对应,同时都拥有一个buffer_head对象。

内核只能基于块来访问物理文件系统,所以与扇区是块设备的最小寻址单元相对应,块也被称为是文件系统的最小寻址单元。一个磁盘块被调入内存时,它需要存储在一个缓冲区中,这个缓冲区就是块在内存中的表示,它在内核中使用structbuffer_head来描述。每个块在内存中都与一个缓冲区相对应,同时都拥有一个buffer_head对象。

因为内核基于块来访问物理文件系统,而磁盘块与内存中的缓冲区又是一一对应的映射关系,所以为了提高对磁盘的存取效率,内核引入了缓冲区缓存的机制,将通过VFS访问的块的内容缓存在内存中。

在旧版本的内核中,page cache和buffer cache是两个独立的缓存, 前者缓存页,后者缓存块,但是一个磁盘块可以在两个缓存中同时存在,因此除了耗费了额外的内存外,还需要对两个缓存中的内容进行同步操作。 从2.4.10内核开始,buffer cache不再是一个独立的缓存,如图10.8所示的那样,它被包含在page cache中,通过page cache来实现。 对于4KB大小的page来说,根据不同的块大小,它可以包含1~8个缓冲区。

摘自《linux内核修炼之道》

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式