Android 内核具有和标准 Linux 内核一样的功能,主要实现了内存管理、进程调度、进程间通信等功能。但在文件系统、进程间通信、内存管理等方面存在差异。

1、文件系统。移动设备采用的大多不是硬盘而是 Flash 作为存储介质,因此,Android 内核中增加了标准 Linux 专用于 Flash 的文件系统 YAFFS2(Yet Another Flash File System 2)。YAFFS2 是基于 NAND flash 日志结构的文件系统,提供了损耗平衡掉电保护,可以有效地避免意外断电对文件系统一致性和完整性的影响。YAFFS2 性能比支持 NOR 型闪存的 JFFS2(Journalling Flash File System Version 2, 闪存日志型文件系统第2版)文件系统更加优秀。

2、进程间通信机制。Android 增加了一种进程间的通信机制 IPC Binder。Binder 通过守护进程 Service Manager 管理系统中的服务,负责进程间的数据交换。各进程通过 Binder 访问同一块共享内存,以达到数据通信的机制。从应用层的角度看,进程通过访问数据守护进程获取用于数据交换的程序框架接口,调用并通过接口共享数据,而其他进程要访问数据,也只需与程序框架接口进行交互,方便了程序员开发需要交互数据的应用程序。

3、内存管理。Android 内核采用了一种不同于标准 Linux 内核的低内存管理策略。Android 系统采用的是 LMK(Low Memory Killer) 机制,这种机制将进程按照重要性进行分级、分组,内存不足时,将处于最低级别组的进程关闭,保证系统是稳定运行的。同时,Android 新增加了一种内存共享的处理方式 Ashmem(Anonymous Shared Memory,匿名共享内存)。通过 Ashmem,进程间可以匿名自由共享具名的内存块,这种共享方式在标准 Linux 当中也是不被支持的。

在系统类库层(Libraries)的 Surface Manage 模块负责管理显示与存储之间的互动,以及对 2D 绘图和 3D 绘图进行显示上的合成。Android 中的图形系统实际上采用的是C/S 结构,Client 端就是应用程序,而 Service 端是 Surface Flinger,Client 通过 Binder 向 Server 端的 Surface Flinger 传输图像数据,最终由 Surface Flinger 合成到Frame Buffer 中,然后再屏幕上显示出来。

4、电源管理。不同于标准 Linux 内核,Android 采用的是一种较为简单的电源管理策略,通过开关屏幕、开关屏幕背光、开关键盘背光、开关按钮背光和调整屏幕亮度来实现电源管理,并没有实现休眠待机功能。目前通过三种途径来判断电源管理策略:RPC 调用电池状态改变电源设置。系统通过广播 Intent 或直接调用 API 的方式来与其他模块进行联系。电源管理策略同时还有自动关机机制,当电力低于最低可接受程度时,系统将自动关机。另外,Android 的电源管理模块还会根据用户行为自动调整屏幕亮度。

5、驱动及其他。相对于标准内核,Android 内核还添加了字符输出设备图像显示设备键盘输入设备RTC 设备USB Device 设备等相关设备驱动,增加了日志系统,使应用程序可以访问日志消息,使开发人员获得更大的自由。

【参考文献】

《Android 和 PHP 开发最佳实践》 第2版

