码迷,mamicode.com
首页 > 其他好文 > 详细

内存管理中的三种地址

时间:2017-05-29 16:01:09      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:bottom   com   大型   address   indent   round   分段   映射   数据   

一、逻辑地址(有时也称虚拟地址)
  逻辑地址(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。是由于虚拟地址->线性地址->物理地址的映射正好差这个值,这个值是操作系统指定的。

内存管理中的三种地址

标签:bottom   com   大型   address   indent   round   分段   映射   数据   

原文地址:http://www.cnblogs.com/gavanwanggw/p/6918113.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!