“等等,”读者说,“我不知道任何东西的实际运作方式!”没错!现在,我们将目标的抽象实现与具体实现相关联。
Power DAG
在功耗框架中,我们的有向无环图(“DAG”)是功耗等级的 DAG。每种电源级别都描述了资源的一种状态。资源始终处于单一功率级别。
为方便起见,资源的电源级别会联接到一个有序集,称为电源元素。许多电源元素只有两种电源级别,即开启和关闭。电源元素的关闭级别不得有任何依赖项。
电源元素可以具有开启和关闭级别以外的其他级别。在功耗框架中,更高阶的功耗级别取决于更低阶的任何功耗级别。
如果我们考虑网络堆栈功耗元素,则可以为其指定“MAX”级别。“MAX”具有“ON”级别的所有要求(即网络驱动程序处于开启状态),但“MAX”可能还需要网络堆栈用于高吞吐量加密函数的特殊协处理器处于联机状态。
现在,如果网络驱动程序也有一个“MAX”级别,网络堆栈的“MAX”级别依赖于该级别,该怎么办?
我们曾说过,网络堆栈的“MAX”级别取决于网络堆栈的“ON”级别。这意味着,网络堆栈的“MAX”级别间接取决于网络驱动程序的“ON”级别,并且网络堆栈的“MAX”级别直接取决于网络驱动程序的“MAX”级别。这是否意味着电源框架会告知网络驱动程序同时处于“开启”和“最大”状态?否。功耗框架始终会选择满足所有当前要求的功耗元素的功耗级别。
因此,有时提供多个功率级别并对其进行排序会很有用。如果电源元素只能有两种状态(即开启和关闭),这会给电源资源所有者带来负担,因为他们需要在表示资源状态的元素之间明确创建依赖项,而使用电源等级时,更高级别对更低级别的依赖关系是隐含的,并且需要配置的内容更少。