内存管理
内存管理
内存管理的要求
在研究各种内存管理的机制和技术时,一定要牢记内存管理所必须满足的要求:
- 重定位
指的是处理机硬件和操作系统软件必须能将程序代码中地址映射为程序在内存中实际的物理地址。
- 保护
每个进程必须内保护以免受到其他进程的干扰,未经允许进程不能对其他进程的存储区进行读写操作
- 共享
协同工作的多个进程需要共享同一数据结构。
- 逻辑组织
计算机系统中的内存组织形式是包含字或字节序列的线性或一维地址空间。
- 物理组织
计算机的存储器至少分2个层次:主存和辅助存储器。
程序的加载
任何操作系统的核心人物是将程序调入到主存中执行。 在多数现代多道程序系统中,完成这个人物涉及到一个名为虚拟存储器
的复杂调度方案,而虚拟存储器又是建立在两个基本技术基础之上的:分段和分页。还要一种更为基本的技术:分区。
header 1 | header 2 | 优点 | 缺点 |
---|---|---|---|
固定分区 | 在系统生成时,内存分为若干个分区。等于或小于分区大小的进程可以调入内存 | 易于实现,开销少 | 存在内存碎片 |
动态分区 | 动态建立分区,所以分区大小与进程大小相同 | 无内存碎片,内存利用率较高 | 由于要进行压缩,处理机利用率不高 |
简单分页 | 主存分为大小相同的帧,每个进程分为同样大小的页,通过将进程中所有页调入内存空闲页,将进程调入内存,这些内存中的页可不连接 | 无外部碎片 | 少量的内部碎片 |
简单分段 | 每个进程分为若干个段,通过将进程所有的段调入内存,将进程调入内存,这些内存中的段可不连续 | 无内部碎片 | 需要压缩 |
虚拟内存分页 | 除了不需将近所有页都调入内存外,其余与分页相同,不在内存中的页当需要时自动调入 | 无外部碎片,可容纳更多进程,虚拟内存空间大 | 复杂的内存,管理导致开销大 |
虚拟内存分段 | 除了不需将进程所有段调入内存外其余与分段相同,不在内存中的段当需要时自动调入 | 无内部碎片,可容纳更多进程,虚拟内存空间大,支持保护和功效共享 | 复杂的内存,管理导致开销大 |
分页
分页就是将内存分成多个同样大小的存储区,每个进程页分成同样大小的页,较小的进程需要较少的页,较大的进程需要较多的页,进程在调入内存时,所有的进程页放入内存中空闲页,并建立页表。这种方法解决了分区方案中所固有的许多问题。
局部性和虚拟内存
颠簸:处理器把大部分时间花在调入调出近的片段上而不是执行用户的指令上
本质上,OS都是根据最近的历史来预测在较近的将来最不可能用到的那些片段。
局部性原理指的是:一个进程的程序和数据访问都有聚集成群的倾向。因此,关于在一个短的时间内,只需要进程的几个片段的假设是合理的,同样,页可以智能的预测在较短的将来会用到哪些片段。从而可以避免颠簸。
而局部性原理意味着虚拟内存是可行的。可行且有效的虚拟内存需要两个部件。一个是支持分页或/和分段的硬件。另一个是OS必须包括相应的软件,这些软件能管理主存和辅助存储器之间页和/ 和段的移动。
操作系统软件
操作系统的内存管理部分的设计取决于对下面几个方面的选择:
- 是否运用虚拟存储技术。
- 运用分页,分段还是组合使用
- 内存管理的不同方面使用什么样的算法。
小结
为了有效使用处理机和I/O设备,在主存中保留尽可能多的进程显然是有益的。另外,让程序员不受大小的约束也是可取的,其基本技术是分页和分段。
达到上面两点的方法是使用虚拟内存。在虚拟内存,所有引用的地址都是逻辑地址,在执行时转换为物理地址。使用虚拟内存可以让进程存放于主存的任何位置并可以不时改变。虚拟内存还可以让程序分为一些片段,在执行时,这些片段不需要连续的存放于主存中,甚至不需要进程的所有片段都在主存中。
可以提供虚拟内存的基本方法是:分段和分页。运用分页,每一个进程被分成相对较小的,大小固定的页,分段则可以使用大小可变的片段。当然也可以在一个内存管理的设计中组合使用分段和分页技术。
虚拟内存管理需要硬件和软件的支持,处理机可以提供硬件支持,这种支持包括虚拟地址到物理地址的动态转换,当所引用的页或段不在主存中时产生一个中断。这个中断可以激活OS中的内存管理软件。
和OS对内存管理相关的几个设计问题是:
- 装入策略。进程的页可以根据请求调入或使用预分页,后者可以同时调入一些页,成批的执行输入动作。
- 分配策略。在纯分段的系统中,将要调入主存的段必须能适合主存的空闲空间。
- 替换策略。当内存被占满时,必须决定哪一个页或哪些页被替换掉。
- 常驻集管理。当一个进程替换时,OS必须决定分配多大的主存给他。它可以在进程创建时静态分配,也可动态分配。
- 清除策略。修改过的进程可以在替换时写出,或使用预清除策略。后者成批或成蔟的执行输出动作。
- 加载控制。这是在任一给定时间,决定主存中驻留多少进程。