第六章存储管理存储管理功能内存资源管理存储管理方式外存空间管理虚拟存储系统6.1存储管理功能存储分配和去配–分配去配对象内存、外存(相同方法)–分配去配时刻进程创建、撤销、交换、长度变化记录内存资源和外存资源的使用情况存储共享–目的:节省内存、相互通讯–内容:代码、数据–纯代码((purecode),以保证“可再入”,即它在运行过程中不修改自身.存储保护–防止地址越界–防止操作越权6.1存储管理功能(Cont.)存储扩充–内存、外存结合,虚拟存储体系–速度接近内存,容量相当外存地址映射–逻辑地址=物理地址–硬件支持基址寄存器(base)、限长寄存器(limit)、快表;使用上述寄存器完成地址映射过程;不能正常完成地址映射时产生中断;需软硬件相结合来完成。6.2内存资源管理6.2.1内存分区–分区时刻静态分区:系统初始化时分;动态分区:申请时分。–分区大小等长分区:2i异长分区:依程序、程序单位、对象大小。–通常作法静态+等长(页式、段页式)动态+异长(段式、界地址)6.2.2内存分配静态等长分区的分配–字位映象图(bitmap)–空闲页面表–空闲页面链字位映象图(bitmap)100…1...10第0页第2页第1页第k页第n页......分配:自头寻找第一个为0的位,改为1,返回页号;去配:页号对应的位(bit)置为0。用一个bit代表一页状态,0表空闲,1表占用。(多单元)空闲页面表首页号空页数............1204特点:可以分配连续页面。占用占用120页121页122页123页......空闲页面链占用占用占用Head:优点:节省空间。(不适合管理外存)动态异长分区的分配空闲区首址空闲区长度............25001500数据结构:Criteria:尽量使空闲区域连续。初始时一个连续空闲区。长度=0为表尾。最先适应算法(FirstFit)空闲区首址空闲区长度128641024256322560......空闲区:首址递增排列;申请:取第一个可满足区域;优点:尽量使用低地址空间,高区保持大空闲区域。缺点:可能分割大空闲区。Eg.申请32将分割第一个区域。最佳适应算法(BestFit)空闲区:递增排列;申请:取最小可满足区域;优点:尽量使用小空闲区,保持大空闲区。缺点:可能形成碎片(fragment)。Eg.申请30将留下长度为2的空闲区。空闲区首址空闲区长度256321024256641280......最坏适应算法(WorstFit)空闲区:长度递减排列;申请:取最大可满足区域;优点:防止形成碎片。缺点:分割大空闲区域。空闲区首址空闲区长度128641024256322560......6.2.3碎片处理动态异长分区存储分配可能形成很小的空闲区域,称为碎片(fragment)紧凑:移动占用区域,使所有空闲区域连成一片(开销很大)。OSP1(248k)P2(250k)8k6k4k256k:512k:768k:264k:518k:P1OSP2256k:504k:754k:18k6.3存储管理方式界地址管理方式(一维地址)页式管理方式(一维地址)段式管理方式(二维地址)段页式管理方式(二维地址)6.3.1界地址管理方式4.3.1.1基本原理一个进程在内存空间的地址由两个参数确定:起始地址和长度,称作一个对界.1.内存空间划分:动态异长;2.进程空间划分:一个进程一个区域,逻辑地址0l-13.进程空间与内存空间对应关系:可以浮动0:l-1:......b:lb+l-1:进程空间内存空间6.3.1界地址管理方式4.所需表目:(1)内存分配表--在PCB中;(2)空闲区域表:用于记录内存中所有尚未分配的区域。5.所需寄存器:(1)基址寄存器;(2)限长寄存器。6.地址映射:6.3.1界地址管理方式6.地址映射:地址映射需要将程序所产生的逻辑地址变换为内存中的物理地址,即完成如下映射::(a)(b+a){}其中a为逻辑地址,b为进程起始地址.当a所对应的物理地址不存在时(越界),映射没有意义,结果为.6.3.1界地址管理方式0:l-1:......b:lb+l-1:lb逻辑地址CP+aa+b步骤:(1)由程序确定逻辑地址a;(2)a与l比较判断是否越界,不满足:0al-1,越界;(3)a与b相加得到物理地址。进程空间内存空间6.3.1界地址管理方式6.3.1.2双对界代码:一对界数据:一对界b1l1b2l26.3.1界地址管理方式6.3.1.3交换技术(swapping)交换(swapping):是指进程在内存空间与外存空间之间的动态调度,它是缓解内存空间紧张矛盾的一种有效方法.当外存中有可运行进程时,系统试图将其调入内存;当内存空间紧张时,系统将内存中某些进程,尤其是暂时不可运行的进程(如处于WAIT状态的进程)移到外存.采用交换技术,一个进程可在内外存之间交换,但由于交换的基本单位是整个进程,因而仍然不能运行比内存大的程序.覆盖技术覆盖(overlay)是将较大程序装入较小进程空间一种的技术.其思想是只将全局代码和数据静态地放在内存,其它部分则分阶段地动态装入。例如,一个包括四遍扫描的编译程序:6.3.2分页式存储管理(paging)6.3.2.1基本原理1.内存空间划分:静态等长,2i,称为一个页架(pageframe)。......第0页第1页第k页第2n-i-1页2i02i:12i:k2i:(2n-i-1)2i:物理地址=页架首址+页内地址=页架号2i+页内地址=页架号页内地址i位n-i位6.3.2分页式存储管理2.进程空间划分:静态等长,2i,称为一个页面。......第0页第1页第k页第l-1页2i02i:12i:k2i:(l-1)2i:逻辑地址=逻辑页首址+页内地址=逻辑页号2i+页内地址=逻辑页号页内地址i位3.进程空间与内存空间对应关系...第0页第1页第2页第3页第16页第22页第32页第15页.........进程空间内存空间4.所需表目:(1)页表,每个进程一个物理页号逻辑页号:1522163201235.所需寄存器(2)总页表:系统一个(1)页表首址寄存器:bl(2)页表长度寄存器:系统一个系统一个(3)快表:系统一组逻辑页号页架号............fp逻辑地址(p,d)物理地址(f,d)(1)由程序确定逻辑地址(p,d);(2)由p查快表得页架号f;如查不到:(a)由p与l比较,判别是否越界:不满足:0pl-1,越界;(b)由p和b查页表得f,(p,f)快表,如满淘汰一个;//(c)转(2)(3)f与d合并得物理地址6.地址映射:(p,d)(f,d){}表6-1快表长度与页命中率的关系块表长度命中率(%)885129316973298假定快表的命中率为98%,快表的访问时间为20(ns),内存的一次访问时间为100(ns),则内存有效访问时间(effectiveaccesstime)为:EAT98%(20+100)+2%(20+200)122(ns)...逻辑页号页架号............fplbbl......PCB页架号逻辑页号...f...p...fdpd+cppf物理地址逻辑地址b:...6.3.2.2多级页表提出背景–进程虚拟空间大幅度增加单级页表需要很大连续内存空间–多线程设计导致进程虚拟空间不连续性页表所占内存空间浪费–例如32位进程地址空间,页长4k(占12位),页号20位,页表需要220个入口!–解决策略二级或多级页表例如对于四级页表,假定快表的命中率仍为98%,快表与内存的访问时间仍分别为20(ns)和100(ns),有效访问时间为:EAT98%(20+100)+2%(20+500)128(ns)二级页表6.3.2.3反置页表(invertedpagetable)传统页表面向进程空间–每个进程逻辑页面有一表项–当进程空间很大时,页表很大反置页表面向内存空间–每个内存页架一个表项–大小固定反置页表--工作原理程序物理内存……pidp……fdpidpdf逻辑地址物理地址反置页表速度问题反置页表查找–由表头起始,平均为表长度的一半–速度慢解决方案–在反置页表前增加一级杂凑表–查找杂凑表与反置页表需要两次访问内存–为进一步提高速度,快表缓冲1.内存空间划分:动态异长,每区一段。段首址+段内地址物理地址=b’:l’b’+d6.3.3分段式存储管理(segmentation)2.进程空间划分:若干段,每段一个程序单位。调用x段ef:访问d段ae:调用y段fmain(段号0)X(段号1)Y(段号2)D(段号3)a:0…80k-10...40k-10…20k-10…60k-1逻辑地址=段号段内地址(二维地址)mainxyd3.对应关系40k60k80k20k............进程空间内存空间100k:200k:300k:320k:4.所需表目(1)段表:每进程一个段首址段长度100k40k80k60k段号0:1:2:3:20k200k320k300k(2)空闲表:系统一个arrayof(addr,size)5.所需寄存器(1)段表首址寄存器:bl(2)段表长度寄存器:系统一个系统一个(3)快表:系统一组:段号段首址段长度............l’s...b’...6.地址映射:(s,d)(b’+d){}逻辑地址(s,d)物理地址(b’+d)(1)由程序确定逻辑地址(s,d);(2)由s查快表得b’和l’如查不到:(a)由s与l比较判断是否越界不满足:0sl-1,越界;(b)由s和b查段表,得b’和l’(s,b’,l’)快表,如快表满淘汰一个;//(c)转(2)(3)由d与l’比较,判断是否越界不满足:0dl’-1,越界;(4)由b’d得物理地址。段号段长段首址...…...…......l’b’slbbl......PCB段长段首址段号…...l’b’...s...b’+dsd+cpsl’b’物理地址逻辑地址…...cp+b:6.3.3.2段的共享段长段首址…...b’l’......段号…si...P1段表:段长段首址…...b’l’......段号…sj...P2段表:共享段......b’:l’内存空间段名共享记数段长段首址其它…………...vi335k125k??…………...共享段表:进程段表(n)共享段表(1)共享段(1)6.3.3.2段的保护(1)段表的改进:段长段首址……......l’b’101段号…s...访问权限RWE……......段号段长段首址………......sl’b’101访问权限RWE(2)快表的改进:………......6.3.4段页式存储管理(segmentationwithpaging)段式优于页式–便于共享和保护页式由于段式–消除“碎片”问题段页式:结合二者优点–每个进程包含若干段–每个段包含若干页6.3.4.1基本原理1.内存空间划分:(同页式)静态等长,2i,称为一页。物理地址=(页架号,页内地址)=(f,d)2.进程空间划分:一个进程若干个段一个段若干个页逻辑地址=(段号,逻辑页号,页内地址)=(s,p,d)3.对应关系:0页1页2页0页1页第1段:0页1页2页第0段:第2段:25页26页27页28页29页30页31页32页33页......内存空间进程空间4.所需表目(1)段表:每个进程一个页表首址页表长度…...b’l’…...段号0...s...l-1(2)页表:每个段一个逻辑页号0…p…l’-1页架号...f...(3)总页表:系统一个5.所需寄存器(1)段表基址寄存器:保存正运行程度段表首址;(2)段表限长寄存器:保存正运行程序段表长度。(3)快表:一组联想寄存器(快段表+快页表)段号逻辑页号页架号……...spf……...bl6.地址映射(P.141):(s,p,d)(f,d){}逻辑地址(s,p,