日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解Android系統啟動過程

瀏覽:47日期:2022-09-20 09:39:28
計算機是如何啟動的

計算機的硬件包括:CPU,內存,硬盤,顯卡,顯示器,鍵盤鼠標等輸入輸出設備。所有的軟件都是存放在硬盤中,程序執行時,需要將程序從硬盤上讀取到內存中,然后加載到CPU中來運行。當按下開機鍵時,內存中什么都沒有,因此需要借助某種方式,將操作系統加載到內存中,而完成這項任務的就是BIOS。

引導階段

BIOS:BIOS是主板芯片上的一個程序,計算機通電后,第一件事情就是讀取BIOS。

BIOS首先進行硬件檢測,檢查計算機硬件能否滿足運行的基本條件。如果硬件出現問題,主板發出不同的蜂鳴聲,啟動停止。如果沒有問題,屏幕會顯示CPU,內存,硬盤等信息。

硬件自檢完成后,BIOS將控制權交給下一個階段的啟動程序。這時候BIOS需要知道下一個啟動程序存放在哪個設備中。也就是BIOS需要一個外部存儲設備的排序。優先交給排在前面的設備。這就是我們在BIOS中設置的啟動排序。

當第一個存儲設備被激活后,設備讀取設備的第一個扇區,也就是前512字節。如果這512個字節的最后兩個字節是0x55和0xAA,表明設備是可以用作系統啟動的。如果不是,那么就會順序啟動下一個設備。

這前512個字節,就叫做“主引導記錄”(縮寫MBR)。它負責磁盤操作系統對硬盤進行讀寫時分區合法型判斷、分區引導信息定位。MBR不屬于任何一個CIA做系統,它先于操作系統而被調入內存,并發揮作用。然后才將控制權交給主分區內的操作系統,并用主分區信息來管理硬盤。

MBR主要作用是告訴計算機到硬盤的哪個位置去找操作系統。計算機從MBR中讀取前446字節的機器碼后,不再轉交控制權,而是運行實現安裝的“啟動管理器”(boot loader),由用戶選擇啟動哪個操作系統。

加載內核階段

選擇完操作系統以后,控制權交給操作系統,操作系統內核被載入內存。

以Linux為例,先載入/boot下面的kernel。內核加載完成后,運行第一個程序 /sbin/init。它根據配置文件產生init進程。它是Linux啟動后的第一個進程,pid為1.其他進程都是它的后代。

然后init線程加載系統的各個模塊。比如:窗口程序和網絡程序,直至執行/bin/login程序執行,跳出登錄頁面,等待用戶輸入用戶名密碼。

至此,系統啟動完成。

Android的啟動過程

Android是基于Linux系統的。但是 它沒有BIOS程序,取而代之的是BootLoader(系統啟動加載器)。類似于BIOS,在系統加載前,用于初始化硬件設備,最終調用系統內核準備好環境。在Android中沒有硬盤,而是ROM,類似于硬盤存放操作系統,用戶程序等。ROM跟硬盤一樣也會劃分為不同的區域,用于放置不同的程序,在Android中主要劃分為以下幾個區域:

/boot :存放引導程序,包括內核和內存操作程序/system:相當于電腦C盤,存放Android系統和系統應用/recover:回復分區。可以進入該分區進行系統回復/data:用戶數據區,包含了用戶的數據:聯系人、短信、設置、用戶安裝的程序/cache:安卓系統緩存區,保存系統經常訪問的數據和應用程序/misc:雜項內容/sdcard:用戶自己的存儲區域。存放照片視頻等Android系統啟動跟PC相似。當開機時,首先加載BootLoader,BootLoader會讀取ROM找到系統并將內核加載進RAM中。

當內核啟動后會初始化各種軟硬件環境,加載驅動程序,掛載跟文件系統。最后階段會啟動執行第一個用戶空間進程init進程。

init進程

init是用戶的第一個進程,pid=1。kernal啟動后會調用/system/core/init/init.cpp的main()方法。

