在公交车上班,将嵌入式系统从头到脚捋了一遍,将每个层,每个模块和现实映射了一下,到公司后了记录下来。
Booting Up Sequence这个过程相当于人的成长阶段,从给予能量(相当于上电,供电),开始活动,各个组织逐渐开始发育,即各个模块开始进行初始化,如内存管理,进程调度,各个驱动模块的加载,DeviceTree 的加载和解析。
1. Init 是第一个用户空间的进程,PID为1,相当于一个人第一次有了自己的独立思维,开始自己的独立人生,即进入成年阶段。然后开始各种社交活动,生活,工作,娱乐,学习深造等各种进程(Create Process),构成一个完整的人生。后来通过竞选,这个人成为了总统。
2. Linux Kernel相当于总统,它具有管理各种资源,如土地,工厂,海洋,太空的权力。并能够调度各个不同的部门来轮流分享这些资源。内存管理:管理资源进程调度:分配不同的人分别拥有这些资源。驱动模型:新增一个政府部门(Device);给予拨款,使之运转起来(Driver). 新部门隶属于工业,农业,商业(Bus).砍掉一个部门(驱动卸载)如果映射到人身上,则是移植一个新器官(Device),给予供血(Driver),属于哪个组织,如躯干,四肢(Bus)文件系统:拥有访问不同部门的权力,即各个不同的文件。网络:和各个其他国家交互的交互。
3. Android 系统相当于在国家总统之上构建一个可以管理社会,国家的团队。它的核心是总理,相当于Android VM虚拟机。可以提供各个部门,如国土,民航,信息,商业各个部门的运行平台。并且负责新增一个部门。新增一个Activity 实例,即Fork一个进程,这就需要由作为Kenel 的总统来执行和批准。不同的界面(Activity)相当于不同的工作,它们之间通信的渠道是Binder,共享内存,这些是在内核里面实现的通信机制。相当于由总统来主持进行各个不同部门之间的沟通。Native 层相当于一些工作进行了外包,分别有不同的外包公司来完成某些特殊的工作,如Database,Graph Library,各种引擎。但各个不同的外包公司会有不同的行为方式,和沟通方式,甚至工作语言,为了减少作为核心的总统的工作,要求每个Native必须提供统一的接口。这样就增加一个HAL层,来将调用Kernel的方式标准化。
4. 进程调度由内核负责进行调度,它掌握着各种资源,分别让不同的人来分享,如海洋,土地,一旦被调度器分配这些资源Fork生成一个新的子进程,相当于一个人生了一个孩子,在开始时孩子 会和 父亲生活 环境 ,方式 都一致,当逐渐长大,需要自己的独立的空间时,就在某些方面和 父亲进行分 离,如一个独立的房间,就相当于COW机制, 创建了一个独立的内存空间->mm。孩子 新交了 很多新朋友 ,则就相当于有了自己的可以操作的->Files链表。Clone一个新线程,相当于分身术,变化出许多相同的自己,它们拥有和本尊一样的生活空间和各种资源。但用于完成不同的工作,如参加会议,培训等。进程Sleep:可以被信号唤醒 的睡眠 进程,它相当于小睡 一会,被周围 的人 喊一声,则会被唤醒,重新进入就绪队列。不可以被唤醒 的睡眠 进程,相当于在等待某一个 事件,如等火车 ,只有火车 到达了,才会醒来。动物的冬眠,只有温度升到某一个值,才可以唤醒。一个进程执行完成,相当于人的一生结束了。此时会进入僵尸状态,即虽然人死了,各种社会资源都不再拥有。但task_struct数据结构还存在。即相当于人的尸体还在,只有当火化后,才算是彻底消失。即task_struct 这个数据结构销毁。
5. 内存管理每个人都有独立的生活空间,每个人都感觉到自己独立拥有整个社会资源。但只能管理用户空间部分,及每个人拥有全部权力的一个空间。内存空间是由内核负责的MMU来负责管理的。即个人所能看到的一切空间,还是受政府控制的。内核空间则需要特殊的部门来完成,如政府部门。如新建一个公司过程中需要的各种手续。需要政府部门来进行审批才可以执行。
6. Static和Share Libary 链接方式静态库相当于自己的老婆,肯定要生活在一起,所以会链接在一起。共享库相当于公共情人,每个人都有可能会用到,所以放在一个公共的场所,只有需要的时候才去看一 下。看完则直接分开,这样可以减少自己的负担(可执行文件的Size)。Load加载:链接在一起,相当于开房间,执行代码中的命令。
7. MTK和高通平台相当于不同的平台,如火星和地 球,各自在不同的疆土上进行工作,提供不同的运行体验。如果 性能优越 ,则会生活富饶 ,环境优美,如果 性能底下 ,则会 导致 社会动 荡,环境恶化,生活体验底下。