gpt4 book ai didi

assembly - 操作系统中的加载程序如何工作?

转载 作者:行者123 更新时间:2023-12-03 15:46:30 25 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

6年前关闭。




Improve this question




我知道加载程序是将程序加载到主存储器的程序。那么,这实际上是如何工作的呢?究竟会发生什么?实际上,当加载程序加载程序时,会在 PCB 中创建一个条目,并将程序放入作业池中。程序的可执行代码如何复制到主存中?简单来说,如何使用 C 或 C++ 将文件的代码加载到主存储器?

最佳答案

这在很大程度上取决于操作系统。我将在这里写的是特定于 Linux 的,但类似的事情也会发生在其他操作系统上。

一、fork()调用被启动,有效地创建新进程(和适当的 PCB 条目)。下一步是调用exec系统调用将完成艰苦的工作。我假设我们在这里讨论的是 ELF 可执行文件。

在这种情况下,在识别出这是 ELF 可执行文件后(通过检查魔数(Magic Number))exec将调用 load_elf_binary (http://lxr.free-electrons.com/source/fs/binfmt_elf.c#L664)

论据 struct linux_binprm *bprm传递给此函数的包含有关二进制文件的所有元数据(已由 exec 填充),例如可执行文件名称、环境信息等(http://lxr.free-electrons.com/source/include/linux/binfmts.h#L14)

ELF 程序加载是一项复杂的任务,需要了解 ELF 格式。

可以找到关于此的非常好的资源 here

简而言之,这些是内核正在执行的有趣步骤:

  • 检查 elf 头文件以查找是否有为此二进制文件指定的程序解释器(ld.so 用于动态链接所需的库、执行重定位、调用链接库的初始化函数)。
  • 设置新的可执行环境(设置新的凭据,例如标记不归路点)
  • 设置内存布局(如随机化堆栈)并将页面从可执行文件映射到内存
  • 调用start_thread并启动程序或解释器(ld.so)

  • 用解释器理解 Sprite 的好文档可以找到 here

    资源:
  • https://www.cs.stevens.edu/~jschauma/631/elf.html
  • http://www.skyfree.org/linux/references/ELF_Format.pdf
  • https://stackoverflow.com/a/31394861/133707
  • http://s.eresi-project.org/inc/articles/elf-rtld.txt
  • 关于assembly - 操作系统中的加载程序如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32688459/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com