OS 學習框架

StrokMitream發表於2020-01-03

OS 學習框架

這兩天,公眾號、朋友圈都被跨年祝福、年終總結、新年 flag 刷瘋了。我這邊就不跟風了,趁著這跨年的東風,閒聊一下作業系統的學習路徑、方法。

一 概況

在軟體的開發過程中,隨著業務系統的日趨複雜,功能日漸增強,軟體系統的規模也大幅膨脹。更何況是像作業系統這樣的大型軟體系統。

 

截止目前,Linux kernel 最近版本 5.4 ,程式碼已達到 2700 w 行。

圖片來源:Wikipedia

 

另外,據悉現在的 Windows 10 的程式碼量達到了 6500 W 量級。

 

面對如此龐大的系統,如果要從頭到尾一行一行程式碼地看懂,弄明白,不僅僅是難度大的問題,更是十分不切實際的空想。顯然,我們必須找到行之有效的方法才能進一步學習。

二 學習路徑

結合我們的學習目標及作業系統的複雜性,我們首先要做的便是從整體出發,抓住主要矛盾,忽略次要問題,先建立對作業系統的整體的印象。

 

作業系統雖說是理論上的東西,但具體系統的實現確是工程的產物。程式碼上不僅僅只是理論的翻譯,更體現了工程實現上的思想方法。縱觀 Linu kernel ,從系統的架構,到具體的程式碼實現上,無處不透露著工程性。這種風格的程式碼,實在不適合作為作業系統初學者的入門學習。

 

另外,Linux 系統是通用作業系統,在各種體系架構上比如常見的 X86、ARM 架構,另外在 MIPS、PowerPC、SPARC 等眾多小眾硬體架構上都跑得起來。如此廣泛的架構支援,必然是以付出某種代價為前提。這個代價便是系統的複雜性,以及為相容眾多的硬體架構而單獨開發的專用程式碼,比如 /arch/ 目錄下的架構程式碼。這種通用性也意味著核心程式碼中存在為數不少的重複性程式碼。

 

除卻這些,考慮到核心程式碼是作業系統理論的工程實現,必然考慮到了工程中的各種細節問題,比如各種異常處理,特定條件下的可行性問題等等。如果一開始就被這些細節迷惑住,勢必影響到後續進一步的學習。

 

因此,我們不能只見樹木,不見森林。要從整體的角度,站在宏觀層面上,學習這些系統設計背後的思想和考量。只有這樣,才可能更為快速、有效地進入作業系統的學習中。

三 核心模組

作業系統包括記憶體、程式及程式排程、IO 和檔案系統以及驅動這幾大核心模組。

記憶體:

記憶體,用於儲存 CPU 執行程式程式碼所需的資料。記憶體管理演算法很多,從簡單的連續記憶體分配,到分段和分頁機制,各種方法都有各自的優點和缺點。為特定的系統選擇合適的記憶體管理方法取決於很多因素,尤其是系統的硬體設計。

 

記憶體這塊,還有一個很重要的概念是虛擬記憶體。透過虛擬記憶體技術,應用程式可以使用比實際實體記憶體大得多的記憶體空間 。另外,虛擬記憶體技術將記憶體抽象成一個巨大的、統一的儲存空間,進而將使用者看到的邏輯記憶體與實體記憶體分開。這樣便極大地便利了對記憶體的訪問控制以及在程式間的檔案和地址空間共享。不過,虛擬記憶體的實現並不很容易,如果使用不當可能會大大地降低效能。

程式和程式排程:

程式,是對執行中的程式及其所擁有的資源(如 CPU、記憶體、檔案、IO 裝置等)的抽象。程式是作業系統理論中很重要一個概念。程式這一塊,主要包括程式操作(程式建立、程式終止),程式排程(各種排程演算法),以及未來提高資源利用率、避免死鎖而進行的程式間的通訊和同步。

IO 與檔案系統:

計算機本就是為解決計算問題而設計的,所以輸入輸出(IO)是計算機系統的基本功能模組之一。計算機對輸入的資料進行計算後,輸出結果到輸出裝置或檔案。<br />檔案系統提供了儲存和訪問計算機作業系統和所有使用者的程式和資料的機制。檔案系統永久地駐留在外存上,外存可以永久地儲存大量資料。檔案系統設計有兩個不同的問題,其一是建立資料結構和演算法將邏輯檔案系統對映到物理外存裝置上;其二是如何定義檔案系統對使用者的介面。

驅動:

作業系統往往支援眾多的外設,而這些硬體裝置又需要執行特殊指令和處理中斷等特權,所以使用者應用程式一般不能直接和硬體通訊。裝置驅動程式則承擔了硬體互動的工作,同時也為應用程式和核心中其他的部分訪問這些裝置提供介面。

圖片來源:https://github.com/udoprog/kernelstats<br />
<br />透過上圖可以看到,Linux 核心中裝置驅動程式程式碼佔了總程式碼量的一半左右。可見驅動程式規模之大。不過,這些驅動程式的程式碼樹大都相似,區別只在具體裝置的控制方式上而已。

 

未來已來,將至已至。新的一年,讓我們只爭朝夕,不負韶華,一起沖沖衝!


除了這裡,你還可以在其他地方找到我:
微信公眾號『閒話作業系統』

『知乎專欄』:https://zhuanlan.zhihu.com/chattingOperatingSystem
『簡書』:https://www.jianshu.com/u/c9afa4fbc38e
『語雀』:https://www.yuque.com/chuanshuidishi/chattingos

相關文章