您的位置:首页 > 运维架构 > Linux

深入理解Linux内核个人小结9---进程地址空间

2012-10-02 11:05 639 查看
主要包括两部分: 进程地址空间的结构,进程动态内存的推迟分配(通过请求调页与缺页中断来实现的)。

推迟分配:用户态进程请求动态内存时,并未立即获得请求的页框,而是仅仅获得对一个线性区的访问权,仅当要用此区域时才真正通过缺页中断分配页框;通过这增加了系统中空闲页框的平均数,从而能够更好的利用空闲内存。

一. 进程的地址空间:

每个用户态进程都拥有自己的进程地址空间(0-3G),而内核地址空间(第4G)是所有进程所共享的(通过中断或系统调用来使用)。

进程描述符--->内存描述符--->线性区--->线性地址空间 : 注意后三者间的对应关系(本节核心)

无效线性地址的两种情况: 编程错误引发的无效地址, 由缺页引发的无效地址。

内核线程不使用线性区,故而其对应的进程描述符字段为NULL。但是其active_mm字段会被初始化为前一个运行进程的内存描述符。

线性区:

两种组织结构: 链表(顺序扫描用)与红黑树(快速确定指定地址的线性区)。进程内线性区不会发生重叠。若其相邻且权限一致则可进行合并操作。

相关权限:线性区的访问权限,页表访问权限,页描述符的flag字段标志。

线性区的创建及删除等操作及相应的辅助函数。

二. 缺页异常:

一个流程图:



三. 进程地址空间的创建爱你及删除,堆的管理

堆: 每个Unix进程都拥有一个特殊的线性区(堆),通过其用于满足进程动态内存的的请求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: