存储器的分段详解
1.什么是1B?
1B可以想象成为一块
如图:|_|_|_|_|_|_|_|----------1B大小
7 6 5 4 3 2 1 0
2.这个1B如何在内存中表示
当然用地址阿,不过地址是多少位呢?
如果地址用20位表示
如下:第一个地址到第十六个地址
二进制 十六进制
|_______|-->00000000000000000000---->00000----表示-------1B
|_______|-->00000000000000000001---->00001----表示-------1B
|_______|-->00000000000000000010---->00002----表示-------1B
|_______|-->00000000000000000011---->00003----表示-------1B
|_______|-->00000000000000000100---->00004----表示-------1B
|_______|-->00000000000000000101---->00005----表示-------1B
|_______|-->00000000000000000110---->00006----表示-------1B
|_______|-->00000000000000000111---->00007----表示-------1B
|_______|-->00000000000000001000---->00008----表示-------1B
|_______|-->00000000000000001001---->00009----表示-------1B
|_______|-->00000000000000001010---->0000A----表示-------1B
|_______|-->00000000000000001011---->0000B----表示-------1B
|_______|-->00000000000000001100---->0000C----表示-------1B
|_______|-->00000000000000001101---->0000D----表示-------1B
|_______|-->00000000000000001110---->0000E----表示-------1B
|_______|-->00000000000000001111---->0000F----表示-------1B
那么20位最多能表示多少个地址呢?当然是2^20个阿
上图继续
|_______|-->00000000000000000000---->00000----表示-------1B
|_______|-->00000000000000000001---->00001----表示-------1B
|_______|-->00000000000000000010---->00002----表示-------1B
|_______|-->00000000000000000011---->00003----表示-------1B
|_______|-->00000000000000000100---->00004----表示-------1B
|_______|-->00000000000000000101---->00005----表示-------1B
|_______|-->00000000000000000110---->00006----表示-------1B
|_______|-->00000000000000000111---->00007----表示-------1B
|_______|-->00000000000000001000---->00008----表示-------1B
|_______|-->00000000000000001001---->00009----表示-------1B
|_______|-->00000000000000001010---->0000A----表示-------1B
|_______|-->00000000000000001011---->0000B----表示-------1B
|_______|-->00000000000000001100---->0000C----表示-------1B
|_______|-->00000000000000001101---->0000D----表示-------1B
|_______|-->00000000000000001110---->0000E----表示-------1B
|_______|-->00000000000000001111---->0000F----表示-------1B
.................
.................
.................
共有2^20个1B也就是1MB
可见一个地址表示1B,那么共有多少个地址就能表示多少B了!!
呵呵.
如果用16位宽来表示一个地址那个共有2^16的地址,也就是2^16B=64KB
///
现在到讲分段了
为什么要将存储器分段?
原因:
16位字长的机器只能提供2^16个地址,远远不满足地址总线为20位所表示的地址范围(2^20)
那么如何用16位来提供20位地址的问题??---->分段
什么是分段呢?
比如:
从地址00000到0000F为一段,刚好是16B(因为共16个地址)
从地址00010到0001F为一段
如图:
1B 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B 1B
|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|---一共16B
00000 0000F
|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|---一共16B
00010 0001F
................................................
....
|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|---一共16B
FFFF0 FFFFF
可见每段首地址的最后1位(16进制说法)都是0
那么就不写了,结果不就是16位地址了FFFF(16位)
那么实际的地址就等于 每小段的首地址*10H+在每段内的偏移地址
偏移地址如下:
在段|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|__|---一共16B
FFFF
段首地址是:FFFF,段内的第一个1B的地址是0000,也就是在该段内偏移0000
那么他的物理地址是FFFF*10+0000=FFFF0,哈哈和20位地址一样了
总结:
看到2M,就像到有2MB个地址,转化成2^20B,可见地址位宽是20位!!
那么32位地址能表示多少大小2^32-->4GB