在linux缓存里写数据,缓存策略

本文介绍了操作系统中存储器的层次结构,从高速缓存到磁盘缓存,阐述了处理器如何通过缓存来解决速度差异问题。讨论了三种主要的写缓存策略:不缓存、写透缓存和回写策略,并详细解释了它们的工作原理和应用场景。回写策略是Linux采用的方法,通过标记脏页并在合适时机回写到磁盘,确保数据一致性。
摘要由CSDN通过智能技术生成

存储器的层次结构

操作系统中的存储器构成了一个金字塔,越往上的存储器速度越快,但是价格也越贵,所以也就越小。为了解决高速的处理器和低速的存储器之间的矛盾,上一层的存储器作为下一层存储器的缓存。

比如要需要操作内存的某个区域时,处理器不会直接去内存读取,而是会去高速缓存中查看该区域是不是被调进来了,如果没有,则把该区域调入高速缓冲区中。那么接下来处理器直接在高速缓存中进行读写操作。

同样的,对于读取磁盘数据,处理器把内存中的某块区域作为磁盘的缓存。那么便可以直接在内存中进行读写。

处理器在缓存中对数据进行读写操作,但是还是需要把该数据写会到原来的区域中去,这接涉及到了一定的策略。

028eb49a5ad897b8a2093c5d469d29e4.png

写缓存策略

(1)第一种策略称为不缓存(nowrite),也就是说高速缓存不去缓存任何写操作。当对缓存中的数据进行写时,将直接跳过缓存,直接写到磁盘,同时标记缓存的数据失效。如果后续需要进行读操作,需要重新从磁盘读取数据。

(2)第二种策略称为写透缓存(write-through cache),即写操作将自动更新缓存,同时也更新磁盘文件。这种操作对保持缓存一致性很有好处,所以不需要将缓存标记为失效。

(3)第三种策略,也是linux所采用的,称为回写(write-back)。在这种策略下,程序执行写操作直接写到缓存中,但是不会直接更新磁盘,而是将高速缓存中被写入的页面标记成“脏”,并加入脏页链表中。然后由一个进程(回写进程)周期性将脏页链表的页写会到磁盘,从而让磁盘中的数据和缓存中的数据一致,最后清理缓存的“脏”页标志。“脏”的意思不是说数据不干净,而是说数据没有同步到磁盘。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值