国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價(jià)值的文章主要介紹了為什么不用Go開發(fā)操作系統(tǒng)?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

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

?文章來源地址http://www.zghlxwxcb.cn/news/detail-462554.html

操作系統(tǒng) (OS) 是計(jì)算機(jī)系統(tǒng)的心臟和靈魂,它管理著計(jì)算機(jī)的硬件和軟件資源,并為用戶提供與計(jì)算機(jī)交互的方式。傳統(tǒng)上,C 和 Assembly 等語言因其低開銷和 “接近機(jī)器碼” 的特性而被用于開發(fā)操作系統(tǒng)。

但諸如 Go 等高級(jí)語言的興起引入了一些特性,這些特性或許可以使開發(fā)操作系統(tǒng)等復(fù)雜軟件變得更加容易。例如,類型安全、錯(cuò)誤處理和并發(fā)性在開發(fā)操作系統(tǒng)時(shí)應(yīng)該是有益的。

因此,采用像 Go 這樣的高級(jí)語言來開發(fā)操作系統(tǒng)理應(yīng)是自然選擇,但為什么并沒有成功的案例?


操作系統(tǒng)由不同的組件構(gòu)成,它們負(fù)責(zé)不同的功能,可以使用不同的編程語言編寫。

操作系統(tǒng)的核心是內(nèi)核 (Kernel),它負(fù)責(zé)與硬件交互 —— 幾乎都是采用 C 或匯編語言編寫。至于面向用戶的組件(例如 GUI 應(yīng)用程序),可以采用任何語言編寫。

例如,Android 采用 Java 編寫用戶層的組件,如 GUI 框架和系統(tǒng)應(yīng)用程序(相機(jī)、電話等)。相對(duì)應(yīng)的,其內(nèi)核采用 C 和匯編語言編寫;底層系統(tǒng)組件 —— 庫,則是用 C++ 編寫。

C 語言 “統(tǒng)治” 內(nèi)核的主要原因:

  • 可直接管理內(nèi)存

  • 缺少抽象

  • 無需依賴運(yùn)行時(shí)

  • 可移植性

Go 作為高級(jí)語言提供了許多令人滿意的特性。從這方面來看,它似乎可以成為開發(fā)操作系統(tǒng)的絕佳選擇:

  • 某些類型的錯(cuò)誤在高級(jí)語言中出現(xiàn)的可能性要小得多

  • 并發(fā)性:在高級(jí)語言中處理并發(fā)更容易,因?yàn)閹缀趺糠N高級(jí)語言都內(nèi)置處理并發(fā)所需的機(jī)制

  • 類型安全:防止像 C 的寬松類型強(qiáng)制執(zhí)行

不過盡管 Go 提供了令人滿意的特性,可以讓操作系統(tǒng)開發(fā)者的工作更輕松,但它也有一些局限性。

作為一種具有垃圾回收功能的語言,Go 并不真正適合操作系統(tǒng)開發(fā)。使用 Go 編寫內(nèi)核意味著需要小心翼翼地繞過 Go 的垃圾收集。正如 Reddit 論壇中開發(fā)者提到的,鼠標(biāo)滯后可能是因?yàn)橹袛嗵幚沓绦蚍峙淞擞|發(fā)垃圾回收的內(nèi)存。

此外,Go 還需要大量的 runtime 才能執(zhí)行,這意味著它不能直接在硬件上運(yùn)行。盡管 TinyGo 可以將 Go 編譯為在裸機(jī)上運(yùn)行,但與 C 相比,它只支持少量的架構(gòu),而 C 幾乎可以在任何架構(gòu)上運(yùn)行。

總的來說,使用 Go 開發(fā)一個(gè)不是 “玩具性質(zhì)” 的操作系統(tǒng)幾乎是不可能。尤其是要求支持在多種架構(gòu)上運(yùn)行、支持不同設(shè)備(如顯卡或網(wǎng)卡),并符合 POSIX 標(biāo)準(zhǔn),這更是極具挑戰(zhàn)性。

最后看一下探索用 Go 開發(fā)操作系統(tǒng)的案例。

