歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> Linux文化 >> 如何通過一個物理頁的page結構得到該物理頁的地址?

如何通過一個物理頁的page結構得到該物理頁的地址?

日期:2017/2/27 12:12:28   编辑:Linux文化

通過一個物理頁的page結構如何得到該物理頁的地址?

>>> 此貼的回復 >> 如果我們擁有一個邏輯地址,可通過定義在 中的宏 _ _pa() 返回與其關聯的物理地址。我們也可以使用 _ _va() 宏將物理地址映射回邏輯地址,但只能用於低端內存頁。

>>> 此貼的回復 >> 用page_address宏

>>> 此貼的回復 >> 從全局變量mem_map[]數組中搜索出該page的數據結構,那個下標就是物理頁面的序號,所以在低位補上12個0之後就是物理頁面的起始地址了。不知道是不是這樣?

參考:中第42頁的一句話:內核中有個全局變量mem_map,整個數組就代表著全部物理頁面。因此,頁面表項的高20位對於軟件和MMU硬件有著不同的意義。對於軟件,這是一個物理頁面的诒,將這個用作下標就可以從mem_map找到代表這個物理頁面的page數據結構。對於硬件,則在低位補上12個0後就是物理頁面的起始地址。

>>> 此貼的回復 >> page_address(struct page *); 返回的就是page->virtual 即內核虛擬地址

如果頁是屬於ZONE_NORMAL 或者 ZONE_DMA 返回的就是內核邏輯地址, 和物理地址差一個常熟


Copyright © Linux教程網 All Rights Reserved