Android-面试中常问的MMAP到底是啥东东?原理及应用解析

本文深入探讨了Android中的Binder机制,尤其是mmap如何实现一次拷贝的进程间通信。通过分析内核函数和内存映射过程,揭示了Binder如何在用户空间和内核空间创建共同映射,从而避免数据在用户空间和内核空间之间的冗余拷贝。
摘要由CSDN通过智能技术生成

unsigned long (*get_area)(struct file *, unsigned long,
unsigned long, unsigned long, unsigned long);

get_area = current->mm->get_unmapped_area;
if (file && file->f_op && file->f_op->get_unmapped_area)
get_area = file->f_op->get_unmapped_area;
addr = get_area(file, addr, len, pgoff, flags);

return error ? error : addr;
}

current->mm->get_unmapped_area一般被赋值为arch_get_unmapped_area_topdown,

unsigned long
arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
const unsigned long len, const unsigned long pgoff,
const unsigned long flags)
{
struct vm_area_struct *vma;
struct mm_struct *mm = current->mm;
unsigned long addr = addr0;
int do_align = 0;
int aliasing = cache_is_vipt_aliasing();
struct vm_unmapped_area_info info;

addr = vm_unmapped_area(&info);

return addr;
}

先找到合适的虚拟内存(用户空间),几经周转后,调用相应文件或者设备驱动中的mmap函数,完成该设备文件的mmap,至于如何处理处理虚拟空间,要看每个文件的自己的操作了。

这里有个很关键的结构体

const struct fil

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值