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