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. js控制easyui文本框例子及控制html例子

    easyui $('#value').textbox('setValue',''); //赋值 $('#value').textbox({required:false});//必填,方框变红 $('# ...

  2. [leetcode]95. Unique Binary Search Trees II给定节点形成不同BST的集合

    Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ...

  3. centos7 下安装pycharm

    CentOS 7环境下Pycharm安装流程记录: 1.准备安装文件: 方法1: 使用内置火狐浏览器访问下载最新格式为tar.gz的压缩包 网址:https://www.jetbrains.com/p ...

  4. 图片利用 new Image()预加载原理 和懒加载的实现原理

    二:预加载和懒加载的区别 预加载与懒加载,我们经常经常用到,这些技术不仅仅限于图片加载,我们今天讨论的是图片加载: 图片预加载:顾名思义,图片预加载就是在网页全部加载之前,提前加载图片.当用户需要查看 ...

  5. tf-slim-mnist

    谷歌开放TF-Slim:在TensorFlow中定义复杂模型的高层库 使用 TF-Slim 的 GitHbu 代码: README:https://github.com/tensorflow/mode ...

  6. 2、JavaScript 基础二 (从零学习JavaScript)

     11.强制转换 强制转换主要指使用Number.String和Boolean三个构造函数,手动将各种类型的值,转换成数字.字符串或者布尔值. 1>Number强制转换 参数为原始类型值的转换规 ...

  7. Release file is expired, Updates for this repository will not be applied.(资源索引文件过期问题)

    将Debian下载源同步到本地之后,通过本地资源地址进行apt update操作时提示过期问题: E: Release file for http://localhost/security/dists ...

  8. MySQL 三 通过yum源安装指定版本的mariadb

      1.yum源安装指定的版本     1)准备工作     下载安装当前次新版 https://downloads.mariadb.org/   选择rpm包,点击Repository Config ...

  9. 上传input中file文件到云端,并返回链接

    有的文件.图片等信息可以上传到云端上,然后使用链接调用,这样会更加的方便和快捷. <form id="form"> <input type="file& ...

  10. OpenCV库框架结构

    在上文已经学习过了opencv的编码规则,为了能够方便灵活的运用OPECV库,我们需要对其框架结构进行学习了解,以方便我们进行实际工程调用调用. 1.Opnecv库到底提供了什么? 打开opencv源 ...