总线

总线是电路板之间通信的桥梁

在一台计算机中,中央处理器无疑是最重要的部件,但它并不是唯一的部件。随机访问存储器(Random Access Memory,RAM)也是计算机不可或缺的部件,它存放着处理器要执行的机器代码指令。通过怎样的方法才能把指加载到RAM中?怎样才能把程序的结果变得可见呢?

搭建一台完整的计算机还需要很多集成电路,这些集成电路都必须挂载(mounted)到电路板上。在一些小型的机器中,一块电路板足以容纳所有的集成电路,但这种情况并不常见。我们通常所看到的另一种情况:计算机各部件按照功能被分别安装在两个或更多的电路板上。这些电路板之间通过总线(bus)通信。

如果对总线做一个简单的概括,可以认为总线就是数字信号的集合,而这些信号被提供给计算机上的每块电路板。通常把这些信号划分为如下四类。

  • 地址信号。这些信号是由微处理器产生,通常用来对RAM进行寻址操作,当然也可以用来对连接到计算机的其他设备进行寻址操作。

  • 数据输出信号。这些信号也是由微处理器产生的,用来把数据写入到RAM或其他设备。这里特别要注意区分术语输入(input)和输出(output),来自微处理器的数据输出信号会变成RAM和其他设备的数据输入信号。

  • 数据输入信号。这些信号是由计算机的其他部分提供的,并由微处理器读取。通常情况下,数据输入信号由RAM输出,这就解释了微处理器是怎样才内存中读取内容的。其实,其他部件也可以给微处理器提供数据输入信号。

  • 控制信号。这些信号是多种多样的,通常与计算机内所用的特定的微处理器相对应。控制信号可以产生于微处理器,也可以由与微处理器通信的其他设备产生。比如,当微处理器需要把一些数据写入到特定内存单元时,它所使用的信号就是控制信号。

还有一点需要说明:总线还可以为计算机上不同电路板供电。

总线发展历程

早期家用计算机流行的一种总线是S-100总线,该总线1975年在第一台家用计算机MITSAltair上首先采用。尽管这种总线只是基于8080微处理器,但后来它也被其他一些处理器,如6800采用。S-100的电路板的规格是5.3×10英寸,电路板的一边有100个接头可插在插槽里(这就是S-100的来源)。

S-100计算机有一块较大的板称为母板或主板(motherboard or mainboard),上面有若干个(如:12个)互相连接起来的S-100总线插槽,这些插槽有时也叫扩展槽(expansion slots),S-100电路板(也叫扩展板, expansion boards)插到插槽里。8080微处理器及支持芯片(第19章曾提到过)在此S-100板上。RAM在另一个或更多的其他S-100电路板上。

S-100总线是专门为8080芯片而设计的,有16个地址信号,8个数据输入先好及8个数据输出信号(仔细回忆以下,8080本身并不区分数据输入和输出信号,这项工作是由电路板上的其他支持芯片完成的)。总线上也含有8个中断信号,其他设备需要CPU立即做出相应时,便会产生这些信号。下面我们看以下例子(本章的后面也会讲到),当某个按键按下时,键盘可能就会产生一个中断信号。接下来8080会执行一段小程序,检测出是什么按键被按下,并做出响应。通常,在安装了8080的电路板上有一个被称为Intel 8214优先级中断控制单元的芯片,就是专门用来处理中断的。当中断发生时,这个芯片会产生一个中断信号并送给8080.8080识别出这个中断后,此芯片就会提供一个RST(Restart,重启)指令,在这条指令的作用下,微处理器会把当前程序计数器的值保存下来,并根据中断类型,跳转到地址0000h,0008h,0010h,0018h,0020h,0028h,0030h或0038h处执行。

如果你在设计一个新的计算机系统,而这个系统中采用新的总线类型,你可以选择把总线规范公布于众(也可以通过其他方式发布出去)或者使其保密,决定权在于你。

如果一个总线规范是公开的,其他厂商—称为第三方(third-party)厂商—可以设计并销售与这种总线相配套的扩展板。这些附加的扩展板使得计算机更有用且更令人满意,计算机的大量销售为扩展板提供了更大的市场。这种现象刺激许多小的计算机系统设计者坚持开放体系结构(Open Architecture)的原则,允许其他厂商生产计算机的外围设备。这样总有一种总线最终可以认为是工业界的标准。标准已成为个人计算机工业的重要组成部分。

1981年秋,最著名的开放体系结构个人计算机——IBM的PC问世。IBM公布了PC的技术参考资料(technical reference),里面包含了整台计算机的全部电路图,IBM为其制造的扩展板的资料也在其中。这个手册可是很重要的资料,它的出现使得很多制造商可以生产自己的PC扩展板。实际上,这创造出了整个PC的克隆体——其实与IBM的PC几乎完全相同,运行的软件也一样。

