linux内核--用户态内存管理
在上一篇博客“内核内存管理”中,描述的内核内存管理的相关算法和数据结构,在这里简单描述用户态内存管理的数据结构和算法。
一,相关结构体
与进程地址空间相关的全部信息都包含在一个叫做“内存描述符”的数据结构mm_struct中,进程描述符的mm字段指向社个结构。
linux通过vm_area_struct的对象实现线性区,每个线性区表示一个线性地址空间。其中重要字段如下:
struct vm_area_struct
{
...
unsigned long vm_start;//线性区间的第一个线性地址
unsigned long vm_end;//线性区间外的第一个线性地址
struct vm_area_struct * vm_next;//进程拥有的线性区间链表的下一个线性区
struct rb_node vm_rb;//用于红-黑树数据结构
...
}
二,数据结构与算法
1,进程拥有的线性区以链表的形式链接,而且以红黑树的形式排序。红黑树是一种比较平衡的二叉查找树。复杂度为log2N。
2,当插入或删除一个线性区描述符时,内核通过红黑树搜索前后元素,并用搜索结果快速更新链表而不用扫描链表。
算法思想很简单,不再赘述。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。