Memory Management
为了改进CPU调度的性能,必须要将多个进程放到内存中
基本硬件
CPU 所能直接访问的存储器只有内存和处理器内的寄存器
CPU 和内存之间有一块内存缓冲区,称为高速缓存,用来协调速度差异的内存缓冲区,保证了 CPU 对内存的访问速度
用基地址寄存器和界限地址寄存器来确保进程可访问的合法地址范围,只有操作系统可以加载这两个寄存器
地址绑定
一个用户进程在运行之前要经过许多步骤,在每一步中,地址会有不同的表示方式,地址绑定就是程序从一个状态到另一个状态时,地址从一个空间到另一个空间的映射,可以简单的理解为重定位
- 如果在编译时就知道进程在内存中的驻留地址就可以生成绝对代码,否则生成可重定位代码
- 进程在执行时若要从一个地址空间转移到另一个地址空间,那么绑定会延迟到执行时,这种方案需要特殊的硬件支持
逻辑地址和物理地址
CPU 生成的地址是逻辑地址,内存单元所看到的是物理地址
编译和加载时生成相同的逻辑地址和物理地址,但执行时不同的绑定方案导致不同的逻辑地址和物理地址;运行时从逻辑到物理的映射由MMU完成
逻辑到物理地址的转换过程称为重定位
- 静态 :程序加载到内存时完成,地址不能修改
- 动态 :程序执行时完成,可修改,需要硬件和软件的配合
交换
进程可以暂时从内存中交换到备份存储上,当需要再次执行时在调回内存
碎片
- 外碎片 :那些由于块太小而不能分配的内存
- 内碎片 :指分配了出去单没有被使用的内存
解决外碎片的方法是紧缩,移动内存内容以便所有空闲空间合成一整块,静态重定位是无法紧缩的
连续内存分配
每个进程位于一个连续的内存区域
动态分配方法:
- 首次适应
- 最佳适应
- 最差适应
分页
分页内存管理方案允许进程的物理地址是非连续的
实现分页的基本方法是将物理内存分为固定大小的块,称为帧;讲逻辑内存也分为等大的块,称为页;当需要执行进程时,其页从备份存储调入到可用帧中
CPU 生成的地址包含两部分
- 页号
- 页偏移
页号作为页表的索引,页表包含每页所在物理地址的基地址
页的大小(与帧大小一样)是硬件来决定的,采用分页技术不会产生外碎片
分页技术的一个特点 :用户视角和物理内存的分离
分段
用户通常更愿意将内存看成一组不同长度的段的集合,分段就是支持此用户视角的内存分配方法
逻辑地址通常由一组段组成,每个段都有名称和长度,比如代码段、数据段等等
用户通过两个量来指定地址
- 段名称
- 偏移