怎麼理解作業系統也是程式語言寫的。

時間 2021-07-01 05:44:10

1樓:落昔

在電腦科學領域,先有雞還是先有蛋的問題,是有一些有趣的理論的。最有名的例子就是,最被廣泛使用的的C語言的編譯器,GCC,本身就是由C來編寫的。

bootstrap的本意是鞋子後跟上面幫你提腳後跟的帶子。(圖源wikipedia)

這是怎麼做到的呢?我怎麼在沒有C語言編譯器的情況下構建C語言編寫的GCC呢?

GCC 在構建時,總共會被構建 3 個「輪迴」,我們稱之為迭代。每次迭代後,我會構建出比上一次更完整的GCC。而在第一次迭代前,GCC會使用一些基本的語言語義分析工具。

這些工具很輕量,並且是已編譯好的二進位制程式,這些工具最初可以是彙編來寫的,而當gcc被首次構建成功後,後面就可以使用舊版本的gcc來取代這些用彙編寫出來的語義分析工具了,所以最初彙編的工具就可以完全丟掉了,今天我們在gcc的原始碼裡也早見不到他們的痕跡了。

使用初始工具結合基本語法的C語言,我們就構建出第乙個迭代的GCC了,我們可以叫它stage1-gcc。這個gcc比起最初的語義分析工具,已經具有了編譯器的雛形,支援了更複雜的語言功能的編譯。

接下來用 stage1-gcc 作為編譯器構建出 stage2-gcc,得到更完善,但尚不能支援100%功能的編譯器,所以我們還要再用 stage2-gcc 作為編譯器構建出第三次迭代的 stage3-gcc。這個gcc就是我們最終的見到的成品GCC。

為了答案的完整性,我就簡單粗暴地過一下這個流程:

作業系統的第一次出現前,我們也還是需要先有二進位制的工具庫組成基本操作環境(還稱不上系統),然後 -> 操作環境中生成二進位制的語義分析器 -> 構建出第一版的語言編譯器 -> 根據目前操作環境的功能完整程度決定繼續構建下一迭代版本編譯器,或者構建第一迭代版本作業系統 -> 反覆上乙個步驟,直到該迭代構建出的系統功能達到預期。

2樓:An idea

提問的不對勁:

「沒有作業系統還沒有電腦呢」,先誕生了電腦,後面隨著需求的增加才誕生了現在你看到的win、linux、mac等作業系統。

正文:作業系統是一種系統軟體,那用什麼寫軟體呢?程式語言嘛。

如果你想學習如何編寫作業系統的話,看這裡

寫作業系統只能用彙編和 C 語言嗎?

繪圖員 非專業人士,想起來點舊事 當年有個叫吳曉軍的人搞了個2.13 DOS漢字系統,最早是用debug作為開發工具,後來改用彙編開發。 aa11ss55 引導什麼的部分是只能寫彙編 後面寫什麼語言就取決於你的RT了 RT構成了最基本的函式庫,然後你就可以實現自己的標準庫了如果你說 只能用C語言 那...

為什麼組合語言不能越過作業系統操控硬體?

問題就是錯的。組合語言能直接操控硬體。bios 早期由彙編寫成,不能操控硬體嗎?pc 最早的作業系統是 dos,核心是組合語言寫成,不能操控硬體嗎?8086 和 dos 對許可權管理幾乎沒有,早期極客繞過 dos 操作硬體是家常便飯。windows 系統之後,系統啟動就不再給您這個機會,但驅動程式之...

學習C語言應該使用哪個作業系統和什麼軟體比較適合?

如果是初學c語言,我是指比如練習演算法,比如去oj做題。學習學習資料結構,我建議還是Linux。使用gcc vim,很方便的就開始c的學習。至少不用每次開始都要新建乙個工程什麼的。source file編寫好了,命令列直接編譯 執行就OK了。 pansz Linux gcc 一般是最好的選擇。順便熟...