進階用法

盡量減少喚醒租約取得次數,且不設逾時時間

假設您有 Driver X,可接收可喚醒系統的中斷。驅動程式 X 接著會對中斷進行一些處理,並將事件傳遞至驅動程式 Y。理想情況下,Driver X 只會在實際喚醒系統的中斷到達時,或 Driver X 觀察到系統開始暫停且不知道 Driver Y 是否已處理先前的事件時,才取得喚醒租約。

對於下列兩種方法,我們需要觀察系統何時暫停和恢復。如要瞭解如何觀察這些系統轉換,請參閱「對暫停或重新啟動採取行動」。

頻帶內租用

首先,假設 Driver X 和 Driver Y 使用相同的通訊協定,其中訊息可包含事件資料、喚醒租約,或事件資料和喚醒租約。在 FIDL 中,我們會將這項資訊表示為含有喚醒租約和事件資料項目的表格。

當 Driver X 在系統暫停時收到中斷時,會執行以下操作: * 建立喚醒租約 * 確認中斷 * 針對收到的最後一個事件遞增序號 * 針對建立喚醒租約時的最後一個事件遞增序號 * 傳送事件和喚醒租約給 Driver Y

當 Driver X 在系統恢復 (即未暫停) 時收到事件時,會執行以下操作: * 確認中斷 * 增加收到的最後一個事件序號 * 傳送事件給 Driver Y

當 Driver X 觀察到系統開始暫停時: * 比較收到的最後一個事件序號與上次建立的喚醒租約序號,如果不相符,則: * 建立喚醒租約 * 將喚醒租約傳送至 Driver Y

Driver Y 會接收訊息,如果訊息含有喚醒租約,Driver Y 會保留該訊息,直到處理 Driver X 的最新事件為止。

非頻寬租用

首先假設 Driver X 和 Driver Y 使用的是只談論其網域事件的通訊協定,並使用不同的通訊協定 (或單一通訊協定的不同方法) 傳遞喚醒權杖。

當 Driver X 在系統暫停時收到中斷事件時: * Driver X: * 建立喚醒租約 * 回應中斷事件 * 針對收到的最後一個事件遞增序號 * 針對建立喚醒租約時的最後一個事件遞增序號 * 傳送事件給 Driver Y * 傳送喚醒租約和序號給 Driver Y * Driver Y (請注意,它可以以任一順序接收這兩則訊息): * 收到事件: * 處理事件 * 遞增上次收到的序號 * 收到喚醒租約和序號: * 保留喚醒租約,直到上次看到的序號與租約的序號相符為止

當 Driver X 在系統復原 (即未暫停) 時收到事件: * Driver X: * 回應中斷 * 針對收到的最後一個事件遞增序號 * 將事件傳送至 Driver Y * Driver Y: * 收到並處理事件 * 遞增上次收到的序號

當 Driver X 觀察到系統開始暫停時: * Driver X: * 比較收到的最後一個事件序號與上次建立的喚醒租約號碼,如果不相符,則: * 建立喚醒租約 * 更新上次建立喚醒租約的事件序號,以便與收到的最後一個事件序號相符 * 傳送喚醒租約和序號給 Driver Y * Driver Y: * 收到喚醒租約和序號 * 保留喚醒租約,直到上次看到的序號與租約的序號相符