计算机组成原理第讲虚拟存储器.ppt
计算机组成原理第讲虚拟存储器现在学习的是第1页,共33页实验课题实验课题3 控制器部件设计控制器部件设计实验内容:实验内容:按照题目要求设计计算机控制器各主要部件的逻辑,决定外部的端口(名称、有效电平)和内部各元件的连接,画出系统框图和逻辑图,设计仿真数据,用VHDL编程和仿真。一、主要元件设计一、主要元件设计 1程序计数器程序计数器 功能要求:8位二进制计数器,同步并行置数,同步复位(清零),三态输出。提示:注意程序计数器的“加一”功能。2数据寄存器数据寄存器 功能要求:8位,同步并行置数,双向三态输出。3地址寄存器地址寄存器 功能要求:8位,同步并行置数,三态输出。(2学时)现在学习的是第2页,共33页实验课题实验课题3 控制器部件设计控制器部件设计实验内容:实验内容:一、主要元件设计一、主要元件设计 4指令寄存器指令寄存器 功能要求:8位,同步并行置数。5指令译码器指令译码器 功能要求:3-8译码器。二、仿真二、仿真 设计仿真波形数据,要考虑到所有可能的情况。在实验报告中必须清楚说明仿真波形数据是怎样设计的。现在学习的是第3页,共33页第第 7 章章 存储系统存储系统(3)Chapter 7 Storage SystemVirtual memory is a computer system technique which gives an application program the impression that it has contiguous working memory,while in fact it may be physically fragmented and may even overflow on to disk storage.Systems that use this technique make programming of large applications easier and use real physical memory(e.g.RAM)more efficiently than those without virtual memory.现在学习的是第4页,共33页 虚拟存储器指的是虚拟存储器指的是“主存主存-辅存辅存”层次。它能使该层次具有辅存的层次。它能使该层次具有辅存的容量,接近于主存的等效速度和辅存的每位成本。它使得程序员可容量,接近于主存的等效速度和辅存的每位成本。它使得程序员可以以按比主存大得多的虚存空间编制程序。按比主存大得多的虚存空间编制程序。对于大的程序,可以先分配少数几个页面,将该程序的一部分装入主存。在运行中间,发生缺页时再按需按需陆续调入调入。只要主存容量大于某个最小值,不论机器配备多大容量的主存,程序可不必作任何修改照样能运行。主存实际容量的大小会影响系统工作的效率和解题速度。虚拟存储系统的设计目标是:设法获得主存储器的最佳使用,虚拟存储系统的设计目标是:设法获得主存储器的最佳使用,形成一个高性能、低价格的大容量存储器。形成一个高性能、低价格的大容量存储器。虚拟存储器的管理方法有:页式、段式和段页式。虚拟存储器的管理方法有:页式、段式和段页式。73 虚拟存储器虚拟存储器 (Virtual Memory)现在学习的是第5页,共33页 虚拟存储器的地址映象虚拟存储器的地址映象(或称定位算法或称定位算法)是指每个虚页按什么是指每个虚页按什么规则规则(算法算法)装入装入(定位于定位于)实存,地址变换是指程序按照映象关系装实存,地址变换是指程序按照映象关系装入实存后,在程序运行时虚地址如何变换成对应的实存地址。入实存后,在程序运行时虚地址如何变换成对应的实存地址。当处理机发出访存地址时,首先进行虚地址到主存实地址虚地址到主存实地址的映象变换,如果出现页故障,再进行虚地址到辅存实地址虚地址到辅存实地址的映象变换。虚地址到主存实地址的地址映射变换有:直接映射,相联映射,虚地址到主存实地址的地址映射变换有:直接映射,相联映射,组相联映射,段相联映射等。组相联映射,段相联映射等。虚拟存储器和Cache-主存层次的管理原则基本相同。把程序中常用的页(块)驻留在较高速的存储器中。一旦某页变的不常用了,则把它替换出去。现在学习的是第6页,共33页 当CPU访问主存不命中时,必须从辅存把包含这个字的1个数据块传送到主存,然后,CPU才能在主存中访问到这个字。若传送该数据块的时间为TB,TA2=TB+TM 则“主存-辅存”层次的平均访问时间TA=HTA1+(1H)TA2=HTM+(1H)(TB+TM)=TM+(1H)TB Embedded systems and other special-purpose computer systems which require very fast,very consistent response time do not generally use virtual memory.现在学习的是第7页,共33页 Almost all implementations of virtual memory divide the virtual address space of an application program into pages;A page is a block of contiguous virtual memory addresses.页式虚拟存储器页式虚拟存储器(Paged virtual memory)页式虚拟存储器把虚存空间分成页页式虚拟存储器把虚存空间分成页,实存空间也分成同样大小实存空间也分成同样大小的页,称页,称为实页为实页和物理页物理页,虚存虚存的页面称为虚页或逻辑页页面称为虚页或逻辑页。虚存空间划分成虚存空间划分成 个页面,每个页面容量为个页面,每个页面容量为 个存储单元个存储单元。实存只有实存只有 个页面。个页面。页面大小一般为1k字 8K字。程序员按虚存空间编制程序。虚地址是逻辑地址,由虚页号及程序员按虚存空间编制程序。虚地址是逻辑地址,由虚页号及页内地址组成,必须经过地址变换得到主存页内地址组成,必须经过地址变换得到主存/辅存实地址。辅存实地址。页的划分是机械的,与程序结构和大小无关。页的划分是机械的,与程序结构和大小无关。现在学习的是第8页,共33页 程序在装入主存前由操作系统分配页面。如果分配的页面比程序需要的少,就先装入一部分,其他部分在需要的时候再装入。虚存地址到主存实地址的映象变换是由页表页表实现的。页表应该在主存中,这样每次访存都要加上一次访存查页表Page Table。Almost all implementations use page tables to translate the virtual addresses seen by the application program into physical addresses(also referred to as real addresses)used by the hardware to process instructions.Each entry in a page table contains the starting virtual address of the page-either the real memory address at which the page is actually stored,or an indicator that the page is currently held in a disk file.若采用全相联映象全相联映象,任何虚页能映射到实存任何页面位置。现在学习的是第9页,共33页在实存的RAM中有一个页表,页表共有 行,每行对应一个虚页。页表中有每个虚页是否装入主存的标志(装入位)和主存实页号。CPU访存时,首先做虚地址到主存实地址的地址变换查页表。虚页号页内地址实页号0 01123装入位4实存地址虚地址页表命中若该行若该行的装入位为装入位为1,则该页在实存中则该页在实存中,对对应的实页面地址应的实页面地址 在在该行中该行中。将将 与与 拼接拼接,得得到实存地址到实存地址 。若若该该行行的的装装入入位位为为0,则则需需从从辅辅存存调调入入。(页页故故障障)用用Nv在页表中选中一行页表中选中一行。现在学习的是第10页,共33页页表的容量为页表的容量为 。每行每行 字节,字节,实存实存 页面。页面。实存容量实存容量16MB,按字节编址按字节编址,虚存空间虚存空间1024M,页容量页容量1KB。虚存虚存 页面,页面,页表有页表有 行,行,为为 位。位。1M16K1M22MB虚页号虚页号页内地址页内地址实页号实页号0 01123装入位装入位4实存地址实存地址虚地址虚地址页表页表命中命中例如,14全相联映象的优点全相联映象的优点是实页冲突概率最小。是实页冲突概率最小。现在学习的是第11页,共33页每个虚页只能映射到实每个虚页只能映射到实存一个特定页面存一个特定页面。直接映象直接映象的的页式虚拟存储器页式虚拟存储器ndNrnvnrnpNs01 个单元页表页面失效相等nv比较地址页表中存放的是页表中存放的是 。用用 做地址去查表。做地址去查表。将页表中对应的将页表中对应的 读出与读出与 中的中的 比较。比较。如果相符,如果相符,表示该虚页已在实存中。表示该虚页已在实存中。将虚地址中的将虚地址中的 和和 作为实地址。作为实地址。否则,页面失效。否则,页面失效。实页冲突实页冲突概率高,实存利用率低。概率高,实存利用率低。现在学习的是第12页,共33页将实存空间和虚存空间都分成组,每组将实存空间和虚存空间都分成组,每组K=2S页。页。组相联映象组相联映象的的页式虚拟存储器页式虚拟存储器K值越大,实页冲突概率越低。实存共实存共 个页,分成个页,分成 组,整个实存是一区。组,整个实存是一区。虚存分成与实存同样大小的虚存分成与实存同样大小的 区。区。Nv区号nd页内地址NrNs组内页号S组号qnvnp页内地址nr组内页号S组号q当K=时是全相联。当K=1时是直接映象。现在学习的是第13页,共33页组相联映象组相联映象的的页式虚拟存储器页式虚拟存储器第0组第1组010213465723012302134657810911121413150组1组0组1组第0区第1区实存虚存组相联的目录表有组相联的目录表有2q组,每组组,每组2S行。行。表的总容量表的总容量 行。行。实存共实存共 个页,分成个页,分成 组,组,整个实存是一区。整个实存是一区。虚存分成与实存同样大小的虚存分成与实存同样大小的 区。区。现在学习的是第14页,共33页组相联映象组相联映象的的页式虚拟存储器页式虚拟存储器目录表相等相联比较ndNrSqnrSqSnd S不等地址变换过程:地址变换过程:先用虚地址中先用虚地址中的的q按地址访问按地址访问,在,在2q组中选组中选出一组。出一组。对该组再用对该组再用 (Tag)在)在2S行中进行相行中进行相联查找。联查找。如如果果在在2S行行中中查查不不到到相相符符的的,则则表表示示该该虚虚页页不在实存中。不在实存中。如果查到,则将表中相应的S与q拼接,就是实地址 。现在学习的是第15页,共33页页表也构成表层次。页表也构成表层次。因为整个页表是连续存储的。当一个页表的大小超过一个页面的大小时,页表就可能分成若干页,分存于几个不连续的页面中。这些页表的起始地址又放在一个新的页表(页表的表页表的表)中,形成二级页表层次。通常把第一级页表驻留在主存中。第二级页表只有一部分在主存中,大部分可保存在辅存,需要时再调入。Systems can have one page table for the whole system or a separate page table for each application.现在学习的是第16页,共33页段式虚拟存储器段式虚拟存储器(Segmentation)段式虚拟存储器是把一个程序分成多个在逻辑上形成整体、相互独立段式虚拟存储器是把一个程序分成多个在逻辑上形成整体、相互独立或基本独立,而且可清楚定义的模块。或基本独立,而且可清楚定义的模块。如:子程序,过程,数据表,等。这些模块的大小可以是不同的,甚至预先如:子程序,过程,数据表,等。这些模块的大小可以是不同的,甚至预先不知道。不知道。令每个模块是一个段令每个模块是一个段Segment,都从该段的起点开始编址都从该段的起点开始编址。如;代码段、堆栈段、数据段、等。如;代码段、堆栈段、数据段、等。Using segmentation,an applications virtual address space is divided into variable-length segments.A virtual address consists of a segment number and an offset within the segment.现在学习的是第17页,共33页 由于各段是按其逻辑特点组合的,容易以段为单位实现存储保护。由于各段是按其逻辑特点组合的,容易以段为单位实现存储保护。段的分界与程序的自然分界相对应。段的分界与程序的自然分界相对应。段的逻辑独立性使它易于编译、管理、修改和保护,便于多道程序段的逻辑独立性使它易于编译、管理、修改和保护,便于多道程序共享已经在主存中的程序和数据。共享已经在主存中的程序和数据。在调入该段时,由操作系统赋予该段一个基址。由基址和原来在段内的地址相加形成该段每个单元在主存的实地址。用段表段表指明各段在主存的位置。每段有自己的名称名称、段起点段起点、段长段长等。段表本身也是一个段,一般在主存中。现在学习的是第18页,共33页段页式虚拟存储器段页式虚拟存储器 段页式虚拟存储器把程序按逻辑结构分段后,再把每段分成固定大段页式虚拟存储器把程序按逻辑结构分段后,再把每段分成固定大小的页(与实存页面大小相同)。小的页(与实存页面大小相同)。程序对主存的调入调出是按页面进行的。程序对主存的调入调出是按页面进行的。每道程序通过一个段表和一组页表来进行定位。段表中的每行每道程序通过一个段表和一组页表来进行定位。段表中的每行对应一个段,每行有一个指向该段的页表的起始地址及该段的控对应一个段,每行有一个指向该段的页表的起始地址及该段的控制保护信息。制保护信息。由页表指明该段各页在主存中的位置及是否已装入由页表指明该段各页在主存中的位置及是否已装入、已修改等已修改等。现在学习的是第19页,共33页 由于采用分页,所以与纯段式的主要区别是段的起点不能是任意由于采用分页,所以与纯段式的主要区别是段的起点不能是任意的,必须是位于实存中页面的起点。的,必须是位于实存中页面的起点。多道程序多道程序(多用户多用户)的每一道(每个用户)有一个基号的每一道(每个用户)有一个基号(用户标志用户标志号号),可由它指明该道程序的段表起点可由它指明该道程序的段表起点(在基址寄存器中在基址寄存器中)。虚地址包括:虚地址包括:基号,段号,页号,页内地址。基号,段号,页号,页内地址。段页式存储管理,由虚地址向主存实地址的变换至少需段页式存储管理,由虚地址向主存实地址的变换至少需2次查表。次查表。段表和页表构成表层次。通常设置段表和页表构成表层次。通常设置TLB表加快地址变换。表加快地址变换。现在学习的是第20页,共33页虚地址到辅存实地址的地址变换虚地址到辅存实地址的地址变换 当发生页故障时当发生页故障时,必须访问辅存必须访问辅存。虚地址实际上也是辅存的逻辑地址虚地址实际上也是辅存的逻辑地址,还须经虚存空间到辅存实空间的地址变换还须经虚存空间到辅存实空间的地址变换。辅存一般是按信息块编址辅存一般是按信息块编址,而不是按字编址。如果一个块的大而不是按字编址。如果一个块的大小等于一个虚页面的大小,就只需由虚页号小等于一个虚页面的大小,就只需由虚页号Nv变换到变换到NVd即可完成即可完成虚地址到辅存实地址的变换。虚地址到辅存实地址的变换。虚页号Nv页内地址Nr磁头号 柱面号地址变换(软件实现)外页表装入位辅存地址虚地址块号磁盘机号0NVd101 实际的虚页面可大于信息块,也可小于信息块。变换采用查外页变换采用查外页表的方式。外页表可表的方式。外页表可放在辅存,只在需要放在辅存,只在需要查用时才调入主存。查用时才调入主存。现在学习的是第21页,共33页主存已满调入页调入页实页号10在辅存辅存实地址Nvd外部地址变换虚地址辅存实地址虚地址 Nv Nr内部地址变换虚页号主存实页号实地址 nv nr主存辅存I/O处理机(通道)(DMA)实存页面表页面替换算法主存未满访辅存不在辅存访主存中断页故障装入位被替换页被替换页虚拟存储器工作的全过程虚拟存储器工作的全过程现在学习的是第22页,共33页快表与慢表快表与慢表虚拟存储器工作过程有两种地址变换:虚拟存储器工作过程有两种地址变换:虚拟存储器的速度虚拟存储器的速度,关键是虚地址到主存实地址的变换速度关键是虚地址到主存实地址的变换速度。这个速度如果达不到要求,虚拟存储器就不能被采用。如何从逻辑结这个速度如果达不到要求,虚拟存储器就不能被采用。如何从逻辑结构上提高虚地址到主存实地址的变换速度正是系统结构设计的任务。构上提高虚地址到主存实地址的变换速度正是系统结构设计的任务。由虚地址变换成主存实地址,每次访存都得进行一次,要求速度高;由虚地址变换成主存实地址,每次访存都得进行一次,要求速度高;由虚地址到辅存实地址的变换,仅当页面失效时才进行,变换速由虚地址到辅存实地址的变换,仅当页面失效时才进行,变换速度可低些。度可低些。而替换算法仅在页面失效且主存已满时才用,使用概率更低,速度可更而替换算法仅在页面失效且主存已满时才用,使用概率更低,速度可更低些。低些。现在学习的是第23页,共33页 由于程序访问局部性的特点,查表时对表内各行的使用有簇由于程序访问局部性的特点,查表时对表内各行的使用有簇聚性。在一段时间里实际上只用到表内很少的几行。因此引入用聚性。在一段时间里实际上只用到表内很少的几行。因此引入用快速硬件构成的部分快速硬件构成的部分“相联目录表相联目录表”“快表快表”。把。把 行的全行的全相联目录表的很少几行装入快表。相联目录表的很少几行装入快表。“快表快表”只是只是“慢表慢表”的一个小小的副本。只有在查快表不命中时的一个小小的副本。只有在查快表不命中时才从慢表中取实页号。才从慢表中取实页号。页表法:页表在主存中,每访问主存一次,得再加一次访存查页页表法:页表在主存中,每访问主存一次,得再加一次访存查页表。表。段页式:仅查表就需要访存段页式:仅查表就需要访存2次次(一次段表一次段表、一次页表一次页表)。内部地址变换是通过查表得到实地址的。不同的表结构,其查表速内部地址变换是通过查表得到实地址的。不同的表结构,其查表速度不同。度不同。现在学习的是第24页,共33页 查表时,由虚页号同时去查快表和慢表。当快表中有此虚页号,就查表时,由虚页号同时去查快表和慢表。当快表中有此虚页号,就很快找到对应的实页号,并使慢表的查找作废。从而做到虽然采用虚拟很快找到对应的实页号,并使慢表的查找作废。从而做到虽然采用虚拟存储器但访问主存的速度几乎没有下降。存储器但访问主存的速度几乎没有下降。如果在快表中查不到,就需要一个访问主存的时间查慢表。查到如果在快表中查不到,就需要一个访问主存的时间查慢表。查到实页号,并将此虚页号和对应的实页号送入快表,替换快表中应移掉实页号,并将此虚页号和对应的实页号送入快表,替换快表中应移掉的内容。的内容。虚拟存储器只是有了快表才得以真正实用。快表命中率对系统效率影虚拟存储器只是有了快表才得以真正实用。快表命中率对系统效率影响很大。快表与慢表也构成表层次。快表对系统程序员是透明的。响很大。快表与慢表也构成表层次。快表对系统程序员是透明的。快表容量越大快表容量越大,命中率越高命中率越高,但相联比较时间长但相联比较时间长,速度下降速度下降。现在学习的是第25页,共33页Pentium处理机的虚拟存储器处理机的虚拟存储器 Pentium处理机的虚拟地址被称为逻辑地址。虚地址长度为48位,由16位段地址和32位位移地址构成。段地址中有2位用于存储保护,所以,有效的逻辑地址为46位,虚虚拟地址空间为拟地址空间为246。Pentium的存储器结构,根据其段表和页表可以设置成4种组合:无段表和无页表的存储器(非虚拟存储器)。其逻辑地址就是物理地址。无段表和有页表的存储器(页式虚拟存储器)。有段表和无页表的存储器(段式虚拟存储器)。有段表和有页表的存储器(段页式虚拟存储器)。现在学习的是第26页,共33页逻辑地址(48位)段位移+段表目录位移页线性地址(32位)页表+物理地址当Pentium采用段页式管理时,地址转换机制为:通过段地址查段表,将表中地址与位移地址相加得到32位线性地址,然后通过页面转换得到物理地址。页面转换是通过页目录和页表实现的。线性地址由页目录(10位)、页号(10位)和位移地址(12位)组成。页面大小为4KB。Pentium还允许将页面大小设置为4MB。此时页面转换只要查一次页表。现在学习的是第27页,共33页7.5 存储保护存储保护 由于多个用户对主存的共享,就有多个用户程序和系统软件存在于主存中。存储保护主要包括两个方面:存储区域保护和访问方式保护。存储保护都是由硬件实现的。为了使系统能正常工作,要防止由于一个用户程序出错而破坏其他用户的程序和系统软件,还要防止一个用户程序不合法地访问不是分配给它的主存区域。为此,系统应该提供存储保护。现在学习的是第28页,共33页1.存储区域保护存储区域保护(1)界限寄存器方式界限寄存器方式 设置上、下界寄存器,为每个程序划定存储区域,禁止越界访问。上、下界寄存器只有特权指令能访问,用户程序不能改变上、下界的值。一旦用户程序出错,只能破坏该用户自身的程序,不能侵犯其他用户程序和系统程序。界限寄存器方式只适用于每个用户占用一个或几个连续的主存区域。在虚拟存储系统中,由于一个用户程序的各页能够分散在不连续的主存区域,不能用界限寄存器方式保护。通常用页表保护和键保护方式。现在学习的是第29页,共33页(2)页表保护页表保护 每个程序都有自己的页表和段表。段表和页表本身都有自己的保护功能。地址出错只能影响到相应的几个主存页面。如果虚页号出错,超出范围,必然在页表中找不到,访问不了主存,不会侵犯其它程序空间。段表和页表保护是在没有形成主存地址之前的保护。如果在地址变换中出错,形成了错误的主存地址,就不能保护了。现在学习的是第30页,共33页(3)键保护方式键保护方式 操作系统为主存的每一页分配一个键,称为存储键。相当于一把锁。每个用户的实存页面的键都相同。每道程序赋予访问键,保存在该道程序的状态寄存器中。当该道程序要写存时,把访问键与存储键比较。如果两键相符,则允许访问该页,否则拒绝访问。现在学习的是第31页,共33页(4)环保护方式环保护方式 页表保护和键保护方式都是保护别的程序区域不被破坏,正在运行的程序本身受不到保护。环保护方式可以做到对正在执行的程序本身进行保护。201374 5 6现行环号寄存器上限环号寄存器 环保护方式是根据系统程序和用户程序的重要性及对整个系统的正常运行的影响对程序进行分层。每一层叫做一个环,有环号。环号越大,保护的级别越低。ECLIPSE MV 系列机 在现行程序运行之前,先由操作系统规定好程序各页的环号,并置入页表中。把该道程序开始运行时在主存中所处位置的环号送入现行环现行环号寄存器号寄存器,同时把上限环号置入上限环号寄存器上限环号寄存器。现在学习的是第32页,共33页201374 5 6现行环号寄存器上限环号寄存器ECLIPSE MV 系列机 当程序要转换到另一页时,要把现行环号寄存器现行环号寄存器的内容与要转去的页的环号比较。如果现行环号小于或等于要转去的页的环号,就可以转。并把现行环号寄存器现行环号寄存器的内容改为要转去的新页的环号。如果现行环号大于要转去的页的环号,则产生中断。由操作系统判断是否可以转移。如果允许转移才能转,并把现行现行环号寄存器环号寄存器的内容改为这个比较小的环号。如果不允许转移则按出错处理。但是无论如何现行程序不能访问低于上限环号上限环号的存储区域。在存取数据时也要进行同样的比较。只有在现行环号小于或等于被访问数据所在页的环号时才允许读写数据。现在学习的是第33页,共33页