物理内存管理

Posted iamfatotaku

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了物理内存管理相关的知识,希望对你有一定的参考价值。

7.2.1 分区内存管理

把内存分为若干个区给用户使用

  • 单一区存储管理
  • 分区存储管理
    • 固定分区
    • 动态分区

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

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

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

缺点:

  • 程序运行占用整个内存,即使小程序也是如此
    • 内存浪费,利用率低

分区存储管理

定义:

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

分类:

  • 固定分区
  • 动态分区

固定分区

把内存固定地分为若干大小不等的分区供各个程序使用。每个分区大小和位置固定,系统运行期间不再重新划分。

分区表:记录分区位置、大小和使用标志

固定分区的例子(4个分区为例)

技术图片
区号 大小 起址 标志
1 16K 20K 未占用
2 32K 36K 未占用
3 64K 68K 未占用
4 128K 132K 未占用

3个程序被占用

技术图片

区号 大小 起址 标志
1 16K 20K 已分配
2 32K 36K 已分配
3 64K 68K 已分配
4 128K 132K 未占用

使用特点:

例:IBM的OS/360采用了固定分区的方法,适合具有固定任务数的多道程序系统

  • 在程序装入前,内存已被分区,不再改变

  • 每个分区大小可能不同,以适应不同大小的程序

  • 系统维护分区表,说明分区大小、地址和使用标志

固定分区的缺点

  1. 浪费内存:程序比所在分区小
  2. 大程序可能无法运行:程序可能比最大分区大

建议

  • 根据分区表安排程序的装入顺序,使得每个程序都能找到合适的分区运行;
  • 当程序大小、个数、装入顺序等都固定时,内存使用效率很高。

动态分区

定义:在程序装入时创建分区,使分区大小刚好与程序大小相等。解决固定分区浪费内存和大程序不能运行的问题。

特点:分区动态建立

动态分区例子

技术图片

动态分区存在的问题

技术图片

动态分区的特点

  • 分区的个数和大小均可变动;

  • 存在内存碎片

动态分区需要解决的问题

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

7.2.2 分区放置策略

分区的分配

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

技术图片

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

空闲区表

位置 大小
30K 20K
66K 24K
120K 8K
  1. 从空闲区表中的第一个区开始,寻找≥SIZE的空闲区;

  2. 找到后从分区中分割出大小为SIZE的部分分配给用户使用;

  3. 分割后的剩余部分作为空闲区仍然登记在空闲区表中。

    注意:分割空闲区时一般从底部分割

分区的选择—放置策略

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

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

首次适应算法

前提

空闲区表按首地址递增排序

特点/优点

  • 尽可能得先利用低地址空间,保证高地址空间有较大空闲区

  • 当大程序需要较大分区时,满足的可能性较大;

最佳适应算法

位置 大小
120K 8K
30K 20K
66K 24K

前提

空闲区按大小递增排序

特点/优点

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

最坏适应算法

位置 大小
66K 24K
30K 20K
120K 8K

前提

空闲区按大小递减排序

优点

  • 大空间分割后剩下部分还是很大,还能装下较大的程序

特点

  • 仅做一次查找就可找到所要分区

分区的回收

功能:

回收程序结束后所释放的分区(释放区),将其适当处理后登记到空闲区表中,以便再分配

回收算法

  • 若释放区与空闲区不相邻,则把释放区直接插入空闲区表
  • 若相邻,则把释放区与相邻空闲区合并后作为新的更大的空闲区插入到空闲区表

7.2.3 内存覆盖技术

覆盖—Overlay

目的

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

内存分区

常驻区:被某段单独且固定地占用,可划分多个;

覆盖区:能被多段重复共用的区域,可划分多个;

覆盖的例子

  • 内存(110K):一个常驻区,两个覆盖区
  • 程序(190K):6个段

技术图片

覆盖的缺点

  • 编程复杂:程序员划分程序模块并确定覆盖关系
  • 程序执行时间长:从外存装入内存耗时

7.2.4 内存交换技术

交换技术—Swapping

原理

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

优点

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

缺点

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

考虑问题

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

换出与换入的地址重定位

技术图片

7.2.5 内存碎片

技术图片

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

解决碎片方法

1、规定门限值

分割内存区时,若剩余部分小于门限值,则此空闲区不进行分割,而是全部分配给用户。

2、内存拼接技术

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

拼接的时机

  • 释放区回收的时候
    • 拼接频率过大,系统开销大
  • 系统找不到足够大的空闲区时
    • 空闲区的管理复杂
  • 定期
    • 空闲区管理复杂

缺点

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

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

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

以上是关于物理内存管理的主要内容,如果未能解决你的问题,请参考以下文章

Windows内存管理

内存管理

内存管理两部曲之物理内存管理

Linux内存管理子系统(概念入门)

Linux内存管理子系统(概念入门)

物理内存管理:非连续内存分配