2.2 计算机组成基础

2.1节从程序员的视角对计算机系统的基本构成和工作原理进行了探讨。本节从计算机系统的自身特点出发,了解计算机系统的基本组成和基本功能,主要介绍中央处理单元、主存储器和输入/输出子系统,以及各子系统相互沟通的原理。

2.2.1 中央处理单元

中央处理单元(CPU)用于数据的运算。它有三个组成部分:算术逻辑单元(ALU)、寄存器、控制单元。

1.算术逻辑单元

算术逻辑单元(ALU)用于进行算术运算和逻辑运算。

最简单的一元算术运算是增量(加1)和减量(减1)运算。最简单的二元算术运算是加、减、乘和除。控制单元负责选择这些运算中的一种。

最简单的一元逻辑运算是非,最简单的二元逻辑运算是与、或、异或。控制单元负责选择这些运算中的一种。

2.寄存器

寄存器是用来临时存放数据的高速独立的存储单元。CPU的运算离不开多个寄存器。

1)数据寄存器

过去,计算机只有一个寄存器用来交替存储输入数据(直接来自内存的其他输入数据)或结果。现在,越来越多的复杂运算改由硬件设备实现(而不是使用软件),并且需要一些寄存器来保存这些运算的中间结果,这也就是为什么在计算机CPU内部使用大量寄存器来提高运算速度的原因。

2)指令寄存器

现在,计算机存储的不只是数据,还存储内存中相对应的程序。CPU的主要职责是:从内存中逐条地取出指令,并将取出的指令存储在指令寄存器中,解释并执行指令。

3)程序计数器

CPU中另一个通用寄存器是程序计数器。程序计数器保存当前正在执行的指令。当前的指令执行完后,计数器将自动加1,指向下一条指令的内存地址。

3.控制单元

CPU的第3个部分是控制单元,控制单元类似于人脑中控制身体各部分运动的区域。控制是通过线路的开(高电平)或关(低电平)来实现的。例如,简单的ALU可能要执行10 种不同的运算,为了指定这些运算,控制单元需要通过4 条线路连接到算术逻辑单元,4条线路可以表示16种不同的状态(24),其中可以使用10种来进行算术和逻辑运算,其他的可作别的用途。可以用0 表示线路断开,1 表示线路接通。这样,线路的状态就可以定义为0000、0001、0010、…、1111。可以定义0000(所有的线路断开)表示不进行任何运算,0001表示加,0010表示减,等等。

2.2.2 主存储器

主存储器是计算机内的另一个子系统。它是存储单元的集合,每一个存储单元都有唯一的标识符,称为地址。数据以称之为字的位组的形式在存储器中传入和传出。字可以是8位、16位、32位,甚至有时是64位,如果字是8位的话,一般称之为字节。术语字节在计算机科学中使用相当普遍,因此有时称16 位为两个字节,称32 位为4个字节。

1.地址空间

在存储器中存取每个字都需要有相应的标识符。尽管程序员使用命名的方式来区分字(或一组字的集合),但在硬件层次上,每个字都是通过地址来标识的。所有在存储器中可标识的独立地址单元的总数称为地址空间。例如,一个64K字节、字长为1字节的存储器的地址空间的范围为0~65535。

由于计算机都是以位模式存储数据并进行运算的,因此地址本身也是用位模式表示的。如果内存是64KB(216),字长为一个字节,那么就需要16 位的位模式来确定地址。地址可以用无符号整数表示(不用负的地址)。或者说,起始地址通常是0000000000000000(地址0),最后一个地址通常是1111111111111111(地址65535)。通常,如果计算机有 N个字的存储空间,那就需要有log2N 位的无符号整数来确定每一个存储单元。

存储地址用无符号二进制整数定义。

例2.3 一台计算机有32MB(兆字节)主存(内存)。需要多少位来寻址内存中的任意一个字节?

解答:内存地址空间是32MB,即225(25×220)。这就意味着需要log2225,即25位来标识每一个字节。

例2.4 一台计算机有l28MB内存。计算机字长为8 字节,需要多少位来寻址内存中的任意一个单字?

解答:内存地址空间是l28MB,就是227。但是,每个字是8(23)字节,那也就意味着需要224个字,也就是说要log2224,即24位来标识每一个单字。

2.存储器的种类

有两种类型的存储器:RAM和ROM。

1)RAM

