linux vma,VMA(虚拟内存空间)_百度百科

VMA

(虚拟内存空间)

编辑

锁定

讨论

上传视频

本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!

VMA全称为virtual memory area,指虚拟内存空间,又称作线性区,表示一个线性区间。

中文名

虚拟内存空间

外文名

virtual memory area称    作

称作线性区

描    述

表示一个线性区间

VMA含义简介

编辑

从user process 角度来说明的话,VMA 是 user process 里一段 virtual address space 区块;virtual address space 是连续的记忆体空间,当然VMA也会是连续的空间。VMA 对 Linux 的主要好处是,可以使记忆体的使用更有效率,并且更容易管理 user process address space。

每个线性区描述符表示一个线性区间。进程所拥有的线性区从来不重叠,并且内核尽力把新分配的线性区与相邻的现有线性区进行合并。如果两个相邻线性区的访问权限匹配,就把它们合并在一起。为了存放进程的线性区,Linux既使用了链表(查找链表的时间复杂度是O(n)),也使用了红黑树(查找红黑树的时间复杂度是O(logn))。这两种数据结构包含指向同一线性区描述符的指针,当插入或删除一个线性区描述符时,内核通过红黑树搜索前后元素,并用搜索结果快速更新链表而不用扫描链表。

进程的vm_mm链接着属于该进程的所有线性区间,如果CPU要访问的地址(虚拟地址)不属于任何一个线性区(即addrss不在任何一个线性区的vm_start~vm_end内,典型错误就是访问了NULL指针指向的地址),就会产生段错误。

VMA数据结构

编辑

(参考自linux-2.6.11.11/include/linux/mm.h)如下:

structvm_area_struct{

structmm_struct*vm_mm;/*Theaddressspacewebelongto.*/

unsignedlongvm_start;/*Ourstartaddresswithinvm_mm.*/

unsignedlongvm_end;/*Thefirstbyteafterourendaddresswithinvm_mm.linkedlistofVMareaspertask,sortedbyaddress*/

structvm_area_struct*vm_next;

pgprot_tvm_page_prot;/*AccesspermissionsofthisVMA.*/

unsignedlongvm_flags;/*Flags,listedbelow.*/

structrb_nodevm_rb;

/*Forareaswithanaddressspaceandbackingstore,linkageintotheaddress_space->i_mmappriotree,orlinkagetothelistoflikevmashangingoffitsnode,orlinkageofvmaintheaddress_space->i_mmap_nonlinearlist.*/

union{

struct{

structlist_headlist;

void*parent;/*alignswithprio_tree_nodeparent*/

structvm_area_struct*head;}vm_set;

structraw_prio_tree_nodeprio_tree_node;

}shared;

/**Afile'sMAP_PRIVATEvmacanbeinbothi_mmaptreeandanon_vma*list,afteraCOWofoneofthefilepages.AMAP_SHAREDvma*canonlybeinthei_mmaptree.AnanonymousMAP_PRIVATE,stack*orbrkvma(withNULLfile)canonlybeinananon_vmalist.*/

structlist_headanon_vma_node;/*Serializedbyanon_vma->lock*/

structanon_vma*anon_vma;/*Serializedbypage_table_lock*/

/*Functionpointerstodealwiththisstruct.*/

structvm_operations_struct*vm_ops;

/*Informationaboutourbackingstore:*/

unsignedlongvm_pgoff;/*Offset(withinvm_file)inPAGE_SIZEunits,*not*PAGE_CACHE_SIZE*/

structfile*vm_file;/*Filewemapto(canbeNULL).*/

void*vm_private_data;/*wasvm_pte(sharedmem)*/

unsignedlongvm_truncate_count;/*truncate_countorrestart_addr*/

#ifndefCONFIG_MMUatomic_tvm_usage;/*refcount(VMAssharedif!MMU)*/

#endif

#ifdefCONFIG_NUMA

structmempolicy*vm_policy;/*NUMApolicyfortheVMA*/

#endif

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值