vma ops fault, fixup userfault

本文详细介绍了内核中vma(虚拟内存区域)的vm_ops操作,包括在mmap时如何赋值,以及在close调用中的处理。当访问vma对应的虚拟地址时,若发生缺页,do_page_fault和__do_page_fault会调用vm_ops->fault或pmd_fault。对于VM_IO和VM_PFNMAP类型的vmas,fixup_user_fault用于处理不能由get_user_pages处理的情况,直接操作纯PFN进行内存管理。
摘要由CSDN通过智能技术生成
const struct vm_operations_struct vma_vm_ops = {
        .open           = vma_open,
        .close          = vma_close,
        .mprotect       = vma_mprotect,
        .pagesize       = vma_pagesize,
        .access         = vma_access,
        .fault          = vma_fault, // 处理 pte fault
        .pfn_mkwrite    = vma_pfn_mkwrite,
        .huge_fault     = vma_huge_fault,
        .pmd_fault      = vma_pmd_fault, // 处理 pmd fault
};

1,vma_vm_ops 赋值

fd = open(DEV_PATH, O_RDWR | O_SYNC); // 为设备文件赋值 struct file_operations fops;

用户调用 mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, pgoff); // fd 为设备 fd

[1310694.282035
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值