這個介紹是否發生在NTLDR階段,因爲它必須引入,我的意思不是用C寫的內核?我認爲只有「已知之前」編程語言的計算機是在處理器的微碼上硬編碼的彙編語言。操作系統如何引入C語言來編寫內核
回答
第一個操作系統全部用匯編寫成。 C語言的創建是因爲它的第一個用例是UNIX的創建。編寫一個C編譯器來處理這些代碼,並生成系統可以理解的程序集(編譯器是用匯編語言編寫的)。效果從那裏雪球。我們現在有一個更強大的系統來編寫代碼,所以我們當然可以用更高層次的方法編寫更好的編譯器和更好的軟件,並讓編譯器爲我們完成工作。
至於的Windows而言,它被稱爲QDOS的操作系統,這是寫在C
的重寫旁註:操作系統仍需要彙編代碼,有需要的許多信息與硬件無關件功能(例如,CR2讀取x86上的頁面錯誤)。引導加載程序和BIOS(較舊的)是在彙編中編寫的,因爲它們對於硬件非常特殊,並且需要設置諸如中斷和堆棧指針之類的東西。
Windows不是QDOS的重寫。 Windows是由Dave Cutler領導的綠色領域發展的NT。沒有非NT Windows曾經重寫過QDOS。它們最初是在MS DOS之上編寫的,後來獨立於它。 –
Microsoft MS-DOS是Tim Paterson的QDOS的重寫。 QDOS是用C語言編寫的。所有的微軟操作系統都是從MS-DOS演變而來的。 Windows 3.0和OS/2是彼此完全獨立的分支,並且來自Windows NT。 Windows 98是使用16位(DOS)代碼的最後一個操作系統; Windows XP是第一個擁有所有32位(Windows NT)代碼的消費者操作系統。 – paulsm4
@ paulsm4感謝您的支持 –
C是一種編譯語言,與解釋語言相反。 C程序以及C運行時庫都被編譯成機器代碼,因此它們不需要任何類型的運行時環境,例如要加載的解釋器或虛擬機來執行。
編譯的程序(包括內核)的切入點將調用它的運行時庫,並進行執行程序前所需的任何初始化,但是這是所有的機器代碼。
幾乎所有的程序和所有操作系統(包括Windows內核)都依賴於運行時支持。例如,NT的「Win32」子系統(csrss.exe)由kernel32.dll,user32.dll,gdi32.dll組成。 – paulsm4
我不是指運行時庫;這些也是編譯好的。我所說的是編譯的程序不需要啓動解釋器或虛擬機來執行。 ntoskrnl將使其運行時庫靜態鏈接。 –
@ paulsm4:那些DLL也不是用C編寫的。我的意思是,他們所代表的邏輯原本是,但在物理上,對於硬盤上的那些特定文件,這是很久以前編制的。 –
- 1. 什麼編程語言是Android操作系統和它的內核編寫?
- 2. 移動操作系統及其編寫的編程語言
- 3. 操作系統的語言?
- 4. 以解釋語言編寫操作系統
- 5. 什麼是開始寫入的最佳語言操作系統
- 6. 使用C++編寫操作系統
- 7. 如何編寫操作系統
- 8. 不同體系結構的操作系統彙編語言
- 9. 檢測操作系統語言
- 10. 崇高的文字2編寫C語言編程系統
- 11. Linux內核操作系統寄存器
- 12. 已安裝語言包安裝的操作系統語言?
- 13. 核心圖像內核語言的OpenGL座標系統
- 14. 多核和操作系統
- 15. 更改「區域和語言」設置操作系統編程
- 16. 在不同操作系統上使用編程語言
- 17. 什麼Linux操作系統來與Linux內核2.6.32
- 18. 使用C語言監視Windows操作系統的進程
- 19. 如何獲得操作系統的語言名稱
- 20. 在Linux中如何表示操作系統語言
- 21. 更改系統語言C#
- 22. 爲arm架構編寫操作系統
- 23. 用UEFI編寫操作系統
- 24. 編寫定製的Android操作系統
- 25. 關於編寫操作系統
- 26. 如何用C語言重寫一個函數(系統調用)?
- 27. 用於新操作系統的C語言編譯器(理論問題)?
- 28. 我可以使用c編程語言創建我自己的操作系統
- 29. linux如何成爲一個內核和一個操作系統
- 30. 如何在我的操作系統內核中啓用IRQ8?
您的計算機*始終*運行機器代碼,而不是程序集或C.所有(本機)編程語言都被編譯爲機器代碼。 – tenfour
你忘記了交叉編譯。不僅僅用於嵌入式系統,還用於引導操作系統。 –