实验九Linux内存管理
实验九Linux内存管理
1.2 Linux内存管理—虚拟内存的实现
内存分配和回收机制
请求页机制
地址映射机制
缓存和刷新机制
交换 机制
2 Linux内存分配
32位系统: 线性地址 31
22 21 12 11
0
页目录 页号 页偏移量
页目录
3号控制寄存器
…… …… ……
页表
物理 地址
物理页
64位系统:
❖ 利用free和vmstat命令观察主存分配结果及使用情况
128KB 适合需要频繁申请释放相同大 小内存块时使用
kmalloc
基于kmem_cache_alloc实现 128KB 最常见的分配方式,需要小于 页框大小的内存时使用
vmalloc
建立非连续物理内存到虚 拟地址的映射
物理不连续,适合需要大内存, 但对地址连续性没有要求的场 合
dma_alloc_coherent 基于_alloc_pages实现
页全局目录(PGD) 页上级目录(PUD) 页中间目录(PMD)
页表(PT)
…
…
…
…
物理块
1.2 Linux内存分配—常用的内存分配函数
函数名 _get_free_pages
分配原理 直接对页框进行操作
最大内存
其他
4MB 适用于分配较大量的连续物理 内存
kmem_cache_alloc 基于slab机制实现
malloc():不能初始化所分配的内存空间 calloc():初始化为零
❖ 释放原先申请的内存空间free()
释放内存后,不能再去访问被释放的内存空间 不能两次释放相同的指针 C语言中,malloc/free 需配套使用
实验九 Linux内存管理
❖ 预备知识
Linux内存管理 Linux内存分配 Linux内存回收
❖ 堆内存的分配:malloc()、realloc () 、new () ❖ 对内存的回收:free () 、delete ()
❖ 内存泄漏的堆积,会最终消耗尽系统所有的内存
使用kill命令回收内存 使用工具软件Memprof回收内存
实验九 Linux内存管理
❖ 预备知识
Linux内存管理 Linux内存分配 Linux内存回收
4MB 适用于DMA操作
Ioremap
实现已知物理地址到虚拟 地址的映射
适用于物理地址已知的场合, 如设备驱动
alloc_bootmem
在启动kernel时,预留一段 内存,内核看不见
小于物理内存大小,内存管理 要求较高
1.3 Linux内存回收
❖ 堆内存:程序从堆中分配的、大小任意的、使用完 后必须显示释放的内存
❖ 实验指导
内存信息的监视 内存的申请和释放
❖ 实验目的、内容
2.1 内存信息的监视
❖ 用free命令监控内存使用情况
❖ 用vmstat命令监视虚拟内存使用情况
2.2 内存的申请和释放
❖ 动态分配内存空间malloc()、calloc()
malloc():一个参数,即要分配的内存空间大小 calloc():两个参数,即元素数目和每个元素的大小
❖ 实验指导
内存信息的监视 内存的申请和释放
❖ 实验目的、内容
3.1 实验目的
❖ 掌握Linux虚拟内存管理的原理 ❖ 掌握Linux中动态内存操作函数的使用方法 ❖ 掌握Linux监测内存使用情况的方法
3.2 实验内容
❖ 利用系统提供的内存操作函数进行内存的申请、使 用和释放
❖ 利用系统提供的内存操作函数进行内存的申请、调 整、使用和释放