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