一、寄存器简介

 

寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。内部寄存器不能被外部电路或软件访问,只是为内部电路的实现存储功能或满足电路的时序要求。而接口寄存器可以同时被内部电路和外部电路或软件访问,CPU 中的寄存器就是其中一种,作为软硬件的接口,为广泛的通用编程用户所熟知。

 

寄存器特点:

①寄存器位于 CPU 内部,数量很少,仅十四个

②寄存器所能存储的数据不一定是 8bit,有一些寄存器可以存储 16bit 数据,对于 386/486 处理器中的一些寄存器则能存储 32bit 数据

③每个内部寄存器都有一个名字,而没有类似存储器的地址编号。

 

 

 

寄存器分类:

数据寄存器 - 用来储存整数数字(参考以下的浮点寄存器)。在某些简单 / 旧的 CPU,特别的数据寄存器是累加器,作为数学计算之用。

 

地址寄存器 - 持有存储器地址,以及用来访问存储器。在某些简单 / 旧的 CPU 里,特别的地址寄存器是索引寄存器(可能出现一个或多个)。

 

通用目的寄存器(GPRs)- 可以保存数据或地址两者,也就是说他们是结合数据 / 地址寄存器的功用。

 

浮点寄存器(FPRs)- 用来储存浮点数字。

 

常数寄存器 - 用来持有只读的数值(例如 0、1、圆周率等等)。

 

向量寄存器 - 用来储存由向量处理器运行 SIMD(SingleInstrucTIon,MulTIpleData)指令所得到的数据。

 

特殊目的寄存器 - 储存 CPU 内部的数据,像是程序计数器(或称为指令指针),堆栈寄存器,以及状态寄存器(或称微处理器状态字组)。

 

指令寄存器(instrucTIonregister)- 储存现在正在被运行的指令。

 

索引寄存器(indexregister)- 是在程序运行实用来更改运算对象地址之用。

 

在某些架构下,模式指示寄存器(也称为“机器指示寄存器”)储存和设置跟处理器自己有关的数据。由于他们的意图目的是附加到特定处理器的设计,因此他们并不被预期会成微处理器世代之间保留的标准。

有关从随机存取存储器提取信息的寄存器与 CPU(位于不同芯片的储存寄存器集合)

 

存储器缓冲寄存器(Memorybufferregister)

存储器数据寄存器(Memorydataregister)

存储器地址寄存器(Memoryaddressregister)

存储器型态范围寄存器(MemoryTypeRangeRegisters)

 

 

寄存器工作原理:

寄存器的功能十分重要,CPU 对存储器中的数据进行处理时,往往先把数据取到内部寄存器中,而后再作处理。外部寄存器是计算机中其它一些部件上用于暂存数据的寄存器,它与 CPU 之间通过“端口”交换数据,外部寄存器具有寄存器和内存储器双重特点。有些时候我们常把外部寄存器就称为“端口”,这种说法不太严格,但经常这样说。

 

外部寄存器虽然也用于存放数据,但是它保存的数据具有特殊的用途。某些寄存器中各个位的 0、1 状态反映了外部设备的工作状态或方式;还有一些寄存器中的各个位可对外部设备进行控制;也有一些端口作为 CPU 同外部设备交换数据的通路。所以说,端口是 CPU 和外设间的联系桥梁。CPU 对端口的访问也是依据端口的“编号”(地址),这一点又和访问存储器一样。不过考虑到机器所联接的外设数量并不多,所以在设计机器的时候仅安排了 1024 个端口地址,端口地址范围为 0--3FFH。

 

二、内存简介

内存是计算机中重要的部件之一,它是与 CPU 进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放 CPU 中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU 就会把需要运算的数据调到内存中进行运算,当运算完成后 CPU 再将结果传送出来,内存的运行也决定了计算机的稳定运行。内存是由内存芯片、电路板、金手指等部分组成的。

 

 

内存容量:

