正如我們所知,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. 內核不啓動?
- 3. 如何在程序內部的OpenCL中啓動多個內核?
- 4. CUDA內核不啓動
- 5. 啓動多個內核cuda
- 6. CUDA DE內核不啓動
- 7. ARM S3C6410內核啓動
- 8. CUDA內核不啓動
- 9. ipython:在應用程序中啓動內核和kernelmanager
- 10. 系統啓動後直接從linux內核運行程序
- 11. 如何從Windows內核模式啓動用戶模式程序
- 12. Linux內核啓動在Uncompressing Linux中停止...好吧,啓動內核
- 13. Linux內核:獲取函數地址爲內核驅動程序
- 14. 無法在Docker Toolbox內啓動內核
- 15. 瞭解Linux內核驅動程序
- 16. HTTP.SYS內核模式驅動程序
- 17. 什麼是Windows內核驅動程序?
- 18. 內核驅動程序簽名
- 19. Windows 7內核驅動程序簽名
- 20. 限制在linux內核驅動程序
- 21. linux內核字符驅動程序
- 22. Linux I2C內核驅動程序
- 23. 內核驅動程序I2C開發
- 24. 內核啓動時(特別是在基於ARM的設備上)內核探測驅動程序
- 25. 內核驅動程序或用戶空間驅動程序?
- 26. 內核驅動程序從進程ID讀取進程內存
- 27. 程序如何通信 - 微內核單片內核exo內核
- 28. Linux內核如何知道在啓動時加載哪些驅動程序?
- 29. 內核啓動和內核執行之間的時間
- 30. 啓動時內核模塊在Linux內核中的狀態
您正在尋找的術語是'bootstrapping'... – ChristopheD 2012-08-10 11:53:41