2012-08-02 76 views
2

我正在學習linux設備驅動程序,發現頁數等於幀數。 每個頁面映射到每個frame.It說,就像程序需要內存時,它會分配頁面。是幀數=頁面數(linux)?

但是在OS書籍中,我發現像虛擬地址分成頁面,這些頁面被加載到框架中。那麼頁面的數量如何等於框架?

以上哪一項是正確的? linux如何在頁表中存儲關於虛擬,頁面,框架映射的信息?

我完全困惑。

回答

17

物理頁面被稱爲page frames(您可以稱它們爲框架)。術語page保留爲虛擬內存中的頁。

虛擬內存被內核分成大小相等的塊。物理內存也被分成相同大小的頁面(頁面框架)。

例如,如果我們具有4GB的RAM,在32位體系結構,這意味着:尺寸的1048576個幀4KB

讓我們繼續,

對於每一頁幀(物理頁)內核保持結構struct page。該結構在linux/mm_types.hhttps://github.com/torvalds/linux/blob/master/include/linux/mm_types.h)中定義,該結構包含名爲mappingstruct address_space *mapping)的成員,該成員指定頁面框架所在的地址空間。還有一個名爲index的成員,它表示此映射中的偏移量。

所有結構頁都保存在全局mem_map數組中,內核使用此數組知道虛擬內存與物理內存之間的所有關聯。

最後,將虛擬地址轉換爲物理一個內核使用asm-i386/page.h定義的宏virt_to_page()其指向pfn_to_pagehttps://github.com/torvalds/linux/blob/master/include/asm-generic/memory_model.h)。

一個例子之前,讓我們看到一個地址的佈局在32位架構

| 10位 - 目錄| 10位 - 頁表| | 12位 - 偏移|

讓我們來看看內存轉換虛擬地址到物理中的一個例子:

http://img11.imageshack.us/img11/9426/pagingexample.png

希望這有助於。

問候。

+0

謝謝,現在我明白了。 – Suri 2012-09-03 10:38:55

+0

@Suri:不客氣。 – TOC 2012-09-03 12:06:05