虚拟地址和物理地址的概念
    CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(Physical Address,以下简称PA),如下图所示。

物理地址示意图

如果CPU启用了MMU,CPU核发出的地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address,以下简称VA),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将虚拟地址映射成物理地址,如下图所示[1]。

虚拟地址示意图

MMU将虚拟地址映射到物理地址是以页(Page)为单位的,对于32位CPU通常一页为4K。例如,虚拟地址0xb700 1000~0xb700 1fff是一个页,可能被MMU映射到物理地址0x2000~0x2fff,物理内存中的一个物理页面也称为一个页框(Page Frame)。

内核也不能直接访问物理地址.但因为内核的虚拟地址和物理地址之间只是一个差值0xc0000000的区别,所以从物理地址求虚拟地址或从虚拟地址求物理地址很容易,+-这个差就行了

物理地址(physical address)
用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。
——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把这个数组叫做物理地址,但是事实上,这只是一个硬件提供给软件的抽像,内存的寻址方式并不是这样。所以,说它是“与地址总线相对应”,是更贴切一些,不过抛开对物理内存寻址方式的考虑,直接把物理地址与物理的内存一一对应,也是可以接受的。也许错误的理解更利于形而上的抽像。

虚拟内存(virtual memory)
这是对整个内存(不要与机器上插那条对上号)的抽像描述。它是相对于物理内存来讲的,可以直接理解成“不直实的”,“假的”内存,例如,一个0x08000000内存地址,它并不对就物理地址上那个大数组中0x08000000 - 1那个地址元素;
之所以是这样,是因为现代操作系统都提供了一种内存管理的抽像,即虚拟内存(virtual memory)。进程使用虚拟内存中的地址,由操作系统协助相关硬件,把它“转换”成真正的物理地址。这个“转换”,是所有问题讨论的关键。
有了这样的抽像,一个程序,就可以使用比真实物理地址大得多的地址空间。(拆东墙,补西墙,银行也是这样子做的),甚至多个进程可以使用相同的地址。不奇怪,因为转换后的物理地址并非相同的。
——可以把连接后的程序反编译看一下,发现连接器已经为程序分配了一个地址,例如,要调用某个函数A,代码不是call A,而是call 0x0811111111 ,也就是说,函数A的地址已经被定下来了。没有这样的“转换”,没有虚拟地址的概念,这样做是根本行不通的。
打住了,这个问题再说下去,就收不住了。

逻辑地址(logical address)
Intel为了兼容,将远古时代的段式内存管理方式保留了下来。逻辑地址指的是机器语言指令中,用来指定一个操作数或者是一条指令的地址。以上例,我们说的连接器为A分配的0x08111111这个地址就是逻辑地址。
——不过不好意思,这样说,好像又违背了Intel中段式管理中,对逻辑地址要求,“一个逻辑地址,是由一个段标识符加上一个指定段内相对地址的偏移量,表示为 [段标识符:段内偏移量],也就是说,上例中那个0x08111111,应该表示为[A的代码段标识符: 0x08111111],这样,才完整一些”

线性地址(linear address)或也叫虚拟地址(virtual address)
跟逻辑地址类似,它也是一个不真实的地址,如果逻辑地址是对应的硬件平台段式管理转换前地址的话,那么线性地址则对应了硬件页式内存的转换前地址。

-------------------------------------------------------------
CPU将一个虚拟内存空间中的地址转换为物理地址,需要进行两步:首先将给定一个逻辑地址(其实是段内偏移量,这个一定要理解!!!),CPU要利用其段式内存管理单元,先将为个逻辑地址转换成一个线程地址,再利用其页式内存管理单元,转换为最终物理地址。

这样做两次转换,的确是非常麻烦而且没有必要的,因为直接可以把线性地址抽像给进程。之所以这样冗余,Intel完全是为了兼容而已。

物理地址就是,机器内主存的地址,包括RAM和ROM
逻辑地址就是,程序运行在内存中,使用的地址。
虚拟地址就是,cpu支持的内存空间远远大于机器主存的大小,这些多出来的空间对于程序来说是可以用的,这个时候的所有地址都称为虚拟地址

物理地址:最小系统下的存储器的实际地址,一般只是由CPU内存控制器(地址线)可以管理的容量为最大地址,而实际上这个容量(由地址产生的)远大于实际存在的容量;实际的存储器容量所需要的地址(内存)控制器管理的容量;它的大小一般由芯片决定

逻辑地址:相对程序员而言使用的地址,或说程序无需知道具体的实际地址管理数,而只要在系统(操作)允许范围内使用就行了(这时使用的是一种算法控制下的地址,实际上它只是借用地址概念产生的程序运行模式),它所要说明的是方便,也就是一个线性的(最好)的程序(指令)排列方式。它的大小一般由操作系统决定
虚拟地址:将具有存储功能的所有存储器(不仅仅是最小系统概念下的),进行“统一”编址,而不考虑存储器之间的差异(快慢等),这时的地址是一个比逻辑地址理会数学化的编号(地址),它的大小等往往由应用程序决定

