AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 445528
Accepted
Goktug
Goktug
Asked: 2018-05-24 01:37:03 +0800 CST2018-05-24 01:37:03 +0800 CST 2018-05-24 01:37:03 +0800 CST

什么是地址绑定?

  • 772

我找到了一些关于什么是“地址绑定”的解释。他们说“地址绑定是将虚拟或逻辑地址映射到物理地址的操作”。

这个定义正确吗?

我无法确定它是否正确,因为大学演讲说将虚拟地址转换为物理地址是在执行时执行的。但是,地址绑定表示绑定操作可以在编译时、加载时或执行时实现。

这说明存在矛盾。

virtual-memory memory-management
  • 2 2 个回答
  • 1226 Views

2 个回答

  • Voted
  1. Best Answer
    Stephen Kitt
    2018-05-24T01:53:29+08:002018-05-24T01:53:29+08:00

    Quora 上的解释在我看来相当混乱,并且混淆了许多概念。

    术语“地址绑定”,在内存地址(例如与网络地址相反)的上下文中,来自Leon Presser 和 John R. White 1972 年关于链接器和加载器的论文(另请参见ACM 条目),其中定义了如下:

    将逻辑地址转换或映射为物理地址称为地址绑定。

    快速阅读可能会让人觉得这是从内存管理的角度讨论逻辑和物理地址,但事实并非如此。在论文中,物理地址是“信息”在内存中的地址,而逻辑地址是用于引用该信息的符号。因此,地址绑定现在通常称为符号(或指针)重定位,正如您所说,这可能发生在编译时(例如生成静态二进制文件时),加载时(当动态链接器解析符号时)共享库),或在执行时(当正在运行的程序手动解析符号时,例如使用dlopen)。

    • 5
  2. ilkkachu
    2018-05-24T07:19:51+08:002018-05-24T07:19:51+08:00

    那篇文章很混乱。它文章的第一部分似乎是准确的。虚拟地址由 CPU 内核使用,它们由 MMU 映射到物理地址,然后在进入 RAM 时使用。不过,我从未听说过这被称为“地址绑定”。“映射”会更常见,但这只是一个术语问题。

    然后在第二段中间有这个说法,指的是上述过程:

    这种类型的绑定要求编译器从源代码生成可重定位或基于偏移的地址。

    那是胡说八道。

    在程序代码不知道它所在的虚拟地址但需要以某种方式考虑到它可以放置在虚拟内存中的任何位置的情况下,需要可重定位或与位置无关的代码。这与物理地址无关,因为系统上运行的程序代码不知道这些。它看到的所有地址都是虚拟地址。

    共享库和地址空间布局随机化是需要位置无关代码的两种常见情况。它确实需要编译器的支持,因为必须构建代码以使其不能包含任何绝对内存地址,而是使所有访问都相对于它自己的位置或相对于存储在寄存器中的某个基位置。

    所有这些都发生在进程的虚拟地址空间视图中。它需要编译器支持,因为代码本身需要知道它。

    MMU 的虚拟地址转换不需要进程的配合。相反,操作系统的工作是根据需要修复地址映射,例如,如果进程的一部分被调出以进行交换,并且需要访问。

    还提到了分段,它的工作原理与文章解释的非常相似,除了至少在 x86 上,分段产生虚拟地址,因此虚拟到物理内存映射发生在它之后。

    (以上所有内容均基于我对 x86 系统的了解。其他系统可能会有所不同。)

    • 0

相关问题

  • 关于 Windows 主机操作系统上的 RAM 和 SWAP 的问题

  • 确保虚拟地址位于页面的开头

  • 卸载在请求分页的上下文中如何工作

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve