不管怎么样,他直接这么说,我总觉得不恰当。
"64Kx4K=256M,而这正是24位地址空间的大小"
不管怎么样,他直接这么说,我总觉得不恰当。
LZ的意思应该是:
2^16=64K
64Kx4K=256M
这是16位的地址空间,而24位的应该是:
2^24=16M
16Mx4K=65536M=64G
这里我想可能忽略了一个80286的细节,80286为16位CPU,虽然采用24位数据总线,但其实际寻址能力还是16位的。而80386是在286的基础上添加了功能,所以这里说的24位的地址空间实际上指的是:
2^16=64K
64Kx4K=256M
这里只不过段长变为了4K。
有兴趣可以深入的了解一下20286的寻址方法。
一些摘录:
Intel给80386设计了三个技术要点:使用“类286”结构,开发80387协微处理器增强浮点运算能力,开发配套高速缓存解决内存速度瓶颈
80386采用“类286”总线结构,这样就可以保持软硬件的兼容性,可以利用现有技术和配件,降低整机的开发和制造成本。
[ 本帖最后由 Benson_linux 于 2007-11-20 13:36 编辑 ] 8位机8080(8085)是16位线性寻址。到16位机(8086/88/186/286)为向下兼容于8080/35代码,搞成段式寻址。先是8086/88,由两个寄存器组合提供地址字,段址和偏移都是16位。段址左移4位后与偏移相加,形成20位地址字输出到地址总线。到80286,地址线为24根,仍要向下兼容于8086,更麻烦。设两种模式。实模式兼容于8086,合成20位地址字,地址线的高4根无效。保护模式采取虚拟存储技术,虚存空间1GB,映射到16MB物理空间。偏移仍为16位,段基址24位,需经过转换。段寄也仍为16位,在实模式下,就表示段基址,但在保护模式下,表示选择字。按其在在描述表中找到段描述符,再由段描述符查到段地址,由此段地址(24位)和指令中的偏移地址(16位)相加,最后得到24位物理地址。
这些都是向下兼容惹的祸。 12楼 发表于 2007-11-22 15:52
----------------------------------------
"最后得到24位物理地址"
既然最后得到的物理地址为24位,那么可寻址空间就为2^24=16M,何来256M呢? 只有24根地址线,实存就是16MB。虚存1GB要通过虚拟存储机制映射到16MB。 我看这个问题还是继续吧,我在11楼发的东西也是一些猜测。
继续讨论。
回复 #14 beepbug 的帖子
讨论寻址空间的时候还包括虚存吗?回复 #15 mik 的帖子
如果你想要分的话那给你好了,我只是想把问题搞清楚而已,至于分不分的,我无所谓 原帖由 dyts 于 2007-11-28 19:02 发表 http://linux.chinaunix.net/bbs/images/common/back.gif如果你想要分的话那给你好了,我只是想把问题搞清楚而已,至于分不分的,我无所谓
这就是你想搞清楚问题的态度和作风么,恐怕难呀 原帖由 dyts 于 2007-11-28 19:00 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
讨论寻址空间的时候还包括虚存吗?
讨论寻址空间当然要讲虚存。你访问的全是虚拟空间,至于实际用到哪块物理空间,那是操作系统的事,我们管不着。