页框page
来源:互联网 发布:linux显示行数 编辑:程序博客网 时间:2024/06/07 10:01
物理内存被划分成固定大小的块,称为页框
- 内核以页框为基本单位管理物理内存。
- 内核为每个页框都建立了一个page结构,使用struct page结构体描述一个页框。
page采用了元数据与数据分离的方案
- page结构并不存放在其所描述的页框内
- 专门从内存中分配了若干空间,存储所有页框的page结构
- 从线性地址空间角度,所有page结构都依页框号依次存放在vmemmap开始的地方
- 在2.6的内核版本中,所有的page结构被放在mem_map数组中
下图是Linux内核线性地址空间布局
我们的page结构数组就是存放在线性地址的virtual memory map区,且第一个page结构的起始地址就是0xFFFFEA0000000000。
#define vmemmap \((struct page *)VMEMMAP_START)#define VMEMMAP_START \_AC(0xffffea0000000000, UL)#define _AC(X,Y) (X##Y)
页框号pfn和page结构之间的转换
pfn_to_page: vmemmap + pfnpage_to_pfn:(unsigned long)(page - vmemmap)
我们先不急着分析page结构,因为比较复杂,我们在后面用到page结构中的某些元素时在分析该元素。
在一些系统中,物理地址空间存在许多的空洞——无效区域,内核会为每个页框建立一个page结构。如果包括了空洞区域,将造成很大的空间浪费。
因此,内核需要管理有效区域,只为或尽量只为有效区域中的页框建立page结构
如何管理有效区域?
比如如何提供判断某个页框pfn是否有效的功能?参考接下来要讲的section结构和root结构。
阅读全文
0 0
- 页框page
- page
- page
- @Page
- Page
- page
- page
- page
- Page.RegisterClientScriptBlock Page.RegisterStartupScript
- Page指令(Page Directive)
- 区分->page和.page
- <%@ Page%> page指令属性
- Page Control
- Home page
- Page.IsPostback
- MSDN Page
- Page类
- Page+javabean
- GO之旅(3)
- 关于float有效位数为7位的研究
- SylixOS 定长内存管理
- uva 10082
- iOS-音频
- 页框page
- Python字符串处理:按单词反转
- 8. String to Integer (atoi)
- iOS-视频
- Java知识小结—(1)
- Hadoop学习笔记十一 使用Oozie自动化数据处理(未完)
- 重写Object常用的方法
- 解决mysql数据库:Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)问题
- git 学习资料