科学健康资讯 · 内容仅供参考,不替代专业诊疗 联系我们|疾病百科
投稿

虚拟内存和物理内存的区别,linux虚拟内存与物理内存映射(电脑有虚拟内存为什么还要内存条)

2023-06-04 投稿 本文链接

关于【虚拟内存和物理内存的区别】,linux虚拟内存与物理内存映射,今天小编给您分享一下,如果对您有所帮助别忘了关注本站哦。

1、虚拟内存和物理内存的区别:电脑有虚拟内存为什么还要内存条

继续为大家科普关于虚拟内存的小知识。之前的文章里我们讲过,电脑系统可以利用硬盘的空间来模拟内存,这时就会有人好奇了:电脑里有虚拟内存了为什么还要内存条?

相关阅读:虚拟内存该设置多少?

我们先来看看下边这张图

虚拟内存和物理内存的区别,linux虚拟内存与物理内存映射(电脑有虚拟内存为什么还要内存条)

上图分别是机械硬盘,固态硬盘,内存以及cpu缓存的速度延迟。既然虚拟内存是利用硬盘模拟的,那它的速度和真正的内存肯定是没法相比的。

在计算机中,所有运行的程序都需要经过内存来执行,可以分为物理内存和虚拟内存,物理内存大小也就是指内存条的容量大小,由于物理内存容量比较小,很容易就塞满了各种应用与数据,为了解决这个问题,WINDOWS运用了虚拟内存技术,即拿出一部分硬盘空间做“内存”来弥补计算机RAM空间的缺乏。

虚拟内存和物理内存的区别,linux虚拟内存与物理内存映射(电脑有虚拟内存为什么还要内存条)

Windows中的虚拟内存

cpu会频繁的访问内存,它必须拥有足够高的读写速度,才不会成为系统性能的瓶颈。那么内存和“虚拟内存”(即硬盘)的速度相差多少呢?

以比较快的SSD为例吧,而且内存是访问小数据比较多,以4K的性能为例:

虚拟内存和物理内存的区别,linux虚拟内存与物理内存映射(电脑有虚拟内存为什么还要内存条)

SSD的性能,其4K读的性能为19.99MB/s

然后将内存模拟为虚拟硬盘,下面是DDR3 1600内存的测试数据:

虚拟内存和物理内存的区别,linux虚拟内存与物理内存映射(电脑有虚拟内存为什么还要内存条)

内存的性能,其4K读的速度为1975MB/s

可以看到,内存的读写性能是硬盘(SSD)的百倍以上,如果换成机械硬盘,更会是千倍以上,当你的电脑内存容量比较小时,经常觉得卡,主要原因就是“虚拟内存”太慢的缘故。

“虚拟内存”只是一个临时解决方案,要想流畅快速,物理内存的大小必须达标。由于大多数人的日常应用有限,基本上8-16GB内存就够用了,如果要处理大型的数据,如视频渲染等,物理内存容量就要求更大了。

扩展:

现在不是很流行吃鸡这个游戏么,这款游戏对于内存容量的要求很高,网上有很多文章提出用虚拟内存来解决这个问题,这个方法虽然有一定的作用,但是治标不治本,毕竟硬盘的速度远不及内存。

2、虚拟内存和物理内存的区别,linux虚拟内存与物理内存映射

  1. 计算机明明没有那么多内存(n个进程的话就需要n*4G)内存
  2. 建立一个进程,就要把磁盘上的程序文件拷贝到进程对应的内存中去,对于一个程序对应的多个进程这种情况,浪费内存!
第二层理解
  1. 每个进程的4G内存空间只是虚拟内存空间,每次访问内存空间的某个地址,都需要把地址翻译为实际物理内存地址
  2. 所有进程共享同一物理内存,每个进程只把自己目前需要的虚拟内存空间映射并存储到物理内存上。
  3. 进程要知道哪些内存地址上的数据在物理内存上,哪些不在,还有在物理内存上的哪里,需要用页表来记录
  4. 页表的每一个表项分两部分,第一部分记录此页是否在物理内存上,第二部分记录物理内存页的地址(如果在的话)
  5. 当进程访问某个虚拟地址,去看页表,如果发现对应的数据不在物理内存中,则缺页异常
  6. 缺页异常的处理过程,就是把进程需要的数据从磁盘上拷贝到物理内存中,如果内存已经满了,没有空地方了,那就找一个页覆盖,当然如果被覆盖的页曾经被修改过,需要将此页写回磁盘

虚拟内存和物理内存的区别,linux虚拟内存与物理内存映射(电脑有虚拟内存为什么还要内存条)

​

总结:
  1. 既然每个进程的内存空间都是一致而且固定的,所以链接器在链接可执行文件时,可以设定内存地址,而不用去管这些数据最终实际的内存地址,这是有独立内存空间的好处
  2. 当不同的进程使用同样的代码时,比如库文件中的代码,物理内存中可以只存储一份这样的代码,不同的进程只需要把自己的虚拟内存映射过去就可以了,节省内存
  3. 在程序需要分配连续的内存空间的时候,只需要在虚拟内存空间分配连续空间,而不需要实际物理内存的连续空间,可以利用碎片。
补充理解:

虚拟内存和物理内存的区别,linux虚拟内存与物理内存映射(电脑有虚拟内存为什么还要内存条)

​

接下来讨论下物理内存:物理内存的内核映射
  1. 高端内存不能全部映射到内核空间,也就是说这些物理内存没有对应的线性地址。不过,内核为每个物理页框都分配了对应的页框描述符,所有的页框描述符都保存在mem_map数组中,因此每个页框描述符的线性地址都是固定存在的。内核此时可以使用alloc_pages()和alloc_page()来分配高端内存,因为这些函数返回页框描述符的线性地址。
  2. 内核地址空间的后128MB专门用于映射高端内存,否则,没有线性地址的高端内存不能被内核所访问。这些高端内存的内核映射显然是暂时映射的,否则也只能映射128MB的高端内存。当内核需要访问高端内存时就临时在这个区域进行地址映射,使用完毕之后再用来进行其他高端内存的映射。

虚拟内存和物理内存的区别,linux虚拟内存与物理内存映射(电脑有虚拟内存为什么还要内存条)

​

物理内存管理机制

伙伴算法

per-CPU页框高速缓存

slab缓存

vmalloc机制

物理内存的分配分区页框分配器

虚拟内存和物理内存的区别,linux虚拟内存与物理内存映射(电脑有虚拟内存为什么还要内存条)

​

虚拟内存和物理内存的区别,linux虚拟内存与物理内存映射(电脑有虚拟内存为什么还要内存条)

​

slab分配器

虚拟内存和物理内存的区别,linux虚拟内存与物理内存映射(电脑有虚拟内存为什么还要内存条)

​

本文关键词:虚拟内存与物理内存区别,虚拟内存和物理内存的区别和关联?,虚拟内存有什么弊端,8g运行内存设置多少虚拟内存,虚拟内存和物理内存的合理比例。这就是关于《虚拟内存和物理内存的区别,linux虚拟内存与物理内存映射(电脑有虚拟内存为什么还要内存条)》的所有内容,希望对您能有所帮助!

本文内容仅供健康科普参考,不能替代专业医疗诊断和治疗建议。如有身体不适,请及时就医并遵从医师指导。

相关阅读