资源

姓名

资源 - 地址空间权利和核算

概要

资源是一种不可变对象,用于验证对系统调用(用于创建由地址空间支持的对象或允许访问地址空间)的系统调用的访问权限。包括 vm 对象中断和 x86 ioport。

说明

资源用于限制对特定地址空间区域的访问,创建 VMO 和 IRQ 以及访问 x86 Iport 是必需的。

资源对象由一个资源种类组成,种类包含基本地址和 len 参数,这些参数用于定义资源持有者有权访问的地址空间范围。范围涵盖 base 至但不包含 base + len。这些对象一经创建便无法更改。有效的 Kind 值为 ZX_RSRC_KIND_ROOTZX_RSRC_KIND_ROOTZX_RSRC_KIND_ROOTZX_RSRC_KIND_ROOTZX_RSRC_KIND_ROOTZX_RSRC_KIND_ROOT_KIND_SYSTEM。

系统资源是一种包含其他资源的特殊情况,所有这些资源都有 lenlen。这些资源在系统资源中都有自己的基础。系统资源的有效基本值为 ZX_RSRC_SYSTEM_HYPERVISOR_BASEZX_RSRC_SYSTEM_HYPERVISOR_BASEZX_RSRC_SYSTEM_HYPERVISOR_BASEZX_RSRC_SYSTEM_HYPERVISOR_BASEZX_RSRC_SYSTEM_HYPERVISOR_BASEZX_RSRC_SYSTEM_HYPERVISOR_BASEZX_RSRC_SYSTEM_HYPERVISOR_BASEZX_RSRC_SYSTEM_HYPERVISOR_BASEXRSRC_SYSTEM_SYSTEM_SRC_SYSTEM_BASE_SYSTEM_BASE_、ZX_RSRC_SYSTEM_HYPERVISOR_BASEZX_RSRC_SYSTEM_HYPERVISOR_BASEZX_RSRC_SYSTEM_HYPERVISOR_BASE

可通过调用 zx_resource_create() 使用适当的父资源创建新资源。内核会在启动过程中创建每个种类的初始资源,并将其传递给 userboot 启动的第一个用户空间进程。

合适的父资源是根资源,或者其自身范围(从 basebase+len)的资源包含为新资源请求的范围。父资源的种类必须与所创建资源的种类匹配。 目前,独占资源不能用于创建新资源。创建后,所使用的资源父级与创建的新资源之间没有任何关系。

资源分配可以是共享的,也可以是专有的。共享资源会授予访问给定地址空间的权限,但不会专门针对资源所有者预留该地址空间。专属资源仅向专属资源的持有者授予对该区域的访问权限。专属资源范围和共享资源范围不能重叠。

系统会跟踪资源生命周期,在最后一个句柄关闭后,系统将释放相应资源。对于独占资源,这意味着给定地址范围将释放回给给定种类的资源的分配器。通过资源创建的对象不存储对资源的引用,因此不会使其保持活跃状态。

备注

资源通常是 DDK 和平台总线驱动程序专用的。目前,这意味着 ACPI 和平台总线分别持有根资源,并将更精细的资源分发给其他驱动程序。

系统通话