Android Framework學習四:init進程實現

文章目錄

  • init流程簡介
  • init源碼執行順序
    • 執行順序
  • init進程的具體工作事項
    • 掛載文件系統
    • 設置 SELinux
    • SecondStageMain
    • init.rc啟動zygote和serviceManager進程的重要性
      • serviceManager工作原理
  • Framework學習之系列文章

init流程簡介

下面圖片主要圍繞 Android 系統中init進程的運行機制展開介紹
在這里插入圖片描述

init源碼執行順序

在這里插入圖片描述
init進程是 Android 系統啟動時第一個用戶空間進程,它從執行main.cpp文件里的main函數開始運行。main函數以循環調用的方式來維持進程的持續運行,確保后續的系統初始化操作能夠逐步完成。

執行順序

  1. FirstStageMain
  2. SetupSelinux
  3. SecondStageMain
    在這里插入圖片描述

init進程的具體工作事項

掛載文件系統

將系統所需的各種文件系統掛載到合適的掛載點,這樣系統才能訪問和使用這些文件系統中的數據和資源。
FirstStageMain:
在這里插入圖片描述

設置 SELinux

SELinux(Security-Enhanced Linux)是一種基于 Linux 內核的強制訪問控制(MAC)系統,init進程負責對其進行配置和初始化,以增強系統的安全性。
SetupSelinux:
在這里插入圖片描述
在這里插入圖片描述

SecondStageMain

在這里插入圖片描述
在這里插入圖片描述
下面的功能都是由SecondStageMain函數實現的。

  1. 啟動屬性服務:屬性服務是 Android 系統中用于存儲和管理系統屬性的服務,init進程啟動該服務后,系統的各個組件就可以通過屬性服務來獲取和設置系統屬性,PropertyInit()。
  2. 解析和執行腳本:除了前面提到的解析init.rc文件,init進程還會執行其他相關的腳本文件,以完成更多的系統初始化和配置工作。

解析init.rc是由LoadBootScripts函數實現:
在這里插入圖片描述

  1. 循環處理腳本:通過while循環不斷處理腳本中的命令和任務,確保系統的初始化和配置工作能夠持續進行。
    在這里插入圖片描述
  2. 守護關鍵進程:init進程會對系統中的關鍵進程進行監控和守護,當這些進程出現異常退出時,init進程會嘗試重新啟動它們,以保證系統的穩定性。

init.rc啟動zygote和serviceManager進程的重要性

  • zygote進程:如前面所述,它是所有應用進程的父進程。通過zygote進程,系統可以快速創建新的應用進程,提高應用啟動的效率。
    在這里插入圖片描述

  • serviceManager進程:是 Android 系統里核心的系統服務注冊與發現機制 ,處于 Android Framework 層,充當服務注冊中心。它為進程間通信(IPC)提供基礎架構,允許進程注冊、查詢和使用系統服務。

init.rc中啟動servicemanager的內容:
在這里插入圖片描述

serviceManager工作原理

  • 服務注冊:應用或系統組件可將 Binder 對象作為服務注冊到 ServiceManager。比如系統服務 ActivityManagerService,通過 addService () 方法向 ServiceManager 注冊自身服務。
  • 服務發現:客戶端憑借 ServiceManager 查詢所需服務的 Binder 接口。若服務存在,ServiceManager 返回對應 Binder 引用;若不存在,客戶端可選擇等待服務注冊。
  • IPC 中轉:為 Android 的 Binder IPC 提供全局目錄,用于綁定客戶端和服務端。客戶端獲取 Binder 引用后,可直接與服務端通信,無需再經 ServiceManager 。

Framework學習之系列文章

Android Framework學習一:系統框架、啟動過程
Android Framework學習二:Activity創建及View繪制流程
Android Framework學習三:zygote剖析
Android Framework學習四:init進程實現
作者:帥得不敢出門

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80401.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80401.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80401.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HTTP/3展望、我應該遷移到HTTP/2嗎

