您的位置:首页 > Web前端

Page和Buffer Head的区别

2016-05-28 22:32 337 查看
1. page

结构体struct page定义在/include/linux/mm_types.h,大小是32字节。描述的是一片实际物理内存信息,一般是4K大小,简称页。在这32字节里面保存有状态信息,和文件系统,内存交换等方面的信息,唯独没有保存物理内存的偏移,即其代表4K是物理内存什么位置的4K。

这个信息实际是被隐式保存起来了,因为所有的struct page结构体都共同保存在同一个mem_map数组里面,数组下标实际就是物理内存位置。因此page就代表了内存。

2. Buffer Head

Buffer Head的结构体定义在/include/linux/buffer_head.h。一般不容易理解其作用,代码上也经常和page混在一起。它其实表针的不是内存,虽然名称里面有buffer字眼。它实际代表的是物理内存映射的块设备偏移位置。

举个简单例子,从块设备/dev/block/sda的第512 sector上的读取一个4K大小的数据,需要用一个page结构来缓存这个数据,而这个512 sector偏移这个信息则由buffer_head来保存。

所以page是存数据,buffer_head是存偏移。两个结构体内部互有指针保存相互的地址。一般一个buffer_head也表征4K大小,这样一个buffer_head正好对应一个page。某些文件系统可能采用更小的block size,例如1K,或者512字节。这样一个page最多可以用4或者8个buffer_head结构体来描述其内存对应的物理磁盘位置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: