Linux內核實現了自己的鏈表數據結構,它的設計與傳統的方式不同,非常巧妙也很通用。
我們先看一下傳統的定義
struct xxx{
void * p;
struct xxx * next,* prev;
}
這種方式將數據和鏈表指針定義在一起,整個鏈表也是通過整個結構體連接起來的。 這種鏈表不具有通用性,換一個不同的結構體需要重新定義。

內核使用了不同的方式,它把鏈表的指針抽象出來,獨立定義。
struct list_head{
struct list_head *next, *prev;
};
使用的時候嵌入到結構體中即可。

這種方式將數據和鏈表剝離開來,去除了鏈表和數據的耦合,這樣就可以定義統一的接口,使得鏈表的管理和操作變得非常簡潔。

內核在
大家發現一個問題沒有,我們如何獲得鏈表所在結構體其他數據呢?
內核使用container_of()函數實現,這個函數能夠通過結構體內部成員的地址找到結構體本身的地址,這樣就可以通過鏈表的地址得到數據結構體的地址,然后就可以獲得其他數據了。 這些在鏈表的操作方法中都已經實現了。
鏈表在內核中非常重要,比如所有進程就是通過鏈表管理,進程的子進程、兄弟進程也是鏈表管理,這些在進程描述符中都可以看到。

一個結構中可以包含多個不同的鏈表節點,分別從屬于不同的鏈表,構成一個錯綜復雜的網絡結構。

小結:

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
內核
+關注
關注
4文章
1467瀏覽量
42872 -
Linux
+關注
關注
88文章
11758瀏覽量
219009 -
數據結構
+關注
關注
3文章
573瀏覽量
41584 -
結構體
+關注
關注
1文章
131瀏覽量
11371 -
鏈表
+關注
關注
0文章
80瀏覽量
11057
發布評論請先 登錄
相關推薦
熱點推薦
數據結構中最簡單的鏈表
數據結構作為嵌入式工程師必修課程之一,今天,我們就來講一講數據結構中最簡單的鏈表,包含鏈表的初始化、插入和遍歷操作。 鏈表在項目開發中使用的
發表于 06-13 17:40
?709次閱讀
Linux內核中的數據結構的一點認識
大家都知道linux內核是世界上優秀的軟件之一,作為一款優秀的軟件,其中的許多的設計都精妙之處,十分值得學習和借鑒。今天我們就帶大家看一下內核中的數據結構中一點設計。打開
發表于 04-20 16:42
OpenHarmony——內核IPC機制數據結構解析
通信的數據結構,可以在任務間傳遞消息內容或消息的地址。內核用隊列控制塊來管理消息隊列,同時又使用雙向環形鏈表來管理控制塊。隊列控制塊: 管理具體消息隊列的數據塊,
發表于 09-05 11:02
OpenHarmony——內核IPC機制數據結構解析
通信的數據結構,可以在任務間傳遞消息內容或消息的地址。內核用隊列控制塊來管理消息隊列,同時又使用雙向環形鏈表來管理控制塊。隊列控制塊:管理具體消息隊列的數據塊,
發表于 09-08 11:44
Linux 內核數據結構:位圖(Bitmap)
除了各種鏈式和樹形數據結構,Linux內核還提供了位圖接口。位圖在Linux內核中大量使用。下面的源代碼文件包含這些
發表于 05-14 17:24
?3902次閱讀
你知道Linux內核數據結構中雙向鏈表的作用?
Linux 內核提供一套雙向鏈表的實現,你可以在 include/linux/list.h 中找到。我們以雙向鏈表著手開始介紹
發表于 05-14 17:27
?2163次閱讀
Linux0.11-進程控制塊數據結構
嵌入式Linux中文站收集整理Linux0.11版本內核學習筆記,本文分析了Linux進程控制模塊的數據結構。
發表于 05-15 15:22
?1245次閱讀
Linux內核的鏈表數據結構
評論