Android 系统内核层与 Linux Kernel 的比较的更多相关文章

  1. Android HAL层与Linux Kernel层驱动开发简介

    近日稍微对Android中的驱动开发做了一些简要的了解. HAL:Hardware Abstract Layer 硬件抽象层,由于Linux Kernel需要遵循GPL开源协议,硬件厂商为了保护自己硬 ...

  2. Android Jni层 创建 linux socket 出错问题解决

    问题: 想在Jni层创建 udp socket 与服务端通信,可是没有成功.最后发现居然是创建socket失败(代码例如以下) // create socket g_sd = socket(AF_IN ...

  3. Android各层推荐开发书籍及参考资料

    Android各层推荐开发书籍及参考资料 转自:http://blog.csdn.net/fancylovejava/article/details/8657058 Android系统按照架构来说一共 ...

  4. Android各层推荐开发书籍及参考资料!!!

    Android各层推荐开发书籍及参考资料 转自:http://blog.csdn.net/fancylovejava/article/details/8657058 Android系统按照架构来说一共 ...

  5. 各个安卓版本 使用的 Linux Kernel Version

    Android Version |API Level |Linux Kernel in AOSP --------------------------------------------------- ...

  6. 编译android的linux kernel goldfish

    https://source.android.com/source/building-kernels.html $ export PATH=/home/hzh/oldhome/learn/androi ...

  7. Linux Kernel(Android) 加密算法汇总(三)-应用程序调用内核加密算法接口

    于Linux Kernel(Android) 加密算法总结(cipher.compress.digest)文章中.介绍了怎样在内核中增加三种不同类型的内核加密算法, 并给出了在内核模块中怎样调用他们的 ...

  8. Android 从上层到底层-----kernel层

    CPU:RK3288 系统:Android 5.1 功能:上层 app 控制 led 亮灭 开发板:Firefly RK3288 1.在dts文件中增加 led 设备 path:kernel/arch ...

  9. linux kernel API and google android compile guide

    (1)linux kernel API website: http://docs.knobbits.org/local/linux-doc/html/regulator/index.html http ...

随机推荐

  1. 为了应对异常情况,提供最原始的python第三方库的安装方法:手动安装。往往是Windows用户需要用到这种方法。

    进入pypi.python.org,搜索你要安装的库的名字,这时候有3中可能: 第一种是exe文件,这种最方便,下载满足你的电脑系统和python环境的对应的exe,再一路点击next就可以安装. 第 ...

  2. vs [失败]未能找到文件

    用文本文件打开csproj 文件.将里面的不需要文件删除; 或者在工程里面先将其移出工程.然后再删除;

  3. 《笨方法学Python》加分题6

    types_of_people = 10 x = f"There are {types_of_people} types of peoples." binary = "b ...

  4. JVM 字节码(三)异常在字节码中的处理(catch 和 throws)

    JVM 字节码(三)异常在字节码中的处理(catch 和 throws) 在 ClassFile 中到底是如何处理异常的呢? 一.代码块异常 catch catch 中的异常代码块在异常是如何处理的呢 ...

  5. idea连接操作数据库

    场景 本文主要以DB2作为演示,其他数据库大同小异: 网上有很多推荐DB2的连接软件工具,但是因为DB2的使用场景不多,这次是在做数据资产管理的数据质量分析时使用到,在做数据交换时要在DB2中建表并同 ...

  6. python_day12_html

    目录: 简单web的服务器代码 html简介 html常用标签 一.简单web的服务器代码 1.简单python服务器代码: import socket def main(): sock = sock ...

  7. Activity 重载方法 onStart和onResume、onPause和onStop的区别

    Activity 重载方法 onStart和onResume.onPause和onStop的区别 首先了解Activity的四种状态 Running状态:一个新的Activity启动入栈后,它在屏幕最 ...

  8. 第一次使用zxxbox弹层经历

    一:首先这个插件是基于JQuery的插件,要先导入JQuery,然后再导入这个插件 二:HTML部分 <a href="http://www.jisuapi.com/static/im ...

  9. Nodejs之路:异步I/O的过程

    对于Node中的异步I/O调用,从发出调用到回调执行,看起来像普通的js异步,但是流程却和普通js那些消息队列完全不同,整个过程经历了哪些? 下面以Windows平台下为例: 一,异步调用第一阶段: ...

  10. 走进JDK(四)------InputStream、OutputStream、Reader、Writer

    InputStream InputStream是java中的输入流,下面基于java8来分析下InputStream源码 一.类定义 public abstract class InputStream ...