如何在没有虚拟内存的系统上处理ELF入口点地址?

时间:2016-09-25 12:29:43

标签: memory embedded elf mmu

MMU并支持virtual memory的系统上,可以 多个ELFs同时加载相同的入口点 他们的入口点只是虚拟地址并被翻译成 运行时的物理内存地址。例如,在我的amd64上 计算机.text部分始终映射到地址0x00400000_start始终接近该地址。但它如何在系统上运行 没有 MMU?他们中的许多人可能不支持多任务处理 所有。是开发人员有责任选择ELF入口点 为了使它们不重叠?

1 个答案:

答案 0 :(得分:1)

短篇小说,无论如何都无法处理。

现在有一个很长的故事。

ELF不能按原样执行,它是一种带有可执行数据的容器。在具有OS和MMU的系统中,OS创建一个进程以及该进程的相应MMU页表。之后,读取ELF,并根据ELF文件中的数据将可执行代码和数据段(BSS)复制到此新分配的过程存储器中。完成后,将程序计数器设置为入口点地址。您的程序运行。万岁。

要强调的重要一点是,每个进程都有自己的虚拟内存,该虚拟内存映射到唯一的物理内存中。因此,虚拟地址在不同进程中可能重叠或相同,而物理地址在任何给定时刻总是不同的。

现在有一个没有MMU的系统。因此,没有虚拟内存,每个进程都应放置在唯一的物理内存区域中,并链接到该精确的内存区域。

在现实生活中,如果有一些没有MMU ELF文件的小型系统根本就没有使用过。选项1,将所有应用链接到一个大二进制文件中。选项2,使用唯一地址单独链接的应用程序,使用“ objcopy”实用程序提取可执行信息,并将二进制文件复制到系统中以供执行。 “操作系统”应具有启动这些“进程”的入口点列表。