为什么我们在16位实模式下只能访问1MB?

时间:2015-09-02 18:03:54

标签: assembly operating-system bios real-mode

我无法理解为什么我们只能在16位实模式下访问1MB内存。 1MB限制是否表示内存访问?我知道,当一个系统启动时,由于向后兼容性,我们仅限于16位寄存器,但为什么限制内存又如何?

3 个答案:

答案 0 :(得分:2)

根据Real-Mode Memory Management by Yariv Kaplan

在实模式下运行的处理器只能利用其地址总线的最低20位,因此仅限于8086的1MB内存空间。

答案 1 :(得分:1)

通过将段向左移动4并添加偏移来计算地址。 20位地址给出1MB的地址空间。有一个额外的信号或信号(google 8088或8086的引脚分配),以区分存储周期和I / O周期基本上加倍地址空间(21位,如果你想这样想)但他们是绑定到特定指令(非I / O是mem,I / O是I / O),I / O空间没有使用整个20位。

在外设中使用I / O空间进行寄存器访问时,内存扩展器位于1MB地址空间并且后面超过1MB但是你一次只能看到1MB,使用你指定的控制寄存器要查看1MB,并且这些都绑定到库或操作系统中。这正是今天计算机中视频卡和其他外围设备的工作原理,你的整个pci(e)空间非常小1GB或2GB,具体取决于它的年龄,所有的pci外设都必须共享这个空间,所以你的视频特别是卡片必须通过其他方式为你生成像素(在这个阴影处用这个阴影画出这样的多边形)或者换掉对主处理器的ram访问来访问像素。

然后外围设备以这种方式工作(视频卡等),但你没有pci。有一个用于在外围设备上找到bios roms的启动方案,从那里你使用bios调用来与外围设备所拥有的外围设备空间中的存储区进行通信或切换。

英特尔世界不断被摩托罗拉世界所淹没,他们的扁平地址空间仍然存在于平坦空间的错觉中,并且假设分段偏移是坏的,但现实到处都是现在我们使用一段使用mmu或pci窗口进入外设的偏移类型方案。在大多数计算机的痛点上,你丢弃1GB或2GB的你购买的内存,所以pcie有一个地方可以坐,最近几年wintel机器上的biose允许高2GB的窗口,这样就不会丢掉一个GB。但现在你知道为什么当你买4gb时你只得到3或买了16只你只有15只。

短移位段左移4加偏移是20位,这是1MB的可寻址空间。这直接连接到处理器上的20个地址引脚。数据总线是8(8088)或16(8086)位,但在内部它是16位,对于8088,硬件将执行两个周期来收集16位字的每一半。一些控制信号功率和时钟,这几乎是该部分的整个引脚。 ram基本上是零等待状态,所以你必须加速匹配你的内存和处理器,或至少购买比处理器更快或更快的ram。

答案 2 :(得分:0)

16位DOS使用20位寻址方案,只允许访问最多1 MB的内存(RAM)。然而,有一些叫做“DOS Extenders”的东西,它允许16位DOS访问更多内存。