精华内容
下载资源
问答
  • 什么是虚拟内存

    千次阅读 2019-05-01 10:04:13
    什么是虚拟内存
                   

    虚拟内存是计算机系统内存管理的一种技术。

    它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如RAM)的使用也更有效率。


    需要注意的是:虚拟内存不只是“用磁盘空间来扩展物理内存”的意思——这只是扩充内存级别以使其包含硬盘驱动器而已。把内存扩展到磁盘只是使用虚拟内存技术的一个结果,它的作用也可以通过覆盖或者把处于不活动状态的程序以及它们的数据全部交换到磁盘上等方式来实现。对虚拟内存的定义是基于对地址空间的重定义的,即把地址空间定义为“连续的虚拟内存地址”,以借此“欺骗”程序,使它们以为自己正在使用一大块的“连续”地址。


    一、局部性原理 

    要真正理解虚拟内存技术的思想,首先必须了解计算机中著名的局部性原理。著名的 Bill Joy (SUN公司CEO)说过:”在研究所的时候,我经常开玩笑地说高速缓存是计算机科学中唯一重要的思想。事实上,髙速缓存技术确实极大地影响了计算机系统的设计。“快表、 页高速缓存以及虚拟内存技术从广义上讲,都是属于高速缓存技术。这个技术所依赖的原理就是局部性原理。局部性原理既适用于程序结构,也适用于数据结构(更远地讲,Dijkstra 著名的关于“goto语句有害”的论文也是出于对程序局部性原理的深刻认识和理解)。

     

    局部性原理表现在以下两个方面: 

    1)时间局部性:如果程序中的某条指令一旦执行,不久以后该指令可能再次执行;如果某数据被访问过,不久以后该数据可能再次被访问。产生时间局部性的典型原因,是由于在程序中存在着大量的循环操作。 

    2)空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内,这是因为指令通常是顺序存放、顺序执行的,数据也一般是以向量、数组、表等形式簇聚存储的。 


    时间局部性是通过将近来使用的指令和数据保存到高速缓存存储器中,并使用高速缓存的层次结构实现。空间局部性通常是使用较大的高速缓存,并将预取机制集成到高速缓存控制逻辑中实现。虚拟内存技术实际上就是建立了 “内存一外存”的两级存储器的结构,利用局部性原理实现髙速缓存。 


    二、虚拟存储器的定义和特征 

    基于局部性原理,在程序装入时,可以将程序的一部分装入内存,而将其余部分留在外存,就可以启动程序执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。另一方面,操作系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要调入内存的信息。这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟存储器。 


    之所以将其称为虚拟存储器,是因为这种存储器实际上并不存在,只是由于系统提供了部分装入、请求调入和置换功能后(对用户完全透明),给用户的感觉是好像存在一个比实际物理内存大得多的存储器。虚拟存储器的大小由计算机的地址结构决定,并非是内存和外存的简单相加。虚拟存储器有以下三个主要特征: 

    1)多次性,是指无需在作业运行时一次性地全部装入内存,而是允许被分成多次调入内存运行。 

    2)对换性,是指无需在作业运行时一直常驻内存,而是允许在作业的运行过程中,进行换进和换出。 

    3)虚拟性,是指从逻辑上扩充内存的容量,使用户所看到的内存容量,远大于实际的内存容量。 


    三、虚拟内存技术的实现 

    虚拟内存中,允许将一个作业分多次调入内存。釆用连续分配方式时,会使相当一部分内存空间都处于暂时或“永久”的空闲状态,造成内存资源的严重浪费,而且也无法从逻辑上扩大内存容量。因此,虚拟内存的实需要建立在离散分配的内存管理方式的基础上。虚拟内存的实现有以下三种方式: 

    1)请求分页存储管理。 

    2)请求分段存储管理。 

    3)请求段页式存储管理。 


    不管哪种方式,都需要有一定的硬件支持。一般需要的支持有以下几个方面: 

    1)一定容量的内存和外存。 

    2)页表机制(或段表机制),作为主要的数据结构。 

    3)中断机构,当用户程序要访问的部分尚未调入内存,则产生中断。 

    4)地址变换机构,逻辑地址到物理地址的变换。


    参考资料:

    http://windows.microsoft.com/zh-cn/windows/what-is-virtual-memory#1TC=windows-7

    https://zh.wikipedia.org/wiki/%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98

    http://c.biancheng.net/cpp/html/2612.html

               
    展开全文
  • 物理内存是什么虚拟内存作用 什么是虚拟内存? (What is Virtual Memory?) Virtual Memory is a space where large programs can store themselves in form of pages while their execution and only the required ...

    物理内存是什么虚拟内存作用

    Virtual Memory is a space where large programs can store themselves in form of pages while their execution and only the required pages or portions of processes are loaded into the main memory. This technique is useful as large virtual memory is provided for user programs when a very small physical memory is there.

    虚拟内存是一个空间,大型程序可以在其中执行时以页面形式存储自身,并且仅将所需的页面或进程的一部分加载到主内存中。 当存在非常小的物理内存时,为用户程序提供了较大的虚拟内存,因此该技术很有用。

    In real scenarios, most processes never need all their pages at once, for following reasons :

    在实际情况下,由于以下原因,大多数进程永远不需要一次使用所有页面:

    • Error handling code is not needed unless that specific error occurs, some of which are quite rare.

      除非发生特定错误,否则不需要错误处理代码,其中某些错误很少发生。

    • Arrays are often over-sized for worst-case scenarios, and only a small fraction of the arrays are actually used in practice.

      在最坏的情况下,阵列通常尺寸过大,实际上只有一小部分阵列被实际使用。

    • Certain features of certain programs are rarely used.

      某些程序的某些功能很少使用。

    拥有虚拟内存的好处 (Benefits of having Virtual Memory)

    1. Large programs can be written, as virtual space available is huge compared to physical memory.

      可以编写大型程序,因为与物理内存相比,可用的虚拟空间巨大。

    2. Less I/O required, leads to faster and easy swapping of processes.

      所需的I / O更少,可更快,更轻松地交换进程。

    3. More physical memory available, as programs are stored on virtual memory, so they occupy very less space on actual physical memory.

      由于程序存储在虚拟内存中,因此有更多可用的物理内存,因此它们在实际物理内存上占用的空间非常少。

    什么是按需分页? (What is Demand Paging?)

    The basic idea behind demand paging is that when a process is swapped in, its pages are not swapped in all at once. Rather they are swapped in only when the process needs them(On demand). This is termed as lazy swapper, although a pager is a more accurate term.

    需求分页的基本思想是,当交换一个进程时,它的页面不会一次全部交换。 而是仅在流程需要它们时(按需)才将它们交换。 尽管寻呼机是一个更准确的术语,但它被称为惰性交换程序。

    Demand Paging

    Initially only those pages are loaded which will be required the process immediately.

    最初,只有那些页面被加载,将立即需要该过程。

    The pages that are not moved into the memory, are marked as invalid in the page table. For an invalid entry the rest of the table is empty. In case of pages that are loaded in the memory, they are marked as valid along with the information about where to find the swapped out page.

    未移动到内存中的页面在页面表中被标记为无效。 对于无效的条目,表的其余部分为空。 如果页面已加载到内存中,则会将它们与有关在何处找到换出页面的信息一起标记为有效。

    When the process requires any of the page that is not loaded into the memory, a page fault trap is triggered and following steps are followed,

    当该过程需要任何未加载到内存中的页面时,将触发页面错误陷阱并遵循以下步骤,

    1. The memory address which is requested by the process is first checked, to verify the request made by the process.

      首先检查该过程所请求的内存地址,以验证该过程所发出的请求。

    2. If its found to be invalid, the process is terminated.

      如果发现其无效,则该过程终止。

    3. In case the request by the process is valid, a free frame is located, possibly from a free-frame list, where the required page will be moved.

      如果该过程的请求有效,则可能从自由框架列表中找到一个自由框架,并将所需页面移到该框架中。

    4. A new operation is scheduled to move the necessary page from disk to the specified memory location. ( This will usually block the process on an I/O wait, allowing some other process to use the CPU in the meantime. )

      计划执行一项新操作,以将必要的页面从磁盘移动到指定的内存位置。 (这通常会在等待I / O时阻止该进程,同时允许其他进程使用CPU。)

    5. When the I/O operation is complete, the process's page table is updated with the new frame number, and the invalid bit is changed to valid.

      I / O操作完成后,将使用新的帧号更新进程的页表,并将无效位更改为有效。

    6. The instruction that caused the page fault must now be restarted from the beginning.

      现在必须从头开始重新启动导致页面错误的指令。

    There are cases when no pages are loaded into the memory initially, pages are only loaded when demanded by the process by generating page faults. This is called Pure Demand Paging.

    在某些情况下,最初没有页面加载到内存中,只有在过程需要时才通过生成页面错误来加载页面。 这称为纯需求分页

    The only major issue with Demand Paging is, after a new page is loaded, the process starts execution from the beginning. Its is not a big issue for small programs, but for larger programs it affects performance drastically.

    需求分页的唯一主要问题是,在加载新页面后,该过程将从头开始执行。 对于小型程序来说,这不是一个大问题,但是对于大型程序,它会极大地影响性能。

    页面替换 (Page Replacement)

    As studied in Demand Paging, only certain pages of a process are loaded initially into the memory. This allows us to get more number of processes into the memory at the same time. but what happens when a process requests for more pages and no free memory is available to bring them in. Following steps can be taken to deal with this problem :

    如需求分页中所述,最初仅将进程的某些页面加载到内存中。 这使我们可以同时将更多数量的进程放入内存。 但是当进程请求更多页面并且没有可用内存将其引入时会发生什么。可以采取以下步骤来解决此问题:

    1. Put the process in the wait queue, until any other process finishes its execution thereby freeing frames.

      将进程放入等待队列,直到其他进程完成执行,从而释放帧。

    2. Or, remove some other process completely from the memory to free frames.

      或者,将其他进程完全从内存中删除以释放帧。

    3. Or, find some pages that are not being used right now, move them to the disk to get free frames. This technique is called Page replacement and is most commonly used. We have some great algorithms to carry on page replacement efficiently.

      或者,找到一些当前未使用的页面,将它们移至磁盘以获取可用的框架。 此技术称为页面替换 ,是最常用的技术。 我们有一些很棒的算法可以有效地进行页面替换。

    基本页面替换 (Basic Page Replacement)

    • Find the location of the page requested by ongoing process on the disk.

      查找正在进行的进程在磁盘上请求的页面的位置。

    • Find a free frame. If there is a free frame, use it. If there is no free frame, use a page-replacement algorithm to select any existing frame to be replaced, such frame is known as victim frame.

      寻找一个自由的框架。 如果有自由框架,请使用它。 如果没有可用的帧,请使用页面替换算法来选择要替换的任何现有帧,这种帧称为“ 受害者帧”

    • Write the victim frame to disk. Change all related page tables to indicate that this page is no longer in memory.

      将受害者帧写入磁盘。 更改所有相关的页表以指示该页不再在内存中。

    • Move the required page and store it in the frame. Adjust all related page and frame tables to indicate the change.

      移动所需的页面并将其存储在框架中。 调整所有相关的页面和框架表以指示更改。

    • Restart the process that was waiting for this page.

      重新启动等待该页面的进程。

    FIFO页面替换 (FIFO Page Replacement)

    • A very simple way of Page replacement is FIFO (First in First Out)

      页替换的一种非常简单的方法是FIFO(先进先出)

    • As new pages are requested and are swapped in, they are added to tail of a queue and the page which is at the head becomes the victim.

      当请求并交换新页面时,会将它们添加到队列的尾部,并且位于头部的页面将成为受害者。

    • Its not an effective way of page replacement but can be used for small systems.

      它不是页面替换的有效方法,但可用于小型系统。

    LRU页面更换 (LRU Page Replacement)

    Below is a video, which will explain LRU Page replacement algorithm in details with an example.

    以下是一个视频,将通过示例详细说明LRU页面替换算法。

    演示地址

    脱粒 (Thrashing)

    A process that is spending more time paging than executing is said to be thrashing. In other words it means, that the process doesn't have enough frames to hold all the pages for its execution, so it is swapping pages in and out very frequently to keep executing. Sometimes, the pages which will be required in the near future have to be swapped out.

    花费大量时间进行分页而不是执行的进程被认为是不正常的。 换句话说,这意味着该进程没有足够的框架来容纳执行的所有页面,因此它非常频繁地换入和换出页面以保持执行。 有时,在不久的将来需要的页面必须换掉。

    Initially when the CPU utilization is low, the process scheduling mechanism, to increase the level of multiprogramming loads multiple processes into the memory at the same time, allocating a limited amount of frames to each process. As the memory fills up, process starts to spend a lot of time for the required pages to be swapped in, again leading to low CPU utilization because most of the proccesses are waiting for pages. Hence the scheduler loads more processes to increase CPU utilization, as this continues at a point of time the complete system comes to a stop.

    最初,当CPU使用率较低时,进程调度机制(用于提高多编程的级别)会将多个进程同时加载到内存中,从而为每个进程分配有限的帧数。 随着内存的填满,进程开始花费大量时间来交换所需的页面,这又导致CPU使用率降低,因为大多数进程都在等待页面。 因此,调度程序会加载更多进程以提高CPU利用率,因为这会在整个系统停止运行的时间点继续进行。

    Thrashing

    To prevent thrashing we must provide processes with as many frames as they really need "right now".

    为了防止崩溃,我们必须为进程提供真正需要的“立即”帧。

    翻译自: https://www.studytonight.com/operating-system/virtual-memory

    物理内存是什么虚拟内存作用

    展开全文
  • 什么是虚拟内存

    千次阅读 多人点赞 2019-11-09 15:33:02
    什么是虚拟内存呢?先查一下维基百科: 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时...

    什么是虚拟内存呢?先查一下维基百科:

    虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如RAM)的使用也更有效率。

    对虚拟内存的定义是基于对地址空间的重定义的,即把地址空间定义为「连续的虚拟内存地址」,以借此「欺骗」程序,使它们以为自己正在使用一大块的「连续」地址。

    也就是说虚拟内存能提供一大块连续的地址空间,对程序来说它是连续的,完整的,实际上虚拟内存是映射在多个物理内存碎片上,还有部分映射到了外部磁盘存储器上。虚拟内存有以下两个优点:

    1.虚拟内存地址空间是连续的,没有碎片

    2.虚拟内存的最大空间就是cup的最大寻址空间,不受内存大小的限制,能提供比内存更大的地址空间

     

    虚拟内存是如何工作的呢?

     

    创建一个进程时,操作系统(32位系统)会为该进程分配一个4GB 大小的虚拟内存。 之所以是4GB ,是因为在 32 位的操作系统中,一个指针长度是 4 字节(32位, 2的32次方个地址寻址能力是从 0x00000000~0xFFFFFFFF )即为 4GB 大小的容量。

    一个进程用到的虚拟地址是由内存区域表来管理的,实际用不了4G。而用到的内存区域,会通过页表映射到物理内存。所以每个进程都可以使用同样的虚拟内存地址而不冲突,因为它们的物理地址实际上是不同的。比如进程A的0x12345678虚拟地址和进程B的的0x12345678虚拟地址映射的物理地址是不同的的。

    我们现在使用的64位系统,虚拟内存最大有多大呢?是2的64次方吗?那将会有16EB的虚拟地址空间,1EB有多大呢?1EB = 1,000 PB = 1,000,000 TB =  1,000,000,000 GB 毫无疑问这是个非常巨大的数字,我们的系统根本不需要如此巨大的虚拟内存。现代的操作系统,比如,Windows在AMD64上的实现仅应用了最大256TB的虚拟内存。

    cup要访问虚拟内存地址时,需要经过地址翻译成物理地址才能访问。比如下图(来自《深入理解计算机系统》)中,cpu要访问虚拟地址4100,需要通过专用的硬件内存管理单元(memory management unit)MMU来翻译成对应的内存物理地址4,然后cpu在内存地址4的位置上取到数据返回。

     

    虚拟内存被分为一块块固定的大小,成为虚拟页(Virtual Page)简称VP,对应的物理内存也被分成一块块同样的大小,成为物理页(Physical Page)简称PP。磁盘和内存之间是以页为单位进行数据交换的。

    cpu怎么知道某一个虚拟页是否缓存了数据?缓存在内存中还是磁盘中呢?

    这就需要一张表格来记录了,这就是页表。

    页表第一列valid 如果是0表示该虚拟页未被缓存,1表示已经缓存了数据。

    第二列蓝色的表示数据缓存在内存中,白色的表示数据缓存在磁盘中。

     

    页命中

     

    当cpu要访问PTE2(箭头所指的位置)的数据时,发现valid标志位为1,所以表示该虚拟页已经被缓存了,由于页表中的地址指向内存中的VP2数据块,所以cpu直接从内存中读取数据VP2,这种情况就叫做页命中。

     

    缺页

     

    当cpu要访问PTE3(箭头所指的位置)的数据时,发现valid标志位为0,所以表示该虚拟页未被缓存,这时会触发一个缺页异常,cup根据页表第二列的指针找到磁盘中对应的数据块VP3,然后根据规则选择一个内存中的牺牲页,把VP3覆盖到内存中。

     

    上图中的内存中的vp4被替换成了VP3,valid的值从0变成1。

     

    缺页异常返回后,会重启缺页指令,并更新虚拟地址,cpu再次访问PTE3的时候就能命中页,取到数据了。

     

    总结

     

    当每个进程创建的时候,内核会为每个进程分配虚拟内存,这个时候数据和代码还在磁盘上,当运行到对应的程序时,进程去寻找页表,如果发现页表中地址没有存放在物理内存上,而是在磁盘上,于是发生缺页异常,于是将磁盘上的数据拷贝到物理内存中并更新页表,下次再访问该虚拟地址时就能命中了。

     

    现在你是不是对虚拟内存的工作原理更加了解了呢?

     

     

     

     

     

                                                                                欢迎关注我的公众号

    展开全文
  • 1.什么是虚拟内存 通过把一部分暂时不用的内存信息放到硬盘上 局部性原理,程序运行时候只有部分必要的信息装入内存 内存中暂时不需要的内容放到硬盘上,当需要的时候从新交换回来 系统似乎提供了比实际内存大得...

    1.什么是虚拟内存

    通过把一部分暂时不用的内存信息放到硬盘上

    局部性原理,程序运行时候只有部分必要的信息装入内存

    内存中暂时不需要的内容放到硬盘上,当需要的时候从新交换回来

    系统似乎提供了比实际内存大得多的容量,称之为虚拟内存

     (1)局部性分为时间局部性和空间局部性

                 时间局部性就是如果一块内存被访问的时候,很有可能在不远的将来还会被访问

                 空间局部性就是如果一块内存被访问,那么周围的内存也很有可能被访问

    2.什么是内存抖动(颠簸)

    本质是频繁的页调度行为

    频繁的页调度,进程不断产生缺页中断

    置换一个页,又不断再次需要这个页

    运行程序太多;页面替换策略不好。通过杀掉一些无关的进程(终止进程)或者增加物理内存解决

    展开全文
  • 1. 什么是虚拟内存? 虚拟内存设计的背景: 进程映像包括程序代码、数据和PCB,这些都需要占据物理内存。 有可能一个进程运行所需的程序代码和数据完全超过了物理内存的大小,更何况操作系统中同时有多个进程,...
  • 什么是虚拟内存虚拟内存是用硬盘空间做内存来弥补计算机RAM空间的缺乏,当实际RAM满时(实际上,在RAM满之前),虚拟内存就在硬盘上创建了,当物理内存用完后,虚拟内存管理器选择最近没有用过的,低优先级的内存...
  • 什么是虚拟内存(Virtual Memory)?很多时候我们使用点了开了很多占内存的软件,这些软件占用的内存可能已经远远超出了我们电脑本身具有的物理内存。为什么可以这样呢? 正是因为 虚拟内存 的存在,通过 虚拟内存 可以...
  • 虚拟内存: 电脑中所运行的程序均需经过内存执行,若执行的程序占用的内存很大很多,则会导致内存消耗殆尽,为解决该问题,WINDOWS运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,这部分空间即称为虚拟...
  • 虚拟内存尽管基址寄存器和变址寄存器用来创建地址空间的抽象,但是这有一个其他的问题需要解决:管理软件的膨胀(managing bloatware)。虽然内存的大小增长迅速,但是软件的大小增长的要比内存还要快。在 1980 年的...
  • 虚拟内存(virtual Memory) 日常生活中,当我们使用电脑的时候,尤其windows电脑,经常会打开...虚拟内存是计算机系统内存管理的一种技术,可以手动设置电脑的虚拟内存 虚拟内存的一个重要意义:定义了一个连...
  • 注:一分钟系列的篇幅都不长,适合吃饭蹲坑、地铁公交上食用~ 内存对于用户来说就是一个字节数组,我们可以根据地址来访问到某个字节或者某些字节:很久之前的内存很久很久之前,一台机器上只放置一个程序,操作...
  • 内存对于用户来说就是一个字节数组,我们可以根据地址来访问到某个字节或者某些字节:很久之前的内存很久很久之前,一台机器上只放置一个程序,操作系统仅仅作为一个函数库存在。对于...
  • 内存对于用户来说就是一个字节数组,我们可以根据地址来访问到某个字节或者某些字节:很久之前的内存很久很久之前,一台机器上只放置一个程序,操作系统仅仅作为一个函数库存在。对于内存来说,除去操作系统的代码和...
  • 以下为本人的小笔记: 虚拟内存和物理内存的对应关系: 虚拟内存地址和物理内存地址的转换(翻译)
  • 我们平时使用的电脑中有一个虚拟内存,但是大家对虚拟内存的了解不是很多,今天小编就大家说一说这个虚拟内存,让大家明白什么是虚拟内存,虚拟内存有什么用,以及虚拟内存设置成多少为适宜? 虚拟内存是什么? 虚拟...
  • 虚拟内存为什么要虚拟内存什么是虚拟内存工作原理虚拟内存的好处 为什么要虚拟内存 计算机的三大主件:主板、CPU、内存。程序的执行过程是,先从磁盘加载到内存,然后CPU和内存进行数据的交换和处理等实际内部操作,...

空空如也

空空如也

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

什么是虚拟内存