讀書筆記:android設計與實現第二…

啓動:
android 正常模式啓動流程:
1,系統加電:執行bootloader,負責初始化硬件,並最後加載內核到內存中,bootloader由硬件廠商提供
2,進入內核引導階段(主要由彙編語言編寫),之後調用start_kernel進入內核啓動階段(C語言編寫),start_kernel最終啓動用戶空間的init程序。
3,init程序負責解析init.rc配置文件,開啓系統守護進程,最重要的兩個:zygote和servicemanager,前者是android啓動的第一個dalvik虛擬機,負責啓動java世界的進程,後者是binder通信的基礎。

init的執行過程分爲4個階段:
1,初始化文件系統和日誌系統,爲之後的執行階段做準備,主要是linux標準函數的調用
2,解析init.rc和init..rc初始化文件
解析init.rc後,生成 action和service鏈表
3,觸發執行action 和 service
4,init循環監聽處理事件

4,zygote虛擬機啓動子進程 system_server,在system_server中開啓了android核心系統服務並將系統服務添加到Servicemanager,然後進入systemReady狀態
5,systemready狀態下,ActivityManagerService與zygote中的socket通信,通過zygote啓動home應用,進入系統桌面。

底層只能看個大概,知道具體的步驟   

下面是上層的啓動實現:
zygote是android中一個非常重要的守護進程服務,其他的dalvik虛擬機進程都是通過zygote孵化出來的。App運行在各自獨立的dalvik虛擬機中,如果每個應用程序在啓動時都需要單獨運行和初始化一個dalvik虛擬機會大大降低系統性能,因此android首先創建一個zygote虛擬機,然後通過它孵化出其他的虛擬機進程,進而共享虛擬機內存和框架層的資源,提高應用程序啓動和運行速度

因爲上層是用Java語言寫的下層是c,虛擬機中需要註冊jni函數,java環境通過這些函數調用C,在註冊前,已經加載了所有的so庫。











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章