當建立乙個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,不過書上介紹這...