随机存取存储器(RAM)是计算机中主存的主要组成部分。该术语有时因为ROM也能随机存取而与ROM混淆。RAM和ROM的区别在于:用户可读写RAM,即用户可以在RAM中写信息,之后可以方便地通过覆盖来擦除原有信息。RAM的另一个特点是易失性。当系统断电后信息(程序或数据)将被擦除。换句话说,如果计算机断电或关掉计算机,储存在RAM中的信息将被删除。RAM技术又可以分为两大类:SRAM和DRAM。

(1)SRAM。静态RAM(SRAM)技术是用传统的触发器门电路(有0和1两个状态的门)来保存数据的。这些门保持状态(0 或1),这也就是说当通电的时候数据始终存在,不需要刷新。SRAM速度快但是价格高。

(2)DRAM。动态RAM(DRAM)技术使用电容器。如果电容器充电,则这时的状态是1;如果放电,则状态是0。因为电容器会随时间而漏掉一部分电,所以内存单元需要周期性地刷新。DRAM速度慢,但是便宜。

2)ROM

只读存储器(ROM)的内容是由制造商写入的。用户只能读但不能写,它的优点是非易失性,当切断电源后,数据也不会丢失。通常用来存储那些关机后也不能丢失的程序或数据。例如,用ROM来存储那些在开机时运行的引导程序。

PROM是称为可编程只读存储器(PROM)的一种ROM。这种存储器最初时是空白的。计算机用户借助一些特殊的设备可以将程序存储在上面。当程序存储后,它就会像ROM一样不能够重写。也就是说计算机用户可以用它来存储一些特定的程序。

EPROM是称为可擦除的可编程只读存储器(EPROM)的一种PROM。用户可以对它进行编程,但是得用一种可以发出紫外光的特殊仪器对其进行擦写。EPROM存储器需要拆下来擦除再重新安装。

EEPROM是称为电可擦除的可编程只读存储器(EEPROM)的一种EPROM。对它的编程和擦除用电子脉冲即可,无须从计算机上拆下来。

3.存储器的层次结构

计算机用户需要许多存储器,尤其是速度快且价格低廉的存储器。但这种要求并不总能得到满足。存取速度快的存储器通常都不便宜。因此需要寻找一种折中的办法。解决的办法是采用存储器的层次结构。该层次结构如下。

(1)当对速度要求很苛刻时可以使用少量高速存储器。CPU中的寄存器就是这种存储器。

(2)用适量的中速存储器来存储经常需要访问的数据。例如下面将要讨论的高速缓冲存储器,就属于这一类。

(3)用大量的低速存储器存储那些不经常访问的数据。主存就属于这一类。

4.高速缓冲存储器

高速缓冲存储器的存取速度要比主存快,但是比CPU和CPU内部的寄存器要慢。高速缓存通常容量较小,且常被置于CPU和主存之间。

高速缓冲存储器在任何时候都含有主存中一部分内容的副本。当CPU要存取主存中的字时,将按以下的步骤进行:

(1)CPU首先检查高速缓存。

(2)如果要存取的字存在,CPU就将它复制;如果不存在,CPU将从主存中复制一份从需要读取的字开始的数据块。该数据块将覆盖高速缓存中的内容。

(3)CPU存取高速缓冲存储器并复制这个字。

这种方式将提高运算的速度。如果字在高速缓存中,就立即存取它;如果字不在高速缓存中,字或整个数据块就会被复制到高速缓存中。因为很有可能CPU在下次存取中需要存取这次存取的第一个字的后续字,所以高速缓存可以提高处理速度。

为什么尽管高速缓存存储容量小效率却很高?这是由于80-20 规则。据观察,通常计算机花费80%的时间来读取20%的数据。换句话说,相同的数据往往被存取多次。高速缓冲存储器凭借其高速,可以存储这20%的数据而使存取速度至少快80%。

2.2.3 输入/输出子系统

计算机中的第三个子系统是称为输入/输出(I/O)子系统的一系列设备。这个子系统可以使计算机与外界通信,并在断电的情况下存储程序和数据。输入/输出设备可以分为两个大类:非存储设备和存储设备。

1.非存储设备

非存储设备使得CPU/内存可以与外界通信,但它不能存储信息。

1)键盘和监视器

两个最常见的非存储输入/输出设备是键盘和监视器。键盘提供输入功能,监视器显示输出并同时响应键盘的输入。程序、命令和数据的输入或输出都是通过字符串进行的。字符则是通过字符集(如ASCII码)进行编码的。

