安卓OS的体系架构

操作系统概念

操作系统主要负责:

1. 为用户和应用程序提供硬件资源管理,包括CPU、内存、硬盘、各种输入输出设备。

这一点落到实际的功能上就是向用户提供人机交互界面,向应用程序提供API(联系操作系统和应用程序之间的接口,本质就是一堆操作系统提供给应用程序的函数集,这些函数集封装了操作系统能提供的各种功能给程序调用)。

同类型的操作系统无论底层硬件如何,API基本没有差别,因此针对特定API编写的程序在任何硬件上都能运行。就像都使用安卓操作系统的手机,无论底层硬件是高通还是联发科,微信都可以运行,因为API都是一样的。但基于安卓操作系统API开发的微信在苹果系统IOS手机上或者windows电脑上就不能运行,因为操作系统不同,操作系统提供的API就不同,要想微信能在IOS或window上能运行,就需要重写需要用到的API部分,使用对应操作系统的API,或者在该设备上安装安卓的虚拟机。

2. 为应用程序提供执行环境

运行环境=硬件+操作系统。即:

(1)不同的硬件和不同的操作系统构成不同的运行环境

(2)硬件和操作系统是搭配使用的,不同的CPU类型匹配的是不同的操作系统。

         因为机器语言是唯一一种CPU能够直接执行的语言,不同种类的CPU使用的机器语言是不同的,这与指令集相关(指令是CPU工作的基础,指令集就是CPU中用来计算和控制系统的一套指令的集合,因此不同的CPU指令集不同,能够理解和执行的机器语言也不同。eg: x86、arm、mips的cpu它们的指令集和能执行的机器语言都不同)。

         进程运行时不仅包括代码段和数据段还有在运行时需要的资源,如内存空间、CPU时间片、活动信息和数据等就是由操作系统提供的执行环境。进程是操作系统调度的实体,操作系统通过资源分配进行进程管理。

安卓OS的体系架构_第1张图片 CPU指令集

不同CPU指令集不同

操作系统的内核

操作系统内核是软件,是操作系统的核心,它负责内存管理、进程调度、文件系统、中断管理和设备管理等工作。

安卓OS的体系架构_第2张图片

 

操作系统的内核设计有两大阵营:宏内核和微内核。

安卓OS的体系架构_第3张图片

宏内核

宏内核就是内核代码都编译成一个二进制文件,所有内核代码运行一个大地址空间里,内核代码之间可以直接访问和调用,彼此之间互相调用和访问的效率高,因此整体执行效率高。当应用程序需要访问硬件资源或者需要内核提供服务的时候 ,通过系统调用对内核进行召唤,系统调用的本质是内核将功能封装成了一堆函数,调用就是通过接口调用函数,但要注意的是应用程序并不是直接召唤系统调用的,如在安卓系统架构中,在硬件抽象层之上有个本地框架层,Libraries中有一堆C和C++写的函数库,应用程序实际上是通过这层函数调用来实现系统调用,这层库提供给应用程序的某个API里面可能封装了一个或者多个系统调用,从而提供内核功能,内核接收到系统调用就去执行任务。

Linux内核就是典型的宏内核,但网上有许多有关Linux是宏内核还是微内核的争论。称其为微内核的主要论据就是Linux内核也是模块化的,实际上Linux很早就在借鉴微内核一些优点,提出了模块化设计的思想,内核中很多核心和设备驱动都可以模块化实现,本质是这些模块被编译成一个个目标文件,可以在内核运行的过程中动态加载和卸载,但是这种模块化的实现和微内核的模块化不一样,这些模块不是作为特殊模块来执行,而是和静态编译的那些内核函数一样运行在内核态中。

微内核

微内核就是保留内核最基本的功能,比如进程调度、内存管理等,将其他的如文件系统、设备驱动之类的扔了出去,放到用户态中以服务模块的形式来实现,而至于哪些功能放在内核,哪些功能扔出去,各家操作系统有自己的想法。小且灵活但大量上下文切换、多次调用通信会降低效率。

安卓系统架构     

安卓OS的体系架构_第4张图片

Applications

应用程序是 android 架构的顶层。预装的应用程序(如家庭、联系人、相机、图库等)以及从 商店下载的第三方应用程序(如聊天应用程序、游戏等)将仅安装在该层上。它借助应用程序框架提供的类和服务在 Android 运行时内运行。

Application Framework

又称为Java层,这层框架层所提供的组件一般都是Java写的。Application Framework 最常被应用开发者使用,一方面把下层提供的函数封装打包,以Java接口形式为开发者和应用程序提供API,一方面还包含不少系统级服务进程的实现。

很多此类 API 都可以直接映射到底层 HAL 接口,并可提供与实现驱动程序相关的实用信息。它提供了几个重要的类,用于创建 Android 应用程序。它为硬件访问提供了一个通用抽象,还有助于使用应用程序资源管理用户界面。一般来说,它提供的服务可以帮助我们创建一个特定的类,并使该类有助于应用程序的创建。它包括不同类型的服务活动管理器、通知管理器、视图系统、包管理器等,它们根据前提条件对我们的应用程序的开发很有帮助。

Platform Libraries

