用户态内存管理

linux内核态的内存管理主要是基于伙伴系统和slab机制,而用户态内存管理主要是VMA虚拟地址空间。

在linux操作系统中,每个进程都通过一个task_struct的结构体描叙,每个进程的地址空间都通过一个mm_struct描叙,c语言中的每个段空间都通过vm_area_struct表示。

task_struct中的mm_struct就代表进程的整个内存资源,mm_struct中的pgd为页表,mmap指针指向的vm_area_struct链表的每一个节点就代表进程的一个虚拟地址空间,即一个VMA。一个VMA最终可能对应ELF可执行程序的数据段、代码段、堆、栈、或者动态链接库的某个部分。

而malloc的过程其实就是把VMA分配到各种段当中,这时候是没有真正分配物理地址的。malloc 调用后,只是分配了内存的逻辑地址,在内核的mm_struct 链表中插入vm_area_struct结构体,没有分配实际的内存。当分配的区域写入数据时,会引发缺页异常,然后会建立物理页和逻辑地址的映射。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 虚拟内存概念 linux内核给每个进程都提供了一个独立的连续的虚拟地址空间。进程访问虚拟内存地址时不需要考虑会不会...
    UPDOWN_GG阅读 1,422评论 0 0
  • >计算机系统中有几类存储设备:cache、内存、外存。cache的存取速度最高,可以和CPU匹配,因此其代价最高,...
    一生信仰阅读 1,284评论 0 0
  • android 为了高效的 IPC 通信做了很多工作,内存管理就属于其中之一。传统的 IPC 传递数据,至少需要2...
    zjfclimin阅读 4,260评论 0 4
  • 最近常常有一种无力感。我知道自己的状态不好,不好已经有阵子了,该好起来了,亲爱的。工作的事情,我认真完成了。但下班...
    牧青的青阅读 331评论 1 1
  • 絮絮叨叨的故事里 总有一些字眼 在与心灵交汇的瞬间 凑在一起 并狡猾地 以诗的方式 对话 与内心深处的自己 我的曾...
    等等老少年阅读 269评论 3 5

友情链接更多精彩内容