文章目录

  • 一. 物理地址
    • 1. 基本概念
    • 2. 说明
  • 二. 逻辑地址
    • 1. 基本概念
    • 2. 说明
  • 三. 虚拟地址
    • 1. 为什么有虚拟地址(个人理解)
    • 2. 基本概念
    • 3. 说明
  • 四、小结

一. 物理地址

1. 基本概念

  1. 物理存储器(内存/主存/逻辑存储器):由微处理器外部地址总线寻址的存储器

    1. 这里的内存不特指计算机安装的内存条,而是指所有能被cpu直接寻址访问的存储器。包括内存条、显存和一些ROM
    2. 简单说:CPU把所有与cpu总线相连接并受其控制的的存储器,都看作一个统一的整体,对他们统一编址,这其中包括内存、显存、系统ROM等等,统称它们为存储器,存储器中按编址取一个字长的大小,就是一个存储单元。
  2. 物理地址物理存储器按8位的字节序列加以组织,每个字节有唯一的地址与之对应

  3. 物理地址空间物理地址的大小

    1. 物理地址是用外部地址总线寻址的,因此物理地址空间的上限受到总线条数限制,m条地址线对应的物理地址空间为2m2^m2m,物理地址范围0到(2m−1)0 到(2^m-1)0到(2m−1)
    2. 如果cpu工作在保护方式下,实际的物理地址空间除了地址线数量外,还受到系统配置的内存容量限制
    3. 物理地址空间大小不等于实际安装物理内存大小,它描述的是CPU的最大寻址能力

2. 说明

  1. 在CPU实模式下,没有分段或分页机制,Cpu不进行自动地址转换,这时程序员操作的就是物理地址
  2. 无论任何操作,最终都必须要得到物理地址才能在物理内存上进行操作。

二. 逻辑地址

后面会更详细地说明分段管理和逻辑地址,这里先简单引入一下

1. 基本概念

  1. 逻辑地址操作系统或应用程序面对的存储单元地址的表示形式。分段存储管理方式把内存划分为多个逻辑段(代码段、数据段、堆栈段等),从而把不同的数据存储隔离开。这种情况下,用 “段起始地址+段内偏移地址” 这种形式来描述数据地址就是很自然的,这就是所谓的逻辑地址,它的描述形式是段号:偏移地址

    1. 段号用来查找段的起始地址,它被存储在段寄存器中

      1. 实方式下,段号是段值
      2. 保护方式下,段号是段选择子
    2. 偏移地址/有效地址存储单元的物理地址与所在段起始地址的差值

2. 说明

  1. 逻辑地址是面向上层程序员的。用C语言声明一个char数组,我们说两个相邻元素间地址差1,这就是逻辑地址中偏移地址的体现。对于应用程序员或者说对于应用程序来说,他们只需要和逻辑地址打交道,分段分页机制、物理地址转换等更底层的内容对他们是透明的。
  2. 逻辑地址并不一定是元素存储的真实地址,即数组元素的物理地址(在内存条中所处的位置),并非是连续的,只是操作系统通过地址映射,将逻辑地址映射成连续的,这样更符合人们的直观思维
  3. 要注意的一点是,逻辑地址只是一个描述形式,cpu真正用来寻址的是虚拟地址,而虚拟地址是用逻辑地址形式描述的

三. 虚拟地址

1. 为什么有虚拟地址(个人理解)

  • 我们知道物理地址空间受限于地址线数目,但是逻辑地址的描述能力往往更强,可以描述的地址范围常会超过物理地址空间大小,这些多余的地址可以应用吗?如果只限于主存,当然不能,但是如果我们利用外部存储器(磁盘)的话情况就不同了。
  • 所谓虚拟存储器(虚拟内存),它由全部的主存和一部分磁盘空间组成。我们用虚拟地址指示虚拟内存的地址;用虚拟地址空间描述其尺寸,它的大小等于穷尽逻辑地址描述能力的空间大小,这往往比物理地址空间大许多。
  • 借助磁盘等辅助存储器来扩大主存容量,我们就可以编写内存需求更大的程序

2. 基本概念

  1. 虚拟存储器这不是任何实际的物理存储器,而是借助磁盘等辅助存储器来扩大主存容量,使之为更大或更多的程序所使用。
  2. 虚拟地址用于指示虚拟存储器的地址,它是用逻辑地址指示的
  3. 虚拟地址空间表示虚拟地址的范围,其大小为逻辑地址的描述能力极限大小

3. 说明

  1. 只有保护方式才支持虚拟地址,实方式是不支持的
  2. 前面说明过,在保护方式下的逻辑地址用段选择子指示段号,通常段选择子是16位的,其中14位表示地址信息,虚拟地址空间大小如下:
  3. 虽然虚拟地址空间很大,但用逻辑地址指示的一个虚拟地址取值仅限于物理地址空间,这还是由于cpu寻址能力的限制,一共就那么多地址线,你给他更大的地址根本输入不了啊。看到这里大家可能很奇怪,欸,不是说虚拟地址空间很大吗,这咋取值又局限在物理地址空间了?事实上,操作系统会给每个进程分配一块大小为物理地址空间大小的虚拟内存,各个进程之间相互独立,也就是说,甚至有可能两个进程同时请求访问了同一个虚拟地址。看起来会冲突?要知道CPU是通过时间片轮转的方法使不同的程序并发执行的,所以在某一时刻只有一个程序占据CPU资源。MMU(内存管理单元)负责把虚拟地址转换为物理地址,在每一个时刻,它会先在主存中寻找指定的数据,如果发现数据不对,就会触发内存缺页错误,这时就从磁盘中找到缺的页加入内存,如果内存空间不足,还会从内存中置换页出来,从而保证程序的正常执行。
    在别人的文章看到一个比喻挺有意思,搬过来

CPU只需要说找哪一个页面,MMU就将这个页面翻译成物理地址,再通过页面调度机制来讲不在内存中的页加入到内存中。我认为计算机使用的是一种各司其职的方法。CPU老大只需要虚拟地址中的一页,范围在0x00000000到0xFFFFFFFF,因为他的地址总线是32位,4G是他最大的能力,然后他就把任务分配给他的手下,CPU不需要知道他的手下是如何找到这一页,他只负责去要这一页和执行这些代码,然后他就和他的手下说“有招想去,没招死去”,他的手下必须要能找到这一页,然后内存非常有限,而CPU不管这个,只需要你能找到这一页让我执行就好,所以CPU的手下就将硬盘中的一部分当做内存,然后拿来骗CPU说,“这是我从内存中找到的”,然后CPU就去运行。如果访问的地方实在是不能找到,或者是没有权限,那么这个程序就真死了。程序员在开发的时候,因为程序员所编写的代码最终是要让CPU去执行,所以程序员也理所应当认为我有4G的内存空间,程序员把程序交给CPU,CPU就交给他手下。

四、小结

以下是我个人理解的几种地址之间的关系图,欢迎指正