在如今的桌面计算机领域,从起初的IBM的PC发展而来的计算机数量庞大,已占到桌面计算机系统大约90%的份额。尽管IBM自身只有很少的市场份额,但它毕竟要比最初的PC机采用专有设计的封闭式体系结构所占的份额要大。苹果公司的Macintosh机开始就采用封闭式体系结构(closed architecture),根本不考虑开放其体系结构,这当初的决定可以用来解释为什么在目前的桌面计算机市场上Macintosh只占有不到10%的份额。(记住一点,无论一个计算机系统是在开放体系结构还是封闭体系结构下设计,都不会影响到其他公司开发在该计算机系统上运行的软件。只有那些特定的视频游戏软件开发商才会限制其他公司开发用于他们系统的软件。)

最初的IBM PC使用Intel 8088微处理器,可寻址1M存储空间。尽管8088处理器内部是16位,但在外部按照8位来寻址存储器。IBM为最初的PC机设计的总线现在称作ISA(industry Standard Architecture,工业标准体系结构)总线。扩展板上有一个62针的插头,信号包括20个地址信号,8个组合(复用)数据输入/输出信号,6个中断请求信号和3个DMA(Direct Memory Access,直接存储器访问)请求信号。DMA允许存储设备(本章最后将要讲到)比采用别的方法更快地进行操作。通常,微处理器处理所有的内存读/写操作,但通过DMA,其他设备可绕过微处理器通过总线直接进行内存读/写操作。

在S-100系统里,所有的部件都安装在扩展板上。在IBMPC机里,微处理器、一些支持芯片及一些RAM安装在IBM所称的系统板上,系统板(System Board)也常称作主板或母板。

1984年,IBM推出了Personal Computer AT(先进技术型个人计算机),它采用16位的Intel 80286微处理器,可寻址16M存储器。IBM保留了已有的总线,但另加了一个36针的插槽,其中包括新增的7个地址信号(尽管只需要4个),8个数据输入/输出信号,5个中断请求信号和4个DMA请求信号。

微处理器所使用的数据宽度(从8位到16位再到32位)和输出的地址信号的数目在不断增长,当这些超出总线的承受能力时,总线就需要升级换代了。如果微处理器的处理速度很快,也会出现这种情况。早期的总线是为了当时的微处理器而设计的,它们的时钟频率一般是几兆赫兹而不是几百兆赫兹。如果设计出来的总线不适合高速传输的话,就会出现射频干扰(RFI),这会使附近的收音机和电视机产生静电或其他噪声。

1987年,IBM推出了微通道体系结构(micro channel architecture,MCA)总线,这种总线的某些方面IBM已申请了专利,这样IBM就可以从其他使用这种总线的公司收到授权费用。可能也正因为如此,MAC总线没有成为工业标准。取而代之的是1988年9家公司(不包括IBM)联合推出的32位EISA(Extended Industry Standard Architecture,扩展的工业标准体系结构)总线。近年来,Intel公司设计的外围部件互联(peripheral component interconnect,PCI)总线在PC兼容机上已普遍采用。

计算机上各种不同的部件是如何工作的呢

为了能更好地理解,让我们再次回到20世纪70年代中期去看一看。想象一下,我们正在为Altair设计电路板,或者是在为自己设计的8080或6800计算机做这样的事情。我们不仅要考虑为计算机设计一些存储器,用键盘作为输入,用电视机作为输出;还要考虑观赏计算机时,如何把存储器中的内容保存下来 。如何把这些部件添加到计算机中呢?下面就来看看能实现这个功能的各种接口(Interface)。

存储器

2102存储芯片

现在回想一下第16章所讲的内容,RAM阵列有地址输入,数据输入,以及数据输出信号,另外还有一个用来把数据写入存储器的控制信号。RAM阵列能存放的数据的数量是和地址输入信号的个数有关的,它们之间有着如下的关系:

讲到这里你可能会问,数据输入,输出信号又有怎样的作用呢?其实它们决定着所存储的数值的大小(位数)。

20世纪70年代中期,2102是用于 家用计算机的一款流行的存储器芯片。其管脚部分如下图说是。

它也是MOS(Metal-oxide Semiconductor)家族中的一员,与8080和6800微处理器所采用的技术相同。MOS半导体管很容易与TTL芯片连接起来;通常情况下,其内部晶体管的速度要比TTL高,但速度却不如TTL快。

