计算机组成原理 | 初识指令集体系结构

372 阅读8分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情

今天开个新坑,介绍一下计算机组成原理的知识。

系统体系结构

指令集体系结构(Instruction Set Architecture, ISA)

描述了程序员看到的计算机的抽象视图,并定义了汇编语言和编程模型

不关心底层的计算机(电路)实现。

微体系结构

描述了一种指令集体系结构实现方式。关注计算机的内部设计(机器语言)。

系统体系结构

关注包括处理器、存储器、总线和外设在内的整个系统。

  1. 什么是计算机体系结构

计算机系统包括CPU,存储器,输入输出系统。

  1. 微处理器是在单个硅片上实现的CPU,围绕微处理器构建的计算机被称为微机。

  2. 存储系统分为Cache、主存、辅存,Cache是存放常用数据的高速、专用存储器,通常集成于CPU内部。主存中存放了大量的工作数据。辅存是指磁盘和CDROM,能够存储海量数据。

  3. 程序是计算机所执行的完成给定任务的操作序列。

  4. 时钟提供了脉冲流,所有内部操作都在时钟脉冲的触发下进行。时钟频率是决定计算机速度的一个因素。

程序执行的过程

  1. 从存储器中取出一条指令
  2. 分析、解码指令
  3. 进行操作(LOAD、STORE、OPERATION)

计算机指令

  1. MOV A,B 将B的值复制到A(寄存器)

  2. LOAD A,B 将存储单元B的值加载到寄存器A中

  3. STORE A,B 将寄存器B中的值复制到存储单元A中

  4. ADD A,B A与B相加,并保存到(覆盖)A中

  5. TEST A 测试A的值是否为0

  6. BEQ Z 若上一条TEST结果为TRUE,则执行地址Z处的代码。否则继续执行。

  7. 体系结构和组成

计算机体系结构含有结构(structure)的意思,描述了一些与计算机组成方式有关的内容。之所以定义计算机体系结构,是因为不同的用户会从完全不同的视角看待计算机

实际硬件和实现都被隐藏起来,这个抽象视图通常被称为指令集体系结构(ISA)。

本书用术语“体系结构”代表计算机的抽象指令集体系结构。用术语“组成”代表计算机的实际硬件实现。

寄存器(Register)

寄存器是用来存放一个单位的数据或字数据的存储单元。寄存器通常用他所保存的位数来描述,典型的有8bit、16bit、32bit、64bit。

寄存器与存储器中的字存储单元没有本质区别。只是访问速度快。

机器码&汇编语言&高级语言

机器能直接运行的01串。每种计算机都只能执行一种特定的机器码。

人类可读的机器码(如ADD、R0、R1)叫做汇编语言,每种计算机都有不同的汇编语言。

时钟

绝大多数数字电子电路都带有一个时钟,用以生成连续的、间隔固定的电脉冲流。

可用这些电脉冲来计时或确定计算机内所有事件的顺序。

RISC和CISC

RISC(Reduced instruction set computer, 精简指令集计算机)体系结构

  • 设计策略:使用少量的指令完成最少的简单操作
  • 缺点:程序设计更难,复杂指令需要用简单的指令模拟
  • 应用:ARM处理器

CISC(Complex instruction set computer, 复杂指令集计算机)体系结构

  • 设计策略:使用大量的指令,包括复杂指令
  • 优点:程序设计更容易,因为每个简单的或复杂的任务都有一条对应的指令。不需要使用大量简单指令去完成复杂任务。
  • 缺点:指令集的复杂性使得CPU和控制单元电路非常复杂。
  • 应用:Intel、AMD
  1. 计算机的发展

  2. 机械计算机

  3. 机电式计算机

  4. 早期电子计算机(晶体管)

  5. 微机和PC

摩尔定律和进步的历程

卡沃-米德于1975年根据戈登-摩尔所观察到的集成电路的集成度18个月翻一番,经验性的观察结果。

乱序执行

程序中的指令必须按一条接一条按照在程序中出现的顺序执行。

但有时可以通过改变指令的执行顺序提高计算机的速度(并行)。

存储技术发展

普适计算

计算无处不在!

  1. 存储程序计算机

最大游程问题

”本书将要设计的用来解决问题的计算机就是真正的存储程序计算机的一个初始版本。“

