第三章、连续式内存分配

操作系统的内存管理:

3.1 计算机体系结构及内存分层体系

第三章、连续式内存分配

第三章、连续式内存分配

操作系统的内存层次:

第三章、连续式内存分配

操作系统在内存管理方面需要完成的目标:

  1. 抽象: 逻辑地址空间
  2. 保护: 独立地址空间(保证多个进程间不会相互干扰)
  3. 共享: 访问共同的地址空间(当多个进程需要操作同一块操作地址时,需要共享地址空间)
  4. 虚拟化: 由于缓存及寄存器的存储空间有限,当存储大量数据时,就需要使用虚拟空间第三章、连续式内存分配

操作系统管理内存的不同方法:

  • 程序重定位
  • 分段
  • 分页
  • 虚拟内存
  • 按需分页虚拟内存

操作系统在完成内存管理操作同时还需要高度依赖于硬件

  • 必须知道内存架构
  • MMU(内存管理单元):硬件组件负责处理CPU的内存访问请求

3.2 地址空间及地址生成

① 地址空间的定义:

物理地址空间:

物理地址空间是指一些硬件支持的地址空间,比如硬盘和内存条、高速缓存…

逻辑地址空间:

逻辑地址空间是指一个运行程序所拥有的内存范围,它的结构很简单,就是一条线性的地址空间

但是最终逻辑地址空间还是会指向物理地址空间,操作系统需要协调这二者的关系,通过映射来使得逻辑地址指向物理地址。

② 逻辑地址的生成:

第三章、连续式内存分配

③ 物理地址的生成:

=>CPU方面

a. CPU执行指令时,它的ALU部件会需要指令的某个内容,它发出的请求中的参数会携带逻辑地址;

b. CPU的内存管理单元MMU 寻找逻辑地址的映射表中是否存在物理地址。如果没有找到,那么就会产生一个处理过程,去内存中找。如果最终找着了,那么CPU的控制器从总线发送在物理地址的内存内容的请求;

=>内存方面

a. 内存发送物理地址内存内容给CPU(CPU开始处理对应的指令)

=>操作系统方面

a. 建立逻辑地址和物理地址之间的映射关系,该关系可以放在内存中由CPU缓存来加快进程(确保程序不相互干扰)

第三章、连续式内存分配

④ 地址安全检查:

第三章、连续式内存分配

3.3 连续内存分配:内存碎片与分区的动态分配

内存碎片问题:

碎片是指内存空闲不能被利用,碎片分为内部碎片和外部碎片,外部碎片是指分配单元之间不能被使用;内部碎片是指分配单元中不能被使用。

简单的内存管理方法:

操作系统管理内存的简单方法:当一个程序准许运行在内存中时分配一个连续的空间;分配一个连续的内存空间给运行的程序以访问数据。

分区的动态分配策略:

1、首次适配:

概念:现在想要分配n 字节,那么就会从低地址开始查找,当查找到第一个空间大于n字节就结束返回。

需求:

  • 存在一个按照地址排序的空闲块列表
  • 分配需要寻找一个合适的分区
  • 重分配需要检查,看是否自由分区能够合并于相邻的空闲分区(回收)

优点:

  • 简单、易于操作
  • 便于生成更大的空间块,向着空间地址的结尾(如果在前边找到后就结束,那么不会破坏之后的空间块)

缺点:

  • 易于产生外部碎片(前后两个可利用空间块之间的小块不能被使用,会被忽视)
  • 不确定性

2、最优适配:

概念:会在空闲块间查找最适合的空间块,为了避免分割大的空闲块,同时为了最小化外部碎片产生的尺寸

需求:

  • 按照尺寸排列的空闲块列表
  • 分配需要查找一个合适的分区
  • 重分配需要搜索合并于相邻的空闲分区

优点:

  • 当大部分是小尺寸时非常有效
  • 比较简单

缺点:

  • 会产生外部碎片
  • 重分配慢
  • 易于产生很多没用的微小碎片

3、最差适配:

概念:为了分配n字节,使用最大的空闲块,以至块的尺寸比n大

需求:

  • 按尺寸排列的空闲块
  • 分配很快(每次获得最大的分区)
  • 重分配需要合并于相邻的空闲分区

优点:对于分配的是中等尺寸效果最好

缺点:

  • 重分配慢
  • 会产生外部碎片
  • 易于破坏大的空闲块以至于需要分配大分区时无法被分配

3.4 连续内存分配:压缩式与交换式碎片整理

1、压缩式碎片整理(紧致)

第三章、连续式内存分配

  • 重置程序以合并空洞
  • 要求所有程序是动态可重置的
  • 问题:何时重置,开销大

如图:如果能够将程序占用的内存进行拷贝重分配,那么会产生更多可用的内存空间,但是仅仅靠软件来操作会有很大的开销,对系统的性能会有更大的影响。

2、交换式碎片整理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LBNh7Kvi-1601035285720)(第三章、连续式内存分配.assets/image-20200919205114421.png)]

如果在运行P3时需要更多的内存,而此时P4正在等待,那么就可以将P4的数据拷贝到磁盘(虚拟内存)中,此时P3就获得了足够多的内存可以运行;当P4需要执行时再从磁盘上拷贝回 memory(主存)中即可。

有很大的开销,对系统的性能会有更大的影响。

2、交换式碎片整理

第三章、连续式内存分配

如果在运行P3时需要更多的内存,而此时P4正在等待,那么就可以将P4的数据拷贝到磁盘(虚拟内存)中,此时P3就获得了足够多的内存可以运行;当P4需要执行时再从磁盘上拷贝回 memory(主存)中即可。