Android操作系统的架构与原理

Android操作系统是为触摸屏移动设备如智能手机、平板电脑而设计的,并且现在其应用范围已经扩展到其他嵌入式系统。最初由Android Inc.开发,该公司于2003年成立,位于加利福尼亚州的帕洛阿尔托,后来在2005年被Google收购。Android在2007年公开宣布,第一款手机在2008年10月上市。

Android操作系统的内核基于Linux,使用了Linux内核2.6和3.x(Android 4.0及以上版本)。因此,Android是一个基于Linux的操作系统。尽管Android的内核是Linux,但它并不包括完整的Linux工具集,因此不能简单地将其视为一个Linux操作系统。

为什么选择Linux内核

Linux内核是开源的,支持共享库,拥有经过验证的驱动模型和基于权限的安全模型。

Android框架的解剖

Android操作系统由四个主要层次组成:内核、库、应用程序框架和应用程序。每一层都扮演着重要的角色。

整个Android操作系统都建立在Linux 2.6内核之上,Google对其进行了一些架构上的修改,以适应移动设备的局限性,包括内存管理和电源管理。正是这个Linux内核与硬件交互,并包含了所有必要的硬件驱动。选择Linux是因为它已经是开源的,在桌面系统上有着良好的记录,并且在许多情况下不需要重写驱动程序。Linux提供了诸如虚拟内存、网络、驱动程序、电源管理、进程间通信(IPC)和调试器等功能。

应用程序和服务在不同的进程中运行,但需要共享相同的数据并进行通信,这可能导致显著的安全漏洞和进程死锁,因为它们在进行IPC。为了解决这个问题,创建了一个名为Binder(IPC)的驱动程序,以促进IPC。启用了共享内存、预处理请求池和进程间的同步调用。

另一个问题是电源管理。由于手机使用可充电电池,其电源容量有限。因此,内核中加入了一个名为电源管理驱动程序(PM)的定制驱动程序,它建立在标准Linux电源管理驱动程序之上,具有更严格的电源管理策略,组件通过“唤醒锁”保持电源开启,并支持更多的唤醒锁。

可以通过访问来获取Android内核的完整源代码。

Android框架附带了9个原生库,但也可以向这一层添加第三方库。这些原生库可以分类如下:

包括:

  • Surface Manager:负责渲染2D和3D图形。
  • OpenGL ES:也负责不同硬件加速器的2D和3D渲染。
  • Audio Manager:管理所有音频输出设备。

包括:

  • SQLite:轻量级的关系数据库,作为大多数平台数据存储的后端。
  • WebKit:基于开源WebKit浏览器,支持完整的CSS、JavaScript、DOM、AJAX,使程序员能够构建基于浏览器的应用程序。
  • Media Framework:支持标准的视频、音频、静态帧格式。

这个库专门为移动设备的局限性而设计,如内存管理和有限的CPU能力,因此这个库允许小尺寸和快速的代码路径,允许非常快速和小型的自定义pthread实现。

这一层负责将Android逻辑与硬件接口分离。这一层主要包含用户C/C++库,这也是为什么可以使用包括C、C++在内的多种语言原生开发Android的原因。它还提供了Android需要硬件驱动程序实现的接口。

这一层的重要性在于,不是所有组件都有标准化的内核驱动程序接口,因此这一层提供了这些未知的驱动程序。Android对硬件驱动程序有特定的要求。

这包括两个层次,包括:

  • 核心Java库:完全用Java编写,为Java语言提供核心API,提供了一个强大、简单且熟悉的开发平台。
  • Dalvik虚拟机:Android的自定义清洁室实现虚拟机,适应移动设备的局限性。

Dalvik虚拟机提供应用程序的可移植性和运行时一致性,运行优化的文件格式(.dex)和Dalvik字节码,Java .class / .jar文件在构建时转换为.dex,支持每个设备上的多个虚拟机进程,高度CPU优化的字节码解释器,使用运行时内存非常高效。

这包含应用程序(无论是还是任何程序员创建的)将使用的核心系统服务,它们在幕后工作,即应用程序不直接访问它们,并且它们分为两类,包括:

  • 核心平台服务:包括活动管理器、包管理器、窗口管理器、资源管理器、内容提供者、视图系统。
  • 硬件服务:包括电话服务、位置服务、蓝牙服务、WiFi服务、USB服务、传感器服务。

例如,要使用位置服务获取用户的GPS位置,需要请求位置服务:

Java locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485