计算机硬件-科普-cpu的位数判别

处理器架构就是处理器的硬件架构,称为微架构。是一堆硬件电路,去实现指令集所规定的操作运算。

是的,指令集决定了处理器的架构,因为处理器架构就是用硬件电路实现指令集。但是具体用什么样的处理器架构,设计怎样的硬件电路,每个人设计的都可以不一样。


Intel从8086开始,286、386[开始32位cpu]、486、586、P1、P2、P3、P4都用的同一种CPU架构,统称X86。 其中的  MMX,SSE 指令集 是扩展指令集, 用作补充。
IA-32为Intel Architecture 32-bit简称,即英特尔32位体系架构,在英特尔公司1985年推出的80386微处理器中首先采用。
Intel早在1990年代就与HP合作提出了一种用在安腾系列处理器中的独立的64位架构,这种架构被称为IA-64。IA-64是一种崭新的系统,和x86架构完全没有相似性;不兼容 IA 32,市场差。
2003年AMD对于这个架构发展了64位的扩充,并命名为AMD64。后来Intel也推出了与之兼容的处理器,并命名为Intel 64【EM64T】。两者一般被统称为x86-64或x64,开创了x86的64位时代。

英特尔推出X86架构已满40年了,同486相比,Pentium向前迈进了一大步, 而PⅡ的前进步伐则没有这么大了,X86 CPU的发展似乎已到了尽头。英特尔非常清楚,是X86指令集限制了CPU性能的进一步提高,因此,他们正同惠普共同努力开发下一代指令集架构(Instruction Set Architecture ,ISA): EPIC(Explicitly Parallel Instruction Computing,显性并行指令计算)。对英特尔而言, IA-64(英特尔的64位架构)是下一个10到15年的架构。

英特尔80386SX 【32位 但16位数据总线】

80386SX是80386DX芯片的“精简”版本。它只使用16位数据总线,外部总线宽度与80286相同。它也只能处理16 MB内存,如80286.事实上,386芯片的SX版本在DX之后很好地发布了,在某些方面,它旨在使市场远离286,因为它具有大致相同的接口但性能更好。它实际上是 在DX之后几年推出的。

注意: 80386SX可以代替286主板中的80286,这是一个常见的神话。虽然芯片在外部接口方面是兼容的,但它们使用不同的封装。如果使用适当的适配器,可以将386SX放入286主板。

与同等速度的386DX相比,386SX较窄的数据总线宽度使性能降低约20-25%; 有显着差异但不过分。80386SX芯片是第一款小型笔记本电脑的热门选择,特别是386SL型号为英特尔系列引入了SMM电源管理功能。386SX内部仍然是一个32位处理器,将运行32位软件(非常慢:^))。它的速度范围为16至33 MHz; 没有为SX生产40 MHz版本,也可以从AMD和Cyrix的克隆版本中获得。

如今,386SX芯片已被淘汰。


计算机中的位数指的是CPU一次(即一个时钟周期内)能处理的最大位数(数据数量),这和CPU中寄存器的位数对应。

古老的故事中:处理器对内存的最小寻址单位是字节,

记得intel的8086芯片,是16位的,但当时intel工程师给这处理器配置了20位的地址总线(用段:偏移量 这种方式寻址),使得处理器可以访问1048576字节的地址。


  • 段寄存器学计算机组成原理的时候也学过,但是如果16位CPU支持20位地址,那写C语言的时候指针长度有限用不到20位地址怎么办呢,比如16位系统C语言指针占2字节16位,那永远访问不到介于16位和20位之间的地址了?(emmm回旧贴抱歉啊,因为搜到了这后产生一些疑问)

  • 8086/8088 存储器分段概念, 先弄明白为什么要分段。
  • 嗯嗯,我理解的是分段就是为了扩大能寻址到的物理内存的空间呗?我的疑问是即使cpu扩大了寻址空间,应用层比如c语言指针还是只能寻址16位的内存地址,cpu扩大的寻址空间用不上呀

