内存学习(四):内存映射5

简介: 内存学习(四):内存映射5

删除内存映射

系统调用munmap用来删除内存映射,它有两个参数:起始地址和长度。

系统调用munmap的执行流程如图所示,它把主要工作委托给源文件“mm/mmap.c”中的函数do_munmap。

1-munmap

  • (1)根据起始地址找到要删除的第一个虚拟内存区域vma。
  • (2)如果只删除虚拟内存区域vma的一部分,那么分裂虚拟内存区域vma。
  • (3)根据结束地址找到要删除的最后一个虚拟内存区域last。
  • (4)如果只删除虚拟内存区域last的一部分,那么分裂虚拟内存区域last。
  • (5)针对所有删除目标,如果虚拟内存区域被锁定在内存中(不允许换出到交换区),那么调用函数munlock_vma_pages_all以解除锁定。
  • (6)调用函数detach_vmas_to_be_unmapped,把所有删除目标从进程的虚拟内存区域链表和树中删除,单独组成一条临时的链表。
  • (7)调用函数unmap_region,针对所有删除目标,在进程的页表中删除映射,并且从处理器的页表缓存中删除映射。
  • (8)调用函数arch_unmap执行处理器架构特定的处理。各种处理器架构自定义函数arch_unmap,它默认是一个空函数。
  • (9)调用函数remove_vma_list删除所有目标。

内容来自前辈书籍:《Linux内核深度解析》

目录
相关文章
|
3月前
|
存储 C语言
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
74 1
|
3月前
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
63 0
|
3月前
|
缓存 Java
《JVM由浅入深学习九】 2024-01-15》JVM由简入深学习提升分(生产项目内存飙升分析)
《JVM由浅入深学习九】 2024-01-15》JVM由简入深学习提升分(生产项目内存飙升分析)
37 0
|
26天前
|
存储 JavaScript 前端开发
学习JavaScript 内存机制
【8月更文挑战第23天】学习JavaScript 内存机制
22 3
|
17天前
|
消息中间件 Linux 容器
共享内存的创建和映射过程
【9月更文挑战第1天】消息队列、共享内存及信号量在使用前需生成key并获取唯一ID,均通过`xxxget`函数实现。
|
2月前
|
存储 程序员 C++
|
3月前
|
C语言
C语言学习记录——动态内存开辟常见的错误
C语言学习记录——动态内存开辟常见的错误
24 1
|
3月前
|
监控 Linux
深入了解Linux的pmap命令:进程内存映射的利器
`pmap`是Linux下分析进程内存映射的工具,显示内存区域、权限、大小等信息。通过`/proc/[pid]/maps`获取数据,特点包括详细、实时和灵活。参数如`-x`显示扩展信息,`-d`显示设备。示例:`pmap -x 1234`查看进程1234的映射。注意权限、实时性和准确性。结合其他工具定期监控,排查内存问题。
|
3月前
|
程序员 索引
逆向学习汇编篇:内存管理与寻址方式
逆向学习汇编篇:内存管理与寻址方式
36 0
|
3月前
|
程序员 C语言 C++
C语言学习记录——动态内存习题(经典的笔试题)、C/C++中程序内存区域划分
C语言学习记录——动态内存习题(经典的笔试题)、C/C++中程序内存区域划分
121 0

热门文章

最新文章