那曲檬骨新材料有限公司

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>
    黄金城娱乐城| 做生意什么花风水好| 百家乐官网投注方法| 万豪国际开户| 凌龙棋牌游戏大厅| 立博百家乐的玩法技巧和规则| 百家乐庄闲下载| 壹贰博百家乐官网娱乐城| 可以玩百家乐官网的博彩网站 | 老虎机技巧| 德州扑克高级教程| 百家乐2号技术打法| 百家乐翻天qvod| 梦幻城百家乐的玩法技巧和规则| 澳门百家乐论| 真人娱乐场注册送现金| 网上赌钱| 沙龙百家乐官网怎申请| E乐博百家乐官网娱乐城| 24 山杨公斗首择日吉凶| 嬴澳门百家乐的公式| 博天堂百家乐的玩法技巧和规则 | 一二博国际| 百家乐官网网站可信吗| 澳门百家乐官网赌场娱乐网规则 | 碧桂园太阳城户型图| 大富豪棋牌游戏中心| 网上百家乐官网心得| 百家乐官网开线| 毕节市| 百家乐官网十赌九诈| 百家乐作弊演示| 大发888缺少casino组件common| 棋牌中心| 百家乐官网博彩优惠论坛| 百家乐官网真人游戏攻略| 百家乐的注码技巧| 大发888 dafa888游戏| 百家乐官网玩法与规则| 百家乐官网那个娱乐城信誉好| 柬埔寨百家乐的玩法技巧和规则|