• 计算机中存储的设备有高速缓存、内存、磁盘
    • 内存用于临时存放运行的程序
    • image.png
    • 分层存储体系
    • 内存中每个内存单元大小通常为一个字节,它们都有一个对应的地址
    • 内存管理多进程时,需要让多个进程独立,程序指令中的地址不能是物理地址,而是进程内部的相对地址
    • 当有进程访问不是自己进程范围的地址时,操作系统需要干预保护
    • 我们需要一种存储器抽象—称为地址空间
    • 动态重定位
      • 要保证程序在内存中是连续的
      • image.png
    • 实际内存空间有限,进程数量通常很多,内存放不下时只能将一部分进程暂时存放到磁盘中,这类操作需要内存的交换技术(swapping)
    • image.png
    • 在进程的交换过程中,内存会出现碎片的间隙,称为空洞(hole)
    • 要想利用这些碎片化的内存区域,就需要把所有进程尽可能向下移动,以流出大块的空闲区域
    • image.png
    • 这项技术称为内存紧缩(memory compaction)
    • 内存紧缩需要耗费大量的CPU时间,所以使用较少
    • 内存是如何具体管理的呢? 主要通过位图或链表
    • 位图
      • 将内存划分成单位小区域,每个区域由0或1表示空闲或占用状态
      • 当有进程需要加载到内存时,系统需要扫描连续为0的区域作为进程的内存区域
      • 单位数量比较多,通常查找比较耗时
    • 链表
      • 每一块连续的区域分别由一个节点表示,有4个值
      • 第一个若是P则表示区域有进程,H表示空闲
      • 第二个值指向对应区域的起始位置
      • 第三个值对应区域的长度
      • 最后是指针,指向下一个节点
      • 当有进程需要加载时,就从头扫描直到找到一块足够大的空闲区,这种算法称为首次适配算法
      • 此外还有最佳适配算法等,找出大小最合适的空闲区
      • 当要移除某个进程时,只需要将节点移除,修改前节点长度和下一个节点的指针即可
      • image.png