第一章 计算机系统概述
1.1 计算机发展历程
1.1.1 什么是计算机系统
- 计算机系统
- 硬件:如主机,外设
- 软件:由具有各类特殊功能的程序组成
- 系统软件:管理整个计算机系统,操作系统,数据库管理系统,标准程序库,网络软件(TCP/IP),语言处理程序(编译程序,把高级语言翻译成机器语言),服务程序
- 应用软件:按任务需要编制的各种程序,如QQ,微信
- 计算机性能的好坏取决于硬件和软件功能的总和。
- 计组是研究硬件在底层是如何协调工作的。
信息化世界
- 计算机硬件能识别的数据?
- 计算机硬件唯一能识别的数据是 二进制数0和1
- 计算机硬件是如何识别0和1这两个二进制数的?
- 用两种电信号,分别是低电平/高电平来表示0/1
- 什么是低电平/高电平?这种电信号可以表示为:
- 低电平表示二进制0
- 高电平表示二级制1
CPU或者内存的金属针脚,是这些硬件用来发送或者接受数据的。
那么这些数据是如何进行交换的?主板上面的印刷电路,可以理解是电线,用来导电,释放低电平或者是高电平这种电信号,也就是0或者1。
1.1.2 计算机硬件的发展
第一台电子数字计算机:ENIAC,1946年,第二次世界大战快结束时期,美国军方用来计算武器的射程等,军方提出的。请的顾问是 冯诺依曼,采用电子管作为逻辑元件。什么是逻辑元件?计算机在进行数字计算时候,本质是处理一些电信号,所谓逻辑元件就是用来处理这些电信号的最小基本单元,这台计算机就是把很多很多的逻辑元件用线路连接起来,从而实现用电路来运算的功能,每个电子管的体积是比较大的,总共使用了1.8万个电子管。
发展阶段 | 时间 | 逻辑元件 | 速度(次/秒) | 内存 | 外存 |
---|---|---|---|---|---|
第一代 | 1946-1957 | 电子管 | 几千-几万 | 贡延迟线、磁鼓 | 穿孔卡片、纸带 |
第二代 | 1958-1964 | 晶体管 | 几万-几十万 | 磁芯存储器 | 磁带 |
第三代 | 1964-1971 | 中小规模集成电路 | 几十万-几百万 | 半导体存储器 | 磁带、磁盘 |
第四代 | 1972-现在 | 大规模、超大规模集成电路 | 上千万-万亿 | 半导体存储器 | 磁带、磁盘、光盘、半导体存储器 |
第一代:电子管时代
以ENIAC为代表的电子管时代,体积超大,耗电量超大,程序员直接使用机器语言编程,在纸带上编程,打孔,有孔的表示二进制0,没有孔的地方表示二进制1,这个阶段如果有只小虫子在纸带上死掉了,会导致纸带机读取二进制0和1出现错误,影响程序的运行,这也是 bug的由来。
第二代:晶体管时代
贝尔实验室发明了晶体管,晶体管体积比电子管小很多,计算机的体积也变小了,开始出现面向过程的高级语言:FORTRAN。为了让计算机有自我管理的功能,出现了操作系统的雏形。这个阶段制造一台计算机需要几万到几十万个晶体管,那手动把他们焊接到电路板上,那可能就有几百万个焊接点,这个阶段计算机硬件不是很可靠的,如果有一个焊接点出现问题可能导致计算机无法工作。后来就有人发明了集成电路。
第三代:中小规模集成电路时代
把逻辑元件集成到基片上, 采用集成电路制造工艺,计算机变得小,功耗也降低,可靠性也比焊接电路高得多。这个阶段计算机也没有推向个人生活。
第四代:大规模、超大规模集成电路
随着集成电路制作工艺的提升,进入到这个阶段,芯片技术进步。
英特尔的CPU发展情况:
个人使用微型计算机的发展是以微处理器技术为标志,随着微处理器的发展而发展。
-
1947年,贝尔实验室,发明了晶体管。当时是三个人,其中一个是 威廉肖克利 ,后来肖克利离开了贝尔实验室。
-
1955年,肖克利在硅谷创建 肖克利实验室股份有限公司,生产晶体管卖钱。吸引力一堆人才,其中八个人:摩尔、罗伯茨、克莱纳、诺伊斯、格里尼克、布兰克、郝尔尼、拉斯特。肖克利虽然很牛,但是对公司的管理并不好,这八个人觉得跟着肖克利干没有前途,这八个人集体辞职,由于背叛了肖克利,这八个人被肖克利称为 八叛徒。
-
1957年,八叛徒(traitorous eight)成立了仙童半导体公司。刚开始也是干老本行,给IBM等生产晶体管。
-
1959年,仙童半导体发明集成电路,后来仙童半导体被人收购后,这八个人陆续离开公司。
-
1968年,摩尔等三个人离开仙童,创立了英特尔(intel)公司。
-
1969年,仙童销售部负责人桑德斯离开仙童,创立了AMD公司。 Intel和AMD又是后来超大规模集成电路的推行者。
-
摩尔定律:集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,整体性能也将提升一倍,揭示了信息技术进步的速度。
-
除了处理器的集成度、 运算速度符合摩尔定律,其实存储器-主存的发展也符合摩尔定律
1.1.3 计算机软件的发展
1.1.4 目前的发展趋势
1.2 计算机硬件的基本组成
1.2.1 早期的冯诺依曼结构
ENIAC这台计算机的问题是每一步的操作需要执行什么指令,每一步都是需要程序员手动去连接线缆告诉计算机,虽然这台计算机的操作速度快,但是程序员每一次都要手动接线告诉计算机怎么做,因此ENIAC的速度就被手动操作耗时给抵消了,所以为了解决这个问题,冯诺依曼第一次提出了存储程序。
ENIAC这台计算机,是程序员说一句,它做一句,而冯诺依曼提出的带存储程序的计算机,把所有要执行的指令一口气告诉计算机,全部放到主存里,然后计算机一条一条执行指令,程序员不需要手动接线。大幅提升计算速度
冯诺依曼计算机的特点:
- 计算机有五大部件组成
- 指令和数据以同等地位存放在存储器,可按地址寻访
- 指令和数据用二进制表示
- 指令由操作码(加、减)和地址码(数据的地址)组成
- 存储程序
- 已运算器为中心(输入和输出设备与存储器之间的数据传送通过运算器完成)
1.2.2 现代的计算机结构
也是冯诺依曼结构的优化
1.2.3 各个硬件部件的细节
1.2.3.1 主存储器
- 存储器是计算机的存储部件,用来存放程序和数据。
- 存储器分为主存储器(简称主存,也称内存储器)和辅助存储器(简称辅存,也称外存储器)。
- CPU能够直接访问的存储器是主存储器。辅助存储器用于帮助主存储器记忆更多的信息,辅助存储器中的信息必须调入主存后,才能为CPU所访问。
- 主存储器由许多存储单元组成,每个存储单元包含若干个存储元件,每个元件存储一位二进制代码“0”或“1”。故而存储单元可存储一串二进制代码,称这串代码为存储字,这串代码的位数称为存储字长,存储字长可以是一个字节(8bt)或者是字节的偶数倍。
- 主存储器的工作方式是按存储单元的地址进行存取的,这种存取方式称为按地址存取方式(相联存储器是按内容访问的)。
- 存储体:存放二进制数据的,由一系列的存储元件构成,存放二进制0或1。
- MAR:Memory Address Register(存储地址寄存器),寄存器也是用来存数据的,这个是存放数据的地址,经过地址译码后找到所选的存储单元。MAR的位数反应存储单元的个数,如MAR是4个bit位,4个二进制最多表示的数字是0000-1111,即0-15,则最多有 2^4=16个存储单元。
- MDR:Memory Data Register(存储数据寄存器),是主存和其他部件的中介机构,用于暂存要从存储器中读或者写的信息,时序控制逻辑用于产生存储器操作所需的各种时序信号。MDR的位数和存储字长相等。一般为字节的二次幂整数倍。
- 请注意MAR与MDR虽然是存储器的一部分,但在现代CPU中却是存在于CPU中的,另外后文提到的高速缓存( Cache)也是存在于CPU中,也就是说逻辑上MAR与MDR是属于存储器的,但是实现上确是属于CPU的。
1.2.3.2 运算器
- 运算器的核心是算术逻辑单元ALU( Arithmetic and Logical Unit)。
- 运算器包含若干通用寄存器,用于暂存操作数和中间结果,如累加器(ACC)、乘商寄存器(MQ)、操作数寄存器(X)、变址寄存器(Ⅸ)、基址寄存器(BR)等,其中前3个寄存器是必须有的。
- 运算器内还有程序状态寄存器(PSW),保留各类运算指令或测试指令的结果的各类状态信息,以表征系统运行状态。
1.2.3.3 控制器
- 控制器是计算机的指挥中心,由其“指挥”各部件自动协调地进行工作。
- 控制器由程序计数器(PC)、指令寄存器(IR)、控制单元(CU)组成。
- PC用来存放当前欲执行指令的地址,可以自动+1以形成下一条指令的地址,它与主存的MAR之间有一条直接通路。
- IR用来存放当前的指令,其内容来自主存的MDR,指令中的操作码OP(IR)送至CU,用以分析指令并发出各种微操作命令序列,而地址码Ad(IR)送往MAR来取操作数。
- 现代计算机一般是将运算器和控制器集成到同个芯片上,合称为*处理器,简称CPU。CPU和主存储器共同构成主机,而计算机中主机的其他硬件装置(如I/O)统称为外部设备(简称外设)。也就是说,外设主要包括外存和IO设备。
1.2.3.4 计算机执行过程
计算机的工作过程分为以下几个步骤:
-
把程序和数据装入到主存储器中。
-
从程序的起始地址运行程序。
-
用程序的首地址从存储器中取出第一条指令,经过译码、执行步骤等控制计算机各功能部件协同运行,完成这条指令功能,并计算下一条指令的地址。
-
用新得到的指令地址继续读出第二条指令并执行,直到程序结束为止:每一条指令都是在取指、译码和执行的循环过程中完成的。
下面以取数指令(即将指令地址码指示的存储单元中的操作数取出后送至运算器的ACC中)为例,其信息流程如下:
-
取指令:PC→MAR→M→MDR→IR
-
分析指令:OP(IR)→CU
-
执行指令:Ad(IR)→MAR→M→MDR→ACC
此外,每取完一条指令,还必须为取下条指令作准备,形成下一条指令的地址,即(PC)+1。
注意:PC指程序计数器PC中存放的内容。PC→MAR应理解为(PC)→MAR,即程序计数器中的值经数据通路送到MAR,也即表示数据通路时括号可省略(因为只是表示数据流经的途径,而不强调数据本身的流动)。但是运算时括号不能省略,即(PC)+1→PC不能写为PC+1→PC。
1.3 计算机系统层次结构
1.4 计算机性能指标
1.4.1 存储器的性能指标
1.4.2 CPU性能指标
CPI:Clook cyclc Per Instruction,执行一条指令所需的时钟周期数。
同一个CPU,执行不同的指令,CPI不同,甚至是相同的指令,同一个CPU执行多次,CPI也会不同。比如CPU 执行取数指令,跟主存的状态也有关,如果主存负荷较大,那取数时间也会变长,也就是需要更多的时钟周期。所以执行一条执行需要花多少个时钟周期,这个问题我们放在微观视角来看,是毫无意义的,因为影响CPU指标的因素太多,我们一般讨论执行一条执行需要花多少个时钟周期的时候,讨论的是平均值,执行一条指令的耗时=CPI * CPU时钟周期
IPS:Instructions Per Second ,每秒执行多少条指令。