fuchsia hub文件系統

原文路徑: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
sys/4611/r
sys/4611/name
sys/4611/job-id
sys/4611/job
sys/4611/c
sys/4611/c/crashpad_analyzer.cmx
sys/4611/c/crashpad_analyzer.cmx/8905
sys/4611/c/crashpad_analyzer.cmx/8905/name
sys/4611/c/crashpad_analyzer.cmx/8905/url
sys/4611/c/crashpad_analyzer.cmx/8905/args
sys/4611/c/crashpad_analyzer.cmx/8905/job-id
sys/4611/c/crashpad_analyzer.cmx/8905/process-id
sys/4611/c/crashpad_analyzer.cmx/8905/system_objects
sys/4611/c/crashpad_analyzer.cmx/8905/system_objects/fuchsia.inspect.Inspect
sys/4611/c/crashpad_analyzer.cmx/8905/in
sys/4611/c/crashpad_analyzer.cmx/8905/in/svc
sys/4611/c/crashpad_analyzer.cmx/8905/in/svc/fuchsia.net.SocketProvider
sys/4611/c/crashpad_analyzer.cmx/8905/in/svc/fuchsia.logger.LogSink
sys/4611/c/crashpad_analyzer.cmx/8905/out
sys/4611/c/crashpad_analyzer.cmx/8905/out/public
sys/4611/c/crashpad_analyzer.cmx/8905/out/public/fuchsia.crash.Analyzer
sys/4611/c/crashpad_analyzer.cmx/8905/out/debug
sys/4611/c/crashpad_analyzer.cmx/8905/out/ctrl
sys/4611/svc
sys/4611/svc/fuchsia.sys.Loader
sys/4611/svc/fuchsia.sys.Environment
sys/4611/svc/fuchsia.sys.Launcher
sys/4611/svc/fuchsia.process.Launcher
sys/4611/svc/fuchsia.process.Resolver
sys/4611/svc/fuchsia.crash.Analyzer

根realm的目錄結構稍微有點區別:沒有了進程號作爲的realm id,直接掛在了根shell的/hub目錄下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章