2011-08-18 103 views
0

這個介紹是否發生在NTLDR階段,因爲它必須引入,我的意思不是用C寫的內核?我認爲只有「已知之前」編程語言的計算機是在處理器的微碼上硬編碼的彙編語言。操作系統如何引入C語言來編寫內核

+2

您的計算機*始終*運行機器代碼,而不是程序集或C.所有(本機)編程語言都被編譯爲機器代碼。 – tenfour

+0

你忘記了交叉編譯。不僅僅用於嵌入式系統,還用於引導操作系統。 –

回答

3

第一個操作系統全部用匯編寫成。 C語言的創建是因爲它的第一個用例是UNIX的創建。編寫一個C編譯器來處理這些代碼,並生成系統可以理解的程序集(編譯器是用匯編語言編寫的)。效果從那裏雪球。我們現在有一個更強大的系統來編寫代碼,所以我們當然可以用更高層次的方法編寫更好的編譯器和更好的軟件,並讓編譯器爲我們完成工作。

至於的Windows而言,它被稱爲QDOS的操作系統,這是寫在C

的重寫

旁註:操作系統仍需要彙編代碼,有需要的許多信息與硬件無關件功能(例如,CR2讀取x86上的頁面錯誤)。引導加載程序和BIOS(較舊的)是在彙編中編寫的,因爲它們對於硬件非常特殊,並且需要設置諸如中斷和堆棧指針之類的東西。

+0

Windows不是QDOS的重寫。 Windows是由Dave Cutler領導的綠色領域發展的NT。沒有非NT Windows曾經重寫過QDOS。它們最初是在MS DOS之上編寫的,後來獨立於它。 –

+1

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

+0

@ paulsm4感謝您的支持 –

1

C是一種編譯語言,與解釋語言相反。 C程序以及C運行時庫都被編譯成機器代碼,因此它們不需要任何類型的運行時環境,例如要加載的解釋器或虛擬機來執行。

編譯的程序(包括內核)的切入點將調用它的運行時庫,並進行執行程序前所需的任何初始化,但是這是所有的機器代碼。

+0

幾乎所有的程序和所有操作系統(包括Windows內核)都依賴於運行時支持。例如,NT的「Win32」子系統(csrss.exe)由kernel32.dll,user32.dll,gdi32.dll組成。 – paulsm4

+0

我不是指運行時庫;這些也是編譯好的。我所說的是編譯的程序不需要啓動解釋器或虛擬機來執行。 ntoskrnl將使其運行時庫靜態鏈接。 –

+0

@ paulsm4:那些DLL也不是用C編寫的。我的意思是,他們所代表的邏輯原本是,但在物理上,對於硬盤上的那些特定文件,這是很久以前編制的。 –