操作系统 第五章


重难点:
  存储管理、单一连续区存储管理、分页存储管理、分段存储管理

存储管理概述

  • 虚拟地址和物理地址
    • 虚拟地址指:
      • 程序源代码经过编译系统的编译、链接后,生成可执行目标程序,在这个可执行程序中,源程序中的每一个变量和指令都有对应的编号,这些编号就是虚拟地址。
      • 每一道程序的虚拟地址都是从 0 开始,依次连续编号
      • 一道程序的所有虚拟地址的集合为该程序的虚拟地址空间
      • 作业大小是指作业中各程序虚拟地址空间大小的总和
    • 物理地址指:
      • 变量和指令实际在内存中的地址
      • 一道程序的所有物理地址的集合为该程序的物理地址空间
          
  • 重定位
    • 虚拟地址转换为物理地址的过程
    • 程序装入:操作系统将程序从外存读出并装入内存的过程,程序装入后,系统创建出程序对应的进程
    • 分类:依据重定位的时机
      • 静态重定位:在程序装入时把所有虚拟地址全部一次性转换为物理地址,在创建相应进程后,进程运行过程不再需要地址转换;实现简单,不需要硬件支持,影响存储空间利用率
      • 动态重定位:在程序装入时没有进行地址转换,而是 CPU 需要访问时才转换;支持多任务的操作系统均采用该方式;增加了系统存储管理的灵活性,都是通过硬件——存储管理单元 MMU 实现

  

  • 存储管理的目的
    • 系统空间和用户空间
      • 供操作系统内核使用的存储单元为系统空间,其他都是用户空间
    • 提高主存储器的利用率、方便用户对主存储空间的使用
        

单一连续区存储管理

  • 固定分区存储管理
    • 整个用户区一次只能装入一道用户程序,只有在用户区内的程序运行完成后,才能装入下一道程序;采用静态重定位
    • 数据结构设计
      • 分区说明表(DPT)由分区号、起始地址、分区长度和状态组成
        区号 长度 起始地址 状态
        1 75K 32K 0
        2 30K 107K 0
        3 140K 137K 0
        4 11K 277K 0
    • 主要特点
      • 能够支持多道程序设计
      • 并发执行的进程数受分区个数的限制
      • 程序大小受分区长度的限制
      • 存在“碎片”:碎片指小进程占用大分区时,由于一个分区只能分配给一道程序,所以那些没有被利用但暂时不能被其他进程使用的存储空间

  

  • 可变分区存储管理
    • 数据结构设计
      • 空闲区链表
      • 请求表
    • 分配策略
      • 最先适应法(FF,First Fit):分配找到的第一个满足程序要求的分区
      • 最佳适应法(BF,Best Fit):分配满足程序要求且长度最小的分区
      • 最坏适应法(WF,Worst Best Fit):分配满足程序要求且长度最大的分区
    • 回收
      • 在回收一个分区时,系统中空闲区的个数变化情况是:满足图5-12(a)类型时,空闲区个数增加1个;满足图5-12(b)或(c)类型时空闲区个数不变;而满足图5-12(d)类型时,空闲区的个数反而减少1个
    • 主要特点
      • 存在外碎片,降低了存储空间的利用率;这里的外碎片是指,无法满足程序要求的那部分暂时无法使用的空闲区
      • 分区个数和每个分区的长度都在变化
      • 为进程的动态扩充存储空间提供可能
      • 需要相邻空间区的合并,增加系统的开销
      • 基本分配算法 FF、BF 和 WF,在存储空间利用率上没有很大差别
          
  • 分区管理总结
    • 存储空间连续分配,管理方法容易实现
      • 存储空间连续分配指程序装入时,同一道程序的信息按虚拟地址的顺序,一次存放在内存中连续的存储单元
    • 存在碎片,存储空间利用率不高
      差别 内碎片 外碎片
      从存储单元的状态看 分配状态 空闲状态
      从长度看 可能很大 往往较小
    • 程序大小受分区的限制
        
  • 对换和覆盖
    差别 对换 覆盖
    控制不同 进程调入/调出由操作系统自动完成 由程序员根据需要通过程序控制
    单位粒度不同 调入/调出发生在进程之间,即整个进程的调入/调出 发生在主程序进程内部,对应子程序之间
    内存扩充效果不同 单个进程的地址空间不能超过内存的实际大小 允许单个进程的地址空间超过内存的实际大小

  

分页存储管理

  • 分页存储管理由操作系统和硬件(MMU)共同实现
  • 基本思想
    • 内存分块:把内存空间看成一系列长度相等的存储区域组成,每一个区域叫块、物理(内存)块、帧;每个块有一个唯一的块号
    • 进程分页:程序装入时,按照块的长度,系统把程序的虚拟地址空间分为一些大小相等的页,每个页对应一个页号(按虚拟地址顺序);由系统自动实现,我们不知道细节
    • 非连续分配:一个页分配一个块,同一道程序的几个相邻的页,在装入内存之后,不要求在相邻的物理块上,即同一个页上的信息在内存中是连续存放的,但不同页之间可以不在连续的物理空间上
    • 计算
      • 虚拟地址 a,块长 b,则页号 p,页内地址 w 为$$p = a / b$$ $$w = a % b$$
          
  • 静态分页
    • 程序装入时,把程序的所有页全部一次性装入内存
    • 怎么存内存块的使用情况
      • 位示图
      • 空闲块链表
    • 怎么存进程占用的物理块:页表
      • 页表:登记进程页与块对应关系的数据结构;每一个进程都有
      • 作用:重定位和存储保护
    • 页表的建立和初始化
      • 就是内存分配的过程,见题目
    • 特点
      • CPU每访问一条指令或一个数据,都要2次访问内存:
        1. 在MMU重定位过程中,根据页号查找内存中的页表得到块号
        2. CPU根据重定位得到的物理地址访问内存中的指令或数据
            
  • 虚拟存储器思想
    • 见书 187
    • 理论基础:程序的局部性原理
      • 在程序运行过程的一个较小时间范围内,只需要一小部分的程序信息
    • 调入策略
      • 请求调入策略:处理器需要运行某指令或访问某数据时,发现不在内存,再去调入
      • 预调入策略:处理器运行前,把需要的提前调入
          
  • 动态分页
    • 只装入程序的基本页,按调入策略分为请求分页和预调入分页,只讨论请求分页
        
    • 实现关键
      • 内存空闲块管理可以采用静态分页中的位示图或空闲块链表

      • 扩充页表

        • CPU 用来区分内、外存的页;扩充页表的基本结构主要由页号、块号、外存地址、中断位P、访问位A、修改位M 等组成。中断位为 1 表示该页在内存,修改位为 1 表示该页装入内存后被修改
      • 缺页中断

        • MMU 产生的一个特殊 I/O 中断,请求操作系统将某页从外存读入内存
      • 页面调度

        • 操作系统的缺页中断处理过程,要为新读入的页分配一个空闲块,如果内存没有空闲块,必须按指定的策略,从内存中选择一页将其信息淘汰,空出的块分配给新的页,把这个过程称为页面调度
        • 只允许在当前运行进程的页表中选择淘汰的页叫局部调度,可以在全部运行进程的页表中选择淘汰的页叫全局调度
      • 抖动现象

        • 刚刚被调入内存的页很快地被淘汰调出内存,在淘汰不久又要访问它,即一段较短时间内,集中在少数的几个页之间,系统频繁地进行调入和调出操作
      • BELADY 现象

        • 对于一个进程,分配的内存块数越多,它在运行过程中产生的缺页率越小,但是,对于 FIFO 置换算法,存在个别进程,分配给内存的块数增加,缺页率没有减小,甚至反而增加的反常现象
      • 置换算法

        • FIFO、LRU置换算法的思想及淘汰页面的计算及命中率
        • 二次机会置换算法的思想及淘汰页面的计算及命中率
            
  • 分页存储管理的主要特点
    • 非连续的存储分配,提高了存储空间的利用率
    • 实现虚拟存储器
    • 页表占用额外的存储开销
    • 分页破坏了程序的完整性
    • 请求分页存在抖动现象,降低CPU的利用率
        

分段存储管理

  • 基本思想
    • 程序“分段”:程序由若干个在逻辑上具有完整独立意义的单位组成,每一个单位为一个段,每个段有一个段号,一个段内的虚拟地址从 0 开始连续编号
    • 内存动态分区:整个用户区作为一个用户区,程序装入时,按照程序的段来分配内存
    • 非连续分配:同一个段上的信息在内存中是连续存放的,但不同段之间可以不在连续的物理空间上
    • 内、外存统一管理实现虚拟存储器
        
  • 实现关键
    • 段表的结构由段号、段长度、中断位P、分区起始地址、外存地址、存取控制信息、访问位A 和修改位M 等组成
        
  • 分段与分页的区别(重点)
    • 差别 分页 分段
      存储空间的分配单位粒度 以页为单位分配内存空间,页由硬件虚拟地址结构决定,页长度固定 以段为单位分配内存空间,段由程序员的程序设计决定,段长度不固定
      虚拟地址空间的维数 一维 二维
      内存分配 把内存空间看成一组大小相等的块组成 动态分区
      碎片 每个进程的最后一页可能不足一个块的长度,所以存在内碎片 采用动态分区,随着分配和回收的不断进行,可能存在很小的空闲区,即外碎片

  

段页式存储管理

  • 段页式存储管理中进程、段表和页表的关系
    • 每个进程由多个段组成,每个段又分若干页
    • 段表:管理进程段信息的数据结构
    • 页表:管理一个段的页信息的数据结构
posted @ 2020-12-13 05:35  物转星移几度秋  阅读(63)  评论(0编辑  收藏  举报