计算机组成原理学习小笔记—计算机系统概述(一)
计算机是当代最为卓越的科学成就之一,它的发明极大地推动了人类文明社会的发展。作为学习计算机的各位同学而言,其中的组成原理是一门必修课;对于着重学习软件的同学而言,计算机组成原理同样会使你对计算机的理解提升更高的档次。
本文参考使用教材为谭志虎老师主编的《计算机组成原理微课版》,当然现在或者往后的目录结构多参考教材目录结构(稍微变更幅度不大),有电子书或者实体书的同学我会将其中的部分内容总结清楚,如有遗漏,请多多批评指针谢谢。
1、计算机发展历程
计算机的发展历程中主要分为国外计算机的发展和国内计算机的发展。
1.1 国外计算机发展
1946年2月份诞生出第一台电子数字计算机ENIAC—即**电子数字积分计算机。**这标志着电子计算机的时代到来。随后的计算机发展过程经历如下四个阶段:
1.1.1 电子管计算机(1946-1958)
第一代计算机的电子器件为电子管,主要应用于科学研究计算,编程语言为机器语言。因为当时第一代集团的计算机普遍不能小型化,所以以前的计算机多为体积大,自然也会出现功耗和可靠性问题。
1.1.2 晶体管计算机(1958-1964)
第二代计算机电子器件为晶体管,其主存采用的是磁芯存储器。相对于电子管计算机,它的体积功耗等问题明显降低,并且其应用开发仍然是科学计算、数据处理,编程语言为汇编语言并开始使用部分高级语言。
1.1.3 集成电路计算机(1964-1971)
第三代计算机基本电子器件采用的是集成电路,主存采用半导体存储器,并且出现了键盘、鼠标和显示器等外部设备。
此阶段的计算机有较为明显分化的趋势—即小型化和大型化计算机、多元化和系列化。
1.1.4 超大规模集成电路计算机(1971-Today)
第四代计算机普遍采用的是超大规模的集成电路,以微处理器为特征,运算速度大大提高。
其中该阶段出现了精减指令系统计算RISC和复杂指令计算机CISC。多行并行处理与网络化也成为了该阶段计算机的主要特征。
1.2 我国计算机发展概述
我国计算机发展在20世纪50年代,也经历国外电子计算机的历程。
首先我们在1958年和1959年研制出第一台小型电子管数字计算机和第一台大型通用电子管数字计算机,填补了计算机技术的空白,是计算机发展的一大里程碑。其次在60年代研制出晶体管通用电子计算机;70年代研制出小型集成通用电路通用数字电子计算机…
2009年在国防科技大学研制的天河一号超级计算机,成为2010-2015年天河系列获取全球500强的开端。2016年采用自主芯片制造的神威太湖之光取代天河二号获得榜首。
从1958年计算机的空白,到如今成为继美国、日本成为第三大超级计算机的生产国,这是一代代科研人的努力奋斗,造就了像现在的成绩。但是我国计算机产业在关键技术上如CPU设计、芯片制造等方面依然存在短板。
创新创造能力缺陷:
银河-I是以美国超级计算机Cray-1为范本研制的,首先在总体方案上就是在瞄准Cray-1并且借鉴其成功的设计思想。
同时对当时国内没有或是不能保证质量的核心元器件,只能设法从外国引进。2010年11月,“天河一号”成为世界最快的超级计算机。但是其核心部件90%以上却依然采用了美国英特尔公司和AMD公司最先进的CPU(中央处理器)和GPU(图形加速器)。我们目前的CPU和GPU设计依然要参考其他国家的设计,创新发展在这里显得格外重要。还有连续六次登顶世界超级计算机500强之首的“天河二号”,其硬件系统主要部件的计算阵列也依然采用美国商用微处理器。
我国在设计银河—I时,才决定把主机与软件共同列为主攻方向,并立即启动软件开发工作。在计算机层面上,我们的软件起步比其他国家要晚的多。
超算人才、超级计算机的能耗问题、应用领域受限无法发挥超级计算机的能力等等问题至今也是研究的重点。
所以未来中国计算机发展还有很多的路要走。
2、计算机系统组成
一台完整的计算机包括基础的硬件功能,和执行算法命令的软件系统。但是这两者必然需要协同并发才能让计算机安稳的工作。所以其实对计算机的理解不能局限于某一个系统层面,而应该将其包囊成软件系统与硬件系统组成的完整系统。
- 硬件是基本的计算机的组成核心,相当于人的身体部位。
- 软件在于将解决问题思想方法和过程以程序的形式进行描述,也就是语言。它沟通人(程序员)与计算机的交互沟通,解决计算的实际问题入手,这相当于人的头脑想法。
2.1 计算机硬件系统—冯诺依曼体系结构
计算机硬件系统是构成计算机系统的电子线路和电子原件等物理设备的总称。简单来说,就是把硬件看成是构成计算机的物理物质基础。
讲到硬件就要提及一个美国科学家—冯.诺依曼。
- 冯诺依曼首先提出用二进制数作为数字计算机数制基础的理论。
这相当于怎么构建设计人体的组成元素。‘0’和‘1’两个状态首先可以表达布尔代数(即判断是非)实现运算电路,实现计算机的计算原则。
这相当于怎么设计人体的组成结构(即心肝脾肺肾呵呵)。存储程序就是将解题步骤编织成程序,然后将程序和运行程序所需要的数据以二进制的形式存放在存储器中以方便执行。(这就相当于提供一个本子,人们以自己所想的方式将自己遇到问题解决的思路和方法记录到本子上并且以此作为准则)。程序控制在于计算机的控制器逐条取出存储器中的指令并顺利执行,控制各个功能部件进行相应的操作以完成数据的加工处理。(简单来说就是我们通过记录本记录“怎么完成一件事情”,以从上到下的步骤依靠自身依次执行动作条例,最后完成了这件事)
根据如上的两点思想,我们就可以将其成为冯诺依曼体系结构了。但是这些终究为理论层面,具体如何设计计算机硬件系统呢就需要如下详细的解读了。
2.2 计算机硬件设计
如上文所说,计算机硬件设计以冯诺依曼体系结构为理论基础,那么实现这个理论基础的设计思想,就需要其中的部件:运算器、控制器、存储器、输入&输出设备。
输入输出设备是在集成电路计算机发展阶段所得到的产物,但是冯诺依曼体系结构是在20世纪40年代产生的。当然下面介绍的是现代的电子计算机。
首先CPU由控制器和运算器组成,Host(即主机)则是由CPU和存储器相互处理并行所组成。输入设备(如鼠标)进行操作时,主机就会处理其中的数据处理,然后静待一段时间输出在输出设备上。
2.2.1 存储器
存储器得到主要功能在于存放程序和数据,就是印证了冯诺依曼体系结构—存储程序的部分。
目前计算机的主存储器就是半导体存储器,存储体由许多存储单元组成,信息就是以单元的形式存放。存储单元以某种顺序排列编号,每个存储单元对应一个编号称为单元地址。(举例来说,就是一个区域有很多房屋,我们以房屋信息来作为管理建筑的单位。房屋需要编号如第26号房屋,到时寻找26号房屋就有且只有那个屋子相对应,而此时“第26号房屋”就被称为地址—即寻找该屋子的索引标号)。
2.2.2 运算器
运算器主要用于信息加工处理,对数据进行算术运算和逻辑运算。
- 算术运算:进行加减乘除
- 逻辑运算:进行比较、移位、逻辑加、逻辑乘
2.2.3 控制器
控制器是计算机的指挥中心,其工作在于解释程序。每次从程序中读取一段指令后,控制器同分析翻译好的译码产生操作命令到其他功能部件控制各个部分的动作,使得整个电脑运算显得协调有序的进行。
一般计算机会有两种信息流,即数据流信息和操作流信息。前者受到后者的控制。控制流信息就是将操作命令分散到各个功能部件。
控制流信息被控制器所产生并发送,其参考的依据来自于:指令寄存器、状态寄存器、时序电路。
- 指令寄存器:用于存放机器指令
- 状态寄存器:反映计算机运行情况的状态信息
- 时序电路:产生各种时序电路,以产生有序的操作命令响应
2.2.4 输入&输出设备
常见的输入设备有键盘、鼠标、扫描仪、数/模转换器
常见的输出设备:打印机、显示器、数/模转换器
2.3 计算机软件系统
计算机软件系统将解决的思维方法和过程用程序来描述,程序就是软件的核心组成部分。一般而言,一台计算机中全部程序的集合统称为计算机的软件系统。它按照功能划分分为:系统软件和应用软件。
系统软件分为以下几类:
- 操作系统:常见的如Linux、Android、iOS等等,这些是管理计算机中各种资源、自动调度用户作业处理中断的软件。我国目前主流操作系统有银河麒麟、鸿蒙等,比如我们生活中常见的智能手环或者网络摄像头,就是使用了嵌入式操作系统RT-Thread。
- 程序设计语言与语言处理程序:语言也通常分为3类,即机器语言、汇编语言和高级语言。机器语言:即面向机器语言,每台机器的代码和格式指令等等都是规定好的,以方便机器运行。汇编语言:汇编语言通过汇编器转换成机器指令才能执行。高级语言:比如C/C++、JAVA、Python等,与人类自然语言接近并且计算机能够接受的语言。
- **数据库管理系统:**数据库系统是建立在文件系统之上,方便信息管理处理发展起来的技术。在信息处理上、情报检索、办公自动等方面有很重要的做支撑作用。
3、计算机系统的层次结构
3.1 系统的层次结构
如上所示,每个层次对应的内容都各不相同,高层是低层功能的拓展,低层是高层的基础。
4、计算机性能指标和评价
4.1 基本性能指标
4.1.1 字长
计算机的字长就是指CPU一次处理的数据位数,其用二进制长度衡量。字长一般与计算机内部寄存器、运算器和数据总线的位宽相等。
而字长以字节(Byte)为基本单位,不同的计算机的字长可能不相同。早期的电脑一般以16位居多,现在则加大了计算量。比如说我们买的电脑就有分32位或者64位。
字长对计算机性能的影响:
4.1.2 主存容量
主存容量是指贮存能够存储的最大信息量,一般用M*N
4.2 时间有关的性能指标
时间就是衡量计算机系统性能最重要的标准,执行一个程序的时间越少,说明该机器的性能高。其指标如下所示:
时钟周期是计算机中最基本、最小的时间单位。一个时针周期中,CPU仅完成的一个最基本的动作。时针周期是时钟频率的倒数。所以两者的关系成反比。
CPI是执行每条指令所需要的平均时钟周期数。CPI可以表示每条指令所需要的时针周期数。
CPU时间跟CPI、时钟频率和指令条数有关系。
IPC是每个时针周期CPU能够执行的指令条数,是CPI的倒数。
每秒百万条指令,更大的单位有GIPS。可执行每秒执行的指令数目作为衡量计算机性能的指标。
指的是计算机每秒执行浮点运算的次数。如某系统运算速度为2MFLOPS,则表示该系统浮点数为每秒200万次。
简单介绍了一下上面的概念,接下来让我们看看下面的公式:
假设程序中包含的总指令条数为IC,执行程序所需要的时针周期数为m,时针周期为T,频率为f,根据定义可知:
CPI=m/IC
某段时间的CPU时间T(CPU)表示为:
T(CPU)=m*T=m/f
T(CPU)=CPI*IC*T
MIPS=IC/(T(CPU)*10^6)
MIPS=f/CPI=IPC*f
执行一段程序所需要的时间=CPU时间+I/O时间+存储访问+各类排队时延
这里简单的罗列了以上公式,部分公式未能表达出来。
4.3 性能测试工具
性能测试工具对于测试程序来获取其测试的性能,目前较为流行的性能测试软件如下:
硬盘测试软件:IOmeter、CrystalDiskMark、ATTO Disk Benchmark、HD Tune
光驱测试软件:Nero lnfoTool、Nero CD-DVD Speed
显卡测试软件:3DMark、FurMark、GPU-Z、Fraps、SiSoftware Sandra
CPU测试软件:CPU-Z、SiSoftware Sandra、Geekbench、Fritz、Super PI
内存测试工具:SiSoftware Sandra、MemTest、PassMark PerformanceTest
综合性测试软件:SiSoftware Sandra、鲁大师、安兔兔
总结
以上是我对计算机组成原理的个人理解+参考书籍的总结,对于部分内容而言我稍微修改其内容和目录,可以说稍微扩展了课外的知识点吧(比如我国的计算机发展历程较为详细的介绍目前国内的短板和努力的方向。)谢谢大家的阅读!
|