Chinaunix首页 | 论坛 | 博客
  • 博客访问: 433870
  • 博文数量: 103
  • 博客积分: 1455
  • 博客等级: 上尉
  • 技术积分: 1380
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-15 22:17
文章分类

全部博文(103)

文章存档

2013年(4)

2012年(99)

我的朋友

分类: LINUX

2012-09-29 14:06:52

线性地址逻辑地址和物理地址的区别:  线性地址是逻辑地址到物理地址变换之间的中间层,是处理器可寻址的内存空间(称为线性地址空间)中的地址。程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。   如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。不过,在开启分页功能之后,一个线性地址可能没有相对映的物理地址,因为它所对应的内存可能被交换到硬盘中。32位线性地址可用于定位4GB存储单元。   所谓物理地址,就是指系统内存的真正地址。对于32 位的操作系统,它的范围为0x00000000~0xFFFFFFFF,共有4GB。只有当CPU工作于分页模式时,此种类型的地址才会变得非常“有趣”。本质上,一个物理地址是CPU插脚上可测量的电压。操作系统通过设立页表将线性地址映射为物理地址。Windows 2K/XP所用页表布局的某些属性对于调试软件开发人员非常有用。   分页机制把线性地址空间和物理地址空间分别划分为大小相同的块。这样的块称为页。通过在线性地址空间的页与物理地址空间的页之间建立映射,分页机制可以实现线性地址到物理地址的转换。线性地址空间的页与物理地址空间的页之间的映射可根据需要来确定。  线性地址空间的任何一页线性地址空间的任何一页线性地址空间的任何一页线性地址空间的任何一页,可以映射为物理地址空间中的任何一页可以映射为物理地址空间中的任何一页可以映射为物理地址空间中的任何一页可以映射为物理地址空间中的任何一页。。。。            逻辑地址(Logical Address) 是指由程式产生的和段相关的偏移地址部分。例如,你在进行C语言指针编程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel保护模式下程式执行代码段限长内的偏移地址(假定代码段、数据段如果完全相同)。应用程式员仅需和逻辑地址打交道,而分段和分页机制对你来说是完全透明的,仅由系统编程人员涉及。应用程式员虽然自己能直接操作内存,那也只能在操作系统给你分配的内存段操作。         线性地址(Linear Address)程序地址加上段地址就成了线性地址 逻辑地址是段中的偏移地址  物理地址(Physical Address) 是指出目前CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了。
整体结构图
 
逻辑地址到线性地址的关系图
 
线性地址到物理地址的页表映射图
 
阅读(1785) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

momser2012-09-29 14:23:02

实在是没怎么搞懂