我正在研究内核源代码,我注意到了这个功能set_bh_page()
。但是,我无法清楚地理解它的作用。
我只能在fs/buffer.c
文件中找到这条评论:
/* 将缓冲区链接到它的页面 */
set_bh_page(bh,页面,偏移量);
但我仍然不清楚它的作用。
所以,为了说清楚,我想了解这个函数调用与缓冲区和物理页面的关系是什么,以及它是否与页面缓存本身有任何关系。
更新 1:
该函数alloc_page_buffers()
调用 this set_bh_page()
,对此有一些注释,如下所示:
当给定数据区域的页面和每个缓冲区的大小时,创建适当的缓冲区。使用 bh->b_this_page 链表跟踪创建的缓冲区。如果无法创建更多缓冲区,则返回 NULL。
我检查了谁调用了alloc_page_buffers()
,其中一个是read_page()
,具有以下描述:
从文件中读取一页。
我们都读取页面,并将缓冲区附加到页面以记录每个块的地址(使用 bmap)。这些地址将用于稍后写入块,完全绕过文件系统。这种用法类似于处理交换文件的方式,并且允许我们写入文件而不用担心内存分配失败。
所以,通过查看源代码read_page()
,我的理解是buffer_head
分配的必须与其物理页地址相关联,就像直接映射一样。
那是对的吗?