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

读深入理解Linux内核 (第9章 进程地址空间, 第二部分 ---- 内存区域)

2016-11-01 21:46 961 查看

内存区域

内存区域(数据结构:vm_area_struct)定义一段线性区域。下图是进程地址空间,内存描述符和内存区域的关系图。内存描述符指向一个内存区域的链表,链表上的内存区域表达了进程的地址空间。



红黑树

为了支持内存区域的高效检索,插入和删除,linux2.6同时引入红黑树来存储内存区域。

内存区域访问权限

内存区域由多个页面组成。内存区域的访问权限,比如是否可写,可执行等。这些信息必须同步到页对应的页表项里面,这样权限的检测可以通过硬件(页单元电路)执行。

因此,每次增加一个页面到内存区域,都需要根据内存区域的访问权限来设置该页对应的页表项。

内存区域的操作

主要是do_mmap()和do_munmap(),分别扩大和收缩地址空间。

do_mmap()为当前进程创建和初始化一个内存区域,当然该内存区域创建后,也可能和其他内存区域合并。该函数包括参数,文件和偏移(当map一个文件到地址空间时),起始地址,长度,和访问标志等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: