计算机组成 (Computer Organization)
计算机基本结构
冯·诺依曼结构
- 现代计算机都遵循冯·诺依曼结构:运算器、控制器、存储器、输入设备、输出设备
- 数据和程序均以二进制的方式不加区别地存放在存储器中,存放位置由存储器的地址决定。
中央处理器(CPU)
- CPU由 运算器(Arithmetic Logic Unit, ALU)、 控制器(Control Unit, CU) 、寄存器(Register , REG) 、缓存(Cache) 等部件组成。
- 运算器:用于执行算术(加减乘除)和逻辑(布尔、比较、位运算)运算,
- 控制器:用于指令的取指、译码和执行。
- 寄存器:寄存器是CPU内部的小容量存储设备,用于存储立即需要的指令、数据和地址。寄存器的读写速度远高于主内存,因此可以大幅提高CPU的运行效率。
- 缓存:缓存是位于CPU和主内存之间的小容量高速存储区域,用于暂存CPU即将使用的数据和指令。缓存分为几个级别(L1、L2、L3等),级别越低,速度越快,容量越小。
内存(主存储器)
- 主存储器是计算机中用于暂时存储程序和数据的部件。
- 它按地址存储数据,CPU可以通过地址总线访问这些数据。
- 包括随机存取存储器(RAM)和只读存储器(ROM)。RAM用于临时存储正在运行的程序和数据,而ROM则存储了计算机启动时需要的程序。其中 RAM 是易失性存储器,断电后数据会丢失;ROM 是只读存储器,数据在制造时就被写入,无法更改。
输入/输出设备(I/O设备)
- 输入设备如键盘、鼠标、麦克风、摄像头等,用于向计算机输入数据。
- 输出设备如显示器、打印机、音响等,用于从计算机输出数据。
总线
- 总线是连接 CPU、内存 和 I/O设备 的通信通道。
- 地址总线用于传输内存地址信息。
- 数据总线用于传输数据。
- 控制总线用于传输控制信号。
存储设备
- 硬盘驱动器(HDD)、固态驱动器(SSD)等用于长期存储数据和程序。
主板(Motherboard)
- 主板是计算机的骨架,提供了各种插槽和接口用于连接所有的硬件组件。
- 它还包含了基本的电路和芯片组,用于协调各个组件之间的通信。
计算机执行指令
指令的取指(Fetch)、译码(Decode)、执行(Execute)和回写(Write Back)是CPU执行指令的四个基本步骤,通常被称为指令周期。下面是每个步骤的简要说明:
- 取指(Fetch):
- 在这个阶段,CPU从主存储器中取出下一条要执行的指令。
- 程序计数器(PC)指向存储器中下一条指令的地址。
- 指令从存储器读取到指令寄存器(IR)中。
- 程序计数器自动增加,指向下一条指令的地址,为下一次取指做准备。
- 译码(Decode):
- 在这个阶段,CPU解释指令寄存器中的指令。
- 指令的操作码(opcode)被解码,以确定需要执行的操作类型。
- 指令中的操作数地址(如果有的话)被提取出来,可能还需要从寄存器或存储器中读取操作数。
- 执行(Execute):
- 在这个阶段,CPU执行指令所指定的操作。
- ALU(算术逻辑单元)用于执行算术或逻辑操作。
- 可能会涉及到寄存器之间的数据传输,或者寄存器和存储器之间的数据传输。
- 执行结果可能会改变状态寄存器中的标志位。
- 回写(Write Back):
- 在这个阶段,执行阶段的结果被写回到寄存器或存储器中。
- 如果指令修改了寄存器的值,新的值会被写回到寄存器文件中。
- 如果指令是存储器写入操作,结果会被写回到存储器的相应地址。 这四个步骤组成了一个指令的完整执行过程。现代CPU为了提高性能,通常会采用流水线技术,使得多个指令的不同阶段可以并行执行。
- 在指令的取指阶段,CPU中的MAR的内容来自哪里?
在指令的取指阶段,CPU中的内存地址寄存器(Memory Address Register, MAR)的内容通常来自程序计数器(Program Counter, PC)。程序计数器存储了下一条指令在内存中的地址。当CPU执行指令时,它会首先将程序计数器的内容复制到内存地址寄存器中,然后使用这个地址从内存中取出指令。之后,程序计数器会更新,指向下一条指令的地址,为下一次取指做好准备。这个过程是CPU执行程序的基本机制之一。
- 执行一条指令的全过程中,指令的编码会出现在CPU中的哪些部件?
在执行一条指令的全过程中,指令的编码会出现在CPU的几个关键部件中。以下是一般的流程:
- 程序计数器 (PC): 首先,指令的地址存储在程序计数器中。当CPU准备取指令时,PC的内容会被用来访问内存。
- 内存地址寄存器 (MAR): 程序计数器的内容会被复制到内存地址寄存器中,MAR用来指定要读取的内存地址。
- 内存数据寄存器 (MDR): 指令从内存中读取后,会暂时存储在内存数据寄存器中。
- 指令寄存器 (IR): 接下来,指令从MDR中被复制到指令寄存器中。IR通常分为两部分:一部分用于存储操作码(opcode),另一部分用于存储操作数或操作数的地址。
- 控制单元 (CU): 控制单元会解码IR中的操作码,并产生一系列的控制信号来指挥其他部件执行指令。
- 寄存器文件: 如果指令需要访问寄存器中的数据,寄存器文件会被用来读取或写入数据。
- 算术逻辑单元 (ALU): 如果指令涉及计算,ALU会执行这些计算。
- 状态寄存器: 某些指令可能会改变状态寄存器中的标志位,这些标志位用于条件分支等操作。
- 数据缓存/CPU缓存: 在取指令或操作数据的过程中,指令或数据可能会被缓存起来,以提高性能。
- 写回阶段: 执行结果可能会被写回到寄存器文件、状态寄存器或内存中。 在整个过程中,指令的编码会从内存中转移到IR中,并在控制单元中被解码,以指导CPU的其他部分执行相应的操作。指令的编码不会一直保留在某个部件中,而是在不同的阶段被不同的部件使用和处理。
- 课程视频中讲解的指令是“ADD R0, [6]”,如果换成“ADD [6], R0”,则在执行该条指令的过程中,会读几次存储器?
在解释这两条指令的差异之前,我们需要明确它们的含义。假设我们处于一个简化的CPU体系结构中,这里的ADD R0, [6]
意味着将寄存器R0的内容与内存地址6处的内容相加,结果存储在R0中。而ADD [6], R0
则意味着将内存地址6处的内容与寄存器R0的内容相加,结果存储回内存地址6处。 对于ADD R0, [6]
指令,执行过程通常涉及以下步骤:
- 读取指令本身从内存到CPU。
- 从内存地址6读取数据到CPU(一次内存读取)。
- 将内存中的数据与寄存器R0的内容相加。
- 将结果写回到寄存器R0。 对于
ADD [6], R0
指令,执行过程通常涉及以下步骤: - 读取指令本身从内存到CPU。
- 从内存地址6读取数据到CPU(第一次内存读取)。
- 将内存中的数据与寄存器R0的内容相加。
- 将结果写回到内存地址6处(第二次内存写入)。 因此,对于
ADD [6], R0
指令,在执行过程中会进行一次内存读取和一次内存写入。而对于ADD R0, [6]
指令,则只有一次内存读取,因为结果被写回到寄存器而不是内存。所以,ADD [6], R0
指令会比ADD R0, [6]
多一次内存操作,即多一次内存写入。
- 课程视频中讲解的指令是“ADD R0, [6]”,如果换成“ADD R0, R1”,则在执行该条指令的过程中,会访问几次存储器?
指令“ADD R0, R1”表示将寄存器R1的内容加到寄存器R0的内容上,并将结果存储在寄存器R0中。在这个过程中,由于所有的操作都在寄存器之间进行,不需要访问内存。 因此,执行“ADD R0, R1”指令的过程中,不会访问存储器。这条指令只涉及到CPU内部的寄存器操作,具体步骤如下:
- 读取指令本身从内存到CPU(取指阶段)。
- 从指令寄存器中解码操作码和操作数。
- 从寄存器文件中读取R1的内容。
- 将R1的内容加到R0的内容上。
- 将结果写回到寄存器R0。 总结来说,对于“ADD R0, R1”指令,在执行过程中只会访问一次内存来获取指令本身,而不会因为数据操作而访问内存。
- 现代计算机主存储器一般是以什么单位来进行划分的?
现代计算机主存储器通常是以字节(byte)为单位进行划分的。一个字节通常由8位(bit)组成,它是计算机存储和数据处理的基本单元。在字节的基础上,存储器的容量可以表示为更大的单位,例如千字节(KB)、兆字节(MB)、吉字节(GB)、太字节(TB)等。 存储器的每个字节都有一个唯一的地址,这样CPU和其他硬件可以通过地址来访问或修改存储在主存储器中的数据。操作系统和应用程序也是以字节为单位来管理和使用存储空间的。
- CPU向存储器发起访问时,通过什么总线告知存储器当前的访问是读还是写?
CPU向存储器发起访问时,通常会通过地址总线(Address Bus)告知存储器要访问的地址,通过数据总线(Data Bus)进行数据的读取或写入,而通过控制总线(Control Bus)来告知存储器当前的访问是读操作还是写操作。
控制总线是一组用于传输控制信号的线路,它负责传递CPU发出的各种控制信号,包括读写信号、中断信号、时钟信号等。当CPU想要读取存储器中的数据时,它会通过控制总线发送一个读信号;当CPU想要向存储器写入数据时,它会通过控制总线发送一个写信号。这样,存储器就能够根据控制总线上的信号来决定是进行读操作还是写操作。