• home > theory > CST > Constitution >

    CPU位/字长/机器字长/寻址空间/地址总线?没有64位以上cpu?

    Author:zhoulujun@live.cn Date:

    世界上第一款cpu intel4004是4位cpu。8086是16位。出了64位处理器后,为什么不在出128位?

    CPU的位和字长

    在数字电路和电脑技术中采用二进制,代码只有“0”和“1”,其中无论是 “0”或是“1”在CPU中都是 一“位”。

    字长

    CPU在单位时间内(同一时间)能一次处理的二进制数的位数叫字长

    所以能处理字长为8位数据的CPU通常就叫8位的CPU。同理32位的CPU就能在单位时间内处理字长为32位的二进制数据。

    字节和字长的区别

    由于常用的英文字符用8位二进制就可以表示,所以通常就将8位称为一个字节。字长的长度是不固定的,对于不同的CPU、字长的长度也不一样。8位的CPU一次只能处理一个字节,而32位的CPU一次就能处理4个字节,同理字长为64位的CPU一次可以处理8个字节。

    存储单元? 

    存储单元一般应具有存储数据和读写数据的功能,一般以8位二进制作为一个存储单元,也就是一个字节。每个单元有一个地址,是一个整数编码,可以表示为二进制整数。

    程序中的变量和主存储器的存储单元相对应。变量的名字对应着存储单元的地址,变量内容对应着单元所存储的数据

    计算机最小的单位是位(bit),每8位组成一个字节(Byte),字节是存储器的最小存储单元。 

    机器字长与存储字长

    • 机器字长:机器一次所能处理的字长位数(个人理解,课本上:CPU一次能处理数据的位数,通常与CPU的寄存器的位数有关)

    • 存储字长存储器中一个存储单元(存储地址)所存储的二进制代码的位数,即存储器中的MDR的位数

    先说下,冯诺依曼机中,指令和数据同等重要,都存放在存储器中,并可按地址寻访。

    • 指令字长是计算机指令字的位数

    • 数据字长是计算机数据存储所占用的位数

    早期计算机的存储字长一般和机器的指令字长与数据字长相等,故访问一次贮存便可取一条指令或一个数据,随着计算机应用范围的不断扩大,三者可各不相同,但它们必须是字节的整数倍。

    机器字长是指该计算机能进行多少位二进制数的并行运算,实际上是指该计算机中的运算器有多少位,通常计算机的数据总线和寄存器的位数与机器字长一致。如某机器字长16位,表示该机器中,每次能完成两个16位二进制数的运算。由于参加运算的操作数和运算结果既可存放在处理器内部的寄存器中,也可存放在主存储器中。因此,机器字长既是运算器的长度,也是寄存器的长度,一般情况下,它也是存储器的字长。通常,机器字长越长,计算机的运算能力越强,其运算精度也越高

    衡量机器字长的单位可用“位(bit)”,位是计算机内最小的信息单位,8位构成一个“字节(byte)”,现代计算机的机器字长一般都是8位的整数倍,如8位、16位、32位、64位和128位等,即字长由2个字节、4个字节、8个字节或16个字节组成,所以也可用“字节”来表示机器字长。

    至于为什么说16根地址总线的寻址空间为 2的16次方 = 64K(B),是因为字节(B)是内存的最小存储单元,每个地址总线可以对2个存储单元寻址(2B),所以16根地址总线可以寻址 2B的16次方 = 64K(B); 

    32根地址总线的寻址空间是 2B的32次方 = 4GB;这也是为什么32位地址总线的系统的最大能搭配4GB内存的原因:再多的话CPU就找不到了。

    地址代码与寻址

    地址码

    存储器的个单元有一个地址,是一个整数编码,可以表示为二进制整数。

    内存寻址

    在使用80x86微处理器时,内存地址分为三个不同的地址:逻辑地址,线性地址,物理地址。

    寻址空间

    寻址空间一般指的是CPU对于内存寻址的能力。通俗地说,就是能最多用到多少内存的一个问题。数据在存储器(RAM)中存放是有规律的 ,CPU在运算的时候需要把数据提取出来就需要知道数据在那里 ,这时候就需要挨家挨户的找,这就叫做寻址,但如果地址太多超出了CPU的能力范围,CPU就无法找到数据了。 CPU最大能查找多大范围的地址叫做寻址能力 ,CPU的寻址能力以字节为单位。

    计算机的寻找范围由总线宽度(处理器的地址总线的位数)决定的,也可以理解为cpu寄存器位数,这二者一般是匹配的。

    寻址空间=处理器的地址总线的位数=cpu寄存器位数

    地址总线为N位(N通常都是8的整数倍;也说N根数据总线)的CPU寻址范围是2的N次方字节,即2^N。

    CPU寻址

    实模式寻址

    实模式也称为实地址模式

    由于实模式下,任何一个进程都能够访问从段寄存器所确定的基地址进程的64K字节的的连续地址空间,并且可以随意更改段寄存器的内容从而达到访问内存中任一个单元,而不受到任何限制,这种方式缺乏对内存访问的限制,或者说保护,而没有保护,就谈不上什么内存管理,也谈不上什么现代意义上的操作系统。

    段式存储管理

    保护模式中,内存的管理模式分为两种,段模式和页模式,其中页模式也是基于段模式的。也就是说,保护模式的内存管理模式事实上是:纯段模式和段页式。

    段选择器:

    32位汇编中16位段寄存器(CS、DS、ES、SS、FS、GS)中不再存放段基址,而 是段描述符在段描述符表中的索引值,D3-D15位是索引值,D0-D1位是优先级(RPL)用于特权检查,D2位是描述符表引用指示位TI,TI=0指 示从全局描述表GDT中读取描述符,TI=1指示从局部描述符中LDT中读取描述符。这些信息总称段选择器(段选择子).

    段描述符:

    8个 字节64位,每一个段都有一个对应的描述符。根据描述符描述符所描述的对象不同,描述符可分为三类:储存段描述符,系统段描述符,门描述符(控制描述 符)。在描述符中定义了段的基址,限长和访问内型等属性。其中基址给出该段的基础地址,用于形成线性地址;限长说明该段的长度,用于存储空间保护;段属性 说明该段的访问权限、该段当前在内存中的存在性,以及该段所在的特权级。

    可以参看《X86 CPU段式与页式存管分析》、《CPU和内存之间——地址映射

    页式管理

    页式管理的基本原理将各进程的虚拟空间划分成若干个长度相等的页(一般为4K),页式管理把内存空间按页的大小划分成片或者页面(page frame),然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题

    逻辑地址

    包含在机器语言指令中用来指定一个操作数或一条指令的地址,每个逻辑地址都由一个段和偏移量组成,表示为[段标识符:段内偏移量]。例如,在C/C++程序中我们使用指针对变量地址操作,该地址就是逻辑地址(准确的应该说是逻辑地址的段内偏移量)。对应上述段式管理,逻辑地址是段式管理转换前的程序地址。


    物理地址

    用于内存芯片级内存单元寻址,与处理器和CPU连接的地址总线相对应。一般情况下,我们说的计算机内存条中的内存就是它(虽然不准确)。

    有了上述的基本概念后,很显然,CPU将一个虚拟内存空间中的地址转换为物理地址,需要进行两步:首先将给定一个逻辑地址,CPU要利用其段式内存管理单元,先将每个逻辑地址转换成一个线程地址,再利用其页式内存管理单元,转换为最终物理地址。这就是我们所知道的段页式管理,这样两次转换的好处可以克服段式管理和页式管理的缺点。


    线性地址

    线性地址同逻辑地址一样也是不真实的地址。对应上述页式管理,线性地址是页式管理转换前的地址

    也称为虚拟地址,它是一个32位无符号整数,故可以用来表达高达4GB的地址。



    地址总线与数据总线

    地址总线-AB

    地址总线 (Address Bus;又称:位址总线) 属于一种电脑总线 (一部份),是由CPU 或有DMA 能力的单元,地址总线用来沟通这些单元想要存取(读取/写入)电脑内存元件/地方的实体位址。地址总线是专门用来传送地址的,由于地址只能从CPU传向外部存储器或输入输出端口,所以地址总线总是单向三态的,这与数据总线不同

    地址总线的位数决定了CPU可直接寻址的内存空间大小,比如8位微机的地址总线为16位,则其最大可寻址空间为2^16=64KB,16位微型机的地址总线为20位,其可寻址空间为2^20=1MB。一般来说,若地址总线为n位,则可寻址空间为2^n字节。地址总线的宽度,随可寻址的内存元件大小而变,决定有多少的内存可以被存取。

    数据总线-DB

    数据总线DB(DataBus)用于传送数据信息。数据总线是双向三态形式的总线,即它既可以把CPU的数据传送到存储器或输入输出接口等其它部件,也可以将其它部件的数据传送到CPU

    数据总线的位数是微型计算机的一个重要指标,数据总线通常与微处理的字长相一致。例如Intel8086微处理器字长16位,其数据总线宽度也是16位。需要指出的是,数据的含义是广义的,它可以是真正的数据,也可以是指令代码或状态信息,有时甚至是一个控制信息,因此,在实际工作中,数据总线上传送的并不一定仅仅是真正意义上的数据。

    控制总线-CB

    用来传送控制信号和时序信号。控制信号中,有的是微处理器送往存储器和I/O接口电路的,如读/写信号,片选信号、中断响应信号等;也有是其它部件反馈给CPU的,比如:中断申请信号、复位信号、总线请求信号、限备就绪信号等。因此,控制总线的传送方向由具体控制信号而定,一般是双向的,控制总线的位数要根据系统的实际控制需要而定。 


    16位、32位、64位通常指的是什么?

    8位也就是CPU在一个时钟周期内可并行处理8位二进字符0或是1,那么以此类推,64位就64位二进制.

    8位的CPU一次只能处理一个字节而32位的CPU一次就能处理4个字节,同理字长为64位的CPU一次可以处理8个字节

    从数据计算上来讲理论上64位比32快一半。但因为电脑是软硬相配合才能发挥最佳性能的.所以操作系统也必须从32位的到64位的,而且系统的硬件驱动也必须是64位的.

    在64CPU的计算机上要安装64位操作系统64位的硬件驱动,32位的硬件驱动是不能用的,只有这样才能发挥计算机的最佳性能.如果64CPU装32操作系统的话,那性能不会有明显的提升。


    为什么是2的N次方,而不是其他数的N次方?

    因为计算机是采用二进制计算的。 

    假设一台计算机,它只有1根地址线,请问它最多能对几个存储单元寻址?

    答案是:2个

    因为在任何2进制计算机中,所有物理元件只有 0、1两种状态,对应这个例子,我们假设已经把这唯一的一根地址线与两个存储单元a和b连上了,那么究竟怎么确定何时读a何时读b?有一个办法,当地址线上的电压是高电压时我们读a,相反是低电压时,我们读b。如此一来,一根地址线的情况下,只能对2个存储单元进行寻址 

    依次类推,2根地址线时可以对4个存储单元进行寻址,对应的电压情况可以是:低低,低高,高低,高高;继续想下去,3根地址线就可以对8个存储单元进行寻址(3个1和3个0不同组合情况:111、110、100、000、101、100、001、011),4根就是16个,也就是说,

    当有n根地址线时,可以对2的n次方个存储单元进行寻址

    一根线是怎么连接到两个存储单元的?好像不同于一根电话线吧,他有两个线芯或才网线,有八个小线(线芯)? 

    为什么计算机采用二进制?

    • 技术实现简单:计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用1和0表示。

    • 简化运算规则:两个二进制数和、积运算组合各有三种,运算规则简单,有利于简化计算机内部结构,提高运算速度。

    • 适合逻辑运算:逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好与逻辑代数中的“真”和“假”相吻合。

    • 易于进行转换:二进制与十进制数易于互相转换。

    • 抗干扰能力强:用二进制表示数据具有抗干扰能力强,可靠性高等优点。因为每位数据只有高低两个状态,当受到一定程度的干扰时,仍能可靠地分辨出它是高还是低。 

    地址总线



    为什么没有64位以上的cpu

    世界上第一款cpu是英特尔的4004,是4位cpu。这个世界是1971

    到1978推出大名鼎鼎的8086,16位的cpu……

    …………不过那时候,那时候咋没都没有生…文革什么的,高这些还不如买茶叶蛋!

    ——才刚刚开始改革开放呢…

    按接触的也就是window 95,32位,奔腾,到后面的 x64,印象没有什么深……

    但那么多年过去,128位cpu一直是口号中……

    或者在xxx网站。论坛上,唧唧歪歪……

    还有什么国产 重大突破 比如:大连-1  128位cpu,世界————(你懂的的,当年的汉芯,陈进叫兽狠狠第伤害了我……稚嫩心灵!

    我觉得,目前情况来讲……

    128位cpu,这10年普及的可能性为0……because:

    我们为什么要换64位cpu,或者为什么要x64 系统?

    因为,32位用不了4g以上内存

    为什么用不了4g以上内存,寻址空间不够……

    32位地址总线可以支持的内存地址代码是4096MB,也就是有4GB的地址代码,可以编4GB个地址。这4GB个地址码正好可以分配给4GB内存。但是,这4GB个地址码不能全部分配给安装在主板上的物理内存。因为个人电脑还有很多设备需要地址代码,以便CPU可以根据地址码找到它们,同时CPU和这些设备交换数据需要暂时存放数据的存储器——寄存器,这些寄存器也需要地址代码。比如硬盘控制器、软驱控制器、管理插在PCI槽上的PCI卡的PCI总线控制器,PCI-E总线控制器和PCI-E显卡,它们都有寄存器都需要系统分配给它们地址代码。这些地址由系统分配,电脑用户在使用中感觉不到。这样一来,当我们为电脑插上总容量为4GB的内存时,就有一部分内存分配不到地址代码而不能使用。

    64位的寻址能力已经足够

    64位的寻址能力是2^64字节,大约是1.84467441 × 10^19 字节,如果你对这个科学计数法表示的数字没什么感觉,我用另外一种写法:18.45 EB 也就是大约18200000 TB,如果说这个不够用,那你需要的不是人类目前的硅芯片计算机,你需要求助于E.T.。

    使用大地址空间有几个额外的问题,尤其是对RISC处理器来说,会带来致命的性能问题。很多用户,尤其是初级的计算机用户,并不知道RISC这四个字母下隐藏的计算机哲学,或者说艺术:所有的OP code都是定长。以POWER为例,访问32位的常量地址,需要分两次计算16位的地址,因为OP code中只有16bits来存放这样的数据,64位则需要四个OP存放。而在CISC处理器中,地址可以直接编码在指令里,导致指令明显变长,比如32位的跳转通常是5个字节,而64位下面甚至需要15个字节。这只是问题的开始:随着使用的OP的增多,对CPU总线和cache的压力也越来越大,原本一个时钟周期能fetch两条指令,现在可能一条都取不到;原本可以存放两条、四条指令的cache空间,现在只能存放一条指令。

    增大位数也带来更大的性能消耗

    另一个原因是程序中的数据结构。学过计算机科学初级内容的人都知道,现代数据结构中最最最最最基本的要素是:指针。

    增加运行时的内存消耗与cache压力

    大多数关键的数据结构都离不开指针:链表、树……,对于程序来说,从32位编译成64位会大幅增加运行时的内存消耗,道理很简单,指针本身变长了,存储指针自身需要的空间增加了。变成128位是什么样呢?可想而知。同样访问内存中的数据需要更多的时间,因为数据本身变大了,假设一个结构体里面有两个指针,32位下编译出来需要8个字节,64位就需要16个字节(假设4字节对齐)。同理,cache面临更大的压力。

    硬件设计难以支持

    上面是软件上的,或者说是理论上的,那么我们来看看硬件上的问题。既设我们需要制造“128位”的通用处理器,有128位的地址总线,128位甚至256位的数据总线,那么什么样的封装能满足要求呢?在现代处理器3~~4G的这个工作频率上,安排这么大量的总线连接,那么保守估计需要1500~~2500个针脚的封装才能稳定工作(需要大量的供电和接地针脚来平衡电流和改善信号质量),而且这么高密度的,还有大电流,估计要12~24层布线,设计生产这样的一块PCB本身就是挑战电子制造业,至于良品率和价格就不敢想了。

    再者:假设用户需要算两个32位整形数相乘, 对于32位cpu或64位cpu, 都需要计算1次。

    64位已够用

    假设用户需要算两个64位整形数相乘, 对于32位cpu, 需要计算4次, 对于64位cpu仅需一次.

    对于绝大多数数据, 32位整形计算足矣, 如果用户非要用64位整形数计算, 64位cpu才有优势.但是,我们编程中,一般也就 int (2^31-1 ~ -2^31)不管他了吧!—— 一般科学计算64位就够了. 普通的x86 CPU也就支持80位, 也没见科学家反应精度低, 所以, 与计算吞吐量(即Flops)相比, 精度需求本不大.

    128位处理器最大寻址是3*10^38,地球上总原子个数大概在10^48左右(可能有一定误差),换句话说,如果地球上每个原子都用来存储1字节,那么整个地球上的所有资源加起来,能造出的用满128位的存储器大概也就是10^10个,大概100亿个,就算是有一两个数量级的误差,现在智能设备+电脑的总量也差不多有100亿个了吧。况且人类还没办法做到1个原子保存一个字节。


    所以,除非把地球拆了,否则地球上的有限资源注定了真正的128位计算机不会大量普及。


    至于256位处理器,还请有时间的人算算太阳系的资源够不够用。

    ……什么128位,512位cpu,其实是dsp,或者特用cpu,通用cpu,做到128位,人家上跟的上马?作为程序员,起码,见过的,没有多少现在为x64系列作优化。…………人家跑的还是32环境下……



    所以,128位,不去瞎起哄了,跟别说512位了,省省吧……

    外面有下雨了,洗澡去了……



    参考文章:

    CPU寻址范围(寻址空间)一系列问题 https://blog.csdn.net/lovejavaydj/article/details/7295505

    寻址空间 blog.chinaunix.net/uid-11572501-id-2868719.html



    转载本站文章《CPU位/字长/机器字长/寻址空间/地址总线?没有64位以上cpu?》,
    请注明出处:https://www.zhoulujun.cn/html/theory/ComputerScienceTechnology/Constitution/2016_0405_7733.html