2)打印机

打印机是一种用于产生永久记录的输出设备。打印机是非存储设备,因为打印出来的资料不能够直接再输入到计算机中,除非有人通过打字或扫描的方式把它输入到计算机中。

2.存储设备

尽管存储设备被分为输入/输出设备,但它可以存储大量的信息以备后用。它们要比主存便宜得多,而且它们存储的信息也不易丢失(即使断电信息也不会丢失)。有时称它们为辅助存储设备,通常分为磁介质存储设备和光介质存储设备两种。

1)磁介质存储设备

磁介质存储设备利用磁性来存储数据位。如果点有磁性则表示1,如果点没有磁性则表示0。

a. 磁盘

磁盘是由一张一张的磁片叠加而成的。这些磁片由薄磁膜封装起来。信息是通过盘上每一个磁片的读/写磁头读写磁介质表面来进行读取和存储的。

表面结构:为了将数据存储在磁盘的表面,每个盘面都被划分成磁道,每个磁道又被分成若干个扇区。磁道间通过磁道内部间隔隔开,扇区之间通过扇区内部间隔隔开。

数据存取:磁盘是随机存取设备。但是,在某一时间可以读取的最小存储区域只能是一个扇区。数据块可以存储在一个或多个扇区上,而且该信息的获取不需要读取磁盘上的其他信息。

性能:磁盘的性能取决于几个因素。最重要的因素是角速度、寻道时间和传送时间。角速度定义了磁盘的旋转速度。寻道时间定义了读/写磁头寻找数据所在磁道的时间。传送时间定义了将数据从磁盘移到CPU/内存所需要的时间。

b. 磁带

磁带大小不一。最普通的一种是用厚磁膜封装的半英寸塑料磁带。磁带用两个滚轮承接起来,当转动的磁带通过时,就可以通过读/写磁头来读写磁带上的数据。

表面结构:磁带的宽度可以分为8个磁道;磁道上的每个点可以存储1位的信息。垂直的9个点可以存储8个位(即一个字节)的信息,还有1位用于错误检测。

数据存取:磁带是顺序存取设备。尽管磁带的表面可能会分成若干块,但是却没有寻址机制来读取每个块。要想读取指定的块就需要按照顺序通过其前面所有的块。

性能:尽管磁带的速度比磁盘慢,但它非常便宜。现在,人们使用磁带来备份存储大量的数据。

2)光存储设备

光存储设备是一种新技术,它使用光(激光)技术来存储和读取数据。在发明了CD(光盘)后,人们利用光存储技术来保存音频信息。现在,相同的技术(稍作改进)被用来存储计算机上的信息、使用这种技术的设备有只读光盘(CD-ROM)、可刻录光盘(CD-R)、可重写光盘(CD-RW)、数字多功能光盘(DVD)。

(1)CD-ROM。只读光盘(CD-ROM)使用与CD(光盘)相同的技术(该技术最初是由飞利浦和索尼公司为录制音乐而研发的)。两者间的唯一区别在于增强程度,CD-ROM更健壮,而且纠错能力较强。

(2)CD-R。CD-ROM技术只有在生产商大批量生产时才合理。另一方面,可刻录光盘(CD-R)则可以让用户自己制作一张或更多的盘,而不必考虑像制作CD-ROM的一些开销。它非常适合做备份,用户只需要一次写入信息,就可以多次读出信息。这也是它为什么有时被称为“写一次,读多次”(WORM)的原因。

(3)CD-RW。尽管CD-R已很受欢迎,但它们只能被写一次。为了能重写以前的资料,便有了一项新的技术,利用该技术可以制作一种称为可重写光盘(CD-RW)的新型盘,有时也称之为可擦写光盘技术。

(4)DVD。工业界已经有了对更大存储容量的数字存储介质的需求。CD-ROM(650MB)的存储容量已经不能满足视频信息存储的需要。市场上最新的光存储设备叫做数字多功能光盘(DVD)。

2.2.4 子系统的内部连接

前面介绍了在单个计算机上的(CPU、主存和输入/输出)三个子系统的主要特点。本节将介绍三者之间在内部是如何连接的,内部连接扮演着很重要的角色,因为信息需要在这三个子系统中交换。

1.CPU和主存的连接