内存容量同硬盘、软盘等存储器容量单位都是相同的,它们的基本单位都是字节(B),并且:

1024B=1KB=1024 字节=2^10 字节(^代表次方)

1024KB=1MB=1048576 字节=2^20 字节 1024MB=1GB=1073741824 字节=2^30 字节

1024GB=1TB=1099511627776 字节=2^40 字节

1024TB=1PB=1125899906842624 字节=2^50 字节

1024PB=1EB=1152921504606846976 字节=2^60 字节

1024EB=1ZB=1180591620717411303424 字节=2^70 字节

1024ZB=1YB=1208925819614629174706176 字节=2^80 字节

 

内存大小:

内存的种类和运行频率会对性能有一定影响,不过相比之下,容量的影响更加大。在其他配置相同的条件下内存越大机器性能也就越高。内存的价格小幅走低,2011 年前后,电脑内存的配置越来越大,一般都在 1G 以上,更有 2G、4G、6G 内存的电脑。

 

内存作为电脑中重要的配件之一,内存容量的大小确实能够直接关系到整个系统的性能。因此,内存容量已经越来越受到消费者的关注。尤其在目前 WIN7 操作系统已经开始取代 XP 之时,对于最新的 WIN7 操作系统,多数消费者都认为大容量能让其内存评分得到提升。

 

内存的工作原理。从功能上理解,我们可以将内存看作是内存控制器与 CPU 之间的桥梁,内存也就相当于“仓库”。显然,内存的容量决定“仓库”的大小,而内存的速度决定“桥梁”的宽窄,两者缺一不可,这也就是我们常常说道的“内存容量”与“内存速度”。

 

内存带宽的计算方法并不复杂,大家可以遵循如下的计算公式:带宽=总线宽度&TImes;总线频率×一个时钟周期内交换的数据包个数。很明显,在这些乘数因子中,每个都会对最终的内存带宽产生极大的影响。在 PCMarkVantage 测试中,可以看到 2GB 和 4GBDDR3-1600 内存性能比较接近,其中 2GB 内存仅在启动一些办公软件时候比较落后,毕竟少了一半容量所以运行起来比较吃力。而在 3DmarkVantage 游戏性能测试中,我们可以看出在 Win7 系统下,2GB 和 4GB 内存的性能区别不是很大,成绩非常接近。同时,在 WIN7 环境下,2GB 内存与 4GB 内存差别很小,有些情况下甚至没有差别,这时如果想提高内存性能,光想着升级容量意义并不是很大。

 

内存选购方法:

做工要精良

对于选择内存来说,最重要的是稳定性和性能,而内存的做工水平直接会影响到性能、稳定以及超频。

 

内存颗粒的好坏直接影响到内存的性能,可以说也是内存最重要的核心元件。所以大家在购买时,尽量选择大厂生产出来的内存颗粒,一般常见的内存颗粒厂商有三星、现代、镁光、南亚、茂矽等,它们都是经过完整的生产工序,因此在品质上都更有保障。而采用这些顶级大厂内存颗粒的内存条品质性能,必然会比其他杂牌内存颗粒的产品要高出许多。

 

内存 PCB 电路板的作用是连接内存芯片引脚与主板信号线,因此其做工好坏直接关系着系统稳定性。目前主流内存 PCB 电路板层数一般是 6 层,这类电路板具有良好的电气性能,可以有效屏蔽信号干扰。而更优秀的高规格内存往往配备了 8 层 PCB 电路板,以起到更好的效能。

 

SPD 隐藏信息

SPD 信息可以说非常重要,它能够直观反映出内存的性能及体制。它里面存放着内存可以稳定工作的指标信息以及产品的生产,厂家等信息。不过,由于每个厂商都能对 SPD 进行随意修改,因此很多杂牌内存厂商会将 SPD 参数进行修改或者直接 COPY 名牌产品的 SPD,但是一旦上机用软件检测就会原形毕露。

 

