Linux核心資料結構

2021-06-25 22:49:21 字數 1155 閱讀 7173

一、概述

linux核心提供了一些常用的資料結構並建議開發者盡量重用,而不需要再去實現一些類似的資料結構。這篇部落格主要描述一下linux核心提供的鍊錶、佇列、對映及二叉樹這四種常用資料結構。當然這裡提到的每一種資料結構要說清楚都需要不少的篇幅,而這篇博文只是簡要分析一下linux核心設計的理念,以便在選用時能做到心中有數。

二、鍊錶

鍊錶是最常用的一種資料結構,用來組織一系列的資料。鍊錶不同於靜態陣列,它的長度可變,且通過指標來指向前或後的節點元素,所以每個節點之間記憶體可能都不連續,這也使得它的插入和刪除操作變得極為簡單。

linux核心定義了自己的鍊錶資料結構,不同於其它一些系統將鍊錶的前後指標植入某個結構體,linux將乙個鍊錶的結構體(list_head)植入需要構成鍊錶的節點結構體中。如下形式:

struct list_head;

struct mynode;
linux通過container_of()巨集來獲取list_head鍊錶嵌入的inode指標,從而實現對inode元素的鍊錶組織。

linux提供了一些列操作鍊錶的函式定義在標頭檔案裡面,包括新增、刪除、遍歷等常規操作。

linux這種鍊錶組織形式提供了一些統一的操作方法,避免了核心程式設計時鍊錶的多樣化設計帶來的困惑,使得開發工程師可以更多的專注於其它設計,並減少了大量的編碼工作,這種設計理念很值得學習。其實這種設計在生活中也存在活生生的例子,比如掛鉤式窗簾做好滑軌和環扣以後,可以隨意掛上不同的窗簾,當需要更換窗簾時就不再需要拆掉滑軌等重新製作,而只要更換窗簾布即可。

三、佇列

任何作業系統都少不了一種模型,那就是生產者——消費者模型,佇列就是實現這種模型的基礎資料結構,它是一種fifo的模型,用來完美解決生產消費的關係。linux核心通用佇列實現叫做kfifo,它定義在/kernel/kfifo.c中,其宣告在檔案中。

linux的佇列同其他系統定義的佇列差不多,提供了一列的函式供開發者呼叫,包括初始化、推入資料、取出資料、peek資料、銷毀佇列以及查詢佇列狀態等函式。具體見kfifo.c原始碼檔案。

四、對映

對映通常也叫做關聯陣列,其實就是一組唯一鍵組成的集合,每個鍵對應必然關聯某個特定的值,對映必須提供下面三個操作函式:add(key, value); remove(key); value = lookup(key);

核心資料結構

關於開發驅動重要的核心資料結構,方便自己理解 driver object typedef struct driver object cshort type cshort size 乙個鍊錶,記錄了該驅動建立的所有裝置物件 pdevice object deiceobject ulong flags ...

核心資料結構

核心需要儲存i o元件使用的狀態資訊,可以通過若干核心資料結構比如說檔案開啟表等來完成 unix系統中在讀取乙個使用者檔案的時候,核心需要去檢查下快取,然後再去決定是否執行磁碟i o,在讀乙個程序映象時候,核心只需要從記憶體當中讀取資料,也就是說這些操作都可以呼叫read 函式來完成,但是語義不同 ...

核心資料結構

這部分包含了修改核心模組,所以要使用到核心鏈結表資料結構。首先你得定義乙個包含元素的結構去插入鍊錶。下邊這段 用c語言定義了生日結構 struct birthday 注意struct list head list。結構list head在包含目錄的裡有定義。它的作用就是嵌入包含列表節點的鏈結表。li...