第四章
4.1 基本存储管理
- 我们可以把存储器管理系统分为两类:一类是在运行期间会在主存和磁盘间移动进程的系统(交换和分页),另一类是不移动进程的系统。
4.1.1 无交换或分页的单道程序设计
- 最简单可行的存储管理方案是一次只能运行一个程序,该程序与操作系统共享内存
4.1.2 固定分区的多道程序设计
- 单道程序设计除了用在简单的嵌入式系统上,很难有其他方面的应用。
- 实现多道程序设计最容易的办法是将内存划分成n个分区(各分区大小不等)。
4.1.3 重定位和保护
- 由多道程序设计带来的两个必须解决的重要问题:重定位和保护。
解决重定位的一个可能方案:当程序调入内存时直接对指令进行修改。
为了实现保护,IBM360机器采用的办法是,把北村被划分为块,每块为2KB,并且没块都分配有一个四位的保护码。
另一种解决重定位和保护问题的方法是在机器里设置两个专门的硬件寄存器,分别成为基址寄存器和界限寄存器。
这种方案的缺点是每次内存引用都需要执行一次加法和一次比较。比较可以很快执行,但加法由于需要进位时间内,执行起来较慢。
现在几乎已经没有使用这种方案的计算机了
4.2 交换
- 存储管理有两种通用方法,具体采用哪一种(部分)取决于可用的硬件。
最简单的策略是交换,包括从整体上调入进程,使该进程运行一段时间,然后把它存回磁盘。
另一种策略是虚拟存储器,该策略甚至能使程序在只有一部分被调入主存的情况下运行。
4.2.1 使用位图的存储管理
- 在动态分配内存时,操作系统必须对其进行管理。一般而言有两种方式跟踪内存使用情况:位图和空闲表。
4.2.2 使用链表的存储管理
- 另一种记录内存使用的方法是,维护一个记录已分配内存段和空闲内存段的链表。其中一段或者是一个进程,或者是两个进程间的一个空闲区。
- 当 按照地址顺序在链表中存放进程和空闲区时,有几种算法可以用来为新创建的进程(或从磁盘换入的已存在的进程)分配空间。
首次适度算法
下次适配算法
最佳适配算法
最差适配算法
快速适配算法
4.3 虚拟存储器
- 虚拟存储器的基本思想:程序、数据、堆栈的总大小可能超过可用物理内存的大小。由操作系统把程序当前使用的那部分保留在主存中,而把其他部分保存在磁盘上。
4.3.1 分页
- 在任何一台计算机上,都存在一个程序能够残生的内存地址的集合。
- 由程序产生的这些地址称为虚拟地址,他们构成了一个虚拟地址空间。
- 在没有虚拟存储器的计算机上,系统直接将虚拟地址送到内存总线上,读写操作使用具有同样地址的物理内存字;
- 而在使用虚拟存储器的情况下,虚拟地址不是被直接送到内存总线上,而是被送到内存管理单元(MMU),MMU把虚拟地址映射为物理内存地址
- 虚拟地址空间以页面为单位划分。在物理内存中对应的单位称为页帧。页面和页帧的大小总是一样的。
4.3.2 页表
- 页表的目的是把虚拟页面映射为页帧。
- 为了 避免始终在内存中保存庞大的页表,许多计算机中采用了多级页表。
4.3.3 转换检测缓冲区
- 在多数分页机制中,页表由于太大都要保存在内存中。这种设计对效率有着巨大的影响。
- 解决的办法是为计算机设置一个小型的硬件设备,将虚拟地址直接映射到物理地址,而不必通过页表。这种设备称为转换检测缓冲区,有时称为相联存储器。
4.3.4 倒排页表
- 节约空间,但是虚拟地址到物理地址的转换变得困难的多。
4.4 页面置换算法
- 最优页面置换算法
- 最近未使用页面置换算法
- 先进先出页面置换算法
- 第二次机会页面置换算法
- 时钟页面置换算法
- 最近最少使用页面置换算法
- 用软件模拟LRU
- 工作集页面置换算法
- 工作集时钟页面置换算法
4.5 分段
- 纯分段的实现
分段可以帮助处理在执行过程中大小有变化的数据结构,并能简化连接和共享。分段还有利于为不同的段提供不同的保护。
有时,可以把分段和分页结合起来,以提供一种二维的虚拟存储器。
- 分段和分页相结合:MULTICS
- 分段和分页相结合:Intel Pentium