linux內核源碼學習所需基礎

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,它也是有固定實現套路的,不了解相關知識,你看內核源碼也很吃力。

面向對象思想使用場景

對于管控大型軟件,是不得不用面向對象思想+面向過程+其他思想等的混合體進行管控。

你看,面向對象的框架下,每個對象的方法內部實現是面向過程的,所以不要排斥面向過程,也不要排斥面向對象,它們都是管理開發軟件代碼的工具。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41124.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41124.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41124.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MyBatis 框架核心及面試知識要點

1、什么是 MyBatis? MyBatis 是一款優秀的支持自定義 SQL 查詢、存儲過程和高級映射的持久層框架,消除了 幾乎所有的 JDBC 代碼和參數的手動設置以及結果集的檢索 。 MyBatis 可以使用 XML,或注解進 行配置和映射,MyBatis 通過將參數映射到配置的 SOL,形…

FastSpeech2中文語音合成就步解析:TTS數據訓練實戰篇

參考github網址: GitHub - roedoejet/FastSpeech2: An implementation of Microsoft’s “FastSpeech 2: Fast and High-Quality End-to-End Text to Speech” 數據訓練所用python 命令: python3 train.py -p config/AISHELL3/preprocess.yaml -m confi…

ida動態調試-cnblog

ida動態調試 傳遞啟動ida服務 android_server在ida\dbgsrv目錄中 adb push android_server /data/local/tmp/chmod 755 /data/local/tmp/android_server /data/local/tmp/android_serveradb forward tcp:23946 tcp:23946ida報錯:大多是手機端口被占用 報錯提示: …

java面試-java基礎(下)

文章目錄 一、和equals區別?二、hashcode方法作用?兩個對象的hashCode方法相同,則equals方法也一定為true嗎?三、為什么重寫equals方法就一定要重寫hashCode方法?四、Java中的參數傳遞時傳值呢還是傳引用?五…

期末上分站——計組(3)

復習題21-42 21、指令周期是指__C_。 A. CPU從主存取出一條指令的時間 B. CPU執行一條指令的時間 C. CPU從主存取出一條指令的時間加上執行這條指令的時間。 D. 時鐘周期時間 22、微型機系統中外設通過適配器與主板的系統總線相連接,其功能是__D_。 A. 數據緩沖和…

數據庫可視化管理工具dbeaver試用及問題處理。

本文記錄了在內網離線安裝數據庫可視化管理工具dbeaver的過程和相關問題處理方法。 一、下載dbeaver https://dbeaver.io/download/ 筆者測試時Windows平臺最新版本為:dbeaver-ce-24.1.1-x86_64-setup.exe 二、安裝方法 一路“下一步”即可 三、問題處理 1、問…

【深度學習】vscode 命令行下的debug

