0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么大家都喜歡用C語言編寫操作系統(tǒng)

jf_78858299 ? 來源:碼農(nóng)的荒島求生 ? 作者:碼農(nóng)的荒島求生 ? 2023-02-24 13:53 ? 次閱讀

首先不得不說的是C語言真的非常簡單,看看K&R經(jīng)典的"The C Programming Language",薄薄的一本書就把C語言講完了。

再去看看Java、C#等,要是介紹這些語言的書不能厚到去墊顯示器你都不好意思去讀。

由于C語言很簡單,被移植到了許多CPU架構(gòu)上,甚至許多CPU設(shè)計(jì)者第一件事就是把C語言移植過來。

假設(shè)你自己打造了一款CPU,有自己獨(dú)特的機(jī)器指令,現(xiàn)在CPU有了,接下來的問題是你該怎么編寫程序讓你的CPU開始工作呢?

我們知道,CPU只能執(zhí)行機(jī)器指令,程序員都使用高級(jí)語言來編寫程序,因此必須將高級(jí)語言翻譯成機(jī)器指令,接下來的問題是選擇什么語言呢?使用極為復(fù)雜的Java/C#還是簡單的C呢?答案不言而喻。

因此你接下來需要的就是為你設(shè)計(jì)的CPU打造一款C編譯器,之前都是通過魔改gcc來完成,現(xiàn)在你也可以使用LLVM(注意,這絕不是一件想象中那么簡單的事情)。

看到了吧,處理器設(shè)計(jì)者想到的第一個(gè)用來驅(qū)動(dòng)CPU的高級(jí)語言就是C,那么針對(duì)該CPU編寫的操作系統(tǒng)該用什么語言還用得著說嗎?

C語言最獨(dú)立

為什么說C語言最獨(dú)立呢?

想一想Java、Python、C#等是不是需要一大坨運(yùn)行時(shí)系統(tǒng)(runtime system),包括解釋器、線程模型、垃圾回收等等。

而C語言就簡單太多了,C語言不需要依賴任何運(yùn)行時(shí)系統(tǒng) (不考慮標(biāo)準(zhǔn)庫),它不需要內(nèi)存管理系統(tǒng)、不需要解釋器、不需要線程模式等等,這就意味著你編寫的C語言程序可以直接在硬件上跑起來。

直接操作硬件的能力

讓我們來看一下在整個(gè)計(jì)算機(jī)系統(tǒng)中操作系統(tǒng)位于哪里:

可以看到操作系統(tǒng)位于應(yīng)用程序與硬件中間,這就意味著操作系統(tǒng)必須對(duì)上層屏蔽硬件,這同時(shí)也意味著編寫操作系統(tǒng)時(shí)必須能直接控制硬件,尤其是內(nèi)存管理,而C語言就是為此而生的。

C語言本身不像Java等自帶內(nèi)存管理系統(tǒng),在C語言中這一工作完全由程序員控制,這種控制權(quán)在開發(fā)操作系統(tǒng)時(shí)是極為重要的,再加上指針這一大殺器,程序員可以方便的直接操作內(nèi)存,像創(chuàng)建頁表(page table)、DMA控制器、Memory mapped IO等等。

有的同學(xué)可能對(duì)指針(pointer)心生畏懼,的確,對(duì)于大部分工作在應(yīng)用層的程序員來說沒有指針我們一樣可以編寫出有用的程序,像Java程序、Python程序等等,這些語言中沒有指針,我們也不需要直接面對(duì)硬件,而這恰恰是因?yàn)椴僮飨到y(tǒng)幫我們屏蔽掉了,而在操作系統(tǒng)這一層我們無可逃避,C語言可以干凈利落的解決問題。

最接近底層的高級(jí)語言

C語言中沒有復(fù)雜的數(shù)據(jù)結(jié)構(gòu),像各種容器、hash表、樹等,程序員必須自己來實(shí)現(xiàn)這些,這也是很多同學(xué)覺得不方便的地方,然而 這樣設(shè)計(jì)的初衷是為了讓程序員能確切的知道C代碼是怎樣影響硬件的,C語言也是最接近機(jī)器指令的高級(jí)語言 ,C語言是非常透明,而這一點(diǎn)在其它高級(jí)語言中幾乎不可能,因?yàn)镃語言的設(shè)計(jì)哲學(xué)之一就是:

Trust the programmer

使用C語言的程序員應(yīng)該清楚的知道自己在干啥,這非常適合編寫操作系統(tǒng)這種貼近硬件涉及大量底層細(xì)節(jié)需要精密微調(diào)的程序,當(dāng)然缺點(diǎn)就是剛才所說的沒有內(nèi)置的一些常用數(shù)據(jù)結(jié)構(gòu)。

總結(jié)