int main(int argc,char ** argv){ ... if(is_first_stage){ //創建和掛在啟動所需要的文件目錄 mount('tmpfs','/dev','tmpfs',MS_NOSUID,'mode=0755'); mkdir('/dev/pts',0755); //創建和掛在很多... ... } ... //對屬性服務進行初始化 property_init(); ... //用于設置子進程信號處理函數(如Zygote),如果子進程異常退出,init進程會調用該函數中設定的信號處理函數來處理 signal_handler_init(); ... //啟動屬性服務 start_property_service(); ... //解析init.rc配置文件 parser.ParseConfig('/init.rc');}

首先初始化 Kernel log,創建一塊共享的內存空間,加載 /default.prop 文件,解析 init.rc 文件。

init.rc 文件

init.rc 文件是 Android 系統的重要配置文件,位于 /system/core/rootdir/ 目錄中。 主要功能是定義了系統啟動時需要執行的一系列 action 及執行特定動作、設置環境變量和屬性和執行特定的 service。

init.rc 腳本文件配置了一些重要的服務,init 進程通過創建子進程啟動這些服務,這里創建的 service 都屬于 native 服務,運行在 Linux 空間,通過 socket 向上層提供特定的服務,并以守護進程的方式運行在后臺。

通過 init.rc 腳本系統啟動了以下幾個重要的服務:

service_manager:啟動 binder IPC,管理所有的 Android 系統服務 mountd:設備安裝 Daemon,負責設備安裝及狀態通知 debuggerd:啟動 debug system,處理調試進程的請求 rild:啟動 radio interface layer daemon 服務,處理電話相關的事件和請求 media_server:啟動 AudioFlinger,MediaPlayerService 和 CameraService,負責多媒體播放相關的功能,包括音視頻解碼 surface_flinger:啟動 SurfaceFlinger 負責顯示輸出 zygote:進程孵化器,啟動 Android Java VMRuntime 和啟動 systemserver,負責 Android 應用進程的孵化工作 在這個階段你可以在設備的屏幕上看到 “Android” logo 了。

以上工作執行完,init 進程就會進入 loop 狀態。

service_manager 進程

ServiceManager 是 Binder IPC 通信過程中的守護進程,本身也是一個 Binder 服務。ServiceManager 進程主要是啟動 Binder,提供服務的查詢和注冊。

surface_flinger 進程

SurfaceFlinger 負責圖像繪制,是應用 UI 的和興,其功能是合成所有 Surface 并渲染到顯示設備。SurfaceFlinger 進程主要是啟動 FrameBuffer,初始化顯示系統。

media_server 進程

MediaServer 進程主要是啟動 AudioFlinger 音頻服務,CameraService 相機服務。負責處理音頻解析播放,相機相關的處理。

Zygote 進程

zygote有兩個作用:啟動systemService和孵化應用進程。

Zygote 進程孵化了所有的 Android 應用進程,是 Android Framework 的基礎,該進程的啟動也標志著 Framework 框架初始化啟動的開始。

Zygote啟動主要調用app_main.cpp的main()中的AppRuntime的start方法來啟動Zygote進程

int main(int argc,char* const argv[]){ while( i < argc ){ const char* arg=argv[i++]; if(strcmp(arg,'--zygote')==0){ //如果當前進程在Zygote中,則設置zygote=true zygote=true; niceName=ZYGOTE_NICE_NAME; }else if(strcmp(arg,'--start-system-server')==0){ //如果當前進程在SystemServer中,將startSystemServer=true startSystemServer=true; } } //承接上面Init進程中的代碼 if(zygote){ //啟動Zygote進程 runtime.start('com.android.internal.os.ZygoteInit',args,zygote); }}

Zygote 服務進程的主要功能:

注冊底層功能的 JNI 函數到虛擬機 預加載 Java 類和資源 fork 并啟動 system_server 核心進程 作為守護進程監聽處理“孵化新進程”的請求

當 Zygote 進程啟動后, 便會執行到 frameworks/base/cmds/app_process/App_main.cpp 文件的 main() 方法。

system_server 進程

system_server 進程 由 Zygote 進程 fork 而來。

//首先會調用 ZygoteInit.startSystemServer() 方法ZygoteInit.startSystemServer() //fork 子進程 system_server,進入 system_server 進程。ZygoteInit.handleSystemServerProcess() //設置當前進程名為“system_server”,創建 PathClassLoader 類加載器。RuntimeInit.zygoteInit() //重定向 log 輸出,通用的初始化(設置默認異常捕捉方法,時區等),初始化 Zygote -> nativeZygoteInit()。nativeZygoteInit() //方法經過層層調用,會進入 app_main.cpp 中的 onZygoteInit() 方法。app_main::onZygoteInit()// 啟動新 Binder 線程。applicationInit() //方法經過層層調用,會拋出異常 ZygoteInit.MethodAndArgsCaller(m, argv), ZygoteInit.main() 會捕捉該異常。ZygoteInit.main() //開啟 DDMS 功能,preload() 加載資源,預加載 OpenGL,調用 SystemServer.main() 方法。SystemServer.main() //先初始化 SystemServer 對象,再調用對象的 run() 方法。SystemServer.run() //準備主線程 looper,加載 android_servers.so 庫,該庫包含的源碼在 frameworks/base/services/ 目錄下。

system_server 進程啟動后將初始化系統上下文(設置主題),創建系統服務管理 SystemServiceManager,然后啟動各種系統服務

startBootstrapServices(); // 啟動引導服務//該方法主要啟動服務 ActivityManagerService,PowerManagerService,LightsService,DisplayManagerService,PackageManagerService,UserManagerService。//設置 ActivityManagerService,啟動傳感器服務。startCoreServices(); // 啟動核心服務//該方法主要//啟動服務 BatteryService 用于統計電池電量,需要 LightService。//啟動服務 UsageStatsService,用于統計應用使用情況。//啟動服務 WebViewUpdateService。startOtherServices(); // 啟動其他服務//該方法主要啟動服務 InputManagerService,WindowManagerService。//等待 ServiceManager,SurfaceFlinger啟動完成,然后顯示啟動界面。//啟動服務 StatusBarManagerService,//準備好 window, power, package, display 服務://- WindowManagerService.systemReady()//- PowerManagerService.systemReady()//- PackageManagerService.systemReady()//- DisplayManagerService.systemReady()

所有的服務啟動后會注冊到ServiceManager。

ActivityManagerService 服務啟動完成后,會進入 ActivityManagerService.systemReady(),然后啟動 SystemUI,WebViewFactory,Watchdog,最后啟動桌面 Launcher App。

最后會進入循環 Looper.loop()。

ActivityManagerService 啟動

啟動桌面 Launcher App 需要等待 ActivityManagerService 啟動完成。我們來看下 ActivityManagerService 啟動過程。

ActivityManagerService(Context) //創建名為“ActivityManager”的前臺線程,并獲取mHandler。//通過 UiThread 類,創建名為“android.ui”的線程。//創建前臺廣播和后臺廣播接收器。//創建目錄 /data/system。//創建服務 BatteryStatsService。ActivityManagerService.start() //啟動電池統計服務,創建 LocalService,并添加到 LocalServices。ActivityManagerService.startOtherServices() -> installSystemProviders()//安裝所有的系統 Provider。ActivityManagerService.systemReady()//恢復最近任務欄的 task。//啟動 WebView,SystemUI,開啟 Watchdog,啟動桌面 Launcher App。//發送系統廣播。

啟動桌面 Launcher App,首先會通過 Zygote 進程 fork 一個新進程作為 App 進程,然后創建 Application,創建啟動 Activity,最后用戶才會看到桌面。

完整的啟動流程圖

詳解Android系統啟動過程

源碼解析項目地址:github.com/kailaisi/an…

以上就是詳解Android系統啟動過程的詳細內容,更多關于Android系統啟動過程的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩一区二区三区视频播放| 日韩中文影院| 亚洲一区亚洲| 影音国产精品| 丝袜亚洲另类欧美| 中文字幕一区二区精品区| 亚洲乱码久久| 国产精品一区2区3区| 精品国产91| 欧美精品二区| 日韩在线观看不卡| 夜夜嗨av一区二区三区网站四季av| 国产精品老牛| 国产欧美一区| 久久精品免费一区二区三区 | 日韩精品一区二区三区免费观影 | 久久精品国产免费| 国产高清不卡| 国产免费成人| 国产精品伊人| 中文在线中文资源| 久久国产88| 欧美黄色精品| 欧美肉体xxxx裸体137大胆| 久久亚洲一区| 国产精品欧美一区二区三区不卡| 欧美国产免费| 成人美女视频| 一本综合精品| 久久中文字幕导航| 欧美影院三区| 蜜臀久久99精品久久久久久9| 欧美日韩一区二区国产| 高清久久一区| 视频一区在线视频| 一区二区三区网站| 一区二区国产精品| 国产精品色婷婷在线观看| 精品女同一区二区三区在线观看| 99久久久久国产精品| 日韩视频久久| 国产欧美成人| 亚洲天堂一区二区| 亚洲精品一二| 久久婷婷丁香| 国产精品一级| 免费日韩精品中文字幕视频在线| 麻豆国产精品| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产一区二区三区成人欧美日韩在线观看| 国内精品福利| 国内精品伊人| 亚洲三级毛片| 亚洲一级影院| 精品精品久久| 日韩天堂av| 欧美国产视频| 午夜欧美精品| 九九久久国产| 日韩精品欧美大片| 欧美亚洲国产激情| 国产精品一区二区三区美女| 亚洲一区日本| 99精品视频在线| 精品欧美视频| 日韩精品社区| 亚洲主播在线| 国产精品99免费看| 精品色999| 欧美亚洲国产日韩| 久久av在线| 在线日韩av| 国产乱论精品| 日韩国产一二三区| 99香蕉国产精品偷在线观看| 久久精品播放| 日韩深夜视频| 日本一区二区高清不卡| 久久中文欧美| 国产福利资源一区| 日本免费一区二区视频| 免费看的黄色欧美网站 | 韩国一区二区三区视频| 国产欧美亚洲一区| 青青草91久久久久久久久| jiujiure精品视频播放| 久久狠狠婷婷| 日韩精品首页| 久久精品亚洲人成影院| 新版的欧美在线视频| 国产一区日韩| 国产精品日本一区二区三区在线| 中文字幕亚洲精品乱码| 久久国产精品久久久久久电车| 欧美亚洲国产精品久久| 国产精品久久久久av电视剧| 日韩1区2区| 国产在线不卡一区二区三区| 国产探花在线精品| 日韩欧美中文字幕一区二区三区 | 国产欧美日韩精品一区二区三区| 日韩欧乱色一区二区三区在线| 蜜桃国内精品久久久久软件9| 夜鲁夜鲁夜鲁视频在线播放| 在线手机中文字幕| 欧美日韩在线网站| 亚洲婷婷在线| 亚洲神马久久| 亚洲久久在线| 日韩av不卡一区二区| 国产毛片精品| 福利片在线一区二区| 国产不卡一区| 久久精品中文| 男女男精品网站| 日韩有吗在线观看| 免费在线成人| 欧美日韩一二三四| 蜜桃一区二区三区在线| 亚洲69av| 精品视频一区二区三区在线观看 | 国产婷婷精品| 视频一区二区三区入口| 日韩三级精品| 久久久久黄色| 日韩国产欧美| 美女精品在线| 欧美久久香蕉| 日韩不卡一区| 日韩视频一区二区三区在线播放免费观看| 夜夜嗨一区二区三区| 日韩一区二区三区四区五区| 欧美激情一区| 激情久久婷婷| 日韩高清国产一区在线| 日韩av在线播放网址| 91亚洲自偷观看高清| 欧美/亚洲一区| 欧美专区一区| 亚洲日本网址| 日韩精品视频一区二区三区| 中文字幕在线看片| 亚洲aⅴ网站| 日韩伦理在线一区| 深夜福利一区| 国产精品蜜芽在线观看| 亚洲激情另类| 麻豆精品在线观看| 99国产精品久久久久久久成人热| 国产日产精品_国产精品毛片 | 亚洲手机在线| 欧美亚洲福利| 最新国产拍偷乱拍精品| 精品一区二区三区免费看| 手机精品视频在线观看| 精品国产99| 三级久久三级久久久| 国产日韩电影| 91嫩草精品| 黄色日韩精品| 日韩av在线播放网址| 日本不卡中文字幕| 国产综合色产| 97精品资源在线观看| 欧美在线影院| 日韩在线短视频| 国产精品一区三区在线观看| 亚洲欧美不卡| 韩国三级一区| 国产精品一区2区3区| 亚洲伊人精品酒店| 国产一区日韩欧美| 麻豆视频在线观看免费网站黄| 欧美一区二区三区久久| 日韩精品一级中文字幕精品视频免费观看 | 欧美日韩国产探花| 精品福利久久久| 久久国产日韩欧美精品| 自由日本语亚洲人高潮| 欧美成人a交片免费看| 国产精品99久久免费| 日本成人在线不卡视频| 午夜在线一区| 午夜日韩在线| 欧美综合另类| 裤袜国产欧美精品一区| 久久免费福利| 久久久久九九精品影院| 亚洲ab电影| 亚洲毛片网站| 蜜桃久久av一区| 亚洲色诱最新| 亚洲一区二区三区免费在线观看 | 国产成人精选| 国产伦理久久久久久妇女| 日韩欧美中文在线观看| 亚洲开心激情| 综合干狼人综合首页| 久热精品在线| 久热综合在线亚洲精品|