Android进程通信,RPC,IPC

RPC(基于IPC实现

Android binder就是一个RPC框架,在已经启动的一个进程a中,访问进程b中的方法或者函数

IPC

进程数据传输,在b进程中,a进程可以访问b进程中的数据,

1.IPC原理

linux系统每个进程都有自己虚拟内存地址空间,分用户空间内核空间不同进程间的用户空间是不能互相访问的,但是不同进程的内核空间可以映射物理内存地址上,可以共享的。

假设b进程中的内核空间有一个数据,那么它可以映射我们物理内存地址上,才有用,因为linux里面的是虚拟地址a进程可以通过内存映射找到b进程存数据的内存地址

那么用户空间也可以通过内存拷贝内核空间通过copy_from_user拷贝,在a进程的内核空间也就可以查找b内核空间通过用户空间传递内存里面的数据了,但是a进程的用户空间还拿不到这个数据,要调用copy_to_user拷贝用户空间才行。

拷贝两次如何优化

内存映射,在a进程中的用户空间和内核空间找一个内存地址,把这个内存地址同时映射为同一块物理内存,调用mmap函数系统调用函数,进程b中,内核空间和a的内核空间映射同一个内存地址,那么a进程的用户空间就可以通过一次copy_from_user拷贝就拿到了b进程内存的数据,

2.RPC原理

程内存的数据,

2.RPC原理

数据打包解析工作客户端想要访问服务端的方法,那么就要把数据集合起来,通过binder驱动ipc机制传递给b进程,服务端拿到数据进行解析,如何再去调用对应服务端的函数,handle是一个句柄指定了数据要发送给哪个进程,code代表一个int型,代表要调用服务端的哪个函数,传递函数参数binder协议–告诉驱动,帮客户端把这些数据发送给服务处理,,,

原文地址:https://blog.csdn.net/weixin_46039528/article/details/134760168

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_30066.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注