Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当page cache的数据需要刷新时,page cache中的数据交给buffer cache,但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。
在Linux 2.6的内核中Page cache和Buffer cache进一步结合,Buffer pages其实也是Page cache里面的页。从Linux算法实现的角度,Page cache和Buffer cache目前是一样的,只是多了一层抽象,通过buffer_head来进行一些访问管理。可以理解为只有Page cache概念亦可。在Linux 2.6的内核中Page cache和Buffer cache进一步结合,Buffer pages其实也是Page cache里面的页。从Linux算法实现的角度,Page cache和Buffer cache目前是一样的,只是多了一层抽象,通过buffer_head来进行一些访问管理。可以理解为只有Page cache概念亦可。
标准IO:
在 Linux中,这种访问文件的方式是通过两个系统调用实现的:read()和 write()。当应用程序调用read() 系统调用读取一块数据的时候,如果该块数据已经在内存中了,那么就直接从内存中读出该数据并返回给应用程序;如果该块数据不在内存中,那么数据会被从磁盘上读到页高缓存中去,然后再从页缓存中拷贝到用户地址空间中去。如果一个进程读取某个文件,那么其他进程就都不可以读取或者更改该文件;对于写数据操作来说,当一个进程调用了write() 系统调用往某个文件中写数据的时候,数据会先从用户地址空间拷贝到操作系统内核地址空间的页缓存中去,然后才被写到磁盘上。但是对于这种标准的访问文件的方式来说,在数据被写到页缓存中的时候,write()系统调用就算执行完成,并不会等数据完全写入到磁盘上。Linux在这里采用的是我们前边提到的延迟写机制( deferred writes)。如果用户采用的是延迟写机制( deferred writes),那么应用程序就完全不需要等到数据全部被写回到磁盘,数据只要被写到页缓存中去就可以了。在延迟写机制的情况下,操作系统会定期地将放在页缓存中的数据刷到磁盘上。
直接IO:
凡是通过直接 I/O方式进行数据传输,数据均直接在用户地址空间的缓冲区和磁盘之间直接进行传输,完全不需要页缓存的支持。操作系统层提供的缓存往往会使应用程序在读写数据的时候获得更好的性能,但是对于某些特殊的应用程序,比如说数据库管理系统这类应用,他们更倾向于选择他们自己的缓存机制,因为数据库管理系统往往比操作系统更了解数据库中存放的数据,数据库管理系统可以提供一种更加有效的缓存机制来提高数据库中数据的存取性能。
简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到buffer cache。
补充一点,在文件系统层每个设备都会分配一个def_blk_ops的文件操作方法,这是设备的操作方法,在每个设备的inode下面会存在一个radix tree,这个radix tree下面将会放置缓存数据的page页。这个page的数量将会在top程序的buffer一栏中显示。如果设备做了文件系统,那么会生成一个inode,这个inode会分配ext3_ops之类的操作方法,这些方法是文件系统的方法,在这个inode下面同样存在一个radix tree,这里会缓存文件的page页,缓存页的数量在top程序的cache一栏进行统计。从上面的分析可以看出,2.6内核中的buffer cache和page cache在处理上是保持一致的,但是存在概念上的差别,page cache针对文件的cache,buffer是针对磁盘块数据的cache,仅此而已。
"如果一个进程读取某个文件,那么其他进程就都不可以读取或者更改该文件;"对这一句话存在质疑。
原文
http://blog.chinaunix.net/uid-1829236-id-3152172.html
相关推荐
Buffer Cache与Cache的区别在于,Buffer Cache特指Oracle数据库中的数据缓冲区,主要优化的是磁盘I/O,而Cache则涵盖了从硬件层面到操作系统层面的各种缓存机制,包括CPU缓存、文件系统的Page Cache等,其目标是提升...
Linux 操作系统中内存 buffer 和 cache 的区别 在 Linux 操作系统中,内存 buffer 和 cache 是两个重要的概念,它们都是占用内存的,但是它们的作用和特点却不同。本文将详细介绍内存 buffer 和 cache 的概念、区别...
### Linux操作系统中内存buffer和cache的区别 #### 一、引言 在Linux操作系统中,内存管理是一项关键的技术,它直接影响到系统的性能和稳定性。本文将详细介绍Linux系统中内存buffer和cache的区别及其工作原理,...
Page Cache和Buffer Cache之间的关系是,每个Page Cache条目可能包含多个Buffer Cache条目。VFS(虚拟文件系统)处理应用程序与Page Cache之间的数据交换,通过read和write等接口提供服务。内存管理系统在分配和回收...
为了提升文件系统访问速度,Linux内核会利用空闲内存来缓存文件数据(称为Page Cache)和其他类型的缓存(如Buffer Cache)。这样做的目的是减少磁盘I/O操作,从而提高系统性能。 然而,在某些情况下,用户可能会...
5. **内存管理子系统**:Linux内核内存管理子系统负责分配和回收内存,以及维护Page和Buffer Cache。它包括伙伴系统(用于分配连续内存块)和slab分配器(用于高效管理小对象的内存分配)。slab分配器根据对象大小...
解决web.xml中 <page-encoding>UTF-8</page-encoding>报错。错误提示: cvc-complex-type.2.4.a: Invalid content was found starting with element 'page-encoding'. One of '{"http:// java.sun....
缓存(Cache)主要包含两种类型:页高速缓存(Page Cache)和块设备缓存(Buffer Cache)。页高速缓存用于存储文件系统的数据,当程序读取文件时,内核会尝试从缓存中直接获取,从而提高数据访问速度。块设备缓存则...
`buffer_head`结构体中包含了一系列关键字段,如`b_bdev`用于标识块设备,`b_blocknr`用于存储逻辑块号,`b_page`指向对应的物理页,而`b_data`直接指向该块在内存中的数据区域,`b_size`则表示块的大小。...
本章节主要讲解了Linux内核中的文件系统缓冲区,包括缓冲区、缓存、DCache、Inode Cache、Page Cache、Buffer Cache等概念的定义、作用、区别和实现机理。 缓冲区(Buffer)是内存空间的一部分,预留了一定的存储...
- 操作系统层面也有Page Cache,将文件系统中的热数据放入内存,加速文件读写。 6. **Cache的管理与优化**: - Cache过期时间:设置合理的过期策略,避免旧数据占用资源。 - Cache命中率:优化缓存策略,提高...
Linux还采用了Buffer Cache和Page Cache这两种主要的缓存机制,以优化磁盘和内存的交互。Buffer Cache针对磁盘块的读写,而Page Cache针对文件inode的读写。这两种缓存极大地提高了系统性能,减少了I/O操作的延迟。 ...
此外,理解Linux内核的缓冲区缓存机制(比如Page Cache和DMA Buffer)也是至关重要的,这些机制可以帮助系统更高效地处理I/O操作,减少CPU与外设之间的交互次数,从而提高整体性能。 总之,Linux缓冲区是优化系统...
高速缓存机制可以分为两种:Buffer Cache和Page Cache。 Buffer Cache是面向底层块设备的缓存机制,它的粒度是文件系统的块。块设备和系统采用块进行交互,块再转换成磁盘的基本物理结构扇区。 Page Cache是面向...
- **Buffer Cache**: 用于缓存数据块,分为Default Buffer Cache、Keep Buffer Cache和Recycle Buffer Cache三种类型。 - **Large Pool**: 供后台进程使用,例如RMAN备份操作。 - **Java Pool**: 存储Java应用...
- 包括进程内存空间、buffer、cache、slab和pagetable。 - **buffer/cache**: - buffer作为块设备的读写缓冲区。 - cache作为文件系统的缓存。 - **Used内存计算**: - Used = 进程非共享内存 + 共享内存 + ...
The system address space is where the kernel, executive, HAL, boot drivers, page tables, pool, and system cache reside. For specific information regarding address space layout, refer to Inside ...
文件头含有状态、基础信息、键定义和记录信息四个部分,而索引数据则以Block(Page)为单位存储,每个Block只包含同一索引的数据,以提高连续读取性能。 2. 索引Block和Cache Block: 索引Block(Index Block)在...
此外,Physical Disk-Disk Transfers/sec、Processor-% Processor Time、SQL Server Access Methods-Full Scans/sec、Buffer Manager-Buffer Cache Hit Ratio等计数器则分别对磁盘性能、CPU使用、索引扫描和缓冲池...