本文系列分析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 linux 内核gpl,Android 内核分析相关推荐

  1. android linux截图库,Android中截图(surfaceView)源码

    总结了一个方法,实现了在Android当前Activity的截图,本人测试确实通过了,不过有朋友说截出来的图是黑色的,不能看.我心想,这没有问题啊,相同的代码我就可以执行通过,并没有没有在意这个问题. ...

  2. android linux网络连接,Android和Linux服务器之间的TCP连接

    我正在编写一个代码,需要每秒从Android移动设备向台式计算机(linux服务器)发送数据.由于数据经常发送,通过Http命中无法实现(因为会消耗时间),所以Tcp通信似乎是更好的选择,因为andr ...

  3. android linux终端,为Android安装Linux终端仿真与环境APP

    今天为大家推荐Android下的Linux终端仿真与环境APP,它叫Termux. 有了Termux,它会在你的Android手机模拟一个最小化的Linux运行环境,与很多Linux发行版类似.它可以 ...

  4. Linux模拟运行Android,Linux下进行Android环境配置与Android模拟器运行

    1.Jdk环境先装 2.下载安装Android SDK 基础包:http://tools.android-studio.org/index.php/sdk 选择linux版本下载(wget url) ...

  5. Android/Linux Thermal框架分析及其Governor对比

    https://www.cnblogs.com/arnoldlu/p/6388151.html 图表 1 Thermal框架 随着SoC性能的快速提升,功耗也极大提高,带来的负面影响是SoC的温度提高 ...

  6. Android Linux内核编译调试

    对于在Windows上写代码写习惯的人,调试是必不可少的手段,但是转到Android以后,发现调试手段异常简陋,跟Windows简直不是一个级别,特别是Android的内核调试,网上资料也相对较少,不 ...

  7. codova添加android慢_从 0 开始学 Linux 内核之 android 内核栈溢出 ROP 利用

    作者:Hcamael@知道创宇404实验室 最近在研究一个最简单的android内核的栈溢出利用方法,网上的资料很少,就算有也是旧版内核的,新版的内核有了很大的不同,如果放在x86上本应该是很简单的东 ...

  8. 浅入浅出 Android 安全:第二章 Android Linux 内核层安全

    第二章 Android Linux 内核层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 作为最广为人知的开源项目之一 ...

  9. android 4.4 linux 内核版本,稳定内核版本和更新  |  Android 开源项目  |  Android Open Source Project...

    由于之前的内核开发模型(每 2-3 个月发布一次新版本)被认为无法满足大多数用户的需求,Linux 内核稳定版模型于 2005 年随之诞生.用户希望实际用到在 2-3 个月内提交的错误修复程序,但 L ...

最新文章

  1. JOGL   java调用openGL
  2. 【控制】影响系统响应的因素
  3. 本地开发时连接后台数据库时出现的错误,附自救方法
  4. 2021牛客暑期多校训练营7 J-xay loves Floyd(最短路+bitset优化集合交)
  5. WxParse手机端报console.dir错误
  6. 阿里2019财年收入达3768.44亿元 盘前涨幅一度超4%
  7. Linux中关于httpd仓库安装的简要步骤
  8. bili弹幕姬_B站弹幕姬插件——弹幕日志
  9. 如何进行在线教育平台开发(源码篇)
  10. tkmybatis 权威指南 官方文档
  11. 高等教育学:教育目的与教育制度
  12. 算术右移 java_Java 中 算术右移和逻辑右移有什么区别?
  13. 《传奇之王》风波不断 编剧替柳云龙打抱不平_0
  14. recycleview横向展开_android 横向recyclerView 数据居中,从中间往两边展开显示
  15. Web指纹识别器系列1:开源项目搜集和反思
  16. 定义一个长方形类,定义 求周长和面积的方法,然后定义一个测试了Test2,进行测试
  17. 华为设备Voice VLAN配置命令
  18. linux可以打开浏览器嘛,Linux下怎样可以打开浏览器?
  19. There is no getter for property named ‘username‘ in ‘class com.kuang.entity.User‘“
  20. Mac Endnote 20使用

热门文章

  1. Bio-protocol第一届生物实验短视频大赛集锦(三)——软件使用篇
  2. Nature子刊:海大张晓华团队发现马里亚纳海沟微生物抵抗高压的新机制
  3. Microbiome:中科院遗传发育所揭示植物发育和氮肥共同作用下的小麦根系微生物组...
  4. 哈佛牙学院博士后:教你口腔保健基本功之刷牙篇
  5. python描述器 触发事件_Python面向对象 - 描述器
  6. R语言ggplot2可视化分组的重叠图实战:grouped overlay plot
  7. python使用matplotlib可视化、自定义移除Y轴指定轴刻度标签(removing specific axis ticks in matplotlib y axis)
  8. 使用KNN模型进行多标签分类实战(Multilabel Classification)
  9. R语言定量变量组间差异检验
  10. 卡耐基梅隆大学计算机金融专业,卡耐基梅隆大学计算机金融硕士申请要求及专业优势...