android linux 内核gpl,Android 内核分析

本文深入探讨Android系统的启动过程,从Linux内核2.6版本出发,解析init进程、zygote进程的启动机制,以及应用如何快速启动。通过介绍fork和exec函数的作用,解释了写时复制技术(copy-on-write)如何提升用户体验。

本文系列分析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的 进程间的通信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值