CPU为了实现其功能一般设计了指令集,即是CPU的全部指令,这就是机器语言。计算机的所有功能都是基于CPU的指令集。指令集和CPU的位数是有联系 的。如Intel 8086 CPU 是16位,其指令集也是16位。如Intel 80386DX CPU 是32位,其指令集也是32位,但它也保持原16位指令集,这是为了向上兼容。
操作系统的位数是说其所依赖的指令集的位数。
计算机系统一般都应有向上兼容性,所以也可有64位CPU上运行32位操作系统、32位CPU上运行16位操作系统的情况。

操作系统位数应该是根据指针类型的位数来定的。整数类型不一定跟位数相等,CPU位数准确地说应该是CPU一次能够并行处理的数据宽度,一般就是指数据总线宽度。

从计算机硬件层面来看, CPU位数指的是一个时钟周期内CPU同时寄存和处理的二进制位数。对于CPU位数有如下关系:CPU位数 = CPU中寄存器的位数 = CPU一次并行处理的数据宽度。CPU位数越多,则寻址位数越多,处理能力就越强。

从计算机软件层面来看, 操作系统位数的概念是基于CPU的位数的,且操作系统的位数是依赖于指令集的位数的。一般,操作系统位数有如下关系:操作系统位数 = 其所依赖的指令集位数 <= CPU位数

32位计算机的CPU一次最多能处理32位数据,例如它的EAX寄存器就是32位的,当然32位计算机通常也可以处理16位和8位数据。

需要注意的是,(a)、32位CPU只能安装32位操作系统,32位操作系统支持的内存最多为2的32次方,就是4G,在windows 32位操作系统中最大只识别3.25-3.75之间,根据windows版本不同而不同。(b)、64位CPU可以安装32位操作系统,也可以安装64位操作系统。64位操作系统的寻址能力就是2的64次方,即理论上是17179869184G,实际中是不可能用到这么大的内存,目前64位windows系统最大只支持128G,而当前主流主板只能加到16G。。现在软件兼容性已基本没有任何问题,如果计算机安装内存超过4G,比如到6G或更多,就必须考虑安装64位操作系统,不然发挥不出硬件的所有性能,如内存相当于白装了。64位系统向下兼容32位软件,64位系统是今后发展的方向。

 


字长

字长并非一个十分严格的概念。在一个 CPU 指令集中,每条指令都可以处理长度不同的操作数。这时就把大多数指令能处理的最长长度但是又不花费额外周期的操作数长度称为字长。比如说,大多数指令都能处理 8 位,16 位,32 位数据,但是处理 32 位数据要花费更多的时钟周期,而处理 8 位和 16 位的时间一样,那么就称字长是 16 位。

其实,CPU 指令集众多,各种例外是难免的。比如,8088 处理 16 位操作数的时候,只要不涉及主内存(只是立即数或者寄存器)就不花费额外周期,否则花费额外周期。所以称为准 16 位。再比如,如今的支持 SSE 指令集的 CPU,所称的字长从历史角度考虑,根本就没把 SSE 这种单指令多数据的情况算进去。

而且,字长还经常会从地址总线宽度,数据总线宽度这类概念借用过来。总之,说 64-bit CPU,32-bit CPU 的时候,明白自己指什么就好,不必拘泥于字长这个概念。


CPU的字宽和总线的数据宽度是不同的,总线的数据宽度通常是大于CPU的字宽的,所以当CPU发起一个load操作,如果地址属性不是设备类型(也就是说,是内存类型的),总线基本上会合并为一个Burst来取,我认识的情况大部分一个Burst的长度和一个Cacheline的长度是相同的。这样就算你读一个32位的值,实际上总线上拿走的是128位的内容,并且填充到你的Cache中,然后CPU再从Cache中取走需要部分的数据,具体怎么取,这完全是CPU自己的问题,反正符合指令要求即可。如果是设备内存,那会有另一套协议控制,就要看那个协议的具体Spec了。

参考:

https://www.zhihu.com/question/20536161/answer/15410344

https://www.zhihu.com/question/61067876/answer/215969586
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments