我的问题是操作系统如何加载 用户空间应用程序到RAM。我知道 Bootloader是如何工作的,当我们第一次打开Bios计算机时,只需读取512 kb的数据,直到aa55引导加载程序签名并将引导加载程序加载到ram。常规用户空间程序是以这种方式处理的吗?如果是的话如何?因为bootloader是由bios激活的,以及用户空间程序如何由操作系统处理?更具体地说,execv()如何将程序加载到RAM并启动用户空间的执行点? 在此先感谢操作系统加载程序
Q
操作系统加载程序
0
A
回答
1
用户空间程序不像bios处理,内核将参与运行用户空间程序。
一般情况下: 在shell中执行程序时,shell将调用系统调用以在新地址空间中创建新任务,读入可执行二进制文件并开始执行它。
要了解详情,您需要了解:
ELF格式。当然,在Linux中也可以使用其他格式,elf只是最常用的格式,也是一个很好的起点。了解elf将帮助您了解内核如何将可执行二进制文件精确加载到内存中。
Linux进程管理;这将帮助您了解程序如何开始运行。
读取内核中的相关代码。 fs/exec.c将会很有帮助。
1
该过程因操作系统而异。一些系统有一个后台命令解释器,它存在于流程的整个生命周期以及流程本身。程序运行时,命令解释程序停留在后台(不受用户模式访问)。当程序完成时,命令解释程序进入前台并可以在同一进程中运行另一个程序。
在Eunuchs世界里,命令解释器只是一个用户模式程序。每当它运行一个程序时,它就会启动另一个进程。
这两种类型的系统都使用加载程序来配置运行程序的进程地址空间。可执行文件是一组定义如何布置地址空间的指令,这与引导加载程序有很大的不同。引导加载程序将一块存储的数据盲目地加载到内存中。程序加载器包含用于布置进程地址空间的复杂指令,其中包括处理共享库和进行地址修正。
+0
你可以给任何示例代码片?所以我可以看到程序如何插入内存?谢谢 –
相关问题
- 1. 操作系统加载
- 2. 操作系统中的加载程序如何工作?
- 3. 单程序操作系统
- 4. 了解操作系统启动加载 - 程序集
- 5. 引导加载程序和操作系统
- 6. 当操作系统将程序从文件系统加载到内存中时,操作系统如何知道程序有多大?
- 7. WPF应用程序和操作系统
- 8. 多操作系统程序兼容性
- 9. Android操作系统和应用程序
- 10. 实时操作系统调度程序
- 11. 通过操作系统执行程序
- 12. 操作系统 - 过程
- 13. 在远程Linux机器上重新加载操作系统
- 14. 系统/操作系统缓存与应用程序缓存
- 15. 操作系统
- 16. 32位操作系统VC++应用程序迁移到64位操作系统VC++应用程序
- 17. 从x64位操作系统上的“任何CPU”构建应用程序反映x86程序集操作系统
- 18. 在64位操作系统上编写程序时,程序是否会运行在32位操作系统上?
- 19. JNLP不下载操作系统资源
- 20. 操作系统 - TLB
- 21. 操作系统中
- 22. Linux操作系统
- 23. FASM操作系统
- 24. forkIO线程和操作系统线程
- 25. 进程和线程在操作系统
- 26. C程序对CPU和操作系统的依赖关系
- 27. i7处理器与Windows8操作系统的多线程问题操作系统
- 28. Android操作系统更新系统
- 29. jQuery - 检测操作系统和操作系统版本
- 30. 预定义为iPhone操作系统和Mac操作系统
[操作系统中的加载程序如何工作?](http://stackoverflow.com/questions/32688459/how-does-a-loader-in-operating-system-work) – xmojmr
BIOS doesn加载512千字节,但只有512字节。 – glauxosdever