免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 独孤九贱
打印 上一主题 下一主题

我理解的逻辑地址、线性地址、物理地址和虚拟地址(补充完整了) [复制链接]

论坛徽章:
0
41 [报告]
发表于 2008-01-21 11:22 |只看该作者
与君共勉,呵呵,学习了。

论坛徽章:
0
42 [报告]
发表于 2008-01-21 17:34 |只看该作者
很不错,学习了~~~

论坛徽章:
0
43 [报告]
发表于 2008-01-21 20:39 |只看该作者
写得很好 又容易看懂 呵呵 赞一个
lz是高手

论坛徽章:
0
44 [报告]
发表于 2008-01-22 14:19 |只看该作者

你的理解错误很多,居然将硬件的进步说成是冗余,可惜了。

从硬件设计的角度来看!
物理地址: 内存单元的编号,逻辑上是将将内存单元按照一定的度量单位划分,如字节,字等,80x86  可以按字节也可以按字编址。所谓的总线只是一个存取通路,插座相当于一个设备开关。地址空间是数据总线的宽度。
逻辑地址:也称相对地址,是与绝对地址(物理地址)相对的一个概念,是相对与某一位置开始编址。她存在的意义是记住程序和数据的相对位置。一般定义为CPU通过地址总线发出的地址。 程序装入到内存后就通过相关的硬件,主要是地址的加法器与一个相对位置相加得到绝对地址。相对的位置是存在段表和页表中的,通过相联查找获得。地址空间由用户定义
虚拟内存:说白了就是构造一个满足程序和用户需要的空间。程序员不用担心内存不够!也不用担心地址问题。只要关心程序的逻辑顺序,即逻辑地址。
虚拟地址:和逻辑地址是抽象和具体的关系,是逻辑地址的一个实例。
虚拟地址到物理地址变换:对于X86  目前有三种方式,页式,段式,段页式
页式:
地址映像:
   第一步 将用户程序按页的长度划分,长度固定。  划分了之后,就有了页的起始地址
      第二步 操作系统创建进程时,先查全局的页表,找了几页空闲的内存,也就有了物理的页的起始地址
      第三步 操作系统创建页表,一般有这么几项,物理页号, 用户页号 (o-n) 使用位等。 这样就建立了虚拟地址到物理地址的映射关系了。
地址变换:硬件根据cpu发出的逻辑地址(这里是虚拟地址)查表,得到物理的页号(高位地址),将物理页号加逻辑地址的地位(页内地址)就是物理地址了。一次查表,一次加法计算。比直接用物理地址编程效率要低很多。
段式:
虚拟地址划分  用户号+段号+段内偏移
地址映像:
   第一步 将用户程序分段,长度不固定。  划分了之后,就有了段的起始地址,和段的长度。
      第二步 操作系统,根据段长申请内存空间,也就有了段起始地址。
      第三步 操作系统创建段表,一般有这么几项,两个段起始地址, 段长。 这样就建立了逻辑段到物理段的映射关系了。
地址变换:INTEL X86是这样的, 有段寄存器堆,即段选择子,描述符是一致的。 先将段表基地址装入 LDT,(这里讨论的是一般用户程序),根据CPU 发出的逻辑地址得到段号, 加上LDT 当中的段表基地址得到一个逻辑段到物理段的映射项,读出物理段基地址,再加上段的偏移得到 物理地址 ,总共需要做两次加法,一次查表, 效率更低。
段页式: 即将程序中一段再分页,需要一个段表,一个页表,先查段表得到页表基地址,然后再页式变换。
对于这种三种变换方式的优点: 简化 编程,简化系统设计,太多了,
总结:  对内核编程人员的建议:  先对程序划分,再定义映射,设置寄存器,地址变换由硬件完成。

论坛徽章:
0
45 [报告]
发表于 2008-01-22 15:46 |只看该作者
好文,标记一下,赞一个

论坛徽章:
0
46 [报告]
发表于 2008-01-23 01:17 |只看该作者
原帖由 softchinacom 于 2008-1-22 14:19 发表
从硬件设计的角度来看!
物理地址: 内存单元的编号,逻辑上是将将内存单元按照一定的度量单位划分,如字节,字等,80x86  可以按字节也可以按字编址。所谓的总线只是一个存取通路,插座相当于一个设备开关。地址空 ...


没细看,但 LZ 写得还是不错滴,何以说错误很多呀,你说得也一踏糊涂

论坛徽章:
0
47 [报告]
发表于 2008-01-23 09:24 |只看该作者
原帖由 softchinacom 于 2008-1-22 14:19 发表
从硬件设计的角度来看!
物理地址: 内存单元的编号,逻辑上是将将内存单元按照一定的度量单位划分,如字节,字等,80x86  可以按字节也可以按字编址。所谓的总线只是一个存取通路,插座相当于一个设备开关。地址空 ...


1、如果你认为段式+页式不是Intel的冗余,不是为了向上兼容而保留,而是一种硬件进步,我虽然不赞成你的看法,但是我想听听你的理由——不过你的贴子中,并没有并于“进步”的原因解释,只是一大堆的名词解释。呵呵。而且,内容基本与偶是一致的,没有质的分歧;

2、Intel在后续CPU中,保留了段式映射结构,连他自己都说这只是一个兼容而不得已的原因(这个不权威哈,出处忘了,好像在N年前的一篇电脑杂志上看到的)

3、很多优秀的CPU,本身就没有,或者说是“有限支持”段式映射;

4、如果真要说是“进步”,那也是Intel一家的进步,从段式发展到支持页式——不过如果它不考虑兼容,完全可以舍弃段式。所以还是说不上“进步”。

呵呵……一家之言,仅供参考。

论坛徽章:
0
48 [报告]
发表于 2008-01-24 00:17 |只看该作者
lz写的好啊

论坛徽章:
0
49 [报告]
发表于 2008-01-24 09:57 |只看该作者

回复 #1 独孤九贱 的帖子

好文,mark一下,感谢lz

论坛徽章:
0
50 [报告]
发表于 2008-01-24 10:26 |只看该作者
好文,转载了
谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP