Android和Linux的关系

①、Android采用Linux作为内核

②、Android对Linux内核做了相应的修改,使Linux适应在移动设备上使用

③、Android一开始是Linux的一个分支,由于无法并入Linux的主开发树,被从开发树中移除

一、Android是继承于Linux

  Android是在Linux内核基础之上运行,提供的核心系统服务包括安全、内存管理、进程管理、组网组和驱动模型等内容,内核部分相当于介于硬件层和系统中其他软件组之间的一个抽象层次。所以,严格来说不算是Linux操作系统。由于Android在很大程度上保留了Linux的基本框架,使Android的应用性和扩展性都很强。

二、Android和Linux区别

  Android系统的系统层面的底层是Linux,中间加了一个叫Dalvik的Java虚拟机,表面层是Android运行库。每个Android应用都运行在自己的进程上,享有Dalvik虚拟机分配的专有实例。为了支持多个虚拟机在同一设备上高效运行,Dalvik也被修改过。Dalvik虚拟机执行的是Dalvik格式的可执行文件.dex,该格式经过优化,将内存的消耗降到最低。Java编译器将java源文件转为.class文件,.class文件又被内置的dx工具转为.dex格式文件,使得能够在Dalvik虚拟机上注册并运行。Android系统的应用软件都是运行在Dalvik虚拟机之上的Java软件,而Dalvik虚拟机是运行在Linux之中,在一些底层功能(如线程和低内存管理),Dalvik虚拟机是依赖Linux内核的。因此,Android是运行在Linux之上的操作系统。

  Android内核和Linux内核主要体现在以下几个方面:

  ①、Android Binder :Android Binder是基于OpenBinder框架的一个驱动,用于提供Android平台的进程间通信(IPC,inter-process communication)。而Linux系统上层应用的进程间通信主要是D-Bus(desktop bus),采用消息总线的方式进行IPC。

  ②、Android 电源管理(PM):是一个基于标准Linux电源管理系统的轻量级的Android电源管理驱动,针对嵌入式设备做了很多优化,利用锁和定时器来切换系统状态,控制设备在不同的状态下的功耗。

  ③、低内存管理器(low memory killer):Android低内存管理器和Linux标准的OOM(out of memory)相比,其机制更加灵活,根据需要杀死的进程来释放内存,低内存管理器代码里面的关键函数是lowmem_shrinker(),作为一个模块在初始化时调用register_shrinke注册一个lowmem_shrinker,被vm在内存紧张时调用,lowmem_shrinker完成具体操作就是直接找到一个最合适的进程杀死,释放所占用的内存。

  ④、匿名共享内存(Ashmem):为进程提供大块共享内存,并为内核提供回收和管理这个内存的机制。如果一个程序尝试访问Kernel释放的一个共享内存块,将会收到一个错误的提示,然后重新分配内存并重载数据。

  ⑤、Android PMEM(Physical):PMEM用于向用户空间提供连续的物理内存区域,DSP和某些设备只能工作在连续的物理内存上,驱动中提供了mmap、open、release和ioctl等接口。

  ⑥、Android Logger:是一个轻量级的日志设备,用于抓取Android系统的各种日志,但Linux没有。

  ⑦、Android Alarm:提供一个定时器,用于设备从睡眠状态唤醒,还提供了一个设备在睡眠时也会运行的时钟基准。

  ⑧、USB Gadget驱动:此驱动是基于标准Linux USB gadget驱动框架的设备驱动,Android的USB驱动是基于gadget框架。

  ⑨、Android RAM Console:为了提供调试功能,Android允许将调试日志信息写入一个被为RAM Console的设备里,是一个RAM的Buffer。

  ⑩、Android timed device:提供了对设备进行定时控制的功能,支持振动器和LED等设备。

  在Android系统中,采用Yaffs2作为MTD nand flash 文件系统,Yaffs2是一个快速稳定的应用于NAND和NOR Flash的跨平台嵌入式设备文件系统,与其他的flash文件系统相比,Yaffs2使用更小的内存来保存运行状态,占用内存较小;Yaffs2的垃圾回收也非常简单;Yaffs2在大容量的NAND Flash上性能表现更加明显,非常适合大容量的Flash存储。

原文地址:https://www.cnblogs.com/chenfeifen/p/11747922.html

时间: 2024-08-30 02:22:03