其實我一直知道vscode可以再命令行下進行debug。 比如 python aaa.py --bb1 --cc2 以前的做法是 去aaa.py 寫死bb和cc 然后直接debug。 直到今天我遇到這個: hydra hydra.main(version_baseNone, config_name/home/justin/Desktop/code/python_project/WASB-SBDT-m…

Truffle學習筆記

Truffle學習筆記 安裝truffle, 注意: 雖然目前truffle最新版是 5.0.0, 但是經過我實踐之后, 返現和v4有很多不同(比如: web3.eth.accounts; 都獲取不到賬戶), 還是那句話: “nodejs模塊的版本問題會搞死人的 !” 目前4.1.15之前的版本都不能用了, 只能安裝v4.1.15 npm instal…

新手學Cocos報錯 [Assets] Failed to open

兩個都在偏好設置里面調(文件下面的偏好設置): 1.設置中文? 2.報錯 [Assets] Failed to open? 這樣在點擊打開ts文件的時候就不會報錯,并且用vscode編輯器打開了, 同樣也可以改成你們自己喜歡…

LabVIEW在圖像處理中的應用

abVIEW作為一種圖形化編程環境,不僅在數據采集和儀器控制領域表現出色,還在圖像處理方面具有強大的功能。借助其Vision Development Module,LabVIEW提供了豐富的圖像處理工具,廣泛應用于工業檢測、醫學影像、自動化控制等多個領域…

Apache Seata應用側啟動過程剖析——RM TM如何與TC建立連接

本文來自 Apache Seata官方文檔,歡迎訪問官網,查看更多深度文章。 本文來自 Apache Seata官方文檔,歡迎訪問官網,查看更多深度文章。 Apache Seata應用側啟動過程剖析——RM & TM如何與TC建立連接 前言 看過官網 README 的第…

Android最近任務顯示的圖片

Android最近任務顯示的圖片 1、TaskSnapshot截圖1.1 snapshotTask1.2 drawAppThemeSnapshot 2、導航欄顯示問題3、Recentan按鍵進入最近任務 1、TaskSnapshot截圖 frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotController.java frameworks/base/cor…

IPython 性能評估工具的較量:%%timeit 與 %timeit 的差異解析

IPython 性能評估工具的較量:%%timeit 與 %timeit 的差異解析 在 IPython 的世界中,性能評估是一項至關重要的任務。%%timeit 和 %timeit 是兩個用于測量代碼執行時間的魔術命令,但它們之間存在一些關鍵的差異。本文將深入探討這兩個命令的不…

2786. 訪問數組中的位置使分數最大

2786. 訪問數組中的位置使分數最大 題目鏈接:2786. 訪問數組中的位置使分數最大 代碼如下: //參考鏈接:https://leetcode.cn/problems/visit-array-positions-to-maximize-score/solutions/2810335/dp-by-kkkk-16-tn9f class Solution { public:long …

vue-router 4匯總

一、vue和vue-router版本: "vue": "^3.4.29", "vue-router": "^4.4.0" 二、路由傳參: 方式一: 路由配置:/src/router/index.ts import {createRouter,createWebHistory } from &quo…

探索 WebKit 的緩存迷宮:深入理解其高效緩存機制

探索 WebKit 的緩存迷宮:深入理解其高效緩存機制 在當今快速變化的網絡世界中,WebKit 作為領先的瀏覽器引擎之一,其緩存機制對于提升網頁加載速度、減少服務器負載以及改善用戶體驗起著至關重要的作用。本文將深入探討 WebKit 的緩存機制&am…

代碼隨想錄leetcode200題之額外題目

目錄 1 介紹2 訓練3 參考 1 介紹 本博客用來記錄代碼隨想錄leetcode200題之額外題目相關題目。 2 訓練 題目1&#xff1a;1365. 有多少小于當前數字的數字 解題思路&#xff1a;二分查找。 C代碼如下&#xff0c; class Solution { public:vector<int> smallerNumb…

卷積神經網絡(CNN)和循環神經網絡(RNN) 的區別與聯系

卷積神經網絡&#xff08;CNN&#xff09;和循環神經網絡&#xff08;RNN&#xff09;是兩種廣泛應用于深度學習的神經網絡架構&#xff0c;它們在設計理念和應用領域上有顯著區別&#xff0c;但也存在一些聯系。 ### 卷積神經網絡&#xff08;CNN&#xff09; #### 主要特點…

解決C++編譯時的產生的skipping incompatible xxx 錯誤

問題 我在編譯項目時&#xff0c;產生了一個 /usr/bin/ld: skipping incompatible ../../xxx/ when searching for -lxxx 的編譯錯誤&#xff0c;如下圖所示&#xff1a; 解決方法 由圖中的錯誤可知&#xff0c;在編譯時&#xff0c;是能夠在我們指定目錄下的 *.so 動態庫的…

python函數和c的區別有哪些

Python有很多內置函數&#xff08;build in function&#xff09;&#xff0c;不需要寫頭文件&#xff0c;Python還有很多強大的模塊&#xff0c;需要時導入便可。C語言在這一點上遠不及Python&#xff0c;大多時候都需要自己手動實現。 C語言中的函數&#xff0c;有著嚴格的順…