linux那些事之page fault(do_fault)(5)

本文详细探讨了Linux内核中处理page fault的过程,从do_fault函数开始,涉及do_read_fault、do_cow_fault和do_shared_fault等关键步骤。分析了文件映射的判断标准和预加载策略,解释了如何处理读、私有写和共享写page fault,以及相应的页表操作和内存管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

do_fault为 文件page fault处理,当vma被具体映射到某个文件使,发生page fault将会被认为是文件page fault:

static vm_fault_t handle_pte_fault(struct vm_fault *vmf)
{
    ... ...
    
  	if (!vmf->pte) {
		if (vma_is_anonymous(vmf->vma))
			return do_anonymous_page(vmf);
		else
			return do_fault(vmf);
	}

    ... ...
}

当pte表为空,即之前没有做过映射,且是文件映射,会调用do_fault处理。

文件映射判断标准

vma_is_anonymous函数为判断匿名映射还是文件映射标准,当为true时为匿名映射,否则为文件映射:

static inline bool vma_is_anonymous(struct vm_area_struct *vma)
{
	return !vma->vm_ops;
}

vma->vm_ops 为NULL 即为匿名映射,否则为文件映射。

do_fault

do_fault函数处理过程中关键函数:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huo的藏经阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值