99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux內(nèi)核的鏈表數(shù)據(jù)結(jié)構(gòu)

CHANBAEK ? 來源:頭條號(hào)科G棧 ? 作者:頭條號(hào)科G棧 ? 2023-03-24 11:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Linux內(nèi)核實(shí)現(xiàn)了自己的鏈表數(shù)據(jù)結(jié)構(gòu),它的設(shè)計(jì)與傳統(tǒng)的方式不同,非常巧妙也很通用。

我們先看一下傳統(tǒng)的定義

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

這種方式將數(shù)據(jù)和鏈表指針定義在一起,整個(gè)鏈表也是通過整個(gè)結(jié)構(gòu)體連接起來的。 這種鏈表不具有通用性,換一個(gè)不同的結(jié)構(gòu)體需要重新定義。

內(nèi)核使用了不同的方式,它把鏈表的指針抽象出來,獨(dú)立定義。

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

使用的時(shí)候嵌入到結(jié)構(gòu)體中即可。

這種方式將數(shù)據(jù)和鏈表剝離開來,去除了鏈表和數(shù)據(jù)的耦合,這樣就可以定義統(tǒng)一的接口,使得鏈表的管理和操作變得非常簡(jiǎn)潔。

內(nèi)核在

大家發(fā)現(xiàn)一個(gè)問題沒有,我們?nèi)绾潍@得鏈表所在結(jié)構(gòu)體其他數(shù)據(jù)呢?

內(nèi)核使用container_of()函數(shù)實(shí)現(xiàn),這個(gè)函數(shù)能夠通過結(jié)構(gòu)體內(nèi)部成員的地址找到結(jié)構(gòu)體本身的地址,這樣就可以通過鏈表的地址得到數(shù)據(jù)結(jié)構(gòu)體的地址,然后就可以獲得其他數(shù)據(jù)了。 這些在鏈表的操作方法中都已經(jīng)實(shí)現(xiàn)了。

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

一個(gè)結(jié)構(gòu)中可以包含多個(gè)不同的鏈表節(jié)點(diǎn),分別從屬于不同的鏈表,構(gòu)成一個(gè)錯(cuò)綜復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)。

