当前位置: 首页 > Linux

Android(IPC)进程间通信一:详解Binder的由来?

时间:2023-04-06 01:59:55 Linux

完整原文:http://tryenough.com/android-...Android开发的进程间通信,整个Android应用依赖binder作为底层通信机制。linux中提供的进程间通信方式并没有binder机制,那么android中为什么要单独创建这种通信方式呢?带着这个问题,继续阅读。Linux中进程相关的概念Linux将系统内存分为用户空间和内核空间两部分:用户空间:普通应用程序运行在用户空间,不能使用某些系统功能,不能直接访问硬件,不能直接访问内核空间。内核空间:系统的核心软件将运行在更高的权限级别,它们驻留在受保护的内存空间中,拥有访问硬件设备的所有权限。用户程序只能运行在用户空间,用户空间访问内核空间的唯一途径就是系统调用。Linux用户程序和进程在Linux中,所有用户程序都作为进程执行。进程之间存在父子关系,表示同一个用户程序启动的多个同步任务。所有进程形成一个以init为根的树状结构,因为Linux内核没有提供直接创建新进程的系统调用。所有剩下的进程都是init进程通过fork机制创建的。新进程是从旧进程复制自身得到的,称为fork。fork是一个系统调用。每个进程在内存中分配自己的空间(内存空间,包括栈、堆、全局静态区、文本常量区、程序代码区)。进程之间资源隔离:进程隔离是为了保护进程的执行,互不干扰。进程隔离技术使用虚拟地址空间,即进程A的虚拟地址与进程B的虚拟地址不同,从而防止进程A向进程B写入数据信息。完整原文:http://tryenough.com/android-...因为进程隔离,进程A和进程B无法直接通信。但是在开发中,难免会遇到进程通信的情况(比如应用程序无法在进程间传递数据的场景)。Inter-processcommunication(IPC)不同的进程虽然不能直接在用户空间进行通信,但是它们共享一个内核空间。显然,当一个用户进程要与另一个用户进程通信时,可以通过内核空间来完成。Linux中常见的几种进程间通信方式:1.管道(Pipe)和命名管道(namedpipe):管道可以用于具有亲缘关系的进程之间的通信。命名管道克服了管道没有名称的限制。因此,除了管道的功能外,它还允许无关进程之间的通信;2.信号(Signal):信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生,除了进程间通信外,进程也可以向进程自身发送信号;除了支持Unix早期的信号语义函数sigal外,linux还支持语义符合Posix的信号函数sigaction。signal机制也可以统一对外接口,signal函数用sigaction函数重新实现);3.消息队列(messagequeue):消息队列是消息的链表,包括Posix消息队列系统V消息队列。拥有足够权限的进程可以向队列中添加消息,被授予读权限的进程可以从队列中读取消息。消息队列克服了信号携带的信息量小,管道只能携带未格式化的字节流,缓冲区大小有限的缺点。4.共享内存:它使多个进程可以访问同一个内存空间,这是最快的可用IPC形式。它是为其他通信机制的低效而设计的。它常与信号量等其他通信机制结合使用,以实现进程间的同步和互斥。5、信号量:主要用作进程间和同一进程的不同线程间的同步手段。6、套接字(Socket):一种更通用的进程间通信机制,可用于不同机器之间的进程间通信。最初由Unix系统的BSD分支开发,现在通常可移植到其他类Unix系统:Linux和SystemV变体都支持套接字。完整原文:http://tryenough.com/android-...以上6种是内核中的程序:进程A向内核中的程序发起请求,内核中的程序将请求转发给进程B、从而实现进程间通信。Android中的Binder诞生了。Android系统通过Linux的动态可加载内核模块增加了一个内核模块运行在内核空间。用户进程之间的通信可以通过这个模块作为桥梁来完成。也就是我们后面要讲的内容:Binder驱动。Google通过添加新的内核模块完成进程间通信协议的实现,然后使用binder驱动调用新的内核模块为上层应用提供接口,最后在framework层封装这个接口提供一个javaAPI调用接口。为什么Android系统需要实现一个进程间通信协议Binder?在移动设备上,Binder的传输效率和可操作性都非常好。Binder机制可以很好的实现Client-Server架构。Binder机制的安全性很高。传统方式不严格验证通信双方的身份,只是建立在上层协议上;例如Socket通信ip地址是客户端手动填写的,可以伪造;Binder机制支持来自协议本身的通信。通信双方进行身份验证,大大提高了安全性。感谢阅读,本系列将继续打造android中进程通信的具体用法。欢迎前来观看。完整原文:http://tryenough.com/android-...推荐阅读Android开发艺术探索