建设职业注册中心网站,红酒网站定位,个人网站可以做论坛么,住房建设部官方网站命令目录 文章目录 目录计算机系统计算机硬件系统#xff08;冯诺依曼体系结构#xff09;PC 主机硬件CPU#xff08;中央处理器#xff09;CPU 的组成部分CPU 总线控制器单元运算器单元寄存器组超线程与多核架构三级高速缓存为什么需要缓存三级缓存结构 CPU 的指令集指令集的类…目录 文章目录 目录计算机系统计算机硬件系统冯诺依曼体系结构PC 主机硬件CPU中央处理器CPU 的组成部分CPU 总线控制器单元运算器单元寄存器组超线程与多核架构三级高速缓存为什么需要缓存三级缓存结构 CPU 的指令集指令集的类型指令的格式指令的类型指令的寻址 CPU 的工作原理流水线执行周期 Memory内存储器存储器类型RAM 存储器DDR 存储器 内存控制器双通道内存控制器 CPU 访存读写 Disk外存储器I/O 外部总线主板 计算机系统 计算机硬件系统冯诺依曼体系结构 1945 年冯·诺依曼John von Neumann在论文《First Draft of Report o the EDVAC》第一份草案中提出了冯·诺依曼体系结构又称存储程序计算机。即程序本身是存储在主机内存中的可以通过加载不同的程序来解决不同的问题。
冯·诺依曼体系结构奠定了现代计算机的体系结构它包含了计算机硬件系统的 5 大组成部分
存储器负责非持久化存储指令Instruction程序代码和操作数Data运算数据。控制器负责从存储器读取指令流并根据指令集规范对指令流的控制信息进行分析e.g. 条件判断、循环、跳转然后翻译为具体的控制信号最终用于控制存储器、运算器、输入/输出设备的行为。运算器负责从存储器读取数据流并根据控制信号对数据执行算术运算e.g. 加减乘除和逻辑运算e.g. 与或非、位移、比较最终的运算结果会写入到存储器。输入设备实现指令和数据的输入并写入到存储器。包括鼠标、键盘等设备。输出设备实现从存储器读取并将运算结果输出。包括显示器、打印机等设备。
PC 主机硬件
在实际的 PC 中我们会更经常地将一台计算机分为 “主机“ 和 “外设“ 这两大部分其中核心的主机部分由以下部件组成
主板BIOS/CMOS、北桥/南桥芯片组CPU内存磁盘外存千兆网卡PCIe 扩展卡万兆网卡、GPU 显卡系统总线等 CPU中央处理器
得益于集成电路技术的发展得以将控制器和运算器集成到了同一颗芯片之上称为 CPUCentral Processing Unit中央处理器也称为 Micro-CPU微处理器。一颗典型的 Micro-CPU 主要包括了 5 个核心部分
控制器单元运算器单元寄存器组三级高速缓存CPU 总线 CPU 的组成部分
CPU 总线
首先需要了解的是 CPU 总线作为 CPU 连接到内存以及其他外部设备的桥梁。CPU 总线由 3 个不同的部分组成
数据总线DBData Bus用于在 CPU、内存和其他外部设备之间传输 Bit-stream二进制位流包括指令、操作数等。DB 的宽度决定了 CPU 一次可以读写的位数常见的有 32bits 和 64bits。地址总线ABAddress Bus用于在 CPU、内存和其他外部设备之间传输 “主机内存“ 或 “外设存储“ 的 Physical Address物理地址告知 CPU 应该从什么位置地址读写数据。AB 的宽度决定了 CPU 的寻址空间例如32bits 的最大寻址空间为 4GB所以 32bits 计算机系统只能支持 4G 内存。控制总线CBControl Bus用于在 CPU、内存和其他外部设备之间传输由控制单元发出的控制信号例如内存读写信号、中断请求信号、时钟信号和复位信号等。控制器和控制总线用于协调 CPU 和各个组件之间的操作。 在一些早期的主板中CPU 总线又被称为 FSBFront Side Bus前端总线用于连接 CPU 和 Northbridge北桥芯片然后再由 Northbridge 负责处理 CPU 与内存和其他外部设备之间的传输。
FSB 在早期设计中具有扩展灵活和成本低等优势但是这种设计以及难以满足多核处理器架构越来越多的 Cores 所提出来的越来越大的带宽需求。 为了实现更大的 CPU 总线带宽以及更低的访存延迟而在较新的主板中FSB 和 Northbridge 已经逐渐被 Intel QPIQuickPath Interconnect、AMD HyperTransport 等高速 CPU 总线技术点对点连接所替代使得 CPU 可以直接连接到 Memory 和 I/O Controller。 控制器单元 控制器单元CUControl Unit是 CPU 的指挥控制中心又称为 Front-end前端是指令流水线的起始点负责指令流的获取和解析并最终翻译为控制信号下达到内存和其他外部设备以控制后续的执行阶段。
CU 通常包括以下几个主要组件 PCProgram Counter程序计数器存放当前正在执行的指令的地址或即将要执行的下一条指令的地址。如果是顺序执行逻辑控制那么在当前指令处理完毕后PC 会对指令地址进行 1 计数即生成下一条指令的地址。生成地址后经 AB地址总线写入到 MARMemory Address Register内存地址寄存器。 IRInstruction Register指令寄存器存储当前正在执行的指令。IR 通过 MDRMemory Data Register内存数据寄存器经 DB数据总线从 Memory 读取到指令代码。待 CU 处理完指令后将指令的地址经 AB地址总线更新到 MARMemory Address Register内存指令地址寄存器中。 IDInstruction Decoder指令译码器从 IR 读取等待执行的指令进行解码识别指令的类型和操作码OPCODE然后交给 CU 处理。 OCOperation Controller操作控制器从 ID 获取到操作码后并其翻译为具体的控制信号最终经 CB控制总线输出到相应的组件执行。包括以下组件 节拍脉冲源产生一定频率的脉冲作为 CPU 的时钟脉冲是 CPU 工作周期的基准信号。启停电路保证了可靠地送出或封锁完整的时钟脉冲。时序控制信号源在 CLK 时钟的作用下根据当前正在执行的指令的需要产生对应的时间控制信号并根据被控功能部件的反馈信号调整时序控制信号。
CU 工作时根据 PC 依次从 Memory 地址空间中取出程序的一行行代码一条条 CPU 指令并暂存在 IR 中通过 ID 分析指令的内容以确定应该执行什么操作然后通过 OC 按照确定的时序向相应的部件e.g. 运算器、存储器、外设等发出操作控制信号。 运算器单元
运算器单元PUProcessing Unit又称为 ALUArithmetic Logic Unit算术逻辑单元用于执行算术运算e.g. 加减乘除和逻辑运算e.g. 与或非、位移、比较这两大运算类型。ALU 是存粹的执行单元其所进行的全部运算操作都由 CU 所发出的控制信号指挥。
其中算术运算可以细分为以下 2 种
定点运算Fixed-point arithmetic指一种在固定的小数位数范围内进行算术运算的方式。在定点运算中数值表示为定点格式通常是固定的整数位和小数位适用于对整数和固定小数精度的数据进行计算。例如整数加法、减法、乘法和除法等。浮点运算Floating-point arithmetic指一种在可变的小数位数范围内进行算术运算的方式。在浮点运算中数值表示为浮点格式由符号、尾数和指数组成适用于处理大范围和高精度的数据例如科学计算、图形处理等包括加法、减法、乘法、除法、开方等一系列复杂运算。
ALU 通过会内含了定点运算单元和浮点运算单元两种运算单元在硬件设计上有所不同以适应不同的运算需求和数据表示方式。例如浮点运算相对于定点运算提供了更大的数值范围和更高的精度所以也需要更多的硬件资源和处理时间。
而辑运算则可以细分为以下几种通常基于逻辑门电路来实现。
逻辑与运算AND逻辑或运算OR逻辑非运算NOT异或运算XOR比较运算位移运算等
与 ALU 关系密切的寄存器是 ACAccumulator累加寄存器是一个通用寄存器为 ALU 提供一个工作区可以暂时保存一个操作数或运算结果。 寄存器组
寄存器组是 CU 和 ALU 暂存数据的地方包括等待处理的数据或是已经处理过的数据。片内寄存器是 CPU 访问速度最快的存储部件可以有效减少 CPU 访问 Memory 得次数但收芯片面积和集成技术限制寄存器的容量也最小。
CPU 的寄存器组可分为 2 大类
专用寄存器用途固定寄存相应的数据通用寄存器用途广泛可由具体的程序规定其用途。 超线程与多核架构
CPU 的超线程Hyper-threading是一种可以在同一个 CPU Core 上执行 2 个 Thread控制流的技术。具体而言它在同一个 Core 内复制了多一套用于完成任务控制的 Front-end 部件 称之为 Architectural State 或 Logical CPU。这 2 个 Thread 共享着片内的 ALU、寄存器组、L1 Cache 等运算和存储部件。
超线程技术使得同一个 Core 可以 “并发“ 处理 2 个运算任务。例如当一个 Logical CPU Missed Cache 后需要访问 Memory 时这段时间内 ALU 就会被挂起Memory Stall而另一个 Logical CPU 就可以使用 ALU 来运算自己的任务了。
可见超线程技术极致的压榨了 ALU 的并发性能提升了吞吐量。但同时也会因为 2 个 Thread 对 ALU、L1 Cache 等共享资源的竞争导致处理时延变长。所以超线程并不能带来两倍的处理能力也不提供完全并行计算能力。 由于 CPU 超线程技术终究不是两个完全独立的 ALU 运算单元不能提供 2 倍的处理能力和并行计算能力。所以进一步的Intel 利用 SoC 技术将多个 Core 集成到了同一块 CPU 芯片上形成多核处理器Multicore-processors架构。
在多核架构中每个 Core 都拥有独立的 L1/L2 Cache 和超线程。如下图所示。 三级高速缓存
为什么需要缓存 上图中列出了 CPU 的处理速度和访问各种存储器的速度
CPU 的处理速度每个 CPU 时钟周期是 0.3 纳秒CPU 的访存速度 访问内存需要 120 纳秒访问固态硬盘需要 50-150 微秒访问传统硬盘需要 1-10 毫秒访问网络设备需要几十毫秒。
按照等比例换算假设一个 CPU 时钟周期为 1 秒的话那么
访问内存需要 6 分钟访问固态硬盘需要 2-6 天访问传统硬盘需要 1-12 个月访问网络则需要几年时间。
所以存储器作为冯诺依曼体系结构的核心为了解决 CPU 的处理速度和访存速度严重不平衡的问题而引入了片内三级高速缓存CPU Cache的硬件设计。
CPU Cache 是一个临时的数据交换缓冲区其理论支撑是 “局部性访问原理“即程序访问的内存数据往往集中在很小的一个空间范围内。这是因为程序的虚拟地址空间是趋向于连续的再加上循环程序流、子程序调用程序流的重复执行所以程序的地址访问就会相对的集中。如果这部分指令和数据能在 CPU Cache 中找到Hit缓存命中那么 CPU 就不需要访问存储器从而降低整机的响应时间。 三级缓存结构
另外也由于 CPU Cache 被集成在 CPU 芯片内更大的 CPU Cache 意味着更高的缓存命中率、更快的速度和更昂贵的成本。为了平衡性能和成本Cache 逐渐演进为 L1-3 三级缓存结构。如下图所示储器越往上速度越快但是价格越来越贵 越往下速度越慢但是价格越来越便宜。 L1 Cache 最早出现在 Intel Pentium CPU 上
结构L1 Cache 被单一的 CPU Core 占有避免了 CPU Multi-Cores、Multi-Threading 竞争缓冲空间造成的冲突。速度CPU 访问 L1 Cache 需要 3 个时钟周期。空间L1 Cache 还被细分为了用于存放指令和数据的 L1-iInstruction Cache一级指令缓存和 L1-dData Cache一级数据缓存。通常的L1-i 和 L1-d 具有相同的容量例如I7-8700K 的 L1 Cache 为 32KB 32KB。
L2 Cache 最早出现在 AMD Athlon 64X2 CPU 上
结构L2 Cache 也被单一的 CPU Core 占有。速度CPU 访问 L2 Cache 需要 10 个时钟周期。空间L2 Cache 速度更慢的原因有以下 2 个。可见实际上 Cache 并非越大越好L2 Cache 通常是 256KB 或 512KB。 L2 比 L1 要更远离 CPU CoreCPU 读取 L2 的数据从物理距离上比 L1 更远L2 的容量比 L1 更大所以数据检索时间也更长。
L3 Cache 最早出现在 AMD K6-III CPU 上
结构L3 Cache 是 Multi-Cores Sharing 的缓存空间所以会存在缓存竞争、缓冲同步、缓冲数据一致性等应用问题。速度CPU 访问 L3 Cache 需要 50 个时钟周期。空间L3 Cache 的容量对 CPU 性能的提升并非是线性增长的即L3 从 0 到 2M 的情况 CPU 性能提升非常明显L3 从 2M 到 6M 提升可能就只有 10% 不到了。这是由于 L3 Cache Sharing 需要面对的情况。 CPU 的指令集
CPU 指令集Instruction Set又称为 CPU 架构是 CPU 提供的可执行指令的集合它决定了 CPU 的功能特性并通过指令系统向上层软件生态提供互操作入口。 指令集的类型
值得注意的是指令系统并非越复杂越好因为每条 CPU 指令类型都需要特定的晶体管和电路元件来支撑实现所以指令集越大就会使 CPU 的架构越复杂执行操作的速度也更慢。并且在大多数场景中实际上只有算术逻辑运算、数据传输、跳转和程序调用等几十条指令会被频繁的使用而需要大量硬件支持的大多数复杂的指令却并不常用也会造成硬件资源的浪费。
指令系统的设计原则一直都致力于缩小 CPU 指令集与高级语言之间的语义差异以及有利于操作系统的优化。 例如
为了 C 语言中的 if 语句、do 语句在汇编层面则提供了功能较强的条件跳转指令为了操作系统的实现和优化则提供了控制系统状态的特权指令、以及管理多道程序和多处理机系统的专用指令。
所以现在常见的指令系统从大的方向上可以被分为 2 类 复杂指令系统计算机CISC特点是指令数目多而复杂且通用性强。但由于每条指令的字长并不相等CPU 必须加以判读并为此付出了性能的代价。好处在于其更趋近于跨越了与高级编程语言的 “语义鸿沟”提供了更 “高端” 的指令以支持高级编程语言的语义例如判断、循环、函数调用、返回等高级指令故而软件应用生态完善。x86The X86 architecture就是最经典的 CISC。 精简指令系统计算机RISC特点是指令数目精简且专用性强、设计周期更短、价格低、能耗比底。CPU 流水线以及常用指令均可用硬件执行并采用了大量的寄存器使大部分指令操作都在寄存器之间进行提高了处理速度。RISC 最早起源于 80 年代的 MIPSMicroprocessor without interlocked piped stages无内部互锁流水级的微处理器架构现在典型的有 ARMAdvanced RISC Machine进阶精简指令集机器和 RISC-VRISC-FIVE第五代 RISC 开源指令集架构架构。 指令的格式
一条 CPU 指令字的格式主要由 “操作码“ 和 “地址码“ 组成而指令字的长度与 CPU 的位数密切相关。
操作码说明指令操作的性质和功能e.g. 加减乘除、数据传输操作码长度由指令系统的指令条数决定例如CPU 支持 256 条指令那么操作码就需要 8bits 的长度。操作数的地址CPU 通过该地址读取到所需要的操作数可能是寄存器的地址也可能是存储器的地址。操作结果的储存地址保存操作结果的地址。下一条指令的地址有 2 种地址生成方式 顺序执行逻辑控制通过 PC 1 得到下一条指令的地址跳跃执行逻辑控制如跳转、函数调用等通过跳转类指令本身给出下一条指令的地址。
以 MIPS 架构的 32bits 指令最新版本为 64bits格式为例
高 6bits 为操作码OPCODE描述了指令的操作类型。低 26bits 又分为 R、I 和 J 这 3 种指令类型。
不同的指令类型和操作码组合能够完成多种功能实现如下图所示 加法算数指令 add $t0,$s2,$s1 的指令字及其对应的机器码如下
opcode0。rs代表第一个寄存器 s1 的地址是 17。rt代表第二个寄存器 s2 的地址是 18。rd代表目标临时寄存器 t0 的地址是 8。shamt0表示不位移。
最终加法算数指令 add $t0,$s2,$s1 的二进制机器码表示为 000000 10001 10010 01000 00000 10000000X02324020。可以看见机器码中没有保存任何实际的程序数据而是保存了程序数据的储存的地址这也算是存储程序计算机指令集设计的一大特点。 需要注意的是在不同的 CPU 架构中会具有不同的指令格式。在指令字长较长的 CPU 中操作码的长度一般是固定的由指令集的数量决定。但在指令字较短的计算机中为了能够充分利用指令字的位数在有限的长度中实现更多的指令集数目所以其操作码长度被设计成是可变的即把它们的操作码在必要的时候扩充到地址码字段。这就是所谓的操作码扩展技术。 指令的类型
日常使用的 Intel CPU 指令大概有 2000 多条可以分为以下 5 大类型
算术类加减乘除。数据传输类变量赋值、读写内存数据。逻辑类与或非。条件分支类条件判断语句。无条件跳转类方法、函数的调用跳转。 更详细的还会具有如下指令类型
算术逻辑运算指令移位操作指令 算术移位逻辑移位循环移位 矢量运算指令矩阵运算浮点运算指令十进制运算指令字符串处理指令 字符串传送字符串比较字符串查询字符串转换 数据传输指令 寄存器与寄存器传输寄存器与主存储器单元传输存储器单元与存储器单元传输数据交换源操作数与目的操作下互换 转移指令 条件转移无条件转移过程调用与返回陷阱 堆栈及堆栈操作指令I/O 指令特权指令多处理机指令在多处理器系统中保证共享数据的一致性等控制指令等等
指令的寻址
指令寻址即CPU 根据指令字的地址码从寄存器或存储器中读写实际数据的过程。
指令的寻址方式跟硬件关系密切不同的计算机有不同的寻址方式。例如
有的计算机寻址方式种类少所以会直接在操作码上表示寻址方式有些计算机的寻址方式种类多就会在指令字中添加一个特别用于标记寻址方式的字段。
总的来说常见的指令寻址方式有以下几种
直接寻址指令字的地址码直接给出了操作数在寄存器或存储器中的地址是最简单的寻址方式。间接寻址指令字的地址码所指向的寄存器或存储器的内容并不是真实的操作数而是操作数的地址。间接寻址常用于跳转指令只要修改寄存器或存储器的地址就可以实现跳转到不同的操作数上。相对寻址把 PC 的内容当前执行指令的地址与地址码部分给出的偏移量Disp求和作为操作数的地址。这种寻址方式同样常用于跳转转移指令当程序执行到本条指令后跳转到 PCDisp。立即数寻址即地址码本身就是一个操作数该方式的特点就是速度快实际上没有寻址过程但操作数固定。常用于为某个寄存器或存储器单元赋初值或提供一个常数。通用寄存器寻址通用寄存器可以用于临时储存操作数、操作数的地址或中间结果指令字的地址码可以指向这些寄存器。通用寄存器具有地址短存取速度快的特性所以地址码指向通用寄存器的指令的长度也会更短节省存储空间执行效率更快。常被用于执行速度要求严格的指令中。变址寄存器寻址变址寄存器内的地址与指令字地址之和得到了实际的有效地址如果 CPU 中存在基址寄存器那么就还得加上基址地址。这种寻址方式常用于处理需要循环执行的程序例如循环处理数组此时变址寄存器所改变的就是数组的下标了。堆栈寻址堆栈是有若干个连续的存储器单元组成的先进后出FILO存储区。堆栈是用于提供操作数和保存运算结果的主要存储区同时还主要用于暂存中断和子程序调用时的线程数据及返回地址。基址寄存器寻址基址寄存器是存放基址基础地址的寄存器通常是一个专用寄存器。执行指令时需要将基址与指令字的地址码结合得到完成的地址此时的地址码充当着偏移量的角色。
当存储器容量较大时直接寻址方式是无法访问所有的存储单元所以通常会采用分段或分页内存管理方式。此时段或页的首地址就会存放于基址寄存器中而指令字的地址码就作为段或页的长度这样只要修改基址寄存器的内容就可以访问到存储器的任意单元了。这种寻址方式常被用于为程序或数据分配存储区与虚拟内存地址实现密切相关。
基址寄存器寻址方式解决了程序在存储器中的定位存储单元和扩大 CPU 寻址空间的问题。
CPU 的工作原理
流水线
CPU 将一条指令的执行划分为多个不同的阶段根据不同的 CPU 架构会有所差别以经典的 RISC 架构为例存在以下常规步骤
取指令CU 在时序脉冲的作用下从 main() 程序入口将第一条指令的地址写入 PC然后 CU 将 PC 存储的指令地址送到 AB地址总线上CPU 就将这个地址指向的指令读到 IR。分析指令ID 从 IR 读取指令字的内容并进行解码理解指令的操作码和操作数。对于执行指令过程中所需要用到的操作数会将操作数的地址码也送到 AB 上CPU 就将这个地址指向的数据读取到寄存器组中暂存起来。执行指令OC 发出控制型号到 ALU由 ALU 完成对数据的运算处理。访问主存ALU 将运算结构写入存储器。写回寄存器例如 PC 1周而复始一条一条指令执行下去直到停电为止。
在上述常规步骤的执行期间还可能会穿插着一下内容
控制程序指令和数据的输入与运算结果输出根据程序的内容或人工干预CU 在适当的时候向输入/输出设备发出相应的指令来完成 I/O 功能。对异常情况和某些中断请求的处理在特定的时刻异常中断、输入/输出中断由相应的部件或设备向 CPU 发出中断请求信号或 DMA 请求信号。 中断请求信号待 CPU 执行完当前指令后响应该中断请求中止当前执行的程序转而执行中断程序。待中断程序执行完后再回到原程序继续执行下去。DMA 请求信号待 CPU 完成当前机器周期的操作后暂停工作让出总线给 I/O 设备。待完成 I/O 设备和存储器之间的数据传输之后CPU 从暂时中止的机器周期开始继续执行原程序的指令。 可见上述不同的步骤可能由 CPU 内部的不同部件e.g. CU、ALU来完成。在这样的前提下如果 CPU 只是单纯的顺序执行这些步骤的话势必会在某一时刻使得一些部件处于空闲状态。
那么如果 CU 对其他各个部件都调度恰当、让不同部件可以并行工作的话能够极大的提高 CPU 整体的工作效率和运算速度这就是多级流水线调度方式Pipeline的设计思想即将 CPU 指令的处理过程拆分为多个步骤并通过多个硬件处理单元并行执行来加快指令执行速度。
除了流水线技术之外后来还引入了乱序执行以及分支预测等更加复杂的技术。
流水线的类型
指令执行流水线运算操作流水线
流水线的优点
提高 CPU 主频流水线将组合逻辑分割成多个小块因为每段的关键路径变短了所以能提高系统主频。提高系统吞吐量因为流水线让任务以类似并行方式处理提高硬件模块的利用率所以能提高吞吐量Throughput。
流水线的缺点
由于流水线让许多指令被同时执行假如分支预测错误的话整个流水线上所有的指令全部要被取消流水线要被重新充满就需要从存储器或者 CPU 缓存中调用指令导致延迟时间在这段时间里 CPU 是没有任何工作的。 执行周期
在了解执行周期之前还需要先了解几个频率相关的概念包括 时钟脉冲指脉冲信号是一个由 CU 按一定电压幅度、在一定时间间隔内连续发出的电子脉冲信号是计算机的基本工作脉冲控制着计算机的工作节奏。时钟频率越高时钟周期就越短工作速度也就越快。 时钟频率Clock Speed指同步电路中时钟脉冲的基础频率是单位时间1s内所产生的时钟脉冲的个数。时钟频率是描述周期性循环信号在单位时间内所出现的次数标准计量单位是 Hz赫兹。 CPU 主频是 CPU 内部工作的时钟频率是评定 CPU 性能的重要指标一般来说主频数值越大越好。需要注意的是主频仅是 CPU 性能表现的一个方面而不代表 CPU 的整体性能CPU 的运算速度还考虑流水线的各方面的性能指标缓存、指令集、CPU 的位数等。 主板外频是 CPU 外部的工作频率由主板提供的一个基准时钟频率。CPU 主频和外频的关系如下 CPU 主频 信频 * 外频。CPU 主频 倍频 * 外频。 FSB 频率在早期的主板中FSB 频率是连接 CPU 和主板桥芯片的 FSB 上的数据传输频率。
周期就是频率的倒数CPU 的执行周期可以分为以下几种 时钟周期P 周期也称为 CPU 节拍。是时钟频率的倒数1/时钟频率例如时钟频率为 4.77MHz那么每个时钟周期约就为 200ns。作为 CPU 中最小的工作时间单位不可被中断。在一个时钟周期内CPU 仅完成一个最基本的动作更小的时钟周期就意味着更高的工作频率。 状态周期S 周期时钟脉冲经过二分频后定义为状态一个状态包含两个 CPU 节拍。 机器周期在 CU 流水线调度方式中一条指令的执行被分为多个步骤每个步骤完成一项工作而完成一项工作操作所需要的时间就称为机器周期。通常的一个机器周期由 12 个时钟周期组成也就是由 6 个状态周期组成。 指令周期指令周期是执行完成一条指令所需要时间由若干个机器周期组成。指令周期的类型有非访内存指令周期、取数/存数指令周期、空操作指令周期、转移指令周期等等。 总线周期CPU 是通过 CPU 总线来访问 Main Memory 和 I/O Endpoint 的总线周期指的就是 CPU 完成一次访问 Memory 或 I/O Endpoint 所需要的时间。一个总线周期由若干个时钟周期组成。 Memory内存储器
存储器类型
RAM 存储器
RAMRandom Access Memory随机存储器是一种半导体的、非永久记忆易失性Volatile的、可随机访问任意地址的存储单元且存取开销与物理地址的位置无关。其具有 2 个非常重要的特性“可随机访问” 和 “易失性”这些特性都服务于冯诺依曼体系 “存储程序” 的核心理想。 DRAM动态随机存储器常用于主存储器。其使用了电容存储只能将数据保持很短的时间。所以为了保持数据就必须隔一段时间刷新Refresh一次如果存储单元没有被刷新存储的信息就会丢失。DRAM 存储单元的电路相对简单只含一个晶体管和一个电容器集成度非常高可以轻松做出大容量。但是因为靠电容器来储存信息所以需要不断刷新补充电容器的电荷充电放电之间的时间差导致了 DRAM 比 SRAM 的反应要缓慢得多。 SRAM静态随机存储器常用于高速缓冲。所谓的 “静态”指这种存储器只要保持通电里面储存的数据就可以恒常保持。相对之下DRAM 里面储存的数据需要周期性地 Refresh。然而当电力供应停止关机时储存的数据还是会消失。SRAM 存储单元的电路非常复杂导致 SRAM 的集成度很低功耗IE较 DRAM 大。但 SRAM 的特点就是快有电就有数据不需要刷新时间所以凸显其数据传输速度很快。
DDR 存储器
DDR双倍速率同步动态随机存储器是 RAM 的一种演进。RAM 在一个 CPU 时钟周期内只传输一次数据在时钟上升期进行传输而 DDR 内存则可以在一个 CPU 时钟周期内传输两次数据在时钟上升期和下降期各传输一次因此称为 “双倍速率同步动态随机存储器“。可见DDR 可以在与 RAM 具有相同的 CPU 主频下达到更高的数据传输率。
从外形体积上 DDR 与 RAM 相比差别并不大他们具有同样的尺寸和同样的针脚距离。但 DDR 为 184 针脚比 RAM 多出了 16 个针脚主要包含了新的控制、时钟、电源和接地等信号。DDR 内存采用的是支持 2.5V 电压的 SSTL2 标准而不是 RAM 使用的 3.3V 电压的 LVTTL 标准。 内存控制器
双通道内存控制器
为了适应双路 NUMA CPU 架构解决内存带宽不足的问题Memory 也引入了双通道Two-channel内存控制器技术。
在北桥芯片里集成了两个 Memory Controller它们相互独立每个控制器控制一个内存通道。对这两个内存通道CPU 均可分别寻址和读写数据从而使内存的带宽增加一倍数据存取速度也相应增加一倍理论上。目前主流芯片组的双通道内存技术均是指双通道 DDR 内存技术由两个 64bits DDR 内存控制器组成其带宽可达 128bits。
CPU 访存读写
CPU 和 Memory 之间通过 CPU 总线连接具有 AB地址总线、DB数据总线、CB控制总线这 3 种类型。而在 CPU 访存读写过程中数据面主要通过 MARAB 和 MDRDB 的组合来完成而控制面则通过 CB 发出的控制信号来完成。
若 MAR 为 K 位字长则表示 CPU 的寻址宽度即允许 Memory 包含有 2**K 个可寻址存储单位若 MDR 为 n 位字长则表示在一个 CPU 总线周期内CPU 和 Memory 之间通过总线进行 n 位的数据传输。
CB 可以发出 READ、WRITE 和 READY表示存储器功能完成这 3 种控制信号。
READCPU 必须指定一个地址将该地址送到 MAR 再经 AB 送到 Memory。同时CPU 通过 CB 发送 READ 信号到 Memory。此后CPU 等待 Memory 通过 CB 发来一个 READY 信号表示已经完成了数据的读并将数据经 DB 放到 MDR 上了。最后CPU 再从 MDR 取出相应的数据。WRITECPU 首先将存放数据的地址通过 MAR 经 AB 发送到 Memory并将数据放到 MDR同时发出一个 WRITE 信号到 Memory。此后CPU 等待接收 READY 信号。Memory 会根据 AB 收到的地址来存放 DB 收到的数据然后通过 CB 发送 READY 信号给 CPU 接收。
可见CPU 和 Memory 之间采用的是异步工作方式以 READY 信号表示以此访存操作的结束。 Disk外存储器
Disk外存储器通常为磁表面的、串行访问的、永久性记忆的存储器类型。主流的有 HDDHard Disk Drive机械磁盘、SSDSolid-state Drive固态磁盘类型先进的有以 NAND Flash闪存作为介质的永久性存储器。
区别于 HDD 以机械臂带动磁头转动实现读写操作SSD 和 NAND 以电位高低或者相位状态的不同来记录 0 和 1。外存的主要技术指标有存储密度、存储容量、寻址时间、数据传输率、误码率和价格等。
I/O 外部总线
现代计算机硬件系统都是采用了 “多总线架构“即将相较于主机而言速度更低的外部设备从 CPU 总线上分离出去形成了 CPU 总线 和 I/O 外部总线分离的双总线结构。同理还可以将高速 I/O 设备e.g. 图形、视频、网络与低速 I/O 设备分离为两条 I/O 总线成为三总线结构。 I/O 外部总线可分为 2 大类型
串行总线一位一位的传送二进制的总线例如USB、IEEE 1394 等。并行总线一次能同时传送多个二进制位数的总线例如ISA/IDE 和 SCSI 等。
I/O 外部总线和 CPU 总线一样同样需要 Controller 来进行控制用于保证在同一时间内只能有一个申请者在使用 I/O 外部总线并支持多种不同的 I/O 通信方式
同步通信通信双方由统一的时钟控制数据传输时钟由 CPU 发出并送到总线上的所有部件在规定的总线周期内只有通信双方可以收发数据。异步通信通信双方通过 “握手” 信号实现总线数据传送通常用于实现不同速度部件之间的数据传送。并行通信表示同时传输多位字长有 8 位、16 位、32 位和 64 位等。特点是位数越多传输越快但传输距离较短只能在一个机柜内使用。串行通信串行通信表示一位一位的传输。特点是速度较慢但胜在通信线路简单容易实现双向传输特别适合远距离传输。串行异步通信串行通信和异步通信的结合。这种通信方式需要使用到特殊的数据格式具有起始位、停止位和奇偶校验位。
通常的出现了一种新的并行通信协议就会紧随着出现与之对应的串行通信协议。这是因为并行通信方式总是存在着一些难以克服的缺陷使其无法满足所有的应用场景。比如
信号时滞虽然并行通信中的所有位是同时传输的但却不能保证是所有位都同时到达的先到等后到就造成了时滞的问题。而且会随着传输距离的拉长越发明显。串扰总线上传输的是电子信息所以并排线缆间容易出现互相干扰的问题这也导致了并行通信有着更高的误码率。影响机箱散热并行通信依赖大连接器和很宽的带状传输电缆这会挤压机箱的散热空间。
主板
主板Motherboard, MainboardMobo又称主机板、系统板、逻辑板Logic Board、母板、底板等是构成复杂电子系统例如电子计算机的中心或者主电路板。
下图为较为古老的 LGA 1366 主板包含了南桥和北桥这是最后一代使用双晶片的主机板。之后所有 Intel 与 AMD 的主板均仅有南桥北桥和内建显示核心已整合到 CPU。
CPU 插槽LGA 1366北桥被散热片覆盖南桥被散热片覆盖内存插座三通道PCI 扩充槽PCI Express 扩充槽跳线控制面板开关掣、LED 等204pin 主机板电源44pin 处理器电源背板 I/O前置 USB 针脚前置面板音效针脚SATA 插座ATA 插座大部分 Intel Sandy Bridge 以后的家用主板都已舍弃 IDE 介面软碟机插座目前绝大多数主板已舍弃软碟机介面 主板 CPU 插槽 主板内存插槽 PCI-E 插槽可以作为万兆网卡、GPU 显卡、SSD 固态硬盘、声卡等外部设备的扩展接口。 主板网卡适配器 主板 SATA 接口插槽