支持匿名内存页的“struct address_space”是什么?

问题描述 投票:0回答:1

在Linux内核中,

mapping
中有一个名为
struct page
的字段。当该字段是文件的缓冲区高速缓存时,该字段可以表示支持该页面的文件。它也可能是设备支持的页面
swap

我的问题是

匿名内存页的设备

mapping
是什么?这也是一些特殊设备(例如交换设备)吗?谢谢!

仅供参考,我正在阅读 Linux 5.13。

memory-management linux-kernel
1个回答
0
投票

->mapping
struct page
字段实际上可以指向三个不同的事物,奇怪的是,其中两个不是 struct address_space(尽管字段的类型不同)。这在
include/linux/page-flags.h
的评论中进行了解释:

在映射到用户虚拟内存区域的匿名页面上,
    page->mapping
  • 指向其

    anon_vma

    ,而不是 
    struct address_space
    ;
    设置 
    PAGE_MAPPING_ANON
     位来区分它。请参阅
    rmap.h

  • VM_MERGEABLE
  • 区域的匿名页面上,如果启用

    CONFIG_KSM

    PAGE_MAPPING_MOVABLE
     位可以与 
    PAGE_MAPPING_ANON
     一起设置
    少量;然后 
    page->mapping
     指向的不是 
    anon_vma
    ,而是一个私有的
    KSM 与该合并页面关联的结构。请参阅
    ksm.h

  • PAGE_MAPPING_KSM
  • 不带

    PAGE_MAPPING_ANON

     用于非 lru 可移动
    页,然后 
    page->mapping
     指向 
    struct address_space
    
    

  • 当页面是匿名的
并且
映射到用户空间时,

page->mapping指向其anon_vma

,而不是
struct address_space
。因此,指针本身的值不是 
NULL
,但是尝试使用诸如 
page_mapping(page)
之类的函数来获取它,你将得到一个
NULL
。要获得 VMA,需要首先进行一些检查(包括首先检查并删除嵌入到
->mapping
 中的标志)。请参阅功能 
page_get_anon_vma(page)
page_lock_anon_vma_read(page)
    

© www.soinside.com 2019 - 2024. All rights reserved.