精华内容
下载资源
问答
  • 操作系统面试虚拟内存

    千次阅读 2016-06-24 18:12:22
    本文是对操作系统概念(第七版)——虚拟内存的学习总结,不足之处,欢迎批评指正。 1、虚拟内存的理解: 先将部分程序导入内存,执行完成后导入下一部分程序,给我们的感觉是内存变大了,实际上物理内存的大小并...

    本文是对操作系统概念(第七版)——虚拟内存的学习总结,不足之处,欢迎批评指正。


    1、虚拟内存的理解:

    先将部分程序导入内存,执行完成后导入下一部分程序,给我们的感觉是内存变大了,实际上物理内存的大小并未发生变化。

    虚拟内存的优点:

    (1)将逻辑内存和物理内存分开。

    (2)虚拟内存允许文件和内存通过共享页而为两个或多个进程所共享。


    2、按需调页

    按需调页:顾名思义,在需要时才调入相应的页。

    支持按需调页的硬件:

    (1)页表:该表能够通过有效-无效为或保护位的特定值,将条目设为无效。

    (2)次级存储器(交换空间,通常为快速磁盘)


    3、写时复制

    这种技术允许父进程与子进程开始时共享共享同一个页面,这些页面被标记为为写时复制页,即如果任何一个进程需要对页进行写操作,那么就创建一个共享页的副本。


    4、页面置换(重要)

    页置换采用如下方法:如果没有空闲帧,那么就查找当前没有使用的帧,将其释放。

    (1)查找所需页在磁盘上的位置

    (2)查找一个空闲帧

    a,如果有空闲帧,那么就使用它,

    b,如果没有,使用页置换算法选择一个牺牲帧

    c,将牺牲帧的内容写到磁盘上,改变页表和帧表

    (3)将所需页读入空闲帧,改变页表和帧表

    (4)重新启动程序。

    常见的页置换算法

    (I)FIFO页置换

    最先进入的页被置换。

    需要注意的是FIFO页置换会有一种特殊现象——Belady异常:对有的页置换算法,页错误率可能随着所分配的帧数的增加而增加。FIFO可能就出现这种现象。

    (II)最优页置换opt

    置换最长时间不会使用的页,即能预知将来的情况。但是将来的情况我们无法预知,因此这种算法难以实现。

    (III)LRU页置换(最近最少使用算法least-recently-used algorithm)

    FIFO使用的是页调入内存的时间,OPT使用的是将来的时间。

    LRU置换为每个页关联上上一次使用的时间,当必须置换一页时,LRU选择最长时间没有使用的页。

    最优置换和LRU置换都没有Belady算法(证明略)

    (IIII)近似LRU页置换

    页表中的每一项都关联一个引用位,每当引用一个页时,相应的位就被置位。因此我们虽然不知道引用顺序,但是我们知道哪些页被引用,哪些未被引用。近似LRU算法又有一下三种方法:

    (a)附加引用位算法

    通过在规定时间间隔里记录引用位。

    0000000,11111111,上述两个字节分别表示在8个周期内从未被引用和一直被引用的情况。因此值最小,就是应该置换的页。

    (b)二次机会算法

    这种算法只有引用位本身,没有历史位,因此只有一位。当要选择一个页时,检查引用位,如为0,直接置换,如为1,则给该页二次机会,同时清0,寻找下一个0位置,所以而二次机会算法的基本算法是FIFO算法。

    (c)增强型二次机会算法

    通过将引用为和修改位作为一对有序位来考虑。

    (0,0)——最近未使用且未修改过

    (0,1)——最近未使用但修改过

    (1,0)——最近使用但为修改过

    (1,1)——使用且修改过

    (IIIII)基于计数器的页置换

    为每一个页保留一个用于记录其引用次数的计数器,因而可以形成以下两种方案:

    最不经常使用页置换算法(LFU)——置换出引用次数最小的页

    最常使用页置换算法(MFU)——认为最小次数的页可能刚刚调入,且还没有使用。

    (IIIIII)页缓冲算法

    系统保留一个空闲帧缓冲池,当出现页错误时,会选择牺牲帧,但是牺牲帧写出之前,所需要的页就从缓冲池中读到空闲内存。这样加速了重启。


    5、帧分配

    研究问题:如何在各个进程之间分配一定的空闲内存?

    由于性能原因,必须有足够的帧来容纳所有单个指令所引用的页,因此有一个帧的最小数量的限制。帧的最小数量是有计算机体系结构决定的,而最大数量是由物理内存决定的。

    (1)分配算法

    平均分配,比例分配(比例可以根据进程大小或者优先级等来计算)

    (2)全局分配和局部分配

    全局分配:允许一个进程从所有帧集合中选择一个置换帧

    局部分配:每个进程只能从自己的分配帧中选择置换。


    6、系统颠簸

    频繁的页调度操作

    原因:当多道程序的程度增加到一定时,会引起颠簸


    7.内核内存的分配

    内核内存分配的特殊性:

    (1)内核需要为不同大小的数据结构分配内存,因此必须谨慎分配内存。

    (2)有的硬件需要直接和物理内存打交道,因此需要内存常驻在连续的物理页中。

    以上两个特殊性是的内核内存的分配通常是从空闲池中获取,,而不是从内存链表中获取。

    常见的内核内存分配有两种方法:

    (i)Buddy系统分配

    内存按2的幂的大小进行分配,如果请求大小大于当前2的幂内存,那么调整到下一个2的幂。

    (II)slab分配

    slab是由一个或多个物理上连续的页组成。高速缓冲cache含有一个或者多个slab,每个内核数据结构都含有一个cache,每个cache含有内核数据结构的对象实例。

    优点:

    (1)没有因碎片引起的内存浪费。因为每个数据结构都有一个cache,每个cache都有若干个slab组成,而每个slab又分为若干个和对象大小相同的部分。

    (2)内存请求可以快速满足。




    展开全文
  • 虚拟内存和物理内存的联系和区别 对于32位的机器,每个进程都认为自己有4G的内存空间,但是实际上虚拟内存对于的物理内存可能只有一点。 进程得到的4G的虚拟内存是连续的地址空间,但是实际上,它是被分割成多个物理...

    虚拟内存和物理内存的联系和区别

    对于32位的机器,每个进程都认为自己有4G的内存空间,但是实际上虚拟内存对于的物理内存可能只有一点。

    进程得到的4G的虚拟内存是连续的地址空间,但是实际上,它是被分割成多个物理内存碎片,还有一些部分存储在外部磁盘存储器中,需要的时候进行数据交换。

    进程访问一个地址可能会经历的过程:

    1. 每次访问一个地址,首先要把地址翻译成实际的物理内存地址
    2. 所有的进程共享一块物理内存,每个进程只把目前需要的虚拟内存映射到物理内存上。
    3. 进程需要知道哪些地址空间的数据在物理内存上,哪些在磁盘上。通过页表来记录。
    4. 页表每个表项分为两个部分,第一部分记录是否在物理内存上,第二部分记录在物理内存的的地址。
    5. 当进程访问某个地址的时候,先会去看页表,如果数据不在物理内存上,就会发生缺页异常。
    6. 缺页异常的处理过程是,操作系统阻塞该进程,从硬盘中换入对应的也到内存里,然后该进程就绪,如果内存满了,就找一个页覆盖。怎么覆盖就需要看操作系统的页面置换算法。

    在这里插入图片描述

    总结

    当每个进程创建的时候都分配的4G的虚拟内存,当进程还没有开始运行的时候,程序的代码段和数据段实际上都放在磁盘中,此时是虚拟内存和磁盘文件之间的映射关系叫做存储器映射。
    当进程开始运行的时候,进程去寻找页表,页表中的地址不在物理内存上,因此就会发生缺页异常,就会从磁盘拷贝数据按照页面置换算法,拷贝数据同时置换对应的页面。

    在malloc中我们知道操作系统只是分配的虚拟内存给进程。

    优点

    1. 既然每个进程的内存空间都是一致而且固定的(32位平台下都是4G),所以链接器在链接可执行文件时,可以设定内存地址,而不用去管这些数据最终实际内存地址,这交给内核来完成映射关系
    2. 不同进程使用同一段代码的时候,比如库文件代码,就可以在屋里内存中只存储一份这样的代码,只要设置映射关系即可。
    3. 程序分配连续空间的时候,只要在虚拟空间中分配连续的内存,物理空间上可以用碎片化的内存来进行分配。这样可以有效的利用物理内存空间,减小内存碎片的产生。
    展开全文
  • 这是一个面试中经常被提到的问题,大多数人可能只记住了内存地址映射和缺页置换,但你真的搞懂了为什么会有虚拟内存了吗,它存在的作用是什么呢? 要想搞懂虚拟内存,我们先从头来回顾一下虚拟地址分段分页的知识吧...

    公众号【codeoffer】精选后端面试知识,欢迎关注

    目录

    一、 虚拟地址空间

    二、分段与分页

    三、页表

    四、总结


    虚拟内存是什么?

     

    这是一个面试中经常被提到的问题,大多数人可能只记住了内存地址映射和缺页置换,但你真的搞懂了为什么会有虚拟内存了吗,它存在的作用是什么呢?

    要想搞懂虚拟内存,我们先从头来回顾一下虚拟地址和分段分页的知识吧。

     

    一、 虚拟地址空间

    在早期的计算机中,程序是直接运行在物理内存上的,那个时候的计算机和程序内存都很小。程序运行时会把其全部加载到内存,只要程序所需的内存不超过计算机剩余内存就不会出现问题。

     

    但由于程序是可以直接访问物理内存的,这也带来了内存数据的不安全性,轻则程序挂掉,重则操作系统崩溃。

     

    所以,我们希望程序间的内存数据是安全的互不影响的。同时计算机程序直接运行在物理内存上也导致了内存使用率较低,程序运行内存地址不确定,不同的运行顺序甚至会出错。此时在程序的执行过程中,已经存在着大量在物理内存和硬盘之间的数据交换过程。

     

    基于以上问题,那我们可以是不是考虑在物理内存之上增加一个中间层,让程序通过虚拟地址去间接的访问物理内存呢。通过虚拟内存,每个进程好像都可以独占内存一样,每个进程看到的内存都是一致的,这称为虚拟地址空间。

    (这种思想在现在也用的很广泛,例如很多优秀的中间层:Nginx、Redis等等)

     

    这样只要系统处理好虚拟地址到物理地址的映射关系,就可以保证不同的程序访问不同的内存区域,就可以达到物理内存地址隔离的效果,进而保证数据的安全性。

     

    二、分段与分页

    进程是操作系统资源分配的最小单元。操作系统分配给进程的内存空间中包含五种段:数据段、代码段、BSS、堆、栈。

     

    • 数据段:存放程序中的静态变量和已初始化且不为零的全局变量。

    • 代码段:存放可执行文件的操作指令,代码段是只读的,不可进行写操作。这部分的区域在运行前已知其大小。

    • BSS段( Block Started By Symbol):存放未初始化的全局变量,在变量使用前由运行时初始化为零。

    • 堆:存放进程运行中被动态分配的内存,其大小不固定。

    • 栈:存放程序中的临时的局部变量和函数的参数值。

     

    640?wx_fmt=png

    那么分段的技术可以解决什么问题呢?

     

    假设程序A的虚拟地址空间是0x00000000~0x00000099,映射到的物理地址空间是0x00000600~0x00000699,程序B的虚拟地址空间是0x00000100~0x00000199,映射到的物理地址空间是0x00000300~0x00000399。

    假设你手残,在程序A中操作了地址0x00000150,但是此时的地址0x00000150是虚拟的,而虚拟化的操作是在操作系统的掌控中的,所以,操作系统有能力判断,这个虚拟地址0x00000150是有问题的,然后阻止后续的操作。所以,这里体现出了隔离性。(另一种体现隔离性的方式就是,操作同一个虚拟地址,实际上可能操作的是不同的物理地址)

     

    所以通过分段机制,我们可以更好的控制不同段的属性,这有利于内存的组织安排,可以对不同的属性代码、数据进行更方便的管理。如果是打乱的放在内存中,那么读写属性就很难控制。

     

    程序运行地址和物理地址的隔离保证了程序内存数据的安全性,也解决了同一个程序运行地址不确定的问题,但是物理内存使用效率低下的问题依然没有得到解决,因为分段机制映射的是一片连续的物理内存。

     

    于是大佬们又提出了分页的办法。分页其实就是把段空间更细分了一下,粒度更小。此时物理内存被划分为一小块一小块,每块被称为帧(Frame)。分配内存时,帧是分配时的最小单位。

     

    在分段方法中,每次程序的运行都会被全部加载到虚拟内存中;而分页方法则不同,单位不是整个程序,而是某个“页”,一段虚拟地址空间组成的某一页映射到一段物理地址空间组成的某一页。它将少部分要运行的代码加载到虚拟内存中,通过映射在物理内存中运行,从而提高了物理内存的使用率。
     

     

    640?wx_fmt=jpeg

     

     

    为了方便CPU高效执行管理物理内存,每一次都需要从虚拟内存中拿一个页的代码放到物理内存。虚拟内存页有三种状态,分别是未分配、已缓存和未缓存状态。

     

    未分配:指的是未被操作系统分配或者创建的,未分配的虚拟页不存在任何数据和代码与它们关联,因此不占用磁盘资源;

    已缓存:表示的是物理内存中已经为该部分分配的,存在虚拟内存和物理内存映射关系的;

    未缓存:指的是已经加载到虚拟内存中的,但是未在物理内存中建立映射关系的。

     

    三、页表

     

    虚拟内存中的一些虚拟页是要缓存在物理内存中才能被执行的,因此操作系统存在一种机制用来判断某个虚拟页是否被缓存在物理内存中,还需要知道这个虚拟页存放在磁盘上的哪个位置,从而在物理内存中选择空闲页或者更新缓存页,并将需要的虚拟页从磁盘复制到物理内存中。这些功能是由软硬件结合完成的,其存放在物理内存中一个叫页表的数据结构中。

     

    虚拟内存和物理内存的映射通过页表(page table)来实现。每个页表实际上是一个数组,数组中的每个元素称为页表项(PTE, page table entry),每个页表项负责把虚拟页映射到物理页上。在 物理内存中,每个进程都有自己的页表。

     

     

     

    因为有一个表可以查询,就会遇到两种情况,一种是命中(Page Hit),另一种则是未命中(Page Fault)。

    命中的时候,即访问到页表中蓝色条目的地址时,因为在 DRAM 中有对应的数据,可以直接访问。

    不命中的时候,即访问到 page table 中灰色条目的时候,因为在 DRAM 中并没有对应的数据,所以需要执行缺页置换。

     

    在上图中,四个虚拟页VP1 , VP2, VP4 , VP7 是被缓存在物理内存中。两个虚拟页VP0, VP5还未被分配。但是剩下的虚拟页VP3 ,VP6已经被分配了,但是还没有缓存到物理内存中去执行。

     

    四、总结

    通过虚拟地址空间和页表的回顾,现在大家应该明白为什么要引入虚拟内存了吧。

    虚拟内存是计算机系统内存管理的一种技术,虚拟地址空间构成虚拟内存。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片。还有部分暂时存储在外部磁盘存储器上(Swap),在需要时进行数据交换。

    虚拟内存不只是用磁盘空间来扩展物理内存 的意思——这只是扩充内存级别以使其包含硬盘驱动器而已。把内存扩展到磁盘只是使用虚拟内存技术的一个结果。除了扩展内存空间,虚拟内存技术还有隔离运行内存和确定运行地址的作用。

    使用虚拟内存主要是基于以下三个方面考虑,也就是说虚拟内存主要有三个作用:

     

    1. 作为缓存工具,提高内存利用率:使用 DRAM 当做部分的虚拟地址空间的缓存(虚拟内存就是存储在磁盘上的 N 个连续字节的数组,数组的部分内容会缓存在 DRAM 中)。扩大了内存空间,当发生缺页异常时,将会把内存和磁盘中的数据进行置换。

       

    2. 作为内存管理工具,简化内存管理:每个进程都有统一的线性地址空间(但实际上在物理内存中可能是间隔、支离破碎的),在内存分配中没有太多限制,每个虚拟页都可以被映射到任何的物理页上。这样也带来一个好处,如果两个进程间有共享的数据,那么直接指向同一个物理页即可。

       

    3. 作为内存保护工具,隔离地址空间:进程之间不会相互影响;用户程序不能访问内核信息和代码。页表中的每个条目的高位部分是表示权限的位,MMU 可以通过检查这些位来进行权限控制(读、写、执行)。

     

    所以,现在你应该搞懂虚拟内存是什么了吧!

     

     

     

     

    展开全文
  • 一、虚拟内存术语  虚拟内存   在存储分配机制中,尽管备用地址是主内存的一部分,它也可以被寻址。程序引用内存使用的地址与内存系统用于识别的物理地址是不同的,程序生成的地址会自动转化为...

    一、虚拟内存术语

         虚拟内存                                          

           在存储分配机制中,尽管备用地址是主内存的一部分,它也可以被寻址。程序引用内存使用的地址与内存系统用于识别的物理地址是不同的,程序生成的地址会自动转化为机器地址。虚拟存储的大小受计算机系统寻址机制和可用的备用内存量的限制,而不受内存储位置实际数量的限制

    虚拟地址

    在虚拟内存中分配给某一位置的地址使该位置可以被访问,仿佛是主存的一部分

    虚拟地址空间

    分配给进程的虚拟存储

    地址空间

    可用于某进程的内存地址范围

    实地址

    内存中存储位置的地址

    二、分段和分页的特点(虚拟与非虚拟)

    简单分页

    虚拟分页

    简单分段

    虚拟分段

    内存被划分为固定大小的小块,成为页框

    内存被划分为固定大小的小块,成为页框

    内存未被划分

    内存未被划分

    程序被划分为页

    程序被划分为页

    由程序员给编译器指定程序段

    由程序员给编译器指定程序段

    页框内有内部碎片

    页框内有内部碎片

    没有内部碎片

    没有内部碎片

    没有外部碎片

    没有外部碎片

    有外部碎片

    有外部碎片

    操作系统必须为每个进程维护一个页表,以说明每页对应的页框

    操作系统必须为每个进程维护一个页表,以说明每页对应的页框

    操作系统必须为每个进程维护一个段表,以说明每一段的加载地址和长度

    操作系统必须为每个进程维护一个段表,以说明每一段的加载地址和长度

    操作系统必须维护一个空闲页框页表

    操作系统必须维护一个空闲页框页表

    操作系统必须维护一个内存中空闲的空洞列表

    操作系统必须维护一个内存中空闲的空洞列表

    处理器使用页号和偏移地址来计算绝对地址

    处理器使用页号和偏移地址来计算绝对地址

    处理器使用段号和偏移量计算绝对地址

    处理器使用段号和偏移量计算绝对地址

    当进程运行时所有页必须在内存中,除非使用了覆盖技术

    当进程在运行时,并不是所有页都必须在内存页框内,只是在需要时才读入页

    当进程运行时所有段必须在内存中,除非使用了覆盖技术

    当进程在运行时,并不是所有段都必须在内存,只是在需要时才读入段

    把一页读入内存可能需要把另外一页写到磁盘

    把一段读入内存可能需要把另外一段或几个段写到磁盘

    三、系统抖动

    当使用虚拟内存时,并不是把全部的进程页全部调用内存,只需要在内存中调用够用的页就可以了,当需要访问外存中的程序页时,再调用即可。这样减少了一个进程在内存中的空间,可以在主存里装入更多的进程,提高对计算机系统其他设备的利用率。但是,当页交换算法不合理时,如果一个页刚被调出内存,下面又要访问它,这样如果频繁地发生这种情况,那么处理器大部分时间都消耗在内存与外存之间的页交换上了,而不是执行指令。这种情况叫做“系统抖动”。

    四、地址转换

    1,分页系统中的地址转换

    1.jpg

    2013-5-25 13:05:40 上传
    下载附件 (57.59 KB)

    分页存储管理的基本原理是:将主存空间和辅存空间分别等分为大小相等的若干页,页的大小为个字节,如(1KB),(2KB),(4KB)等,并且为每个页按顺序指定一个页号,即0页、1页、2页、…。为了叙述方便,把主存的页(物理页或绝对页)称为页面。例如,若主存空间为8KB,辅存空间为16KB,页的大小为1KB,则主存空间可分为8个页面,其页面号为0~7;辅存空间可分为16个页,其页号为0~15。当程序运行时,以“页”为单位进行地址映射,即操作系统以页为单位把逻辑页从辅存调入主存,存放在物理页面上,供CPU执行。在分页存储管理机制中,把逻辑页对应的逻辑地址称为线性地址。

     在分页存储管理中,需要解决的关键问题是:选择哪一个物理页存放调入的逻辑页?如何将线性地址转换为物理地址?为了解决这些问题,系统为每一个页建立一个页表,保存在主存中,存放页的若干信息,如页号、容量、是否装入主存、存放在主存的哪一个页面上等。
      CPU访问某页时,首先要查找页表,判断要访问的页是否在主存,若在主存为命中,否则为未命中。然后将未命中的页按照某种调度算法由辅存调入主存,并根据逻辑页号和存放的物理页面号的对应关系,将线性地址转换为物理地址。
      页表在存储器中的位置由页表地址寄存器定位。页表中记录的状态信息为:第1项页号指示逻辑页;第2项特征位记录该逻辑页是否装入主存,“0”表示未装入,“1”表示已装入;第3项记录该逻辑页装入主存所存放的物理页的页面号,即1号逻辑页从辅存调入主存后,存放在第7号物理页面上。
      存储单元的物理地址由页面号和页内地址两部分组成。 8KB主存的页内地址由地址线A9~A0提供,可寻址1KB的页内存储空间,地址范围为0~1 023;页面号由高3位地址线A12~A10提供,8个页面的页面号为0~7。由此可以看出,页面存储单元的物理地址为
      物理地址=页的大小×页面号+页内地址
      线性地址的确定方法与物理地址的确定方法完全相同,也是由页号和页内地址两部分组成,如图5.37(b)所示。16KB辅存空间可分为16页,页内地址由地址线A9~A0提供,其页号0~15由高4位地址线A13~A10提供。

    2.jpg

    2013-5-25 13:15:59 上传
    下载附件 (28.63 KB)

      在进行地址转换时,由于逻辑页和物理页的大小相等,它们的页内地址是相同的,所不同的是页号,只要将线性地址的页号转换为物理地址的页面号即可。在图5.36中,给出1号逻辑页中某条指令访问数据的逻辑地址为1024×1+452=1 476,它存入主存7页面上所对应的物理地址为1 024×7+452=7 620。

    2,分段系统中的地址转换

    3.jpg

    2013-5-25 13:16:19 上传
    下载附件 (44.17 KB)

    分段存储管理的基本原理是:按程序的逻辑结构,以段为单位划分,各个段的长度因程序而异。为了说明逻辑段的各种属性,系统为每一个段建立一个段表(驻留在内存),记录段的若干信息,如段号、段起点、段长度和段装入情况等。CPU通过访问段表,判断该段是否已调入主存,并完成逻辑地址与物理地址之间的转换。

      逻辑地址由段号S和段内地址W组成,段号S相当于逻辑段的段名,它表示该逻辑段的起始地址。在进行地址转换时,操作系统用S检索段表,段表中记录的信息1表明该段已调入主存,b是S段装入主存的起始地址,因此该逻辑地址对应的物理地址为b+W。
      在分段存储管理方式中,由于段的分界与程序的自然分界相对应,所以具有逻辑独立性,易于程序的编译、管理、修改和保护,也便于多道程序共享。但是,因为段的长度参差不齐,起点和终点不定,给主存空间分配带来了麻烦,容易在段间留下不能利用的“零头”,造成浪费

    3、段页式系统中的地址转换

    4.jpg

    2013-5-25 13:16:37 上传
    下载附件 (46.13 KB)

    分页存储管理的主要特点是主存利用率高且对辅存管理容易,但模块化性能差;分段存储管理的主要特点是模块化性能好,但主存利用率不高且对辅存的管理比较困难。

    段页存储管理是将分段存储管理和分页存储管理结合起来的一种折中方案。它首先将程序按其逻辑结构划分为若干个大小不等的逻辑段,然后再将每个逻辑段划分为若干个大小相等的逻辑页。主存空间也划分为若干个同样大小的物理页。辅存和主存之间的信息调度以页为基本传送单位,每个程序段对应一个段表,每页对应一个页表。CPU访问时,段表指示每段对应的页表地址,每一段的页表确定页所在的主存空间的位置,最后与页表内地址拼接,确定CPU要访问单元的物理地址

    段页存储管理方式综合了段式管理和页式管理的优点,但需要经过两级查表才能完成地址转换,消耗时间多。

    五、置换策略

    置换算法有:最佳置换算法OPT、FIFO置换算法、最少使用页面置换算法、最近未使用页面置换算法、时钟页面置换算法等

    OPT算法是理论算法,它将不再使用的页面换出,而实际中不能预知哪个页面不再使用,但是这个算法是最优算法,可以作为评测其他算法的性能。

    FIFO算法:按照页面装进内存的时间进行置换,越老的页面最先被换出,不管该页面是否经常使用,这样就有可能导致缺页率增加,导致页面置换次数增加。

    最少使用页面置换算法:按照上次使用时间进行排序,将离上次使用时间最长的页面换出,可以采用栈的数据结构,每次页面被访问将该页面号放在栈顶。

    最近未使用页面置换算法:设置引用位R,每次调用将R=1,系统每个一段时间将R=0,当进行置换式检查哪个页面为零说明近期不会再使用,可以将其换出。

    时钟页面置换算法:采用应用为R,当R=1说明被引用过,这种方法是FIFO的改进,根据装入内存时间和是否被引用过作为标准,首先从时间最长项检查,若R=0则置换出,若为1则检查下一项并将R=0。若全部R=1,则按照FIFO方法进行置换。

    选择好置换的页面后,如何进行置换呢?

    首先判断被置换的页面是否被修改过,若没有则可以直接擦出该页框,如修改过则必须首先保存到外存中,然后再读入新页面。

    页面缓冲技术:不必先保存,因为每次都保存一个页面增加了IO操作,消耗过大。缓冲技术可以将被修改过和未修改过的页面存在缓冲区,然后对被修改过的页面进行批量保存,减少了IO操作。未修改的页面进行缓冲是为了防止在近期内被调用,不必再从外存调入内存,若在一段时间内不被调用则批量消除。


    (感谢来源:http://blog.csdn.net/xue815020462/article/details/8960770

    展开全文
  • 虚拟内存(virtual Memory) 日常生活中,当我们使用电脑的时候,尤其是windows电脑,经常会打开许多软件,这些软件占用的内存已经远远大于计算机的物理内存。之所以会这样,就是因为虚拟内存的存在 虚拟内存可以让...
  • 虚拟内存技术 虚拟内存技术的实现是建立在离散分配的内存管理的基础上的 目前最常用的三种实现虚拟内存技术的方法: 请求分页存储管理 请求分段存储管理 请求段页式存储管理 以上三种方式,无论哪种,都需要以下三...
  • 内存对于用户来说就是一个字节数组,我们可以根据地址来访问到某个字节或者某些字节:很久之前的内存很久很久之前,一台机器上只放置一个程序,操作系统仅仅作为一个函数库存在。对于...
  • 今天继续来学习Linux内存管理,什么?你更想学时间管理,我不配,抱个西瓜去微博学吧。 言归正传,上一篇文章 别再说你不懂Linux内存管理了,10张图给你安排的明明白白! 分析了 Linux 内存管理机制,如果已经忘了...
  • 虚拟内存是虚拟的,是操作系统为了合理使用内存而提出的一种到物理内存的动态映射,系统访问一个内存的时候,首先根据虚拟内存地址,通过映射表转换去找到对应的真正的物理内存上的存储位置,然后读取数据,合理利用...
  • Linux 虚拟内存机制

    万次阅读 2016-08-09 21:31:01
    华为面试官问了我一个问题就是关于Linux虚拟内存机制,虽然我多少是回答上来,感觉好久没看操作系统的我是时候将其拿起来重温一遍 。 每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构。 ...
  • 面试内存管理

    2019-05-20 18:35:46
    引入虚拟内存技术,现在的内存管理不是对物理地址的管理,而是对虚拟地址的管理; (2).如何管理虚拟内存空间:通过MMU(内存管理单元)的地址转换机制,完成虚拟空间带地址空间的映射; (3).虚拟...
  • 正是由于局部性原理的存在,才可以实现只装入部分程序到内存就开始运行 局部性原理的表现: 时间局部性:如果程序中的某条指令一旦执行,不久之后该指令可能再次被执行。如果某数据彼访问过,不久之后该数据可能被...
  • 操作系统(10)-虚拟内存

    千次阅读 2019-10-27 13:39:19
    为了解决这个问题,WINDOWS运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,这部分空间即称为虚拟内存,虚拟内存在硬盘上的存在形式就是 PAGEFILE.SYS这个页面文件。 【百度百科】虚拟内存是计算机系统...
  • 虚拟内存 虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。 为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每...
  • 最近在看linux内核,内核主要负责四种功能: 系统内存管理;软件程序管理;硬件设备管理;...前一段时间在面试总监的时候,总监问了我这样的一个问题:你个我说说物理内存和虚拟内存到底是怎么一回事?
  • 对于这个问题,面试官可能拿出一张白纸,让你尝试画出linux下进程的虚拟内存空间布局,然后=再让你简述下每个分区的作用,可能会挑几个重点分区,例如堆区、栈区来进行深入展开,考察你对堆栈的理解等等。...
  • 操作系统面试内存管理

    千次阅读 2016-06-24 16:55:18
    本文是对操作系统概念(第七版)——内存管理的学习总结,不足之处欢迎批评...运行是从虚拟地址到物理地址的映射是由内存管理单元(MMU)的硬件设备来完成的。 现在有两个不同的地址,逻辑地址0~max,物理地址R~R+ma
  • 前一段时间在面试总监的时候,总监问了我这样的一个问题:你个我说说物理内存和虚拟内存到底是怎么一回事?其实之前我看过这个问题,据我理解的,当时是这么回答的“进程在运行的时候,操作系统都为其分配一个4GB的...
  • linux面试内存管理

    千次阅读 2016-03-03 12:11:25
    二、简单的内存管理器示例 三、GNU malloc算法 四、Kernel Buddy伙伴系统算法 五、Kernel Slab/Slub高速缓存算法   一、前言 这次课程最初的题目叫《linux内存管理》, 可是写着写着就感觉这个题目起的太...
  • HCIE华为云计算面试-虚拟

    千次阅读 多人点赞 2020-08-19 22:35:45
    定义:将物理内存虚拟出更多的虚拟内存给虚拟机使用,提高主机的虚拟机密度。 实现方式: 1) 内存共享:虚拟机之间共享同一物理内存空间,此时虚拟机对内存做只读操作,要是虚拟机对内存做写操作时,需开辟另一内存...
  • 虚拟内存的定义 虚拟内存的特征 虚拟内存的实现 请求分页存储管理 页表机制 缺页中断(内中断) 地址变换机构 请求分页中的地址变换过程 页面置换算法 1、最佳置换算法 OPT 2、先进先出置换算法 FIFO 3、最近最久未...
  • 内存管理-分页存储 一.基本分页和请求分页内存管理方式? 基本分页: 连续分配方式——会形成...虚拟内存技术 即拿出一部分硬盘空间来充当内存使用,当内存占用完时,电脑就会自动调用硬盘来充当内存,以缓解内存的
  • 操作系统面试内存管理

    千次阅读 2019-01-28 19:48:17
    1 内存的连续分配 1.1 单一连续分配方式 1.2 固定分区分配 1.3 动态分区分配 2 内存的非连续分配 2.1 页式存储 2.1.1 基本概念 2.1.2 地址变换 2.1.3 分页管理方式存在的问题 2.1.4 具有快表的地址变换机构...
  • 来源 |后端技术学堂责编 | Carol封图 | CSDN 付费下载于视觉中国我们都知道,程序可没这么好骗,任你内存管理把虚拟地址空间玩出花来,到最后还是要给程序实实在在的物理内存,不...
  • 操作系统——虚拟内存管理

    千次阅读 2016-07-28 17:57:03
    os中有物理地址和虚拟地址(逻辑地址)的区别 物理地址就是实际的物理内存的地址,逻辑地址是程序指令使用的地址。页表的作用就是实现逻辑地址到物理地址的映射。 x86的32位地址,前20位用于查找页表 1.地址的转换...
  • 1.内存引用  释放强引用  Object obj = new Object();  我们声明完,使用完就不管了,认为垃圾回收器会回收对象指向的内存空间 只要对象被引用,垃圾回收器就不会回收 object = null; 之后,垃圾回收器会在一定...
  • 基础面试题:java内存区域

    万次阅读 2020-04-11 21:41:10
    JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA 堆、方法区】、直接内存。 线程私有数据区域生命周期与线程相同, 依赖...13/04/2018 Page 22 of 283线程共享区域随虚拟...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,978
精华内容 20,391
关键字:

面试虚拟内存