目录
存储管理之内存分配与回收
- 早期计算机编程并不需要过多的存储管理
- 随着计算机和程序越来越复杂,存储管理成为必要
- 主要为了解决3个问题:
- 1.确保计算机有足够的内存处理数据
- 2.确保程序可以从可用内存中获取一部分内存使用
- 3.确保程序可以归还使用后的内存以供其它程序使用
-
内存分配的过程
- 3个分配的方法:
-
单一连续分配
- 单一连续分配是最简单的内存分配方式
- 只能在单用户、单进程的操作系统中使用
-
固定分区分配
- 固定分区分配是支持多道程序的最简单存储分配方式
- 内存空间被划分为若干固定大小的区域
- 每个分区只提供给一个程序使用,互不干扰
-
动态分区分配
- 根据进程实际需要,动态分配内存空间
- 涉及相关数据结构和分配算法
- 动态分区空闲表数据结构
- 假设主存内有若干个分区,并且有些分区是已经使用了的,而有些分区没有使用;这时就需要1个数据结构去存储某个分区它是否已经被使用了
- 标记中:0表示未使用,1表示已使用
- 动态分区空闲链数据结构
- 把所有空闲节点都首尾相连,形成一个空闲链表
- 若有连续存储的节点,要进行合并,减少节点数
- 同时节点需记录可存储的容量
-
动态分区分配算法
- 1.首次适应算法(FF算法)
- 2.最佳适应算法(BF算法)
- 3.快速适应算法(QF算法)
- 首次适应算法(FF算法)
- 分配内存时从开始顺序查找适合内存区
- 若没有合适的空闲区,则该次分配失败
- 找到了合适的空闲区,就把此空闲区划分给这个进程使用
- 有个问题:每次从头部开始,使得头部地址空间不断被划分,又或者说头部地址已经被分配很多次后,空间已经很小了,每次分配时都要遍历直到差不多到尾部时才能获得合适的内存
- 循环适应算法就对此进行了改进:
- 每次分配不是从头部开始分配,而是从上次检索结束的位置开始
- 最佳适应算法(BF算法)
- 最佳适应算法要求空闲区按照容量大小排序
- 遍历空闲区找到最佳合适空闲区
- 快速适应算法(QF算法)
- 快速适应算法要求有多个空闲区链表
- 每个空闲区链表存储一种容量的空闲区
- 可以快速找到适合某一进程的内存区域
-
内存回收的过程
- 主要出现4种情况:
- 1.需要回收的区域与空闲区连在一起,并且位于空闲区后面
- 2.需要回收的区域与空闲区连在一起,并且位于空闲区前面
- 3.需要回收的区域与空闲区连在一起,并且位于2块空闲区之间
- 4.单一的回收区,没有连接任何空闲区
- 对于第一种情况
- 不需要新建空闲链表节点
- 只需要把回收区上方的空闲区的容量增大为包括回收区的容量即可
- 对于第二种情况
- 将回收区与空闲区合并成为一个新的节点
- 新的空闲区使用回收区的地址作为新的节点的地址
- 对于第三种情况
- 将上下方空闲区和回收区合并
- 新的空闲区使用上方空闲区的地址作为新节点的地址
- 对于第四种情况
- 为回收区创建新的空闲节点
- 然后把这个节点插入到相应的空闲区链表中去
存储管理之段页式存储管理
-
页式存储管理
- 字块是相对物理设备的定义
- 页面则是相对逻辑空间的定义
- 页式存储管理将进程逻辑空间等分成若干大小的页面
- 相应的把物理内存空间分成与页面大小的物理块
- 以页面为单位把进程空间装进物理内存中分散的物理块
- 页面大小应该适中,过大难以分配,过小内存碎片过多
- 页面大小通常是512B-8K
- 页表记录进程逻辑空间与物理空间的映射
- 缺点问题:
有一段连续的逻辑分布在多个页面中,将大大降低执行效率
-
段式存储管理
- 将进程逻辑空间划分成若干段(非等分)
- 段的长度由连续逻辑的长度决定
- 同样也需要一个表保存进程逻辑空间与物理空间的映射,即段表
- 对比:
- 段式存储和页式存储都离散地管理了进程的逻辑空间
- 页是物理单位,段是逻辑单位
- 分页是为了合理利用空间,分段是满足用户要求
- 页大小由硬件固定,段长度可动态变化
- 页表信息是一维的,段表信息是二维的
-
段页式存储管理
- 分页可以有效提高内存利用率(虽然说存在页内碎片)
- 分段可以更好满足用户需求(因为连续逻辑是用户写的)
- 两者结合,形成段页式存储管理
- 原理:
- 先将逻辑空间按段式管理分成若干段
- 再把段内空间按页式管理等分成若干页
- 在段页式存储管理里,结合段地址和页地址形成一个地址,即段页式地址
存储管理之虚拟内存
-
虚拟内存概述
- 促使使用虚拟内存
- 有些进程实际需要的内存很大,超过物理内存的容量
- 多道程序设计,使得每个进程可用物理内存更加稀缺
- 不可能无限增加物理内存,物理内存总有不够的时候
- 虚拟内存是操作系统内存管理的关键技术
- 使得多道程序设计和大程序运行成为现实
- 如何工作:
- 把程序使用内存划分,将部分暂时不使用的内存放置在辅存
-
程序的局部性原理
- 局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中
- 所以计算机加载程序运行时,无需全部装入内存,装载部分即可
- 如果访问页不在内存,则发出缺页中断,发起页面置换
- 把保存在辅存里的页面置换到物理内存里面
- 从用户层次看,程序拥有很大的空间,即是虚拟内存
- 虚拟内存实际是对物理内存的补充,速度接近于内存,成本接近于辅存
-
虚拟内存的置换算法
- 1.先进先出算法(FIFO)
- 2.最不经常使用算法(LFU)
- 3.最近最少使用算法(LRU)
- 之前在计组中介绍过了,在这里就不再讲述了
- 主存页面的替换时机与高速缓存的替换时机相似
- 对比:
- 替换策略发生在Cache-主存层次、主存-辅存层次
- Cache-主存层次的替换策略主要是为了解决速度问题
- 主存-辅存层次主要是为了解决容量问题