物理内存、页面文件、交换区和虚拟内存

物理内存,顾名思义,就是实实在在存在的那个东西,插在你电脑主板上的内存条所提供的空间。

页面文件,这个是硬盘上的一块空间,在Windows下表现为一个文件。这个页面文件存在的意义就是在物理内存被占用满以后,将物理内存中的东西移动到硬盘上的这个空间,腾出物理内存给需要的应用程序来使用。

交换区,这个是物理内存和页面文件空间的总和,“交换”的含义,则是指在硬盘文件、CPU和其它IO之间进行数据的传递和暂存(这句话对于了解计算机运行基本流程的人来说应该可以理解)。

虚拟内存,这个概念恐怕是目前为止最为含混不清的一个东西了,会有很多种不同的含义。在这里,我先说一下在一个程序猿眼中的虚拟内存是个啥。

很显然,这个世界上的电脑配置是五花八门,可用的物理内存数量也是分为很多等级的。作为一个苦逼的程序猿,我们不可能在考虑程序逻辑的时候还要去 考虑客户的机器有多少内存可以用,也不可能去详细调查实际的物理内存地址是多少到多少,好在OS会为我们完成这些工作。每一个运行的进程,都会获得一个 4G的内存地址空间,这就是所谓的虚拟内存,这里面的所有地址都是虚拟的,和物理内存啥的并不直接挂钩。而在操作系统那头,这些虚拟地址所映射到的实际地 址,可以是物理内存地址,也可以是页面文件的地址。如果是物理内存小于这个虚拟地址的范围的话,映射的物理内存还可能是重复的物理内存地址片段,使用的时 候可以通过清空内存数据,将内存数据写入页面文件这样的方式进行物理内存的重新利用,以提高物理内存的利用效率。

而不少人,尤其是对Windows刚有所了解的人,所理解的虚拟内存,往往是指页面文件。这也是微软的意见,他们在自己的操作系统中就是这么写的,见下图:

而在Aida64,或者说是曾经的Everest中,虚拟内存是交换区 + 物理内存 = 物理内存 * 2 + 页面文件。老实说,我并没有理解这个的概念是什么。

其实上述虚拟内存的说法都没有什么问题,都是约定俗成的说法,关键是要搞清楚什么时候的“虚拟内存”是指什么,概念不混淆就可以。

顺便吐个槽,我发现Win7的内存调度很诡异,物理内存不是边占用边释放的,总是等到占用率很高(接近满)的时候,来个集中释放,也就是写入页面 文件。我的笔记本硬盘硬盘性能不咋样,给这么一搞整个就会卡死半天,而下载软件开时间长一点的话很容易就把物理内存占满。据说是这 Superfetch(拼错没?)的效果,关了以后内存占用率确实上升的慢了一点,不过占用率感觉还是偏高,看着真不爽。

几个概念

1、交换空间swap
交换空间是专门用于临时存储内存的一块磁盘空间,通常在页面调度和交换进程数据时使用,通常推荐交换空间的大小应该是物理内存的二到四倍。
2、页面调度
页面调度是指从磁盘向内存传输数据,以及相反的过程,这个过程之所以被称为页面调度,是因为Unix内存被平均划分成大小相等的页面;

通常页面大小为4KB和8KB(在Solaris中可以用pagesize命令查看)。

当可执行程序开始运行时,它的映象会一页一页地从磁盘中换入,与此类似,当某些内存在一段时间内空闲,就可以把它们换出到交换空间中,这样就可以把空闲的RAM交给其他需要它的程序使用。
3、交换
页面调度通常容易和交换的概念混淆,页面调度是指把一个进程所占内存的空闲部分传输到磁盘上,而交换是指当系统中实际的内存已不够满足新的分配需求时,把整个进程传输到磁盘上,交换活动通常意味着内存不足。

UNIX内存管理:UNIX系统通过2种方法进行内存管理,“调页算法”,“交换技术”。
调页算法是将内存中最近不常使用的页面换到磁盘上,把常使用的页面(活动页面)保留在内存中供进程使用。
交换技术是系统将整个进程,而不是部分页面,全部换到磁盘上。正常情况下,系统会发生一些交换过程。

当内存严重不足时,系统会频繁使用调页和交换,这增加了磁盘I/O的负载。进一步降低了系统对作业的执行速度,即系统I/O资源问题又会影响到内存资源的分配。

时间: 2024-10-18 02:31:22

物理内存、页面文件、交换区和虚拟内存的相关文章

[Linux]创建和启用Swap交换区

如果你的服务器的总是报告内存不足,并且时常因为内存不足而引发服务被强制kill的话,在不增加物理内存的情况下,启用swap交换区作为虚拟内存是一个不错的选择,我购买的DigitalOcean VPS 512M内存基本不够用的,好在VPS的母鸡使用的SSD,正常读写速度都在300MB/s以上,启用swap后性能提高了不少,特别是在处理消耗大内存的脚本方面 创建交换区原则:1.创建的swap交换区大小应该大于实际物理内存的容量大小,但是不要过大,以免造成硬盘空间浪费.2.如果内存IO请求频繁,而单一

