进程所用内存(包括页表、vma、映射内存)的释放过程 (基于linux2.6.11.12)

又仔细走读了一下代码,是在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(下全局链)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值