zoukankan      html  css  js  c++  java
  • Android系统全貌 (转)

    转自Gityuan的Android开篇,对自我学习作进一步整理。

    Android系统以Linux内核作为基底,上层采用Native层Java层。系统分为内核空间和用户空间,并通过系统调用(Syscall)连通。用户空间主要采用C++和Java代码实现,通过JNI技术连通Java层和Native层(C/C++)。


    图片来源 GITYUAN

    Loader层

    • Boot ROM: 电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行.加载引导程序到RAM,然后执行.
    • Boot Loader: 这是Android系统系统之前的引导程序,主要用来检测外部的RAM以及设置网络、内存、初始化硬件参数等.

    Kernel层

    Kernel层是指Android内核层,到这里才刚刚开始进入Android系统。

    • 启动Kernelswapper进程(pid=0):该进程又称为idle进程, 系统初始化过程Kernel由无到有开创的第一个进程, 用于初始化进程管理、内存管理,加载Display,Camera Driver,Binder Driver等相关工作(图中kernel层蓝色区块);
    • 启动kthreadd进程(pid=2):是Linux系统的内核进程,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等一系列内核守护进程。kthreadd进程是所有内核进程的父进程。

    Linux内核加载主要包括初始化kernel核心(内存初始化,打开中断,初始化进程表等)、初始化驱动、启动内核后台(daemons)线程、安装根(root)文件系统等。后续启动第一个用户级进程init(pid=1).

    Native层

    Native层主要包括启动init进程Android的第一个用户空间进程)、HAL层硬件抽象层)以及开机动画等。init进程是所有用户进程的鼻祖。同时init进程也会孵化一系列用户进程,还会启动关键的服务以及孵化Zygote进程

    • init进程会孵化出ueventd、logd、healthd、installd、adbd、lmkd等用户守护进程;
    • init进程还启动servicemanager(binder服务管家)、bootanim(开机动画)等重要服务
    • init进程孵化出Zygote进程Zygote进程是Android系统的第一个Java进程Zygote是所有Java进程的父进程Zygote进程本身是由init进程孵化而来的。
    • kthreadd进程: 是所有内核进程的父进程
    • init进程 : 是所有用户进程的父进程(或者父父进程)
    • zygote进程 : 是所有上层Java进程的父进程,另外zygote的父进程是init进程。

    Framework层

    如图,Framework层分为Java FramewordC++ Framework,分别由system_server进程media_server进程负责启动和管理。

    Zygote本身是一个Native的应用程序,刚开始的名字为“app_process”,运行过程中,通过系统调用将自己名字改为Zygote。在图中的红色线,便是Zygote fork出来的进程,所有的App进程都是由Zygote fork产生的。


    image.png
    • Zygote进程,是由init进程通过解析init.rc文件后fork生成的,Zygote进程主要包含:
      加载ZygoteInit类,注册Zygote Socket服务端套接字;
      加载虚拟机;
      preloadClasses;
      preloadResouces。
    • System Server进程,是由Zygote进程fork而来,System Server是Zygote孵化的第一个进程,System Server负责启动和管理整个Java framework,包含ActivityManager,PowerManager等服务。
    • Media Server进程,是由init进程fork而来,负责启动和管理整个C++ framework,包含AudioFlinger,Camera Service,等服务。

    App层

    • Zygote进程孵化出的第一个App进程是Launcher,这是用户看到的桌面App;
    • Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上。
    • 所有的App进程都是由Zygote进程fork生成的。

    Syscall && JNI

    Andorid的启动过程
    Android进程整理

  • 相关阅读:
    HUST 1372 marshmallow
    HUST 1371 Emergency relief
    CodeForces 629D Babaei and Birthday Cake
    CodeForces 629C Famil Door and Brackets
    ZOJ 3872 Beauty of Array
    ZOJ 3870 Team Formation
    HDU 5631 Rikka with Graph
    HDU 5630 Rikka with Chess
    CodeForces 626D Jerry's Protest
    【POJ 1964】 City Game
  • 原文地址:https://www.cnblogs.com/benchao/p/6243473.html
Copyright © 2011-2022 走看看