Biscuit 是一個(gè)用 Go 開發(fā)的操作系統(tǒng),運(yùn)行在 64 位 X86 架構(gòu)上。它使用經(jīng)過修改的 Go 1.10 運(yùn)行時(shí)實(shí)現(xiàn),其中添加了更多匯編代碼來處理系統(tǒng)調(diào)用和中斷處理程序的引導(dǎo)和進(jìn)入 / 退出。

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

?Biscuit 為用戶進(jìn)程提供 POSIX 接口,支持 fork、exec 等。它實(shí)現(xiàn)了支持核心 POSIX 文件系統(tǒng)調(diào)用的文件系統(tǒng)。Biscuit 為用 Go 編寫的 Intel PCI-Express 以太網(wǎng) NIC 實(shí)現(xiàn)了 TCP/IP 堆棧和驅(qū)動(dòng)程序。使用 POSIX 接口,Biscuit 可以在不修改源代碼的情況下運(yùn)行許多 Linux C 程序。

然而,Biscuit 缺少許多功能,例如調(diào)度優(yōu)先級(jí)、換出頁面或磁盤,以及安全功能,例如用戶、訪問控制列表和地址空間隨機(jī)化。

?

歡迎點(diǎn)贊收藏轉(zhuǎn)發(fā)????

? ? ? ? ? ? ? ? ??? ----? END? ----

?

?

?

?

?

?

?

?

?

?

?

