看了好几本书上的binder章节,上来就是直接框架,贴实现代码和binder驱动代码,讲的云里雾里.
雨里雾里是指:
1. 很多书并没说清楚传统IPC是怎么实现的,基本都是一句实现复杂带过。(啥玩意?)
2. 没有讲明白,传统IPC为什么需要两次复制?binder为什么只要一次?的问题
3.书上讲的有些东西,偏向代码讲解一样,翻译一遍代码,不适合基础知识阅读
(为什么,是什么,怎么干,应该三步走)
我反正看书觉得书上讲的好难理解,看过好几本书,可能是自己智商不够...
偶然看到一篇介绍binder的博客,前因后果写的很清楚,觉得是写的最好的,值得一看
https://blog.csdn.net/lzverygood/article/details/103078490
一些概括:
为什么传统IPC通信要复制两次,binder只要一次 ?
答:
传统IPC:
1.应用处于用户空间,内核处于内核空间。两个进程通信,需要内核空间作为中转。
2.驱动中实现了copy_from_user, copy_to_user系统调用,也就是先从一个进程的用户空间复制到内核空间,
然后从内核空间复制到另一个进程的用户空间。
3.所以是两次
binder:
binder的实现,书上说的是内存共享。底层实现是内存映射mmap()。
也就是内核中两个进程共享一块内存。一块内存分别映射到两个用户空间,一个用户进程对内存的读写,
就等同于对另一个用户进程的用户空间的读写。宏观上是直接一次的。