操作系统之基础篇-(4)存储管理

目录

存储管理之内存分配与回收

内存分配的过程

单一连续分配

固定分区分配

动态分区分配

动态分区分配算法

内存回收的过程

存储管理之段页式存储管理

页式存储管理

段式存储管理

段页式存储管理

存储管理之虚拟内存

虚拟内存概述

程序的局部性原理

虚拟内存的置换算法


存储管理之内存分配与回收

  • 早期计算机编程并不需要过多的存储管理
  • 随着计算机和程序越来越复杂,存储管理成为必要
  • 主要为了解决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-主存层次的替换策略主要是为了解决速度问题
  • 主存-辅存层次主要是为了解决容量问题

猜你喜欢

转载自blog.csdn.net/weixin_59624686/article/details/124958702