2016-11-22 83 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

你可以給任何示例代碼片?所以我可以看到程序如何插入內存?謝謝 –