这个芯片存储容量可以达到1024位,这个数值可以根据地址信号(A0~A9),数据输出(D0)和数据输入(DI)信号(输入和输出服用一个信号线)的数目计算出来。你所使用2102芯片信号不同,访问时间(read access time,指从芯片接受到地址信息到输出有效数据所需的时间)也是各有差异,从350ns~1000ns不等。当需要从存储器中读取数据时,R/(1-W)(读/写)信号置1;当向芯片中写入数据的时候,这个信号要置0,而且至少持续170~550ns的时间,也是由使用的2102芯片的信号决定的。

这里我们不得不提到的一个信号就是(1-CS)信号,也称片选信号。该信号置1时,芯片不被选中,意思就是说,不会相应R/(1-W)信号。其实,(1-CS)信号的作用不止这些,对芯片还有其他重要的作用。下面我们将简单描述一下。

存储器板

想想看,若让你为8位的微处理器组织存储器的话,你会怎么做呢?是选择按8位的存储形式,还是1位存储形式?你肯定会选择前者。如果向存储整个字节,则至少需要8个这样的2102芯片。具体的做法就是,把8个芯片对应的地址信号,R/(1-W)及(1-CS)信号连接起来,如下图说是。

实际上,这是一个1024x8位的RAM阵列,或者说是容量为1KB的RAM。

把存储器芯片安装在一块电路板上,这是很符合实际的做法。那么,到底一块电路板上能安装多少块这样的芯片呢?如果是紧紧排列在一起的话,一块 S-100 板能容纳64个。这样一来,就提供了一个8KB的存储空间。一般我们不这样做,更合适的方法是,用32个芯片组成一个4KB的存储器。为了存储完整的字节,把8个芯片连接在一起的芯片的集合,称为存储体(bank)。例如,一个4KB大小的存储器板就由4个存储体组成,而每个存储体又包含8个芯片。

8位微处理器,例如8080,6800,有16个地址,可用来寻址64KB的存储空间。如果你制作了一个包含4个存储体,大小为4KB的存储器板,则存储器板上的16位地址信号就有如下所示的功能。

下面详细解释一下这16位地址信号。A0~A9直接与RAM芯片相连接;A10和A11用来选择4个存储体中要被寻址的哪一个;A12~A15确定哪些地址申请用这块存储器板,换言之,就是这块存储器板响应哪些地址。微处理器整个存储空间的大小是64KB,被划分成16个不同的区域,每个区域的大小为4KB,我们设计的4KB存储器板占用了其中一个区域。这16个区域划分情况如下。

0000h~0FFFh
1000h~1FFFh
2000h~2FFFh
   ....
F000h~FFFFh

举例说明,假定4KB存储器板使用了A000h~AFFFh地址区域。这就意味着,第一个存储体占用了地址A000h~A3FFh,第二个占用了地址A400h~A7FFh,第三个占用了地址A800h~ABFFh,剩下的AC00h~AFFFh地址空间分给了第四个存储体。

总线与存储体的电路连接

你完全可以制作一块4KB存储器板,在用到它的时候再灵活确定其他地址范围。要获得这样的灵活性,可以使用一种名为双列直插式封装(dual inline package,DIP)开关的器件。在DIP中,有一系列极小的开关(从2到12个不等)。DIP是可以插在标准的IC插槽中的,如下图所示。

在一种称为比较器(comparator)的电路中,你可以把这个开关和总线上地址信号的高4位连接起来,就像下面这样。

回想一下前面讲过的内容,异或(XOR)门电路在两个输入端只有一个是高电平时,输出才为高电平;当两个输入端同时为低电平或高电平时,输出是低电平。

例如,如果把A13和A15对应的开关闭合,就意味着让存储器板能响应存储器空间A000h~AFFFh。若总线上的地址信号A12,A13,A14和A15与开关上设置的值相同的话,四个异或(XOR)门的输出都是0,或非(NOR)门的输出为1,如下图所示。

接下来我们把Equal信号和一个2-4译码器联合起来使用,就能为四个存储体中的每一个都产生一个(1-CS)信号,便于对存储体进行选择。具体连接图如下图所示。

例如,若想选择第三个存储体,把A10,A11分别置0和1就可以了。

现在回想一下第16章中阐述过的如何组织RAM阵列,这一过程的细节是十分繁琐的,你可能会认为我们还需要8个4-1选择器,用来从4个存储体中选择正确的数据输出信号。但我们并没有这么做,下面来讨论下原因。

通常情况下,TTL兼容基层电路的输出信号要么大于2.2V(逻辑1)要么小于0.4V(逻辑0)。试想一下,如果把输出信号连接起来会发生什么呢?一个集成电路的输出为1,另一个集成电路的输出为0,若把这两个输出连接在一起,结果又是什么呢?恐怕谁也没法回答。就是由于这种不确定性,一般不会把集成电路的输出信号连接在一起。

