static inline int get_order(unsigned long size)
while (size);
return order;
}
上面這個演算法是從核心源**摘抄下來的,其中page_shift是乙個巨集,定義的大小為12,這段**的含義是
返回關聯在當前平台的大小的分配級別, 根據 page_size. 這個引數必須是 2 的冪, 並且返回值至少是 0.
明白了這個原理,這個函式還可以改造成以下演算法,求乙個數是2的多少次冪。
static inline int get_order(unsigned long size)
while (size);
return order;
}
於是可以寫出下面的乙個例項:
#include #define page_shift 12
static inline int get_order(unsigned long size)
while (size);
return order;
}int main(void)
執行結果:
5
Linux核心中的list for each
在linux核心原始碼中,經常要對鍊錶進行操作,其中乙個很重要的巨集是list for each entry 意思大體如下 假設只有兩個結點,則第乙個member代表head,list for each entry的作用就是迴圈遍歷每乙個pos中的member子項。巨集list for each e...
Linux核心中的Namespace
linux核心中的namespace提供了乙個輕量級的基於系統呼叫層面的虛擬化解決方案。相比傳統的使用 vmware,qemu,xen,kvm,hurd的虛擬 圖1所示 基於namespace的輕量級虛擬具有易使用,易管理,無需硬體虛擬化支援,低 成本等優點。圖 1.namespace又稱conta...
linux核心中的 config
經過make menuconfig 生成 config 決定哪些驅動編譯到核心,哪些驅動編譯為模組 那為什麼呢?舉個例子分析一下 eg 在.config 中有 config dm9000 y grep config dm9000 r 1.c檔案中 arch arm mach s5pv210 mach...