资源描述
08软件工程一班裴晓禹虚拟内存:virtual memory1 1:硬件和控制结构:硬件和控制结构:hardware hardware and control structuresand control structures1:一个进程可以被换入或换出主存,使得进程在执行过程中的不同时刻占据不同的区域。进程中所有的存储器访问都是逻辑地址,这些逻辑地址在运行时动态地被转换成物理地址。2:一个进程可以划分成许多块,在执行过程中,这些块不需要连续地位于主存中。3:在进程的执行过程中,该进程的所有页和所有段不需要都在主存中。2 2:程序的执行:程序的执行:execution of execution of a programa program1:操作系统将一些程序的块带到主存。2:进程执行中的任何时候都在主存中的部分被定义成进程的常驻集。3:当处理器需要访问一个不在主存中的逻辑地址,则会产生一个中断,说明产生了内存访问故障。操作系统将被中断的进程置于阻塞状态,并取得控制。4:为了能继续执行这个进程,操作系统要把包含引发故障的逻辑地址和进程块取进主存1:操作系统产生一个磁盘IO读请求。2:产生IO请求后,在执行磁盘IO,期间操作系统可以分派另一个进程运行。3:一旦需要的块被取进主存,则产生一个IO中断,控制被交回操作系统,而 操作系统把由于缺少该块而被阻塞的进程置回到就绪态。3 3:分割进程的优点:分割进程的优点:advantages of breaking up a advantages of breaking up a processprocess1:在主存中保留多个进程:1:对任何特定的进程都仅仅装入它的某些块,所以有足够的空间放置更多的进程 2:在任何时刻这些进程中都能至少有个处于就绪态,于是处理器得到更有效的利用2:进程可以比主存的全部空间还大。4 4:进程的种类:进程的种类:types of types of memorymemory 1:实存储器real memory:由于一个进程只能在一个主存中执行,因此这个存储器称作实存储器。2:虚拟内存virtual memory:程序员和用户通常感觉到一个更大的内存,通常它被分配到磁盘上,称作虚拟内存。虚存允许更有效的多道程序设计,并解除了用户与主存之间没有必要地紧密约束。5 5:系统抖动(颠簸):系统抖动(颠簸):thrashingthrashing1:当操作系统读取一块时,它必须把另一块扔出。2:处理器的大部分时间都用于交换块,而不是执行指令。6 6:局部性原理:局部性原理:principle of principle of localitylocality1:局部性原理描述了一个进程中程序和数据应用的集簇现象。2:很短的时间内仅需要访问进程的一部分块是合理的。3:可以对在不远的将来可能会访问的块进行猜测。4:虚拟内存比较实用而且有效。7 7:虚拟内存需要的支持:虚拟内存需要的支持:support needed for virtual support needed for virtual memorymemory1:必须有对采用的分页或分段方案的硬件支持。2:操作系统必须有管理页或段在主存和辅助存储器之间的移动的软件。8 8:分页:分页:pagingpaging1:通常每个进程都有一个唯一的页表。2:每个页表项(PTE)包含有与主存中的页相对应的帧号。由于一个进程可能只有一部分在主存中,因而每个页表项需要一位(P)来表示它所对应的页当前是否在主存中。3:当考虑到基于分页的虚拟内存方案时也同样需要页表。PS:MMS将virtual address在硬件配合下转成physical address9 9:虚拟地址和页表项:虚拟地址和页表项:virtual virtual address and page table entryaddress and page table entry1010:页表项:(:页表项:(PTEPTE)1111:页表中的修改位:页表中的修改位:modify modify bit in page tablebit in page table1:页表项中需要一个控制位:修改为。表示相应页的内容从上一次装入主存中到现在是否已经改变。2:如果没有改变,则需要把该页换出时,不需要用页框中的内容更新该页。1212:地址的翻译(映射):地址的翻译(映射):address translation(mapping)address translation(mapping)1313:地址翻译(联系):地址翻译(联系):address translation address translation(contactcontact)1414:页表:(:页表:(page tablespage tables)1:页表项可能占据大量的主存。2:页表也保存在虚存中。3:当一个进程正在运行的过程中,它的页表至少有一部分在主存中。1515:两级层次:两级层次3232位页表:位页表:two-two-level scheme for 32-bit level scheme for 32-bit addressaddress1616:两级层次页表:两级层次页表:two-level two-level schemescheme1:2:1717:逆向页表:逆向页表:inverted page inverted page tabletable1:逆向页表的各种变体已用于PowerPC,UltraSPARC,和IA-64IA-64体系结构中。2:虚拟地址的页号部分使用一个简单的散列函数映射到哈希表中。3:哈希表包含一个反向表的指针,而反向表中包含页表项。4:不论有多少进程、支持多少虚拟页、页表都只需要实存中的一个固定的部分。1818:逆向页表的内容:逆向页表的内容:inverted inverted page tablepage table1:页号:page number2:进程标识符:process identifier3:控制位:control bits4:链指针:chain pointer1919:转移后备缓冲器:转移后备缓冲器:translation lookaside translation lookaside buffer(buffer(简称:简称:TLB)TLB)1:给定一个虚拟地址,处理器首先检查TLB。2:如果需要的页表项在其中(命中“TLB”),则检索页框并形成实地址。3:如果没有找到需要的页表项(TLB未命中),则处理器用页号检索进程页表,并检查相应的页表项。4:如果”存在位”已置位,则该页在主存中,处理器从页表项中检索页框号以形成实地址.如果“存在位”没有置位,则表示需要的位不在主存中,这时将产生一次存储器的访问故障,页错误page fault5:处理器同时更新TLB,使其包含这个新的页表项。2020:转移后备缓冲器的用法:转移后备缓冲器的用法:use of ause of a translation translation lookaside bufferlookaside buffer 命中 装入页 页表 未命中 页框号页错误2121:分页和转移后备缓冲器的操:分页和转移后备缓冲器的操作作:operation of paging and:operation of paging and translation lookaside buffertranslation lookaside buffer 返回故障指令页错误处理例程 访问页表OS通知CPU通知从磁盘读取该页该页是否在主存中CPU激活该IO硬件 更新TLB该页从磁盘传送到主存中CPU产生物理地址执行页替换页表更新2222:页表项的直接查找和关联查:页表项的直接查找和关联查找:找:direct versus direct versus associative lookup for page associative lookup for page table entriestable entries2323:转移后备缓冲器和高速缓冲:转移后备缓冲器和高速缓冲操作:操作:translation lookaside translation lookaside buffer and cache operationbuffer and cache operationTLB操作 虚拟地址 页号 偏移量 未命中 命中操作 实地址 命中 值标记 其余部分 未命中页表主存 值2424:页尺寸:页尺寸:page sizepage size1:页越小,内部碎片的总量越少。2:页越小,每个进程需要的页的数目就越多。3:每个进程需要的页的数目就越多就意味着更大的页表。4:大的页表就意味着很大部分的页表在虚存中。5:二级内存用于大块数据的有效传递,所以大的页表较好。6:如果页尺寸非常小,那么每个进程在主存中有较多数目的页。7:一段时间后,内存中的页都包含有最近访问的部分,因此,页错误率比较低。8:当页尺寸增加时,每一个页包含的单元和任何一个最近访问过的单元越来越远。2525:页型的分页行为:页型的分页行为:typical typical paging behavior of a programpaging behavior of a program 页大小分配的页框数目P表示整个进程的大小,W表示工作集的大小,N表示进程中的总页数。2626:页面大小的例子:页面大小的例子:example example page sizespage sizes27:27:分段:分段:segmentsegment1:段的大小可能是不相等的,并且是动态地。2:简化不断增长的数据结构的处理。3:允许进程独立的改变或重新编译,而不要求整个集合重新链接和重新加载。4:有助于进程间的共享。5:有助于保护。2828:段表:段表:segment tablessegment tables1:每个进程都有自己的段表,当所有的段都载入到主存的时候,为该进程创建一个段表并载入主存2:每个段表项包含相应段在主存中的起始地址和段的长度。3:由于一个进程可能只有一部分段在主存,因而每个段表项中需要有一位表明相应的段是否在主存中4:段表项需要修改位用于表明相应的段从上一次被装入主存到目前为止其内容是否被改变。2929:段表表项:段表表项:SegmentSegment table table entriesentries3030:分段系统中的地址转换:分段系统中的地址转换:address translation in address translation in segmentation systemsegmentation system3131:分页和分段的结合:分页和分段的结合:combined paging and combined paging and segmentationsegmentation1:分页对程序员是透明的。2:分段对程序员是可见的。3:每个段依次划分成许多固定大小的页。3232:分段分页相结合的系统中的:分段分页相结合的系统中的地址转换:地址转换:address address translation in a translation in a segmentationpaging systemsegmentationpaging system 段表指针3333:段之间的保护关系:段之间的保护关系:protection relationship protection relationship between segmentsbetween segmentsNot access allowed:不允许访问 branch instruction(not allowed):跳转指令(不允许)reference to data(allowed):访问数据(允许)reference to data(not allowed):访问数据(不允许)3434:读取策略:读取策略:fetch policyfetch policy1:读取策略确定一页何时取入主存。2:对于请求式分页,只有当访问到某页中的一个单元时才将该页取入主存。当一个进程第一次启动时,会出现一阵大量的页错误。3:预约式分页读取的页大多数都没有引用到,这个策略师低效的。预约式分页利用了大多数辅存设备(如磁盘)的特性,这些设备有寻道时间和合理时间的延迟。如果一个进程的页被连续存储在辅存中,则一次读取许多连续的页比隔一段时间读取一页要更有效。3535:放置策略:放置策略:placement placement policypolicy1:防治策略决定一个进程驻留在实存中的什么地方。2:不会翻译3:3636:替换策略:替换策略:replacement replacement policypolicy1:应该换出哪一页?2:移出最近最不可能访问的页3:大多数策略都基于过去的行为来预测将来的行为。3737:页框锁定:页框锁定:frame locking frame locking 1:如果一个页框被锁定时,之前保存的该页框中的页就不能被替换。2:大部分操作系统内核就保存在锁定的也框中。3:大部分重要的控制结构就保存在锁定的也框中。4:IO缓冲区就保存在锁定的也框中。5:锁定是通过给每个帧关联一个lock位实现的。3838:替换页的基本算法:替换页的基本算法:1:最佳:optimal policy(OPT)2:最近最少使用:lease recently used(LRU)3:先进先出:first-in,first-out(FIFO)4:时钟:clock 3939:最佳:最佳:optimal policyoptimal policy1:选择替换下次访问距当前时间最长的那些页。2:但是由于它要求操作系统必须知道将来的事件,显然这是不可能实现的。4040:最近最少使用:最近最少使用:lease lease recently usedrecently used(LRULRU)1:替换主存中上次使用距当前最远的页。2:根据局部性原理,这也是最近最不可能访问到的页。3:实现的方法是给每一页添加一个最后一次访问的时间标签,并且必须在每次访问存储器时,不论访问的是指令还是数据,都更新这个标签。4141:先进先出:先进先出:first-infirst-in,first-outfirst-out(FIFOFIFO)1:把分配给进程的页框看作是一个循环缓冲区。2:按循环方式移动页。3:这是一种实现起来最简单的页替换策略。4:替换驻留在主存中时间最长的页。5:这些被替换的页可能很快被重新调用。4242:时钟:时钟:clockclock1:最简单的时钟策略需要给每一个页框关联一个附加位,成为使用位。2:当某一页首次装入主存中时,该页框的使用位设置为1.3:当该页随后被访问到时,它的使用位也被置为1.4:当需要替换一页时,操作系统扫描缓冲区,以查找使用位位置为0的一页框。5:在查找替换的时候,扫描过的使用位是1的都被置为0.4343:四种页替换算法:四种页替换算法:four four page-replacement algorithmspage-replacement algorithms4444:关于时钟策略的一个例子:关于时钟策略的一个例子:example of clock policyexample of clock policyFirst frame in circular buffer of Frames that are candidates for replacement用于替换的候选页框循环缓冲区中的第一页框State of buffer just prior to a page replacement 在替换一页前缓冲区的状态。State of buffer just after the next page replacement下一页被替换后缓冲区的状态4545:固定分配、局部页替换算法:固定分配、局部页替换算法的比较:的比较:comparison of comparison of placement algorithmsplacement algorithmsPage faults per 1000 references每1000次访问的页框Number of frames allocated:分配的页框的数目4646:时钟页替换算法:时钟页替换算法:the the clock page-replacement clock page-replacement algorithmalgorithm4747:页缓冲:页缓冲:page bufferingpage buffering为了提高性能,被替换出的页不是被丢弃,而是被分配到以下两个表之一:1:如果未被修改,则分配到空闲页表。2:如果修改了,则分配到修改页表。4848:驻留集大小:驻留集大小:resident set resident set sizesize1:固定分配策略(fixed-allocation)1:为一个进程在主存中分配固定数目的页框用于执行时使用。2:一旦在进程执行过程中发生页错误,该进程的一页就必须它他所需要的页替换。2:可变分配次略(variable-allocation)允许分配给一个进程的页框在该进程的生命周期中不断地发生变化。4949:固定分配,局部范围:固定分配,局部范围:fixed allocationgfixed allocationg,local local scopescope1:对于固定分配策略,需要事先确定分配给该进程的总页框数。2:如果分配的过小,则会产生很高的页错误率,导致整个多道程序设计系统运行缓慢。3:如果分配的过大,则主存中只能有很少的几个程序,处理器会有很多空闲时间,并且把大量的时 间花费在交换上。5050:可变分配,全局范围:可变分配,全局范围:variable allocationvariable allocation,global global scopescope1:这种组织是最容易实现的。2:它被许多操作系统采用。3:在典型情况下,操作系统还维护着一个空闲页框列表。4:当发生一次页错误时,一个空闲页框被添加到进程的驻留集中,并且该页被读取。5:当没有空闲页框可用时,操作系统必须选择一个当前位于主存的页框进行替换。5151:可变分配,局部范围:可变分配,局部范围:variable allocationvariable allocation,local local scopescope1:当一个新进程被装入主存时,根据应用类型、程序要求或其它原则,给它分配一定数目的页框作 其驻留集,使用预约式分页或请求式分页填满这些页框。2:当发生一次页错误时,从产生页错误的进程的驻留集中选择一页用于替换。3:不时地重新评估进程的页框分配情况,增加或减少分配给它的页框,以提高整体的性能。5252:清除策略:清除策略:cleaning cleaning policypolicy1:请求式清除:只有当一页被选择用于替换时才被写回辅存。2:预约式清除:将这些被修改的多个页在需要用到他们所占据的页框之前成批的写回辅存。3:一个比较好的方法是结合页缓冲技术:1:通过页缓冲,被替换页可以防止在两个表中:修改和未修改。2:修改表中的页可以周期性地成批写出,并移动到未修改表中。3:未修改表中的一页或者应为被访问到而被回收,或者当它的页框分配给另一页时被淘汰。5353:加载控制:加载控制:load controlload control1:加载控制涉及到确定驻留在主存中的进程数目,这成为多道程序设计级。2:如果某一时刻驻留的进程太少,则所有进程同时处于被阻塞状态的概率可能比较大,因而有许多时间花费在交换上。3:如果驻留的进程太多,则平均每个进程的驻留集大小将会不够用,就会频繁的发生错误,导致抖动5454:多道程序设计级:多道程序设计级:multiprogrammingmultiprogrammingProcessor utilization:处理器使用率Multiprogramming level:多道程序设计级
展开阅读全文