第五章存储管理精选文档.ppt
第五章存储管理本讲稿第一页,共八十页本章内容提要引言分区法分页技术分段技术段页式技术虚拟存储器请求分页技术页面置换算法内存块的分配和抖动问题请求分段技术 Linux系统的存储管理本讲稿第二页,共八十页5.1 引 言n内存(Main Memory或Primary Memory或Real Memory)也称主存,是指CPU能直接存取指令和数据的存储器。内存在计算机系统中的地位5.1.1 用户程序的地址空间本讲稿第三页,共八十页 用户程序的主要处理阶段主要处理阶段 编辑 编译 连接 装入 运行有关概念 装入程序 相对地址或逻辑地址 绝对地址或物理地址 程序装入内存的方式 绝对装入方式 可重定位装入方式 动态运行时装入方式 本讲稿第四页,共八十页5.1.2 重定位n逻辑地址空间(简称地址空间)由程序中逻辑地址组成的地址范围n内存空间(也称物理空间或绝对空间)由内存中一系列存储单元所限定的地址范围n重定位 程序和数据装入内存时,需对目标程序中的地址进行修改。这种把逻辑地址转变为内存物理地址的过程称作重定位n重定位方式 静态重定位 动态重定位本讲稿第五页,共八十页1静态重定位 目标程序装入内存时进行地址变换 程序装入内存时的情况 静态重定位示意图 优点:无需增加硬件地址转换机构 主要缺点:位置“钉死”;不便共享本讲稿第六页,共八十页2动态重定位 程序执行期间进行重定位动态重定位示意图主要优点:位置可变,不必连续 ;易于共享 主要缺点:需要附加硬件支持;软件算法比较复杂 本讲稿第七页,共八十页5.1.3 对换技术对换两个进程示意图 多道程序对换技术示例 本讲稿第八页,共八十页5.2 分区法n分区分配是为支持多道程序运行而设计的一种最简单的存储管理方式。5.2.1 固定分区法n分区个数固定不变,大小固定不变n划分分区方式:等分方式 差分方式 本讲稿第九页,共八十页 固定分区法 固定分区管理示意图 分区说明表 优点:管理方式简单,所需操作系统软件和处理开销都小缺点:内存空间利用率不高,碎片严重;活动进程数目受限;无法预知所需内存大小 本讲稿第十页,共八十页5.2.2 动态分区法1分区的分配MVT的内存分配和进程调度情况 操作系统内部设置一个 内存登记表 本讲稿第十一页,共八十页 动态分区法2数据结构常用的数据结构形式:(1)空闲分区表(2)空闲分区链n使用链指针把所有的空闲分区链接成一条链 本讲稿第十二页,共八十页3分配算法(1)最先适应算法n空闲表是按地址地址排列的(即空闲块地址小的,在表中的序号也小)。(2)最佳适应算法n空闲表是以空闲分区的大小为序、按增量形式排列的,即小块在前,大块在后。(3)循环适应算法n最先适应算法的变种。它不从空闲表的开头查找,而从上次找到的可用分区的下一个空闲分区开始查找,从中选择满足大小要求的第一个空闲分区。本讲稿第十三页,共八十页 分配算法三种算法分配16KB空闲分区之前和之后的内存配置情况 本讲稿第十四页,共八十页4.碎片问题n“碎片”或“零头”:内存中这种容量太小、无法利用的小分区n内部碎片:在一个分区内部出现的碎片(即被浪费的空间),如固定分区法会产生内部碎片。n外部碎片:在所有分区之外新增的碎片本讲稿第十五页,共八十页5.2.3 可重定位分区分配1紧缩n紧缩(或拼凑)n可重定位分区法n紧缩时机释放所占分区时分配进程分区时 可重定位分区的紧缩示意图 本讲稿第十六页,共八十页2动态重定位的实现过程n动态重定位经常用硬件实现n硬件支持 基址寄存器 限长寄存器动态重定位的实现过程 本讲稿第十七页,共八十页3.可重定位分区法的优缺点优点:可以消除碎片,能够分配更多的分区,有助于多道程序设计,提高内存的利用率。缺点:紧缩花费了大量CPU时间 当进程大于整个空闲区时,仍要浪费一定的内存 进程的存储区内可能放有从未使用的信息 进程之间无法对信息共享本讲稿第十八页,共八十页5.3 分页技术5.3.1 分页存储管理的基本概念(1)逻辑空间分页(2)内存空间分块 内存块或页框(3)逻辑地址表示分页技术的地址结构示意图 给定的逻辑地址是A,页面的大小为L,则页号p和页内地址d可按下式求得 p=INT(A/L),d=A MOD L式中,INT是向下整除的函数,MOD是取余函数。本讲稿第十九页,共八十页 分页存储管理的基本概念(4)内存分配原则以块为单位 每个页面对应一个内存块 内存块可不连续分页存储管理系统示意图 本讲稿第二十页,共八十页(5)页表实现从页号到物理块号的地址映射分页存储管理的基本概念本讲稿第二十一页,共八十页(6)内存块表n整个系统有一个内存块表。每个内存块在内存块表中占一项,表明该块当前空闲还是已分出去了。分页存储管理的基本概念本讲稿第二十二页,共八十页5.3.2 分页系统中的地址映射分页系统的地址转换机构每个进程平均有半个页面的内部碎片每个进程平均有半个页面的内部碎片本讲稿第二十三页,共八十页5.3.3 页面尺寸折中方案设进程的平均大小为s字节,页面尺寸为p字节,每个页表项占e字节。那么,每个进程需要的页数大约为s/p,占用 s.e/p 字节的页表空间。每个进程的内部碎片平均为p/2。因此,由页表和内部碎片带来的总开销是:总开销=本讲稿第二十四页,共八十页5.3.4 硬件支持n由硬件实现页表的方式有多种,最简单的方式是由一组专门的寄存器来实现。n通常将页表保存在内存中,由一个页表基址寄存器PTBR指向该页表。整个系统只有一个PTBR。带来存取速度下降的矛盾n联想存储器,也称快表(或Translation Lookaside Buffer,TLB)。快表每项包括键号和值两部分,键号是当前进程正在使用的某个页面号,值是该页面所对应的物理块号。本讲稿第二十五页,共八十页利用快表实现地址转换示例 硬件支持命中率 在快表中成功找到指定页号的次数占总搜索次数的百分比 本讲稿第二十六页,共八十页5.3.5 保护方式(1)利用页表本身进行保护(2)设置存取控制位(3)设置合法标志本讲稿第二十七页,共八十页5.3.6 页表的构造1多级页表大多数现代计算机系统都支持非常大的逻辑地址空间,如232 264。在这种情况下,只用一级页表会使页表变得非常大。n一种方法是利用两级页表,即把页表本身也分页。两级页表地址结构示意图 本讲稿第二十八页,共八十页两级页表结构示意图 多级页表本讲稿第二十九页,共八十页两级页表结构的地址转换多级页表本讲稿第三十页,共八十页三级页表地址结构示意图 多级页表 2散列页表(Hashed Page Table)以页号作为参数形成散列值。散列表中每一项有一个链表,它把有相同散列值的元素链接起来。每个链表元素由三部分组成:页号 对应的内存块号 指向链表中下一个元素的指针本讲稿第三十一页,共八十页 散列页表散列页表构成及地址转换过程 本讲稿第三十二页,共八十页3倒置页表n它是按内存块号排序的,每个内存块占有一个表项。每个表项包括存放在该内存块中页面的虚拟页号和拥有该页面的进程标识符。倒置页表构成及地址转换过程 本讲稿第三十三页,共八十页5.3.7 页面共享可可再再入入代代码码(或或纯纯码码):在在其其执执行行过过程程中中本本身身不不做做任任何何修修改改的的代代码码,通常由指令和常数组成通常由指令和常数组成三个进程共享大小为三个页面的编辑器的情况,每个进程都有自己的私有数据页。页面共享示例 本讲稿第三十四页,共八十页5.4 分段技术5.4.1 分段存储管理的基本概念分段地址空间1分段分段段是一组逻辑信息的集合。每段都有自己的名字、长度。段号本讲稿第三十五页,共八十页2程序的地址结构n逻辑地址要用两个成分来表示:段号s和段内地址d 进程的逻辑地址空间是二维的分段技术地址结构示意图 本讲稿第三十六页,共八十页3内存分配n内存以段为单位进行分配,每段单独占用一块连续的内存分区。各分区的大小由对应段的大小决定。4段表和段表地址寄存器n系统为每个进程建立一个段映射表,简称“段表”。每个段在段表中占有一项,段表项中包含段号、段长和段起始地址(又称“基址”)等。n系统还要建立一个段表地址寄存器。它有两部分:该段表在内存的起始地址 该段表的长度。本讲稿第三十七页,共八十页5分页和分段的主要区别 页是信息的物理单位 段是信息的逻辑单位 页的大小是由系统确定的 段的长度因段而异 分页的进程地址空间是一维的 分段的进程地址空间是二维的 分页系统很难实现过程和数据的分离 分段系统却可以很容易实现这些功能本讲稿第三十八页,共八十页5.4.2 地址转换分段地址转换过程 本讲稿第三十九页,共八十页5.4.3 段的共享和保护1段的共享n共享是在段一级实现的,任何共享信息可以单独成为一段。n也可以只共享部分程序。分段系统中段的共享 本讲稿第四十页,共八十页2段的保护n段的保护措施包括以下三种:存取控制 段表本身可起保护作用 表项中设置该段的长度限制 段长 段表地址寄存器中有段表长度的信息 保护环 本讲稿第四十一页,共八十页5.5 段页式技术5.5.1 段页式存储管理的基本原理 等分内存 地址空间分段 段内分页 逻辑地址结构 内存分配 段表、页表和 段表地址寄存器 段页式存储逻辑地址结构示意图 本讲稿第四十二页,共八十页5.5.2 地址转换过程段页式系统的地址转换机构 本讲稿第四十三页,共八十页5.6 虚拟存储器5.6.1 虚拟存储器的概念n进程在执行之前要全部装入内存,这种限制是不合理的。程序中往往含有不会被执行的代码 分配的内存空间会大于它们的实际需要 一个程序的某些选项和特性可能很少使用n程序的执行过程也显示出局部性n按需分别调入内存会带来两点好处:用户编制程序时不必考虑内存容量的限制 在一定容量的内存中就可同时装入更多的进程本讲稿第四十四页,共八十页n虚拟存储器(Virtual Memory)用户能作为可编址内存对待的虚拟存储空间,它使用户逻辑存储器 与物理存储器分离,是操作系统给用户提供的一个比真实内存空间大得多的地址空间。n实现虚拟存储技术的物质基础 二级存储器结构 动态地址转换机构(DAT)n虚拟存储器实质上是把用户地址空间和实际的存储空间区分开来。n它主要受到两方面的限制:指令中表示地址的字长 外存的容量虚拟存储器的概念本讲稿第四十五页,共八十页5.6.2 虚拟存储器的特征 虚拟扩充 部分装入 离散分配 多次对换 本讲稿第四十六页,共八十页5.7 请求分页技术5.7.1 请求分页存储管理的基本思想n是在单纯分页技术基础上发展起来的n二者的根本区别在于请求分页提供虚拟存储器。n基本思想是:当一个进程的部分页面在内存时就可调度它运行;在运行过程中若用到的页面尚未在内存,则把它们动态换入内存。n为了标示进程的页面是否已在内存,在每个页表项中增加一个标志位。本讲稿第四十七页,共八十页5.7.2 硬件支持及缺页处理1页表机制n页表项通常包含下列5种信息:典型的页表表项示意图 本讲稿第四十八页,共八十页2缺页中断机构指令执行步骤与缺页中断处理过程 本讲稿第四十九页,共八十页5.7.3 请求分页技术的性能n缺页率p:表示缺页中断的概率(0p1)等于缺页次数与全部访问内存次数之比n有效存取时间可表示为:有效存取时间=(1-p)ma+p缺页处理时间本讲稿第五十页,共八十页n缺页导致以下一系列动作(设当前进程为A):捕俘进入操作系统 保存进程A的各个寄存器和进程状态信息 确定该中断是缺页引起的 检查对该页的访问是合法的,并确定该页在磁盘上的地址 把该页从盘上读到空闲内存块中,其中包括在设备队列中等待,直至该请求得到服务;等待盘寻道以及潜在时间;把该页传送到空闲内存块。在等待盘I/O完成时,把CPU分给其他进程(如进程B)盘I/O完成,发出盘中断 保存进程B的用户寄存器和进程状态 确定该中断来自磁盘 调整页表和其他表格,标明所需页已放入内存 进程A就绪,等待分配CPU 调度到进程A,则恢复它的各寄存器、进程状态和新的页表,然后重新执行前面被中断的指令。请求分页技术的性能本讲稿第五十一页,共八十页n缺页中断处理所花费的时间主要有以下三部分:处理缺页中断的时间 调入该页的时间 重新启动该进程的时间n将页面从盘上读到内存所花费的时间包括:磁盘寻道时间(即磁头从当前磁道移至指定磁道所用的时间)旋转延迟时间(即磁头从当前位置落到指定扇区开头所用的时间)数据传输时间 典型磁盘的旋转延迟时间约为8 ms,寻道时间约为15 ms,传输时间是1 ms。请求分页技术的性能本讲稿第五十二页,共八十页5.8 页面置换算法5.8.1 页面置换1页面置换过程页面置换过程 本讲稿第五十三页,共八十页2页面走向n抖动 频繁地更换页面,以致系统的大部分时间花费在页面的调度和传输上。n尽量避免系统“抖动”n存储访问序列也叫页面走向 对于给定的页面大小,仅考虑其页号,不关心完整的地址。如果当前对页面p进行了访问,那么,马上又对该页访问就不会缺页。这样连续出现的同一页号就简化为一个页号。如下地址序列(用十进制数表示):0100,0432,0101,0612,0102,0103,0104,0101,0611,0102,0103,0104,0101,0610,0102,0103,0104,0101,0609,0102,0105 若每页100个字节,则页面走向简化为:1,4,1,6,1,6,1,6,1,6,1本讲稿第五十四页,共八十页n一般来说,随着可用块数的增加,缺页数将减少。缺页量与内存块数关系图统一采用下述页面走向:7 7,0 0,1 1,2 2,0 0,3 3,0 0,4 4,2 2,3 3,0 0,3 3,2 2,1 1,2 2,0 0,1 1,7 7,0 0,1 1 并且假定每个作业只有三个内存块可供使用。页面走向本讲稿第五十五页,共八十页5.8.2 先进先出法(FIFO)n总是淘汰在内存中停留时间最长(年龄最老)的一页,即先进入内存的页,先被换出。FIFO页面置换序列 总共有15次缺页 本讲稿第五十六页,共八十页n优点:容易理解,方便程序设计。n缺点:性能并不很好,效率不高 存在Belady异常现象,即缺页率随内存块增加而增加关于一个页面走向的FIFO淘汰算法的缺页曲线先进先出(FIFO)法 本讲稿第五十七页,共八十页5.8.3 最佳置换法(OPT)n最佳置换算法(Optimal Replacement,OPT)其实质是:为调入新页面而必须预先淘汰某个老页面时,所选择的老页面应在将来不被使用,或者是在最远的将来才被访问。保证有最小缺页率 OPT算法在实现上有困难最佳页面置换序列 仅出现9次缺页中断 本讲稿第五十八页,共八十页5.8.4 最近最少使用置换法(LRU)n以“最近的过去”作为“不久将来”的近似n实质是:当需要置换一页时,选择在最近一段时间里最久没有使用过的页面予以淘汰。最近最少使用算法页面置换序列 产生12次缺页 本讲稿第五十九页,共八十页LRU算法需要实际硬件的支持。实现时的问题是:怎样确定最后访问以来所经历时间的顺序。有以下两种可行的办法:计数器 栈最近最少使用置换法利用栈记录目前访问最多的页面示例 本讲稿第六十页,共八十页5.8.5 第二次机会置换法(SCR)n第二次机会置换法(Second Chance Page Replacement,SCR)是对FIFO算法的改进 避免把经常使用的页面置换出去。n当选择某一页面置换时,就检查最老页面的引用位:如果是0,就立即淘汰该页;如果该引用位是1,就给它第二次机会。第二次机会法示例 本讲稿第六十一页,共八十页5.8.6 时钟置换法(Clock)简单时钟置换法该算法又称最近未使用置换法(Not Recently Used,NRU)改进的时钟置换法 在页表项中设置两个状态位:引用位和修改位 时钟置换法示意图 本讲稿第六十二页,共八十页5.8.7 最少使用置换法(LFU)n最少使用(Least Frequently Used,LFU)页面置换算法是基于访问计数的页面置换法。n为每个页面设置一个软件计数器n将每页的引用位R的值加到对应的计数器上。发生缺页时,淘汰其计数值最小的页。n老化(Aging)算法本讲稿第六十三页,共八十页5.8.8 页面缓冲算法 n页面缓冲算法(Page Buffering)是对FIFO简单置换算法的改进。该算法维护两个链表:一个是空闲页链表,另一个是修改页链表。n当发生缺页时,按照FIFO算法选取一个淘汰页,并不是抛弃它,而是把它放入两个链表中的一个。如果该页未被修改,就放入空闲页链表中;否则,把它放入修改页链表中。n驻留集:进程在内存映像的集合 本讲稿第六十四页,共八十页5.9 内存块的分配和抖动问题5.9.1 内存块的分配 1最少内存块数n分给每个进程的最少内存块数是指保证进程正常运行所需的最少内存块数,它是由指令集结构决定的。2内存块的分配 固定分配策略分配给进程的内存块数是固定的,且在最初装入时(即进程创建时)确定块数。可变分配策略允许分给进程的内存块数随进程的活动而改变。本讲稿第六十五页,共八十页页面置换范围 全局置换允许一个进程从全体存储块的集合中选取淘汰块,尽管该块当前分配给其他进程,还是能强行占用。局部置换是每个进程只能从分给它的一组内存块中选择淘汰块。局部置换可与固定分配策略相结合局部置换可与可变分配策略相结合 全局置换只能与可变分配策略相结合 内存块的分配本讲稿第六十六页,共八十页3分配算法(1)等分法内存块按进程平分(2)比例法 设进程pi的地址空间大小为si,则总地址空间为 S=si 若可用块的总数是m,则分给进程pi的块数是 ai m.si/S(3)优先权法给高优先级进程分配较多内存 本讲稿第六十七页,共八十页5.9.2 抖动问题n整个系统的页面替换非常频繁,以致大部分机器时间都用在来回进行的页面调度上,只有一小部分时间用于进程的实际运算。这种局面称为系统“抖动(Thrashing)”。1产生抖动的原因内存 不足多道程序度高CPU的利用率太低 CPU利用率与多道程序度之间的关系本讲稿第六十八页,共八十页2防止抖动的方法 采用局部置换策略 利用工作集策略防止抖动 挂起某些进程 采用缺页频度法(Page Fault Frequency,PFF)缺页频度的上限和下限 本讲稿第六十九页,共八十页3工作集 测试表明,虚拟存储系统的有效操作依赖于程序中访问的局部化程度。(1)局部性模型n时间局部化是指一旦某条指令或数据被访问过,它往往很快又被再次访问。n空间局部化是指一旦某个位置被访问过,它附近的位置也可能很快要用到。(2)工作集模型n工作集,就是一个进程在某一小段时间内访问页面的集合。工作集模型 本讲稿第七十页,共八十页存储访问的局部性工作集 本讲稿第七十一页,共八十页工作集依赖于程序的行为,并且其大小与的取值有关。每个进程的工作集大小为WSSi,那么工作集 D就是系统中全部(n个)进程对内存块的总请求量。如果请求值D大于可用内存块的总量m(Dm),将出现抖动。4工作集页面置换法 基本思想是找出一个不在工作集中的页面,把它淘汰。工作集页面置换算法的工作过程 本讲稿第七十二页,共八十页5.10 请求分段技术5.10.1 请求分段存储管理的硬件支持n各段表项中要增加一位,以表明该段的存在状态。n还要增加另外一些控制位,如:修改位 保护位 共享位本讲稿第七十三页,共八十页5.10.2 动态链接和链接中断处理1动态链接n动态链接:仅当用到某个分段时才对它进行链接,从而避免不必要的链接。n间接编址 n间接字 n链接故障指示位 直接编址与间接编址示意图 本讲稿第七十四页,共八十页2链接中断处理段的动态链接示意图 本讲稿第七十五页,共八十页5.11 Linux系统的存储管理5.11.1 Linux的多级页表结构Linux进程的虚拟存储空间本讲稿第七十六页,共八十页LinuxLinux系统采用三级页表的方式系统采用三级页表的方式对于i386来说,CPU只支持两级模型。Linux的多级页表结构本讲稿第七十七页,共八十页5.11.2 内存页的分配与释放空闲内存的组织示意图 Linux系统采用位图和链表两种方法来管理内存页 本讲稿第七十八页,共八十页5.11.3 内存交换n由内核的交换守护进程kswapd完成内存交换 为页面换出做好准备 写入交换设备或者回收一些内存页n为了决定是否回收一些内存页,系统设置两个量,分别表示上限值和下限值。n交换守护进程将用以下三种办法减少系统正在使用的内存页数:减少缓冲区和页高速缓存的大小。把共享内存页换到交换文件,从而释放物理内存。将页面换出物理内存或者直接将它们抛弃。本讲稿第七十九页,共八十页Bye!下一章(NEXT):第6章-文 件 系 统 =本讲稿第八十页,共八十页