物理内存连续内存分配

内存管理的要求:

抽象:逻辑(虚拟)地址空间;

保护:独立地址空间;

共享:访问相同内存;

虚拟化:更大的地址空间

内存管理方式:

重定位,relocation,段地址+偏移;

分段,segmentation,代码,数据,堆栈分成三块,每段连续;

分页,paging,内存分为最基本的单位,房子的砖块;

虚拟存储:virtual memory,Linux采用按需页式虚拟存储;

地址空间定义:物理地址空间——硬件支持的地址空间;

              逻辑地址空间——在CPU运行的进程看到的地址;

逻辑地址生成:

编辑时:起始地址已知,如果起始地址改变,必须重新编译(功能手机,写死的);

加载时:起始位置未知,编译器可重定位relocatable code,在加载时,生成绝对地址(智能手机);

执行时:执行代码可移动,需地址转换(映射)硬件支持;

 

CPU:ALU(逻辑地址内存内容),MMU,依据页表(逻辑地址物理地址的转换),CPU控制逻辑(给总线发物理请求)

内存:发送物理地址给CPU,或接受CPU数据大物理地址

操作系统:建立逻辑地址LA和物理地址PA的映射


连续内存分配和内存碎片:

连续内存非配:给进程分配一块不小于指令大小的连续物理内存区域;

内部碎片:分配单元内部的未被使用的内存,取决于分配单元大小是否取整;

外部碎片:分配单元之间的未被使用的内存;

 

动态分区分配:被加载执行时,分配以及进程执行大小可变的分区,分区的地址是连续的;

动态分区分配策略:最佳匹配First-fit,最佳匹配Best-fit,最差匹配Worst-fit;

最先匹配First-Fit Allocation:分配n个字节,使用第一个可用的空间比n大的空闲块,空闲分区按地址排序,优点是简单、在高地址空间有大块的空间分区;缺点是外部碎片、分配大块时较慢(从前往后找)。

最佳匹配Best-Fit  Allocation:分配n字节分区时,查找并使用不小于n的最小的空闲区;空闲分区列表按照大小排序,优点是分配储存在小时效果很好,减小外碎片;缺点是外部碎片,容易产生很多无用的小碎片;

最差匹配Worst-fit Allocation,使用不小于n的最大的空闲区;空闲区列表从大到小排序,中等大小分配效果最好,缺点是:容易破坏大的空闲区

碎片整理:调整进程占用分区的位置,来减少或避免分区碎片

碎片紧凑compaction,通过移动分配给进程的内存分区合并外部碎片,条件是可以动态重定位。分区对换Swapping  in/out,通过抢占并回收处于等待状态进程的分区,以增大可用内存空间

伙伴系统Buddy System:整个可分配的分区大小2u,每次进行切半处理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值