逻辑地址与物理地址

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

逻辑地址与物理地址

时间: 2024-11-06 09:30:18

逻辑地址与物理地址的相关文章

内存管理笔记(分页,分段,逻辑地址,物理地址)【转】

本文转载自:http://www.cnblogs.com/felixfang/p/3420462.html 1. 物理地址和逻辑地址 物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址.在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端.这些数字被北桥(Nortbridge chip)映射到实际的内存条上.物理地址是明确的.最终用在总线上的编号,不必转换,不必分页,也没有特权级检查(no translation, no paging, no privile

逻辑地址、物理地址、线性地址

逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分.例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干.只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换):逻辑也就是在Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段.数据段如果完全一样).应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是

内存的段式管理和页式管理,逻辑地址-虚拟地址-物理地址

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

Linux逻辑地址与物理地址的key point

本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/32697735 以下的一段代码: #include <stdio.h> greeting() { printf("Hello, world!\n"); } main() { greeting(); } 经过gcc.ld(链接.编译)之后,生成一个elf可执行文件,再使用objdump处理,生成的反汇编代码如下: 08048368

Linux从逻辑地址到物理地址

转自:http://blog.chinaunix.net/uid-24774106-id-3427836.html 我们都知道,动态共享库里面的函数的共享的,这也是动态库的优势所在,就是节省内存.C 编译出来的可执行文件几乎都会用到libc的库,假如没有这个共享的技术,每个可执行文件都要占一份libc库的内存,这将是极大的内存浪费. 可是一直没搞明白,怎么样才能证明共享库里面函数的地址在物理内存层面是同一份?其实,这个问题的本质是程序里面的逻辑地址和物理内存地址之间是怎样映射的,说的再赤裸裸一点

Linux-0.11内核源码分析系列:关于线性地址,逻辑地址,物理地址的关系与区别

/* *Author : DavidLin *Date : 2014-11-22pm *Email : [email protected] or [email protected] *world : the city of SZ, in China *Ver : 000.000.001 *history : editor time do * 1)LinPeng 2014-11-22 created this file! * 2) */     以下所有描述基于Linux0.11内核及其所编写的年

逻辑地址和物理地址及线性地址

逻辑地址:是由程序产生与段相关的偏移部分,如:逻辑地址 = &变量的地址-该变量的段基地址 线性地址:线性地址=段基地址+变量相对于段基地址的偏移部分,如果内存不分页或层,那么线性地址就相当于物理地址 逻辑地址(logical address) Intel为了兼容,将远古时代的段式内存管理方式保留了下来.逻辑地址指的是机器语言指令中,用来指定一个操作数或者是一条指令的地址.以上例,我们说的连接器为A分配的0x08111111这个地址就是逻辑地址. --不过不好意思,这样说,好像又违背了Intel

逻辑地址 虚拟地址 物理地址 总线地址的区别

1 逻辑地址 逻辑地址是最为模糊的概念. <understanding the linux kernel>上的解释是与虚拟地址相关,基于硬件MMU与软件内存管理的一个概念,具体可以看UTLK的第二章内存寻址,有很详细的解释. 但是工作中之前用到的MIPS架构的处理器的解释却有出入,在<MIPS体系架构透视>一书中,逻辑地址是跟MMU无关的,MIPS地址空间划分中,Kseg0 Kseg1地址空间与真实的物理地址存在一个偏移量,也就是存在线性关系,是一种"简单的无须转换翻译&

逻辑地址和物理地址题目

作一个具体的例子.一道面试题目(腾讯) 页式存储系统的逻辑地址是由页号和页内地址两部分组成,地址变换过程如下图所示.假定页面大小为8K,图中所示的十进制逻辑地址9612经过地址变换后,形成的物理地址a应为十进制的所少? 分析如下: 逻辑页号 = 9612 / (8 × 1024) = 1 页内偏移 = 9612 % (8 × 1024) = 1420 逻辑地址的页号1对应物理地址页号3, 因此物理地址 = 3 × 8 × 1024 + 1420 = 25996