衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux內核的鏈表數據結構

CHANBAEK ? 來源:頭條號科G棧 ? 作者:頭條號科G棧 ? 2023-03-24 11:34 ? 次閱讀

Linux內核實現了自己的鏈表數據結構,它的設計與傳統的方式不同,非常巧妙也很通用。

我們先看一下傳統的定義

struct xxx{
    void * p;
    struct xxx * next,* prev;
}

這種方式將數據和鏈表指針定義在一起,整個鏈表也是通過整個結構體連接起來的。 這種鏈表不具有通用性,換一個不同的結構體需要重新定義。

內核使用了不同的方式,它把鏈表的指針抽象出來,獨立定義。

struct list_head{
     struct list_head *next, *prev;
};

使用的時候嵌入到結構體中即可。

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

內核在

大家發現一個問題沒有,我們如何獲得鏈表所在結構體其他數據呢?

內核使用container_of()函數實現,這個函數能夠通過結構體內部成員的地址找到結構體本身的地址,這樣就可以通過鏈表的地址得到數據結構體的地址,然后就可以獲得其他數據了。 這些在鏈表的操作方法中都已經實現了。

鏈表在內核中非常重要,比如所有進程就是通過鏈表管理,進程的子進程、兄弟進程也是鏈表管理,這些在進程描述符中都可以看到。

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

小結:

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1382

    瀏覽量

    40422
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210387
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40230
  • 結構體
    +關注

    關注

    1

    文章

    130

    瀏覽量

    10872
  • 鏈表
    +關注

    關注

    0

    文章

    80

    瀏覽量

    10598
收藏 人收藏

    評論

    相關推薦

    數據結構中最簡單的鏈表

    數據結構作為嵌入式工程師必修課程之一,今天,我們就來講一講數據結構中最簡單的鏈表,包含鏈表的初始化、插入和遍歷操作。 鏈表在項目開發中使用的
    發表于 06-13 17:40 ?403次閱讀

    Linux內核鏈表操作

    Linux內核鏈表操作本文詳細分析了 2.6.x 內核鏈表結構的實現,并通過實例對每個
    發表于 08-29 11:13

    Linux Kernel數據結構:鏈表

    Linux Kernel數據結構鏈表原創 2016年10月20日 22:58:25標簽:LINUX/kernel/鏈表
    發表于 09-25 16:41

    數據結構鏈表的基本操作

    嵌入式學習基礎-數據結構鏈表的基本操作鏈表節點采用結構體的方式進行定義,下面是最基礎的定義只有一個數據data,*pNext用于指向下一個節
    發表于 12-22 08:05

    Linux內核中的數據結構的一點認識

    大家都知道linux內核是世界上優秀的軟件之一,作為一款優秀的軟件,其中的許多的設計都精妙之處,十分值得學習和借鑒。今天我們就帶大家看一下內核中的數據結構中一點設計。打開
    發表于 04-20 16:42

    OpenHarmony——內核IPC機制數據結構解析

    通信的數據結構,可以在任務間傳遞消息內容或消息的地址。內核用隊列控制塊來管理消息隊列,同時又使用雙向環形鏈表來管理控制塊。隊列控制塊: 管理具體消息隊列的數據塊,
    發表于 09-05 11:02

    OpenHarmony——內核IPC機制數據結構解析

    通信的數據結構,可以在任務間傳遞消息內容或消息的地址。內核用隊列控制塊來管理消息隊列,同時又使用雙向環形鏈表來管理控制塊。隊列控制塊:管理具體消息隊列的數據塊,
    發表于 09-08 11:44

    算法與數據結構——雙向鏈表

    第三章為算法與數據結構,本文為3.3 雙向鏈表
    的頭像 發表于 09-19 17:56 ?7349次閱讀
    算法與<b class='flag-5'>數據結構</b>——雙向<b class='flag-5'>鏈表</b>

    了解Linux通用的雙向循環鏈表

    linux內核中,有一種通用的雙向循環鏈表,構成了各種隊列的基礎。鏈表結構定義和相關函數均在include/
    發表于 05-07 10:44 ?694次閱讀

    Linux 內核數據結構:位圖(Bitmap)

    除了各種鏈式和樹形數據結構Linux內核還提供了位圖接口。位圖在Linux內核中大量使用。下面的源代碼文件包含這些
    發表于 05-14 17:24 ?3506次閱讀

    你知道Linux內核數據結構中雙向鏈表的作用?

    Linux 內核提供一套雙向鏈表的實現,你可以在 include/linux/list.h 中找到。我們以雙向鏈表著手開始介紹
    發表于 05-14 17:27 ?1894次閱讀

    Linux0.11-進程控制塊數據結構

    嵌入式Linux中文站收集整理Linux0.11版本內核學習筆記,本文分析了Linux進程控制模塊的數據結構
    發表于 05-15 15:22 ?995次閱讀

    linux內核中llist.h文件中的鏈表宏講解

    鏈表宏在linux內核、鴻蒙內核、rtos和一些開源代碼中用的非常多。鏈表宏是雙向鏈表的經典實現
    的頭像 發表于 05-23 12:06 ?1939次閱讀

    Linux內核代碼中常用的數據結構有哪些?

    Linux內核代碼中廣泛使用了數據結構和算法,其中最常用的兩個是鏈表和紅黑樹。
    發表于 07-20 09:39 ?541次閱讀

    Linux內核中使用的數據結構

    Linux內核代碼中廣泛使用了數據結構和算法,其中最常用的兩個是鏈表和紅黑樹。 鏈表 Linux
    的頭像 發表于 11-09 14:24 ?544次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b>中使用的<b class='flag-5'>數據結構</b>
    百家乐官网群sun811| 福海县| 肯博百家乐官网的玩法技巧和规则 | 邵东县| 百家乐国际娱乐平台| 百家乐官网终端下载| 水果机遥控| 百家乐太阳城怎么样| 百家乐官网玄机| 猫游棋牌下载| 大发888娱乐场优惠| 百家乐视频游戏注册| 百家乐官网好不好| 百家乐官网游戏全讯网2| 新太阳城工业区| 百家乐投注杀手| 郯城县| kk娱乐城开户| 百家乐如何骗人| 澳门百家乐洗码提成查询| 百家乐官网筹码桌布| 百家乐官网筹码防伪定制| 爱拼| 郑州水果机遥控器| 百家乐事一箩筐的微博| 百家乐游戏机说明书| 免费百家乐官网的玩法技巧和规则 | 太阳百家乐3d博彩通| 百家乐游戏免费| 百家乐官网赌场现金网平台排名| 金榜百家乐官网现金网| 新巴尔虎右旗| 百家乐官网胜率被控制| 网上百家乐官网有没有假| 凯旋门百家乐官网娱乐城| 百家乐官网下注瀛钱法| 南城县| 大发888官网游戏平台| 二八杠高手| 大发888屡败屡战| 大发888娱乐场 手机版|