因此,大家在购买内存以后,回去用常用的 Everest、CPU-Z 等软件一查即可明白。不过需要注意的是,对于大品牌内存来说 SPD 参数是非常重要的,但是对于杂牌内存来说,SPD 的信息并不值得完全相信。

 

假冒返修产品

目前有一些内存往往使用了不同品牌、型号的内存颗粒,大家一眼就可以看出区别。同时有些无孔不入的 JS 也会采用打磨内存颗粒的作假手段,然后再加印上新的编号参数。不过仔细观察,就会发现打磨过后的芯片比较暗淡无光,有起毛的感觉,而且加印上的字迹模糊不清晰。这些一般都是假冒的内存产品,需要注意。

 

此外,大家还要观察 PCB 电路板是否整洁,有无毛刺等等,金手指是否很明显有经过插拔所留下的痕迹,如果有,则很有可能是返修内存产品(当然也不排除有厂家出厂前经过测试,不过比较少数)。需要提醒大家的是,返修和假冒内存无论多么便宜都不值得购买,因为其安全隐患十分严重。

 

 

三、寄存器比内存快的原因分析

原因一:距离不同

距离不是主要因素,但是最好懂,所以放在最前面说。内存离 CPU 比较远,所以要耗费更长的时间读取。

 

以 3GHz 的 CPU 为例,电流每秒钟可以振荡 30 亿次,每次耗时大约为 0.33 纳秒。光在 1 纳秒的时间内,可以前进 30 厘米。也就是说,在 CPU 的一个时钟周期内,光可以前进 10 厘米。因此,如果内存距离 CPU 超过 5 厘米,就不可能在一个时钟周期内完成数据的读取,这还没有考虑硬件的限制和电流实际上达不到光速。相比之下,寄存器在 CPU 内部,当然读起来会快一点。

 

距离对于桌面电脑影响很大,对于手机影响就要小得多。手机 CPU 的时钟频率比较慢(iPhone5s 为 1.3GHz),而且手机的内存紧挨着 CPU。

 

原因二:硬件设计不同

苹果公司新推出的 iPhone5s,CPU 是 A7,寄存器有 6000 多位(31 个 64 位寄存器,加上 32 个 128 位寄存器)。而 iPhone5s 的内存是 1GB,约为 80 亿位(bit)。这意味着,高性能、高成本、高耗电的设计可以用在寄存器上,反正只有 6000 多位,而不能用在内存上。因为每个位的成本和能耗只要增加一点点,就会被放大 80 亿倍。

 

事实上确实如此,内存的设计相对简单,每个位就是一个电容和一个晶体管,而寄存器的设计则完全不同,多出好几个电子元件。并且通电以后,寄存器的晶体管一直有电,而内存的晶体管只有用到的才有电,没用到的就没电,这样有利于省电。这些设计上的因素,决定了寄存器比内存读取速度更快。

 

原因三:工作方式不同

寄存器的工作方式很简单,只有两步:(1)找到相关的位,(2)读取这些位。

 

内存的工作方式就要复杂得多:

(1)找到数据的指针。(指针可能存放在寄存器内,所以这一步就已经包括寄存器的全部工作了。)

(2)将指针送往内存管理单元(MMU),由 MMU 将虚拟的内存地址翻译成实际的物理地址。

(3)将物理地址送往内存控制器(memorycontroller),由内存控制器找出该地址在哪一根内存插槽(bank)上。

(4)确定数据在哪一个内存块(chunk)上,从该块读取数据。

(5)数据先送回内存控制器,再送回 CPU,然后开始使用。

 

内存的工作流程比寄存器多出许多步。每一步都会产生延迟,累积起来就使得内存比寄存器慢得多。

 

为了缓解寄存器与内存之间的巨大速度差异,硬件设计师做出了许多努力,包括在 CPU 内部设置缓存、优化 CPU 工作方式,尽量一次性从内存读取指令所要用到的全部数据等等。