Andriod内核的简单分析

系统架构与内核分析
服务器君一共花费了287.908 ms进行了6次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

随着嵌入式技术的发展,智能手机的运行速度和所集成的功能获得了极大提升。借着这股东风,Google主导的开放手机联盟OHA (0Den Handset Alliance)顺势在2008年推出了Android移动终端平台。Android是一个开放、自由的移动终端平台。它的发布,打破了诺基亚Symbian操作系统和微软WindOWs Mobile操作系统在智能手机平台上的垄断地位。同时,其平台化的优势也大大丰富各种手持式设备软件的功能。

Android系统架构

Android是Google开发的基于Linux平台的开源手机操作系统。它是一个移动终端平台,包括了移动电话所需的全部软件,由操作系统、中间件、UI(UserInterface)及应用程序组成。开发人员使用Java语言,开发运行于Dalvik虚拟机上的应用程序。其运行效率比一般嵌入式“linux操作系统上的J2ME程序高。Android系统架构自底向上由以下4个层次组成:基于Linux的内核模块、运行时库与其他库、应用程序框架、应用程序。

  1. 基于Linux的内核模块。Android内核基于Linux 2.6,提供安全、内存管理、进程管理、网络组、驱动模型等核心服务。同所有Linux内核一样。Android内核是介于硬件层和软件组之间的一个抽象层次。
  2. 运行时库与各种程序库。运行时库实质是一款Java重新设计的虚拟机Dalvik.它包含J2SE所提供的绝大部分功能 每个Android应用都运行在自己的进程上。Dalvik虚拟机为它分配自有的实例,Dalvik使一台设备能运行多个虚拟机程序但消耗较少的资源。在Android中,编译器将Java源文件转为class文件,内置的dx工具又将class文件转化为Dex文件。Dex文件是在Dalvik虚拟机上运行程序的标准格式。而各种程序库则包含一套C/C++库。Android的各式组件都可使用这些功能通过组件间接提供给开发者。这些库包括图形框架、媒体功能库、Webkit、及SQLite数据库等等。
  3. 应用程序框架。提供应用程序开发所需要的各种API在开发过程中。开发人员通过充分使用应用框架提供的API,对各种组件、服务进行重用。从而开发出精简、高效的应用程序。主要包括以下几种核心组件:
    • UI组件:包括List、Layout、Textbox、Utton、Checkbox等,用以构建应用程序与用户的交互界面。
    • 内容提供器(Content Provider):实现标准的方法接口。让其他应用保存或读取其提供的数据。例如外部程序通过Content Provider访问联系人数据。
    • 资源管理器(Resource Manager):管理对非代码的访问,例如本地图像、布局文件、本地化字符串等。
    • 消息管理器(Notification Manager):让程序将警示信息显示在状态栏上。例如平台接收到短信息、电子邮件、未接电话时在状态栏上的提示。
    • Activity管理器fActiv Manager):用来管理应用程序生命周期并提供常用的导航回退功能闭。
  4. 应用程序。Android预装了一系列由Java语言编写成的核心应用程序,包括短信服务、电话、Email客户端、浏览器、Google地图等。

Android内核分析

1. 内核在操作系统中的地位

Android基于Linux操作系统,由硬件、系统内核、系统服务和应用程序等四大部分组成。其中,内核(Kerne1)是最核心的部分。其主要作用在于与计算机硬件进行交互,实现对硬件的编程控制和接口操作。调度访问硬件资源,同时向应用程序提供一个高级的执行环境和对硬件的虚拟接口。主要功能包括:中断服务程序、进程调度程序、进程地址空间的内存管理、进程间通信。内核与普通应用程序不同,其拥有所有硬件设备的访问权限以及启动时即划分的受保护的内存空间。

2. Android内核

和标准的Linux内核一样,Android内核主要实现内存管理、进程调度、进程间通信等功能。

Android内核是在标准Linux内核的基础上修改而成。为了适应嵌入式硬件环境和移动应用程序的开发。Android对标准Linux内核进行了一定的修改。为了对比分析Android内核,在Ubuntu操作系统上搭建了Android内核的编译开发平台,通过repo,下载最新的Android内核代码版本cupcake(其中Linux内核版本为2.6.27) 从获得的内核源码树的根目录结构看,Android内核源码与标准Linux内核并无不同。

