首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Linux 内核 内存管理】内存映射相关数据结构 ③ ( vm_area_struct 结构体成员分析 | shared 成员 | anon_vma_chain 成员 | anon_vma 成员 )

在博客 【Linux 内核 内存管理】虚拟地址空间布局架构 ⑦ ( vm_area_struct 结构体成员分析 | vm_start | vm_end | vm_next | vm_prev |vm_rb...) 中 , 分析了 vm_start vm_end vm_next vm_prev vm_rb 这 5 个结构体成员作用 ; 在博客 【Linux 内核 内存管理】内存映射相关数据结构 ② ( vm_area_struct...; struct list_head anon_vma_chain 成员 就是该 anon_vma 实例 组成的 链表 ; /* * A file's MAP_PRIVATE vma can be...成员 anon_vma 结构体 用于 组织 " 匿名内存页 " 被 映射到的 " 用户虚拟地址空间 " , anon_vma 成员指向了 anon_vma 结构体实例 ; struct anon_vma...* Either between this VMA and vma->vm_prev, or between one of the * VMAs below us in the VMA rbtree

2.3K30

DragonOS新版地址映射管理及VMA机制设计

VMA的几个数据结构之间的关系 每个匿名页(物理内存页)对应一个anon_vma结构体。这个结构体内维护一个链表,包含指向所有“映射了这个物理页的VMA”。...也就是说,一旦把物理页映射到VMA内,那么就要把VMA加入到链表中。 2.3....VMA 每个VMA结构体内部包含的信息如下所示, 包含了: 这个VMA管理的地址范围 范围内的页面的权限标志位 这个VMA是否已经映射 如果这个VMA对应的是后备页,存储涉及到的后备页的信息,如文件描述符...将来可通过引入类似Linux的anon_vma_chain的设计来解决。 anon_vma占用空间大:当前会为每个页面维护独立的anon_vma以及链表,这将会导致很大的内存空间占用。...将来可以考虑重用anon_vma,也就是合并相同的anon_vma,以减少内存空间占用。

20030

Linux用户态进程的内存管理

下面闲话少说,开始本篇的内容——进程的内存消耗和泄漏 进程的虚拟地址空间VMA(Virtual Memory Area) 在linux操作系统中,每个进程都通过一个task_struct的结构体描叙,每个进程的地址空间都通过一个...,在缺页中断的处理程序中读出虚拟地址和原因,去VMA中查,发现是用户程序在写malloc的合法区域且有写权限,Linux内核就真正的申请内存,页表中对应一页的权限也修改为R+W。...如,执行代码段时会发生缺页,Linux申请1页内存,并从硬盘读取出代码段,此时产生了IO操作,为major主缺页。...(此图来源于宋宝华老师) 综上,page fault后,Linux会查VMA,也会比对VMA中和页表中的权限,体现出VMA的重要作用。...这里我们用工具 procrank先来看下Linux进程的内存占用量 。 ?

2.8K30

Linux 内核 内存管理】mmap 系统调用源码分析 ⑤ ( mmap_region 函数执行流程 | mmap_region 函数源码 )

); if (vma) goto out; 源码路径 : linux-4.12\mm\mmap.c#1647 检查完毕后 , 开始 创建 " 虚拟内存区域 " ; 2、创建 " 虚拟内存区域 "...); if (vma) goto out; 源码路径 : linux-4.12\mm\mmap.c#1647 在创建 " 虚拟内存区域 " 时 , 如果命中 file 分支 , 则是 创建 " 文件映射...) { error = shmem_zero_setup(vma); if (error) goto free_vma; } 源码路径 : linux-4.12\mm\mmap.c#1671...); 源码路径 : linux-4.12\mm\mmap.c#1710 vma_set_page_prot(vma); 源码路径 : linux-4.12\mm\mmap.c#1743 二、mmap_region...函数源码 ---- mmap_region 函数源码 定义在 Linux 内核源码的 linux-4.12\mm\mmap.c#1602 位置 ; mmap_region 函数源码如下 : unsigned

1.7K20

Linux 内核 内存管理】内存映射相关数据结构 ④ ( vm_area_struct 结构体成员分析 | vm_ops 成员 | vm_operations_struct 结构体成员分析 )

函数指针 6、map_pages 函数指针 7、page_mkwrite 函数指针 三、vm_area_struct 结构体完整源码 四、vm_operations_struct 结构体完整源码 在博客 【Linux...vm_end | vm_next | vm_prev |vm_rb) 中 , 分析了 vm_start vm_end vm_next vm_prev vm_rb 这 5 个结构体成员作用 ; 在博客 【Linux...vm_page_prot 成员 | vm_flags 成员 ) 中 , 分析了 vm_area_struct 结构体中的 vm_mm vm_page_prot vm_flags 成员作用 ; 在博客 【Linux...struct vm_operations_struct *vm_ops; 二、vm_operations_struct 结构体成员分析 ---- vm_operations_struct 结构体 定义在 Linux...内核源码的 linux-4.12\include\linux\mm.h#361 位置 ; /* * These are the virtual MM functions - opening of an

1.7K30

Linux 内核 内存管理】内存映射相关数据结构 ⑤ ( vm_area_struct 结构体成员分析 | vm_pgoff 成员 | vm_file 成员 | vm_private_data )

vm_area_struct 结构体成员分析 1、vm_pgoff 成员 2、vm_file 成员 3、vm_private_data 成员 二、vm_area_struct 结构体完整源码 在博客 【Linux...vm_end | vm_next | vm_prev |vm_rb) 中 , 分析了 vm_start vm_end vm_next vm_prev vm_rb 这 5 个结构体成员作用 ; 在博客 【Linux...vm_page_prot 成员 | vm_flags 成员 ) 中 , 分析了 vm_area_struct 结构体中的 vm_mm vm_page_prot vm_flags 成员作用 ; 在博客 【Linux...vm_area_struct 结构体中的 shared anon_vma_chain anon_vma 成员作用 ; 在博客 【Linux 内核 内存管理】内存映射相关数据结构 ④ ( vm_area_struct...* Either between this VMA and vma->vm_prev, or between one of the * VMAs below us in the VMA rbtree

2.9K20

Linux 匿名页的反向映射

我们知道LINUX的内存管理系统中有”反向映射“这一说,目的是为了快速去查找出一个特定的物理页在哪些进程中被映射到了什么地址,这样如果我们想把这一页换出(SWAP),或是迁移(Migrate)的时候,就能相应该更改所有相关进程的页表来达到这个目的...1、为什么要使用反向映射   物理内存的分页机制,一个PTE(Page Table Entry)对应一个物理页,但一个物理页可以由多个PTE与之相对应,当该页要被回收时,Linux2.4的做法是遍历每个进程的所有...之后确实采用过此方法,为每个页结构(Page)维护一个链表,这样确实节省了时间,但此链表所占用的空间及维护此链表的代价很大,在2.6中弃之不用,但反向映射机制的思想不过如此,所以还是有参考价值的 2、Linux2.6...anon_vma) return ret; list_for_each_entry(vma, &anon_vma->head, anon_vma_node) { /* 循环遍历...Linux采用三级页表: PGD:顶级页表,由pgd_t项组成的数组,其中第一项指向一个二级页表。

3.6K31

Linux用户态进程的内存管理

下面闲话少说,开始本篇的内容——进程的内存消耗和泄漏 进程的虚拟地址空间VMA(Virtual Memory Area) 在linux操作系统中,每个进程都通过一个task_struct的结构体描叙,每个进程的地址空间都通过一个...,在缺页中断的处理程序中读出虚拟地址和原因,去VMA中查,发现是用户程序在写malloc的合法区域且有写权限,Linux内核就真正的申请内存,页表中对应一页的权限也修改为R+W。...综上,page fault后,Linux会查VMA,也会比对VMA中和页表中的权限,体现出VMA的重要作用。...这里我们用工具 procrank先来看下Linux进程的内存占用量 。 ?...物理地址和虚拟地址的分布 Linux内核内存管理算法Buddy和Slab

2.7K41

Linux可执行文件与进程的虚拟地址空间

作者简介: 本文由西邮陈莉君教授研一学生贺东升编辑,梁金荣、张孝家校对 建议结合之前的《linux的内存寻址方式》看。...Linux可执行文件与进程的虚拟地址空间 一个可执行文件被执行的同时也伴随着一个新的进程的创建。...Proc目录下的进程虚拟地址空间布局 Linux在装载可执行文件的时候,会将这些segment映射到进程的地址空间中。映射的时候,这里面的segment会对应一个VMA。...Linux将进程虚拟地址空间中的一个段叫做虚拟内存区域(VMA)。在/proc目录下,可以查看一个进程的虚拟地址空间,通过命令 cat /proc/pid/maps ?...这里面的每一行都对应一个VMA,每一个VMA都通过vm_area_struct结构体来描述。结构体中的vm_start和vm_end是VMA的起始地址和结束地址,还有其他的一些域来描述VMA的权限等。

4.1K30
领券