首页 百科知识 页高速缓存

页高速缓存

时间:2022-10-09 百科知识 版权反馈
【摘要】:4.8.2 页高速缓存页高速缓存用来加速对磁盘上的映像和数据的访问。页高速缓存用来缓存某个文件的逻辑内容,并通过文件的VFS索引节点和偏移量访问。下面一段源代码就是把读入的页存于缓存中:void add_to_page_cache_locked{  spinlock_t * pg_lock;  if(!

4.8.2 页高速缓存

页高速缓存用来加速对磁盘上的映像和数据的访问。页高速缓存用来缓存某个文件的逻辑内容,并通过文件的VFS索引节点和偏移量访问。页从磁盘上读到物理内存时就缓存在页高速缓存中。下面一段源代码就是把读入的页存于缓存中:

void add_to_page_cache_locked(struct page * page,struct address_space * mapping,

               unsigned long index)

{

  spinlock_t * pg_lock;

  if(!PageLocked(page))

    BUG();

  page_cache_get(page);

  pg_lock=__PAGECACHE_LOCK(mapping, index);

  spin_lock(pg_lock);

  page-〉index=index;

  add_page_to_inode_queue(mapping, page);

  add_page_to_hash_queue(page, page_hash(mapping, index));

  lru_cache_add(page);

  spin_unlock(pg_lock);

}

当一个磁盘块被调入内存时,它首先存放在一个buffer cache中,每个buffer cache与一个磁盘块对应,它相当于磁盘块在内存中的表示,每个buffer cache都有一个对应的描述符,叫做buffer_head。buffer_head的目的在于描述磁盘块和物理内存缓冲区之间的映射关系。因此,buffer_head作为I/O操作的单元,不仅描述了从磁盘到物理内存的映射,而且还是所有块I/O操作的容器。在2.6节中,I/O操作系统基本容器变为bio结构了。

page cache是由内存中的物理页组成的,缓存中的每一页对应着磁盘中的多个块。其核心数据结构为address_space。在执行I/O操作,比如read()操作,内核首先会检查数据是否已经在页高速缓存中,如果在,那么内核就可以马上从页高速缓存中得到所需要的页,而不需要从磁盘中读取数据了。

page cache是VFS的需要,buffer cache是面向设备的,buffer cache是以块为单位的,属于设备驱动层,page cache是以页为单位的,属于文件系统层,策略不同,联系不同,还可能没联系。内核中在多处使用了page cache策略,比如页面交换、磁盘文件的读取。

系统在读磁盘文件时,是以块为单位读取,并放在内存中(buffer cache),由buffer_head或bio记录其映射信息。由几个块构成一页(page cache),由address space记录页内容和inode(文件)之间的联系。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