Zircon 是驅動 Fuchsia 的核心。它由核心和一小組用戶端空間服務、驅動程式和核心系統功能 (例如啟動) 所需的程式庫組成。
雖然 相反地,Zircon 的微核心式架構可讓 Fuchsia 將系統中執行的受信任程式碼數量減少到幾個核心函式:
- 記憶體管理
- 時段設定
- 處理序間通訊
系統呼叫
使用者空間程式碼透過 系統呼叫。Zircon 提供系統呼叫,可執行低階作業,例如:
- 記憶體管理
- 工作和程序管理
- 處理序間通訊 (IPC) 和同步
- 例外狀況處理
- 硬體支援服務 (時鐘、熵、裝置 I/O)
使用者空間處理程序會透過 libzircon.so
存取系統呼叫,libzircon.so
是一種Zircon vDSO 是 ELF 格式的共用程式庫,可讓核心對應至每個新程序的位址空間。系統會將這個程式庫視為「虛擬」程式庫因為
該物件會直接由核心映像檔公開,而不是從檔案載入。
大多數系統呼叫會直接搭配一或多個系統呼叫
帳號代碼
— 對掌握核心空間中物件的程序本機參照,
32 位元整數 (zx_handle_t
)。每個控制代碼都會宣告權限;或
右,持有者必須對控點本身或
參照的物件。
工作、程序和執行緒
Zircon 會公開三個主要核心物件,用於執行程式碼:
程序是系統功能的基礎。每個程序 功能。
Fuchsia 軟體不一定會在單一程序內執行。 工作可讓由多個程序組成的「應用程式」以單一實體的形式進行控管。
處理序間通訊
由於系統預設會隔離程序,因此核心需要提供 以安全的方式相互通訊Zircon 包含下列項目 用於處理序間通訊的核心物件類型 (IPC):
- 事件: 訊號兩個程序之間的介面。
- Socket:類似管道的串流資料傳輸。
- 串流:可尋找的串流資料傳輸,例如檔案。
- 管道:可傳遞資料和一組句柄的訊息式傳輸。
- 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:這進一步說明系統內容 並在那裡運作
讓我們根據目前的討論內容,來分析一些有趣的內容:
- 每個程序都會連結至父項工作。部分工作會有多個程序。
- 所有工作都會追溯至
root
工作,做為最終父項,形成樹狀結構。 - 在啟動期間,系統會直接將幾個程序啟動至
root
工作。大部分其他程序會在其專屬父項工作下啟動。 - 初始啟動工作完成後,許多項目都會加上
.cm
擴充功能。這些是「元件」,您稍後將進一步瞭解。 - 其中部分元件是核心服務,例如檔案系統 (
fshost.cm
) 和驅動程式 (driver_manager.cm
),這些元件位於使用者空間,與核心分開。
接下來,我們將探討 Zircon 如何啟用 Fuchsia 安全性模型的基本功能。