Android安全模型之Android安全机制(内存管理)

Ashmem匿名共享内存

Android的匿名共享内存(Ashmem)机制基于Linux内核的共享内存,但是Ashmem与cache shrinker关联起来,增加了内存回收算法的注册接口,因此Linux内存管理系统将不再使用内存区域加以回收。Ashmem以内核驱动的形式实现,在文件系统中创建/dev/ashmem设备文件。如果进程A与进程B需要共享内存,进程A可通过open打开该文件,用ioctl命令ASHMEM_SET_NAME和ASHMEM_SET_SIZE设置共享内存的名称 和大小。mmap使用handle获得共享的内存区域;进程B使用同样的handle,由mmap获得同一块内存。handle在进程间的传递可通过 Binder等方式实现。

为有效回收,需要该内存区域的所有者通知Ashmem驱动。通过用户,Ashmem驱动程序,以及Linux内存管理系统的协调,使内存管理更适应嵌入式移动设备内存较少的特点。Ashmem机制辅助内存管理系统来有效管理不再使用的内存,同时通过Binder进程通信机制实现进程间的内存共享。

Ashmem不但以/dev/ashmem设备文件的形式适应Linux开发者的习惯,而且在Android系统运行时和应用程序框架层提供了访问接口。其中,在系统运行时提供了C/C++调用接口,在应用程序框架层提供了Java调用接口。而实际上,应用程序框架层的Java调用接口是通过JNI方法来调用系统运行时的C/C++调用接口的,最后进入到内核空间的Ashmem驱动程序中。

LMK机制

时间: 2024-11-05 23:33:42

Android安全模型之Android安全机制(内存管理)的相关文章

Java中的垃圾回收机制&内存管理

1. Java在创建对象时,会自动分配内存,并当该对象引用不存在的时候,释放这块内存. 为什么呢? 因为Java中使用被称为垃圾收集器的技术来监视Java程序的运行,当对象不再使用时,就自动释放对象所使用的内存. 垃圾收集器是自动运行的,无须显式地请求垃圾收集器,程序运行时,垃圾收集器会不时检查对象的各个引用,并回收无引用对象所占用的内存. 可以调用System类中的静态gc()方法来运行垃圾收集器. 2. Java语言并不要求JVM有gc,也没有规定gc如何工作. Java垃圾回收机制是为所有

Android_对android虚拟机的理解,包括内存管理机制垃圾回收机制。dalvik和art区别

虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 16M ,谈谈加载图片的时候怎么处理大图片的,outmemoryExceptionBitmapFactory.option 垃圾回收,没有引用的对象,在某个时刻会被系统gc掉 . Dalvik和标准Java虚拟机(JVM)首要差别Dalvik 基于寄存器,而 JVM 基于栈.基于寄存器的虚拟机对于编译后变大的程序来说,在它们执行的时候,花费的时间更短.Dalvik和Java运行环境的区别1:Dalvik主要是完成对象生命周期管理,堆栈管理,线

Android性能优化:谈话Bitmap内存管理和优化

最近除了那些忙着项目开发的事情,目前正在准备我的论文.短的时间没有写博客,今晚难得想总结.只要有一点时间.因此,为了凑合用,行.唠叨罗嗦,直接进入正题. 从事Android自移动终端的发展,想必是常常要与内存问题打交道的,说到Android开发中遇到的内存问题,像Bitmap这样的吃内存的大户略微处理不当就非常easy造成OOM,当然,眼下已经有非常多知名的开源图片载入框架,比如:ImageLoader.Picasso等等,这些框架已经能够非常好的攻克了Bitmap造成的OOM问题,尽管这些框架

Android安全模型之Android安全机制(应用权限)

进程沙箱为互不信任的应用程序之间提供了隔离机制,SharedUserID则为具备信任关系的应用程序提供了共享资源的机制.然而,由于用户自行安装的应用程序也不具备可信性,在默认情况下,Android应用程序没有任何权限,不能访问保护的设备API与资源.因此,权限机制是Android安全机制的基础,决定允许还是限制应用程序访问受限的API和系统资源.应用程序的权限需要明确定义,在安装时被用户确认,并且在运行时检查,执行,授予和撤销权限.在定制权限下,文件和内容提供者也可以受到保护. 具体而言,应用程

Android安全模型之Android安全机制(应用程序签名)

所有Android应用程序都必须被开发者数字签名,即使用私有密钥数字签署一个给定的应用程序,以便识别代码的作者,检测应用程序是否发生了改变,并且在相同签名的应用程序之间建立信任,进而使具备互信关系的应用程序安全地共享资源.使用相同数字签名的不同应用程序可以相互授予权限来访问基于签名的API.如果应用程序共享UID,则可以运行在同一进程中,从而允许彼此访问对方的代码和数据. 应用程序签名就需要生成私有密钥与公共密钥对,使用私有密钥签署公共密钥证书.应用程序商店与应用程序安装包都不会安装没有数字证书

Android安全模型之Android安全机制(Android系统分区及加载)

Android设备的分区包括系统分区,数据分区,Cache分区及SD卡分区等.具体概括如下: 1. 系统分区通常加载为只读分区,包含操作系统内核,系统函数库,实时运行框架,应用框架与系统应用程序等,由OEM厂商在出厂时植入,外界不能更改,如此,当系统出现安全问题时,用户可以启动进入所谓的"安全模式",加载只读的系统分区,不加载数据分区中的数据内容,隔离第三方应用程序可能带来的安全威胁. /system/app目录存放系统自带应用程序APK /system/lib目录存放系统库文件. /

进程管理、内存管理、存储管理初步了解

进程管理 进程需要一定的资源(包括CPU时间.内存.文件.I/O设备)以完成其任务.这些资源可以在进程创建时分配给进程,也可以在执行进程时分配给进程.除了在创建时得到各种物理和逻辑资源外,进程还可以接受传输过来的各种初始化数据(输入). 需要注意:程序本省并不是进程,程序是被动的实体,而进程是一个活动的实体. 进程与线程的定义: 进程是具有一定独立功能的程序关于某个数据集合上的依次运行活动,进程是系统进行资源分配和调度的独立单位. 线程是进程的一个实体,是CPU和分配的基本单位.线程自己基本不拥

Android 内存管理机制详解

??嵌入式设备的一个普遍特点是内存容量相对有限.当运行的程序超过一定数量时,或者涉及复杂的计算时,很可能出现内存不足,进而导致系统卡顿的现象.Android 系统也不例外,它同样面临着设备物理内存短缺的困境.对于已经启动过一次的Android程序,再一次启动所花的时间会明显减少.原因在于Android系统并不马上清理那些已经"淡出视野"的程序(比如你调用Activity.finish退出UI界面).它们在一定的时间里仍然驻留在内存中.这样做的好处是明显的,即下一次启动不需要再为程序重新

Android内存管理机制及优化

1.基于Linux内存管理 Android系统是基于Linux 2.6内核开发的开源操作系统,而linux系统的内存管理有其独特的动态存储管理机制.不过Android系统对Linux的内存管理机制进行了优化,Linux系统会在进程活动停止后就结束该进程,而Android把这些进程都保留在内存中,直到系统需要更多内存为止.这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度. 2.Android内存分配机制 与java的垃圾回收机制类似,系