重看计算机基础1:数据线、地址线,按字、按字节寻址。

算到现在,编程也有十年了,越发意识到,如果对于理论嗤之以鼻,那也没必要学计算机了。

所以,最近开始重读基础,希望不算太晚。

看了书和网络上的blog,发现计算机组成原理中,最基本的几个概念讲得略有些晦涩。

比如:数据线、地址线,按字、按字节寻址。现做一些总结。

总线中的每根“线”,一次只能传输0/1,所以一根线能传输1位(bit)的数据,两根线呢,能传输2位(bit)。

但是,需要注意的是1bit能表达0和1,所以1bit能表达2个数,所以,3bit能表达的数其实是2^3个,也就是8。

数据线是传输数据的,一块32位(32bit)的CPU,内含一个32bit的数据寄存器(MDR),通常而言,就该有32根数据线,这样才能保证一次传输32bit数据。(当然,如果有个计算器来帮忙算奇偶性,那么16根数据线传输32bit也没有问题,或者用更大量的数据线,比如64位CPU跑32位程序,浪费一些数据线,也不是不存在的。这里只说通常情况)

数据存在存储单元里,存储单元是一个物理结构,它有一个地址,就像你要去参加面试,总得知道公司的地址和一张地图才能找过去。所以,又出现了地址寄存器来存放这些地址,地址寄存器连接有地址线,如果有8根地址线,那么单次寻址,能表达的数据范围是2^8,也就是说,8根地址线,单次能传输64种数据组合。

所谓的寻址范围,说的就是最大的寻址能力,上面的8根线,以字节为寻址单位时,能找到64个字节,换言之,存储器如果超出64byte,那么,剩下的就找不着了。

另一方面,如果存储器容量是1MB(8Mbit),按字节寻址时,由于每个字节(8bit)一个地址,也就是说它需要8Mbit/8bit=1M个地址,1M=2^20,那么可知,只需要20根地址线,多了也浪费。

在一些寻址范围的测试题里,一般有两种考察方式:

一个是给出存储器容量(比如1MB)和计算机的字长(比如32bit),然后询问寻址范围,这里其实隐含了条件“地址线管够”。

一个是给出地址线数量(比如20根)和计算机的字长,然后询问寻址范围,这里隐含了条件“存储器容量管够”。

因为前提包含:没人会设计出浪费存储器总线的结构,不需要考虑奇葩的设计

当然,出题方式是可以有变化的,比如不给出字长,给出数据线数量,基于“不需要考虑奇葩的设计”,那么数据线数量可以反推出字长,比如32跟数据线,那就一定是32位(因为你一次只能读32bit的数据,存储器自然也应该设计存储单元宽度32)。

又有,按字寻址,而非按字符寻址,字(word)也就是存储单元的单次存储数据,字长也就是存储单元的宽度,那么,32bit字长,就是4字节,64bit字长,就是8字节,那么字寻址范围是需要字符寻址除以响应的数量。

32位字长情况下,1M的字符寻址范围,就只有256K的字寻址范围。

可以看到,这原本就是个文字游戏,只是考察你的熟练度而已,换个说法就更清晰了:

32位字长情况下,1M个字符,就是256K个字。

当然,从计算机结构角度去理解的话,是这样的:

1、1M的字符寻址,需要20根地址线(2^20 = 1M)

2、理论上20根线,可以找到1M个地址,那么如果是按字,应该是可以具备2^20 * 4个地址,也就是4M。这是错误的

 3、实际上,不论寻址方式如何,你寻址最后要找到的是字符,所以如果用“按字寻址”,在找到字之后,还得找到字里的具体字符,那么就需要2根线,来表达字内的4个字符,这个叫做字内查找。

4、所以,按字寻址,你只能用到18根地址线。那么寻址范围就是2^18,也就是256K。

原文地址:https://www.cnblogs.com/anrainie/p/9417619.html