《第5章Operating System存储管理》由会员分享,可在线阅读,更多相关《第5章Operating System存储管理(47页珍藏版)》请在金锄头文库上搜索。
1、第5章 存储管理,5.1 背景知识5.2 逻辑与物理地址空间5.3 覆盖与交换技术5.4 存储策略5.4.1 连续分配5.4.2 页式管理5.4.3 段式管理5.4.4 段页式管理,5.1 背景知识,程序必需放入一个进程,并且送入内存才能被执行输入队列 磁盘上等待进入内存并执行的进程的集合正在运行的程序生成一个连续的存储地址从一个地址到另一个地址的映射(相对地址-重定向地址-绝对地址)指令和数据结合到内存地址可以在三个不同的阶段发生编译时期: 如果内存位置已知,可生成绝对代码;如果开始位置改变,需要重新编译代码装入时期: 如果存储位置在编译时不知道,则必须生成可重定位代码执行时期: 如果进程在
2、执行时可以在内存中移动,则地址绑定要延迟到运行时。需要硬件对地址映射的支持,例如基址和限长寄存器,5.1,5.1 背景知识 续1(绑定示例),编译时绑定 1.编译后 2.加载到内存后 Integer count 156:(存放count的值) 1156 (存放count的值) Count=3 move 1156 3 move 1156 3 加载时绑定 Integer count 156:(存放count的值) 1156 (存放count的值) Count=3 move 156 3 move 1156 3 运行时绑定 Integer count 156:(存放count的值) 1156 (存放c
3、ount的值) Count=3 move 156 3 move 156 3 -1000+156=1156 (执行该指令时转换),5.2 逻辑与物理地址空间,逻辑地址空间的概念同物理地址空间相关联,它是正确内存管理的中心。逻辑地址由CPU产生(即指令中的地址);也叫做虚拟地址。物理地址内存设备所读入的地址逻辑和物理地址在编译时期和装入时期的地址绑定策略中是相同的,而在执行时进行地址绑定策略中是不同的。,5.2,5.2.1 存储管理单元 (MMU),把虚拟地址映射到物理地址的硬件在MMU策略中,基址寄存器中的值在其送入内存的时候被加入到由一个用户进程所产生的每个地址中。用户程序所使用的是逻辑地址,
4、物理地址对它从来都不可见。,5.2.2 动态装载,例程在调用之前并不执行更好的内存空间利用率;没有被使用的例程不被载入。当需要大量的代码来处理不经常发生的事情时是非常有用的。不需要操作系统的特别支持,通过程序设计实现。,5.2.3 动态链接,链接被推迟到执行时期小的代码片 - 存根,用来定位合适的保留在内存中的库例程。存根用例程地址来替换自己,以及执行例程。有利于库更新需要操作系统支持,5.3 覆盖与交换技术,只是在内存中保留那些在特定时间所需要的指令和数据当进程比所分配的内存大时,覆盖是必需的由用户执行,不需要操作系统的特别支持,覆盖结构的程序设计很复杂。,5.3.1 覆盖,5.3,5.3.
5、2 交换,一个进程可以暂时被交换到内存外的一个备份区,随后可以被换回内存继续执行。备份区是一个固定的足够大的可以容纳所有用户内存映像的拷贝;必须提供对这些内存映像直接存取。滚入,滚出交换特例:由于基于优先级的算法而不同,低优先级的进程被换出,这样高优先级的进程可以被装入和执行。交换时间的主要部分是传输时间,总的转移时间直接同交换的内存的数量成比例。,交换技术的简明视图,5.4 存储管理策略,主存通常被分为两部分为操作系统保留的部分,通常用中断矢量保存在内存低端。用户进程保存在内存高端。单一分区分配基址寄存器策略用来保护操作系统和其他程序的代码和数据不被当前运行进程修改基址寄存器包含最小物理地址
6、的值;限长寄存器包含逻辑地址的范围,每个逻辑地址必须比限长寄存器的值小。,5.4.1 连续分配,5.4,5.4.1 连续分配(续1),多分区分配分区可用的内存块,不同大小的分区分布在整个内存中。当一个进程到来的时候,它将从一个足够容纳它分区中分配内存。操作系统包含以下信息):a) 分配的分区) b)(空的分区) (hole),OS,process 5,process 8,process 2,OS,process 5,process 2,OS,process 5,process 2,OS,process 5,process 9,process 2,process 9,process 10,空闲分
7、区表和空闲块链表,动态存储-分配问题,首先适应: 分配最先找到的合适的分区。最佳适应: 搜索整个序列,找到适合条件的最小的分区进行分配。最差适应: 搜索整个序列,产生最大的剩余分区。,怎样从一个空的分区序列中满足一个申请需要。,各种分配法特点,最先匹配法:按分区的先后次序,从头查找,找到符合要求的第一个分区该算法的分配和释放的时间性能较好,较大的空闲分区可以被保留在内存高端。但随着低端分区不断划分而产生较多小分区,每次分配时查找时间开销会增大。最佳匹配法:找到其大小与要求相差最小的空闲分区从个别来看,外碎片较小,但从整体来看,会形成较多外碎片。较大的空闲分区可以被保留。最坏匹配法:找到最大的空
8、闲分区基本不留下小空闲分区,但较大的空闲分区不被保留。,碎片,外碎片 不能再加以利用的零碎空间,未分配.内碎片 分配的内存可能比申请的内存大一点,这两者之间的差别是内部不被使用的内存通过压缩来减少外碎片把一些小的空闲内存结合成一个大的块。只有重定位是动态的、在执行时期进行的时候,才有可能进行压缩,5.4.2 页式管理,进程的逻辑地址空间可以是不连续的,如果有可用的物理内存,它将分给进程。把物理内存分成大小固定的块,称为页面。把逻辑内存也分成固定大小的块,叫做页。保留所有页面的记录。运行一个有N页大小的程序,需要找到N个空的页面来读入程序。建立一个页表,把逻辑地址转换为物理地址。产生内碎片。,页
9、式管理示例,地址解析方案,CPU产生的地址被分为:页号它包含每个页在物理内存中的基址,用来作为页表的索引。偏移同基址相结合,用来确定送入内存设备的物理内存地址。,地址转换机制,页表的实现,主存中的页表页表基址寄存器指向页表页表限长寄存器表明页表的长度在这个机制中,每一次的数据/指令存取至少需要两次内存存取,一次是存取页表,一次是存取数据通过一个联想寄存器,可以解决两次存取的问题- cache(高速缓存) 又叫联想寄存器或者translation look-aside buffers (TLBs).,联想寄存器,联想寄存器并行查找地址转换(A, A) 如果A在联想寄存器中,把页框#取出来。否则从
10、内存中的页表中取出页框#。,Page #,Frame #,5.4,有效存储时间,联想寄存器的查找需要时间假设内存一次存取要1微秒命中率在联想寄存器中找到页号的比率,比率与联想寄存器的大小有关。命中率= 有效存取时间(EAT)( Effective Access Time) EAT = (1 + ) + (2 + )(1 ) = 2 + ,内存的保护,内存的保护由与每个页面相联的保护位来执行。读写为决定一个页是读写或只读。 有效-无效位附在页表的每个表项中:有效”表明相关的页在进程的逻辑地址空间,以及是一个合法的页。无效”表明页不在进程的逻辑地址空间中。,5.4,32位逻辑地址空间 如果一个页面
11、的大小为4k,那么一个页表可能有1兆(1 million )表项。 如果每一表项由4个字节组成,那么一个进程的页表可能占用多达4 兆字节的物理空间。,二级页表图解,二级分页示例,一个逻辑地址 (每页大小为4K的32位机) 被分为:一个20位的页号一个12位的偏移从页表被分页以后,页表页被进一步分为:一个10位的页号一个10位的偏移因此,一个逻辑地址表示如下:这里Pi是外部页表的一个索引,p2 外部页表页的转换。,page number,page offset,pi,p2,d,10,10,12,地址转换机制,一个两级32位分页结构的地址转换机制,四级分页及其执行,由于每一级都分开的页表的形式存储
12、在内存中,把一个逻辑地址转换为一个物理地址可能要进行4次内存存取页表。尽管每次内存存取的时间是很大的,高速缓存使执行的时间还是可以接受的。若缓存的命中率是98%则: 有效的存储时间 = 0.98 x 120 + 0.02 x 520 = 128 毫微秒(十亿分之一秒)这只把内存存取时间降低了28%。,共享页,共享代码一个只读(可再入)代码的备份可由进程共享。(例如: 文本编辑, 编译器, window systems) 共享代码必须出现在所有进程的逻辑地址空间的相同位置。,共享页示例,如下情况是否允许?,物理页号 共享代码 p1: 0 1 0 1 2 150 2 0 move AX,150P2: 0 0 1000 1 1 1150 2 2,5.4.3 段式管理,支持用户观点内存的内存管理机制。一个程序是一些段的集合,一个段是一个逻辑单位,如:main program,procedure, function,local variables, global variables,common block,stack,symbol table, arrays,