1.2 主存储器
为了存储数据,计算机包含大量的电路(如触发器),每一个电路能够存储一个位。这种位存储器被称为计算机的主存储器(main memory)。
1.2.1 存储器结构
计算机的主存储器是由称为存储单元(cell)的可管理单位组成的,一个典型存储单元的容量是8位。因为一个8位的串称为一个字节(byte),所以一个典型存储单元的容量是一个字节。像微波炉这样的家用电器中嵌入的小型计算机的主存储器,可能仅仅包含几百个存储单元,但是大型计算机的主存储器可能有几十亿个存储单元。
虽然计算机中没有左或右的概念,但是我们通常假设存储单元的位是排成一行的。该行的左端称为高位端(high-order end),右端称为低位端(low-order end)。高位端的最左一位称作高位或最高有效位(most significant bit)。取这个名称是因为,如果把存储单元里的内容解释为数值,那么这一位就是该数的最高有效数字。类似地,低位端的最右一位称为低位或最低有效位(least significant bit)。于是,我们可以如图1-7所示的那样描述字节型存储单元的内容。
为了区分计算机主存储器中的各存储单元,每一个存储单元都被赋予了一个唯一的“名字”,称为地址(address)。这类似于通过地址找到城市里的一座座房屋。不过,存储单元中的地址都是用数字表示的。更精确地说,我们把所有的存储单元都看作是排成一行的,并按照这个顺序从0开始编号。这样的编址系统不仅为我们提供了唯一标识每个存储单元的方法,而且也给存储单元赋予了顺序的概念(见图1-8),这样就有了诸如“下一个单元”“前一个单元”的说法。
将主存储器中的存储单元和每个存储单元中的位都进行排序,会产生一个重要的结果:计算机主存储器的所有二进制位会实际排成一长行。这个长行上的片段可以存储的位模式因此比单个存储单元要长。特别是,我们只需要两个连续的存储单元就可以存储16位的串。
为了做成一台计算机的主存储器,实际存放二进制位的电路还组合了其他的电路,这个电路使得其他电路可以在存储单元中存入和取出数据。以这种方式,其他电路可以通过电信号请求从存储器中得到指定地址的内容(称为读操作),或者通过请求把某个位模式存放到指定地址的存储单元里(称为写操作)。
因为计算机的主存储器是由独立的、可编址的存储单元组成的,所以可以根据需要独立访问这些存储单元。为了反映用任何顺序访问存储单元的能力,计算机的主存储器常被称为随机存取存储器(random access memory,RAM)。主存储器的这种随机存取特性,与1.3节中将要讨论的海量存储系统,形成了鲜明的对比,在海量存储系统中,长位串被当作合并块来操控。
尽管我们介绍说,触发器是存储二进制位的一种方法,但是在现代的大多数计算机中,RAM都是用其他类似的更复杂的技术制造的,这些技术可以让RAM高度小型化、响应时间更短。其中许多技术将位存储为可快速消散的电荷。因此,这些设备需要附加电路(称为刷新电路),在1秒内反复补充电荷很多次。因为它的这种不稳定性,通过这种技术构造的计算机存储器常被称为动态存储器(dynamic memory),于是就产生了术语DRAM(读作“DEE-ram”),用来表示动态RAM(dynamic RAM)。有时动态存储器会用术语SDRAM(读作“ES-DEE-ram”)来表示同步DRAM(synchronous DRAM),采用这种附加技术可以缩短从存储单元取出信息所需要的时间。
1.2.2 存储器容量的度量
在第2章我们会学到,如果主存储器中存储单元的总数是2的幂,那么主存储器设计起来会很方便。因此,早期计算机存储器的大小通常以1024(即210)个存储单元为单位来度量。因为1024接近于数值1000,所以计算机行业的许多人采用前缀千(kilo)来表示这个单位。也就是说,术语千字节(kilobyte,符号表示为KB)被用于表示1024字节。因此,带有4096个存储单元的机器会被说成是有一个4KB的存储器(4096=4×1024)。随着存储器容量的增大,这个术语逐渐扩大到了兆字节(megabyte,符号表示为MB)、吉字节(gigabyte,符号表示为GB)和太字节(terabyte,符号表示为TB)。遗憾的是,这种前缀千(kilo-)、兆(mega-)等的用法属于术语的误用,因为这些前缀已经是其他领域用于指称1000的幂。例如,在度量距离时,千米(kilometer)指的是1000米,在度量无线电频率时,兆赫(megahertz)指的是1 000 000赫兹。在20世纪90年代后期,国际标准组织为2的幂制定了专门的术语:千位字节(kibi-byte)、兆位字节(mebi-byte)、吉位字节(gibi-byte)和太位字节(tebi-byte),用来表示1024的幂,而不是1000的幂。然而,尽管这种区别在世界上许多地方的当地法律里都有规定,但一直以来,普通大众和许多计算机科学家都不愿意放弃这个已经比较熟悉但会引起歧义的“兆字节”(megabyte)。因此,提醒大家:一般说来,千、兆等术语在涉及计算机度量时表示2的幂,但在其他环境中表示1000的幂。
问题与练习
1.如果地址为5的存储单元存有值8,那么“将值5写入6号存储单元”和“将5号存储单元的内容移到6号存储单元”之间有什么差别?
2.假定你想交换存储在2号和3号存储单元中的值。那么下面的步骤错在哪里?
步骤1:把2号存储单元中的内容移到3号存储单元。
步骤2:把3号存储单元中的内容移到2号存储单元。
请设计能够正确交换这两个存储单元内容的步骤。如有必要,可以使用额外的存储单元。
3.一台带有4 KB存储器的计算机,其存储器里有多少个二进制位?