国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android:?jiǎn)?dòng)流程

這篇具有很好參考價(jià)值的文章主要介紹了Android:?jiǎn)?dòng)流程。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Android啟動(dòng)流程

Android:?jiǎn)?dòng)流程

第一步:?jiǎn)?dòng)電源以及系統(tǒng)啟動(dòng)

當(dāng)電源按下,引導(dǎo)芯片代碼開(kāi)始從預(yù)定義的地方(固化在ROM)開(kāi)始執(zhí)行。加載引導(dǎo)程序到RAM,然后 執(zhí)行

第二步:引導(dǎo)程序

引導(dǎo)程序是在Android操作系統(tǒng)開(kāi)始運(yùn)行前的一個(gè)小程序。引導(dǎo)程序是運(yùn)行的第一個(gè)程序,因此它是針 對(duì)特定的主板與芯片的。設(shè)備制造商要么使用很受歡迎的引導(dǎo)程序比如redboot、uboot、qi bootloader或者開(kāi)發(fā)自己的引導(dǎo)程序,它不是Android操作系統(tǒng)的一部分。引導(dǎo)程序是OEM廠商或者運(yùn) 營(yíng)商加鎖和限制的地方。
引導(dǎo)程序分兩個(gè)階段執(zhí)行。
第一個(gè)階段,檢測(cè)外部的RAM以及加載對(duì)第二階段有用的程序; 第二階段,引導(dǎo)程序設(shè)置網(wǎng)絡(luò)、內(nèi)存等等。這些對(duì)于運(yùn)行內(nèi)核是必要的,為了達(dá)到特殊的目標(biāo),引導(dǎo)程 序可以根據(jù)配置參數(shù)或者輸入數(shù)據(jù)設(shè)置內(nèi)核。 Android引導(dǎo)程序可以在\bootable\bootloader\legacy\usbloader找到。傳統(tǒng)的加載器包含兩個(gè)文件, 需要在這里說(shuō)明:
init.s初始化堆棧,清零BBS段,調(diào)用main.c的_main()函數(shù); main.c初始化硬件(鬧鐘、主板、鍵盤(pán)、控制臺(tái)),創(chuàng)建linux標(biāo)簽

第三步:內(nèi)核

Android內(nèi)核與桌面linux內(nèi)核啟動(dòng)的方式差不多。內(nèi)核啟動(dòng)時(shí),設(shè)置緩存、被保護(hù)存儲(chǔ)器、計(jì)劃列表, 加載驅(qū)動(dòng)。當(dāng)內(nèi)核完成系統(tǒng)設(shè)置,它首先在系統(tǒng)文件中尋找”init”文件,然后啟動(dòng)root進(jìn)程或者系統(tǒng)的第 一個(gè)進(jìn)程

第四步:init進(jìn)程 (搭建環(huán)境+啟動(dòng)zygote)

init進(jìn)程是Linux系統(tǒng)中用戶空間的第一個(gè)進(jìn)程,進(jìn)程號(hào)固定為1。Kernel啟動(dòng)后,在用戶空間啟動(dòng)init進(jìn)程,并調(diào)用init中的main()方法執(zhí)行init進(jìn)程的職責(zé)。

  1. 創(chuàng)建和掛載啟動(dòng)所需的文件目錄
  2. 初始化和啟動(dòng)屬性服務(wù)
  3. 解析init.rc配置文件并 啟動(dòng)zygote進(jìn)程
    3.1 ----》SystemServers—》開(kāi)啟一系列服務(wù)(AMS、WMS、PKMS、PMS、、、、)
    3.2 ----》Launcher --> app —> 從 zygote fork 子進(jìn)程 app
第五步:?jiǎn)?dòng)Lancher App

fork函數(shù)

pid_t fork(void)

返回值分兩種情況:

  • 返回0表示成功創(chuàng)建子進(jìn)程,并且接下來(lái)進(jìn)入子進(jìn)程執(zhí)行流程
  • 返回PID(>0),成功創(chuàng)建子進(jìn)程,并且繼續(xù)執(zhí)行父進(jìn)程流程代碼
  • 返回非正數(shù)(<0),創(chuàng)建子進(jìn)程失敗,失敗原因主要有: 進(jìn)程數(shù)超過(guò)系統(tǒng)所能創(chuàng)建的上限,errno會(huì)被設(shè)置為EAGAIN系統(tǒng)內(nèi)存不足,errno會(huì)被設(shè)置為 ENOMEM

Android:?jiǎn)?dòng)流程

使用 fork() 函數(shù)得到的子進(jìn)程是父進(jìn)程的一個(gè)復(fù)制品,它從父進(jìn)程處繼承了整個(gè)進(jìn)程的地址空 間:包括進(jìn)程上下文(進(jìn)程執(zhí)行活動(dòng)全過(guò)程的靜態(tài)描述)、進(jìn)程堆棧、打開(kāi)的文件描述符、信號(hào)控 制設(shè)定、進(jìn)程優(yōu)先級(jí)、進(jìn)程組號(hào)等。子進(jìn)程所獨(dú)有的只有它的進(jìn)程號(hào),計(jì)時(shí)器等(只有小量信 息)。因此,使用 fork() 函數(shù)的代價(jià)是很大的

