本文件特別探討 Fuchsia 工作的概念,特別是如何使用工作,以及工作與程序的關係。
總覽
在 Fuchsia 中,工作是整理、控管和監管程序的一種方式,這些是作業系統內資源的主要使用者。
在 Fuchsia 中,工作為「核心物件」,由以下內容組成:
- 父項工作的參照
- 一組子工作 (每個工作都有這個工作的父項)
- 一組成員程序
- 一組政策
工作是程序和其他「子項」工作的容器。工作可用來追蹤權限,以便執行核心作業,例如發出系統呼叫、追蹤和限制基本資源 (例如記憶體和 CPU) 的使用量。在 Fuchsia 中,工作會沿著工作樹狀結構向上傳播,但以由上而下的方式套用政策和配額。詳情請參閱例外狀況處理。
每個程序只能有一個工作。Fuchsia 系統上的所有工作都會形成樹狀結構,每個工作均隸屬於某個父項工作,但根工作除外 (這是無父項工作)。
根工作是由核心在啟動時建立,並傳遞至 userboot
。這是開始執行的第一個使用者空間程序。
工作與程序
Zircon 程序是傳統上程式的執行個體,也就是由一或多個執行緒執行的一組指令,以及一組資源。zx_process_create()
會在工作中建立新的程序。只有在呼叫 zx_process_start()
後,執行緒才會執行。
工作可能用來終止、取得子項程序的例外狀況或偵錯。如要建立程序,您必須將工作傳送至 zx_process_create()
。在 Fuchsia 中,如未明確授予必要的資源,程序就無法分配記憶體或通訊。
設定工作政策
您可以為空白工作設定安全性政策和/或資源政策。工作的有效政策結合了父項的有效政策與工作政策中指定的政策。
zx_job_set_policy()
系統呼叫會將工作安全性和資源政策設為空白工作。在呼叫之後,所有新的子項程序或子工作也套用了新的有效政策。
相關系統呼叫
zx_job_create()
會在工作內建立新工作;根據父項工作,建立新的子項工作物件。zx_job_set_critical()
會將程序設為對工作而言至關重要。- 當授予程序終止時,對應的工作就會終止,如同對
zx_task_kill()
呼叫的情況。退貨代碼為ZX_TASK_RETCODE_CRITICAL_PROCESS_KILL
。 zx_process_create()
會建立新的程序。zx_thread_create()
會在指定程序內建立執行緒。執行緒在呼叫zx_thread_start()
後才會開始執行。