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

    千次阅读 2018-05-26 18:16:02
    1、什么是虚拟内存? 一个进程是和其他进程共享CPU和主存的,但是主存的空间是有限的,当同时运行多个进程时,就会使内存不够用。这个时候,我们就引入了虚拟内存的概念,它是一种对主存的抽象的计算机内存管理技术...

    1、什么是虚拟内存?

    一个进程是和其他进程共享CPU和主存的,但是主存的空间是有限的,当同时运行多个进程时,就会使内存不够用。这个时候,我们就引入了虚拟内存的概念,它是一种对主存的抽象的计算机内存管理技术。对于32位的Linux操作系统,系统为每个进程分配4G的虚拟内存。如下图所示。

     

    2、虚拟寻址

    使用虚拟寻址,CPU通过生成一个虚拟地址来访问主存,这个虚拟地址在被送到内存之前会被内存管理单元(MMU)转换成合适的物理地址,从而找到目标地址。具体过程如下图。

    3、进程中虚拟内存数据结构

    4、作为缓冲工具的虚拟内存

    概念上组织成一个由存放那个在磁盘上的N个连续的字节大小的单元组成的数组。每个字节都有唯一的虚拟地址,作为到数组的索引。虚拟内存系统通过将虚拟内存分割为虚拟页的大小固定的块来处理这个问题。对于Linux系统,这个页的大小一般为4KB。

    <1>页表

    在内存中,存放这一个叫做页表的数据结构,通过这个页表,可以将虚拟页映射到物理页。每次MMU将一个虚拟地址转换成物理地址时,都会读取页表。操作系统负责维护页表的内容,以及自爱磁盘与DRAM之间来回传送页。

    页表就是一个PTE(page table entry)的数组。虚拟地址空间中的每个页在页表中一个固定偏移量处都有一个PTE。每个PTE是有一个有效位和n个地址字段组成的。有效位表明了该虚拟页当前是否被缓存在DRAM中;地址字段表示DRAM中相应的物理页的其实地址。下图就是一个页表示例。

    <2>页命中与缺页

    当缺页发生的时候,内核就会从磁盘拷贝VP3到物理内存,但是现在的物理内存是满的,这个时候就要选择一页写回磁盘(如果该页为被修改,就会直接丢弃;若发生修改,我们称之为脏页,就会写回到磁盘),这个页我们叫做牺牲页,然后我们会将VP3更新到PP3。随后系统会重启缺页的指令,该指令会将导致缺页的虚拟地址重新发送到MMU,现在就可以得到正常处理了。处理过程如下。

    5、页表是如何被翻译的?

    下图展示了MMU如何利用页表来实现虚拟地址到物理地址的映射。

    6、内存映射

    Linux通过将一个虚拟内存区域与一个磁盘上的对象关联起来,以初始化这个虚拟内存区域的内容,这个过程称为内存映射。一旦一个虚拟页面被初始化了,它就在一个由内核维护的专门的交换空间之间交换。在任何时候,交换空间都限制着当前运行着的进程能够分配的虚拟页面的总数。

    <1>共享对象

    每个进程都有自己私有的虚拟地址空间,可以避免其他进程的错误读写。不过,许多进程有相同的制度代码区域。这样如果每个进程都复制一份到物理内存,会造成空间的浪费。所以不同的进程有共享对象存在,如果一个进程将一个共享对象映射到它的虚拟地址空间的一个区域内,那么这个进程对这个区域的任何写操作,对于那些也把这个共享对象映射到它们虚拟内存的其他进程而言,也是可见的。而且,这个变化会反映在磁盘的原始对象中。

    两个进程也可能共享一份私有对象,但是在其中一个进程改变它的这份私有对象时,就会利用写时复制技术,将改变的那部分重新在物理内存中复制一份,并作出更改。具体实现过程如下图。

    <2>fork函数

    <3>execve函数

    execve的调用如下:

                                                                         execve(“a.out”,NULL,NULL);

    Execve函数在当前进程中加载并运行包含在可执行目标文件a.out中的程序,用a.out程序有效的替代了当前程序。分为以下步骤:

    <4>mmap的用户级内存映射

    Linux进程科技使用mmap函数来创建新的虚拟内存区域,并将对映射到这些区域中。函数原型如下:

                                           void *mmap(void *start,size_t length,int port,int flags,int fd,off_toffset);

    Mmap函数要求内核创建一个新的虚拟内存区域,最好是从地址start开始的一个区域,并将文件描述符fd指定的对象的一个连续的片映射代这个新的区域。

     

     

    6、动态内存分配

    动态内存分配维护着一个进程的虚拟内存区域,称为堆。对于每个进程,内核维护着一个变量brk,它指向堆的顶部。分配器将堆视为一组不同大小的块的集合来维护。每个块就是一个连续的虚拟内存片,要么是已分配的,要么是空闲的。分配器分为以下两种风格:

     

     

     

    展开全文
  • 在解释第一个问题之前,先说明一下计算机内存管理的中的四个名词:虚拟内存虚拟内存地址,物理内存,物理内存地址。先说说为什么会有虚拟内存和物理内存的区别。正在运行的一个进程,他所需的内存是有可能大于内存...
    在解释第一个问题之前,先说明一下计算机内存管理的中的四个名词:虚拟内存,虚拟内存地址,物理内存,物理内存地址。

    先说说为什么会有虚拟内存和物理内存的区别。正在运行的一个进程,他所需的内存是有可能大于内存条容量之和的,比如你的内存条是256M,你的程序却要创建一个2G的数据区,那么不是所有数据都能一起加载到内存(物理内存)中,势必有一部分数据要放到其他介质中(比如硬盘),待进程需要访问那部分数据时,在通过调度进入物理内存。所以,虚拟内存是进程运行时所有内存空间的总和,并且可能有一部分不在物理内存中,而物理内存就是我们平时所了解的内存条。有的地方呢,也叫这个虚拟内存为内存交换区。

    那么,什么是虚拟内存地址和物理内存地址呢。假设你的计算机是32位,那么它的地址总线是32位的,也就是它可以寻址0~0xFFFFFFFF(4G)的地址空间,但如果你的计算机只有256M的物理内存0x~0x0FFFFFFF(256M),同时你的进程产生了一个不在这256M地址空间中的地址,那么计算机该如何处理呢?回答这个问题前,先说明计算机的内存分页机制。

    计算机会对虚拟内存地址空间(32位为4G)分页产生页(page),对物理内存地址空间(假设256M)分页产生页帧(page frame),这个页和页帧的大小是一样大的,所以呢,在这里,虚拟内存页的个数势必要大于物理内存页帧的个数。在计算机上有一个页表(page table),就是映射虚拟内存页到物理内存页的,更确切的说是页号到页帧号的映射,而且是一对一的映射。但是问题来了,虚拟内存页的个数 > 物理内存页帧的个数,岂不是有些虚拟内存页的地址永远没有对应的物理内存地址空间?不是的,操作系统是这样处理的。操作系统有个页面失效(page fault)功能。操作系统找到一个最少使用的页帧,让他失效,并把它写入磁盘,随后把需要访问的页放到页帧中,并修改页表中的映射,这样就保证所有的页都有被调度的可能了。这就是处理虚拟内存地址到物理内存的步骤。

    现在来回答什么是虚拟内存地址和物理内存地址。虚拟内存地址由页号(与页表中的页号关联)和偏移量组成。页号就不必解释了,上面已经说了,页号对应的映射到一个页帧。那么,说说偏移量。偏移量就是我上面说的页(或者页帧)的大小,即这个页(或者页帧)到底能存多少数据。举个例子,有一个虚拟地址它的页号是4,偏移量是20,那么他的寻址过程是这样的:首先到页表中找到页号4对应的页帧号(比如为8),如果页不在内存中,则用失效机制调入页,否则把页帧号和偏移量传给MMC(CPU的内存管理单元)组成一个物理上真正存在的地址,接着就是访问物理内存中的数据了。总结起来说,虚拟内存地址的大小是与地址总线位数相关,物理内存地址的大小跟物理内存条的容量相关。

    转自:https://blog.csdn.net/fukaibo121/article/details/75105848
    展开全文
  • 关于虚拟存储器、虚拟内存和交换空间的理解

    千次阅读 多人点赞 2016-12-01 14:18:15
    虚拟存储器、虚拟内存和交换空间这三个概念从看CSAPP开始很长一段时间都在困扰着我,网上各说纷云,等快上完操作系统和计组课才算明白了! 先说虚拟存储器,CSAPP上介绍的是虚拟存储器是对主存的抽象概念,为每一个...

    虚拟存储器、虚拟内存和交换空间这三个概念从看CSAPP开始很长一段时间都在困扰着我,网上各说纷云,等快上完操作系统和计组课才算明白了!

    先说虚拟存储器,CSAPP上介绍的是虚拟存储器是对主存的抽象概念,为每一个进程提供了一致的地址空间形式,也就是虚拟地址空间(这个地址空间不是用什么数组存起来的,而是CPU要访问内存就产生一个虚拟地址,不断累积组成的虚拟地址空间),它是一种机制,一种将主存抽象成磁盘高速缓存的技术。当初构造虚拟存储器的两个主要动机:允许在多道程序之间有效而安全地共享存储器;消除一个小而受限的主存容量对程序设计造成的影响。40年后,第一条变成了主要设计动机。现代操作系统都支持虚拟存储器,所有的应用程序访问内存都需要地址翻译。

    虚拟内存和交换空间,这两个概念要和操作系统一起说,window下的“虚拟内存”实际上是存在磁盘上的页面文件,和linux的交换空间概念一样,都是物理上实际存在的东西,如果内存够用,没有缺页,你禁掉这两个东西不会影响虚拟存储器;然而撇开操作系统,只谈理论,虚拟内存还是一种技术,它允许执行进程不必完全放在内存中。这两种其实都属于交换技术,交换技术除了因为内存紧张要使用之外,还有在一些操作系统如分时系统中为了改善进程组合(CPU密集型和IO密集型)也要用它进行中期调度。

    总结一下,传统意义上的虚拟内存和交换空间就是指能实际分配的磁盘空间,而虚拟存储器是一种机制,是整个CPU访问内存过程的体现。其实内存管理、虚拟内存技术、虚拟存储器都是密不可分的概念,你可以说虚拟存储器就是虚拟内存技术,也可以说内存管理机制就是虚拟存储器,抠字眼都是无意义的,因为可能书的翻译不同,理解不同。但是只要知道它们只是内存管理分页机制的体现,从CPU生成虚拟地址到MMU翻译生成物理地址,到查找PTE,再到缺页,页置换,这整个过程需要CPU、内存和磁盘的参与,只要理解了这些就理解了内存分页管理机制,不必抠字眼。

    展开全文
  • 首先我们需要先了解什么是虚拟内存。我们知道电脑的硬件中有内存条(物理内存)、硬盘,当内存条中的空间不足时操作系统会从硬盘中分配一部分空间当作内存来使用。因内存和硬盘读写速度差异太大,所以当启用虚拟内存...

    首先我们需要先了解什么是虚拟内存。我们知道电脑的硬件中有内存条(物理内存)、硬盘,当内存条中的空间不足时操作系统会从硬盘中分配一部分空间当作内存来使用。因内存和硬盘读写速度差异太大,所以当启用虚拟内存后会大大降低系统运行速度。所以如果内存容量足够尽量不要使用虚拟内存。

    虚拟内存设置多少合适?

    虚拟内存一般设置为物理内存的1.5倍。
    以8G内存条为例:

    系统如果是32位的,那么只支持3.2G,虚拟内存应该设置为4800;
    如果是64位的,那么支持3.2G以上的内存,虚拟内存应该设置为12000;

    怎么设置虚拟内存

    设置虚拟内存

    在windows系统中我们右键桌面上的“此电脑”,选择“属性”,打开系统信息界面,再选择左侧栏里的“高级系统设置”。
    然后点击“高级”选项卡,在性能一栏点“设置”,再选择“高级”选项卡,我们可以看到有一个“虚拟内存”的功能栏,点“更改”。
    系统默认是勾选了“自动管理所有驱动器的分页文件大小”,我们将勾选框取消。如果你的C盘空间够大,我们可以将虚拟内存设置在C盘,如果空间不足,可以调整到D盘。

    展开全文
  • 虚拟内存与物理内存的联系与区别

    万次阅读 多人点赞 2018-08-30 11:55:36
    操作系统有虚拟内存与物理内存的概念。在很久以前,还没有虚拟内存概念的时候,程序寻址用的都是物理地址。程序能寻址的范围是有限的,这取决于CPU的地址线条数。比如在32位平台下,寻址的范围是2^32也就是4G。并且...
  • 虚拟内存机制

    万次阅读 2017-11-13 14:23:24
    虚拟内存机制 1.为什么要有虚拟内存 在早期的计算机中,是没有虚拟内存的概念的。我们要运行一个程序,会把程序全部装入内存,然后运行。 当运行多个程序时,经常会出现以下问题: 1)进程地址空间不隔离,...
  • 想必在linux上写程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题——你的程序在运行时占用了多少内存(物理内存)?通常我们可以通过top命令查看进程占用了多少内存。这里我们可以看到VIRT、RES...
  • 虚拟内存原理

    千次阅读 2019-10-05 10:36:58
    虚拟内存:为了更加高效并且少出错,现代操作系统提供了一种对主存的抽象概念,叫做虚拟内存虚拟内存是硬件异常,硬件地址翻译,主存,磁盘文件和内核软件的完美交互,他为每个进程提供了一个大的,一致和私有的...
  • 使用dd命令增加swap(虚拟内存)大小

    千次阅读 2017-09-04 11:54:10
    最近服务器老是因为内存溢出而死机,看了看虚拟内存不够用,48G的物理内存虚拟内存4G,这是又添加了4G虚拟内存 遇到了swap分区不够的情况。问了群里的大牛,说了两种方法。一、lvm,二、dd。这里使用dd解决的。...
  • 我们平时使用的电脑中有一个虚拟内存,但是大家对虚拟内存的了解不是很多,今天编就大家说一说这个虚拟内存,让大家明白什么是虚拟内存虚拟内存有什么用,以及虚拟内存设置成多少为适宜? 虚拟内存是什么? 虚拟...
  • Windows虚拟内存简介

    千次阅读 2017-09-30 15:13:00
    在Windows系统中,系统内存本身的空间可能非常有限,但是通过虚拟内存(Virtual Memory),可以让程序可以拥有超过系统物理内存大小的可用内存空间。   顾名思义,虚拟内存是逻辑层面的划分。操作系统通过内存...
  • 通讯SOCKET,虚拟内存增加很快?怎么解决,数据加载在内存,但是数据不多,谢谢。
  • Linux 如何调整虚拟内存大小

    千次阅读 2015-01-28 07:00:31
    我用的CentOS, 直接贴完整的调整虚拟内存步骤,供参考: [root@1pad ~]# free -m  total used free shared buffers cached Mem: 3702 722 2979 0 149 230
  • 虚拟内存以及进程的虚拟内存分布(第六章)

    千次阅读 多人点赞 2019-05-17 10:59:58
    在现代计算机操作系统中,计算机同时运行多个程序,为了提高CPU的利用率和物理内存的利用率,操作系统应用虚拟内存机制来管理内存。 本文介绍一些与虚拟内存相关的概念。 目录 1.物理内存 vs 虚拟内存 2.物理...
  • matlab 扩大虚拟内存

    万次阅读 2015-01-27 13:45:58
    用了自己电脑结果爆内存,分享一个扩大虚拟内存的方法,经测试有效。。使用Matlab生成很大的图片时,碰到了"out of memory"的错误,导致图片无法生成,于是不得不扩展虚拟内存。具体过程记录如下:1)查看当前的虚拟...
  • 物理内存和虚拟内存

    千次阅读 2019-07-30 11:17:06
    虚拟内存:利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。(为了满足物理内存的不足而提出的策略) 在很久以前,还没有虚拟内存概念的时候,程序寻址用的都是物理地址,...
  • SWAP虚拟内存配置

    千次阅读 2018-05-18 13:53:14
      swap是Linux中的虚拟内存,用于扩充物理内存不足而用来存储临时数据存在的。它类似于Windows中的虚拟内存。在Windows中,只可以使用文件来当作虚拟内存。而linux可以文件或者分区来当作虚拟内存。   首先查看...
  • 关于iOS虚拟内存的一些思考

    千次阅读 2013-06-05 14:07:14
    关于iOS虚拟内存,一些文档资料都说iOS系统没有虚拟内存,我想对此说法纠正一下,顺便说一下虚拟内存的大概含义。  虚拟内存有两个含义:第一类:将进程占用的内存地址映射到RAM内其他位置,  第二类:将进程...
  • 虚拟内存(为什么要有虚拟内存

    千次阅读 2020-07-11 15:28:35
    操作系统有虚拟内存与物理内存的概念。在很久以前,还没有虚拟内存概念的时候,程序寻址用的都是物理地址。程序能寻址的范围是有限的,这取决于CPU的地址线条数。比如在32位平台下,寻址的范围是2^32也就是4G。并且...
  • Windows 2000 使用基于分页机制的虚拟内存。每个进程有4GB的虚拟地址空间。基于分页机制,这4GB地址空间的一些部分被映射了物理内存,一些部分映射硬盘上的交换文件,一些部分什么也没有映射。程序中使用的都是4GB...
  • 什么是虚拟内存

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

    万次阅读 多人点赞 2018-07-16 20:16:28
    为解决这个问题,人们设计了许多的方案,其中最成功的当属虚拟内存技术。Linux作为一个以通用为目的的现代大型操作系统,当然也毫不例外的采用了优点甚多的虚拟内存技术。   虚拟内存 为了运行比实际物理内存...
  • 默认虚拟内存是设置在C盘的,由于C盘本来空间比较,而且安装软件越来越多的情况下C盘空间就不够用了,所以很多人就想把虚拟内存设置到D盘或者C盘以外的盘,这要怎么设置呢?虽然不同的操作系统设置的方法有所不同...
  • centos虚拟内存设置

    千次阅读 2019-01-29 16:05:31
    centos虚拟内存设置 #查看内存 free -m #查看文件系统 df -h 增加虚拟内存 开始设置 #if 表示infile,of表示outfile,bs=1024代表增加的模块大小,count=16384000代表16384000个模块,也就是16G空间 dd if=/dev...
  • 虚拟内存: 电脑中所运行的程序均需经过内存执行,若执行的程序占用的内存很大很多,则会导致内存消耗殆尽,为解决该问题,WINDOWS运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,这部分空间即称为虚拟...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 595,647
精华内容 238,258
关键字:

关于虚拟内存过小