【发布时间】:2023-02-15 05:42:23
【问题描述】:
与位置相关的代码被编写为加载到内存中的特定物理地址并从中运行。这种类型的代码带来的问题之一是它阻碍了处理器并发运行多个进程的能力,主要是当编写为从同一地址运行的不同进程试图同时执行时。
话虽如此,我从未遇到过指定要在其上执行的内存地址的代码,因此我发现很难想象这样的代码会是什么样子。我可以看到给定的代码可以指定特定变量要存储在内存中的地址,但是当涉及到要加载程序的[第一个]内存地址时,我看不到为什么这不是操作系统的工作而不是程序的责任。
【问题讨论】:
-
jmp 0x123(跳转到确切地址)是“位置相关代码”的一个例子......但你正在寻找什么类型的例子还不清楚。请注意,“给我一个……的例子”很少是关于 SO 的主题,因为这样的问题过于开放,而且这个问题可能过于宽泛。另请注意,您以某种方式期望需要/存在某种多任务操作系统来运行程序 - 有大量代码在裸机上运行,并且此类代码不需要重新定位。 -
我知道你提供的代码在某种意义上是“位置相关的”,因为它的执行成功取决于它将被加载的位置,但是我拥有的位置相关代码的主要特征是问题在于它定义了将要加载的内存地址,我发现很难想象它并且看不到背后的实用程序。
-
恐怕问题/评论中缺少大量上下文。如果您将这个问题作为某些学校课程的一部分 - 问老师/助教。否则可能会重新阅读您使用的术语的定义......虽然我认为这个问题不太可能在 SO 上取得成功,但至少链接到术语的精确定义(例如“位置相关代码”,你的意思是“代码”)并阐明你在什么情况下问这个问题(像 Linux/Windows 这样的通用操作系统,一些定制的操作系统,嵌入式编程,......)。
-
“有一个问题是它定义了它将被加载的内存地址” - 我很难理解为什么你认为这是一个问题 :) - 如果指令说“二进制文件只有在加载时才能工作” 0x100 on {specific CPU} with RAM available in range 0x2000-0x2100” 你会遇到什么类型的“问题”?
-
我需要查看相关指令的真实代码示例的问题类型,以便我可以更正确地吸收这些概念。我也不明白你为什么要编写一个指定加载位置的程序。这不是操作系统的责任吗?
标签: memory process operating-system ram