虚拟内存页面文件pagefile.sys(棉文件)改变存放位置

"pagefile.sys"是页面交换文件,切记,这个文件不能删除,但是可以改变其大小和存放位置:右击"我的电脑/属性",然后在对话框的"高级"标签下单击"性能"下的"设置"按钮,在"性能选项"对话框中切换到"高级"标签下,再单击"虚拟内存"下的"更改"按钮,即可根据需要更改页面文件的大小--先选中c盘,然后选"无分页

怎么操作PDF文件交换页面?简单的操作方法

PDF文件怎么交换页面呢?在现在使用PDF文件的时候,我们也会遇到一些PDF交换页面这种问题,不会操作PDF交换页面怎么办呢?下面小编就为大家介绍一下PDF文档交换页面的操作方法. 操作软件:迅捷PDF编辑器(PDF编辑器下载) 1:我们将PDF编辑器安装到自己的电脑中,打开软件可以找到打开更多文件,将需要编辑的PDF文件添加到软件中. 2:在软件中可以找到文档,点击文档就可以找到更多页面,将鼠标移动到更多页面处,在右侧就会看到交换页面. 3:点击交换页面就会出现一个弹窗,在弹窗中可以看到Swa

揭开Linux操作系统的Swap交换区之谜

Swap,即交换区,除了安装Linux的时候,有多少人关心过它呢?其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要.通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用. Swap的原理是一个较复杂的问题,需要大量的篇幅来说明.在这里只作简单的介绍,在以后的文章中将和大家详细讨论Swap实现的细节. 众所周知,现代操作系统都实现了“虚拟内存”这一技术,不但在功能上突破了物理内存的限制,使程序可以操纵大于实际物理内存的空间,更重要的是,“虚拟内存”是隔离每个进程的安

Linux 下释放内存,swap交换区缓存

关于内存耗尽的总结: 1)在进程收到OOM之前,内核将刷新文件系统的cache来释放空间. 2)将交换区的页面移到磁盘上. 3)当内存变少时,虚拟性使每个进程通过交换区来做简单的上下文环境切换. 4)当进程消耗尽交换内存后,才会引发out-of-memory(OOM)来kill那些进程. 所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是释放缓存的操作了. 要达到释放缓存的目的,我们首先需要了解下关键的配置文件/proc/sys/vm/drop_caches.这个文件中记录了缓

Windows魔法堂:解决“由于启动计算机时出现页面文件配置问题.......”

一.前言 昨晚终于在VirtualBox中安装好Win7了,但在系统启动后弹出窗报“由于启动计算机时出现页面文件配置问题.......”,于是度娘一下.以下记录以供日后查阅. 二.原因 网上说的是在使用过程中C盘空间越来越少,使得虚拟内存不足,而且进程又消耗了大量的物理内存才导致这一警报.但我的系统是新装的,就分了一个80G的C盘而已,而且分配了2.8G内存,那为什么会这样的呢?原来是因为系统默认没有分配虚拟内存,因此我们要手动分配一下. 三.手动分配 1. 右键计算机,打开设备管理器 2. 点

内存交换区

当操作系统因为没有足够的内存而将一些虚拟内存写到磁盘就会发生内存交换,内存交换对操作系统中运行的进程是透明的,只有操作系统知道特定的虚拟内存地址是在物理内存还是磁盘上? 虚拟内存写到磁盘上该如何理解? 操作系统通常允许对虚拟内存和io进行一些控制,我们提供过一些gun/linux上控制它们的办法,最基本的办法是修改/proc/sys/vm/swappiness为一个很小的值,比如0或1,这告诉内核除非虚拟内存完全满了,否则不要使用交换区,下面是如何检查这个值得例子 cat /proc/sys/v

mongodb自动关闭:页面文件太小,无法完成操作

上次在一台两G内存的win server 2008电脑上运行一个程序,一段时间后mongod自动停止,发现日志文件最后有这样的错误: 2014-11-30T00:32:32.914+0800 [conn30751] command taskdb.$cmd command: count { count: "result25", fields: null, query: { md5: "c390a22da3d411675883d6f692f266de" } } plan

VMware 虚拟机Red Hat 5.9 交换区及硬盘空间调整

首先要通过VMware设置简单实现内存扩大.但是系统中的/swap应该如何设置呢? 1. 创建swap 文件 使用如下命令: #dd if=/dev/zero of=/swap/swapfile bs=1M count=3072  dd命令作用是用指定大小的块拷贝一个文件,并在拷贝同时进行指定的转换. 语法:dd [选项] if =输入文件(或设备名称). of =输出文件(或设备名称). ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数. skip = blocks 跳过读