状态图描述

对于一个数字系统,当一个特定事件(如时钟脉冲)发生时,他将从一个状态转换为另一个状态。

解决一个问题的所需元素:

  • 赋值操作
  • 算术运算
  • 逻辑判断

计算机需要通过什么来解决上述所需的元素?

存储器描述

存储器中的每个位置要么保存指令,要么保存数据元素。

存储系统

CPU将一个放在地址总线(Address Bus)上的地址以及一个读/写操作指令通过控制总线(Control Bus)发送给存储器。

在读周期中,存储器将数据放在数据总线(Data Bus)上供CPU拂读取;在写周期中,放在数据总线上的数据被写入存储器。

信息进入或离开存储器的位置叫做端口。

寄存器传输语言(RTL)

描述性语言:更加容易地定义计算机内发生的操作。

区分内存地址和存储内容很重要!

在RTL语言中,用方括号[]表示存储单元的地址。
[15] = Max_Run // 地址为15的存储单元保存了变量Max_Run的值

左箭头表示数据传输操作
[15] <-- [15] + 1 // 将地址15的存储单元的内容加一并写回地址为15的存储单元 
  1. 存储程序的概念

程序计数器(Program Counter, PC)

一种特殊的寄存器,用来存储指令的地址。指向存储器中的下一条指令。

CPU运行过程

从PC所指向的存储单元中读出指令,解码并执行。修改PC使之指向下一条指令。

InstructionPointer = 0;
do {
    instruction = memory[InstructionPointer];
    decode(instruction);
    fetch(operands);
    excute;
    store(results);
} while (instruction !== stop)

执行指令的过程

执行指令
    if 指令需要使用数据
        then 从存储器中读这个数
    end if
    if 指令要将数据写回存储器
        then 将数据写回存储器
    end if
结束指令

指令格式

三地址指令

Operation Address1, Address2, Address3, ...

ADD R, P, Q
[R] <-- [P] + [Q]

两地址指令

Operation P, Q // Operation destination, source

单地址指令

累加器(accumulator):CPU中的一个特殊寄存器,不需要显示地址的第二个操作数。

Operation P // 操作结果保存在ACC中,直到有一条指令将他送入存储器中

计算机分类

可以按照计算机的指令处理数据的方式对计算机进行分类。

  • 存储器-存储器型:一条指令能够从存储器中读出原操作数,对数据完成某个操作后,并将结果保存在存储器中。(一般不用)

  • 寄存器-存储器型:能够处理两个数据,其中一个位于存储器中,另一个位于寄存器中,结果要么被写回存储器,要么被写回寄存器,如Intel IA32。

  • 寄存器-寄存器型:只能对寄存器中的内容进行操作,只能使用loadstore在存储器与寄存器间进行通信。如ARM和MIPS。

  1. 计算机系统概念

  2. 存储层次

计算机中存储部件的层次结构,如图所示:

高速缓存(Cache)

  • Cache保存主存中经常使用的数据的副本。Cache系统与计算机的地址总线和数据总线相连,监听CPU与存储器之间的事务。
  • 只要Cache注意到CPU发送的地址与它保存的某个数据元素的地址相同,就把这个数据发送给CPU,而不会去主存中去这个数据。
  • 层级结构:一级缓存(集成在CPU中)&二级缓存&三级缓存

DRAM:主存

总线

连接子系统,进行数据传输:总线将计算机中的两个或者多个功能单元连接在一起,并允许他们相互交换数据。总线还将计算机与外设连接在一起。

没有总线的系统,缺少扩展性:

具有总线的系统:

优点:便于系统扩展。

缺点:每次只有一个设备能够与其他设备通信,因为只有一条信息通路。如果两个设备同时请求使用总线,他们就需要竞争总线的控制权。通过仲裁来判定。

术语
  • 宽度:并行数据通路的数量。每次传输的信息位数,如64位是指每个时钟周期发送一次可携带64位信息的信号。
  • 带宽:衡量信息在总线上的传输速率的指标。
  • 延迟:从发出数据传输请求到实际数据传输的时间间隔。总线延迟通常包括传输开始之前的总线仲裁的时间。
多总线系统

现代计算机中有多条总线:

  1. 多总线运行并发操作。
  2. 总线可能具有完全不同的特点和操作速度。