1第3章存储器管理23.1存储管理概述3.2分区式存储管理3.3覆盖和对换3.4分页存储管理3.5请求分页存储管理3.6分段存储管理3.7段页式存储管理3本章主要内容:主要是对内存的管理如何使内存得到充分、有效的利用如何为用户提供方便的内存使用方法43.1存储管理概述3.1.1存储管理的概念程序处理的典型过程:取指→译码→取操作数→计算得结果根据存储地址实现任务→要有效管理存储器的内存空间。大容量内存空间的追求5内存管理的主要任务:合理地建立用户程序与内存空间的对应关系,为各道程序分配内存空间,运行完成后再予以回收,而且始终要保证系统程序和各用户程序安全。存储管理的功能P11内存分配内存保护地址映射内存扩充内存分配内存保护地址映射内存扩充内存分配63.1.2地址重定位1.地址空间和存储空间名空间相对地址、逻辑地址、虚地址程序的逻辑地址空间(地址空间)物理地址、物理地址空间(存储空间)GotoL1L1:…源程序编译Goto2…目标代码0123名空间地址空间装入Gotoa+2…内存(运行程序)aa+1存储空间…a+272.地址的重定位地址的重定位:当一个逻辑地址空间的程序装入到物理地址空间时,由于两个空间不一致,需要进行的地址映射。两种方式:静态重定位动态重定位静态重定位是在程序装入内存,开始执行之前进行地址重定位。静态重定位工作通常是由装配程序完成的.8优点:容易实现,无需硬件支持,它只要求程序本身是可重定位的,即对那些要修改的地址部分具有某种标识,地址重定位由专门设计的程序来完成。缺点:是程序经地址重定位后就不能移动了,因而不能重新分配内存,不利于内存的有效利用。Loadah,7810……78365……1000Loadah,10781001…………相对地址装入装入模块内存绝对地址10783659动态地址重定位是在程序执行期间,在每次存储访问之前进行的。在这种情况下,通常通过基地址寄存器、变址寄存器计算出指令的有效地址,再利用硬件机构实现地址映射,这样的硬件设备称为存储管理单元MMU(Memory-ManagementUnit)。通常采用的办法是利用一个重定位寄存器,对每一个有效地址都要加上重定位寄存器中的内容,以形成绝对地址10优点:程序在内存中的搬移不会对程序的正确执行造成影响,使内存得以被充分利用缺点:需要附加的硬件支持,实现存储管理的软件算法比较复杂。+Loadah,7810……78365……1000Loadah,781001…1078365………相对地址装入模块781000重定位寄存器113.1.3虚拟存储器概念的引入……一系列措施外存一部分当内存来用,使内存扩大对用户透明比实际大得多的存储器——虚拟存储器主要介绍请求分页和请求分段存储管理方式123.2分区式存储管理时期广泛使用包括:单一连续分配、分区分配分区分配:固定分区、动态分区、动态重定位分区13进程1OS系统区用户区3.2.1单一连续分配主要用于单用户单任务操作系统(如DOS).实施方案:(1)内存分配:整个内存划分为系统区和用户区(2)地址映射:物理地址=用户区基地址+逻辑地址。(3)内存保护:基址寄存器、界限寄存器、越界中断信号143.2.2固定式分区分配应多道程序的存储管理而产生.“固定”——分区数目和分区大小固定(1)内存分配/回收:分区说明表(由系统建立)分区号分区大小(KB)分区始址(k)状态12051240251350650…………15(2)地址映射:物理地址=分区始址+逻辑地址(3)内存保护:分区始地址、逻辑地址与所给分区大小相比较缺点:内存空间的利用率低有较多碎片右图只25%利用率分区1100KB分区2150KB分区3250KB分区4250KB分区5250KB程序4100KB程序550KB程序120KB程序230KB程序350KB163.2.3动态分区分配可变式分区分配的策略在进程装入和处理过程中建立分区,并要使分区的容量能正好适应进程的大小。内存分区数目——进程数目分区的大小——各个进程的大小1.动态分区的配过程各空闲分区——空闲分区链分区说明表17图3-6空闲分区链前向指针N+20后向指针N+2018图3-7动态分区流程空闲分区大于程序大小?查找空闲分区链空闲分区-程序大小≤规定剩余大小?该空闲区分给申请程序从该分区划分出申请空间找完?YYNN无法分配Y修改分区说明表、空闲链返回N192.动态分区分配算法1)首次适应算法(FF,FirstFit)空闲分区链以地址递增的顺序链接,分配时从链首开始查找,找到第一个大小可以满足的分区为止.低地址由于被划分的可能性比较大,容易形成多个过小分区而难以利用,成为外部碎片。同时这些小分区增加了查寻时的判断时间,降低了效率。202)循环首次适应算法为了改变首次适应算法每次从链首开始查寻造成的缺陷,可以增加一个起始查寻指针,指向下一次开始查寻时的起始分区,在查寻过程中,该指针向后移动,当移动到最后一个空闲分区后,重新回到链首。这种方法可以使内存区分配比较平均,减少查寻次数,但又造成了缺少大空闲分区,使得大进程无法进入。213)最佳适应算法空闲分区链按照分区容量递增的方式形成,分配时从链首开始查找,平均查找次数为分区数的一半,也就是说它是“最佳适应”的。这种方法所造成的剩余分区又肯定是相对最小的,通常难以利用,甚至我们可以说,每次分配一个分区都会造成一个无法再利用的“碎片”,而这些“碎片”的总容量可能是比较大的。224)最差适应算法并非“最差”空闲分区链按照分区容量递减的方式形成,分配时从链首开始,若链首分区大小不满足,则可以肯定不存在能够满足要求的分区;否则对链首分区进行划分,剩余空间成为“碎片”的可能性肯定是最小的。具有查找速度快,分区碎片少的优点,但又会产生缺少大分区的缺点。23首次适应算法是最简单,而且是最快和最好的算法。循环首次适应算法比首次适应算法稍差一些最佳适应算法虽然名字中有“最佳”,但实际上是性能最差的。最差适应算法并非“最差”但在某些应用情况下,上述比较结果会有所变化。243.动态分区的回收M1回收区M2回收M1空白区M2(a)M1回收区M2回收M1M2(b)M1回收区M2回收M1M2(c)M1回收区M2回收M1(d)253.2.4动态重定位分区分配碎片问题→”紧凑”方法思考:是否每回收一个分区就进行紧凑?动态重定位分区分配=动态分区+“紧凑”系统区程序A5KB程序B3KB程序C2KB紧凑系统区程序A程序B程序C10KB(a)(b)263.2.5分区分配方案的评价地址映射——“物理地址=分区始地址+逻辑地址”分区始地址固定分区分配“基址寄存器”动态分区分配“基址寄存器”动态重定位分区分配“重定位寄存器”内存保护“基址寄存器”和“限长寄存器”或下限寄存器和上限寄存器27分区分配方案的主要优点可归纳如下:(1)多道程序下的内存共享,改善了系统吞吐量,在内存利用率方面,从固定式分区到动态分区,再到动态重定位分区依次提高。(2)相对于后面介绍的存储管理方式,为实现分区分配所使用的数据结构占用的存储容量相对较少,算法也相对简单。(3)实现存储保护的措施也比较简单。28分区分配的主要缺点有:(1)内存仍不能充分利用,除了动态重定位式分区法外,都存在着严重的碎片问题。(2)不能实现对内存的扩充,因此进程的大小受到内存可用空间的限制。(3)与单一连续分配一样,要求一个进程在执行之前必须全部装入内存,因此在内存中可能包含不会被使用的信息。(4)“紧凑”提高了内存利用率,但是进程移动所产生的额外开销增加了CPU的负担。(5)几个并行进程之间不能共享存入内存的单一信息副本(如公用子程序、数据段等)。