存储管理——物理内存管理

一、分区内存管理

单一区存储管理

分区存储管理

  • 固定分区
  • 动态分区

 

单一区存储管理(不分区存储管理)

定义:用户区不分区,完全被一个程序占用

优点:简单,不需要复杂硬件支持,适用单任务OS

缺点:程序运行占用整个内存,即使小程序也如此(内存浪费,利用率低)

 

分区存储管理

定义

  • 把用户区内存划分为若干大小不等的分区,供不同程序使用
  • 适合单用户单任务系统

分类:

固定分区

  • 分区表:记录分区的位置、大小和使用标志
  • 特点:程序装入前,内存已被分区,不在改变。分区大小适应不同大小的程序(要维护分区表)
  • 缺点:浪费内存,大程序无法运行

动态分区

定义:在程序装入时创建分区,使分区的大小刚好与内存的大小相等

特点:

  • 分区的个数和大小均可变
  • 存在内存碎片

需要解决的问题

  • 分区的分配
  • 分区的选择
  • 分区的回收
  • 解决内存碎片的问题

 

二、分区放置策略

分区的分配

空闲区表:描述内存空闲区的位置和大小的数据结构

分配过程(假定用户要求的空间大小为s)

  1. 从空闲区表的第一个区开始,寻找≥s的空闲区
  2. 找到后从分区中分割出大小为s的部分给用户使用
  3. 分割后的剩余部分作为空闲区仍然登记在空闲表中

注意:分割空闲区时一般从底部分割,这样只要改变·空闲区的大小,方便更新空闲区表

 

放置策略(空闲区表排序原则)

  • 按空闲区位置递增排序(首次适应算法)
  • 按空闲区位置递减排序
  • 按空闲区大小的递增排序(最佳适应算法)
  • 按空闲区大小的递减排序(最坏适应算法)

 

首次适应算法

优点:

  • 尽可能地先使用低地址空间
  • 当需要较大分区时再高地址空间有较大的满足可能性

最佳适应算法

优点

  • 尽可能地先使用较小的空闲区,保留大的空闲区
  • 当需要较大分区时由较大的满足可能性

最坏适应算法

优点:大空闲区分割后剩下部分还是很大,还能装下较大的程序

特点:仅作一次查找就可以找到所要分区

 

分区的回收

功能:回收程序释放分区(释放区),登记在空闲表中,以便再分配

回收算法

  • 要考虑释放区与现有空闲区是否相邻
  • 若释放区与现有空闲区不相邻,则直接插入空闲区表
  • 若相邻,则与空闲区合并后更新空闲区表

 

三、内存覆盖技术

覆盖

目的:在较小的内存空间中运行较大的程序

内存分区

  • 常驻区:被某段单独且固定地占用,可划分多个
  • 覆盖区:能被多段共用(覆盖),可划分多个

缺点:

编程复杂:程序员划分程序模块并确定覆盖关系

程序执行时间长:从外存装入内存耗时

 

四、内存交换技术

原理:

  • 内存不够时把进程写到磁盘(换出)
  • 当进程要运行时重新写回内存(换入)

优点

  • 增加进程的并发数
  • 不考虑程序结构

缺点

  • 换入和换出增加CPU开销
  • 交换单位太大(整个进程)

考虑问题

  • 减少交换传送的信息量(模块/段)
  • 外存交换空间的管理方法
  • 程序换入的地址重定位

 

五、内存碎片

  • 过小的空闲区,难实际利用
  • 内存碎片会降低内存有效利用率

解决碎片方法

1、规定门限值

  • 分割内存区时,若剩余部分小于门限值,则全部分配给用户

2、内存拼接技术

  • 将所有空闲区集中一起构成一个大的空闲区

时机:

释放区回收的时候

  • 拼接频率过大,系统开销大

系统找不到足够大的空闲区时

  • 空闲区的管理复杂

定期

  • 空闲区管理复杂

缺点

  • 消耗系统资源
  • 离线拼接
  • 重新定义作业

3、解除程序占用连续内存才能运行的限制

  • 把程序分拆多个部分装入不同分区,充分利用碎片

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值