6.3.1 概述

6.3.1 概述

主存储器(简称主存)的结构如图6.5所示,主存根据MAR(存储器地址寄存器)中的地址访问某个存储单元时,需要经过地址译码、驱动等电路,找到所需要访问的单元。读出时,需经读出放大器,才能将被选中单元的存储字送到MDR(存储器数据寄存器),写入时,MDR 中的数据也必须经过写入电路才能真正写入到被选中的单元中。

图6.5 主存的结构

目前,大多数存储器采用字节编址,基于这种编址,数据在主存中有3种不同的存放方法,如图6.6所示。设存储字长为64位(8个字节),即一个存取周期最多能够从主存读或写64位数据。图6.6中最左边一列表示字地址(16进制),字地址的最末3个二进制位必定为000(用于8个字节编址)。假设,读写的数据有4种不同长度,它们分别是字节(8位)、半字(16位)、单字(32位)和双字(64位)。

注意:此例中数据字长(32位)不等于存储字长(64位)。

图6.6(a)给出的是一种不浪费存储器资源的存放方法,从图中可以看出,4种不同长度的数据一个紧接着上一个存放。这样做主要存在两个问题,一是除了访问一个字节以外,当要访问一个双字、一个单字或一个半字时都有可能需要花费两个存取周期,因为从图6.6(a)中可以看出,一个双字、一个单字或一个半字都有可能跨越两个存储字存放,这使存储器的工作速度降低了一半;二是存储器的读写控制比较复杂。

为了克服上述两个缺点,出现了如图6.6(b)所示的数据存放方法。这种存放方法规定,无论要存放的是字节、半字、单字还是双字,都必须从一个存储字的起始位置开始存放,而多余的部分浪费不用。很明显,这种数据存放方法能很好地克服图6.6(a)存在的缺点,但它无疑浪费了存储器资源。

综合前两种数据存放方法的优缺点,出现了如图6.6(c)所示的折中方案。图6.6(c)所示的存放方法规定,双字数据的起始地址的最末3个二进制位必须为000(8的整倍数),单字数据的起始地址的最末两位必须为00(4的整倍数),半字数据的起始地址的最末一位必须为0(偶数)。这种存储方式能够保证无论访问双字、单字、半字或字节,都能在一个存取周期内完成,尽管存储器资源仍然有浪费,但是比图6.6(b)所示的存放方法要好得多。这种存放方法被称为边界对齐的数据存放方法。

图6.6 字节编制的主存储器的各种存放方法