《Android的设计与实现:卷I》——第3章 3.3init进程的执行过程

简介: 本节书摘来自华章出版社《Android的设计与实现:卷I》——第3章,第3.3节。作者: 杨云君著.更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.3 init进程的执行过程

init进程是用户空间的第一个进程,进程号为1。Android世界中,很多重要的工作都是从它开始的。
init进程相关源码位于/system/core/init目录下,从其编译文件Android.mk中可以看到这部分源代码最终被编译为可执行文件init,代码如下:

1
2
3
4

注意 pollfd是Linux中定义的结构体,用于存放需要监控事件的文件描述符,其定义如下:
struct pollfd {
int fd; //需要监控的文件描述符
short events; //监控fd上的事件,由调用方设置

short revents;    //fd上发生过的事件,由返回方设置
};

poll的函数原型如下:

int poll(struct pollfd fds[], nfds_t nfds, int timeout);

nfds:用于标记fds[]中结构体元素的总数。

timeout:用于标记poll函数调用的阻塞事件,单位是毫秒。如果timeout=0,则poll不阻塞,直接返回。poll返回fds中revents不为0的fd个数;如果超时没有任何事件发生,返回0;失败时,返回-1。
通过对init.c文件中main函数的分析,可以将init的执行过程分为以下四个阶段:

1)初始化文件系统和日志系统,为之后的执行阶段做准备。这部分主要是Linux标准函数的调用。

2)解析 init.rc和init..rc初始化文件。

3)触发需要执行的Action和Service。

4)init循环监听处理事件。init触发所有Action后,进入一个无限循环,执行在可执行队列中的命令,重启异常退出的Service,并循环处理来自property service(属性服务)、signal和keychord的事件。

第一阶段很容易理解,都是基本的Linux函数调用。接下来,将针对其余三个阶段详细讲解init的运行过程。

相关文章
|
22天前
|
安全 Linux API
Android进程与线程
Android进程与线程
18 0
|
7月前
|
Java Linux Android开发
理解Android进程创建流程
理解Android进程创建流程
53 0
|
7月前
|
Shell Android开发
Android init language与init.rc初始化脚本
Android init language与init.rc初始化脚本
53 0
|
12月前
|
Unix Linux Android开发
Android C++系列:Linux进程间通信(二)
mmap可以把磁盘文件的一部分直接映射到内存,这样文件中的位置直接就有对应的内存 地址,对文件的读写可以直接用指针来做而不需要read/write函数。
73 0
|
12月前
|
Linux Android开发 C++
Android C++系列:Linux进程间通信(一)
每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不 到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用 户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程 间通信(IPC,InterProcess Communication)。
57 0
|
12月前
|
Shell Linux Android开发
Android C++系列:Linux进程(三)
如果一个进程已经终止,但是它的父进程尚未调用wait或waitpid对它进行清理,这时 的进程状态称为僵尸(Zombie)进程。任何进程在刚终止时都是僵尸进程,正常情况下,僵 尸进程都立刻被父进程清理了,为了观察到僵尸进程
95 0
|
12月前
|
Linux Android开发 C++
Android C++系列:Linux进程(二)
用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支), 子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的 用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建 新进程,所以调用exec前后该进程的id并未改变。
139 0
|
12月前
|
Shell Linux C语言
Android C++系列:Linux进程(一)
我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信 息,Linux内核的进程控制块是task_struct结构体。现在我们全面了解一下其中都有哪 些信息。
97 0
|
Java Android开发
|
缓存 监控 网络协议

热门文章

最新文章

相关实验场景

更多