文章插图
本文主要介绍Android的系统架构,Android使用linux内核(Marco kernel),但是Android的架构又与Linux系统有所不同,因此在介绍Android系统架构之前,我们先一起来了解一下Linux系统的架构 。
Linux系统架构Linux架构如下图所示:
文章插图
Linux系统架构
- Computer Resources:硬件资源
- Kernel:内核
- Shell:shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口 。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器
- Programs/Utilities/Tools:库函数、工具等
- File systems:文件系统是文件存放在磁盘等存储设备上的组织方法 。Linux系统能支持多种目前流行的文件系统,如EXT2、 EXT3、 FAT、 FAT32、 VFAT和ISO9660 。
- User Application: Linux应用,标准的Linux系统一般都有一套被称为应用程序的程序集,它包括文本编辑器、编程语言、X Window、办公套件、Internet工具和数据库等
Linux开机后,内核启动,激活内核空间,抽象硬件、初始化硬件参数等,运行并维护虚拟内存、调度器、信号及进程间通信(IPC) 。
内核启动后,再加载Shell和用户应用程序,用户应用程序使用CC++编写,被编译成机器码,形成一个进程,通过系统调用(Syscall)与内核系统进行联通 。进程间交流需要使用特殊的进程间通信(IPC)机制 。
Android系统架构看完了Linux架构,我们再来一起看看Android系统架构 。Android的系统非常复杂和庞大,底层以Linux内核为基础,上层采用带有虚拟机的JAVA层,通过JNI技术,将上下层打通 。
先来看一张google提供经典Android架构图,从上往下依次为应用层(System Apps)、应用框架层(Java API Framework)、运行层(系统Native库和Android运行时环境)、硬件抽象层(HAL)、Liunx 内核(Marco Kernel) 。每一层都有对应的进程、系统库 。
文章插图
Android系统架构
- 应用层(System Apps)
- 应用框架层(Java API Framework)
- 运行层
Android包含一些C/C++库,这些库能被Android系统中不同的组件使用
2)Android运行时环境
Android包括了一个核心库,该核心库提供了Java编程语言核心库的大多数功能 。虚拟机也在该层启动 。
每个Android应用都有一个专有的进程,这些进程每个都有一个Dalivik虚拟机实例,并在该实例中运行 。
- 硬件抽象层(HAL)
为什么Android要这么做呢?
Linux内核采用了GPL协议,如果硬件厂商需要支持Linux系统,就需要遵照GPL协议公开硬件驱动的源代码,这势必会影响到硬件厂家的核心利益 。
Android的HAL层运行在用户空间,HAL是一个“空壳”,Android会根据不同的需要,加载不同的动态库 。这些动态库由硬件厂家提供 。硬件厂家把相关硬件功能写入动态库,内核中只开放一些基本的读写接口操作 。这样一些硬件厂家的驱动功能就由内核空间移动到了用户空间 。
Android的HAL层遵循Apache协议,并不要求它的配套程序,因此厂家提供的驱动库不需要进行开放,保护了硬件厂家的核心利益 。
- Liunx 内核(Marco Kernel)
推荐阅读
- Android MVP 架构介绍与使用入门
- 华为交换机系统启动原理介绍
- 介绍几个轻量级的CMS系统
- 基于centos7系统部署tomcat自定义服务
- 在电动汽车里面如何抛弃PTC?
- 阿里架构总监13张PPT一次讲透中台架构
- B/S架构web请求过程详解
- Android打包之多版本、多环境、多渠道
- 桂芍镇痫片(天泰)的说明书
- 秒杀系统怎么设计?