LDD3速記 per CPU變數

2021-06-15 07:02:01 字數 918 閱讀 6558

當建立乙個per-cpu變數時,系統的每個處理器都會有改變量的特有副本

對per-cpu的訪問無需鎖定

可以儲存在快取記憶體

eg.:網路子系統(的計數器)

#include define_per_cpu(type, name);

/* 編譯期間建立per-cpu變數 */

declare_per_cpu(type, name);

/* 在模組中訪問per-cpu變數前需宣告 */

per_cpu(variable, int cpu_id)//訪問其他處理器的變數副本

get_cpu_var(variable)//訪問當預處理器的變數副本,可直接賦值或操作

put_cpu_var(variable)//結束訪問

/*使用編譯期間的per-cpu變數

由於沒有鎖,可能會被搶占,因此需要上面的函式訪問、修改、返回per-cpu變數

涉及多個處理器的per-cpu變數時需採用鎖機制

*/void *alloc_percpu(type);

void *__alloc_percpu(size_t size, size_t align);//滿足特定對齊要求

void free_percpu(void *variable);

/* 分配及返回 */

int get_cpu( );

void put_cpu( );

per_cpu_ptr(void *variable, int cpu_id)

/* 使用動態分配的per-cpu變數 */

export_per_cpu_symbol(per_cpu_var);

export_per_cpu_symbol_gpl(per_cpu_var);

/* 將per-cpu變數匯出給模組 */

LDD3 帶有引數的模組

include include include static char who who static int time 1 module param time,int,s irugo module param who,charp,s irugo static int hello init void ...

LDD3學習筆記(11) 記憶體分配

kmalloc分配記憶體快並且不清零獲得的記憶體區,記憶體區保留它原來的內容,分配的區在物理記憶體中連續。include void kmalloc size t size,int flags void kfree void obj 記憶體分配的最常用介面.include gfp user gfp k...

LDD3原始碼學習日記《四》

日記三不小心被刪了。哎,只能在 站裡面自己看了。這部落格80 的功能還是寫給自己看的,其他部分的功能應該是用來練習寫作能力的,留下這一路走來的證據,兩年後回過頭來看看自己當初是怎麼犯低階錯誤的。哈哈。第五章是併發與競態,書上的內容講的主要是訊號量和自旋鎖機制,還有completion,不過書上介紹這...