Binder框架(一)基础概念

1.进程

进程是一个在内存中运行的应用程序,每个进程都有自己独立的一块内存空间。是操作系统分配资源的基本单位。

一个进程可以有多个线程,Android系统中,默认一个APP就是一个线程。

2.进程隔离

在操作系统中,进程与进程间的内存和数据都是不共享的。两个进程互不干扰,各自为政。这样做的是为了避免进程间相互操作数据的现象发生,从而引起安全问题。

进程隔离机制的主要实现方式是使用虚拟地址空间,两个进程各自的虚拟地址不同,就实现了内核空间和用户空间的隔离。

为什么要划分空间?

为了系统的安全性考虑,内核空间可以执行CPU的任何指令,普通空间会受限。

因为有的指令很危险,会造成系统崩溃。

3.跨进程通讯

管道
消息队列
信号
共享存储
套接字(SCOKET)

在安卓系统中,最常见的进程间通信就是binder

4.Binder驱动

驱动:指的是设备驱动程序,操作控制硬件设备的接口。

Binder驱动:

Linux 通信机制,比如 Socket,管道都是内核支持的;但是 Binder 并不是 Linux 内核的一部分,它是怎么做到访问内核空间的呢?

Linux 的动态可加载内核模块(LKM,Loadable Kernel Module)机制解决了这个问题。

模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行。这样,Android系统可以通过添加一个内核模块运行在内核空间,用户进程之间的通过这个模块作为桥梁,就可以完成通信了。

所以,在 Android 系统中,这个运行在内核空间的,负责各个用户进程通过 Binder 通信的内核模块叫做 Binder 驱动。

5.binder如何进行通信

内核中提供了binder驱动模块,为进程间通信提供基础框架,如下图:

六、mmap内存映射

用户空间和内核空间之间沟通,合法且唯一的手段,是通过系统调用(System Call),有以下几个常用方法:

方法描述定义位置
open()打开设备文件方法kernel/drivers/android/binder.c
mmap()

memory map,内存映射方法,

实现用户空间和内核空间内存共享。

kernel/drivers/android/binder.c
ioctl()对设备文件实现读,写等一些扩展功能。kernel/drivers/android/binder.c

因为用户进程之间隔离,所以只能借助内核作为辅助,通过拷贝数据实现通讯,这样会有两次拷贝。而binder使用了内存映射(memory map)技术,只拷贝一次就可以实现用户进程之间传递数据。如下图所示:

 

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值