android系统架构的前世今生,从零开始学数据结构和算法

本文探讨了Android系统与Linux的区别,包括Google自定义的BionicLibc库,非标准的内核和添加的特色功能如Gold-Fish平台和yaffs2文件系统。文章还提到Android的非本地窗口系统和专有的驱动程序,如AndroidBinder和低内存管理器等。
摘要由CSDN通过智能技术生成

C库,而是Google自己开发了一套Bionic Libc来代替glibc。

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

Android并没有完全照搬Liunx系统的内核,除了修正部分Liunx的Bug之外,还增加了不少内容,比如:它基于ARM

构架增加的Gold-Fish平台,以及yaffs2 FLASH文件系统(如果学习了嵌入式的话就会知道yaffs2 FLASH文件系

统已经在基于linux的很多嵌入式设备上采用了,技术已经非常成熟)等。

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

什么是本地窗口系统呢?本地窗口系统是指GNU/Linux上的X窗口系统,或者Mac OX X的Quartz等。不同的操作系统

的窗口系统可能不一样,Android并没有使用(也不需要使用)Linux的X窗口系统(对原作者的这个观点不是很赞

同,原文章这一点放在第一条,并说“这是Android不是Linux的一个基本原因”,这个不敢苟同,由于作者 没有

指明android用的什么显示系统,我也不好说)。

4.Android专有的驱动程序

除了上面这些不同点之外,最重要的是,为了突出android特性,支持android设备,Android还对Linux设备驱动进行了增强,主要如下所示。

1)Android Binder 基于OpenBinder框架的一个驱动,用于提供 Android平台的进程间通信(InterProcess

Communication,IPC)功能。源代码位于drivers/staging/android/binder.c。

2)Android电源管理(PM) 一个基于标准Linux电源管理系统的轻量级Android电源管理驱动,针对嵌入式设备做

了很多优化。源代码位于:

kernel/power/earlysuspend.c

kernel/power/consoleearlysuspend.c

kernel/power/fbearlysuspend.c

kernel/power/wakelock.c

kernel/power/userwakelock.c

3)低内存管理器(Low Memory Killer) 比Linux的标准的OOM(Out Of Memory)机制更加灵活,它可以根据需要

杀死进程以释放需要的内存。源代码位于 drivers/staging/ android/lowmemorykiller.c。

4)匿名共享内存(Ashmem) 为进程间提供大块共享内存,同时为内核提供回收和管理这个内存的机制。源代码位于

mm/ashmem.c。

5)Android PMEM(Physical) PMEM用于向用户空间提供连续的物理内存区域,DSP和某些设备只能工作在连续的物

理内存上。源代码位于drivers/misc/pmem.c。

6)Android Logger 一个轻量级的日志设备,用于抓取Android系统的各种日志。源代码位于

drivers/staging/android/logger.c。

7)Android Alarm 提供了一个定时器,用于把设备从睡眠状态唤醒,同时它还提供了一个即使在设备睡眠时也会

运行的时钟基准。源代码位于drivers/rtc/alarm.c。

8)USB Gadget驱动 一个基于标准 Linux USB gadget驱动框架的设备驱动,Android的USB驱动是基于gaeget框

架的。源代码位于drivers/usb/gadget/。

9)Android Ram Console 为了提供调试功能,Android允许将调试日志信息写入一个被称为RAM Console的设备

里,它是一个基于RAM的Buffer。源代码位于drivers/staging/android / ram_console.c。

10)Android timed device 提供了对设备进行定时控制的功能,目前支持vibrator和LED设备。源代码位于

drivers/staging/android /timed_output.c(timed_gpio.c)。

11)Yaffs2 文件系统 Android采用Yaffs2作为MTD nand flash文件系统,源代码位于fs/yaffs2/目录下。

Yaffs2是一个快速稳定的应用于NAND和NOR Flash的跨平台的嵌入式设备文件系统,同其他Flash文件系统相比,

Yaffs2能使用更小的内存来保存其运行状态,因此它占用内存小。Yaffs2的垃圾回收非常简单而且快速,因此能表

现出更好的性能。Yaffs2在大容量的NAND Flash上的性能表现尤为突出,非常适合大容量的Flash存储。

最新的Android系统分为五层六区(域):


官方图

Linux内核层(Linux Kernel):Android系统基于Linux2.6内核,这一层为Android设备各种硬件提供了底层驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等;

硬件抽象层(android hardware abstraction layer):安卓驱动硬件的方式与Linux不尽相同。传统Linux的驱动完全存活于内核空间。Android则在内核外部增加了硬件抽象层(HAL, Hardware Abstraction Layer) ,把一部分驱动功能放到HAL层中。安卓为什么费尽麻烦增加一个HAL呢?为了保护源代码。Linux内核采用了GPL协议,所以硬件生产商想要支持Linux系统,必须遵照GPL协议公开硬件驱动的源代码。但这些源代码中包含有许多硬件的设计信息,牵涉到硬件生产商的核心利益。而增加了HAL层之后,硬件厂商就不需要开放所有的驱动代码了。

系统运行库层(libraries):这一层通过一些C/C++库(so库)来为Android系统提供了主要的特性支持。如SQLite库提供了数据库支持,OpenGL ES库提供了3D绘图支持,Webkit库提供了浏览器内核支持等;

应用框架层(application framework):这一层主要提供构建应用程序时可能用到的各种API,Android自带的一些核心应用就是使用这些API完成的,开发者也可通过使

用API来构建自己的应用程序;

应用层(applications):这一层主要用于手机应用的安装,如系统自带联系人、短信等程序,或是第三方应用程序

以上为五层五区,还有一个区域是存在于libraries层的Android运行时库(Android Runtime),它主要提供一些核心库,能够允许开发者使用Java语言来编写Android应用。另外Android运行时库中还包含了Dalvik虚拟机,它使得每一个Android应用都能运行在独立的进程中,且拥有一个自己的Dalvik虚拟机实例。相较于Java虚拟机,Dalvik是专门为移动设备定制的,它针对手机内存、CPU性能有限等情况作了优化处理。 每个Android应用都运行在自己的进程上,享有Dalvik虚拟机为它分配的专有实例。为了支持多个虚拟机在同一设备上高效运行,dalvik被改写过。Dalvik虚拟机执行的是Dalvik格式的可执行文件(.dex)-该格式经过优化,以将内存好用降到最低。

Dalvik虚拟机 和代码编译


自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

给大家分享一份移动架构大纲,包含了移动架构师需要掌握的所有的技术体系,大家可以对比一下自己不足或者欠缺的地方有方向的去学习提升;

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

下自己不足或者欠缺的地方有方向的去学习提升;**

[外链图片转存中…(img-zLXTayqP-1712437813941)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值