2016-11-22 86 views
0

我的问题是操作系统如何加载 用户空间应用程序到RAM。我知道 Bootloader是如何工作的,当我们第一次打开Bios计算机时,只需读取512 kb的数据,直到aa55引导加载程序签名并将引导加载程序加载到ram。常规用户空间程序是以这种方式处理的吗?如果是的话如何?因为bootloader是由bios激活的,以及用户空间程序如何由操作系统处理?更具体地说,execv()如何将程序加载到RAM并启动用户空间的执行点? 在此先感谢操作系统加载程序

+0

[操作系统中的加载程序如何工作?](http://stackoverflow.com/questions/32688459/how-does-a-loader-in-operating-system-work) – xmojmr

+0

BIOS doesn加载512千字节,但只有512字节。 – glauxosdever

回答

1

用户空间程序不像bios处理,内核将参与运行用户空间程序。

一般情况下: 在shell中执行程序时,shell将调用系统调用以在新地址空间中创建新任务,读入可执行二进制文件并开始执行它。

要了解详情,您需要了解:

  1. ELF格式。当然,在Linux中也可以使用其他格式,elf只是最常用的格式,也是一个很好的起点。了解elf将帮助您了解内核如何将可执行二进制文件精确加载到内存中。

  2. Linux进程管理;这将帮助您了解程序如何开始运行。

  3. 读取内核中的相关代码。 fs/exec.c将会很有帮助。

1

该过程因操作系统而异。一些系统有一个后台命令解释器,它存在于流程的整个生命周期以及流程本身。程序运行时,命令解释程序停留在后台(不受用户模式访问)。当程序完成时,命令解释程序进入前台并可以在同一进程中运行另一个程序。

在Eunuchs世界里,命令解释器只是一个用户模式程序。每当它运行一个程序时,它就会启动另一个进程。

这两种类型的系统都使用加载程序来配置运行程序的进程地址空间。可执行文件是一组定义如何布置地址空间的指令,这与引导加载程序有很大的不同。引导加载程序将一块存储的数据盲目地加载到内存中。程序加载器包含用于布置进程地址空间的复杂指令,其中包括处理共享库和进行地址修正。

+0

你可以给任何示例代码片?所以我可以看到程序如何插入内存?谢谢 –