子進(jìn)程與父進(jìn)程的區(qū)別:

  1. 除了文件鎖以外,其他的鎖都會(huì)被繼承
  2. 各自的進(jìn)程ID和父進(jìn)程ID不同
  3. 子進(jìn)程的未決告警被清除;
  4. 子進(jìn)程的未決信號(hào)集設(shè)置為空集。

相關(guān)面試題

你了解Android啟動(dòng)流程嗎

當(dāng)按電源鍵觸發(fā)開(kāi)機(jī),首先會(huì)從ROM中預(yù)定義的地方加載引導(dǎo)程序BootLoader到RAM中,并執(zhí)行BootLoader程序啟動(dòng)Linux kernel,然后啟動(dòng)用戶級(jí)別的第一個(gè)進(jìn)程:init進(jìn)程。init進(jìn)程會(huì)解析init.rc腳本并做一些初始化工作,包括掛載文件系統(tǒng)、創(chuàng)建工作目錄以及啟動(dòng)系統(tǒng)服務(wù)進(jìn)程等,其中系統(tǒng)服務(wù)進(jìn)程包括Zygote、system manger、media等。在zygote中會(huì)進(jìn)一步啟動(dòng)system_server進(jìn)程,并啟動(dòng)AMS、WMS、PMS等服務(wù),等這些服務(wù)啟動(dòng)后AMS就會(huì)打開(kāi)Launcher應(yīng)用的home activity,然后看到了手機(jī)的“桌面”

system_server為什么要在zygote中啟動(dòng),而不是由init啟動(dòng)

zygote作為孵化器可以提前加載一些資源,這樣fork()時(shí)基于Copy_On_Write 機(jī)制創(chuàng)建的其他進(jìn)程就能直接使用這些資源而不用重新加載。比如system_server可以直接使用Zygote中的JNI函數(shù)、共享庫(kù)、常用的類、以及主題資源

zygote為什么不用Binder機(jī)制進(jìn)行IPC通信

Binder 機(jī)制中存在 Binder 線程池,是多線程的,如果 Zygote 采用 Binder 的話就存在上面說(shuō)的fork() 與 多線程的問(wèn)題了。其實(shí)嚴(yán)格來(lái)說(shuō),Binder 機(jī)制不一定要多線程,所謂的 Binder 線程只不過(guò)是在循環(huán)讀取 Binder 驅(qū)動(dòng)的消息而已,只注冊(cè)一個(gè) Binder 線程也是可以工作的,比如 service manager就是這樣的。實(shí)際上 Zygote 盡管沒(méi)有采取 Binder 機(jī)制,它也不是單線程的,但它在 fork() 前主動(dòng)停止了其他線程,fork() 后重新啟動(dòng)了。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-414805.html

