Linux环境编程--12 内存管理

连续内存分配

1. 思考点:

 

2.  连续内存分配

1. 为一个用户程序分配一个连续的内存空间。

2. 是早期内存分配模式,应用于内存较少的系统。

3. 三种分配类型:单一连续分配、固定分区分配、变分区分配:

4. 主存通常分为两部分:驻留操作系统;保存用户进程。

5. 操作系统可位于内存低端也可位于内存高端。影响这一决定的主要因素是中断向量的位置。中断向量通常保存在内存低端,因此操作系统通常驻留在内存低端。

 

3.  单一连续分配

单道程序下,仅装有一道用户程序,即整个内存的用户空间由该程序独占,这种分配方案称为单一连续分配。特点:分配管理十分简单,内存利用率低,适用单用户单任务系统。

4. 固定分区分配

1. 预先把可分配的主存空间分割成若干个连续区域,称为一个分区。

2. 分区大小可以一样也可以不一样,但分区大小固定不变,每个分区装一个且只能装入一个程序。所以多道程序的道数,受到分区个数的限制。

3. 在内存分配时,如果有一个空闲分区,则分配给内存;进程运行结束时,其分区被收回。重新分配给其他进程。

4. 固定分区分区大小一样时:缺乏灵活性,程序太小时,浪费内存;程序太大又可能装不下。

5. 分区大小不等时:可以分配多个小分区,适量中分区,少量大分区。

6. 固定分区使用表,管理数据分区的结构是一张表,保存了分区号,大小、起始地址、状态。

5. 可变分区分配

1. 是固定分区方案的延伸,主要适用于批处理环境。

2. 分区(孔):可用的的内存块,不同大小的的分区分布在整个内存中。

3. 进程到来时,它将从一个足够容纳它的分区中分配内存。分区内未分配的内存,仍然是一个分区,下次还可以再用(与固定分区分配的区别)。

4. 操作系统需要管理两类信息:(可以实现的数据结构:链表)

          已分配的分区,已分配分区表

          空的分区,空闲分区表。

5. 可变分区分配是动态存储分配的一种情况,常用存储分配算法:

        首次适应法,分配第一个找到的分区,可以从头查找,也可以从上次查找结束时开始。

        最佳适应法,搜索整个列表,找到合适的最小的分区进行分配。(为了方便查找,可以按分区大小递增排序)

       最差适应法,搜索整个列表,找到合适的最大的分区进行分配。

6. 内存回收情况:

       回收内存块前后无空闲区,直接增加内存块为新的空闲块。

       回收内存块,前有空闲块f1,后面没有空闲块,和f1合并为一个空闲分区,起始地址就是f1的起始地址,大小是两者之和。

       回收内存块,前无空闲区,后面有空闲区f2,和f2合并为一个空闲分区,起始地址为回收区地址,大小为两者之和。

       回收内存块,前有空闲区f1后有空闲区f2,和f1、f2合成成一个空闲区,起始地址为f1的起始地址,大小是三者之和。

7. 碎片:随着进程频繁的装入和移出,空闲内存空间可能被分成小的片段。

           外碎片:整个内存空间可以用来满足一个请求,但它不是连续的。首次适应法和最佳适应法都有这个问题,这个问题可能很严重,最坏情况下,每两个进程间都有空闲块被浪费。

         内碎片:分配的内存可能比申请的内存要大一些,这两者的之间差别是在分区内部,但又不能被使用。(如在固定分区分配方案中)

8. 碎片解决方法:

1. 紧缩方法:解决外碎片,移动内存内容,把小的空闲区合并成一个大的内存块,只有在重定位是动态的时候,才有可能进行紧缩,紧缩在执行时期使用。

2. 紧缩方法的一种实现,可以将所有进程移动到内存的一端;也可以将所有空闲分区移动到一端。为减小开销,应选择移动内容最小的一种。 

3. 另一种解决外碎片问题的的方法是,允许物理地址空间非连续,分页和分段(重点)。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值