2102芯片的数据输出信号是三态(tri-state)的,也就是说,除了逻辑0和逻辑1之外,数据输出信号还有第三种状态。我们必须清楚地认识这种状态——它其实是一种“真空”态,就像芯片的引脚上什么也没连在一样。当片选信号(1-CS)为1的时,2102芯片的数据输出信号就会进入这种状态。这样一来,我们可以把4个存储器相应的数据输出信号连接在一起,并且可以把8个输出复用作为总线的8个数据输入信号。

之所以强调三态输出的概念,是因为它对总线的操作是至关重要的。几乎所有连接在总线上的器件都使用由总线传递而来的数据输入信号。但不管何时,连接在总线上的电路板中只有一个能确定总线数据输入信号的类型,其他电路板处于三种状态中的无效状态。

SRAM和DRAM

或许大家听说过,2102芯片是一个静态随机访问存储芯片(Static Random Access Memory,即SRAM),与动态访问存储器(Dynamic Random Access Memory,DRAM)不同。SRAM每存储1位需要4个晶体管(与第16章讲到的用触发器作存储器所需要的晶体管数不完全相同),而DRAM每位只需要一个晶体管。DRAM的缺点是它的外围支持电路较复杂。

只要芯片有电,SRAM芯片如2102就会保持已存储的内容;如果断电,则内容会丢失。在这方面,DRAM也是如此。但DRAM还需要周期性地对存储器进行访问,尽管有时候并不需要这些内容。这一过程称之为更新(refresh)周期,每秒钟内含有好几百次刷新,就好像隔一段时间就推一下某个人使他不要入睡一样。

尽管业界在使用DRAM上有些争论,但近年来,DRAM芯片容量的不断增长使得DRAM最终成为了标准。1975年,Intel公司首创了DRAM芯片,它可以存储16384位。DRAM芯片的容量基本上是每三年增长4倍,符合摩尔定律。如今,计算机主板上一般都配备有存储器槽,可以插上若干个DRAM芯片组成称为单列直插内存模块(single inline memory modules,SIMM)或双列直插内存模块(dual inline memory modules,DIMM)的小电路板。如今,话费不到300美元就可以买到128M的DIMM了。

输出设备

电子射线管

既然已经知道制作存储器板了,应该没有人会把微处理器的整个存储空间部分配给存储器,必须留些空间给输出设备。

电子射线管(cathode-ray tube, CRT)——20世纪上半个世纪,外观上有些像在家里看到的电视机—-已成为计算机最普通的输出设备。我们称连到计算机上的CRT通常称为视频显示器(video display)或监视器(monitor),提供信号给显示器的电子部件称为视频适配器。通常在计算机中,视频适配器是独立存在的,他们拥有自己的电路板,通常称为显卡(video board)。

虽然视频显示器或电视机的二维图像看起来似乎很复杂,但它实际上是由一束连续的射线很快扫过屏幕而形成的。射线从左上角开始,从左到右扫过屏幕,然后很快回到左边,开始第2行。每个水平行称为扫描行(scan line),每次回到下一行的开始称为水平回归(horizontal retrace)。当射线扫描完最后一行后,就从屏幕右下角回到左上角(垂直回归,vertical retrace),并不断重复这一过程。以美国的电视信号为例,这种扫描每秒进行60次,称之为场频(field rate)。由于扫描速度很快,图像在屏幕不会出现闪烁。

电视机采用隔行(interlaced)扫描技术,情况要复杂些。两个场(field)形成一个单独的帧,帧(frame)是一个完整的静态视频图像。每个场完成整个帧的一半扫描线—第一个场完成偶数扫描线,第二个场完成奇数扫描线。这里要说明一下水平扫描频率(horizontal scan rate),即扫描每个水平行的频率,为15750赫兹。把它除以60赫兹,为262.5行,这就是一个场的扫描线数。整个帧是它的两倍,即525条扫描线。

不考虑隔行扫描技术的细节,生成视频图像的连续射线由一个连续信号来控制的。尽管电视节目在进行广播或通过有线电视系统传送的时候是音频和视频的混和,但最终还是分开的。这里讲到的视频信号与从VCR、摄像机和电视机的视频插口上输入/输出的信号是一致的。

对黑白电视来说,视频信号很简单且易于理解(彩色电视则要稍微复杂一些)。每秒60次场扫描,同时扫描信号中包含有用来标明一个场开始的垂直同步脉冲(vertical sync pulse),脉冲电压为0伏(地),宽度为400毫秒。水平同步脉冲(horizontal sync pulse)用来标明每个扫描行的开始,它的信号为0伏,宽度为5毫秒,每秒出现15750次。在两次水平同步脉冲之间,信号从0.5伏(黑)~2伏(白)变化,0.5伏~2伏之间的电压用来表示灰度。

