【操作系统原理】10-Linux的存储管理
一、Buddy内存管理算法
努力让内存分配与相邻内存合并能快速进行
◆ Buddy算法是经典的内存管理算法
◆ 算法基于计算机处理二进制的优势具有极高的效率
◆ 算法主要是为了解决内存外碎片的问题
页内碎片
内部碎片是已经被分配出去(能明确 指出属于哪个进程)的内存空间大于 请求所需的内存空间,不能被利用的 内存空间就是内部碎片。
页外碎片
外部碎片是指还没有分配出去(不属 于任何进程),但是由于大小而无法 分配给申请内存空间的新进程的内存 空闲块。
内存分配原则
◆ 向上取整为2的幂大小
◆ 70k→128k
◆ 129k→256k
◆ 666k→1024k
伙伴系统
◆ “伙伴”指的是内存的“伙伴”
◆ 一片连续内存的“伙伴”是相邻的另一片大小一样的连续内存
◆ 假设存储空间有1M大小
分配100k内存
- 100k向上取2的幂=128k
- 查询是否有128k空闲内存块?
- 没有!查询是否有256k空闲内存块?
- 没有!查询是否有512k空闲内存块?
- 没有!查询是否有1M空闲内存块?
- 有,摘下1M空闲内存块,分配出去
- 拆下512k放在512k的空闲链表,其余的分配出去
- 拆下256k放在256k的空闲链表,其余的分配出去
- 拆下128k放在128k的空闲链表,其余的分配出去
- 分配完毕
回收刚才分配的内存
- 判断刚才分配的内存伙伴在空闲链表上吗?
- 在!移除伙伴,合并为256k空闲内存,判断
- 在!移除伙伴,合并为512k空闲内存,判断
- 在!移除伙伴,合并为1M空闲内存
- 插入1M空闲链表,回收完成
二、 Linux交换空间
◆ 交换空间(Swap)是磁盘的一个分区
◆ Linux物理内存满时,会把一些内存交换至Swap空间
◆ Swap空间是初始化系统时配置的
◆ 冷启动内存依赖
◆ 系统睡眠依赖
◆ 大进程空间依赖