今天给各位分享虚拟存储器是( )。的知识,其中也会对虚拟存储器是( )。进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
贡献者: 浏览:1980次 创建时间:2014-06-11
所谓虚拟存储器(Virtual Memory),就是采用一定的方法将一定的外存容量模拟成内存,同时对程序进出内存的方式进行管理,从而得到一个比实际内存容量大得多的内存空间,使得程序的运行不受内存大小的限制。虚拟存储区的容量与物理主存大小无关,而受限于计算机的地址结构和可用磁盘容量。
虚拟存储器是由硬件和操作系统自动实现存储信息调度和管理的。它的工作过程包括6个步骤:
①中央处理器访问主存的逻辑地址分解成组号a和组内地址b,并对组号a进行地址变换,即将逻辑组号a作为索引,查地址变换表,以确定该组信息是否存放在主存内。
②如该组号已在主存内,则转而执行④;如果该组号不在主存内,则检查主存中是否有空闲区,如果没有,便将某个暂时不用的组调出送往辅存,以便将这组信息调入主存。
③从辅存读出所要的组,并送到主存空闲区,然后将那个空闲的物理组号a和逻辑组号a登录在地址变换表中。
④从地址变换表读出与逻辑组号a对应的物理组号a。
⑤从物理组号a和组内字节地址b得到物理地址。
⑥根据物理地址从主存中存取必要的信息。
调度方式有分页式、段式、段页式3种。
1、页式调度
页式调度是将逻辑和物理地址空间都分成固定大小的页。主存按页顺序编号,而每个独立编址的程序空间有自己的页号顺序,通过调度辅存中程序的各页可以离散装入主存中不同的页面位置,并可据表一一对应检索。页式调度的优点是页内零头小,页表对程序员来说是透明的,地址变换快,调入操作简单;缺点是各页不是程序的独立模块,不便于实现程序和数据的保护。
2、段式调度
段式调度是按程序的逻辑结构划分地址空间,段的长度是随意的,并且允许伸长,它的优点是消除了内存零头,易于实现存储保护,便于程序动态装配;缺点是调入操作复杂。
3、段页式调度
将这两种方法结合起来便构成段页式调度。在段页式调度中把物理空间分成页,程序按模块分段,每个段再分成与物理空间页同样小的页面。段页式调度综合了段式和页式的优点。其缺点是增加了硬件成本,软件也较复杂。大型通用计算机系统多数采用段页式调度。
虚拟存储器和主存Cache 存储器是两个不同存储层次的存储体系。在概念上两者有不少相同之处:但由主存 - 辅存组成的虚拟存储器和主存Cache 存储器亦有很多不同之处:
●Cache 存储器采用与CPU速度匹配的快速存储元件弥补了主存和CPU之间的速度差距,而虚拟存储器虽然最大限度地减少了慢速辅存对CPU的影响,但它的主要功能是用来弥补主存和辅存之间的容量差距,具有提供大容量和程序编址方便的优点。
●两个存储体系均以信息块作为存储层次之间基本信息的传送单位,Cache存储器每次传送的信息块是定长的,只有几十字节,而虚拟存储器信息块划分方案很多,有页、段等等,长度均在几百~几百K 字节左右。
●CPU访问快速Cache存储器的速度比访问慢速主存快5 ~ 10倍。虚拟存储器中主存的速度要比辅存缩短100 ~ 1000 倍以上。
●主存Cache 存储体系中CPU与Cache和主存都建立了直接访问的通道。一旦不命中时,CPU 就直接访问主存并同时向Cache调度信息块,从而减少了CPU等待的时间。而辅助存储器与CPU之间没有直接通路,一旦在主存不命中时,只能从辅存调块到主存。因为辅存的速度相对CPU的差距太大,调度需要毫秒级时间,因此,CPU一般改换执行另一个程序,等到调度完成后才返回原程序继续工作。
●Cache 存储器存取信息的过程、地址变换和替换策略全部用硬件实现,对程序员均是透明的。而主存- 辅存层次的虚拟存储器基本上是由操作系统的存储管理软件并辅助一些硬件来进行信息块的划分和主存 - 辅存之间的调度,所以对设计存储管理软件的系统程序员来说,它是不透明的,而对广大用户,因为虚拟存储路提供了庞大的逻辑空间可以任意使用,所以对应用程序员是透明的。
虚拟存储器地址变换基本上有3种形虚拟存储器工作过程式:全联想变换、直接变换和组联想变换。任何逻辑空间页面能够变换到物理空间任何页面位置的方式称为全联想变换。每个逻辑空间页面只能变换到物理空间一个特定页面的方式称为直接变换。组联想变换是指各组之间是直接变换,而组内各页间则是全联想变换。替换规则用来确定替换主存中哪一部分,以便腾空部分主存,存放来自辅存要调入的那部分内容。常见的替换算法有4种。
①随机算法:用软件或硬件随机数产生器确定替换的页面。
②先进先出:先调入主存的页面先替换。
③近期最少使用算法:替换最长时间不用的页面。
④最优算法:替换最长时间以后才使用的页面。这是理想化的算法,只能作为衡量其他各种算法优劣的标准。
虚拟存储器的效率是系统性能评价的重要内容,它与主存容量、页面大小、命中率,程序局部性和替换算法等因素有关。
一、页式虚拟存储器
在页式虚拟存储系统中,将程序按统一的大小划分成多个页,同时也将虚拟存储器划分为同样大小的页,其中虚拟空间的页称为虚页(逻辑页),而主存空间的页称为实页(物理页),并对这些页按地址从低到高的顺序编号。
在编程时,程序的虚地址由高位字段的虚页号和低位字段的页内地址两部分组成,虚页号标识页。虚地址到实地址之间的变换是由页表来实现的。页表是一张存放在主存中的虚页号和实页号的对照表,记录着程序的虚页调入主存时被安排在主存中的位置。若计算机采用多道程序工作方式,则可为每个用户作业建立一个页表,硬件中设置一个页表基址寄存器,存放当前所运行程序的页表的起始地址。
页表中的每一行记录了与某个虚页对应的若干信息,包括虚页号、装入位和实页号等。页表基址寄存器和虚页号拼接成页表索引地址。根据这个索引地址可读到一个页表信息字,然后检测页表信息字中装入位的状态。若装入位为1,表示该页面已在主存中,将对应的实页号与虚地址中的页内地址相拼接就得到了完整的实地址;若装入位为0,表示该页面不在主存中,于是要启动I/O系统,把该页从辅存中调入主存后再供CPU使用,若主存已满,还需要使用替换算法替换页。如图所示给出了页式虚拟存储器的虚-实地址的变换过程。
页式虚拟存储器虽然能实现虚拟存储,但它还存在一些不足。
(1)由于采用定长的页,虽然建立页表方便,页的调入也容易实现。但由于程序不可能正好是页面的整倍数,那么最后一页的零头将无法利用而造成空间浪费。
(2)由于页不是逻辑上独立的实体,这给程序的处理、保护和共享等带来了麻烦。
二、段式虚拟存储器
在段式虚拟存储器系统中,将程序按其逻辑结构划分为段,各个段的长度因程序而异。段式虚拟存储器借助于段表来实现虚地址与实地址的转换。段表中每一行记录了某个段对应的若干信息,包括段号、装入位、段起点和段长等。装入位为1,表示该段已调入主存;装入位为0,则表示该段不在主存中。段表其实本身也是一个段,可以存放在辅存中,但一般存放在主存中。
在段式虚拟存储器系统中,虚地址由段号和段内地址两部分组成,如图3-18所示给出了段式虚拟存储器的虚-实地址的变换过程。
由于段式虚拟存储器的段具有逻辑独立性,因此它易于程序的处理、保护和共享等操作,但是,因为段的长度参差不齐,给主存空间分配带来了麻烦,同时很可能也会带来一定的空间浪费。
三、段页式虚拟存储器
段页式虚拟存储器是对段式、页式虚拟存储器的综合,它先将程序按其逻辑结构分段,再将每段划分为若干大小相等的页,同时将主存空间划分为同样大小的块。
因为段页式存储管理对逻辑地址进行了两次划分,第一次将逻辑地址划分为若干段,第二次将每个段划分为若干页。因此,要对内存正常寻址,不仅要知道将要访问的地址属于哪个段,也要知道该地址属于该段的哪个页。逻辑页与物理块一一对应,所以需要页表来记录各页对应的块号,且因为每个段都分成了很多页,所以每个段都需要一个页表。同时,作业分成了很多段,为了统一管理,系统需要知道每个段的分页情况,所以又要设置一个段表来记录每个段所对应的页表。
作业将要执行其中的某个语句时,根据其地址计算出段号、页号和页内地址。首先根据段号查找段表,得到该段的页表的起始地址,然后查找页表,得到该页对应的块号,最后根据块的大小和页内地址计算出该语句的内存地址。
虚拟存储器是( )。的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于虚拟存储器是( )。、虚拟存储器是( )。的信息别忘了在本站进行查找喔。
本文导读目录:
3、虚拟存储器
虚拟存储器的容量由计算机的地址结构和辅助存储器(如磁盘)的容量决定,与实际主存储器的容量无关。所以,虚拟存储器是可以容纳总和超过主存容量的多个作业同时运行的一个地址空间。参见教材P57。 本题知识点:页式虚拟存储管理, 1 虚拟内存是内存空间扩充技术的一种 具备对换 和 调页、调段功能的就是虚拟存储器。如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行如果某个数据被访问过,不久之后该数据很可能再次被访问。(因为程序中存在大量的循环)空间局部性: 一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。(因为数据顺序存放如数组a[ ],指令顺序执行) 应对局部性原理可以采用高速缓冲技术的思想:将近期会频繁访问到的数据放到更高速的存储器中Cache。例如:内存中的页表数据,放入快表里面PBA页面缓冲算法,把要换出到外存的页面放在“修改页面链表”虚拟内存的2种容量 易混知识点:虚拟内存的最大容量是由计算机的地址结构(CPU寻址范围)确定的虚拟内存的实际容量= min(内存和外存容量之和,CPU寻址范围) 虚拟内存 3种基本工作情况 程序运行时,并不是所有都在内存中。而是程序运行起来必须的在内存中,其余的在外存中。因此根据接下来需要的页面如何调入进来,分为三种。(接下来的页面,在内存)程序在运行时,如果它所要访问的页(段)已调入内存,便可继续执行下去(在外存)但如果程序所要访问的页(段)尚未调入内存(称为缺页或缺段),便发出缺页(段)中断请求,此时 OS将利用请求调页(段)功能将它们调入内存,以使进程能继续执行下去。(在外存,且内存空间不够,不能直接调入)如果此时内存已满,无法再装入新的页(段),OS还须再利用页(段)的置换功能,将内存中暂时不用的页(段)调至盘上,腾出足够的内存空间后,再将要访问的页(段)调入内存,使程序继续执行下去。传统存储器的2大特征 传统存储管理方式主要有两个特征:一次性:作业必须一次性全部装入内存后才能开始运行这会造成两个问题:①作业很大时,不能全部装入内存,导致大作业无法运行;②当大量作业要求运行时,由于内存无法容纳所有作业,因此只有少量作业能运行,导致多道程序并发度下降。驻留性:一旦作业被装入内存,就会一直驻留在内存中,直至作业运行结束 其实,在一个时间段内,只需要访问作业的一小部分数据即可正常运行。很多装入数据不需要,浪费了宝贵的内存资源。 虚拟内存有以下三个主要特征:①多次性:无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存。 对应传统的一次性。②对换性:在作业运行时无需一直常驻内存,而是允许在作业运行过程中,将作业换入、换出。对应传统的驻留性③虚拟性:从逻辑上扩充了内存的容量,使用户看到的内存容量,远大于实际的容量。 名词解释: 页面(页):是对逻辑地址来说的,最小单元页号:也是逻辑地址。物理块(页帧、页框、内存块、物理页面):对于物理地址来说的最小单元。分为两种硬件支持:页表项增加4项标志位:P、A、M、外存地址缺页中断处理方式新的地址变换方式(多了页面在外存怎么变换)软件支持:1.给进程分配多少内存,让它先运行起来。2.进程后期所需的页面怎么调入进来。3.如果内存满了,不能直接调入进来,选择牺牲哪个页面。内存分配方式:最小物理块大小确定内存分配策略:给进程分配物理块之后还能不能扩充物理块。后期所需物理块,从别进程置换,还是在自己进程空间中置换。固定分配局部置换可变分配全局置换可变分配局部置换物理块分配算法:现在内存空闲内存S,进来N个进程。一个进程分多少?平均分配算法 1/N * S按比例分配算法 进程大小/进程总大小 * S考虑优先级分配页面调入策略:何时调入:在内存找不到时何处调入:外存的哪个区页面置换算法:内存满了,把谁换出去最优OPT先进先出 FIFO最近最久未使用 LRU (最接近最优的)最近未使用 LFU最近从来未使用 NRU CLOCK改进时钟请求分段管理1)请求分页管理方式硬件支持硬件支持:页表项增加4项 PAM外存地址缺页中断处理方式新的地址变换方式,多了页面在外存怎么变换P代表的状态为,判断是否在内存,不在内存需要调入 positionA代表是访问次数,用于调度算法的判断。accessM是否修改,如果修改过,调回外存需要修改外存的数据 modify 缺页中断处理过程:假设此时要访问逻辑地址=(页号,页内偏移量)=(0,1024)(触发内中断故障)在请求分页系统中,每当要访问的页面不在内存时,便产生一个缺页中断,然后由操作系统的缺页中断处理程序处理中断。(阻塞)此时缺页的进程阻塞,放入阻塞队列,调页完成后再将其唤醒,放回就绪队列。(直接调入内存)如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项。(算法淘汰再调入内存)如果内存中没有空闲块,则由页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将其写回外存。未修改过的页面不用写回外存。 缺页中断2个特点:执行期间,产生中断并同时处理。执行期间,可能多次产生缺页中断一般的中断,是执行一条指令,然后检查中断,如果有中断就处理中断,然后执行下一条指令or继续执行刚才的指令。类型属于内中断(异常)中的故障 发生缺页中断的例子: 从1开始调入内存运行,发现加上2才是完整命令。然后发现数据A、B也没调入,又发生了缺页中断。地址变换机构 ⭐ 也是三种情况:(在快表)判断是否在快表,在快表就直接进行“操作”“操作”包括2个,①修改访问位A和修改位M,②形成物理地址。(在页表)检查快表→检查页表→修改快表→接着“操作”(在外存)检查快表→检查页表→缺页中断处理(更新了页表)→修改快表→接着“操作”缺页中断处理概括为5个①保存CPU信息(中断处理必备)②检查外存,找到缺页③(换出外存)若内存满了,就先页面调度选一个淘汰页面“对换”到外存;若没满直接第④步。(换出外存的页面,若W显示已经被修改过了,那么就重写外存的数据。)④换入内存⑤修改页表软件支持 4点 软件支持:1.给进程分配多少内存,让它先运行起来。2.进程后期所需的页面怎么调入进来。3.如果内存满了,不能直接调入进来,选择牺牲哪个页面。1. 内存分配——给进程分多大内存分配方式:最小物理块大小确定内存分配策略:给进程分配物理块之后还能不能扩充物理块。后期所需物理块,从别进程置换,还是在自己进程空间中置换。固定分配局部置换可变分配全局置换可变分配局部置换物理块分配算法:现在内存空闲内存S,进来N个进程。一个进程分多少?平均分配算法 1/N * S按比例分配算法 进程大小/进程总大小 * S考虑优先级分配 最小物理块数,是指能保证进程正常运行所需的最小物理块数,当系统为进程分配的物理块数少于此值时,进程将无法运行。 影响最少物理块数的因素:与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式。指令的源地址和目标地址所涉及的区域也都可能跨两个页面。如图,要发生6次中断的情况一样,对于这种机器,至少要为每个进程分配6个物理块对于某些简单的机器,若是单地址指令,且采用直接寻址方式,则所需的最少物理块数为2。其中,一块是用于存放指令的页面,另一块则是用于存放数据的页面。如果该机器允许间接寻址,则至少要求有三个物理块。对于某些功能较强的机器,其指令长度可能是两个或多于两个字节,因而其指令本身有可能跨两个页面。 内存分配策略固定分配局部置换可变分配全局置换(常见)可变分配局部置换 内存分配2种策略固定分配,分配给进程的物理块数不再变化可变分配,变化 置换的2种策略局部置换,意思是只能把当前程序的内存换到外存。全局置换,是可以把别的程序的页面从内存换出到外存, Why?没有固定分配全局置换因为全局置换会增加程序分配的物理块数量,固定分配一开始就确定了分配多少物理块数。物理块分配算法现在内存空闲内存S,进来N个进程。一个进程分多少?平均分配算法:1/N * S例如,当系统中有100个物理块,有5个进程在运行时,每个进程可分得20个物理块。按比例分配算法:进程大小/进程总大小 * S考虑优先级分配:一部分按比例地分配给各进程;另一部分则根据各进程的优先权进行分配,2. 页面调入策略——"何时"从外存的"哪"调入何时调入页面 分为两种,类似于静态和动态策略。预调页策略:就是一开始全都调入进来。一次调入若干个相邻的页会比一次调入一页更高效些;在采用工作集的系统中,每个进程都具有一张表,表中记录有运行时的工作集,每当程序被调度运行时,将工作集中的所有页调入内存。缺点:难实现,不知道一次调入哪几个。请求调页策略:就是请求了才调入。当进程在运行中需要访问某部分程序和数据时,若发现其所在的页面不在内存,便立即提出请求,由OS将其所需页面调入内存。缺点:但这种策略每次仅调入一页,故须花费较大的系统开销。何处调入页面 名词解释:文件区主要用于存放文件,占外存的大部分空间主要追求存储空间的利用率,因此对文件区空间的管理采用离散分配方式; 对换区主要用于存放内存调出的PCB进程,被换出的进程数据也存放在对换区。空间只占磁盘空间的小部分由于对换的速度直接影响到系统的整体速度,因此对换区空间的管理主要追求换入换出速度,因此通常对换区采用连续分配方式。 外存(磁盘)里面有文件区和覆盖区之分 每当发生缺页请求时,系统应从何处将缺页调入内存,可分成如下三种情况进行:①系统拥有足够的对换区空间 这时可以全部从对换区调入所需页面,以提高调页速度。为此,在进程运行前,便须将与该进程有关的文件从文件区拷贝到对换区。②系统缺少足够的对换区空间这时凡是不会被修改的文件,都直接从文件区调入;而当换出这些页面时,由于它们未被修改,则不必再将它们重写到磁盘(换出),直接抛弃这些页面。以后再需要调入内存时,仍从文件区直接调入。但对于那些可能被修改的部分,在将它们换出时便须调到对换区,以后需要时再从对换区调入。 (3) UNIX方式。 由于与进程有关的文件都放在文件区,故凡是未运行过的页面,都应从文件区调入。而对于曾经运行过但又被换出的页面,由于是被放在对换区(通过从内存换出到外存),因此在下次调入时应从对换区调入。由于UNIX系统允许页面共享,因此,某进程所请求的页面有可能已被其它进程调入内存,此时也就无需再从对换区调入。 (决定应该换入哪页、换出哪页)一定记得看看王道PPT里的例子 选择淘汰的页面是“将来”最长时间不使用的页面缺点:做不到 Optimistic adj. 乐观的,乐观主义的Optimal adj. 最佳的,最适的Optimum adj. 最佳的,最适宜的(等于optimal) n. 最佳效果;(生长、繁殖或成功的)最适宜条件 first in,first out每次选择淘汰的页面是最早进入内存的页面 从题目改为分四个物理块,但是缺页次数增加,可以看出有Belady异常。缺点: Belady 异常——当为进程分配的物理块数增大时,缺页次数不减反增的异常现象。不符合局部性原理,先进入的页面也有可能最经常被访问。因此,算法性能差 least recently used通过硬件判断最近最久未使用的页面,然后淘汰它 硬件支持:记录那个页面是最近最久未使用的[ ] 寄存器 使用移位寄存器,每一个页面都对应一个移位寄存器。每过一个时钟周期,周期内使用的页面就 移位同时高位补1;未使用的页面就移位同时高位补0。寄存器对应的值越小,代表最近用的越少。比如:一开始都是0000,A页面是1000,B是0111。A的值大,因此淘汰B。缺点:是每个页面都要一个寄存器,成本太高了。 [ ] 栈 使用栈实现,与普通栈不同的是。每次放入元素是,首先检查栈中有无此元素a,如果有,就要更新这个元素a的位置。先把这个元素a移除,然后在从栈顶压入这个元素a。比如:第四轮,先搜索074已经有7了,就把7取出,然后把新的7放进去。先变成04,最后变成704。 缺点:是每次放入一个页面,就要更新原有的编号。 Least Frequently Used其实LFU也可以加上“最近”的名号,因为和LRU一样,都只能统计最近一段时间以内的。 在采用LFU算法时,应为在内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率。该置换算法选择在最近最少的页面作为淘汰页。实现方式和LRU的寄存器方法一样,只是比较寄存器的值的大小的比较方法不同。 比如:对于进程a,b。Ra= 1000,Rb = 0111LRU是,1000 = 8 。0111 = 7。Rb小,b是最近最少使用的,应该换出b。LFU是,因为Ra使用了1次,Rb使用了6次(六个1)。a是使用最少的,因此应该换出a。 缺点:应该指出,这种算法并不能真正反映出页面的使用情况,因为在每一时间间隔内(如100ms时钟周期,刷新一次)只能用寄存器的一位来记录页的使用情况。因此,在100ms内,对某页访问1次和访问1000次是完全等效的,都只能在一位寄存器记录一个1。⑥时钟置换算法(Clock)/ 最近未用算法NRU Clock名字由来,王道说 这个运行过程的逻辑图,看起来像一个时钟。因此得名。因该算法只有一位访问位A,只能表示该页是否已经使用过,而置换时将未使用过的页面A=0换出去,故又把该算法称为最近未用算法NRU(Not Recently Used) NRU 最近未使用算法,这个“最近未使用”意思是最近从来没用过,而不是用过了但是最近没用。比如,调入四个页面,使用了两个之后这两个A=1,但是剩下两个A=0。这两个从来没使用过的才可能第一次就被调出。 引入原因:OPT性能最好,但无法实现;先进先出置换算法实现简单,但算法性能差;LRU性能好,是最接近OPT算法性能的,但是实现起来需要专门的硬件支持,算法开销大。时钟置换算法,是一种性能和开销较均衡的算法,因为算法要循环扫描缓冲区,像时钟的指针一样在转动,所以又称 简单的CLOCK 算法实现方法基础:为每个页面设置一个访问位A再将内存中的页面都通过链接指针链接成一个循环链表当某页被访问、调用时,其访问位置A为1 算法内容:当需要淘汰一个页面时第一轮扫描:寻找第一个A=0的页面。每检查一个页面,如果它的A=1,就把访问位A置为0。第二轮扫描:如果第一轮没找到A=0的页面,开启第二轮。(第二轮扫描中一定会有访问位为0的页面,因此简单的CLOCK 算法选择一个淘汰页面最多会经过两轮扫描) 实例: 一开始访问量 1 3 4 2 5。所有页面访问一遍,然后想访问6,发现6不在内存,开始找淘汰谁? CLock算法扫描一轮,没找到A=0的页面,结果是把所有页面的A都置为0Clock算法开始第二轮扫描时,由于一开始指向1号页。所以把1号页换出。 6号页顶替了1号页的位置,然后指针移动指向了3号页。6号页被访问A=1. 老师,我感觉Clock算法也即最近未使用算法,体现不出来“最近”没使用这个词。而应该是“从来没使用”过。因为页面一旦被使用就被置为1,再也不会自己置为0。而且假如,四个页面1 2 3 4。都被使用过了,A都=1。当第二轮检查的时候,因为从页面1开始找,所以一定是淘汰页面1。这也没体现出“最近” 改进后考虑是否被修改过,M位,修改过之后换出外存,有置换代价置换代价:如果被淘汰的页面没有被修改过,就不需要执行I/O操作写回外存。只有被淘汰的页面被修改过时,才需要写回外存 算法内容:简单来说就是,最多四轮扫描,找出最佳淘汰页。第一轮,先找(0,0)的页面,不修改。第二轮,找(0,1)的页面,修改A位变成0。因为如果第二轮找不到,第三轮该找(1,0)如果A都变成0,则可以第三轮重复第一轮,直接找(0,0)即可。第三轮,重复第一轮。看似再找(0,0)的页面,不修改。实际上是找第3类(1,0)的页面第四轮,重复第二轮。 改进型CLOCK置换算法选择一个淘汰页面最多会进行四轮扫描。因为第二轮已将所有页面的访问位A设为0,因此经过第三轮、第四轮扫描一定会有一个页面被选中。优点:该算法较简单Clock算法比较,可减少磁盘的I/O操作次数,开销较小,性能也不错。【补充】期末考法 问你缺页发生了几次?或问页面扩充为可以容纳四个,此时缺页几次? 小结:页面置换算法 4. 页面缓冲算法 PBA Page Buffering Algorithm减低请求式分页系统页面换入换出式的开销。简单来说就是加一个Cache(实际是内存开一块空间),里面放换出到外存的页面,每放一定量的换出页面才把这些页面批处理的换出到外存。 比如:VAX/VMS 1970年的操作系统的PBA实现方法在内存中设置了如下两个链表:①空闲页面链表:给某些进程额外空间实际上该链表是一个空闲物理块链表,是系统掌握的空闲物理块,用于分配给频繁发生缺页的进程,以降低该进程的缺页率。当这样的进程需要读入一个页面时,便可利用空闲物理块链表中的第一个物理块来装入该页。当有一个未被修改的页要换出时,实际上并不将它换出到外存,而是把它们所在的物理块挂在空闲链表的末尾。 ②修改页面链表它是由已修改的页面所形成的链表。设置该链表的目的是为了减少已修改页面换出的次数。当进程需要将一个已修改的页面换出时,系统并不立即把它换出到外存上,而是将它所在的物理块挂在修改页面链表的末尾。 这样做的目的是,降低将已修该页面写回磁盘的频率,降低将磁盘内容读入内存的频率。 三种耗费的时间:λ 查找快表的时间,修改快表的时间t 查找内存中的页表地址的时间,(找到地址后)访问内存中的页面Data的时间,更新页表的时间ε 缺页中断处理的时间 三种情况下的内存EAT计算:1.被访问页面在快表 检查快表时间λ+ 访问内存Data时间t = λ + t2.被访问页面不在快表,在内存检查快表时间λ + 检查内存页表时间t + 更新快表时间λ +访问内存Data时间t = λ + t + λ + t3.被访问页面不在内存中,在外存检查快表时间λ + 检查内存页表时间t + 缺页中断处理时间ε(包含更新页表时间t)+ 更新快表时间λ +访问内存Data时间t = λ + t + ε + λ +t (问题2)书上没考虑在外存的时候更新页表时间考虑了,是这样的,他直接把更新页表时间算在中断处理时间ε里面了。 两次缺页之间的时间是L缺页中断处理时间是SN是并发程序的数量刚刚换出的页面马上又要换入内存,刚刚换入的页面马上又要换出外存,这种频繁的页面调度行为称为抖动,或颠簸。产生抖动的主要原因是进程频繁访问的页面数目高于可用的物理块数(分配给进程的物理块不够)。而为进程分配的物理块太少,会使进程发生抖动现象。为进程分配的物理块太多,又会降低系统整体的并发度,降低某些资源的利用率。所以为了研究为应该为每个进程分配多少个物理块,Denning 提出了进程“工作集”的概念。 上下限之间的物理块数是效果比较好的。驻留集:指请求分页存储管理中给进程分配的内存块的集合。(系统设定分多少)工作集:指在某段时间间隔Δ里,进程实际访问不同的页面的集合。(用来算该分多少)窗口尺寸:就是这个时间间隔Δ具体地说,是把某进程在时间t的工作集记为w(t,Δ),将工作集定义为,进程在时间间隔(t-Δ,t)中引用页面的集合。其中的变量Δ称为工作集的“窗口尺寸”。 书上的例子基本就是t - Δ。t=1的时候,引用第一个页,此时在t之前没有执行页,因此工作集只有一个。 上述例子看出:窗口尺寸多大,工作集就有多大 有重复页面,如两个18。在这个窗口里面实际访问到的不同的页面是18 24 17。上述例子看出:工作集大小可能小于窗口尺寸 一般窗口尺寸多大,工作集就有多大。但是工作集大小可能小于窗口尺寸。实际应用中,操作系统可以统计进程的工作集大小,根据工作集大小给进程分配若干内存块。如:窗口尺寸为5,经过一段时间的监测发现某进程的工作集最大为3,那么说明该进程有很好的局部性,可以给这个进程分配3个以上的内存块即可满足进程的运行需要。一般来说,驻留集大小不能小于工作集大小,否则进程运行过程中将频繁缺页 为了保证系统具有较大的吞吐量,必须防止“抖动”的发生。目前已有许多防止“抖动”发生的方法。这些方法几乎都是采用调节多道程序度来控制“抖动”发生的。下面介绍几个较常用的预防“抖动”发生的方法。 在页面分配和置换策略中,如果采取的是可变分配方式,则为了预防发生“抖动”,可采取局部置换策略。根据这种策略,当某进程发生缺页时,只能在分配给自己的内存空间内进行置换,不允许从其它进程去获得新的物理块。这样,即使该进程发生了“抖动”,也不会对其它进程产生影响,于是可把该进程“抖动”所造成的影响限制在较小的范围内。该方法虽然简单易行,但效果不是很好,因为在某进程发生“抖动”后,它还会长期处在磁盘IO的等待队列中,使队列的长度增加,这会延长其它进程缺页中断的处理时间,也就是延长了其它进程对磁盘的访问时间。 当调度程序发现处理机利用率低下时,它将试图从外存调入一个新作业进入内存,来改善处理机的利用率。如果在调度中融入了工作集算法,则在调度程序从外存调入作业之前,必须先检查每个进程在内存的驻留页面是否足够多。如果都已足够多,此时便可以从外存调入新的作业,不会因新作业的调入而导致缺页率的增加:反之,如果有些进程的内存页面不足,则应首先为那些缺页率居高的作业增加新的物理块,此时将不再调入新的作业。 两次缺页之间的时间是L缺页中断处理时间是SDenning于1980年提出了“L=S”的准则来调节多道程序度,其中L是缺页之间的平均时间,S是平均缺页服务时间,即用于置换一个页面所需的时间。如果是L远比S大,说明很少发生缺页,磁盘的能力尚未得到充分的利用;反之,如果是L比S小,则说明频繁发生缺页,缺页的速度已超过磁盘的处理能力。只有当L与S接近时,磁盘和处理机都可达到它们的最大利用率。理论和实践都已证明,利用“L=S”准则,对于调节缺页率是十分有效的。 当多道程序度偏高时,已影响到处理机的利用率,为了防止发生“抖动”,系统必须减少多道程序的数目。此时应基于某种原则选择暂停某些当前活动的进程,将它们调出到磁盘上,以便把腾出的内存空间分配给缺页率发生偏高的进程。系统通常都是采取与调度程序一致的策略,即首先选择暂停优先级最低的进程,若需要,再选择优先级较低的进程。当内存还显拥挤时,还可进一步选择暂停一个并不十分重要、但却较大的进程,以便能释放出较多的物理块,或者暂停剩余执行时间最多的进程等。 虚拟内存(虚存)空间的大小由什么因素决定?虚存的容量要满足以下两个条件:①虚存的实际容量 ≤ 内存容量和外存容量之和,这是硬件的硬性条件规定的,若虚存的实际容量超过了这个容量,则没有相应的空间来供虚存使用。②虚存的最大容量 ≤ 计算机的地址位数能容纳的最大容量。假设地址是32位的,按字节编址,一个地址代表1B存储空间,则虚存的最大容量 ≤ 4GB(232B)。这是因为若虚存的最大容量超过4GB,则32位的地址将无法访问全部虚存,也就是说4GB以后的空间被浪费了,相当于没有一样,没有任何意义。实际虚存的容量是取决条件①和②的交集,即两个条件都要满足,仅满足一个条件是不行的。虚拟内存是怎么解决问题的?会带来什么问题?虚拟内存使用外存上的空间来扩充内存空间,通过一定的换入/换出,使得整个系统在逻辑上能够使用一个远远超出其物理内存大小的内存容量。因为虚拟内存技术调换页面时需要访问外存,会导致平均访存时间增加,若使用了不合适的替换算法,则会大大降低系统性能。进程在执行中发生了缺页中断,经操作系统处理后,应让其执行被中断的那一条指令。缺页中断调入新页面,肯定要修改页表项和分配页框,同时内存没有页面,需要从外存读入,也会发生磁盘I/O。虚拟存储技术是补充内存逻辑空间的技术。并未实际扩充内存和外存,而是采用相关技术相对地扩充主存。虚拟存储器的最大容量是由计算机的地址结构决定的,与主存容量和外存容量没有必然的联系。虽然从实际使用来说,虚拟存储器能使得进程的可用内存扩大道内外存容量之和,但进程内存寻址仍由计算机的地址结构决定,这就决定了虚拟存储器理论上的最大容量。比如,64位系统环境下,虚拟内存技术使得进程可用内存空间达264B,但外存显然是达不到这个大小的。 虚拟存储技术基于程序的局部性原理。局部性越好,虚拟存储系统越能更好地发挥作用。虚拟存储扩充内存的基本方法是将一些页或段从内存中调入、调出,而调入、调出的基本手段是覆盖与交换。请求分页存储管理中,若采用FIFO页面淘汰算法,可能会产生当驻留集增大时,页故障数不减反增的Belady异常。然而,还有另外一种情况。例如,当页面序列为 1,2,3,1,2,3时,页帧数增加,缺页中断会减少。则当可供分配的页帧数增加时,缺页中断的次数可能增加也可能减少。导致LRU算法实现起来耗费高的原因是需要硬件的特殊支持。LRU算法需要对所有页最近一次被访问的时间进行记录,查找时间最久的进行替换,这涉及到排序,而排序需要硬件的支持。在虚拟存储器系统的页表项中,决定是否会发生页故障的是合法位(状态位),合法位信息是用来显示本页面是否在内存中的。在页面置换策略中,所有策略都可能引起抖动。请求分页存储管理的主要特点是扩充了内存。基于局部性原理,运行一个进程时不需要让整个进程进入内存。在请求分页存储管理的页表中增加了若干项信息,其中修改位和访问位是供置换算法参考。产生内存抖动的主要原因是页面置换算法不合理。在进程运行时,若其工作集页面都在主存储器内(不是虚拟存储器,因为虚拟内存还有硬盘的那部分),则能够使该进程有效地运行,否则会出现频繁的页面调入/调出现象。覆盖技术与虚拟存储技术有何本质上的不同?交换技术与虚拟存储技术中使用的调入/调出技术有何不同之处? 解答:1)覆盖技术与虚拟存储技术最本质的不同在于,覆盖程序段的最大长度要受内存容量大小的限制,而虚拟存储器中程序的最大长度不受内存容量的限制,只受计算机地址结构的限制。另外,覆盖技术中覆盖段由程序员设计,且要求覆盖段中的各个覆盖区具有相对独立性,不存在直接联系或相互交叉访问;而虚拟存储技术对用户的程序段没有这种要求。2) 交换技术就是把暂时不用的某个程序及数据从内存移到外存中,以便腾出必要的内存空间,或把指定的程序或数据从外存读到内存中的一种内存扩充技术。交换技术与虚存中使用的调入/调出技术的主要相同点是,都要在内存与外存之间交换信息。交换技术与虚存中使用的调入/调出技术的主要区别是:交换技术调入/调出整个过程中,一个进程的大小要受内存容量大小的限制;而虚存中使用的调入/调出技术在内存和外存之间来回传递的是页面或分段,而不受整个进程,从而使得进程的地址映射具有更大的灵活性,且允许进程的大小比可用的内存空间大。在页式虚存管理系统中,假定驻留集为 m 个页帧(初始所有页帧均为空),在长为 p 的引用串中具有 n 个不同页号(n>m),对于FIFO、LRU两种页面置换算法,试给出页故障数的上限和下限。发生页故障的原因是,当前访问的页不在主存,需要将该项调入主存。此时不管主存中是否己满(已满则先调出一页),都要发生一次页故障,即无论怎样安排,n个不同的页号在首次进入主存时必须要发生一次页故障,总共发生n次,这是页故障数的下限。虽然不同的页号数为n小于等于总长度p (访问串可能会有一些页重复出现),但驻留集m虚拟存储器是( )。的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于虚拟存储器是( )。、虚拟存储器是( )。的信息别忘了在本站进行查找喔。
未经允许不得转载! 作者:谁是谁的谁,转载或复制请以超链接形式并注明出处。
原文地址:http://www.chtoy.com.cn/post/25939.html发布于:2026-05-19




