3

我正在研究linux设备驱动程序,发现页数等于帧数。每个页面映射到每个帧。它说就像每当程序需要内存时它都会分配页面。

但是在操作系统书籍中,我发现虚拟地址分为页面,这些页面被加载到框架中。那么页面数如何等于框架?

以上哪个是正确的?linux如何在页表中存储有关虚拟、页面、框架映射的信息?

我完全糊涂了。

4

1 回答 1

21

物理页面被称为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数组中,内核使用该数组来了解虚拟内存和物理内存之间的所有关联。

最后,要将虚拟地址转换为物理地址,内核使用virt_to_page()定义的宏asm-i386/page.h指向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

希望这有帮助。

问候。

于 2012-08-03T06:39:51.210 回答