1. HTTP/3展望 HTTP/3 基于 QUIC 協議,完全解決了“隊頭阻塞”問題,弱網環境下的表現會優于 HTTP/2;QUIC 是一個新的傳輸層協議,建立在 UDP 之上,實現了可靠傳輸;QUIC 內含了 TLS1.3,只能加密通…

【大模型面試每日一題】Day 15:流水線并行的Bubble問題及其緩解方法

【大模型面試每日一題】Day 15:流水線并行的Bubble問題及其緩解方法 📌 題目重現 🌟🌟 面試官:解釋流水線并行(Pipeline Parallelism)的bubble問題及其緩解方法。 #mermaid-svg-Uz7WGsO8akW5F…

Windows環境下maven的安裝與配置

1.檢查JAVA_HOME環境變量 Maven是使用java開發的,所以必須知道當前系統環境中的JDK的安裝目錄。 搜索欄直接輸入“cmd” 或者 WinR 輸入cmd 在打開的終端窗口輸入“echo %JAVA_HOME”,就可以看到jdk的位置了。 如果沒有的話,請參考我的文章&a…

Kubernetes 集群部署應用

部署 Nginx 應用 命令行的方式 1. 創建 deployment 控制器的 pod # --imagenginx:這個會從 docker.io 中拉取,這個網站拉不下來 # kubectl create deployment mynginx --imagenginx# 使用國內鏡像源拉取 kubectl create deployment mynginx --imaged…

如何使用依賴注入來實現依賴倒置原則?

依賴注入(Dependency Injection, DI)是實現依賴倒置原則(DIP)的具體技術手段,它通過將依賴對象的創建和管理交給外部容器,從而實現高層模塊與低層模塊的解耦。下面從原理、實現方式、框架應用及最佳實踐四個方面詳細解析: 一、依賴倒置原則(DIP)的核心思想 高層模塊不…

python使用AES進行加密和解密

