




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android,系统架构与内核实现原理初窥,冯亚刚20120702,初识框架,Android系统框架,Applications(应用程序层)ApplicationFramework(应用程序框架层)Libraries、AndroidRuntime(系统运行库层)Linuxkernel(Linux内核层),应用程序层,Application层是Android提供的核心应用层序包。是已经打包好的。应用层序都是有JAVA语言编写,通过调用应用程序框架层(ApplicationFramework)所提供的API来完成。也可以通过jni的方式开发原生的应用程序。(需要C/C+),应用程序框架层,应用程序框架层为开发人员提供了可以访问核心应用所使用的API框架。也就是说我们开发应用程序时所调用的那些API都是应用程序框架层给提供的。我们不用知道每个API是怎么实现的,知道他是用来做什么的就行。当然,如果你想弄清楚他的实现机制和原理,你可以看这个API的源码。我们看下框架层给我们提供了那些组建给我们调用:ActivityManager:管理应用程序生命周期并提供常用的导航功能。比如:开启应用程序需要的资源和退出应用程序时要释放资源。WindowManager:管理所有开启的窗口程序。ContentProvider:是应用程序可以访问另一个应用程序的数据(如联系人的数据库),也有数据共享的意思。PackageManager:管理所有安装在Android系统中的应用程序。比如:信息查看和卸载应用程序等。还有ViewSystem、NotificationManager、ResourceManager、HardwareServices等等就不全部讲了。,系统运行库层,系统运行库层包括程序库和Android运行库两个部分,下面来分别介绍。,程序库:Android包含一些C/C+库,这些库被Android系统中的不同组件所使用,然后通过应用程序框架层为开发者提供服。下面我们通过一个调用sqlite的例子来看这个流程。,程序库(SQLite),App(对联系人进行增删改查),调用frameworkContentprovider的API,Framework(ContentProvider),通过JNI,Application层,ApplicationFramework层,Librarie层,Android运行库层,由框架图可以看到。Android运行库层又分为核心库和Dalvik虚拟机两个部分。,核心库:核心库提供了Java语言核心库的大多数功能,主要通过JNI的方式向应用程序框架层提供调用底层程序库的接口。Dalvik虚拟机:Dalvik虚拟机是为了能够同时高效的运行多个VMs而实现的。(每个安卓应用程序都在它自己单独的进程中运行。都拥有单独的Dalvik虚拟机。这个我们会在以后的Dalvik虚拟机的时候详解)Dalvik虚拟机依赖Linux的一些功能,比如线程机制和底层的内存管理机制。,Linux内核层,Android依赖于Linux2.6版内核提供的核心系统服务。例如安全、内存管理、进程管理、网络栈、驱动模块等。内核作为一个抽象层,存在于软件栈层和硬件层之间。Android对Linux内核进行了增强,主要在以下方面:硬件时钟(Alarm)内存分配与共享(Ashmem)低内存管理(LowMemoryKiller)Kernel调试(KernelDebugger)日志设备(Logger)AndroidIPC机制(Binder)电源管理(PowerManagement),Android启动流程分析,上面我们讲了安卓的系统架构,下面我们来看下安卓的启动流程。通过启动流程的分析,可以初步的了解安卓系统是怎样从最底层的Linux内核一步一步变成最后的在手机里实现的应用程序的。,Android系统在系统时首先会启动Linux基础系统,然后引导加载LinuxKernel并启动初始化进程(Init)。如图:,LinuxKernel,Init,接着,Init会启动Linux守护进程(daemons)。这个过程主要是启动以下内容:,usbd,usbd,usbd,usbd,Init,在启动Linux守护进程(daemons)的时候同时启动Zygote进程和runtime进程。Zygote进程:初始化一个Dalvik虚拟机实例装载Socket请求所需的类和监听创建虚拟机实例来管理应用程序的进程。Runtime进程:初始化服务管理器注册服务管理器,以它为默认Binder服务的Context管理器,ServiceManager,Zygote,runtime,daemons,Init,Runtime进程初始化后,讲发送一个请求到Zygote。开始启动系统服务,当Zygote收到请求后,讲为系统服务进程建立一个虚拟机实例,并启动系统服务。在系统服务启动后,系统服务将启动原生系统服务(主要包括SurfaceFlinger和AudioFlinger),这些本地系统服务将会注册到服务管理器(ServiceManager),作为IPC服务的目标。系统服务则会启动Android管理服务,这些都会被注册到服务管理器上。,ServiceManager,Zygote,runtime,daemons,Init,请求,DalvikVM,SystemServer,AudioFlinger,SurfaceFlinger,Windowmanager,Activitymanager,Packagemanager,。,ServiceManager,Zygote,runtime,daemons,请求,DalvikVM,SystemServer,AudioFlinger,Windowmanager,Activitymanager,Packagemanager,。,SurfaceFlinger,Init,DalvikVM,DalvikVM,最后,当系统加载完所有的服务后会处于等待状态,等待程序运行。但是每个应用程序都会启动一个单独的进程。如图,启动了一个Home进程和Contacts进程。安卓的启动流程就讲到这儿,下面我们来看下安卓的内核。,Home,Contacts,Android内核机制,为什么Android使用Linux操作系统做内核?因为这些:1.强大的内存管理和进程管理2.基于权限的安全模式3.支持共享库4.经过认证的驱动模型5.Linux本身就是开源项目,Android是Linux嘛?,当然不是。安卓为采用linux作为内核,但是他并不是Linux。,1.Android没有GNU/Linux上的X窗口系统。安卓并没有使用此窗口系统。2.它没有glibc支持,而是为了效率,GOOGLE自己开发了一套BionicLibc来替代glibc。3.重要的一点,android并没有完全照搬linux内核,在修改了linux的bug之外,还对它进行了修改于增加。比如:基于ARM框架的Gold-Fish平台(虚拟CPU).yaffsFlash文件系统等。4.Android自己专有的驱动程序。(详细讲解),Android专有驱动,1.AndroidBinder基于OpenBinder框架的驱动,用于android平台进程间通信。2.Android电源管理(PM)一个基于标准Linux电源管理系统的轻量级Android电源管理系统,针对嵌入式设备进行了很多优化。3.低内存管理器(LowMemoryKiller)比Linux标准OOM更加灵活的内存管理机制,他根据需要杀死进程来释放需要的内存。.还有几个就不多讲了,LowMemoryKiller,LowMemoryKiller在用户空间中指定了一组内存临界值,当其中的某个值与进程描述中的oom_adj值在同一范围时,该进程将被kill。通过对此机制的讲解,可以初步了android系统内核的实现机制与原理。从而推断出其他内核驱动的实现机制。,LowMemoryKiller实现原理,用直白的话讲,LowMemoryKiller的实现原理是这样。指定两个值,一个为oom_adj,是进程的标识值,比如“0,8”。一个为内存临界值,比如“1024,4096”。当一个进程的空闲存储空间到达某个临界值的时候,oom_adj的值与此临界值对应的进程将会被kill.oom_adj值越大,越容易优先被kill.占用物理内存越大,越容易被优先kill.,01612,oom_adj,3*5122*10244*102416*1024,空闲空间,LowMemoryKiller具体实现,首先要初始化init在init的方法中注册一个shrink函数(lowmem_shrink)。被注册的shrink函数为驱动的实现核心,当内存空间不足时就会调用此函数,此函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 创业基金贷款担保协议书
- 个人借企业款项合同范本
- 养猪场生产经营合同范本
- 办公大楼租赁合同协议书范本
- 小儿急性肾炎课件
- 期货从业资格之《期货法律法规》通关试卷提供答案解析附答案详解(b卷)
- 农村信用社招聘考试试题(培优)附答案详解
- 难点详解人教版7年级数学上册期中测试卷附答案详解【能力提升】
- 万科供应商知识培训课件
- 期货从业资格之《期货法律法规》综合提升练习试题及参考答案详解(研优卷)
- 国企返聘人员管理办法
- 2025年高考真题-政治(云南卷) 含答案
- 2025年全国高中物理竞赛试题及答案
- 药品注册培训课件
- 2025电力现代供应链与仓储管理
- 2025年外企德科人力资源服务招聘笔试参考题库含答案解析
- 尿毒症护理疑难病例讨论
- 回肠造口还纳护理查房
- CJ/T 341-2010混空轻烃燃气
- 存款代为保管协议书
- 辅导班劳务合同协议
评论
0/150
提交评论