带宽与像素

正是由于上述原因,电视图像部分是数字的,部分是模拟的。图像在垂直方向上分成525行,但每一个扫描线的电压是连续变化的—用来模拟图像的可视强度。但是电压并不是无限制地变化,电视机能响应的信号变化频率有上限,称为电视机带宽(bandwidth)。

在通信领域中,带宽是很重要的概念,某个特定的传输媒介能够传输的信息量都是受带宽限制的。在电视机中,带宽限制了视频信号从黑到白然后又回到黑这一变化的速率。美国的广播电视带宽为4.2MHz。

一旦我们把视频显示器连接到计算机上,就不该把它作为模拟和数字的混合设备来对待,把它看做是完完全全的数字设备更合适一些。从计算机的角度来说,我们可以很方便地把视频图像想象成由离散点组成的矩形网络,这些离散点称为像素(这一术语来自picture element)。

水平扫描行上像素的个数是受带宽严格限制的。在这里,我把带宽定义为视频信号从黑到白然后又回到黑的变化速率。如果电视机的带宽为4.2MHz,它就允许2个像素每秒420万次的变化,或者——用2x4 200 000除以水平扫描速率 15 750——每个水平扫描行有533个像素。但并不是所有的像素都可用,约1/3的像素被隐藏了起来——处于图像的远端或射线的水平回归中。这样算来,水平扫描行上可用的像素约为320个。

同样,在垂直方向上也不是525个像素都有用。实际上,在屏幕的上、下部和在垂直回扫过程中都会有损失。计算机在用电视机显示时不采用隔行扫描,垂直方向上的像素数目是200。

因此,最初连到普通电视机上的视频适配器的分辨率为320×200,即水平方向320个像素,垂直方向200个像素:

为了确定网格上像素总数,可以去统计也可以简单地用320×200得到64000个像素。根据视频适配器的配置(下面将会做简要的解释),每个像素可以是黑或白的,也可以为某一特定的颜色。

如果需要显示一些字符,能显示多少个呢?

这显然依赖于每个字符的像素数目。下图是一种可能的方法,每个字符使用8×8网格(64像素):

这是ASCII码20h~7Fh对应的字符。(不可显示的字符对应的ASCII码从00h~1Fh。)

每个字符都被定义为一个7位的ASCII码,但每个字符也与 64比特(位)相关,这64比特决定了字符会显示为什么样子。当然,你也可以把这64位信息当作代码看待。

上面我们对字符进行了定义,使用这些定义,分辨率为320x200视频显示器的每一屏就能显示25行,每行40个字符,足够把艾米·洛威尔(Amy Lowell,1874-1925)的一首短诗显示出来,看看下面的图。

视频适配器

视频适配器中必须配置一些RAM,用以存储所显示的内容;微处理器也必须能够向此RAM中写入数据以改变显示器上显示的内容。更方便的是,这个RAM也是微处理器存储空间的一部分。那么,上面描述的显示适配器需要多大的RAM呢?

这个问题并不太好回答!我们只想所,结果可能处于1KB~192KB之间。

我们从最简单的情况去考虑。怎样减少显示适配器的内存需求呢?一种方法是限制适配器的功能,让其只显示文本。我们已经明确地知道,视频显示器的每屏幕能显示25行,每行40个字符,也就是说,总共能显示1000个字符。这样一来,视频卡上的RAM只需存储这1000个字符的7位ASCII码。1000×7bit,大小约为1024字节,即1KB。

字符生成器(character generator)也是视频适配器板上的一部分,包含了所有ASCII码字符的像素图,这点前面已经讲过。通常,它是只读存储器(read-only memory),即ROM。它是一种集成电路,在生产时里面已经填入了数据,固定的地址输出的数据是不变的。ROM中并没有数据输入信号,这点与RAM不同。

                | 地址       | 数据输出 |
                | ----       | -------- |
                | 1000001000 | 00110000 |
                | 1000001001 | 01111000 |
                | 1000001010 | 11001100 |
                | 1000001011 | 11001100 |
                | 1000001100 | 11111100 |
                | 1000001101 | 11001100 |
                | 1000001110 | 11001100 |
                | 1000001111 | 00000000 |

从上表中,你能看出以0为背景,用1表示的字母A吗?

只显示文本的视频显示适配器还必须支持光标(Cursor)功能。光标是一个小小的下画线,用来表明从键盘上输入的下一字符会在屏幕的什么位置显示出来。光标所在的行和列常被存储在两个8位的寄存器中,这两个寄存器也是视频板的一部分,而且微处理器可以对其进行写操作。

