嵌入式必知必會-作業系統原理(附源碼)

嵌入式胖胖 發佈 2022-11-29T11:13:37.104067+00:00

非科班出身,卻憑藉驚人的意志與熱愛,自學微機原理,程式語言,數據結構與算法,翻遍了作業系統和硬體書籍,獨立開發了 x86 平台下的 LMOS 和 arm 平台下的 LMOSEM 兩個作業系統。

都說作業系統(簡稱 OS ),是程式設計師的三大浪漫之一,我們經常會用「靈魂、大腦、內核、基石」等詞來形容它,足以見得它對計算機而言有多麼重要。最近,我用 3 天的時間,自己寫了個作業系統。

在手寫 OS 的過程中,之前遇到的很多和作業系統密切相關的疑難雜症,都找到了答案。比如:

  • 內存為什麼會泄漏、服務進程為什麼會 dang 掉、文件為什麼打不開?
  • MySQL 的 IO 性能還能不能再提升?
  • 網絡服務為什麼會掉線?模式靠什麼技術支撐?
  • Node.js 的 I/O 模型長什麼模樣?

除此之外,在做高性能服務端編程的時候,經常會用到內存、進程、線程、IO 相關的知識。

「學好作業系統,能直接解決你在工作中遇到的這些問題」。就這一個原因,它就已經是每個程式設計師必須好好修煉的「基本功」了。

事實也確實如此,作為每個程式設計師必須好好修煉的「基本功」,它能直接解決我們在工作中的很多疑難雜症比如做高性能服務端編程時,經常會用到內存、進程、線程、IO 等相關知識。


而且,我一直認為,花大量時間研究 OS 這些底層知識,是很有必要的,雖然短期看不到效果,但卻是從 0 到 1 必然的過程


學懂了這些基本功,再去琢磨那些被「追捧」的流行技術啊、demo 啊,都能輕鬆地理解背後高級的設計,理解系統中的性能瓶頸。


我也很喜歡研究作業系統作為程式設計師的三大浪漫之一它雖然枯燥無聊,卻又存在無限可能。對技術人來說,即便為此消耗了大把時光,費盡心力,也是值得。

正如我的偶像「計算機鬼才」彭東所說:"生活可以一地雞毛,但作業系統卻是心中的光"。

彭東在作業系統上的成就,讓我頗為佩服,他被稱為「計算機鬼才」,是有原因的。非科班出身,卻憑藉驚人的意志與熱愛,自學微機原理,程式語言,數據結構與算法,翻遍了作業系統和硬體書籍,獨立開發了 x86 平台下的 LMOS 和 arm 平台下的 LMOSEM 兩個作業系統。


LMOS 現在已經發布 8 個測試版本,是多進程、多線程、多 CPU、支持虛擬內存的全 64 位作業系統內核,代碼量足足有 10 萬多行。如此浩大的項目,沒點「程式設計師的浪漫」精神,想必很難堅持下來。

他的書《深度探索嵌入式作業系統:從零開始設計、架構和開發》也曾給了我很多啟發。



數十年深入研究作業系統,他對 Linux、BSD、SunOS 等開源作業系統,以及 Windows 的 NT 內核都非常熟悉,在編譯器,資料庫等基礎架構方面也頗有研究。


嵌入式物聯網需要學的東西真的非常多,千萬不要學錯了路線和內容,導致工資要不上去!

無償分享大家一個資料包,差不多150多G。裡面學習內容、面經、項目都比較新也比較全!某魚上買估計至少要好幾十。

點擊這裡找小助理0元領取:加微信領取資料




可以說,在作業系統領域,他是當之無愧的 KOL,非常有發言權這條路上,會有哪些難點和阻礙,會踩哪些坑,他都了如指掌。

所以,去年聽說彭東在極客時間寫了一個《作業系統實戰45講》專欄,非常意外,當時我第一時間就訂閱了。

最近又開始二刷了,再學一遍還是有很多收穫。最讓我驚喜的是,彭東把「學作業系統不要死看書」的主張貫穿到專欄里,通過配套實驗帶你完成一個OS當你真的動手寫了一個 OS 的時候,對作業系統的理解會是質的飛躍。

下圖是彭東梳理的「簡化版作業系統知識體系」,圖中的每一小塊,都會隨著課程的進行,逐一展開,建議先馬後看。


