linux核心部件分析(一) 連通世界的list

2021-10-04 10:23:43 字數 1885 閱讀 9019

在linux核心中,有一種通用的雙向迴圈鍊錶,構成了各種佇列的基礎。鍊錶的結構定義和相關函式均在include/linux/list.h中,下面就來全面的介紹這一鍊錶的各種api。

struct list_head ;
這是鍊錶的元素結構。因為是迴圈鍊錶,表頭和表中節點都是這一結構。有prev和next兩個指標,分別指向鍊錶中前一節點和後一節點。

#define list_head_init(name)   

#define list_head(name) \

struct list_head name = list_head_init(name)

static inline void init_list_head(struct list_head *list)

在初始化的時候,煉表頭的prev和next都是指向自身的。

static inline void __list_add(struct list_head *new,  

struct list_head *prev,

struct list_head *next)

static inline void list_add(struct list_head *new, struct list_head *head)

static inline void list_add_tail(struct list_head *new, struct list_head *head)

雙向迴圈鍊錶的實現,很少有例外情況,基本都可以用公共的方式來處理。這裡無論是加第乙個節點,還是其它的節點,使用的方法都一樣。

另外,鍊錶api實現時大致都是分為兩層:一層外部的,如list_addlist_add_tail,用來消除一些例外情況,呼叫內部實現;一層是內部的,函式名前會加雙下劃線,如__list_add,往往是幾個操作公共的部分,或者排除例外後的實現。

static inline void __list_del(struct list_head * prev, struct list_head * next)  

static inline void list_del(struct list_head *entry)

static inline void list_del_init(struct list_head *entry)

list_del是鍊錶中節點的刪除。之所以在呼叫__list_del後又把被刪除元素的next、prev指向特殊的list_position1list_position2,是為了除錯未定義的指標。

list_del_init則是刪除節點後,隨即把節點中指標再次初始化,這種刪除方式更為實用。

static inline void list_replace(struct list_head *old,  

struct list_head *new)

static inline void list_replace_init(struct list_head *old,

struct list_head *new)

list_replace是將鍊錶中乙個節點old,替換為另乙個節點new。從實現來看,即使old所在地鍊錶只有old乙個節點,new也可以成功替換,這就是雙向迴圈鍊錶可怕的通用之處。

list_replace_init將被替換的old隨即又初始化。

工業機械人核心部件發展還需要加強

國際機構預計,到明年底,中國有望成為全球第二大機械人市場。但在滬啟工業機械人的第19屆中國國際小電機技術展會傳出訊息,作為製造業大國的中國,國內用於機械人的微型特種電機80 依賴國外產品,機械人各種 關節 中的關鍵零部件遠未自主可控,成為機械人產業高速發展的大瓶頸。世界上工業機械人保有量達160萬台...

音訊監控叫好又叫座,核心部件拾音器怎麼裝

目前,音訊監控已廣泛應用在公共設施當中,一套完整的音訊監控系統包括聲音採集部分 語音降噪處理部分 網路錄音部分 語音對講部分 聲音智慧型分析部分。通過音訊監控的場景分析來判斷公共場景下的異常行為,這種技術是基於各類異常聲音在時域 頻域的特徵,結合模式識別的分類方法可以對異常事件報警。拾音器的安裝 一...

音訊監控叫好又叫座 核心部件拾音器怎麼裝?

目前,音訊監控已廣泛應用在公共設施當中,一套完整的音訊監控系統包括聲音採集部分 語音降噪處理部分 網路錄音部分 語音對講部分 聲音智慧型分析部分。通過音訊監控的場景分析來判斷公共場景下的異常行為,這種技術是基於各類異常聲音在時域 頻域的特徵,結合模式識別的分類方法可以對異常事件報警。拾音器的安裝 一...