環境

環境提供一種方法,可設定架構在realm中為元件做出的特定選擇。元件資訊清單可定義環境,並將其指派給子項領域。除非某些子領域覆寫了環境,否則環境會套用至元件執行個體的整個領域 (請參閱「傳播」)。

屬性

您可以透過環境設定領域的下列行為:

跑者

元件架構不受執行階段影響,可以支援新的執行階段環境和程式語言,且不需要變更元件管理員或其他元件。Runner 會提供擴充點,讓元件與元件管理員互動,並為 Fuchsia 新增執行階段支援。以下是一些執行程式:

  • ELF 執行器會執行編譯為 ELF 檔案格式的二進位檔。
  • Dart AOT 執行元件會為 Dart 程式 (例如 VM) 提供執行階段。
  • Chromium 網路執行程式會為以網頁形式實作的元件提供執行階段。

元件管理員會識別要執行的內容,並將執行作業的方式委派給執行元件。Runner 實作項目可以自由選擇執行元件的適當策略,包括:

  • 為元件啟動新程序。
  • 在虛擬機器中隔離元件。
  • 在與執行程式相同的程序中執行元件。
  • 在遠端電腦上以工作形式執行元件。

如要進一步瞭解如何使用及實作執行項,請參閱「執行項功能」。

解析器

元件解析器會代表元件與元件管理工具互動,以便從指定的元件解析子項。 解析器會使用特定網址配置 (httpfuchsia-pkg 等) 註冊,並提供實作,以便從所需網址擷取元件並傳回

如果要解析的元件具有相關聯的套件,解析器也會傳回代表套件目錄的 fuchsia.io.Directory 句柄。

如要進一步瞭解如何使用及實作解析器,請參閱解析器功能

宣告

環境宣告新增至元件資訊清單,藉此定義新環境。

如要使用環境,您必須將其指派給子項或集合。請參閱「傳播」一節。

環境支援兩種擴充功能模式:REALMNONE

  • REALM:環境會從指派給此元件的環境 (「父項環境」) 繼承屬性。任何新屬性都會新增至從父環境繼承的屬性。任何與上層環境重疊的屬性都會覆寫上層環境。
  • NONE:環境一開始是空的,沒有初始屬性。

傳播

元件執行個體會透過下列任一方式指派環境:

  • 子項集合沒有設定 environment。在這種情況下,它會收到父項的環境。這是最常見的情況。
  • 子項集合會設定 environment,這會參照此元件定義的其中一個 environments

元件管理員會為根元件指派環境。包括引導程序解析器、ELF 執行程式和預設設定選項。

環境與能力轉送

環境的語意與能力路由相反。使用能力轉送時,每個元件都必須在從供應器到使用者的路徑中,明確公開提供能力。能力轉送的明確性質可讓您輕鬆確保元件不會取得不應有的功能存取權,進而維持最低權限原則

不過,有些設定選項不適合逐一設定。舉例來說,假設您是跑者,幾乎所有元件都需要使用執行元件,但定義新的執行元件並不常見,至少不如定義通訊協定能力那麼常見。此外,對執行元件的存取權並不會讓元件獲得太多特權,因為元件架構會調解對執行元件通訊協定的存取權,而元件無法直接使用該通訊協定。因此,執行元件功能會在環境中註冊,讓該環境指派的領域中的任何元件都能使用這些功能 (除非某些子領域決定在執行元件缺席的情況下設定新環境)。