计算机底层知识拾遗(六)理解页缓存page cache和地址空间address_space

本文介绍了Linux内核中页缓存page cache和地址空间address_space的概念。在Linux 2.6内核中,页缓存取代了块缓存,成为主要的缓存机制。页缓存是面向内存和文件的,而地址空间是页缓存与文件系统的桥梁。读写文件时,页缓存用于加速IO操作,脏页需要通过sync或pdflush进程写回。直接IO(O_DIRECT)可绕过页缓存,适用于大日志等场景。
摘要由CSDN通过智能技术生成

在这篇计算机底层知识拾遗(五)理解块IO层 中讲了块缓存buffer cache块缓存,这篇说说页缓存page cache以及相关的地址空间address_space的要点。

在Linux 2.4内核中块缓存buffer cache和页缓存page cache是并存的,表现的现象是同一份文件的数据,可能即出现在buffer cache中,又出现在页缓存中,这样就造成了物理内存的浪费。Linux 2.6内核对两个cache进行了合并,统一使用页缓存在做缓存,只有极少数的情况下才使用到buffer cache。后面会说buffer cache和page cache的区别。先直观看看两者的容量是如何统计的。

在 /proc/meminfo中存储了当前系统的内存使用情况,比如下面这个例子,

Buffers表示buffer cache的容量

Cached表示位于物理内存中的页缓存page cache

SwapCached表示位于磁盘交换区的页缓存page cache

所以实际页缓存page cache的容量 =  Cached + SwapCached


buffer cache和page cache的区别


buffer cache是Unix和早期的Linux内核中主要的缓存组件。我们要理解的是不管是buffer cache还是page cache都是为了处理块设备和内存交互时高速访问的问题

1. buffer cache是面向底层块设备的,所以它的粒度是文件系统的块,块设备和系统采用块进行交互。块再转换成磁盘的基本物理结构扇区。扇区的大小是512KB,而文件系统的块一般是2KB, 4KB, 8KB。扇区和块之间是可以快速转换的

随着内核的功能越来越完善,块粒度的缓存已经不能满足性能的需要。内核的内存管理组件采用了比文件系统的块更高级别的抽象,页page,页的大小一般从4KB到2MB,粒度更大,处理的性能更高。所以缓存组件为了和内存管理组件更好地交互,创建了页缓存page cache来代替原来的buffer cache。

页缓存是面向文件,面向内存的。通过一系列的数据结构,比如inode, address_space, page,将一个文件映射到页的级别,通过page + offset就可以定位到一个文件的具体位置

2. buffer cache实际操作时按块为基本单位,page cache操作时按页为基本单位&

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值