概览
本文档简要介绍了组件和组件框架的概念。
什么是沙盒化?
沙盒是一种安全机制,用于在运行时将程序彼此隔离。在 Fuchsia 中,所有软件都处于沙盒化环境中。程序在最初创建时无法执行任何操作,甚至无法分配内存。该程序依赖于其创建者提供执行所需的功能。这种隔离属性允许 Fuchsia 采用最小权限原则:仅向程序提供执行所需的最小一组功能。
组件框架
组件框架 (CF) 由描述和运行组件以及协调组件之间的通信和资源访问所需的核心概念、工具、API、运行时和库组成。
组件框架包括:
- CF 概念,包括组件、组件清单、运行程序、realm、环境、功能和解析器。
component_manager
进程,用于协调组件之间的通信和资源共享。- 由
component_manager
实现或由其他组件实现并由component_manager
用于协调的 FIDL API。 - 用于构建、执行和测试组件的开发者工具。
- 供组件与系统交互使用的语言专用库。(示例)
- 用于编写单元测试和集成测试的测试工具和库,用于测试一个或多个组件。(示例)
功能
由于 Fuchsia 是基于功能的操作系统,因此组件通过使用 capability 将对资源的访问权限与一组权限相结合,既提供了一种访问权限控制机制,又提供了一种与资源交互的方式。
为了支持当今产品中存在的复杂软件组成,组件框架提供了基于 Zircon 构建的独特capability 类型 使用特定 FIDL 协议。
组件框架会使用组件声明来组装组件,这些声明描述了组件正常运行所需的功能。
组件可以使用 fuchsia.io.Directory
协议发现其命名空间中的可用功能。
在运行时,每个组件都会收到其命名空间以及 Directory
通道服务器端的句柄。此 Directory
渠道称为
出站目录。
通过传出目录,组件的可执行文件可使其提供的任何功能可检测到。
组件框架通过称为 虽然大多数 capability 会路由到组件实例,但 runner 和 resolver capability 会路由到环境。 环境会为分配到的领域配置框架行为。
补充阅读材料:
组件
组件是 Fuchsia 中运行的软件的基本构建块。每个组件都是一个可组合、沙盒化的模块,可通过功能与其他组件交互。
从本质上讲,组件由以下部分组成:
组件框架依赖于组件解析器从其来源检索组件。解析器将组件网址作为输入,并生成组件清单以及(可选)对软件包字节的访问机制作为输出。
包含可执行程序的组件可以通过组件运行程序指定向组件框架提供的任何运行时(例如原始进程或虚拟机)。 运行程序会使用清单和软件包的部分内容,并为组件的二进制文件提供执行方式。
解析器和运行程序本身就是功能,它们会直接与框架交互以扩展其功能。组件可以实现这些功能,以添加对新组件源和运行时的支持。
补充阅读材料:
组合
组件及其子级称为 集体父母和孩子所有单个组件之间的关系被称为 组件实例树 。 您经常会看到标识名以类似 POSIX 的路径字符串表示。
补充阅读材料:
生命周期
组件会经历以下生命周期状态:
- 发现
- 已开始
- 已停止
- 已销毁
在运行时。同样,组件会通过从组件清单中的静态子项列表中移除而被隐式销毁,或通过在运行时从组件集合中移除而被显式销毁。
启动或停止组件时,component_manager
会与适当的运行程序协调,以执行或终止组件的可执行文件。
补充阅读材料:
-
运行组件所需的早期启动软件除外。 ↩