mmap那些事之android property实现

本文介绍了mmap在Android Property中的应用,详细阐述了Android如何利用mmap实现内存共享,以及其在进程间通信中的作用。通过分析映射内存、数据结构和关键代码,揭示了Android属性系统如何确保写操作的互斥和读操作的并发性。
摘要由CSDN通过智能技术生成

mmap的概论

mmap的一大应用就是将内核空间的一段内存映射到各个应用程序的各自的应用地址空间中,然后各个应用程序都可以访问这段内存空间,这就是所谓的内存共享实现进程间的信息的交互。类似于内核的读写锁一样,应用进程对共享内存的访问分为两种:一种是读,一种是写。所有进程的读可以同时并发的访问同一个内存地址,但写跟读是互斥的,即我在读某个内存地址的时候,不能有写的操作,写操作相对于读操作有更高的优先权。并且所有进程对同一个地址的写操作都是互斥的。所以共享内存的实现关键是访问的同步控制。

那么android的property的实现则是利用mmap实现内存共享的一个经典应用实例。android的property为了实现各进程对共享内存写操作的同步,他规定所有对属性变量的写操作请求都会通过socket通讯发送至init后台服务,由init后台服务来处理所有进程的属性变量写请求,这样尽管各个进程可以随意甚至并发的调用设置属性变量的接口,但实际对共享内存进行写操作时,则只会有init后台服务一个入口,在这个init后台服务入口里,实现序列化的写操作,这样就保证了对共享内存的写操作的互斥。

至于属性读跟属性写的互斥则会在后面的代码中有详细介绍

android的property的实现

android的属性系统对应的共享内存所属的文件是/dev/__properties__,在讲详细实现之前,我们先看下该段共享内存映射到各个应用程序的地址空间的分布情况。先看/init进程,执行命令:cat /proc/1/maps


从上面黑色高亮部分,我们看出,这段共享内存映射到/init进程的[b6fef000,b6ff7000]地址空间,该地址空间是属于应用空间(<3G),并且映射的空间大小是32KB(0x8000).我们应该容易想到,所有使用或支持android 属性的进程,都应该映射文件/dev/__properties__

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值