我正在學習linux設備驅動程序,發現頁數等於幀數。 每個頁面映射到每個frame.It說,就像程序需要內存時,它會分配頁面。是幀數=頁面數(linux)?
但是在OS書籍中,我發現像虛擬地址分成頁面,這些頁面被加載到框架中。那麼頁面的數量如何等於框架?
以上哪一項是正確的? linux如何在頁表中存儲關於虛擬,頁面,框架映射的信息?
我完全困惑。
我正在學習linux設備驅動程序,發現頁數等於幀數。 每個頁面映射到每個frame.It說,就像程序需要內存時,它會分配頁面。是幀數=頁面數(linux)?
但是在OS書籍中,我發現像虛擬地址分成頁面,這些頁面被加載到框架中。那麼頁面的數量如何等於框架?
以上哪一項是正確的? linux如何在頁表中存儲關於虛擬,頁面,框架映射的信息?
我完全困惑。
物理頁面被稱爲page frames
(您可以稱它們爲框架)。術語page
保留爲虛擬內存中的頁。
虛擬內存被內核分成大小相等的塊。物理內存也被分成相同大小的頁面(頁面框架)。
例如,如果我們具有4GB的RAM,在32位體系結構,這意味着:尺寸的1048576個幀4KB
讓我們繼續,
對於每一頁幀(物理頁)內核保持結構struct page
。該結構在linux/mm_types.h
(https://github.com/torvalds/linux/blob/master/include/linux/mm_types.h)中定義,該結構包含名爲mapping
(struct address_space *mapping
)的成員,該成員指定頁面框架所在的地址空間。還有一個名爲index
的成員,它表示此映射中的偏移量。
所有結構頁都保存在全局mem_map
數組中,內核使用此數組知道虛擬內存與物理內存之間的所有關聯。
最後,將虛擬地址轉換爲物理一個內核使用asm-i386/page.h
定義的宏virt_to_page()
其指向pfn_to_page
(https://github.com/torvalds/linux/blob/master/include/asm-generic/memory_model.h)。
一個例子之前,讓我們看到一個地址的佈局在32位架構
| 10位 - 目錄| 10位 - 頁表| | 12位 - 偏移|
讓我們來看看內存轉換虛擬地址到物理中的一個例子:
http://img11.imageshack.us/img11/9426/pagingexample.png
希望這有助於。
問候。
謝謝,現在我明白了。 – Suri 2012-09-03 10:38:55
@Suri:不客氣。 – TOC 2012-09-03 12:06:05