2014-02-18 29 views
1

我讀的書「Linux內核開發」,並找到了一些功能,使我困惑配對,如羅列如下:alloc_pages()由__free_pages()

struct page *alloc_pages(gfp_t gfp_mask, unsigned int order) 
void __free_pages(struct page *page, unsigned int order) 

unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order) 
void free_pages(unsigned long addr, unsigned int order) 

的問題是使用兩個在函數名稱中加下劃線,以及函數如何配對。 1.什麼時候linux內核在其函數名中使用兩個下劃線? 2.爲什麼alloc_pages與__free_pages配對,但不是free_pages?

+0

http://stackoverflow.com/questions/9432111/kernel-naming-convention-questions – Jeyaram

回答

1

正如你可以看到:

alloc_pages()/ __free_pages()以 「頁*」(頁描述符)作爲參數。 它們通常是在某些基礎內核代碼內部使用,如頁面錯誤處理程序,它們希望操作頁面描述符而不是內存塊內容。 ()/ free_pages()以「unsigned long」(內存塊的虛擬地址)作爲參數 它們可以被希望使用內存塊本身的代碼使用,在分配之後,您可以讀取/寫入這個內存塊。

至於他們的名字和雙下劃線「__」,你不需要打擾太多。有時候,內核函數在第一次編寫時就沒有太多考慮就隨便命名。當人們認爲名稱不合適時,但後來這些函數在內核中已經被大量使用,而內核人員只是懶惰地改變它們。

+0

哈哈!內核人是懶惰的! – hao