首先不得不說(shuō)的是C語(yǔ)言真的非常簡(jiǎn)單,看看K&R經(jīng)典的"The C Programming Language",薄薄的一本書就把C語(yǔ)言講完了。
再去看看Java、C#等,要是介紹這些語(yǔ)言的書不能厚到去墊顯示器你都不好意思去讀。
由于C語(yǔ)言很簡(jiǎn)單,被移植到了許多CPU架構(gòu)上,甚至許多CPU設(shè)計(jì)者第一件事就是把C語(yǔ)言移植過(guò)來(lái)。
假設(shè)你自己打造了一款CPU,有自己獨(dú)特的機(jī)器指令,現(xiàn)在CPU有了,接下來(lái)的問(wèn)題是你該怎么編寫程序讓你的CPU開始工作呢?
我們知道,CPU只能執(zhí)行機(jī)器指令,程序員都使用高級(jí)語(yǔ)言來(lái)編寫程序,因此必須將高級(jí)語(yǔ)言翻譯成機(jī)器指令,接下來(lái)的問(wèn)題是選擇什么語(yǔ)言呢?使用極為復(fù)雜的Java/C#還是簡(jiǎn)單的C呢?答案不言而喻。
因此你接下來(lái)需要的就是為你設(shè)計(jì)的CPU打造一款C編譯器,之前都是通過(guò)魔改gcc來(lái)完成,現(xiàn)在你也可以使用LLVM(注意,這絕不是一件想象中那么簡(jiǎn)單的事情)。
看到了吧,處理器設(shè)計(jì)者想到的第一個(gè)用來(lái)驅(qū)動(dòng)CPU的高級(jí)語(yǔ)言就是C,那么針對(duì)該CPU編寫的操作系統(tǒng)該用什么語(yǔ)言還用得著說(shuō)嗎?
C語(yǔ)言最獨(dú)立
為什么說(shuō)C語(yǔ)言最獨(dú)立呢?
想一想Java、Python、C#等是不是需要一大坨運(yùn)行時(shí)系統(tǒng)(runtime system),包括解釋器、線程模型、垃圾回收等等。
而C語(yǔ)言就簡(jiǎn)單太多了,C語(yǔ)言不需要依賴任何運(yùn)行時(shí)系統(tǒng) (不考慮標(biāo)準(zhǔn)庫(kù)),它不需要內(nèi)存管理系統(tǒng)、不需要解釋器、不需要線程模式等等,這就意味著你編寫的C語(yǔ)言程序可以直接在硬件上跑起來(lái)。
直接操作硬件的能力
讓我們來(lái)看一下在整個(gè)計(jì)算機(jī)系統(tǒng)中操作系統(tǒng)位于哪里:
可以看到操作系統(tǒng)位于應(yīng)用程序與硬件中間,這就意味著操作系統(tǒng)必須對(duì)上層屏蔽硬件,這同時(shí)也意味著編寫操作系統(tǒng)時(shí)必須能直接控制硬件,尤其是內(nèi)存管理,而C語(yǔ)言就是為此而生的。
C語(yǔ)言本身不像Java等自帶內(nèi)存管理系統(tǒng),在C語(yǔ)言中這一工作完全由程序員控制,這種控制權(quán)在開發(fā)操作系統(tǒng)時(shí)是極為重要的,再加上指針這一大殺器,程序員可以方便的直接操作內(nèi)存,像創(chuàng)建頁(yè)表(page table)、DMA控制器、Memory mapped IO等等。
有的同學(xué)可能對(duì)指針(pointer)心生畏懼,的確,對(duì)于大部分工作在應(yīng)用層的程序員來(lái)說(shuō)沒(méi)有指針我們一樣可以編寫出有用的程序,像Java程序、Python程序等等,這些語(yǔ)言中沒(méi)有指針,我們也不需要直接面對(duì)硬件,而這恰恰是因?yàn)椴僮飨到y(tǒng)幫我們屏蔽掉了,而在操作系統(tǒng)這一層我們無(wú)可逃避,C語(yǔ)言可以干凈利落的解決問(wèn)題。
最接近底層的高級(jí)語(yǔ)言
C語(yǔ)言中沒(méi)有復(fù)雜的數(shù)據(jù)結(jié)構(gòu),像各種容器、hash表、樹等,程序員必須自己來(lái)實(shí)現(xiàn)這些,這也是很多同學(xué)覺(jué)得不方便的地方,然而 這樣設(shè)計(jì)的初衷是為了讓程序員能確切的知道C代碼是怎樣影響硬件的,C語(yǔ)言也是最接近機(jī)器指令的高級(jí)語(yǔ)言 ,C語(yǔ)言是非常透明,而這一點(diǎn)在其它高級(jí)語(yǔ)言中幾乎不可能,因?yàn)镃語(yǔ)言的設(shè)計(jì)哲學(xué)之一就是:
Trust the programmer
使用C語(yǔ)言的程序員應(yīng)該清楚的知道自己在干啥,這非常適合編寫操作系統(tǒng)這種貼近硬件涉及大量底層細(xì)節(jié)需要精密微調(diào)的程序,當(dāng)然缺點(diǎn)就是剛才所說(shuō)的沒(méi)有內(nèi)置的一些常用數(shù)據(jù)結(jié)構(gòu)。
總結(jié)
本篇介紹了為什么大部分操作系統(tǒng)都使用C語(yǔ)言來(lái)編寫,也介紹了C語(yǔ)言的許多優(yōu)點(diǎn),但值得注意的是每種語(yǔ)言都有自己的使用場(chǎng)景,C語(yǔ)言也不例外,C語(yǔ)言非常適合系統(tǒng)編程等偏向底層的方向,但在應(yīng)用層你的選項(xiàng)則有很多。
-
cpu
+關(guān)注
關(guān)注
68文章
10879瀏覽量
212180 -
JAVA
+關(guān)注
關(guān)注
19文章
2971瀏覽量
104855 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7608瀏覽量
137117
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論