帧数=页数(linux)?

帧数=页数(linux)?,linux,linux-kernel,paging,virtual-address-space,Linux,Linux Kernel,Paging,Virtual Address Space,我正在研究linux设备驱动程序,发现页数等于帧数。 每一页映射到每一帧。它说,只要程序需要内存,它就会分配页 但在操作系统书籍中,我发现虚拟地址被分成页面,这些页面被加载到框架中。那个么页面的数量怎么能和框架的数量相等呢 以上哪项是正确的?linux如何在页表中存储有关虚拟、页、帧映射的信息 我完全糊涂了。物理页面称为页面框架(您可以称之为框架)。术语页面是为虚拟内存中的页面保留的 内核将虚拟内存划分为大小相等的块。物理内存也被划分为相同大小的页(页帧) 例如,如果我们有4GB的RAM,在32

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

但在操作系统书籍中,我发现虚拟地址被分成页面,这些页面被加载到框架中。那个么页面的数量怎么能和框架的数量相等呢

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


我完全糊涂了。

物理页面称为
页面框架
(您可以称之为框架)。术语
页面
是为虚拟内存中的页面保留的

内核将虚拟内存划分为大小相等的块。物理内存也被划分为相同大小的页(页帧)

例如,如果我们有4GB的RAM,在32位体系结构上,这意味着:1048576页帧大小为4KB

继续,

对于每个页面帧(物理页面),内核维护一个结构
struct page
。此结构在
linux/mm_types.h
()中定义,此结构包含名为
mapping
struct address_space*mapping
)的成员,该成员指定页框所在的地址空间。还有一个名为
index
的成员,它表示此映射内的偏移量

所有结构页都保存在全局
mem\u map
数组中。内核使用该数组来了解虚拟内存和物理内存之间的所有关联

最后,为了将虚拟地址转换为物理地址,内核使用
asm-i386/page.h
中定义的宏
virt_to_page()
,该宏指向
pfn_to_page
()

在举个例子之前,让我们看看32位体系结构中地址的布局

|10位-目录| 10位-页表| 12位-偏移量|

让我们看一个将内存虚拟地址转换为物理地址的示例:

希望这有帮助

问候