linux核心基礎層的學習(1)

來源:互聯網
上載者:User

linux核心基礎層的學習(1)

一:核心基礎層資料結構
1:雙向鏈表list
a):鏈表的定義

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

b):container對象和list_entry

#define container_of(ptr,type,member){ \ const typeof(((type *)0->member) *_mptr = (ptr); \ (type*)((char*)_mptr-offset(type,member));})
#define list_entry(ptr,type,member) \ container_of(ptr,type,member)

對雙向鏈表的詳細介紹請參考我的部落格:

linux核心list.h的學習

2:hash鏈表
a):定義

struct hlist_head{ struct hlist_head *first;}

b):hash鏈表庫
與list相同

請參考下面文章的後面部分就是hash鏈表的內容:

linux核心list.h的學習

3:紅/黑樹狀結構

a):實質上是自平衡二叉樹
b):定義在rbtree.c檔案中(靜待部落格更新,對rbtree的介紹)
c):應用情境
主要用在記憶體管理,IO調度演算法等實現了紅/黑樹狀結構

4:radix輸–基樹

a):定義在/lib/radix_tree.c中
b):radix樹是一種空間換時間的資料結構,通過空間的冗餘減少了時間上的消耗
(靜待部落格更新,對radix_tree的介紹)
c):page cache的管理使用了radix tree

二:核心基礎層的同步機制
1:自旋鎖
a):作用
(1):如果資料未鎖,那麼就擷取鎖並運行,如果資料已鎖,那麼就一定旋轉(其實是反覆執行一條指令)
(2):單一處理器環境(非搶佔式核心)下,自旋鎖其實不起作用
(3):單一處理器,搶佔式核心環境下,自旋鎖起的作用就是禁止搶佔
b):自旋鎖的調用
(1):spin_lock
(2):spin_unlock

2:核心訊號量

a):定義在檔案semaphore.h檔案裡
b):semaphore和mutex
(1):sema_init:計數可以為多
(2):init_mutex:計數為1的訊號量
c):訊號量的操作
(1):up:釋放訊號量
(2):down:擷取訊號量,如果不能擷取,則進入睡眠狀態
(3):down_trylock:擷取訊號量,如果不能擷取則立即返回,進程不進入睡眠狀態

注意:
自旋鎖和訊號量的區別
1:自旋鎖可以用在中斷處理函數和tasklet等不可睡眠的情境,而訊號量不行
2:可睡眠的情境既可以使用訊號量,也可以使用自旋鎖,自旋鎖通常用在輕量級情境

3:同步機制–原子變數
a):原子變數提供了一種原子的資料結構,對這種資料結構的讀寫不可被細分和打斷
b):原子變數提供的調用
(1):atomic_add:加一個整數到原子變數
(2):automic_sub:從原子變數減去一個整數
(3):automic_set:設定原子變數的數值
(4):automic_read:讀取原子變數的數值
4:同步機制–completion
a):completion提供了一種等待完成的機制
b):提供的調用
(1):wait_for_completion:等待操作完成
(2):complete:完成的訊號
5:其他核心同步機制
a):CPU變數 DEFINE_PER_CPU
b):RCU鎖
c):順序鎖

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.