进程申请内存的过程(学习中,请指教)

①当进程开始执行需要申请内存时,会通过malloc函数去申请,此时会申请一个连续的4G虚拟内存空间,并设置相应的页表项,此时并不会分配物理内存,即也不会映射相应物理内存地址。

②当进程代码去读写此页表项的时候,CPU会访问虚拟内存,发现对应的虚拟内存没有映射到物理内存;就会引发缺页中断,此时调用缺页中断函数。

③函数调用时如果有足够的内存,就会分配并将磁盘中此程序的代码与数据拷贝到物理内存上,并完成页表的映射。

如果内存不足则会触发:

  • 后台内存回收(kswapd):在物理内存紧张的时候,会唤醒 kswapd 内核线程来回收内存,这个回收内存的过程异步的,不会阻塞进程的执行。

  • 直接内存回收(direct reclaim):如果后台异步回收跟不上进程内存申请的速度,就会开始直接回收,这个回收内存的过程是同步的,会阻塞进程的执行。

  • 以下图片来源于小林coding ,作者小林coding

     

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值