fuchsia hub文件系统

    xiaoxiao2023-10-16  21

    原文路径: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目录下。

    最新回复(0)