又称为C库层以区别于应用程序框架层,包括各种 C/C++ 核心库和基于 Java 的库,如系统C库(libc,这是从BSD继承过来的标准C系统函数库)、 Media库、Graphics、Surface Manager、OpenGL 等,为 Android 开发提供支持。

  • Media 支持多种常用的音频视频格式的回放和录制,支持多种媒体格式的编盒和解码。
  • Surface manager 显示子系统管理器,负责管理对显示子系统的访问,并且为多个应用程序提供2D和3D图层的无缝融合。
  • SGLOpenGL 都是跨语言、跨平台的应用程序接口 (API),分别用于 2D 和 3D 计算机图形。
  • SQLite提供数据库支持,FreeType提供字体支持。
  • LibWebCore:Web浏览器引擎
  • Web-Kit这个开源网络浏览器引擎提供了显示网络内容和简化页面加载的所有功能。
  • SSL(安全套接层)是一种在网络服务器和网络浏览器之间建立加密链接的安全技术。

Application Runtime

Android 运行时环境是 Android 最重要的部分之一。它包含核心库和 Dalvik 虚拟机 (DVM) 等组件。主要是,它为应用程序框架提供基础,并在核心库的帮助下为我们的应用程序提供动力。

Dalvik 虚拟机 (DVM):与 Java 虚拟机 (JVM) 一样,它是基于寄存器的虚拟机,为java提供执行环境,但虚拟机最终还是通过调用Linux内核来执行功能。它专门针对 android 设计和优化,以确保设备可以高效地运行多个实例。它依赖于层 Linux 内核进行线程化和低级内存管理。

核心库:核心库使我们能够使用标准的 JAVA 或 Kotlin 编程语言来实现 android 应用程序。大部分Java语言的基础功能都是由核心库提供,比如基础数学结构、I/O工具、网络、数据库等等。同时,核心库也包括安卓的一些核心API。

Platform Libraries(本地框架)和 Application Runtime(Java运行环境)在硬件抽象层之上,

Linux Kernel

Linux 内核是 android 架构的核心。它管理运行时所需的所有可用驱动程序,例如显示驱动程序、相机驱动程序、蓝牙驱动程序、音频驱动程序、内存驱动程序等。位于Android的最底层,它提供内存管理、设备管理、文件系统等,安卓中的虚拟机最终是通过调用Linux内核来执行功能。

Linux 内核将在设备硬件和 android 架构的其他组件之间提供一个抽象层。它负责管理内存、电源、设备等。

Linux内核的特点是:

  • Security: Linux 内核处理应用程序和系统之间的安全性。
  • Memory Management:它有效地处理内存管理,从而提供开发我们应用程序的自由
  • Process Management:它很好地管理流程,在需要时将资源分配给流程。
  • Network Stack:它有效地处理网络通信。
  • Driver Model:它确保在负责将其驱动程序构建到 Linux 版本中的设备和硬件制造商上的应用程序正常工作。

开发设备驱动程序与开发典型的 Linux 设备驱动程序类似。Android 使用的 Linux 内核版本包含一些特殊的补充功能,例如低内存终止守护进程(一个内存管理系统,可更主动地保留内存)、唤醒锁定(一种 PowerManager 系统服务)、Binder IPC 驱动程序,以及对移动嵌入式平台来说非常重要的其他功能。这些补充功能主要用于增强系统功能,不会影响驱动程序开发。您可以使用任意版本的内核,只要它支持所需功能(如 Binder 驱动程序)即可。

安卓系统架构组件补充

安卓OS的体系架构_第5张图片

Binder IPC

Binder 进程间通信 (IPC) 机制允许应用框架跨越进程边界并调用 Android 系统服务代码,这使得高级框架 API 能与 Android 系统服务进行交互。在应用框架级别,开发者无法看到此类通信的过程,但一切似乎都在“按部就班地运行”。

Android System Services

系统服务是专注于特定功能的模块化组件,例如窗口管理器、搜索服务或通知管理器。应用框架 API 所提供的功能可与系统服务通信,以访问底层硬件。Android 包含两组服务:“系统”(诸如窗口管理器和通知管理器之类的服务)和“媒体”(涉及播放和录制媒体的服务)。

硬件抽象层 (HAL)

它把设备接口函数给封装起来向上提供接口,将硬件抽象化,隐藏底层接口的细节,为操作系统提供虚拟的硬件平台,使操作系统实现硬件无关性。通常的Linux操作系统硬件抽象是放在内核里面的,因为Linux内核本来就是专门要跟硬件打交道,安卓把这一部分拿出来是谷歌想实现硬件厂商针对自己的操作系统标准化硬件定义,另一方面就是商业原因(Linux遵循的是GPL开源协议,这意味着所有硬件驱动都是开源的,但驱动中会涉及到一些并不想公开的参数细节和算法,这对很多硬件厂商来说很难接受。而安卓采用Apache协议,在这方面更自由)。

HAL 可定义一个标准接口以供硬件供应商实现,这可让 Android 忽略较低级别的驱动程序实现。借助 HAL,您可以顺利实现相关功能,而不会影响或更改更高级别的系统。HAL 实现会被封装成模块,并会由 Android 系统适时地加载。

安卓OS的体系架构_第6张图片 通常的Linux

你可能感兴趣的:(android)