好久沒有動筆寫文章了,這段時間經歷了蠻多事情的。這段時間自己寫了一兩個基于不同指令集的Linux
內核,x86
和RISC-V
。期間也去做了一些嵌入式相關的工作,研究了一下ARM
指令集架構。
雖然今年九月份我就要申請了,具體申請AI
方向還是機器人、嵌入式、操作系統(tǒng)、體系結構亦或是網絡、安全、虛擬化還不知道到底要申請哪個,還沒定下來,感覺比較迷茫,感覺什么都蠻喜歡的,都挺感興趣的,都可以做,因為興趣比較廣泛,大學這幾年都有所研究。但是不論如何,未來我的研究方向還是會使用到Linux
的,而且未來的我的工作也肯定會和Linux
相關,所以研究Linux
內核對我肯定是好處的。
其次,雖然我自己寫過操作系統(tǒng)內核,但我自己的內核各方面都是調簡單的實現(xiàn)的,完全沒有硬件抽象層
(Hardware Abstraction Layer
)、體系抽層
(Architecture Abstraction Layer
)這些讓操作系統(tǒng)更加通用的設計;實現(xiàn)的算法也都是最簡單的算法,沒有Linux
中的多級隊列調度器
、CFS調度器
……可能也正是因為自己寫過這些代碼,所以就想看看Linux
大神是如何實現(xiàn)同樣的功能的,想從他們的代碼中學習。
最后,雖然我對于操作系統(tǒng)這門課程的內容掌握的可能會比較深入,相比于只是上了這門課的學生而言,我自己從系統(tǒng)的啟動,再到開啟分頁機制、構建內核線程等等內容可能會很熟悉,但是卻距離工作使用仍然有不小的距離,例如前幾天面試了快手的內核實習生,結果問到glibc
的內容時候一概不知。所以深感自己的不足,還是需要實習??赡芪夷壳熬褪穷A訓練好的一個參數,還需要finetune
到工作上去??。
因此,我決定詳細閱讀一下Linux
的內核源碼,既是滿足提高自己的碼力,也是出于自己的興趣,同時也對未來的科研、學習、工作有益。
一、Linux內核體系架構
在開始閱讀Linux
源碼學習之前,需要明白Linux
內核的體系結構,搞清楚我們學習的對象。
Linux
內核體系結構如下:
- 最底層是硬件設備。這一部分的工作是硬件工程師、嵌入式工程師的任務,不是我們要學習的內容
-
中間是內核空間。
Linux
內核運行在這一個空間下,因此這就是我們要學習的內容 -
最上面是用戶空間。用戶程序通過
Linux
內核提供的系統(tǒng)調用來實現(xiàn)諸多功能,例如用戶自己寫的程序、glibc
、虛擬機
……這一部分也不是我們要學習的內容
所以,只有運行在內核空間中的Linux
內核才是我們要學習的對象。
二、學習路線
1. 學習方法
從上面的圖就能看出來,Linux
內核是一個很龐大的工程,內部能夠分成多個不同的組件,因此我們學習Linux
內核的方法,其實是分模塊的逐個學習。例如:
- 我們學習
Linux
的線程管理,那么我們就會學習Linux
用于描述線程的結構體和宏,例如:task_struct
、container_of
…… - 而后我們學習
Linux
線程管理相關的函數,例如:thread_yield
、thread_block
、switch_to
…… - 最后我們學習
Linux
線程管理的相關策略,例如:多級隊列調度、CFS
調度器,以及根據實際應用場景進行優(yōu)化的策略……
而針對每個模塊的學習,其實就是搞清楚這個模塊的宏和函數的作用,再搞清楚對應的調用邏輯。
2. 學習路線
Linux
內核由五大主要子系統(tǒng)組成,它們之間有關系如下:
對應的,我計劃未來將要學習的模塊有:文章來源:http://www.zghlxwxcb.cn/news/detail-471647.html
- 進程管理模塊
- 內存管理模塊
- 網絡模塊
- 文件系統(tǒng)
- 進程通信模塊
最后準備做一些機器人嵌入式相關的裁剪之類的項目文章來源地址http://www.zghlxwxcb.cn/news/detail-471647.html
到了這里,關于Linux內核源碼分析 1:Linux內核體系架構和學習路線的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!