有的显示器不仅仅只显示文本,还可以显示其他数据,我们称这样的显示适配器称为图形适配器(图形显卡)。通过向图形显卡上的RAM写入数据,微处理器就可以画出图形了,当然能显示各种大小和样式的文本。相比较而言,图形显卡要比只显示文本的显卡所需的存储空间更大。320x200的图形显卡有64000个像素,如果每个像素需要1位RAM,那么这样的图形显卡就需要64000位的RAM,即8000字节。然而,这只是最低 的要求。1位是和1个像素相对应的,只能用来表示两种颜色——例如黑白两色。0可能对应于黑色像素,1可能对应于白色像素。

让我们仔细观察一下黑白电视机,很快会发现,它们不仅仅只显示黑色和白色,还能显示不同灰度的色彩。为了让图形显卡拥有这种功能,通常每个像素对应于RAM中的一整个字节,其中00h表示的是黑色,FFh表示的是白色,介于两者之间的数值对应不同的灰度。一个320x200的视频板若能显示256种灰度,就需要64000字节的RAM。这与一直在讨论的某个8位微处理器的整个地址空间非常接近。

如果想显示出丰富多彩的颜色,每个像素就需要至少3个字节。如果现在你手上有放大镜的话,不妨用它观察一下彩色电视机或计算机视频显示器,你会发现,每种颜色都是由红,绿,蓝三原色的不同组合而形成的。为了获取所有的颜色,三原色中每张颜色的强度都需要用一个字节来表示。这么算来,就需要192000字节的RAM(更多有关彩色图形的内容将在本书最后一章介绍)。

图形显卡到底能显示出多少种不同的颜色呢?这与每个像素所赋予的比特数是有关的。对于这种关系,你可能会感到很熟悉,因为本书中讲到的很多编码都与之类似,它们都涉及2的幂,它们之间的关系如下:

在标准的电视机上,320x200的分辨率是所能达到的最高分辨率。正是由于这样的原因,我们要为计算机特制显示器,以使其具有比电视机更高的带宽。1981年IBM PC所用的显示器可以显示25行,每行80个字符,这是IBM巨大且昂贵的大型机的CRT显示器上的字符数目。对IBM来说,80是一个很特殊的数字,因为它正好是IBM穿孔卡片上的字符数。的确,早期连到主机上的CRT显示器主要用来显示穿孔卡片的内容。偶尔你会听到一种过时的叫法,把仅显示字符的视频显示器的所有行称为卡片。

多年来,视频显示适配器的分辨率及显示的颜色不断增加。一个重要的里程碑是1987年IBM PS/2个人计算机系列和苹果公司的Macintosh II都采用了水平640像素,垂直480像素的视频适配器。这是从那时起就已保持的最低标准的视频分辨率了。

640×480分辨率是一个具有重要意义的里程碑。也许你不会相信,它之所以重要的原因还要追溯到托尔斯·爱迪生!大约在1889年,当爱迪生和工程师William Kennedy Laurie Dickson研究电影摄影机和电影放影机的时候,他们决定使电影画面的宽比高要多出1/3。宽和高的比例称为长宽比(aspect ratio)。Edison和Dickson确定的这个比例通常表示为1.33∶1或4∶3;在60多年的时间里,这个长宽比为许多电影所采用,并且电视上也采用了这个长宽比。直到1950年的早期,好莱坞引入宽屏(widescreen)技术来与电视竞争才打破了4∶3的长宽比。

像电视一样,许多计算机监视器的长宽比也是4∶3,这很容易用尺子测量一下来验证。640×480分辨率的比例也是4∶3,这意味着水平方向上100个像素的物理长度与垂直方向上100个像素的物理长度是一样的。这是计算机图像的重要特征,称之为正方形像素(square pixel)。

现在的视频适配器和监视器都能实现640×480的分辨率,但也存在其他各种各样的显示模式,常见的分辨率有800×600,1024×768,1280×960和1600×1200。

输入设备

计算机的显示器和键盘之间物理上是分开的。

其实键盘的每个按键就是一个简单的开关。按键按下,开关就会闭合。现在个人计算机的键盘有104个按键,但类似于打字机的键盘可能只有48个按键。

如果要让连接到计算机上的键盘能正常工作的话,就需要配备一些硬件来为每个按键提供一个唯一的代码,以便区分哪一个按键被按下了。我们称键盘硬件提供的代码为扫描码(scan code)。当按下键盘上的某个按键时,一小段计算机程序就会计算出这个按键对应的ASCII码(如果有的话)。

这里为了避免键盘硬件的电路图太复杂,假设键盘上只有16个按键。任何一个按键被按下,键盘硬件就会产生一个4位的代码,二进制数值范围时0000到1111.

键盘硬件包含了前面曾讲过的部件,如下图所示。

上图左下部分所示的是键盘的16个按键,简单地开关表示。4位的计数器在按键对应的16个编码间快速且重复地循环着,循环的速度必须足够快,以保证在按下并松开一个按键之前循环已经结束。

4位计数器的输出同样也是2-4译码器和4-1数据选择器的输入。在没有按键按下的情况下,选择器的输入全都不为1,因此其输出也不为1;一旦有某个按键被按下,而且与4位计数器某一特定输出相对应,那么选择器的输出就为1.例如,如果右上角对角线方向的第二个开关被按下,且计数器的输出是0110,选择器就会输出1,如下图所示。

0110就是这个按键的代码。在这个按键按下的情况下,计数器的其他输出都不会使选择器的输出为1,也就是说每个按键的代码都是唯一的。

扫描码的位数就是由键盘上按键的数目确定的。如果键盘上有64个键,就需要6位的扫描吗,也就需要6位的计数器。用一个3-8译码器和一个8-1的选择器就可以把这些按键组成一个8x8的阵列。如果键盘上的按键数目为65~128个,就需要7位的扫描码。你就可以用一个4-16译码器和8-1的选择器(或者一个3-8译码器和一个16-1选择器)把这些按键组成一个8x16的阵列。

在这个电路中,接下来将会发生什么事情呢?这取决于键盘接口。每个按键都应该在RAM中拥有1位的存储空间,这是设计键盘硬件时考虑的事情。而且这些RAM是由计数器寻址的,RAM的内容为0或1,具体是什么值取决于按键按下(RAM为1)与否(RAM为0)。微处理器是可以读取RAM中的内容的,并通过内容判断每个按键的状态。

中断信号是键盘接口一个很有用的信号。回想一下前面讲过的内容,我们知道8080有一个输入信号允许外部设备中断当前微处理器正进行的工作。微处理器是通过从内存中读取一条指令来响应中断的,通常是一条RST指令。这条指令使微处理器跳转到内存中一个特定的区域并执行其中的中断处理程序。

长期保存信息存储器

纸带

最后,我们要介绍一下能够长期存储信息的外围设备。前面曾提到,无论是用继电器,电子管还是用晶体管作为介质构成随即访问存储器,一旦掉电,它存储的内容就会丢失。正因如此,能够在掉电时长期保存信息的存储器,是一台完整的计算机不可或缺的组成部分。长期以来,人们通过在纸上或者卡片上打孔来保存永久信息,IBM打孔卡片是其中典型的代表。在早期小型计算机中,为了能够长久保存程序和数据,通常在滚动的纸带上打孔,而在需要时,这些程序和数据可以从纸带加载到内存。

穿孔卡片和纸带的使用也不是尽善尽美,它也存在一些问题,首先介质不能重复使用,当打上一个孔后就不容易再恢复。其次是效率低,假如你有机会看到当时纸带上保留的某一比特信息,就会发现这种做法是在太浪费纸带了。

磁带

所以,现在最流行的长期存储器类型是磁介质存储器(magnetic storage)。磁介质存储器起源于1878年,当时美国工程师OberlinSmith(1840—1926)描述了它的原理。第一个可用的设备是在20年后即1898年,由丹麦的发明家ValdemarPoulsen(1869—1942)制造的。Poulsen的电磁式录音机起初打算用来记录人不在家时收到的电话信息。他用电磁铁—电报机里随处可见的部件—和可变长度的金属丝来记录声音。电磁铁按照声音的高低来磁化金属丝。当磁化的金属丝在通过电磁线圈的时候,根据磁化程度的不同会产生不同的电流。不管采用何种磁化介质,都是用电磁铁的磁头(head)来记录和读取信息的。

1928年,澳大利亚发明家Fritz Pfleumer发明了一种磁记录设备,并对它申请了专利。此设备采用在生产香烟上的金属带时所用的技术,将铁粒子覆盖在很长的纸带上。很快,一种强度更高的醋酸盐纤维素代替了纸带,从而导致更耐久和更知名的记录介质的诞生——卷轴式磁带,它被很方便地包装在塑料盒里,可以很方便地使用。对于用来记录和回放音乐及视频信号来说,卷轴式磁带无疑是很受欢迎的介质。

Rmingtion Rand在1950年发明。那时,1/2英寸的卷轴磁带可以存放几兆字节的数据。早期家用计算机采用普通的盒式磁带录音机来保存信息。一些小程序用来存储内存块的内容到磁带并以后再从磁带读到内存。最早的IBM PC有一个连接盒式磁带存储器的接头。今天,磁带仍然是很普遍的介质,特别是对那些要长期保存的文档。然而,磁带并不是理想的介质,因为不能很快地移动到磁带上的任一点进行访问,频繁的前进和倒回要花费很多时间。

