就经典的计算机组成而言,计算机硬件由输入系统、输出系统、运算器、控制器和存储器组成。对于现在的计算机而言,运算器和控制器已经集中在中央处理器中。输入/输出系统是计算机和外界交流的渠道,没有输入/输出系统的计算机是无法工作的。运算器负责所有的计算工作,计算机这个名称的由来和计算机拥有强大的计算能力相关。现在的计算机已经在人们的许多工作和生活中得到了广泛的应用,已经不再是一个为计算而设计的机器了,但是计算机这个名称一直沿用下来。控制器是协调、控制各个功能部件协同工作的部分,相当于计算机的指挥中心。存储器是放置程序指令和程序数据的地方。
除了计算机的硬件,计算机还有一个重要的组成便是计算机软件。软件的名称和硬件相对应,和硬件一样,计算机软件也是客观存在的。软件可以理解为计算机执行的代码和数据的集合。软件按照和硬件的相关程度,可以分成若干个等级,如图2-1所示。
图2-1计算机层次结构示意图
操作系统是访问和管理计算机硬件的软件,只有在安装了操作系统的计算机上,用户才能使用计算机的资源。但是对于大多数用户而言,仅有操作系统在工作和生活中并没有什么太大的作用,用户使用最多的是应用程序,应用程序是专门为某一个领域开发的软件,比如字处理软件、媒体播放软件等。现在的操作系统软件也进一步集成了许多应用软件。
编译软件是提供给程序员的软件,由程序员编写代码,编译成软件给特定用户使用。编译软件支持的语法集合称为计算机语言,程序员必须掌握某种计算机语言才能进行计算机编程,不同级别的计算机语言对程序员有不同的要求,所支持的功能也大相径庭。
机器语言是计算机能够理解的语言,它完全和计算机硬件相关,对普通人而言简直就是天书,程序员几乎不会在这个级别编写程序。
汇编语言是机器语言的高级形式,它把计算机指令用助记符的形式编写,然后通过汇编编译系统编译成机器语言提交给计算机执行。每个机器指令都有对应的汇编指令,由于使用了有意义的符号,汇编语言比机器语言容易理解得多,但是由于每一种计算机都有不同的机器指令,对应于不同的汇编语言,而且汇编语言和机器指令对应,不是和人的指令对应,所以汇编语言仍然非常难以编写,现在除了对性能或其他方面有特殊要求的软件,程序员也很少在这个级别编写程序。
高级语言是计算机语言上的一个飞跃。高级语言的出现给计算机带来飞速的发展,由于高级语言相对于汇编语言而言,非常容易理解,使用的是日常逻辑的关键字,程序员在使用高级语言的时候,不必考虑寄存器、堆栈等和计算机中央处理器直接相关的硬件特性,可以专注于软件的逻辑功能实现。现在人们使用的大多数软件都是使用高级语言编写的,即使是在很小的单片机中,程序员也可以使用C语言完成大多数功能。高级语言也必须通过编译系统编译成机器语言来提交给计算机执行,这个编译的过程,有可能是先把高级语言翻译成汇编语言或者其他中间语言,然后再翻译成机器语言。
典型的高级语言包括:C语言、BASIC语言、Fortran、Pascal、COBOL、LIST、PROLOG等。现在也不断有新的语言出现,这些五彩缤纷的高级语言给程序员提供了广阔的天地。BASIC语言的特点是语法简单,和它的名称带来的信息一样,它的本意是给程序员一个初级简单的入门。现在微软公司给了这种初级语言很强的生命力。C语言可以说是应用最广泛的高级语言了,它的特点在于使用简单的关键字,语法灵活,提供操作硬件的可能性。虽然这些特点许多人认为是缺点,但正是这些特点使得C语言得到了广泛的应用,C语言从编写UNIX开始,在操作系统、工业控制到应用程序都有了大量的使用。所以作为程序员,C语言是一定要学习的一种语言,当然可能在实际工作中使用的是另外一种语言。C++是C语言的扩展,它在保留了C语言特点的同时,增加了面向对象支持,虽然C++很早就出现了,但是它的标准化却是在很多年以后才完成的。现在C/C++常常并称,有很多优秀的编译器支持C/C++。Pascal的特点是语法严谨,所以它的编译速度要比C/C++快得多,而且Pascal的功能也不弱,Borland公司有基于Pascal语言的优秀开发工具。Fortran是一种适用于科学计算的语言。
Java语言是一种新出现的语言,它的特点是“一次编译,到处执行”,虽然反对者把它改为“一次编译,到处调试”,Java的设计实际上更是一种网络语言,它本身就是为网络的发展而诞生的。
现在的计算机大多数基于冯·诺依曼结构,它的特点是:
(1)计算机由运算器、控制器、存储器、输入设备和输出设备组成。
(2)采用存储程序的方式,程序和数据放在同一个存储器中,指令和数据都可以送进运算器运算。
(3)数据以二进制数形式表示。
(4)指令由操作码和地址码组成。
(5)指令按照顺序存储,由指令计数器指明当前需要执行指令的地址,通过改变指令计数器来改变程序的流程。
(6)计算机以运算器为中心,输入输出设备和存储器之间的数据传送需要通过运算器。
计算机通过多年的发展,出现了很多不同类型的计算机,它们在形态、功能、结构和应用上各有不同,而计算机只是它们的统称。
个人计算机是我们使用最多、最常见的计算机,个人计算机的名称来源于IBM公司当年对这种放在人们工作台上的机器的命名。个人计算机还有其他名称,如微机等。个人计算机起源于Intel公司的4位微处理器4044,并随着8088/86的成功,个人计算机已经得到了广泛的应用,现在计算机这个词通常指的就是个人计算机,而实际上,最早的计算机和个人没有什么关系。
随着摩尔定律不断地被证实,硬件的成本不断下降,功能不断增加,个人计算机的功能不断提升,价格不断下降,使得个人计算机得到了广泛的应用。它已经不仅仅是科学计算的工具,而且成为商业公司处理文档、数据加工处理的首选工具;在家用方面,个人计算机的多媒体方面不断发展,它在家用的学习和娱乐上也得到了广泛的应用。
从外形上看,工作站和个人计算机没有什么太大的不同,它拥有更大、更精细的屏幕,优秀的图形显示卡、专业的图形图像软件。它主要应用于集成电路设计、机械设计、土木工程设计等计算机辅助设计中。
工作站和个人计算机的定位不同,工作站定位于大负载的、对稳定性要求很高的工程设计工作。一般采用精简指令的中央处理器,SCSI接口的硬盘,专业的图形设备。
随着个人计算机的性能发展,原来一些由工作站完成的工作也可以使用个人计算机来完成。例如,个人计算机在普通的集成电路设计上也使用得相当广泛。
服务器是一种提供服务的计算机的统称,这个名称实际上有些含糊,因为所有的计算机,只要它为其他计算机或者设备提供服务,都可以称为“服务器”。
人们通常所说的服务器是一种基于网络的,面向大量的个人计算机提供某种服务的计算机,这些服务包括数据库、电子邮件、文件和打印服务等。
服务器要求有良好的网络性能和高效的处理能力,它必须及时响应客户端的请求,进行处理后,再把处理的结果返回给客户端。由于可能存在大量的客户端同时发送请求,服务器必须有足够的能力来保证每一个客户端的请求可以在能够容忍的时间内被处理。
服务器另外一个方面的要求是高可靠性,在有服务器的网络中,服务器实际上成为单点故障,如果服务器软件或者硬件出现问题,那么它提供的服务中止,所有相关的客户端都会受到影响。
为了达到高效和高可用性,典型服务器会采用精简指令的中央处理器,磁盘RAID技术、多CPU、高性能网络支持、冗余硬件等技术。对于负载特别大的服务,还会使用集群和负载均衡技术,使用多个服务器来完成服务,而这个物理的多个服务器在客户端看来,仍然是一个服务器。
服务器上的软件同样需要满足高效和高可靠性的要求,而对界面等要求则相对个人计算机要低。有些服务软件甚至在GUI已经全面发展的今天,仍然只有字符界面,但仍然得到了广泛的使用。
大型机的特点是高可靠性、高可用性、高服务性。
在可靠性方面,大型机使用的中央处理器装有两个完全的执行管道,如果两个管道的运行结果不同,那么这次计算将被重新计算。如果仍然不同,将由另外一个空闲的CPU来进行。
大型机采用了大量的冗余设计和错误检查设计,以保证任何时候任何设备的小故障都不会引起机器执行的任何任务的失败。同时许多设备都支持热拔插,即使在机器正在运行的情况下,也能对失败的设备进行更新。这样尽可能地缩短了机器故障停机时间。
大型机还使用集群技术,支持多个同样的系统作为镜像运行,即使某台机器出现致命错误,整个系统的性能也不会受到毁灭性的打击。
大型机采用I/O通道技术和外部I/O进行通信,具有强大的I/O吞吐量。
巨型机是为了如天气预报、人工智能等对计算机的处理能力有无尽需求的应用,巨型机的研究水平也代表了一个国家高科技的研究力量。
巨型机往往是采用大量的中央处理器协同工作的方式,安装这些处理器的工作方式不同,有适合于向量计算的向量/矩阵处理机、结构负载的多处理机等。
巨型机的主要特点是计算能力强大,它原来的标准计算能力是每秒几千万次,现在这个值已经被大大地提高。它的结构复杂,必须有专门的机构和机制来对所有处理器的计算进行协调和控制,这些处理器访问共享的或者私有的主存,通过处理器之间的互联网络进行交互。