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结构体来描述其内存对应的物理磁盘位置。
结构体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结构体来描述其内存对应的物理磁盘位置。
相关文章推荐
- JavaScript公有、私有以及受保护的属性和方法
- jquery------显示加载的js时出现中文乱码解决方法
- nodejs安装
- 解决fastjson内存对象重复/循环引用json错误
- css 表格
- json接受服务器数据实现下拉框样式
- 剑指offer19--依次打印队列二叉树中的元素
- 如何设计一个数据字典
- 剑指offer(三十七)之从上往下打印二叉树
- 面向对象的Javascript(5):继承
- jQuery源码分析笔记一
- 面向对象的Javascript(4):重载
- 面向对象的JavaScript(3):私有成员和公开成员
- html5本地存储localStorage 存储json对象存储格式问题
- 面向对象的JavaScript(2):类
- 面向对象的JavaScript(一)命名空间
- 剑指offer32 整数中1出现的次数(从1到n整数中1出现的次数)
- JS学习19(Ajax与Comet)
- js 选择器
- 【牛腩新闻发布系统】——CSS初识