随着嵌入式技术的发展,智能手机的运行速度和所集成的功能获得了极大提升。借着这股东风,Google主导的开放手机联盟OHA (0Den Handset Alliance)顺势在2008年推出了Android移动终端平台。Android是一个开放、自由的移动终端平台。它的发布,打破了诺基亚Symbian操作系统和微软WindOWs Mobile操作系统在智能手机平台上的垄断地位。同时,其平台化的优势也大大丰富各种手持式设备软件的功能。
Android是Google开发的基于Linux平台的开源手机操作系统。它是一个移动终端平台,包括了移动电话所需的全部软件,由操作系统、中间件、UI(UserInterface)及应用程序组成。开发人员使用Java语言,开发运行于Dalvik虚拟机上的应用程序。其运行效率比一般嵌入式“linux操作系统上的J2ME程序高。Android系统架构自底向上由以下4个层次组成:基于Linux的内核模块、运行时库与其他库、应用程序框架、应用程序。
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系统应用范围更加广泛,拓展性更强。