小結(jié):

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1416

    瀏覽量

    41416
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11509

    瀏覽量

    213720
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    40741
  • 結(jié)構(gòu)體
    +關(guān)注

    關(guān)注

    1

    文章

    130

    瀏覽量

    11113
  • 鏈表
    +關(guān)注

    關(guān)注

    0

    文章

    80

    瀏覽量

    10835
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    數(shù)據(jù)結(jié)構(gòu)中最簡(jiǎn)單的鏈表

    數(shù)據(jù)結(jié)構(gòu)作為嵌入式工程師必修課程之一,今天,我們就來講一講數(shù)據(jù)結(jié)構(gòu)中最簡(jiǎn)單的鏈表,包含鏈表的初始化、插入和遍歷操作。 鏈表在項(xiàng)目開發(fā)中使用的
    發(fā)表于 06-13 17:40 ?527次閱讀

    Linux內(nèi)核鏈表操作

    Linux內(nèi)核鏈表操作本文詳細(xì)分析了 2.6.x 內(nèi)核鏈表結(jié)構(gòu)的實(shí)現(xiàn),并通過實(shí)例對(duì)每個(gè)
    發(fā)表于 08-29 11:13

    Linux Kernel數(shù)據(jù)結(jié)構(gòu):鏈表

    Linux Kernel數(shù)據(jù)結(jié)構(gòu)鏈表原創(chuàng) 2016年10月20日 22:58:25標(biāo)簽:LINUX/kernel/鏈表
    發(fā)表于 09-25 16:41

    數(shù)據(jù)結(jié)構(gòu)鏈表的基本操作

    嵌入式學(xué)習(xí)基礎(chǔ)-數(shù)據(jù)結(jié)構(gòu)鏈表的基本操作鏈表節(jié)點(diǎn)采用結(jié)構(gòu)體的方式進(jìn)行定義,下面是最基礎(chǔ)的定義只有一個(gè)數(shù)據(jù)data,*pNext用于指向下一個(gè)節(jié)
    發(fā)表于 12-22 08:05

    Linux內(nèi)核中的數(shù)據(jù)結(jié)構(gòu)的一點(diǎn)認(rèn)識(shí)

    大家都知道linux內(nèi)核是世界上優(yōu)秀的軟件之一,作為一款優(yōu)秀的軟件,其中的許多的設(shè)計(jì)都精妙之處,十分值得學(xué)習(xí)和借鑒。今天我們就帶大家看一下內(nèi)核中的數(shù)據(jù)結(jié)構(gòu)中一點(diǎn)設(shè)計(jì)。打開
    發(fā)表于 04-20 16:42

    OpenHarmony——內(nèi)核IPC機(jī)制數(shù)據(jù)結(jié)構(gòu)解析

    通信的數(shù)據(jù)結(jié)構(gòu),可以在任務(wù)間傳遞消息內(nèi)容或消息的地址。內(nèi)核用隊(duì)列控制塊來管理消息隊(duì)列,同時(shí)又使用雙向環(huán)形鏈表來管理控制塊。隊(duì)列控制塊: 管理具體消息隊(duì)列的數(shù)據(jù)塊,
    發(fā)表于 09-05 11:02

    OpenHarmony——內(nèi)核IPC機(jī)制數(shù)據(jù)結(jié)構(gòu)解析

    通信的數(shù)據(jù)結(jié)構(gòu),可以在任務(wù)間傳遞消息內(nèi)容或消息的地址。內(nèi)核用隊(duì)列控制塊來管理消息隊(duì)列,同時(shí)又使用雙向環(huán)形鏈表來管理控制塊。隊(duì)列控制塊:管理具體消息隊(duì)列的數(shù)據(jù)塊,
    發(fā)表于 09-08 11:44

    算法與數(shù)據(jù)結(jié)構(gòu)——雙向鏈表

    第三章為算法與數(shù)據(jù)結(jié)構(gòu),本文為3.3 雙向鏈表。
    的頭像 發(fā)表于 09-19 17:56 ?7556次閱讀
    算法與<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>——雙向<b class='flag-5'>鏈表</b>

    了解Linux通用的雙向循環(huán)鏈表

    linux內(nèi)核中,有一種通用的雙向循環(huán)鏈表,構(gòu)成了各種隊(duì)列的基礎(chǔ)。鏈表結(jié)構(gòu)定義和相關(guān)函數(shù)均在include/
    發(fā)表于 05-07 10:44 ?774次閱讀

    Linux 內(nèi)核數(shù)據(jù)結(jié)構(gòu):位圖(Bitmap)

    除了各種鏈?zhǔn)胶蜆湫?b class='flag-5'>數(shù)據(jù)結(jié)構(gòu),Linux內(nèi)核還提供了位圖接口。位圖在Linux內(nèi)核中大量使用。下面的源代碼文件包含這些
    發(fā)表于 05-14 17:24 ?3629次閱讀

    你知道Linux內(nèi)核數(shù)據(jù)結(jié)構(gòu)中雙向鏈表的作用?

    Linux 內(nèi)核提供一套雙向鏈表的實(shí)現(xiàn),你可以在 include/linux/list.h 中找到。我們以雙向鏈表著手開始介紹
    發(fā)表于 05-14 17:27 ?1996次閱讀

    Linux0.11-進(jìn)程控制塊數(shù)據(jù)結(jié)構(gòu)

    嵌入式Linux中文站收集整理Linux0.11版本內(nèi)核學(xué)習(xí)筆記,本文分析了Linux進(jìn)程控制模塊的數(shù)據(jù)結(jié)構(gòu)
    發(fā)表于 05-15 15:22 ?1055次閱讀

    linux內(nèi)核中l(wèi)list.h文件中的鏈表宏講解

    鏈表宏在linux內(nèi)核、鴻蒙內(nèi)核、rtos和一些開源代碼中用的非常多。鏈表宏是雙向鏈表的經(jīng)典實(shí)現(xiàn)
    的頭像 發(fā)表于 05-23 12:06 ?2202次閱讀

    Linux內(nèi)核代碼中常用的數(shù)據(jù)結(jié)構(gòu)有哪些?

    Linux內(nèi)核代碼中廣泛使用了數(shù)據(jù)結(jié)構(gòu)和算法,其中最常用的兩個(gè)是鏈表和紅黑樹。
    發(fā)表于 07-20 09:39 ?701次閱讀

    Linux內(nèi)核中使用的數(shù)據(jù)結(jié)構(gòu)

    Linux內(nèi)核代碼中廣泛使用了數(shù)據(jù)結(jié)構(gòu)和算法,其中最常用的兩個(gè)是鏈表和紅黑樹。 鏈表 Linux
    的頭像 發(fā)表于 11-09 14:24 ?770次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>中使用的<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>