原文路徑:fuchsia/docs/the-book/hub.md
hub是什麼意思?
hub是zircon 自我檢查的門戶。它使工具能夠在運行時訪問有關realms(本文翻譯爲領域)和component(本文翻譯爲組件)實例的詳細結構信息,例如names,job和process ids以及published services。
譯者注:類似於linux proc 和sysfs系統
組織形式
hub被組織爲目錄和文件樹,在運行時描述各個領域和組件實例。
hub的結構大多是只讀的。無法創建,重命名,刪除或以其他方式修改構成hub本身結構的目錄和文件。但是, 組件實例的outgoing目錄可能包括一些可變目錄,文件和服務,客戶端可以通過hub訪問它們。
譯者注:outgoing目錄是組件對外publish的目錄(裏面最重要的就是對外提供的服務)
hub的結構是可觀察的。客戶端可以觀察文件系統更改,例如正在添加或刪除目錄表示相關領域的創建或銷燬。
hub的結構受範圍限制。越深層次的hub目錄樹的範圍是限制越具體的對象。例如,在打開表示領域的目錄後,客戶端可以獲取有關領域本身、其子領域及其組件實例的信息,但它無法獲取有關領域父級的任何信息。這種結構使得更容易約束特定客戶端可以訪問的hub部分。
組織結構
hub的組織結構如下:
<realm name> / <realm id> /××× :領域目錄整體結構(包含領域相關信息的只讀目錄。根領域的目錄通常mount在root development shell中的/hub上。後面對“xxx”部分再進行細分。)
name:領域名稱(包含域的名稱的只讀文件,UTF-8,不帶填充或終結符。)
job-id:領域的job ID(一個只讀文件,包含領域job的koid,十進制ASCII,沒有填充或終止符。)
svc:領域的服務(包含此領域可用的所有服務。ls命令只顯示在該領域中直接創建的服務。)
r /×××:子領域列表(包含子領域列表的只讀目錄。)
r / <child realm name> / <child realm id> /×××:(子領域目錄整體結構信息。)
c /×××:組件實例列表(包含組件實例列表的只讀目錄。)
c / <component name> / \ <component instance id> /×××:組件實例目錄(包含有關組件的信息的只讀目錄。)
name:組件的名稱(只包含組件名稱的只讀文件,採用UTF-8,不帶填充或終止符。)
args:組件的原始命令行參數(包含組件原始命令行參數的只讀文件,採用UTF-8,不帶填充或終止符。)
url:組件的URL(包含組件url的只讀文件)
job-id:組件的作業ID(一個只讀文件,包含組件job的koid,十進制ASCII,沒有填充或終止符。多個組件實例可以在同一job中共存。組件也可以創建自己的新工作,這裏沒有反映出來。)
process-id:組件的進程ID(一個只讀文件,包含組件進程的koid,十進制ASCII,沒有填充或終止符。多個組件實例可以在同一個進程中共存。組件也可以創建自己的新進程,這裏沒有反映出來。)
system_objects:系統級組件檢查(顯示符合Inspect API的對象的目錄樹。該目錄樹由系統管理,以公開有關組件的系統級信息。)
in /×××:組件的傳入命名空間(一個目錄樹,公開由其父組件提供給組件的對象,或者由組件框架環境提供的對象。)
in / svc:組件的傳入服務目錄(包含組件可用服務的目錄(來自其父組件或組件框架)。這映射到/svc
組件自己的命名空間中。)
out /×××:組件的out目錄(包含組件已導出的對象的目錄,例如其服務。如果組件不導出任何內容,則可能不存在。可能包含讀寫對象。)
out / process public:組件的導出公共對象目錄(包含組件已導出到其主機的對象的目錄,例如其服務。可能包含讀寫對象。)
out / ctrl:組件的導出控制對象目錄(包含組件爲領域生命週期控制提供給領域管理器的對象的目錄。可能包含讀寫對象。)
out / debug:組件的導出調試對象目錄(包含組件爲調試目的而發佈的對象的目錄,例如內省文件和服務。可能包含讀寫對象。)
out / objects:組件的導出結構化對象(顯示符合Inspect API的對象的目錄樹。該目錄樹由組件本身公開,以允許檢查特定於組件的數據。)
c /×××:子組件實例列表(包含子組件實例列表的只讀目錄。這僅針對runner組件的生成。)
舉例:
拿sysmgr創建的嵌套realm爲例,其目錄結構如下:
sys/4611 |
---|
根realm的目錄結構稍微有點區別:沒有了進程號作爲的realm id,直接掛在了根shell的/hub目錄下。