本文系列分析android在到底是个什么。它是怎么做到的作为一个手机系统。
总所周知android是基于Linux内核2.6版本的。而Linux的内核是基于GPL开源协议的。所以android在设计的时候取了一些巧.这一章主要说android的一个启动过程。
在看之前你需要明白Linux的fork 和exec 函数 如果你不知道 请自己百度。
首先是Linux 的init zygote进程启动 。然后这个进程会去启动Android的一些列文件 都是作为进程来fork 出来的。都是属于init 的子进程。我们的4大组件 我们的formwork 层 。还有lib层 都是作为一个个子进程 来运行的。有很多子进程。
注意 重点在这个时候 我们linux的fork的原理要知道 首先是fork 很快。但是为什么这么快 是因为 我们fork的时候是没有分配物理地址的。只有在作出改变的时候才分配。Fokr() 函数之后会执行exec 函数 然后来创建一个独立的子进程 然后在创建的时候为了保证frok的速度使用 优化用户体验 采用了一种写时拷贝技术 (copy-on-write)
而且我们感觉开启一个app 很快 是因为frok 的开销是就是父进程的页表。以及子进程创建唯一的进程描述符 就是pid 可以理解为创建了一个几个字段的一个说明而已。所以我们启动很多app 所以在linux下的一个状态就是 所有的没有改变的地方 因为 我们引用了很多系统资源 4大组件 这些 都是系统的 然后其物理地址 其实就一份 因为只有一个系统嘛 所以原生的显示很快 因为进程的复制和调用 都是已经分配好了的 直接调用就好了 因为开机 init 就启动了系统啊。所以我之前的疑问 就是 有很多虚拟机嘛 事实上虚拟机 都是一样的 在linux 都是万物皆文件的。所以说 这些都是一个虚拟机 实际上 在物理地址上 只是 我们 在内存中多了一个引用而已 参照java 的对象的浅拷贝。
在很多文章都会说。我们android是沙盒机制。然后是app 崩溃其中一个 不会影响其他的app.看完这个文章你应该明白他是怎么做的。不同的app 都有自己调用虚拟机的。然后根据不同的描述符 标识不同的结果。就是我们所看到的那种。其实虚拟机只有一个 只是不同的app 在使用而已。这一点我们可以看手机内存就知道了。多个app内存会减少。关于这个结果你需要明白一些基础的原理就是cpu 的构成。我们平时说的堆 栈 寄存器 静态运行和动态运行的几个概念。jvm是基于栈 的 而dvm是基于寄存器的。寄存器是属于cpu 的一部分 而堆栈 是属于内存中的一种数据结构而已。
下一章 我们说android的 进程间的通信
Android 内核分析
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...