前一段时间在面试总监的时候,总监问了我这样的一个问题:你个我说说物理内存和虚拟内存到底是怎么一回事?
其实之前我看过这个问题,据我理解的,当时是这么回答的“进程在运行的时候,操作系统都为其分配一个4GB的地址空间,即所谓的虚拟地址空间,一般情况下,当我们的程序很大的时候,实际的物理内存根本不能满足我们的需求的时候,这个时候操作系统就会借助磁盘空间来做虚拟的内存空间,把当前进程不需要的数据放在磁盘上,等到用到的时候,在利用调度算法把所需要的数据从磁盘空间上调度到内存,虚拟内存就是为了扩大内存的容量,每当我们要运行一个程序的时候经过编译以后形成的仅仅是逻辑上的空间,根本不是可以直接运行的内存空间,所以它还存在一个地址映射的概念。”当时感觉回答的很是笼统,只见总监在最后说了一句,你下去还是把这一块的内容在好好看看,所以今天就好好的把这个概念理一理。
首先我从最基本的概念说起,什么是物理内存的概念,虚拟内存的概念?
物理内存,在应用中,自然是顾名思义,物理上,真实的插在板子上的内存是多大就是多大了。而在CPU中的概念,物理内存就是CPU的地址线可以直接进行寻址的内存空间大小。比如8086只有20根地址线,那么它的寻址空间就是1MB,我们就说8086能支持1MB的物理内存,及时我们安装了128M的内存条在板子上,我们也只能说8086拥有1MB的物理内存空间。同理我们现在大部分使用的是32位的机子,32位的386以上CPU就可以支持最大4GB的物理内存空间了。
先说说为什么会有虚拟内存和物理内存的区别。正在运行的一个进程,他所需的内存是有可能大于内存条容量之和的,比如你的内存条是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),如果页不在内存中,则用失效机制调入页,否则把页帧号和偏移量传给MMU(CPU的内存管理单元)组成一个物理上真正存在的地址,接着就是访问物理内存中的数据了。总结起来说,虚拟内存地址的大小是与地址总线位数相关,物理内存地址的大小跟物理内存条的容量相关。

欢迎关注公众号:

【Why】物理内存与虚拟内存区别与联系相关推荐

  1. 电脑物理内存与虚拟内存的区别与关系

    我们不能听到或看到内存二字,就认为是可以看到见,摸得到的东西.我们常听说的"虚拟内存"和 "物理内存"是不能混为一谈的.我们主要从以下方面进行探讨. 物理内存是 ...

  2. 物理内存和虚拟内存的区别 及 什么是虚拟地址空间

    物理内存(内存条):当打开程序时,系统会将这些程序加载到物理内存上. 虚拟内存(硬盘):虚拟的不是物理内存,而是代替物理内存行使存储的功能,物理内存的运行程序的功能是无法用虚拟内存来完成的. 物理内存 ...

  3. linux内存管理的主要概念是虚拟内存,有关linux内存管理机制的相关内容,linux物理内存和虚拟内存,深入了解Linux内存运行 ......

    在linux中空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然. 这是Linux内存管理的一个优秀特性,区别于Windows的内存管理. 主要特点: 无论物理内存有多大,L ...

  4. Linux 内存机制以及CPU、内存、硬盘的关系、物理内存以及虚拟内存的关系

    本文有些篇幅较长,但如果认真读下来,相信你会收获颇丰!! document linux内存机制 CPU 内存 虚拟内存 硬盘 物理内存 内存和虚拟内存 跟 Windows 完全不同的 Linux 内存 ...

  5. 【内存】物理内存和虚拟内存

    文章目录 物理内存和虚拟内存概念 linux内存运行机制 虚拟内存原理 物理内存和虚拟内存概念 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完 ...

  6. 谈谈Linux内核物理内存与虚拟内存之间的映射(超详细~)

    1.用户编制程序时使用的地址称为虚地址或逻辑地址,其对应的存储空间称为虚存空间或逻辑地址空间:而计算机物理内存的访问地址则称为实地址或物理地址,其对应的存储空间称为物理存储空间或主存空间. 2.虚拟存 ...

  7. 物理内存和虚拟内存的区别(浅析)

    首先,我们先简单理解一下而这之间概念区别: 物理内存: 值通过物理内存条而获得的内存空间,是计算机上最重要的资源之一,从本质来说,物理内存是代码和数据在其中运行的窗口,物理内存是和cpu实现交互的重要 ...

  8. 如何查看进程占用内存的大小以及物理内存和虚拟内存的区别

    概述 想必在linux上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题--你的程序在运行时占用了多少内存(物理内存)?通常我们可以通过top命令查看进程占用了多少内存.这里我们可以 ...

  9. linux如何使用物理内存_10 张图解再谈 Linux 物理内存和虚拟内存

    (给Linux爱好者加星标,提升Linux技能) 转自:LemonCoder 今天继续来学习Linux内存管理,什么?你更想学时间管理,我不配,抱个西瓜去微博学吧. img 言归正传,上一篇文章 别再 ...

最新文章

  1. 设计模式(享元模式)
  2. mysql insert 语句优化_分享insert into语句优化的小技巧
  3. 37.rust属性.txt
  4. 织梦无子栏目时禁止调用同级栏目
  5. zabbix+ldap认证故障解决一例
  6. python线程,进程,队列和缓存
  7. YUV420 总结 (YU12、YV12、NV12 和 NV21)
  8. 百度任玉刚写的对学习Android的理解
  9. 如何做关键词挖掘和关键词的选择?
  10. vista任务管理器_为什么我的Windows Vista资源管理器发送到菜单挂起或打开缓慢?...
  11. 【mysql表查询】某门课程的前三名(包含并列)
  12. web前端期末大作业 HTML+CSS+JavaScript仿安踏
  13. 爬虫--雪球网爬取(requests 和 request 的两种方法)
  14. 视觉-摄像机3】}摄像机镜头--焦距与视角(选相机和镜头)
  15. 动态代理ip的测试步骤有哪些?
  16. 算高差改正数的计算机程序,水准测量中的高差改正数应该怎么算?我们是六个点,而且每次只能观测两个点,也就是有六个测段...
  17. SQLite 命令行客户端 sqlite3 使用指南
  18. Qt version is not properly installed,please run make install
  19. linux分析gre中断问题,linux – 无法删除GRE隧道
  20. 1.1.7. Least Angle Regression(最小角回归)和 1.1.8. LARS Lasso

热门文章

  1. 7-12 谁是赢家 (10分)
  2. 关于思科模拟器7.3.1无法显示登陆窗口的解决方案
  3. 计算机学院自然语言处理专业,上海交通大学计算机科学与工程系(CSE)
  4. 小米笔记本桌面添加计算机,小米笔记本外接两个显示屏的设置与操作方法
  5. linux中fq格式转fa,利用linux处理fq/fa小练习
  6. SINS/GNSS组合导航:SINS误差模型
  7. 设计一个动物声音模拟器,可以模拟许多动物的声音
  8. 复制/粘贴丢失 换行符或者空格
  9. Flex主轴与交叉轴
  10. 逗号算命系统 v1.02