Zircon 是驅動 Fuchsia 的核心。它由核心和一小組用戶端空間服務、驅動程式和核心系統功能 (例如啟動) 所需的程式庫組成。
Zircon反之,Zircon 類微核心的架構可讓 Fuchsia 將系統中執行的受信任程式碼減少成幾個核心功能:
- 記憶體管理
- 時段設定
- 處理序間通訊
 
 
系統呼叫
使用者空間程式碼會透過系統呼叫與核心空間中的物件互動。Zircon 包含可執行低層級作業的系統呼叫,例如:
- 記憶體管理
- 工作和程序管理
- 處理序間通訊 (IPC) 和同步
- 例外狀況處理
- 硬體支援服務 (時鐘、熵、裝置 I/O)
libzircon.soZircon vDSO 是 ELF 格式的共用資料庫,每個新程序都會將核心對應至位址空間。這個程式庫會視為「虛擬」,因為直接由核心映像檔公開,而不是從檔案載入。
大多數系統呼叫會直接與一或多個
工作、程序和執行緒
Zircon 公開三個主要核心物件來執行程式碼:
 
 
程序是系統功能的基礎。每個程序都會透過其保留的各種處理碼授予一組功能。
Fuchsia 軟體不一定會在單一程序的限制範圍內執行。工作允許由多個程序組成的「應用程式」控制為單一實體。
處理序間通訊
由於程序預設為隔離狀態,核心必須提供一種方法,讓程序彼此安全地通訊。Zircon 包含下列核心物件類型,用於處理程序間通訊 (IPC):
- 事件:兩個程序之間的信號介面。
- Socket:串流資料傳輸,類似管道。
- 串流:可尋找的串流資料傳輸,例如檔案。
- 管道:以訊息為基礎的傳輸功能,能夠傳遞資料和一組控制代碼。
- FIFO:共用記憶體存取的控制平面,針對小型資料酬載進行最佳化。
在這類物件中,管道特別適合協助啟動新程序,因為管道能將帳號代碼 (進而功能) 轉移至其他程序。
管道有兩個端點帳號代碼,每個帳號代碼都由個別程序擁有。只有擁有者可以讀取或寫入訊息,但端點的擁有權可從一個程序轉移至另一個程序。當句柄寫入管道時,系統會將其從傳送程序中移除。當從管道讀取含有句柄的訊息時,系統會將句柄新增至接收程序。
 
 
Zircon 管道是服務層級 IPC 通訊協定的基本元素,這些通訊協定由 FIDL 通訊協定是 Fuchsia 程式使用的 IPC 主要方法。稍後,您將進一步瞭解如何建立及使用 FIDL 通訊協定。
練習:工作和程序
讓我們在執行中的系統上,瞭解這些基本概念。在本練習中,您將瞭解工作和程序如何互動,形成樹狀結構。
啟動模擬器
如果您尚未啟動執行個體,請啟動模擬器:
ffx emu start --headless
啟動完成後,模擬器會輸出以下訊息並傳回:
Logging to "$HOME/.local/share/Fuchsia/ffx/emu/instances/fuchsia-emulator/emulator.log"
Waiting for Fuchsia to start (up to 60 seconds)........
Emulator is ready.
傾印程序清單
連線至裝置殼層提示,並使用 ps 指令傾印執行中工作和程序的清單。
fx shell 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:提供系統正在執行的部分的詳細資訊。
讓我們根據目前的討論內容,來分析一些有趣的內容:
- 每個程序都會連結到父項工作。有些工作有多個程序。
- 所有工作都會追溯至 root工作,做為最終父項,形成樹狀結構。
- 在啟動期間,系統會直接在 root工作中啟動數個程序。大部分其他程序會在各自的父項工作下啟動。
- 初始啟動工作完成後,許多項目都會加上 .cm擴充功能。這些是「元件」,您稍後將進一步瞭解。
- 其中部分元件是核心服務,例如檔案系統 (fshost.cm) 和驅動程式 (driver_manager.cm),這些元件位於使用者空間,與核心分開。
接下來,我們將探討 Zircon 如何啟用 Fuchsia 安全性模型的基本功能。