我的问题是操作系统是如何加载的 用户空间应用到RAM。我知道该怎样 Bootloader工作时,我们第一次打开计算机,Bios只读取512 kb数据,直到aa55 bootloader签名并将bootloader加载到ram。是否以这种方式处理常规用户空间程序?如果有,怎么样?因为bilo激活bootloader以及操作系统如何处理用户空间程序?更具体的说法是execv()如何将程序加载到RAM并启动用户空间的执行点? 提前致谢
答案 0 :(得分:1)
用户空间程序的处理方式与BIOS不同,内核将参与运行用户空间程序。
一般情况下: 当程序在shell中执行时,shell将调用系统调用以在新地址空间中创建新任务,读入可执行二进制文件并开始执行它。
要了解详细信息,您需要了解:
精灵格式。当然还有其他格式可以在Linux中使用,elf只是最常见的格式,也是一个很好的起点。理解elf将帮助您了解内核如何精确地将可执行二进制文件加载到内存中。
Linux进程管理;这将有助于您了解程序如何开始运行。
读取内核中的相关代码。 fs / exec.c会有很大的帮助。
答案 1 :(得分:1)
此过程因操作系统而异。有些系统有一个后台命令解释器,它存在于进程的生命周期和进程本身。运行程序时,命令解释程序保持在后台(受用户模式访问保护)。当程序完成时,命令解释程序到达前台并可以在同一进程中运行另一个程序。
在Eunuchs世界中,命令解释器只是一个用户模式程序。每当它运行程序时,它就会启动另一个过程。
这两种类型的系统都使用加载程序来配置用于运行程序的进程地址空间。可执行文件是一组定义如何布局地址空间的指令,
这与引导加载程序有很大不同。引导加载程序盲目地将存储数据块加载到内存中。程序加载器包含用于布置进程地址空间的复杂指令,包括处理共享库和执行地址修复。