我理解的物理地址、虚拟地址、逻辑地址相关推荐

  1. 通俗理解物理地址、逻辑地址、线性地址、虚拟地址、有效地址的区别

    物理地址:物理地址就是内存单元的绝对地址,比如你有一个4G的内存条插在电脑上,物理地址0x0000就表示内存条的第一个存储单元,0x0010就表示内存条的第17个存储单元,不管CPU内部怎么处理地址, ...

  2. 深入理解虚拟/物理地址转换,页表--基于ARMV8

    目录 背景 一.相关基础知识 1,MMU的作用 2,逻辑地址,虚拟地址,线性地址 二.页表转换寄存器描述符 1,页表/页目录结构 2,转换相关寄存器描述符 1.转换基址寄存器 2.转换描述符格式 3. ...

  3. 【菜鸟笔记】实际地址、物理地址、逻辑地址和有效地址

    菜鸟笔记 最近学习微机原理和接口技术,再一次重温了物理地址.逻辑地址等概念,但是仍对于这些概念有许多不理解,所以将他们记录下来,以备未来温习 概念 物理地址:物理地址就是存储器实际上的地址,是内存单元 ...

  4. 计算机物理地址和逻辑地址的区别和联系,物理地址和逻辑地址的区别

    今天学习啦小编给大家介绍一下物理地址和逻辑地址的区别.供大家参考! 物理地址和逻辑地址的区别 参考如下 MAC地址也叫物理地址.硬件地址或链路地址,由网络设备制造商生产时写在硬件内部.IP地址与MAC ...

  5. 【操作系统复习】物理地址虚拟地址

    [操作系统复习] 物理地址虚拟地址 物理地址和虚拟地址的区别 物理地址 逻辑地址 线性地址 为什么要分成物理地址和虚拟地址 物理内存及虚拟内存定义 为什么要有虚拟内存 虚拟内存的实现(可以在页式或段式 ...

  6. 物理地址与逻辑地址的关系

    物理地址与逻辑地址的关系 在传统的Linux x86 32位系统中,当内核模块的代码或线程访问内存时,代码中的内存地址是逻辑地址,当它与实际的物理内存地址相对应时,需要逐个映射该地址. 如果逻辑地址位 ...

  7. linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?进程虚拟地址4G指拥有4G的寻址能力,需要页表转换为实际物理地址,每个进程用到的内核是直接映射,地址的进程地址-3G的关系

    linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解? 问: linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解? 每个进程所拥有的4G独立的虚拟内存空间 ...

  8. c 取地址 虚拟地址 物理地址_通过linux0.11源码理解进程的虚拟地址、线性地址、物理地址...

    进程的地址有三种,分别是虚拟地址(逻辑地址).线性地址.物理地址.在分析之前先讲一下进程执行的时候,地址的解析过程.在保护模式下,段寄存器保存的是段选择子,当进程被系统选中执行时,会把tss和ldt等 ...

  9. 操作系统 内存碎片 cache替换算法 虚拟地址逻辑地址线性地址物理地址

    采用分区式存储管理的系统,在储存分配过程中产生的.不能供用户作业使用的主存里的小分区称成"内存碎片".内存碎片分为内部碎片和外部碎片. 内部碎片 内部碎片就是已经被分配出去(能明确 ...

最新文章

  1. linux下几种反弹Shell方法的总结与理解
  2. Latex: 设置 threeparttable footnote 行宽度
  3. 引号快捷键_就业有“位”来 能让你早下班的常用快捷键
  4. html中下边框过渡效果,CSS3 参与背景过度的属性有哪些(transition-property语法规则及多组过渡效果实例)...
  5. Redis学习---(7)Redis 字符串(String)
  6. Azure 中 Windows 虚拟机的大小
  7. minecraft java_minecraft java版本下载
  8. 搭建安卓开发环境并测试运行安卓开发环境
  9. 计算机专业注意身体,请注意身体 长时间使用电脑对身体的危害
  10. 华为老总任正非给公司患抑郁症员工的一封信
  11. 杰理之ANS 参数【篇】
  12. c语言if语句教学设计,if语句教学设计
  13. 讲一点有技术含量的东西(一)
  14. android蓝牙传文件开发,Android Bluetooth文件传输
  15. Variable Generator/dense/kernel already exists, disallowed.
  16. caffe层解读系列——Data以及ImageData层用法
  17. 10.23金油本周行情回顾;黄金原油下周行情策略附多空解套
  18. 2016计算机技能大赛,教育部关于公布2016年全国职业院校技能大赛获奖名单的通知...
  19. nginx实现vue的web页面项目集群负载
  20. mysql性能优化2

热门文章

  1. Kali-Linux-2021.1 root登录
  2. Linux下的shutdown命令,关机重启
  3. linux服务器安全管理工具,JShielder:一款自动化Linux服务器安全增强工具
  4. matlab非单位阶跃响应,【 MATLAB 】使用 filter 函数产生给定线性时不变系统的单位阶跃响应...
  5. mac修改vmware flusion网络适配器的nat配置
  6. 「专升本信息技术」计算机基础知识习题(2)
  7. RemoteView
  8. android view如何更新,android – 如何使用RemoteView更新通知?
  9. 品牌内容发现(二)Learning Subjective Attributes of Images from Auxiliary Sources
  10. Natas Wargame Level 13 Writeup(文件上传漏洞,篡改file signature,Exif)