6.3.5. 内存管理

6.3.5.1. 地址定位方式

  • 固定定位方式
    • 汇编和机器代码一一对应

    • 容易覆盖操作系统

    • 只支持单道程序

  • 静态重定位方式
    • 源程序经编译和连接后生产的目标代码的地址是以0为起始地址的相对地址

    • 当需要执行时,由装入程序运行重定位程序模块,根据作业在本次分配到的内存起始地址将可执行代码装如指定内存地址,并修改有关地址部分的值

    • 修改的方式是对每一个逻辑地址的值加上内存区首地址

    • 需要整块的地址

  • 动态重定位
    • 在装入内存的时,不修改逻辑地址,访问逻辑地址时,动态的讲逻辑地址变成物理地址

    • 在执行指令时,若设计到逻辑地址,则将该地址送入虚地址寄存器VR,再将BR和VR相加送入地址寄存器MR

6.3.5.2. 内存管理

6.3.5.2.1. 内存分配

  • 首次适应法

  • 循环首次适应法

  • 最佳适应算法

  • 最差适应算法

  • 多重分区

6.3.5.2.2. 内存回收

在运行时需要回收一些很少使用的内存页面来保证系统持续有内存使用。页面回收的方式有页回写、页交换和页丢弃三种方式。

页回写指一个很少使用的页的后备存储器是一个块设备(例如文件映射),则可以将内存直接同步到块设备,腾出的页面可以被重用。

页交换指页面没有后备存储器,则可以交换到特定swap分区,再次被访问时再交换回内存。

页丢弃指页面的后备存储器是一个文件,但文件内容在内存不能被修改(例如可执行文件),那么在当前不需要的情况下可直接丢弃。

回收时间一般在内存紧缺时回收,或者周期性回收,或者由用户触发回收。

6.3.5.3. 内存扩充

6.3.5.3.1. 覆盖

在单用户系统中,为了能在较小的内存空间中运行大作业,可采用“覆盖”技术。覆盖技术就是将一个大程序按程序的逻辑结构划分成若干个程序(或数据)段,并将不会同时执行、从而就不必同时装入内存的程序段分在一组内,该组称为覆盖段。这个覆盖段可分配到同一个称为覆盖区的存储区域。

6.3.5.3.2. 交换技术

覆盖技术用于一个作业的内部,交换技术用于不同的作业。早期在单一连续分配的存储区管理系统中,采用交换技术也可以实现多道程序设计。任一时刻,主存中只保留一个完整的用户作业。当该作业的时间片用完或因等待某一事件而不能继续运行时,系统就挑选下一个作业进入主存运行。

6.3.5.4. 分页存储

页式存储管理的基本思想是把作业的虚地址空间划分成若干长度相等的页(page),也称虚页,每一个作业的虚页都从0开始编号。主存也划分成若干与虚页长度相等的页架(frame),也称页框或实页,主存的页架也从0开始编号。程序装入时,每一个虚页装到主存中的一个页架中,这些页架可以是不连续的。

6.3.5.4.1. 页淘汰

  • 最优淘汰算法(OPT)

  • 先进先出淘汰算法(FIFO)

  • 最近最少使用淘汰算法(LRU)

  • 最近未使用淘汰算法(NUR)

6.3.5.5. 虚拟地址转换

地址转换负责将虚拟地址转换成物理地址,有多个应用场景。

应用在虚拟内存中,可以给应用程序一种独占整个计算机内存的假象,可以使用超过实际物理大小的内存,应用程序之间互不干扰。

用于进程隔离,可以构建沙盒技术,避免操作系统内核和应用程序受到病毒或者恶意代码的攻击。

进程间通信时,地址转换可以将不同进程空间的地址映射到同一段物理内存,从而实现进程间通信。

加载动态链接库时,可以在多个程序实例之间进行共享。