Android 系统内核层与 Linux Kernel 的比较
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 的比较的更多相关文章
- Android HAL层与Linux Kernel层驱动开发简介
近日稍微对Android中的驱动开发做了一些简要的了解. HAL:Hardware Abstract Layer 硬件抽象层,由于Linux Kernel需要遵循GPL开源协议,硬件厂商为了保护自己硬 ...
- Android Jni层 创建 linux socket 出错问题解决
问题: 想在Jni层创建 udp socket 与服务端通信,可是没有成功.最后发现居然是创建socket失败(代码例如以下) // create socket g_sd = socket(AF_IN ...
- Android各层推荐开发书籍及参考资料
Android各层推荐开发书籍及参考资料 转自:http://blog.csdn.net/fancylovejava/article/details/8657058 Android系统按照架构来说一共 ...
- Android各层推荐开发书籍及参考资料!!!
Android各层推荐开发书籍及参考资料 转自:http://blog.csdn.net/fancylovejava/article/details/8657058 Android系统按照架构来说一共 ...
- 各个安卓版本 使用的 Linux Kernel Version
Android Version |API Level |Linux Kernel in AOSP --------------------------------------------------- ...
- 编译android的linux kernel goldfish
https://source.android.com/source/building-kernels.html $ export PATH=/home/hzh/oldhome/learn/androi ...
- Linux Kernel(Android) 加密算法汇总(三)-应用程序调用内核加密算法接口
于Linux Kernel(Android) 加密算法总结(cipher.compress.digest)文章中.介绍了怎样在内核中增加三种不同类型的内核加密算法, 并给出了在内核模块中怎样调用他们的 ...
- Android 从上层到底层-----kernel层
CPU:RK3288 系统:Android 5.1 功能:上层 app 控制 led 亮灭 开发板:Firefly RK3288 1.在dts文件中增加 led 设备 path:kernel/arch ...
- 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 ...
随机推荐
- 【开发工具】secureCRT的使用
总结自己平时使用secureCRT中遇到的问题 1.安装 2.secureCRT设置标签显示远程主机ip地址
- LWIP学习
转自:https://blog.csdn.net/kzq_qmi/article/details/46900589 数据包pbuf: LwIP采用数据结构 pbuf 来描述数据包,其结构如下: ...
- 阮一峰大神的快排?刚才还在纠结sort()的我!真是个小傻瓜
看到这个标题之后 我毫不犹豫的点进去了 趁现在不忙我赶紧把代码写到了我的小本本上好好研究研究 (写的就不放进来了 有点丑) 研究了下 第一反应 明明能用sort()解决的 为什么非要写这么一大串 但 ...
- highcharts echarts比较
1,highcharts底层是svg echarts底层是canvas 2,svg和canvas的区别 canvas 依赖分辨率 不支持事件处理器 弱的文本渲染能力 能够以 .png 或 .jpg 格 ...
- Linux 使用 mail 发送邮件
ubuntu 需要安装 mailutils sudo apt-get install mailutils
- Monotonic Array LT896
An array is monotonic if it is either monotone increasing or monotone decreasing. An array A is mono ...
- chrom中 background 调用pop.js
//监听快捷键 chrome.commands.onCommand.addListener(function(command) { if (command == "cleanKey" ...
- ActiveMQ_5死信队列
activemq死信队列 DLQ-死信队列(Dead Letter Queue)用来保存处理失败或者过期的消息. 出现以下情况时,消息会被redelivered: A transacted sessi ...
- drf1 rest & restful规范
web服务交互 我们在浏览器中能看到的每个网站,都是一个web服务.那么我们在提供每个web服务的时候,都需要前后端交互,前后端交互就一定有一些实现方案,我们通常叫web服务交互方案. 目前主流的三种 ...
- flask 学习
标题 操作 09-2-sqlalchemy数据库查询 (2019-01-18 23:30) 编辑 09-1-数据库扩展包flask-sqlalchemy (2019-01-18 17:53) 编辑 0 ...