进程所用内存(包括页表、vma、映射内存)的释放过程 (基于linux2.6.11.12)
2016-04-15 11:21
441 查看
又仔细走读了一下代码,是在exit_mmap中释放的页表所用的内存,被ULK带沟里去了,以为在mmdrop里面是否
流程如下
进程终止 -> do_exit -> exit_mm -> mmput
1. 释放进程映射的内存和vma所用内存
mmput -> exit_mmap -> unmap_vmas(&tlb, mm, mm->mmap, 0,~0UL, &nr_accounted, NULL);
mmput -> exit_mmap -> remove_vm_struct
2. 释放进程页表所用内存
(32bit只是释放PTE那个级别,因为其他级别页表(PGD,PUD,PMD)没有用用满,不满足start|end的对其条件;
PT级别都是整页分配,所以满足对其条件进行释放;
64bit这里会释放除了PGD以外所有页面)
mmput -> exit_mmap -> clear_page_range -> clear_pgd_range(释放PGD) -> clear_pud_range()(释放PUD)-> clear_pmd_range (释放pmd)-> pte_free_tlb(释放PTE)
pte_free_tlb -> __pte_free_tlb -> tlb_remove_page -> free_page_and_swap_cache(单核释放page) or tlb_flush_mmu(多核是否page(未达到限定值))
3. 32bit释放PGD、PUD、PMD所用页面
finish_task_switch -> mmdrop -> __mmdrop -> mm_free_pgd -> pgd_free
a. 64bit pgd_free 释放1个PGD页面
b. 32bit PAE 释放3个PMD页面和1个PGD
pgd_free -> kmem_cache_free (释放3个PMD,PGD) -> pmd_dtor 和 pgd_dtor
c. 32bit 释放1个PGD页面
pgd_free -> kmem_cache_free (PGD) -> pgd_dtor(下全局链)
流程如下
进程终止 -> do_exit -> exit_mm -> mmput
1. 释放进程映射的内存和vma所用内存
mmput -> exit_mmap -> unmap_vmas(&tlb, mm, mm->mmap, 0,~0UL, &nr_accounted, NULL);
mmput -> exit_mmap -> remove_vm_struct
2. 释放进程页表所用内存
(32bit只是释放PTE那个级别,因为其他级别页表(PGD,PUD,PMD)没有用用满,不满足start|end的对其条件;
PT级别都是整页分配,所以满足对其条件进行释放;
64bit这里会释放除了PGD以外所有页面)
mmput -> exit_mmap -> clear_page_range -> clear_pgd_range(释放PGD) -> clear_pud_range()(释放PUD)-> clear_pmd_range (释放pmd)-> pte_free_tlb(释放PTE)
pte_free_tlb -> __pte_free_tlb -> tlb_remove_page -> free_page_and_swap_cache(单核释放page) or tlb_flush_mmu(多核是否page(未达到限定值))
3. 32bit释放PGD、PUD、PMD所用页面
finish_task_switch -> mmdrop -> __mmdrop -> mm_free_pgd -> pgd_free
a. 64bit pgd_free 释放1个PGD页面
b. 32bit PAE 释放3个PMD页面和1个PGD
pgd_free -> kmem_cache_free (释放3个PMD,PGD) -> pmd_dtor 和 pgd_dtor
c. 32bit 释放1个PGD页面
pgd_free -> kmem_cache_free (PGD) -> pgd_dtor(下全局链)
相关文章推荐
- Linux基础知识汇总
- linux内核部件分析之——设备驱动模型之class
- linux搭建idea &常出现的错误
- linux内核组件分析之---设备驱动模型之device-driver
- linux内核组件分析之--设备驱动模型之bus
- Centos 6.5 2.6内核升级到4.5.1内核
- Linux查看连接数,并发数
- linux内核组件分析之---设备驱动模型之driver
- Linux下spi驱动开发(1) .
- linux内核部件分析之----设备驱动模型之device
- linux 可打开的文件描述符数
- Linux常用命令 经典版
- rhel6编译安装axel下载工具
- 每日一课_linux mount命令的用法详细解析
- Linux下多线程编程-信号量
- Linux 开启定时计划任务
- Linux文件显示命令:cat、more、less、tail、touch详解
- CentOS如何挂载硬盘※※※※ ---持续跟进文章
- S3c6410 linux内核移植(8)---添加adc驱动、电池电量检测之原理
- Linux后台运行nohup,setsid