Android 系统探索1 —— 进程

进程 对于我们计算机相关专业毕业的人而言,显得陌生而又熟悉。因为大学的时候操作系统 这本课程中 最核心的部分就是围绕进程展开的。“知恩图报”—— 都已经还给老师啦。

一如IT深似海…啊


1. 进程的概念

操作系统最核心的概念就是进程,其它内容都是围绕着进程展开的。

进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位.

AWAN,计算机在早期阶段是只支持单任务的,因为我是单核的CPU。这意味着:敲代码的时候就不能听音乐。所以早起的先驱者就引入了进程的概念。

进程是操作系统提供的最古老,最重要的抽象概念之一。即使CPU只有一个,将一个单独的CPU变换成多个虚拟的CPU,让我们感受到(伪)并发的能力。

毫不夸张地讲,没有进程的抽象,现代计算机将不复存在。

值得注意的是,处在现代的我们不能说算盘的发明意义不大。

习惯于在电脑上工作的我们也许不太注意:我们的电脑经常会在同一时间做许多事情。从概念来讲,每个进程都拥有自己的虚拟CPU,事实上,真正的CPU其实在各个进程之间来回切换的。

从操作系统的实现上来讲,新进程 都是由一个已存在的进程执行了一个用于创建进程的系统调用所创建的。

在UNIX系统中,只有一个系统调用可以用来创建新进程:fork

创建进程之后,父进程和子进程有各自不同的存储空间。

2. Android系统的进程

我们都知道Android系统底层是基于Linux Kernel的。当Kernal启动时,会创建init进程,该进程是所有用户态的鼻祖。

在这里插入图片描述

Android系统的启动最重要的过程也就是各个系统服务的启动,系统所有的功能都是依赖这些服务来完成的。

PS :此处的服务 是从概念上讲的,跟Android四大组件中的Service没有任何关系。

在这里插入图片描述
此图来源于:Android启动流程


这些服务分为2部分:

  1. 本地服务;
  2. Android服务;

所有的这些服务都会向ServiceManager进程注册

1. 本地服务

本地服务指的是:运行在C++层以及Native层的系统进程一部分本地服务是init进程直接启动的,如:ServiceManager,rild,MediaServer等,还有一部分是由这些本地服务进一步创建的,如:MediaServer 服务会启动 MediaPlayerService 及 CameraService等。

2. Android服务

Android进程指的大名鼎鼎的Zygote进程 (PS:Zygote 的英文意思为:受精卵)
它是Android系统中最重要的进程,后续所有的应用程序包括System系统进程都是zygote进程fork出来的。

我们都知道Delvik虚拟机,那么它和zygote进程有什么联系呢?
其实它fork出来的进程就可以快速地获得一个虚拟机实例。

3. 总结

操作系统最核心的概念就是进程

Android系统的进程有很多,我们这里特别指出几个:

  1. init 进程是第一个进程。
  2. ServiceManager 管理着整个系统的内部服务。
  3. MediaService 启动了MediaPlayerServiceCameraService
  4. Zygote进程是所有Android应用的父进程。

请继续阅读 Android 系统探索2 —— Android系统的启动过程


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章