1

我不明白为什么我们在 16 位实模式下只能访问 1MB 的内存。1MB 限制是否表示内存访问?我知道当系统启动时,由于向后兼容,我们被限制为 16 位寄存器,但为什么要限制内存以及如何限制?

4

3 回答 3

2

地址是通过将段左移 4 并添加偏移量来计算的。20 位地址提供 1MB 的地址空间。有一个或多个附加信号(谷歌 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 外围设备都必须共享该空间,因此您的视频特别是卡必须通过其他方式为您生成像素(在这个地方用这种阴影为我画一个像这样的多边形)或交换对内存的访问,以便主处理器访问像素。

当时的外围设备也以这种方式工作(视频卡等),但您没有 pci。有一个用于在外围设备上查找 bios rom 的引导方案,然后您使用 bios 调用与该外围设备拥有的外围设备空间中的存储库进行通信或切换。

英特尔世界不断被摩托罗拉世界以其平坦的地址空间击败,我们仍然生活在这种平坦空间的幻觉中,并且假设段偏移是不好的,但现在到处都是现实我们使用段偏移类型方案使用您的 mmu 或使用 pci 窗口进入外围设备。在大多数计算机上的痛点是你扔掉你购买的 1GB 或 2GB 的内存,这样 pcie 就有一个可以坐的地方,最近几年 wintel 机器上的 bioses 允许高 2GB 的窗口,这样就不会扔掉一个国标。但现在你知道为什么当你买 4gb 时你只得到 3 个或买 16 个你只得到 15 个。

简答段左移 4 加上偏移量是 20 位,即 1MB 的可寻址空间。这直接与处理器上的 20 个地址引脚相关联。数据总线是 8 (8088) 或 16 (8086) 位,但内部是 16 位,对于 8088,硬件会执行两个周期来收集 16 位字的每一半。还有一些控制信号电源和时钟,这几乎是该部分的整个引脚排列。内存基本上是零等待状态,因此您必须与内存和处理器相匹配,或者至少购买与处理器相同或更快的内存。

于 2015-09-02T19:53:16.753 回答
2

根据Yariv Kaplan 的实模式内存管理

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

于 2015-09-02T18:09:51.323 回答
0

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

于 2015-09-02T18:26:37.110 回答