linux mmap申请大内存泄露,关于linux的虚拟内存

今天和同事讨论一个问题就是是否会针对外设创建页表,也就是虚拟内存的本质是什么?以mmap为例,我们将普通的文件通过mmap映射到虚拟内存中,直接操作映射的虚拟内存则可以修改文件,其实现的机制是什么?对于物理内存的mmap原理以及实现机制这个都是知道的。我想问的是我们如何是将存储介质中的文件(毕竟存储介质中文件是不可以直接被CPU操作的,只有通过IO接口来操作的)与虚拟内存联系起来的?

|

大概了解一点:简单来说对于某个普通文件的mmap最终通过VFS之后会调用到具体文件系统inode->i_fop->mmap,而对于很多文件系统来说实际上就是直接generic_file_mmap(),而在mmap某个文件后,操作mmap返回的虚拟地址空间的内容时(通过vma_area_struct判断如果产生page fault时),会调用filemap_fault(),如不在page cache这时候会启动真正的从磁盘读写。

详细的内容估计要把整个的代码分析一下才行。

|

没有仔细分析过,把大致了解的信息列一下,建议找找网上关于swap/vm的资料,有一个可以参考的:

http://bbs.chinaunix.net/thread-2002714-1-1.html,另外可以参考《Understanding the Linux Virtual Memory Manager》和《Linux源代码情景分析》,再对着手头的代码进行分析,这>部分由于涉及到VM/VFS,个人觉得还是有点复杂,:-)

总的来说,关键是分换入(swap in)和换出(swap out)2个方向:VM在满足一定条件时,如内存紧张或是page很久没用时,会启用换出,shrink_page_list -> add_to_swap,再根据page是>否dirty最终调用swapper_space->a_ops->writepage完成换出;换入则是在访问某个进程的虚拟地址产生page fault(页表项解析时),会通过handle_mm_fault -> handle_pte_fault -> do_swap_page -> swapin_readahead完成换入,当然其中还涉及到很多关于换入/换出时关于页表,page,swap内容等大量的处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值