物理地址和虚拟地址的概念相关推荐

  1. 逻辑地址、线性地址、物理地址和虚拟地址初步认识

    早期的内存分配机制 在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址.当计算机同时运行多个程序时,必须保证这些 ...

  2. 逻辑地址、线性地址、物理地址和虚拟地址

    --引用地址:http://linux.chinaunix.net/bbs/thread-919019-1-1.html 要过年了,发个年终总结贴,只是个人理解,不包正确哈. 本贴涉及的硬件平台是X8 ...

  3. 树莓派IO口驱动代码的编写、微机总线地址、物理地址、虚拟地址、BCM2835芯片手册

    地址总线: 百度百科解释: 地址总线 (Address Bus:又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/ ...

  4. 逻辑地址、物理地址、虚拟地址

    文章目录 物理地址(physical address) 虚拟地址(virtual memory) 逻辑地址(logical address) 线性地址(linear address)或也叫虚拟地址(v ...

  5. 微机总线地址,物理地址 ,虚拟地址

    总线地址 地址总线 (Address Bus:又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/地方的实体位址. ...

  6. 树莓派高级开发------总线地址、物理地址和虚拟地址的认识

    一.微机总线地址 百度百科的解释:地址总线 (Address Bus:又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存 ...

  7. 内存管理:物理地址、虚拟地址、逻辑地址

    内存管理:物理地址.虚拟地址.逻辑地址 1.物理地址.虚拟地址.逻辑地址 1.1 物理地址和虚拟地址 1.2 管理物理地址和虚拟地址之间关系的方式 1.2.1 内存分段 1.2.2 内存分页 1.3 ...

  8. 浅谈物理地址、虚拟地址和逻辑地址

    从最根本的角度来看,地址只分为两类:物理地址.虚拟地址. 1.物理地址 CPU地址总线传来的地址,由硬件电路控制其具体含义.物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上(如显 ...

  9. 详解:物理地址,虚拟地址,内存管理,逻辑地址之间的关系

    物理地址: 这里说的物理地址是内存中的内存单元实际地址,不是外部总线连接的其他电子元件的地址! 物理地址属于比较好理解的,物理地址就是内存中每个内存单元的编号,这个编号是顺序排好的,物理地址的大小决定 ...

最新文章

  1. POJ 2104 K-th Number 划分树
  2. CUDA学习-计算实际线程ID
  3. C++ namespace 命名空间
  4. 如何在Ubuntu里安装Helm
  5. java创建activity视图_java-动态创建的视图id始终为null-findviewbyid不起作用
  6. LC67---删除有序链表中重复的元素---牛客---JAVA
  7. 不能以根用户身份运行 Google Chrome 浏览器
  8. selenium和PhantomJS的使用
  9. DevOps知识地图实践指南
  10. B站韩顺平java学习笔记(二十)-- 网络编程 章节
  11. 游戏帧数对比测试监控软件,8款游戏帧数对比实测 5800X多数超越11900K
  12. “5G+工业互联网”重点企业,苏州真趣成功入选
  13. 数学物理方法pdf_3位物理学家意外发现基础数学新方法,数学天才陶哲轩:我开始压根不相信...
  14. aso优化师是什么_来肯云商app官网下载_做ASO优化师,只懂刷榜就够了吗
  15. SQL 已死,NoSQL才是王道?醒醒吧,别瞎说八道了
  16. 三角形的几何公式大全_干货2020高中数学必备公式大全,吃透它们,数学再“捡”20分...
  17. java+ssm的班级同学录聚会报名网站
  18. 【MicroPython ESP32】I2C功能使用介绍
  19. 关于socket中的send函数
  20. uniapp 微信小程序 swiper修改指示点的位置和样式

热门文章

  1. php开源cms系统比较好,最受欢迎免费开源CMS建站系统排行榜
  2. CSS中的text-overflow属性详解 (控制文字在一行显示,超出部分加省略号)
  3. Java的Socket网络编程
  4. PC端查看WiFi密码
  5. 吴军:Google 中日韩文搜索算法的主要设计者,因《浪潮之巅》享誉业界 | CNCC 2018...
  6. 使iis支持php的方法简介
  7. 测试基础---软件开发生命周期
  8. 海康萤石的本地在线码流
  9. modbustcp测试工具怎么用_【转】年轻人不讲武德不仅白piao接口测试知识还白piao接口测试工具会员...
  10. 如何用计算机玩扫雷,扫雷怎么玩_玩好扫雷游戏的技巧是什么【图文】-太平洋电脑网PConline-太平洋电脑网...