到了這里,關(guān)于Android:?jiǎn)?dòng)流程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android:?jiǎn)?dòng)流程

    Android:?jiǎn)?dòng)流程

    第一步:?jiǎn)?dòng)電源以及系統(tǒng)啟動(dòng) 當(dāng)電源按下,引導(dǎo)芯片代碼開(kāi)始從預(yù)定義的地方(固化在ROM)開(kāi)始執(zhí)行。加載引導(dǎo)程序到RAM,然后 執(zhí)行 第二步:引導(dǎo)程序 引導(dǎo)程序是在Android操作系統(tǒng)開(kāi)始運(yùn)行前的一個(gè)小程序。引導(dǎo)程序是運(yùn)行的第一個(gè)程序,因此它是針 對(duì)特定的主板與芯片的

    2023年04月16日
    瀏覽(24)
  • Android系統(tǒng)啟動(dòng)流程分析

    Android系統(tǒng)啟動(dòng)流程分析

    ? ? ? ?當(dāng)按下Android系統(tǒng)的開(kāi)機(jī)電源按鍵時(shí)候,硬件會(huì)觸發(fā)引導(dǎo)芯片,執(zhí)行預(yù)定義的代碼,然后加載引導(dǎo)程序(BootLoader)到RAM,Bootloader是Android系統(tǒng)起來(lái)前第一個(gè)程序,主要用來(lái)拉起Android系統(tǒng)程序,Android系統(tǒng)被拉起首先肯定會(huì)啟動(dòng)Linux內(nèi)核。 備注: 我們?cè)偎C(jī)時(shí)候,經(jīng)常看到

    2024年02月15日
    瀏覽(28)
  • Android Activity的啟動(dòng)流程(Android-10)

    Android Activity的啟動(dòng)流程(Android-10)

    在Android開(kāi)發(fā)中,我們經(jīng)常會(huì)用到startActivity(Intent)方法,但是你知道startActivity(Intent)后Activity的啟動(dòng)流程嗎?今天就專門(mén)講一下最基礎(chǔ)的startActivity(Intent)看一下Activity的啟動(dòng)流程,同時(shí)由于Launcher的啟動(dòng)后續(xù)和這里基本類似,就記錄在一起。注意本章都是基于Android-10來(lái)講解的。

    2024年01月17日
    瀏覽(21)
  • Android Framework 之 啟動(dòng)流程

    Android 系統(tǒng)的啟動(dòng)流程 Android 系統(tǒng)的啟動(dòng)流程可以分為以下幾個(gè)主要步驟: 引導(dǎo)加載器(Bootloader)啟動(dòng) :當(dāng)你打開(kāi)一個(gè) Android 設(shè)備時(shí),首先啟動(dòng)的是引導(dǎo)加載器。引導(dǎo)加載器負(fù)責(zé)啟動(dòng) Android 的核心操作系統(tǒng)。 Linux 內(nèi)核啟動(dòng) :引導(dǎo)加載器加載并啟動(dòng) Linux 內(nèi)核。Linux 內(nèi)核負(fù)責(zé)

    2024年02月14日
    瀏覽(22)
  • Android 11 SystemUI 啟動(dòng)流程

    Android 11 SystemUI 啟動(dòng)流程

    從表面上看, 我們看到的 狀態(tài)欄、通知欄、下拉菜單、導(dǎo)航欄、鎖屏、最近任務(wù)、低電提示 等系統(tǒng)頁(yè)面都是 SystemUI 的。SystemUI,在源碼目錄中位于: framework/base/packages 目錄下, 可見(jiàn) SystemUI 和 framework 是關(guān)聯(lián)的, SystemUI 依賴了很多內(nèi)部 API , 系統(tǒng)資源, SystemUI 編譯是要依賴

    2024年02月13日
    瀏覽(25)
  • Android SystemServer 啟動(dòng)流程分析

    Android SystemServer 啟動(dòng)流程分析

    和你一起終身學(xué) 習(xí),這里是程序員Android 經(jīng)典好文推薦,通過(guò)閱讀本文,您將收獲以下知識(shí)點(diǎn): 一、SystemServer 啟動(dòng)的服務(wù)有哪些 二、SystemServer啟動(dòng)總體流程概述 三、SystemServer 如何啟動(dòng),是誰(shuí)啟動(dòng)的? 四、 SystemServer 啟動(dòng)入門(mén) main 方法 五、SystemServer Run 方法初始與啟動(dòng) 六、

    2024年02月13日
    瀏覽(24)
  • Android系統(tǒng)啟動(dòng)流程 源碼解析

    本文鏈接:https://blog.csdn.net/feather_wch/article/details/132518105 有道云腦圖:https://note.youdao.com/s/GZ9d8vzO 1、整體流程 Boot Room BootLoader idle kthread init init ServiceManager zygote zygote SystemServer app 1、kernel/common/init/main.c 2、andorid.mk-android.bp編譯 3、init是用戶空間鼻祖 屬于C、C++ Framework 1.1 啟動(dòng)源

    2024年02月11日
    瀏覽(30)
  • 筆記:Android 9系統(tǒng)啟動(dòng)流程

    筆記:Android 9系統(tǒng)啟動(dòng)流程

    當(dāng)電源鍵按下時(shí),引導(dǎo)芯片代碼(匯編指令)會(huì)從預(yù)定的地方(固化在ROM)開(kāi)始執(zhí)行,將引導(dǎo)程序 BootLoader 加載到 RAM中,然后執(zhí)行 BootLoader 是在 Android 操作系統(tǒng)開(kāi)始前的一個(gè)小程序,主要作用是把系統(tǒng)OS拉起來(lái)并運(yùn)行 位置: bootablebootloader 當(dāng) Linux系統(tǒng)被 BootLoader 程序拉起,

    2024年02月14日
    瀏覽(27)
  • Android啟動(dòng)之生命周期流程

    目錄 一、簡(jiǎn)述 二、啟動(dòng)流程說(shuō)明(一) 三、啟動(dòng)流程說(shuō)明(二) 四、ServerThread常用組件的功能介紹 第一步:?jiǎn)?dòng)Linux: 1.Bootloader 2.kernel 第二步:Android系統(tǒng)啟動(dòng):入口為Init.rc(system/core/rootdir) 1./system/bin/servicemanager:Binder守護(hù)進(jìn)程; 2.Runtime; 3.Zygote:app_process/App_main; 4.Start VM;

    2024年02月09日
    瀏覽(31)
  • Android APP啟動(dòng)流程解析

    Android手機(jī)在開(kāi)機(jī)Linux內(nèi)核啟動(dòng)的時(shí)候,會(huì)加載system/core/init/init.rc文件,啟動(dòng)init進(jìn)程,這個(gè)是Android特有的初始化程序,主要負(fù)責(zé) 各種復(fù)雜工作 負(fù)責(zé)開(kāi)關(guān)機(jī)畫(huà)面 文件系統(tǒng)的創(chuàng)建和掛載 啟動(dòng)Zygote(孵化器)進(jìn)程 啟動(dòng)ServiceManager,它是Binder服務(wù)管理器,管理所有Android系統(tǒng)服務(wù) fork

    2024年03月20日
    瀏覽(29)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包