磁盘

从几何观点上看,能够进行快速访问的介质是磁盘。磁盘围绕中心旋转,连到臂上的一个或多个磁头从磁盘外边向中间移动。磁盘上的任何区域都能够被快速访问。

在记录声音信息这一方面,磁盘确实比磁带产生得要早一些。而用来存储计算机数据的第一个磁盘驱动器是由IBM在1956年发明的,此RAMAC(random access method of accounting and control,计算与控制过程中的随机访问模式)由50个盘片组成,直径2英尺,可以存放5M字节数据。

从那时起,磁盘越来越小而容量越来越大。磁盘通常分为软盘(floppy disk)和硬盘(hard disk or fixed disk)。软盘是由覆盖磁性物质的塑料片组成,外面是起保护作用的厚纸板或塑料包装(现在常用)。(塑料包装保护磁盘不被弯折,因而虽然现在的磁盘与以前的软盘已经有很大区别,但仍然习惯称之为软盘。)软盘必须插入软盘驱动器,这是连接到计算机上的一个部件,用来向软盘写或从软盘读取信息。早期的软盘直径为8英寸。早期的IBM PC用5.25英寸的软盘,现在常用的是直径3.5英寸的软盘。软盘可以从软盘驱动器中取出来,用来在计算机之间传递数据。磁盘现在仍然是商用软件中一个重要的分发媒体。

硬盘通常由多个金属磁盘组成,永久性地留在驱动器里。硬盘通常比软盘速度快,并可存储更多的数据。但是,硬盘中的磁盘自身不能移动。

磁盘的表面被划分成许多同心圆,称为磁道(tracks),每个磁道又被划分成像圆饼切片形状的扇区(sectors),每个扇区可以存放一定数量的字节,通常为512字节。最早IBM PC上用的软盘只有一面,分成40个磁道,每个磁道8个扇区,每个扇区可保存512字节。这样,每一个软盘可存放163840个字节,即160KB。今天,PC兼容机常用的3.5英寸软盘有两面,每面80个磁道,每个磁道18个扇区,每个扇区可存放512字节,这样总共可存放1474560字节,即1440KB。最早的硬盘驱动器由IBMPC/XT在1983年使用,可存放10MB的内容。1999年,20吉字节的硬盘驱动器(可存放200亿字节)售价都只在$400以下。

软盘和硬盘通常有它们自己的电气接口,除此之外,为了能和微处理器交互数据,这些电气接口与微处理器之间还需要有额外的接口与之相连。硬盘驱动器常用的标准接口包括SCSI(small computer system interface,小型计算机系统接口)、ESDI(enhanced small device interface,增强的小型设备接口)和IDE(integrated device electronics,集成设备电气接口),所有这些接口均使用DMA(direct memory access,直接内存访问)来使用总线,DMA可以不经过微处理器,实现数据在随机访问存储器和硬盘之间字节传送。这样的传送是以块为单位进行的,每次传输的块大小还是磁盘扇区字节数的倍数块,通常是512字节。

许多家用计算机的初学者总听到关于兆字节和吉字节的技术谈论,这使得他们对半导体随机访问存储器与磁盘存储器有什么不同感到很困惑。近几年出现的分类规则也减少了人们对术语的困惑。这条规定:memory(内存)仅仅表示半导体随即访问存储器;storage(存储器)用来指任何的存储设备,通常包括软盘,硬盘,和磁带。

随机访问存储器与磁介质存储器之间的主要区别是:随机访问存储器是易失性的,而软盘或硬盘上的数据会一直保留,除非故意删除或写覆盖。此外,还有一个显著的不同只有在理解微处理器如何工作之后才能理解:当微处理器输出一个地址信号后,通常是寻址随机访问存储器,而不是磁介质存储器。

微处理器不能直接从磁盘读取数据,需要将所需的数据从磁盘调入内存(随机访问存储器),然后它才能对其访问,当然这需要额外的步骤。微处理器还需要执行一段小程序,这段程序会访问磁盘,并将数据从磁盘调入内存。

随机访问存储器与磁介质存储器之间的差别有一个比喻:随机访问存储器就像桌面上的东西,可以直接拿来使用;磁介质存储器就像一个文件柜,如果要用文件柜里的东西,需要站起来,走到文件柜前,找到需要的文件,并带回到桌面上。如果桌面上太拥挤,还需要把桌上的一些东西拿回到文件柜中去。

这个比喻很恰当,因为存在磁盘上的数据确实是以所谓的“文件(file)”来存放的。存储和检索文件是操作系统(Operation System)很重要的一个功能,关于操作系统的相关知识,下一章将会进行专门介绍。

Loading Disqus comments...
Table of Contents