6.5 資料結構以及選擇
linux中最重要的資料結構:鍊錶、佇列、紅黑樹。如何在**中具體選擇使用哪種資料結構。
如果對資料集合的主要操作是遍歷資料,就使用鍊錶。事實上沒有資料結構可以提供比線性演算法複雜度更好的演算法遍歷元素,應該用最簡單的資料結構完成簡單工作。當效能並非首要考慮因素時,或者當需要儲存相對較少的資料項時,或者需要和核心中其他使用鍊錶的**互動時,優先選擇鍊錶。
如果**符號生產者/消費者模式,則使用佇列,特別是如果要乙個定長緩衝。佇列會使得新增和刪除項的工作簡單有效。同時佇列也提供了fifo語義,而這也正是生產者/消費者用例的普遍需求。另乙個方面,如果需要儲存乙個大小不明的資料集合,那麼鍊錶可能更合適,因為可以動態新增任何數量的資料項。
如果需要儲存大量資料,並且迅速檢索,那麼使用紅黑樹。紅黑樹可確保搜尋時間複雜度是對數關係,同時也能保證按序遍歷時間複雜度是線性關係。雖然比其他資料結構負責一些,但其記憶體開銷情況並不是太糟。但是如果沒有執行太多次時間緊迫的查詢操作,則紅黑樹可能不是最好選擇。這種情況最好使用鍊錶。
備註:只有當尋遍所有核心提供的資料結構都不能滿足時,需要自己設計資料結構。
核心資料結構
關於開發驅動重要的核心資料結構,方便自己理解 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...