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进程整理

  • 相关阅读:
    Python itsdangerous 生成token和验证token
    CentOS在VMware中 网络配置
    Django 框架 django的请求生命周期
    Django 框架 数据库操作2
    Django 框架 Form组件
    Django 框架 数据库操作
    hdu 5008 查找字典序第k小的子串
    hdu 3518 后缀数组
    hdu 3948 后缀数组
    hdu 4283 区间dp
  • 原文地址:https://www.cnblogs.com/benchao/p/6243473.html
Copyright © 2011-2022 走看看