内存管理
分区、分段、段页式
操作系进行内存管理的原因
- 划分内存而满足多道程序的需求。
- 内存需要被高效地分配而能够装入尽可能多的进程。
分类
- 连续:分区
- 离散:分段、分页
固定分区
- 系统初始启动时将内存划分为数目固定、尺寸固定的多个分区。
- 这些分区的尺寸可以相等也可以不等。
特点
- 如果一个程序太大而不能进入分区需要程序员使用覆盖技术(早期计算机系统)设计程序。
- 内存使用不够高效。无论程序多小必须占据整个分区,这被称为内零头(内部碎片)。
- 以上问题虽然可以通过大小不相等的分区设计加上算法减小影响,但是不能根治问题。
- 优点
- 实现简单。
- 系统开销小。
- 缺点
- 存在内零头,存储利用率不高。
- 分区尺寸固定,系统无法运行大程序。
- 分区数目固定,活动的进程数目受限。
动态分区
- 分区的大小和数量多样。
- 进程可以分配到精确的所需的内存大小。
- 会在内存中产生很多“小空隙”,称为外零头。
- 必须使用紧凑技术,调整进程使它们相邻,从而拼接所有较小的空闲内存形成一块较大的。
- 动态分区消除了内零头,却产生了外零头。
简单分页
- 内存被分为大小相等的块,每一个进程被分成和内存块相等大小的块。
- 这些进程的块,被称为页而内存的块被称为页帧(页框)。
- 没有外零头,仅有很少的内零头出现在进程的最后一页。
分页系统地址转换
- 根据逻辑地址及页大小求出页号和页内偏移量。
- 用页号检索页表,查找页对应的页框号。
- 根据页框号、页内偏移以及页框尺寸求出物理地址。
简单分段
- 基于模块化设计时,程序员根据需要将进程分割成许多大小不一的段,系统则将物理内存动太划分成许多尺寸不一定相等的部分。
- 当一个进程装入物理内存时,系统将该进程的每个段独立分配一个分区;同一进程的多个段不必存放在连续的多个分区中。
- 没有内部碎片,比较与动态分区,内存利用率更高,开销小。
段页式
区别和对比
- 页面是信息的物理单位;在特定的系统中,其大小是固定不变的,不随进程的不同而不同。
- 段是信息的逻辑单位,其长度不定;即使是属于同一进程的两个段长度也可能不等。
- 分页活动源于系统管理物理内存的需要,在系统内部进行,由系统实施,用户看不见。
- 分段活动源于用户进行模块化程序设计的需要,在系统外部进行,由用户实施,用户是知道的。
- 在分页系统中,逻辑地址是一维的。
- 在分段系统中,逻辑地址是二维或多维的。
段页式为什么存在
- 分页系统中,内零头得到了有效的抑制,外零头则被完全消除;因此使用分页技术可以提高物理内存的利用率。
- 分段系统中,动态数据结构、程序和数据共享、程序和数据保护等问题得到了妥善的解决;因此,分段技术有利于模块化程序设计。
- 段页技术汲取了分页技术和分段技术的上述优点。
如何划分
- 在段页存储管理系统当中,每个进程均被编程人员分割成多个段,每个段又被系统分割成多个页。
- 相应的,物理内存被系统划分成多个页框(页帧)。
- 当一个进程装入物理内存时,系统为该进程的每个段的各页面独立地分配一个页框;一个进程的同一段的多个页面不必存放在连续的多个页框中。
虚拟内存分页
- 与简单分页相比,不需要将进程所有的页装入主存。
- 优点
- 没有外部碎片。
- 巨大的虚拟内存空间。
- 更高程度的多道程序设计。
- 缺点
- 复杂的内存管理开销。
虚拟内存分段
- 与简单分段相比,不需要进程所有的段都装入主存。
- 优点
- 具有虚拟内存分段的三个优点,并支持保护和共享。
- 缺点
- 复杂的内存管理开销。