鱼C论坛

 找回密码
 立即注册
查看: 3060|回复: 11

[争议讨论] 请高手讨论!关于寻址能力的!!!

[复制链接]
发表于 2013-6-12 19:55:09 | 显示全部楼层 |阅读模式
1鱼币
我在网上摘抄的原文内容如下:最近这几天在CPU超频版发了个悬赏贴,特意看看有多少人认为CPU的位宽意味着寻址能力,结果发现也有相当一部分人被误导!请注意:2^CPU位宽次方这种计算方法是明显错误的!
      系统上也是,一早就有技术支持64G内存,只不过微软为钱,没在32位的桌面级电脑上允许那项功能!


      先讲CPU寻址能力!

一般厂商标示几多位CPU是说CPU的运算位宽!

而CPU的位宽一般是以 min{ALU位宽、通用寄存器位宽、数据总线位宽}决定的!也就是说CPU由ALU、通用寄存器、数据总线三者之中最少的位宽决定!所以CPU位宽与其寻址能力并不是挂钩的!
      就正如我上边提示过的16位CPU能上1M的内存(这是本人一个笔误,应该是写8086 CPU),1M刚好是20位,这就已经说明CPU位宽与寻址能力的关系!寻址能力未必一定和CPU位宽相同!

      因此某些媒体几年前曾经说过(最近由于与网友中山狐讨论开一些问题而讲起PAE而记起来的),而且在网络上也流传得比较广泛的一个理论:现时CPU都是32位,所以寻址能力是2^32=4G这种说法是存在偏差的!
      再有!有的媒体曾经64位CPU最大的好处是支持更大的内存这也是一个典型的错误!在AMD K8时代引入64位后,AMD的U寻址位就达到物理寻址40多位,而INTEL在p4 6系列之后物理寻址寻址能力亦达到40位,这大概是1TB,而如果是64位寻址应该是16EB,所以,以CPU位宽衡量CPU寻址能力是一个典型的错误!

     有一个细心的人兄还发现其实我这篇文章中貌似是突出了32位这个词而虚化了CPU这个词!的确,我就是按当年那些文章那种说法而提出这问题的,目的就是想看看多少人被人误导!结果在这贴中也看到比例也不在少数(虽然不占大部分,但是人数也不少!)
      事实上CPU寻址能力因每种CPU设计不同而不同!就正如说32位的X86CPU,其实就在PentiumII是引入了36位的扩展PAE机制(Physical Address Extention)地址位来支持64G内存(源于当时服务器的问题),正常情况下也是用32位寻址,但通过设置相应的寄存器(没记错是cr4)的相应位激活PAE就可以支持64位寻址了!
      所以,请记住:每个CPU的寻址能力是看其设计的!而单纯以CPU位宽来看待该CPU寻址能力(就是上边红色字的那种寻址能力为2的CPU位宽次方的说法是错误的!

     

                               
登录/注册后可看大图
上边讲到PentiumII通过设置控制寄存器来实现36位寻址,而正常情况下就32位寻址,而且能与前面的架构兼容!

      这样不得不惊叹那些硬件设计人员那聪明的脑代,在设计时就想好了可扩充性,在一早就预想到将来会是一个高速、大容量的时代,为当时的奔腾CPU引入了一系列的东西!首先是32位运算能力,另外是为CPU引入32位地址总线,而且还引入MMU(分页单元),使到CPU对物理内存进行段页式管理!这种方式对内存的管理相比于传统方式是更为安全、有效的!而这时,CPU是采用二级分布制:页目录(在线性地址中占10位)->页表(10位)->内存页表页(12位),之后,再在页表项入边才是相应的空间!这样CPU就访问2^10*2^10*2^12=4GB的内存了(嘿嘿,是否有点似曾相识

                               
登录/注册后可看大图
)!
      

                               
登录/注册后可看大图


      但因为INTEL面临服务器方面内存容量问题,就开始想办法了,于是,设计师开始想办法,但由于前边那设计的基础,他们很快就想到了,加多一级页表项,并加入相应控制寄存器,对其进行访问控制!这样,就可以对前的架构进行兼容,又能够在特殊情况满足要求哦!这套机制到现时还在用哦,目前最新的X86 CPU(扣肉架构、K8的后代物理寻址大概都在40位左右,但要兼容32位系统,所以还在用这套机制!)。

       讲完硬件,当然要讲软件了,系统上一般是如何实现PAE呢,当然对硬件方面那聪明的设计是依样画葫了,最基本的手段是利用二进制在高位上增加0对数的大小是没影响这种想法,在算法上就直接增加位数来页表级数并实现虚存管理(这个与虚拟缓存有关系,但不相同)!然后对利用嵌入汇编对相应寄存器进行判断,一但发现不可用就将相应页置0,嘿嘿,这招好使好用喔!就算64位寻址都通杀!这是最基本的,还有其它方面的一些处理!例如设置一些状态位之类的操作和开了PAE后那些页的数据长度上是有变化的!LINUX内核就采用这种方法的,微软的嘛因为非开源,不知道(即使你知道微软的API,那也仅仅是函数接口,内部实现不可能太清楚)。
      再说说关于32位系统开了PAE性能会下降这个话题吧!个人结合看过的相关资料认为:如果是4G以下(包含4G),如果开PAE,内存性能是很有影响的,因为开了PAE,在系统上要加多几级页目录,这样增加了映射次数,减低性能情况明显!相对地,因为分页单元和CPU是同速率运行,因此影响相对是极少极少的!内存2G比4G差最主要是因为在操作系统上的问题!


          总结性发言:CPU所标示是多少位,这个与其支持内存容量没有必然关系!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-6-13 13:42:26 | 显示全部楼层
这个沙发自已先坐了,呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-15 10:07:27 | 显示全部楼层
过来学习一下。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-17 15:25:43 | 显示全部楼层
我也来个沙发吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-6-17 18:09:26 | 显示全部楼层
向往青莲 发表于 2013-6-17 15:25
我也来个沙发吧

你老人家也来了!难得啊:lol
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-17 19:19:42 | 显示全部楼层
隨鈊乄鎍慾 发表于 2013-6-17 18:09
你老人家也来了!难得啊

:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(:'(你不要这么说嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-6-19 18:34:41 | 显示全部楼层
向往青莲 发表于 2013-6-17 15:25
我也来个沙发吧

向你请教一个问题。我现在零基础学习汇编学完了。接下来我是先学C语言还是学习WIN32汇编好呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-20 00:49:15 | 显示全部楼层
隨鈊乄鎍慾 发表于 2013-6-19 18:34
向你请教一个问题。我现在零基础学习汇编学完了。接下来我是先学C语言还是学习WIN32汇编好呢?

都要学  不过建议先学C  再学win32汇编
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-6-20 09:10:42 | 显示全部楼层
向往青莲 发表于 2013-6-20 00:49
都要学  不过建议先学C  再学win32汇编

哦,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-20 22:16:10 | 显示全部楼层
谢谢,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-10 11:31:22 | 显示全部楼层
所以楼主想问什么啊???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-10 19:49:22 | 显示全部楼层
牡丹花下死做鬼 发表于 2013-8-10 11:31
所以楼主想问什么啊???

我只是想说CPU由ALU、通用寄存器、数据总线三者之中最少的位宽决定!而不是小甲鱼老师讲的是由它的位宽决定寻址能力的?(零基础学习汇编中的视频讲解的)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 05:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表