操作系统 第五章
重难点:
存储管理、单一连续区存储管理、分页存储管理、分段存储管理
存储管理概述
- 虚拟地址和物理地址
- 虚拟地址指:
- 程序源代码经过编译系统的编译、链接后,生成可执行目标程序,在这个可执行程序中,源程序中的每一个变量和指令都有对应的编号,这些编号就是虚拟地址。
- 每一道程序的虚拟地址都是从 0 开始,依次连续编号
- 一道程序的所有虚拟地址的集合为该程序的虚拟地址空间
- 作业大小是指作业中各程序虚拟地址空间大小的总和
- 物理地址指:
- 变量和指令实际在内存中的地址
- 一道程序的所有物理地址的集合为该程序的物理地址空间
- 虚拟地址指:
- 重定位
- 虚拟地址转换为物理地址的过程
- 程序装入:操作系统将程序从外存读出并装入内存的过程,程序装入后,系统创建出程序对应的进程
- 分类:依据重定位的时机
- 静态重定位:在程序装入时把所有虚拟地址全部一次性转换为物理地址,在创建相应进程后,进程运行过程不再需要地址转换;实现简单,不需要硬件支持,影响存储空间利用率
- 动态重定位:在程序装入时没有进行地址转换,而是 CPU 需要访问时才转换;支持多任务的操作系统均采用该方式;增加了系统存储管理的灵活性,都是通过硬件——存储管理单元 MMU 实现
- 存储管理的目的
- 系统空间和用户空间
- 供操作系统内核使用的存储单元为系统空间,其他都是用户空间
- 提高主存储器的利用率、方便用户对主存储空间的使用
- 系统空间和用户空间
单一连续区存储管理
- 固定分区存储管理
- 整个用户区一次只能装入一道用户程序,只有在用户区内的程序运行完成后,才能装入下一道程序;采用静态重定位
- 数据结构设计
- 分区说明表(DPT)由分区号、起始地址、分区长度和状态组成
区号 长度 起始地址 状态 1 75K 32K 0 2 30K 107K 0 3 140K 137K 0 4 11K 277K 0
- 分区说明表(DPT)由分区号、起始地址、分区长度和状态组成
- 主要特点
- 能够支持多道程序设计
- 并发执行的进程数受分区个数的限制
- 程序大小受分区长度的限制
- 存在“碎片”:碎片指小进程占用大分区时,由于一个分区只能分配给一道程序,所以那些没有被利用但暂时不能被其他进程使用的存储空间
- 可变分区存储管理
- 数据结构设计
- 空闲区链表
- 请求表
- 分配策略
- 最先适应法(FF,First Fit):分配找到的第一个满足程序要求的分区
- 最佳适应法(BF,Best Fit):分配满足程序要求且长度最小的分区
- 最坏适应法(WF,Worst Best Fit):分配满足程序要求且长度最大的分区
- 回收
- 在回收一个分区时,系统中空闲区的个数变化情况是:满足图5-12(a)类型时,空闲区个数增加1个;满足图5-12(b)或(c)类型时空闲区个数不变;而满足图5-12(d)类型时,空闲区的个数反而减少1个
- 在回收一个分区时,系统中空闲区的个数变化情况是:满足图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$$
- 虚拟地址 a,块长 b,则页号 p,页内地址 w 为$$p = a / b$$ $$w = a % b$$
- 静态分页
- 程序装入时,把程序的所有页全部一次性装入内存
- 怎么存内存块的使用情况
- 位示图
- 空闲块链表
- 怎么存进程占用的物理块:页表
- 页表:登记进程页与块对应关系的数据结构;每一个进程都有
- 作用:重定位和存储保护
- 页表的建立和初始化
- 就是内存分配的过程,见题目
- 特点
- CPU每访问一条指令或一个数据,都要2次访问内存:
- 在MMU重定位过程中,根据页号查找内存中的页表得到块号
- CPU根据重定位得到的物理地址访问内存中的指令或数据
- CPU每访问一条指令或一个数据,都要2次访问内存:
- 虚拟存储器思想
- 见书 187
- 理论基础:程序的局部性原理
- 在程序运行过程的一个较小时间范围内,只需要一小部分的程序信息
- 调入策略
- 请求调入策略:处理器需要运行某指令或访问某数据时,发现不在内存,再去调入
- 预调入策略:处理器运行前,把需要的提前调入
- 动态分页
- 只装入程序的基本页,按调入策略分为请求分页和预调入分页,只讨论请求分页
- 实现关键
-
内存空闲块管理可以采用静态分页中的位示图或空闲块链表
-
扩充页表
- CPU 用来区分内、外存的页;扩充页表的基本结构主要由页号、块号、外存地址、中断位P、访问位A、修改位M 等组成。中断位为 1 表示该页在内存,修改位为 1 表示该页装入内存后被修改
-
缺页中断
- MMU 产生的一个特殊 I/O 中断,请求操作系统将某页从外存读入内存
-
页面调度
- 操作系统的缺页中断处理过程,要为新读入的页分配一个空闲块,如果内存没有空闲块,必须按指定的策略,从内存中选择一页将其信息淘汰,空出的块分配给新的页,把这个过程称为页面调度
- 只允许在当前运行进程的页表中选择淘汰的页叫局部调度,可以在全部运行进程的页表中选择淘汰的页叫全局调度
-
抖动现象
- 刚刚被调入内存的页很快地被淘汰调出内存,在淘汰不久又要访问它,即一段较短时间内,集中在少数的几个页之间,系统频繁地进行调入和调出操作
-
BELADY 现象
- 对于一个进程,分配的内存块数越多,它在运行过程中产生的缺页率越小,但是,对于 FIFO 置换算法,存在个别进程,分配给内存的块数增加,缺页率没有减小,甚至反而增加的反常现象
-
置换算法
- FIFO、LRU置换算法的思想及淘汰页面的计算及命中率
- 二次机会置换算法的思想及淘汰页面的计算及命中率
-
- 只装入程序的基本页,按调入策略分为请求分页和预调入分页,只讨论请求分页
- 分页存储管理的主要特点
- 非连续的存储分配,提高了存储空间的利用率
- 实现虚拟存储器
- 页表占用额外的存储开销
- 分页破坏了程序的完整性
- 请求分页存在抖动现象,降低CPU的利用率
分段存储管理
- 基本思想
- 程序“分段”:程序由若干个在逻辑上具有完整独立意义的单位组成,每一个单位为一个段,每个段有一个段号,一个段内的虚拟地址从 0 开始连续编号
- 内存动态分区:整个用户区作为一个用户区,程序装入时,按照程序的段来分配内存
- 非连续分配:同一个段上的信息在内存中是连续存放的,但不同段之间可以不在连续的物理空间上
- 内、外存统一管理实现虚拟存储器
- 实现关键
- 段表的结构由段号、段长度、中断位P、分区起始地址、外存地址、存取控制信息、访问位A 和修改位M 等组成
- 段表的结构由段号、段长度、中断位P、分区起始地址、外存地址、存取控制信息、访问位A 和修改位M 等组成
- 分段与分页的区别(重点)
-
差别 分页 分段 存储空间的分配单位粒度 以页为单位分配内存空间,页由硬件虚拟地址结构决定,页长度固定 以段为单位分配内存空间,段由程序员的程序设计决定,段长度不固定 虚拟地址空间的维数 一维 二维 内存分配 把内存空间看成一组大小相等的块组成 动态分区 碎片 每个进程的最后一页可能不足一个块的长度,所以存在内碎片 采用动态分区,随着分配和回收的不断进行,可能存在很小的空闲区,即外碎片
-
段页式存储管理
- 段页式存储管理中进程、段表和页表的关系
- 每个进程由多个段组成,每个段又分若干页
- 段表:管理进程段信息的数据结构
- 页表:管理一个段的页信息的数据结构