精华内容
下载资源
问答
  • 虚拟内存管理技术

    2012-10-28 19:39:00
    虚拟内存管理的实现中,最关键的就是页面的调入策略和页面的置换算法。 页面的调入策略主要有两种:预先调入策略和页面请求调入策略。由于前者需要对进程的运行过程进行一定量的预测,所以实现起来比较困难和低效...

    在虚拟内存管理的实现中,最关键的就是页面的调入策略和页面的置换算法。
      页面的调入策略主要有两种:预先调入策略和页面请求调入策略。由于前者需要对进程的运行过程进行一定量的预测,所以实现起来比较困难和低效,所以经常采用的是后一种策略,即当执行进程所需的某个页面不在内存时,产生缺页中断,再由专门的缺页中断服务程序(ISR)根据进程页表将所需页面调入内存。

      当缺页中断服务程序发现,内存中已经没有空闲的物理页面(通常称之为帧)时,就会执行一种页面换出程序,它采取一定的置换算法将某个页面换出到外存的交换(文件)分区。通常,衡量一种页面置换算法性能好坏的指标就是对于大量的页面请求序列,在一定数量的物理帧上,产生缺页中断的平均次数。页面置换算法较多,其变种更多,常常见诸于各大OS教材的主要由下面的几种。

      • 先入先出法(FIFO)
          Fist In Fist Out, 这是一种实现起来最为简单的算法,其实质是,最简单的页面置换算法是先入先出(FIFO)法。这种算法的实质是,总是选择在主存中停留时间最长(即最老)的一页置换,即先进入内存的页,先退出内存。理由是:最早调入内存的页,其不再被使用的可能性比刚调入内存的可能性大。建立一个FIFO队列,收容所有在内存中的页。被置换页面总是在队列头上进行。当一个页面被放入内存时,就把它插在队尾上。
          这种算法只是在按线性顺序访问地址空间时才是理想的,否则效率不高。因为那些常被访问的页,往往在主存中也停留得最久,结果它们因变“老”而不得不被置换出去。另外,FIFO算法还有一个比较有意思的缺陷,称之为Berlady异常(或者?),说当物理内存也即帧数增加时,其缺页中断的次数反而有可能增加!
      • 最优置换算法(OPT)
          最优置换(OPTimal replacement),顾其名,知其义,这是一种最优的算法,因为对于任一页面请求序列,其产生的缺页中断次数时最少的,但,这只是理论上的最优。其实质是:当调入新的一页而必须预先置换某个老页时,所选择的老页应是将来不再被使用,或者是在最远的将来才被访问。其最优性是容易证明的。
          但是最优页面置换算法的实现是困难的,因为它需要我们预先就知道一个进程整个运行过程中页面走向的全部情况,而这几乎时不可能的。所以,这个算法主要还是用来衡量其他算法的优劣的。
      • 最近最久未使用算法(LRU)
          最近最久未使用算法(Least-Recently Used),它的核心思想是,当需要置换一页时,选择在最近一段时间里最久没有使用过的页面予以置换。既然要以时间为替换依据,那么肯定就要用到定时/计数器,因此这个算法通常需要一定的硬件支持,这样的话其通用性也会降低。

         

          还有一种LRU的近似算法,最近未使用算法(Not Recently Used,NUR),相比LRU实现起来更简单一些。它在页表的每一表项中增加一个引用位,操作系统定期地将它们置为0。当某一页被访问时,由硬件将该位置1。需要页面替换时,就可把该位是0的页淘汰出去。

     

    • 二次机会算法(SC)
        这是一种FIFO和LRU的折中,或者说结合,它避免了FIFO的缺陷,即可能把经常使用的页面替换出去(比如说装入程序?)。它的思想是:需要页面替换时,检查它的访问位。如果是0,就淘汰这页;如果访问位是1,就将其清0,同时给它第二次机会,然后检验下一个FIFO页面。因此,如果一个页面经常使用,它的访问位总保持为1,它被淘汰出去的几率是很小的。

      
      还有其他很多页面置换算法,实际使用的算法通常就是这些算法的一些折中或者说变种,可见,要想把一个理论上的好算法应用到具体的问题上,会受到很多限制,还需要做不少其他的工作。

    转载于:https://www.cnblogs.com/mfryf/archive/2012/10/28/2743870.html

    展开全文
  • 虚拟内存管理技术-简称虚存技术 解决覆盖技术和交换技术弊端的技术 区别:过程由OS完成,减轻程序猿负担。 根据当前执行情况可以动态的导出导入,但是粒度更小,不只是程序间,还可以以页或者段为粒度来进行导入...

    虚拟内存管理技术-简称虚存技术
    在这里插入图片描述
    解决覆盖技术和交换技术弊端的技术
    在这里插入图片描述
    区别:过程由OS完成,减轻程序猿负担。
    在这里插入图片描述
    根据当前执行情况可以动态的导出导入,但是粒度更小,不只是程序间,还可以以页或者段为粒度来进行导入导出。
    在这里插入图片描述
    如图所示,OS和MMU支持下,以P3为例,P3只在内存中放了2个内存页,其他的全放入了硬盘中。因为此时只用到了这一小部分数据,这样就使得一个本来比较大的程序在有效时间段内仅使用一小部分内存资源。虚存技术,除了需要硬件支持外,还需要程序具有局部性。

    程序的局部性原理

    在这里插入图片描述
    局部性原理分为了时间局部性和空间局部性。
    时间局部性:一条指令和下次执行,一个数据的访问和下一次访问都集中在一个较短时期内。
    空间局部性:当前指令和邻近几条指令、当前访问和邻近的几个数据都集中在一个较小区域内。
    分支局部性:一条跳转指令的两次执行,很可能跳到相同的内存位置
    访问速度快、空间大、使用方便(不需要程序猿过多构思数据结构)
    例子:
    在这里插入图片描述
    这个整数数组的空间大小是1024x1024,int型每一个是4byte,也就说这一个数组整体会占4M的内存空间。但是物理内存只有4K。此时,
    程序1:A【0】【0】~ A【1023】【0】==>A【1023】【1023】

    程序2:A【0】【0】~ A【0】【1023】==>A【1023】【1023】

    区别:实际上A【1】【0】和A【0】【0】从空间上来看,中间差了1024个数据也就说是4K的数据大小,但是A【1】【0】和A【1】【1】之间的距离只有一个数据也就说4byte。
    那么对于程序2而言,在数据A【0】【x】占据了一个页。当他第一次访问时,数组的数据还在硬盘上时,会产生缺页异常,此时OS会把仅有的4K空间使用上,并把A【0】【x】数组放入内存空间 ,然后就可以对A【0】【x】数组进行正常访问了。根据循环,第二次访问A【0】【1】时,因为已经有了对应的页,就不会发生页异常。内循环执行完后,进入下一个内循环,此时访问A【1】【0】发生一次中断,然后接下来的1023次访问不会再发生中断。具备很好的空间局部性和时间局部性。也就意味着一共发生了1024次缺页中断
    对于程序1而言,在数据A【0】【x】占据了一个页。当他第一次访问时,数组的数据还在硬盘上时,会产生缺页异常,此时OS会把仅有的4K空间使用上,并把A【0】【x】数组放入内存空间 ,然后就可以对A【0】【x】数组进行正常访问了。根据循环,第二次访问时,会访问A【1】【0】,此时会再次产生缺页异常,因为对应A【1】【x】的页仍然不在内存,在硬盘中,需要再次把4K的物理内存用到A【1】【x】数组上,此后导入A【1】【x】的页。同理,在一个内循环中,每一次都会跳4K空间去访问一个数据,每一次访问都会发生缺页异常。也就意味着一共发生了1024x1024次缺页中断
    可以看出程序的不同写法对开销的影响是相当大的。
    缺页/段异常
    上面讲到的,因为内存中只有部分数据,所以可能会发生程序进行到一定阶段后,接下来的数据访问不到的情况。因为另一部分数据不在内存中而在硬盘中,此时会发生一个缺页或者缺段异常。 此时OS会进行处理,如果内存还有空间,就会把数据或者指令从硬盘导入内存,这样程序就可以继续执行。如果内存空间不足,则OS需要考虑当前阶段不会立刻用到的数据导出到硬盘,然后把需要的数据换入内存。这个选择哪个程序导出也很重要。选择的好,访问读写的次数就会少,整体系统性能也会提高。

    虚存技术的基本特征

    1.空间大: 通过内存和外存结合,提供给用户的虚拟内存空间通常大于实际物理空间。 32位机器理论上可以访问4GB而且物理内存只有256M,但是硬盘容量很大。通过硬盘的补充,可以实现内存中跑多个程序,而且每个程序会认为自己占用了4GB的空间。kernel是常驻内存不能被换出。
    2.部分交换:与交换技术相比,虚拟存储的调入和调出是对部分虚拟空间进行的
    3.不连续性:物理内存分配不连续,虚拟空间使用也不连续。(因为换入换出会导致原本连续的地址空间很可能再换回后不再在换出位置)

    虚存技术的实现

    虚拟页式内存管理

    在这里插入图片描述
    如图所示, 逻辑地址空间和物理地址空间是靠页表来维持映射关系的。页表项的索引是页号,页表项的内容是页帧号。页表项除了页帧号之外,其实还有几个单位的bit作为标志位,比如存在位。那么这里的内存访问查找页表发现对应页表项的存在位是0,则说明这个虚拟地址空间没有对应的物理空间,产生访问异常。
    大部分虚拟存储系统都采用虚拟页式内存管理。为了实现,除了页式内存管理的基本功能之外,在增加两个新的功能(请求调页和页面置换)【需要访问这个页时,才把这个页调入到内存中】

    请求调页:当一个用户进程需要调入内存运行时,不会把所有程序都放入内存中,只是装入一部分程序。放到个别的页里,运行的时候就有可能出现访问的数据和代码不在内存中,此时就会由CPU发出缺页异常的信号,然后OS根据产生异常的地址来找到对应到外存中需要被调入的数据,然后将其放入相应的物理页去,使该页可以继续执行。

    页面置换:访问过程中,随着程序的执行他占用内存越来越多,此时需要把不常用页换出,把当前需要的页换入,这就是页面置换。该功能实现的好坏就决定了整体效率,所以后面会专门设计一个有效的页面置换算法,后续会详细讲解。
    在这里插入图片描述
    为了实现这两个功能,我们需要在页表项里增加一些特殊的,来辅助完成这些功能。有4个位比较重要。
    1.存在位/驻留位:这个位表示该页是否存在内存中。0表示不在内存中,1表示在内存中。为1也就说逻辑页号一定对应一个物理页帧号。如果为0则说明内存中没有对应物理页支持,很有可能对应数据在外存中,此时访问会出现访问异常
    2.保护位:表示允许该页做何种类型的访问,比如只读、只写,可读写、只执行等。 如果只读标识下执行写操作就会出现异常。
    3.修改位:表明这个页是否被修改(写操作)过。如果这个页被写过,为1,;没被写过,就为0。如果内存中数据被写过,也就说当前数据与硬盘中数据不一致了,这时候最新的数据放入内存时,进行换出操作,需要把这个数据保存到硬盘中,使得硬盘中数据与内存中数据一致。如果修改位为0,则内外数据一致,此时如果进行换入换出操作,只需要释放就可以。所以修改位的使用可以有效提高修改位的效率。
    4.访问位:这个也是否被访问过,访问过为1,没有访问为0。置换算法中,我们会把页换出去,那么换哪些?应该换当前没有访问的页,这位可以表明这个页是否经常使用,近期是否会使用等信息,我们可以根据这个特点决定换出对象。
    在这里插入图片描述
    驻留位为0,没有对应的虚拟地址映射到物理地址上。
    这里执行了两个指令。
    1.MOV REG,08192MOV\space REG ,0 8192
    访问,把虚拟0地址的内容赋给一个寄存器。0地址对应页表里的映射关系,是物理地址中的页帧号2位置,所以他的实际物理地址应该是2*4K=8K(8192Byte)
    2.MOV REG,32780MOV\space REG ,32780 ==>MOV REG,MOV\space REG,缺页中断
    把虚拟地址32780读到寄存器中,32780其实对应到逻辑地址中的页号为8的项中,因为驻留位为0,没有对应到物理地址的映射,则会触发缺页异常。

    缺页中断处理

    在这里插入图片描述
    ①:CPU执行指令,如果一个内存地址没有对应的映射关系,发生缺页异常。
    ④:需要访问的地址对应的硬盘中的数据以页的单位从硬盘读入内存中,然后修改页表,驻留位改为存在并把页帧号改成该页帧号。
    如果没有空闲空间时,需要使用页面替换算法。

    后备存储(二级存储)

    在这里插入图片描述
    硬盘存储数据的特征:
    1.数据:数据文件放在硬盘上,当需要时,如果内存中没有,则从数据文件中读出。这是一种后备存储。
    2.代码:操作系统会在令程序执行很多指令,指令其实也是一种数据,放在执行程序里/硬盘里。同理,读入内存并让CPU执行,当指令不存在,会进一步从程序中读入这条指令。
    3.动态链接库:库的代码数据也是放在硬盘的。同理也是需要时读入
    4.交换文件(swap file):程序运行过程中有可能产生许多数据,但是这些数据没有对应到具体的文件,就是动态产生的数据,这些数据也有可能占用了不小的空间且需要换出到硬盘中,则此时OS会在硬盘中开辟一个专门的区域——swap file。这个文件内的数据没有与文件直接对应的内存内容
    这四类形成了后备存储(二级存储),有了二级存储的支持,保证了空间的有效性。

    虚拟内存性能

    在这里插入图片描述
    分析执行开销:
    EAT=访+EAT=内存访问时间*页表命中率+缺页处理时间*缺页概率
    分析这个例子中的参数,10代表一次内存的访问时间,页表命中率也就说没有缺页的概率,就是1-p;如果产生缺页,自然就需要访问磁盘,那么处理时间就是5ms(5106ns5*10^6ns)。产生缺页后至少要做一个读操作,为5msp5ms*p
    q是页修改概率。代表对某一个内存页的写操作后,且该数据需要换出时,前面讲过这个换出操作导致当前数据与硬盘中数据不一致,需要个更新硬盘数据,也就说要对硬盘进行一个写操作。写硬盘操作的开销也是5ms,缺页且需要页修改的情况下的开销为5mspq5ms*p*q
    脏页简单来说就是根据一个高速缓存表来不断更新数据的常用标识,因为硬盘的读写速度远赶不上内存的速度,系统就把读写比较频繁的数据事先放到内存中,以提高读写速度,这就叫高速缓存。页作为高速缓存的单位,当某一个页被访问后,对其标识并且对上一个访问的页标识,旧的级别分为不同级别,当旧的级别达到一定程度时,修改高速缓存里,该页就被内核标记为脏页,内核将会在合适的时间把脏页的数据写到硬盘中去,以保持高速缓存中的数据和磁盘中的数据是一致的。

    p足够小,那么平均访问时间就会接近10ns,p如果比较大,则会导致整个循环的效率比较差。但是因为程序的局部性特点,意味着缺页次数不会过多,此时效率可以得到保障。

    展开全文
  • 分析了嵌入式系统虚拟内存管理应具有的功能特点,提出了一种具有处理器无关标准编程接口的嵌入式虚拟内存管理平台的实现方法。
  • 1 虚拟内存 https://blog.csdn.net/iwanderu/article/details/103946338 1.1 虚拟内存的起因 我们只有有限的物理内存空间,但是如果我们再跑一个很大的应用程序,比如说3D游戏,可能会出现内存不够用的情况。那么...

    1 虚拟内存
    https://blog.csdn.net/iwanderu/article/details/103946338
    1.1 虚拟内存的起因

    我们只有有限的物理内存空间,但是如果我们再跑一个很大的应用程序,比如说3D游戏,可能会出现内存不够用的情况。那么我们为了能够让游戏顺利的进行,就需要利用起外存(磁盘)。我们把当前正在执行的东西放到内存里面进行执行,当前不需要执行的东西放到外存里面。早期的时候会使用覆盖技术(DOS系统),由程序员自己区分,内存与外存存储的东西;,继而发展到自动交换技术,操作系统介入这一事情的处理;最后发展到虚拟内存技术。

    1.2 覆盖技术是怎么样工作的

    覆盖技术主要是指程序员通过对程序的精心设计,对于不同走向的程序,分时段的加载到内存里来。这极大地增大了程序员的工作量和编程的复杂度,这是一种以执行时间来换取空间节省的方案。
    在这里插入图片描述

    1.3 交换技术如何工作

    操作系统介入这一事情中来。多道程序在内存中时,让正在运行的程序或需要运行的程序获得更多的内存资源。操作系统会将暂时不能运行的程序送到外存,从而获得空闲内存空间。何时交换、交换区大小、交换回来地址变化需要映射表维护。交换的是全部程序代码。

    1.4 虚拟内存

    虚拟内存管理技术在硬件上是基于操作系统和MMU这类分页或分段寻址技术之上的。虚拟内存管理技术是兼具覆盖技术和交换技术的优点,主体特征是在内存里存放常用的程序,在硬盘里存放不常用的程序,在硬盘需要执行的时候又能够进行自动交换(交换的是部分)。在软件上的原理是基于程序的局部性原理。
    将当前需要执行的代码段儿放入内存中,在CPU检测到指令需要其他的代码段的时候,操作系统再将硬盘里的代码段放到内存中。这里面有一个事情值得注意的是如果操作系统检查内存里面还有空间,那么会将硬盘里的代码段直接放入到内存里面,但是如果内存里面此时没有空间,操作系统需要做更多的考虑,将内存中已有的程序,但是并不那么紧要的程序交换到硬盘里面,然后再将需要执行的代码段放到这段空闲的内存里。

    程序的局部性原理是指?

    程序的局部性原理是指程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址分别局限于同一个区域,这可以表现为时间局部性和空间局部性。时间局部性是指指令和指令之间的较短的周期,空间局部县市之相邻的几条指令所访问的几个数据都集中在较小的一个区域内。
    利用程序的局部性原理有助于我们写出更加高效的代码。
    在这里插入图片描述

    32位系统的虚拟内存空间最大容量

    pow(2,32)/1024/1024/1024 =X个地址*8bit=4G
    注意由于系统本身内存消耗,我们可用的也就3.2G左右。

    具体的虚拟内存技术是如何工作的?

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 当然免不了的也有很多“失败”的预测,其中一个最著名的就是,比尔·盖茨在上世纪 80 年代说的“640K ought to be enough for anyone”,也就是“640K 内存对每个人来说都够用了”。 而在现在,我们身边的机器的...

    计算机这个行业的历史上有过很多成功的预言,最著名的自然是“摩尔定律”。当然免不了的也有很多“失败”的预测,其中一个最著名的就是,比尔·盖茨在上世纪 80 年代说的“640K ought to be enough for anyone”,也就是“640K 内存对每个人来说都够用了”。

    而在现在,我们身边的机器的内存已经是4G,甚至动辄就是16G/32G的内存,如果你当时听到比尔盖茨的这句话的时候,你是不是觉得这个根本就是无稽之谈呢?那么我们就来看看这个技术是怎么做的呢?

    1. 覆盖技术

    覆盖技术主要用于早期的OS中(内存<64K),可用于存储空间受限,某些大作业不能一次全部装入内存,产生了大作业和小内存的矛盾。而覆盖技术就是解决这一矛盾,在较小的可用内存中运行较大的程序。其基本的思路如下:

    • 1.对于进程,不需要一开始就把程序的全部指令和数据装入内存中执行,常用功能的代码和数据常驻内存,不常用功能放在其他程序模块中,只在需要用到时装入内存
    • 2.程序划分为若干个功能上相对独立的程序段,按照程序逻辑结构让那些不需要同时执行的程序共享同一块内存区
    • 3.当有关程序段的先头程序已经执行结束后,再把后续程序段从外存调入内存覆盖前面的程序段

    程序员必须把一个程序划分成不同的程序段,并规定好它们的执行和覆盖顺序,例如如下实例中,设某进程的程序正文段由A,B,C,D,E和F等6个程序段组成
    在这里插入图片描述

    由于程序段B不调用C,程序段C也不调用B,因此程序段B和C无需同时驻留在内存,它们可以共享同一内存区。
    同理,程序段D、E、F也可共享同一内存区。所以对于程序实际需要的内存空间是190K,而采用覆盖技术后,实际的地址空间只需要最少100K就可以了。

    虽然覆盖技术可以解决小内存,大应用的问题,但是也存在它自身的局限性

    • 增加编程困难:需程序员划分功能模块,并确定模块间的覆盖关系,增加了编程的复杂度
    • 增加执行时间:从外存装入覆盖模块,时间换空间
    • 只能发生在没有调用关系的模块间,程序员须给出模块间的逻辑覆盖结构
    • 发生在运行程序的内部模块间

    这个技术对于编程人员的能力要求很高,同时如果程序过于复杂,出错可能性很大,最重要的一点是,这个发生在运行程序的内部,那如果是程序间的空间大于内存空间,那么就会导致无法解决小内存,大应用的问题。

    2. 交换技术

    怎么更好地利用内存,UNIX让OS管理而不是程序员管理,以运行的程序为单位。多道程序在内存中时,让正在运行的程序或需要运行的程序有更多的内存资源。其基本思路如下:

    • 可将暂时不能运行的程序送入外存中,从而获得空闲内存空间
    • 换出(swap out):把一个进程的整个地址空间保存到外存
    • 换入(swap in):将外存中某进程的地址空间读入到内存
    • 换入换出的基本单位:整个进程的地址空间

    对于交换技术,我们需要思考几下几个问题

    • 交换时机的确定:何时需要发生交换?-----只有当内存空间不够或者空间有不够使用的时候
    • 交换区的大小:必须足够大以存放所有用户进程的所有内存映像的拷贝,必须能对这些内存映像进行直接存储
    • 程序换入时重定位:必须采用动态地址映射的方法,保证程序换出后,再次换入的内存位置不需要在原来的位置。

    总之,交换技术是以在内存中程序大小为单位进行,它不需要程序员给出各个模块间逻辑覆盖结构,是由操作系统来完成。

    3. 局部性原理

    一个优秀的程序、优美的代码,往往具有良好的局部性。那么什么是程序的局部性原理呢?

    程序局部性原理:是指程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的一部分。相应地,执行所访问的存储空间也局限于某个内存区域,具体的来说,局限性通常有两种形式:

    • 时间局限性:被引用过一次的存储器位置在未来会被多次引用(通常在循环中),一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内
    • 空间局限性:如果一个存储器的位置被引用,那么将来他附近的位置也会被引用,当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小区域内

    从理论上来说,虚拟存储技术是能够实现的,而且可取得满意的效果。下面我们以一个例子不同程序编写方法的局部性特征,页面大小为4K,分配给每个进程的物理页面数为1。在一个进程中,定义了如下的二维数组int A[1024][1024],采用下面两种方式

    for (j = 0; j < 1024; j++)for (i = 0; i < 1024; i++)A[i][j] = 0; for (i=0; i<1024; i++)for (j=0; j<1024; j++) A[i][j] = 0;
    发生了1024×1024次缺页中断 发生了1024次缺页中断

    对于如果内存空间不足,就可以采用这种分页加载的方式。

    4. 虚拟存储技术

    随着技术的发展,覆盖和交换技术已经不能满足现实生活中的应用,虚拟存储技术就是优化覆盖技术,系统自动完成,综合交换技术,进程的部分内容交换,并且利用程序局部性原理。

    4.1 虚拟存储技术的概念

    虚拟内存是指在具有层次结构存储器的计算机系统中,采用自动实现部分装入和部分交换功能,为用户提供一个比物理主存容量大的多的可寻址的一种“主存储器”。它使用逻辑存储器与物理存储器分离,是操作系统给用户提供的一个比真实内存空间大的多的地址空间。虚拟存储的基本思路:将不常用的部分内存块暂存到外存,其基本原理如下:

    • 基于局部性原理,装载程序时,只将当前指令执行需要的部分页面或段装入内存
    • 指令执行中需要的指令或数据不在内存(称为缺页或缺段)时,处理器通知操作系统将相应的页面或段调入内存
    • 如果内存空间不足,操作系统将内存中暂时不用的页面或段保存到外存

    那么基于虚拟内存的原理,可以有以下三个主要特征:

    • 多次性:无需再作业运行时一次性全部装入内存,而是允许被多次调入内存。

    • 对换性:在作业运行时无需一直常驻内存,而是允许在作业运行过程中,将作业换入、换出

    • 虚拟性:从逻辑上扩充了内存的容量,使用户看到的内存容量,远大于实际容量。

    那讲了那么多虚拟内存技术的概念,我们肯定会想怎么实现这个虚拟内存技术啊?虚拟内存技术,允许一个作业分多次调入内存。如果采用连续分配方式,会很不方便实现(进程的地址连续)。因此,虚拟内存的实现需要建立在离散分配的内存管理方式基础上,结合之前的分段,分页,段页式管理,有以下几种方式

    • 虚拟页式存储,基于传统分页存储管理
    • 虚拟段式存储,基于传统分段存储管理
    • 虚拟段页式存储,基于传统的段页式存储管理

    4.2 虚拟页式存储管理

    在页式存储管理的基础上,增加请求调页和页面置算法,就形成了现在的虚拟页式存储管理。其基本的思路如下:

    • 1.基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,就可以让程序开始执行
    • 2.在程序在执行过程中,当所需要的访问代码或数据不在内存时,则向系统发出缺页异常请求,操作系统在处理缺页异常时,将外存中相应的页面调入内存,使得进程能继续运行
    • 3.当内存空间已满,而又需要装入新的页面时,则根据某种算法置换出某个页面,装入新的页面

    在使用虚拟页式存储管理时需要在页表中增加以下表项:

    • 页号—页面的编号。
    • 有效位—又称驻留位、存在位或中断位,表示该页是在内存还是在外存。如果为1,表示在内存中,页表项有效,可以访问,如果式,表示在外存,就需要产生缺页来将外存的数据替换到内存中
    • 页框号—页面在内存中时所对应的内存块号。
    • 访问位—又称引用位或参考位,表示该页在内存期间是否被访问过,页面置换算法时候会用到。
    • 修改位—表示该页在内存中是否被修改过。回收时候,需要用此位来判断,是否要将内存的数据写回到外存
    • 保护位—表示该页的访问方式,是否能读写执行。
    • 禁止缓存位—采用内存映射I/O的机器中需要的位。

    其基本的表示如下图

    在这里插入图片描述

    其转换关系如下图:

    在这里插入图片描述

    对于转换关系,与页式存储管理的转换关系基本类似,只是加了一个步骤,通过页表完成逻辑页号到物理帧号的转换后,需要通过有效位来检测,该访问数据是否是有效的,如果该位有效,说明数据在内存中,直接访问就可以了;如果有效位为0,说明该数据在外存中,就会产生一个缺页异常。

    4.3 缺页异常处理流程

    对于缺页异常的处理流程,还是结合上一章的例子来梳理下整个缺页异常的过程,当我们访问一个地址的时候,首先通过逻辑地址在页表中找,如果找不到或者找到了,但是其有效位是0,那么就会产生一个缺页异常,其处理框图如下,我们来梳理下缺页异常需要做那些操作

    在这里插入图片描述

    当产生缺页异常后,硬件就会通过MMU的机制在外存中寻找对应的页面,那么就会存在两种情况,一种是页面中存在空闲页,一种情况是不存在空间页

    • 存在空闲页:在内存中有空闲物理页面时,分配一物理页帧f,将需要访问的页p装入到物理页面f,修改p的页表项驻留位为1,物理页帧号为f
    • 不存在空闲页:依据页面置换算法选择将被替换的物理页帧f,对应逻辑页q,如q被修改过,则把它写回外存,将需要访问的页p装入到物理页面f,修改p的页表项驻留位为1,物理页帧号为f

    其处理流程如下图
    在这里插入图片描述

    • 只有’写指令’才需要修改“修改位”,并且,一般来说只需要修改快表中的数据,只有将快表项删除时,才需要写回内存中,这样可以减小访问存储的次数
    • 和普通的中断处理一样,缺页中断依然需要保留CPU现场
    • 需要用某种置换算法来决定一个换出页面
    • 换入/换出页面都需要启动慢速的I/O操作,可见,如果换入换出太频繁,会由很大的开销
    • 页面调入内存后,需要块表项

    5. 总结

    对于虚拟存储技术,实现进程在内存与外存之间的交换,从而获得更多的空闲内存空间,虚拟存储空间就包括了物理的内存和硬盘。在虚拟存储中,页面在内存和外存之间频繁的调度以至于系统中页面所需的时间比进程实际运行的时间还多,在这种情况下,系统效率急剧下降,甚至可能出现全面崩溃。但是通过程序的局部性,虚拟存储技术是能够实现的,而且可取得满意的效果。

    6. 参考资料

    https://zhuanlan.zhihu.com/p/53004596

    操作系统–清华大学

    展开全文
  • 概述:在内存不够的情况下,可以采用覆盖技术和交换技术,但是这两种方法都存在一定的不足: 覆盖技术:需要程序员自己把整个程序划分为若干个小的功能模块,并确定各个模块之间的覆盖关系,增加了程序员的负担; ...
  • 虚拟内存管理

    2019-07-08 23:01:09
    虚拟内存管理这是一种利用虚拟存储器来逻辑扩充物理内存的管理方式。其基本思想是用软硬件技术把内存与外存这两级存储器当成一级存储器来用,从而给用户提供了一个比内存也比任何应用程序大得多的虚拟存储器,使得...
  • 3.2虚拟内存管理

    2020-12-27 09:41:32
    1.虚拟内存的基本概念 1.1传统存储管理方式的特征、缺点 1.2虚拟内存的定义和特征 1.3如何实现虚拟内存技术
  • 虚拟内存

    2020-08-30 01:49:43
    采用虚拟内存管理技术的目的是什么? 更加高效地利用cpu和RAM资源; 虚拟内存管理技术的实现利用了大多数程序的两种类型的局部性: 空间局部性(Spatial locality): 是指程序倾向于访问在最近访问过的内存地址...
  • 在之前学到过进程的内存布局中忽略了一个事实:... Linux像大多数现代内核一样,采用了虚拟内存管理技术。 该技术利用了大多数程序的一个典型特征,即访问局部性(locality of reference),以求高效使用CPU和RAM资...
  • 虚拟内存的背景 ...于是就有了虚拟内存技术。 而虚拟内存将用户逻辑内存和物理内存分开,使得编程人员不在担心有限的物理内存空间。 除此之外,虚拟内存允许文件和内存通过共享页而为多个进程共享,这将...
  • 利用虚拟内存技术,索引技术实现了对超长学生档案系统的管理
  • 内存管理虚拟内存

    2019-07-21 10:19:19
    前面我们提到了关于解决内存过载的两种解决方法中的交换技术,现在我们介绍另一种解决方法:虚拟内存(Virtual Memory)。虚拟内存的基本思想是:每个程序都拥有自己的地址空间,这个空间被分割成多个块,每个块被称为...
  • 虚拟内存内存管理的一种技术,它允许执行进程时不必完全载入内存,可以部分程序载入到内存 优点: 逻辑地址空间可大于物理地址空间 可以被多个进程共享地址空间 可以提供更有效的进程创建 虚拟内存将用户逻辑...
  • 面试被问到虚拟内存,回答的感觉不够。于是重新总结一下。程序猿对内存的要求都是:私有的、速度快、容量无限大。对应现在的现况:使用一块物理内存、容量有限、并且速度有限,需要cpu多级缓存。物理内存暴露给进程...
  • 007-Linux虚拟内存管理

    2021-04-19 16:38:09
    虚拟内存是一种应对操作系统物理内存不够用的情形所产生的一种技术,它可以在物理内存上申请一块空间,作为一段内存区域进行使用。比如,物理内存仅剩余128M,但是我们还要运行一个程序要消耗156M的内存,物理内存...
  • Linux系统采用了虚拟内存管理机制,就是交换和请求分页存储管理技术。这样,当进程运行时,不必把整个进程的映像都放在内存中,只需在内存保留当前用到的那一部分页面。当进程访问到某些尚未在内存的页面时,就由...
  • 虚拟内存技术

    2014-02-28 16:23:53
    虚拟内存是Windows 为作为内存使用的一部分硬盘空间。即便物理内存很大,虚拟内存也是必不可少的。虚拟内存在硬盘上其实就是为一个硕大无比的文件,文件名是PageFile.Sys,通常状态下是看不到的。必须关闭资源管理器...
  • 本文介绍操作系统里的虚拟内存技术,它是目前最常用的内存扩充技术虚拟内存技术 虚拟内存的概念 请求分页管理方式 页面置换算法 页面分配策略 虚拟内存技术的概念 传统存储管理方式的特征、缺点 特征1,...
  • 虚拟内存管理的目标 虚拟内存管理的实现思路 原理 典型虚拟内存管理方式 ①页式虚拟存储方式 1 概念:把进程空间(虚拟)和内存空间划分等大小的小片。 小片典型大小:1K、2K或4K… 进程的小片——页(虚拟...
  • ①、交换技术与覆盖技术是在多道环境下扩充内存的方法,用以解决在较小的存储空间中运行较大程序时遇到的矛盾 ②、覆盖技术主要用在早期的操作系统中 ③、交换技术被广泛用于小型分时系统中,交换技术的发展导致了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,550
精华内容 1,020
关键字:

虚拟内存管理技术