Android和Linux的关系的相关文章

android与linux之间的关系

篇一(system/core/init/init.c): 对Android感兴趣的朋友都知道,Android系统是建立在Linux内核之上的.那么Linux内核和Android什么关系?Linux内核是怎样引导起Android呢?本文进行简单的描述. Android虽然建立在Linux内核之上,但是他对内核进行了一些扩展,增加了一些驱动.比如Binder,loger等等驱动.可以拿Android内核代码和其Baseline版本进行对比.可以看到Android对Linux内核的所有扩展. 熟悉Li

Root exploit for Android and Linux(CVE-2010-4258)

/* 本文章由 莫灰灰 编写,转载请注明出处. 作者:莫灰灰    邮箱: [email protected] */ 一. 漏洞简介 CVE-2010-4258这个漏洞很有意思,主要思路是如果通过clone函数去创建进程,并且带有CLONE_CHILD_CLEARTID标志,那么进程在退出的时候,可以造成内核任意地址写0的bug.PoC代码利用了多个漏洞来达到权限提升的目的. 二. 前置知识 (进程创建.退出) 1.当fork或者clone一个进程在的时候, copy_process执行如下操作

Android和Linux应用综合对比分析

公开发布的序言: 这篇文章是作于2012年7月12日,也就是自己刚从大学校园迈向工作岗位的时候遇到的第一个题目"请你针对我们公司目前的应用行业场景做一下调研:在终端做应用程序开发的平台是选择Linux好还是Android好"而写的. 在踏出校园之前,自己从来没有接触过安卓的开发领域(除了在2010年下半年买了一部分安卓的智能手机外).接到这个题目后,自己也没有退缩,硬着头皮接下来了,然后凭借自己在学校时候学的一点检索信息写学术论文的小功底,三天之内写下了这篇长达1万4千多字的调研报告,

Android service binder aidl 关系

/********************************************************************************** * Android service binder aidl 关系 * 声明: * 最近一直被Android中的service.binder.aidl这三者之间的关系给搞得有点难受, * 于是就自己花了点时间,将他们之间的关系给画出来,这样思维上就清晰多了,也方便 * 和朋友沟通,减少沟通成本. * * 2016-1-10 晴 深圳

Linux进程关系

Linux进程关系 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Linux的进程相互之间有一定的关系.比如说,在Linux进程基础中,我们看到,每个进程都有父进程,而所有的进程以init进程为根,形成一个树状结构.我们在这里讲解进程组和会话,以便以更加丰富的方式了管理进程. 进程组 (process group) 每个进程都会属于一个进程组(process group),每个进程组中可以包含多个进程.进程组会有一个进程组领

ubuntu14.04 android develop environment setup for android and linux driver

//For android and linux driver// 1,install ubuntu14.04 usb boot, CD boot, vmware workstation install, etc take usb boot for an example, download Universal-USB-Installer-1.9.5.6.exe and ubuntu-14.04.2-desktop-amd64.iso at windows xp platform. i take m

计算机相关视频资料分享(C/C++、python、java/Android、linux、算法、数据库等)

相关视频学习资料(C/C++.python.java/Android.linux.算法.数据库等)仅用于学习交流,不要用于商业目的. 1.C/C++ 系列 链接:http://pan.baidu.com/s/1gdvKXIN 密码:lglp 2.python系列 链接:http://pan.baidu.com/s/1eQzl4aQ 密码:5931 3.linux 系列: 链接:http://pan.baidu.com/s/1hq7UiDu 密码:yk7r 4.java 和Android 系列 链

如何在Android 或Linux 下,做Suspend /Resume 的Debug【转】

转自:http://blog.csdn.net/jacobywu/article/details/24735521 目录(?)[-] Question Answer 加boot 參數 no_console_suspend initcall_debug suspend_test wakelock power0 earlysuspend suspendresume 時間 fine tune Question: 如何在Linux 或 Android下得到足夠的information,來做Power M

Android 运行 Linux 可执行程序

/**************************************************************************** * Android 运行 Linux 可执行程序 * 声明: * 1. Linux可执行程序不能放在sdcard上,会导致没有权限,强烈建议放在 * /data/目录下,本人的可执行程序是放在了/data/local/中. * 2. 通过sdk自带的adb.exe将Linux可执行程序放到目标机上,cmd命令如下: * adb push <l