繁体   English   中英

x86 实模式段重叠如何帮助节省内存?

[英]How does x86 real-mode segments overlap help memory saving?

我正在教我的 12 岁 8086 汇编语言,昨天我们讨论了内存、寻址和分段。 我向他展示了如何将段可视化为从 16 字节边界开始的重叠 64Kb 块序列,偏移量是段内的 8080 样式指针。 然后他问了一个我无法回答的问题:为什么(为什么,目的是什么)它们重叠

试图研究这个问题时,我发现了许多 20 位数学的副本,并且有些模糊地提到了该方案可能允许的一些内存节省 有人可以详细说明节省内存的部分吗? 或者任何其他方式来利用重叠的实际优势?

重叠越少,您对段在物理内存中的起始位置的选择就越少。 这会在无用的段之间产生间隙,从而浪费内存。 设计选择永远不会产生大于 15 字节的间隙。 这可能有点过头了,但 8086 是在一个 1 兆字节对每个人都足够的时代设计的。 购买 64 KB 会大大减少您的预算。 足够珍贵,不想浪费在差距上。

内存节省完全是 IMO 看待它的错误方式。 该处理器在 16 位地址空间变得非常紧张的时候问世。 其他 16 位地址空间处理器在事后添加了组切换方法。 20 位地址空间是一个相当大的批准(24 位或 32 位在当时只是疯狂的谈话)。 他们没有使用外部银行切换(编程很痛苦),而是使用寄存器。 好吧,猜猜看,处理器内部是 16 位的,所以不妨使用 16 位寄存器。 现在,从一对 16 位寄存器中获取 20 位是一个有趣的问题。 使用段作为基本的段落对齐,以最灵活的方式为您提供完整的范围(加上一点点溢出,但这是一个完全不同的问题)(还记得我提到的银行切换的痛苦吗?主要是因为无法做到这一点以细粒度的方式)。

假设您在狭长的小巷中拥有代客泊车服务,因此车辆均采用平行停车方式。 您的一些客户驾驶汽车并且只使用 1 个空间。 其他人驾驶加长豪华轿车并需要 2 个车位。 停放车辆的一种方法是为每辆车分配 2 个停车位,而不管其大小。 您的索赔单会显示“车辆停在第 0 空间(最大车辆尺寸为 2 个车位)”或“从第 2 空间开始”或“从第 4 空间开始”等。

这可行,但会浪费空间,因为您为只需要 1 个空间的汽车预留了 2 个空间。因此,您将车辆打包在一起,汽车仅占用一个空间,豪华轿车占用两个空间。 您的员工知道汽车只占用一个空间,因此如果票上写着“从空间 1 开始(最大车辆尺寸为 2 个空间)”,他们知道“汽车在空间 1 中,空间 2 属于其他人”。 汽车的空间 2 实际上与停在空间 2 和 3 中的豪华轿车重叠,但使用它是个坏主意,否则您会损坏豪华轿车。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM