Android系统架构及启动流程

sensors传感器   Dialer拨号器  Drivers驱动程序  keypad键盘   Power Management 电源管理   Browser浏览器

android系统的启动流程大概描述:Kernel(内核)中启动的第一个用户进程是init程序;而init会通过解析init.rc来启动zygote服务;而zygote又会进一步的启动SystemServer。在SystemServer中,Android会启动一系列的系统服务共用户调用。整个流程大致如此。

Google官方提供了一张经典的四层架构图,从下往上依次分为:Linux内核、系统库和Android运行时环境、框架层、应用层,其中每一层都包含大量的子模块或子系统。

Android系统启动过程从下往上的一个过程:Loader -> Kernel -> Native -> Framework -> App

1、Loader

Boot ROM:当手机处于关机状态时,长按Power键开机,引导芯片开始从固化在ROM里的预设出代码开始执行,然后加载引导程序到RAM;

Boot Loader:这是启动Android系统之前的引导程序,主要是检查RAM,初始化硬件参数,引导程序设置网络、内存等等。

2、Kernel

到这里才刚刚开始进入Android系统.

启动Kernel的0号进程:初始化进程管理、内存管理,加载Display,Camera Driver,Binder Driver等相关工作;

启动kthreadd进程(pid=2):是Linux系统的内核进程,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等内核守护进程。kthreadd进程是所有内核进程的鼻祖。

Android基于Linux 提供核心系统服务,

例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。如果你只是做应用开发,就不需要深入了解Linux Kernel层

3、Native

•启动init进程(pid=1),是Linux系统的用户进程,init进程是所有用户进程的鼻祖。

•init进程启动Media Server(多媒体服务)、servicemanager(binder服务管家)、bootanim(开机动画)等重要服务;

•init进程还会孵化出installd(用于App安装)、ueventd、adbd、lmkd(用于内存管理)等用户守护进程;

•init进程孵化出Zygote进程,Zygote进程是Android系统的第一个Java进程,Zygote是所有Java进程的父进程,Zygote进程本身是由init进程孵化而来的。

4、Framework

•Zygote进程,是由init进程通过解析init.rc文件后fork生成的,Zygote进程主要包含:

–加载ZygoteInit类,注册Zygote Socket服务端套接字;

–加载虚拟机;

–PreloadClasses;

–PreloadResouces。

•Zygote进程fork出System Server进程,System Server是Zygote孵化的第一个进程,地位非常重要。

•System Server进程:负责启动和管理整个Java framework,包含ActivityManager,PowerManager等服务。

•Media Server进程:负责启动和管理整个C++ framework,包含AudioFlinger,Camera Service等服务。

5、App

•Zygote进程孵化出的第一个App进程是Launcher,这是用户看到的桌面App;

•Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上。

•所有的App进程都是由Zygote进程fork生成的。

详解地址:

1.http://gityuan.com/android/

2.https://blog.csdn.net/dearsq/article/details/53647871#%E4%B8%80bootrom

3.https://blog.csdn.net/h655370/article/details/77727554

拓展:


RAM与ROM
      随机存取存储器(RAM)又称作“随机存储器”是与CPU直接交互数据的内部存储器,也叫主存(内存)。
可以随时读写,而且速度快,通常作为操作系统或者其他正在运行中的程序的临时数据存储媒介。当电源关闭时RAM不能保留数据。如果需要保留数据,就必须把它们写入一个长期的存储设备中(例如:硬盘)。RAM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM不会自动消失,可以长时间断电保存。
       只读存储器(ROM)。ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器RAM那样能够快速地,方便地加以改写。ROM所存数据稳定,断电后所存数据也不会改变。
