1.41k likes | 1.5k Views
操作系统原理与应用. 第三章 存储管理. 3.0 存储管理概述. 1. 存储器和存储系统 存储器( storage memory ) 能接收数据和保存数据、而且能根据命令提供这些数据的装置。 存储系统 包括存储器以及管理存储器的软硬件和相应的设备. 2. 存储器的层次结构. 在现代计算机系统中,存储器是信息处理的来源与归宿,占据重要位置。 但是,在现有技术条件下,任何一种存储装置,都无法同时从速度与容量两方面,满足用户的需求。 实际上它们组成了一个 速度由快到慢,容量由小到大 的存储装置层次。. 存储器的类型和特点 按 存储 介质分
E N D
操作系统原理与应用 第三章 存储管理
3.0存储管理概述 1. 存储器和存储系统 存储器(storage memory) 能接收数据和保存数据、而且能根据命令提供这些数据的装置。 存储系统 包括存储器以及管理存储器的软硬件和相应的设备
2. 存储器的层次结构 在现代计算机系统中,存储器是信息处理的来源与归宿,占据重要位置。 但是,在现有技术条件下,任何一种存储装置,都无法同时从速度与容量两方面,满足用户的需求。 实际上它们组成了一个速度由快到慢,容量由小到大的存储装置层次。
存储器的类型和特点 按存储介质分 半导体存储器、磁表面存储器、光存储器 按读写性质分 随机读写存储器(RAM) 只读存储器(ROM) 按在计算机中的层次作用分 主存储器、辅助存储器、高速缓冲存储器
主存和高速缓存之间的关系 Cache引入:为解决CPU和主存之间的速度差距,提高整机的运算速度,在CPU和主存之间插入的由高速电子器件组成的容量不大,但速度很高的存贮器。 Cache特点:存取速度快,容量小,存贮控制和管理由硬件实现。
主存与辅存之间的关系 主存(半导体) 优点:速度快 缺点:容量受限,单位成本高,断电丢失信息。 辅存(磁盘、光盘) 优点:容量大,单位成本低,信息长久保存。 缺点:存取速度慢 • CPU正在运行的程序和数据存放在主存 • 暂时不用的程序和数据存放在辅存 • 辅存只与主存进行数据交换
3. 内存的物理组织 物理地址:把内存分成若干个大小相等的存储单元,每个单元给一个编号,这个编号称为内存地址(物理地址,绝对地址,实地址),存储单元占8位,称作字节(byte)。 物理地址空间:物理地址的集合称为物理地址空间(主存地址空间),它是一个一维的线性空间。
4.程序的逻辑结构 程序地址:用户编程序时所用的地址(或称逻辑地址 、虚地址 ),基本单位可与内存的基本单位相同,也可以不相同。 程序地址空间(逻辑地址空间、虚地址空间):用户的程序地址的集合称为逻辑地址空间,它的编址总是从0开始的,可以是一维线性空间,也可以是多维空间。
主存储器是计算机系统中最为关键且最紧张的资源主存储器是计算机系统中最为关键且最紧张的资源 • 对主存储器的有效管理是现代操作系统中十分重要的问题
3.1 存储管理的功能 • 重点是研究主存的共享和各种分配算法。 • 存储分配 • 地址重定位 • 存储保护 • 存储扩充 • 研究各种地址变换机构, 以及静态和动态重定位方法。 • 研究保护各类程序、 数据区的方法。 • 主要研究虚拟存储器技术及其各种调度算法。
1. 存储分配 • 在多道程序系统中,存储分配首先应解决如何分配内存资源,使多道程序能共享内存。 • 为了实现对内存的分配管理,操作系统必须: • 构造相应的数据结构,记住内存各位置的状态,即每一位置是已分配的还是未分配的; • 当有系统程序或用户程序提出对内存空间的申请时,通过一定的策略确定其分配区域; • 实施具体的分配工作,修改有关记录; • 在系统程序或用户程序要释放己占有的内存区域时能及时收回该资源,并修改有关记录。
内存分配的方式 • 静态存储分配: • 内存分配是在作业运行之前各目标模块连接后,把整个作业一次性全部装入内存,并在作业的整个运行过程中,不允许作业再申请其他内存,或在内存中移动位置。 • 内存分配是在作业运行前一次性完成的。 • 动态存储分配: • 作业要求的基本内存空间是在目标模块装入内存时分配的,但在作业运行过程中,允许作业申请附加的内存空间,或是在内存中移动; • 分配工作可以在作业运行前及运行过程中逐步完成。
2. 地址变换 • 名空间:源程序中全体符号名的集合就称为名空间。 • 地址空间:源程序经过汇编或编译、链接后,形成的目标程序中的地址称为逻辑地址(相对地址)。逻辑地址的集合就称为地址空间。 • 存储空间:内存中一系列物理存储单元的集合称为存储空间。每个存储单元用一个编号唯一标识。这个单元编号称为内存地址或物理地址(绝对地址)。
名空间、地址空间和存储空间 逻辑地址 名字变量 物理地址 ? 问题:物理地址和逻辑地址不一致!!!
地址重定位 • 当程序被装入内存执行时,所分配到的物理地址通常和程序中的逻辑地址是不一致的。 • 为此OS必须通过系统中的地址变换机构将相对的逻辑地址转换为处理机能直接访问的物理地址。这就是所谓的地址重定位,也称为地址变换或地址映射。 • 根据重定位的时间,可以将重定位分为静态重定位和动态重定位两种类型。
静态重定位:操作系统的重定位装入程序根据装配模块将要装入内存的起始地址对程序中使用的指令地址和数据地址进行修改,将其转换为实际的物理地址。静态重定位:操作系统的重定位装入程序根据装配模块将要装入内存的起始地址对程序中使用的指令地址和数据地址进行修改,将其转换为实际的物理地址。 • 这个过程是在程序装入内存,开始执行前一次完成。 地址空间 存储空间
静态重定位的特点 • 静态地址重定位的优点是容易实现,无需硬件支持。 • 主要缺点: • 用软件实现将花费一定的CPU时间。 • 地址变换后的程序不能在内存搬动,因而不能重新分配内存,不利于内存空间的有效利用。 • 目标程序在内存空间中只能连续分配,不能分布在内存的不同区域中。因此必须在装入执行之前完成链接,否则将无法得到正确的内存地址空间。 • 多个用户难以共享内存中的同一程序,若要共享,各用户必须使用各自的副本。
动态重定位 • 动态地址重定位是在程序执行时进行的。程序在装入内存时,不作任何修改,其地址部分仍为逻辑地址。当需要访问内存单元时,再根据提供的程序装入内存的起始地址,进行地址变换。
动态重定位的特点 • 动态地址重定位的主要优点: • 目标程序装入内存时无须任何修改;程序装入内存后可以搬动(只须修改重定位寄存器的基地址即可),因而可重新分配内存,内存空间的使用更为灵活有效。 • 目标程序的各个模块可以拥有自己对应的重定位寄存器,所以各个模块可以装入不同的存储区域,因此可以向用户提供比实际内存空间大得多的地址空间。 • 多个用户可以共享内存中的同一程序,无须建立副本。 • 主要缺点是实现的软件较为复杂且需要硬件支持。
系统空间 OS 用户1 用户2 用户空间 用户3 3. 存储保护 • 在多道程序设计环境下,内存中系统或用户的许多程序和数据段可供不同的用户进程共享。这种资源共享提高了内存的利用率。 • 但除了被允许共享的部分之外,要限制各进程只在自己的存储区活动,不能对别的进程的程序和数据段产生干扰和破坏,因此必须对内存中的程序和数据段采取保护措施。 • 常用的存储保护方法有界限存储保护法、存储访问键方法,以及界限寄存器与用户态/核心态相结合等保护方法。
0K 下界寄存器 20K 20K 程序数据 上界寄存器 25K 25K 界限存储保护法 • 在程序执行过程中,在对内存进行访问操作时首先检查经过重定位后的内存地址是否在上、下界寄存器所规定的范围之内。若在规定的范围之内,则访问是合法的;否则是非法的,并产生访址越界中断。 • 上下界存储保护法: • 系统为每个进程设置一对上、下界寄存器,分别存放当前运行的程序和数据在内存空间的起始和终止地址,用它们来限制用户程序的活动范围。
4. 存储扩充 • 存储扩充是指采用虚拟存储管理技术对内存进行逻辑上的扩充。 • 虚拟存储器并不是以物理方式存在的主存储器,而是为了满足用户程序的需求,从逻辑上构造的远大于实际内存的、以逻辑方式存在的存储器。
虚拟存储技术的基本思想: • 把程序的逻辑地址空间与内存的物理地址空间分开处理,各自形成编址范围; • 利用大容量的辅存存储大量程序和数据,把实内存作为程序执行的工作区。 • 一个作业运行时,只有当前运行所必需的一部分程序调入内存,其他部分则存于外存,当所访问的信息不在内存时,系统自动将其从外存调入内存。 • 这样用户编制程序时不需考虑实际主存空间的容量,就像有一个足够容量的主存储器供其使用。这样即提高了系统的效率,也大大地方便了用户。
物理地址空间 虚拟地址空间 主存 辅存 存储 管理 部件 虚地址 实地址 处理器 虚拟存储器的概念图 • 虚拟存储器是为扩大主存而采用的一种设计技巧,它的容量与主存大小无直接关系,而受限于计算机的地址结构及可用的辅助存储器的容量。
实现虚拟存储器必须解决好以下有关问题: 主存辅存统一管理问题、 逻辑地址到物理地址的转换问题、 部分装入和部分对换问题。 虚拟存储管理主要采用以下技术实现: 请求分页虚拟存储管理 请求分段虚拟存储管理 请求段页式虚拟存储管理
虚拟存储器的特性 • 实现虚拟存储的物质基础:一定容量的主存、大容量的内存和地址变换机构。 • 影响虚拟存储容量的因素: • 虚拟存储器的最大容量不能超过CPU的寻址范围; • 虚拟存储器的实际容量不能超过辅存的容量。
3.2 分区存储管理 • 分区管理是满足多道程序设计的一种最简单的存储管理方法。 • 分区管理把内存划分成若干个大小不等的区域,除操作系统占用一个区域之外,其余由多道环境下的各并发程序共享。 • 分区管理的基本原理是给每一个内存中的进程分配一块适当大小的存储区,以连续存储各进程的程序和数据,使各进程得以并发执行。
1 单一连续分区存储管理 • 在早期的单道批处理系统中,内存空间分为系统区域和用户区域两个部分。 • 系统区域:设置在内存的低地址部分,专供操作系统使用; • 用户区域:除系统区域以外的剩余部分,全部分配给一个作业使用。 • 特点: • 分配和回收容易、算法简单 、需要硬件保护机构。
操作系统 系统空间 32KB 作业 64KB 用户空间 未用 160KB 单一连续分区分配示例 • 问题: • 存储器利用率低; • 处理机利用率低; • 作业的周转时间长; • 缺乏灵活性。
2. 固定式分区 基本思想: • 在作业未进入内存之前,就把内存空间划分成若干个固定大小的存储区,除操作系统占用一个区域外,其余区域为系统中多个用户共享。 • 在系统运行期间,分区大小、数目都固定不变,所以固定式分区也称为静态分区。 注意:需要硬件地址保护机构
固定式分区的实现 • 操作系统通过分区说明表的数据结构对内存进行管理和控制。 • 分区说明表说明各分区号、分区大小、起始地址和是否是空闲区(分区状态)。 • 内存的分配释放、存储保护以及地址变换等都通过分区说明表实现。
1区 2区 3区 4区 固定式分区分配示例 分区说明表 • 假设主存的分区情况如右图:
固定式分区的分配与回收 • 固定分区的分配:当用户程序要装入执行时,通过请求表提出内存分配要求和所要求的内存空间大小。存储管理程序根据请求表查询分区说明表,从中找出一个满足要求的空闲分区,并将其分配给申请者。 • 固定分区的回收:当进程执行完毕,不再需要内存资源时,管理程序是将对应的分区状态置为未使用即可。
固定式分区分配的浪费现象 • 由于作业大小与分区大小不一定相等,当一个作业装入分区后,总会有一部分剩余空间被浪费。
2. 可变式分区 基本思想: • 分区的个数与大小并不事先划定,而是在装入作业和处理作业的过程中根据装入的作业大小动态建立分区,所以又称为动态分区。 • 由于分区大小是按作业大小划分的,因此,克服了固定分区对内存资源的浪费。 FIFO调度时初始分配
随着作业的撤离和再装入,原来连续的内存空闲区变成了分散的碎片。随着作业的撤离和再装入,原来连续的内存空闲区变成了分散的碎片。 可变式分区示例 • 在系统初启时,内存中除了操作系统常驻部分之外,只有一个空闲分区。
可变分区管理的数据结构 使用分区说明表、空闲分区表和资源请求表对内存进行管理。 • 上例中作业1、3释放后的分区说明表:
空闲分区的组织形式 • 在每个空闲分区的起始部分开辟出一个单元,存放一个链表指针和该分区的大小,链表指针指向下一个空闲分区。 • 系统中用一个固定单元作为空闲分区链表的链表头指针,指向第一块空闲分区首地址,最后一块空闲分区的链表指针存放链尾标志。
空闲分区的组织示例 • 上例中的空闲分区的组织:
可变式分区的分配与回收 可变分区的分配与回收主要解决三个问题: • 对于请求表中的要求内存长度,从空闲分区链中寻找出合适的空闲区分配给程序。 • 分配空闲区之后,更新空闲分区链。 • 进程或作业释放内存资源时,和相邻的空闲区进行链接合并,更新空闲分区链。
内存空间的回收 • 当某一个用户作业完成释放所占分区时,系统应进行回收。 • 在可变式分区中,应该检查回收区与内存中前后空闲区是否相邻,若相邻,则应进行合并,形成一个较大的空闲区,并对相应的链表指针进行修改; • 若不相邻,应将空闲区插入到空闲区链表的适当位置。
合并 合并 合并 回收区和上下相邻区的关系
可变分区的分配算法 • 可变分区分配时,从空闲链中寻找空闲区放置作业或进程的方法称为放置策略。常用的有以下三种: • 首次适应算法(first fit algorithm) • 最佳适应算法(best fit algorithm) • 最差适应算法(worst fit algorithm) • 这三种方法要求空闲分区链按不同的方式排列。
1)首次适应算法 • 该算法将作业或进程放置到最先找到的那个空闲区中。要求空闲分区链按起始地址递增的次序排列。 • 特点:一旦找到大于或等于所要求内存长度的分区,则结束探索。 • 优点: • 具有最佳搜索速度。 • 尽可能地利用了低地址空间,从而保证高地址有较大的空闲区来放置要求内存较多的进程或作业。 • 回收的相邻空闲区容易合并。 • 缺点: • 低地址空间很快集中了很多小空闲区,分配时增加了搜索难度。
最佳适应算法 • 该算法将作业放置到能满足要求的最小的空闲区中。要求空闲区按照从小到大的次序组成可用表或自由链。当找到第一个满足要求的空闲区时,停止查找。 • 优点: • 该算法找到的空闲区是最佳的,或者是正好等于用户请求的大小或者是能满足用户要求的最小空闲区。 • 平均查找到表格一半处便能找到最佳适应的空闲区。 • 缺点: • 必须先按大小对空闲区进行排序。 • 空闲区一般不可能恰好满足要求,多次分配后会剩下许多非常小的碎片,这些小碎片难以分配和使用。
最坏适应算法 • 该算法将作业放置到能满足要求的最大的空闲区中。要求空闲区按其大小递减的顺序组成空闲区可用表或自由链。若空闲分区链的第一个项长度小于所要求的,则分配失败。 • 优点: • 只需一次查找就能判断能否满足要求。 • 分配剩余的空间通常仍可以使用。 • 缺点: • 必须先按大小对空闲区进行排序。 • 各空闲区均匀地减小,多次分配后就不能满足对于大空间的需求。