登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

ideality

@linux c 编程@

 
 
 

日志

 
 
 
 

逻辑地址,线性地址,物理地址,虚拟地址看上去这回真的是懂了(转)  

2013-06-19 16:48:48|  分类: netfilter |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

linux使用的基本上都是虚拟地址,内核程序中用的是内核空间虚拟地址,应用程序中用的是用户空间虚拟地址。

 

逻辑地址就是虚拟地址,参照X86的cpu手册定义,逻辑地址的表示方式是 段地址:偏移地址,这里的逻辑地址就是偏移地址部分,段地址部分后面会提到。

 

物理地址可以理解为内存存储单元的地址,一一对应,对于32位系统支持4G最大。

 

线性地址是虚拟地址转换到物理地址的中间值,这个最难理解,也可以不用知道它的存在,忽略最简单。非要弄明白的话,就往下看。
段地址+偏移地址就是线性地址,也就是段地址+虚拟地址就是线性地址。为什么要+段地址,这个是X86的分段部件搞的鬼,只有加了才能符合X86CPU的寻址规则。内核空间和用户空间的段地址不一样,每个用户进程的段地址也不一样,这样就能产生不同的线性地址。

 

线性地址到物理地址的转换
线性地址分为3级,10bits + 10bits + 12bits
cr3寄存器存放 目录索引的地址
第一个10bits配合cr3寄存器的值用于用目录索引中查找出页表索引
第二个10bits用于从页表索引中查出页面基址
最后一个12bits用于页面中的偏址,加上页面基址得到物理地址

 

32位系统对于大于4G内存的支持
上面可以看出,32位系统最多支持4G内存,如果要支持大于4G内存,则要使用PAE,PAE支持的页式管理系统,负责把32位的线性地址映射到64GB物理空间的任何位置。

  评论这张
 
阅读(473)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018