本篇介紹了為什么大部分操作系統(tǒng)都使用C語言來編寫,也介紹了C語言的許多優(yōu)點(diǎn),但值得注意的是每種語言都有自己的使用場景,C語言也不例外,C語言非常適合系統(tǒng)編程等偏向底層的方向,但在應(yīng)用層你的選項(xiàng)則有很多。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209388
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2943

    瀏覽量

    104106
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134119
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux操作系統(tǒng)C語言編程入門

    Linux操作系統(tǒng)C語言編程入門
    發(fā)表于 08-26 20:43

    設(shè)計(jì)者更喜歡什么操作系統(tǒng)

      如果你正在為手機(jī)操作系統(tǒng)iOS開發(fā)應(yīng)用程序,XCode 4是一個(gè)更好的解決方案。它原生支持所有app在運(yùn)行時(shí)都要用到的Objective-C 和Cocoa庫。蘋果公司為這些語言提供了特有的文檔,所以
    發(fā)表于 05-03 11:48

    為什么大家喜歡圖標(biāo)?

    為什么大家喜歡圖標(biāo)?設(shè)計(jì)圖標(biāo)要遵循哪些原則?
    發(fā)表于 07-12 08:33

    為什么每一個(gè)程序員需要學(xué)習(xí)C語言呢?

    語言(像C++,JAVA),C語言是個(gè)低級(jí)語言。從總體上來說,低級(jí)的編程語言可以讓你更好的了解計(jì)
    發(fā)表于 07-20 06:07

    操作系統(tǒng)下軟件看門狗

    關(guān)于軟件看門狗:在裸機(jī)程序下軟件看門狗,大家都會(huì)在必要的地方喂狗保證看門狗有效;但在微操作系統(tǒng)下,程序的流向都是在操作系統(tǒng)下調(diào)度的,這種情況下怎么估算喂狗最大時(shí)間,位置,也就是在操作系統(tǒng)
    發(fā)表于 09-05 14:37

    C語言實(shí)時(shí)操作系統(tǒng)源代碼

    C語言實(shí)時(shí)操作系統(tǒng)源代碼
    發(fā)表于 06-05 12:36 ?63次下載

    Linux操作系統(tǒng)-C語言編程入門-pdf

    Linux操作系統(tǒng)-C語言編程入門介紹在LINUX 下進(jìn)行C 語言編程所需要的基礎(chǔ)知識(shí).在這篇文章當(dāng)中,我們將會(huì)學(xué)到以下內(nèi)容:⣷
    發(fā)表于 12-08 09:55 ?193次下載
    Linux<b class='flag-5'>操作系統(tǒng)</b>-<b class='flag-5'>C</b><b class='flag-5'>語言</b>編程入門-pdf

    基于Linux操作系統(tǒng)C語言編程入門

    基于Linux操作系統(tǒng)C語言編程入門
    發(fā)表于 10-27 15:36 ?11次下載
    基于Linux<b class='flag-5'>操作系統(tǒng)</b>下<b class='flag-5'>C</b><b class='flag-5'>語言</b>編程入門

    Linux操作系統(tǒng)C語言編程入門.pdf

    Linux操作系統(tǒng)C語言編程入門
    發(fā)表于 05-17 10:08 ?95次下載

    C語言厲害在什么地方

    C語言可以直接操縱底層的硬件,可以編寫硬件驅(qū)動(dòng)程序和操作系統(tǒng)
    的頭像 發(fā)表于 03-22 17:04 ?1648次閱讀

    怎樣學(xué)習(xí)C語言

      C語言是目前世界上流行、使用非常廣泛的高級(jí)程序設(shè)計(jì)語言C語言對(duì)操作系統(tǒng)
    發(fā)表于 04-19 09:36 ?7次下載

    為什么,操作系統(tǒng)內(nèi)核都是C語言寫的?資料下載

    電子發(fā)燒友網(wǎng)為你提供為什么,操作系統(tǒng)內(nèi)核都是C語言寫的?資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可
    發(fā)表于 04-28 08:41 ?4次下載
    為什么,<b class='flag-5'>操作系統(tǒng)</b>內(nèi)核都是<b class='flag-5'>用</b><b class='flag-5'>C</b><b class='flag-5'>語言</b>寫的?資料下載

    基于STM32從零寫操作系統(tǒng)系列---使用C語言

    如有不詳細(xì)的描述、錯(cuò)誤或疑問,歡迎留言!??!基于STM32從零寫操作系統(tǒng)系列---前言與目錄目的??C語言,相對(duì)于匯編有更好的可讀性,便于維護(hù)等優(yōu)點(diǎn)。下面實(shí)驗(yàn)將使用C
    發(fā)表于 01-13 14:05 ?31次下載
    基于STM32從零寫<b class='flag-5'>操作系統(tǒng)</b>系列---使用<b class='flag-5'>C</b><b class='flag-5'>語言</b>

    C不再是一種編程語言

    比喻雖尖銳,依據(jù)卻不無道理。幾乎任何程序要做任何有用或有趣的事情,它都必須在操作系統(tǒng)上運(yùn)行。這意味著它必須與那個(gè)操作系統(tǒng)交互——而很多操作系統(tǒng)都是
    的頭像 發(fā)表于 05-05 14:43 ?691次閱讀

    C語言基礎(chǔ)-為什么要使用C?

    當(dāng)今最流行的 Linux 操作系統(tǒng)和 RDBMS(Relational Database Management System:關(guān)系數(shù)據(jù)庫管理系統(tǒng)) MySQL 都是使用 C 語言
    發(fā)表于 03-25 11:20 ?293次閱讀