渭南免费做网站公司,wordpress怎么编辑,邢台房产网,软件项目管理方案文章目录 Android跨进程通信#xff0c;RPC#xff0c;IPC1.IPC原理2.RPC原理2.RPC原理 Android跨进程通信#xff0c;RPC#xff0c;IPC
RPC#xff08;基于IPC实现#xff09;
Android binder就是一个RPC框架#xff0c;在已经启动的一个进程a中#xff0c;访问到进… 文章目录 Android跨进程通信RPCIPC1.IPC原理2.RPC原理2.RPC原理 Android跨进程通信RPCIPC
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协议–告诉驱动帮客户端把这些数据发送给服务端处理