我的問題是操作系統如何加載 用戶空間應用程序到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