[转]深入理解Linux RPC - 从Linux RPC到Android Binder
2021-12-05 11:29:34 Author: blog.csdn.net(查看原文) 阅读量:18 收藏

课程简介

随着项目复杂度的增加,现实中的很多项目都会涉及到远程过程调用(RPC)的问题,这些远程过程也许是同一设备上的不同进程,也许分属于物理上分割的不同设备。如何灵活高效地实现这些远程调用,是很多项目都会面临的挑战。

  • 本课程首先通过对远程过程调用一般性原理的解释和基本框架的介绍,使大家理解远程过程调用的整体结构和主要流程。

  • 接下来本课程会对RPC发展过程中的部分重要方案进行介绍,使大家了解这些不同方案的设计思想、主要特点和适用范围,在不同的项目中能够根据需求进行合理抉择。

  • 最后,我们会将Android Binder作为具体案例进行解剖,对其整体架构、运作机制等进行全面、深入、详尽的学习,使大家深入了解其实现细节,理解Binder的设计特点,掌握Binder的运作原理。在牢固掌握其实现的基础上,可以对类似技术做到触类旁通,快速掌握。

课程共4节课,全长约4小时,课程已全部上线,无需等候

上课形式:


  • 视频课程(可无限次数回看)

  • 课后实战,练习和解答(在自己的电脑上进行实际操作)

  • 加入课程讨论答疑群。

老师简介

曾昭毅:武汉理工大学计算机应用技术硕士毕业

曾在群硕软件、深圳仙苗科技有限公司担任软件开发经理、软件研发总监等职,是在实战中成长起来的从单板嵌入式到大型企业级应用系统集成的全栈式工程师。

具有丰富的Arm体系Linux及Android系统移植经验,对基于I2C、SPI、USB、AC97、I2S、SDIO/EMMC、UART等总线的各种设备如LCD、触摸屏、3G/4G模块、Wifi、GPS、摄像头、HDMI、CODEC等驱动移植有深厚的掌握。

b416464bf1087a5e79af2fc105a31f60.png 

远程过程调用


  • 什么是RPC

  • 什么是IPC

  • 本课程RPC的定义——跨进程过程调用

  • Linux RPC实例

  • RPC整体架构

  • RPC各组成部分功能及运作原理

    • IDL/Interface

    • Client/Server

    • Proxy/Stub

    • Server register

    • 其他

a7ae5280940d551c286fce9078e78b5b.png 

部分远程过程调用方案 


  • RPC模式

    • 支持语言

    • 主要结构

    • 关键特性

    • ONC RPC

    • Corba

    • EJB

    • Web service

    • Dubbo

    • Json-RPC

  • IPC模式

    • Android Binder

    • D-Bus

  • 各方案主要特性对比

b88c3268d82928a5451936d458491f40.png 

实例分析——Android Binder详解


  • Binder主要特点

  • 整体结构

  • Native层(C++/C)

    • Service注册

    • 隐含ServiceManager接口获取过程

    • ServiceManager启动流程

    • App/Zygote启动时Binder相关初始化

    • ServiceManager类结构

    • 掌控全局的IInterface.h

    • 关键类结构

    • 系统启动准备工作

    • Binder调用流程

  • Native层(C++/C)

    • Service注册流程

    • Service接口获取流程

    • Service调用过程

    • Binder调用流程(续前)

    • Binder线程管理

    • Binder一次数据拷贝机制

  • Java层

    • 关键类结构

    • Java service获取流程 - ServiceManager

    • Service注册流程

    • Java service获取流程 - ActivityManager

  • AIDL

bf2dca99437c352d654b3c164d3bee86.png 

实验、练习和解答


  1. 用Linux RPC实现加法和greet函数,greet函数接收一个字符串格式的名字如“Mike”,返回字符串“Hello Mike”。(提示:Linux RPC只支持单参数,传递多参数可利用struct实现)

  2. a. 用D-Bus实现加法和greet函数;b. 参照Linux RPC格式,根据自己对RPC机制的理解,手动实现对2.a.中所完成接口的RPC封装。

  3. 利用WebService实现上述加法和greet函数。

  4. 分析Binder在进程间通过一次拷贝机制传递数据时,发送方是否需要将待发送数据放入自己与binder驱动进行mmap的内存区域?放与不放有什么影响?

  5. 创建一个Android应用,利用AIDL生成对应的Java类,画出生成类的类图。

报名方法:

c2367f737aeff4dd394cbb920240596c.png

详情也可扫描如下二维码添加客服咨询:

8f285f614df01ad5ac809698344bb019.png


文章来源: https://blog.csdn.net/21cnbao/article/details/121724592
如有侵权请联系:admin#unsafe.sh