【问题标题】:Questions on Program execution flow关于程序执行流程的问题
【发布时间】:2012-10-20 06:51:36
【问题描述】:

我正在研究 galvin 第六版的操作系统概念,我对程序的执行流程有一些疑问。一张图将用户程序的处理解释为:

当我们到达链接编辑器点时,我们得到一个可执行的二进制文件。正如书中所说,“程序必须被放入内存并放入进程中才能执行”现在我的一些愚蠢的问题是:

  1. 在程序加载到内存之前,联动编辑器生成的二进制可执行文件存储在硬盘中。二进制可执行文件存储在硬盘中的地址是CPU生成的逻辑地址?

  2. 如果前面的答案是肯定的,为什么CPU必须生成逻辑地址?我的意思是可执行文件存储在与地址相关的硬盘中的某个位置,为什么CPU必须单独执行这些东西? CPU的主要目的毕竟是处理!

  3. 为什么可执行文件需要在物理内存即ram中,不能在硬盘中执行?是不是速度问题?

我知道我问这些问题很愚蠢,但相信我,我找不到答案! :|

【问题讨论】:

  • 这是一个很好的问题,但 SO 并不是真正适合它的论坛。请参阅FAQ。

标签: operating-system memory-address


【解决方案1】:

1) 二进制文件在硬盘中存储的逻辑地址由file system 决定,Operating System 组件旨在管理磁盘中的文件。

2) & 3) 硬盘 a) 不够快 b) 不支持字寻址。硬盘在扇区块中寻址。通常扇区大小为 512 字节。 CPU 需要能够对程序中的每个机器字进行寻址才能执行它。因此,程序存储在硬盘中,即使断电也会保留其内容(与断电时会丢失内容的 RAM 形成对比)。然后程序被加载到 RAM 中执行。在程序完成并可能将其执行结果存储在硬盘中之后,释放内存以运行其他程序。示例中的编译器和链接编辑器也是程序。它们保存在硬盘中。编译器从硬盘中的文件获取其输入(程序的源文本)。然后它存储目标文件。链接编辑器或简称链接器的作用相同:它读取目标文件和必要的库文件,然后生成一个包含程序二进制表示的文件。

【讨论】:

  • 非常感谢您的信息。我仍然不确定我的第一个问题的答案,我在书中读到的是“CPU 生成逻辑地址”。这是什么意思?为什么在第一种情况下我需要一个逻辑地址? :|
  • 你的意思是硬盘地址是逻辑地址,内存地址是物理地址?
  • 不要混用。硬盘中的地址就是硬盘中的地址。逻辑/物理寻址完全是另一个与虚拟内存管理相关的故事。没有 MMU(内存管理单元)的系统(粗略地说 CPU)的物理 RAM 地址等于逻辑地址。不过,此声明中有一些特定的排除项,例如 8086 CPU。
  • 带有 MMU 的系统呢?其中的逻辑地址是什么?
  • 物理内存地址是通过地址总线从 CPU 传递到内存芯片的地址。逻辑地址是程序用来访问其代码和数据的地址。 MMU 将逻辑地址转换为物理地址。需要这种间接级别以允许多个进程在彼此隔离的环境中同时运行,并减少将程序加载到 RAM 中的时间。没有 MMU 的系统必须在加载时重新定位程序映像,因为在多进程情况下每次都提供相同的地址是不可能的。
猜你喜欢
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 2012-03-19
  • 2023-03-31
  • 1970-01-01
  • 2018-12-09
相关资源
最近更新 更多