1.面向對象的思想,尤其是oopc的實現方式。
2.設計模式。
這兩點需要內核源碼學習者不僅要會c和匯編,還要接觸一門面向對象的語言,比如c++/java/python等等任意一門都行,起碼要了解面向對象的思想。
另外linux內核是c實現的,那么還得接觸oopc,看c語言實現面向對象的概念和實現套路。
還有設計模式,用來抵抗變化,簡單來說就是隨著變化不重構代碼,而是擴展就夠了。
如果沒有這2點基礎知識,那么面對linux內核某些模塊源碼時,你只用你c語言知識和面向過程的思想,你只會感到很困惑——你也只能看到,這是指針,這是函數指針,這是回調,這是計數——但是這些結構形式、這些組織形式,你會感到難以理解,“為啥會這樣子結構?”“為啥會這樣子組織?”“感覺怪怪的”“算了,先不管了”“它就是這樣的”“可能比較特殊吧”,你想破腦袋也難以看清楚,只能看到一塊塊磚,但看不到由這些磚塊堆砌出來房子或者大廈的模樣。
如果有上述2點基礎,你就會看到新世界——“啊!這是繼承”“啊!這是多態”“啊!這是接口類”“啊!這是抽象類”“啊!這是this指針”“啊!這是智能指針”“啊!這是設計模式”——也不在困惑代碼數據結構等為何這么組織了——你的眼中不再是“指針,回調,計數”這種一塊塊磚頭了,而是整個房子整個大廈!這樣你就能和設計者所站的高度一樣了,理解起來更加容易輕松。
設備驅動模型
面向對象思想只是個思想,不局限于任何語言,那些說c語言不能用的人,建議看看linux內核源碼尤其是linux內核設備驅動模型。
調度器
比如調度器算法,就采用了策略模式的設計模式。
linux內核設計模式
比如有文章寫:
linux內核所用設計模式
https://blog.csdn.net/weixin_39757802/article/details/135267875
linux設計模式
oopc
linux內核采用的c編寫的,但是很多模塊(不是全部,rtt是全部采用的oopc)采用了面向對象思想,面向對象在c中的實現就是oopc,它也是有固定實現套路的,不了解相關知識,你看內核源碼也很吃力。
面向對象思想使用場景
對于管控大型軟件,是不得不用面向對象思想+面向過程+其他思想等的混合體進行管控。
你看,面向對象的框架下,每個對象的方法內部實現是面向過程的,所以不要排斥面向過程,也不要排斥面向對象,它們都是管理開發軟件代碼的工具。