专栏名称: 鸿洋
你好,欢迎关注鸿洋的公众号,每天为您推送高质量文章,让你每天都能涨知识。点击历史消息,查看所有已推送的文章,喜欢可以置顶本公众号。此外,本公众号支持投稿,如果你有原创的文章,希望通过本公众号发布,欢迎投稿。
目录
相关文章推荐
鸿洋  ·  卡顿监测的方方面面 ·  4 天前  
今天看啥  ›  专栏  ›  鸿洋

再学安卓 - init进程

鸿洋  · 公众号  · android  · 2024-12-23 08:35
    

主要观点总结

本文梳理了Android系统启动过程中内核初始化及init进程的前世今生,包括0号进程、1号进程以及epoll事件通知机制等细节。

关键观点总结

关键观点1: 0号进程:引导阶段和启动阶段,汇编语言最终跳转到C语言函数start_kernel,执行init二进制文件,创建init进程。

0号进程是内核初始化的关键,分为引导阶段和启动阶段。引导阶段以汇编语言为主,最终会跳转到C语言的start_kernel函数。该函数间接执行了init二进制文件,从而创建了init进程。

关键观点2: 1号进程:init进程负责的初始化工作。

init进程作为用户空间进程,负责很多初始化工作,包括创建目录、设置访问权限、挂载文件系统、执行安全策略、加载解析rc脚本等。

关键观点3: epoll事件通知机制:用于高并发场景,init进程使用其进行事件通知处理。

epoll是一种IO多路复用机制,用于处理高并发场景。init进程使用epoll进行事件通知处理,如检测子进程信号、属性服务唤醒信号等。

关键观点4: 其他进程:如zygote和kthreadd,分别作为应用进程和内核线程管理的父进程,不在本文讨论范围内。

本文重点介绍了init进程的相关内容,其他进程如zygote和kthreadd虽然也很重要,但不在本文的讨论范围内。


文章预览

前言 本篇内容会适度发散,浅浅涉及到Kernel的源码,这对于了解Android系统的开端是有帮助的。 Kernel代码位于Google仓库( https://android.googlesource.com/kernel )中,可以直接git下载。打开之后可以看到很多目录,其中:common(Android通用内核)、mediatek(MTK平台内核)、msm(高通平台内核)。如果对内核感兴趣的伙伴,可以参照官网文档( https://source.android.com/source/building-kernels )下载完整代码并编译。同时也可以在线浏览Kernel源码( https://cs.android.com/android/kernel/superproject )。 借用Gityuan( https://gityuan.com/android/ )的一张系统启动架构图: 1 一切的开端 从上图中可以看到,开机之后会首先加载Boot Loader。Boot Loader通过一系列指令将内核初始化代码拷贝到内存中并交给CPU执行。其中就包含静态初始化0号进程的代码。此时它还叫做 init_task ,等它完成各种init工作之后,就 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览