文章目录
- 前言
- 正文
- 计算机的发展历程
- 什么是计算机系统
- 硬件的发展历程
- 软件的发展
- 计算机硬件的基本组成
- 冯诺依曼体系结构(存储程序型电脑)
- 现代计算机的结构
- 各硬件的工作原理
- 主存储器的基本组成
- 运算器的基本组成
- 控制器的基本组成
- 计算机的工作过程
- 计算机系统的层次结构
- 计算机的性能指标
- 存储器的性能指标
- CPU的性能指标
- 系统整体的性能指标
- 结语
前言
从本篇文章开始学习计算机组成原理的知识,此系列博客将会记录博主学习的知识和学习过程中产生的问题。
正文
在我们之前对于编程语言和操作系统的学习中,我们经常会产生一种知其然而不知其所以然的感觉,可能会产生出许多问题,数字、文字、图像如何使用二进制表示?计算机如何从内存中取出想要的数据?CPU如何识别和执行我们写的程序?诸如此类的问题有很多,这些问题需要我们去探索计算机更深层次的组成和实现原理。于是我们今天开始学习计算机组成原理的知识,首先这篇博客我们来大概的认识一下计算机系统。
计算机的发展历程
什么是计算机系统
计算机系统通常可以分为硬件和软件。硬件是计算机的实体,如主机、外设等,软件是由具有各类特殊功能的程序组成。而计算机性能的好坏取决于软件和硬件功能的总和。
其中软件可以分为系统软件和应用软件。前者用于管理整个计算机系统,最典型的例子就是我们的操作系统,它控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,是非常重要的系统软件。后者是按人物需要编制成的各种程序,就比如说我们生活中常见到的抖音、QQ、微信等都属于应用软件。
硬件的发展历程
至今的计算机硬件的发展历程大致可以分为以下四个阶段:
- 电子管时代(1940年代 - 1950年代):早期计算机使用电子管作为逻辑元件。电子管的特点是体积大、功耗高、易损坏、散热困难,但是它们为早期计算机提供了逻辑功能,并开创了计算机技术的先河。
- 晶体管时代(1950年代 - 1970年代):晶体管的发明标志着计算机硬件发展的新阶段。晶体管比电子管更小、更耐用、功耗更低,并且散热效果更好。这一时代见证了计算机的迅速发展,使得计算机规模和性能不断提升。
- 中规模集成电路时代(1970年代 - 1990年代初期):这一阶段的集成电路包含的元件数量相对较少,通常在数百到数千个之间。主要的应用包括存储器芯片、微处理器和各种接口芯片。虽然这些集成电路已经带来了巨大的性能提升和成本降低,但与后来的超大规模集成电路相比,其集成度较低,因此性能和功能也相对有限。
- 大规模超大规模集成电路时代(1990年代初期至今):随着技术的不断进步,集成电路中可以容纳的元件数量不断增加,从数千个增加到数十亿个甚至更多。这一阶段的集成电路被称为大规模集成电路(Large Scale Integration,LSI)和超大规模集成电路(Very Large Scale Integration,VLSI)。这使得微处理器、存储器、图形处理器等器件的性能得以大幅提升,同时成本也得到了进一步的降低。这一阶段的关键技术包括光刻制程的改进、多层金属化、深亚微米制程技术等,这些技术使得集成电路的制造工艺更加复杂和精密,但也带来了巨大的性能提升和功能丰富度。
软件的发展
计算机软件的发展历程可以简单地分为以下几个阶段:
- 早期阶段(1940年代 - 1950年代):计算机软件的早期阶段是计算机发展的起步阶段。在这个阶段,软件通常是直接编写在机器语言或者汇编语言中,编写和调试都非常繁琐。程序员必须手工编写二进制指令,这使得软件开发进程缓慢且容易出错。
- 汇编语言阶段(1950年代 - 1960年代):随着汇编语言的出现,软件开发变得更加高效。汇编语言是一种更接近机器语言的低级语言,它使用助记符和符号来表示机器指令,使得程序员能够更容易地理解和编写程序。汇编语言的出现提高了程序员的生产率,并且为后来高级语言的发展奠定了基础。
- 高级语言阶段(1960年代 - 至今):高级语言的出现标志着计算机软件发展的重要转折点。高级语言(如Fortran、COBOL、C等)使得程序员能够用更接近自然语言的方式编写程序,而不必关注底层的硬件细节。这大大提高了软件开发的效率和质量。随着时间的推移,高级语言不断发展和完善,出现了面向对象编程、函数式编程等新的编程范式,使得软件开发变得更加灵活和可维护。
- 软件工程阶段(1970年代 - 至今):随着软件规模的不断扩大和复杂度的增加,软件工程成为了一个独立的学科。软件工程通过系统化的方法论、工具和技术,致力于管理和优化软件开发过程,以确保软件的质量、可靠性和可维护性。在这一阶段,出现了许多软件开发方法论和模型,如结构化方法、面向对象方法、敏捷开发等,这些方法论为软件开发提供了指导和支持。
- 互联网和开源阶段(1990年代 - 至今):随着互联网的兴起和开源运动的发展,软件开发进入了一个全新的时代。互联网为软件开发提供了全球性的合作平台和分发渠道,使得开发者能够更加便捷地分享代码、合作开发。开源运动则推动了许多优秀的开源软件项目的诞生和发展,如Linux操作系统、Apache Web服务器、MySQL数据库等。这些开源软件在各个领域都发挥了重要作用,推动了软件开发的进步和创新。
总的来说,计算机软件的发展历程经历了从低级到高级语言、从个体到团队协作、从封闭到开放的演变过程,不断推动着计算机技术的发展和应用。
计算机硬件的基本组成
冯诺依曼体系结构(存储程序型电脑)
最早的计算机器仅内含固定用途的程序。例如一个计算器仅有固定的数学计算程序,它不能拿来当作文字处理软件,更不能拿来玩游戏。若想要改变此机器的程序,你必须更改线路、更改结构甚至重新设计此机器。当然最早的计算机并没有设计的那么可编程。当时所谓的“重写程序”很可能指的是纸笔设计程序步骤,接着制订工程细节,再施工将机器的电路配线或结构改变。
而存储程序型电脑的概念改变了这一切。借由创造一组指令集结构,并将所谓的运算转化成一串程序指令的执行细节,让此机器更有弹性。借着将指令当成一种特别类型的静态资料,一台存储程序型电脑可轻易改变其程序,并在程控下改变其运算内容。
当年,冯·诺依曼由于在曼哈顿工程中需要大量的运算,从而使用了当时最先进的两台计算机Mark I和ENIAC,在使用Mark I和ENIAC的过程中,他意识到了存储程序的重要性,从而第一次提出了存储程序逻辑架构。存储程序的具体方式就是将指令以二进制代码的形式事先输入计算机的主存储器,然后按照其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。
冯诺依曼计算机的结构大致如下图:
冯诺依曼计算机的特点:
- 计算机由五大部件组成
- 指令和数据以同等地位以二进制的形式存于存储器,可以按照地址寻访
- 指令由操作码和地址码组成
- 存储程序
- 以运算器为中心
现代计算机的结构
由于早期冯诺依曼机的缺陷(例如以运算器为核心会浪费许多运算器的性能),现代计算机的结构在其结构之上做了一些改良:
结构中的部件是这样进行划分的:
其中我们必须清楚的是现代计算机结构中运算器与控制器都会被集成于CPU芯片中,且现代计算机不再以运算器为核心,而是以存储器为核心。
各硬件的工作原理
主存储器的基本组成
主存储器主要可以分为存储数据的存储体以及两种寄存器:用于存储地址的MAR(Memory Address Register)和用于存储数据的MDR(Memory Data Register)。CPU可以借由这两种寄存器对存储体进行读写,如:CPU想要读取某个地址的存储单元中的数据,先向MAR中存入地址,然后主存储器中的运行逻辑将会把对应地址的值填入MDR中,然后MDR可以将数据传输给CPU。
主存储器和存储体的示意图和一些常见概念如下:
注:现在的计算机通常将MAR、MDR集成在CPU内。
运算器的基本组成
运算器用于实现算术运算以及逻辑运算。其中包含了如下的几个部件:
- ACC:累加器,用于存放操作数或运算结果。
- MQ:乘商寄存器,在乘除运算时,用于存放操作数或运算结果。
- X:通用的操作数据存器,用于存放操作数。
- ALU:算术逻辑单元,通过内部复杂的电路实现算术运算、逻辑运算。
上面三种寄存器存储的数据的类型如下:
控制器的基本组成
控制器用于协调指令执行的顺序和控制数据流,以及寄存器用于存储指令和数据。被分为以下几个部件:
- CU:控制单元,分析指令,给出控制信号。
- IR:指令寄存器,存放当前执行的指令。
- PC:程序计数器,存放下一条指令的地址,有自动加一的功能。
完成一条指令的过程大致如下:首先有PC找到指令完成取指令,然后放入IR中,最后由CU对指令进行分析和给出控制信号从而完成指令的执行。
计算机的工作过程
首先高级语言被编译器编译成机器语言,然后这些机器指令被装入主存中:
执行第一条指令(主存地址0)的图解:
第二条指令:
第三条指令:
第四条指令:
第五条指令:
分析第一条指令以及后面的指令,我们可以发现每一条指令的执行从取指令到分析指令结束都是一样的,而后面执行指令的步骤则根据指令的不同而不同。除此之外,我们还可以知道CPU可以根据指令执行周期的不同阶段得到当前取出的是指令还是数据。
经历了上述过程的分析,相信大家对于计算机体系结构的特点也有了更深的认知。
计算机系统的层次结构
计算机系统可以根据下图进行层次结构的划分,划分为五层:
由上述层次结构的划分,我们也可以了解到三种级别的语言和它们的特点,高级语言可以借由各种解释器的翻译转化为机器语言,从而让计算机能够运行对应的程序:
计算机的性能指标
存储器的性能指标
存储器的性能指标主要就是看它的总容量,理论上来说,主存储器的总容量就是存储单元个数(地址总数)*存储字长 bit ,如下图:
CPU的性能指标
CPU的性能指标主要与下图中的这几个东西有关,其中CPU的主频表示CPU内数字脉冲信号震荡的频率:
总结一下常用的数量单位,在描述存储容量、文件大小时,KMGT分别是2的十次方的幂,而在描述评率和速率时,它们又代表10的几次幂了。
系统整体的性能指标
系统整体的性能指标大致如下:
如果我们想要实时测算计算机处理速度,可以使用鲁大师等基准程序,被测量的计算机性能可以与运行相同程序的其他计算机进行性能比较。
结语
这些就是我在计算机系统概述部分的学习历程和心得,希望能对大家有所帮助。此外,这些内容参考了b站王道考研的免费计组课程,如果大家感兴趣可以去支持一下。