作業系統簡化知識體系圖


他會帶你從 0 到 1,一步步實現一個基於 x86 平台的 64 位多進程的作業系統—— Cosmos,你將擁有一個屬於自己的作業系統內核,對 Linux 內核的理解也會更加透徹。

跟著學下來,作業系統架構設計能力會大幅提升,還可以學到系統級別的軟體編程技巧,這對我們拓展技術深度和廣度是大有裨益的。

最重要的是,求職面試也會成為加分項,自己動手寫過作業系統,真有「飄」的資本,簡歷自然脫穎而出。



記得當時這門課程上線兩個月,訂閱量就超 10000 訂閱了,現在已經將近 50000 人學習了這個結果其實並不意外,畢竟,業界大牛手把手帶著寫 OS 的機會實在太難得。

我在追更的同時,也不禁佩服,彭東海量的知識儲備和極佳的表達能力。要知道,越是底層的知識越不好講透:要用通俗易懂的語言,把複雜的作業系統「講」出來;要注意細節與重點的把握和梳理;要把複雜的內容,交付給各個不同思想層次,不同思維方式的人。


隨便截了幾個評價,供參考:



不得不說,彭東太會講了,不僅把枯燥的原理講得明明白白,講述中還充滿魔力,吸引我深挖下去,這門課還有幾個不得不提的特色。


1.「保姆級」圖示+代碼解析,小白也適用


為了方便「計算機小白」理解,快速上手實操,課程中加入了大量的圖示和詳細的代碼注釋,足以看出彭東的用心,也能感受到他的「內功深厚」。


比如下面的虛擬內存數據結構設計圖,計算機結構示意圖,文件系統框架圖和進程狀態切換流程圖等,篇幅限制,這裡僅是冰山一角,專欄中還有大量圖示和知識導圖。



再比如,課程中的代碼示例,這個詳細程度的代碼注釋,是比較少見的。


摘自《作業系統實戰 45講》第9講

瞧一瞧-Linux的自旋鎖和信號量如何實現?


2. 邊學邊練,對比分析,強化理解 Linux


在介紹每個內核組件實現時,都會先講清原理,再帶你基於設計理解去動手實現;然後與 Linux內核的實現做前後對比。既能邊學邊練,又能幫你從「上帝視角」審視 Linux 內核。




3. 配套源碼,真正動手「run」起來


專欄中的每一講,都會匹配可以工作的代碼,傳在 gitee 上;可以跟著課程一步步實現,也可以直接使用每節課提供的代碼進行調試,直到最終實現一個作業系統。


實際上,動手「run」起來,哪怕只是讀和 clone 老師的代碼,也會對作業系統有更深一層的理解。


Cosmos系統運行演示


4. 開源計劃,新的挑戰


為了把課程內容實踐得更好,最近彭東還整了個「大計劃」 —— 籌備建立一個開源社區,把 Cosmos 運作成一個開源項目,專欄的讀者都有望優先成為第一批 contributer。

為拋棄歷史包袱,未來完整的 Cosmos 會同時開源系統和 CPU 源碼,還會考慮根據需求定製晶片。據彭東透露,他邀請到了非常優秀的晶片架構師,來根據作業系統架構特點設計 CPU,想想就很「浪漫」了!


此外,專欄讀者都可以免費加入彭東的「作業系統交流群」,他經常在群里答疑解惑,這裡還有很多技術內功深厚的大佬,相互交流探討,光看聊天記錄,都能學到不少。



訂閱後在課程詳情頁,點擊連結即可入群


編輯小姐姐也經常在群里出沒,鼓勵督促,可以說是伴隨式的學習了,我加過的交流群不少,這個群確實非常難得,大佬雲集,知識密度高,氣氛活躍,學習體驗也很好。


說了這麼多,來看看課程各章節的知識點和精彩看點吧。




原文連結:https://mp.weixin.qq.com/s/WawO7vQ9Z8Ak-JyMPZALww

轉載自:嵌入式與Linux那些事

原文連結:嵌入式必知必會-作業系統原理(附源碼)

本文來源網絡,免費傳達知識,版權歸原作者所有。如涉及作品版權問題,請聯繫我進行刪除。

關鍵字: