对Linux内存管理的整体理解

内核中内存的管理与分配

内存的分配归根到底是由伙伴系统分配内存页面;

伙伴系统之上就是zone,它对内存的预留空间的设置和管理;
__alloc_pages()是内核中对内存页面分配的最核心函数,它尽最大能力的分配所需要的内存页;
slab是为了频繁利用的结构体而设置的cache,其基于页的分配;

对内核中896MB之上的连续虚拟内存的分配(vm_struct), 基本操作就是先分配不连续的页面page,然后将这些page与页表项关联;这些页表项的更改是在内核页表中,进程的相应页表并不改变,只有在访问的时候出现缺页,然后就会去内核中复制!

在进程要求分配线性地址空间时,系统只是象征性的创建相应的页表和vm_struct结构,后者是对内存区域的管理结构,进程中内存区域的权限可能不一样;进程真正的使用物理内存应该是利用缺页异常机制!

用户空间中进程的内存分配和管理

虚拟地址与物理地址的关联是依靠页表项,页表项中有相应的物理地址,那么page结构体的作用何在?

page结构体中是关于该物理内存页的相关属性,通过mmap[address>>PAGE_SHIFT]可以定位到该page的位置,读取该物理页相应的状态

进程的用户级堆栈都是特殊的内存区域(vm_struct),对堆栈的管理就是对vm_struct的管理
创建进程内存空间的基本原理:写时复制,缺页异常机制,按需分配;
进程内存空间管理由2部分组成:虚拟内存区域(vm_struct)和多级页表

新页面的分配,基本步骤是先分配一个物理页面,然后在页表中与相应的页表项关联

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值