一般来说会就比较难以理解RAM和ROM与平时所说的运行内存和硬盘容量到底有着什么样的关系?其实从一般意义上讲它们是一样的。但是从计算机和手机的角度来看就是有一些区别的。
        从电脑来说一般比较好理解,RAM就是我们平时所说的运行内存,它的确是随时可读写的。因为CPU处理的数据都是以运行内存为中介的,断电后信息是不保存的。那么对于ROM来说,是不是就是硬盘呢?不是说ROM只可以读吗?硬盘确是可以修改的啊,的确。必须明确一点,RAM和ROM都是内存,而硬盘是外存,所以ROM不能等于硬盘。计算机中的ROM主要是用来存储一些系统信息的,或者启动程序,这些都是非常重要的,只可以读一般不能修改,断电也不会消失。
        那么对于手机来说呢?其实很多困惑都是来自于手机厂商的宣传信息的误导。因为一般手机厂商都会说有多少G的RAM,多少G的ROM,在手里面,RAM就是跟电脑一样的运行内存一样,而ROM就是不一样了,你想想看,如果只用来存储一些系统各开机引导程序,就需要几个G的容量吗?其实手机的ROM就是跟硬盘挂上钩了,手机中的ROM有一部分用来存储系统信息,还有一些装机软件,剩余的大部分容量都是拿来作为硬盘用的,可以读可以写。

总结:

RAM(随机存取存储器):可看做是运行内存,与cpu直接交互数据,可以随时读写,而且速度快,电源关闭时不保留数据。(可以视为运行内存)

ROM(只读存储器):ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,不可以改写,可长时间断电保存。

Syscall:

向右滑动getScrollX就为负数,向左滑动getScrollX为正数
内核提供用户空间程序与内核空间进行交互的一套标准接口,这些接口让用户态程序能受限访问硬件设备,比如申请操作系统资源,操作设备读写,创建新线程等。用户空间发生请求,内核空间负责执行,这些接口便是用户空间和内核空间共同识别的桥梁,这里提到两个字"受限",是由于为了保证内核稳定性,而不能让用户空间程序随意更改系统,必须是内核对外开放且满足权限的程序才能调用相应接口。
在用户空间和内核空间之间,有一个叫做Syscall(系统调用)的中间层,是连接用户态和内核态的桥梁。这样既提高了内核安全性,也便于移植,只需实现同一套接口即可,Linux系统,用户空间通过内核空间发出Syscall,产生软中断,从而让程序陷入内核态,执行对应的操作,对于每个系统调用都会有一个对应的系统调用号,比很多操作系统要少很多。
安全性与稳定性:内核驻留在受保护的地址空间,用户空间程序无法直接执行内核代码,也无法访问内核数据,通过系统调用。
性能:Linux上写文切换时间很短,以及系统调用处理过程非常精简,内核优化得好,所以性能上往往比很多其他操作系统执行要好。

硬件抽象层(HAL)
硬件抽象层提供标准接口,HAL包含多个库模块,其中每个模块都为特定类型的硬件组件实现一组接口,比如WIFI/蓝牙模块,当框架API请求访问设备硬件时,Android系统将为硬件加载相应的库模块。

init进程和Zygote进程:

init进程孵化出Zygote进程,Zygote进程是Android系统的第一个Java进程(即虚拟机进程),Zygote是所有Java进程的父进程,Zygote进程本身是由init进程孵化而来的。

  • System Server进程,是由Zygote进程fork而来,System Server是Zygote孵化的第一个进程,System Server负责启动和管理整个Java framework,包含ActivityManager,WindowManager,PackageManager,PowerManager等服务。
  • Media Server进程,是由init进程fork而来,负责启动和管理整个C++ framework,包含AudioFlinger,Camera Service等服务。       
  • Syscall && JNI

  • Native与Kernel之间有一层系统调用(SysCall)层,见Linux系统调用(Syscall)原理;
  • Java层与Native(C/C++)层之间的纽带JNI,见Android JNI原理分析
  • Android系统架构开篇(好厉害的,全!!!)

  • http://gityuan.com/android/
  • Android的发展历程与演变史

  • http://gityuan.com/2019/03/20/android_future/
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值