|| 计算机的发展历程
世界上第一台通用电子计算机是1946年在美国诞生的 ENIAC,设计师是美国宾夕法尼亚大学的 Mauchly 和他的学生 Eckert 。Mauchly 常常为物理学研究中屡屡出现的大量枯燥、繁琐的数学计算而头痛,渴望计算机帮忙。当时正值第二次世界大战期间,军方急需一种高速电子装置来解决弹道的复杂计算问题,Mauchly 和Eckert 的方案得到了军方的支持,在冯诺依曼等人的帮助下成功研制出第一台电子计算机。1946年2月,美国陆军军械部与摩尔学院共同举行新闻发布会,宣布了第一台电子计算机 ENIAC ( Electronic Numerical Integrator and Computer ,电子数字积分机和计算机)研制成功的消息。
ENIAC能进行每秒5000次加法运算、每秒400次乘法运算以及平方和立方、sin和cos函数数值运算。当时主要用它来进行弹道参数计算,60秒钟射程的弹道计算时间由原来的20分钟一下子缩短到仅需30秒。ENIAC是个庞然大物,耗资40多万美元,使用了18000个真空管,重30吨,占地面积170㎡,耗电150千瓦,第一次开机时甚至使整个费城地区的照明都闪烁变暗。该机正式运行到1955年10月2日,这十年共运行了80223个小时。
自从第一台通用电子计算机ENIAC诞生后,人类社会进入到了一个崭新的电子计算和信息化时代。传统上以元器件的更新作为计算机技术进步和化代的主要标志。
第一代计算机(20世纪40年代中到20世纪50年代末)为电子管计算机,逻辑元件采用电子管,存储器件为声延迟线或磁鼓,典型逻辑结构为定点运算。
由于ENIAC存在很多问题,比如没有存储器,也没有采用二进制,1945年,冯诺依曼以《关于EDVAC的报告草案》为题,发表了全新的“存储程序通用电子计算机方案”,宣告了现代计算机结构思想的诞生。
比如,1949年EDSAC、1951年的IAS、UMVAC-1、1956年的IBM 704。
第二代计算机(20世纪50年代中后期到20世纪60年代中)为晶体管计算机。比如IBM公司宣布全晶体管计算机 7070 和 7090 开启了第二代计算机蓬勃发展的新时期。这一代计算机除了逻辑元件采用晶体管以外,其内存采用次新存储器,外存采用磁鼓与磁带存储器,实现了浮点运算,并在系统结构方面提出了变址、中断、I/O 处理器等新概念,与第一代相比具有体积小、速度快、功耗低、可靠性高等优点。
第三代计算机(20世纪60年代中到20世纪70年代中后期)为集成电路计算机。集成电路的应用是微电子与计算机技术相结合的一大突破,为构作运算速度快、价格低、容量大、可靠性高、体积小、功耗低的各类计算机提供了技术条件。IBM 360 系统采用了一系列计算机新技术,包括微程序控制、高速缓存、虚拟存储器、流水线技术等。
第四代计算机(20世纪70年代后期开始)为超大规模集成电路计算机。20世纪70年代,随着微电子学飞速发展而产生的大规模集成电路和微处理器给计算机工业注入了新鲜血液。可以看出,半导体集成电路的集成度越来越高,速度也越来越快,发展遵循以下定律:每18个月,集成度将翻一番,速度将提高一倍,价格将降低一半。
第四代计算机时期的另一个重要特点是计算机网络的发展与广泛应用。由于计算机技术与通信技术的高速发展与密切结合,掀起了网络热潮,大量的计算机联入不同规模的网络中,通过Internet与世界各地的计算机相联,大大扩展和加速了信息的流通,增强了社会的协调与合作能力,使计算机的应用方式也由个人计算方式向网络化发展。
|| 计算机系统的基本组成
计算机系统由硬件和软件两部分组成。硬件是具体物理装置的总称,人们看到的各种芯片、板卡、外设、电缆等都是计算机硬件。软件包括运行在硬件上的程序和数据以及相关的文档。程序是指挥计算机如何操作的一个指令序列,数据是指令操作的对象。
※ 计算机如何区分指令和数据捏?
实际上计算机可以从两个方面来做区分,分别是时间和空间。
1.时间。在取指周期(或取值微指令)取出的为指令,在指令执行周期(或相应微程序)取出或写入的为数据。
2.空间(或者叫地址来源)。由PC提供存储单元地址的取出的是指令,由指令地址码部分(Add(IR))提供存储单元地址的取出的是操作数。内存取出指令送控制器,而指令执行周期从内存中取的数据送运算器、往内存写入的数据也是来自于运算器。
※ 冯诺依曼结构计算机的特征:
(1)采用“存储程序”的工作方式。
(2)计算机由运算器、控制器、存储器、输入设备和输出设备5个基本部件组成。
(3)存储器不仅能存放数据,还能存放指令,形式上二者没有区别,但是计算机能够区分二者;控制器能控制指令的自动执行;运算器能进行加减乘除基本运算以及逻辑运算;操作人员通过外设使用计算机。
(4)计算机内部以二进制形式表示指令和数据,每条指令由操作码和地址码组成,操作码给出操作类型,地址码给出操作数的地址,一串指令组成程序。
※ 计算机硬件主要包括中央处理器、存储器、I/O控制器、外部设备和各类总线等。
(1)中央处理器(Central Processing Unit ,CPU)简称处理器,是计算机的“大脑”,主要用于 指令的执行 。CPU包含两种基本部件:数据通路 和 控制器。数据通路主要包含算数逻辑部件(ALU)和通用寄存器等,功能是用来执行算数和逻辑运算等操作;控制器用来对指令进行译码,生成相应的控制信号,以控制数据通路进行正确的操作。
(2)存储器分为内存和外存,内存包括主存储器(main memory,主存)和高速缓存。外存包括辅助存储器和海量后备存储器,把系统运行时直接和主存交换信息的存储器称为辅助存储器,目前主要是磁盘存储器和固态硬盘。
(3)外部设备简称外设,外设通常由机械部分和电子部分组成,机械部分是外部设备本身,电子部分是控制外部设备的I/O控制器或I/O适配器。I/O控制器和I/O适配器统称为设备控制器,比如键盘接口、打印机适配器、显示控制器(简称显卡)、网络适配器(网卡)等都是设备控制器。
(4)总线(bus)是传输信息的介质,用于在部件之间传输信息,CPU、主存、I/O模块通过总线互连,在CPU和I/O模块中都内含相应的存储部件,即缓存器。
计算机的工作由存储在其内部的程序控制,程序或者软件质量的好坏将大大影响计算机性能的发挥。
※ 软件分类?
根据用途可以分为 系统软件 和 应用软件 。
系统软件包括为有效、安全地使用和管理计算机以及为开发和运行应用软件而提供的各种软件,介于计算机硬件与应用程序之间,它与具体应用关系不大。系统软件包括操作系统(Windows)、语言处理系统(C语言编译器)、数据库管理系统(Oracle)和各类实用程序(如磁盘碎片整理程序、备份程序)。
【操作系统——主要用来管理整个计算机系统的各种资源,包括对它们进行调度、管理、监视和服务等,还提供计算机用户和硬件之间的人机交互界面,并提供对应用软件的支持。
语言处理系统——提供一个用高级语言编程的环境,包括源程序编辑、翻译、调试、链接、装入运行等功能。
数据库管理系统是一种用于建立、使用和维护数据库的软件系统。】
专门为数据处理、科学计算、事务管理、多媒体处理、工程设计以及过程控制等应用所编写的各类程序都称为应用软件。
|| 计算机系统的层次结构
(1)首先将应用问题转化为算法(algorithm)描述,使得应用问题的求解变成流程化的清晰步骤,并确保步骤是有限的。
(2)将算法转化为用编程语言描述的程序,这个转换通常是手工进行的,需要程序员进行程序设计。
【语言有高级语言和机器级语言,机器语言和汇编语言都是机器级语言,机器语言就是用二进制进行编码的机器指令,可读性差,不易记忆,于是引入了一种机器语言的符号表示语言,通过简短的英文符号和二进制代码建立对应关系,即汇编语言。
我们平时所用的都是高级语言,计算机是会自动将高级语言程序转换成计算机能够理解的机器语言程序,因而需要有能够执行自动转换的程序,我们把这种转换的系统软件称为“程序设计语言处理系统”,程序员借助这个来开发软件。
任何一个语言处理系统中,都包含一个翻译程序,它能把一种编程语言表示的程序转换为等价的另一种编程语言程序。被翻译的语言和程序分别被称为源语言和源程序,翻译生成的语言和程序分别被称为目标语言和目标程序。翻译程序有三类——汇编程序、解释程序、编译程序】
(3)所有语言处理系统都必须在操作系统所提供的计算机环境中运行,操作系统是对计算机底层结构和计算机硬件的一种抽象。
(4)从应用问题到机器语言程序的每次转换所涉及的概念都属于软件的范畴,而机器语言程序所运行的计算机硬件和软件之间需要有一个“桥梁”,这个在软件和硬件之间的界面就是指令集体系结构(Instruction Set Architecture,ISA),简称体系结构或系统结构,它是软件和硬件之间接口的一个完整定义。ISA定义了一台计算机可以执行的所有指令的集合。而机器语言程序就是一个ISA规定的指令的序列。
(5)ISA是对指令系统的一种规定或结构规范,具体实现的组织称为微体系结构,简称微架构。ISA是可以被软件感知的,而微架构是不可以的。
(6)微体系结构最终是由逻辑电路实现的,最终每个逻辑电路都是按照特定的器件技术实现。
@ 最终用户
最终用户能感知到的只是系统提供的简单的人机交互界面和安装在计算机中的相关应用程序。
@ 系统管理员
系统管理员是指利用操作系统等软件提供的功能对系统进行配置、管理和维护,以建立高效合理的系统环境供计算机用户使用的操作人员。其职责主要包括:安装、配置和维护系统的硬件和软件,建立和管理用户账户,升级软件,备份和恢复业务系统和数据等。(比如我们经常拿电脑去更新或重装系统等)
@ 应用程序员
应用程序员是指用高级编程语言编制应用软件的程序员。他们所看到的计算机系统除了计算机硬件、操作系统提供的应用编程接口、人机交互界面和实用程序外,还包括相应的程序语言处理系统。语言处理系统中还包括可以提供应用程序调用的各类函数库。
@ 系统程序员
指设计和开发系统软件的程序员。系统程序员开发操作系统,编译器和实用程序等系统软件时,需要熟悉计算机底层的相关硬件和系统结构,甚至可能需要直接与计算机硬件和指令系统打交道。
|| 程序开发与执行过程
程序的开发和执行涉及计算机系统的各个不同层面,因而计算机系统层次结构的思想体现在程序开发和执行过程的各个环节中。
以下是hello.c的C语言源程序代码:
#include<stdio.h>
int main()
{
printf("hello,world\n");
}
下面简述处理过程:
(1)通过程序编辑软件得到hello.c文件。hello.c在计算机中以ASCII字符方式存放。
(2)将hello.c进行预处理、编译、汇编和链接,最终生成可执行目标文件。例如在UNIX系统中,可用GCC编译驱动程序进行处理,命令如下:
unix>gcc -o hello hello.c
其中,-o表示后面为输出文件名,hello.c为要处理的源程序。
预处理程序(cpp)对源程序中以字符#开头的命令进行处理,例如将#include命令后面的.h文件内容嵌入到源程序文件中。预处理程序的输出结果还是一个源程序文件,以i为扩展名。
※ 什么是编译程序??
编译程序(ccl)对预处理后的源程序进行编译,生成一个汇编语言源程序文件,以s为扩展名。
※ 什么是汇编程序??
汇编程序(as)对汇编语言程序进行汇编,生成一个可重定位目标文件,以o为扩展名,其中的代码已经是二进制表示。
※ 什么是链接程序??
链接程序(ld)将多个可重定位目标文件和标准函数合并成为一个可执行目标文件。
对于一个存放在磁盘上的可执行文件,可以在操作系统提供的用户操作环境中,采用双击对应图标或在命令行中输入可执行文件名等多种方式来启动执行。在UNIX系统中,可以通过shell命令行解释器来执行一个可执行文件,例如:
unix>./hello
hello,world
unix>
shell程序会将用户从键盘输入的每个字符逐一读入CPU寄存器中,然后保存到主存储器中,在主存的缓冲区形成字符串“./hello”
等收到Enter时,shell将调出操作系统内核中相应的服务例程,由内核来加载磁盘上的可执行文件hello到存储器
内核加载完可执行文件中的代码及其所要处理的数据后,将hello的第一条指令的地址送到PC中,CPU永远将PC的内容作为将要执行的指令的地址。
处理器随后开始执行指令,将加载到主存的字符串“hello,world\n”中的每一个字符从主存取到CPU的寄存器中,然后将CPU寄存器中的字符送到显示器上显示出来。
可执行目标文件中包含机器代码段,可执行文件的执行实际上是所包含的机器代码段执行的过程。机器代码段由一条一条机器指令构成。
指令通常被划分为若干个字段,有操作码字段、地址码字段和立即数字段。指令执行时通过控制器将指令操作码进行译码,以解释成控制信号来控制数据通路执行。
基本步骤:
根据PC取指令到IR
控制器对指令译码并送出控制信号
取操作数
指令执行
回写结果
|| 计算机系统性能评价
时钟周期
执行一条指令的过程被划分成若干步骤和相应的动作来完成,每一步动作都要由相应的控制信号进行控制,这些控制信号何时发出、作用时间多长,都要由相应的定时信号进行同步。因此CPU必须能够产生同步的时钟定时信号,也就是CPU的主脉冲信号,其宽度称为时钟周期。
时钟频率
CPU的主频就是CPU中的主脉冲信号的时钟频率,是CPU时钟周期的倒数。
CPI(cycles per instruction)
表示执行一条指令所需的时钟周期数。
例2
答: 因为MIPS反映了机器执行定点指令的速度,但是MIPS对不同的机器进行性能比较有时是不准确或不客观的。因为不同机器的指令集不同,而且指令的功能也不同,也许在机器 M1 上某一条指令的功能,在机器 M2 上要用多条指令来完成(但这并不意味着 M2 的性能更优越),因此,同样的指令条数所完成的功能可能完全不同;另外,不同机器的CPI和时钟周期也不同,因而同一指令在不同机器上所用的时间也不同。
|| 第一章作业
代码程序、编译器、指令集体系结构、计算机组织。