到了這里,關(guān)于為什么不用Go開發(fā)操作系統(tǒng)?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 記錄--為什么推薦用svg而不用icon?

    記錄--為什么推薦用svg而不用icon?

    使用背景: 1.因?yàn)閟vg圖標(biāo)在任何設(shè)備下都可以高清顯示,不會(huì)模糊。而icon會(huì)在顯卡比較低的電腦上有顯示模糊的情況 2.svg圖標(biāo)在頁面render時(shí) 速度會(huì)比icon稍微快一點(diǎn) 3.實(shí)現(xiàn)小程序換膚功能 ;方案見:www.yuque.com/lufeilizhix… SVG基礎(chǔ)可參考:www.yuque.com/lufeilizhix… inline svg是目前前

    2024年02月08日
    瀏覽(32)
  • ChatGPT對(duì)話為什么不用WebSocket而使用EventSource?

    ChatGPT對(duì)話為什么不用WebSocket而使用EventSource?

    ??ChatGPT對(duì)話為什么不用WebSocket而使用EventSource? ☆* o(≧▽≦)o *☆嗨~我是IT·陳寒?? ?博客主頁:IT·陳寒的博客 ??該系列文章專欄:AIGC人工智能 ??其他專欄:Java學(xué)習(xí)路線 Java面試技巧 Java實(shí)戰(zhàn)項(xiàng)目 AIGC人工智能 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí) ??文章作者技術(shù)和水平有限,如果文中出現(xiàn)錯(cuò)

    2024年02月04日
    瀏覽(30)
  • SpringBoot有的時(shí)候引入依賴為什么不用加版本號(hào)

    有的小伙伴做項(xiàng)目時(shí)候,引入新的包時(shí)候,會(huì)有疑問,為什么有些依賴需要加版本號(hào),有些依賴不需要加版本號(hào)?不加版本號(hào)的依賴,版本號(hào)都寫在哪里了呢? 內(nèi)置的依賴可以不加版本號(hào) 這是因?yàn)镾pringBoot內(nèi)置了很多依賴,引入這些內(nèi)置的依賴時(shí)不需要加版本號(hào),相反,如果

    2024年01月19日
    瀏覽(27)
  • 【Linux操作系統(tǒng)】編譯過程中遇到的問題-為什么加-c?執(zhí)行文件提示無法執(zhí)行二進(jìn)制文件?main函數(shù)參數(shù)argc和*argv[]的作用和理解?

    【Linux操作系統(tǒng)】編譯過程中遇到的問題-為什么加-c?執(zhí)行文件提示無法執(zhí)行二進(jìn)制文件?main函數(shù)參數(shù)argc和*argv[]的作用和理解?

    在使用GCC編譯器進(jìn)行程序開發(fā)時(shí),我們經(jīng)常會(huì)遇到一些編譯過程中的問題, 比如為什么要加上\\\"-c\\\"選項(xiàng),以及為什么生成的可執(zhí)行文件無法執(zhí)行等問題。 本篇博客將詳細(xì)介紹這些問題,并給出相應(yīng)的代碼和解釋,幫助讀者更好地理解GCC編譯過程中的\\\"-c\\\"選項(xiàng)和main函數(shù)的參數(shù)a

    2024年02月12日
    瀏覽(32)
  • 【知識(shí)儲(chǔ)備】Transformer為什么用LN而不用BN
  • 邏輯回歸為什么使用交叉熵而不用均方差?

    邏輯回歸為什么使用交叉熵而不用均方差?

    邏輯回歸為什么使用交叉熵而不用均方差?或者說邏輯回歸的損失函數(shù)為什么不用最小二乘? 下面主要從兩個(gè)角度進(jìn)行闡述: 從邏輯回歸的角度出發(fā),邏輯回歸的預(yù)測(cè)值是一個(gè)概率,而交叉熵又表示真實(shí)概率分布與預(yù)測(cè)概率分布的相似程度,因此選擇使用交叉熵 從均方差

    2024年02月21日
    瀏覽(29)
  • 游戲引擎中為什么要用四元數(shù)表示旋轉(zhuǎn)而不用歐拉角旋轉(zhuǎn)?

    個(gè)人觀點(diǎn),僅供參考,如有錯(cuò)誤可太刺激了 四元數(shù)的簡(jiǎn)單概念和使用 歐拉角通常用于表示一個(gè)物體的 旋轉(zhuǎn)狀態(tài) ,而不是表示 旋轉(zhuǎn)過程 。 歐拉角描述的是物體相對(duì)于某個(gè)參考坐標(biāo)系的朝向或旋轉(zhuǎn)狀態(tài),通常以不同的軸(例如,繞X軸、Y軸和Z軸)的旋轉(zhuǎn)角度來表示。這可以讓

    2024年02月06日
    瀏覽(30)
  • 為什么很多程序員不用switch,而是大量 的if......else if?

    不會(huì)吧還有人用if else和switch case?三目運(yùn)算符? 不會(huì)吧? 不會(huì)吧?大佬都是全都不用的!以JAVA為例 條件判斷語句的四種寫法,茴字的四種寫法大家不會(huì)不知道吧 1.正常人寫法: //輸出 :張三應(yīng)該去男廁所 2.Lambda策略模式寫法: 某些大公司P6級(jí)別以上(年薪30w-50w)標(biāo)準(zhǔn)寫法

    2024年02月15日
    瀏覽(21)
  • Java開發(fā)手冊(cè)中為什么不建議在for循環(huán)中使用“+“進(jìn)行字符串操作

    Java開發(fā)手冊(cè)中為什么不建議在for循環(huán)中使用“+“進(jìn)行字符串操作

    java開發(fā)手冊(cè)中對(duì)于循環(huán)體中進(jìn)行字符串的拼接要求如下: 【推薦】循環(huán)體內(nèi),字符串的連接方式,使用 StringBuilder 的 append 方法進(jìn)行擴(kuò)展。 說明:下例中,反編譯出的字節(jié)碼文件顯示每次循環(huán)都會(huì) new 出一個(gè) StringBuilder 對(duì)象,然后進(jìn)行 append操作, 最后通過 toString 方法返回

    2024年02月08日
    瀏覽(30)
  • 表單的總數(shù)據(jù)為什么可以寫成一個(gè)空對(duì)象,不用具體的寫表單中綁定的值,vue3

    表單的總數(shù)據(jù)為什么可以寫成一個(gè)空對(duì)象,不用具體的寫表單中綁定的值,vue3

    ? from為空對(duì)象? 在v-model里寫form.name,其實(shí)就是在form這個(gè)空對(duì)象里添加了一個(gè)鍵名為name的成員,你不用在script標(biāo)簽的form對(duì)象里面特意寫name屬性。

    2024年01月23日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包