在学习cache之前,我相信大家对缓存和缓冲区的概念是否能够分析清楚?
这个我在学习的时候对这两个概念很是迷惑,接下来先介绍下cache和buffer的区别。
A cache is something that has been "read" from the disk and stored for later use. cache is typically frequently requested disk I/O.if multiple process are accessing the same files,much of those files will be cachee to improve performance.
从上面的解释可以看出:缓存就是一个用于存储经常要访问的数据,来实现系统整体性能的提升。
A buffer is something that has yet to be "write" to disk.buffer are allocated by various processes to use as input queue,etc.A simple exaplanation of buffer is that they allow process to temporarily store input in memory until the pricess can deal with .
缓冲区就是一个用来平衡不同设备读写速度的差异,临时存储数据的一个空间。它不像cache,所访问的数据一次就被读或者写走。很难实现某些数据的重复使用。
下来我主要就cache在内核里面的作用做简要介绍。
cache在内核里面做要分为page cache和buffer cache.他们的主要区别是第一个主要用来进行缓存文件数据,现在page cache也可以通过adderss_space缓存其他类型的数据。buffer cache主要针对磁盘块的缓存。比如对于超级块的操作就要使用buffer cache。接下来我主要介绍page cache。
页高速缓存是由内存中的物理页面组成的,其内容对应磁盘上的物理块。也高速缓存的主要作用就是在读或者写数据的时候,都是先通过cache来输入或查找数据,然后再和磁盘或应用程序交互。cache的使用极大的提升了系统的性能。
页高速缓存的主要任务:是获得一些物理内存页,以加速在块设备上按页为单位的执行的操作。
对于一个读操作:内核开始读一个数据,首先检查数据是否在页高速缓存,如果在,则放弃访问磁盘,如果不在,就要通过I/O操作读数据,然后把数据存入cache中。
对于写操作有三种情况:1、不缓存。这种操作比不是用缓存效率还低。因为它要使缓存中的数据失效。
2、write-through cache。直接把缓存中的数据放入磁盘,这种方法的优点是使缓存与磁盘数据实时保持一致。
3、writeback(linux使用的写策略)。这种操作是把缓存中的数据不必立即放入磁盘,而是经过一段时间合并多个数据,并标记为脏,然后将脏数据回写到磁盘。这种操作提升了系统的处理能力。但是这种方法有一个致命的缺点就是如果突然断电,保存在内存中来不及回写的脏数据就会丢失。
阅读(1455) | 评论(0) | 转发(0) |