计算机内存

2.1 字长

计算机在同一时间内处理的一组二进制数称为一个计算机的“字”,而这组二进制数的位数就是“字长”。。通常称处理字长为8位数据的CPU叫8位CPU,32位CPU就是在同一时间内处理字长为32位的二进制数据。 所以这里的字并不是我们理解的双字节(Word)而是和硬件相关的一个概念。一般来说计算机的数据线的位数和字长是相同的。这样从内存获取数据后,只需要一次就能把数据全部传送给CPU。

2.2 地址总线

前面我们已经介绍过地址总线的功能。地址总线的数量决定了他最大的寻址范围。就目前来说一般地址总线先字长相同。比如32位计算机拥有32为数据线和32为地线,最大寻址范围是4G(0x00000000 ~ 0xFFFFFFFF)。当然也有例外,Intel的8086是16为字长的CPU,采用了16位数据线和20位数据线。

2.3 内存编址

从前面我们知道一个内存的大小和它芯片扩展方式有关。比如我们内存模块是采用 16M*8bit的内存颗粒,那么我们使用4个颗粒进行位扩展,成为16M*32bit,使用4个颗粒进行字容量扩展变为64M*32bit。那么我们内存模块使用了16个内存颗粒,实际大小是256MB。

我们需要对这个256M的内存进行编址以便CPU能够使用它,通常我们多种编址方式:

  1. 按字编址:    对于这个256M内存来说,它的寻址范围是64M,而每个内存地址可以存储32bit数据。
  2. 按半字编址:对于这个256M内存来说,它的寻址范围是128M,而每个内存地址可以存储16bit数据。
  3. 按字节编址:对于这个256M内存来说,它的寻址范围是256M,而每个内存地址可以存储8bit数据。

对于我们现在的计算机来说,主要都是采用按字节编址的方式。所以我们可以把内存简单的看成一个线性数组,数组每个元素的大小为8bit,我们称为一个存储单元。这一点很重要,因为后面讨论的所有问题内存都是以按字节编址的方式。 这也是为什么对于32位计算机来说,能使用的最多容量的内存为4GB。如果我们按字编地址,能使用的最大内存容量就是16GB了。

于是很容易想到一个问题,为什么我们要采用字节编址的方式呢?关于这个问题,我在网上基本没有找到答案,甚至都找不到问这个问题的。所以这里没法给出答案,为什么为什么呢? 麻烦知道的朋友告诉我哈。

另一方面的问题是,内存编址方式和DRAM芯片是否有关呢? 我认为还是有一定关系。比如我DRAM的芯片是8M*8bit,那么芯片最小的存储单位就是8bit,那么我们内存编址就不能按照半个字节来编址。否则内存取出8bit,根本不知道你要那4bit传给CPU。也有一种说法是现在的DRAM芯片cell都是8bit,所以采用按字节编址。另一方面应该也和数据总线位宽有关。

基本不出两种情况。以下是例子,真正弄懂就差不多不用害怕了。

假设CPU有20根地址线,32根数据线,试问按字节和字寻址,寻址范围分别是多少?

解答:首先,默认情况下,地址线的位数对应的都是按字节寻址。但是如果题目中数据线就只有4根,还当默认按字节寻址,那就大错特错了。因为数据线才4根,一次读写只能4个bit,根本不可能做到按字节寻址,这里的数据线有32根。所以可以大胆放马过来。

如果是按字寻址,就需要拿出地址线做字内字节寻址。因为,一个字有多个字节。寻址本身和数据线没有任何关系。要的是,能够索引到相应字节,而数据线位数,可以显示的是字内有多少字节,从而决定分配多少地址线来。

好了,按字节寻址:20根地址线,寻址范围就是220=1M220=1M。

按字寻址,因为数据线有32位,所以一个字有4字节。拿出两根地址线来(00 01 10 11),剩下18根地址线,所以寻址范围是256K(218)256K(218),即,可以数到252K个字,再由字内寻址,可以定位到每一个字节。

想不想问,多少个字节总共?

这个很容易想到,最多是220220个字节。两种方式都一样。如果是64位数据线呢,20位地址线,拿出3根做字内寻址,还剩17根做字寻址。还是一样的,只有220220个字节。

所以,存储的大小由地址线决定,数据线,只是定义了存储格局。仅此而已。

我们先从一道简单的问题说起!

     设有一个1MB容量的存储器,字长32位,问:按字节编址,字编址的寻址范围以及各自的寻址范围大小? 

     如果按字节编址,则 

                     1MB = 2^20B 

                     1字节=1B=8bit 

                     2^20B/1B = 2^20 

     地址范围为0~(2^20)-1,也就是说需要二十根地址线才能完成对1MB空间的编码,所以地址寄存器为20位,寻址范围大小为2^20=1M

     如果按字编址,则

                      1MB=2^20B

                      1字=32bit=4B

                     2^20B/4B = 2^18   

      地址范围为0~2^18-1,也就是说我们至少要用18根地址线才能完成对1MB空间的编码。因此按字编址的寻址范围是2^18

以上题目注意几点:

1.区分寻址空间与寻址范围两个不同的概念,寻址范围仅仅是一个数字范围,不带有单位

而寻址范围的大小很明显是一个数,指寻址区间的大小

  而寻址空间指能够寻址最大容量,单位一般用MB、B来表示;本题中寻址范围为0~(2^20)-1,寻址空间为1MB。

2.按字节寻址,指的是存储空间的最小编址单位是字节,按字编址,是指存储空间的最小编址单位是字,以上题为例,总的存储器容量是一定的,按字编址和按字节编址所需要的编码数量是不同的,按字编址由于编址单位比较大(1字=32bit=4B),从而编码较少,而按字节编址由于编码单位较小(1字节=1B=8bit),从而编码较多。

3.区别M和MB。

                        M为数量单位。1024=1K,1024K=1M

                        MB指容量大小。1024B=1KB,1024KB=1MB.

猜你喜欢

转载自blog.csdn.net/weixin_41484240/article/details/81974018