Android init进程

  相关源码:

/system/core/init/Init.h
/system/core/init/Init.cpp
/system/core/init/Init_parser.h
/system/core/init/Init_parser.cpp
/system/core/init/Signal_handler.h
/system/core/init/Signal_handler.cpp

        Android系统在启动的过程中,kernel会启动第一个进程:init,它是一个由内核启动的用户级进程,实现了内核空间到用户空间的转变。

一、Linux操作系统     

         整个linux操作系统可以分为三层次,从最底层到最上层依次是:硬件-->内核空间-->用户空间,如下图:


 PS:

(1) 内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据;

(2)内核态与用户态:

        a、当一个任务(进程)执行系统调用而陷入内核代码中执行时,称进程处于内核运行态(内核态)。

              当进程处于内核态时,执行的内核代码会使用当前进程的内核栈,每个进程都有自己的内核栈;

        b、当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。

              当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态。


二、init 进程

      Android的init 进程(system/core/init/init.c)主要功能:

1)、分析init.rc启动脚本文件(system/core/rootdir),根据文件内容执行相应的功能;

2)、当一些关键进程死亡时,重启该进程;

3)、提供Android系统的属性服务;

       在init中启动起来的服务按照init.rc中的先后顺序,大致有:

(1)console: start a shell,code path: system/bin/sh,其源码中包含常用的shell命令,如ls,cd等。
(2)adbd: start adb daemon,通常带有disabled的选项,表明需要按名字启动,code path:system/bin/adb。
(3)servicemanager:这个服务管理着系统内所有binder services。code path: frameworks/base/cmds/servicemanager。
(4)Vold: android 的udev,code path: system/vold。
(5)Netd: start ntd daemon, code path: system/netd。
(6)Debuggerd: start debug system, code path: system/core/debuggerd。
(7)zygote: ['zaigəut]这是一个非常重要的服务,稍后详解。start Android Java Runtime and start systemserver。code path:frameworks/base/cmds/app_process。
(8)media: add AudioFlinger,AudioPolicyService,MediaPlayerService and CameraService to servicemanager,
(9)启动管理binder通讯的机制,依靠ProcessState 和IPCThreadState类来完成binder机制。Code path :frameworks/base/media/mediaserver。
(10)bootanim: 开机动画和铃声,code path:frameworks/base/cmds/bootanimation。
等等。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值