欢迎来到天天文库
浏览记录
ID:38587686
大小:163.50 KB
页数:36页
时间:2019-06-15
《内存mmap实现原理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、内存mmap实现原理内存mmap实现原理谨以此文纪念过往的岁月。结构体列表1.structrb_node_s2structpage3.structvm_area_struct4.structmm_struct函数列表do_mmapdo_mmap2红黑树结构 Linux内核从2.4.10开始,对虚拟区的组织不再采用AVL树,而是采用红黑树,这也是出于效率的考虑,虽然AVL树和红黑树很类似,但在插入和删除节点方面,采用红黑树的性能更好一些,下面对红黑树给予简单介绍。 一颗红黑树是具有以下特点的二叉树:(1) 每
2、个节点着有颜色,或者为红,或者为黑(2) 根节点为黑色(3) 如果一个节点为红色,那么它的子节点必须为黑色(4) 从一个节点到叶子节点上的所有路径都包含有相同的黑色节点数 红黑树的结构在include/linux/rbtree.h中定义如下:typedefstructrb_node_s{ structrb_node_s*rb_parent; intrb_color;#defineRB_RED 0#defineRB_BLACK 1 structrb_node_s
3、*rb_right; structrb_node_s*rb_left;}rb_node_t;O(∩_∩)O~structpage{ unsignedlongflags; /*Atomicflags,somepossibly *updatedasynchronously*/ atomic_t_count; /*Usagecount,seebelow.*/ union{ at
4、omic_t_mapcount; /*Countofptesmappedinmms, *toshowwhenpageismapped *&limitreversemapsearches. */ struct{ /*SLUB*/ u16inuse;
5、 u16objects; }; }; union{ struct{ unsignedlongprivate; /*Mapping-privateopaquedata: *usuallyusedforbuffer_heads *ifPagePrivates
6、et;usedfor *swp_entry_tifPageSwapCache; *indicatesorderinthebuddy *systemifPG_buddyisset. */ structadd
7、ress_space*mapping;/*Iflowbitclear,pointsto *inodeaddress_space,orNULL. *Ifpagemappedasanonymous *memory,lowbitisset,and
8、 *itpointstoanon_vmaobject: *seePAGE_MAPPING_ANONbelow. */ };#ifUSE_SPLIT_PTLOCKS
此文档下载收益归作者所有