世界上著名的操作系統(tǒng)是用什么語(yǔ)言編寫的?
Unix 與 C 語(yǔ)言的關(guān)系
在服務(wù)器領(lǐng)域,最著名的系統(tǒng)莫過(guò)于Unix了,即便Linux也是類Unix的操作系統(tǒng)。Unix 是用 C 語(yǔ)言編寫的,而且是世界上第一個(gè)用 C 語(yǔ)言編寫的操作系統(tǒng)。但是 Unix 是怎么產(chǎn)生的?C 語(yǔ)言又是怎么產(chǎn)生的?Unix 為什么要用 C 語(yǔ)言來(lái)編寫?相信看完這篇文章你很快就會(huì)有了答案。
Multics 和 Unix
1964年,在 Unix 誕生之前,美國(guó)貝爾實(shí)驗(yàn)室、通用電氣、和麻省理工學(xué)院聯(lián)合開發(fā)了一個(gè)項(xiàng)目,叫做 Multics操作系統(tǒng)。Multics 在當(dāng)時(shí)取得了巨大的成功,因?yàn)樗o了人們一個(gè)真正可用并且很穩(wěn)定的操作系統(tǒng)。當(dāng)時(shí)從學(xué)校到政府機(jī)關(guān),到處都在安裝 Multics。
但是時(shí)間到了 1969年,因?yàn)榉N種原因,貝爾實(shí)驗(yàn)室的 Ken Thompson 和 Dennis Ritchie 決定放棄Multics,于是貝爾實(shí)驗(yàn)室退出了這個(gè)項(xiàng)目。Ken Thompson 和 Dennis Ritchie 決定開發(fā)一個(gè)更為簡(jiǎn)單并且高效的操作系統(tǒng),并把它命名為 Unix,于是他們倆就成為了 Unix 之父。
和 Unix 相比,Multics 有兩個(gè)比較致命的缺點(diǎn),一是需要安裝在非常昂貴的機(jī)器上,普通的計(jì)算機(jī)沒(méi)有辦法安裝。二是設(shè)計(jì)非常復(fù)雜,這也是貝爾實(shí)驗(yàn)室的工程師退出的主要原因。不過(guò) Ken Thompson 和 Dennis Ritchie 還是從 Multics 上得到很多啟發(fā),可以說(shuō) Unix 是 Multics 的簡(jiǎn)化以及更新。
說(shuō)到這里,C 語(yǔ)言還沒(méi)有出場(chǎng),因?yàn)樗谀莻€(gè)時(shí)候還沒(méi)有被發(fā)明出來(lái)。Unix 操作系統(tǒng)的第一個(gè)版本是純粹用匯編語(yǔ)言編寫出來(lái)的。一直到了 1974年,第四個(gè)版本才改用 C 語(yǔ)言進(jìn)行開發(fā)。在講 C 語(yǔ)言之前,我們還不得不先說(shuō)一下 BCPL 和 B 語(yǔ)言。
BCPL 與 B 語(yǔ)言
Ken Thompson 和 Dennis Ritchie 最初用匯編語(yǔ)言來(lái)開發(fā) Unix,因?yàn)樵谀莻€(gè)時(shí)候,所有的操作系統(tǒng)都是用匯編語(yǔ)言來(lái)開發(fā)的。不過(guò)當(dāng)時(shí) Multics 是一個(gè)例外,Multics 項(xiàng)目組使用了 PL/1 來(lái)進(jìn)行開發(fā)。它的價(jià)值就在于向世人展示了用一門高級(jí)語(yǔ)言也可以開發(fā)出一套操作系統(tǒng)。Ken Thompson 和 Dennis Ritchie 也受到了鼓舞,他們決定用匯編之外的語(yǔ)言重新開發(fā) Unix。他們最初的選擇是 BCPL。BCPL 最早是由 Martin Richards 發(fā)明用來(lái)開發(fā)編譯器的語(yǔ)言。但是 Ken Thompson 和 Dennis Ritchie很快發(fā)現(xiàn),如果他們想在小型計(jì)算機(jī) DEC PDP-7 上使用 BCPL,就需要對(duì)這個(gè)語(yǔ)言本身進(jìn)行一些修改。于是就產(chǎn)生了后來(lái)的 B 語(yǔ)言。
B 語(yǔ)言作為系統(tǒng)開發(fā)語(yǔ)言,也存在很多的缺點(diǎn),于是后來(lái)它又被改進(jìn)為 NB 語(yǔ)言 (New B)??墒?NB 還是有很多的問(wèn)題,于是 Dennis Ritchie 就又發(fā)明了 C 語(yǔ)言,最終在 1974年,Ken Thompson 和 Dennis Ritchie 一起用 C 語(yǔ)言重新編寫了第四版的 Unix 系統(tǒng)?,F(xiàn)在,C 語(yǔ)言已經(jīng)成為了操作系統(tǒng)開發(fā)最常用的編程語(yǔ)言。
通往 C 語(yǔ)言與 Unix 之路
Dennis Ritchie 曾經(jīng)解釋過(guò)自己為什么要發(fā)明 C 語(yǔ)言,以及使用 B 語(yǔ)言過(guò)程中遇到的一些困難:
- 只能處理計(jì)算機(jī)字:B語(yǔ)言所有的操作都是通過(guò)計(jì)算機(jī)字來(lái)處理的,在那個(gè)時(shí)候,能夠處理字節(jié)的編程語(yǔ)言對(duì)工程師們來(lái)說(shuō)是一個(gè)夢(mèng)。
- 沒(méi)有類型:準(zhǔn)確的說(shuō),B語(yǔ)言只有一種類型,計(jì)算機(jī)字。如果你有一個(gè)字符串,可能你需要把它分成多個(gè)變量來(lái)保存,比如一個(gè)21個(gè)字符的字符串,就需要 6 個(gè)變量。
- 不支持浮點(diǎn)類型運(yùn)算:在那個(gè)時(shí)候,大部分硬件已經(jīng)都可以開始支持浮點(diǎn)運(yùn)算了,但是 B 語(yǔ)言還不支持這種操作。
B 語(yǔ)言的這些問(wèn)題,開發(fā)低效,在機(jī)器上運(yùn)行緩慢等等,都迫使 Dennis Ritchie 發(fā)明一種新的編程語(yǔ)言。最開始被稱為 New B,后來(lái)逐漸演化成了 C 語(yǔ)言。
C 語(yǔ)言解決了 B 語(yǔ)言的很多缺陷,并很快成為了開發(fā)操作系統(tǒng)最流行的一種編程語(yǔ)言。新版本的 Unix 以及今天很多類 Unix 的操作系統(tǒng)都是用 C 語(yǔ)言開發(fā)出來(lái)的。
好了,講到這里,我想大家都清楚了 Unix 和 C 語(yǔ)言是怎么來(lái)的了,以及為什么要用 C 語(yǔ)言來(lái)編寫 Unix?,F(xiàn)在有很多非常流行的語(yǔ)言比如 Java 和 Python,它們是一種更高級(jí)的編程語(yǔ)言,是在 C 語(yǔ)言這一層之上的。但是如果大家想做設(shè)備驅(qū)動(dòng)或者系統(tǒng)內(nèi)核模塊的修改,還是離不開 C 語(yǔ)言這把利器。