经过与标准Linux内核源代码进行详细对比,可以发现,Android内核与标准Linux内核在文件系统、进程间通信机制、内存管理等方面存在不同。

  • 文件系统
  • 不同于桌面系统与服务器,移动设备大多采用的不是硬盘而是采用Flash作为存储介质。因此,Android内核中增加了标准Linux(内核中没有采纳的YAFFS2文件系统 YAFFS2(Yet Another Flash File Sy-steIn.2nd edition)是专用于Flash的文件系统。对NAND Flash芯片有着良好的支持。YAFFS2是日志结构的文件系统,提供了损耗平衡和掉电保护。可以有效地避免意外断电对文件系统一致性和完整性的影响。YAFFS2按层次结构设计,分为文件管理接口、内部实现层和NAND。简化了其本身与系统的接EI设计,能更方便地集成到系统当中。经过测试证明,YAFFS2性能比支持NOR型闪存的JFFS2文件系统优秀171。

  • 进程间通信机制
  • Android增加了一种进程问的通信机制IPC Binder。在内核源代码中,驱动程序文件为Coredroid/inelude/linux/binder.h和coredroid/drivers/android/binder.c。Binder通过守护进程Service Manager管理系统中的服务,负责进程问的数据交换。各进程通过Binder访问同一块共享内存,以达到数据通信的机制。从应用层的角度看,进程通过访问数据守护进程获取用于数据交换的程序框架接口,调用并通过接口共享数据。而其他进程要访问数据,也只需与程序框架接口进行交互,方便了程序员开发需要交互数据的应用程序。

  • 内存管理
  • 在内存管理模块,Android内核采用了一种不用于标准Linux内核的低内存管理策略。在标准Linux内核当中,使用一种叫做OOM(Out of Memory)的低内存管理策略;当内存不足时,系统检查所有的进程,并对进程进行限制评分,获得最高分的进程将被关闭(内核进程除外)。Android系统采用的则是一种叫作LMK(Low Memory Killer)的机制。这种机制将进程按照重要性进行分级、分组。内存不足时,将处于最低级别组的进程关闭。例如,在移动设备当中,UI界面处于最高级别,所以该进程永远不会被中止,这样,在终端用户看来,系统是稳定运行的。在Andorid内核源码中,LMK 的位置是coredroid/drivers/mise/lowme—morykiller.c。与此同时,Android新增加了一种内存共享的处理方式Ashmem(Anonymous Shared Memory 匿名共享内存)。通过Ashmem,进程间可以匿名自由共享具名的内存块,这种共享方式在标准Linux当中不被支持。

  • 电源管理
  • 由于Android主要用于移动设备,电源管理就显得尤为重要。因此,在Android内核当中,增加了一种新的电源管理策略。目前 Android采用的是一种较为简单的电源管理策略,通过开关屏幕、开关屏幕背光、开关键盘背光、开关按钮背光和调整屏幕亮度来实现电源管理,并没有实现休眠和待机功能。有三种途径判断调整电源管理策略:RPC调用、电池状态改变和电源设置,它通过广播Intent或直接调用API的方式来与其他模块进行联系。电源管理策略同时还有自动关机机制,当电力低于最低可接受程度时,系统将自动关机。Android的电源管理模块还会根据用户行为,自动调整屏幕亮度。

  • 驱动及其他
  • 相对于标准内核,Android内核还添加了字符输出设备、图像显示设备、键盘输入设备、RTC设备、USBDevice设备等相关设备驱动。增加了日志(Logger)系统,使应用程序可以访问日志消息。

小结

经过分析,Android内核由标准Linux内核修改而来,因此继承了Linux内核的各种优点,保留了标准Linux内核的主体架构。同时,Android按照移动设备的需求,在文件系统、内存管理、进程间通信机制、电源管理等方面进行了修改,添加相关的驱动程序和一些必要的新功能。但是与大多数精简的嵌入式Linux操作系统(例如uCLinux)相比,Android很大程度上保留了标准Linux的基本架构,因此,Android系统应用范围更加广泛,拓展性更强。

本文地址:http://www.nowamagic.net/librarys/veda/detail/157,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/157

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《Head First设计模式(中文版)》 弗里曼 (作者), 等 (作者)

《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较特别。第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词)。

更多计算机宝库...