在有些情况下,存储器的字、位两个方向上都需要进行扩展,这时,必须把上述存储器位扩展和存储器字扩展两种方法同时使用。
  下面,举一个具体例子来说明存储器位/字扩展方法:
  假设,用4M字×4位的存储芯片组成16M×32位的主存储器,则总共需要使用的芯片数目为:
  所有32个芯片构成一个二维存储器陈列,芯片之间的连接关系如图4.11所示。字方向有4组,存储容量扩大4倍。存储器的低22位地址分别与所有32个芯片的22位地址连接,用最高的两位地址A23A22经译码后产生的4个输出信号控制4组芯片的片选信号。所有32个芯片的读写控制线全部连接在一起作为存储器的读写控制线。由于每个芯片只有4位数据,因此,每组中必须用8个芯片来进行位扩展,总共得到4′8=32位数据。每组中的32条数据线分别对应直接相连,构成主存储器的32位数据。
图4.11 存储器字/位扩展
  目前,大部分计算机系统中的主存储器都采用模块化结构,用户可根据自己的不同需要随时很方便地改变主存储器的容量。例如,市场上可以买到32MB、64MB、……、的主存储器模块。用两个64MB的模块可以构成128MB的主存储器,用4个32MB的模块也能构成128MB的主存储器等。这种模块化的主存储器通常都采用上述扩展方法连接而成。
  假设主存储器与各个模块的参数如下:
  w:每个模块的容量,通常用地址码的低log2 w位作为模块的内部地址。
  n:组成存储器的模块个数,通常用地址码的高log2 n位作为译码器的输入,而这个译码器的n个输出作为各个模块的片选输入,只有被译码器选中的那个模块才能进行读写操作。
  j:每个模块的内部地址,j=0,1,2,...,w-1。
  k:组成主存储器的各个模块的编号,k=0,1,2,...,n-1。
  则这个存储器的地址A的计算公式为:A=w×k+j。
  如果已知存储器的地址为A,可以计算出与这个地址对应的模块编号和这个模块的内部地址:
  模块的内部地址Aj的计算公式:Aj=A mod w。
  模块的编号Ak的计算公式:Ak=
  另外,由于每个模块均可以组成一个完整的存储器,都能够独立工作。因此,这种经过扩展后的存储器已经具备了并行工作的条件。然而,由于程序的连续性和局部性,在程序执行过程中被访问的指令序列和数据绝大多数都分布在同一个模块中,因此,通常只有一个模块在不停地忙碌,其它模块是空闲的。只有当指令序列跨越两个模块时,这两个模块才有可能并行工作。