2020-6-8

每天一个面试小知识Day1

binder与其他IPC通信对比
1 共享内存 通过shmget创建内存共享区,通过shmat进行映射(逻辑地址和物理地址通过页表进行关联) 两个进程用户可以直接通过地址直接访问修改数据,无需数据拷贝,效率最高 缺点:共享内存未提供同步机制,多进程的操作访问较为复杂,得通过信号量方式实现同步访问控制)
2 管道 分匿名和有名管道
匿名管道局限性大,通信双方得是亲缘进程 实现方式 1父进程通过pipe创建管道,得到两个描述符(读端和写端) 2 父进程fork一个子进程,子进程同样得到两个描述符 3 父进程在写端写数据,子进程在读端读数据 缺点:缓冲区大小仅为一个页大小
有名管道:有名管道通过路径名标识,通过mkfifo函数可以指定路径和名称 缺点:读端会循环读数据,如果没有数据可读,NON_BLOCK会导致一直阻塞
3 socket:Linux下的socket为uds通信,需经历socket→binder()→listen()→accept()→read/write()→close()过程 ,整个过程传输效率低,开销大 数据也是两次拷贝过程
4 消息队列:基于链表实现 数据需2次拷贝 从进程a用户空间将数据拷贝到内核的消息列表 从内核消息队列取出数据发送到进程b的用户空间
5 binder通信:binder属于Android独有,通过linux内核动态加载binder驱动。binder的映射通过mmap实现(和shmget有本质区别) 映射 binder_mmap首先会将用户空间的一块地址和内核空间进行映射,内核限制了映射大小4M,当然 上层app将binder的缓存限制在了1M,第二步就是内核空间地址和物理页绑定,还是基于页表映射。
当实际发生数据交换时,进程a将数据通过copy_from_user拷贝到内核缓冲区,进程b和内核有映射关系,就直接可以获取到对应数据了
binder数据交换只需1次拷贝。同时binder本身支持客户端和服务端之间的安全校验(uid/pid),在这点上更是用于上层app之间的数据交换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值