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系统区别


网友评论