• 内存管理中的三种地址


    一、逻辑地址(有时也称虚拟地址)
      逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分。

    比如在C语言指针编程中,能够读取指针变量本身值(&操作)。实际上这个值就是逻辑地址,它是相对于当前进程数据段的地址,和绝对物理地址无关。

      仅仅有在Intel处理器的实模式下,逻辑地址才和物理地址相等(由于实模式没有分段或分页机制,CPU不进行自己主动地址转换)。逻辑地址也就是在Intel 处理器的保护模式下,程序执行代码段限长内的偏移地址(假定代码段数据段全然一样)。
      CPU启动保护模式后,程序执行在虚拟地址空间中。注意,并非全部的“程序”都是执行在虚拟地址中。

    CPU在启动的时候是执行在实模式的。Bootloader以及内核在初始化页表之前并不使用虚拟地址,而是直接使用物理地址的。

      应用程序仅需与逻辑地址打交道,而分段和分页机制系统编程涉及,应用程序尽管能够直接操作内存。可是也仅仅能在操作系统分配的内存段中操作。

    注:
    实模式:指寻址採用和8086同样的16位段和偏移量。最大寻址空间1MB(20根地址总线寻址),最大分段64KB(寄存器为16位)。能够使用32位指令,32位的x86 CPU用做快速的8086。

    保护模式:寻址採用32位段和偏移量,最大寻址空间4GB,最大分段4GB (Pentium Pre及以后为64GB)。在保护模式下CPU能够进入虚拟8086方式,这是在保护模式下的实模式程序执行环境。
    
    二、线性地址
      线性地址(Linear Address)是逻辑地址到物理地址转换的中间层。

    程序代码经编译后会产生逻辑地址,或者说是段中的偏移地址,加上对应段的基地址就生成了一个线性地址。

      若启用了分页机制,则线性地址会再此转换产生一个物理地址。

    若没有启用分页机制。则线性地址就是物理地址。Intel 80386的线性地址空间容量为4G(2的32次方,即32根地址总线寻址)。 三、物理地址

      物理地址(Physical Address)是指出如今CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的终于地址。若启用了分页机制,则线性地址会使用页文件夹和页表中的项转换为物理地址。

    若没有启用分页机制。则线性地址直接就是物理地址。

    四、虚拟内存
      虚拟内存(Virtual Memory)是指计算机呈现出比实际拥有的内存大得多的存量。因此它同意程序猿编写并执行比实际系统拥有的内存大得多的程序。这使得很多大型项目也能够在具有有限内存资源的系统上实现。一个非常恰当的比喻是:你不须要非常长的轨道就能够让使列火车从上海开到北京,仅仅须要比較长的两段铁轨(比方说3公里)就能够完毕这个任务。採取的方法是把后面执行过的的铁轨立马铺到火车的前面,仅仅要操作的足够快列车就能像在一条完整的轨道上执行一样。这也就是虚拟内存管理须要完毕的任务。在Linux 0.11内核中,为每一个“程序”(进程)都划分了总容量为64MB的虚拟内存空间。因此程序的逻辑地址范围是0x0000000到0x4000000。
      有时我们也把逻辑地址称为虚拟地址,由于与虚拟内存空间的概念类似,逻辑地址也是与实际物理内存容量无关的。

    逻辑地址与物理地址的“差距”是0xC0000000。是由于虚拟地址->线性地址->物理地址的映射正好差这个值,这个值是操作系统指定的。

  • 相关阅读:
    大道至简读后感--吴占鑫
    易达项目第一次冲刺周期第九天
    易达项目第一次冲刺第八天
    易达项目第一次冲刺第七天
    易达项目第一次冲刺周期第六天
    易达项目第一次冲刺周期第五天
    易达项目第一次冲刺周期第四天
    搜狗输入法软件产品评价
    易达项目的工作进程第三天
    典型用户与用户场景
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6918113.html
Copyright © 2020-2023  润新知