Linux系统中的Page cache和Buffer cache

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

Page cache(页面缓存)

===============================================================================

页缓存或文件缓存,是由好几个磁盘块构成,大小通常为4k,在64位系统上为8k,构成的几个磁盘块在物理磁盘上不一定连续,文件的组织单位为一页, 也就是一个page cache大小,文件读取是由外存上不连续的几个磁盘块,到buffer cache,然后组成page cache,然后供给应用程序。

Page cache在linux读写文件时,它用于缓存文件的逻辑内容,从而加快对磁盘上映像和数据的访问。具体说是加速对文件内容的访问,buffer cache缓存文件的具体内容——物理磁盘上的磁盘块,这是加速对磁盘的访问。

Buffer cache(块缓存)

================================================================================

对物理磁盘上的一个磁盘块进行的缓冲,其大小为通常为1k,磁盘块也是磁盘的组织单位。

buffer cache目的是为在程序多次访问同一磁盘块时,减少访问时间。系统将磁盘块首先读入buffer cache,如果cache空间不够时,会通过一定的策略将一些过时或多次未被访问的buffer cache清空。程序在下一次访问磁盘时首先查看是否在buffer cache找到所需块,命中可减少访问磁盘时间。不命中时需重新读入buffer cache。

对buffer cache的写分为两种:

  • 直接写

这是程序在写buffer cache后也写磁盘,要读时从buffer cache上读

  • 后台写

程序在写完buffer cache后并不立即写磁盘,因为有可能程序在很短时间内又需要写文件,如果直接写,就需多次写磁盘了。这样效率很低,而是过一段时间后由后台写,减少了多次访磁盘的时间。

Buffer cache是由物理内存分配,Linux系统为提高内存使用率,会将空闲内存全分给buffer cache ,当其他程序需要更多内存时,系统会减少cache大小。

Buffer page(缓冲页)

===============================================================================

如果内核需要单独访问一个块,就会涉及到buffer page,并会检查对应的buffer head。

Swap space(交换空间)

===============================================================================

虚拟内存的表现形式。系统为了应付一些需要大量内存的应用,而将磁盘上的空间做内存使用,当物理内存不够用时,将其中一些暂时不需的数据交换到交换空间,也叫交换文件或页面文件中。做虚拟内存的好处是让进程以为好像可以访问整个系统物理内存。因为在一个进程访问数据时,其他进程的数据会被交换到交换空间中。

Swap cache(交换缓存)

===============================================================================

表示交换缓存的大小。Page cache是磁盘数据在内存中的缓存,而swap cache则是交换分区在内存中的临时缓存。

Memory mapping(内存映射)

===================================================================================

内核有两种类型的内存映射:共享型(shared)和私有型(private)。

私有型是当进程为了只读文件,而不写文件时使用,这时,私有映射更加高效。 但是,任何对私有映射页的写操作都会导致内核停止映射该文件中的页。所以,写操作既不会改变磁盘上的文件,对访问该文件的其它进程也是不可见的。

共享内存中的页通常都位于page cache,私有内存映射只要没有修改,也位于page cache。当进程试图修改一个私有映射内存页时,内核就把该页进行复制,并在页表中用复制的页替换原来的页。由于修改了页表,尽管原来的页仍然在 page cache,但是已经不再属于该内存映射。而新复制的页也不会插入page cache,而是添加到匿名页反向映射数据结构。

Page cache V.S Buffer cache

==========================================================================================

磁盘的操作有逻辑级(文件系统)和物理级(磁盘块),这两种Cache就是分别缓存逻辑和物理级数据的。

假设我们通过文件系统操作文件,那么文件将被缓存到Page Cache。

若需要刷新文件,Page Cache将交给Buffer Cache去完成,因为Buffer Cache就是缓存磁盘块的。

最后

现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**

image
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
14513243842)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

Linux内核Page CacheBuffer Cache都是用于缓存文件系统数据的机制,但它们的缓存对象和缓存方式不同。 Page Cache是用于缓存文件系统数据块的机制,它缓存的是文件系统的整个页(通常为4KB)。当应用程序请求访问文件时,内核会首先在Page Cache查找对应的页,如果找到了就直接返回给应用程序,避免了访问磁盘的开销。如果Page Cache没有找到对应的页,则内核会从磁盘读取相应的数据块,并将其缓存到Page CachePage Cache的优点是能够加速对文件的访问速度,提高系统的性能。但是,它也会占用系统的内存资源,如果文件系统的文件过多,Page Cache可能会占用大量的内存资源。 Buffer Cache是用于缓存块设备数据块的机制,它缓存的是块设备的数据块(通常为512字节或4KB)。当应用程序请求访问块设备时,内核会首先在Buffer Cache查找对应的数据块,如果找到了就直接返回给应用程序,避免了访问块设备的开销。如果Buffer Cache没有找到对应的数据块,则内核会从块设备读取相应的数据块,并将其缓存到Buffer CacheBuffer Cache的优点是能够加速对块设备的访问速度,提高系统的性能。但是,它也会占用系统的内存资源,如果块设备的数据块过多,Buffer Cache可能会占用大量的内存资源。 因此,Page CacheBuffer Cache都是用于加速对文件系统或块设备的访问速度的机制,它们的区别在于缓存的对象和缓存的方式不同。Page Cache缓存的是文件系统的整个页,Buffer Cache缓存的是块设备的数据块。Page Cache的缓存方式是基于文件系统的,Buffer Cache的缓存方式是基于块设备的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值