Android系统与Linux系统关系

Linux系统的优点,简单列出如下几点

1.强大的内存管理和进程管理方案

2.基于权限的安全模式

3.支持共享库

4.经过认证的驱动模型

5.Linux本身就是开源项目

关系,需要明确三点:

1.Android采用Linux作为内核

2.Android对Linux内核做了修改,目的是适用移动设备使用

3.Android无法并入Linux主开发树

Android系统基于Linux

Android是在Linux内核基础之上,Linux提供核心服务:安全、内存管理、进程管理、网络和驱动模型等。Android按移动设备需求,在文件系统、内存管理、进程管理通讯和电源管理等进行修改,添加了驱动相关新功能。

Android和Linux区别

Android系统层和Linux内核之间,加了Dalvik的Java虚拟机。Dalvik可执行文件(.dex),java文件.class通过dx工具转化为.dex格式文件。

Android对Linux层的部分设备驱动进行了增强,如下

1)Android Binder

.Android Binder是基于OpenBinder框架一个驱动。IPC通讯,/drivers/staging/android/binder.c。

2).Android电源管理(PM)

Android电源管理是基于Linux电源系统轻量级Android电源管理驱动,针对嵌入式设备做了优化。利用锁和定时器来切换系统状态,控制设备不同状态下功耗,以达到节能的目的。

kernel/power/earlysuspend.c

kernel/power/consolerealysuspend.c

kernel/power/fbearlysuspend.c

kernel/power/wakelock.c

kernel/power/userwakelock.c

3)低内存管理(Low Memory Killer)

Android中低内存管理和Linux标准OOM(Out of Memory)相比,机制更灵活,可以根据要杀死进程类释放需要的内存。Low Memory Killer代码非常简单,里面关键函数lowmem_shrinker(),作为一个模块初始化调用register_shrinke注册一个low_shrinker(),会被vm在内存紧张时候调用。lowmem_shrinker完成具体操作,简单寻找一个最合适进程杀死,从而释放它的占用内存。drivers/staging/android/lowmemorykiller.c

4)匿名共享内存(Ashmem)

匿名共享内存为进程间提供大块共享内存,同时为内核提供回收和管理的内存机制。如果一个程序访问一个释放了后的内存块,收到一个错误提示,然后重新分配重载数据。mm/ashmem.c。

5)Android PMEM(Physical)

PMEM用于向用户提供连续的物理内存区域,DSP和某些设备只能工作在连续物理内存上。驱动提供了mmap,open,release和ioctl等接口。drivers/misc/pmem.c

6)Android Logger

Android Logger是一个轻量级日志设备,用于抓取Android系统各种日志。drivers/staging/android/logger.c

7)Android Alarm

Android Alarm提供了一个定时器,用于把设备从睡眠状态唤醒,同时提供一个即使在设备睡眠也会运行的时钟基准。driver/rtc/alarm.c,driver/rtc/alarm-dev.c

8)USB Gadget驱动

此驱动是一个基于标准Linux USB gadget驱动框架设备驱动,Android的USB驱动基于gadget框架的。

drivers/usb/gadget/android.c

drivers/usb/gadget/f_abd.c

drivers/usb/gadget/f_mass_storage.c

9)Android RAM Console

为了提供调试功能Android允许调试日志信息写入一个称为RAM Console设备里,它是一个基于RAM的Buffer。drivers/staging/android/ram_console.c

10)Android timed device

Android timed device提供对设备进行定时控制的功能,目前仅支持vibrator和LED设备。drivers/staging/android/timed_output.c(time_gpio.c)

11)Yaffs2文件系统

Android系统采用Yaffts2作为MTD nand flash文件系统。Yaffts2使用更小内存来保存运行状态,占用内存小,垃圾回收非常简单且快速。/fs/yaffs2

除了以上的驱动增强以外,还做了其他的一些改动,主要是以下几点

1.Android没有glibc支持

由于Android最初用于一些便携的移动设备上,所以,可能出于效率等方面的考虑,Android并没有采用glibc作为C库,而是Google自己开发了一套Bionic Libc来代替glibc

2.它并不包括一整套标准的Linux使用程序

Android并没有完全照搬Linux系统的内核,除了修正部分Linux的Bug之外,还增加了不少内容,比如:它基于ARM框架增加的Gold-Flsh平台,以及yaffs2 FLASH文件系统(如果学习了嵌入式的话就会知道yaffts2 FLASH文件系统已经在基于linux的很多嵌入式设备上采用了,技术已经非常成熟)等。

3.它没有本地基于X服务的窗口系统

什么是本地窗口系统呢?本地窗口系统是指GNU/Linux上的X窗口系统,或者Mac Ox X的Quartz等。不同的操作系统的窗口系统可能不一样,Android并没有使用Linux的X窗口系统。

说了这么多,用两张图对比一下Android系统和Linux系统区别


你可能感兴趣的:(Android系统与Linux系统关系)