内存管理

Linux系统提供了4GB虚拟地址。在linux系统中不使用物理地址,使用的是虚拟地址,所以物理地址需要映射成虚拟地址。

 

0-3G为用户空间,3-4G为内核空间。在内核空间中,0-896M为物理内存映射区(直接映射区),映射方式简单,他们与物理地址只有一个固定的偏移量。


32位的虚拟地址与物理地址的转换如图:1、cr3寄存器中的基地址加上虚拟地址的高10位得到页目录中页表的基地址;2、页表的基地址加上虚拟地址的中间10位得到页表中页的基地址;3、页的基地址加上低12位得到物理地址。

用户空间调用malloc等函数来申请内存,只是得到了虚拟地址,但是没有分配到物理内存,只有在访问地址的时候才真正分配到物理内存。在访问虚拟地址的时候会产生请页异常,然后通过get_free_page(s)从空闲的页框中分配内存。

内核空间中vmalloc申请的内存也只是地址,也是在访问的时候通过请页异常分配的物理内存的。

Kmalloc在进行申请的时候就直接对应了一段物理内存


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值