正如我們所知,OS需要一個c文件來執行。但是,當我們啓動一個內核時,首先它被解壓縮,但是用於解壓一個c函數。直到現在系統中沒有操作系統。那麼這個c代碼是如何執行的?內核啓動程序
Q
內核啓動程序
-1
A
回答
0
關於Bootmgr和Vmlinux(以及initrd)的維基百科文章應該略述該過程的工作原理。
基本上,當BIOS從磁盤的MBR加載引導加載程序(GRUB)時,GRUB會將一個小的ramdisk(initrd)加載到已經是非常輕量級操作系統的內存中,該系統能夠處理最基本的進程它需要:啓動真正的操作系統。
+0
但是在啓動過程中如何在沒有任何操作系統的情況下執行C文件? – user1590145 2012-08-10 12:32:45
0
您不需要操作系統來運行C代碼。
讓我澄清。
當一個程序由GCC編寫時,它生成一個對象代碼,它充當彙編器的輸入,它將該對象代碼轉換爲可由機器直接執行的二進制代碼。
但是,如果GCC直接生成二進制代碼,他們不需要任何彙編程序或任何操作系統。因此二進制可以通過指令直接執行硬件指令。
1
引導加載程序負責解壓縮並加載內核,然後將控制轉移到未壓縮和加載的內核。內核不像標準C可執行文件那樣執行。因此,不需要OS執行C代碼。作爲一個例子,有很多嵌入式系統沒有OS,但是C代碼被執行。此外,引導加載程序也用C語言編寫。執行的唯一要求是將代碼加載到內存中,並將控制權轉交給它。
相關問題
- 1. 從我的啓動引導程序啓動Linux內核
- 2. 如何在程序內部的OpenCL中啓動多個內核?
- 3. CUDA內核不啓動
- 4. ARM S3C6410內核啓動
- 5. 系統啓動後直接從linux內核運行程序
- 6. ipython:在應用程序中啓動內核和kernelmanager
- 7. 如何從Windows內核模式啓動用戶模式程序
- 8. Linux內核啓動在Uncompressing Linux中停止...好吧,啓動內核
- 9. 無法在Docker Toolbox內啓動內核
- 10. HTTP.SYS內核模式驅動程序
- 11. 內核驅動程序簽名
- 12. Windows 7內核驅動程序簽名
- 13. 內核驅動程序I2C開發
- 14. Linux I2C內核驅動程序
- 15. 什麼是Windows內核驅動程序?
- 16. 程序如何通信 - 微內核單片內核exo內核
- 17. Linux內核如何知道在啓動時加載哪些驅動程序?
- 18. 啓動時內核模塊在Linux內核中的狀態
- 19. 內核啓動失敗內核參數的原因
- 20. Angstrom內核 - 卡在「正在啓動內核...」
- 21. Ipython內核重啓
- 22. Linux內核中的nr_cpus啓動參數
- 23. 用超時啓動CUDA內核
- 24. 如何編譯和啓動Android內核
- 25. 以內核模式啓動服務(Vista)
- 26. 定時Linux內核啓動時優化
- 27. 在啓動時調試Linux內核
- 28. 內核啓動錯誤 - symfony netbeans
- 29. 瞭解此CUDA內核啓動參數
- 30. 如何在Jupyter中啓動IPython內核?
您正在尋找的術語是'bootstrapping'... – ChristopheD 2012-08-10 11:53:41