1.1.2 硬件与软件
一台计算机由硬件和软件两部分构成。硬件是计算机的物质基础,软件是计算机的灵魂,两者相辅相成。从某种意义上讲,一台计算机的性能主要由硬件决定,而它的功能则主要由软件来提供。
1.硬件
硬件(hardware)是指构成计算机的元器件和设备。计算机元器件是指电阻、电容、二极管、三极管等电子器件,它的发展经历了电子管、晶体管、集成电路以及超大规模集成电路等几个阶段,体现为元器件的集成度和速度在不断提高,而体积和功耗在不断降低。计算机设备主要包括中央处理器、内存以及外围设备等部件,它们之间通过用于传递数据、地址和控制信号的总线来连接(如图1-2所示)。
图1-2 典型的计算机硬件设备组成
(1)中央处理器
中央处理器(Central Processing Unit,CPU)构成了计算机的核心部件,它用于执行指令以完成计算任务。CPU由控制器、运算器、寄存器等构成。控制器负责从内存中取指令并根据指令发出控制信号以引起其他部件的动作。运算器执行运算指令所规定的算术和逻辑运算。寄存器主要用于暂时存放当前指令所需要的数据和计算结果(供后续指令使用)、记录当前指令的执行状态以及下一条指令的内存地址等,其主要作用是减少访问(存/取)内存的次数,以提高指令的执行效率。
(2)内存
内存(memory)是内部存储器(或主存储器)的简称,它用于存储正在运行的程序和正在使用的数据。内存由许多存储单元构成,每个存储单元都有一个地址,对存储单元的访问是通过其地址来进行的。内存单元的数目(内存的容量)要比CPU内寄存器的数目大得多,但指令访问内存单元的速度要比访问寄存器的速度慢得多,因为访问内存要通过外部总线来进行。
内存分为只读存储器和随机存取存储器两部分。只读存储器(Read Only Memory,ROM)中的内容一般只能读取不能修改,它主要用于存储一些固定的特殊程序(如开机引导程序);随机存取存储器(Random Access Memory,RAM)中的内容可以读取也可以修改,用于存储可变的程序和数据。内存中大部分是RAM,ROM只占很少一部分。需要注意的是,断掉计算机电源(如关机)后,ROM中的内容是一直存在的,而RAM中的内容就丢失了,下次开机后需要重新从外存中加载。
(3)外围设备
外围设备(peripheral device)简称外设,提供了计算机与外界的接口,主要用于计算机的输入/输出并为计算机提供大容量的信息存储。外设分为输入/输出设备和外部存储器两类。输入/输出设备(input/output device)用于从计算机外部输入程序和其所需要的数据并把计算结果输出到计算机外部,例如,键盘和鼠标等属于输入设备,而显示器和打印机等则属于输出设备。外部存储器(external storage)简称外存,是大容量的低速存储设备(与内存相比),用于永久性地(断电后仍然保持其中的内容不丢失)存储程序、数据以及各种文档信息。外存包括软盘、硬盘、光盘、闪存(U盘)、磁带等。存储在外存中的信息通常以文件的形式进行组织,通过文件名来访问它们。外存与内存除了在容量和速度上不同外,另一个区别在于:内存中存储的是正在运行的程序和正在使用的数据,而外存中存储的则是大量的当前没有使用的程序和数据。
由于构成计算机的各个设备存在着速度上的差别,快速设备往往要花费大量的时间等待慢速设备的操作,因此,在冯·诺依曼结构计算机中存在着几个影响程序执行效率的瓶颈,它主要体现在CPU、内存以及外设之间的数据交换上。为了解决设备之间速度不匹配的问题,现在的计算机中往往利用程序执行以及程序对数据的访问(在某段时间内通常在一个小范围内进行)所具有的局部性特征,在快速设备中为慢速设备设置一个高速缓存(cache)。高速缓存中存储的是近期用过的以及在今后一段时间内可能将要用到的内容,这些内容是通过快速设备的并行机制预先从慢速设备中读取来的,当快速设备中需要这些内容时就不需要再从慢速设备中读取了,可以直接从高速缓存中获得,从而提高了访问慢速设备的效率。例如,现代的计算机大都在CPU中为内存提供高速缓存(cache memory)并在内存中为外存提供磁盘高速缓存(disk cache),以减少CPU访问内存和外存的次数,提高计算机的整体性能。
2.软件
计算机硬件只是提供了执行指令的能力,而执行的指令是需要额外提供的,它们属于软件。软件(software)是计算机系统中的程序以及相关的文档。程序(program)是对计算任务的处理对象(数据)和处理规则(算法)的描述,它体现为指令序列,由程序开发者提供,由计算机来执行;文档(document)是为了便于人们理解程序所需要的说明资料,它供程序的使用者以及开发与维护者使用。
软件一般可以分为系统软件和应用软件。系统软件(system software)是计算机系统中直接让硬件发挥作用和实现计算机基本功能的软件,如操作系统(Windows、UNIX、Linux、Mac OS等)以及设备的驱动程序,它们与具体的应用领域无关。应用软件(application software)则是指用于特定领域的专用软件,如文字处理软件、人口普查软件、财务软件、学生信息管理软件等。另外,在软件中还有一类特殊的软件—支撑软件,支撑软件(supporting software)是指用于软件开发与维护的软件,如集成开发环境Visual C++等,它们一般由软件开发人员使用。支撑软件常被归入系统软件中。图1-3给出了各类计算机软件之间以及它们与计算机硬件之间的关系。
从图1-3可以看出,与硬件“打交道”最多的是系统软件,它直接对硬件进行操作,其他软件一般通过系统软件来操作硬件。有时,为了提高效率和灵活性,在某些场合下,也允许其他软件直接对硬件进行操作。
由硬件构成的计算机常被称为裸机,在它之上,每加上一个软件就得到一个功能更强的计算机—虚拟机(virtual machine)[2]。例如,硬件加上操作系统就构成了最基本的虚拟机,我们在计算机上的大部分操作都是在这个虚拟机上进行的。再例如,硬件构成的裸机只能识别用机器语言表示的指令,但如果在它上面加上C++语言的翻译程序,则这个虚拟机就能执行由C++语言所表示的指令(语句)了。
图1-3 各类软件之间以及它们与硬件之间的关系