CPU和主存之间通常由称为总线的三组线路连接在一起,它们分别是:数据总线、地址总线和控制总线。

1)数据总线

数据总线是由多根线组成的,每根线上每次传送1个位的数据。线的数量取决于字的大小。例如,如果计算机的字是32位(4个字节),那么需要有32根线的数据总线,以便同一时刻能够同时传送32位的字。

2)地址总线

地址总线允许访问主存中的某个字,地址总线的线数取决于存储空间的大小。如果存储容量为2n个字,那么地址总线一次需要传送n位的地址数据。因此它需要n根线。

3)控制总线

控制总线负责在中央处理器和主存之间传送信息。例如,必须有一个代码从CPU发往主存,用于指定进行读操作还是写操作。控制总线的线数取决于计算机所需要的控制命令的总数。如果计算机有2m条控制命令,那么控制总线就需要有m 根,因为m 位可以定义2m个不同的操作。

2.I/O设备的连接

输入/输出设备不能直接与连接CPU和主存的总线相连。因为输入/输出设备的本质与CPU和主存的本质不同,输入/输出设备都是机电、磁性或光学设备,而CPU和主存是电子设备。与CPU和主存相比,输入/输出设备的操作速度要慢得多。因此必须要有中介来处理这种差异,输入/输出设备是通过一种被称为输入/输出控制器或接口的器件连接到总线上的。

控制器,或者说接口,清除了输入/输出设备与CPU及主存在本质上的障碍。控制器可以是串行或并行设备。串行控制器只有一根线连接到设备上,而并行控制器则有数根线连接到设备上,使得一次能同时传送多个位。

有几种控制器至今还在使用,如今最常用的有SCSI、火线和USB。

1)SCSI

小型计算机系统接口最初是1984年为Macintosh计算机而设计的。今天还有许多系统使用它。它是一个8、16 或32 线的并行接口。SCSI接口提供了菊花链连接,连接链的两端都必须有终结器,并且每个设备都必须要有唯一的地址(目标ID)。

2)火线

IEEE标准1394 规定的串行接口俗称为火线。它是一种高速串行接口,数据采用数据包的形式传送,数据的传输速度高达50MB/s。它可以在一条菊花链或树型连接(只用一根线)上连接多达63个设备。它不需要SCSI控制器中那样的终结器。

3)USB

通用串行总线(USB)控制器是一种可以和火线控制器相媲美的控制器。USB也是一种串行控制器,用以连接与计算机相连的一些低速设备(如键盘、鼠标等)。它的数据传输速度可达1.5MB/s。它有4线总线,其中2线是用来为设备提供电源的。

3.输入/输出设备的寻址

通常CPU使用相同的总线向主存和输入/输出设备读写数据。唯一的不同是指令。如果指令涉及主存中的字,那么数据会在主存和CPU之间传送,如果指令涉及输入/输出设备,那么数据会在输入/输出设备和CPU之间传送。有两种方法用来对输入/输出设备进行寻址,即I/O独立寻址和I/O存储器映射寻址这两种方式。

1)I/O独立寻址

在I/O独立寻址中,用来读/写主存的指令与用来读/写输入/输出的指令是完全不同的。有专门的指令完成对输入/输出设备的测试、控制及读写操作。每个输入/输出设备都有自己的地址。因为指令不同,所以输入/输出地址可以和主存地址交叠而不会产生混淆。例如,CPU可以使用读命令Read 05来从主存中读取字05,它也可以使用输入命令Input 05 从地址端口为05 的输入/输出设备中读取数据。这里不会发生混淆是因为Read指令是规定从主存中读取数据的,而Input指令则是规定从输入/输出设备中读取数据的。

2)I/O存储器映射寻址

在I/O存储器映射寻址方式中,CPU将输入/输出控制器中的每个寄存器都看做是主存中的字。换言之,CPU没有单独的指令用来表示是从主存或是从输入/输出设备传送数据。例如,在指令集中只有一条Read指令,如果地址指定的是主存中的某个字,则从主存中读取数据;如果地址指定的是输入/输出设备中的某个寄存器,那么就从寄存器中读取数据。主存映射的配置优点在于指令集较小,所有对主存的操作指令都同样适用于输入/输出设备,其缺点则是输入/输出控制器中的寄存器占用了一部分主存地址。例如,假如有5个输入/输出控制器,每个控制器有4个寄存器,则共占用20个地址。相应的主存的大小就减小了20个字。