学习 Binder 通信原理的时候,看到下面这段话
Binder 通信的步骤如下所示:
1.Binder 驱动在内核空间创建一个 [数据接收缓存区] 。 2.在内核空间开辟一块 [内核缓存区] ,建立内核缓存区和数据接收缓存区之间的映射关系,以及数据接收缓存区和接收进程用户空间地址的映射关系。 3.发送方进程通过 copy_from_user()函数将数据拷贝 到内核中的内核缓存区,由于内核缓存区和接收进程的用户空间存在内存映射,因此也就相当于把数据发送到了接收进程的用户空间,这样便完成了一次进程间的通信。
整个过程只使用了 1 次拷贝,不会因为不知道数据的大小而浪费空间或者时间,效率更高。
摘自刘望舒的《 Android 进阶指北》
想问下为什么需要开辟两个缓存区,这两个缓存区互相映射的目的是什么,直接使用一个缓存区不行吗?
有没有研究过的大佬解答一二,谢谢~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.