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

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

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

解析C語言與操作系統(tǒng)

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

大家有沒有想過,為什么大部分操作系統(tǒng)都使用C語言來編寫而不是其它語言呢?這篇文章給你答案。

C語言在處理器界很受歡迎

首先不得不說的是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ī)器指令,接下來的問題是選擇什么語言呢?使用極為復(fù)雜的Java/C#還是簡單的C呢?答案不言而喻。

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

看到了吧,處理器設(shè)計(jì)者想到的第一個(gè)用來驅(qū)動CPU的高級語言就是C,那么針對該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)必須對上層屏蔽硬件,這同時(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é)可能對指針(pointer)心生畏懼,的確,對于大部分工作在應(yīng)用層的程序員來說,沒有指針我們一樣可以編寫出有用的程序,像Java程序、Python程序等等,這些語言中沒有指針,我們也不需要直接面對硬件,而這恰恰是因?yàn)椴僮飨到y(tǒng)幫我們屏蔽掉了,而在操作系統(tǒng)這一層我們無可逃避,C語言可以干凈利落地解決問題。

最接近底層的高級語言

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

希望這篇文章對大家理解C語言與操作系統(tǒng)有所幫助。

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

    關(guān)注

    21

    文章

    4862

    瀏覽量

    139358
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2943

    瀏覽量

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

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134119
收藏 人收藏

    評論

    相關(guān)推薦

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

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

    書籍教程:linux操作系統(tǒng)c語言編程入門

    本資料是linux操作系統(tǒng)c語言編程入門教材。目 錄第一章 基礎(chǔ)知識 ……………………………………………………………………………4第二章 進(jìn)程介紹
    發(fā)表于 07-26 22:34

    深入解析WINDOWS操作系統(tǒng)(第4版)

    本帖最后由 lee_st 于 2018-3-4 01:08 編輯 深入解析WINDOWS操作系統(tǒng)(第4版)
    發(fā)表于 03-02 23:45

    沒有操作系統(tǒng)真的不能使用LwIP套接字和域名解析嗎?

    裸機(jī)移植了LwIP協(xié)議棧,整體感覺不錯(cuò)但是在使用套接字(Socket)功能和域名解析(lwip_gethostbyname)時(shí)發(fā)現(xiàn)編譯通不過,說是要啟用操作系統(tǒng)。如果不用操作系統(tǒng)就只能用RAW
    發(fā)表于 08-22 22:25

    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ǔ)知識.在這篇文章當(dāng)中,我們將會學(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次下載

    米爾科技嵌入式實(shí)時(shí)操作系統(tǒng)介紹

    《嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-Ⅱ經(jīng)典實(shí)例:基于STM32處理器》緊緊圍繞“μC/OS-Ⅱ系統(tǒng)設(shè)計(jì)”這一主題,立足實(shí)踐解析了嵌入式實(shí)時(shí)
    的頭像 發(fā)表于 11-25 09:02 ?2193次閱讀
    米爾科技嵌入式實(shí)時(shí)<b class='flag-5'>操作系統(tǒng)</b>介紹

    解析操作系統(tǒng)的概念、結(jié)構(gòu)和機(jī)制

    全面。解析操作系統(tǒng)的概念、結(jié)構(gòu)和機(jī)制。
    發(fā)表于 03-26 14:19 ?8次下載

    STM32操作系統(tǒng)系列使用C語言的教程

    C語言,相對于匯編有更好的可讀性,便于維護(hù)等優(yōu)點(diǎn)。下面實(shí)驗(yàn)將使用C語言實(shí)現(xiàn)點(diǎn)亮LED燈。C語言
    的頭像 發(fā)表于 08-10 23:26 ?3335次閱讀

    課堂筆記之嵌入式Linux操作系統(tǒng)

    :嵌入式操作系統(tǒng)、開發(fā)工具、系統(tǒng)應(yīng)用開發(fā)(&GUI)、系統(tǒng)移植、驅(qū)動、內(nèi)核。4、所具備的知識體系:C語言、單片機(jī)、嵌入式
    發(fā)表于 11-02 09:51 ?15次下載
    課堂筆記之嵌入式Linux<b class='flag-5'>操作系統(tǒng)</b>

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

    如有不詳細(xì)的描述、錯(cuò)誤或疑問,歡迎留言?。?!基于STM32從零寫操作系統(tǒng)系列---前言與目錄目的??C語言,相對于匯編有更好的可讀性,便于維護(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>

    為什么不用Go開發(fā)操作系統(tǒng)?

    操作系統(tǒng) (OS) 是計(jì)算機(jī)系統(tǒng)的心臟和靈魂,它管理著計(jì)算機(jī)的硬件和軟件資源,并為用戶提供與計(jì)算機(jī)交互的方式。傳統(tǒng)上,C 和 Assembly 等語言因其低開銷和 “接近機(jī)器碼” 的特
    的頭像 發(fā)表于 05-26 15:09 ?443次閱讀
    為什么不用Go開發(fā)<b class='flag-5'>操作系統(tǒng)</b>?

    深度解析全球操作系統(tǒng)格局

    操作系統(tǒng)是負(fù)責(zé)協(xié)調(diào)、管理和控制計(jì)算機(jī)硬件與軟件資源的程序,是整個(gè)計(jì)算機(jī)的核心系統(tǒng)軟件。 按照操作系統(tǒng)面向的設(shè)備類型,通用操作系統(tǒng)主要包括桌面操作系統(tǒng)
    的頭像 發(fā)表于 01-18 15:00 ?718次閱讀
    深度<b class='flag-5'>解析</b>全球<b class='flag-5'>操作系統(tǒng)</b>格局