OS中不同类型的地址绑定?

时间:2017-11-03 18:59:51

标签: binding operating-system memory-address

操作系统知道如何在物理存储中找到特定代码片段的方式有多种不同。如何将逻辑内存转换为物理位置?

2 个答案:

答案 0 :(得分:3)

绑定对于将逻辑内存链接到物理内存是必要的。要知道程序的存储位置是必要的,以便访问它。绑定可以有三种不同的类型。

  1. 编译时间绑定:编译时已知存储程序的地址。
  2. 加载时间绑定:地址在编译时是未知的,但在加载程序时已知,即在运行之前。
  3. 运行时绑定:运行可执行程序时已知地址。

答案 1 :(得分:1)

找到了很好的解释here

总结如下:

使用以下类型的地址绑定(取决于绑定/转换何时发生)将逻辑内存/地址转换为物理位置/地址:

  1. 编译时绑定
  2. 加载时间绑定
  3. 执行时间绑定

如果在编译时就知道程序在物理内存中的最终位置,那么绑定可以在编译时本身发生,唯一需要注意的是,只要其物理内存位置发生变化,就需要重新编译程序。

如果在编译时“未知”程序在物理内存中的最终位置,那么编译器会根据相对于程序起始位置的偏移量生成相对地址或可重定位地址(例如32字节)从起始位置开始)。然后,当将程序加载到主内存中的任何进程中时, loader 会将此可重定位地址绑定到物理内存中的绝对地址。现在,如果起始位置发生变化,则无需“重新编译”程序,而只需“重新加载”。

执行时间绑定仅在进程可以在执行时从一个物理内存段移动到另一个物理内存段的情况下发生。