什么是逻辑地址,什么是物理地址,它们之间有什么关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是逻辑地址,什么是物理地址,它们之间有什么关系相关的知识,希望对你有一定的参考价值。
逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样)。应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是完全透明的,仅由系统编程人员涉及。应用程序员虽然自己可以直接操作内存,那也只能在操作系统给你分配的内存段操作。线性地址(Linear Address) 是逻辑地址到物理地址变换之间的中间层。程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。Intel 80386的线性地址空间容量为4G(2的32次方即32根地址总线寻址)。
物理地址(Physical Address) 是指出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了。虚拟内存(Virtual Memory) 是指计算机呈现出要比实际拥有的内存大得多的内存量。因此它允许程序员编制并运行比实际系统拥有的内存大得多的程序。这使得许多大型项目也能够在具有有限内存资源的系统上实现。一个很恰当的比喻是:你不需要很长的轨道就可以让一列火车从上海开到北京。你只需要足够长的铁轨(比如说3公里)就可以完成这个任务。采取的方法是把后面的铁轨立刻铺到火车的前面,只要你的操作足够快并能满足要求,列车就能象在一条完整的轨道上运行。这也就是虚拟内存管理需要完成的任务。在Linux 0.11内核中,给每个程序(进程)都划分了总容量为64MB的虚拟内存空间。因此程序的逻辑地址范围是0x0000000到0x4000000。有时我们也把逻辑地址称为虚拟地址。因为与虚拟内存空间的概念类似,逻辑地址也是与实际物理内存容量无关的。 逻辑地址与物理地址的“差距”是0xC0000000,是由于虚拟地址->线性地址->物理地址映射正好差这个值。这个值是由操作系统指定的
从一篇百度文库上赋值下来的,觉得说的挺好挺详细的,参考下 参考技术A 在写程序时用到的地址,是逻辑地址;
程序在计算机里执行时,用到的在内存条里的地址,是物理地址
举例,比如你去某公司应聘,先电话问清地址,然后写到一张纸上:XXXX房间,然后你去了公司,后看到在那个办公室门上头挂着牌子:YYYY房间。那么,写在纸上的地址就是逻辑地址,在现场门头上挂的地址就是物理地址
那么为什么一个是XXXX,一个是YYYY呢?
一般情况下,物理地址和逻辑地址不相同,程序编制完成之后,编译程序或者解释程序会自动将逻辑地址转化为物理地址 参考技术B http://baike.baidu.com/view/893778.htm
http://baike.baidu.com/view/883168.htm
这是百科里的介绍 我就不复制了
然后说下我自己的理解吧
在计算机存储单元中,是以字为单位存储的,而且数目众多,管理起来必须需要地址
逻辑地址为人可以理解的地址,分为段地址和基地址
段地址顾名思义,就是对大段的空间编排的地址如4G个字的内存空间,需要2^32个地址表示
把每2^16个空间分为一段,则一共有2^16个段,给每段一个地址,每段中每个单元一个偏移地址
则段地址1-2^16,确定大段位置,偏移址1-2^16就确定了单元位置
具体表示时 2^16 可用四位十六进制数表示
举例来说 实际物理地址 000a 0001 H (16进制的意思)的单元,是实际的地址
段地址000aH 偏移址0001 H ,这两个是逻辑地址,经过人为分段
实际中这样使用比较少 一般为段地址左移4位(乘以16)加上偏移址为物理地址,表示16M字空间
微机原理学得有点早了 可能有疏漏的地方 大概意思应该是对的
以上是关于什么是逻辑地址,什么是物理地址,它们之间有什么关系的主要内容,如果未能解决你的问题,请参考以下文章
域名管理常见问题:IP域名和DNS之间的区别和关系(中科三方)