计算机系统层次结构:硬件篇
计算机系统层次结构:硬件篇
计算机系统由硬件系统和软件系统共同构成,其中硬件系统包括运算器、存储器、控制器、输入设备和输出设备五大部件。软件系统则包括操作系统、应用软件等。计算机系统的性能好坏,很大程度上取决于软件的效率和作用,而软件性能的发挥又离不开硬件的支持。
一、计算机系统的组成
硬件系统和软件系统共同构成了一个完整的计算机系统。
- 硬件是指有形的物理设备,是计算机系统中实际物理装置的总称。如显示器、鼠标、键盘、耳机、显卡、声卡等这些实际的物理装置。
- 软件是指在硬件上运行的程序和相关的数据及文档。如计算机上下载的这些应用、平时我们使用的文件、玩的电脑游戏等。
计算机系统的性能的好坏,很大程度上是由软件的效率和作用来表征的,而软件性能的发挥又离不开硬件的支持。例如,各种大型的网络游戏,这些网络游戏如果想要正常的运行是需要一些最基础的配置的,如《侠盗猎车手5》PC版推荐配置需求:
- 操作系统:Windows 7 SP1/8/8.1 64位
- CPU:英特尔Core i5-3470/AMD FX-8350
- 内存:不少于8GB
- 显卡:NVIDIA GeForce GTX 660(2GB)或AMD Radeon HD 7870(2GB)
- 硬盘:可用空间不少于65GB
当我们想要玩这款游戏的话,如果硬件不达标,那势必就会影响游戏体验,甚至是无法正常启动游戏,因此软件的性能发挥离不开硬件;如果硬件达标的情况下,软件上存在问题,在运行的过程中会出现各种各样的卡顿和bug,那么计算机的性能也不会太高,这就是为什么说计算机性能的好坏很大程度上是由软件的效率和作用来表征的。
对某一功能来说,其既可以用软件实现,又可以用硬件实现,则称为软硬件在逻辑功能上是等价的。比如我们可以通过乘法运算器来实现数据相乘的功能,我们同样可以通过软件多次调用加法运算器来实现数据相乘的功能。很显然对于乘法这种既能够通过硬件实现,又可以通过软件实现的功能,我们就可以称其为软硬件在逻辑功能上等价。
在设计计算机系统时,要进行软/硬件的功能分配。通常来说,一个功能若使用较为频繁且用硬件实现的成本较为理想,使用硬件解决可以提高效率。还是以乘法运算为例,如果我们直接通过乘法运算器来实现乘法运算与通过软件来实现乘法运算,很显然直接通过硬件来实现的话效率会更高。
二、计算机硬件
2.1 冯·诺依曼机基本思想
冯·诺依曼在研究EDVAC机时提出了“存储程序”的概念,“存储程序”的思想奠定了现代计算机的基本结构,以此概念为基础的各类计算机通称为冯·诺依曼机,其特点如下:
- 采用“存储程序”的工作方式。
- 计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备5大部件组成。
- 指令和数据以同等地位存储在存储器中,形式上没有区别,但计算机应能区分它们。
- 指令和数据均用二进制代码表示。指令由操作码和地址码组成,操作码指出操作的类型,地址码指出操作数的地址。
“存储程序”的基本思想是:将事先编制好的程序和原始数据送入主存后才能执行,一旦程序被启动执行,就无须操作人员的干预,计算机会自动逐条执行指令,直至程序执行结束。
对于冯·诺依曼机的思想我们应该如何来理解呢?我们三个方面来理解:
2.1.1 存储程序的作用
在计算机的发展历程中我们知道了在ENIAC时代,程序员是通过带孔纸带和带孔卡片的方式来与计算机进行交互的,这时还没有存储程序的概念,并且这种人工操作的方式使得计算机的使用效率并不高,因此为了提高计算机的使用效率,冯·诺依曼就提出了存储程序的概念,通过存储程序,计算机就能够将多个任务逐一完成,这样就减少了人工装卸纸带而耗费的大量时间,从而达到了解决人机矛盾提高计算机的使用效率的作用。
2.1.2 计算机硬件系统的组成
计算机在刚开始被研发出来时,就是用于科学领域的计算任务,因此我们就需要计算机能够具有计算的功能,刚开始计算机并没有操作系统的概念,计算机的运算工作都是通过硬件直接完成,因此保证计算机能够完成计算工作的运算器是计算机中必不可少的一个硬件;
为了能够进一步提高计算机的使用效率,随着存储程序的思想的提出,存储器也开始加入的计算机系统中,并逐步发展成计算机中不可或缺的一部分;
在电子管时代,人机交互的方式是通过带孔的纸带和卡片以及纸带机来进行人机交互的,为了能让计算机识别指令,就必须要事先给纸带上打上对应的孔,这种人机交互的方式也进一步限制了计算机资源的利用。因此为了更直观的与计算机进行人机交互,键盘和鼠标这种输入设备也被加入到了计算机系统中,而为了能够第一时间获取计算机的运行结果,显示器这种输出设备也开始逐渐完善;
为了保证计算机资源的合理分配与利用,那对这些资源的控制也就成为了一台计算机必不可少的功能,于是计算机系统中也便有了控制器这一硬件;
2.1.3 指令与数据
对于计算机而言,它能够识别的内容只有一种——电信号,因此科学家们最早使用的机器语言就是二进制语言,但是二进制语言的可读性是非常差的,以至于在通过二进制语言进行编码时需要借助对应的手册。
为了提高计算机语言的可读性,随后就出现了汇编语言。汇编语言是对二进制语言的一种解释,科学家可以通过汇编语言向计算机传达一些指令或者直接输入一些数据,而计算机在识别时识别到的都是二进制语言,因此指令和数据是没有高低之分,它们的地位是相同的;
指令与数据虽然在形式上没有区别,但是计算机在识别的过程中会对其进行区分。指令主要是由两部分组成——操作码和地址码,操作码存储的是操作的类型,地址码则存储的是进行操作的数据的地址。
当我们对计算机中输入数据时,计算机会将其存储在内存中;当我们向计算机输入指令时,计算机会通过操作码的信息来执行相应的指令,通过地址码的信息来找到需要执行该指令的数据。
2.2 计算机的功能部件
经过前面的介绍,相信大家对冯·诺依曼的基本思想有了一个初步的了解,接下来我们就从硬件的角度出发,认识一下冯·诺依曼机的五大组成部件。
2.2.1 输入设备
输入设备的主要功能是将程序和数据以机器所能识别和接收的信息形式输入计算机。最常用也最基本的输入设备是键盘,此外还有鼠标、扫描仪、摄像机等。
2.2.2 输出设备
输出设备的任务是将计算机处理的结果以人们所能接受的形式或其他系统所要求的信息形式输出。最常用、最基本的输出设备是显示器、打印机。
输入/输出设备(简称I/O设备)是计算机与外界联系的桥梁,是计算机中不可缺少的重要组成部分。
2.2.3 存储器
存储器分为主存储器(又称内存储器)和辅助存储器(又称外存储器)。CPU能够直接访问的存储器是主存储器。辅助存储器用于帮助主存储器记忆更多的信息,辅助存储器中的信息必须调入主存后,才能为CPU所访问。
主存储器的工作方式是按存储单元的地址进行存取,这种存取方式称为按地址存取方式。主存储器的最基本组成如下所示:
- 存储体存放二进制信息;
- 地址寄存器(MAR)存放访存地址,经过地址译码后找到所选的存储单元;
- 数据寄存器(MDR)用于暂存要从存储器中读或写的信息;
- 时序控制逻辑用于产生存储器操作所需的各种时序信号。
存储器工作原理的实例理解
我们应该如何来理解存储器的工作原理呢?
这里我们通过一个实际的例子来对其进行说明;
在阳光中学每个学生在入学时就会被分配一个独属于他的学号,这些学号信息会记录在学校的教务系统中;张三、李四、王五在入学时同样也获得了属于他们的学号,分别是012401/012402/012403;一天校长要找张三代表学校去参加竞赛,校长首先通过教务系统获取了他的学号012401通过学号,校长知道了他在初一一班,之后校长通知了该班班主任,让他通知张三到校长办公室一趟;张三来到校长办公室后发现办公室没人,所以在此等待校长的到来
在上面的这个例子中,教务系统就相当于存储地址信息的地址寄存器MAR,初一一班就是存储数据的存储体,校长办公室就是暂时存储数据的数据寄存器MDR;
计算机在运行时就和这个例子所示的步骤一致,先通过MAR获取到数据在存储体中的存储地址,再通过存储地址在存储体中获取到该数据,最后将数据暂时存入MDR中等到后续的操作;
在时序控制逻辑的控制下,存储器能够按部就班的进行操作:先从MAR获取数据地址,再从存储体中获取数据,最后将数据暂存在MDR中。
存储体由许多存储单元组成,每个存储单元包含若干存储元件,每个存储元件存储一位二进制代码'0'或'1'。因此每个存储单元都可以存储一串二进制代码,这些二进制代码称为存储字,这些二进制代码的位数称为存储字长,存储字长可以是1B(8bit)或是字节的偶数倍。
MAR用于寻址,其位数对应着存储单元的个数,如MAR为10位,则有2^10个存储单元,记为1K。
MAR的长度与PC的长度相等,这里的PC指的可不是personal computer,而是指的程序计数器Program Counter,这个可不要弄错了。
MDR的位数和存储字长相等,一般为字节的2次幂的整数倍。
注意:MAR与MDR虽然是存储器的一部分,但在现代计算机中却是存在于CPU中的;另外,后文提到的高速缓存(Cache)也存在于CPU中。
2.2.4 运算器
运算器是计算机的执行部件,用于进行算术运算和逻辑运算。算术运算是按算术运算规则进行的运算,如加、减、乘、除;逻辑运算包括与、或、非、异或、比较、移位等运算。
运算器的核心是算术运算逻辑单元(Arithmetic and Logic Unit, ALU)——通过内部复杂的电路实现算术运算和逻辑运算。
运算器包含若干通用寄存器,用于暂存操作数和中间结果,如:
- 累加器(Accumulator, ACC)——用于存放操作数或运算结果
- 乘商寄存器(Multiple-Quotient Register,MQ)——用于存放乘、除运算时的操作数或运算结果
- 操作数寄存器(Arithmetic and Logic Unit,X)——用于存放操作数
- 变址寄存器(Index register,IX)——用于存放存储单元在段内的偏移量
- 基址寄存器(Base Register,BR)——用来存放操作数或中间结果,以减少对存储器的访问次数的数据寄存器
其中前三个寄存器是必须具备的。
运算器内还有程序状态寄存器(PSW),也称标志寄存器,用于存放ALU运算得到的一些标志信息或处理机的状态信息,如结果是否溢出、有无产生进位或错位、结果是否为负等。
2.2.5 控制器
控制器是计算机的指挥中心,由其“指挥”各部件自动协调地进行工作。控制器由程序计数器(PC)、指令寄存器(IR)和控制单元(CU)组成。
CU(Control Unit)用来分析当前指令给出控制信号。
IR(Instruction Register)用来存放当前的指令,其内容来自主存的MDR。指令中的操作码OP(IR)送至CU,用以分析指令并发出各种微操作命令序列;而地址码Ad(IR)送往MAR,用以取操作数。
PC(Program Counter)用来存放当前欲执行指令的地址,具有自动加1的功能(这里的“1”指一条指令的长度),即可自动形成下一条指令的地址,它与主存的MAR之间有一条直接通路。
一般将运算器和控制器集成到同一个芯片上,称为中央处理器(CPU)。
CPU和主存储器共同构成主机,而除主机外的其他硬件装置(外存、I/O设备等)统称为外部设备,简称外设。
上图就是冯·诺依曼结构中的主机结构图,从图中我们可以看到CPU中包含算术逻辑单元ALU、通用寄存器组GPRs、标志寄存器PSW、控制器、指令寄存器IR、程序计数器PC、存储器地址寄存器MAR和存储器数据寄存器MDR。
图中从控制器送出的虚线就是控制信号,可以控制如何修改PC以得到下一条指令的地址,可以控制ALU执行什么运算,可以控制主存是进行读操作还是写操作(读/写控制信号)。
CPU和主存之间通过一组总线相连,总线中有地址、控制和数据3组信号线。
MAR中的地址信息会直接送到地址线上,用于指向读/写操作的主存存储单元;控制线中有读/写信号线,指出数据是从CPU写入主存还是从主存读出到CPU,根据是读操作还是写操作来控制将MDR中的数据直接送到数据线上还是将数据线上的数据接收到MDR中。
2.3 现代计算机结构
在早期的冯·诺依曼计算机结构中,计算机是以运算器为中心,如下所示:
在这种结构中,不管我们是进行数据的存取、计算都需要先经过运算器再进行相应的操作,这样导致运算器大部分的时间都是用于进行数据的中转,只有极少部分的时间此时在进行它的本职工作——处理数据。
为了完善这一问题,现代计算机则采用的是以存储器为中心的结构,如下所示:
随着集成电路的发展,运算器与控制器被整合到了CPU中,CPU和存储器共同构成了计算机的主机部分,而输入和输出设备则变成了计算机的外设部分,如下所示:
这里需要注意的是在计算机组成原理这门课中我们提到的主机是特指由CPU和主存储器组成的主机,不是我们生活中的主机,我们生活中使用的主机除了CPU和主存储器外还会安装一些其它的硬件如散热风扇、硬盘等硬件。
结语
在今天的内容中我们介绍了计算机系统的组成——计算机系统是由硬件系统和软件系统共同组成。在评价一台计算机器系统的性能好坏时,我们需要同时根据其硬件系统与软件系统的好坏来对其进行评价。
在硬件系统中,现在的计算机都是使用的冯·诺依曼机,这一类计算机都具有以下特点:
- 采用的是“存储程序”的工作方式。
- 计算机硬件系统由运算器、控制器、存储器、输入/输出设备5大部件组成。
- 指令和数据以同等地位存储在存储其中,形式上没有区别,但是计算机能够区分它们。
- 指令和数据均用二进制代码表示,享有同等地位。
- 指令由操作码和地址码组成
在早期的计算机结构中,是以运算器为中心,这样就造成了运算器的使用效率低下的问题,为了完善这一问题,于是在后来的计算机结构中开始采用存储器为中心的计算机结构,随着集成电路的发展,控制器与运算器也被整合到了CPU中,于是现代的计算机结构就演变成了由CPU和存储器组成的主机与输入输出设备组成的外设共同构成的计算机的硬件系统。