如果需要加密和解密功能,可以使用AES算法。以下是使用Python實現AES加密和解密的示例: from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad from Crypto.Random import get_random_bytesdef aes_encrypt(data,

SaaS場快訂首頁的前端搭建【持續更新】

文章目錄 一、創建頁面二、配置路由三、寫接口文件(api)1.定位的接口函數(騰訊地圖api)實現代碼: 2.獲取場館分類的數據3.獲取附近場館列表的數據 四、開發首頁頁面1.頂部區域2.搜索框3.場館分類4.附近場館列表 五、難…

深入解析 MQTT 協議:物聯網通信的基石

在當今物聯網蓬勃發展的時代,設備之間高效、可靠的通信變得至關重要。MQTT(Message Queuing Telemetry Transport)協議,作為一種輕量級的消息傳輸協議,正逐漸成為物聯網通信的基石,廣泛應用于各種場景中。 …

在Python中計算函數耗時并超時自動退出

更多內容請見: python3案例和總結-專欄介紹和目錄 文章目錄 方法1:使用裝飾器結合信號模塊(僅Unix-like系統)方法2:使用多線程(跨平臺解決方案)方法3:使用concurrent.futures(Python 3.2+)方法4:使用 multiprocessing + Process(跨平臺)?方法5:使用 time 手動計…

理解c++中explicit關鍵字的作用

理解c中explicit關鍵字的作用 explicit 關鍵字的作用是防止構造函數被隱式調用&#xff0c;從而避免意外的類型轉換 #include <iostream> class Vec3 { public://構造函數沒有被explicit修飾Vec3(float value): x(value), y(value), z(value){}Vec3(float val1, float …

不止是UI庫:React如何重塑前端開發范式?

React&#xff1a;引領現代前端開發的聲明式UI庫 在當今快速發展的前端世界&#xff0c;React以其聲明式、組件化和高效的特性&#xff0c;穩坐頭把交椅&#xff0c;成為構建交互式用戶界面的首選JavaScript庫。本文將帶你快速了解React的核心魅力、主要優勢以及生態發展&…

理解 Token 索引 vs 字符位置

以下是對“理解 Token 索引與字符位置的區別”的內容整理&#xff0c;條理清晰&#xff0c;結構完整&#xff0c;保持技術細節&#xff0c;方便閱讀&#xff0c;無多余解釋&#xff1a; &#x1f50d; 理解 Token 索引 vs 字符位置 文本分塊方法中返回的索引是 token 索引&…

《異常鏈機制詳解:如何優雅地傳遞Java中的錯誤信息?》

大家好呀&#xff01;&#x1f44b; 作為一名Java開發者&#xff0c;相信你一定見過各種奇奇怪怪的異常報錯。但有沒有遇到過這樣的情況&#xff1a;明明只調用了一個方法&#xff0c;卻看到異常信息像俄羅斯套娃一樣一層層展開&#xff1f;&#x1f914; 這就是我們今天要講的…

vector 常見用法及模擬

文章目錄 1. vector的介紹與使用1.1 vector的構造1.2 vector iterator 的使用1.3 有關大小和容量的操作1.4 vector 增刪查改1.5 vector 迭代器失效問題&#xff08;重點&#xff09;1.6 vector 中二維數組的使用 2. vector 的模擬實現2.1 拷貝構造和賦值重載的現代寫法2.2 memc…

數據結構與算法分析實驗11 實現順序查找表

實現順序查找表 1.上機名稱2.上機要求3.上機環境4.程序清單(寫明運行結果及結果分析)4.1 程序清單4.1.1 頭文件4.1.2 實現文件4.1.3 源文件 4.2 實現展效果示 上機體會 1.上機名稱 實現順序查找表 順序查找表的基本概念 順序查找表是一種線性數據結構&#xff0c;通常用于存儲…

實踐官方的 A2A SDK Python

內容列表 ? 注意? 我的環境? A2A SDK Python 注意 這只是一個原型&#xff0c;并且在快速的變化&#xff0c;本篇教程也隨時可能過期&#xff0c;可以在A2AProtocol blog最終更新的文章。 我的環境 ? Python 3.13? uv: uv 0.7.2 (Homebrew 2025-04-30)? Warp? Olla…

langchain 接入國內搜索api——百度AI搜索

為什么使用百度AI搜索 學習langchain的過程中&#xff0c;遇到使用search api的時候&#xff0c;發現langchain官方文檔中支持的搜索工具大多是國外的&#xff0c;例如google search或bing search&#xff0c;收費不說&#xff0c;很多還連接不上&#xff08;工具 | LangChain…

[強化學習的數學原理—趙世鈺老師]學習筆記01-基本概念

[強化學習的數學原理—趙世鈺老師]學習筆記01-基本概念 1.1 網格世界的例子1.2 狀態和動作1.3 狀態轉移1.4 策略1.5 獎勵1.6 軌跡、回報、回合1.6.1 軌跡和回報1.6.2 回合 1.7 馬爾可夫決策過程 本人為強化學習小白&#xff0c;為了在后續科研的過程中能夠較好的結合強化學習來…

Java開發經驗——阿里巴巴編碼規范經驗總結2

摘要 這篇文章是關于Java開發中阿里巴巴編碼規范的經驗總結。它強調了避免使用Apache BeanUtils進行屬性復制&#xff0c;因為它效率低下且類型轉換不安全。推薦使用Spring BeanUtils、Hutool BeanUtil、MapStruct或手動賦值等替代方案。文章還指出不應在視圖模板中加入復雜邏…

Java大師成長計劃之第18天:Java Memory Model與Volatile關鍵字

&#x1f4e2; 友情提示&#xff1a; 本文由銀河易創AI&#xff08;https://ai.eaigx.com&#xff09;平臺gpt-4o-mini模型輔助創作完成&#xff0c;旨在提供靈感參考與技術分享&#xff0c;文中關鍵數據、代碼與結論建議通過官方渠道驗證。 在Java多線程編程中&#xff0c;線程…