Zircon 基礎知識

Zircon 是 Fuchsia 的核心。 模型包含一個核心和一小組使用者空間服務、驅動程式 以及啟動等核心系統功能所需的程式庫

雖然 Zircon 其中的許多概念 微型核心的不足之處,而是像微核心一樣 Zircon 的架構可讓 Fuchsia 減少受信任的程式碼數量 提供給幾個核心功能:

  • 記憶體管理
  • 時段設定
  • 處理序間通訊

這個資料表顯示 Fuchsia 中核心服務與
 典型的作業系統,這表示 Fuchsia 包含較少服務
 核心。

系統呼叫

使用者空間程式碼透過 系統呼叫。Zircon 包含執行低階作業的系統呼叫,例如 為:

  • 記憶體管理
  • 工作與程序管理
  • 處理序間通訊 (IPC) 和同步處理
  • 例外狀況處理
  • 硬體支援服務 (時鐘、熵、裝置 I/O)

使用者空間會透過 libzircon.so 處理存取系統呼叫 ( 虛擬動態共用物件 (vDSO) ,直接在 Google Cloud 控制台實際操作。 Zircon vDSO 是 ELF 格式的共用資料庫,可讓核心對應至 每個新程序的位址空間系統會將這個程式庫視為「虛擬」程式庫因為 該物件會直接由核心映像檔公開,而不是從檔案載入。

大多數系統呼叫會直接搭配一或多個系統呼叫 帳號代碼 — 對掌握核心空間中物件的程序本機參照, 32 位元整數 (zx_handle_t)。每個控制代碼都會宣告權限;或 ,持有者必須對控點本身或 參照的物件。

工作、處理程序和執行緒

Zircon 公開三個主要核心物件來執行程式碼:

  • Thread: 特定位址空間內的執行作業執行緒。
  • 程序: 這組可執行指令會在私人的隔離位址空間中執行。
  • 工作: 相關程序和工作群組。所有工作都會形成單一根層級樹狀結構。

說明 Fuchsia 程序階層的樹狀圖。
  程序會分成不同的工作,最終由根工作擁有。

程序是系統功能的基礎。每個程序 功能。

Fuchsia 軟體不一定在單一程序內執行。 工作允許「應用程式」當中包含多個程序 視為單一實體來管理

處理序間通訊

由於系統預設會隔離程序,因此核心需要提供 以安全的方式相互通訊Zircon 包含下列項目 用於處理序間通訊的核心物件類型 (IPC):

  • 事件: 訊號兩個程序之間的介面。
  • 通訊端: 串流資料傳輸,類似管道。
  • 串流: 可搜尋的串流資料傳輸,就像檔案一樣。
  • 頻道: 以訊息為基礎的傳輸功能可以傳遞資料和一組控制代碼。
  • FIFO: 適用於共用記憶體存取的控制層,已針對小型資料酬載最佳化。

在這些物件中,頻道非常適合用來協助推出新的 因為這類容器能夠轉移帳號代碼 ( 能應用到其他處理程序

通道只有兩個端點帳號,每個帳號都由不同的程序擁有。 只有擁有者可以讀取或寫入訊息,但端點的擁有權可能會 從某個程序轉移至另一個程序當帳號代碼寫入 就會從傳送程序中移除。當訊息和帳號代碼一起傳送時 會從管道讀取資料,並將帳號代碼加入接收程序。

這張圖表顯示程序如何透過
 核心。其中最常見的連結就是管道。

Zircon 管道是 這個 Fuchsia 介面定義語言 (FIDL) ,直接在 Google Cloud 控制台實際操作。FIDL 通訊協定是 Fuchsia 程式採用的主要處理序間通訊 (IPC) 方法。您將 稍後將深入探討建立及使用 FIDL 通訊協定。

練習:工作與程序

一起來看看運作系統中的一些基本概念。於 在本練習中,您將瞭解工作和程序如何互動形成樹狀結構。

啟動模擬器

如果您尚未擁有執行中的執行個體,請透過網路啟動 FEMU 支援服務:

ffx emu start workstation_eng.x64 --headless

傾印程序清單

連線至裝置殼層提示,並使用 ps 指令傾印 以及執行中的工作和程序

ffx target ssh ps

以下為輸出內容剪輯範例:

TASK                     PSS PRIVATE  SHARED   STATE NAME
j: 1027               507.8M  507.4M                 root
  p: 1061             564.4k    564k     36k         bin/bootsvc
  p: 1150            4264.4k   4264k     36k         bin/component_manager
  j: 1479             228.4k    228k
    p: 1583           228.4k    228k     36k         pwrbtn-monitor.cm
  j: 1484             532.4k    532k
    p: 1599           532.4k    532k     36k         svchost.cm
  j: 1544             402.4k    304k
    p: 1633           402.4k    304k    232k         netsvc.cm
  j: 1681             296.4k    296k
    p: 1733           296.4k    296k     36k         console-launcher.cm
  j: 1799            7232.4k   7232k
    p: 1825          7232.4k   7232k     36k         archivist.cm
  j: 1927             660.4k    660k
    p: 1955           660.4k    660k     36k         base-resolver.cm
  j: 2072            1016.4k   1016k
    p: 2088          1016.4k   1016k     36k         driver_manager.cm
  j: 2239             348.4k    348k
    p: 2252           348.4k    348k     36k         device-name-provider.cm
  j: 2364             275.3M  275.3M
    p: 2380          1012.4k   1012k     36k         fshost.cm
    p: 6544           252.1M  252.1M     36k         /pkg/bin/blobfs
    p: 10205         9744.4k   9744k     36k         /pkg/bin/minfs
    p: 10475           12.8M   12.8M     36k         pkgfs

我們現在著重於輸出內容中的兩個資料欄:

  • TASK:指出每個項目是工作 (j) 或程序 (p) 後面接著客戶的專屬 ID。
  • NAME:這進一步說明系統內容 並在那裡運作

我們來根據這次討論的內容 目前為止:

  1. 每個程序都會連結到父項工作。有些工作有多個 作業。
  2. 所有工作都會追溯回 root 工作做為最終父項,形成樹狀結構。
  3. 在啟動期間,系統會直接在 root 工作中啟動數個程序。 大多數其他程序都是在其父項工作下啟動。
  4. 初始啟動工作完成後,許多項目的副檔名都是 .cm。這些 請參閱元件,我們稍後將進一步說明。
  5. 其中一些元件屬於核心服務,例如檔案系統 (fshost.cm) 和 住在使用者空間的驅動程式 (driver_manager.cm),與 核心。

接下來,我們要探討 Zircon 如何幫助福西亞的基礎知識 和安全性模型