Chinaunix首页 | 论坛 | 博客
  • 博客访问: 338071
  • 博文数量: 88
  • 博客积分: 1695
  • 博客等级: 上尉
  • 技术积分: 1380
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-06 15:48
个人简介

喜欢美食, 旅行..

文章分类

全部博文(88)

文章存档

2014年(2)

2013年(12)

2012年(14)

2010年(8)

2009年(52)

我的朋友

分类: C/C++

2013-11-11 15:46:15

(下下内容并非本人原创,只是通过看别人文章后的简单总结)

首先要明白总线的概念

数据总线
(1) 是CPU与内存或其他器件之间的数据传送的通道。
(2)数据总线的宽度决定了CPU和外界的数据传送速度。
(3)每条传输线一次只能传输1位二进制数据。eg: 8根数据线一次可传送一个8位二进制数据(即一个字节)。
(4)数据总线是数据线数量之和。
地址总线
(1)CPU是通过地址总线来指定存储单元的。
(2)地址总线决定了cpu所能访问的最大内存空间的大小。eg: 10根地址线能访问的最大的内存为1024位二进制数据(1B)
(3)地址总线是地址线数量之和。
控制总线
(1)CPU通过控制总线对外部器件进行控制。
(2)控制总线的宽度决定了CPU对外部器件的控制能力。
(3)控制总线是控制线数量之和。
例题:若内存容量为4GB,字长为32,则______。
A.地址总线和数据总线的宽度都为32
B.地址总线的宽度为30,数据总线的宽度为32
C.地址总线的宽度为30,数据总线的宽度为8
D.地址总线的宽度为32,数据总线的宽度为8
答案:A
   内存容量为4GB,即内存单元的地址宽度为32位。字长为32位即要求数据总线的宽度为32位,因此地址总线和数据总线的宽度都为32。

再来说说数据总线
举个简单例子:假设一款CPU,数据总线为32位。也就是说一次CPU读操作可以获得4字节(32bit)的数据。那么现在有两个数据,即char ch_val; int int_val;如果按照一个字节一个地向内存中存取数据,且存取的起始位置0x10000。那么存储后数据的存储方式为:
(其中int_val有4个字节数据组成,分别是 int_val0 ... int_val3).
       --------------------------------------------
0x1000 | cha_val | int_val3 | int_val2 | int_val1 |
       --------------------------------------------
0x1004 | int_val0|          |          |          |
       --------------------------------------------
现在如果要CPU要访问int_val,那么就需要二次访问内存,一次先访问0x1000,一次访问0x1004,然后把二次访问的结果提取并合并为int_val。然而如果int_val如果地址对齐的话一次就够了。而内存的访问速度比cpu速度要慢至少一个数量级。当程序很大,数据较多的时候,你可以想象一下你的程序速度........

(顺便说一句,x86系cpu,从来都能支持非对齐地址访问,只是对非对齐地址访问,效率低而已。)

最后再说说地址总线
CPU通过地址总线来存取内存中的数据, 32位的CPU的地址总线宽度既为32位置, 标为A[0:31]. 在一个总线周期内, CPU从内存读/写32位.
但是某些CPU只能在能够被4整除的地址进行内存访问, 这是因为: 32位CPU不使用地址总线的A1和A2. (比如ARM, 它的A[0:1]用于字节选择, 用于逻辑控制, 而不和存储器相连, 存储器连接到A[2:31].)
访问内存的最小单位是字节(byte), A0和A1不使用, 那么对于地址来说, 最低两位是无效的, 所以它只能识别能被4整除的地址了. 在4字节中, 通过A0和A1确定某一个字节.

通常情况而言, 字节对齐只和数据总线相关. 但也会有一些CPU, 多少回和地址总线有些关系的. 比如ARM.
阅读(5085) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

marcus18772015-10-29 09:33:34

\"答案:A
   内存容量为4GB,即内存单元的地址宽度为32位。字长为32位即要求数据总线的宽度为32位,因此地址总线和数据总线的宽度都为32。\"

如果答案不是A、B、C、D则地址总线不一定是32位。

数据总线决定一次可以读出数据的大小,根据字长字长就可以判断。

而地址总线决定我们可以读取存储空间的大小,64位的系统也可以只装1G大小内存。所以单纯内存4G不能说明地址总线是32位。