Linux核心中的有關Page的演算法

2021-07-25 07:59:23 字數 642 閱讀 4679

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...