第3章存储管理本章研究的主要目的:第一、要使主存得到充分、有效的利用;第二、为用户提供方便的使用环境。第3章存储管理3.1概述3.2地址映射3.3分区管理3.4覆盖与交换3.5分页管理3.6分段管理3.7段页式管理3.8虚拟存储器管理3.1概述存储器分类内存:CPU直接存取,存放正要执行的程序和数据,访问速度快,价格贵,容量小。外存:CPU不能直接访问,存放暂时不执行的程序和数据,访问速度慢,容量大。存储管理指内存管理现代计算机系统的运行机制是基于冯·诺依曼的存储程序原理,即任何一个程序(包括操作系统本身)都必须被装入内存,占用一定的内存空间,才能执行,才能完成程序的特定功能。计算机采用二级存储结构:内存区包括系统区和用户区,系统区包括操作系统程序本身和系统扩展区,用户区包括目态下运行的系统程序和用户程序与数据;外存是大容量的磁盘或磁带等,存放准备运行的程序和数据,当进程要运行时,这些相应的程序和数据必须调入内存才能执行。在多道程序环境下,用户区可以同时存放几道程序,为多道程序所共享。用户程序与数据目态下运行的系统程序系统扩展区操作系统系统区(管态)用户区(目态)计算机二级存储结构所谓内存管理,是指内存用户区的管理,并不包括系统区。内存管理的目的:方便用户使用和提高内存的利用率。内存管理的主要任务是:(1)内存的分配与回收。(2)地址映射。(3)内存的共享。(4)存储保护。(5)存储扩充。3.2地址映射3.2.1逻辑地址3.2.2物理地址3.2.3地址映射方式3.2.1逻辑地址逻辑地址,也叫虚地址。我们平时用高级语言或汇编语言编程时,源程序中使用的地址都是符号地址,如:gotoLabelCALLsubroutine1用户不必关心符号地址Label或subroutine1在内存中的物理位置。源程序经过编译或汇编,再经过链接后,形成了一个以0地址为起始地址的虚拟空间,每条指令或每个数据单元都在虚拟空间中拥有确定的地址,该地址就称为逻辑地址,或虚拟地址。3.2.2物理地址物理地址,也叫实地址。所有程序必须装入内存才能执行。程序在执行时所占用的存储空间称作它的内存空间,也叫物理空间。一个物理空间是若干物理地址的集合。地址映射当内存分配区确定后,就要将虚拟地址变换为内存的物理地址,即地址映射(或重定位)3.2.3地址映射方式地址映射有两种方式:静态映射和动态映射。1.静态映射静态映射是在程序装入指定内存区时,由重定位装入程序一次性完成的。假设目标程序分配的内存区起始地址为B,那么程序中所有逻辑地址(假设为a),对应的内存空间的物理地址为B+a。动态映射是在程序执行过程中进行的,由硬件地址映射机构完成。其方法是:设置一个公用的基地址寄存器BR,存放现行程序分配的内存空间的起始地址。CPU以逻辑地址访问内存时,映射机构自动把逻辑地址加上BR寄存器中的内容而形成实际的物理地址如图2.动态映射只要改变BR的内容,就可改变程序的内存空间,实现程序的再定位。所以BR也叫重定位寄存器。3.3分区管理3.3.1固定分区管理3.3.2可变分区管理3.3.3地址转换与存储保护分区管理思想为了满足多道程序设计技术,把内存空间划分成若干个大小可等可不等的连续区域,每个用户作业分配一个区域,用户作业一次整体装入到这个区域中,并限制只能在这个区域中运行。分区方式分为:单一连续分配固定分区可变分区两种可重定位式分区多重分区3.3.1固定分区管理固定分区管理的基本原理:把内存分为若干大小相等或不等的分区,分区的大小和分区的总数由操作系统在系统初启时建立,一旦建好,在系统运行过程中,每个分区的大小和分区总数都是固定不变的。用到的数据结构主要有分区说明表(PDT),PDT中,每一行为一个表目,分别记载着一个分区的特性,每个表目由若干栏目组成,包括分区号、分区大小、起始地址以及分区的使用状态(已分配用1表示,空闲用0表示)。3.3.1固定分区管理(1)基本概念物理地址:实实在在的内存编号;逻辑地址:基地址+偏移量地址重定位:把用户程序指令中的相对地址变换成在绝对地址空间的绝对地址的过程;(2)单一连续分区存储管理基本思想操作系统区作业区一个用户程序独占作业区操作系统区作业区作业操作系统未用32KB64KB160KB分配给用户作业的空间单一连续分配浪费单一连续分配仅适用于单道程序设计环境,处理机、主存都不能得到充分的利用。操作系统Call100H……1000H2000H3000H4000H采用静态重定位程序运行前就完成了重定位工作特点:程序运行前完成了地址重定位,即分配地址空间;软件实现;实行重定位时,程序装入一次性完成;静态重定位后,指令中的地址不再反映实际位置;(2)单一连续分区存储管理实质:将存储器分为操作系统区和用户区两个部分,用户区一次只接纳一个任务,即单道程序静态重定位;概念:保护存储:阻止用户有意无意的通过不正当手段访问操作系统区。界限寄存器:存放用户区的首地址,cpu在管态下允许访问任何地址;在目态下,每次方存都要进行比较,以免发生访问越界;(2)单一连续分区的缺点单道程序,效率低,资源利用率低;对换技术:将作业信息存放在辅存上,每次只让一个进入内存执行,当有I/o请求或者时间片到达时,换出内存然后让其他作业进入;作业比用户区小则造成浪费;若作业比用户区大则作业无法运行;覆盖技术:允许一个作业的若干程序段使用同一个存储区,被公用的存储区叫做覆盖区;Main(10kb)A(50kb)C(30kb)B(30kb)D(20kb)E(40kb)Main(10kb)A(50kb)B(30kb)C(30kb)D(20kb)E(40kb)10kb50kb40kb(3)固定分区存储器管理概念:预先将用户区分为若干连续部分,每个分区尺寸可以相同也可以不同,划分后其个数和每个分区的尺寸不变,每个分区中,只允许装入一个作业运行;实现:(后备队列)能容忍分区的最大~最小作业都在该分区的后备队列上。缺点:有些分区忙碌有些空闲;改进:让多个分区共享一个队列;分区的分配和释放问题提出:多个作业共用一个分区时,如何调度?即:存储区选择作业。解决:从队列中挑选第一个可容纳的作业。缺点:作业如果过小,则产生浪费;从作业挑选可容纳的最大作业。缺点:歧视小作业且效率低下;保留至少一个小分区以满足小作业的运行;用分区分配表实现PDT分区号起始地址长度使用标志120kb8kbJob1228kb32kbJob6360kb64kb04124kb132kbjob2地址重定位和存储保护每个分区中只有一个作业,分区首地址就是作业的基址;要防止程序间的越界访问:解决越界方法:低界限寄存器高界限寄存器固定分区的特点和不足特点:多道作业;作业独立分配分区,一次性装入;分配分区后,用静态重定位;缺点:作业的大小与分区的大小一般会不吻合;大作业可能分配不到足够大的分区而得不到运行;3.3.2可变分区的存储器管理实质:作业要求进入内存时,若当时的内存中有足够空间则满足作业要求,并划给一块与作业等大的存储区;优点:每个作业都量体裁衣,不会出现内部碎片;(内/外部碎片)缺点:分区的数目会逐渐增加,每个分区亦在逐渐减小,造成有些分区太小而分配不下去;3.3.2可变分区管理1.可变分区/动态分区,与固定分区有三点不同:1)分区的建立时刻可变分区:在系统运行过程中,在作业装入时动态建立固定分区:系统初启时建立。2)分区的大小可变分区:根据作业对内存的需求量而分配。固定分区:事先设定,固定不变。3)分区的个数可变分区:变化不定。固定分区:固定不变。1)基本原理对于可变分区管理,系统初启时,内存除操作系统区外,其余空间为一个完整的大空闲区。当有作业申请时,则从空闲区划出一个与作业需求量相适应的区域进行分配;作业结束时,收回释放的分区;若与该分区邻接的是空闲区,则合并为一个大的空闲区。随着一系列的分配与回收,内存会形成若干占用区和空闲区交错的布局。2.可变分区分配可见,可变分区管理也存在“碎片”问题。解决的办法是:对碎片进行拼接或密集(Compacting)注意掌握拼接的时机:(1)回收某个占用区时。(2)需要为新作业分配内存空间,但找不到大小合适的空闲区,而所有空闲区总容量却能满足作业需求量时。通常使用拼接或密集的方法对上述情况进行处理,当然,需要进行重定位,用动态地址映射方法实现。2)数据结构可变分区的分区个数是动态变化的,为了记载内存的使用状态,不能采用固定分区中使用的静态表数据结构——分区说明表PDT。通常用占用区说明表UPT和空闲区说明表FPT(或空区链结构)来记录可变分区的内存分配情况。可变分区引发的问题采用重定位技术,以便程序在内存中能随意移动,唯空闲区的合并提供依据;记住各个分区的情况并加以合并;提出分区分配算法,让作业挑选合适的分区;动态重定位和静态重定位比较:静态重定位动态重定位概念程序运行前实现重定位;程序运行时实现重定位;地址转换时刻运行前运行时谁来完成任务软件硬件完成形式一次性完成每执行一条则定位一条完成结果原来指令的地址被修改对指令本身没有修改操作系统Call100H……1000H2000H3000H4000H1000H+1、固定分区存储管理把主存储器划分成若干个连续区,每个连续区称一个分区。经划分后分区的个数是固定的,各个分区的大小()。A.是一致的B.都不相同C.可以相同,也可以不相同,但根据作业长度固定D.在划分时确定且长度保持不变2、采用固定分区方式管理主存储器的最大缺点是()。A.不利于存储保护B.主存空间利用率不高C.要有硬件的地址转换机构D.分配算法复杂(4)空闲区的合并合并时机:调度道某个作业(大作业):为满足大作业需要而被迫合并,-〉花精力管理空闲区;作业运行完释放资源时:总是保持较大的内存区,但合并频率高而导致开销会增大。管理方式:表格法、单链表法、双链表法、表格法操作系统空闲区(8KB)作业区(32KB)空闲区(32KB)作业区(120KB)空闲区(300KB)序号起始地址尺寸状态1--空228KB32KB作业B3--空492KB120KB作业D5--空序号起始地址尺寸状态120KB8KB空闲260KB32KB空闲3212KB300KB空闲4-空5-空020286092212512(5)空闲分区分配算法最先适应算法最佳适应算法最坏适应算法②最佳适应(最优)Bestfit:空白区表中的空白区按其容量以递增的次序排列。当要求分配一个空白区时,由小到大顺序查找分区说明表,找到第一个满足申请长度的最小空闲区,分配并分割。如果有剩余部分,作为一个空白区将其插入适当的位置;最佳适应算法:选择容量接近的空闲区来分配,产生大量碎片。分配策略/算法分区策略/算法③最差适应(最坏)Worstfit:空白区表中的空白区按其容量以递减的次序排列。查找分区说明表,找到第一个满足申请长度的空闲区,分配并分割。剩余部分插入适当位置。最差适应算法:分割大空闲区后,还可以产生较大的空闲区,空闲区均匀地减小,以避免碎片。分配策略/算法①首次/最先适应Firstfit:空白区按地址大小递增顺序排列。查找分区说明表,找到第一个满足申请长度的空闲区,分配并分割。剩余部分保留在空白区表中原来的位置。最先适应算法:尽可能利用存储器的低地址部分,因此在低地址部分会很快地产生大量碎片。分区策略/算法④唯一最佳适应算法(singlebestfit)分区按大小顺序分级(8KB、16KB、32KB、……)作业按请求容量也分成相应的存储级,仅当PDT中相应级的分区为空闲时,才进行内存分配,即使有更大的分区空闲也不予以分配。(b)(c)作业6256KB作业5128KB作业424KB作业3(120KB)作业2(32KB)作业1(8KB)OS1024KB504KB384KB352KB320KB312KB0作业6(256KB)作业