NAME
資源:位址空間權利和會計
概要
資源是一種不可變動的物件,可用於驗證系統呼叫的存取權;系統呼叫會建立由位址空間支援的物件,或允許存取位址空間。包括 vm 物件、中斷和 x86 ioport。
說明
資源可用於對位址空間特定區域的存取閘門,並且是建立 VMO 和 IRQ 以及存取 x86 ioport 所需的資源。
資源物件由單一資源「種類」包含,其中 base 位址和 len 參數,定義了資源持有者有權存取的位址空間範圍。範圍涵蓋「base」最大範圍,但不含「base」+「len」。這些物件在建立後無法變更。有效的種類值為 ZX_RSRC_KIND_ROOT、ZX_RSRC_KIND_ROOT、ZX_RSRC_KIND_ROOT、ZX_RSRC_KIND_ROOT、ZX_RSRC_KIND_ROOT 和 ZX_RSRC_KIND_ROOT。
系統資源是包含其他資源的特殊案例,所有資源都有「智慧鏡頭」len。這些資源在系統資源中都有自己的基礎。系統資源的有效 base 值為 ZX_RSRC_SYSTEM_HYPERVISOR_BASE、ZX_RSRC_SYSTEM_VMEX_BASE、ZX_RSRC_SYSTEM_DEBUG_BASE、ZX_RSRC_SYSTEM_SRC_SRC。
呼叫 zx_resource_create()
時,您可以使用適當的父項資源建立新資源。每個種類的初始資源會在啟動期間由核心建立,並交給使用者啟動程序啟動的第一個使用者空間程序。
合適的父項資源是根資源,或者,資源本身的範圍從 base 到 base+len,會包含針對新資源要求的範圍。父項資源的「種類」必須與要建立的資源「種類」相符。目前,無法使用專屬資源來建立新的資源。建立後,使用的資源父項和新建的資源之間沒有任何關係。
資源分配可以「共用」或「獨佔」。共用資源會授予特定位址空間的存取權,但不會只為該資源的擁有者保留該位址空間。專屬資源只會將存取權授予專屬資源的持有者。專屬和共用資源範圍不得重疊。
系統會追蹤資源的生命週期,並釋放最後一個關閉的控制代碼。如果是專屬資源,則指定的位址範圍將釋出給指定「種類」資源的配置器。透過資源建立的物件不會保留對資源的參照,也不會保持有效狀態。
記事
資源通常僅供 DDK 和平台匯流排驅動程式使用。目前,這表示 ACPI 和平台匯流排分別保存根資源,以及將更精細的資源交給其他驅動程式。